@workflow/core 5.0.0-beta.5 → 5.0.0-beta.50

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 (310) hide show
  1. package/dist/attribute-changes.d.ts +5 -0
  2. package/dist/attribute-changes.d.ts.map +1 -0
  3. package/dist/attribute-changes.js +25 -0
  4. package/dist/capabilities.d.ts +35 -2
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +74 -5
  7. package/dist/capture-stack.d.ts +1 -1
  8. package/dist/capture-stack.js +2 -2
  9. package/dist/class-serialization.d.ts +32 -0
  10. package/dist/class-serialization.d.ts.map +1 -1
  11. package/dist/class-serialization.js +37 -1
  12. package/dist/classify-error.d.ts +19 -3
  13. package/dist/classify-error.d.ts.map +1 -1
  14. package/dist/classify-error.js +98 -6
  15. package/dist/context-violation-error.d.ts +5 -5
  16. package/dist/context-violation-error.d.ts.map +1 -1
  17. package/dist/context-violation-error.js +8 -6
  18. package/dist/create-hook.d.ts +72 -7
  19. package/dist/create-hook.d.ts.map +1 -1
  20. package/dist/create-hook.js +1 -1
  21. package/dist/define-hook.js +2 -2
  22. package/dist/describe-error.d.ts +7 -7
  23. package/dist/describe-error.d.ts.map +1 -1
  24. package/dist/describe-error.js +97 -12
  25. package/dist/encryption.d.ts +38 -4
  26. package/dist/encryption.d.ts.map +1 -1
  27. package/dist/encryption.js +96 -14
  28. package/dist/events-consumer.d.ts +271 -0
  29. package/dist/events-consumer.d.ts.map +1 -1
  30. package/dist/events-consumer.js +646 -42
  31. package/dist/flushable-stream.d.ts +56 -1
  32. package/dist/flushable-stream.d.ts.map +1 -1
  33. package/dist/flushable-stream.js +123 -11
  34. package/dist/global.d.ts +36 -2
  35. package/dist/global.d.ts.map +1 -1
  36. package/dist/global.js +21 -6
  37. package/dist/index.d.ts +2 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +3 -2
  40. package/dist/log-format.d.ts +2 -2
  41. package/dist/log-format.js +7 -7
  42. package/dist/logger.d.ts +1 -0
  43. package/dist/logger.d.ts.map +1 -1
  44. package/dist/logger.js +10 -6
  45. package/dist/private.d.ts +226 -9
  46. package/dist/private.d.ts.map +1 -1
  47. package/dist/private.js +626 -7
  48. package/dist/replay-payload-cache.d.ts +64 -0
  49. package/dist/replay-payload-cache.d.ts.map +1 -0
  50. package/dist/replay-payload-cache.js +158 -0
  51. package/dist/runtime/compute-instance.d.ts +13 -0
  52. package/dist/runtime/compute-instance.d.ts.map +1 -0
  53. package/dist/runtime/compute-instance.js +14 -0
  54. package/dist/runtime/constants.d.ts +315 -0
  55. package/dist/runtime/constants.d.ts.map +1 -1
  56. package/dist/runtime/constants.js +502 -16
  57. package/dist/runtime/count-step-started-events.d.ts +52 -0
  58. package/dist/runtime/count-step-started-events.d.ts.map +1 -0
  59. package/dist/runtime/count-step-started-events.js +72 -0
  60. package/dist/runtime/deployment-guard.d.ts +99 -0
  61. package/dist/runtime/deployment-guard.d.ts.map +1 -0
  62. package/dist/runtime/deployment-guard.js +154 -0
  63. package/dist/runtime/get-port-lazy.d.ts +15 -0
  64. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  65. package/dist/runtime/get-port-lazy.js +75 -6
  66. package/dist/runtime/get-world-lazy.d.ts +5 -14
  67. package/dist/runtime/get-world-lazy.d.ts.map +1 -1
  68. package/dist/runtime/get-world-lazy.js +19 -29
  69. package/dist/runtime/helpers.d.ts +341 -29
  70. package/dist/runtime/helpers.d.ts.map +1 -1
  71. package/dist/runtime/helpers.js +559 -57
  72. package/dist/runtime/quickjs-assets.generated.d.ts +14 -0
  73. package/dist/runtime/quickjs-assets.generated.d.ts.map +1 -0
  74. package/dist/runtime/quickjs-assets.generated.js +30 -0
  75. package/dist/runtime/quickjs-entrypoint.d.ts +136 -0
  76. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -0
  77. package/dist/runtime/quickjs-entrypoint.js +1686 -0
  78. package/dist/runtime/quickjs-runtime.d.ts +244 -0
  79. package/dist/runtime/quickjs-runtime.d.ts.map +1 -0
  80. package/dist/runtime/quickjs-runtime.js +2427 -0
  81. package/dist/runtime/quickjs-serde.d.ts +107 -0
  82. package/dist/runtime/quickjs-serde.d.ts.map +1 -0
  83. package/dist/runtime/quickjs-serde.js +2159 -0
  84. package/dist/runtime/replay-budget.d.ts +97 -0
  85. package/dist/runtime/replay-budget.d.ts.map +1 -0
  86. package/dist/runtime/replay-budget.js +139 -0
  87. package/dist/runtime/replay-recovery-reporter.d.ts +36 -0
  88. package/dist/runtime/replay-recovery-reporter.d.ts.map +1 -0
  89. package/dist/runtime/replay-recovery-reporter.js +64 -0
  90. package/dist/runtime/resume-hook.d.ts +91 -8
  91. package/dist/runtime/resume-hook.d.ts.map +1 -1
  92. package/dist/runtime/resume-hook.js +512 -89
  93. package/dist/runtime/resume-latency.d.ts +150 -0
  94. package/dist/runtime/resume-latency.d.ts.map +1 -0
  95. package/dist/runtime/resume-latency.js +155 -0
  96. package/dist/runtime/run-id-time.d.ts +19 -0
  97. package/dist/runtime/run-id-time.d.ts.map +1 -0
  98. package/dist/runtime/run-id-time.js +42 -0
  99. package/dist/runtime/run.d.ts +72 -7
  100. package/dist/runtime/run.d.ts.map +1 -1
  101. package/dist/runtime/run.js +280 -53
  102. package/dist/runtime/runs.d.ts +54 -3
  103. package/dist/runtime/runs.d.ts.map +1 -1
  104. package/dist/runtime/runs.js +126 -16
  105. package/dist/runtime/start.d.ts +101 -2
  106. package/dist/runtime/start.d.ts.map +1 -1
  107. package/dist/runtime/start.js +352 -61
  108. package/dist/runtime/step-executor.d.ts +205 -5
  109. package/dist/runtime/step-executor.d.ts.map +1 -1
  110. package/dist/runtime/step-executor.js +760 -127
  111. package/dist/runtime/step-latency.d.ts +220 -0
  112. package/dist/runtime/step-latency.d.ts.map +1 -0
  113. package/dist/runtime/step-latency.js +215 -0
  114. package/dist/runtime/step-ownership.d.ts +72 -0
  115. package/dist/runtime/step-ownership.d.ts.map +1 -0
  116. package/dist/runtime/step-ownership.js +114 -0
  117. package/dist/runtime/step-single-flight.d.ts +12 -0
  118. package/dist/runtime/step-single-flight.d.ts.map +1 -0
  119. package/dist/runtime/step-single-flight.js +75 -0
  120. package/dist/runtime/suspension-handler.d.ts +269 -7
  121. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  122. package/dist/runtime/suspension-handler.js +1253 -125
  123. package/dist/runtime/unserializable-step.d.ts +34 -0
  124. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  125. package/dist/runtime/unserializable-step.js +52 -0
  126. package/dist/runtime/vm-mode.d.ts +44 -0
  127. package/dist/runtime/vm-mode.d.ts.map +1 -0
  128. package/dist/runtime/vm-mode.js +62 -0
  129. package/dist/runtime/vm-serde-bundle.generated.d.ts +14 -0
  130. package/dist/runtime/vm-serde-bundle.generated.d.ts.map +1 -0
  131. package/dist/runtime/vm-serde-bundle.generated.js +16 -0
  132. package/dist/runtime/wait-continuation.d.ts +106 -0
  133. package/dist/runtime/wait-continuation.d.ts.map +1 -0
  134. package/dist/runtime/wait-continuation.js +136 -0
  135. package/dist/runtime/wait-until.d.ts +18 -0
  136. package/dist/runtime/wait-until.d.ts.map +1 -0
  137. package/dist/runtime/wait-until.js +42 -0
  138. package/dist/runtime/world-compatibility.d.ts +32 -0
  139. package/dist/runtime/world-compatibility.d.ts.map +1 -0
  140. package/dist/runtime/world-compatibility.js +44 -0
  141. package/dist/runtime/world-init.d.ts +17 -42
  142. package/dist/runtime/world-init.d.ts.map +1 -1
  143. package/dist/runtime/world-init.js +18 -43
  144. package/dist/runtime/world.d.ts +14 -2
  145. package/dist/runtime/world.d.ts.map +1 -1
  146. package/dist/runtime/world.js +75 -19
  147. package/dist/runtime.d.ts +10 -6
  148. package/dist/runtime.d.ts.map +1 -1
  149. package/dist/runtime.js +3741 -490
  150. package/dist/sealed-box.d.ts +167 -0
  151. package/dist/sealed-box.d.ts.map +1 -0
  152. package/dist/sealed-box.js +571 -0
  153. package/dist/serialization/client.d.ts +3 -3
  154. package/dist/serialization/client.d.ts.map +1 -1
  155. package/dist/serialization/client.js +8 -4
  156. package/dist/serialization/codec-devalue-vm.d.ts +16 -0
  157. package/dist/serialization/codec-devalue-vm.d.ts.map +1 -0
  158. package/dist/serialization/codec-devalue-vm.js +148 -0
  159. package/dist/serialization/codec-devalue.d.ts +1 -1
  160. package/dist/serialization/codec-devalue.d.ts.map +1 -1
  161. package/dist/serialization/codec-devalue.js +24 -6
  162. package/dist/serialization/codec.d.ts +37 -2
  163. package/dist/serialization/codec.d.ts.map +1 -1
  164. package/dist/serialization/codec.js +2 -2
  165. package/dist/serialization/compression.d.ts +105 -0
  166. package/dist/serialization/compression.d.ts.map +1 -0
  167. package/dist/serialization/compression.js +261 -0
  168. package/dist/serialization/encryption.d.ts +119 -17
  169. package/dist/serialization/encryption.d.ts.map +1 -1
  170. package/dist/serialization/encryption.js +152 -17
  171. package/dist/serialization/errors.d.ts +13 -0
  172. package/dist/serialization/errors.d.ts.map +1 -1
  173. package/dist/serialization/errors.js +20 -2
  174. package/dist/serialization/format.d.ts +6 -6
  175. package/dist/serialization/format.js +7 -7
  176. package/dist/serialization/hardened.d.ts +156 -0
  177. package/dist/serialization/hardened.d.ts.map +1 -0
  178. package/dist/serialization/hardened.js +538 -0
  179. package/dist/serialization/index.d.ts +10 -8
  180. package/dist/serialization/index.d.ts.map +1 -1
  181. package/dist/serialization/index.js +10 -8
  182. package/dist/serialization/reducers/class-vm.d.ts +20 -0
  183. package/dist/serialization/reducers/class-vm.d.ts.map +1 -0
  184. package/dist/serialization/reducers/class-vm.js +77 -0
  185. package/dist/serialization/reducers/class.d.ts.map +1 -1
  186. package/dist/serialization/reducers/class.js +11 -6
  187. package/dist/serialization/reducers/common-vm.d.ts +15 -0
  188. package/dist/serialization/reducers/common-vm.d.ts.map +1 -0
  189. package/dist/serialization/reducers/common-vm.js +616 -0
  190. package/dist/serialization/reducers/common.d.ts +1 -1
  191. package/dist/serialization/reducers/common.d.ts.map +1 -1
  192. package/dist/serialization/reducers/common.js +202 -62
  193. package/dist/serialization/reducers/step-function-vm.d.ts +44 -0
  194. package/dist/serialization/reducers/step-function-vm.d.ts.map +1 -0
  195. package/dist/serialization/reducers/step-function-vm.js +97 -0
  196. package/dist/serialization/reducers/step-function.d.ts.map +1 -1
  197. package/dist/serialization/reducers/step-function.js +25 -9
  198. package/dist/serialization/step.d.ts +4 -4
  199. package/dist/serialization/step.d.ts.map +1 -1
  200. package/dist/serialization/step.js +9 -5
  201. package/dist/serialization/types.d.ts +80 -1
  202. package/dist/serialization/types.d.ts.map +1 -1
  203. package/dist/serialization/types.js +15 -1
  204. package/dist/serialization/workflow-vm.d.ts +29 -0
  205. package/dist/serialization/workflow-vm.d.ts.map +1 -0
  206. package/dist/serialization/workflow-vm.js +74 -0
  207. package/dist/serialization-format.d.ts +64 -8
  208. package/dist/serialization-format.d.ts.map +1 -1
  209. package/dist/serialization-format.js +225 -73
  210. package/dist/serialization.d.ts +262 -34
  211. package/dist/serialization.d.ts.map +1 -1
  212. package/dist/serialization.js +1879 -274
  213. package/dist/set-attributes.d.ts +13 -0
  214. package/dist/set-attributes.d.ts.map +1 -0
  215. package/dist/set-attributes.js +60 -0
  216. package/dist/source-map.d.ts +25 -0
  217. package/dist/source-map.d.ts.map +1 -1
  218. package/dist/source-map.js +154 -10
  219. package/dist/step/context-storage.d.ts +61 -2
  220. package/dist/step/context-storage.d.ts.map +1 -1
  221. package/dist/step/context-storage.js +7 -5
  222. package/dist/step/writable-stream.d.ts +3 -3
  223. package/dist/step/writable-stream.d.ts.map +1 -1
  224. package/dist/step/writable-stream.js +72 -9
  225. package/dist/step.d.ts.map +1 -1
  226. package/dist/step.js +148 -27
  227. package/dist/symbols.d.ts +50 -0
  228. package/dist/symbols.d.ts.map +1 -1
  229. package/dist/symbols.js +51 -1
  230. package/dist/telemetry/semantic-conventions.d.ts +397 -2
  231. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  232. package/dist/telemetry/semantic-conventions.js +297 -3
  233. package/dist/telemetry.d.ts +91 -0
  234. package/dist/telemetry.d.ts.map +1 -1
  235. package/dist/telemetry.js +244 -17
  236. package/dist/test-support/orchestrator-context.d.ts +25 -0
  237. package/dist/test-support/orchestrator-context.d.ts.map +1 -0
  238. package/dist/test-support/orchestrator-context.js +101 -0
  239. package/dist/types.d.ts +6 -0
  240. package/dist/types.d.ts.map +1 -1
  241. package/dist/types.js +23 -1
  242. package/dist/util.d.ts +0 -5
  243. package/dist/util.d.ts.map +1 -1
  244. package/dist/util.js +1 -15
  245. package/dist/version.d.ts +1 -1
  246. package/dist/version.d.ts.map +1 -1
  247. package/dist/version.js +2 -2
  248. package/dist/vm/index.d.ts.map +1 -1
  249. package/dist/vm/index.js +84 -14
  250. package/dist/vm/script-cache.d.ts +26 -0
  251. package/dist/vm/script-cache.d.ts.map +1 -0
  252. package/dist/vm/script-cache.js +131 -0
  253. package/dist/vm/uint8array-base64.js +1 -1
  254. package/dist/workflow/abort-controller.d.ts +2 -2
  255. package/dist/workflow/abort-controller.d.ts.map +1 -1
  256. package/dist/workflow/abort-controller.js +88 -21
  257. package/dist/workflow/attribute-dispatcher.d.ts +6 -0
  258. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -0
  259. package/dist/workflow/attribute-dispatcher.js +45 -0
  260. package/dist/workflow/create-hook.d.ts.map +1 -1
  261. package/dist/workflow/create-hook.js +24 -3
  262. package/dist/workflow/get-workflow-metadata.js +2 -2
  263. package/dist/workflow/hook.d.ts.map +1 -1
  264. package/dist/workflow/hook.js +304 -47
  265. package/dist/workflow/index.d.ts +1 -0
  266. package/dist/workflow/index.d.ts.map +1 -1
  267. package/dist/workflow/index.js +2 -1
  268. package/dist/workflow/set-attributes.d.ts +68 -0
  269. package/dist/workflow/set-attributes.d.ts.map +1 -0
  270. package/dist/workflow/set-attributes.js +60 -0
  271. package/dist/workflow/sleep.d.ts.map +1 -1
  272. package/dist/workflow/sleep.js +58 -12
  273. package/dist/workflow/world-init-stub.d.ts +3 -3
  274. package/dist/workflow/world-init-stub.js +4 -4
  275. package/dist/workflow.d.ts +95 -3
  276. package/dist/workflow.d.ts.map +1 -1
  277. package/dist/workflow.js +895 -561
  278. package/docs/api-reference/create-hook.mdx +89 -10
  279. package/docs/api-reference/create-webhook.mdx +16 -15
  280. package/docs/api-reference/define-hook.mdx +35 -33
  281. package/docs/api-reference/fatal-error.mdx +30 -8
  282. package/docs/api-reference/fetch.mdx +14 -10
  283. package/docs/api-reference/get-step-metadata.mdx +2 -2
  284. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  285. package/docs/api-reference/get-writable.mdx +7 -7
  286. package/docs/api-reference/index.mdx +4 -1
  287. package/docs/api-reference/retryable-error.mdx +1 -1
  288. package/docs/api-reference/set-attributes.mdx +61 -0
  289. package/docs/api-reference/sleep.mdx +4 -4
  290. package/docs/foundations/cancellation.mdx +31 -32
  291. package/docs/foundations/errors-and-retries.mdx +42 -11
  292. package/docs/foundations/hooks.mdx +64 -35
  293. package/docs/foundations/idempotency.mdx +244 -12
  294. package/docs/foundations/index.mdx +1 -23
  295. package/docs/foundations/meta.json +2 -1
  296. package/docs/foundations/serialization.mdx +21 -22
  297. package/docs/foundations/starting-workflows.mdx +106 -30
  298. package/docs/foundations/streaming.mdx +107 -59
  299. package/docs/foundations/versioning.mdx +263 -0
  300. package/docs/foundations/workflows-and-steps.mdx +9 -9
  301. package/docs/how-it-works/cancellation.mdx +63 -63
  302. package/docs/how-it-works/code-transform.mdx +83 -67
  303. package/docs/how-it-works/encryption.mdx +30 -26
  304. package/docs/how-it-works/event-sourcing.mdx +98 -34
  305. package/docs/how-it-works/framework-integrations.mdx +96 -337
  306. package/docs/how-it-works/understanding-directives.mdx +22 -22
  307. package/package.json +24 -15
  308. package/dist/runtime/step-handler.d.ts +0 -2
  309. package/dist/runtime/step-handler.d.ts.map +0 -1
  310. package/dist/runtime/step-handler.js +0 -776
@@ -0,0 +1,131 @@
1
+ import { Script } from 'node:vm';
2
+ import { globalSingleton } from '@workflow/utils';
3
+ /**
4
+ * Module-level cache of compiled workflow-bundle `vm.Script` objects.
5
+ *
6
+ * Why this exists
7
+ * ---------------
8
+ * Replaying a workflow re-evaluates the workflow bundle against a fresh VM
9
+ * context on every iteration of the inline replay loop (see
10
+ * `runWorkflow` in `../workflow.ts`). The bundle is a single string that
11
+ * contains every workflow function in the app and registers them on
12
+ * `globalThis.__private_workflows`. Previously each replay called
13
+ * `vm.runInContext(workflowCode, context, { filename })`, which RE-PARSES and
14
+ * RE-COMPILES the entire bundle every time: O(N) full re-parses for a
15
+ * sequential workflow of N steps, plus the same parse cost repeated across
16
+ * every invocation in the process.
17
+ *
18
+ * Compilation is a pure function of `(code, filename)`: a `vm.Script` carries
19
+ * no realm/context state; it is only bound to a context at `runInContext`
20
+ * time. So a single compiled `Script` can be reused across replays AND across
21
+ * workflow invocations in the same process without affecting determinism: the
22
+ * produced workflow function is identical to the previous re-parse-every-time
23
+ * behaviour, with identical `filename` source attribution (see the precise
24
+ * claim, and its one caveat, in `runWorkflow`).
25
+ *
26
+ * Keying
27
+ * ------
28
+ * Keyed by `code` then `filename`. The `filename` is part of the key on
29
+ * purpose, NOT as a dedupe key: it is baked into the compiled script's source
30
+ * attribution and surfaces in stack traces, where `remapErrorStack` keys on it
31
+ * to map frames back to the user's source. Two workflows in the same bundle
32
+ * share the same `code` but have different `filename`s, so they intentionally
33
+ * compile to distinct `Script`s; collapsing them onto a single shared `Script`
34
+ * would misattribute one workflow's stack frames to another file. The cost of
35
+ * keeping them distinct is that the whole bundle is compiled once per distinct
36
+ * `filename` (not once per bundle); in practice that is bounded by the number
37
+ * of source files that define a workflow, and because V8 lazily compiles
38
+ * function bodies the duplicated work is the (cheap) top-level parse, not full
39
+ * per-workflow codegen.
40
+ *
41
+ * We use a nested Map (code -> filename -> Script) so that evicting a source
42
+ * string drops all of its per-filename scripts together. Most entries are full
43
+ * workflow bundles; `compileWorkflowBundle` also caches its tiny workflow-name
44
+ * lookup snippets here.
45
+ *
46
+ * Bounding
47
+ * --------
48
+ * The top-level (`code`-keyed) map is an insertion-ordered LRU capped at
49
+ * `MAX_SCRIPT_SOURCES` entries. A production deployment has one large bundle
50
+ * source plus small lookup sources; the bundle is touched immediately before
51
+ * its lookup on every compilation, so lookup churn cannot evict the expensive
52
+ * entry in normal use. The bound primarily protects dev/watch mode, where every
53
+ * edit produces a new bundle string that would otherwise pin all historical
54
+ * versions. The per-`filename` inner map is naturally bounded by the workflows
55
+ * compiled from that source and is dropped wholesale with its parent entry.
56
+ */
57
+ // On `globalThis` (see `globalSingleton`): compiling a bundle is the expensive
58
+ // part this cache exists to skip, and per-copy caches would pay it once per
59
+ // bundler layer that compiles a workflow.
60
+ const scripts = globalSingleton('@workflow/core//vmScriptCache', 1, () => ({
61
+ byCode: new Map(),
62
+ }));
63
+ /**
64
+ * Maximum number of distinct script source strings to retain. Kept deliberately
65
+ * small because stale bundles and one-off lookup snippets have no lasting value.
66
+ */
67
+ const MAX_SCRIPT_SOURCES = 8;
68
+ /**
69
+ * Looks up the per-filename map for `code`, marking it most-recently-used.
70
+ * Relies on `Map` preserving insertion order: deleting and re-inserting an
71
+ * existing key moves it to the end (newest), so the first key is always the
72
+ * least-recently-used eviction candidate.
73
+ */
74
+ function touchScriptSource(code) {
75
+ const byFilename = scripts.byCode.get(code);
76
+ if (byFilename === undefined) {
77
+ return undefined;
78
+ }
79
+ // Move to the most-recently-used position (end of insertion order).
80
+ scripts.byCode.delete(code);
81
+ scripts.byCode.set(code, byFilename);
82
+ return byFilename;
83
+ }
84
+ /**
85
+ * Returns a compiled `vm.Script` for the given source code and filename,
86
+ * compiling and caching it on first use. Subsequent calls with the same
87
+ * `(code, filename)` return the cached `Script`.
88
+ *
89
+ * The returned `Script` is not yet bound to any context; the caller runs it
90
+ * against a specific VM context via `script.runInContext(context)`. This is
91
+ * equivalent to `vm.runInContext(code, context, { filename })` but skips the
92
+ * recompile.
93
+ */
94
+ export function getCachedWorkflowScript(code, filename) {
95
+ let byFilename = touchScriptSource(code);
96
+ if (byFilename === undefined) {
97
+ byFilename = new Map();
98
+ scripts.byCode.set(code, byFilename);
99
+ // Evict the least-recently-used source(s) when over the cap. New sources
100
+ // are appended at the end, so the oldest live at the front.
101
+ while (scripts.byCode.size > MAX_SCRIPT_SOURCES) {
102
+ const oldest = scripts.byCode.keys().next().value;
103
+ if (oldest === undefined) {
104
+ break;
105
+ }
106
+ scripts.byCode.delete(oldest);
107
+ }
108
+ }
109
+ let script = byFilename.get(filename);
110
+ const cacheHit = script !== undefined;
111
+ if (script === undefined) {
112
+ script = new Script(code, { filename });
113
+ byFilename.set(filename, script);
114
+ }
115
+ return { script, cacheHit };
116
+ }
117
+ /**
118
+ * Clears the compiled-script cache. Intended for tests that want to assert
119
+ * compile-vs-cache behaviour in isolation; not used on the hot path.
120
+ */
121
+ export function clearWorkflowScriptCache() {
122
+ scripts.byCode.clear();
123
+ }
124
+ /**
125
+ * Number of distinct script source strings currently retained. Exposed for
126
+ * tests asserting the LRU bound; not used on the hot path.
127
+ */
128
+ export function workflowScriptCacheSize() {
129
+ return scripts.byCode.size;
130
+ }
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZtL3NjcmlwdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxREc7QUFDSCwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDBDQUEwQztBQUMxQyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUErQjtDQUMvQyxDQUFDLENBQUMsQ0FBQztBQUVKOzs7R0FHRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBRTdCOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxvRUFBb0U7SUFDcEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQVksRUFDWixRQUFnQjtJQUVoQixJQUFJLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLHlFQUF5RTtRQUN6RSw0REFBNEQ7UUFDNUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2xELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssU0FBUyxDQUFDO0lBQ3RDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NyaXB0IH0gZnJvbSAnbm9kZTp2bSc7XG5pbXBvcnQgeyBnbG9iYWxTaW5nbGV0b24gfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuXG4vKipcbiAqIE1vZHVsZS1sZXZlbCBjYWNoZSBvZiBjb21waWxlZCB3b3JrZmxvdy1idW5kbGUgYHZtLlNjcmlwdGAgb2JqZWN0cy5cbiAqXG4gKiBXaHkgdGhpcyBleGlzdHNcbiAqIC0tLS0tLS0tLS0tLS0tLVxuICogUmVwbGF5aW5nIGEgd29ya2Zsb3cgcmUtZXZhbHVhdGVzIHRoZSB3b3JrZmxvdyBidW5kbGUgYWdhaW5zdCBhIGZyZXNoIFZNXG4gKiBjb250ZXh0IG9uIGV2ZXJ5IGl0ZXJhdGlvbiBvZiB0aGUgaW5saW5lIHJlcGxheSBsb29wIChzZWVcbiAqIGBydW5Xb3JrZmxvd2AgaW4gYC4uL3dvcmtmbG93LnRzYCkuIFRoZSBidW5kbGUgaXMgYSBzaW5nbGUgc3RyaW5nIHRoYXRcbiAqIGNvbnRhaW5zIGV2ZXJ5IHdvcmtmbG93IGZ1bmN0aW9uIGluIHRoZSBhcHAgYW5kIHJlZ2lzdGVycyB0aGVtIG9uXG4gKiBgZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzYC4gUHJldmlvdXNseSBlYWNoIHJlcGxheSBjYWxsZWRcbiAqIGB2bS5ydW5JbkNvbnRleHQod29ya2Zsb3dDb2RlLCBjb250ZXh0LCB7IGZpbGVuYW1lIH0pYCwgd2hpY2ggUkUtUEFSU0VTIGFuZFxuICogUkUtQ09NUElMRVMgdGhlIGVudGlyZSBidW5kbGUgZXZlcnkgdGltZTogTyhOKSBmdWxsIHJlLXBhcnNlcyBmb3IgYVxuICogc2VxdWVudGlhbCB3b3JrZmxvdyBvZiBOIHN0ZXBzLCBwbHVzIHRoZSBzYW1lIHBhcnNlIGNvc3QgcmVwZWF0ZWQgYWNyb3NzXG4gKiBldmVyeSBpbnZvY2F0aW9uIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqIENvbXBpbGF0aW9uIGlzIGEgcHVyZSBmdW5jdGlvbiBvZiBgKGNvZGUsIGZpbGVuYW1lKWA6IGEgYHZtLlNjcmlwdGAgY2Fycmllc1xuICogbm8gcmVhbG0vY29udGV4dCBzdGF0ZTsgaXQgaXMgb25seSBib3VuZCB0byBhIGNvbnRleHQgYXQgYHJ1bkluQ29udGV4dGBcbiAqIHRpbWUuIFNvIGEgc2luZ2xlIGNvbXBpbGVkIGBTY3JpcHRgIGNhbiBiZSByZXVzZWQgYWNyb3NzIHJlcGxheXMgQU5EIGFjcm9zc1xuICogd29ya2Zsb3cgaW52b2NhdGlvbnMgaW4gdGhlIHNhbWUgcHJvY2VzcyB3aXRob3V0IGFmZmVjdGluZyBkZXRlcm1pbmlzbTogdGhlXG4gKiBwcm9kdWNlZCB3b3JrZmxvdyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHJlLXBhcnNlLWV2ZXJ5LXRpbWVcbiAqIGJlaGF2aW91ciwgd2l0aCBpZGVudGljYWwgYGZpbGVuYW1lYCBzb3VyY2UgYXR0cmlidXRpb24gKHNlZSB0aGUgcHJlY2lzZVxuICogY2xhaW0sIGFuZCBpdHMgb25lIGNhdmVhdCwgaW4gYHJ1bldvcmtmbG93YCkuXG4gKlxuICogS2V5aW5nXG4gKiAtLS0tLS1cbiAqIEtleWVkIGJ5IGBjb2RlYCB0aGVuIGBmaWxlbmFtZWAuIFRoZSBgZmlsZW5hbWVgIGlzIHBhcnQgb2YgdGhlIGtleSBvblxuICogcHVycG9zZSwgTk9UIGFzIGEgZGVkdXBlIGtleTogaXQgaXMgYmFrZWQgaW50byB0aGUgY29tcGlsZWQgc2NyaXB0J3Mgc291cmNlXG4gKiBhdHRyaWJ1dGlvbiBhbmQgc3VyZmFjZXMgaW4gc3RhY2sgdHJhY2VzLCB3aGVyZSBgcmVtYXBFcnJvclN0YWNrYCBrZXlzIG9uIGl0XG4gKiB0byBtYXAgZnJhbWVzIGJhY2sgdG8gdGhlIHVzZXIncyBzb3VyY2UuIFR3byB3b3JrZmxvd3MgaW4gdGhlIHNhbWUgYnVuZGxlXG4gKiBzaGFyZSB0aGUgc2FtZSBgY29kZWAgYnV0IGhhdmUgZGlmZmVyZW50IGBmaWxlbmFtZWBzLCBzbyB0aGV5IGludGVudGlvbmFsbHlcbiAqIGNvbXBpbGUgdG8gZGlzdGluY3QgYFNjcmlwdGBzOyBjb2xsYXBzaW5nIHRoZW0gb250byBhIHNpbmdsZSBzaGFyZWQgYFNjcmlwdGBcbiAqIHdvdWxkIG1pc2F0dHJpYnV0ZSBvbmUgd29ya2Zsb3cncyBzdGFjayBmcmFtZXMgdG8gYW5vdGhlciBmaWxlLiBUaGUgY29zdCBvZlxuICoga2VlcGluZyB0aGVtIGRpc3RpbmN0IGlzIHRoYXQgdGhlIHdob2xlIGJ1bmRsZSBpcyBjb21waWxlZCBvbmNlIHBlciBkaXN0aW5jdFxuICogYGZpbGVuYW1lYCAobm90IG9uY2UgcGVyIGJ1bmRsZSk7IGluIHByYWN0aWNlIHRoYXQgaXMgYm91bmRlZCBieSB0aGUgbnVtYmVyXG4gKiBvZiBzb3VyY2UgZmlsZXMgdGhhdCBkZWZpbmUgYSB3b3JrZmxvdywgYW5kIGJlY2F1c2UgVjggbGF6aWx5IGNvbXBpbGVzXG4gKiBmdW5jdGlvbiBib2RpZXMgdGhlIGR1cGxpY2F0ZWQgd29yayBpcyB0aGUgKGNoZWFwKSB0b3AtbGV2ZWwgcGFyc2UsIG5vdCBmdWxsXG4gKiBwZXItd29ya2Zsb3cgY29kZWdlbi5cbiAqXG4gKiBXZSB1c2UgYSBuZXN0ZWQgTWFwIChjb2RlIC0+IGZpbGVuYW1lIC0+IFNjcmlwdCkgc28gdGhhdCBldmljdGluZyBhIHNvdXJjZVxuICogc3RyaW5nIGRyb3BzIGFsbCBvZiBpdHMgcGVyLWZpbGVuYW1lIHNjcmlwdHMgdG9nZXRoZXIuIE1vc3QgZW50cmllcyBhcmUgZnVsbFxuICogd29ya2Zsb3cgYnVuZGxlczsgYGNvbXBpbGVXb3JrZmxvd0J1bmRsZWAgYWxzbyBjYWNoZXMgaXRzIHRpbnkgd29ya2Zsb3ctbmFtZVxuICogbG9va3VwIHNuaXBwZXRzIGhlcmUuXG4gKlxuICogQm91bmRpbmdcbiAqIC0tLS0tLS0tXG4gKiBUaGUgdG9wLWxldmVsIChgY29kZWAta2V5ZWQpIG1hcCBpcyBhbiBpbnNlcnRpb24tb3JkZXJlZCBMUlUgY2FwcGVkIGF0XG4gKiBgTUFYX1NDUklQVF9TT1VSQ0VTYCBlbnRyaWVzLiBBIHByb2R1Y3Rpb24gZGVwbG95bWVudCBoYXMgb25lIGxhcmdlIGJ1bmRsZVxuICogc291cmNlIHBsdXMgc21hbGwgbG9va3VwIHNvdXJjZXM7IHRoZSBidW5kbGUgaXMgdG91Y2hlZCBpbW1lZGlhdGVseSBiZWZvcmVcbiAqIGl0cyBsb29rdXAgb24gZXZlcnkgY29tcGlsYXRpb24sIHNvIGxvb2t1cCBjaHVybiBjYW5ub3QgZXZpY3QgdGhlIGV4cGVuc2l2ZVxuICogZW50cnkgaW4gbm9ybWFsIHVzZS4gVGhlIGJvdW5kIHByaW1hcmlseSBwcm90ZWN0cyBkZXYvd2F0Y2ggbW9kZSwgd2hlcmUgZXZlcnlcbiAqIGVkaXQgcHJvZHVjZXMgYSBuZXcgYnVuZGxlIHN0cmluZyB0aGF0IHdvdWxkIG90aGVyd2lzZSBwaW4gYWxsIGhpc3RvcmljYWxcbiAqIHZlcnNpb25zLiBUaGUgcGVyLWBmaWxlbmFtZWAgaW5uZXIgbWFwIGlzIG5hdHVyYWxseSBib3VuZGVkIGJ5IHRoZSB3b3JrZmxvd3NcbiAqIGNvbXBpbGVkIGZyb20gdGhhdCBzb3VyY2UgYW5kIGlzIGRyb3BwZWQgd2hvbGVzYWxlIHdpdGggaXRzIHBhcmVudCBlbnRyeS5cbiAqL1xuLy8gT24gYGdsb2JhbFRoaXNgIChzZWUgYGdsb2JhbFNpbmdsZXRvbmApOiBjb21waWxpbmcgYSBidW5kbGUgaXMgdGhlIGV4cGVuc2l2ZVxuLy8gcGFydCB0aGlzIGNhY2hlIGV4aXN0cyB0byBza2lwLCBhbmQgcGVyLWNvcHkgY2FjaGVzIHdvdWxkIHBheSBpdCBvbmNlIHBlclxuLy8gYnVuZGxlciBsYXllciB0aGF0IGNvbXBpbGVzIGEgd29ya2Zsb3cuXG5jb25zdCBzY3JpcHRzID0gZ2xvYmFsU2luZ2xldG9uKCdAd29ya2Zsb3cvY29yZS8vdm1TY3JpcHRDYWNoZScsIDEsICgpID0+ICh7XG4gIGJ5Q29kZTogbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFNjcmlwdD4+KCksXG59KSk7XG5cbi8qKlxuICogTWF4aW11bSBudW1iZXIgb2YgZGlzdGluY3Qgc2NyaXB0IHNvdXJjZSBzdHJpbmdzIHRvIHJldGFpbi4gS2VwdCBkZWxpYmVyYXRlbHlcbiAqIHNtYWxsIGJlY2F1c2Ugc3RhbGUgYnVuZGxlcyBhbmQgb25lLW9mZiBsb29rdXAgc25pcHBldHMgaGF2ZSBubyBsYXN0aW5nIHZhbHVlLlxuICovXG5jb25zdCBNQVhfU0NSSVBUX1NPVVJDRVMgPSA4O1xuXG4vKipcbiAqIExvb2tzIHVwIHRoZSBwZXItZmlsZW5hbWUgbWFwIGZvciBgY29kZWAsIG1hcmtpbmcgaXQgbW9zdC1yZWNlbnRseS11c2VkLlxuICogUmVsaWVzIG9uIGBNYXBgIHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyOiBkZWxldGluZyBhbmQgcmUtaW5zZXJ0aW5nIGFuXG4gKiBleGlzdGluZyBrZXkgbW92ZXMgaXQgdG8gdGhlIGVuZCAobmV3ZXN0KSwgc28gdGhlIGZpcnN0IGtleSBpcyBhbHdheXMgdGhlXG4gKiBsZWFzdC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gdG91Y2hTY3JpcHRTb3VyY2UoY29kZTogc3RyaW5nKTogTWFwPHN0cmluZywgU2NyaXB0PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJ5RmlsZW5hbWUgPSBzY3JpcHRzLmJ5Q29kZS5nZXQoY29kZSk7XG4gIGlmIChieUZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIE1vdmUgdG8gdGhlIG1vc3QtcmVjZW50bHktdXNlZCBwb3NpdGlvbiAoZW5kIG9mIGluc2VydGlvbiBvcmRlcikuXG4gIHNjcmlwdHMuYnlDb2RlLmRlbGV0ZShjb2RlKTtcbiAgc2NyaXB0cy5ieUNvZGUuc2V0KGNvZGUsIGJ5RmlsZW5hbWUpO1xuICByZXR1cm4gYnlGaWxlbmFtZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGlsZWQgYHZtLlNjcmlwdGAgZm9yIHRoZSBnaXZlbiBzb3VyY2UgY29kZSBhbmQgZmlsZW5hbWUsXG4gKiBjb21waWxpbmcgYW5kIGNhY2hpbmcgaXQgb24gZmlyc3QgdXNlLiBTdWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlIHNhbWVcbiAqIGAoY29kZSwgZmlsZW5hbWUpYCByZXR1cm4gdGhlIGNhY2hlZCBgU2NyaXB0YC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgYFNjcmlwdGAgaXMgbm90IHlldCBib3VuZCB0byBhbnkgY29udGV4dDsgdGhlIGNhbGxlciBydW5zIGl0XG4gKiBhZ2FpbnN0IGEgc3BlY2lmaWMgVk0gY29udGV4dCB2aWEgYHNjcmlwdC5ydW5JbkNvbnRleHQoY29udGV4dClgLiBUaGlzIGlzXG4gKiBlcXVpdmFsZW50IHRvIGB2bS5ydW5JbkNvbnRleHQoY29kZSwgY29udGV4dCwgeyBmaWxlbmFtZSB9KWAgYnV0IHNraXBzIHRoZVxuICogcmVjb21waWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FjaGVkV29ya2Zsb3dTY3JpcHQoXG4gIGNvZGU6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZ1xuKTogeyBzY3JpcHQ6IFNjcmlwdDsgY2FjaGVIaXQ6IGJvb2xlYW4gfSB7XG4gIGxldCBieUZpbGVuYW1lID0gdG91Y2hTY3JpcHRTb3VyY2UoY29kZSk7XG4gIGlmIChieUZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBieUZpbGVuYW1lID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdD4oKTtcbiAgICBzY3JpcHRzLmJ5Q29kZS5zZXQoY29kZSwgYnlGaWxlbmFtZSk7XG4gICAgLy8gRXZpY3QgdGhlIGxlYXN0LXJlY2VudGx5LXVzZWQgc291cmNlKHMpIHdoZW4gb3ZlciB0aGUgY2FwLiBOZXcgc291cmNlc1xuICAgIC8vIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kLCBzbyB0aGUgb2xkZXN0IGxpdmUgYXQgdGhlIGZyb250LlxuICAgIHdoaWxlIChzY3JpcHRzLmJ5Q29kZS5zaXplID4gTUFYX1NDUklQVF9TT1VSQ0VTKSB7XG4gICAgICBjb25zdCBvbGRlc3QgPSBzY3JpcHRzLmJ5Q29kZS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc2NyaXB0cy5ieUNvZGUuZGVsZXRlKG9sZGVzdCk7XG4gICAgfVxuICB9XG4gIGxldCBzY3JpcHQgPSBieUZpbGVuYW1lLmdldChmaWxlbmFtZSk7XG4gIGNvbnN0IGNhY2hlSGl0ID0gc2NyaXB0ICE9PSB1bmRlZmluZWQ7XG4gIGlmIChzY3JpcHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHNjcmlwdCA9IG5ldyBTY3JpcHQoY29kZSwgeyBmaWxlbmFtZSB9KTtcbiAgICBieUZpbGVuYW1lLnNldChmaWxlbmFtZSwgc2NyaXB0KTtcbiAgfVxuICByZXR1cm4geyBzY3JpcHQsIGNhY2hlSGl0IH07XG59XG5cbi8qKlxuICogQ2xlYXJzIHRoZSBjb21waWxlZC1zY3JpcHQgY2FjaGUuIEludGVuZGVkIGZvciB0ZXN0cyB0aGF0IHdhbnQgdG8gYXNzZXJ0XG4gKiBjb21waWxlLXZzLWNhY2hlIGJlaGF2aW91ciBpbiBpc29sYXRpb247IG5vdCB1c2VkIG9uIHRoZSBob3QgcGF0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyV29ya2Zsb3dTY3JpcHRDYWNoZSgpOiB2b2lkIHtcbiAgc2NyaXB0cy5ieUNvZGUuY2xlYXIoKTtcbn1cblxuLyoqXG4gKiBOdW1iZXIgb2YgZGlzdGluY3Qgc2NyaXB0IHNvdXJjZSBzdHJpbmdzIGN1cnJlbnRseSByZXRhaW5lZC4gRXhwb3NlZCBmb3JcbiAqIHRlc3RzIGFzc2VydGluZyB0aGUgTFJVIGJvdW5kOyBub3QgdXNlZCBvbiB0aGUgaG90IHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1NjcmlwdENhY2hlU2l6ZSgpOiBudW1iZXIge1xuICByZXR1cm4gc2NyaXB0cy5ieUNvZGUuc2l6ZTtcbn1cbiJdfQ==
@@ -403,4 +403,4 @@ export function installUint8ArrayBase64(Uint8ArrayCtor) {
403
403
  });
404
404
  }
405
405
  }
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWludDhhcnJheS1iYXNlNjQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vdWludDhhcnJheS1iYXNlNjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBeUNILDJCQUEyQjtBQUMzQixNQUFNLFlBQVksR0FDaEIsa0VBQWtFLENBQUM7QUFFckUsMEVBQTBFO0FBQzFFLE1BQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzdDLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZO0lBQ3JDLE9BQU8sQ0FDTCxJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJO1FBQ2IsSUFBSSxLQUFLLElBQUk7UUFDYixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJLENBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ3JELE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEUsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FDeEIsS0FBYSxFQUNiLGdCQUEwQjtJQUUxQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2pDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO1NBQU0sSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFdEMsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksZ0JBQWdCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQVFELFNBQVMsVUFBVSxDQUNqQixHQUFXLEVBQ1gsUUFBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLFNBQWtCO0lBRWxCLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFMUIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEMsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksaUJBQWlCLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztvQkFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELElBQUksaUJBQWlCLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2xDLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN0QixPQUFPOzRCQUNMLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQ3BCLCtDQUErQyxDQUNoRDt5QkFDRixDQUFDO29CQUNKLENBQUM7b0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sU0FBUztvQkFDVCxPQUFPO3dCQUNMLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQ3BCLGlEQUFpRCxDQUNsRDtxQkFDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87b0JBQ0wsSUFBSTtvQkFDSixLQUFLO29CQUNMLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQztpQkFDdEUsQ0FBQztZQUNKLENBQUM7WUFFRCxLQUFLLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXhDLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxpQkFBaUIsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO3dCQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ3RDLENBQUM7b0JBQ0QsT0FBTzt3QkFDTCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsS0FBSyxFQUFFLElBQUksV0FBVyxDQUNwQixrREFBa0QsQ0FDbkQ7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNqQixLQUFLLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsT0FBTztvQkFDTCxJQUFJO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLElBQUksV0FBVyxDQUNwQixxREFBcUQsQ0FDdEQ7aUJBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixLQUFLLFFBQVEsQ0FBQztZQUN4RCxJQUFJLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQWdCLEVBQUUsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakMsT0FBTztvQkFDTCxJQUFJO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLElBQUksV0FBVyxDQUNwQiw0Q0FBNEMsSUFBSSxHQUFHLENBQ3BEO2lCQUNGLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksR0FBRyxHQUFHLENBQUM7WUFDYixDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2dCQUNMLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FDcEIseUNBQXlDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FDM0Q7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUNFLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQ3RDLENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELEtBQUssSUFBSSxJQUFJLENBQUM7UUFDZCxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUUzQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4QyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLEdBQUcsS0FBSyxDQUFDO1lBRWIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQVFELFNBQVMsT0FBTyxDQUFDLEdBQVcsRUFBRSxTQUFrQjtJQUM5QyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFFYixJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNMLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMseUNBQXlDLENBQUM7U0FDbEUsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2dCQUNMLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FDcEIsaURBQWlELElBQUksRUFBRSxDQUN4RDthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFpQixFQUFFLE9BQXlCO0lBQzVELE1BQU0sUUFBUSxHQUFtQixPQUFPLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQztJQUMvRCxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxTQUFTLENBQ2pCLDREQUE0RCxRQUFRLEdBQUcsQ0FDeEUsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRXpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxZQUFZLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBaUI7SUFDOUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsY0FBaUM7SUFFakMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFNBQWlDLENBQUM7SUFDL0QsTUFBTSxJQUFJLEdBQUcsY0FBaUQsQ0FBQztJQUUvRCwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDdkMsS0FBSyxFQUFFLFNBQVMsY0FBYyxDQUU1QixPQUF5QjtnQkFFekIsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELCtCQUErQjtJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNwQyxLQUFLLEVBQUUsU0FBUyxXQUFXO2dCQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksY0FBYyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxJQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUU7WUFDNUMsS0FBSyxFQUFFLFNBQVMsbUJBQW1CLENBRWpDLEdBQVcsRUFDWCxPQUEyQjtnQkFFM0IsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBQ0QsTUFBTSxRQUFRLEdBQW1CLE9BQU8sRUFBRSxRQUFRLElBQUksUUFBUSxDQUFDO2dCQUMvRCxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUN0RCxNQUFNLElBQUksU0FBUyxDQUNqQiw0REFBNEQsUUFBUSxHQUFHLENBQ3hFLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLGlCQUFpQixHQUNyQixPQUFPLEVBQUUsaUJBQWlCLElBQUksT0FBTyxDQUFDO2dCQUN4QyxJQUNFLGlCQUFpQixLQUFLLE9BQU87b0JBQzdCLGlCQUFpQixLQUFLLFFBQVE7b0JBQzlCLGlCQUFpQixLQUFLLHFCQUFxQixFQUMzQyxDQUFDO29CQUNELE1BQU0sSUFBSSxTQUFTLENBQ2pCLHlGQUF5RixpQkFBaUIsR0FBRyxDQUM5RyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUN2QixHQUFHLEVBQ0gsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFFN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO2dCQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUM7Z0JBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7WUFDekMsS0FBSyxFQUFFLFNBQVMsZ0JBQWdCLENBRTlCLEdBQVc7Z0JBRVgsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsQ0FBQztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNyQixDQUFDO2dCQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFO1lBQ2xELEtBQUssRUFBRSxTQUFTLGdCQUFnQixDQUM5QixHQUFXLEVBQ1gsT0FBMkI7Z0JBRTNCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBbUIsT0FBTyxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUM7Z0JBQy9ELElBQUksUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBQ3RELE1BQU0sSUFBSSxTQUFTLENBQ2pCLDREQUE0RCxRQUFRLEdBQUcsQ0FDeEUsQ0FBQztnQkFDSixDQUFDO2dCQUNELE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxPQUFPLENBQUM7Z0JBQ3hDLElBQ0UsaUJBQWlCLEtBQUssT0FBTztvQkFDN0IsaUJBQWlCLEtBQUssUUFBUTtvQkFDOUIsaUJBQWlCLEtBQUsscUJBQXFCLEVBQzNDLENBQUM7b0JBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FDakIseUZBQXlGLGlCQUFpQixHQUFHLENBQzlHLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNyQixDQUFDO2dCQUVELE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDL0MsS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLEdBQVc7Z0JBQ3ZDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUM7Z0JBRUQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvbHlmaWxsIGZvciB0aGUgVEMzOSBVaW50OEFycmF5IGJhc2U2NC9oZXggcHJvcG9zYWwgKFN0YWdlIDQpLlxuICpcbiAqIEltcGxlbWVudHM6XG4gKiAgLSBVaW50OEFycmF5LnByb3RvdHlwZS50b0Jhc2U2NChbb3B0aW9uc10pXG4gKiAgLSBVaW50OEFycmF5LnByb3RvdHlwZS50b0hleCgpXG4gKiAgLSBVaW50OEFycmF5LmZyb21CYXNlNjQoc3RyaW5nWywgb3B0aW9uc10pXG4gKiAgLSBVaW50OEFycmF5LmZyb21IZXgoc3RyaW5nKVxuICogIC0gVWludDhBcnJheS5wcm90b3R5cGUuc2V0RnJvbUJhc2U2NChzdHJpbmdbLCBvcHRpb25zXSlcbiAqICAtIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldEZyb21IZXgoc3RyaW5nKVxuICpcbiAqIEBzZWUgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWFycmF5YnVmZmVyLWJhc2U2NC9zcGVjL1xuICovXG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBwb2x5ZmlsbGVkIG1ldGhvZHMuIFRoZXNlIGFyZSBpbnRlbnRpb25hbGx5XG4vLyBOT1QgYGRlY2xhcmUgZ2xvYmFsYCB0byBhdm9pZCBsZWFraW5nIHR5cGVzIHRvIGhvc3Qtc2lkZSBjb2RlIOKAlCB0aGUgcG9seWZpbGxcbi8vIGlzIG9ubHkgaW5zdGFsbGVkIGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gY29udGV4dC5cbmludGVyZmFjZSBVaW50OEFycmF5V2l0aEJhc2U2NCBleHRlbmRzIFVpbnQ4QXJyYXkge1xuICB0b0Jhc2U2NChvcHRpb25zPzogeyBhbHBoYWJldD86IHN0cmluZzsgb21pdFBhZGRpbmc/OiBib29sZWFuIH0pOiBzdHJpbmc7XG4gIHRvSGV4KCk6IHN0cmluZztcbiAgc2V0RnJvbUJhc2U2NChcbiAgICBzdHI6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBhbHBoYWJldD86IHN0cmluZzsgbGFzdENodW5rSGFuZGxpbmc/OiBzdHJpbmcgfVxuICApOiB7IHJlYWQ6IG51bWJlcjsgd3JpdHRlbjogbnVtYmVyIH07XG4gIHNldEZyb21IZXgoc3RyOiBzdHJpbmcpOiB7IHJlYWQ6IG51bWJlcjsgd3JpdHRlbjogbnVtYmVyIH07XG59XG5cbmludGVyZmFjZSBVaW50OEFycmF5Q29uc3RydWN0b3JXaXRoQmFzZTY0IGV4dGVuZHMgVWludDhBcnJheUNvbnN0cnVjdG9yIHtcbiAgZnJvbUJhc2U2NChcbiAgICBzdHI6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBhbHBoYWJldD86IHN0cmluZzsgbGFzdENodW5rSGFuZGxpbmc/OiBzdHJpbmcgfVxuICApOiBVaW50OEFycmF5O1xuICBmcm9tSGV4KHN0cjogc3RyaW5nKTogVWludDhBcnJheTtcbn1cblxudHlwZSBCYXNlNjRBbHBoYWJldCA9ICdiYXNlNjQnIHwgJ2Jhc2U2NHVybCc7XG50eXBlIExhc3RDaHVua0hhbmRsaW5nID0gJ2xvb3NlJyB8ICdzdHJpY3QnIHwgJ3N0b3AtYmVmb3JlLXBhcnRpYWwnO1xuXG5pbnRlcmZhY2UgVG9CYXNlNjRPcHRpb25zIHtcbiAgYWxwaGFiZXQ/OiBCYXNlNjRBbHBoYWJldDtcbiAgb21pdFBhZGRpbmc/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRnJvbUJhc2U2NE9wdGlvbnMge1xuICBhbHBoYWJldD86IEJhc2U2NEFscGhhYmV0O1xuICBsYXN0Q2h1bmtIYW5kbGluZz86IExhc3RDaHVua0hhbmRsaW5nO1xufVxuXG5pbnRlcmZhY2UgU2V0RnJvbVJlc3VsdCB7XG4gIHJlYWQ6IG51bWJlcjtcbiAgd3JpdHRlbjogbnVtYmVyO1xufVxuXG4vLyBTdGFuZGFyZCBiYXNlNjQgYWxwaGFiZXRcbmNvbnN0IEJBU0U2NF9DSEFSUyA9XG4gICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuLy8gUmV2ZXJzZSBsb29rdXAgdGFibGU6IGNoYXIgY29kZSAtPiBpbmRleCAoZm9yIHN0YW5kYXJkIGJhc2U2NCBhbHBoYWJldClcbmNvbnN0IEJBU0U2NF9MT09LVVAgPSBuZXcgVWludDhBcnJheSgxMjgpLmZpbGwoMjU1KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgQkFTRTY0X0NIQVJTLmxlbmd0aDsgaSsrKSB7XG4gIEJBU0U2NF9MT09LVVBbQkFTRTY0X0NIQVJTLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cblxuLy8gQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHBlciBzcGVjOiBUQUIsIExGLCBGRiwgQ1IsIFNQQUNFXG5mdW5jdGlvbiBpc0FzY2lpV2hpdGVzcGFjZShjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb2RlID09PSAweDA5IHx8XG4gICAgY29kZSA9PT0gMHgwYSB8fFxuICAgIGNvZGUgPT09IDB4MGMgfHxcbiAgICBjb2RlID09PSAweDBkIHx8XG4gICAgY29kZSA9PT0gMHgyMFxuICApO1xufVxuXG5mdW5jdGlvbiBza2lwQXNjaWlXaGl0ZXNwYWNlKHN0cjogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgd2hpbGUgKGluZGV4IDwgc3RyLmxlbmd0aCAmJiBpc0FzY2lpV2hpdGVzcGFjZShzdHIuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NENodW5rKFxuICBjaHVuazogc3RyaW5nLFxuICB0aHJvd09uRXh0cmFCaXRzPzogYm9vbGVhblxuKTogbnVtYmVyW10ge1xuICBjb25zdCBjaHVua0xlbmd0aCA9IGNodW5rLmxlbmd0aDtcbiAgbGV0IHBhZGRlZCA9IGNodW5rO1xuICBpZiAoY2h1bmtMZW5ndGggPT09IDIpIHtcbiAgICBwYWRkZWQgPSBjaHVuayArICdBQSc7XG4gIH0gZWxzZSBpZiAoY2h1bmtMZW5ndGggPT09IDMpIHtcbiAgICBwYWRkZWQgPSBjaHVuayArICdBJztcbiAgfVxuXG4gIC8vIERlY29kZSA0IGJhc2U2NCBjaGFycyB0byAzIGJ5dGVzXG4gIGNvbnN0IGIwID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgwKV07XG4gIGNvbnN0IGIxID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgxKV07XG4gIGNvbnN0IGIyID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgyKV07XG4gIGNvbnN0IGIzID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgzKV07XG5cbiAgY29uc3QgYnl0ZTAgPSAoYjAgPDwgMikgfCAoYjEgPj4gNCk7XG4gIGNvbnN0IGJ5dGUxID0gKChiMSAmIDB4MGYpIDw8IDQpIHwgKGIyID4+IDIpO1xuICBjb25zdCBieXRlMiA9ICgoYjIgJiAweDAzKSA8PCA2KSB8IGIzO1xuXG4gIGlmIChjaHVua0xlbmd0aCA9PT0gMikge1xuICAgIGlmICh0aHJvd09uRXh0cmFCaXRzICYmIGJ5dGUxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0V4dHJhIGJpdHMgaW4gYmFzZTY0IGNodW5rJyk7XG4gICAgfVxuICAgIHJldHVybiBbYnl0ZTBdO1xuICB9XG4gIGlmIChjaHVua0xlbmd0aCA9PT0gMykge1xuICAgIGlmICh0aHJvd09uRXh0cmFCaXRzICYmIGJ5dGUyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0V4dHJhIGJpdHMgaW4gYmFzZTY0IGNodW5rJyk7XG4gICAgfVxuICAgIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbiAgfVxuICByZXR1cm4gW2J5dGUwLCBieXRlMSwgYnl0ZTJdO1xufVxuXG5pbnRlcmZhY2UgRnJvbUJhc2U2NFJlc3VsdCB7XG4gIHJlYWQ6IG51bWJlcjtcbiAgYnl0ZXM6IG51bWJlcltdO1xuICBlcnJvcjogU3ludGF4RXJyb3IgfCBudWxsO1xufVxuXG5mdW5jdGlvbiBmcm9tQmFzZTY0KFxuICBzdHI6IHN0cmluZyxcbiAgYWxwaGFiZXQ6IEJhc2U2NEFscGhhYmV0LFxuICBsYXN0Q2h1bmtIYW5kbGluZzogTGFzdENodW5rSGFuZGxpbmcsXG4gIG1heExlbmd0aD86IG51bWJlclxuKTogRnJvbUJhc2U2NFJlc3VsdCB7XG4gIGlmIChtYXhMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIG1heExlbmd0aCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICB9XG4gIGlmIChtYXhMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyByZWFkOiAwLCBieXRlczogW10sIGVycm9yOiBudWxsIH07XG4gIH1cblxuICBsZXQgcmVhZCA9IDA7XG4gIGNvbnN0IGJ5dGVzOiBudW1iZXJbXSA9IFtdO1xuICBsZXQgY2h1bmsgPSAnJztcbiAgbGV0IGNodW5rTGVuZ3RoID0gMDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGluZGV4ID0gc2tpcEFzY2lpV2hpdGVzcGFjZShzdHIsIGluZGV4KTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAoY2h1bmtMZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChsYXN0Q2h1bmtIYW5kbGluZyA9PT0gJ3N0b3AtYmVmb3JlLXBhcnRpYWwnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVhZCwgYnl0ZXMsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RDaHVua0hhbmRsaW5nID09PSAnbG9vc2UnKSB7XG4gICAgICAgICAgaWYgKGNodW5rTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZWFkLFxuICAgICAgICAgICAgICBieXRlcyxcbiAgICAgICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBiYXNlNjQ6IGxvbmUgY2hhcmFjdGVyIGluIGZpbmFsIGNodW5rJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnl0ZXMucHVzaCguLi5kZWNvZGVCYXNlNjRDaHVuayhjaHVuaywgZmFsc2UpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdHJpY3RcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVhZCxcbiAgICAgICAgICAgIGJ5dGVzLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFsaWQgYmFzZTY0OiBpbmNvbXBsZXRlIGNodW5rIGluIHN0cmljdCBtb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyByZWFkOiBsZW5ndGgsIGJ5dGVzLCBlcnJvcjogbnVsbCB9O1xuICAgIH1cblxuICAgIGxldCBjaGFyID0gc3RyW2luZGV4XTtcbiAgICBpbmRleCsrO1xuXG4gICAgaWYgKGNoYXIgPT09ICc9Jykge1xuICAgICAgaWYgKGNodW5rTGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlYWQsXG4gICAgICAgICAgYnl0ZXMsXG4gICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBiYXNlNjQ6IHBhZGRpbmcgaW4gdW5leHBlY3RlZCBwbGFjZScpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpbmRleCA9IHNraXBBc2NpaVdoaXRlc3BhY2Uoc3RyLCBpbmRleCk7XG5cbiAgICAgIGlmIChjaHVua0xlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICAgIGlmIChsYXN0Q2h1bmtIYW5kbGluZyA9PT0gJ3N0b3AtYmVmb3JlLXBhcnRpYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZWFkLCBieXRlcywgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlYWQsXG4gICAgICAgICAgICBieXRlcyxcbiAgICAgICAgICAgIGVycm9yOiBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhbGlkIGJhc2U2NDogbWlzc2luZyBzZWNvbmQgcGFkZGluZyBjaGFyYWN0ZXInXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2hhciA9IHN0cltpbmRleF07XG4gICAgICAgIGlmIChjaGFyID09PSAnPScpIHtcbiAgICAgICAgICBpbmRleCA9IHNraXBBc2NpaVdoaXRlc3BhY2Uoc3RyLCBpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlYWQsXG4gICAgICAgICAgYnl0ZXMsXG4gICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkIGJhc2U2NDogdW5leHBlY3RlZCBjaGFyYWN0ZXJzIGFmdGVyIHBhZGRpbmcnXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGhyb3dPbkV4dHJhQml0cyA9IGxhc3RDaHVua0hhbmRsaW5nID09PSAnc3RyaWN0JztcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ5dGVzLnB1c2goLi4uZGVjb2RlQmFzZTY0Q2h1bmsoY2h1bmssIHRocm93T25FeHRyYUJpdHMpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVhZCwgYnl0ZXMsIGVycm9yOiBlIGFzIFN5bnRheEVycm9yIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyByZWFkOiBsZW5ndGgsIGJ5dGVzLCBlcnJvcjogbnVsbCB9O1xuICAgIH1cblxuICAgIGlmIChhbHBoYWJldCA9PT0gJ2Jhc2U2NHVybCcpIHtcbiAgICAgIGlmIChjaGFyID09PSAnKycgfHwgY2hhciA9PT0gJy8nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVhZCxcbiAgICAgICAgICBieXRlcyxcbiAgICAgICAgICBlcnJvcjogbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgYmFzZTY0dXJsOiB1bmV4cGVjdGVkIGNoYXJhY3RlciAnJHtjaGFyfSdgXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSAnLScpIHtcbiAgICAgICAgY2hhciA9ICcrJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ18nKSB7XG4gICAgICAgIGNoYXIgPSAnLyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2hhcmFjdGVyIGlzIGluIHRoZSBzdGFuZGFyZCBiYXNlNjQgYWxwaGFiZXRcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChjb2RlID49IDEyOCB8fCBCQVNFNjRfTE9PS1VQW2NvZGVdID09PSAyNTUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlYWQsXG4gICAgICAgIGJ5dGVzLFxuICAgICAgICBlcnJvcjogbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGJhc2U2NDogdW5leHBlY3RlZCBjaGFyYWN0ZXIgJyR7c3RyW2luZGV4IC0gMV19J2BcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYWRkaW5nIHRoaXMgY2hhcmFjdGVyIHdvdWxkIGV4Y2VlZCBtYXhMZW5ndGhcbiAgICBjb25zdCByZW1haW5pbmcgPSBtYXhMZW5ndGggLSBieXRlcy5sZW5ndGg7XG4gICAgaWYgKFxuICAgICAgKHJlbWFpbmluZyA9PT0gMSAmJiBjaHVua0xlbmd0aCA9PT0gMikgfHxcbiAgICAgIChyZW1haW5pbmcgPT09IDIgJiYgY2h1bmtMZW5ndGggPT09IDMpXG4gICAgKSB7XG4gICAgICByZXR1cm4geyByZWFkLCBieXRlcywgZXJyb3I6IG51bGwgfTtcbiAgICB9XG5cbiAgICBjaHVuayArPSBjaGFyO1xuICAgIGNodW5rTGVuZ3RoID0gY2h1bmsubGVuZ3RoO1xuXG4gICAgaWYgKGNodW5rTGVuZ3RoID09PSA0KSB7XG4gICAgICBieXRlcy5wdXNoKC4uLmRlY29kZUJhc2U2NENodW5rKGNodW5rKSk7XG4gICAgICBjaHVuayA9ICcnO1xuICAgICAgY2h1bmtMZW5ndGggPSAwO1xuICAgICAgcmVhZCA9IGluZGV4O1xuXG4gICAgICBpZiAoYnl0ZXMubGVuZ3RoID09PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVhZCwgYnl0ZXMsIGVycm9yOiBudWxsIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBGcm9tSGV4UmVzdWx0IHtcbiAgcmVhZDogbnVtYmVyO1xuICBieXRlczogbnVtYmVyW107XG4gIGVycm9yOiBTeW50YXhFcnJvciB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZyb21IZXgoc3RyOiBzdHJpbmcsIG1heExlbmd0aD86IG51bWJlcik6IEZyb21IZXhSZXN1bHQge1xuICBpZiAobWF4TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBtYXhMZW5ndGggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gIGNvbnN0IGJ5dGVzOiBudW1iZXJbXSA9IFtdO1xuICBsZXQgcmVhZCA9IDA7XG5cbiAgaWYgKGxlbmd0aCAlIDIgIT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZDogMCxcbiAgICAgIGJ5dGVzOiBbXSxcbiAgICAgIGVycm9yOiBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgaGV4OiBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgZXZlbicpLFxuICAgIH07XG4gIH1cblxuICB3aGlsZSAocmVhZCA8IGxlbmd0aCAmJiBieXRlcy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICBjb25zdCBoZXhpdHMgPSBzdHIuc3Vic3RyaW5nKHJlYWQsIHJlYWQgKyAyKTtcbiAgICBpZiAoIS9eWzAtOWEtZkEtRl17Mn0kLy50ZXN0KGhleGl0cykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlYWQsXG4gICAgICAgIGJ5dGVzLFxuICAgICAgICBlcnJvcjogbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGhleDogdW5leHBlY3RlZCBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gJHtyZWFkfWBcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJlYWQgKz0gMjtcbiAgICBieXRlcy5wdXNoKE51bWJlci5wYXJzZUludChoZXhpdHMsIDE2KSk7XG4gIH1cblxuICByZXR1cm4geyByZWFkLCBieXRlcywgZXJyb3I6IG51bGwgfTtcbn1cblxuZnVuY3Rpb24gdG9CYXNlNjQodWludDg6IFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBUb0Jhc2U2NE9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBhbHBoYWJldDogQmFzZTY0QWxwaGFiZXQgPSBvcHRpb25zPy5hbHBoYWJldCA/PyAnYmFzZTY0JztcbiAgaWYgKGFscGhhYmV0ICE9PSAnYmFzZTY0JyAmJiBhbHBoYWJldCAhPT0gJ2Jhc2U2NHVybCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYEludmFsaWQgYWxwaGFiZXQ6IGV4cGVjdGVkIFwiYmFzZTY0XCIgb3IgXCJiYXNlNjR1cmxcIiwgZ290IFwiJHthbHBoYWJldH1cImBcbiAgICApO1xuICB9XG4gIGNvbnN0IG9taXRQYWRkaW5nID0gQm9vbGVhbihvcHRpb25zPy5vbWl0UGFkZGluZyk7XG5cbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBjb25zdCBsZW4gPSB1aW50OC5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMykge1xuICAgIGNvbnN0IGIwID0gdWludDhbaV07XG4gICAgY29uc3QgYjEgPSBpICsgMSA8IGxlbiA/IHVpbnQ4W2kgKyAxXSA6IDA7XG4gICAgY29uc3QgYjIgPSBpICsgMiA8IGxlbiA/IHVpbnQ4W2kgKyAyXSA6IDA7XG5cbiAgICByZXN1bHQgKz0gQkFTRTY0X0NIQVJTWyhiMCA+PiAyKSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBCQVNFNjRfQ0hBUlNbKChiMCAmIDB4MDMpIDw8IDQpIHwgKChiMSA+PiA0KSAmIDB4MGYpXTtcblxuICAgIGlmIChpICsgMSA8IGxlbikge1xuICAgICAgcmVzdWx0ICs9IEJBU0U2NF9DSEFSU1soKGIxICYgMHgwZikgPDwgMikgfCAoKGIyID4+IDYpICYgMHgwMyldO1xuICAgIH0gZWxzZSBpZiAoIW9taXRQYWRkaW5nKSB7XG4gICAgICByZXN1bHQgKz0gJz0nO1xuICAgIH1cblxuICAgIGlmIChpICsgMiA8IGxlbikge1xuICAgICAgcmVzdWx0ICs9IEJBU0U2NF9DSEFSU1tiMiAmIDB4M2ZdO1xuICAgIH0gZWxzZSBpZiAoIW9taXRQYWRkaW5nKSB7XG4gICAgICByZXN1bHQgKz0gJz0nO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbHBoYWJldCA9PT0gJ2Jhc2U2NHVybCcpIHtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0b0hleCh1aW50ODogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuICAgIG91dCArPSB1aW50OFtpXS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBVaW50OEFycmF5IGJhc2U2NC9oZXggcG9seWZpbGwgb250byB0aGUgZ2l2ZW5cbiAqIFVpbnQ4QXJyYXkgY29uc3RydWN0b3IgYW5kIHByb3RvdHlwZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBiZVxuICogdXNlZCBpbnNpZGUgdGhlIHdvcmtmbG93IFZNIGNvbnRleHQsIG9wZXJhdGluZyBvbiB0aGUgVk0nc1xuICogb3duIFVpbnQ4QXJyYXkgcmF0aGVyIHRoYW4gdGhlIGhvc3Qncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxVaW50OEFycmF5QmFzZTY0KFxuICBVaW50OEFycmF5Q3RvcjogdHlwZW9mIFVpbnQ4QXJyYXlcbik6IHZvaWQge1xuICBjb25zdCBwcm90byA9IFVpbnQ4QXJyYXlDdG9yLnByb3RvdHlwZSBhcyBVaW50OEFycmF5V2l0aEJhc2U2NDtcbiAgY29uc3QgY3RvciA9IFVpbnQ4QXJyYXlDdG9yIGFzIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcldpdGhCYXNlNjQ7XG5cbiAgLy8gVWludDhBcnJheS5wcm90b3R5cGUudG9CYXNlNjQoW29wdGlvbnNdKVxuICBpZiAoIXByb3RvLnRvQmFzZTY0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCAndG9CYXNlNjQnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdG9CYXNlNjRNZXRob2QoXG4gICAgICAgIHRoaXM6IFVpbnQ4QXJyYXksXG4gICAgICAgIG9wdGlvbnM/OiBUb0Jhc2U2NE9wdGlvbnNcbiAgICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVaW50OEFycmF5Q3RvcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG5vdCBhIFVpbnQ4QXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9CYXNlNjQodGhpcywgb3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVpbnQ4QXJyYXkucHJvdG90eXBlLnRvSGV4KClcbiAgaWYgKCFwcm90by50b0hleCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3RvSGV4Jywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvSGV4TWV0aG9kKHRoaXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVWludDhBcnJheUN0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBub3QgYSBVaW50OEFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvSGV4KHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBVaW50OEFycmF5LnByb3RvdHlwZS5zZXRGcm9tQmFzZTY0KHN0cmluZ1ssIG9wdGlvbnNdKVxuICBpZiAoIXByb3RvLnNldEZyb21CYXNlNjQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICdzZXRGcm9tQmFzZTY0Jywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEZyb21CYXNlNjRNZXRob2QoXG4gICAgICAgIHRoaXM6IFVpbnQ4QXJyYXksXG4gICAgICAgIHN0cjogc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogRnJvbUJhc2U2NE9wdGlvbnNcbiAgICAgICk6IFNldEZyb21SZXN1bHQge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVWludDhBcnJheUN0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBub3QgYSBVaW50OEFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYWJldDogQmFzZTY0QWxwaGFiZXQgPSBvcHRpb25zPy5hbHBoYWJldCA/PyAnYmFzZTY0JztcbiAgICAgICAgaWYgKGFscGhhYmV0ICE9PSAnYmFzZTY0JyAmJiBhbHBoYWJldCAhPT0gJ2Jhc2U2NHVybCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgYWxwaGFiZXQ6IGV4cGVjdGVkIFwiYmFzZTY0XCIgb3IgXCJiYXNlNjR1cmxcIiwgZ290IFwiJHthbHBoYWJldH1cImBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDaHVua0hhbmRsaW5nOiBMYXN0Q2h1bmtIYW5kbGluZyA9XG4gICAgICAgICAgb3B0aW9ucz8ubGFzdENodW5rSGFuZGxpbmcgPz8gJ2xvb3NlJztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxhc3RDaHVua0hhbmRsaW5nICE9PSAnbG9vc2UnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdHJpY3QnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdG9wLWJlZm9yZS1wYXJ0aWFsJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgbGFzdENodW5rSGFuZGxpbmc6IGV4cGVjdGVkIFwibG9vc2VcIiwgXCJzdHJpY3RcIiwgb3IgXCJzdG9wLWJlZm9yZS1wYXJ0aWFsXCIsIGdvdCBcIiR7bGFzdENodW5rSGFuZGxpbmd9XCJgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZyb21CYXNlNjQoXG4gICAgICAgICAgc3RyLFxuICAgICAgICAgIGFscGhhYmV0LFxuICAgICAgICAgIGxhc3RDaHVua0hhbmRsaW5nLFxuICAgICAgICAgIHRoaXMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gcmVzdWx0LmJ5dGVzO1xuICAgICAgICBjb25zdCB3cml0dGVuID0gYnl0ZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3JpdHRlbjsgaSsrKSB7XG4gICAgICAgICAgdGhpc1tpXSA9IGJ5dGVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlYWQ6IHJlc3VsdC5yZWFkLCB3cml0dGVuIH07XG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldEZyb21IZXgoc3RyaW5nKVxuICBpZiAoIXByb3RvLnNldEZyb21IZXgpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICdzZXRGcm9tSGV4Jywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEZyb21IZXhNZXRob2QoXG4gICAgICAgIHRoaXM6IFVpbnQ4QXJyYXksXG4gICAgICAgIHN0cjogc3RyaW5nXG4gICAgICApOiBTZXRGcm9tUmVzdWx0IHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlDdG9yKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RoaXMgaXMgbm90IGEgVWludDhBcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tSGV4KHN0ciwgdGhpcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBieXRlcyA9IHJlc3VsdC5ieXRlcztcbiAgICAgICAgY29uc3Qgd3JpdHRlbiA9IGJ5dGVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdyaXR0ZW47IGkrKykge1xuICAgICAgICAgIHRoaXNbaV0gPSBieXRlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyByZWFkOiByZXN1bHQucmVhZCwgd3JpdHRlbiB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBVaW50OEFycmF5LmZyb21CYXNlNjQoc3RyaW5nWywgb3B0aW9uc10pXG4gIGlmICghY3Rvci5mcm9tQmFzZTY0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4QXJyYXlDdG9yLCAnZnJvbUJhc2U2NCcsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQmFzZTY0U3RhdGljKFxuICAgICAgICBzdHI6IHN0cmluZyxcbiAgICAgICAgb3B0aW9ucz86IEZyb21CYXNlNjRPcHRpb25zXG4gICAgICApOiBVaW50OEFycmF5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYWJldDogQmFzZTY0QWxwaGFiZXQgPSBvcHRpb25zPy5hbHBoYWJldCA/PyAnYmFzZTY0JztcbiAgICAgICAgaWYgKGFscGhhYmV0ICE9PSAnYmFzZTY0JyAmJiBhbHBoYWJldCAhPT0gJ2Jhc2U2NHVybCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgYWxwaGFiZXQ6IGV4cGVjdGVkIFwiYmFzZTY0XCIgb3IgXCJiYXNlNjR1cmxcIiwgZ290IFwiJHthbHBoYWJldH1cImBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDaHVua0hhbmRsaW5nOiBMYXN0Q2h1bmtIYW5kbGluZyA9XG4gICAgICAgICAgb3B0aW9ucz8ubGFzdENodW5rSGFuZGxpbmcgPz8gJ2xvb3NlJztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxhc3RDaHVua0hhbmRsaW5nICE9PSAnbG9vc2UnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdHJpY3QnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdG9wLWJlZm9yZS1wYXJ0aWFsJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgbGFzdENodW5rSGFuZGxpbmc6IGV4cGVjdGVkIFwibG9vc2VcIiwgXCJzdHJpY3RcIiwgb3IgXCJzdG9wLWJlZm9yZS1wYXJ0aWFsXCIsIGdvdCBcIiR7bGFzdENodW5rSGFuZGxpbmd9XCJgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZyb21CYXNlNjQoc3RyLCBhbHBoYWJldCwgbGFzdENodW5rSGFuZGxpbmcpO1xuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5Q3RvcihyZXN1bHQuYnl0ZXMpO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBVaW50OEFycmF5LmZyb21IZXgoc3RyaW5nKVxuICBpZiAoIWN0b3IuZnJvbUhleCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OEFycmF5Q3RvciwgJ2Zyb21IZXgnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbUhleFN0YXRpYyhzdHI6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgICAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBhIHN0cmluZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZnJvbUhleChzdHIpO1xuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5Q3RvcihyZXN1bHQuYnl0ZXMpO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWludDhhcnJheS1iYXNlNjQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdm0vdWludDhhcnJheS1iYXNlNjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBeUNILDJCQUEyQjtBQUMzQixNQUFNLFlBQVksR0FDaEIsa0VBQWtFLENBQUM7QUFFckUsMEVBQTBFO0FBQzFFLE1BQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzdDLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZO0lBQ3JDLE9BQU8sQ0FDTCxJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJO1FBQ2IsSUFBSSxLQUFLLElBQUk7UUFDYixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksS0FBSyxJQUFJLENBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ3JELE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEUsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FDeEIsS0FBYSxFQUNiLGdCQUEwQjtJQUUxQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2pDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNuQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO1NBQU0sSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFdEMsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksZ0JBQWdCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQVFELFNBQVMsVUFBVSxDQUNqQixHQUFXLEVBQ1gsUUFBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLFNBQWtCO0lBRWxCLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFMUIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEMsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDckIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksaUJBQWlCLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztvQkFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELElBQUksaUJBQWlCLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2xDLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN0QixPQUFPOzRCQUNMLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQ3BCLCtDQUErQyxDQUNoRDt5QkFDRixDQUFDO29CQUNKLENBQUM7b0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sU0FBUztvQkFDVCxPQUFPO3dCQUNMLElBQUk7d0JBQ0osS0FBSzt3QkFDTCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQ3BCLGlEQUFpRCxDQUNsRDtxQkFDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87b0JBQ0wsSUFBSTtvQkFDSixLQUFLO29CQUNMLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQztpQkFDdEUsQ0FBQztZQUNKLENBQUM7WUFFRCxLQUFLLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXhDLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxpQkFBaUIsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO3dCQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ3RDLENBQUM7b0JBQ0QsT0FBTzt3QkFDTCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsS0FBSyxFQUFFLElBQUksV0FBVyxDQUNwQixrREFBa0QsQ0FDbkQ7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNqQixLQUFLLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztnQkFDbkIsT0FBTztvQkFDTCxJQUFJO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLElBQUksV0FBVyxDQUNwQixxREFBcUQsQ0FDdEQ7aUJBQ0YsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixLQUFLLFFBQVEsQ0FBQztZQUN4RCxJQUFJLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQWdCLEVBQUUsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakMsT0FBTztvQkFDTCxJQUFJO29CQUNKLEtBQUs7b0JBQ0wsS0FBSyxFQUFFLElBQUksV0FBVyxDQUNwQiw0Q0FBNEMsSUFBSSxHQUFHLENBQ3BEO2lCQUNGLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksR0FBRyxHQUFHLENBQUM7WUFDYixDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2dCQUNMLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FDcEIseUNBQXlDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FDM0Q7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUNFLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQ3RDLENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELEtBQUssSUFBSSxJQUFJLENBQUM7UUFDZCxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUUzQixJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4QyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ1gsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLEdBQUcsS0FBSyxDQUFDO1lBRWIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQVFELFNBQVMsT0FBTyxDQUFDLEdBQVcsRUFBRSxTQUFrQjtJQUM5QyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QixTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFFYixJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTztZQUNMLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMseUNBQXlDLENBQUM7U0FDbEUsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2dCQUNMLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FDcEIsaURBQWlELElBQUksRUFBRSxDQUN4RDthQUNGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFpQixFQUFFLE9BQXlCO0lBQzVELE1BQU0sUUFBUSxHQUFtQixPQUFPLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQztJQUMvRCxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxTQUFTLENBQ2pCLDREQUE0RCxRQUFRLEdBQUcsQ0FDeEUsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRWxELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRXpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxZQUFZLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBaUI7SUFDOUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsY0FBaUM7SUFFakMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFNBQWlDLENBQUM7SUFDL0QsTUFBTSxJQUFJLEdBQUcsY0FBaUQsQ0FBQztJQUUvRCwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDdkMsS0FBSyxFQUFFLFNBQVMsY0FBYyxDQUU1QixPQUF5QjtnQkFFekIsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELCtCQUErQjtJQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUNwQyxLQUFLLEVBQUUsU0FBUyxXQUFXO2dCQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksY0FBYyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxJQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUU7WUFDNUMsS0FBSyxFQUFFLFNBQVMsbUJBQW1CLENBRWpDLEdBQVcsRUFDWCxPQUEyQjtnQkFFM0IsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBQ0QsTUFBTSxRQUFRLEdBQW1CLE9BQU8sRUFBRSxRQUFRLElBQUksUUFBUSxDQUFDO2dCQUMvRCxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUN0RCxNQUFNLElBQUksU0FBUyxDQUNqQiw0REFBNEQsUUFBUSxHQUFHLENBQ3hFLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLGlCQUFpQixHQUNyQixPQUFPLEVBQUUsaUJBQWlCLElBQUksT0FBTyxDQUFDO2dCQUN4QyxJQUNFLGlCQUFpQixLQUFLLE9BQU87b0JBQzdCLGlCQUFpQixLQUFLLFFBQVE7b0JBQzlCLGlCQUFpQixLQUFLLHFCQUFxQixFQUMzQyxDQUFDO29CQUNELE1BQU0sSUFBSSxTQUFTLENBQ2pCLHlGQUF5RixpQkFBaUIsR0FBRyxDQUM5RyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUN2QixHQUFHLEVBQ0gsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7Z0JBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFFN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO2dCQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUM7Z0JBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7WUFDekMsS0FBSyxFQUFFLFNBQVMsZ0JBQWdCLENBRTlCLEdBQVc7Z0JBRVgsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sSUFBSSxTQUFTLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsQ0FBQztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNyQixDQUFDO2dCQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFO1lBQ2xELEtBQUssRUFBRSxTQUFTLGdCQUFnQixDQUM5QixHQUFXLEVBQ1gsT0FBMkI7Z0JBRTNCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBbUIsT0FBTyxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUM7Z0JBQy9ELElBQUksUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBQ3RELE1BQU0sSUFBSSxTQUFTLENBQ2pCLDREQUE0RCxRQUFRLEdBQUcsQ0FDeEUsQ0FBQztnQkFDSixDQUFDO2dCQUNELE1BQU0saUJBQWlCLEdBQ3JCLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxPQUFPLENBQUM7Z0JBQ3hDLElBQ0UsaUJBQWlCLEtBQUssT0FBTztvQkFDN0IsaUJBQWlCLEtBQUssUUFBUTtvQkFDOUIsaUJBQWlCLEtBQUsscUJBQXFCLEVBQzNDLENBQUM7b0JBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FDakIseUZBQXlGLGlCQUFpQixHQUFHLENBQzlHLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNyQixDQUFDO2dCQUVELE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBSTtZQUNkLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUU7WUFDL0MsS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLEdBQVc7Z0JBQ3ZDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLENBQUM7Z0JBRUQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBvbHlmaWxsIGZvciB0aGUgVEMzOSBVaW50OEFycmF5IGJhc2U2NC9oZXggcHJvcG9zYWwgKFN0YWdlIDQpLlxuICpcbiAqIEltcGxlbWVudHM6XG4gKiAgLSBVaW50OEFycmF5LnByb3RvdHlwZS50b0Jhc2U2NChbb3B0aW9uc10pXG4gKiAgLSBVaW50OEFycmF5LnByb3RvdHlwZS50b0hleCgpXG4gKiAgLSBVaW50OEFycmF5LmZyb21CYXNlNjQoc3RyaW5nWywgb3B0aW9uc10pXG4gKiAgLSBVaW50OEFycmF5LmZyb21IZXgoc3RyaW5nKVxuICogIC0gVWludDhBcnJheS5wcm90b3R5cGUuc2V0RnJvbUJhc2U2NChzdHJpbmdbLCBvcHRpb25zXSlcbiAqICAtIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldEZyb21IZXgoc3RyaW5nKVxuICpcbiAqIEBzZWUgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWFycmF5YnVmZmVyLWJhc2U2NC9zcGVjL1xuICovXG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBwb2x5ZmlsbGVkIG1ldGhvZHMuIFRoZXNlIGFyZSBpbnRlbnRpb25hbGx5XG4vLyBOT1QgYGRlY2xhcmUgZ2xvYmFsYCB0byBhdm9pZCBsZWFraW5nIHR5cGVzIHRvIGhvc3Qtc2lkZSBjb2RlOyB0aGUgcG9seWZpbGxcbi8vIGlzIG9ubHkgaW5zdGFsbGVkIGluc2lkZSB0aGUgd29ya2Zsb3cgVk0gY29udGV4dC5cbmludGVyZmFjZSBVaW50OEFycmF5V2l0aEJhc2U2NCBleHRlbmRzIFVpbnQ4QXJyYXkge1xuICB0b0Jhc2U2NChvcHRpb25zPzogeyBhbHBoYWJldD86IHN0cmluZzsgb21pdFBhZGRpbmc/OiBib29sZWFuIH0pOiBzdHJpbmc7XG4gIHRvSGV4KCk6IHN0cmluZztcbiAgc2V0RnJvbUJhc2U2NChcbiAgICBzdHI6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBhbHBoYWJldD86IHN0cmluZzsgbGFzdENodW5rSGFuZGxpbmc/OiBzdHJpbmcgfVxuICApOiB7IHJlYWQ6IG51bWJlcjsgd3JpdHRlbjogbnVtYmVyIH07XG4gIHNldEZyb21IZXgoc3RyOiBzdHJpbmcpOiB7IHJlYWQ6IG51bWJlcjsgd3JpdHRlbjogbnVtYmVyIH07XG59XG5cbmludGVyZmFjZSBVaW50OEFycmF5Q29uc3RydWN0b3JXaXRoQmFzZTY0IGV4dGVuZHMgVWludDhBcnJheUNvbnN0cnVjdG9yIHtcbiAgZnJvbUJhc2U2NChcbiAgICBzdHI6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBhbHBoYWJldD86IHN0cmluZzsgbGFzdENodW5rSGFuZGxpbmc/OiBzdHJpbmcgfVxuICApOiBVaW50OEFycmF5O1xuICBmcm9tSGV4KHN0cjogc3RyaW5nKTogVWludDhBcnJheTtcbn1cblxudHlwZSBCYXNlNjRBbHBoYWJldCA9ICdiYXNlNjQnIHwgJ2Jhc2U2NHVybCc7XG50eXBlIExhc3RDaHVua0hhbmRsaW5nID0gJ2xvb3NlJyB8ICdzdHJpY3QnIHwgJ3N0b3AtYmVmb3JlLXBhcnRpYWwnO1xuXG5pbnRlcmZhY2UgVG9CYXNlNjRPcHRpb25zIHtcbiAgYWxwaGFiZXQ/OiBCYXNlNjRBbHBoYWJldDtcbiAgb21pdFBhZGRpbmc/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRnJvbUJhc2U2NE9wdGlvbnMge1xuICBhbHBoYWJldD86IEJhc2U2NEFscGhhYmV0O1xuICBsYXN0Q2h1bmtIYW5kbGluZz86IExhc3RDaHVua0hhbmRsaW5nO1xufVxuXG5pbnRlcmZhY2UgU2V0RnJvbVJlc3VsdCB7XG4gIHJlYWQ6IG51bWJlcjtcbiAgd3JpdHRlbjogbnVtYmVyO1xufVxuXG4vLyBTdGFuZGFyZCBiYXNlNjQgYWxwaGFiZXRcbmNvbnN0IEJBU0U2NF9DSEFSUyA9XG4gICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblxuLy8gUmV2ZXJzZSBsb29rdXAgdGFibGU6IGNoYXIgY29kZSAtPiBpbmRleCAoZm9yIHN0YW5kYXJkIGJhc2U2NCBhbHBoYWJldClcbmNvbnN0IEJBU0U2NF9MT09LVVAgPSBuZXcgVWludDhBcnJheSgxMjgpLmZpbGwoMjU1KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgQkFTRTY0X0NIQVJTLmxlbmd0aDsgaSsrKSB7XG4gIEJBU0U2NF9MT09LVVBbQkFTRTY0X0NIQVJTLmNoYXJDb2RlQXQoaSldID0gaTtcbn1cblxuLy8gQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHBlciBzcGVjOiBUQUIsIExGLCBGRiwgQ1IsIFNQQUNFXG5mdW5jdGlvbiBpc0FzY2lpV2hpdGVzcGFjZShjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb2RlID09PSAweDA5IHx8XG4gICAgY29kZSA9PT0gMHgwYSB8fFxuICAgIGNvZGUgPT09IDB4MGMgfHxcbiAgICBjb2RlID09PSAweDBkIHx8XG4gICAgY29kZSA9PT0gMHgyMFxuICApO1xufVxuXG5mdW5jdGlvbiBza2lwQXNjaWlXaGl0ZXNwYWNlKHN0cjogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgd2hpbGUgKGluZGV4IDwgc3RyLmxlbmd0aCAmJiBpc0FzY2lpV2hpdGVzcGFjZShzdHIuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgaW5kZXgrKztcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NENodW5rKFxuICBjaHVuazogc3RyaW5nLFxuICB0aHJvd09uRXh0cmFCaXRzPzogYm9vbGVhblxuKTogbnVtYmVyW10ge1xuICBjb25zdCBjaHVua0xlbmd0aCA9IGNodW5rLmxlbmd0aDtcbiAgbGV0IHBhZGRlZCA9IGNodW5rO1xuICBpZiAoY2h1bmtMZW5ndGggPT09IDIpIHtcbiAgICBwYWRkZWQgPSBjaHVuayArICdBQSc7XG4gIH0gZWxzZSBpZiAoY2h1bmtMZW5ndGggPT09IDMpIHtcbiAgICBwYWRkZWQgPSBjaHVuayArICdBJztcbiAgfVxuXG4gIC8vIERlY29kZSA0IGJhc2U2NCBjaGFycyB0byAzIGJ5dGVzXG4gIGNvbnN0IGIwID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgwKV07XG4gIGNvbnN0IGIxID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgxKV07XG4gIGNvbnN0IGIyID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgyKV07XG4gIGNvbnN0IGIzID0gQkFTRTY0X0xPT0tVUFtwYWRkZWQuY2hhckNvZGVBdCgzKV07XG5cbiAgY29uc3QgYnl0ZTAgPSAoYjAgPDwgMikgfCAoYjEgPj4gNCk7XG4gIGNvbnN0IGJ5dGUxID0gKChiMSAmIDB4MGYpIDw8IDQpIHwgKGIyID4+IDIpO1xuICBjb25zdCBieXRlMiA9ICgoYjIgJiAweDAzKSA8PCA2KSB8IGIzO1xuXG4gIGlmIChjaHVua0xlbmd0aCA9PT0gMikge1xuICAgIGlmICh0aHJvd09uRXh0cmFCaXRzICYmIGJ5dGUxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0V4dHJhIGJpdHMgaW4gYmFzZTY0IGNodW5rJyk7XG4gICAgfVxuICAgIHJldHVybiBbYnl0ZTBdO1xuICB9XG4gIGlmIChjaHVua0xlbmd0aCA9PT0gMykge1xuICAgIGlmICh0aHJvd09uRXh0cmFCaXRzICYmIGJ5dGUyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0V4dHJhIGJpdHMgaW4gYmFzZTY0IGNodW5rJyk7XG4gICAgfVxuICAgIHJldHVybiBbYnl0ZTAsIGJ5dGUxXTtcbiAgfVxuICByZXR1cm4gW2J5dGUwLCBieXRlMSwgYnl0ZTJdO1xufVxuXG5pbnRlcmZhY2UgRnJvbUJhc2U2NFJlc3VsdCB7XG4gIHJlYWQ6IG51bWJlcjtcbiAgYnl0ZXM6IG51bWJlcltdO1xuICBlcnJvcjogU3ludGF4RXJyb3IgfCBudWxsO1xufVxuXG5mdW5jdGlvbiBmcm9tQmFzZTY0KFxuICBzdHI6IHN0cmluZyxcbiAgYWxwaGFiZXQ6IEJhc2U2NEFscGhhYmV0LFxuICBsYXN0Q2h1bmtIYW5kbGluZzogTGFzdENodW5rSGFuZGxpbmcsXG4gIG1heExlbmd0aD86IG51bWJlclxuKTogRnJvbUJhc2U2NFJlc3VsdCB7XG4gIGlmIChtYXhMZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIG1heExlbmd0aCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICB9XG4gIGlmIChtYXhMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyByZWFkOiAwLCBieXRlczogW10sIGVycm9yOiBudWxsIH07XG4gIH1cblxuICBsZXQgcmVhZCA9IDA7XG4gIGNvbnN0IGJ5dGVzOiBudW1iZXJbXSA9IFtdO1xuICBsZXQgY2h1bmsgPSAnJztcbiAgbGV0IGNodW5rTGVuZ3RoID0gMDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGluZGV4ID0gc2tpcEFzY2lpV2hpdGVzcGFjZShzdHIsIGluZGV4KTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBpZiAoY2h1bmtMZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChsYXN0Q2h1bmtIYW5kbGluZyA9PT0gJ3N0b3AtYmVmb3JlLXBhcnRpYWwnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVhZCwgYnl0ZXMsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RDaHVua0hhbmRsaW5nID09PSAnbG9vc2UnKSB7XG4gICAgICAgICAgaWYgKGNodW5rTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZWFkLFxuICAgICAgICAgICAgICBieXRlcyxcbiAgICAgICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBiYXNlNjQ6IGxvbmUgY2hhcmFjdGVyIGluIGZpbmFsIGNodW5rJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnl0ZXMucHVzaCguLi5kZWNvZGVCYXNlNjRDaHVuayhjaHVuaywgZmFsc2UpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdHJpY3RcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVhZCxcbiAgICAgICAgICAgIGJ5dGVzLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgICAgJ0ludmFsaWQgYmFzZTY0OiBpbmNvbXBsZXRlIGNodW5rIGluIHN0cmljdCBtb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyByZWFkOiBsZW5ndGgsIGJ5dGVzLCBlcnJvcjogbnVsbCB9O1xuICAgIH1cblxuICAgIGxldCBjaGFyID0gc3RyW2luZGV4XTtcbiAgICBpbmRleCsrO1xuXG4gICAgaWYgKGNoYXIgPT09ICc9Jykge1xuICAgICAgaWYgKGNodW5rTGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlYWQsXG4gICAgICAgICAgYnl0ZXMsXG4gICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBiYXNlNjQ6IHBhZGRpbmcgaW4gdW5leHBlY3RlZCBwbGFjZScpLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpbmRleCA9IHNraXBBc2NpaVdoaXRlc3BhY2Uoc3RyLCBpbmRleCk7XG5cbiAgICAgIGlmIChjaHVua0xlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgICAgIGlmIChsYXN0Q2h1bmtIYW5kbGluZyA9PT0gJ3N0b3AtYmVmb3JlLXBhcnRpYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4geyByZWFkLCBieXRlcywgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlYWQsXG4gICAgICAgICAgICBieXRlcyxcbiAgICAgICAgICAgIGVycm9yOiBuZXcgU3ludGF4RXJyb3IoXG4gICAgICAgICAgICAgICdJbnZhbGlkIGJhc2U2NDogbWlzc2luZyBzZWNvbmQgcGFkZGluZyBjaGFyYWN0ZXInXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY2hhciA9IHN0cltpbmRleF07XG4gICAgICAgIGlmIChjaGFyID09PSAnPScpIHtcbiAgICAgICAgICBpbmRleCA9IHNraXBBc2NpaVdoaXRlc3BhY2Uoc3RyLCBpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlYWQsXG4gICAgICAgICAgYnl0ZXMsXG4gICAgICAgICAgZXJyb3I6IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkIGJhc2U2NDogdW5leHBlY3RlZCBjaGFyYWN0ZXJzIGFmdGVyIHBhZGRpbmcnXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGhyb3dPbkV4dHJhQml0cyA9IGxhc3RDaHVua0hhbmRsaW5nID09PSAnc3RyaWN0JztcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ5dGVzLnB1c2goLi4uZGVjb2RlQmFzZTY0Q2h1bmsoY2h1bmssIHRocm93T25FeHRyYUJpdHMpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVhZCwgYnl0ZXMsIGVycm9yOiBlIGFzIFN5bnRheEVycm9yIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyByZWFkOiBsZW5ndGgsIGJ5dGVzLCBlcnJvcjogbnVsbCB9O1xuICAgIH1cblxuICAgIGlmIChhbHBoYWJldCA9PT0gJ2Jhc2U2NHVybCcpIHtcbiAgICAgIGlmIChjaGFyID09PSAnKycgfHwgY2hhciA9PT0gJy8nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVhZCxcbiAgICAgICAgICBieXRlcyxcbiAgICAgICAgICBlcnJvcjogbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgYmFzZTY0dXJsOiB1bmV4cGVjdGVkIGNoYXJhY3RlciAnJHtjaGFyfSdgXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFyID09PSAnLScpIHtcbiAgICAgICAgY2hhciA9ICcrJztcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ18nKSB7XG4gICAgICAgIGNoYXIgPSAnLyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2hhcmFjdGVyIGlzIGluIHRoZSBzdGFuZGFyZCBiYXNlNjQgYWxwaGFiZXRcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChjb2RlID49IDEyOCB8fCBCQVNFNjRfTE9PS1VQW2NvZGVdID09PSAyNTUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlYWQsXG4gICAgICAgIGJ5dGVzLFxuICAgICAgICBlcnJvcjogbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGJhc2U2NDogdW5leHBlY3RlZCBjaGFyYWN0ZXIgJyR7c3RyW2luZGV4IC0gMV19J2BcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYWRkaW5nIHRoaXMgY2hhcmFjdGVyIHdvdWxkIGV4Y2VlZCBtYXhMZW5ndGhcbiAgICBjb25zdCByZW1haW5pbmcgPSBtYXhMZW5ndGggLSBieXRlcy5sZW5ndGg7XG4gICAgaWYgKFxuICAgICAgKHJlbWFpbmluZyA9PT0gMSAmJiBjaHVua0xlbmd0aCA9PT0gMikgfHxcbiAgICAgIChyZW1haW5pbmcgPT09IDIgJiYgY2h1bmtMZW5ndGggPT09IDMpXG4gICAgKSB7XG4gICAgICByZXR1cm4geyByZWFkLCBieXRlcywgZXJyb3I6IG51bGwgfTtcbiAgICB9XG5cbiAgICBjaHVuayArPSBjaGFyO1xuICAgIGNodW5rTGVuZ3RoID0gY2h1bmsubGVuZ3RoO1xuXG4gICAgaWYgKGNodW5rTGVuZ3RoID09PSA0KSB7XG4gICAgICBieXRlcy5wdXNoKC4uLmRlY29kZUJhc2U2NENodW5rKGNodW5rKSk7XG4gICAgICBjaHVuayA9ICcnO1xuICAgICAgY2h1bmtMZW5ndGggPSAwO1xuICAgICAgcmVhZCA9IGluZGV4O1xuXG4gICAgICBpZiAoYnl0ZXMubGVuZ3RoID09PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVhZCwgYnl0ZXMsIGVycm9yOiBudWxsIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBGcm9tSGV4UmVzdWx0IHtcbiAgcmVhZDogbnVtYmVyO1xuICBieXRlczogbnVtYmVyW107XG4gIGVycm9yOiBTeW50YXhFcnJvciB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZyb21IZXgoc3RyOiBzdHJpbmcsIG1heExlbmd0aD86IG51bWJlcik6IEZyb21IZXhSZXN1bHQge1xuICBpZiAobWF4TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBtYXhMZW5ndGggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gIGNvbnN0IGJ5dGVzOiBudW1iZXJbXSA9IFtdO1xuICBsZXQgcmVhZCA9IDA7XG5cbiAgaWYgKGxlbmd0aCAlIDIgIT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZDogMCxcbiAgICAgIGJ5dGVzOiBbXSxcbiAgICAgIGVycm9yOiBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgaGV4OiBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgZXZlbicpLFxuICAgIH07XG4gIH1cblxuICB3aGlsZSAocmVhZCA8IGxlbmd0aCAmJiBieXRlcy5sZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICBjb25zdCBoZXhpdHMgPSBzdHIuc3Vic3RyaW5nKHJlYWQsIHJlYWQgKyAyKTtcbiAgICBpZiAoIS9eWzAtOWEtZkEtRl17Mn0kLy50ZXN0KGhleGl0cykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlYWQsXG4gICAgICAgIGJ5dGVzLFxuICAgICAgICBlcnJvcjogbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGhleDogdW5leHBlY3RlZCBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gJHtyZWFkfWBcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJlYWQgKz0gMjtcbiAgICBieXRlcy5wdXNoKE51bWJlci5wYXJzZUludChoZXhpdHMsIDE2KSk7XG4gIH1cblxuICByZXR1cm4geyByZWFkLCBieXRlcywgZXJyb3I6IG51bGwgfTtcbn1cblxuZnVuY3Rpb24gdG9CYXNlNjQodWludDg6IFVpbnQ4QXJyYXksIG9wdGlvbnM/OiBUb0Jhc2U2NE9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBhbHBoYWJldDogQmFzZTY0QWxwaGFiZXQgPSBvcHRpb25zPy5hbHBoYWJldCA/PyAnYmFzZTY0JztcbiAgaWYgKGFscGhhYmV0ICE9PSAnYmFzZTY0JyAmJiBhbHBoYWJldCAhPT0gJ2Jhc2U2NHVybCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYEludmFsaWQgYWxwaGFiZXQ6IGV4cGVjdGVkIFwiYmFzZTY0XCIgb3IgXCJiYXNlNjR1cmxcIiwgZ290IFwiJHthbHBoYWJldH1cImBcbiAgICApO1xuICB9XG4gIGNvbnN0IG9taXRQYWRkaW5nID0gQm9vbGVhbihvcHRpb25zPy5vbWl0UGFkZGluZyk7XG5cbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBjb25zdCBsZW4gPSB1aW50OC5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMykge1xuICAgIGNvbnN0IGIwID0gdWludDhbaV07XG4gICAgY29uc3QgYjEgPSBpICsgMSA8IGxlbiA/IHVpbnQ4W2kgKyAxXSA6IDA7XG4gICAgY29uc3QgYjIgPSBpICsgMiA8IGxlbiA/IHVpbnQ4W2kgKyAyXSA6IDA7XG5cbiAgICByZXN1bHQgKz0gQkFTRTY0X0NIQVJTWyhiMCA+PiAyKSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBCQVNFNjRfQ0hBUlNbKChiMCAmIDB4MDMpIDw8IDQpIHwgKChiMSA+PiA0KSAmIDB4MGYpXTtcblxuICAgIGlmIChpICsgMSA8IGxlbikge1xuICAgICAgcmVzdWx0ICs9IEJBU0U2NF9DSEFSU1soKGIxICYgMHgwZikgPDwgMikgfCAoKGIyID4+IDYpICYgMHgwMyldO1xuICAgIH0gZWxzZSBpZiAoIW9taXRQYWRkaW5nKSB7XG4gICAgICByZXN1bHQgKz0gJz0nO1xuICAgIH1cblxuICAgIGlmIChpICsgMiA8IGxlbikge1xuICAgICAgcmVzdWx0ICs9IEJBU0U2NF9DSEFSU1tiMiAmIDB4M2ZdO1xuICAgIH0gZWxzZSBpZiAoIW9taXRQYWRkaW5nKSB7XG4gICAgICByZXN1bHQgKz0gJz0nO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbHBoYWJldCA9PT0gJ2Jhc2U2NHVybCcpIHtcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB0b0hleCh1aW50ODogVWludDhBcnJheSk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSAnJztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1aW50OC5sZW5ndGg7IGkrKykge1xuICAgIG91dCArPSB1aW50OFtpXS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBVaW50OEFycmF5IGJhc2U2NC9oZXggcG9seWZpbGwgb250byB0aGUgZ2l2ZW5cbiAqIFVpbnQ4QXJyYXkgY29uc3RydWN0b3IgYW5kIHByb3RvdHlwZS4gVGhpcyBpcyBkZXNpZ25lZCB0byBiZVxuICogdXNlZCBpbnNpZGUgdGhlIHdvcmtmbG93IFZNIGNvbnRleHQsIG9wZXJhdGluZyBvbiB0aGUgVk0nc1xuICogb3duIFVpbnQ4QXJyYXkgcmF0aGVyIHRoYW4gdGhlIGhvc3Qncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxVaW50OEFycmF5QmFzZTY0KFxuICBVaW50OEFycmF5Q3RvcjogdHlwZW9mIFVpbnQ4QXJyYXlcbik6IHZvaWQge1xuICBjb25zdCBwcm90byA9IFVpbnQ4QXJyYXlDdG9yLnByb3RvdHlwZSBhcyBVaW50OEFycmF5V2l0aEJhc2U2NDtcbiAgY29uc3QgY3RvciA9IFVpbnQ4QXJyYXlDdG9yIGFzIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvcldpdGhCYXNlNjQ7XG5cbiAgLy8gVWludDhBcnJheS5wcm90b3R5cGUudG9CYXNlNjQoW29wdGlvbnNdKVxuICBpZiAoIXByb3RvLnRvQmFzZTY0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCAndG9CYXNlNjQnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdG9CYXNlNjRNZXRob2QoXG4gICAgICAgIHRoaXM6IFVpbnQ4QXJyYXksXG4gICAgICAgIG9wdGlvbnM/OiBUb0Jhc2U2NE9wdGlvbnNcbiAgICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVaW50OEFycmF5Q3RvcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG5vdCBhIFVpbnQ4QXJyYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9CYXNlNjQodGhpcywgb3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVpbnQ4QXJyYXkucHJvdG90eXBlLnRvSGV4KClcbiAgaWYgKCFwcm90by50b0hleCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3RvSGV4Jywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvSGV4TWV0aG9kKHRoaXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVWludDhBcnJheUN0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBub3QgYSBVaW50OEFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvSGV4KHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBVaW50OEFycmF5LnByb3RvdHlwZS5zZXRGcm9tQmFzZTY0KHN0cmluZ1ssIG9wdGlvbnNdKVxuICBpZiAoIXByb3RvLnNldEZyb21CYXNlNjQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICdzZXRGcm9tQmFzZTY0Jywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEZyb21CYXNlNjRNZXRob2QoXG4gICAgICAgIHRoaXM6IFVpbnQ4QXJyYXksXG4gICAgICAgIHN0cjogc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogRnJvbUJhc2U2NE9wdGlvbnNcbiAgICAgICk6IFNldEZyb21SZXN1bHQge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVWludDhBcnJheUN0b3IpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBub3QgYSBVaW50OEFycmF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYWJldDogQmFzZTY0QWxwaGFiZXQgPSBvcHRpb25zPy5hbHBoYWJldCA/PyAnYmFzZTY0JztcbiAgICAgICAgaWYgKGFscGhhYmV0ICE9PSAnYmFzZTY0JyAmJiBhbHBoYWJldCAhPT0gJ2Jhc2U2NHVybCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgYWxwaGFiZXQ6IGV4cGVjdGVkIFwiYmFzZTY0XCIgb3IgXCJiYXNlNjR1cmxcIiwgZ290IFwiJHthbHBoYWJldH1cImBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDaHVua0hhbmRsaW5nOiBMYXN0Q2h1bmtIYW5kbGluZyA9XG4gICAgICAgICAgb3B0aW9ucz8ubGFzdENodW5rSGFuZGxpbmcgPz8gJ2xvb3NlJztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxhc3RDaHVua0hhbmRsaW5nICE9PSAnbG9vc2UnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdHJpY3QnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdG9wLWJlZm9yZS1wYXJ0aWFsJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgbGFzdENodW5rSGFuZGxpbmc6IGV4cGVjdGVkIFwibG9vc2VcIiwgXCJzdHJpY3RcIiwgb3IgXCJzdG9wLWJlZm9yZS1wYXJ0aWFsXCIsIGdvdCBcIiR7bGFzdENodW5rSGFuZGxpbmd9XCJgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZyb21CYXNlNjQoXG4gICAgICAgICAgc3RyLFxuICAgICAgICAgIGFscGhhYmV0LFxuICAgICAgICAgIGxhc3RDaHVua0hhbmRsaW5nLFxuICAgICAgICAgIHRoaXMubGVuZ3RoXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gcmVzdWx0LmJ5dGVzO1xuICAgICAgICBjb25zdCB3cml0dGVuID0gYnl0ZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd3JpdHRlbjsgaSsrKSB7XG4gICAgICAgICAgdGhpc1tpXSA9IGJ5dGVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlYWQ6IHJlc3VsdC5yZWFkLCB3cml0dGVuIH07XG4gICAgICB9LFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldEZyb21IZXgoc3RyaW5nKVxuICBpZiAoIXByb3RvLnNldEZyb21IZXgpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICdzZXRGcm9tSGV4Jywge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEZyb21IZXhNZXRob2QoXG4gICAgICAgIHRoaXM6IFVpbnQ4QXJyYXksXG4gICAgICAgIHN0cjogc3RyaW5nXG4gICAgICApOiBTZXRGcm9tUmVzdWx0IHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlDdG9yKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RoaXMgaXMgbm90IGEgVWludDhBcnJheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tSGV4KHN0ciwgdGhpcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBieXRlcyA9IHJlc3VsdC5ieXRlcztcbiAgICAgICAgY29uc3Qgd3JpdHRlbiA9IGJ5dGVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdyaXR0ZW47IGkrKykge1xuICAgICAgICAgIHRoaXNbaV0gPSBieXRlc1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyByZWFkOiByZXN1bHQucmVhZCwgd3JpdHRlbiB9O1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBVaW50OEFycmF5LmZyb21CYXNlNjQoc3RyaW5nWywgb3B0aW9uc10pXG4gIGlmICghY3Rvci5mcm9tQmFzZTY0KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4QXJyYXlDdG9yLCAnZnJvbUJhc2U2NCcsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tQmFzZTY0U3RhdGljKFxuICAgICAgICBzdHI6IHN0cmluZyxcbiAgICAgICAgb3B0aW9ucz86IEZyb21CYXNlNjRPcHRpb25zXG4gICAgICApOiBVaW50OEFycmF5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbHBoYWJldDogQmFzZTY0QWxwaGFiZXQgPSBvcHRpb25zPy5hbHBoYWJldCA/PyAnYmFzZTY0JztcbiAgICAgICAgaWYgKGFscGhhYmV0ICE9PSAnYmFzZTY0JyAmJiBhbHBoYWJldCAhPT0gJ2Jhc2U2NHVybCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgYWxwaGFiZXQ6IGV4cGVjdGVkIFwiYmFzZTY0XCIgb3IgXCJiYXNlNjR1cmxcIiwgZ290IFwiJHthbHBoYWJldH1cImBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RDaHVua0hhbmRsaW5nOiBMYXN0Q2h1bmtIYW5kbGluZyA9XG4gICAgICAgICAgb3B0aW9ucz8ubGFzdENodW5rSGFuZGxpbmcgPz8gJ2xvb3NlJztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGxhc3RDaHVua0hhbmRsaW5nICE9PSAnbG9vc2UnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdHJpY3QnICYmXG4gICAgICAgICAgbGFzdENodW5rSGFuZGxpbmcgIT09ICdzdG9wLWJlZm9yZS1wYXJ0aWFsJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgbGFzdENodW5rSGFuZGxpbmc6IGV4cGVjdGVkIFwibG9vc2VcIiwgXCJzdHJpY3RcIiwgb3IgXCJzdG9wLWJlZm9yZS1wYXJ0aWFsXCIsIGdvdCBcIiR7bGFzdENodW5rSGFuZGxpbmd9XCJgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZyb21CYXNlNjQoc3RyLCBhbHBoYWJldCwgbGFzdENodW5rSGFuZGxpbmcpO1xuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5Q3RvcihyZXN1bHQuYnl0ZXMpO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBVaW50OEFycmF5LmZyb21IZXgoc3RyaW5nKVxuICBpZiAoIWN0b3IuZnJvbUhleCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OEFycmF5Q3RvciwgJ2Zyb21IZXgnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbUhleFN0YXRpYyhzdHI6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgICAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBhIHN0cmluZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZnJvbUhleChzdHIpO1xuICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5Q3RvcihyZXN1bHQuYnl0ZXMpO1xuICAgICAgfSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import type { WorkflowOrchestratorContext } from '../private.js';
1
+ import { type WorkflowOrchestratorContext } from '../private.js';
2
2
  import { ABORT_HOOK_TOKEN, ABORT_STREAM_NAME } from '../symbols.js';
3
3
  /**
4
4
  * A lightweight AbortSignal implementation for the workflow VM context.
@@ -23,7 +23,7 @@ export declare class WorkflowAbortSignal {
23
23
  /**
24
24
  * @internal Sets aborted state and fires listeners.
25
25
  * Called by abort() on first-run, or by the events consumer on replay.
26
- * Idempotent second call is a no-op.
26
+ * Idempotent: second call is a no-op.
27
27
  */
28
28
  _setAborted(reason?: unknown): void;
29
29
  addEventListener(type: string, listener: () => void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"abort-controller.d.ts","sourceRoot":"","sources":["../../src/workflow/abort-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGpE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;;IAC9B,OAAO,UAAS;IAChB,MAAM,EAAE,OAAO,CAAa;IAE5B,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAKpC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,CAE1D;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,EAKhE;gBAEW,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKjD;;;;OAIG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAanC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAa1D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK7D,cAAc,IAAI,IAAI;CAQvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,2BAA2B;;yBAEvD,mBAAmB;uBAgGrB,OAAO,GAAG,IAAI;sCA/FC,MAAM;qCACP,MAAM;;EA+GtC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,mBAAmB,CAAC;IACjD,GAAG,EAAE,CACH,OAAO,EAAE,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;KAC7B,CAAC,KACC,mBAAmB,CAAC;IACzB,OAAO,EAAE,MAAM,KAAK,CAAC;CACtB,CAwEA"}
1
+ {"version":3,"file":"abort-controller.d.ts","sourceRoot":"","sources":["../../src/workflow/abort-controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGpE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;;IAC9B,OAAO,UAAS;IAChB,MAAM,EAAE,OAAO,CAAa;IAE5B,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAKpC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,CAE1D;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,EAKhE;gBAEW,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKjD;;;;OAIG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAanC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAa1D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAK7D,cAAc,IAAI,IAAI;CAQvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,2BAA2B;;yBAEvD,mBAAmB;uBAqLrB,OAAO,GAAG,IAAI;sCApLC,MAAM;qCACP,MAAM;;EAoMtC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,mBAAmB,CAAC;IACjD,GAAG,EAAE,CACH,OAAO,EAAE,QAAQ,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gBAAgB,CAAC,EAAE,QAAQ,CAAC;KAC7B,CAAC,KACC,mBAAmB,CAAC;IACzB,OAAO,EAAE,MAAM,KAAK,CAAC;CACtB,CAwEA"}