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
@@ -8,7 +8,8 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.collectRecorderSnapshots = exports.servedSnapshot = void 0;
11
- const freeze_js_1 = require("../capture/freeze.js");
11
+ const foottrace_1 = require("foottrace");
12
+ const write_1 = require("foottrace/write");
12
13
  const devMode_js_1 = require("../devMode.js");
13
14
  const servedSubflowResults_js_1 = require("../engine/handlers/servedSubflowResults.js");
14
15
  const snapshot_js_1 = require("../recorder/snapshot.js");
@@ -29,7 +30,7 @@ function servedSnapshot(traverser, observers, options) {
29
30
  // NOTE: deepFreeze (capture/freeze.ts — the one walk) cannot reach
30
31
  // Map/Set INTERNALS (`map.set()` on the frozen clone won't throw) and
31
32
  // skips typed arrays. The CLONE still isolates the engine.
32
- snapshot.sharedState = (0, freeze_js_1.deepFreeze)(structuredClone(snapshot.sharedState));
33
+ snapshot.sharedState = (0, write_1.deepFreeze)(structuredClone(snapshot.sharedState));
33
34
  }
34
35
  const sfResults = traverser.getSubflowResults();
35
36
  if (sfResults.size > 0) {
@@ -61,8 +62,8 @@ function servedLog(snapshot) {
61
62
  const { initialState } = snapshot;
62
63
  return {
63
64
  ...snapshot,
64
- commitLog: Object.freeze(snapshot.commitLog.map(freeze_js_1.serveRecord)),
65
- ...(initialState === undefined ? {} : { initialState: (0, freeze_js_1.serveRecord)(initialState) }),
65
+ commitLog: Object.freeze(snapshot.commitLog.map(foottrace_1.serveRecord)),
66
+ ...(initialState === undefined ? {} : { initialState: (0, foottrace_1.serveRecord)(initialState) }),
66
67
  };
67
68
  }
68
69
  /**
@@ -109,4 +110,4 @@ function collectRecorderSnapshots(observers) {
109
110
  return out;
110
111
  }
111
112
  exports.collectRecorderSnapshots = collectRecorderSnapshots;
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxvREFBK0Q7QUFDL0QsOENBQTBDO0FBQzFDLHdGQUFrRjtBQUlsRix5REFBcUQ7QUFLckQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsU0FBdUMsRUFDdkMsU0FBdUIsRUFDdkIsT0FBOEI7SUFFOUIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFvQixDQUFDLENBQUM7SUFDOUUsSUFBSSxJQUFBLHNCQUFTLEdBQUUsRUFBRSxDQUFDO1FBQ2hCLGlFQUFpRTtRQUNqRSx1RUFBdUU7UUFDdkUseURBQXlEO1FBQ3pELDJCQUEyQjtRQUMzQixrRUFBa0U7UUFDbEUsOERBQThEO1FBQzlELG1FQUFtRTtRQUNuRSxzRUFBc0U7UUFDdEUsMkRBQTJEO1FBQzNELFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBQSxzQkFBVSxFQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDaEQsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLHdFQUF3RTtRQUN4RSx3REFBd0Q7UUFDeEQsNEVBQTRFO1FBQzVFLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBQSw4Q0FBb0IsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxRQUFRLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO0lBQ3pDLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsZ0VBQWdFO0lBQ2hFLDBDQUEwQztJQUMxQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixRQUFRLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUF2Q0Qsd0NBdUNDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxRQUF5QjtJQUMxQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx1QkFBVyxDQUFDLENBQW1CO1FBQy9FLEdBQUcsQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUEsdUJBQVcsRUFBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0tBQ25GLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFNBQXVCO0lBQzlELE1BQU0sR0FBRyxHQUF1QixFQUFFLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQStCLEVBQVEsRUFBRTtRQUN4RCxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPO1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFBLHdCQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQztJQUNGLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLGNBQWM7UUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsYUFBYTtRQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFmRCw0REFlQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc25hcHNob3Qg4oCUIHdoYXQgYEZsb3dDaGFydEV4ZWN1dG9yLmdldFNuYXBzaG90KClgIHNlcnZlcyAoRjkpLlxuICpcbiAqIFRoZSB0cmF2ZXJzZXIncyBydW50aW1lIHNuYXBzaG90LCBwbHVzIHdoYXQgb25seSB0aGUgZXhlY3V0b3Iga25vd3M6IHRoZVxuICogc2VydmVkIHN1YmZsb3cgcmVzdWx0cyAoZWFjaCBzdWJmbG93J3Mgb3duIG1pcnJvciB1bmRlciBgcmVkYWN0OiB0cnVlYCksIG9uZVxuICogcmVjb3JkZXIgcm93IHBlciByZWNvcmRlciBpZCwgYW5kIHRoZSBkZWZlcnJlZCB0aWVyJ3MgYWNjb3VudGluZy5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRnJlZXplLCBzZXJ2ZVJlY29yZCB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgc2VydmVkU3ViZmxvd1Jlc3VsdHMgfSBmcm9tICcuLi9lbmdpbmUvaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0VHJhdmVyc2VyIH0gZnJvbSAnLi4vZW5naW5lL3RyYXZlcnNhbC9GbG93Y2hhcnRUcmF2ZXJzZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICcuLi9tZW1vcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgY29weUJ1bmRsZSB9IGZyb20gJy4uL3JlY29yZGVyL3NuYXBzaG90LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuT2JzZXJ2ZXJzIH0gZnJvbSAnLi9hdHRhY2guanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgc25hcHNob3QuIGBzaGFyZWRTdGF0ZWAgaXMgdGhlIExJVkUgdmlldyBpbiBwcm9kdWN0aW9uICh6ZXJvXG4gKiBjb3B5KTsgaW4gZGV2IG1vZGUgaXQgaXMgYSBkZWVwLWZyb3plbiBDTE9ORSwgc28gYSBjb25zdW1lciBtdXRhdGlvbiB0aHJvd3NcbiAqIGluc3RlYWQgb2YgY29ycnVwdGluZyBlbmdpbmUgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZWRTbmFwc2hvdChcbiAgdHJhdmVyc2VyOiBGbG93Y2hhcnRUcmF2ZXJzZXI8YW55LCBhbnk+LFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgb3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9LFxuKTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3Qgc25hcHNob3QgPSBzZXJ2ZWRMb2codHJhdmVyc2VyLmdldFNuYXBzaG90KG9wdGlvbnMpIGFzIFJ1bnRpbWVTbmFwc2hvdCk7XG4gIGlmIChpc0Rldk1vZGUoKSkge1xuICAgIC8vIERldi1tb2RlIG11dGF0aW9uIGd1YXJkOiBmcmVlemUgYSBDTE9ORSwgbmV2ZXIgdGhlIGxpdmUgZW5naW5lXG4gICAgLy8gc3RhdGUg4oCUIGBzbmFwc2hvdC5zaGFyZWRTdGF0ZWAgSVMgU2hhcmVkTWVtb3J5J3MgY3VycmVudCBnZW5lcmF0aW9uLFxuICAgIC8vIHdob3NlIHVuY2hhbmdlZCBzdWJ0cmVlcyBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlc1xuICAgIC8vIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICAgIC8vIFByb2R1Y3Rpb24gc3RheXMgemVyby1jb3B5OyBjbG9uZS1hbHdheXMgaXMgYSBtZWFzdXJlZCBkZWNpc2lvblxuICAgIC8vIGRlZmVycmVkIHVudGlsIHRoZSBiZW5jaCBzYXlzIGl0J3MgYWZmb3JkYWJsZSAoQkFDS0xPRyAjOCkuXG4gICAgLy8gTk9URTogZGVlcEZyZWV6ZSAoY2FwdHVyZS9mcmVlemUudHMg4oCUIHRoZSBvbmUgd2FsaykgY2Fubm90IHJlYWNoXG4gICAgLy8gTWFwL1NldCBJTlRFUk5BTFMgKGBtYXAuc2V0KClgIG9uIHRoZSBmcm96ZW4gY2xvbmUgd29uJ3QgdGhyb3cpIGFuZFxuICAgIC8vIHNraXBzIHR5cGVkIGFycmF5cy4gVGhlIENMT05FIHN0aWxsIGlzb2xhdGVzIHRoZSBlbmdpbmUuXG4gICAgc25hcHNob3Quc2hhcmVkU3RhdGUgPSBkZWVwRnJlZXplKHN0cnVjdHVyZWRDbG9uZShzbmFwc2hvdC5zaGFyZWRTdGF0ZSkpO1xuICB9XG4gIGNvbnN0IHNmUmVzdWx0cyA9IHRyYXZlcnNlci5nZXRTdWJmbG93UmVzdWx0cygpO1xuICBpZiAoc2ZSZXN1bHRzLnNpemUgPiAwKSB7XG4gICAgLy8gVW5kZXIgYHJlZGFjdDogdHJ1ZWAgZWFjaCBzdWJmbG93J3MgYGdsb2JhbENvbnRleHRgIGlzIGl0cyBvd24gbWlycm9yXG4gICAgLy8gKDkuMjAuMCkg4oCUIHNlcnZlZCwgbmV2ZXIgd3JpdHRlbiBpbnRvIHRoZSByZWNvcmQgKHNlZVxuICAgIC8vIGVuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy50cykuIFBsYWluOiB0aGUgcmVjb3JkcyBhcyB0aGV5IGFyZS5cbiAgICBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyA9IHNlcnZlZFN1YmZsb3dSZXN1bHRzKHNmUmVzdWx0cywgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyU25hcHNob3RzID0gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVycyk7XG4gIGlmIChyZWNvcmRlclNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgc25hcHNob3QucmVjb3JkZXJzID0gcmVjb3JkZXJTbmFwc2hvdHM7XG4gIH1cblxuICAvLyBSRkMtMDAxIEJsb2NrIDk6IHRoZSBkZWZlcnJlZC1vYnNlcnZlciBhY2NvdW50aW5nIHN1cmZhY2UuIFByZXNlbnRcbiAgLy8gT05MWSB3aGVuIGEgZGVmZXJyZWQgb2JzZXJ2ZXIgd2FzIGF0dGFjaGVkIG9uIHRoaXMgZXhlY3V0b3Ig4oCUXG4gIC8vIHplcm8tY29zdCBkaXNjaXBsaW5lIGZvciBldmVyeW9uZSBlbHNlLlxuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIHNuYXBzaG90Lm9ic2VydmVyU3RhdHMgPSBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmdldFN0YXRzKCk7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIGNvbW1pdCBsb2cgYW5kIHRoZSBmb2xkIGJhc2UgYXMgYSByZWFkZXIgbWF5IGhvbGQgdGhlbSAoOS40NC4yKTogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlXG4gKiBpcyBzZXJ2ZWQgYXMgaXRzZWxmOyBvbmUgaG9sZGluZyB3aGF0IGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUsIGEgTWFwLCBhIGJ1ZmZlciDigKYg4oCUIGFzIGEgY29weVxuICogb2YgaXRzIG9wZW4gcGF0aHMsIHRoZSByZWFkZXIncyBvd24gKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBzZXJ2ZVJlY29yZGApLiBIZXJlLCBhdCB0aGUgcHVibGljIGRvb3I6XG4gKiB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IG9mIGEgbG9nIChhIHN1YmZsb3cgbW91bnQncykgaXMgbm90IHNlcnZlZCwgc28gdGhlIHJ1biBwYXlzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHNlcnZlZExvZyhzbmFwc2hvdDogUnVudGltZVNuYXBzaG90KTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3QgeyBpbml0aWFsU3RhdGUgfSA9IHNuYXBzaG90O1xuICByZXR1cm4ge1xuICAgIC4uLnNuYXBzaG90LFxuICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZShzbmFwc2hvdC5jb21taXRMb2cubWFwKHNlcnZlUmVjb3JkKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgLi4uKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGluaXRpYWxTdGF0ZTogc2VydmVSZWNvcmQoaW5pdGlhbFN0YXRlKSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGB0b1NuYXBzaG90KClgIGJ1bmRsZXMgZnJvbSBldmVyeSBhdHRhY2hlZCByZWNvcmRlciDigJQgT05FIGVudHJ5XG4gKiBwZXIgcmVjb3JkZXIgaWQsIGFjcm9zcyBhbGwgY2hhbm5lbHMgYW5kIGJvdGggZGVsaXZlcnkgdGllcnMuXG4gKlxuICogVGhlIGRlZHVwZSBpcyBsb2FkLWJlYXJpbmcsIG5vdCB0aWRpbmVzcy4gQSByZWNvcmRlciB0aGF0IGltcGxlbWVudHMgYVxuICogc2hhcmVkLW5hbWUgaG9vayAoYG9uRXJyb3JgIC8gYG9uUGF1c2VgIC8gYG9uUmVzdW1lYCDigJQgZGVjbGFyZWQgb24gQk9USFxuICogdGhlIHNjb3BlIGFuZCBmbG93IGludGVyZmFjZXMpIGlzIGxlZ2l0aW1hdGVseSByZWdpc3RlcmVkIG9uIEJPVEggaW5saW5lXG4gKiBsaXN0cyBieSBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAsIGFuZCB0aGF0IGlzIGJ5IGRlc2lnbjogZWFjaCBjaGFubmVsXG4gKiBjYWxscyB0aGUgaG9vayB3aXRoIGl0cyBvd24gcGF5bG9hZCB2YXJpYW50LiBgTWV0cmljUmVjb3JkZXIub25QYXVzZWAgaXNcbiAqIHRoZSBldmVyeWRheSBjYXNlLiBXYWxraW5nIHRoZSBsaXN0cyB3aXRob3V0IGEgc2hhcmVkIGBzZWVuYCBzZXQgdHVybmVkXG4gKiB0aGF0IGludG8gYSBEVVBMSUNBVEVEIHNuYXBzaG90IGVudHJ5IChzYW1lIGlkIHR3aWNlKSwgd2hpY2ggYnJlYWtzIGV2ZXJ5XG4gKiBjb25zdW1lciB0aGF0IGluZGV4ZXMgYHNuYXBzaG90LnJlY29yZGVyc2AgYnkgaWQuXG4gKlxuICogT3JkZXJpbmcgaXMgc2NvcGUgbGlzdCDihpIgZmxvdyBsaXN0IOKGkiBkZWZlcnJlZCB0aWVyLCBhbmQgdGhlIEZJUlNUIGJ1bmRsZVxuICogZm9yIGFuIGlkIHdpbnMuIEEgcmVjb3JkZXIgd2l0aCBubyBgdG9TbmFwc2hvdGAgbmV2ZXIgY2xhaW1zIGFuIGlkLCBzbyBpdFxuICogY2Fubm90IHNoYWRvdyBhIHNhbWUtaWQgcmVjb3JkZXIgdGhhdCBkb2VzIGhhdmUgb25lLlxuICpcbiAqIFRoZSByb3cgaXMgUkVCVUlMVCBmaWVsZCBieSBmaWVsZCBieSB0aGUgb25lIGNvcGllciAoYHJlY29yZGVyL3NuYXBzaG90LnRzXG4gKiDCtyBjb3B5QnVuZGxlYCwgc2hhcmVkIHdpdGggYENvbXBvc2l0ZVJlY29yZGVyYCkgcmF0aGVyIHRoYW4gc3ByZWFkLCBzbyBhXG4gKiByZWNvcmRlciBjYW5ub3Qgc211Z2dsZSBhbiBgaWRgIG9mIGl0cyBvd24gY2hvb3NpbmcgaW50byB0aGUgc25hcHNob3QgKHRoZVxuICogaWQgaXMgdGhlIGV4ZWN1dG9yJ3MsIGFuZCBjb25zdW1lcnMgaW5kZXggYnkgaXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzKTogUmVjb3JkZXJTbmFwc2hvdFtdIHtcbiAgY29uc3Qgb3V0OiBSZWNvcmRlclNuYXBzaG90W10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBjb2xsZWN0ID0gKHI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoIXIudG9TbmFwc2hvdCB8fCBzZWVuLmhhcyhyLmlkKSkgcmV0dXJuO1xuICAgIHNlZW4uYWRkKHIuaWQpO1xuICAgIG91dC5wdXNoKGNvcHlCdW5kbGUoci5pZCwgci50b1NuYXBzaG90KCkpKTtcbiAgfTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5zY29wZVJlY29yZGVycykgY29sbGVjdChyKTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5mbG93UmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLnNjb3BlTGlzdFJlY29yZGVycygpKSBjb2xsZWN0KHIpO1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmZsb3dMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCx5Q0FBd0M7QUFDeEMsMkNBQTZDO0FBRTdDLDhDQUEwQztBQUMxQyx3RkFBa0Y7QUFHbEYseURBQXFEO0FBS3JEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFNBQXVDLEVBQ3ZDLFNBQXVCLEVBQ3ZCLE9BQThCO0lBRTlCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQyxDQUFDO0lBQzlFLElBQUksSUFBQSxzQkFBUyxHQUFFLEVBQUUsQ0FBQztRQUNoQixpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLDhEQUE4RDtRQUM5RCxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUEsa0JBQVUsRUFBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUEsOENBQW9CLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakMsUUFBUSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUN6QyxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLGdFQUFnRTtJQUNoRSwwQ0FBMEM7SUFDMUMsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsUUFBUSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBdkNELHdDQXVDQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxTQUFTLENBQUMsUUFBeUI7SUFDMUMsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxPQUFPO1FBQ0wsR0FBRyxRQUFRO1FBQ1gsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQVcsQ0FBQyxDQUFtQjtRQUMvRSxHQUFHLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFBLHVCQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztLQUNuRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxTQUF1QjtJQUM5RCxNQUFNLEdBQUcsR0FBdUIsRUFBRSxDQUFDO0lBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUErQixFQUFRLEVBQUU7UUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQUUsT0FBTztRQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBQSx3QkFBVSxFQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUM7SUFDRixLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxjQUFjO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLGFBQWE7UUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBZkQsNERBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHNuYXBzaG90IOKAlCB3aGF0IGBGbG93Q2hhcnRFeGVjdXRvci5nZXRTbmFwc2hvdCgpYCBzZXJ2ZXMgKEY5KS5cbiAqXG4gKiBUaGUgdHJhdmVyc2VyJ3MgcnVudGltZSBzbmFwc2hvdCwgcGx1cyB3aGF0IG9ubHkgdGhlIGV4ZWN1dG9yIGtub3dzOiB0aGVcbiAqIHNlcnZlZCBzdWJmbG93IHJlc3VsdHMgKGVhY2ggc3ViZmxvdydzIG93biBtaXJyb3IgdW5kZXIgYHJlZGFjdDogdHJ1ZWApLCBvbmVcbiAqIHJlY29yZGVyIHJvdyBwZXIgcmVjb3JkZXIgaWQsIGFuZCB0aGUgZGVmZXJyZWQgdGllcidzIGFjY291bnRpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgc2VydmVSZWNvcmQgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgc2VydmVkU3ViZmxvd1Jlc3VsdHMgfSBmcm9tICcuLi9lbmdpbmUvaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0VHJhdmVyc2VyIH0gZnJvbSAnLi4vZW5naW5lL3RyYXZlcnNhbC9GbG93Y2hhcnRUcmF2ZXJzZXIuanMnO1xuaW1wb3J0IHsgY29weUJ1bmRsZSB9IGZyb20gJy4uL3JlY29yZGVyL3NuYXBzaG90LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuT2JzZXJ2ZXJzIH0gZnJvbSAnLi9hdHRhY2guanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgc25hcHNob3QuIGBzaGFyZWRTdGF0ZWAgaXMgdGhlIExJVkUgdmlldyBpbiBwcm9kdWN0aW9uICh6ZXJvXG4gKiBjb3B5KTsgaW4gZGV2IG1vZGUgaXQgaXMgYSBkZWVwLWZyb3plbiBDTE9ORSwgc28gYSBjb25zdW1lciBtdXRhdGlvbiB0aHJvd3NcbiAqIGluc3RlYWQgb2YgY29ycnVwdGluZyBlbmdpbmUgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZWRTbmFwc2hvdChcbiAgdHJhdmVyc2VyOiBGbG93Y2hhcnRUcmF2ZXJzZXI8YW55LCBhbnk+LFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgb3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9LFxuKTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3Qgc25hcHNob3QgPSBzZXJ2ZWRMb2codHJhdmVyc2VyLmdldFNuYXBzaG90KG9wdGlvbnMpIGFzIFJ1bnRpbWVTbmFwc2hvdCk7XG4gIGlmIChpc0Rldk1vZGUoKSkge1xuICAgIC8vIERldi1tb2RlIG11dGF0aW9uIGd1YXJkOiBmcmVlemUgYSBDTE9ORSwgbmV2ZXIgdGhlIGxpdmUgZW5naW5lXG4gICAgLy8gc3RhdGUg4oCUIGBzbmFwc2hvdC5zaGFyZWRTdGF0ZWAgSVMgU2hhcmVkTWVtb3J5J3MgY3VycmVudCBnZW5lcmF0aW9uLFxuICAgIC8vIHdob3NlIHVuY2hhbmdlZCBzdWJ0cmVlcyBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlc1xuICAgIC8vIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICAgIC8vIFByb2R1Y3Rpb24gc3RheXMgemVyby1jb3B5OyBjbG9uZS1hbHdheXMgaXMgYSBtZWFzdXJlZCBkZWNpc2lvblxuICAgIC8vIGRlZmVycmVkIHVudGlsIHRoZSBiZW5jaCBzYXlzIGl0J3MgYWZmb3JkYWJsZSAoQkFDS0xPRyAjOCkuXG4gICAgLy8gTk9URTogZGVlcEZyZWV6ZSAoY2FwdHVyZS9mcmVlemUudHMg4oCUIHRoZSBvbmUgd2FsaykgY2Fubm90IHJlYWNoXG4gICAgLy8gTWFwL1NldCBJTlRFUk5BTFMgKGBtYXAuc2V0KClgIG9uIHRoZSBmcm96ZW4gY2xvbmUgd29uJ3QgdGhyb3cpIGFuZFxuICAgIC8vIHNraXBzIHR5cGVkIGFycmF5cy4gVGhlIENMT05FIHN0aWxsIGlzb2xhdGVzIHRoZSBlbmdpbmUuXG4gICAgc25hcHNob3Quc2hhcmVkU3RhdGUgPSBkZWVwRnJlZXplKHN0cnVjdHVyZWRDbG9uZShzbmFwc2hvdC5zaGFyZWRTdGF0ZSkpO1xuICB9XG4gIGNvbnN0IHNmUmVzdWx0cyA9IHRyYXZlcnNlci5nZXRTdWJmbG93UmVzdWx0cygpO1xuICBpZiAoc2ZSZXN1bHRzLnNpemUgPiAwKSB7XG4gICAgLy8gVW5kZXIgYHJlZGFjdDogdHJ1ZWAgZWFjaCBzdWJmbG93J3MgYGdsb2JhbENvbnRleHRgIGlzIGl0cyBvd24gbWlycm9yXG4gICAgLy8gKDkuMjAuMCkg4oCUIHNlcnZlZCwgbmV2ZXIgd3JpdHRlbiBpbnRvIHRoZSByZWNvcmQgKHNlZVxuICAgIC8vIGVuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy50cykuIFBsYWluOiB0aGUgcmVjb3JkcyBhcyB0aGV5IGFyZS5cbiAgICBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyA9IHNlcnZlZFN1YmZsb3dSZXN1bHRzKHNmUmVzdWx0cywgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyU25hcHNob3RzID0gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVycyk7XG4gIGlmIChyZWNvcmRlclNuYXBzaG90cy5sZW5ndGggPiAwKSB7XG4gICAgc25hcHNob3QucmVjb3JkZXJzID0gcmVjb3JkZXJTbmFwc2hvdHM7XG4gIH1cblxuICAvLyBSRkMtMDAxIEJsb2NrIDk6IHRoZSBkZWZlcnJlZC1vYnNlcnZlciBhY2NvdW50aW5nIHN1cmZhY2UuIFByZXNlbnRcbiAgLy8gT05MWSB3aGVuIGEgZGVmZXJyZWQgb2JzZXJ2ZXIgd2FzIGF0dGFjaGVkIG9uIHRoaXMgZXhlY3V0b3Ig4oCUXG4gIC8vIHplcm8tY29zdCBkaXNjaXBsaW5lIGZvciBldmVyeW9uZSBlbHNlLlxuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIHNuYXBzaG90Lm9ic2VydmVyU3RhdHMgPSBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmdldFN0YXRzKCk7XG4gIH1cblxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIGNvbW1pdCBsb2cgYW5kIHRoZSBmb2xkIGJhc2UgYXMgYSByZWFkZXIgbWF5IGhvbGQgdGhlbSAoOS40NC4yKTogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlXG4gKiBpcyBzZXJ2ZWQgYXMgaXRzZWxmOyBvbmUgaG9sZGluZyB3aGF0IGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUsIGEgTWFwLCBhIGJ1ZmZlciDigKYg4oCUIGFzIGEgY29weVxuICogb2YgaXRzIG9wZW4gcGF0aHMsIHRoZSByZWFkZXIncyBvd24gKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBzZXJ2ZVJlY29yZGApLiBIZXJlLCBhdCB0aGUgcHVibGljIGRvb3I6XG4gKiB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IG9mIGEgbG9nIChhIHN1YmZsb3cgbW91bnQncykgaXMgbm90IHNlcnZlZCwgc28gdGhlIHJ1biBwYXlzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHNlcnZlZExvZyhzbmFwc2hvdDogUnVudGltZVNuYXBzaG90KTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3QgeyBpbml0aWFsU3RhdGUgfSA9IHNuYXBzaG90O1xuICByZXR1cm4ge1xuICAgIC4uLnNuYXBzaG90LFxuICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZShzbmFwc2hvdC5jb21taXRMb2cubWFwKHNlcnZlUmVjb3JkKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgLi4uKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGluaXRpYWxTdGF0ZTogc2VydmVSZWNvcmQoaW5pdGlhbFN0YXRlKSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGB0b1NuYXBzaG90KClgIGJ1bmRsZXMgZnJvbSBldmVyeSBhdHRhY2hlZCByZWNvcmRlciDigJQgT05FIGVudHJ5XG4gKiBwZXIgcmVjb3JkZXIgaWQsIGFjcm9zcyBhbGwgY2hhbm5lbHMgYW5kIGJvdGggZGVsaXZlcnkgdGllcnMuXG4gKlxuICogVGhlIGRlZHVwZSBpcyBsb2FkLWJlYXJpbmcsIG5vdCB0aWRpbmVzcy4gQSByZWNvcmRlciB0aGF0IGltcGxlbWVudHMgYVxuICogc2hhcmVkLW5hbWUgaG9vayAoYG9uRXJyb3JgIC8gYG9uUGF1c2VgIC8gYG9uUmVzdW1lYCDigJQgZGVjbGFyZWQgb24gQk9USFxuICogdGhlIHNjb3BlIGFuZCBmbG93IGludGVyZmFjZXMpIGlzIGxlZ2l0aW1hdGVseSByZWdpc3RlcmVkIG9uIEJPVEggaW5saW5lXG4gKiBsaXN0cyBieSBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAsIGFuZCB0aGF0IGlzIGJ5IGRlc2lnbjogZWFjaCBjaGFubmVsXG4gKiBjYWxscyB0aGUgaG9vayB3aXRoIGl0cyBvd24gcGF5bG9hZCB2YXJpYW50LiBgTWV0cmljUmVjb3JkZXIub25QYXVzZWAgaXNcbiAqIHRoZSBldmVyeWRheSBjYXNlLiBXYWxraW5nIHRoZSBsaXN0cyB3aXRob3V0IGEgc2hhcmVkIGBzZWVuYCBzZXQgdHVybmVkXG4gKiB0aGF0IGludG8gYSBEVVBMSUNBVEVEIHNuYXBzaG90IGVudHJ5IChzYW1lIGlkIHR3aWNlKSwgd2hpY2ggYnJlYWtzIGV2ZXJ5XG4gKiBjb25zdW1lciB0aGF0IGluZGV4ZXMgYHNuYXBzaG90LnJlY29yZGVyc2AgYnkgaWQuXG4gKlxuICogT3JkZXJpbmcgaXMgc2NvcGUgbGlzdCDihpIgZmxvdyBsaXN0IOKGkiBkZWZlcnJlZCB0aWVyLCBhbmQgdGhlIEZJUlNUIGJ1bmRsZVxuICogZm9yIGFuIGlkIHdpbnMuIEEgcmVjb3JkZXIgd2l0aCBubyBgdG9TbmFwc2hvdGAgbmV2ZXIgY2xhaW1zIGFuIGlkLCBzbyBpdFxuICogY2Fubm90IHNoYWRvdyBhIHNhbWUtaWQgcmVjb3JkZXIgdGhhdCBkb2VzIGhhdmUgb25lLlxuICpcbiAqIFRoZSByb3cgaXMgUkVCVUlMVCBmaWVsZCBieSBmaWVsZCBieSB0aGUgb25lIGNvcGllciAoYHJlY29yZGVyL3NuYXBzaG90LnRzXG4gKiDCtyBjb3B5QnVuZGxlYCwgc2hhcmVkIHdpdGggYENvbXBvc2l0ZVJlY29yZGVyYCkgcmF0aGVyIHRoYW4gc3ByZWFkLCBzbyBhXG4gKiByZWNvcmRlciBjYW5ub3Qgc211Z2dsZSBhbiBgaWRgIG9mIGl0cyBvd24gY2hvb3NpbmcgaW50byB0aGUgc25hcHNob3QgKHRoZVxuICogaWQgaXMgdGhlIGV4ZWN1dG9yJ3MsIGFuZCBjb25zdW1lcnMgaW5kZXggYnkgaXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzKTogUmVjb3JkZXJTbmFwc2hvdFtdIHtcbiAgY29uc3Qgb3V0OiBSZWNvcmRlclNuYXBzaG90W10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBjb2xsZWN0ID0gKHI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiB2b2lkID0+IHtcbiAgICBpZiAoIXIudG9TbmFwc2hvdCB8fCBzZWVuLmhhcyhyLmlkKSkgcmV0dXJuO1xuICAgIHNlZW4uYWRkKHIuaWQpO1xuICAgIG91dC5wdXNoKGNvcHlCdW5kbGUoci5pZCwgci50b1NuYXBzaG90KCkpKTtcbiAgfTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5zY29wZVJlY29yZGVycykgY29sbGVjdChyKTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5mbG93UmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLnNjb3BlTGlzdFJlY29yZGVycygpKSBjb2xsZWN0KHIpO1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmZsb3dMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
@@ -16,10 +16,10 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.ScopeFacade = void 0;
19
+ const foottrace_1 = require("foottrace");
19
20
  const circular_js_1 = require("../capture/circular.js");
20
21
  const spawn_js_1 = require("../detach/spawn.js");
21
22
  const devMode_js_1 = require("../devMode.js");
22
- const runtimeStageId_js_1 = require("../ids/runtimeStageId.js");
23
23
  const borrowedMutation_js_1 = require("../memory/borrowedMutation.js");
24
24
  const redaction_js_1 = require("../memory/redaction.js");
25
25
  const hooks_js_1 = require("../recorder/hooks.js");
@@ -353,7 +353,7 @@ class ScopeFacade {
353
353
  if (!rtid)
354
354
  return ScopeFacade._EMPTY_SUBFLOW_PATH;
355
355
  // The grammar's one owner reads the path portion (`ids/runtimeStageId.ts`).
356
- const segments = (0, runtimeStageId_js_1.subflowSegmentsOf)(rtid);
356
+ const segments = (0, foottrace_1.subflowSegmentsOf)(rtid);
357
357
  if (segments.length === 0)
358
358
  return ScopeFacade._EMPTY_SUBFLOW_PATH;
359
359
  return Object.freeze(segments);
@@ -628,4 +628,4 @@ class ScopeFacade {
628
628
  };
629
629
  }
630
630
  exports.ScopeFacade = ScopeFacade;
631
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NvcGVGYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Njb3BlL1Njb3BlRmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBRUgsd0RBQThEO0FBQzlELGlEQUc0QjtBQUM1Qiw4Q0FBMEM7QUFFMUMsZ0VBQTZEO0FBQzdELHVFQUFpRTtBQUNqRSx5REFBOEQ7QUFHOUQsbURBQWtFO0FBQ2xFLG9FQUFvRjtBQUNwRiw2Q0FBb0Q7QUFHcEQsTUFBYSxXQUFXO0lBQ2YsTUFBTSxDQUFVLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFNUQ7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBVSxtQkFBbUIsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV6RSxhQUFhLENBQWU7SUFDNUIsVUFBVSxDQUFTO0lBQ1YsZUFBZSxDQUFXO0lBRTdDLCtFQUErRTtJQUM5RCxXQUFXLENBQTBCO0lBRXRELHlFQUF5RTtJQUN4RCxhQUFhLENBQXlCO0lBRXZEO29FQUNnRTtJQUMvQyxRQUFRLENBQVU7SUFFbkMsK0RBQStEO0lBQzlDLE9BQU8sQ0FBVTtJQUVsQzs7Ozs7O09BTUc7SUFDYyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTlDLFVBQVUsR0FBb0IsRUFBRSxDQUFDO0lBRXpDOzs7Ozs7Ozs7O09BVUc7SUFDSyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCOzs7O09BSUc7SUFDSyxVQUFVLENBQWlCO0lBRW5DLFlBQVksT0FBcUIsRUFBRSxTQUFpQixFQUFFLGNBQXdCLEVBQUUsWUFBMkI7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENB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QUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw0RUFBNEU7SUFFcEUsV0FBVyxDQUEwQixJQUFPLEVBQUUsS0FBcUI7UUFDekUseUZBQXlGO1FBQ3pGLHNGQUFzRjtRQUN0RixJQUFBLGVBQUksRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDYyxhQUFhLEdBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN2RSxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUNkLFNBQVMsRUFDVCxJQUFBLCtCQUFvQixFQUNsQjtZQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO1lBQ25DLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWM7WUFDakQsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztTQUNyQyxFQUNELEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDOztBQWhyQkosa0NBaXJCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NvcGVGYWNhZGUg4oCUIEJhc2UgY2xhc3MgdGhhdCBsaWJyYXJ5IGNvbnN1bWVycyBleHRlbmQgdG8gY3JlYXRlIGN1c3RvbSBzY29wZSBjbGFzc2VzXG4gKlxuICogV3JhcHMgU3RhZ2VDb250ZXh0IChmcm9tIG1lbW9yeS8pIHRvIHByb3ZpZGUgYSBjb25zdW1lci1mcmllbmRseSBBUEkgZm9yXG4gKiBzdGF0ZSBhY2Nlc3MsIGRlYnVnIGxvZ2dpbmcsIG1ldHJpY3MsIGFuZCByZWNvcmRlciBob29rcy5cbiAqXG4gKiBDb25zdW1lcnMgZXh0ZW5kIHRoaXMgY2xhc3MgdG8gYWRkIGRvbWFpbi1zcGVjaWZpYyBwcm9wZXJ0aWVzOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIE15U2NvcGUgZXh0ZW5kcyBTY29wZUZhY2FkZSB7XG4gKiAgIGdldCB1c2VyTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRWYWx1ZSgnbmFtZScpIGFzIHN0cmluZzsgfVxuICogICBzZXQgdXNlck5hbWUodmFsdWU6IHN0cmluZykgeyB0aGlzLnNldFZhbHVlKCduYW1lJywgdmFsdWUpOyB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBoYXNDaXJjdWxhclJlZmVyZW5jZSB9IGZyb20gJy4uL2NhcHR1cmUvY2lyY3VsYXIuanMnO1xuaW1wb3J0IHtcbiAgZGV0YWNoQW5kRm9yZ2V0IGFzIGRldGFjaEFuZEZvcmdldFNwYXduLFxuICBkZXRhY2hBbmRKb2luTGF0ZXIgYXMgZGV0YWNoQW5kSm9pbkxhdGVyU3Bhd24sXG59IGZyb20gJy4uL2RldGFjaC9zcGF3bi5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52IH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB7IHN1YmZsb3dTZWdtZW50c09mIH0gZnJvbSAnLi4vaWRzL3J1bnRpbWVTdGFnZUlkLmpzJztcbmltcG9ydCB7IGRlYWRGcmFtZU1lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvYm9ycm93ZWRNdXRhdGlvbi5qcyc7XG5pbXBvcnQgeyBDTEVBUiwgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IEhvb2tGYWlsdXJlLCBIb29rUGF5bG9hZCwgU2NvcGVIb29rTmFtZSB9IGZyb20gJy4uL3JlY29yZGVyL2hvb2tzLmpzJztcbmltcG9ydCB7IGZpcmUsIHJlY29yZGVyRmFpbHVyZUV2ZW50IH0gZnJvbSAnLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90UmVhZG9ubHksIGNyZWF0ZUZyb3plbkFyZ3MgfSBmcm9tICcuL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC5qcyc7XG5pbXBvcnQgeyByZWdpc3RlclNjb3BlUnVudGltZSB9IGZyb20gJy4vcnVudGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBSZWRhY3Rpb25Qb2xpY3ksIFJlZGFjdGlvblJlcG9ydCwgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgY2xhc3MgU2NvcGVGYWNhZGUge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJSQU5EID0gU3ltYm9sLmZvcignU2NvcGVGYWNhZGVAdjEnKTtcblxuICAvKipcbiAgICogU2hhcmVkIHNlbnRpbmVsIHJldHVybmVkIGJ5IGBfZ2V0U3ViZmxvd1BhdGgoKWAgZm9yIHJvb3QtbGV2ZWwgc3RhZ2VzXG4gICAqIChubyBzdWJmbG93IG5lc3RpbmcpLiBBdm9pZHMgcGVyLWNhbGwgYWxsb2NhdGlvbiBvZiBhIGZyZXNoXG4gICAqIGBPYmplY3QuZnJlZXplKFtdKWAgb24gZXZlcnkgYGVtaXRFdmVudGAgaW4gdGhlIGNvbW1vbiBuby1zdWJmbG93IGNhc2UuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfRU1QVFlfU1VCRkxPV19QQVRIOiByZWFkb25seSBzdHJpbmdbXSA9IE9iamVjdC5mcmVlemUoW10pO1xuXG4gIHByb3RlY3RlZCBfc3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHByb3RlY3RlZCBfc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcmVhZE9ubHlWYWx1ZXM/OiB1bmtub3duO1xuXG4gIC8qKiBDYWNoZWQgZGVlcGx5LWZyb3plbiBjb3B5IG9mIHJlYWRPbmx5VmFsdWVzIGZvciBnZXRBcmdzKCkuIENyZWF0ZWQgb25jZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZnJvemVuQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgZXhlY3V0b3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4ZWN1dGlvbkVudjogUmVhZG9ubHk8RXhlY3V0aW9uRW52PjtcblxuICAvKiogUkZDLTAwMyBEMjogdHJ1ZSB3aGVuIGBnZXRBcmdzKClgIGNhbiByZXR1cm4gYWN0dWFsIGRhdGEg4oCUIGFuIGVtcHR5XG4gICAqICBge31gIHJlYWQgY2FycmllcyBubyBpbmZvcm1hdGlvbiwgc28gaXQgaXMgbmV2ZXIgZmxhZ2dlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzQXJnczogYm9vbGVhbjtcblxuICAvKiogUkZDLTAwMyBEMjogdHJ1ZSB3aGVuIGBnZXRFbnYoKWAgY2FuIHJldHVybiBhY3R1YWwgZGF0YS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzRW52OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSRkMtMDAzIEQyOiBrZXlzIHRoaXMgc3RhZ2UgaGFzIFRSQUNLRUQtcmVhZCAodmlhIGBnZXRWYWx1ZShrZXkpYCkuXG4gICAqIEEgc2lsZW50IHJlYWQgb2YgYSBrZXkgaW4gdGhpcyBzZXQgaXMgU0hBRE9XRUQg4oCUIGl0cyByZWFk4oaSd3JpdGUgZWRnZSBpc1xuICAgKiBhbHJlYWR5IGNhcHR1cmVkLCBzbyBpdCBpcyBub3QgZmxhZ2dlZCBhcyBhbiB1bnRyYWNrZWQgc291cmNlLiBUaGlzIGlzXG4gICAqIHdoYXQga2VlcHMgVHlwZWRTY29wZSBhcnJheS1wcm94eSBpbnRlcm5hbHMgKHdoaWNoIGFsd2F5cyBmb2xsb3cgYVxuICAgKiB0cmFja2VkIHByb3BlcnR5IHJlYWQpIGFuZCBgJGJhdGNoQXJyYXlgIGhvbmVzdC1idXQtcXVpZXQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmFja2VkUmVhZEtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIF9yZWNvcmRlcnM6IFNjb3BlUmVjb3JkZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZXQgYnkgdGhlIGNvbW1pdCBvYnNlcnZlcjogdGhpcyBzdGFnZSdzIGZyYW1lIGhhcyBmbHVzaGVkLiBBIGZhY2FkZSBpc1xuICAgKiBPTkUgc3RhZ2UgZXhlY3V0aW9uJ3MgaGFuZGxlIOKAlCB0aGUgZW5naW5lIGJ1aWxkcyBhIGZyZXNoIG9uZSBwZXIgc3RhZ2Ug4oCUXG4gICAqIGFuZCBldmVyeSBwcm94eSB0aGUgdHlwZWQgc2NvcGUgaGFuZHMgb3V0IGlzIGJvdW5kIHRvIGl0LiBBIHdyaXRlIGFycml2aW5nXG4gICAqIGFmdGVyIHRoZSBjb21taXQgY29tZXMgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlIChhIGNsb3N1cmUsIGFcbiAgICogbW9kdWxlLWxldmVsIGBsZXRgKSBhbmQgd291bGQgbGFuZCBpbiBhIGJ1ZmZlciBub3RoaW5nIGV2ZXIgY29tbWl0czogbm9cbiAgICogdHJhY2Ugcm93LCBzdGF0ZSB1bmNoYW5nZWQuIFNvIGl0IGlzIHJlZnVzZWQgKHtAbGluayBhc3NlcnRMaXZlfSkgaW5zdGVhZFxuICAgKiBvZiBsb3N0LiBTZWFsaW5nIGhlcmUgYW5kIG5vdCBvbiBgU3RhZ2VDb250ZXh0YCBpcyBkZWxpYmVyYXRlOiB0aGUgZnJhbWVcbiAgICogc3RheXMgcmUtdXNhYmxlIGFmdGVyIGNvbW1pdCBieSBkZXNpZ24gKCMxM2Ig4oCUIHRoZSBlbmdpbmUncyBkb3VibGUtY29tbWl0XG4gICAqIHBhdGhzIGFuZCB0aGUgc3ViZmxvdyBtZXJnZS1iYWNrIGludG8gYSBicmFuY2ggcGFyZW50IG5lZWQgaXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBfY29tbWl0dGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgcnVsZSBvZiB0aGlzIGZhY2FkZSdzIG93biDigJQgT05MWSB3aGVuIGl0cyBjb250ZXh0IGNhcnJpZXMgbm9uZSAoYmFyZVxuICAgKiBjb250ZXh0cyBpbiB1bml0IHRlc3RzKS4gVW5kZXIgYW4gZXhlY3V0b3IgdGhlIHJ1bGUgbGl2ZXMgb24gdGhlIGNvbnRleHRcbiAgICogdHJlZSBhbmQgdGhpcyBzdGF5cyB1bnNldDsgc2VlIHtAbGluayBydWxlfS5cbiAgICovXG4gIHByaXZhdGUgX2xvY2FsUnVsZT86IFJlZGFjdGlvblJ1bGU7XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogU3RhZ2VDb250ZXh0LCBzdGFnZU5hbWU6IHN0cmluZywgcmVhZE9ubHlWYWx1ZXM/OiB1bmtub3duLCBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYpIHtcbiAgICB0aGlzLl9zdGFnZUNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuX3N0YWdlTmFtZSA9IHN0YWdlTmFtZTtcbiAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHJlYWRPbmx5VmFsdWVzO1xuICAgIHRoaXMuX2Zyb3plbkFyZ3MgPSBjcmVhdGVGcm96ZW5BcmdzKHJlYWRPbmx5VmFsdWVzKTtcbiAgICB0aGlzLl9leGVjdXRpb25FbnYgPSBPYmplY3QuZnJlZXplKHsgLi4uZXhlY3V0aW9uRW52IH0pO1xuICAgIHRoaXMuX2hhc0FyZ3MgPSBPYmplY3Qua2V5cyh0aGlzLl9mcm96ZW5BcmdzKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuX2hhc0VudiA9IE9iamVjdC5rZXlzKHRoaXMuX2V4ZWN1dGlvbkVudikubGVuZ3RoID4gMDtcbiAgICAvLyBUaGUgY29udGV4dCBtdXN0IGNhcnJ5IHRoZSBydWxlIEJFRk9SRSB0aGUgZmlyc3Qgd3JpdGUsIHNpbmNlIHRoZVxuICAgIC8vIGNvbnRleHQncyB3cml0ZSBmdW5uZWwgaXMgd2hhdCBtYXJrcyBhIHBlci1jYWxsIHJlZGFjdGVkIGtleSBvbiBpdC5cbiAgICAvLyBVbmRlciBhbiBleGVjdXRvciB0aGUgY29udGV4dCBhbHJlYWR5IGhhcyB0aGUgcnVuJ3MgcnVsZSAoaW5zdGFsbGVkIG9uXG4gICAgLy8gdGhlIHJvb3QsIGluaGVyaXRlZCBkb3duKSBhbmQgdGhpcyByZS1pbnN0YWxscyB0aGUgc2FtZSBvYmplY3Q7IG9uIGFcbiAgICAvLyBiYXJlIGNvbnRleHQgaXQgaW5zdGFsbHMgYSBmcmVzaCBvbmUuXG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LnVzZVJlZGFjdGlvblJ1bGUodGhpcy5ydWxlKTtcblxuICAgIC8vIFJlZ2lzdGVyIGFzIGNvbW1pdCBvYnNlcnZlciBzbyBTY29wZVJlY29yZGVyLm9uQ29tbWl0IGZpcmVzIHdoZW4gU3RhZ2VDb250ZXh0LmNvbW1pdCgpIGlzIGNhbGxlZFxuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRDb21taXRPYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICB0aGlzLl9vbkNvbW1pdEZpcmVkKG11dGF0aW9ucyk7XG4gICAgfSk7XG4gICAgcmVnaXN0ZXJTY29wZVJ1bnRpbWUodGhpcywgeyB0YXJnZXQ6IHRoaXMsIGhhbmRsZXNBc3NpZ25tZW50czogZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlZGFjdGlvbiBydWxlIHRoaXMgZmFjYWRlIGRlY2lkZXMgd2l0aCDigJQgdGhlIFNBTUUgb2JqZWN0IGl0c1xuICAgKiBgU3RhZ2VDb250ZXh0YCByZXRhaW5zIHdpdGggKGBtZW1vcnkvcmVkYWN0aW9uLnRzYCwgdGhlIG9uZSBvd25lcikuIFVuZGVyXG4gICAqIGFuIGV4ZWN1dG9yIHRoZSBydWxlIGlzIGluc3RhbGxlZCBvbiB0aGUgcnVudGltZSByb290IGFuZCBpbmhlcml0ZWQgYnlcbiAgICogZXZlcnkgY29udGV4dCwgc28gdGhlIGZhY2FkZSBzaW1wbHkgcmVhZHMgaXQuIE9uIGEgYmFyZSBjb250ZXh0ICh1bml0XG4gICAqIHRlc3RzLCBoYW5kLWJ1aWx0IHNjb3BlcykgdGhlIGZhY2FkZSBjcmVhdGVzIG9uZSBhbmQgaW5zdGFsbHMgaXQgb24gdGhlXG4gICAqIGNvbnRleHQsIHNvIHRoZSBjb250ZXh0J3MgcmV0ZW50aW9uIGFuZCB0aGUgZmFjYWRlJ3MgcmVjb3JkZXIgdmlld3NcbiAgICogc3RpbGwgc2hhcmUgYSBzaW5nbGUgdmVyZGljdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHJ1bGUoKTogUmVkYWN0aW9uUnVsZSB7XG4gICAgY29uc3Qgc2hhcmVkID0gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFJlZGFjdGlvblJ1bGUoKTtcbiAgICBpZiAoc2hhcmVkKSByZXR1cm4gc2hhcmVkO1xuICAgIGlmICghdGhpcy5fbG9jYWxSdWxlKSB7XG4gICAgICB0aGlzLl9sb2NhbFJ1bGUgPSBuZXcgUmVkYWN0aW9uUnVsZSgpO1xuICAgICAgdGhpcy5fc3RhZ2VDb250ZXh0LnVzZVJlZGFjdGlvblJ1bGUodGhpcy5fbG9jYWxSdWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsUnVsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFyZSBhIHJlZGFjdGVkLWtleXMgc2V0IGFjcm9zcyBtdWx0aXBsZSBTY29wZUZhY2FkZSBpbnN0YW5jZXMuXG4gICAqIENhbGwgdGhpcyB0byBtYWtlIHJlZGFjdGlvbiBwZXJzaXN0IGFjcm9zcyBzdGFnZXMgaW4gdGhlIHNhbWUgcGlwZWxpbmUuXG4gICAqIChVbmRlciBhbiBleGVjdXRvciB0aGUgcnVuJ3MgcnVsZSBhbHJlYWR5IHNoYXJlcyBvbmUgc2V0OyB0aGlzIGNhbGwgaXNcbiAgICogdGhlbiBhIG5vLW9wLilcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1c2VTaGFyZWRSZWRhY3RlZEtleXMoc2hhcmVkU2V0OiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMucnVsZS51c2VNYXJrZWRLZXlzKHNoYXJlZFNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCByZWRhY3RlZC1rZXlzIHNldCAoZm9yIHNoYXJpbmcgd2l0aCBvdGhlciBzY29wZXMpLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJlZGFjdGVkS2V5cygpOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMucnVsZS5tYXJrZWRLZXlzKCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYSBkZWNsYXJhdGl2ZSByZWRhY3Rpb24gcG9saWN5LiBUaGUgcG9saWN5IGlzIGFkZGl0aXZlIOKAlFxuICAgKiBpdCB3b3JrcyBhbG9uZ3NpZGUgbWFudWFsIGBzZXRWYWx1ZSguLi4sIHRydWUpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1c2VSZWRhY3Rpb25Qb2xpY3kocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bGUuc2V0UG9saWN5KHBvbGljeSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFJlZGFjdGlvblBvbGljeSgpOiBSZWRhY3Rpb25Qb2xpY3kgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJ1bGUuZ2V0UG9saWN5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsaWFuY2UtZnJpZW5kbHkgcmVwb3J0IG9mIGFsbCByZWRhY3Rpb24gYWN0aXZpdHkuXG4gICAqIE5ldmVyIGluY2x1ZGVzIGFjdHVhbCB2YWx1ZXMg4oCUIG9ubHkga2V5IG5hbWVzLCBmaWVsZCBuYW1lcywgYW5kIHBhdHRlcm5zLlxuICAgKi9cbiAgZ2V0UmVkYWN0aW9uUmVwb3J0KCk6IFJlZGFjdGlvblJlcG9ydCB7XG4gICAgcmV0dXJuIHRoaXMucnVsZS5yZXBvcnQoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTY29wZVJlY29yZGVyIE1hbmFnZW1lbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXR0YWNoU2NvcGVSZWNvcmRlcihyZWNvcmRlcjogU2NvcGVSZWNvcmRlcik6IHZvaWQge1xuICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgcmVjb3JkZXIgd2l0aCBzYW1lIElEIChpZGVtcG90ZW50IOKAlCBwcmV2ZW50cyBkb3VibGUtY291bnRpbmcpXG4gICAgdGhpcy5fcmVjb3JkZXJzID0gdGhpcy5fcmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gcmVjb3JkZXIuaWQpO1xuICAgIHRoaXMuX3JlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIGRldGFjaFNjb3BlUmVjb3JkZXIocmVjb3JkZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fcmVjb3JkZXJzID0gdGhpcy5fcmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gcmVjb3JkZXJJZCk7XG4gIH1cblxuICBnZXRTY29wZVJlY29yZGVycygpOiBTY29wZVJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5U3RhZ2VTdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblN0YWdlU3RhcnQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5U3RhZ2VFbmQoZHVyYXRpb24/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblN0YWdlRW5kJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkdXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5UGF1c2UocGF1c2VEYXRhPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUGF1c2UnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIHBhdXNlRGF0YSxcbiAgICAgIGNoYW5uZWw6ICdzY29wZScgYXMgY29uc3QsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVJlc3VtZShoYXNJbnB1dDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUmVzdW1lJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBoYXNJbnB1dCxcbiAgICAgIGNoYW5uZWw6ICdzY29wZScgYXMgY29uc3QsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeUNvbW1pdChtdXRhdGlvbnM6IENvbW1pdEV2ZW50WydtdXRhdGlvbnMnXSk6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uQ29tbWl0Jywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBtdXRhdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmdXNlIGEgd3JpdGUgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlICg5LjIyLjApLiBUaHJvd3Mgd2l0aCB0aGVcbiAgICogc3RhZ2UgdGhlIGhhbmRsZSBjYW1lIGZyb207IHRoZSBlbmdpbmUncyBlcnJvciBwYXRoIGF0dHJpYnV0ZXMgdGhlIHRocm93XG4gICAqIHRvIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3NlcnRMaXZlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbW1pdHRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGRlYWRGcmFtZU1lc3NhZ2UodGhpcy5fc3RhZ2VOYW1lLCB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsIGtleSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDYWxsZWQgYnkgU3RhZ2VDb250ZXh0LmNvbW1pdCgpIG9ic2VydmVyLiBDb252ZXJ0cyB0cmFja2VkIHdyaXRlcyB0byBDb21taXRFdmVudCBmb3JtYXQuXG4gICAqICBFcnJvcnMgYXJlIGNhdWdodCB0byBwcmV2ZW50IHJlY29yZGVyIGlzc3VlcyBmcm9tIGFib3J0aW5nIHRoZSB0cmF2ZXJzYWwuICovXG4gIHByaXZhdGUgX29uQ29tbWl0RmlyZWQobXV0YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duOyBvcGVyYXRpb246ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJyB9Pik6IHZvaWQge1xuICAgIHRoaXMuX2NvbW1pdHRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBgX3N0YWdlV3JpdGVzYCBhbHJlYWR5IGhvbGRzIHRoZSByZXRhaW5lZCBmb3JtICh0aGUgY29udGV4dCByZXRhaW5zXG4gICAgICAvLyB1bmRlciB0aGUgc2FtZSBydWxlKTsgYXBwbHlpbmcgdGhlIHZlcmRpY3QgYWdhaW4gaGVyZSBpcyBpZGVtcG90ZW50XG4gICAgICAvLyBhbmQga2VlcHMgYSBrZXkgbWFya2VkIEFGVEVSIGl0cyB3cml0ZSBzY3J1YmJlZCBhdCBjb21taXQgdGltZS5cbiAgICAgIGNvbnN0IGNvbW1pdE11dGF0aW9uczogQ29tbWl0RXZlbnRbJ211dGF0aW9ucyddID0gT2JqZWN0LmVudHJpZXMobXV0YXRpb25zKS5tYXAoKFtrZXksIGVudHJ5XSkgPT4gKHtcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZTogdGhpcy5ydWxlLnJldGFpbihba2V5XSwgZW50cnkudmFsdWUpLFxuICAgICAgICBvcGVyYXRpb246IGVudHJ5Lm9wZXJhdGlvbixcbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5ub3RpZnlDb21taXQoY29tbWl0TXV0YXRpb25zKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFN3YWxsb3cg4oCUIHJlY29yZGVyIGVycm9ycyBtdXN0IG5vdCBhYm9ydCB0aGUgdHJhdmVyc2FsLlxuICAgICAgLy8gSW5kaXZpZHVhbCByZWNvcmRlciBlcnJvcnMgYXJlIGFscmVhZHkgaXNvbGF0ZWQgYnkgX2ludm9rZUhvb2suXG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIERlYnVnIC8gRGlhZ25vc3RpY3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vXG4gIC8vIFRoZXNlIGxlZ2FjeSBtZXRob2RzIHN0aWxsIHdyaXRlIHRvIHRoZSBgU3RhZ2VDb250ZXh0YCBkaWFnbm9zdGljXG4gIC8vIHNpZGUgYmFncyAobG9nQ29udGV4dCAvIGVycm9yQ29udGV4dCAvIG1ldHJpY0NvbnRleHQgLyBldmFsQ29udGV4dCkgZm9yXG4gIC8vIHNuYXBzaG90IGluY2x1c2lvbi4gVGhleSBBTFNPIGZpcmUgdGhyb3VnaCB0aGUgRW1pdCBjaGFubmVsIHNvIGFueVxuICAvLyBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYCBzZWVzIHRoZW0gaW4gcmVhbCB0aW1lIOKAlCBjbG9zaW5nIHRoZVxuICAvLyBsb25nLXN0YW5kaW5nIGdhcCB3aGVyZSBgJGRlYnVnYC9gJG1ldHJpY2Agd2VudCB0byB1bm9ic2VydmVkIGJhZ3MuXG5cbiAgYWRkRGVidWdJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGtlcHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuYWRkRGlhZ25vc3RpYygnbG9ncycsIGtleSwgdmFsdWUpO1xuICAgIHRoaXMuZW1pdEV2ZW50KGBsb2cuZGVidWcuJHtrZXl9YCwgeyBrZXksIHZhbHVlOiBrZXB0LCBsZXZlbDogJ2RlYnVnJyB9KTtcbiAgfVxuXG4gIGFkZERlYnVnTWVzc2FnZSh2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGtlcHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuYWRkRGlhZ25vc3RpYygnbG9ncycsICdtZXNzYWdlcycsIFt2YWx1ZV0pO1xuICAgIHRoaXMuZW1pdEV2ZW50KCdsb2cuZGVidWcubWVzc2FnZXMnLCB7IHZhbHVlOiBBcnJheS5pc0FycmF5KGtlcHQpID8ga2VwdFswXSA6IGtlcHQsIGxldmVsOiAnZGVidWcnIH0pO1xuICB9XG5cbiAgYWRkRXJyb3JJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGtlcHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuYWRkRGlhZ25vc3RpYygnZXJyb3JzJywga2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYGxvZy5lcnJvci4ke2tleX1gLCB7IGtleSwgdmFsdWU6IGtlcHQsIGxldmVsOiAnZXJyb3InIH0pO1xuICB9XG5cbiAgYWRkTWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBrZXB0ID0gdGhpcy5fc3RhZ2VDb250ZXh0LmFkZERpYWdub3N0aWMoJ21ldHJpY3MnLCBtZXRyaWNOYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYG1ldHJpYy4ke21ldHJpY05hbWV9YCwgeyBuYW1lOiBtZXRyaWNOYW1lLCB2YWx1ZToga2VwdCB9KTtcbiAgfVxuXG4gIGFkZEV2YWwobWV0cmljTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGtlcHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuYWRkRGlhZ25vc3RpYygnZXZhbHMnLCBtZXRyaWNOYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYGV2YWwuJHttZXRyaWNOYW1lfWAsIHsgbmFtZTogbWV0cmljTmFtZSwgdmFsdWU6IGtlcHQgfSk7XG4gIH1cblxuICAvLyDilIDilIAgRW1pdCDigJQgUGhhc2UgMyBwcmltYXJ5IHByaW1pdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogRmlyZSBhIHN0cnVjdHVyZWQgZXZlbnQgdG8gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgaW1wbGVtZW50aW5nXG4gICAqIGBvbkVtaXRgLiBTeW5jaHJvbm91cywgaW4tb3JkZXIsIHBhc3MtdGhyb3VnaCDigJQgbm8gYnVmZmVyaW5nLlxuICAgKlxuICAgKiAtICoqRmFzdC1wYXRoKio6IHplcm8gYWxsb2NhdGlvbiArIHplcm8gY29zdCB3aGVuIG5vIHJlY29yZGVycyBhcmVcbiAgICogICBhdHRhY2hlZCAoZWFybHkgcmV0dXJuIG9uIGVtcHR5IGxpc3QpLlxuICAgKiAtICoqRW5yaWNobWVudCoqOiBsaWJyYXJ5IGF1dG8tYWRkcyBgc3RhZ2VOYW1lYCwgYHJ1bnRpbWVTdGFnZUlkYCxcbiAgICogICBgc3ViZmxvd1BhdGhgLCBgcGlwZWxpbmVJZGAsIGB0aW1lc3RhbXBgIHRvIHRoZSBldmVudC5cbiAgICogLSAqKlJlZGFjdGlvbioqOiBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2AgcmVnZXhlcyBhcmUgbWF0Y2hlZFxuICAgKiAgIGFnYWluc3QgYG5hbWVgIOKAlCBtYXRjaGVkIGV2ZW50cyBoYXZlIHRoZWlyIHBheWxvYWQgcmVwbGFjZWQgd2l0aFxuICAgKiAgIGAnW1JFREFDVEVEXSdgIGJlZm9yZSBkaXNwYXRjaC5cbiAgICogLSAqKkVycm9yIGlzb2xhdGlvbioqOiBhIHRocm93aW5nIGBvbkVtaXRgIGRvZXMgbm90IHByb3BhZ2F0ZSDigJQgaXQgaXNcbiAgICogICBjYXVnaHQgYW5kIHJvdXRlZCB0byBgb25FcnJvcmAgb24gcmVtYWluaW5nIHJlY29yZGVycywgbWF0Y2hpbmcgdGhlXG4gICAqICAgcGF0dGVybiB1c2VkIGJ5IG90aGVyIHNjb3BlIGV2ZW50cy5cbiAgICpcbiAgICogQ29uc3VtZXJzIGNhbGwgdGhpcyB2aWEgdGhlIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAgc2NvcGUgbWV0aG9kO1xuICAgKiB0aGUgbWV0aG9kIHJvdXRlcyBoZXJlIHZpYSBgY3JlYXRlVHlwZWRTY29wZWAuXG4gICAqL1xuICBlbWl0RXZlbnQobmFtZTogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duKTogdm9pZCB7XG4gICAgLy8gRmFzdC1wYXRoOiB6ZXJvIHdvcmsgd2hlbiBubyByZWNvcmRlcnMgYXJlIGF0dGFjaGVkLlxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAvLyBSZWRhY3Rpb246IGlmIHRoZSBldmVudCBuYW1lIG1hdGNoZXMgYW55IGVtaXRQYXR0ZXJuLCByZXBsYWNlIHBheWxvYWRcbiAgICAvLyB3aXRoICdbUkVEQUNURURdJyBCRUZPUkUgY29uc3RydWN0aW5nIHRoZSBldmVudCAobm8gbGVhayB0aHJvdWdoXG4gICAgLy8gY29weS1vbi13cml0ZSwgbm8gd2F5IGZvciByZWNvcmRlcnMgdG8gc2VlIHRoZSByYXcgdmFsdWUpLlxuICAgIGNvbnN0IGZpbmFsUGF5bG9hZCA9IHRoaXMucnVsZS5yZXRhaW5FbWl0KG5hbWUsIHBheWxvYWQpO1xuICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gdGhpcy5fc3RhZ2VDb250ZXh0LmNhcHR1cmVFbWl0UG9zaXRpb24oKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBlbnJpY2hlZCBldmVudCBvbmNlOyBwYXNzIHRoZSBzYW1lIHJlZmVyZW5jZSB0byBhbGxcbiAgICAvLyByZWNvcmRlcnMgdW5kZXIgdGhlaXIgcmVhZC1vbmx5IGNvbnRyYWN0LiBTb3VyY2UgY29vcmRpbmF0ZXMgYXJlXG4gICAgLy8gY2FwdHVyZWQgYmVmb3JlIGFueSBpbmxpbmUgaG9vayBvciBkZWZlcnJlZCB0YXAgb2JzZXJ2ZXMgdGhlIGV2ZW50LlxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHBheWxvYWQ6IGZpbmFsUGF5bG9hZCxcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiB0aGlzLl9nZXRTdWJmbG93UGF0aCgpLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgLi4uKHNvdXJjZVBvc2l0aW9uID09PSB1bmRlZmluZWQgPyB7fSA6IHsgc291cmNlUG9zaXRpb24gfSksXG4gICAgfSBhcyBjb25zdDtcblxuICAgIC8vIERpc3BhdGNoIHdpdGggZXJyb3IgaXNvbGF0aW9uIOKAlCB0aGUgc2FtZSBgZmlyZWAgbG9vcCBhbmQgdGhlIHNhbWUgZmFpbHVyZSByb3V0aW5nIGFzXG4gICAgLy8gZXZlcnkgb3RoZXIgc2NvcGUgZXZlbnQ6IGEgdGhyb3dpbmcgcmVjb3JkZXIncyBlcnJvciByZWFjaGVzIG9uRXJyb3Igb24gdGhlIHJlY29yZGVycztcbiAgICAvLyB0aGUgZW1pdCBsb29wIGNvbnRpbnVlcyB1bmFmZmVjdGVkLlxuICAgIGZpcmUodGhpcy5fcmVjb3JkZXJzLCAnb25FbWl0JywgZXZlbnQsIHRoaXMuX3JvdXRlRmFpbHVyZSk7XG4gIH1cblxuICAvLyDilIDilIAgRGV0YWNoIOKAlCBmaXJlLWFuZC1mb3JnZXQgY2hpbGQgZmxvd2NoYXJ0IGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gRGVsZWdhdGVzIHRvIHRoZSBzaGFyZWQgYGRldGFjaC9zcGF3bmAgaGVscGVyLCB3aGljaCBtaW50cyBhIHJlZklkXG4gIC8vIGZyb20gdGhpcyBzdGFnZSdzIGBydW50aW1lU3RhZ2VJZGAgYW5kIGNhbGxzIGBkcml2ZXIuc2NoZWR1bGUoKWAuXG4gIC8vIFJvdXRlZCB0aHJvdWdoIGBjcmVhdGVUeXBlZFNjb3BlYCBhcyBgc2NvcGUuJGRldGFjaEFuZEpvaW5MYXRlciguLi4pYFxuICAvLyBhbmQgYHNjb3BlLiRkZXRhY2hBbmRGb3JnZXQoLi4uKWAuXG5cbiAgLyoqIFNlZSBgU2NvcGVNZXRob2RzLiRkZXRhY2hBbmRKb2luTGF0ZXJgLiAqL1xuICBkZXRhY2hBbmRKb2luTGF0ZXIoXG4gICAgZHJpdmVyOiBpbXBvcnQoJy4uL2RldGFjaC90eXBlcy5qcycpLkRldGFjaERyaXZlcixcbiAgICBjaGlsZDogaW1wb3J0KCcuLi9idWlsZGVyL3R5cGVzLmpzJykuRmxvd0NoYXJ0LFxuICAgIGlucHV0PzogdW5rbm93bixcbiAgKTogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hIYW5kbGUge1xuICAgIHJldHVybiBkZXRhY2hBbmRKb2luTGF0ZXJTcGF3bihkcml2ZXIsIGNoaWxkLCBpbnB1dCwgdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxuXG4gIC8qKiBTZWUgYFNjb3BlTWV0aG9kcy4kZGV0YWNoQW5kRm9yZ2V0YC4gKi9cbiAgZGV0YWNoQW5kRm9yZ2V0KFxuICAgIGRyaXZlcjogaW1wb3J0KCcuLi9kZXRhY2gvdHlwZXMuanMnKS5EZXRhY2hEcml2ZXIsXG4gICAgY2hpbGQ6IGltcG9ydCgnLi4vYnVpbGRlci90eXBlcy5qcycpLkZsb3dDaGFydCxcbiAgICBpbnB1dD86IHVua25vd24sXG4gICk6IHZvaWQge1xuICAgIGRldGFjaEFuZEZvcmdldFNwYXduKGRyaXZlciwgY2hpbGQsIGlucHV0LCB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzdWJmbG93UGF0aCAob3V0ZXIg4oaSIGlubmVyKSBmb3IgZXZlbnQgZW5yaWNobWVudC5cbiAgICpcbiAgICogUGFyc2VzIGZyb20gYHJ1bnRpbWVTdGFnZUlkYCB3aGljaCBoYXMgdGhlIGZvcm1hdFxuICAgKiBgW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCAoc2VlIGBsaWIvaWRzL3J1bnRpbWVTdGFnZUlkLnRzYCkuXG4gICAqIFN1YmZsb3cgaXNvbGF0aW9uIHByZXZlbnRzIHdhbGtpbmcgdGhlIHBhcmVudC1jaGFpbiBhY3Jvc3MgYm91bmRhcmllcyxcbiAgICogc28gdGhlIHJ1bnRpbWVTdGFnZUlkIOKAlCBnbG9iYWxseSB1bmlxdWUsIGluY2x1ZGVzIGZ1bGwgcGF0aCDigJQgaXMgdGhlXG4gICAqIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzdWJmbG93IGhpZXJhcmNoeSBhdCBlbWl0IHRpbWUuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiAgICdzZWVkIzAnICAgICAgICAgICAgICAgICDihpIgW10gICAgICAgICAgICAgICAgICAgIChyb290KVxuICAgKiAgICdzZi1pbm5lci9pbm5lciM1JyAgICAgICDihpIgWydzZi1pbm5lciddXG4gICAqICAgJ3NmLWEvc2YtYi9zdGFnZSMzJyAgICAgIOKGkiBbJ3NmLWEnLCAnc2YtYiddICAgICAgKG5lc3RlZClcbiAgICovXG4gIHByaXZhdGUgX2dldFN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICBjb25zdCBydGlkID0gdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmICghcnRpZCkgcmV0dXJuIFNjb3BlRmFjYWRlLl9FTVBUWV9TVUJGTE9XX1BBVEg7XG4gICAgLy8gVGhlIGdyYW1tYXIncyBvbmUgb3duZXIgcmVhZHMgdGhlIHBhdGggcG9ydGlvbiAoYGlkcy9ydW50aW1lU3RhZ2VJZC50c2ApLlxuICAgIGNvbnN0IHNlZ21lbnRzID0gc3ViZmxvd1NlZ21lbnRzT2YocnRpZCk7XG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFNjb3BlRmFjYWRlLl9FTVBUWV9TVUJGTE9XX1BBVEg7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoc2VnbWVudHMpO1xuICB9XG5cbiAgLy8g4pSA4pSAIE5vbi1UcmFja2luZyBTdGF0ZSBJbnNwZWN0aW9uIChmb3IgVHlwZWRTY29wZSBwcm94eSBpbnRlcm5hbHMpIOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZXR1cm5zIGFsbCBzdGF0ZSBrZXlzIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBUeXBlZFNjb3BlIG93bktleXMvaGFzIHRyYXBzLiAqL1xuICBnZXRTdGF0ZUtleXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCB1bmRlZmluZWQpO1xuICAgIGlmICghc25hcHNob3QgfHwgdHlwZW9mIHNuYXBzaG90ICE9PSAnb2JqZWN0JykgcmV0dXJuIFtdO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzbmFwc2hvdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gIH1cblxuICAvKiogQ2hlY2sga2V5IGV4aXN0ZW5jZSB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgVHlwZWRTY29wZSBoYXMgdHJhcC5cbiAgICogIENvbnRyYWN0OiByZXR1cm5zIGZhbHNlIGZvciBrZXlzIG5ldmVyIHNldCBPUiBrZXlzIHNldCB0byB1bmRlZmluZWQuXG4gICAqICBUaGlzIG1hdGNoZXMgZGVsZXRlVmFsdWUoKSBzZW1hbnRpY3MgKHNldHMgdG8gdW5kZWZpbmVkID0gZGVsZXRlZCkuICovXG4gIGhhc0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWUoW10sIGtleSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBSZWFkIHN0YXRlIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBhcnJheSBwcm94eSBnZXRDdXJyZW50KCkgdG8gYXZvaWRcbiAgICogIHBoYW50b20gcmVhZHMgb24gaW50ZXJuYWwgYXJyYXkgb3BlcmF0aW9ucyAoLmxlbmd0aCwgLmhhcywgaXRlcmF0aW9uLCBldGMuKS5cbiAgICogIFRoZSBpbml0aWFsIHByb3BlcnR5IGFjY2VzcyBmaXJlcyBvbmUgdHJhY2tlZCBvblJlYWQgdmlhIGdldFZhbHVlKCk7IHN1YnNlcXVlbnRcbiAgICogIGludGVybmFsIGFycmF5IG9wZXJhdGlvbnMgdXNlIHRoaXMgbWV0aG9kIHRvIHN0YXkgc2lsZW50LlxuICAgKiAgTk9URTogTGlrZSBnZXRWYWx1ZSgpLCByZXR1cm5zIHRoZSByYXcgdmFsdWUgdG8gdGhlIGNhbGxlci4gUmVkYWN0aW9uIGFwcGxpZXNcbiAgICogIG9ubHkgdG8gcmVjb3JkZXIgZGlzcGF0Y2gg4oCUIGl0IGRvZXMgbm90IGZpbHRlciB0aGUgcmV0dXJuZWQgdmFsdWUuIFRoaXMgbWF0Y2hlc1xuICAgKiAgdGhlIGV4aXN0aW5nIGdldFZhbHVlKCkgY29udHJhY3Qgd2hlcmUgdXNlciBjb2RlIGFsd2F5cyByZWNlaXZlcyByYXcgZGF0YS5cbiAgICpcbiAgICogIFJGQy0wMDMgRDI6IGEgc2lsZW50IHJlYWQgb2YgYSBrZXkgdGhpcyBzdGFnZSBuZXZlciBUUkFDS0VELXJlYWQgbWFya3NcbiAgICogIHRoZSBzdGFnZSdzIGNvbW1pdCB3aXRoIGB1bnRyYWNrZWRTb3VyY2VzOiBbJ3NpbGVudCddYCDigJQgYSBjYXVzYWwgc2xpY2VcbiAgICogIGJ1aWx0IGZyb20gb25SZWFkIGV2ZW50cyB3b3VsZCBtaXNzIHRoaXMgZGVwZW5kZW5jeSwgYW5kIGNvbnN1bWVycyBtdXN0XG4gICAqICBiZSB0b2xkLiBTaWxlbnQgcmVhZHMgc2hhZG93ZWQgYnkgYSB0cmFja2VkIHJlYWQgb2YgdGhlIHNhbWUga2V5ICh0aGVcbiAgICogIGFycmF5LXByb3h5IHBhdHRlcm4gYWJvdmUpIGFyZSBub3QgZmxhZ2dlZDogdGhlaXIgZWRnZSBpcyBjYXB0dXJlZC4gQVxuICAgKiAgd2hvbGUtc3RhdGUgc2lsZW50IHJlYWQgKG5vIGtleSkgaXMgYWx3YXlzIGZsYWdnZWQuICovXG4gIGdldFZhbHVlU2lsZW50KGtleT86IHN0cmluZyk6IHVua25vd24ge1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5fdHJhY2tlZFJlYWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLl9zdGFnZUNvbnRleHQubWFya1VudHJhY2tlZFNvdXJjZSgnc2lsZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWVEaXJlY3QoW10sIGtleSk7XG4gIH1cblxuICAvLyDilIDilIAgU3RhdGUgQWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldEluaXRpYWxWYWx1ZUZvcihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0R2xvYmFsPy4oa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja2VkIHJlYWQgb2Ygc2hhcmVkIHN0YXRlLlxuICAgKlxuICAgKiAqKlJlYWQgdmFsdWVzIGFyZSBCT1JST1dFRCDigJQgZG8gbm90IG11dGF0ZSB0aGVtLioqIFNpbmNlIHRoZSBsYXp5IGJ1ZmZlclxuICAgKiAoIzEzKSwgcmVhZHMgYmVmb3JlIHRoZSBzdGFnZSdzIGZpcnN0IHdyaXRlIHJldHVybiByZWZlcmVuY2VzIElOVE9cbiAgICogQ09NTUlUVEVEIFNIQVJFRCBTVEFURSwgYW5kIHJlYWRzIGFmdGVyIGEgd3JpdGUgcmV0dXJuIHJlZmVyZW5jZXMgaW50b1xuICAgKiB0aGUgc3RhZ2UncyBwcml2YXRlIHRyYW5zYWN0aW9uLWJ1ZmZlciB3b3JraW5nIGNvcHkgKHRoZSBlYWdlciBlbmdpbmVcbiAgICogcmV0dXJuZWQgcmVmZXJlbmNlcyBpbnRvIHRoYXQgd29ya2luZyBjb3B5IGZvciBBTEwgcmVhZHMpLiBNdXRhdGluZyBhXG4gICAqIHJldHVybmVkIHZhbHVlIGluIHBsYWNlIHdvdWxkIGNvcnJ1cHQgc3RhdGUgd2l0aG91dCBhIGNvbW1pdCByZWNvcmQg4oCUXG4gICAqIHdyaXRlIGNoYW5nZXMgYmFjayB2aWEgYHNldFZhbHVlYC9gdXBkYXRlVmFsdWVgIGluc3RlYWQuIFR5cGVkU2NvcGVcbiAgICogY29uc3VtZXJzIGFyZSBzYWZlIGF1dG9tYXRpY2FsbHk6IHRoZSBwcm94eSByb3V0ZXMgZXZlcnkgbXV0YXRpb25cbiAgICogdGhyb3VnaCBgc2V0VmFsdWVgL2B1cGRhdGVWYWx1ZWAvY29weS1vbi13cml0ZSBhcnJheSBvcHMuXG4gICAqXG4gICAqIFRoZXJlIGlzIGRlbGliZXJhdGVseSBOTyBkZXYtbW9kZSBmcmVlemUgZ3VhcmQgaGVyZTogZGVlcC1mcmVlemluZyBhXG4gICAqIGJ1ZmZlci1zZXJ2ZWQgcmVhZCB3b3VsZCBmcmVlemUgdGhlIHN0YWdlJ3Mgb3duIHdvcmtpbmcgY29weSBhbmQgbWFrZSBhXG4gICAqIGxlZ2l0aW1hdGUgcmVhZC10aGVuLWRlZXAtd3JpdGUgdGhyb3csIGFuZCBmcmVlemluZyBhIGNvbW1pdHRlZC1zdGF0ZVxuICAgKiByZWFkIG11dGF0ZXMgYW4gb2JqZWN0IHNoYXJlZCB3aXRoIGV2ZXJ5IG90aGVyIGNvbnN1bWVyIG9mIHRoZSBsaXZlXG4gICAqIHN0YXRlLiBTZWUgYHNyYy9saWIvbWVtb3J5L1JFQURNRS5tZGAgKFwiUmVhZCB2YWx1ZXMgYXJlIGJvcnJvd2VkXCIpLlxuICAgKlxuICAgKiBSZWNvcmRlciBub3RlOiB0aGUgYG9uUmVhZGAgZXZlbnQgYmVsb3cgcGFzc2VzIHRoZSBTQU1FIGxpdmUgcmVmZXJlbmNlXG4gICAqIChubyBjbG9uZSkgdW5sZXNzIGZpZWxkLWxldmVsIHJlZGFjdGlvbiBzY3J1YnMgYSBjb3B5IOKAlCByZWNvcmRlcnMgbXVzdFxuICAgKiB0cmVhdCBldmVudCB2YWx1ZXMgYXMgcmVhZC1vbmx5IHRvby5cbiAgICovXG4gIGdldFZhbHVlKGtleT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQXQoW10sIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogUGF0aC1hd2FyZSBhZGFwdGVyIGFjY2Vzcy4gU2VnbWVudHMgc3RheSBzZXBhcmF0ZSBmcm9tIGxpdGVyYWwgZG90dGVkIGtleXMgaW4gU1RBVEU7XG4gICAqIHRoZSByZWNvcmRlciBldmVudCdzIGBrZXlgIGlzIG9ubHkgYSBkb3Qtam9pbmVkIGRpc3BsYXkgbGFiZWwsIHNvIGBbJ3VzZXInLCdzc24nXWAgYW5kXG4gICAqIGEgbGl0ZXJhbCB0b3AtbGV2ZWwgYCd1c2VyLnNzbidgIHByb2R1Y2UgdGhlIHNhbWUgZXZlbnQga2V5IChzYW1lIGZvciB0aGUgd3JpdGVzIGJlbG93KS5cbiAgICovXG4gIGdldFZhbHVlQXQocGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKHBhdGgsIGtleSk7XG5cbiAgICAvLyBSRkMtMDAzIEQyOiByZW1lbWJlciB0cmFja2VkIGtleXMgc28gbGF0ZXIgU0lMRU5UIHJlYWRzIG9mIHRoZSBzYW1lXG4gICAgLy8ga2V5IGNvdW50IGFzIHNoYWRvd2VkIChlZGdlIGFscmVhZHkgY2FwdHVyZWQpIGluc3RlYWQgb2YgdW50cmFja2VkLlxuICAgIC8vIE9ubHkgYSB3aG9sZSB0b3AtbGV2ZWwgdmFsdWUgc2hhZG93cyBhIGxhdGVyIHNpbGVudCByZWFkIG9mIHRoYXQgdmFsdWUuXG4gICAgLy8gUmVhZGluZyBvbmUgbmVzdGVkIGZpZWxkIG11c3Qgbm90IGNsYWltIHRvIGhhdmUgb2JzZXJ2ZWQgaXRzIHNpYmxpbmdzLlxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiBrZXkgIT09IHVuZGVmaW5lZCkgdGhpcy5fdHJhY2tlZFJlYWRLZXlzLmFkZChrZXkpO1xuICAgIGVsc2UgaWYgKHBhdGgubGVuZ3RoID09PSAxICYmIGtleSA9PT0gdW5kZWZpbmVkKSB0aGlzLl90cmFja2VkUmVhZEtleXMuYWRkKHBhdGhbMF0hKTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQSB3aG9sZS1zdGF0ZSByZWFkIChubyBrZXkpIGlzIHNlcnZlZCB3aXRoIGV2ZXJ5IHJlZGFjdGVkIGtleSBpbnNpZGVcbiAgICAgIC8vIGl0IHNjcnViYmVkOyBhIGtleWVkIHJlYWQgaXMgc2VydmVkIHVuZGVyIHRoZSBrZXkncyB2ZXJkaWN0LlxuICAgICAgY29uc3Qgd2hvbGVTdGF0ZSA9IHBhdGgubGVuZ3RoID09PSAwICYmIGtleSA9PT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmVyZGljdCA9IHdob2xlU3RhdGUgPyBDTEVBUiA6IGtleSA9PT0gdW5kZWZpbmVkID8gdGhpcy5ydWxlLnZlcmRpY3QocGF0aCkgOiB0aGlzLnJ1bGUudmVyZGljdEF0KHBhdGgsIGtleSk7XG4gICAgICBjb25zdCByZWNvcmRlclZhbHVlID0gd2hvbGVTdGF0ZSA/IHRoaXMucnVsZS5yZXRhaW5SZWNvcmQodmFsdWUpIDogUmVkYWN0aW9uUnVsZS5hcHBseSh2ZXJkaWN0LCB2YWx1ZSk7XG4gICAgICBjb25zdCBldmVudEtleSA9IHBhdGgubGVuZ3RoID09PSAwID8ga2V5IDogKGtleSA9PT0gdW5kZWZpbmVkID8gcGF0aCA6IFsuLi5wYXRoLCBrZXldKS5qb2luKCcuJyk7XG5cbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUmVhZCcsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAga2V5OiBldmVudEtleSxcbiAgICAgICAgdmFsdWU6IHJlY29yZGVyVmFsdWUsXG4gICAgICAgIHJlZGFjdGVkOiB2ZXJkaWN0LmtpbmQgIT09ICdjbGVhcicgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc2V0VmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNldFZhbHVlQXQoW10sIGtleSwgdmFsdWUsIHNob3VsZFJlZGFjdCwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqIFBhdGgtYXdhcmUgd3JpdGVzIHNoYXJlIHJlY29yZGluZywgcmVkYWN0aW9uIGFuZCBsaWZldGltZSBwb2xpY3kgd2l0aCBmbGF0IHdyaXRlcy4gKi9cbiAgc2V0VmFsdWVBdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IGV2ZW50S2V5ID0gcGF0aC5sZW5ndGggPT09IDAgPyBrZXkgOiBbLi4ucGF0aCwga2V5XS5qb2luKCcuJyk7XG4gICAgYXNzZXJ0Tm90UmVhZG9ubHkodGhpcy5fcmVhZE9ubHlWYWx1ZXMsIHBhdGhbMF0gPz8ga2V5LCAnd3JpdGUnKTtcbiAgICB0aGlzLmFzc2VydExpdmUoZXZlbnRLZXkpO1xuXG4gICAgLy8gRGV2LW1vZGU6IHdhcm4gaWYgdGhlIHZhbHVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gICAgLy8gQ2hlY2sgQUZURVIgYXNzZXJ0Tm90UmVhZG9ubHkg4oCUIGRvbid0IHdhcm4gZm9yIHdyaXRlcyB0aGF0IHdpbGwgYmUgYmxvY2tlZC5cbiAgICAvLyBDaXJjdWxhciB2YWx1ZXMgd29yayAodGVybWluYWwgcHJveHkgaGFuZGxlcyB0aGVtKSBidXQgY2FuIHByb2R1Y2VcbiAgICAvLyBzdXJwcmlzaW5nIGJlaGF2aW9yIGluIG5hcnJhdGl2ZSwgSlNPTiBzZXJpYWxpemF0aW9uLCBhbmQgc25hcHNob3RzLlxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaGFzQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludF0gQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluIHNldFZhbHVlKCcke2V2ZW50S2V5fScpLiBgICtcbiAgICAgICAgICAgICdXcml0ZXMgcGFzdCB0aGUgY3ljbGUgZGVwdGggd2lsbCB1c2UgdGVybWluYWwgcHJveHkgdHJhY2tpbmcuICcgK1xuICAgICAgICAgICAgJ0NvbnNpZGVyIGZsYXR0ZW5pbmcgdGhlIGRhdGEgc3RydWN0dXJlLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIGNvbnRleHQgaXMgdGhlIE9ORSBmdW5uZWw6IGl0IGRlY2lkZXMgdGhlIHZlcmRpY3QgKGV4cGxpY2l0IGZsYWcsXG4gICAgLy8gcG9saWN5IGtleS9wYXR0ZXJuLCBwZXItcnVuIG1hcmssIG9yIGZpZWxkLWxldmVsIHNjcnViKSwgc3RhZ2VzIHRoZVxuICAgIC8vIHdyaXRlIHdpdGggdGhlIHBhdGhzIHRoZSBsb2cgd2lsbCBzY3J1YiwgYW5kIGhhbmRzIHRoZSB2ZXJkaWN0IGJhY2sgc29cbiAgICAvLyByZWNvcmRlcnMgc2VlIHRoZSBzYW1lIGRlY2lzaW9uIHRoZSByZXRhaW5lZCByZWNvcmQgaG9sZHMuXG4gICAgY29uc3QgdmVyZGljdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSwgc2hvdWxkUmVkYWN0LCBkZXNjcmlwdGlvbik7XG5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uV3JpdGUnLCB7XG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGtleTogZXZlbnRLZXksXG4gICAgICAgIHZhbHVlOiBSZWRhY3Rpb25SdWxlLmFwcGx5KHZlcmRpY3QsIHZhbHVlKSxcbiAgICAgICAgb3BlcmF0aW9uOiAnc2V0JyxcbiAgICAgICAgcmVkYWN0ZWQ6IHZlcmRpY3Qua2luZCAhPT0gJ2NsZWFyJyB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlVmFsdWVBdChbXSwga2V5LCB2YWx1ZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqIFBhdGgtYXdhcmUgbWVyZ2VzIHVzZSB0aGUgc2FtZSB3cml0ZSBmdW5uZWwgYXMgcmVwbGFjZW1lbnRzLiAqL1xuICB1cGRhdGVWYWx1ZUF0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgZXZlbnRLZXkgPSBwYXRoLmxlbmd0aCA9PT0gMCA/IGtleSA6IFsuLi5wYXRoLCBrZXldLmpvaW4oJy4nKTtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywgcGF0aFswXSA/PyBrZXksICd3cml0ZScpO1xuICAgIHRoaXMuYXNzZXJ0TGl2ZShldmVudEtleSk7XG5cbiAgICAvLyBEZXYtbW9kZTogc2FtZSBjaXJjdWxhciBjaGVjayBhcyBzZXRWYWx1ZSAobWVyZ2UgdGFyZ2V0cyBjYW4gYmUgY2lyY3VsYXIgdG9vKVxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaGFzQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWUpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludF0gQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluIHVwZGF0ZVZhbHVlKCcke2V2ZW50S2V5fScpLiBgICtcbiAgICAgICAgICAgICdDb25zaWRlciBmbGF0dGVuaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZlcmRpY3QgPSB0aGlzLl9zdGFnZUNvbnRleHQudXBkYXRlT2JqZWN0KHBhdGgsIGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uKTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25Xcml0ZScsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAga2V5OiBldmVudEtleSxcbiAgICAgICAgdmFsdWU6IFJlZGFjdGlvblJ1bGUuYXBwbHkodmVyZGljdCwgdmFsdWUpLFxuICAgICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgICByZWRhY3RlZDogdmVyZGljdC5raW5kICE9PSAnY2xlYXInIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGFzc2VydE5vdFJlYWRvbmx5KHRoaXMuX3JlYWRPbmx5VmFsdWVzLCBrZXksICdkZWxldGUnKTtcbiAgICB0aGlzLmFzc2VydExpdmUoa2V5KTtcblxuICAgIC8vIERlbGV0aW5nIGEga2V5IGNsZWFycyBpdHMgcGVyLWNhbGwgcmVkYWN0aW9uIG1hcmsgKHRoZSBjb250ZXh0J3NcbiAgICAvLyBmdW5uZWwgZG9lcyB0aGF0KTsgYSBwb2xpY3kgdmVyZGljdCBvbiB0aGUga2V5IHN1cnZpdmVzLlxuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdW5kZWZpbmVkLCBmYWxzZSwgZGVzY3JpcHRpb24gPz8gYGRlbGV0ZWQgJHtrZXl9YCwgJ2RlbGV0ZScpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZScsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHNldEdsb2JhbChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgdGhpcy5hc3NlcnRMaXZlKGtleSk7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRHbG9iYWw/LihrZXksIHZhbHVlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldEdsb2JhbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0R2xvYmFsPy4oa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc2V0T2JqZWN0SW5Sb290KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuYXNzZXJ0TGl2ZShrZXkpO1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuc2V0Um9vdD8uKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlYWQtb25seSArIG1pc2Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlYWRvbmx5IGlucHV0IHZhbHVlcyBwYXNzZWQgdG8gdGhpcyBwaXBlbGluZSwgY2FzdCB0byBgVGAuXG4gICAqIE9yZGluYXJ5IG11dGFibGUgcmVjb3Jkcy9hcnJheXMgYXJlIGNvcGllZCBhbmQgZnJvemVuLCBub3QgZnJvemVuIGluIHBsYWNlLlxuICAgKiBPcGFxdWUgY2FwYWJpbGl0aWVzIGFuZCBleHBsaWNpdGx5IGZyb3plbiB3cmFwcGVycyByZW1haW4gYm9ycm93ZWQvbGl2ZTtcbiAgICogc2VlIGBwcm90ZWN0aW9uL3JlYWRvbmx5SW5wdXQudHMgwrcgY3JlYXRlRnJvemVuQXJnc2AgZm9yIHRoZSBvd25lcnNoaXAgcnVsZS5cbiAgICogQ2FjaGVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIGZvciB6ZXJvLWFsbG9jYXRpb24gcmVwZWF0ZWQgYWNjZXNzLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHsgYXBwbGljYW50TmFtZSwgaW5jb21lIH0gPSBzY29wZS5nZXRBcmdzPHsgYXBwbGljYW50TmFtZTogc3RyaW5nOyBpbmNvbWU6IG51bWJlciB9PigpO1xuICAgKiBgYGBcbiAgICpcbiAgICogUkZDLTAwMyBEMjogYXJncyBhcmUgdW50cmFja2VkIEJZIERFU0lHTiwgc28gY2FsbGluZyB0aGlzICh3aXRoIGFjdHVhbFxuICAgKiBpbnB1dCBwcmVzZW50KSBtYXJrcyB0aGUgc3RhZ2UncyBjb21taXQgd2l0aCBgdW50cmFja2VkU291cmNlczogWydhcmdzJ11gXG4gICAqIOKAlCB0ZWxsaW5nIGNhdXNhbC1zbGljZSBjb25zdW1lcnMgdGhlIGJhY2t3YXJkIHNsaWNlIG1heSBiZSBpbmNvbXBsZXRlXG4gICAqIGhlcmUuIEFuIGVtcHR5LWFyZ3MgcmVhZCBjYXJyaWVzIG5vIGluZm9ybWF0aW9uIGFuZCBpcyBub3QgZmxhZ2dlZC5cbiAgICovXG4gIGdldEFyZ3M8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOiBUIHtcbiAgICBpZiAodGhpcy5faGFzQXJncykgdGhpcy5fc3RhZ2VDb250ZXh0Lm1hcmtVbnRyYWNrZWRTb3VyY2UoJ2FyZ3MnKTtcbiAgICByZXR1cm4gdGhpcy5fZnJvemVuQXJncyBhcyBUO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5IGluZnJhc3RydWN0dXJlIHZhbHVlc1xuICAgKiB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMgKGxpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0cykuXG4gICAqXG4gICAqIENvbnRhaW5zOiBzaWduYWwgKGFib3J0KSwgdGltZW91dE1zLCB0cmFjZUlkLlxuICAgKiBGcm96ZW4gYXQgY29uc3RydWN0aW9uIHRpbWUuIEluaGVyaXRlZCBieSBzdWJmbG93cyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHsgc2lnbmFsLCB0cmFjZUlkIH0gPSBzY29wZS5nZXRFbnYoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIFJGQy0wMDMgRDI6IGVudiBpcyB1bnRyYWNrZWQgQlkgREVTSUdOLCBzbyBjYWxsaW5nIHRoaXMgKHdpdGggYVxuICAgKiBub24tZW1wdHkgZW52aXJvbm1lbnQpIG1hcmtzIHRoZSBzdGFnZSdzIGNvbW1pdCB3aXRoXG4gICAqIGB1bnRyYWNrZWRTb3VyY2VzOiBbJ2VudiddYCDigJQgc2VlIHtAbGluayBnZXRBcmdzfS5cbiAgICovXG4gIGdldEVudigpOiBSZWFkb25seTxFeGVjdXRpb25FbnY+IHtcbiAgICBpZiAodGhpcy5faGFzRW52KSB0aGlzLl9zdGFnZUNvbnRleHQubWFya1VudHJhY2tlZFNvdXJjZSgnZW52Jyk7XG4gICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkVudjtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0UGlwZWxpbmVJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgX2ludm9rZUhvb2s8SyBleHRlbmRzIFNjb3BlSG9va05hbWU+KGhvb2s6IEssIGV2ZW50OiBIb29rUGF5bG9hZDxLPik6IHZvaWQge1xuICAgIC8vIFRoZSBvbmUgcGVyLXJlY29yZGVyIGxvb3AgKGByZWNvcmRlci9ob29rcy50cyDCtyBmaXJlYCkg4oCUIHRoZSBTQU1FIGludm9rZSBwcmltaXRpdmUgdGhlXG4gICAgLy8gZGVmZXJyZWQgdGllciB1c2VzIGF0IGRlbGl2ZXJ5IHRpbWUsIHNvIHRoZSBpbmxpbmUgYW5kIGRlZmVycmVkIHBhdGhzIGNhbm5vdCBkcmlmdC5cbiAgICBmaXJlKHRoaXMuX3JlY29yZGVycywgaG9vaywgZXZlbnQsIHRoaXMuX3JvdXRlRmFpbHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNjb3BlIGNoYW5uZWwncyBpc29sYXRpb246IGEgcmVjb3JkZXIncyB0aHJvdyBiZWNvbWVzIGFuIGBvbkVycm9yYCBvbiBldmVyeSByZWNvcmRlclxuICAgKiAoc3RhbXBlZCB3aXRoIHRoaXMgc3RhZ2UpLCBhbmQgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGYgaXMgZHJvcHBlZC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlRmFpbHVyZTogSG9va0ZhaWx1cmUgPSAoZXJyb3IsIF9yZWNvcmRlciwgaG9vaykgPT4ge1xuICAgIGlmIChob29rID09PSAnb25FcnJvcicpIHJldHVybjtcbiAgICB0aGlzLl9pbnZva2VIb29rKFxuICAgICAgJ29uRXJyb3InLFxuICAgICAgcmVjb3JkZXJGYWlsdXJlRXZlbnQoXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGhvb2ssXG4gICAgICApLFxuICAgICk7XG4gIH07XG59XG4iXX0=
631
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NvcGVGYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Njb3BlL1Njb3BlRmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBRUgseUNBQThDO0FBRTlDLHdEQUE4RDtBQUM5RCxpREFHNEI7QUFDNUIsOENBQTBDO0FBRTFDLHVFQUFpRTtBQUNqRSx5REFBOEQ7QUFHOUQsbURBQWtFO0FBQ2xFLG9FQUFvRjtBQUNwRiw2Q0FBb0Q7QUFHcEQsTUFBYSxXQUFXO0lBQ2YsTUFBTSxDQUFVLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFNUQ7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBVSxtQkFBbUIsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV6RSxhQUFhLENBQWU7SUFDNUIsVUFBVSxDQUFTO0lBQ1YsZUFBZSxDQUFXO0lBRTdDLCtFQUErRTtJQUM5RCxXQUFXLENBQTBCO0lBRXRELHlFQUF5RTtJQUN4RCxhQUFhLENBQXlCO0lBRXZEO29FQUNnRTtJQUMvQyxRQUFRLENBQVU7SUFFbkMsK0RBQStEO0lBQzlDLE9BQU8sQ0FBVTtJQUVsQzs7Ozs7O09BTUc7SUFDYyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTlDLFVBQVUsR0FBb0IsRUFBRSxDQUFDO0lBRXpDOzs7Ozs7Ozs7O09BVUc7SUFDSyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCOzs7O09BSUc7SUFDSyxVQUFVLENBQWlCO0lBRW5DLFlBQVksT0FBcUIsRUFBRSxTQUFpQixFQUFFLGNBQXdCLEVBQUUsWUFBMkI7UUFDekcsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENB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QUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw0RUFBNEU7SUFFcEUsV0FBVyxDQUEwQixJQUFPLEVBQUUsS0FBcUI7UUFDekUseUZBQXlGO1FBQ3pGLHNGQUFzRjtRQUN0RixJQUFBLGVBQUksRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDYyxhQUFhLEdBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN2RSxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUNkLFNBQVMsRUFDVCxJQUFBLCtCQUFvQixFQUNsQjtZQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO1lBQ25DLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWM7WUFDakQsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztTQUNyQyxFQUNELEtBQUssRUFDTCxJQUFJLENBQ0wsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDOztBQWhyQkosa0NBaXJCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NvcGVGYWNhZGUg4oCUIEJhc2UgY2xhc3MgdGhhdCBsaWJyYXJ5IGNvbnN1bWVycyBleHRlbmQgdG8gY3JlYXRlIGN1c3RvbSBzY29wZSBjbGFzc2VzXG4gKlxuICogV3JhcHMgU3RhZ2VDb250ZXh0IChmcm9tIG1lbW9yeS8pIHRvIHByb3ZpZGUgYSBjb25zdW1lci1mcmllbmRseSBBUEkgZm9yXG4gKiBzdGF0ZSBhY2Nlc3MsIGRlYnVnIGxvZ2dpbmcsIG1ldHJpY3MsIGFuZCByZWNvcmRlciBob29rcy5cbiAqXG4gKiBDb25zdW1lcnMgZXh0ZW5kIHRoaXMgY2xhc3MgdG8gYWRkIGRvbWFpbi1zcGVjaWZpYyBwcm9wZXJ0aWVzOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIE15U2NvcGUgZXh0ZW5kcyBTY29wZUZhY2FkZSB7XG4gKiAgIGdldCB1c2VyTmFtZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRWYWx1ZSgnbmFtZScpIGFzIHN0cmluZzsgfVxuICogICBzZXQgdXNlck5hbWUodmFsdWU6IHN0cmluZykgeyB0aGlzLnNldFZhbHVlKCduYW1lJywgdmFsdWUpOyB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBzdWJmbG93U2VnbWVudHNPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB7IGhhc0NpcmN1bGFyUmVmZXJlbmNlIH0gZnJvbSAnLi4vY2FwdHVyZS9jaXJjdWxhci5qcyc7XG5pbXBvcnQge1xuICBkZXRhY2hBbmRGb3JnZXQgYXMgZGV0YWNoQW5kRm9yZ2V0U3Bhd24sXG4gIGRldGFjaEFuZEpvaW5MYXRlciBhcyBkZXRhY2hBbmRKb2luTGF0ZXJTcGF3bixcbn0gZnJvbSAnLi4vZGV0YWNoL3NwYXduLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgZGVhZEZyYW1lTWVzc2FnZSB9IGZyb20gJy4uL21lbW9yeS9ib3Jyb3dlZE11dGF0aW9uLmpzJztcbmltcG9ydCB7IENMRUFSLCBSZWRhY3Rpb25SdWxlIH0gZnJvbSAnLi4vbWVtb3J5L3JlZGFjdGlvbi5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgSG9va0ZhaWx1cmUsIEhvb2tQYXlsb2FkLCBTY29wZUhvb2tOYW1lIH0gZnJvbSAnLi4vcmVjb3JkZXIvaG9va3MuanMnO1xuaW1wb3J0IHsgZmlyZSwgcmVjb3JkZXJGYWlsdXJlRXZlbnQgfSBmcm9tICcuLi9yZWNvcmRlci9ob29rcy5qcyc7XG5pbXBvcnQgeyBhc3NlcnROb3RSZWFkb25seSwgY3JlYXRlRnJvemVuQXJncyB9IGZyb20gJy4vcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyU2NvcGVSdW50aW1lIH0gZnJvbSAnLi9ydW50aW1lLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0RXZlbnQsIFJlZGFjdGlvblBvbGljeSwgUmVkYWN0aW9uUmVwb3J0LCBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTY29wZUZhY2FkZSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQlJBTkQgPSBTeW1ib2wuZm9yKCdTY29wZUZhY2FkZUB2MScpO1xuXG4gIC8qKlxuICAgKiBTaGFyZWQgc2VudGluZWwgcmV0dXJuZWQgYnkgYF9nZXRTdWJmbG93UGF0aCgpYCBmb3Igcm9vdC1sZXZlbCBzdGFnZXNcbiAgICogKG5vIHN1YmZsb3cgbmVzdGluZykuIEF2b2lkcyBwZXItY2FsbCBhbGxvY2F0aW9uIG9mIGEgZnJlc2hcbiAgICogYE9iamVjdC5mcmVlemUoW10pYCBvbiBldmVyeSBgZW1pdEV2ZW50YCBpbiB0aGUgY29tbW9uIG5vLXN1YmZsb3cgY2FzZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9FTVBUWV9TVUJGTE9XX1BBVEg6IHJlYWRvbmx5IHN0cmluZ1tdID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5cbiAgcHJvdGVjdGVkIF9zdGFnZUNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbiAgcHJvdGVjdGVkIF9zdGFnZU5hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9yZWFkT25seVZhbHVlcz86IHVua25vd247XG5cbiAgLyoqIENhY2hlZCBkZWVwbHktZnJvemVuIGNvcHkgb2YgcmVhZE9ubHlWYWx1ZXMgZm9yIGdldEFyZ3MoKS4gQ3JlYXRlZCBvbmNlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcm96ZW5BcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIGluaGVyaXRlZCBmcm9tIHBhcmVudCBleGVjdXRvci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZXhlY3V0aW9uRW52OiBSZWFkb25seTxFeGVjdXRpb25FbnY+O1xuXG4gIC8qKiBSRkMtMDAzIEQyOiB0cnVlIHdoZW4gYGdldEFyZ3MoKWAgY2FuIHJldHVybiBhY3R1YWwgZGF0YSDigJQgYW4gZW1wdHlcbiAgICogIGB7fWAgcmVhZCBjYXJyaWVzIG5vIGluZm9ybWF0aW9uLCBzbyBpdCBpcyBuZXZlciBmbGFnZ2VkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYXNBcmdzOiBib29sZWFuO1xuXG4gIC8qKiBSRkMtMDAzIEQyOiB0cnVlIHdoZW4gYGdldEVudigpYCBjYW4gcmV0dXJuIGFjdHVhbCBkYXRhLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYXNFbnY6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJGQy0wMDMgRDI6IGtleXMgdGhpcyBzdGFnZSBoYXMgVFJBQ0tFRC1yZWFkICh2aWEgYGdldFZhbHVlKGtleSlgKS5cbiAgICogQSBzaWxlbnQgcmVhZCBvZiBhIGtleSBpbiB0aGlzIHNldCBpcyBTSEFET1dFRCDigJQgaXRzIHJlYWTihpJ3cml0ZSBlZGdlIGlzXG4gICAqIGFscmVhZHkgY2FwdHVyZWQsIHNvIGl0IGlzIG5vdCBmbGFnZ2VkIGFzIGFuIHVudHJhY2tlZCBzb3VyY2UuIFRoaXMgaXNcbiAgICogd2hhdCBrZWVwcyBUeXBlZFNjb3BlIGFycmF5LXByb3h5IGludGVybmFscyAod2hpY2ggYWx3YXlzIGZvbGxvdyBhXG4gICAqIHRyYWNrZWQgcHJvcGVydHkgcmVhZCkgYW5kIGAkYmF0Y2hBcnJheWAgaG9uZXN0LWJ1dC1xdWlldC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYWNrZWRSZWFkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgX3JlY29yZGVyczogU2NvcGVSZWNvcmRlcltdID0gW107XG5cbiAgLyoqXG4gICAqIFNldCBieSB0aGUgY29tbWl0IG9ic2VydmVyOiB0aGlzIHN0YWdlJ3MgZnJhbWUgaGFzIGZsdXNoZWQuIEEgZmFjYWRlIGlzXG4gICAqIE9ORSBzdGFnZSBleGVjdXRpb24ncyBoYW5kbGUg4oCUIHRoZSBlbmdpbmUgYnVpbGRzIGEgZnJlc2ggb25lIHBlciBzdGFnZSDigJRcbiAgICogYW5kIGV2ZXJ5IHByb3h5IHRoZSB0eXBlZCBzY29wZSBoYW5kcyBvdXQgaXMgYm91bmQgdG8gaXQuIEEgd3JpdGUgYXJyaXZpbmdcbiAgICogYWZ0ZXIgdGhlIGNvbW1pdCBjb21lcyBmcm9tIGEgaGFuZGxlIGhlbGQgcGFzdCBpdHMgc3RhZ2UgKGEgY2xvc3VyZSwgYVxuICAgKiBtb2R1bGUtbGV2ZWwgYGxldGApIGFuZCB3b3VsZCBsYW5kIGluIGEgYnVmZmVyIG5vdGhpbmcgZXZlciBjb21taXRzOiBub1xuICAgKiB0cmFjZSByb3csIHN0YXRlIHVuY2hhbmdlZC4gU28gaXQgaXMgcmVmdXNlZCAoe0BsaW5rIGFzc2VydExpdmV9KSBpbnN0ZWFkXG4gICAqIG9mIGxvc3QuIFNlYWxpbmcgaGVyZSBhbmQgbm90IG9uIGBTdGFnZUNvbnRleHRgIGlzIGRlbGliZXJhdGU6IHRoZSBmcmFtZVxuICAgKiBzdGF5cyByZS11c2FibGUgYWZ0ZXIgY29tbWl0IGJ5IGRlc2lnbiAoIzEzYiDigJQgdGhlIGVuZ2luZSdzIGRvdWJsZS1jb21taXRcbiAgICogcGF0aHMgYW5kIHRoZSBzdWJmbG93IG1lcmdlLWJhY2sgaW50byBhIGJyYW5jaCBwYXJlbnQgbmVlZCBpdCkuXG4gICAqL1xuICBwcml2YXRlIF9jb21taXR0ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBydWxlIG9mIHRoaXMgZmFjYWRlJ3Mgb3duIOKAlCBPTkxZIHdoZW4gaXRzIGNvbnRleHQgY2FycmllcyBub25lIChiYXJlXG4gICAqIGNvbnRleHRzIGluIHVuaXQgdGVzdHMpLiBVbmRlciBhbiBleGVjdXRvciB0aGUgcnVsZSBsaXZlcyBvbiB0aGUgY29udGV4dFxuICAgKiB0cmVlIGFuZCB0aGlzIHN0YXlzIHVuc2V0OyBzZWUge0BsaW5rIHJ1bGV9LlxuICAgKi9cbiAgcHJpdmF0ZSBfbG9jYWxSdWxlPzogUmVkYWN0aW9uUnVsZTtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBTdGFnZUNvbnRleHQsIHN0YWdlTmFtZTogc3RyaW5nLCByZWFkT25seVZhbHVlcz86IHVua25vd24sIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fc3RhZ2VOYW1lID0gc3RhZ2VOYW1lO1xuICAgIHRoaXMuX3JlYWRPbmx5VmFsdWVzID0gcmVhZE9ubHlWYWx1ZXM7XG4gICAgdGhpcy5fZnJvemVuQXJncyA9IGNyZWF0ZUZyb3plbkFyZ3MocmVhZE9ubHlWYWx1ZXMpO1xuICAgIHRoaXMuX2V4ZWN1dGlvbkVudiA9IE9iamVjdC5mcmVlemUoeyAuLi5leGVjdXRpb25FbnYgfSk7XG4gICAgdGhpcy5faGFzQXJncyA9IE9iamVjdC5rZXlzKHRoaXMuX2Zyb3plbkFyZ3MpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5faGFzRW52ID0gT2JqZWN0LmtleXModGhpcy5fZXhlY3V0aW9uRW52KS5sZW5ndGggPiAwO1xuICAgIC8vIFRoZSBjb250ZXh0IG11c3QgY2FycnkgdGhlIHJ1bGUgQkVGT1JFIHRoZSBmaXJzdCB3cml0ZSwgc2luY2UgdGhlXG4gICAgLy8gY29udGV4dCdzIHdyaXRlIGZ1bm5lbCBpcyB3aGF0IG1hcmtzIGEgcGVyLWNhbGwgcmVkYWN0ZWQga2V5IG9uIGl0LlxuICAgIC8vIFVuZGVyIGFuIGV4ZWN1dG9yIHRoZSBjb250ZXh0IGFscmVhZHkgaGFzIHRoZSBydW4ncyBydWxlIChpbnN0YWxsZWQgb25cbiAgICAvLyB0aGUgcm9vdCwgaW5oZXJpdGVkIGRvd24pIGFuZCB0aGlzIHJlLWluc3RhbGxzIHRoZSBzYW1lIG9iamVjdDsgb24gYVxuICAgIC8vIGJhcmUgY29udGV4dCBpdCBpbnN0YWxscyBhIGZyZXNoIG9uZS5cbiAgICB0aGlzLl9zdGFnZUNvbnRleHQudXNlUmVkYWN0aW9uUnVsZSh0aGlzLnJ1bGUpO1xuXG4gICAgLy8gUmVnaXN0ZXIgYXMgY29tbWl0IG9ic2VydmVyIHNvIFNjb3BlUmVjb3JkZXIub25Db21taXQgZmlyZXMgd2hlbiBTdGFnZUNvbnRleHQuY29tbWl0KCkgaXMgY2FsbGVkXG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LnNldENvbW1pdE9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuX29uQ29tbWl0RmlyZWQobXV0YXRpb25zKTtcbiAgICB9KTtcbiAgICByZWdpc3RlclNjb3BlUnVudGltZSh0aGlzLCB7IHRhcmdldDogdGhpcywgaGFuZGxlc0Fzc2lnbm1lbnRzOiBmYWxzZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVkYWN0aW9uIHJ1bGUgdGhpcyBmYWNhZGUgZGVjaWRlcyB3aXRoIOKAlCB0aGUgU0FNRSBvYmplY3QgaXRzXG4gICAqIGBTdGFnZUNvbnRleHRgIHJldGFpbnMgd2l0aCAoYG1lbW9yeS9yZWRhY3Rpb24udHNgLCB0aGUgb25lIG93bmVyKS4gVW5kZXJcbiAgICogYW4gZXhlY3V0b3IgdGhlIHJ1bGUgaXMgaW5zdGFsbGVkIG9uIHRoZSBydW50aW1lIHJvb3QgYW5kIGluaGVyaXRlZCBieVxuICAgKiBldmVyeSBjb250ZXh0LCBzbyB0aGUgZmFjYWRlIHNpbXBseSByZWFkcyBpdC4gT24gYSBiYXJlIGNvbnRleHQgKHVuaXRcbiAgICogdGVzdHMsIGhhbmQtYnVpbHQgc2NvcGVzKSB0aGUgZmFjYWRlIGNyZWF0ZXMgb25lIGFuZCBpbnN0YWxscyBpdCBvbiB0aGVcbiAgICogY29udGV4dCwgc28gdGhlIGNvbnRleHQncyByZXRlbnRpb24gYW5kIHRoZSBmYWNhZGUncyByZWNvcmRlciB2aWV3c1xuICAgKiBzdGlsbCBzaGFyZSBhIHNpbmdsZSB2ZXJkaWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgcnVsZSgpOiBSZWRhY3Rpb25SdWxlIHtcbiAgICBjb25zdCBzaGFyZWQgPSB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0UmVkYWN0aW9uUnVsZSgpO1xuICAgIGlmIChzaGFyZWQpIHJldHVybiBzaGFyZWQ7XG4gICAgaWYgKCF0aGlzLl9sb2NhbFJ1bGUpIHtcbiAgICAgIHRoaXMuX2xvY2FsUnVsZSA9IG5ldyBSZWRhY3Rpb25SdWxlKCk7XG4gICAgICB0aGlzLl9zdGFnZUNvbnRleHQudXNlUmVkYWN0aW9uUnVsZSh0aGlzLl9sb2NhbFJ1bGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbG9jYWxSdWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYXJlIGEgcmVkYWN0ZWQta2V5cyBzZXQgYWNyb3NzIG11bHRpcGxlIFNjb3BlRmFjYWRlIGluc3RhbmNlcy5cbiAgICogQ2FsbCB0aGlzIHRvIG1ha2UgcmVkYWN0aW9uIHBlcnNpc3QgYWNyb3NzIHN0YWdlcyBpbiB0aGUgc2FtZSBwaXBlbGluZS5cbiAgICogKFVuZGVyIGFuIGV4ZWN1dG9yIHRoZSBydW4ncyBydWxlIGFscmVhZHkgc2hhcmVzIG9uZSBzZXQ7IHRoaXMgY2FsbCBpc1xuICAgKiB0aGVuIGEgbm8tb3AuKVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVzZVNoYXJlZFJlZGFjdGVkS2V5cyhzaGFyZWRTZXQ6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5ydWxlLnVzZU1hcmtlZEtleXMoc2hhcmVkU2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJlZGFjdGVkLWtleXMgc2V0IChmb3Igc2hhcmluZyB3aXRoIG90aGVyIHNjb3BlcykuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0UmVkYWN0ZWRLZXlzKCk6IFNldDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ydWxlLm1hcmtlZEtleXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIGRlY2xhcmF0aXZlIHJlZGFjdGlvbiBwb2xpY3kuIFRoZSBwb2xpY3kgaXMgYWRkaXRpdmUg4oCUXG4gICAqIGl0IHdvcmtzIGFsb25nc2lkZSBtYW51YWwgYHNldFZhbHVlKC4uLiwgdHJ1ZSlgIGNhbGxzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVzZVJlZGFjdGlvblBvbGljeShwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IHZvaWQge1xuICAgIHRoaXMucnVsZS5zZXRQb2xpY3kocG9saWN5KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0UmVkYWN0aW9uUG9saWN5KCk6IFJlZGFjdGlvblBvbGljeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucnVsZS5nZXRQb2xpY3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxpYW5jZS1mcmllbmRseSByZXBvcnQgb2YgYWxsIHJlZGFjdGlvbiBhY3Rpdml0eS5cbiAgICogTmV2ZXIgaW5jbHVkZXMgYWN0dWFsIHZhbHVlcyDigJQgb25seSBrZXkgbmFtZXMsIGZpZWxkIG5hbWVzLCBhbmQgcGF0dGVybnMuXG4gICAqL1xuICBnZXRSZWRhY3Rpb25SZXBvcnQoKTogUmVkYWN0aW9uUmVwb3J0IHtcbiAgICByZXR1cm4gdGhpcy5ydWxlLnJlcG9ydCgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNjb3BlUmVjb3JkZXIgTWFuYWdlbWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhdHRhY2hTY29wZVJlY29yZGVyKHJlY29yZGVyOiBTY29wZVJlY29yZGVyKTogdm9pZCB7XG4gICAgLy8gUmVwbGFjZSBleGlzdGluZyByZWNvcmRlciB3aXRoIHNhbWUgSUQgKGlkZW1wb3RlbnQg4oCUIHByZXZlbnRzIGRvdWJsZS1jb3VudGluZylcbiAgICB0aGlzLl9yZWNvcmRlcnMgPSB0aGlzLl9yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSByZWNvcmRlci5pZCk7XG4gICAgdGhpcy5fcmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgZGV0YWNoU2NvcGVSZWNvcmRlcihyZWNvcmRlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWNvcmRlcnMgPSB0aGlzLl9yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSByZWNvcmRlcklkKTtcbiAgfVxuXG4gIGdldFNjb3BlUmVjb3JkZXJzKCk6IFNjb3BlUmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9yZWNvcmRlcnNdO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBub3RpZnlTdGFnZVN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uU3RhZ2VTdGFydCcsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBub3RpZnlTdGFnZUVuZChkdXJhdGlvbj86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uU3RhZ2VFbmQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGR1cmF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBub3RpZnlQYXVzZShwYXVzZURhdGE/OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25QYXVzZScsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgcGF1c2VEYXRhLFxuICAgICAgY2hhbm5lbDogJ3Njb3BlJyBhcyBjb25zdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5UmVzdW1lKGhhc0lucHV0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25SZXN1bWUnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGhhc0lucHV0LFxuICAgICAgY2hhbm5lbDogJ3Njb3BlJyBhcyBjb25zdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5Q29tbWl0KG11dGF0aW9uczogQ29tbWl0RXZlbnRbJ211dGF0aW9ucyddKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25Db21taXQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIG11dGF0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZ1c2UgYSB3cml0ZSBmcm9tIGEgaGFuZGxlIGhlbGQgcGFzdCBpdHMgc3RhZ2UgKDkuMjIuMCkuIFRocm93cyB3aXRoIHRoZVxuICAgKiBzdGFnZSB0aGUgaGFuZGxlIGNhbWUgZnJvbTsgdGhlIGVuZ2luZSdzIGVycm9yIHBhdGggYXR0cmlidXRlcyB0aGUgdGhyb3dcbiAgICogdG8gdGhlIHN0YWdlIHRoYXQgbWFkZSB0aGUgd3JpdGUuXG4gICAqL1xuICBwcml2YXRlIGFzc2VydExpdmUoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29tbWl0dGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZGVhZEZyYW1lTWVzc2FnZSh0aGlzLl9zdGFnZU5hbWUsIHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCwga2V5KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENhbGxlZCBieSBTdGFnZUNvbnRleHQuY29tbWl0KCkgb2JzZXJ2ZXIuIENvbnZlcnRzIHRyYWNrZWQgd3JpdGVzIHRvIENvbW1pdEV2ZW50IGZvcm1hdC5cbiAgICogIEVycm9ycyBhcmUgY2F1Z2h0IHRvIHByZXZlbnQgcmVjb3JkZXIgaXNzdWVzIGZyb20gYWJvcnRpbmcgdGhlIHRyYXZlcnNhbC4gKi9cbiAgcHJpdmF0ZSBfb25Db21taXRGaXJlZChtdXRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHVua25vd247IG9wZXJhdGlvbjogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnIH0+KTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWl0dGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGBfc3RhZ2VXcml0ZXNgIGFscmVhZHkgaG9sZHMgdGhlIHJldGFpbmVkIGZvcm0gKHRoZSBjb250ZXh0IHJldGFpbnNcbiAgICAgIC8vIHVuZGVyIHRoZSBzYW1lIHJ1bGUpOyBhcHBseWluZyB0aGUgdmVyZGljdCBhZ2FpbiBoZXJlIGlzIGlkZW1wb3RlbnRcbiAgICAgIC8vIGFuZCBrZWVwcyBhIGtleSBtYXJrZWQgQUZURVIgaXRzIHdyaXRlIHNjcnViYmVkIGF0IGNvbW1pdCB0aW1lLlxuICAgICAgY29uc3QgY29tbWl0TXV0YXRpb25zOiBDb21taXRFdmVudFsnbXV0YXRpb25zJ10gPSBPYmplY3QuZW50cmllcyhtdXRhdGlvbnMpLm1hcCgoW2tleSwgZW50cnldKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiB0aGlzLnJ1bGUucmV0YWluKFtrZXldLCBlbnRyeS52YWx1ZSksXG4gICAgICAgIG9wZXJhdGlvbjogZW50cnkub3BlcmF0aW9uLFxuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLm5vdGlmeUNvbW1pdChjb21taXRNdXRhdGlvbnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU3dhbGxvdyDigJQgcmVjb3JkZXIgZXJyb3JzIG11c3Qgbm90IGFib3J0IHRoZSB0cmF2ZXJzYWwuXG4gICAgICAvLyBJbmRpdmlkdWFsIHJlY29yZGVyIGVycm9ycyBhcmUgYWxyZWFkeSBpc29sYXRlZCBieSBfaW52b2tlSG9vay5cbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgRGVidWcgLyBEaWFnbm9zdGljcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gVGhlc2UgbGVnYWN5IG1ldGhvZHMgc3RpbGwgd3JpdGUgdG8gdGhlIGBTdGFnZUNvbnRleHRgIGRpYWdub3N0aWNcbiAgLy8gc2lkZSBiYWdzIChsb2dDb250ZXh0IC8gZXJyb3JDb250ZXh0IC8gbWV0cmljQ29udGV4dCAvIGV2YWxDb250ZXh0KSBmb3JcbiAgLy8gc25hcHNob3QgaW5jbHVzaW9uLiBUaGV5IEFMU08gZmlyZSB0aHJvdWdoIHRoZSBFbWl0IGNoYW5uZWwgc28gYW55XG4gIC8vIGF0dGFjaGVkIGBFbWl0UmVjb3JkZXJgIHNlZXMgdGhlbSBpbiByZWFsIHRpbWUg4oCUIGNsb3NpbmcgdGhlXG4gIC8vIGxvbmctc3RhbmRpbmcgZ2FwIHdoZXJlIGAkZGVidWdgL2AkbWV0cmljYCB3ZW50IHRvIHVub2JzZXJ2ZWQgYmFncy5cblxuICBhZGREZWJ1Z0luZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5hZGREaWFnbm9zdGljKCdsb2dzJywga2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYGxvZy5kZWJ1Zy4ke2tleX1gLCB7IGtleSwgdmFsdWU6IGtlcHQsIGxldmVsOiAnZGVidWcnIH0pO1xuICB9XG5cbiAgYWRkRGVidWdNZXNzYWdlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5hZGREaWFnbm9zdGljKCdsb2dzJywgJ21lc3NhZ2VzJywgW3ZhbHVlXSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2xvZy5kZWJ1Zy5tZXNzYWdlcycsIHsgdmFsdWU6IEFycmF5LmlzQXJyYXkoa2VwdCkgPyBrZXB0WzBdIDoga2VwdCwgbGV2ZWw6ICdkZWJ1ZycgfSk7XG4gIH1cblxuICBhZGRFcnJvckluZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5hZGREaWFnbm9zdGljKCdlcnJvcnMnLCBrZXksIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgbG9nLmVycm9yLiR7a2V5fWAsIHsga2V5LCB2YWx1ZToga2VwdCwgbGV2ZWw6ICdlcnJvcicgfSk7XG4gIH1cblxuICBhZGRNZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IGtlcHQgPSB0aGlzLl9zdGFnZUNvbnRleHQuYWRkRGlhZ25vc3RpYygnbWV0cmljcycsIG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgbWV0cmljLiR7bWV0cmljTmFtZX1gLCB7IG5hbWU6IG1ldHJpY05hbWUsIHZhbHVlOiBrZXB0IH0pO1xuICB9XG5cbiAgYWRkRXZhbChtZXRyaWNOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5hZGREaWFnbm9zdGljKCdldmFscycsIG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgZXZhbC4ke21ldHJpY05hbWV9YCwgeyBuYW1lOiBtZXRyaWNOYW1lLCB2YWx1ZToga2VwdCB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBFbWl0IOKAlCBQaGFzZSAzIHByaW1hcnkgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBGaXJlIGEgc3RydWN0dXJlZCBldmVudCB0byBldmVyeSBhdHRhY2hlZCByZWNvcmRlciBpbXBsZW1lbnRpbmdcbiAgICogYG9uRW1pdGAuIFN5bmNocm9ub3VzLCBpbi1vcmRlciwgcGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcuXG4gICAqXG4gICAqIC0gKipGYXN0LXBhdGgqKjogemVybyBhbGxvY2F0aW9uICsgemVybyBjb3N0IHdoZW4gbm8gcmVjb3JkZXJzIGFyZVxuICAgKiAgIGF0dGFjaGVkIChlYXJseSByZXR1cm4gb24gZW1wdHkgbGlzdCkuXG4gICAqIC0gKipFbnJpY2htZW50Kio6IGxpYnJhcnkgYXV0by1hZGRzIGBzdGFnZU5hbWVgLCBgcnVudGltZVN0YWdlSWRgLFxuICAgKiAgIGBzdWJmbG93UGF0aGAsIGBwaXBlbGluZUlkYCwgYHRpbWVzdGFtcGAgdG8gdGhlIGV2ZW50LlxuICAgKiAtICoqUmVkYWN0aW9uKio6IGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCByZWdleGVzIGFyZSBtYXRjaGVkXG4gICAqICAgYWdhaW5zdCBgbmFtZWAg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gICAqICAgYCdbUkVEQUNURURdJ2AgYmVmb3JlIGRpc3BhdGNoLlxuICAgKiAtICoqRXJyb3IgaXNvbGF0aW9uKio6IGEgdGhyb3dpbmcgYG9uRW1pdGAgZG9lcyBub3QgcHJvcGFnYXRlIOKAlCBpdCBpc1xuICAgKiAgIGNhdWdodCBhbmQgcm91dGVkIHRvIGBvbkVycm9yYCBvbiByZW1haW5pbmcgcmVjb3JkZXJzLCBtYXRjaGluZyB0aGVcbiAgICogICBwYXR0ZXJuIHVzZWQgYnkgb3RoZXIgc2NvcGUgZXZlbnRzLlxuICAgKlxuICAgKiBDb25zdW1lcnMgY2FsbCB0aGlzIHZpYSB0aGUgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBzY29wZSBtZXRob2Q7XG4gICAqIHRoZSBtZXRob2Qgcm91dGVzIGhlcmUgdmlhIGBjcmVhdGVUeXBlZFNjb3BlYC5cbiAgICovXG4gIGVtaXRFdmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICAvLyBGYXN0LXBhdGg6IHplcm8gd29yayB3aGVuIG5vIHJlY29yZGVycyBhcmUgYXR0YWNoZWQuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlZGFjdGlvbjogaWYgdGhlIGV2ZW50IG5hbWUgbWF0Y2hlcyBhbnkgZW1pdFBhdHRlcm4sIHJlcGxhY2UgcGF5bG9hZFxuICAgIC8vIHdpdGggJ1tSRURBQ1RFRF0nIEJFRk9SRSBjb25zdHJ1Y3RpbmcgdGhlIGV2ZW50IChubyBsZWFrIHRocm91Z2hcbiAgICAvLyBjb3B5LW9uLXdyaXRlLCBubyB3YXkgZm9yIHJlY29yZGVycyB0byBzZWUgdGhlIHJhdyB2YWx1ZSkuXG4gICAgY29uc3QgZmluYWxQYXlsb2FkID0gdGhpcy5ydWxlLnJldGFpbkVtaXQobmFtZSwgcGF5bG9hZCk7XG4gICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSB0aGlzLl9zdGFnZUNvbnRleHQuY2FwdHVyZUVtaXRQb3NpdGlvbigpO1xuXG4gICAgLy8gQnVpbGQgdGhlIGVucmljaGVkIGV2ZW50IG9uY2U7IHBhc3MgdGhlIHNhbWUgcmVmZXJlbmNlIHRvIGFsbFxuICAgIC8vIHJlY29yZGVycyB1bmRlciB0aGVpciByZWFkLW9ubHkgY29udHJhY3QuIFNvdXJjZSBjb29yZGluYXRlcyBhcmVcbiAgICAvLyBjYXB0dXJlZCBiZWZvcmUgYW55IGlubGluZSBob29rIG9yIGRlZmVycmVkIHRhcCBvYnNlcnZlcyB0aGUgZXZlbnQuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBuYW1lLFxuICAgICAgcGF5bG9hZDogZmluYWxQYXlsb2FkLFxuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IHRoaXMuX2dldFN1YmZsb3dQYXRoKCksXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAuLi4oc291cmNlUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IHt9IDogeyBzb3VyY2VQb3NpdGlvbiB9KSxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgLy8gRGlzcGF0Y2ggd2l0aCBlcnJvciBpc29sYXRpb24g4oCUIHRoZSBzYW1lIGBmaXJlYCBsb29wIGFuZCB0aGUgc2FtZSBmYWlsdXJlIHJvdXRpbmcgYXNcbiAgICAvLyBldmVyeSBvdGhlciBzY29wZSBldmVudDogYSB0aHJvd2luZyByZWNvcmRlcidzIGVycm9yIHJlYWNoZXMgb25FcnJvciBvbiB0aGUgcmVjb3JkZXJzO1xuICAgIC8vIHRoZSBlbWl0IGxvb3AgY29udGludWVzIHVuYWZmZWN0ZWQuXG4gICAgZmlyZSh0aGlzLl9yZWNvcmRlcnMsICdvbkVtaXQnLCBldmVudCwgdGhpcy5fcm91dGVGYWlsdXJlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBEZXRhY2gg4oCUIGZpcmUtYW5kLWZvcmdldCBjaGlsZCBmbG93Y2hhcnQgZXhlY3V0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvL1xuICAvLyBEZWxlZ2F0ZXMgdG8gdGhlIHNoYXJlZCBgZGV0YWNoL3NwYXduYCBoZWxwZXIsIHdoaWNoIG1pbnRzIGEgcmVmSWRcbiAgLy8gZnJvbSB0aGlzIHN0YWdlJ3MgYHJ1bnRpbWVTdGFnZUlkYCBhbmQgY2FsbHMgYGRyaXZlci5zY2hlZHVsZSgpYC5cbiAgLy8gUm91dGVkIHRocm91Z2ggYGNyZWF0ZVR5cGVkU2NvcGVgIGFzIGBzY29wZS4kZGV0YWNoQW5kSm9pbkxhdGVyKC4uLilgXG4gIC8vIGFuZCBgc2NvcGUuJGRldGFjaEFuZEZvcmdldCguLi4pYC5cblxuICAvKiogU2VlIGBTY29wZU1ldGhvZHMuJGRldGFjaEFuZEpvaW5MYXRlcmAuICovXG4gIGRldGFjaEFuZEpvaW5MYXRlcihcbiAgICBkcml2ZXI6IGltcG9ydCgnLi4vZGV0YWNoL3R5cGVzLmpzJykuRGV0YWNoRHJpdmVyLFxuICAgIGNoaWxkOiBpbXBvcnQoJy4uL2J1aWxkZXIvdHlwZXMuanMnKS5GbG93Q2hhcnQsXG4gICAgaW5wdXQ/OiB1bmtub3duLFxuICApOiBpbXBvcnQoJy4uL2RldGFjaC90eXBlcy5qcycpLkRldGFjaEhhbmRsZSB7XG4gICAgcmV0dXJuIGRldGFjaEFuZEpvaW5MYXRlclNwYXduKGRyaXZlciwgY2hpbGQsIGlucHV0LCB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIFNlZSBgU2NvcGVNZXRob2RzLiRkZXRhY2hBbmRGb3JnZXRgLiAqL1xuICBkZXRhY2hBbmRGb3JnZXQoXG4gICAgZHJpdmVyOiBpbXBvcnQoJy4uL2RldGFjaC90eXBlcy5qcycpLkRldGFjaERyaXZlcixcbiAgICBjaGlsZDogaW1wb3J0KCcuLi9idWlsZGVyL3R5cGVzLmpzJykuRmxvd0NoYXJ0LFxuICAgIGlucHV0PzogdW5rbm93bixcbiAgKTogdm9pZCB7XG4gICAgZGV0YWNoQW5kRm9yZ2V0U3Bhd24oZHJpdmVyLCBjaGlsZCwgaW5wdXQsIHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHN1YmZsb3dQYXRoIChvdXRlciDihpIgaW5uZXIpIGZvciBldmVudCBlbnJpY2htZW50LlxuICAgKlxuICAgKiBQYXJzZXMgZnJvbSBgcnVudGltZVN0YWdlSWRgIHdoaWNoIGhhcyB0aGUgZm9ybWF0XG4gICAqIGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgIChzZWUgYGxpYi9pZHMvcnVudGltZVN0YWdlSWQudHNgKS5cbiAgICogU3ViZmxvdyBpc29sYXRpb24gcHJldmVudHMgd2Fsa2luZyB0aGUgcGFyZW50LWNoYWluIGFjcm9zcyBib3VuZGFyaWVzLFxuICAgKiBzbyB0aGUgcnVudGltZVN0YWdlSWQg4oCUIGdsb2JhbGx5IHVuaXF1ZSwgaW5jbHVkZXMgZnVsbCBwYXRoIOKAlCBpcyB0aGVcbiAgICogY2Fub25pY2FsIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIHN1YmZsb3cgaGllcmFyY2h5IGF0IGVtaXQgdGltZS5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqICAgJ3NlZWQjMCcgICAgICAgICAgICAgICAgIOKGkiBbXSAgICAgICAgICAgICAgICAgICAgKHJvb3QpXG4gICAqICAgJ3NmLWlubmVyL2lubmVyIzUnICAgICAgIOKGkiBbJ3NmLWlubmVyJ11cbiAgICogICAnc2YtYS9zZi1iL3N0YWdlIzMnICAgICAg4oaSIFsnc2YtYScsICdzZi1iJ10gICAgICAobmVzdGVkKVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3ViZmxvd1BhdGgoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIGNvbnN0IHJ0aWQgPSB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKCFydGlkKSByZXR1cm4gU2NvcGVGYWNhZGUuX0VNUFRZX1NVQkZMT1dfUEFUSDtcbiAgICAvLyBUaGUgZ3JhbW1hcidzIG9uZSBvd25lciByZWFkcyB0aGUgcGF0aCBwb3J0aW9uIChgaWRzL3J1bnRpbWVTdGFnZUlkLnRzYCkuXG4gICAgY29uc3Qgc2VnbWVudHMgPSBzdWJmbG93U2VnbWVudHNPZihydGlkKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gU2NvcGVGYWNhZGUuX0VNUFRZX1NVQkZMT1dfUEFUSDtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShzZWdtZW50cyk7XG4gIH1cblxuICAvLyDilIDilIAgTm9uLVRyYWNraW5nIFN0YXRlIEluc3BlY3Rpb24gKGZvciBUeXBlZFNjb3BlIHByb3h5IGludGVybmFscykg4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIFJldHVybnMgYWxsIHN0YXRlIGtleXMgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IFR5cGVkU2NvcGUgb3duS2V5cy9oYXMgdHJhcHMuICovXG4gIGdldFN0YXRlS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWUoW10sIHVuZGVmaW5lZCk7XG4gICAgaWYgKCFzbmFwc2hvdCB8fCB0eXBlb2Ygc25hcHNob3QgIT09ICdvYmplY3QnKSByZXR1cm4gW107XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNuYXBzaG90IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgfVxuXG4gIC8qKiBDaGVjayBrZXkgZXhpc3RlbmNlIHdpdGhvdXQgZmlyaW5nIG9uUmVhZC4gVXNlZCBieSBUeXBlZFNjb3BlIGhhcyB0cmFwLlxuICAgKiAgQ29udHJhY3Q6IHJldHVybnMgZmFsc2UgZm9yIGtleXMgbmV2ZXIgc2V0IE9SIGtleXMgc2V0IHRvIHVuZGVmaW5lZC5cbiAgICogIFRoaXMgbWF0Y2hlcyBkZWxldGVWYWx1ZSgpIHNlbWFudGljcyAoc2V0cyB0byB1bmRlZmluZWQgPSBkZWxldGVkKS4gKi9cbiAgaGFzS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZShbXSwga2V5KSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgc3RhdGUgd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IGFycmF5IHByb3h5IGdldEN1cnJlbnQoKSB0byBhdm9pZFxuICAgKiAgcGhhbnRvbSByZWFkcyBvbiBpbnRlcm5hbCBhcnJheSBvcGVyYXRpb25zICgubGVuZ3RoLCAuaGFzLCBpdGVyYXRpb24sIGV0Yy4pLlxuICAgKiAgVGhlIGluaXRpYWwgcHJvcGVydHkgYWNjZXNzIGZpcmVzIG9uZSB0cmFja2VkIG9uUmVhZCB2aWEgZ2V0VmFsdWUoKTsgc3Vic2VxdWVudFxuICAgKiAgaW50ZXJuYWwgYXJyYXkgb3BlcmF0aW9ucyB1c2UgdGhpcyBtZXRob2QgdG8gc3RheSBzaWxlbnQuXG4gICAqICBOT1RFOiBMaWtlIGdldFZhbHVlKCksIHJldHVybnMgdGhlIHJhdyB2YWx1ZSB0byB0aGUgY2FsbGVyLiBSZWRhY3Rpb24gYXBwbGllc1xuICAgKiAgb25seSB0byByZWNvcmRlciBkaXNwYXRjaCDigJQgaXQgZG9lcyBub3QgZmlsdGVyIHRoZSByZXR1cm5lZCB2YWx1ZS4gVGhpcyBtYXRjaGVzXG4gICAqICB0aGUgZXhpc3RpbmcgZ2V0VmFsdWUoKSBjb250cmFjdCB3aGVyZSB1c2VyIGNvZGUgYWx3YXlzIHJlY2VpdmVzIHJhdyBkYXRhLlxuICAgKlxuICAgKiAgUkZDLTAwMyBEMjogYSBzaWxlbnQgcmVhZCBvZiBhIGtleSB0aGlzIHN0YWdlIG5ldmVyIFRSQUNLRUQtcmVhZCBtYXJrc1xuICAgKiAgdGhlIHN0YWdlJ3MgY29tbWl0IHdpdGggYHVudHJhY2tlZFNvdXJjZXM6IFsnc2lsZW50J11gIOKAlCBhIGNhdXNhbCBzbGljZVxuICAgKiAgYnVpbHQgZnJvbSBvblJlYWQgZXZlbnRzIHdvdWxkIG1pc3MgdGhpcyBkZXBlbmRlbmN5LCBhbmQgY29uc3VtZXJzIG11c3RcbiAgICogIGJlIHRvbGQuIFNpbGVudCByZWFkcyBzaGFkb3dlZCBieSBhIHRyYWNrZWQgcmVhZCBvZiB0aGUgc2FtZSBrZXkgKHRoZVxuICAgKiAgYXJyYXktcHJveHkgcGF0dGVybiBhYm92ZSkgYXJlIG5vdCBmbGFnZ2VkOiB0aGVpciBlZGdlIGlzIGNhcHR1cmVkLiBBXG4gICAqICB3aG9sZS1zdGF0ZSBzaWxlbnQgcmVhZCAobm8ga2V5KSBpcyBhbHdheXMgZmxhZ2dlZC4gKi9cbiAgZ2V0VmFsdWVTaWxlbnQoa2V5Pzogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLl90cmFja2VkUmVhZEtleXMuaGFzKGtleSkpIHtcbiAgICAgIHRoaXMuX3N0YWdlQ29udGV4dC5tYXJrVW50cmFja2VkU291cmNlKCdzaWxlbnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZURpcmVjdChbXSwga2V5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBTdGF0ZSBBY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZ2V0SW5pdGlhbFZhbHVlRm9yKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5nZXRHbG9iYWw/LihrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrZWQgcmVhZCBvZiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqICoqUmVhZCB2YWx1ZXMgYXJlIEJPUlJPV0VEIOKAlCBkbyBub3QgbXV0YXRlIHRoZW0uKiogU2luY2UgdGhlIGxhenkgYnVmZmVyXG4gICAqICgjMTMpLCByZWFkcyBiZWZvcmUgdGhlIHN0YWdlJ3MgZmlyc3Qgd3JpdGUgcmV0dXJuIHJlZmVyZW5jZXMgSU5UT1xuICAgKiBDT01NSVRURUQgU0hBUkVEIFNUQVRFLCBhbmQgcmVhZHMgYWZ0ZXIgYSB3cml0ZSByZXR1cm4gcmVmZXJlbmNlcyBpbnRvXG4gICAqIHRoZSBzdGFnZSdzIHByaXZhdGUgdHJhbnNhY3Rpb24tYnVmZmVyIHdvcmtpbmcgY29weSAodGhlIGVhZ2VyIGVuZ2luZVxuICAgKiByZXR1cm5lZCByZWZlcmVuY2VzIGludG8gdGhhdCB3b3JraW5nIGNvcHkgZm9yIEFMTCByZWFkcykuIE11dGF0aW5nIGFcbiAgICogcmV0dXJuZWQgdmFsdWUgaW4gcGxhY2Ugd291bGQgY29ycnVwdCBzdGF0ZSB3aXRob3V0IGEgY29tbWl0IHJlY29yZCDigJRcbiAgICogd3JpdGUgY2hhbmdlcyBiYWNrIHZpYSBgc2V0VmFsdWVgL2B1cGRhdGVWYWx1ZWAgaW5zdGVhZC4gVHlwZWRTY29wZVxuICAgKiBjb25zdW1lcnMgYXJlIHNhZmUgYXV0b21hdGljYWxseTogdGhlIHByb3h5IHJvdXRlcyBldmVyeSBtdXRhdGlvblxuICAgKiB0aHJvdWdoIGBzZXRWYWx1ZWAvYHVwZGF0ZVZhbHVlYC9jb3B5LW9uLXdyaXRlIGFycmF5IG9wcy5cbiAgICpcbiAgICogVGhlcmUgaXMgZGVsaWJlcmF0ZWx5IE5PIGRldi1tb2RlIGZyZWV6ZSBndWFyZCBoZXJlOiBkZWVwLWZyZWV6aW5nIGFcbiAgICogYnVmZmVyLXNlcnZlZCByZWFkIHdvdWxkIGZyZWV6ZSB0aGUgc3RhZ2UncyBvd24gd29ya2luZyBjb3B5IGFuZCBtYWtlIGFcbiAgICogbGVnaXRpbWF0ZSByZWFkLXRoZW4tZGVlcC13cml0ZSB0aHJvdywgYW5kIGZyZWV6aW5nIGEgY29tbWl0dGVkLXN0YXRlXG4gICAqIHJlYWQgbXV0YXRlcyBhbiBvYmplY3Qgc2hhcmVkIHdpdGggZXZlcnkgb3RoZXIgY29uc3VtZXIgb2YgdGhlIGxpdmVcbiAgICogc3RhdGUuIFNlZSBgc3JjL2xpYi9tZW1vcnkvUkVBRE1FLm1kYCAoXCJSZWFkIHZhbHVlcyBhcmUgYm9ycm93ZWRcIikuXG4gICAqXG4gICAqIFJlY29yZGVyIG5vdGU6IHRoZSBgb25SZWFkYCBldmVudCBiZWxvdyBwYXNzZXMgdGhlIFNBTUUgbGl2ZSByZWZlcmVuY2VcbiAgICogKG5vIGNsb25lKSB1bmxlc3MgZmllbGQtbGV2ZWwgcmVkYWN0aW9uIHNjcnVicyBhIGNvcHkg4oCUIHJlY29yZGVycyBtdXN0XG4gICAqIHRyZWF0IGV2ZW50IHZhbHVlcyBhcyByZWFkLW9ubHkgdG9vLlxuICAgKi9cbiAgZ2V0VmFsdWUoa2V5Pzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVBdChbXSwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRoLWF3YXJlIGFkYXB0ZXIgYWNjZXNzLiBTZWdtZW50cyBzdGF5IHNlcGFyYXRlIGZyb20gbGl0ZXJhbCBkb3R0ZWQga2V5cyBpbiBTVEFURTtcbiAgICogdGhlIHJlY29yZGVyIGV2ZW50J3MgYGtleWAgaXMgb25seSBhIGRvdC1qb2luZWQgZGlzcGxheSBsYWJlbCwgc28gYFsndXNlcicsJ3NzbiddYCBhbmRcbiAgICogYSBsaXRlcmFsIHRvcC1sZXZlbCBgJ3VzZXIuc3NuJ2AgcHJvZHVjZSB0aGUgc2FtZSBldmVudCBrZXkgKHNhbWUgZm9yIHRoZSB3cml0ZXMgYmVsb3cpLlxuICAgKi9cbiAgZ2V0VmFsdWVBdChwYXRoOiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWUocGF0aCwga2V5KTtcblxuICAgIC8vIFJGQy0wMDMgRDI6IHJlbWVtYmVyIHRyYWNrZWQga2V5cyBzbyBsYXRlciBTSUxFTlQgcmVhZHMgb2YgdGhlIHNhbWVcbiAgICAvLyBrZXkgY291bnQgYXMgc2hhZG93ZWQgKGVkZ2UgYWxyZWFkeSBjYXB0dXJlZCkgaW5zdGVhZCBvZiB1bnRyYWNrZWQuXG4gICAgLy8gT25seSBhIHdob2xlIHRvcC1sZXZlbCB2YWx1ZSBzaGFkb3dzIGEgbGF0ZXIgc2lsZW50IHJlYWQgb2YgdGhhdCB2YWx1ZS5cbiAgICAvLyBSZWFkaW5nIG9uZSBuZXN0ZWQgZmllbGQgbXVzdCBub3QgY2xhaW0gdG8gaGF2ZSBvYnNlcnZlZCBpdHMgc2libGluZ3MuXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwICYmIGtleSAhPT0gdW5kZWZpbmVkKSB0aGlzLl90cmFja2VkUmVhZEtleXMuYWRkKGtleSk7XG4gICAgZWxzZSBpZiAocGF0aC5sZW5ndGggPT09IDEgJiYga2V5ID09PSB1bmRlZmluZWQpIHRoaXMuX3RyYWNrZWRSZWFkS2V5cy5hZGQocGF0aFswXSEpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBIHdob2xlLXN0YXRlIHJlYWQgKG5vIGtleSkgaXMgc2VydmVkIHdpdGggZXZlcnkgcmVkYWN0ZWQga2V5IGluc2lkZVxuICAgICAgLy8gaXQgc2NydWJiZWQ7IGEga2V5ZWQgcmVhZCBpcyBzZXJ2ZWQgdW5kZXIgdGhlIGtleSdzIHZlcmRpY3QuXG4gICAgICBjb25zdCB3aG9sZVN0YXRlID0gcGF0aC5sZW5ndGggPT09IDAgJiYga2V5ID09PSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB2ZXJkaWN0ID0gd2hvbGVTdGF0ZSA/IENMRUFSIDoga2V5ID09PSB1bmRlZmluZWQgPyB0aGlzLnJ1bGUudmVyZGljdChwYXRoKSA6IHRoaXMucnVsZS52ZXJkaWN0QXQocGF0aCwga2V5KTtcbiAgICAgIGNvbnN0IHJlY29yZGVyVmFsdWUgPSB3aG9sZVN0YXRlID8gdGhpcy5ydWxlLnJldGFpblJlY29yZCh2YWx1ZSkgOiBSZWRhY3Rpb25SdWxlLmFwcGx5KHZlcmRpY3QsIHZhbHVlKTtcbiAgICAgIGNvbnN0IGV2ZW50S2V5ID0gcGF0aC5sZW5ndGggPT09IDAgPyBrZXkgOiAoa2V5ID09PSB1bmRlZmluZWQgPyBwYXRoIDogWy4uLnBhdGgsIGtleV0pLmpvaW4oJy4nKTtcblxuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25SZWFkJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgICB2YWx1ZTogcmVjb3JkZXJWYWx1ZSxcbiAgICAgICAgcmVkYWN0ZWQ6IHZlcmRpY3Qua2luZCAhPT0gJ2NsZWFyJyB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0VmFsdWVBdChbXSwga2V5LCB2YWx1ZSwgc2hvdWxkUmVkYWN0LCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKiogUGF0aC1hd2FyZSB3cml0ZXMgc2hhcmUgcmVjb3JkaW5nLCByZWRhY3Rpb24gYW5kIGxpZmV0aW1lIHBvbGljeSB3aXRoIGZsYXQgd3JpdGVzLiAqL1xuICBzZXRWYWx1ZUF0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHNob3VsZFJlZGFjdD86IGJvb2xlYW4sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgZXZlbnRLZXkgPSBwYXRoLmxlbmd0aCA9PT0gMCA/IGtleSA6IFsuLi5wYXRoLCBrZXldLmpvaW4oJy4nKTtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywgcGF0aFswXSA/PyBrZXksICd3cml0ZScpO1xuICAgIHRoaXMuYXNzZXJ0TGl2ZShldmVudEtleSk7XG5cbiAgICAvLyBEZXYtbW9kZTogd2FybiBpZiB0aGUgdmFsdWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAgICAvLyBDaGVjayBBRlRFUiBhc3NlcnROb3RSZWFkb25seSDigJQgZG9uJ3Qgd2FybiBmb3Igd3JpdGVzIHRoYXQgd2lsbCBiZSBibG9ja2VkLlxuICAgIC8vIENpcmN1bGFyIHZhbHVlcyB3b3JrICh0ZXJtaW5hbCBwcm94eSBoYW5kbGVzIHRoZW0pIGJ1dCBjYW4gcHJvZHVjZVxuICAgIC8vIHN1cnByaXNpbmcgYmVoYXZpb3IgaW4gbmFycmF0aXZlLCBKU09OIHNlcmlhbGl6YXRpb24sIGFuZCBzbmFwc2hvdHMuXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gc2V0VmFsdWUoJyR7ZXZlbnRLZXl9JykuIGAgK1xuICAgICAgICAgICAgJ1dyaXRlcyBwYXN0IHRoZSBjeWNsZSBkZXB0aCB3aWxsIHVzZSB0ZXJtaW5hbCBwcm94eSB0cmFja2luZy4gJyArXG4gICAgICAgICAgICAnQ29uc2lkZXIgZmxhdHRlbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgY29udGV4dCBpcyB0aGUgT05FIGZ1bm5lbDogaXQgZGVjaWRlcyB0aGUgdmVyZGljdCAoZXhwbGljaXQgZmxhZyxcbiAgICAvLyBwb2xpY3kga2V5L3BhdHRlcm4sIHBlci1ydW4gbWFyaywgb3IgZmllbGQtbGV2ZWwgc2NydWIpLCBzdGFnZXMgdGhlXG4gICAgLy8gd3JpdGUgd2l0aCB0aGUgcGF0aHMgdGhlIGxvZyB3aWxsIHNjcnViLCBhbmQgaGFuZHMgdGhlIHZlcmRpY3QgYmFjayBzb1xuICAgIC8vIHJlY29yZGVycyBzZWUgdGhlIHNhbWUgZGVjaXNpb24gdGhlIHJldGFpbmVkIHJlY29yZCBob2xkcy5cbiAgICBjb25zdCB2ZXJkaWN0ID0gdGhpcy5fc3RhZ2VDb250ZXh0LnNldE9iamVjdChwYXRoLCBrZXksIHZhbHVlLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25Xcml0ZScsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAga2V5OiBldmVudEtleSxcbiAgICAgICAgdmFsdWU6IFJlZGFjdGlvblJ1bGUuYXBwbHkodmVyZGljdCwgdmFsdWUpLFxuICAgICAgICBvcGVyYXRpb246ICdzZXQnLFxuICAgICAgICByZWRhY3RlZDogdmVyZGljdC5raW5kICE9PSAnY2xlYXInIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVWYWx1ZUF0KFtdLCBrZXksIHZhbHVlLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKiogUGF0aC1hd2FyZSBtZXJnZXMgdXNlIHRoZSBzYW1lIHdyaXRlIGZ1bm5lbCBhcyByZXBsYWNlbWVudHMuICovXG4gIHVwZGF0ZVZhbHVlQXQocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBldmVudEtleSA9IHBhdGgubGVuZ3RoID09PSAwID8ga2V5IDogWy4uLnBhdGgsIGtleV0uam9pbignLicpO1xuICAgIGFzc2VydE5vdFJlYWRvbmx5KHRoaXMuX3JlYWRPbmx5VmFsdWVzLCBwYXRoWzBdID8/IGtleSwgJ3dyaXRlJyk7XG4gICAgdGhpcy5hc3NlcnRMaXZlKGV2ZW50S2V5KTtcblxuICAgIC8vIERldi1tb2RlOiBzYW1lIGNpcmN1bGFyIGNoZWNrIGFzIHNldFZhbHVlIChtZXJnZSB0YXJnZXRzIGNhbiBiZSBjaXJjdWxhciB0b28pXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gdXBkYXRlVmFsdWUoJyR7ZXZlbnRLZXl9JykuIGAgK1xuICAgICAgICAgICAgJ0NvbnNpZGVyIGZsYXR0ZW5pbmcgdGhlIGRhdGEgc3RydWN0dXJlLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmVyZGljdCA9IHRoaXMuX3N0YWdlQ29udGV4dC51cGRhdGVPYmplY3QocGF0aCwga2V5LCB2YWx1ZSwgZGVzY3JpcHRpb24pO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXk6IGV2ZW50S2V5LFxuICAgICAgICB2YWx1ZTogUmVkYWN0aW9uUnVsZS5hcHBseSh2ZXJkaWN0LCB2YWx1ZSksXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHJlZGFjdGVkOiB2ZXJkaWN0LmtpbmQgIT09ICdjbGVhcicgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlVmFsdWUoa2V5OiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKSB7XG4gICAgYXNzZXJ0Tm90UmVhZG9ubHkodGhpcy5fcmVhZE9ubHlWYWx1ZXMsIGtleSwgJ2RlbGV0ZScpO1xuICAgIHRoaXMuYXNzZXJ0TGl2ZShrZXkpO1xuXG4gICAgLy8gRGVsZXRpbmcgYSBrZXkgY2xlYXJzIGl0cyBwZXItY2FsbCByZWRhY3Rpb24gbWFyayAodGhlIGNvbnRleHQnc1xuICAgIC8vIGZ1bm5lbCBkb2VzIHRoYXQpOyBhIHBvbGljeSB2ZXJkaWN0IG9uIHRoZSBrZXkgc3Vydml2ZXMuXG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LnNldE9iamVjdChbXSwga2V5LCB1bmRlZmluZWQsIGZhbHNlLCBkZXNjcmlwdGlvbiA/PyBgZGVsZXRlZCAke2tleX1gLCAnZGVsZXRlJyk7XG5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uV3JpdGUnLCB7XG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgb3BlcmF0aW9uOiAnZGVsZXRlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgc2V0R2xvYmFsKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFzc2VydExpdmUoa2V5KTtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LnNldEdsb2JhbD8uKGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0R2xvYmFsKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5nZXRHbG9iYWw/LihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzZXRPYmplY3RJblJvb3Qoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5hc3NlcnRMaXZlKGtleSk7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRSb290Py4oa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVhZC1vbmx5ICsgbWlzYyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVhZG9ubHkgaW5wdXQgdmFsdWVzIHBhc3NlZCB0byB0aGlzIHBpcGVsaW5lLCBjYXN0IHRvIGBUYC5cbiAgICogT3JkaW5hcnkgbXV0YWJsZSByZWNvcmRzL2FycmF5cyBhcmUgY29waWVkIGFuZCBmcm96ZW4sIG5vdCBmcm96ZW4gaW4gcGxhY2UuXG4gICAqIE9wYXF1ZSBjYXBhYmlsaXRpZXMgYW5kIGV4cGxpY2l0bHkgZnJvemVuIHdyYXBwZXJzIHJlbWFpbiBib3Jyb3dlZC9saXZlO1xuICAgKiBzZWUgYHByb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC50cyDCtyBjcmVhdGVGcm96ZW5BcmdzYCBmb3IgdGhlIG93bmVyc2hpcCBydWxlLlxuICAgKiBDYWNoZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgZm9yIHplcm8tYWxsb2NhdGlvbiByZXBlYXRlZCBhY2Nlc3MuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyBhcHBsaWNhbnROYW1lLCBpbmNvbWUgfSA9IHNjb3BlLmdldEFyZ3M8eyBhcHBsaWNhbnROYW1lOiBzdHJpbmc7IGluY29tZTogbnVtYmVyIH0+KCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBSRkMtMDAzIEQyOiBhcmdzIGFyZSB1bnRyYWNrZWQgQlkgREVTSUdOLCBzbyBjYWxsaW5nIHRoaXMgKHdpdGggYWN0dWFsXG4gICAqIGlucHV0IHByZXNlbnQpIG1hcmtzIHRoZSBzdGFnZSdzIGNvbW1pdCB3aXRoIGB1bnRyYWNrZWRTb3VyY2VzOiBbJ2FyZ3MnXWBcbiAgICog4oCUIHRlbGxpbmcgY2F1c2FsLXNsaWNlIGNvbnN1bWVycyB0aGUgYmFja3dhcmQgc2xpY2UgbWF5IGJlIGluY29tcGxldGVcbiAgICogaGVyZS4gQW4gZW1wdHktYXJncyByZWFkIGNhcnJpZXMgbm8gaW5mb3JtYXRpb24gYW5kIGlzIG5vdCBmbGFnZ2VkLlxuICAgKi9cbiAgZ2V0QXJnczxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCk6IFQge1xuICAgIGlmICh0aGlzLl9oYXNBcmdzKSB0aGlzLl9zdGFnZUNvbnRleHQubWFya1VudHJhY2tlZFNvdXJjZSgnYXJncycpO1xuICAgIHJldHVybiB0aGlzLl9mcm96ZW5BcmdzIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCByZWFkLW9ubHkgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzXG4gICAqIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycyAobGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzKS5cbiAgICpcbiAgICogQ29udGFpbnM6IHNpZ25hbCAoYWJvcnQpLCB0aW1lb3V0TXMsIHRyYWNlSWQuXG4gICAqIEZyb3plbiBhdCBjb25zdHJ1Y3Rpb24gdGltZS4gSW5oZXJpdGVkIGJ5IHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyBzaWduYWwsIHRyYWNlSWQgfSA9IHNjb3BlLmdldEVudigpO1xuICAgKiBgYGBcbiAgICpcbiAgICogUkZDLTAwMyBEMjogZW52IGlzIHVudHJhY2tlZCBCWSBERVNJR04sIHNvIGNhbGxpbmcgdGhpcyAod2l0aCBhXG4gICAqIG5vbi1lbXB0eSBlbnZpcm9ubWVudCkgbWFya3MgdGhlIHN0YWdlJ3MgY29tbWl0IHdpdGhcbiAgICogYHVudHJhY2tlZFNvdXJjZXM6IFsnZW52J11gIOKAlCBzZWUge0BsaW5rIGdldEFyZ3N9LlxuICAgKi9cbiAgZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj4ge1xuICAgIGlmICh0aGlzLl9oYXNFbnYpIHRoaXMuX3N0YWdlQ29udGV4dC5tYXJrVW50cmFja2VkU291cmNlKCdlbnYnKTtcbiAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uRW52O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXRQaXBlbGluZUlkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQ7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBfaW52b2tlSG9vazxLIGV4dGVuZHMgU2NvcGVIb29rTmFtZT4oaG9vazogSywgZXZlbnQ6IEhvb2tQYXlsb2FkPEs+KTogdm9pZCB7XG4gICAgLy8gVGhlIG9uZSBwZXItcmVjb3JkZXIgbG9vcCAoYHJlY29yZGVyL2hvb2tzLnRzIMK3IGZpcmVgKSDigJQgdGhlIFNBTUUgaW52b2tlIHByaW1pdGl2ZSB0aGVcbiAgICAvLyBkZWZlcnJlZCB0aWVyIHVzZXMgYXQgZGVsaXZlcnkgdGltZSwgc28gdGhlIGlubGluZSBhbmQgZGVmZXJyZWQgcGF0aHMgY2Fubm90IGRyaWZ0LlxuICAgIGZpcmUodGhpcy5fcmVjb3JkZXJzLCBob29rLCBldmVudCwgdGhpcy5fcm91dGVGYWlsdXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgY2hhbm5lbCdzIGlzb2xhdGlvbjogYSByZWNvcmRlcidzIHRocm93IGJlY29tZXMgYW4gYG9uRXJyb3JgIG9uIGV2ZXJ5IHJlY29yZGVyXG4gICAqIChzdGFtcGVkIHdpdGggdGhpcyBzdGFnZSksIGFuZCBhIHRocm93IGZyb20gYG9uRXJyb3JgIGl0c2VsZiBpcyBkcm9wcGVkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVGYWlsdXJlOiBIb29rRmFpbHVyZSA9IChlcnJvciwgX3JlY29yZGVyLCBob29rKSA9PiB7XG4gICAgaWYgKGhvb2sgPT09ICdvbkVycm9yJykgcmV0dXJuO1xuICAgIHRoaXMuX2ludm9rZUhvb2soXG4gICAgICAnb25FcnJvcicsXG4gICAgICByZWNvcmRlckZhaWx1cmVFdmVudChcbiAgICAgICAge1xuICAgICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcixcbiAgICAgICAgaG9vayxcbiAgICAgICksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -4,7 +4,7 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createScopeProxyFromZod = exports.prepareZodScope = void 0;
7
- const pathOps_js_1 = require("../../../memory/pathOps.js");
7
+ const paths_1 = require("foottrace/paths");
8
8
  const readonlyInput_js_1 = require("../../protection/readonlyInput.js");
9
9
  const validateHelper_js_1 = require("./utils/validateHelper.js");
10
10
  function validateOnWrite(schema, value, ctx, strict = 'warn', tag) {
@@ -89,7 +89,7 @@ function makeProxy(ctx, node, path, key, strict) {
89
89
  if (typeof dynKey !== 'string') {
90
90
  throw new TypeError('Zod scope record key must be a string.');
91
91
  }
92
- if ((0, pathOps_js_1.isDeniedSegment)(dynKey)) {
92
+ if ((0, paths_1.isDeniedSegment)(dynKey)) {
93
93
  throw new TypeError(`Zod scope record key '${dynKey}' is an unsafe path segment.`);
94
94
  }
95
95
  const parentPath = typeof key === 'string' ? [...path, key] : path;
@@ -158,7 +158,7 @@ function assertFieldNames(node, path, rootMethods) {
158
158
  }
159
159
  else if (node.kind === 'object') {
160
160
  for (const [key, child] of Object.entries(node.fields)) {
161
- if ((0, pathOps_js_1.isDeniedSegment)(key)) {
161
+ if ((0, paths_1.isDeniedSegment)(key)) {
162
162
  throw new TypeError(`Zod scope field '${join(path, key)}' contains an unsafe path segment.`);
163
163
  }
164
164
  if (OBJECT_METHODS.has(key) || (path.length === 0 && (key === 'ro' || rootMethods.has(key)))) {
@@ -189,4 +189,4 @@ function createScopeProxyFromZod(ctx, schema, strict = 'warn', readOnly) {
189
189
  return prepareZodScope(schema)(ctx, strict, () => frozenArgs);
190
190
  }
191
191
  exports.createScopeProxyFromZod = createScopeProxyFromZod;
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zY29wZS9zdGF0ZS96b2Qvc2NvcGVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsMkRBQTZEO0FBQzdELHdFQUFxRTtBQUVyRSxpRUFTbUM7QUFFbkMsU0FBUyxlQUFlLENBQ3RCLE1BQWlCLEVBQ2pCLEtBQWMsRUFDZCxHQUFzQixFQUN0QixTQUFxQixNQUFNLEVBQzNCLEdBQVk7SUFFWixJQUFJLE1BQU0sS0FBSyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsSUFBQSxpQ0FBYSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxHQUFHLEdBQUcsNkJBQTZCLEdBQUcsSUFBSSxLQUFLLEtBQU0sR0FBVyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqRyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwQyxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDO0FBV0QsU0FBUyxPQUFPLENBQUMsTUFBaUI7SUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUV0QyxJQUFJLElBQUEsOEJBQVUsRUFBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFBLGtDQUFjLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQXlCLE1BQU0sQ0FBQyxNQUFNLENB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QUMsQ0FBQztBQUNKLENBQUM7QUFWRCwwQ0FVQztBQUVELDJFQUEyRTtBQUMzRSxTQUFnQix1QkFBdUIsQ0FDckMsR0FBcUIsRUFDckIsTUFBUyxFQUNULFNBQXFCLE1BQU0sRUFDM0IsUUFBa0I7SUFFbEIsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQ0FBZ0IsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFSRCwwREFRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NvcGUgUHJveHkgRmFjdG9yeSDigJQgQnVpbGQgbGF6eSwgY29weS1vbi13cml0ZSBzY29wZSBmcm9tIGEgWm9kIG9iamVjdCBzY2hlbWFcbiAqL1xuXG5pbXBvcnQgeyBpc0RlbmllZFNlZ21lbnQgfSBmcm9tICcuLi8uLi8uLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVGcm96ZW5BcmdzIH0gZnJvbSAnLi4vLi4vcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0TGlrZSwgU3RyaWN0TW9kZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFpvZFNjaGVtYSxcbiAgZ2V0QXJyYXlFbGVtZW50VHlwZSxcbiAgZ2V0T2JqZWN0U2hhcGUsXG4gIGdldFJlY29yZFZhbHVlVHlwZSxcbiAgZ2V0Wm9kS2luZCxcbiAgaXNab2ROb2RlLFxuICBwYXJzZVdpdGhUaGlzLFxuICB1bndyYXAsXG59IGZyb20gJy4vdXRpbHMvdmFsaWRhdGVIZWxwZXIuanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU9uV3JpdGUoXG4gIHNjaGVtYTogWm9kU2NoZW1hLFxuICB2YWx1ZTogdW5rbm93bixcbiAgY3R4PzogU3RhZ2VDb250ZXh0TGlrZSxcbiAgc3RyaWN0OiBTdHJpY3RNb2RlID0gJ3dhcm4nLFxuICB0YWc/OiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgaWYgKHN0cmljdCA9PT0gJ29mZicpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHBhcnNlV2l0aFRoaXMoc2NoZW1hLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1zZyA9IGBbc2NoZW1hXSBpbnZhbGlkIHZhbHVlIGluICR7dGFnID8/ICdzZXQnfTogJHsoZXJyIGFzIGFueSk/Lm1lc3NhZ2UgPz8gJ3pvZCBlcnJvcid9YDtcbiAgICBjdHg/LmFkZEVycm9yPy4oJ3NjaGVtYScsIG1zZyk7XG4gICAgaWYgKHN0cmljdCA9PT0gJ3dhcm4nKSByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbnR5cGUgTm9kZUtpbmQgPSAnb2JqZWN0JyB8ICdyZWNvcmQnIHwgJ2FycmF5JyB8ICdzY2FsYXInO1xudHlwZSBOb2RlID0ge1xuICBraW5kOiBOb2RlS2luZDtcbiAgc2NoZW1hOiBab2RTY2hlbWE7XG4gIGZpZWxkcz86IFJlY29yZDxzdHJpbmcsIE5vZGU+O1xuICB2YWx1ZT86IE5vZGU7XG4gIGVsZW1lbnQ/OiBOb2RlO1xufTtcblxuZnVuY3Rpb24gYW5hbHl6ZShzY2hlbWE6IFpvZFNjaGVtYSk6IE5vZGUge1xuICBjb25zdCBiYXNlID0gdW53cmFwKHNjaGVtYSkgPz8gc2NoZW1hO1xuXG4gIGlmIChnZXRab2RLaW5kKGJhc2UpID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHNoYXBlT2JqID0gZ2V0T2JqZWN0U2hhcGUoYmFzZSk7XG4gICAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc2hhcGVPYmopKSBmaWVsZHNba10gPSBhbmFseXplKHYpO1xuICAgIHJldHVybiB7IGtpbmQ6ICdvYmplY3QnLCBzY2hlbWEsIGZpZWxkcyB9O1xuICB9XG5cbiAgaWYgKGdldFpvZEtpbmQoYmFzZSkgPT09ICdyZWNvcmQnKSB7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gZ2V0UmVjb3JkVmFsdWVUeXBlKGJhc2UpO1xuICAgIGlmICghdmFsdWVUeXBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdab2QgcmVjb3JkIGhhcyBubyB2YWxpZCB2YWx1ZSBzY2hlbWEuJyk7XG4gICAgcmV0dXJuIHsga2luZDogJ3JlY29yZCcsIHNjaGVtYSwgdmFsdWU6IGFuYWx5emUodmFsdWVUeXBlKSB9O1xuICB9XG5cbiAgaWYgKGdldFpvZEtpbmQoYmFzZSkgPT09ICdhcnJheScpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZ2V0QXJyYXlFbGVtZW50VHlwZShiYXNlKTtcbiAgICBpZiAoIWVsZW1lbnQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1pvZCBhcnJheSBoYXMgbm8gdmFsaWQgZWxlbWVudCBzY2hlbWEuJyk7XG4gICAgcmV0dXJuIHsga2luZDogJ2FycmF5Jywgc2NoZW1hLCBlbGVtZW50OiBhbmFseXplKGVsZW1lbnQpIH07XG4gIH1cblxuICByZXR1cm4geyBraW5kOiAnc2NhbGFyJywgc2NoZW1hIH07XG59XG5cbmNvbnN0IGpvaW4gPSAocGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZykgPT4gKGtleSAhPT0gdW5kZWZpbmVkID8gWy4uLnBhdGgsIGtleV0uam9pbignLicpIDogcGF0aC5qb2luKCcuJykpO1xuY29uc3QgcmVhZEF0ID0gPFQ+KGN0eDogU3RhZ2VDb250ZXh0TGlrZSwgcGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZykgPT4gY3R4LmdldFZhbHVlKHBhdGgsIGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gbWFrZVByb3h5KFxuICBjdHg6IFN0YWdlQ29udGV4dExpa2UsXG4gIG5vZGU6IE5vZGUsXG4gIHBhdGg6IHN0cmluZ1tdLFxuICBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3RyaWN0OiBTdHJpY3RNb2RlLFxuKTogYW55IHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlICdzY2FsYXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0OiAoKSA9PiByZWFkQXQoY3R4LCBwYXRoLCBrZXkpLFxuICAgICAgICBleGlzdHM6ICgpID0+IHR5cGVvZiByZWFkQXQoY3R4LCBwYXRoLCBrZXkpICE9PSAndW5kZWZpbmVkJyxcbiAgICAgICAgc2V0OiAodjogdW5rbm93bikgPT4ge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVPbldyaXRlKG5vZGUuc2NoZW1hLCB2LCBjdHgsIHN0cmljdCwgYHNldDoke2pvaW4ocGF0aCwga2V5KX1gKSkgcmV0dXJuO1xuICAgICAgICAgIGN0eC5zZXRPYmplY3QocGF0aCwga2V5ID8/ICdfXycsIHYpO1xuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgY29uc3QgYmFzZSA9IG1ha2VQcm94eShjdHgsIHsgLi4ubm9kZSwga2luZDogJ3NjYWxhcicgfSwgcGF0aCwga2V5LCBzdHJpY3QpO1xuICAgICAgYmFzZS5wdXNoID0gKGl0ZW06IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3QgY3VyID0gcmVhZEF0PGFueVtdPihjdHgsIHBhdGgsIGtleSkgPz8gW107XG4gICAgICAgIGNvbnN0IG5leHQgPSBbLi4uY3VyLCBpdGVtXTtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZU9uV3JpdGUobm9kZS5zY2hlbWEsIG5leHQsIGN0eCwgc3RyaWN0LCBgcHVzaDoke2pvaW4ocGF0aCwga2V5KX1gKSkgcmV0dXJuO1xuICAgICAgICBjdHguc2V0T2JqZWN0KHBhdGgsIGtleSA/PyAnX18nLCBuZXh0KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG5cbiAgICBjYXNlICdyZWNvcmQnOiB7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiByZWFkQXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGN0eCwgcGF0aCwga2V5KTtcbiAgICAgIGNvbnN0IHNldCA9ICh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICBpZiAoIXZhbGlkYXRlT25Xcml0ZShub2RlLnNjaGVtYSwgdiwgY3R4LCBzdHJpY3QsIGBzZXQ6JHtqb2luKHBhdGgsIGtleSl9YCkpIHJldHVybjtcbiAgICAgICAgY3R4LnNldE9iamVjdChwYXRoLCBrZXkgPz8gJ19fJywgdik7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVyZ2UgPSAocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgY29uc3QgY3VyID0gZ2V0KCkgPz8ge307XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLmN1ciwgLi4ucCB9O1xuICAgICAgICBpZiAoIXZhbGlkYXRlT25Xcml0ZShub2RlLnNjaGVtYSwgbmV4dCwgY3R4LCBzdHJpY3QsIGBtZXJnZToke2pvaW4ocGF0aCwga2V5KX1gKSkgcmV0dXJuO1xuICAgICAgICBjdHgudXBkYXRlT2JqZWN0KHBhdGgsIGtleSA/PyAnX18nLCBwKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdDogKGR5bktleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkeW5LZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdab2Qgc2NvcGUgcmVjb3JkIGtleSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNEZW5pZWRTZWdtZW50KGR5bktleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFpvZCBzY29wZSByZWNvcmQga2V5ICcke2R5bktleX0nIGlzIGFuIHVuc2FmZSBwYXRoIHNlZ21lbnQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IFsuLi5wYXRoLCBrZXldIDogcGF0aDtcbiAgICAgICAgICByZXR1cm4gbWFrZVByb3h5KGN0eCwgbm9kZS52YWx1ZSEsIHBhcmVudFBhdGgsIGR5bktleSwgc3RyaWN0KTtcbiAgICAgICAgfSxcbiAgICAgICAga2V5czogKCkgPT4gT2JqZWN0LmtleXMoZ2V0KCkgPz8ge30pLFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldCxcbiAgICAgICAgbWVyZ2UsXG4gICAgICAgIGV4aXN0czogKCkgPT4gdHlwZW9mIGdldCgpICE9PSAndW5kZWZpbmVkJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICAgcmV0dXJuIG5ldyBQcm94eShcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBnZXQodGFyZ2V0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSkgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCBhcyBhbnksIHByb3AgYXMgYW55KTtcblxuICAgICAgICAgICAgaWYgKHByb3AgPT09ICd0aGVuJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnYXN5bW1ldHJpY01hdGNoJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnY29uc3RydWN0b3InKSByZXR1cm4gT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHByb3AgPT09IFN5bWJvbC50b1N0cmluZ1RhZykgcmV0dXJuICdTY29wZVByb3h5JztcblxuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdnZXQnKSByZXR1cm4gKCkgPT4gcmVhZEF0KGN0eCwgcGF0aCwga2V5KTtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnZXhpc3RzJylcbiAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3QgPSByZWFkQXQoY3R4LCBwYXRoLCBrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGlyZWN0ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBbLi4ucGF0aCwga2V5XSA6IHBhdGg7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkS2V5IG9mIE9iamVjdC5rZXlzKG5vZGUuZmllbGRzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlYWRBdChjdHgsIHBhcmVudFBhdGgsIGNoaWxkS2V5KSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ3RvSlNPTicpIHJldHVybiAoKSA9PiByZWFkQXQoY3R4LCBwYXRoLCBrZXkpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFub2RlLmZpZWxkcyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUuZmllbGRzLCBwcm9wKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJyR7U3RyaW5nKHByb3ApfScgdW5kZXIgJHtqb2luKHBhdGgsIGtleSkgfHwgJzxyb290Pid9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhY2hlLmhhcyhwcm9wKSkgcmV0dXJuIGNhY2hlLmdldChwcm9wKTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmZpZWxkc1twcm9wXSE7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBbLi4ucGF0aCwga2V5XSA6IHBhdGg7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFByb3h5ID0gbWFrZVByb3h5KGN0eCwgY2hpbGQsIHBhcmVudFBhdGgsIHByb3AsIHN0cmljdCk7XG4gICAgICAgICAgICBjYWNoZS5zZXQocHJvcCwgY2hpbGRQcm94eSk7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm94eTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgT0JKRUNUX01FVEhPRFMgPSBuZXcgU2V0KFsnZ2V0JywgJ2V4aXN0cycsICd0aGVuJywgJ2FzeW1tZXRyaWNNYXRjaCcsICdjb25zdHJ1Y3RvcicsICd0b0pTT04nXSk7XG5cbmZ1bmN0aW9uIGFzc2VydEZpZWxkTmFtZXMobm9kZTogTm9kZSwgcGF0aDogc3RyaW5nW10sIHJvb3RNZXRob2RzOiBSZWFkb25seVNldDxzdHJpbmc+KTogdm9pZCB7XG4gIGlmIChub2RlLmtpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgYXNzZXJ0RmllbGROYW1lcyhub2RlLnZhbHVlISwgWy4uLnBhdGgsICcqJ10sIHJvb3RNZXRob2RzKTtcbiAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5maWVsZHMhKSkge1xuICAgICAgaWYgKGlzRGVuaWVkU2VnbWVudChrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFpvZCBzY29wZSBmaWVsZCAnJHtqb2luKHBhdGgsIGtleSl9JyBjb250YWlucyBhbiB1bnNhZmUgcGF0aCBzZWdtZW50LmApO1xuICAgICAgfVxuICAgICAgaWYgKE9CSkVDVF9NRVRIT0RTLmhhcyhrZXkpIHx8IChwYXRoLmxlbmd0aCA9PT0gMCAmJiAoa2V5ID09PSAncm8nIHx8IHJvb3RNZXRob2RzLmhhcyhrZXkpKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgWm9kIHNjb3BlIGZpZWxkICcke2pvaW4ocGF0aCwga2V5KX0nIGlzIHJlc2VydmVkIGZvciBhIHNjb3BlIG1ldGhvZCBvciBydW50aW1lIHByb2JlLmApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RmllbGROYW1lcyhjaGlsZCwgWy4uLnBhdGgsIGtleV0sIHJvb3RNZXRob2RzKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEFuYWx5emUgb25jZTsgZWFjaCBzdGFnZSBnZXRzIGZyZXNoIHByb3hpZXMgYW5kIGEgbGF6eSBvd25lZCBhcmd1bWVudCB2aWV3LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVab2RTY29wZShzY2hlbWE6IFpvZFNjaGVtYSwgcm9vdE1ldGhvZHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pIHtcbiAgaWYgKCFpc1pvZE5vZGUoc2NoZW1hKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignY3JlYXRlU2NvcGVQcm94eUZyb21ab2Q6IGV4cGVjdGVkIGEgWm9kIG9iamVjdCBzY2hlbWEnKTtcbiAgY29uc3Qgcm9vdCA9IGFuYWx5emUoc2NoZW1hKTtcbiAgaWYgKHJvb3Qua2luZCAhPT0gJ29iamVjdCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NyZWF0ZVNjb3BlUHJveHlGcm9tWm9kOiBleHBlY3RlZCBhIFpvZCBvYmplY3Qgc2NoZW1hJyk7XG4gIGFzc2VydEZpZWxkTmFtZXMocm9vdCwgW10sIG5ldyBTZXQocm9vdE1ldGhvZHMpKTtcbiAgcmV0dXJuIChjdHg6IFN0YWdlQ29udGV4dExpa2UsIHN0cmljdDogU3RyaWN0TW9kZSwgcmVhZEFyZ3M6ICgpID0+IHVua25vd24pOiBhbnkgPT4ge1xuICAgIGNvbnN0IHByb3h5ID0gbWFrZVByb3h5KGN0eCwgcm9vdCwgW10sIHVuZGVmaW5lZCwgc3RyaWN0KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksICdybycsIHsgZ2V0OiByZWFkQXJncywgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgcmV0dXJuIHByb3h5O1xuICB9O1xufVxuXG4vKiogTG93LWxldmVsIGFkYXB0ZXI7IGV4ZWN1dG9yIGNvbnN1bWVycyBzaG91bGQgdXNlIGRlZmluZVNjb3BlRnJvbVpvZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY29wZVByb3h5RnJvbVpvZDxTIGV4dGVuZHMgWm9kU2NoZW1hPihcbiAgY3R4OiBTdGFnZUNvbnRleHRMaWtlLFxuICBzY2hlbWE6IFMsXG4gIHN0cmljdDogU3RyaWN0TW9kZSA9ICd3YXJuJyxcbiAgcmVhZE9ubHk/OiB1bmtub3duLFxuKTogKFMgZXh0ZW5kcyB7IF9vdXRwdXQ6IGluZmVyIFQgfSA/IFQgOiB1bmtub3duKSAmIHsgcm8/OiB1bmtub3duIH0ge1xuICBjb25zdCBmcm96ZW5BcmdzID0gY3JlYXRlRnJvemVuQXJncyhyZWFkT25seSk7XG4gIHJldHVybiBwcmVwYXJlWm9kU2NvcGUoc2NoZW1hKShjdHgsIHN0cmljdCwgKCkgPT4gZnJvemVuQXJncyk7XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zY29wZS9zdGF0ZS96b2Qvc2NvcGVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsMkNBQWtEO0FBRWxELHdFQUFxRTtBQUVyRSxpRUFTbUM7QUFFbkMsU0FBUyxlQUFlLENBQ3RCLE1BQWlCLEVBQ2pCLEtBQWMsRUFDZCxHQUFzQixFQUN0QixTQUFxQixNQUFNLEVBQzNCLEdBQVk7SUFFWixJQUFJLE1BQU0sS0FBSyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsSUFBQSxpQ0FBYSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxHQUFHLEdBQUcsNkJBQTZCLEdBQUcsSUFBSSxLQUFLLEtBQU0sR0FBVyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqRyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxLQUFLLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwQyxNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDO0FBV0QsU0FBUyxPQUFPLENBQUMsTUFBaUI7SUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQztJQUV0QyxJQUFJLElBQUEsOEJBQVUsRUFBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFBLGtDQUFjLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQXlCLE1BQU0sQ0FBQyxNQUFNLENB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QUMsQ0FBQztBQUNKLENBQUM7QUFWRCwwQ0FVQztBQUVELDJFQUEyRTtBQUMzRSxTQUFnQix1QkFBdUIsQ0FDckMsR0FBcUIsRUFDckIsTUFBUyxFQUNULFNBQXFCLE1BQU0sRUFDM0IsUUFBa0I7SUFFbEIsTUFBTSxVQUFVLEdBQUcsSUFBQSxtQ0FBZ0IsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFSRCwwREFRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NvcGUgUHJveHkgRmFjdG9yeSDigJQgQnVpbGQgbGF6eSwgY29weS1vbi13cml0ZSBzY29wZSBmcm9tIGEgWm9kIG9iamVjdCBzY2hlbWFcbiAqL1xuXG5pbXBvcnQgeyBpc0RlbmllZFNlZ21lbnQgfSBmcm9tICdmb290dHJhY2UvcGF0aHMnO1xuXG5pbXBvcnQgeyBjcmVhdGVGcm96ZW5BcmdzIH0gZnJvbSAnLi4vLi4vcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0TGlrZSwgU3RyaWN0TW9kZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy90eXBlcy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFpvZFNjaGVtYSxcbiAgZ2V0QXJyYXlFbGVtZW50VHlwZSxcbiAgZ2V0T2JqZWN0U2hhcGUsXG4gIGdldFJlY29yZFZhbHVlVHlwZSxcbiAgZ2V0Wm9kS2luZCxcbiAgaXNab2ROb2RlLFxuICBwYXJzZVdpdGhUaGlzLFxuICB1bndyYXAsXG59IGZyb20gJy4vdXRpbHMvdmFsaWRhdGVIZWxwZXIuanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU9uV3JpdGUoXG4gIHNjaGVtYTogWm9kU2NoZW1hLFxuICB2YWx1ZTogdW5rbm93bixcbiAgY3R4PzogU3RhZ2VDb250ZXh0TGlrZSxcbiAgc3RyaWN0OiBTdHJpY3RNb2RlID0gJ3dhcm4nLFxuICB0YWc/OiBzdHJpbmcsXG4pOiBib29sZWFuIHtcbiAgaWYgKHN0cmljdCA9PT0gJ29mZicpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHBhcnNlV2l0aFRoaXMoc2NoZW1hLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1zZyA9IGBbc2NoZW1hXSBpbnZhbGlkIHZhbHVlIGluICR7dGFnID8/ICdzZXQnfTogJHsoZXJyIGFzIGFueSk/Lm1lc3NhZ2UgPz8gJ3pvZCBlcnJvcid9YDtcbiAgICBjdHg/LmFkZEVycm9yPy4oJ3NjaGVtYScsIG1zZyk7XG4gICAgaWYgKHN0cmljdCA9PT0gJ3dhcm4nKSByZXR1cm4gZmFsc2U7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbnR5cGUgTm9kZUtpbmQgPSAnb2JqZWN0JyB8ICdyZWNvcmQnIHwgJ2FycmF5JyB8ICdzY2FsYXInO1xudHlwZSBOb2RlID0ge1xuICBraW5kOiBOb2RlS2luZDtcbiAgc2NoZW1hOiBab2RTY2hlbWE7XG4gIGZpZWxkcz86IFJlY29yZDxzdHJpbmcsIE5vZGU+O1xuICB2YWx1ZT86IE5vZGU7XG4gIGVsZW1lbnQ/OiBOb2RlO1xufTtcblxuZnVuY3Rpb24gYW5hbHl6ZShzY2hlbWE6IFpvZFNjaGVtYSk6IE5vZGUge1xuICBjb25zdCBiYXNlID0gdW53cmFwKHNjaGVtYSkgPz8gc2NoZW1hO1xuXG4gIGlmIChnZXRab2RLaW5kKGJhc2UpID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHNoYXBlT2JqID0gZ2V0T2JqZWN0U2hhcGUoYmFzZSk7XG4gICAgY29uc3QgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc2hhcGVPYmopKSBmaWVsZHNba10gPSBhbmFseXplKHYpO1xuICAgIHJldHVybiB7IGtpbmQ6ICdvYmplY3QnLCBzY2hlbWEsIGZpZWxkcyB9O1xuICB9XG5cbiAgaWYgKGdldFpvZEtpbmQoYmFzZSkgPT09ICdyZWNvcmQnKSB7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gZ2V0UmVjb3JkVmFsdWVUeXBlKGJhc2UpO1xuICAgIGlmICghdmFsdWVUeXBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdab2QgcmVjb3JkIGhhcyBubyB2YWxpZCB2YWx1ZSBzY2hlbWEuJyk7XG4gICAgcmV0dXJuIHsga2luZDogJ3JlY29yZCcsIHNjaGVtYSwgdmFsdWU6IGFuYWx5emUodmFsdWVUeXBlKSB9O1xuICB9XG5cbiAgaWYgKGdldFpvZEtpbmQoYmFzZSkgPT09ICdhcnJheScpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZ2V0QXJyYXlFbGVtZW50VHlwZShiYXNlKTtcbiAgICBpZiAoIWVsZW1lbnQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1pvZCBhcnJheSBoYXMgbm8gdmFsaWQgZWxlbWVudCBzY2hlbWEuJyk7XG4gICAgcmV0dXJuIHsga2luZDogJ2FycmF5Jywgc2NoZW1hLCBlbGVtZW50OiBhbmFseXplKGVsZW1lbnQpIH07XG4gIH1cblxuICByZXR1cm4geyBraW5kOiAnc2NhbGFyJywgc2NoZW1hIH07XG59XG5cbmNvbnN0IGpvaW4gPSAocGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZykgPT4gKGtleSAhPT0gdW5kZWZpbmVkID8gWy4uLnBhdGgsIGtleV0uam9pbignLicpIDogcGF0aC5qb2luKCcuJykpO1xuY29uc3QgcmVhZEF0ID0gPFQ+KGN0eDogU3RhZ2VDb250ZXh0TGlrZSwgcGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZykgPT4gY3R4LmdldFZhbHVlKHBhdGgsIGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gbWFrZVByb3h5KFxuICBjdHg6IFN0YWdlQ29udGV4dExpa2UsXG4gIG5vZGU6IE5vZGUsXG4gIHBhdGg6IHN0cmluZ1tdLFxuICBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3RyaWN0OiBTdHJpY3RNb2RlLFxuKTogYW55IHtcbiAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICBjYXNlICdzY2FsYXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0OiAoKSA9PiByZWFkQXQoY3R4LCBwYXRoLCBrZXkpLFxuICAgICAgICBleGlzdHM6ICgpID0+IHR5cGVvZiByZWFkQXQoY3R4LCBwYXRoLCBrZXkpICE9PSAndW5kZWZpbmVkJyxcbiAgICAgICAgc2V0OiAodjogdW5rbm93bikgPT4ge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVPbldyaXRlKG5vZGUuc2NoZW1hLCB2LCBjdHgsIHN0cmljdCwgYHNldDoke2pvaW4ocGF0aCwga2V5KX1gKSkgcmV0dXJuO1xuICAgICAgICAgIGN0eC5zZXRPYmplY3QocGF0aCwga2V5ID8/ICdfXycsIHYpO1xuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgY29uc3QgYmFzZSA9IG1ha2VQcm94eShjdHgsIHsgLi4ubm9kZSwga2luZDogJ3NjYWxhcicgfSwgcGF0aCwga2V5LCBzdHJpY3QpO1xuICAgICAgYmFzZS5wdXNoID0gKGl0ZW06IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3QgY3VyID0gcmVhZEF0PGFueVtdPihjdHgsIHBhdGgsIGtleSkgPz8gW107XG4gICAgICAgIGNvbnN0IG5leHQgPSBbLi4uY3VyLCBpdGVtXTtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZU9uV3JpdGUobm9kZS5zY2hlbWEsIG5leHQsIGN0eCwgc3RyaWN0LCBgcHVzaDoke2pvaW4ocGF0aCwga2V5KX1gKSkgcmV0dXJuO1xuICAgICAgICBjdHguc2V0T2JqZWN0KHBhdGgsIGtleSA/PyAnX18nLCBuZXh0KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG5cbiAgICBjYXNlICdyZWNvcmQnOiB7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiByZWFkQXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGN0eCwgcGF0aCwga2V5KTtcbiAgICAgIGNvbnN0IHNldCA9ICh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICBpZiAoIXZhbGlkYXRlT25Xcml0ZShub2RlLnNjaGVtYSwgdiwgY3R4LCBzdHJpY3QsIGBzZXQ6JHtqb2luKHBhdGgsIGtleSl9YCkpIHJldHVybjtcbiAgICAgICAgY3R4LnNldE9iamVjdChwYXRoLCBrZXkgPz8gJ19fJywgdik7XG4gICAgICB9O1xuICAgICAgY29uc3QgbWVyZ2UgPSAocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgY29uc3QgY3VyID0gZ2V0KCkgPz8ge307XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLmN1ciwgLi4ucCB9O1xuICAgICAgICBpZiAoIXZhbGlkYXRlT25Xcml0ZShub2RlLnNjaGVtYSwgbmV4dCwgY3R4LCBzdHJpY3QsIGBtZXJnZToke2pvaW4ocGF0aCwga2V5KX1gKSkgcmV0dXJuO1xuICAgICAgICBjdHgudXBkYXRlT2JqZWN0KHBhdGgsIGtleSA/PyAnX18nLCBwKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdDogKGR5bktleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkeW5LZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdab2Qgc2NvcGUgcmVjb3JkIGtleSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNEZW5pZWRTZWdtZW50KGR5bktleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFpvZCBzY29wZSByZWNvcmQga2V5ICcke2R5bktleX0nIGlzIGFuIHVuc2FmZSBwYXRoIHNlZ21lbnQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyA/IFsuLi5wYXRoLCBrZXldIDogcGF0aDtcbiAgICAgICAgICByZXR1cm4gbWFrZVByb3h5KGN0eCwgbm9kZS52YWx1ZSEsIHBhcmVudFBhdGgsIGR5bktleSwgc3RyaWN0KTtcbiAgICAgICAgfSxcbiAgICAgICAga2V5czogKCkgPT4gT2JqZWN0LmtleXMoZ2V0KCkgPz8ge30pLFxuICAgICAgICBnZXQsXG4gICAgICAgIHNldCxcbiAgICAgICAgbWVyZ2UsXG4gICAgICAgIGV4aXN0czogKCkgPT4gdHlwZW9mIGdldCgpICE9PSAndW5kZWZpbmVkJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICAgcmV0dXJuIG5ldyBQcm94eShcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBnZXQodGFyZ2V0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSkgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCBhcyBhbnksIHByb3AgYXMgYW55KTtcblxuICAgICAgICAgICAgaWYgKHByb3AgPT09ICd0aGVuJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnYXN5bW1ldHJpY01hdGNoJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnY29uc3RydWN0b3InKSByZXR1cm4gT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHByb3AgPT09IFN5bWJvbC50b1N0cmluZ1RhZykgcmV0dXJuICdTY29wZVByb3h5JztcblxuICAgICAgICAgICAgaWYgKHByb3AgPT09ICdnZXQnKSByZXR1cm4gKCkgPT4gcmVhZEF0KGN0eCwgcGF0aCwga2V5KTtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnZXhpc3RzJylcbiAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3QgPSByZWFkQXQoY3R4LCBwYXRoLCBrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGlyZWN0ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBbLi4ucGF0aCwga2V5XSA6IHBhdGg7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkS2V5IG9mIE9iamVjdC5rZXlzKG5vZGUuZmllbGRzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlYWRBdChjdHgsIHBhcmVudFBhdGgsIGNoaWxkS2V5KSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ3RvSlNPTicpIHJldHVybiAoKSA9PiByZWFkQXQoY3R4LCBwYXRoLCBrZXkpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFub2RlLmZpZWxkcyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUuZmllbGRzLCBwcm9wKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmllbGQgJyR7U3RyaW5nKHByb3ApfScgdW5kZXIgJHtqb2luKHBhdGgsIGtleSkgfHwgJzxyb290Pid9IGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhY2hlLmhhcyhwcm9wKSkgcmV0dXJuIGNhY2hlLmdldChwcm9wKTtcblxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmZpZWxkc1twcm9wXSE7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBbLi4ucGF0aCwga2V5XSA6IHBhdGg7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFByb3h5ID0gbWFrZVByb3h5KGN0eCwgY2hpbGQsIHBhcmVudFBhdGgsIHByb3AsIHN0cmljdCk7XG4gICAgICAgICAgICBjYWNoZS5zZXQocHJvcCwgY2hpbGRQcm94eSk7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm94eTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgT0JKRUNUX01FVEhPRFMgPSBuZXcgU2V0KFsnZ2V0JywgJ2V4aXN0cycsICd0aGVuJywgJ2FzeW1tZXRyaWNNYXRjaCcsICdjb25zdHJ1Y3RvcicsICd0b0pTT04nXSk7XG5cbmZ1bmN0aW9uIGFzc2VydEZpZWxkTmFtZXMobm9kZTogTm9kZSwgcGF0aDogc3RyaW5nW10sIHJvb3RNZXRob2RzOiBSZWFkb25seVNldDxzdHJpbmc+KTogdm9pZCB7XG4gIGlmIChub2RlLmtpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgYXNzZXJ0RmllbGROYW1lcyhub2RlLnZhbHVlISwgWy4uLnBhdGgsICcqJ10sIHJvb3RNZXRob2RzKTtcbiAgfSBlbHNlIGlmIChub2RlLmtpbmQgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5maWVsZHMhKSkge1xuICAgICAgaWYgKGlzRGVuaWVkU2VnbWVudChrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFpvZCBzY29wZSBmaWVsZCAnJHtqb2luKHBhdGgsIGtleSl9JyBjb250YWlucyBhbiB1bnNhZmUgcGF0aCBzZWdtZW50LmApO1xuICAgICAgfVxuICAgICAgaWYgKE9CSkVDVF9NRVRIT0RTLmhhcyhrZXkpIHx8IChwYXRoLmxlbmd0aCA9PT0gMCAmJiAoa2V5ID09PSAncm8nIHx8IHJvb3RNZXRob2RzLmhhcyhrZXkpKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgWm9kIHNjb3BlIGZpZWxkICcke2pvaW4ocGF0aCwga2V5KX0nIGlzIHJlc2VydmVkIGZvciBhIHNjb3BlIG1ldGhvZCBvciBydW50aW1lIHByb2JlLmApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RmllbGROYW1lcyhjaGlsZCwgWy4uLnBhdGgsIGtleV0sIHJvb3RNZXRob2RzKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIEFuYWx5emUgb25jZTsgZWFjaCBzdGFnZSBnZXRzIGZyZXNoIHByb3hpZXMgYW5kIGEgbGF6eSBvd25lZCBhcmd1bWVudCB2aWV3LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVab2RTY29wZShzY2hlbWE6IFpvZFNjaGVtYSwgcm9vdE1ldGhvZHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10pIHtcbiAgaWYgKCFpc1pvZE5vZGUoc2NoZW1hKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignY3JlYXRlU2NvcGVQcm94eUZyb21ab2Q6IGV4cGVjdGVkIGEgWm9kIG9iamVjdCBzY2hlbWEnKTtcbiAgY29uc3Qgcm9vdCA9IGFuYWx5emUoc2NoZW1hKTtcbiAgaWYgKHJvb3Qua2luZCAhPT0gJ29iamVjdCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NyZWF0ZVNjb3BlUHJveHlGcm9tWm9kOiBleHBlY3RlZCBhIFpvZCBvYmplY3Qgc2NoZW1hJyk7XG4gIGFzc2VydEZpZWxkTmFtZXMocm9vdCwgW10sIG5ldyBTZXQocm9vdE1ldGhvZHMpKTtcbiAgcmV0dXJuIChjdHg6IFN0YWdlQ29udGV4dExpa2UsIHN0cmljdDogU3RyaWN0TW9kZSwgcmVhZEFyZ3M6ICgpID0+IHVua25vd24pOiBhbnkgPT4ge1xuICAgIGNvbnN0IHByb3h5ID0gbWFrZVByb3h5KGN0eCwgcm9vdCwgW10sIHVuZGVmaW5lZCwgc3RyaWN0KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksICdybycsIHsgZ2V0OiByZWFkQXJncywgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgcmV0dXJuIHByb3h5O1xuICB9O1xufVxuXG4vKiogTG93LWxldmVsIGFkYXB0ZXI7IGV4ZWN1dG9yIGNvbnN1bWVycyBzaG91bGQgdXNlIGRlZmluZVNjb3BlRnJvbVpvZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY29wZVByb3h5RnJvbVpvZDxTIGV4dGVuZHMgWm9kU2NoZW1hPihcbiAgY3R4OiBTdGFnZUNvbnRleHRMaWtlLFxuICBzY2hlbWE6IFMsXG4gIHN0cmljdDogU3RyaWN0TW9kZSA9ICd3YXJuJyxcbiAgcmVhZE9ubHk/OiB1bmtub3duLFxuKTogKFMgZXh0ZW5kcyB7IF9vdXRwdXQ6IGluZmVyIFQgfSA/IFQgOiB1bmtub3duKSAmIHsgcm8/OiB1bmtub3duIH0ge1xuICBjb25zdCBmcm96ZW5BcmdzID0gY3JlYXRlRnJvemVuQXJncyhyZWFkT25seSk7XG4gIHJldHVybiBwcmVwYXJlWm9kU2NvcGUoc2NoZW1hKShjdHgsIHN0cmljdCwgKCkgPT4gZnJvemVuQXJncyk7XG59XG4iXX0=
package/dist/recorders.js CHANGED
@@ -88,4 +88,4 @@ function windowed(maxEntries) {
88
88
  exports.windowed = windowed;
89
89
  var index_js_1 = require("./lib/recorder/index.js");
90
90
  Object.defineProperty(exports, "CompositeRecorder", { enumerable: true, get: function () { return index_js_1.CompositeRecorder; } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlY29yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSDs7Ozs7OztHQU9HOzs7QUFHSCxzR0FBZ0c7QUFnQmhHLHdIQUFrSDtBQUVsSCxzR0FBZ0c7QUFDaEcsMEhBQW9IO0FBQ3BILHdIQUFrSDtBQUdsSCw2RUFBdUU7QUFFdkUsK0VBQXlFO0FBaUJ6RSxTQUFnQixTQUFTLENBQUMsT0FBMEM7SUFDbEUsT0FBTyxJQUFJLHdEQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCw4QkFFQztBQVlELFNBQWdCLE9BQU8sQ0FBQyxPQUErQjtJQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGtDQUFjLENBQUMsT0FBTyxDQUFvQixDQUFDO0lBQzNELEdBQUcsQ0FBQyxLQUFLLEdBQUc7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0lBQ0YsR0FBRyxDQUFDLE1BQU0sR0FBRztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDLENBQUM7SUFDRixHQUFHLENBQUMsT0FBTyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDO0lBQ3hDLENBQUMsQ0FBQztJQUNGLEdBQUcsQ0FBQyxLQUFLLEdBQUcsVUFBZ0MsSUFBWTtRQUN0RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDO0lBQ0YsR0FBRyxDQUFDLEdBQUcsR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQWxCRCwwQkFrQkM7QUFRRCxTQUFnQixLQUFLLENBQUMsT0FBOEI7SUFDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQ0FBYSxDQUFDLE9BQU8sQ0FBa0IsQ0FBQztJQUN4RCxHQUFHLENBQUMsSUFBSSxHQUFHO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsc0JBTUM7QUFRRCxTQUFnQixRQUFRO0lBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksOENBQW9CLEVBQXNCLENBQUM7SUFDM0QsR0FBRyxDQUFDLE9BQU8sR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQU5ELDRCQU1DO0FBRUQscUNBQXFDO0FBRXJDLFNBQWdCLFFBQVE7SUFDdEIsT0FBTyxJQUFJLGdFQUE2QixFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUZELDRCQUVDO0FBQ0QsU0FBZ0IsU0FBUztJQUN2QixPQUFPLElBQUksa0VBQThCLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRkQsOEJBRUM7QUFDRCxTQUFnQixRQUFRLENBQUMsVUFBbUI7SUFDMUMsT0FBTyxJQUFJLGdFQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFGRCw0QkFFQztBQXNCRCxvREFBNEQ7QUFBbkQsNkdBQUEsaUJBQWlCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZvb3RwcmludGpzL3JlY29yZGVycyDigJQgRmFjdG9yeSBmdW5jdGlvbnMgZm9yIGJ1aWx0LWluIHJlY29yZGVycy5cbiAqXG4gKiBQcmVmZXIgdGhlc2UgZmFjdG9yeSBmdW5jdGlvbnMgb3ZlciBjb25zdHJ1Y3RpbmcgcmVjb3JkZXIgY2xhc3NlcyBkaXJlY3RseS5cbiAqIEVhY2ggZmFjdG9yeSByZXR1cm5zIHRoZSByZWNvcmRlciBpbnN0YW5jZSBlbnJpY2hlZCB3aXRoIHNob3J0IGNvbnZlbmllbmNlIG1ldGhvZHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG5hcnJhdGl2ZSwgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJztcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGFydFxuICogICAucmVjb3JkZXIobmFycmF0aXZlKCkpXG4gKiAgIC5yZWNvcmRlcihtZXRyaWNzKCkpXG4gKiAgIC5ydW4oKTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGUgcmVjb3JkZXJzXG4gKi9cbi8qKlxuICogZm9vdHByaW50anMvcmVjb3JkZXJzIC0tIEZhY3RvcnkgZnVuY3Rpb25zIGZvciBidWlsdC1pbiByZWNvcmRlcnMuXG4gKlxuICogSW1wb3J0OiBpbXBvcnQgeyBuYXJyYXRpdmUsIG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9IGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7XG4gKlxuICogRWFjaCBmYWN0b3J5IHJldHVybnMgdGhlIHJhdyByZWNvcmRlciBpbnN0YW5jZSB3aXRoIGFkZGVkIHNob3J0IGNvbnZlbmllbmNlIG1ldGhvZHMuXG4gKiBQYXNzIGRpcmVjdGx5IHRvIGNoYXJ0LnJlY29yZGVyKCkuIE5vIHdyYXBwaW5nLCBubyBwcm94eWluZyAtLSBqdXN0IHRoZSBjbGFzcyArIHNob3J0Y3V0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmltcG9ydCB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIENvbWJpbmVkTmFycmF0aXZlRW50cnksXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRW1pdFJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBOYXJyYXRpdmVGb3JtYXR0ZXIsXG4gIE5hcnJhdGl2ZVJlbmRlcmVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL0FkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL01hbmlmZXN0Rmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvTWFuaWZlc3RGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IERlYnVnRW50cnksIERlYnVnUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL0RlYnVnUmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL3JlY29yZGVycy9EZWJ1Z1JlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZE1ldHJpY3MsIE1ldHJpY1JlY29yZGVyT3B0aW9ucywgU3RhZ2VNZXRyaWNzIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL01ldHJpY1JlY29yZGVyLmpzJztcbmltcG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL01ldHJpY1JlY29yZGVyLmpzJztcblxuZXhwb3J0IHR5cGUgeyBFbWl0U291cmNlUG9zaXRpb24sIExvZ0FkZHJlc3MgfSBmcm9tICcuL2xpYi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5cbi8vIC0tLS0gTmFycmF0aXZlIC0tLS1cblxuLyoqXG4gKiBTY29wZVJlY29yZGVyIGZhY3RvcnkgZm9yIGNvbWJpbmVkIGZsb3crZGF0YSBuYXJyYXRpdmUuXG4gKlxuICogVGhlIHJldHVybmVkIHJlY29yZGVyIGlzIGEgYENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJgIOKAlCBhdHRhY2ggaXQgdG8gYVxuICogY2hhcnQvZXhlY3V0b3IsIHRoZW4gcmVhZCBzdHJ1Y3R1cmVkIGVudHJpZXMgdmlhIGAuZ2V0RW50cmllcygpYCBhZnRlclxuICogdGhlIHJ1bi4gRm9yIGZsYXQgc3RyaW5ncywgY2FsbCBgLmdldEVudHJpZXMoKS5tYXAoZSA9PiBlLnRleHQpYCBsb2NhbGx5LlxuICogRWFjaCBpbnN0YW5jZSBoYXMgaXRzIG93biBnZW5lcmF0ZWQgSUQ7IGRldGFjaCB1c2luZyBgcmVjb3JkZXIuaWRgLlxuICogSXRzIGZvcm1hdHRpbmcgb3B0aW9ucyBhZmZlY3QgdGhpcyBpbnN0YW5jZSwgbm90IHRoZSBleGVjdXRvcidzIG93biB2aWV3LlxuICovXG5leHBvcnQgdHlwZSBOYXJyYXRpdmVJbnN0YW5jZSA9IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBuYXJyYXRpdmUob3B0aW9ucz86IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zKTogTmFycmF0aXZlSW5zdGFuY2Uge1xuICByZXR1cm4gbmV3IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8vIC0tLS0gTWV0cmljcyAtLS0tXG5cbmV4cG9ydCB0eXBlIE1ldHJpY3NJbnN0YW5jZSA9IE1ldHJpY1JlY29yZGVyICYge1xuICByZWFkcygpOiBudW1iZXI7XG4gIHdyaXRlcygpOiBudW1iZXI7XG4gIGNvbW1pdHMoKTogbnVtYmVyO1xuICBzdGFnZShuYW1lOiBzdHJpbmcpOiBTdGFnZU1ldHJpY3MgfCB1bmRlZmluZWQ7XG4gIGFsbCgpOiBBZ2dyZWdhdGVkTWV0cmljcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXRyaWNzKG9wdGlvbnM/OiBNZXRyaWNSZWNvcmRlck9wdGlvbnMpOiBNZXRyaWNzSW5zdGFuY2Uge1xuICBjb25zdCByZWMgPSBuZXcgTWV0cmljUmVjb3JkZXIob3B0aW9ucykgYXMgTWV0cmljc0luc3RhbmNlO1xuICByZWMucmVhZHMgPSBmdW5jdGlvbiAodGhpczogTWV0cmljUmVjb3JkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNZXRyaWNzKCkudG90YWxSZWFkcztcbiAgfTtcbiAgcmVjLndyaXRlcyA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldE1ldHJpY3MoKS50b3RhbFdyaXRlcztcbiAgfTtcbiAgcmVjLmNvbW1pdHMgPSBmdW5jdGlvbiAodGhpczogTWV0cmljUmVjb3JkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNZXRyaWNzKCkudG90YWxDb21taXRzO1xuICB9O1xuICByZWMuc3RhZ2UgPSBmdW5jdGlvbiAodGhpczogTWV0cmljUmVjb3JkZXIsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWdlTWV0cmljcyhuYW1lKTtcbiAgfTtcbiAgcmVjLmFsbCA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldE1ldHJpY3MoKTtcbiAgfTtcbiAgcmV0dXJuIHJlYztcbn1cblxuLy8gLS0tLSBEZWJ1ZyAtLS0tXG5cbmV4cG9ydCB0eXBlIERlYnVnSW5zdGFuY2UgPSBEZWJ1Z1JlY29yZGVyICYge1xuICBsb2dzKCk6IERlYnVnRW50cnlbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJ1ZyhvcHRpb25zPzogRGVidWdSZWNvcmRlck9wdGlvbnMpOiBEZWJ1Z0luc3RhbmNlIHtcbiAgY29uc3QgcmVjID0gbmV3IERlYnVnUmVjb3JkZXIob3B0aW9ucykgYXMgRGVidWdJbnN0YW5jZTtcbiAgcmVjLmxvZ3MgPSBmdW5jdGlvbiAodGhpczogRGVidWdSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldEVudHJpZXMoKTtcbiAgfTtcbiAgcmV0dXJuIHJlYztcbn1cblxuLy8gLS0tLSBNYW5pZmVzdCAtLS0tXG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0SW5zdGFuY2UgPSBNYW5pZmVzdEZsb3dSZWNvcmRlciAmIHtcbiAgZW50cmllcygpOiBNYW5pZmVzdEVudHJ5W107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbWFuaWZlc3QoKTogTWFuaWZlc3RJbnN0YW5jZSB7XG4gIGNvbnN0IHJlYyA9IG5ldyBNYW5pZmVzdEZsb3dSZWNvcmRlcigpIGFzIE1hbmlmZXN0SW5zdGFuY2U7XG4gIHJlYy5lbnRyaWVzID0gZnVuY3Rpb24gKHRoaXM6IE1hbmlmZXN0Rmxvd1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWFuaWZlc3QoKTtcbiAgfTtcbiAgcmV0dXJuIHJlYztcbn1cblxuLy8gLS0tLSBGbG93IHJlY29yZGVyIHN0cmF0ZWdpZXMgLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRpdmUoKSB7XG4gIHJldHVybiBuZXcgQWRhcHRpdmVOYXJyYXRpdmVGbG93UmVjb3JkZXIoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtaWxlc3RvbmUoKSB7XG4gIHJldHVybiBuZXcgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2luZG93ZWQobWF4RW50cmllcz86IG51bWJlcikge1xuICByZXR1cm4gbmV3IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyKG1heEVudHJpZXMpO1xufVxuXG4vLyAtLS0tIFJlLWV4cG9ydGVkIHR5cGVzIC0tLS1cbmV4cG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyxcbiAgRGVjaXNpb25SZW5kZXJDb250ZXh0LFxuICBFbWl0RXZlbnQsXG4gIEVtaXRSZWNvcmRlcixcbiAgRW1pdFJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBOYXJyYXRpdmVGb3JtYXR0ZXIsXG4gIE5hcnJhdGl2ZVJlbmRlcmVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn07XG5leHBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRNZXRyaWNzLCBNZXRyaWNSZWNvcmRlck9wdGlvbnMsIFN0YWdlTWV0cmljcyB9O1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuIl19
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlY29yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSDs7Ozs7OztHQU9HOzs7QUFHSCxzR0FBZ0c7QUFlaEcsd0hBQWtIO0FBRWxILHNHQUFnRztBQUNoRywwSEFBb0g7QUFDcEgsd0hBQWtIO0FBR2xILDZFQUF1RTtBQUV2RSwrRUFBeUU7QUFlekUsU0FBZ0IsU0FBUyxDQUFDLE9BQTBDO0lBQ2xFLE9BQU8sSUFBSSx3REFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRkQsOEJBRUM7QUFZRCxTQUFnQixPQUFPLENBQUMsT0FBK0I7SUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxrQ0FBYyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQztJQUMzRCxHQUFHLENBQUMsS0FBSyxHQUFHO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUMsQ0FBQztJQUNGLEdBQUcsQ0FBQyxNQUFNLEdBQUc7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBQ0YsR0FBRyxDQUFDLE9BQU8sR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFlBQVksQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFDRixHQUFHLENBQUMsS0FBSyxHQUFHLFVBQWdDLElBQVk7UUFDdEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQztJQUNGLEdBQUcsQ0FBQyxHQUFHLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFsQkQsMEJBa0JDO0FBUUQsU0FBZ0IsS0FBSyxDQUFDLE9BQThCO0lBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksZ0NBQWEsQ0FBQyxPQUFPLENBQWtCLENBQUM7SUFDeEQsR0FBRyxDQUFDLElBQUksR0FBRztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQU5ELHNCQU1DO0FBUUQsU0FBZ0IsUUFBUTtJQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLDhDQUFvQixFQUFzQixDQUFDO0lBQzNELEdBQUcsQ0FBQyxPQUFPLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QixDQUFDLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFORCw0QkFNQztBQUVELHFDQUFxQztBQUVyQyxTQUFnQixRQUFRO0lBQ3RCLE9BQU8sSUFBSSxnRUFBNkIsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFGRCw0QkFFQztBQUNELFNBQWdCLFNBQVM7SUFDdkIsT0FBTyxJQUFJLGtFQUE4QixFQUFFLENBQUM7QUFDOUMsQ0FBQztBQUZELDhCQUVDO0FBQ0QsU0FBZ0IsUUFBUSxDQUFDLFVBQW1CO0lBQzFDLE9BQU8sSUFBSSxnRUFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRkQsNEJBRUM7QUFxQkQsb0RBQTREO0FBQW5ELDZHQUFBLGlCQUFpQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBmb290cHJpbnRqcy9yZWNvcmRlcnMg4oCUIEZhY3RvcnkgZnVuY3Rpb25zIGZvciBidWlsdC1pbiByZWNvcmRlcnMuXG4gKlxuICogUHJlZmVyIHRoZXNlIGZhY3RvcnkgZnVuY3Rpb25zIG92ZXIgY29uc3RydWN0aW5nIHJlY29yZGVyIGNsYXNzZXMgZGlyZWN0bHkuXG4gKiBFYWNoIGZhY3RvcnkgcmV0dXJucyB0aGUgcmVjb3JkZXIgaW5zdGFuY2UgZW5yaWNoZWQgd2l0aCBzaG9ydCBjb252ZW5pZW5jZSBtZXRob2RzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBuYXJyYXRpdmUsIG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9IGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hhcnRcbiAqICAgLnJlY29yZGVyKG5hcnJhdGl2ZSgpKVxuICogICAucmVjb3JkZXIobWV0cmljcygpKVxuICogICAucnVuKCk7XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlIHJlY29yZGVyc1xuICovXG4vKipcbiAqIGZvb3RwcmludGpzL3JlY29yZGVycyAtLSBGYWN0b3J5IGZ1bmN0aW9ucyBmb3IgYnVpbHQtaW4gcmVjb3JkZXJzLlxuICpcbiAqIEltcG9ydDogaW1wb3J0IHsgbmFycmF0aXZlLCBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnO1xuICpcbiAqIEVhY2ggZmFjdG9yeSByZXR1cm5zIHRoZSByYXcgcmVjb3JkZXIgaW5zdGFuY2Ugd2l0aCBhZGRlZCBzaG9ydCBjb252ZW5pZW5jZSBtZXRob2RzLlxuICogUGFzcyBkaXJlY3RseSB0byBjaGFydC5yZWNvcmRlcigpLiBObyB3cmFwcGluZywgbm8gcHJveHlpbmcgLS0ganVzdCB0aGUgY2xhc3MgKyBzaG9ydGN1dHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlci5qcyc7XG5pbXBvcnQgeyBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQnJlYWtSZW5kZXJDb250ZXh0LFxuICBDb21iaW5lZE5hcnJhdGl2ZUVudHJ5LFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRSZW5kZXJDb250ZXh0LFxuICBFcnJvclJlbmRlckNvbnRleHQsXG4gIEZvcmtSZW5kZXJDb250ZXh0LFxuICBMb29wUmVuZGVyQ29udGV4dCxcbiAgTmFycmF0aXZlRm9ybWF0dGVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL0FkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL01hbmlmZXN0Rmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvTWFuaWZlc3RGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IERlYnVnRW50cnksIERlYnVnUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL0RlYnVnUmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL3JlY29yZGVycy9EZWJ1Z1JlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZE1ldHJpY3MsIE1ldHJpY1JlY29yZGVyT3B0aW9ucywgU3RhZ2VNZXRyaWNzIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL01ldHJpY1JlY29yZGVyLmpzJztcbmltcG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL01ldHJpY1JlY29yZGVyLmpzJztcblxuLy8gLS0tLSBOYXJyYXRpdmUgLS0tLVxuXG4vKipcbiAqIFNjb3BlUmVjb3JkZXIgZmFjdG9yeSBmb3IgY29tYmluZWQgZmxvdytkYXRhIG5hcnJhdGl2ZS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgcmVjb3JkZXIgaXMgYSBgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcmAg4oCUIGF0dGFjaCBpdCB0byBhXG4gKiBjaGFydC9leGVjdXRvciwgdGhlbiByZWFkIHN0cnVjdHVyZWQgZW50cmllcyB2aWEgYC5nZXRFbnRyaWVzKClgIGFmdGVyXG4gKiB0aGUgcnVuLiBGb3IgZmxhdCBzdHJpbmdzLCBjYWxsIGAuZ2V0RW50cmllcygpLm1hcChlID0+IGUudGV4dClgIGxvY2FsbHkuXG4gKiBFYWNoIGluc3RhbmNlIGhhcyBpdHMgb3duIGdlbmVyYXRlZCBJRDsgZGV0YWNoIHVzaW5nIGByZWNvcmRlci5pZGAuXG4gKiBJdHMgZm9ybWF0dGluZyBvcHRpb25zIGFmZmVjdCB0aGlzIGluc3RhbmNlLCBub3QgdGhlIGV4ZWN1dG9yJ3Mgb3duIHZpZXcuXG4gKi9cbmV4cG9ydCB0eXBlIE5hcnJhdGl2ZUluc3RhbmNlID0gQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5hcnJhdGl2ZShvcHRpb25zPzogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlck9wdGlvbnMpOiBOYXJyYXRpdmVJbnN0YW5jZSB7XG4gIHJldHVybiBuZXcgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLy8gLS0tLSBNZXRyaWNzIC0tLS1cblxuZXhwb3J0IHR5cGUgTWV0cmljc0luc3RhbmNlID0gTWV0cmljUmVjb3JkZXIgJiB7XG4gIHJlYWRzKCk6IG51bWJlcjtcbiAgd3JpdGVzKCk6IG51bWJlcjtcbiAgY29tbWl0cygpOiBudW1iZXI7XG4gIHN0YWdlKG5hbWU6IHN0cmluZyk6IFN0YWdlTWV0cmljcyB8IHVuZGVmaW5lZDtcbiAgYWxsKCk6IEFnZ3JlZ2F0ZWRNZXRyaWNzO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldHJpY3Mob3B0aW9ucz86IE1ldHJpY1JlY29yZGVyT3B0aW9ucyk6IE1ldHJpY3NJbnN0YW5jZSB7XG4gIGNvbnN0IHJlYyA9IG5ldyBNZXRyaWNSZWNvcmRlcihvcHRpb25zKSBhcyBNZXRyaWNzSW5zdGFuY2U7XG4gIHJlYy5yZWFkcyA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldE1ldHJpY3MoKS50b3RhbFJlYWRzO1xuICB9O1xuICByZWMud3JpdGVzID0gZnVuY3Rpb24gKHRoaXM6IE1ldHJpY1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWV0cmljcygpLnRvdGFsV3JpdGVzO1xuICB9O1xuICByZWMuY29tbWl0cyA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldE1ldHJpY3MoKS50b3RhbENvbW1pdHM7XG4gIH07XG4gIHJlYy5zdGFnZSA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlciwgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhZ2VNZXRyaWNzKG5hbWUpO1xuICB9O1xuICByZWMuYWxsID0gZnVuY3Rpb24gKHRoaXM6IE1ldHJpY1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWV0cmljcygpO1xuICB9O1xuICByZXR1cm4gcmVjO1xufVxuXG4vLyAtLS0tIERlYnVnIC0tLS1cblxuZXhwb3J0IHR5cGUgRGVidWdJbnN0YW5jZSA9IERlYnVnUmVjb3JkZXIgJiB7XG4gIGxvZ3MoKTogRGVidWdFbnRyeVtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnKG9wdGlvbnM/OiBEZWJ1Z1JlY29yZGVyT3B0aW9ucyk6IERlYnVnSW5zdGFuY2Uge1xuICBjb25zdCByZWMgPSBuZXcgRGVidWdSZWNvcmRlcihvcHRpb25zKSBhcyBEZWJ1Z0luc3RhbmNlO1xuICByZWMubG9ncyA9IGZ1bmN0aW9uICh0aGlzOiBEZWJ1Z1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllcygpO1xuICB9O1xuICByZXR1cm4gcmVjO1xufVxuXG4vLyAtLS0tIE1hbmlmZXN0IC0tLS1cblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RJbnN0YW5jZSA9IE1hbmlmZXN0Rmxvd1JlY29yZGVyICYge1xuICBlbnRyaWVzKCk6IE1hbmlmZXN0RW50cnlbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdCgpOiBNYW5pZmVzdEluc3RhbmNlIHtcbiAgY29uc3QgcmVjID0gbmV3IE1hbmlmZXN0Rmxvd1JlY29yZGVyKCkgYXMgTWFuaWZlc3RJbnN0YW5jZTtcbiAgcmVjLmVudHJpZXMgPSBmdW5jdGlvbiAodGhpczogTWFuaWZlc3RGbG93UmVjb3JkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYW5pZmVzdCgpO1xuICB9O1xuICByZXR1cm4gcmVjO1xufVxuXG4vLyAtLS0tIEZsb3cgcmVjb3JkZXIgc3RyYXRlZ2llcyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdGl2ZSgpIHtcbiAgcmV0dXJuIG5ldyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlcigpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pbGVzdG9uZSgpIHtcbiAgcmV0dXJuIG5ldyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dlZChtYXhFbnRyaWVzPzogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIobWF4RW50cmllcyk7XG59XG5cbi8vIC0tLS0gUmUtZXhwb3J0ZWQgdHlwZXMgLS0tLVxuZXhwb3J0IHR5cGUge1xuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zLFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRFdmVudCxcbiAgRW1pdFJlY29yZGVyLFxuICBFbWl0UmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIE5hcnJhdGl2ZUZvcm1hdHRlcixcbiAgT3BSZW5kZXJDb250ZXh0LFxuICBTZWxlY3RlZFJlbmRlckNvbnRleHQsXG4gIFN0YWdlUmVuZGVyQ29udGV4dCxcbiAgU3ViZmxvd1JlbmRlckNvbnRleHQsXG59O1xuZXhwb3J0IHR5cGUgeyBBZ2dyZWdhdGVkTWV0cmljcywgTWV0cmljUmVjb3JkZXJPcHRpb25zLCBTdGFnZU1ldHJpY3MgfTtcbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbiJdfQ==