@workflow/core 5.0.0-beta.42 → 5.0.0-beta.44

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 (220) hide show
  1. package/dist/capabilities.d.ts +4 -4
  2. package/dist/capabilities.js +5 -5
  3. package/dist/capture-stack.d.ts +1 -1
  4. package/dist/capture-stack.js +2 -2
  5. package/dist/class-serialization.d.ts +8 -8
  6. package/dist/class-serialization.js +9 -9
  7. package/dist/classify-error.js +5 -5
  8. package/dist/context-violation-error.d.ts +5 -5
  9. package/dist/context-violation-error.d.ts.map +1 -1
  10. package/dist/context-violation-error.js +5 -5
  11. package/dist/create-hook.d.ts +10 -6
  12. package/dist/create-hook.d.ts.map +1 -1
  13. package/dist/create-hook.js +1 -1
  14. package/dist/define-hook.js +2 -2
  15. package/dist/describe-error.d.ts +7 -7
  16. package/dist/describe-error.js +8 -8
  17. package/dist/encryption.d.ts +5 -5
  18. package/dist/encryption.js +7 -7
  19. package/dist/events-consumer.d.ts +19 -7
  20. package/dist/events-consumer.d.ts.map +1 -1
  21. package/dist/events-consumer.js +33 -12
  22. package/dist/flushable-stream.d.ts +4 -4
  23. package/dist/flushable-stream.js +12 -12
  24. package/dist/global.d.ts +1 -1
  25. package/dist/global.js +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.js +2 -2
  28. package/dist/log-format.d.ts +2 -2
  29. package/dist/log-format.js +5 -5
  30. package/dist/logger.js +4 -4
  31. package/dist/private.d.ts +39 -64
  32. package/dist/private.d.ts.map +1 -1
  33. package/dist/private.js +294 -48
  34. package/dist/replay-payload-cache.d.ts +1 -1
  35. package/dist/replay-payload-cache.js +4 -4
  36. package/dist/runtime/compute-instance.d.ts +4 -3
  37. package/dist/runtime/compute-instance.d.ts.map +1 -1
  38. package/dist/runtime/compute-instance.js +5 -4
  39. package/dist/runtime/constants.d.ts +46 -19
  40. package/dist/runtime/constants.d.ts.map +1 -1
  41. package/dist/runtime/constants.js +76 -38
  42. package/dist/runtime/count-step-started-events.d.ts +7 -7
  43. package/dist/runtime/count-step-started-events.js +4 -4
  44. package/dist/runtime/deployment-guard.d.ts +7 -7
  45. package/dist/runtime/deployment-guard.js +8 -8
  46. package/dist/runtime/get-port-lazy.d.ts +2 -2
  47. package/dist/runtime/get-port-lazy.d.ts.map +1 -1
  48. package/dist/runtime/get-port-lazy.js +37 -30
  49. package/dist/runtime/get-world-lazy.d.ts +2 -2
  50. package/dist/runtime/get-world-lazy.js +3 -3
  51. package/dist/runtime/helpers.d.ts +18 -18
  52. package/dist/runtime/helpers.js +27 -27
  53. package/dist/runtime/quickjs-entrypoint.d.ts +23 -10
  54. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
  55. package/dist/runtime/quickjs-entrypoint.js +200 -81
  56. package/dist/runtime/quickjs-runtime.d.ts +31 -15
  57. package/dist/runtime/quickjs-runtime.d.ts.map +1 -1
  58. package/dist/runtime/quickjs-runtime.js +126 -77
  59. package/dist/runtime/quickjs-serde.d.ts +10 -10
  60. package/dist/runtime/quickjs-serde.js +20 -20
  61. package/dist/runtime/replay-budget.d.ts +4 -4
  62. package/dist/runtime/replay-budget.js +5 -5
  63. package/dist/runtime/replay-recovery-reporter.d.ts +1 -1
  64. package/dist/runtime/replay-recovery-reporter.js +2 -2
  65. package/dist/runtime/resume-hook.d.ts +2 -2
  66. package/dist/runtime/resume-hook.js +27 -27
  67. package/dist/runtime/resume-latency.d.ts +25 -25
  68. package/dist/runtime/resume-latency.d.ts.map +1 -1
  69. package/dist/runtime/resume-latency.js +4 -4
  70. package/dist/runtime/run-id-time.d.ts +2 -2
  71. package/dist/runtime/run-id-time.js +5 -5
  72. package/dist/runtime/run.d.ts +21 -4
  73. package/dist/runtime/run.d.ts.map +1 -1
  74. package/dist/runtime/run.js +154 -35
  75. package/dist/runtime/runs.d.ts +4 -4
  76. package/dist/runtime/runs.js +2 -2
  77. package/dist/runtime/start.d.ts +3 -3
  78. package/dist/runtime/start.d.ts.map +1 -1
  79. package/dist/runtime/start.js +27 -23
  80. package/dist/runtime/step-executor.d.ts +59 -11
  81. package/dist/runtime/step-executor.d.ts.map +1 -1
  82. package/dist/runtime/step-executor.js +116 -42
  83. package/dist/runtime/step-latency.d.ts +20 -14
  84. package/dist/runtime/step-latency.d.ts.map +1 -1
  85. package/dist/runtime/step-latency.js +13 -11
  86. package/dist/runtime/step-ownership.d.ts +6 -6
  87. package/dist/runtime/step-ownership.js +8 -8
  88. package/dist/runtime/step-single-flight.d.ts +1 -1
  89. package/dist/runtime/step-single-flight.d.ts.map +1 -1
  90. package/dist/runtime/step-single-flight.js +17 -11
  91. package/dist/runtime/suspension-handler.d.ts +99 -7
  92. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  93. package/dist/runtime/suspension-handler.js +678 -57
  94. package/dist/runtime/unserializable-step.d.ts +34 -0
  95. package/dist/runtime/unserializable-step.d.ts.map +1 -0
  96. package/dist/runtime/unserializable-step.js +52 -0
  97. package/dist/runtime/vm-mode.d.ts +1 -1
  98. package/dist/runtime/vm-mode.js +2 -2
  99. package/dist/runtime/wait-continuation.d.ts +31 -9
  100. package/dist/runtime/wait-continuation.d.ts.map +1 -1
  101. package/dist/runtime/wait-continuation.js +44 -13
  102. package/dist/runtime/wait-until.d.ts +1 -1
  103. package/dist/runtime/wait-until.js +2 -2
  104. package/dist/runtime/world-compatibility.d.ts +20 -9
  105. package/dist/runtime/world-compatibility.d.ts.map +1 -1
  106. package/dist/runtime/world-compatibility.js +24 -13
  107. package/dist/runtime/world-init.d.ts +5 -5
  108. package/dist/runtime/world-init.js +6 -6
  109. package/dist/runtime/world.d.ts.map +1 -1
  110. package/dist/runtime/world.js +13 -3
  111. package/dist/runtime.d.ts.map +1 -1
  112. package/dist/runtime.js +417 -213
  113. package/dist/sealed-box.d.ts +7 -7
  114. package/dist/sealed-box.js +15 -15
  115. package/dist/serialization/client.js +2 -2
  116. package/dist/serialization/codec-devalue-vm.d.ts +1 -1
  117. package/dist/serialization/codec-devalue-vm.js +4 -4
  118. package/dist/serialization/codec-devalue.d.ts +1 -1
  119. package/dist/serialization/codec-devalue.js +2 -2
  120. package/dist/serialization/codec.d.ts +4 -4
  121. package/dist/serialization/codec.js +2 -2
  122. package/dist/serialization/compression.d.ts +12 -11
  123. package/dist/serialization/compression.d.ts.map +1 -1
  124. package/dist/serialization/compression.js +16 -15
  125. package/dist/serialization/encryption.d.ts +7 -7
  126. package/dist/serialization/encryption.d.ts.map +1 -1
  127. package/dist/serialization/encryption.js +8 -8
  128. package/dist/serialization/errors.js +2 -2
  129. package/dist/serialization/format.d.ts +6 -6
  130. package/dist/serialization/format.js +7 -7
  131. package/dist/serialization/hardened.d.ts +18 -18
  132. package/dist/serialization/hardened.d.ts.map +1 -1
  133. package/dist/serialization/hardened.js +41 -32
  134. package/dist/serialization/index.d.ts +1 -1
  135. package/dist/serialization/index.js +2 -2
  136. package/dist/serialization/reducers/class-vm.d.ts +1 -1
  137. package/dist/serialization/reducers/class-vm.js +2 -2
  138. package/dist/serialization/reducers/class.js +2 -2
  139. package/dist/serialization/reducers/common-vm.js +12 -12
  140. package/dist/serialization/reducers/common.js +12 -12
  141. package/dist/serialization/reducers/step-function-vm.d.ts +1 -1
  142. package/dist/serialization/reducers/step-function-vm.js +2 -2
  143. package/dist/serialization/reducers/step-function.js +2 -2
  144. package/dist/serialization/step.js +2 -2
  145. package/dist/serialization/types.d.ts +5 -5
  146. package/dist/serialization/types.js +2 -2
  147. package/dist/serialization/workflow-vm.d.ts +1 -1
  148. package/dist/serialization/workflow-vm.d.ts.map +1 -1
  149. package/dist/serialization/workflow-vm.js +13 -10
  150. package/dist/serialization-format.d.ts +11 -11
  151. package/dist/serialization-format.d.ts.map +1 -1
  152. package/dist/serialization-format.js +29 -23
  153. package/dist/serialization.d.ts +20 -12
  154. package/dist/serialization.d.ts.map +1 -1
  155. package/dist/serialization.js +141 -99
  156. package/dist/set-attributes.js +2 -2
  157. package/dist/source-map.d.ts +1 -1
  158. package/dist/source-map.d.ts.map +1 -1
  159. package/dist/source-map.js +18 -12
  160. package/dist/step/context-storage.d.ts +5 -5
  161. package/dist/step/context-storage.js +1 -1
  162. package/dist/step/writable-stream.d.ts +3 -3
  163. package/dist/step/writable-stream.js +7 -7
  164. package/dist/step.js +12 -12
  165. package/dist/symbols.d.ts +2 -2
  166. package/dist/symbols.js +3 -3
  167. package/dist/telemetry/semantic-conventions.d.ts +21 -13
  168. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  169. package/dist/telemetry/semantic-conventions.js +21 -15
  170. package/dist/telemetry.d.ts +9 -3
  171. package/dist/telemetry.d.ts.map +1 -1
  172. package/dist/telemetry.js +40 -10
  173. package/dist/test-support/orchestrator-context.d.ts.map +1 -1
  174. package/dist/test-support/orchestrator-context.js +12 -2
  175. package/dist/version.d.ts +1 -1
  176. package/dist/version.js +2 -2
  177. package/dist/vm/index.js +4 -4
  178. package/dist/vm/script-cache.d.ts.map +1 -1
  179. package/dist/vm/script-cache.js +23 -17
  180. package/dist/vm/uint8array-base64.js +1 -1
  181. package/dist/workflow/abort-controller.d.ts +1 -1
  182. package/dist/workflow/abort-controller.js +12 -12
  183. package/dist/workflow/create-hook.js +3 -3
  184. package/dist/workflow/get-workflow-metadata.js +2 -2
  185. package/dist/workflow/hook.js +18 -18
  186. package/dist/workflow/set-attributes.d.ts +1 -1
  187. package/dist/workflow/set-attributes.js +2 -2
  188. package/dist/workflow/sleep.js +2 -2
  189. package/dist/workflow/world-init-stub.d.ts +1 -1
  190. package/dist/workflow/world-init-stub.js +2 -2
  191. package/dist/workflow.d.ts +2 -2
  192. package/dist/workflow.js +36 -14
  193. package/docs/api-reference/create-hook.mdx +15 -15
  194. package/docs/api-reference/create-webhook.mdx +15 -15
  195. package/docs/api-reference/define-hook.mdx +10 -10
  196. package/docs/api-reference/fatal-error.mdx +2 -2
  197. package/docs/api-reference/fetch.mdx +7 -7
  198. package/docs/api-reference/get-step-metadata.mdx +2 -2
  199. package/docs/api-reference/get-workflow-metadata.mdx +3 -3
  200. package/docs/api-reference/get-writable.mdx +7 -7
  201. package/docs/api-reference/index.mdx +1 -1
  202. package/docs/api-reference/retryable-error.mdx +1 -1
  203. package/docs/api-reference/set-attributes.mdx +2 -2
  204. package/docs/api-reference/sleep.mdx +3 -3
  205. package/docs/foundations/cancellation.mdx +31 -31
  206. package/docs/foundations/errors-and-retries.mdx +42 -11
  207. package/docs/foundations/hooks.mdx +37 -37
  208. package/docs/foundations/idempotency.mdx +9 -9
  209. package/docs/foundations/serialization.mdx +21 -22
  210. package/docs/foundations/starting-workflows.mdx +36 -37
  211. package/docs/foundations/streaming.mdx +68 -39
  212. package/docs/foundations/versioning.mdx +3 -3
  213. package/docs/foundations/workflows-and-steps.mdx +9 -9
  214. package/docs/how-it-works/cancellation.mdx +62 -62
  215. package/docs/how-it-works/code-transform.mdx +66 -54
  216. package/docs/how-it-works/encryption.mdx +25 -21
  217. package/docs/how-it-works/event-sourcing.mdx +84 -28
  218. package/docs/how-it-works/framework-integrations.mdx +12 -12
  219. package/docs/how-it-works/understanding-directives.mdx +21 -21
  220. package/package.json +7 -7
@@ -3,7 +3,7 @@
3
3
  * workflow VM (`node:vm`) sandbox realm.
4
4
  *
5
5
  * Serialization runs on the host, but the values it inspects were
6
- * constructed by workflow code so a naive dynamic operation like
6
+ * constructed by workflow code, so a naive dynamic operation like
7
7
  * `value.toISOString()`, `Array.from(map)`, or `Object.prototype.toString`
8
8
  * dispatches into the sandbox realm and executes workflow code (patched
9
9
  * prototype methods, getters, proxy traps, `Symbol.toStringTag` accessors).
@@ -15,26 +15,26 @@
15
15
  * it, and *observable* where it does not:
16
16
  *
17
17
  * - **Classification** uses engine-level brand checks (`node:util` `types`,
18
- * internal-slot probes) instead of `instanceof` / `Object.prototype.toString`
19
- * immune to `Symbol.hasInstance`, `Symbol.toStringTag`, and reassigned
20
- * globals.
18
+ * internal-slot probes) instead of `instanceof` / `Object.prototype.toString`,
19
+ * which makes it immune to `Symbol.hasInstance`, `Symbol.toStringTag`, and
20
+ * reassigned globals.
21
21
  * - **Extraction** goes through intrinsics captured at module load (host
22
22
  * boot, before any workflow code runs). Internal slots are realm-agnostic,
23
23
  * so host intrinsics read VM-realm objects without touching the sandbox's
24
24
  * (patchable) prototypes.
25
25
  * - **Property access** reads through descriptors, so plain data never
26
26
  * invokes anything. Where workflow code *must* run because the data itself
27
- * lives behind it getters, proxies, custom `[WORKFLOW_SERIALIZE]`
28
- * methods, `toString()` on toStringTag-branded objects (e.g. Temporal
29
- * polyfills) the execution is preserved for compatibility and recorded
27
+ * lives behind it (getters, proxies, custom `[WORKFLOW_SERIALIZE]`
28
+ * methods, `toString()` on toStringTag-branded objects such as Temporal
29
+ * polyfills), the execution is preserved for compatibility and recorded
30
30
  * in the active {@link GuestCodeStats} sink, so callers (e.g. a retained-VM
31
31
  * gate) can react.
32
32
  *
33
33
  * **Recording is not prevention.** For the recorded cases the determinism
34
34
  * hazard is still live: a getter that calls `Math.random()` advances the
35
35
  * run's seeded PRNG during serialization, and because serialization happens
36
- * exactly once and is never replayed, every subsequent draw including the
37
- * correlation ids derived from that stream shifts relative to replay. The
36
+ * exactly once and is never replayed, every subsequent draw (including the
37
+ * correlation ids derived from that stream) shifts relative to replay. The
38
38
  * report is the only trace of that; acting on it (warning, demoting a
39
39
  * retained VM to replay) is left to the caller.
40
40
  *
@@ -43,8 +43,14 @@
43
43
  * `stringify` is fully synchronous, so this is safe without async context.
44
44
  */
45
45
  import { types } from 'node:util';
46
+ import { globalSingleton } from '@workflow/utils';
46
47
  import { defaultStringifyOperations } from 'devalue';
48
+ // per-copy-ok: both are set and cleared by `withGuestCodeStats` around a single
49
+ // synchronous call, so the sink is only ever read by the same copy that armed
50
+ // it. A shared slot would let two copies recording concurrently clobber each
51
+ // other's sink.
47
52
  let activeStats = null;
53
+ // per-copy-ok: same scope as `activeStats` above, armed and cleared together.
48
54
  let reportedProxies = null;
49
55
  /**
50
56
  * Runs `fn` (synchronously) with `stats` as the active guest-code sink.
@@ -67,26 +73,29 @@ export function withGuestCodeStats(stats, fn) {
67
73
  /**
68
74
  * Closure-variable functions that arrived through `useStep` when a step
69
75
  * proxy was built. The step-function reducer must invoke `__closureVarsFn`,
70
- * and the compiler-generated function is a pure sequence of lexical reads
71
- * but the *property* is reachable from workflow code, which can replace it
76
+ * and the compiler-generated function is a pure sequence of lexical reads.
77
+ * But the *property* is reachable from workflow code, which can replace it
72
78
  * with an arbitrary function. The reducer checks membership here instead of
73
79
  * assuming provenance, and reports anything it does not recognize.
74
80
  *
75
81
  * Membership proves the function was passed to `useStep`, not that the
76
- * compiler generated it workflow code can call `useStep` directly and
82
+ * compiler generated it: workflow code can call `useStep` directly and
77
83
  * launder a side-effectful function past the report. That costs a missing
78
84
  * report entry, never incorrect output; closing it means branding at the
79
85
  * compiler, which does not belong here.
80
86
  */
81
- const useStepClosureFns = new WeakSet();
87
+ // On `globalThis` (see `globalSingleton`): functions cross module copies freely,
88
+ // so a closure marked by one copy would not be recognized by another, costing a
89
+ // report entry for no reason.
90
+ const useStepClosures = globalSingleton('@workflow/core//useStepClosures.fns', 1, () => ({ fns: new WeakSet() }));
82
91
  /** Marks a function as having been passed to `useStep`. */
83
92
  export function markUseStepClosureFn(fn) {
84
- useStepClosureFns.add(fn);
93
+ useStepClosures.fns.add(fn);
85
94
  return fn;
86
95
  }
87
96
  /** Whether `fn` was marked by {@link markUseStepClosureFn}. */
88
97
  export function isUseStepClosureFn(fn) {
89
- return typeof fn === 'function' && useStepClosureFns.has(fn);
98
+ return typeof fn === 'function' && useStepClosures.fns.has(fn);
90
99
  }
91
100
  export function recordGuestCode(kind, detail) {
92
101
  if (!activeStats)
@@ -107,7 +116,7 @@ function recordProxy(value) {
107
116
  }
108
117
  // ---- Captured intrinsics ----------------------------------------------------
109
118
  //
110
- // Captured at module load host boot, before any workflow bundle can run
119
+ // Captured at module load (host boot, before any workflow bundle can run)
111
120
  // and invoked with explicit receivers, so no lookup ever resolves through a
112
121
  // sandbox-reachable prototype. Every member below exists on every supported
113
122
  // engine (Node 18+), so a missing one is a bug in this table: fail at import
@@ -151,7 +160,7 @@ const dataViewByteOffset = protoGetter(DataView.prototype, 'byteOffset');
151
160
  const dataViewByteLength = protoGetter(DataView.prototype, 'byteLength');
152
161
  const sharedArrayBufferByteLength = protoGetter(SharedArrayBuffer.prototype, 'byteLength');
153
162
  // Host (WHATWG) classes. Injected into the sandbox by reference, so
154
- // instances from any realm carry these prototypes and the shared
163
+ // instances from any realm carry these prototypes, and the shared
155
164
  // prototypes are reachable from workflow code, which makes the boot-time
156
165
  // capture (rather than a live lookup) load-bearing.
157
166
  const headersIterator = uncurryThis(Headers.prototype[Symbol.iterator]);
@@ -172,7 +181,7 @@ const functionToString = uncurryThis(Function.prototype.toString);
172
181
  * functions and callable Proxies also present as native code but run
173
182
  * workflow code, so both are excluded first.
174
183
  * - Host builtins implemented in JavaScript are ordinary functions, but they
175
- * belong to the host realm detected by comparing the function's
184
+ * belong to the host realm, detected by comparing the function's
176
185
  * prototype against the host `Function.prototype`. Workflow code that
177
186
  * reaches a host function can `setPrototypeOf` its own getter to
178
187
  * impersonate this; that costs a missing report entry, never incorrect
@@ -184,7 +193,7 @@ const functionToString = uncurryThis(Function.prototype.toString);
184
193
  function isEngineAccessor(getter) {
185
194
  if (isProxy(getter))
186
195
  return false;
187
- // A bound function stringifies as native code but runs its target — the
196
+ // A bound function stringifies as native code but runs its target. The
188
197
  // one passive distinguisher V8 exposes is the `name` own property
189
198
  // (`"bound fn"`). Workflow code can redefine the name to hide it; that
190
199
  // costs a missing report entry, like the other impersonation caveats.
@@ -212,7 +221,7 @@ export function readProperty(value, key) {
212
221
  let current = value;
213
222
  while (current !== null) {
214
223
  if (isProxy(current)) {
215
- // a proxy in the prototype chain its traps answer the lookup
224
+ // a proxy in the prototype chain: its traps answer the lookup
216
225
  recordProxy(current);
217
226
  return value[key];
218
227
  }
@@ -261,12 +270,12 @@ export function hasProperty(value, key) {
261
270
  * `value instanceof C` semantics for a known `C.prototype`, without
262
271
  * consulting `Symbol.hasInstance` (which workflow code can define). Used
263
272
  * for host classes that are injected into the sandbox (Headers, URL,
264
- * URLSearchParams, DOMException), where the instances from any realm the
265
- * host handed the class to carry the host prototype in their chain.
273
+ * URLSearchParams, DOMException), where the instances (from any realm the
274
+ * host handed the class to) carry the host prototype in their chain.
266
275
  *
267
276
  * Proxies are walked rather than rejected: `Reflect.getPrototypeOf` fires
268
277
  * the proxy's `getPrototypeOf` trap, matching `instanceof` semantics, and
269
- * real values depend on that Next.js hands the runtime a proxied
278
+ * real values depend on that: Next.js hands the runtime a proxied
270
279
  * `NextRequest`, and answering "not a Request" for it would silently break
271
280
  * webhooks. The traps are guest-observable, so the proxy is recorded.
272
281
  */
@@ -289,7 +298,7 @@ export function isInstanceOfPrototype(value, prototype) {
289
298
  }
290
299
  // ---- Intrinsic-backed extraction helpers (used by the reducers) -------------
291
300
  //
292
- // Intrinsics read internal slots, which a Proxy does not have invoking one
301
+ // Intrinsics read internal slots, which a Proxy does not have: invoking one
293
302
  // with a proxy receiver throws, where the pre-existing dynamic read forwarded
294
303
  // through the trap. For the (rare) proxy case, fall back to the dynamic read
295
304
  // so behavior is unchanged, and record that the traps ran.
@@ -301,7 +310,7 @@ export function urlHref(value) {
301
310
  }
302
311
  return urlHrefGetter(value);
303
312
  }
304
- /** `URLSearchParams.prototype.toString` returns `''` iff empty. */
313
+ /** `URLSearchParams.prototype.toString`: returns `''` iff empty. */
305
314
  export function urlSearchParamsToString(value) {
306
315
  if (isProxy(value)) {
307
316
  recordProxy(value);
@@ -311,7 +320,7 @@ export function urlSearchParamsToString(value) {
311
320
  }
312
321
  /**
313
322
  * Iterates a Headers instance through the captured host iterator, so the
314
- * iterator object and its `next` are host-realm.
323
+ * iterator object, and its `next`, are host-realm.
315
324
  */
316
325
  export function headersToEntries(value) {
317
326
  if (isProxy(value)) {
@@ -323,7 +332,7 @@ export function headersToEntries(value) {
323
332
  /**
324
333
  * Iterates a genuine Map's entries entirely through host intrinsics: the
325
334
  * iterator object is created by the host `Map.prototype.entries`, so its
326
- * realm and therefore its `next` is the host's, not the sandbox's.
335
+ * realm, and therefore its `next`, is the host's, not the sandbox's.
327
336
  */
328
337
  export function mapToEntries(value) {
329
338
  return [...mapEntries(value)];
@@ -333,7 +342,7 @@ export function setToValues(value) {
333
342
  return [...setValues(value)];
334
343
  }
335
344
  /**
336
- * The bytes of an `ArrayBufferView`, read via internal-slot getters
345
+ * The bytes of an `ArrayBufferView`, read via internal-slot getters, so
337
346
  * own-property shadowing and prototype patches cannot change which bytes
338
347
  * are serialized.
339
348
  */
@@ -355,7 +364,7 @@ export function viewInfo(value) {
355
364
  //
356
365
  // The workflow reducers claim most special types before devalue's built-in
357
366
  // handling runs, so these operations mainly govern plain objects, arrays,
358
- // boxed primitives, thenable probes and classification (`tagOf`), which
367
+ // boxed primitives, thenable probes, and classification (`tagOf`), which
359
368
  // runs for every object the reducers did not claim.
360
369
  const KNOWN_VIEW_TAGS = new Set([
361
370
  'Int8Array',
@@ -438,7 +447,7 @@ function brandOf(value) {
438
447
  }
439
448
  /**
440
449
  * Reads `Symbol.toStringTag` the way `Object.prototype.toString` would,
441
- * but through descriptors a data-property tag (the common case, e.g.
450
+ * but through descriptors: a data-property tag (the common case, e.g.
442
451
  * Temporal polyfills) costs no workflow-code execution; an accessor tag is
443
452
  * invoked (compat) and recorded.
444
453
  */
@@ -449,7 +458,7 @@ function readToStringTag(value) {
449
458
  export const hardenedStringifyOperations = {
450
459
  tagOf: (value) => {
451
460
  if (isProxy(value)) {
452
- // A proxy's classification is answered by its traps that is the
461
+ // A proxy's classification is answered by its traps, which is the
453
462
  // only access path there is. Record it and preserve today's
454
463
  // behavior for everything downstream.
455
464
  recordProxy(value);
@@ -520,4 +529,4 @@ export const hardenedStringifyOperations = {
520
529
  },
521
530
  get: (value, key) => readProperty(value, key),
522
531
  };
523
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGVuZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9oYXJkZW5lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBc0NyRCxJQUFJLFdBQVcsR0FBMEIsSUFBSSxDQUFDO0FBQzlDLElBQUksZUFBZSxHQUEyQixJQUFJLENBQUM7QUFFbkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsS0FBaUMsRUFDakMsRUFBVztJQUVYLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDeEMsV0FBVyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDNUIsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DLElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDZCxDQUFDO1lBQVMsQ0FBQztRQUNULFdBQVcsR0FBRyxhQUFhLENBQUM7UUFDNUIsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7QUFFaEQsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSxvQkFBb0IsQ0FBbUIsRUFBSztJQUMxRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sVUFB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RyxJQUFJO1lBQ1AsaUVBQWlFO1lBQ2pFLDBDQUEwQztZQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0QsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3RELENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUMxQyxDQUFDLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ3pCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxPQUFPLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsR0FBRyxFQUFFLENBQUMsS0FBYSxFQUFFLEdBQW9CLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO0NBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhhcmRlbmVkIGludHJvc3BlY3Rpb24gZm9yIHNlcmlhbGl6aW5nIHZhbHVlcyB0aGF0IG1heSBvcmlnaW5hdGUgaW5zaWRlIGFcbiAqIHdvcmtmbG93IFZNIChgbm9kZTp2bWApIHNhbmRib3ggcmVhbG0uXG4gKlxuICogU2VyaWFsaXphdGlvbiBydW5zIG9uIHRoZSBob3N0LCBidXQgdGhlIHZhbHVlcyBpdCBpbnNwZWN0cyB3ZXJlXG4gKiBjb25zdHJ1Y3RlZCBieSB3b3JrZmxvdyBjb2RlIOKAlCBzbyBhIG5haXZlIGR5bmFtaWMgb3BlcmF0aW9uIGxpa2VcbiAqIGB2YWx1ZS50b0lTT1N0cmluZygpYCwgYEFycmF5LmZyb20obWFwKWAsIG9yIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxuICogZGlzcGF0Y2hlcyBpbnRvIHRoZSBzYW5kYm94IHJlYWxtIGFuZCBleGVjdXRlcyB3b3JrZmxvdyBjb2RlIChwYXRjaGVkXG4gKiBwcm90b3R5cGUgbWV0aG9kcywgZ2V0dGVycywgcHJveHkgdHJhcHMsIGBTeW1ib2wudG9TdHJpbmdUYWdgIGFjY2Vzc29ycykuXG4gKiBUaGF0IGlzIGEgZGV0ZXJtaW5pc20gaGF6YXJkOiBzZXJpYWxpemF0aW9uIGhhcHBlbnMgZXhhY3RseSBvbmNlIHBlclxuICogcGF5bG9hZCAobmV2ZXIgYWdhaW4gb24gcmVwbGF5KSwgc28gYW55IHdvcmtmbG93LXZpc2libGUgc2lkZSBlZmZlY3QgaXRcbiAqIHRyaWdnZXJzIGV4aXN0cyBvbmx5IG9uIHRoZSBsaXZlIGV4ZWN1dGlvbiBwYXRoIGFuZCBkaXZlcmdlcyBmcm9tIHJlcGxheS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBtYWtlcyBzZXJpYWxpemF0aW9uIHNpZGUtZWZmZWN0IGZyZWUgd2hlcmV2ZXIgdGhlIGRhdGEgYWxsb3dzXG4gKiBpdCwgYW5kICpvYnNlcnZhYmxlKiB3aGVyZSBpdCBkb2VzIG5vdDpcbiAqXG4gKiAtICoqQ2xhc3NpZmljYXRpb24qKiB1c2VzIGVuZ2luZS1sZXZlbCBicmFuZCBjaGVja3MgKGBub2RlOnV0aWxgIGB0eXBlc2AsXG4gKiAgIGludGVybmFsLXNsb3QgcHJvYmVzKSBpbnN0ZWFkIG9mIGBpbnN0YW5jZW9mYCAvIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxuICogICDigJQgaW1tdW5lIHRvIGBTeW1ib2wuaGFzSW5zdGFuY2VgLCBgU3ltYm9sLnRvU3RyaW5nVGFnYCwgYW5kIHJlYXNzaWduZWRcbiAqICAgZ2xvYmFscy5cbiAqIC0gKipFeHRyYWN0aW9uKiogZ29lcyB0aHJvdWdoIGludHJpbnNpY3MgY2FwdHVyZWQgYXQgbW9kdWxlIGxvYWQgKGhvc3RcbiAqICAgYm9vdCwgYmVmb3JlIGFueSB3b3JrZmxvdyBjb2RlIHJ1bnMpLiBJbnRlcm5hbCBzbG90cyBhcmUgcmVhbG0tYWdub3N0aWMsXG4gKiAgIHNvIGhvc3QgaW50cmluc2ljcyByZWFkIFZNLXJlYWxtIG9iamVjdHMgd2l0aG91dCB0b3VjaGluZyB0aGUgc2FuZGJveCdzXG4gKiAgIChwYXRjaGFibGUpIHByb3RvdHlwZXMuXG4gKiAtICoqUHJvcGVydHkgYWNjZXNzKiogcmVhZHMgdGhyb3VnaCBkZXNjcmlwdG9ycywgc28gcGxhaW4gZGF0YSBuZXZlclxuICogICBpbnZva2VzIGFueXRoaW5nLiBXaGVyZSB3b3JrZmxvdyBjb2RlICptdXN0KiBydW4gYmVjYXVzZSB0aGUgZGF0YSBpdHNlbGZcbiAqICAgbGl2ZXMgYmVoaW5kIGl0IOKAlCBnZXR0ZXJzLCBwcm94aWVzLCBjdXN0b20gYFtXT1JLRkxPV19TRVJJQUxJWkVdYFxuICogICBtZXRob2RzLCBgdG9TdHJpbmcoKWAgb24gdG9TdHJpbmdUYWctYnJhbmRlZCBvYmplY3RzIChlLmcuIFRlbXBvcmFsXG4gKiAgIHBvbHlmaWxscykg4oCUIHRoZSBleGVjdXRpb24gaXMgcHJlc2VydmVkIGZvciBjb21wYXRpYmlsaXR5IGFuZCByZWNvcmRlZFxuICogICBpbiB0aGUgYWN0aXZlIHtAbGluayBHdWVzdENvZGVTdGF0c30gc2luaywgc28gY2FsbGVycyAoZS5nLiBhIHJldGFpbmVkLVZNXG4gKiAgIGdhdGUpIGNhbiByZWFjdC5cbiAqXG4gKiAqKlJlY29yZGluZyBpcyBub3QgcHJldmVudGlvbi4qKiBGb3IgdGhlIHJlY29yZGVkIGNhc2VzIHRoZSBkZXRlcm1pbmlzbVxuICogaGF6YXJkIGlzIHN0aWxsIGxpdmU6IGEgZ2V0dGVyIHRoYXQgY2FsbHMgYE1hdGgucmFuZG9tKClgIGFkdmFuY2VzIHRoZVxuICogcnVuJ3Mgc2VlZGVkIFBSTkcgZHVyaW5nIHNlcmlhbGl6YXRpb24sIGFuZCBiZWNhdXNlIHNlcmlhbGl6YXRpb24gaGFwcGVuc1xuICogZXhhY3RseSBvbmNlIGFuZCBpcyBuZXZlciByZXBsYXllZCwgZXZlcnkgc3Vic2VxdWVudCBkcmF3IOKAlCBpbmNsdWRpbmcgdGhlXG4gKiBjb3JyZWxhdGlvbiBpZHMgZGVyaXZlZCBmcm9tIHRoYXQgc3RyZWFtIOKAlCBzaGlmdHMgcmVsYXRpdmUgdG8gcmVwbGF5LiBUaGVcbiAqIHJlcG9ydCBpcyB0aGUgb25seSB0cmFjZSBvZiB0aGF0OyBhY3Rpbmcgb24gaXQgKHdhcm5pbmcsIGRlbW90aW5nIGFcbiAqIHJldGFpbmVkIFZNIHRvIHJlcGxheSkgaXMgbGVmdCB0byB0aGUgY2FsbGVyLlxuICpcbiAqIFRoZSByZWNvcmRlciBpcyBhbWJpZW50IG1vZHVsZSBzdGF0ZSwgc2V0IGZvciB0aGUgZHVyYXRpb24gb2YgYVxuICogc3luY2hyb25vdXMgYHN0cmluZ2lmeWAgY2FsbCB2aWEge0BsaW5rIHdpdGhHdWVzdENvZGVTdGF0c30uIGRldmFsdWUnc1xuICogYHN0cmluZ2lmeWAgaXMgZnVsbHkgc3luY2hyb25vdXMsIHNvIHRoaXMgaXMgc2FmZSB3aXRob3V0IGFzeW5jIGNvbnRleHQuXG4gKi9cblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdpZnlPcGVyYXRpb25zIH0gZnJvbSAnZGV2YWx1ZSc7XG5pbXBvcnQgeyBkZWZhdWx0U3RyaW5naWZ5T3BlcmF0aW9ucyB9IGZyb20gJ2RldmFsdWUnO1xuXG4vLyAtLS0tIEd1ZXN0IGNvZGUgb2JzZXJ2YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEEgc2luZ2xlIGluc3RhbmNlIG9mIHdvcmtmbG93IChndWVzdCkgY29kZSBleGVjdXRpbmcgZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3Vlc3RDb2RlRXhlY3V0aW9uIHtcbiAgLyoqXG4gICAqIFdoYXQgZm9yY2VkIHRoZSBleGVjdXRpb246XG4gICAqIC0gYGdldHRlcmA6IGFuIGFjY2Vzc29yIHByb3BlcnR5IHdhcyBpbnZva2VkIHRvIHJlYWQgZGF0YVxuICAgKiAtIGBwcm94eWA6IGEgcHJveHkgd2FzIGludHJvc3BlY3RlZCwgZmlyaW5nIGl0cyB0cmFwcy4gTm90ZSB0aGlzIGFsc29cbiAgICogICBpbXBsaWVzIGEgKipzaGFwZSBjaGFuZ2UqKjogYnJhbmQgY2hlY2tzIGFuc3dlciBcIm5vdCB0aGF0IHR5cGVcIiBmb3IgYVxuICAgKiAgIHByb3h5LCBzbyBhIHByb3hpZWQgYE1hcGAgc2VyaWFsaXplcyBhcyBhIHBsYWluIG9iamVjdCByYXRoZXIgdGhhbiBhcyBhXG4gICAqICAgYE1hcGAsIGFuZCB0aGlzIHJlcG9ydCBpcyB0aGUgb25seSBldmlkZW5jZSBvZiBpdC4gKFN1Y2ggdmFsdWVzIHdlcmVcbiAgICogICBuZXZlciBzZXJpYWxpemFibGUgYmVmb3JlIOKAlCB0aGUgaW50ZXJuYWwtc2xvdCByZWFkcyBpbiB0aGUgcHJldmlvdXNcbiAgICogICBpbXBsZW1lbnRhdGlvbiB0aHJldyBvbiB0aGVtIOKAlCBzbyB0aGUgc2hhcGUgY2hhbmdlIHJlcGxhY2VzIGEgY3Jhc2gsXG4gICAqICAgYnV0IGl0IGlzIHNpbGVudC4pXG4gICAqIC0gYG1ldGhvZGA6IGEgd29ya2Zsb3ctZGVmaW5lZCBmdW5jdGlvbiB3YXMgaW52b2tlZCAoZS5nLiBhIGN1c3RvbVxuICAgKiAgIGBbV09SS0ZMT1dfU0VSSUFMSVpFXWAgc2VyaWFsaXplciwgYHRvU3RyaW5nKClgIG9uIGFcbiAgICogICBgU3ltYm9sLnRvU3RyaW5nVGFnYC1icmFuZGVkIG9iamVjdCwgYSBkdWNrLXR5cGVkIGBnZXRUaW1lKClgLCBvciBhXG4gICAqICAgYF9fY2xvc3VyZVZhcnNGbmAgdGhpcyBwYWNrYWdlIGRpZCBub3QgZ2VuZXJhdGUpXG4gICAqL1xuICBraW5kOiAnZ2V0dGVyJyB8ICdwcm94eScgfCAnbWV0aG9kJztcbiAgLyoqIEJlc3QtZWZmb3J0IGNvbnRleHQ6IHRoZSBwcm9wZXJ0eSBrZXksIG1ldGhvZCBuYW1lLCBvciB0YWcgaW52b2x2ZWQuICovXG4gIGRldGFpbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNdXRhYmxlIHNpbmsgcmVjb3JkaW5nIGV2ZXJ5IHdvcmtmbG93LWNvZGUgZXhlY3V0aW9uIHNlcmlhbGl6YXRpb24gY291bGRcbiAqIG5vdCBhdm9pZC4gUGFzcyB2aWEgYENvZGVjT3B0aW9ucy5ndWVzdENvZGVTdGF0c2A7IGNvbnN1bWVycyB0aGF0IHJldGFpblxuICogdGhlIFZNIGFjcm9zcyBzdGVwcyBjYW4gdXNlIGEgbm9uLWVtcHR5IGBleGVjdXRpb25zYCBhcnJheSBhcyBhIHNpZ25hbFxuICogdGhhdCB0aGUgVk0gc3RhdGUgbWF5IGhhdmUgYmVlbiBwZXJ0dXJiZWQgYnkgc2VyaWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHdWVzdENvZGVTdGF0cyB7XG4gIGV4ZWN1dGlvbnM6IEd1ZXN0Q29kZUV4ZWN1dGlvbltdO1xufVxuXG5sZXQgYWN0aXZlU3RhdHM6IEd1ZXN0Q29kZVN0YXRzIHwgbnVsbCA9IG51bGw7XG5sZXQgcmVwb3J0ZWRQcm94aWVzOiBXZWFrU2V0PG9iamVjdD4gfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBSdW5zIGBmbmAgKHN5bmNocm9ub3VzbHkpIHdpdGggYHN0YXRzYCBhcyB0aGUgYWN0aXZlIGd1ZXN0LWNvZGUgc2luay5cbiAqIE5lc3RlZCBjYWxscyBzdGFjayBjb3JyZWN0bHk7IGEgYG51bGxgL2B1bmRlZmluZWRgIHNpbmsgZGlzYWJsZXNcbiAqIHJlY29yZGluZyB3aXRob3V0IGRpc2FibGluZyBoYXJkZW5pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoR3Vlc3RDb2RlU3RhdHM8VD4oXG4gIHN0YXRzOiBHdWVzdENvZGVTdGF0cyB8IHVuZGVmaW5lZCxcbiAgZm46ICgpID0+IFRcbik6IFQge1xuICBjb25zdCBwcmV2aW91c1N0YXRzID0gYWN0aXZlU3RhdHM7XG4gIGNvbnN0IHByZXZpb3VzUHJveGllcyA9IHJlcG9ydGVkUHJveGllcztcbiAgYWN0aXZlU3RhdHMgPSBzdGF0cyA/PyBudWxsO1xuICByZXBvcnRlZFByb3hpZXMgPSBzdGF0cyA/IG5ldyBXZWFrU2V0KCkgOiBudWxsO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGFjdGl2ZVN0YXRzID0gcHJldmlvdXNTdGF0cztcbiAgICByZXBvcnRlZFByb3hpZXMgPSBwcmV2aW91c1Byb3hpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBDbG9zdXJlLXZhcmlhYmxlIGZ1bmN0aW9ucyB0aGF0IGFycml2ZWQgdGhyb3VnaCBgdXNlU3RlcGAgd2hlbiBhIHN0ZXBcbiAqIHByb3h5IHdhcyBidWlsdC4gVGhlIHN0ZXAtZnVuY3Rpb24gcmVkdWNlciBtdXN0IGludm9rZSBgX19jbG9zdXJlVmFyc0ZuYCxcbiAqIGFuZCB0aGUgY29tcGlsZXItZ2VuZXJhdGVkIGZ1bmN0aW9uIGlzIGEgcHVyZSBzZXF1ZW5jZSBvZiBsZXhpY2FsIHJlYWRzIOKAlFxuICogYnV0IHRoZSAqcHJvcGVydHkqIGlzIHJlYWNoYWJsZSBmcm9tIHdvcmtmbG93IGNvZGUsIHdoaWNoIGNhbiByZXBsYWNlIGl0XG4gKiB3aXRoIGFuIGFyYml0cmFyeSBmdW5jdGlvbi4gVGhlIHJlZHVjZXIgY2hlY2tzIG1lbWJlcnNoaXAgaGVyZSBpbnN0ZWFkIG9mXG4gKiBhc3N1bWluZyBwcm92ZW5hbmNlLCBhbmQgcmVwb3J0cyBhbnl0aGluZyBpdCBkb2VzIG5vdCByZWNvZ25pemUuXG4gKlxuICogTWVtYmVyc2hpcCBwcm92ZXMgdGhlIGZ1bmN0aW9uIHdhcyBwYXNzZWQgdG8gYHVzZVN0ZXBgLCBub3QgdGhhdCB0aGVcbiAqIGNvbXBpbGVyIGdlbmVyYXRlZCBpdCDigJQgd29ya2Zsb3cgY29kZSBjYW4gY2FsbCBgdXNlU3RlcGAgZGlyZWN0bHkgYW5kXG4gKiBsYXVuZGVyIGEgc2lkZS1lZmZlY3RmdWwgZnVuY3Rpb24gcGFzdCB0aGUgcmVwb3J0LiBUaGF0IGNvc3RzIGEgbWlzc2luZ1xuICogcmVwb3J0IGVudHJ5LCBuZXZlciBpbmNvcnJlY3Qgb3V0cHV0OyBjbG9zaW5nIGl0IG1lYW5zIGJyYW5kaW5nIGF0IHRoZVxuICogY29tcGlsZXIsIHdoaWNoIGRvZXMgbm90IGJlbG9uZyBoZXJlLlxuICovXG5jb25zdCB1c2VTdGVwQ2xvc3VyZUZucyA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuLyoqIE1hcmtzIGEgZnVuY3Rpb24gYXMgaGF2aW5nIGJlZW4gcGFzc2VkIHRvIGB1c2VTdGVwYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrVXNlU3RlcENsb3N1cmVGbjxUIGV4dGVuZHMgb2JqZWN0PihmbjogVCk6IFQge1xuICB1c2VTdGVwQ2xvc3VyZUZucy5hZGQoZm4pO1xuICByZXR1cm4gZm47XG59XG5cbi8qKiBXaGV0aGVyIGBmbmAgd2FzIG1hcmtlZCBieSB7QGxpbmsgbWFya1VzZVN0ZXBDbG9zdXJlRm59LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXNlU3RlcENsb3N1cmVGbihmbjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHVzZVN0ZXBDbG9zdXJlRm5zLmhhcyhmbiBhcyBvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkR3Vlc3RDb2RlKFxuICBraW5kOiBHdWVzdENvZGVFeGVjdXRpb25bJ2tpbmQnXSxcbiAgZGV0YWlsPzogc3RyaW5nXG4pOiB2b2lkIHtcbiAgaWYgKCFhY3RpdmVTdGF0cykgcmV0dXJuO1xuICBjb25zdCBleGVjdXRpb246IEd1ZXN0Q29kZUV4ZWN1dGlvbiA9IHsga2luZCB9O1xuICBpZiAoZGV0YWlsICE9PSB1bmRlZmluZWQpIGV4ZWN1dGlvbi5kZXRhaWwgPSBkZXRhaWw7XG4gIGFjdGl2ZVN0YXRzLmV4ZWN1dGlvbnMucHVzaChleGVjdXRpb24pO1xufVxuXG4vKiogUmVjb3JkcyBhIHByb3h5IG9uY2UgcGVyIHNlcmlhbGl6YXRpb24gcGFzcyAocHJveGllcyBmaXJlIG1hbnkgdHJhcHMpLiAqL1xuZnVuY3Rpb24gcmVjb3JkUHJveHkodmFsdWU6IG9iamVjdCk6IHZvaWQge1xuICBpZiAoIWFjdGl2ZVN0YXRzIHx8ICFyZXBvcnRlZFByb3hpZXMpIHJldHVybjtcbiAgaWYgKHJlcG9ydGVkUHJveGllcy5oYXModmFsdWUpKSByZXR1cm47XG4gIHJlcG9ydGVkUHJveGllcy5hZGQodmFsdWUpO1xuICByZWNvcmRHdWVzdENvZGUoJ3Byb3h5Jyk7XG59XG5cbi8vIC0tLS0gQ2FwdHVyZWQgaW50cmluc2ljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gQ2FwdHVyZWQgYXQgbW9kdWxlIGxvYWQg4oCUIGhvc3QgYm9vdCwgYmVmb3JlIGFueSB3b3JrZmxvdyBidW5kbGUgY2FuIHJ1biDigJRcbi8vIGFuZCBpbnZva2VkIHdpdGggZXhwbGljaXQgcmVjZWl2ZXJzLCBzbyBubyBsb29rdXAgZXZlciByZXNvbHZlcyB0aHJvdWdoIGFcbi8vIHNhbmRib3gtcmVhY2hhYmxlIHByb3RvdHlwZS4gRXZlcnkgbWVtYmVyIGJlbG93IGV4aXN0cyBvbiBldmVyeSBzdXBwb3J0ZWRcbi8vIGVuZ2luZSAoTm9kZSAxOCspLCBzbyBhIG1pc3Npbmcgb25lIGlzIGEgYnVnIGluIHRoaXMgdGFibGU6IGZhaWwgYXQgaW1wb3J0XG4vLyByYXRoZXIgdGhhbiBzZXJpYWxpemUgdGhyb3VnaCBhIGxpdmUgKHBhdGNoYWJsZSkgbG9va3VwIGxhdGVyLlxuXG5jb25zdCB1bmN1cnJ5VGhpcyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmJpbmQoRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwpIGFzIDxcbiAgVCxcbiAgQSBleHRlbmRzIHVua25vd25bXSxcbiAgUixcbj4oXG4gIGZuOiAodGhpczogVCwgLi4uYXJnczogQSkgPT4gUlxuKSA9PiAodGhpc0FyZzogVCwgLi4uYXJnczogQSkgPT4gUjtcblxuZnVuY3Rpb24gcHJvdG9HZXR0ZXI8VD4oXG4gIHByb3RvdHlwZTogb2JqZWN0LFxuICBrZXk6IFByb3BlcnR5S2V5XG4pOiAodmFsdWU6IHVua25vd24pID0+IFQge1xuICBjb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwga2V5KT8uZ2V0O1xuICBpZiAoIWdldHRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBpbnRyaW5zaWMgZ2V0dGVyOiAke1N0cmluZyhrZXkpfWApO1xuICB9XG4gIHJldHVybiB1bmN1cnJ5VGhpcyhnZXR0ZXIpIGFzICh2YWx1ZTogdW5rbm93bikgPT4gVDtcbn1cblxuLy8gRUNNQVNjcmlwdCBpbnRyaW5zaWNzLiBBbGwgcmVhZCBpbnRlcm5hbCBzbG90cywgc28gdGhleSB3b3JrIG9uIHZhbHVlc1xuLy8gZnJvbSBhbnkgcmVhbG0gYW5kIGFyZSB1bmFmZmVjdGVkIGJ5IHByb3RvdHlwZSBwYXRjaGluZyBpbiBhbnkgcmVhbG0uXG5cbi8qKiBgRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZWAsIGZvciBpbnZhbGlkLWRhdGUgY2hlY2tzLiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVHZXREYXRlID0gdW5jdXJyeVRoaXMoRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZSk7XG4vKiogYERhdGUucHJvdG90eXBlLmdldFRpbWVgLiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVHZXRUaW1lID0gdW5jdXJyeVRoaXMoRGF0ZS5wcm90b3R5cGUuZ2V0VGltZSk7XG4vKiogYERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nYC4gKi9cbmV4cG9ydCBjb25zdCBkYXRlVG9JU09TdHJpbmcgPSB1bmN1cnJ5VGhpcyhEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk7XG4vKiogYFJlZ0V4cC5wcm90b3R5cGUuc291cmNlYCBnZXR0ZXIuICovXG5leHBvcnQgY29uc3QgcmVnRXhwU291cmNlID0gcHJvdG9HZXR0ZXI8c3RyaW5nPihSZWdFeHAucHJvdG90eXBlLCAnc291cmNlJyk7XG4vKiogYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlci4gKi9cbmV4cG9ydCBjb25zdCByZWdFeHBGbGFncyA9IHByb3RvR2V0dGVyPHN0cmluZz4oUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG4vKiogYEFycmF5QnVmZmVyLnByb3RvdHlwZS5ieXRlTGVuZ3RoYCBnZXR0ZXIgKGludGVybmFsIHNsb3QgcmVhZCkuICovXG5leHBvcnQgY29uc3QgYXJyYXlCdWZmZXJCeXRlTGVuZ3RoID0gcHJvdG9HZXR0ZXI8bnVtYmVyPihcbiAgQXJyYXlCdWZmZXIucHJvdG90eXBlLFxuICAnYnl0ZUxlbmd0aCdcbik7XG5cbmNvbnN0IG1hcEVudHJpZXMgPSB1bmN1cnJ5VGhpcyhNYXAucHJvdG90eXBlLmVudHJpZXMpO1xuY29uc3Qgc2V0VmFsdWVzID0gdW5jdXJyeVRoaXMoU2V0LnByb3RvdHlwZS52YWx1ZXMpO1xuY29uc3QgbnVtYmVyVmFsdWVPZiA9IHVuY3VycnlUaGlzKE51bWJlci5wcm90b3R5cGUudmFsdWVPZik7XG5jb25zdCBzdHJpbmdWYWx1ZU9mID0gdW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKTtcbmNvbnN0IGJvb2xlYW5WYWx1ZU9mID0gdW5jdXJyeVRoaXMoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7XG5jb25zdCBiaWdJbnRWYWx1ZU9mID0gdW5jdXJyeVRoaXMoXG4gIEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiBhcyAodGhpczogdW5rbm93bikgPT4gYmlnaW50XG4pO1xuXG5jb25zdCBUeXBlZEFycmF5UHJvdG90eXBlOiBvYmplY3QgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheS5wcm90b3R5cGUpO1xuY29uc3QgdHlwZWRBcnJheVRhZyA9IHByb3RvR2V0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gIFR5cGVkQXJyYXlQcm90b3R5cGUsXG4gIFN5bWJvbC50b1N0cmluZ1RhZ1xuKTtcbmNvbnN0IHR5cGVkQXJyYXlCdWZmZXIgPSBwcm90b0dldHRlcjxBcnJheUJ1ZmZlckxpa2U+KFxuICBUeXBlZEFycmF5UHJvdG90eXBlLFxuICAnYnVmZmVyJ1xuKTtcbmNvbnN0IHR5cGVkQXJyYXlCeXRlT2Zmc2V0ID0gcHJvdG9HZXR0ZXI8bnVtYmVyPihcbiAgVHlwZWRBcnJheVByb3RvdHlwZSxcbiAgJ2J5dGVPZmZzZXQnXG4pO1xuY29uc3QgdHlwZWRBcnJheUJ5dGVMZW5ndGggPSBwcm90b0dldHRlcjxudW1iZXI+KFxuICBUeXBlZEFycmF5UHJvdG90eXBlLFxuICAnYnl0ZUxlbmd0aCdcbik7XG5jb25zdCB0eXBlZEFycmF5TGVuZ3RoID0gcHJvdG9HZXR0ZXI8bnVtYmVyPihUeXBlZEFycmF5UHJvdG90eXBlLCAnbGVuZ3RoJyk7XG5jb25zdCBkYXRhVmlld0J1ZmZlciA9IHByb3RvR2V0dGVyPEFycmF5QnVmZmVyTGlrZT4oXG4gIERhdGFWaWV3LnByb3RvdHlwZSxcbiAgJ2J1ZmZlcidcbik7XG5jb25zdCBkYXRhVmlld0J5dGVPZmZzZXQgPSBwcm90b0dldHRlcjxudW1iZXI+KFxuICBEYXRhVmlldy5wcm90b3R5cGUsXG4gICdieXRlT2Zmc2V0J1xuKTtcbmNvbnN0IGRhdGFWaWV3Qnl0ZUxlbmd0aCA9IHByb3RvR2V0dGVyPG51bWJlcj4oXG4gIERhdGFWaWV3LnByb3RvdHlwZSxcbiAgJ2J5dGVMZW5ndGgnXG4pO1xuY29uc3Qgc2hhcmVkQXJyYXlCdWZmZXJCeXRlTGVuZ3RoID0gcHJvdG9HZXR0ZXI8bnVtYmVyPihcbiAgU2hhcmVkQXJyYXlCdWZmZXIucHJvdG90eXBlLFxuICAnYnl0ZUxlbmd0aCdcbik7XG5cbi8vIEhvc3QgKFdIQVRXRykgY2xhc3Nlcy4gSW5qZWN0ZWQgaW50byB0aGUgc2FuZGJveCBieSByZWZlcmVuY2UsIHNvXG4vLyBpbnN0YW5jZXMgZnJvbSBhbnkgcmVhbG0gY2FycnkgdGhlc2UgcHJvdG90eXBlcyDigJQgYW5kIHRoZSBzaGFyZWRcbi8vIHByb3RvdHlwZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHdvcmtmbG93IGNvZGUsIHdoaWNoIG1ha2VzIHRoZSBib290LXRpbWVcbi8vIGNhcHR1cmUgKHJhdGhlciB0aGFuIGEgbGl2ZSBsb29rdXApIGxvYWQtYmVhcmluZy5cbmNvbnN0IGhlYWRlcnNJdGVyYXRvciA9IHVuY3VycnlUaGlzKEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0pO1xuY29uc3QgdXJsSHJlZkdldHRlciA9IHByb3RvR2V0dGVyPHN0cmluZz4oVVJMLnByb3RvdHlwZSwgJ2hyZWYnKTtcbmNvbnN0IHVybFNlYXJjaFBhcmFtc1RvU3RyaW5nTWV0aG9kID0gdW5jdXJyeVRoaXMoXG4gIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudG9TdHJpbmdcbik7XG5cbi8vIC0tLS0gU2FmZSBhY2Nlc3MgcHJpbWl0aXZlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IHsgaXNQcm94eSB9ID0gdHlwZXM7XG5cbmNvbnN0IGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcpO1xuXG4vKipcbiAqIFdoZXRoZXIgYW4gYWNjZXNzb3IgaXMgcHJvdmlkZWQgYnkgdGhlIGVuZ2luZSBvciB0aGUgaG9zdCwgcmF0aGVyIHRoYW5cbiAqIGRlZmluZWQgYnkgd29ya2Zsb3cgY29kZS4gU2VyaWFsaXphdGlvbiBtdXN0IHJlYWQgc29tZSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBhY2Nlc3NvcnMgYnkgY29uc3RydWN0aW9uIChWOCBkZWZpbmVzIGBzdGFja2AgYXMgYW4gb3duIGFjY2Vzc29yIG9uIGV2ZXJ5XG4gKiBFcnJvciBpbnN0YW5jZTsgTm9kZSBpbXBsZW1lbnRzIGBET01FeGNlcHRpb24ucHJvdG90eXBlLm1lc3NhZ2VgIGluXG4gKiBKYXZhU2NyaXB0KSwgYW5kIHJlcG9ydGluZyB0aG9zZSB3b3VsZCBkcm93biB0aGUgc2lnbmFsIGluIG5vaXNlLlxuICpcbiAqIC0gRW5naW5lIGFjY2Vzc29ycyBhcmUgbmF0aXZlIGNvZGUsIGRldGVjdGVkIHZpYSB0aGUgY2FwdHVyZWQgaG9zdFxuICogICBgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nYCAoY3Jvc3MtcmVhbG0sIHVuaW50ZXJjZXB0YWJsZSkuIEJvdW5kXG4gKiAgIGZ1bmN0aW9ucyBhbmQgY2FsbGFibGUgUHJveGllcyBhbHNvIHByZXNlbnQgYXMgbmF0aXZlIGNvZGUgYnV0IHJ1blxuICogICB3b3JrZmxvdyBjb2RlLCBzbyBib3RoIGFyZSBleGNsdWRlZCBmaXJzdC5cbiAqIC0gSG9zdCBidWlsdGlucyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IGFyZSBvcmRpbmFyeSBmdW5jdGlvbnMsIGJ1dCB0aGV5XG4gKiAgIGJlbG9uZyB0byB0aGUgaG9zdCByZWFsbSDigJQgZGV0ZWN0ZWQgYnkgY29tcGFyaW5nIHRoZSBmdW5jdGlvbidzXG4gKiAgIHByb3RvdHlwZSBhZ2FpbnN0IHRoZSBob3N0IGBGdW5jdGlvbi5wcm90b3R5cGVgLiBXb3JrZmxvdyBjb2RlIHRoYXRcbiAqICAgcmVhY2hlcyBhIGhvc3QgZnVuY3Rpb24gY2FuIGBzZXRQcm90b3R5cGVPZmAgaXRzIG93biBnZXR0ZXIgdG9cbiAqICAgaW1wZXJzb25hdGUgdGhpczsgdGhhdCBjb3N0cyBhIG1pc3NpbmcgcmVwb3J0IGVudHJ5LCBuZXZlciBpbmNvcnJlY3RcbiAqICAgb3V0cHV0LlxuICpcbiAqIFY4J3MgbmF0aXZlIGBzdGFja2AgZ2V0dGVyIGNhbiBpdHNlbGYgaW52b2tlIGEgd29ya2Zsb3ctZGVmaW5lZFxuICogYEVycm9yLnByZXBhcmVTdGFja1RyYWNlYDsgdGhhdCBpbmRpcmVjdGlvbiBpcyBub3QgZGV0ZWN0ZWQgaGVyZS5cbiAqL1xuZnVuY3Rpb24gaXNFbmdpbmVBY2Nlc3NvcihnZXR0ZXI6IG9iamVjdCk6IGJvb2xlYW4ge1xuICBpZiAoaXNQcm94eShnZXR0ZXIpKSByZXR1cm4gZmFsc2U7XG4gIC8vIEEgYm91bmQgZnVuY3Rpb24gc3RyaW5naWZpZXMgYXMgbmF0aXZlIGNvZGUgYnV0IHJ1bnMgaXRzIHRhcmdldCDigJQgdGhlXG4gIC8vIG9uZSBwYXNzaXZlIGRpc3Rpbmd1aXNoZXIgVjggZXhwb3NlcyBpcyB0aGUgYG5hbWVgIG93biBwcm9wZXJ0eVxuICAvLyAoYFwiYm91bmQgZm5cImApLiBXb3JrZmxvdyBjb2RlIGNhbiByZWRlZmluZSB0aGUgbmFtZSB0byBoaWRlIGl0OyB0aGF0XG4gIC8vIGNvc3RzIGEgbWlzc2luZyByZXBvcnQgZW50cnksIGxpa2UgdGhlIG90aGVyIGltcGVyc29uYXRpb24gY2F2ZWF0cy5cbiAgY29uc3QgbmFtZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2V0dGVyLCAnbmFtZScpPy52YWx1ZTtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBuYW1lLnN0YXJ0c1dpdGgoJ2JvdW5kICcpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAoXG4gICAgZnVuY3Rpb25Ub1N0cmluZyhnZXR0ZXIgYXMgKCkgPT4gdW5rbm93bikuZW5kc1dpdGgoJ3sgW25hdGl2ZSBjb2RlXSB9JykgfHxcbiAgICBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGdldHRlcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZVxuICApO1xufVxuXG4vKipcbiAqIFJlYWRzIGB2YWx1ZVtrZXldYCB3aXRoIGBbW0dldF1dYCBzZW1hbnRpY3MsIGJ1dCB0aHJvdWdoIGRlc2NyaXB0b3JzOlxuICogcGxhaW4gZGF0YSBwcm9wZXJ0aWVzIG5ldmVyIGludm9rZSBhbnl0aGluZzsgYWNjZXNzb3IgcHJvcGVydGllcyBhcmVcbiAqIGludm9rZWQgKHRoZSBkYXRhIGxpdmVzIGJlaGluZCB0aGVtKSBhbmQgcmVjb3JkZWQ7IHByb3hpZXMgZmFsbCBiYWNrIHRvXG4gKiBhIHBsYWluIHJlYWQgKHRoZWlyIHRyYXBzIGFyZSB0aGUgb25seSBhY2Nlc3MgcGF0aCkgYW5kIGFyZSByZWNvcmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQcm9wZXJ0eSh2YWx1ZTogdW5rbm93biwga2V5OiBQcm9wZXJ0eUtleSk6IHVua25vd24ge1xuICBpZiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzUHJveHkodmFsdWUpKSB7XG4gICAgcmVjb3JkUHJveHkodmFsdWUpO1xuICAgIHJldHVybiAodmFsdWUgYXMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPilba2V5XTtcbiAgfVxuXG4gIGxldCBjdXJyZW50OiBvYmplY3QgfCBudWxsID0gdmFsdWU7XG4gIHdoaWxlIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzUHJveHkoY3VycmVudCkpIHtcbiAgICAgIC8vIGEgcHJveHkgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiDigJQgaXRzIHRyYXBzIGFuc3dlciB0aGUgbG9va3VwXG4gICAgICByZWNvcmRQcm94eShjdXJyZW50KTtcbiAgICAgIHJldHVybiAodmFsdWUgYXMgUmVjb3JkPFByb3BlcnR5S2V5LCB1bmtub3duPilba2V5XTtcbiAgICB9XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3VycmVudCwga2V5KTtcbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgaWYgKCd2YWx1ZScgaW4gZGVzY3JpcHRvcikgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgICBpZiAoZGVzY3JpcHRvci5nZXQpIHtcbiAgICAgICAgaWYgKCFpc0VuZ2luZUFjY2Vzc29yKGRlc2NyaXB0b3IuZ2V0KSkge1xuICAgICAgICAgIHJlY29yZEd1ZXN0Q29kZSgnZ2V0dGVyJywgU3RyaW5nKGtleSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yLmdldC5jYWxsKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIHNldHRlci1vbmx5IHByb3BlcnR5XG4gICAgfVxuICAgIGN1cnJlbnQgPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnQpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogYGtleSBpbiB2YWx1ZWAgc2VtYW50aWNzIHdpdGhvdXQgZmlyaW5nIHByb3h5IHRyYXBzIGZvciBvcmRpbmFyeVxuICogb2JqZWN0cy4gUHJveGllcyBmYWxsIGJhY2sgdG8gdGhlIGBpbmAgb3BlcmF0b3IgYW5kIGFyZSByZWNvcmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnR5KHZhbHVlOiB1bmtub3duLCBrZXk6IFByb3BlcnR5S2V5KTogYm9vbGVhbiB7XG4gIGlmIChcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc1Byb3h5KHZhbHVlKSkge1xuICAgIHJlY29yZFByb3h5KHZhbHVlKTtcbiAgICByZXR1cm4ga2V5IGluICh2YWx1ZSBhcyBvYmplY3QpO1xuICB9XG5cbiAgbGV0IGN1cnJlbnQ6IG9iamVjdCB8IG51bGwgPSB2YWx1ZTtcbiAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoaXNQcm94eShjdXJyZW50KSkge1xuICAgICAgcmVjb3JkUHJveHkoY3VycmVudCk7XG4gICAgICByZXR1cm4ga2V5IGluICh2YWx1ZSBhcyBvYmplY3QpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdXJyZW50LCBrZXkpKSByZXR1cm4gdHJ1ZTtcbiAgICBjdXJyZW50ID0gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogYHZhbHVlIGluc3RhbmNlb2YgQ2Agc2VtYW50aWNzIGZvciBhIGtub3duIGBDLnByb3RvdHlwZWAsIHdpdGhvdXRcbiAqIGNvbnN1bHRpbmcgYFN5bWJvbC5oYXNJbnN0YW5jZWAgKHdoaWNoIHdvcmtmbG93IGNvZGUgY2FuIGRlZmluZSkuIFVzZWRcbiAqIGZvciBob3N0IGNsYXNzZXMgdGhhdCBhcmUgaW5qZWN0ZWQgaW50byB0aGUgc2FuZGJveCAoSGVhZGVycywgVVJMLFxuICogVVJMU2VhcmNoUGFyYW1zLCBET01FeGNlcHRpb24pLCB3aGVyZSB0aGUgaW5zdGFuY2VzIOKAlCBmcm9tIGFueSByZWFsbSB0aGVcbiAqIGhvc3QgaGFuZGVkIHRoZSBjbGFzcyB0byDigJQgY2FycnkgdGhlIGhvc3QgcHJvdG90eXBlIGluIHRoZWlyIGNoYWluLlxuICpcbiAqIFByb3hpZXMgYXJlIHdhbGtlZCByYXRoZXIgdGhhbiByZWplY3RlZDogYFJlZmxlY3QuZ2V0UHJvdG90eXBlT2ZgIGZpcmVzXG4gKiB0aGUgcHJveHkncyBgZ2V0UHJvdG90eXBlT2ZgIHRyYXAsIG1hdGNoaW5nIGBpbnN0YW5jZW9mYCBzZW1hbnRpY3MsIGFuZFxuICogcmVhbCB2YWx1ZXMgZGVwZW5kIG9uIHRoYXQg4oCUIE5leHQuanMgaGFuZHMgdGhlIHJ1bnRpbWUgYSBwcm94aWVkXG4gKiBgTmV4dFJlcXVlc3RgLCBhbmQgYW5zd2VyaW5nIFwibm90IGEgUmVxdWVzdFwiIGZvciBpdCB3b3VsZCBzaWxlbnRseSBicmVha1xuICogd2ViaG9va3MuIFRoZSB0cmFwcyBhcmUgZ3Vlc3Qtb2JzZXJ2YWJsZSwgc28gdGhlIHByb3h5IGlzIHJlY29yZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZU9mUHJvdG90eXBlKFxuICB2YWx1ZTogdW5rbm93bixcbiAgcHJvdG90eXBlOiBvYmplY3QgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBpZiAoIXByb3RvdHlwZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoaXNQcm94eSh2YWx1ZSkpIHJlY29yZFByb3h5KHZhbHVlKTtcbiAgbGV0IGN1cnJlbnQ6IG9iamVjdCB8IG51bGwgPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gcHJvdG90eXBlKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNQcm94eShjdXJyZW50KSkgcmVjb3JkUHJveHkoY3VycmVudCk7XG4gICAgY3VycmVudCA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyAtLS0tIEludHJpbnNpYy1iYWNrZWQgZXh0cmFjdGlvbiBoZWxwZXJzICh1c2VkIGJ5IHRoZSByZWR1Y2VycykgLS0tLS0tLS0tLS0tLVxuLy9cbi8vIEludHJpbnNpY3MgcmVhZCBpbnRlcm5hbCBzbG90cywgd2hpY2ggYSBQcm94eSBkb2VzIG5vdCBoYXZlIOKAlCBpbnZva2luZyBvbmVcbi8vIHdpdGggYSBwcm94eSByZWNlaXZlciB0aHJvd3MsIHdoZXJlIHRoZSBwcmUtZXhpc3RpbmcgZHluYW1pYyByZWFkIGZvcndhcmRlZFxuLy8gdGhyb3VnaCB0aGUgdHJhcC4gRm9yIHRoZSAocmFyZSkgcHJveHkgY2FzZSwgZmFsbCBiYWNrIHRvIHRoZSBkeW5hbWljIHJlYWRcbi8vIHNvIGJlaGF2aW9yIGlzIHVuY2hhbmdlZCwgYW5kIHJlY29yZCB0aGF0IHRoZSB0cmFwcyByYW4uXG5cbi8qKiBgVVJMLnByb3RvdHlwZS5ocmVmYCBnZXR0ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsSHJlZih2YWx1ZTogVVJMKTogc3RyaW5nIHtcbiAgaWYgKGlzUHJveHkodmFsdWUpKSB7XG4gICAgcmVjb3JkUHJveHkodmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZS5ocmVmO1xuICB9XG4gIHJldHVybiB1cmxIcmVmR2V0dGVyKHZhbHVlKTtcbn1cblxuLyoqIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnRvU3RyaW5nYCDigJQgcmV0dXJucyBgJydgIGlmZiBlbXB0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmxTZWFyY2hQYXJhbXNUb1N0cmluZyh2YWx1ZTogVVJMU2VhcmNoUGFyYW1zKTogc3RyaW5nIHtcbiAgaWYgKGlzUHJveHkodmFsdWUpKSB7XG4gICAgcmVjb3JkUHJveHkodmFsdWUpO1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIHJldHVybiB1cmxTZWFyY2hQYXJhbXNUb1N0cmluZ01ldGhvZCh2YWx1ZSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgYSBIZWFkZXJzIGluc3RhbmNlIHRocm91Z2ggdGhlIGNhcHR1cmVkIGhvc3QgaXRlcmF0b3IsIHNvIHRoZVxuICogaXRlcmF0b3Igb2JqZWN0IOKAlCBhbmQgaXRzIGBuZXh0YCDigJQgYXJlIGhvc3QtcmVhbG0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWFkZXJzVG9FbnRyaWVzKHZhbHVlOiBIZWFkZXJzKTogW3N0cmluZywgc3RyaW5nXVtdIHtcbiAgaWYgKGlzUHJveHkodmFsdWUpKSB7XG4gICAgcmVjb3JkUHJveHkodmFsdWUpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHZhbHVlKSBhcyBbc3RyaW5nLCBzdHJpbmddW107XG4gIH1cbiAgcmV0dXJuIFsuLi5oZWFkZXJzSXRlcmF0b3IodmFsdWUpXSBhcyBbc3RyaW5nLCBzdHJpbmddW107XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgYSBnZW51aW5lIE1hcCdzIGVudHJpZXMgZW50aXJlbHkgdGhyb3VnaCBob3N0IGludHJpbnNpY3M6IHRoZVxuICogaXRlcmF0b3Igb2JqZWN0IGlzIGNyZWF0ZWQgYnkgdGhlIGhvc3QgYE1hcC5wcm90b3R5cGUuZW50cmllc2AsIHNvIGl0c1xuICogcmVhbG0g4oCUIGFuZCB0aGVyZWZvcmUgaXRzIGBuZXh0YCDigJQgaXMgdGhlIGhvc3Qncywgbm90IHRoZSBzYW5kYm94J3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb0VudHJpZXMoXG4gIHZhbHVlOiBNYXA8dW5rbm93biwgdW5rbm93bj5cbik6IFt1bmtub3duLCB1bmtub3duXVtdIHtcbiAgcmV0dXJuIFsuLi5tYXBFbnRyaWVzKHZhbHVlKV07XG59XG5cbi8qKiBTZWUge0BsaW5rIG1hcFRvRW50cmllc30uICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VG9WYWx1ZXModmFsdWU6IFNldDx1bmtub3duPik6IHVua25vd25bXSB7XG4gIHJldHVybiBbLi4uc2V0VmFsdWVzKHZhbHVlKV07XG59XG5cbi8qKlxuICogVGhlIGJ5dGVzIG9mIGFuIGBBcnJheUJ1ZmZlclZpZXdgLCByZWFkIHZpYSBpbnRlcm5hbC1zbG90IGdldHRlcnMg4oCUXG4gKiBvd24tcHJvcGVydHkgc2hhZG93aW5nIGFuZCBwcm90b3R5cGUgcGF0Y2hlcyBjYW5ub3QgY2hhbmdlIHdoaWNoIGJ5dGVzXG4gKiBhcmUgc2VyaWFsaXplZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpZXdJbmZvKHZhbHVlOiBBcnJheUJ1ZmZlclZpZXcpOiB7XG4gIGJ1ZmZlcjogQXJyYXlCdWZmZXJMaWtlO1xuICBieXRlT2Zmc2V0OiBudW1iZXI7XG4gIGJ5dGVMZW5ndGg6IG51bWJlcjtcbn0ge1xuICBpZiAodHlwZXMuaXNEYXRhVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYnVmZmVyOiBkYXRhVmlld0J1ZmZlcih2YWx1ZSksXG4gICAgICBieXRlT2Zmc2V0OiBkYXRhVmlld0J5dGVPZmZzZXQodmFsdWUpLFxuICAgICAgYnl0ZUxlbmd0aDogZGF0YVZpZXdCeXRlTGVuZ3RoKHZhbHVlKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgYnVmZmVyOiB0eXBlZEFycmF5QnVmZmVyKHZhbHVlKSxcbiAgICBieXRlT2Zmc2V0OiB0eXBlZEFycmF5Qnl0ZU9mZnNldCh2YWx1ZSksXG4gICAgYnl0ZUxlbmd0aDogdHlwZWRBcnJheUJ5dGVMZW5ndGgodmFsdWUpLFxuICB9O1xufVxuXG4vLyAtLS0tIEhhcmRlbmVkIGRldmFsdWUgb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBUaGUgd29ya2Zsb3cgcmVkdWNlcnMgY2xhaW0gbW9zdCBzcGVjaWFsIHR5cGVzIGJlZm9yZSBkZXZhbHVlJ3MgYnVpbHQtaW5cbi8vIGhhbmRsaW5nIHJ1bnMsIHNvIHRoZXNlIG9wZXJhdGlvbnMgbWFpbmx5IGdvdmVybiBwbGFpbiBvYmplY3RzLCBhcnJheXMsXG4vLyBib3hlZCBwcmltaXRpdmVzLCB0aGVuYWJsZSBwcm9iZXMg4oCUIGFuZCBjbGFzc2lmaWNhdGlvbiAoYHRhZ09mYCksIHdoaWNoXG4vLyBydW5zIGZvciBldmVyeSBvYmplY3QgdGhlIHJlZHVjZXJzIGRpZCBub3QgY2xhaW0uXG5cbmNvbnN0IEtOT1dOX1ZJRVdfVEFHUyA9IG5ldyBTZXQoW1xuICAnSW50OEFycmF5JyxcbiAgJ1VpbnQ4QXJyYXknLFxuICAnVWludDhDbGFtcGVkQXJyYXknLFxuICAnSW50MTZBcnJheScsXG4gICdVaW50MTZBcnJheScsXG4gICdGbG9hdDE2QXJyYXknLFxuICAnSW50MzJBcnJheScsXG4gICdVaW50MzJBcnJheScsXG4gICdGbG9hdDMyQXJyYXknLFxuICAnRmxvYXQ2NEFycmF5JyxcbiAgJ0JpZ0ludDY0QXJyYXknLFxuICAnQmlnVWludDY0QXJyYXknLFxuXSk7XG5cbi8qKlxuICogVGFncyB0aGF0IHtAbGluayBicmFuZE9mfSBkZWNpZGVzIGF1dGhvcml0YXRpdmVseS4gSWYgdGhlIGJyYW5kIGNoZWNrIHNhaWRcbiAqIFwibm90IG9uZSBvZiB0aGVzZVwiIHRoZW4gYSBgU3ltYm9sLnRvU3RyaW5nVGFnYCBjbGFpbWluZyBvbmUgaXMgYSBzcG9vZiwgYW5kXG4gKiBob25vdXJpbmcgaXQgd291bGQgcm91dGUgdGhlIHZhbHVlIGludG8gYW4gZXh0cmFjdG9yIHRoYXQgcmVxdWlyZXMgdGhlIHJlYWxcbiAqIGludGVybmFsIHNsb3QgKGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBzZW1hbnRpY3MgbGV0IGFueSBvYmplY3QgY2xhaW1cbiAqIGBbb2JqZWN0IERhdGVdYCkuIFVuYnJhbmRlZCB2YWx1ZXMgdGhhdCBjbGFpbSBvbmUgb2YgdGhlc2UgYXJlIGNsYXNzaWZpZWRcbiAqIGFzIHBsYWluIG9iamVjdHMgaW5zdGVhZC5cbiAqL1xuY29uc3QgQlJBTkRfREVDSURFRF9UQUdTID0gbmV3IFNldChbXG4gICdEYXRlJyxcbiAgJ1JlZ0V4cCcsXG4gICdNYXAnLFxuICAnU2V0JyxcbiAgJ0FycmF5JyxcbiAgJ0RhdGFWaWV3JyxcbiAgJ0FycmF5QnVmZmVyJyxcbiAgJ1NoYXJlZEFycmF5QnVmZmVyJyxcbiAgJ051bWJlcicsXG4gICdTdHJpbmcnLFxuICAnQm9vbGVhbicsXG4gICdCaWdJbnQnLFxuICAnVVJMJyxcbiAgJ1VSTFNlYXJjaFBhcmFtcycsXG4gIC4uLktOT1dOX1ZJRVdfVEFHUyxcbl0pO1xuXG4vKipcbiAqIENsYXNzaWZpZXMgYSB2YWx1ZSBieSBlbmdpbmUgYnJhbmQuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm8gYnJhbmRcbiAqIG1hdGNoZXMgKHRoZSBjYWxsZXIgZmFsbHMgYmFjayB0byBgU3ltYm9sLnRvU3RyaW5nVGFnYCBzZW1hbnRpY3MpLlxuICovXG5mdW5jdGlvbiBicmFuZE9mKHZhbHVlOiBvYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZXMuaXNEYXRlKHZhbHVlKSkgcmV0dXJuICdEYXRlJztcbiAgaWYgKHR5cGVzLmlzUmVnRXhwKHZhbHVlKSkgcmV0dXJuICdSZWdFeHAnO1xuICBpZiAodHlwZXMuaXNNYXAodmFsdWUpKSByZXR1cm4gJ01hcCc7XG4gIGlmICh0eXBlcy5pc1NldCh2YWx1ZSkpIHJldHVybiAnU2V0JztcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ0FycmF5JztcbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCB0YWcgPSB0eXBlZEFycmF5VGFnKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnICE9PSB1bmRlZmluZWQgJiYgS05PV05fVklFV19UQUdTLmhhcyh0YWcpID8gdGFnIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlcy5pc0RhdGFWaWV3KHZhbHVlKSkgcmV0dXJuICdEYXRhVmlldyc7XG4gIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKHZhbHVlKSkgcmV0dXJuICdBcnJheUJ1ZmZlcic7XG4gIGlmICh0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKHZhbHVlKSkgcmV0dXJuICdTaGFyZWRBcnJheUJ1ZmZlcic7XG4gIGlmICh0eXBlcy5pc051bWJlck9iamVjdCh2YWx1ZSkpIHJldHVybiAnTnVtYmVyJztcbiAgaWYgKHR5cGVzLmlzU3RyaW5nT2JqZWN0KHZhbHVlKSkgcmV0dXJuICdTdHJpbmcnO1xuICBpZiAodHlwZXMuaXNCb29sZWFuT2JqZWN0KHZhbHVlKSkgcmV0dXJuICdCb29sZWFuJztcbiAgaWYgKHR5cGVzLmlzQmlnSW50T2JqZWN0KHZhbHVlKSkgcmV0dXJuICdCaWdJbnQnO1xuICBpZiAoaXNJbnN0YW5jZU9mUHJvdG90eXBlKHZhbHVlLCBVUkwucHJvdG90eXBlKSkgcmV0dXJuICdVUkwnO1xuICBpZiAoaXNJbnN0YW5jZU9mUHJvdG90eXBlKHZhbHVlLCBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlKSkge1xuICAgIHJldHVybiAnVVJMU2VhcmNoUGFyYW1zJztcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlYWRzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHRoZSB3YXkgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHdvdWxkLFxuICogYnV0IHRocm91Z2ggZGVzY3JpcHRvcnMg4oCUIGEgZGF0YS1wcm9wZXJ0eSB0YWcgKHRoZSBjb21tb24gY2FzZSwgZS5nLlxuICogVGVtcG9yYWwgcG9seWZpbGxzKSBjb3N0cyBubyB3b3JrZmxvdy1jb2RlIGV4ZWN1dGlvbjsgYW4gYWNjZXNzb3IgdGFnIGlzXG4gKiBpbnZva2VkIChjb21wYXQpIGFuZCByZWNvcmRlZC5cbiAqL1xuZnVuY3Rpb24gcmVhZFRvU3RyaW5nVGFnKHZhbHVlOiBvYmplY3QpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YWcgPSByZWFkUHJvcGVydHkodmFsdWUsIFN5bWJvbC50b1N0cmluZ1RhZyk7XG4gIHJldHVybiB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IHRhZyA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IGhhcmRlbmVkU3RyaW5naWZ5T3BlcmF0aW9uczogUGFydGlhbDxTdHJpbmdpZnlPcGVyYXRpb25zPiA9IHtcbiAgdGFnT2Y6ICh2YWx1ZTogb2JqZWN0KSA9PiB7XG4gICAgaWYgKGlzUHJveHkodmFsdWUpKSB7XG4gICAgICAvLyBBIHByb3h5J3MgY2xhc3NpZmljYXRpb24gaXMgYW5zd2VyZWQgYnkgaXRzIHRyYXBzIOKAlCB0aGF0IGlzIHRoZVxuICAgICAgLy8gb25seSBhY2Nlc3MgcGF0aCB0aGVyZSBpcy4gUmVjb3JkIGl0IGFuZCBwcmVzZXJ2ZSB0b2RheSdzXG4gICAgICAvLyBiZWhhdmlvciBmb3IgZXZlcnl0aGluZyBkb3duc3RyZWFtLlxuICAgICAgcmVjb3JkUHJveHkodmFsdWUpO1xuICAgICAgcmV0dXJuIGRlZmF1bHRTdHJpbmdpZnlPcGVyYXRpb25zLnRhZ09mKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgYnJhbmQgPSBicmFuZE9mKHZhbHVlKTtcbiAgICBpZiAoYnJhbmQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGJyYW5kO1xuICAgIC8vIE5vIGVuZ2luZSBicmFuZCBtYXRjaGVkLiBBIGBTeW1ib2wudG9TdHJpbmdUYWdgIGlzIHN0aWxsIG1lYW5pbmdmdWwgZm9yXG4gICAgLy8gdHlwZXMgZGV2YWx1ZSBpZGVudGlmaWVzIHRoYXQgd2F5IChgVGVtcG9yYWwuKmApLCBidXQgb25lIG5hbWluZyBhXG4gICAgLy8gYnJhbmQtZGVjaWRlZCB0eXBlIGlzIGEgc3Bvb2YgYW5kIGlzIGlnbm9yZWQuXG4gICAgY29uc3QgdGFnID0gcmVhZFRvU3RyaW5nVGFnKHZhbHVlKTtcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQgfHwgQlJBTkRfREVDSURFRF9UQUdTLmhhcyh0YWcpKSByZXR1cm4gJ09iamVjdCc7XG4gICAgcmV0dXJuIHRhZztcbiAgfSxcblxuICBpc1RoZW5hYmxlOiAodmFsdWU6IHsgdGhlbj86IHVua25vd24gfSkgPT4ge1xuICAgIGlmICh0eXBlcy5pc1Byb21pc2UodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdHlwZW9mIHJlYWRQcm9wZXJ0eSh2YWx1ZSwgJ3RoZW4nKSA9PT0gJ2Z1bmN0aW9uJztcbiAgfSxcblxuICB1bmJveDogKGJveGVkOiBvYmplY3QpID0+IHtcbiAgICBpZiAodHlwZXMuaXNOdW1iZXJPYmplY3QoYm94ZWQpKSByZXR1cm4gbnVtYmVyVmFsdWVPZihib3hlZCk7XG4gICAgaWYgKHR5cGVzLmlzU3RyaW5nT2JqZWN0KGJveGVkKSkgcmV0dXJuIHN0cmluZ1ZhbHVlT2YoYm94ZWQpO1xuICAgIGlmICh0eXBlcy5pc0Jvb2xlYW5PYmplY3QoYm94ZWQpKSByZXR1cm4gYm9vbGVhblZhbHVlT2YoYm94ZWQpO1xuICAgIHJldHVybiBiaWdJbnRWYWx1ZU9mKGJveGVkKTtcbiAgfSxcblxuICB0b0lTT1N0cmluZzogKGRhdGU6IERhdGUpID0+XG4gICAgTnVtYmVyLmlzTmFOKGRhdGVHZXREYXRlKGRhdGUpKSA/ICcnIDogZGF0ZVRvSVNPU3RyaW5nKGRhdGUpLFxuXG4gIHRvU3RyaW5nVmFsdWU6ICh2YWx1ZTogb2JqZWN0KSA9PiB7XG4gICAgLy8gUmVhY2hlZCBmb3IgVVJMIC8gVVJMU2VhcmNoUGFyYW1zICh3aGVuIHRoZSByZWR1Y2VycyBkaWQgbm90IGNsYWltXG4gICAgLy8gdGhlbSwgZS5nLiBpbnN0YW5jZXMgb2YgYSBkaWZmZXJlbnQgcmVhbG0ncyBjbGFzc2VzKSBhbmQgZm9yXG4gICAgLy8gdG9TdHJpbmdUYWctYnJhbmRlZCBvYmplY3RzIGxpa2UgVGVtcG9yYWwgcG9seWZpbGxzLCB3aG9zZSBzdHJpbmdcbiAgICAvLyBmb3JtIG9ubHkgdGhlaXIgb3duIHRvU3RyaW5nKCkgY2FuIHByb2R1Y2UuXG4gICAgaWYgKGlzSW5zdGFuY2VPZlByb3RvdHlwZSh2YWx1ZSwgVVJMLnByb3RvdHlwZSkpIHtcbiAgICAgIHJldHVybiB1cmxIcmVmKHZhbHVlIGFzIFVSTCk7XG4gICAgfVxuICAgIGlmIChpc0luc3RhbmNlT2ZQcm90b3R5cGUodmFsdWUsIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUpKSB7XG4gICAgICByZXR1cm4gdXJsU2VhcmNoUGFyYW1zVG9TdHJpbmcodmFsdWUgYXMgVVJMU2VhcmNoUGFyYW1zKTtcbiAgICB9XG4gICAgcmVjb3JkR3Vlc3RDb2RlKFxuICAgICAgJ21ldGhvZCcsXG4gICAgICBgdG9TdHJpbmcgKCR7cmVhZFRvU3RyaW5nVGFnKHZhbHVlKSA/PyAndW5rbm93bid9KWBcbiAgICApO1xuICAgIHJldHVybiAodmFsdWUgYXMgeyB0b1N0cmluZygpOiBzdHJpbmcgfSkudG9TdHJpbmcoKTtcbiAgfSxcblxuICByZWdFeHBJbmZvOiAocmVnZXhwOiBSZWdFeHApID0+ICh7XG4gICAgc291cmNlOiByZWdFeHBTb3VyY2UocmVnZXhwKSxcbiAgICBmbGFnczogcmVnRXhwRmxhZ3MocmVnZXhwKSxcbiAgfSksXG5cbiAgdmFsdWVzT2Y6IChzZXQ6IFNldDx1bmtub3duPikgPT4gc2V0VG9WYWx1ZXMoc2V0KSxcbiAgZW50cmllc09mOiAobWFwOiBNYXA8dW5rbm93biwgdW5rbm93bj4pID0+XG4gICAgbWFwVG9FbnRyaWVzKG1hcCkgYXMgW3Vua25vd24sIHVua25vd25dW10sXG5cbiAgdmlld0luZm86ICh2aWV3OiBBcnJheUJ1ZmZlclZpZXcpID0+IHtcbiAgICBjb25zdCBpbmZvID0gdmlld0luZm8odmlldyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmluZm8sXG4gICAgICAvLyBkZXZhbHVlIG9ubHkgcmVhZHMgYGxlbmd0aGAgZm9yIHR5cGVkLWFycmF5IHN1YnZpZXdzOyBEYXRhVmlld1xuICAgICAgLy8gc3Vidmlld3MgYXJlIGVuY29kZWQgZnJvbSBgYnl0ZUxlbmd0aGAuXG4gICAgICBsZW5ndGg6IHR5cGVzLmlzRGF0YVZpZXcodmlldykgPyAwIDogdHlwZWRBcnJheUxlbmd0aCh2aWV3KSxcbiAgICAgIGJ1ZmZlckJ5dGVMZW5ndGg6IHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoaW5mby5idWZmZXIpXG4gICAgICAgID8gc2hhcmVkQXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGluZm8uYnVmZmVyKVxuICAgICAgICA6IGFycmF5QnVmZmVyQnl0ZUxlbmd0aChpbmZvLmJ1ZmZlciksXG4gICAgfTtcbiAgfSxcblxuICBzaGFwZU9mOiAodmFsdWU6IG9iamVjdCkgPT4ge1xuICAgIGlmIChpc1Byb3h5KHZhbHVlKSkgcmVjb3JkUHJveHkodmFsdWUpO1xuICAgIHJldHVybiBkZWZhdWx0U3RyaW5naWZ5T3BlcmF0aW9ucy5zaGFwZU9mKHZhbHVlKTtcbiAgfSxcblxuICBnZXQ6ICh2YWx1ZTogb2JqZWN0LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gcmVhZFByb3BlcnR5KHZhbHVlLCBrZXkpLFxufTtcbiJdfQ==
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGVuZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9oYXJkZW5lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQXNDckQsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSw2RUFBNkU7QUFDN0UsZ0JBQWdCO0FBQ2hCLElBQUksV0FBVyxHQUEwQixJQUFJLENBQUM7QUFDOUMsOEVBQThFO0FBQzlFLElBQUksZUFBZSxHQUEyQixJQUFJLENBQUM7QUFFbkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsS0FBaUMsRUFDakMsRUFBVztJQUVYLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDeEMsV0FBVyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDNUIsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DLElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDZCxDQUFDO1lBQVMsQ0FBQztRQUNULFdBQVcsR0FBRyxhQUFhLENBQUM7UUFDNUIsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxpRkFBaUY7QUFDakYsZ0ZBQWdGO0FBQ2hGLDhCQUE4QjtBQUM5QixNQUFNLGVBQWUsR0FBRyxlQUFlLENBQ3JDLHFDQUFxQyxFQUNy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TSxDQUFDO0tBQzNCLENBQUM7SUFFRixRQUFRLEVBQUUsQ0FBQyxHQUFpQixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO0lBQ2pELFNBQVMsRUFBRSxDQUFDLEdBQTBCLEVBQUUsRUFBRSxDQUN4QyxZQUFZLENBQUMsR0FBRyxDQUF5QjtJQUUzQyxRQUFRLEVBQUUsQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLE9BQU87WUFDTCxHQUFHLElBQUk7WUFDUCxpRUFBaUU7WUFDakUsMENBQTBDO1lBQzFDLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDdEQsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDekIsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sMEJBQTBCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxHQUFHLEVBQUUsQ0FBQyxLQUFhLEVBQUUsR0FBb0IsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7Q0FDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGFyZGVuZWQgaW50cm9zcGVjdGlvbiBmb3Igc2VyaWFsaXppbmcgdmFsdWVzIHRoYXQgbWF5IG9yaWdpbmF0ZSBpbnNpZGUgYVxuICogd29ya2Zsb3cgVk0gKGBub2RlOnZtYCkgc2FuZGJveCByZWFsbS5cbiAqXG4gKiBTZXJpYWxpemF0aW9uIHJ1bnMgb24gdGhlIGhvc3QsIGJ1dCB0aGUgdmFsdWVzIGl0IGluc3BlY3RzIHdlcmVcbiAqIGNvbnN0cnVjdGVkIGJ5IHdvcmtmbG93IGNvZGUsIHNvIGEgbmFpdmUgZHluYW1pYyBvcGVyYXRpb24gbGlrZVxuICogYHZhbHVlLnRvSVNPU3RyaW5nKClgLCBgQXJyYXkuZnJvbShtYXApYCwgb3IgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG4gKiBkaXNwYXRjaGVzIGludG8gdGhlIHNhbmRib3ggcmVhbG0gYW5kIGV4ZWN1dGVzIHdvcmtmbG93IGNvZGUgKHBhdGNoZWRcbiAqIHByb3RvdHlwZSBtZXRob2RzLCBnZXR0ZXJzLCBwcm94eSB0cmFwcywgYFN5bWJvbC50b1N0cmluZ1RhZ2AgYWNjZXNzb3JzKS5cbiAqIFRoYXQgaXMgYSBkZXRlcm1pbmlzbSBoYXphcmQ6IHNlcmlhbGl6YXRpb24gaGFwcGVucyBleGFjdGx5IG9uY2UgcGVyXG4gKiBwYXlsb2FkIChuZXZlciBhZ2FpbiBvbiByZXBsYXkpLCBzbyBhbnkgd29ya2Zsb3ctdmlzaWJsZSBzaWRlIGVmZmVjdCBpdFxuICogdHJpZ2dlcnMgZXhpc3RzIG9ubHkgb24gdGhlIGxpdmUgZXhlY3V0aW9uIHBhdGggYW5kIGRpdmVyZ2VzIGZyb20gcmVwbGF5LlxuICpcbiAqIFRoaXMgbW9kdWxlIG1ha2VzIHNlcmlhbGl6YXRpb24gc2lkZS1lZmZlY3QgZnJlZSB3aGVyZXZlciB0aGUgZGF0YSBhbGxvd3NcbiAqIGl0LCBhbmQgKm9ic2VydmFibGUqIHdoZXJlIGl0IGRvZXMgbm90OlxuICpcbiAqIC0gKipDbGFzc2lmaWNhdGlvbioqIHVzZXMgZW5naW5lLWxldmVsIGJyYW5kIGNoZWNrcyAoYG5vZGU6dXRpbGAgYHR5cGVzYCxcbiAqICAgaW50ZXJuYWwtc2xvdCBwcm9iZXMpIGluc3RlYWQgb2YgYGluc3RhbmNlb2ZgIC8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLFxuICogICB3aGljaCBtYWtlcyBpdCBpbW11bmUgdG8gYFN5bWJvbC5oYXNJbnN0YW5jZWAsIGBTeW1ib2wudG9TdHJpbmdUYWdgLCBhbmRcbiAqICAgcmVhc3NpZ25lZCBnbG9iYWxzLlxuICogLSAqKkV4dHJhY3Rpb24qKiBnb2VzIHRocm91Z2ggaW50cmluc2ljcyBjYXB0dXJlZCBhdCBtb2R1bGUgbG9hZCAoaG9zdFxuICogICBib290LCBiZWZvcmUgYW55IHdvcmtmbG93IGNvZGUgcnVucykuIEludGVybmFsIHNsb3RzIGFyZSByZWFsbS1hZ25vc3RpYyxcbiAqICAgc28gaG9zdCBpbnRyaW5zaWNzIHJlYWQgVk0tcmVhbG0gb2JqZWN0cyB3aXRob3V0IHRvdWNoaW5nIHRoZSBzYW5kYm94J3NcbiAqICAgKHBhdGNoYWJsZSkgcHJvdG90eXBlcy5cbiAqIC0gKipQcm9wZXJ0eSBhY2Nlc3MqKiByZWFkcyB0aHJvdWdoIGRlc2NyaXB0b3JzLCBzbyBwbGFpbiBkYXRhIG5ldmVyXG4gKiAgIGludm9rZXMgYW55dGhpbmcuIFdoZXJlIHdvcmtmbG93IGNvZGUgKm11c3QqIHJ1biBiZWNhdXNlIHRoZSBkYXRhIGl0c2VsZlxuICogICBsaXZlcyBiZWhpbmQgaXQgKGdldHRlcnMsIHByb3hpZXMsIGN1c3RvbSBgW1dPUktGTE9XX1NFUklBTElaRV1gXG4gKiAgIG1ldGhvZHMsIGB0b1N0cmluZygpYCBvbiB0b1N0cmluZ1RhZy1icmFuZGVkIG9iamVjdHMgc3VjaCBhcyBUZW1wb3JhbFxuICogICBwb2x5ZmlsbHMpLCB0aGUgZXhlY3V0aW9uIGlzIHByZXNlcnZlZCBmb3IgY29tcGF0aWJpbGl0eSBhbmQgcmVjb3JkZWRcbiAqICAgaW4gdGhlIGFjdGl2ZSB7QGxpbmsgR3Vlc3RDb2RlU3RhdHN9IHNpbmssIHNvIGNhbGxlcnMgKGUuZy4gYSByZXRhaW5lZC1WTVxuICogICBnYXRlKSBjYW4gcmVhY3QuXG4gKlxuICogKipSZWNvcmRpbmcgaXMgbm90IHByZXZlbnRpb24uKiogRm9yIHRoZSByZWNvcmRlZCBjYXNlcyB0aGUgZGV0ZXJtaW5pc21cbiAqIGhhemFyZCBpcyBzdGlsbCBsaXZlOiBhIGdldHRlciB0aGF0IGNhbGxzIGBNYXRoLnJhbmRvbSgpYCBhZHZhbmNlcyB0aGVcbiAqIHJ1bidzIHNlZWRlZCBQUk5HIGR1cmluZyBzZXJpYWxpemF0aW9uLCBhbmQgYmVjYXVzZSBzZXJpYWxpemF0aW9uIGhhcHBlbnNcbiAqIGV4YWN0bHkgb25jZSBhbmQgaXMgbmV2ZXIgcmVwbGF5ZWQsIGV2ZXJ5IHN1YnNlcXVlbnQgZHJhdyAoaW5jbHVkaW5nIHRoZVxuICogY29ycmVsYXRpb24gaWRzIGRlcml2ZWQgZnJvbSB0aGF0IHN0cmVhbSkgc2hpZnRzIHJlbGF0aXZlIHRvIHJlcGxheS4gVGhlXG4gKiByZXBvcnQgaXMgdGhlIG9ubHkgdHJhY2Ugb2YgdGhhdDsgYWN0aW5nIG9uIGl0ICh3YXJuaW5nLCBkZW1vdGluZyBhXG4gKiByZXRhaW5lZCBWTSB0byByZXBsYXkpIGlzIGxlZnQgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBUaGUgcmVjb3JkZXIgaXMgYW1iaWVudCBtb2R1bGUgc3RhdGUsIHNldCBmb3IgdGhlIGR1cmF0aW9uIG9mIGFcbiAqIHN5bmNocm9ub3VzIGBzdHJpbmdpZnlgIGNhbGwgdmlhIHtAbGluayB3aXRoR3Vlc3RDb2RlU3RhdHN9LiBkZXZhbHVlJ3NcbiAqIGBzdHJpbmdpZnlgIGlzIGZ1bGx5IHN5bmNocm9ub3VzLCBzbyB0aGlzIGlzIHNhZmUgd2l0aG91dCBhc3luYyBjb250ZXh0LlxuICovXG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGdsb2JhbFNpbmdsZXRvbiB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ2lmeU9wZXJhdGlvbnMgfSBmcm9tICdkZXZhbHVlJztcbmltcG9ydCB7IGRlZmF1bHRTdHJpbmdpZnlPcGVyYXRpb25zIH0gZnJvbSAnZGV2YWx1ZSc7XG5cbi8vIC0tLS0gR3Vlc3QgY29kZSBvYnNlcnZhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQSBzaW5nbGUgaW5zdGFuY2Ugb2Ygd29ya2Zsb3cgKGd1ZXN0KSBjb2RlIGV4ZWN1dGluZyBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHdWVzdENvZGVFeGVjdXRpb24ge1xuICAvKipcbiAgICogV2hhdCBmb3JjZWQgdGhlIGV4ZWN1dGlvbjpcbiAgICogLSBgZ2V0dGVyYDogYW4gYWNjZXNzb3IgcHJvcGVydHkgd2FzIGludm9rZWQgdG8gcmVhZCBkYXRhXG4gICAqIC0gYHByb3h5YDogYSBwcm94eSB3YXMgaW50cm9zcGVjdGVkLCBmaXJpbmcgaXRzIHRyYXBzLiBOb3RlIHRoaXMgYWxzb1xuICAgKiAgIGltcGxpZXMgYSAqKnNoYXBlIGNoYW5nZSoqOiBicmFuZCBjaGVja3MgYW5zd2VyIFwibm90IHRoYXQgdHlwZVwiIGZvciBhXG4gICAqICAgcHJveHksIHNvIGEgcHJveGllZCBgTWFwYCBzZXJpYWxpemVzIGFzIGEgcGxhaW4gb2JqZWN0IHJhdGhlciB0aGFuIGFzIGFcbiAgICogICBgTWFwYCwgYW5kIHRoaXMgcmVwb3J0IGlzIHRoZSBvbmx5IGV2aWRlbmNlIG9mIGl0LiAoU3VjaCB2YWx1ZXMgd2VyZVxuICAgKiAgIG5ldmVyIHNlcmlhbGl6YWJsZSBiZWZvcmUsIHNpbmNlIHRoZSBpbnRlcm5hbC1zbG90IHJlYWRzIGluIHRoZSBwcmV2aW91c1xuICAgKiAgIGltcGxlbWVudGF0aW9uIHRocmV3IG9uIHRoZW0sIHNvIHRoZSBzaGFwZSBjaGFuZ2UgcmVwbGFjZXMgYSBjcmFzaCxcbiAgICogICBidXQgaXQgaXMgc2lsZW50LilcbiAgICogLSBgbWV0aG9kYDogYSB3b3JrZmxvdy1kZWZpbmVkIGZ1bmN0aW9uIHdhcyBpbnZva2VkIChlLmcuIGEgY3VzdG9tXG4gICAqICAgYFtXT1JLRkxPV19TRVJJQUxJWkVdYCBzZXJpYWxpemVyLCBgdG9TdHJpbmcoKWAgb24gYVxuICAgKiAgIGBTeW1ib2wudG9TdHJpbmdUYWdgLWJyYW5kZWQgb2JqZWN0LCBhIGR1Y2stdHlwZWQgYGdldFRpbWUoKWAsIG9yIGFcbiAgICogICBgX19jbG9zdXJlVmFyc0ZuYCB0aGlzIHBhY2thZ2UgZGlkIG5vdCBnZW5lcmF0ZSlcbiAgICovXG4gIGtpbmQ6ICdnZXR0ZXInIHwgJ3Byb3h5JyB8ICdtZXRob2QnO1xuICAvKiogQmVzdC1lZmZvcnQgY29udGV4dDogdGhlIHByb3BlcnR5IGtleSwgbWV0aG9kIG5hbWUsIG9yIHRhZyBpbnZvbHZlZC4gKi9cbiAgZGV0YWlsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE11dGFibGUgc2luayByZWNvcmRpbmcgZXZlcnkgd29ya2Zsb3ctY29kZSBleGVjdXRpb24gc2VyaWFsaXphdGlvbiBjb3VsZFxuICogbm90IGF2b2lkLiBQYXNzIHZpYSBgQ29kZWNPcHRpb25zLmd1ZXN0Q29kZVN0YXRzYDsgY29uc3VtZXJzIHRoYXQgcmV0YWluXG4gKiB0aGUgVk0gYWNyb3NzIHN0ZXBzIGNhbiB1c2UgYSBub24tZW1wdHkgYGV4ZWN1dGlvbnNgIGFycmF5IGFzIGEgc2lnbmFsXG4gKiB0aGF0IHRoZSBWTSBzdGF0ZSBtYXkgaGF2ZSBiZWVuIHBlcnR1cmJlZCBieSBzZXJpYWxpemF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEd1ZXN0Q29kZVN0YXRzIHtcbiAgZXhlY3V0aW9uczogR3Vlc3RDb2RlRXhlY3V0aW9uW107XG59XG5cbi8vIHBlci1jb3B5LW9rOiBib3RoIGFyZSBzZXQgYW5kIGNsZWFyZWQgYnkgYHdpdGhHdWVzdENvZGVTdGF0c2AgYXJvdW5kIGEgc2luZ2xlXG4vLyBzeW5jaHJvbm91cyBjYWxsLCBzbyB0aGUgc2luayBpcyBvbmx5IGV2ZXIgcmVhZCBieSB0aGUgc2FtZSBjb3B5IHRoYXQgYXJtZWRcbi8vIGl0LiBBIHNoYXJlZCBzbG90IHdvdWxkIGxldCB0d28gY29waWVzIHJlY29yZGluZyBjb25jdXJyZW50bHkgY2xvYmJlciBlYWNoXG4vLyBvdGhlcidzIHNpbmsuXG5sZXQgYWN0aXZlU3RhdHM6IEd1ZXN0Q29kZVN0YXRzIHwgbnVsbCA9IG51bGw7XG4vLyBwZXItY29weS1vazogc2FtZSBzY29wZSBhcyBgYWN0aXZlU3RhdHNgIGFib3ZlLCBhcm1lZCBhbmQgY2xlYXJlZCB0b2dldGhlci5cbmxldCByZXBvcnRlZFByb3hpZXM6IFdlYWtTZXQ8b2JqZWN0PiB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIFJ1bnMgYGZuYCAoc3luY2hyb25vdXNseSkgd2l0aCBgc3RhdHNgIGFzIHRoZSBhY3RpdmUgZ3Vlc3QtY29kZSBzaW5rLlxuICogTmVzdGVkIGNhbGxzIHN0YWNrIGNvcnJlY3RseTsgYSBgbnVsbGAvYHVuZGVmaW5lZGAgc2luayBkaXNhYmxlc1xuICogcmVjb3JkaW5nIHdpdGhvdXQgZGlzYWJsaW5nIGhhcmRlbmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhHdWVzdENvZGVTdGF0czxUPihcbiAgc3RhdHM6IEd1ZXN0Q29kZVN0YXRzIHwgdW5kZWZpbmVkLFxuICBmbjogKCkgPT4gVFxuKTogVCB7XG4gIGNvbnN0IHByZXZpb3VzU3RhdHMgPSBhY3RpdmVTdGF0cztcbiAgY29uc3QgcHJldmlvdXNQcm94aWVzID0gcmVwb3J0ZWRQcm94aWVzO1xuICBhY3RpdmVTdGF0cyA9IHN0YXRzID8/IG51bGw7XG4gIHJlcG9ydGVkUHJveGllcyA9IHN0YXRzID8gbmV3IFdlYWtTZXQoKSA6IG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYWN0aXZlU3RhdHMgPSBwcmV2aW91c1N0YXRzO1xuICAgIHJlcG9ydGVkUHJveGllcyA9IHByZXZpb3VzUHJveGllcztcbiAgfVxufVxuXG4vKipcbiAqIENsb3N1cmUtdmFyaWFibGUgZnVuY3Rpb25zIHRoYXQgYXJyaXZlZCB0aHJvdWdoIGB1c2VTdGVwYCB3aGVuIGEgc3RlcFxuICogcHJveHkgd2FzIGJ1aWx0LiBUaGUgc3RlcC1mdW5jdGlvbiByZWR1Y2VyIG11c3QgaW52b2tlIGBfX2Nsb3N1cmVWYXJzRm5gLFxuICogYW5kIHRoZSBjb21waWxlci1nZW5lcmF0ZWQgZnVuY3Rpb24gaXMgYSBwdXJlIHNlcXVlbmNlIG9mIGxleGljYWwgcmVhZHMuXG4gKiBCdXQgdGhlICpwcm9wZXJ0eSogaXMgcmVhY2hhYmxlIGZyb20gd29ya2Zsb3cgY29kZSwgd2hpY2ggY2FuIHJlcGxhY2UgaXRcbiAqIHdpdGggYW4gYXJiaXRyYXJ5IGZ1bmN0aW9uLiBUaGUgcmVkdWNlciBjaGVja3MgbWVtYmVyc2hpcCBoZXJlIGluc3RlYWQgb2ZcbiAqIGFzc3VtaW5nIHByb3ZlbmFuY2UsIGFuZCByZXBvcnRzIGFueXRoaW5nIGl0IGRvZXMgbm90IHJlY29nbml6ZS5cbiAqXG4gKiBNZW1iZXJzaGlwIHByb3ZlcyB0aGUgZnVuY3Rpb24gd2FzIHBhc3NlZCB0byBgdXNlU3RlcGAsIG5vdCB0aGF0IHRoZVxuICogY29tcGlsZXIgZ2VuZXJhdGVkIGl0OiB3b3JrZmxvdyBjb2RlIGNhbiBjYWxsIGB1c2VTdGVwYCBkaXJlY3RseSBhbmRcbiAqIGxhdW5kZXIgYSBzaWRlLWVmZmVjdGZ1bCBmdW5jdGlvbiBwYXN0IHRoZSByZXBvcnQuIFRoYXQgY29zdHMgYSBtaXNzaW5nXG4gKiByZXBvcnQgZW50cnksIG5ldmVyIGluY29ycmVjdCBvdXRwdXQ7IGNsb3NpbmcgaXQgbWVhbnMgYnJhbmRpbmcgYXQgdGhlXG4gKiBjb21waWxlciwgd2hpY2ggZG9lcyBub3QgYmVsb25nIGhlcmUuXG4gKi9cbi8vIE9uIGBnbG9iYWxUaGlzYCAoc2VlIGBnbG9iYWxTaW5nbGV0b25gKTogZnVuY3Rpb25zIGNyb3NzIG1vZHVsZSBjb3BpZXMgZnJlZWx5LFxuLy8gc28gYSBjbG9zdXJlIG1hcmtlZCBieSBvbmUgY29weSB3b3VsZCBub3QgYmUgcmVjb2duaXplZCBieSBhbm90aGVyLCBjb3N0aW5nIGFcbi8vIHJlcG9ydCBlbnRyeSBmb3Igbm8gcmVhc29uLlxuY29uc3QgdXNlU3RlcENsb3N1cmVzID0gZ2xvYmFsU2luZ2xldG9uKFxuICAnQHdvcmtmbG93L2NvcmUvL3VzZVN0ZXBDbG9zdXJlcy5mbnMnLFxuICAxLFxuICAoKSA9PiAoeyBmbnM6IG5ldyBXZWFrU2V0PG9iamVjdD4oKSB9KVxuKTtcblxuLyoqIE1hcmtzIGEgZnVuY3Rpb24gYXMgaGF2aW5nIGJlZW4gcGFzc2VkIHRvIGB1c2VTdGVwYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrVXNlU3RlcENsb3N1cmVGbjxUIGV4dGVuZHMgb2JqZWN0PihmbjogVCk6IFQge1xuICB1c2VTdGVwQ2xvc3VyZXMuZm5zLmFkZChmbik7XG4gIHJldHVybiBmbjtcbn1cblxuLyoqIFdoZXRoZXIgYGZuYCB3YXMgbWFya2VkIGJ5IHtAbGluayBtYXJrVXNlU3RlcENsb3N1cmVGbn0uICovXG5leHBvcnQgZnVuY3Rpb24gaXNVc2VTdGVwQ2xvc3VyZUZuKGZuOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdXNlU3RlcENsb3N1cmVzLmZucy5oYXMoZm4gYXMgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZEd1ZXN0Q29kZShcbiAga2luZDogR3Vlc3RDb2RlRXhlY3V0aW9uWydraW5kJ10sXG4gIGRldGFpbD86IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmICghYWN0aXZlU3RhdHMpIHJldHVybjtcbiAgY29uc3QgZXhlY3V0aW9uOiBHdWVzdENvZGVFeGVjdXRpb24gPSB7IGtpbmQgfTtcbiAgaWYgKGRldGFpbCAhPT0gdW5kZWZpbmVkKSBleGVjdXRpb24uZGV0YWlsID0gZGV0YWlsO1xuICBhY3RpdmVTdGF0cy5leGVjdXRpb25zLnB1c2goZXhlY3V0aW9uKTtcbn1cblxuLyoqIFJlY29yZHMgYSBwcm94eSBvbmNlIHBlciBzZXJpYWxpemF0aW9uIHBhc3MgKHByb3hpZXMgZmlyZSBtYW55IHRyYXBzKS4gKi9cbmZ1bmN0aW9uIHJlY29yZFByb3h5KHZhbHVlOiBvYmplY3QpOiB2b2lkIHtcbiAgaWYgKCFhY3RpdmVTdGF0cyB8fCAhcmVwb3J0ZWRQcm94aWVzKSByZXR1cm47XG4gIGlmIChyZXBvcnRlZFByb3hpZXMuaGFzKHZhbHVlKSkgcmV0dXJuO1xuICByZXBvcnRlZFByb3hpZXMuYWRkKHZhbHVlKTtcbiAgcmVjb3JkR3Vlc3RDb2RlKCdwcm94eScpO1xufVxuXG4vLyAtLS0tIENhcHR1cmVkIGludHJpbnNpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy9cbi8vIENhcHR1cmVkIGF0IG1vZHVsZSBsb2FkIChob3N0IGJvb3QsIGJlZm9yZSBhbnkgd29ya2Zsb3cgYnVuZGxlIGNhbiBydW4pXG4vLyBhbmQgaW52b2tlZCB3aXRoIGV4cGxpY2l0IHJlY2VpdmVycywgc28gbm8gbG9va3VwIGV2ZXIgcmVzb2x2ZXMgdGhyb3VnaCBhXG4vLyBzYW5kYm94LXJlYWNoYWJsZSBwcm90b3R5cGUuIEV2ZXJ5IG1lbWJlciBiZWxvdyBleGlzdHMgb24gZXZlcnkgc3VwcG9ydGVkXG4vLyBlbmdpbmUgKE5vZGUgMTgrKSwgc28gYSBtaXNzaW5nIG9uZSBpcyBhIGJ1ZyBpbiB0aGlzIHRhYmxlOiBmYWlsIGF0IGltcG9ydFxuLy8gcmF0aGVyIHRoYW4gc2VyaWFsaXplIHRocm91Z2ggYSBsaXZlIChwYXRjaGFibGUpIGxvb2t1cCBsYXRlci5cblxuY29uc3QgdW5jdXJyeVRoaXMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5iaW5kKEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKSBhcyA8XG4gIFQsXG4gIEEgZXh0ZW5kcyB1bmtub3duW10sXG4gIFIsXG4+KFxuICBmbjogKHRoaXM6IFQsIC4uLmFyZ3M6IEEpID0+IFJcbikgPT4gKHRoaXNBcmc6IFQsIC4uLmFyZ3M6IEEpID0+IFI7XG5cbmZ1bmN0aW9uIHByb3RvR2V0dGVyPFQ+KFxuICBwcm90b3R5cGU6IG9iamVjdCxcbiAga2V5OiBQcm9wZXJ0eUtleVxuKTogKHZhbHVlOiB1bmtub3duKSA9PiBUIHtcbiAgY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90b3R5cGUsIGtleSk/LmdldDtcbiAgaWYgKCFnZXR0ZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgaW50cmluc2ljIGdldHRlcjogJHtTdHJpbmcoa2V5KX1gKTtcbiAgfVxuICByZXR1cm4gdW5jdXJyeVRoaXMoZ2V0dGVyKSBhcyAodmFsdWU6IHVua25vd24pID0+IFQ7XG59XG5cbi8vIEVDTUFTY3JpcHQgaW50cmluc2ljcy4gQWxsIHJlYWQgaW50ZXJuYWwgc2xvdHMsIHNvIHRoZXkgd29yayBvbiB2YWx1ZXNcbi8vIGZyb20gYW55IHJlYWxtIGFuZCBhcmUgdW5hZmZlY3RlZCBieSBwcm90b3R5cGUgcGF0Y2hpbmcgaW4gYW55IHJlYWxtLlxuXG4vKiogYERhdGUucHJvdG90eXBlLmdldERhdGVgLCBmb3IgaW52YWxpZC1kYXRlIGNoZWNrcy4gKi9cbmV4cG9ydCBjb25zdCBkYXRlR2V0RGF0ZSA9IHVuY3VycnlUaGlzKERhdGUucHJvdG90eXBlLmdldERhdGUpO1xuLyoqIGBEYXRlLnByb3RvdHlwZS5nZXRUaW1lYC4gKi9cbmV4cG9ydCBjb25zdCBkYXRlR2V0VGltZSA9IHVuY3VycnlUaGlzKERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuLyoqIGBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ2AuICovXG5leHBvcnQgY29uc3QgZGF0ZVRvSVNPU3RyaW5nID0gdW5jdXJyeVRoaXMoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpO1xuLyoqIGBSZWdFeHAucHJvdG90eXBlLnNvdXJjZWAgZ2V0dGVyLiAqL1xuZXhwb3J0IGNvbnN0IHJlZ0V4cFNvdXJjZSA9IHByb3RvR2V0dGVyPHN0cmluZz4oUmVnRXhwLnByb3RvdHlwZSwgJ3NvdXJjZScpO1xuLyoqIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIuICovXG5leHBvcnQgY29uc3QgcmVnRXhwRmxhZ3MgPSBwcm90b0dldHRlcjxzdHJpbmc+KFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycpO1xuLyoqIGBBcnJheUJ1ZmZlci5wcm90b3R5cGUuYnl0ZUxlbmd0aGAgZ2V0dGVyIChpbnRlcm5hbCBzbG90IHJlYWQpLiAqL1xuZXhwb3J0IGNvbnN0IGFycmF5QnVmZmVyQnl0ZUxlbmd0aCA9IHByb3RvR2V0dGVyPG51bWJlcj4oXG4gIEFycmF5QnVmZmVyLnByb3RvdHlwZSxcbiAgJ2J5dGVMZW5ndGgnXG4pO1xuXG5jb25zdCBtYXBFbnRyaWVzID0gdW5jdXJyeVRoaXMoTWFwLnByb3RvdHlwZS5lbnRyaWVzKTtcbmNvbnN0IHNldFZhbHVlcyA9IHVuY3VycnlUaGlzKFNldC5wcm90b3R5cGUudmFsdWVzKTtcbmNvbnN0IG51bWJlclZhbHVlT2YgPSB1bmN1cnJ5VGhpcyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpO1xuY29uc3Qgc3RyaW5nVmFsdWVPZiA9IHVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUudmFsdWVPZik7XG5jb25zdCBib29sZWFuVmFsdWVPZiA9IHVuY3VycnlUaGlzKEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YpO1xuY29uc3QgYmlnSW50VmFsdWVPZiA9IHVuY3VycnlUaGlzKFxuICBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YgYXMgKHRoaXM6IHVua25vd24pID0+IGJpZ2ludFxuKTtcblxuY29uc3QgVHlwZWRBcnJheVByb3RvdHlwZTogb2JqZWN0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUYWcgPSBwcm90b0dldHRlcjxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICBUeXBlZEFycmF5UHJvdG90eXBlLFxuICBTeW1ib2wudG9TdHJpbmdUYWdcbik7XG5jb25zdCB0eXBlZEFycmF5QnVmZmVyID0gcHJvdG9HZXR0ZXI8QXJyYXlCdWZmZXJMaWtlPihcbiAgVHlwZWRBcnJheVByb3RvdHlwZSxcbiAgJ2J1ZmZlcidcbik7XG5jb25zdCB0eXBlZEFycmF5Qnl0ZU9mZnNldCA9IHByb3RvR2V0dGVyPG51bWJlcj4oXG4gIFR5cGVkQXJyYXlQcm90b3R5cGUsXG4gICdieXRlT2Zmc2V0J1xuKTtcbmNvbnN0IHR5cGVkQXJyYXlCeXRlTGVuZ3RoID0gcHJvdG9HZXR0ZXI8bnVtYmVyPihcbiAgVHlwZWRBcnJheVByb3RvdHlwZSxcbiAgJ2J5dGVMZW5ndGgnXG4pO1xuY29uc3QgdHlwZWRBcnJheUxlbmd0aCA9IHByb3RvR2V0dGVyPG51bWJlcj4oVHlwZWRBcnJheVByb3RvdHlwZSwgJ2xlbmd0aCcpO1xuY29uc3QgZGF0YVZpZXdCdWZmZXIgPSBwcm90b0dldHRlcjxBcnJheUJ1ZmZlckxpa2U+KFxuICBEYXRhVmlldy5wcm90b3R5cGUsXG4gICdidWZmZXInXG4pO1xuY29uc3QgZGF0YVZpZXdCeXRlT2Zmc2V0ID0gcHJvdG9HZXR0ZXI8bnVtYmVyPihcbiAgRGF0YVZpZXcucHJvdG90eXBlLFxuICAnYnl0ZU9mZnNldCdcbik7XG5jb25zdCBkYXRhVmlld0J5dGVMZW5ndGggPSBwcm90b0dldHRlcjxudW1iZXI+KFxuICBEYXRhVmlldy5wcm90b3R5cGUsXG4gICdieXRlTGVuZ3RoJ1xuKTtcbmNvbnN0IHNoYXJlZEFycmF5QnVmZmVyQnl0ZUxlbmd0aCA9IHByb3RvR2V0dGVyPG51bWJlcj4oXG4gIFNoYXJlZEFycmF5QnVmZmVyLnByb3RvdHlwZSxcbiAgJ2J5dGVMZW5ndGgnXG4pO1xuXG4vLyBIb3N0IChXSEFUV0cpIGNsYXNzZXMuIEluamVjdGVkIGludG8gdGhlIHNhbmRib3ggYnkgcmVmZXJlbmNlLCBzb1xuLy8gaW5zdGFuY2VzIGZyb20gYW55IHJlYWxtIGNhcnJ5IHRoZXNlIHByb3RvdHlwZXMsIGFuZCB0aGUgc2hhcmVkXG4vLyBwcm90b3R5cGVzIGFyZSByZWFjaGFibGUgZnJvbSB3b3JrZmxvdyBjb2RlLCB3aGljaCBtYWtlcyB0aGUgYm9vdC10aW1lXG4vLyBjYXB0dXJlIChyYXRoZXIgdGhhbiBhIGxpdmUgbG9va3VwKSBsb2FkLWJlYXJpbmcuXG5jb25zdCBoZWFkZXJzSXRlcmF0b3IgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdKTtcbmNvbnN0IHVybEhyZWZHZXR0ZXIgPSBwcm90b0dldHRlcjxzdHJpbmc+KFVSTC5wcm90b3R5cGUsICdocmVmJyk7XG5jb25zdCB1cmxTZWFyY2hQYXJhbXNUb1N0cmluZ01ldGhvZCA9IHVuY3VycnlUaGlzKFxuICBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnRvU3RyaW5nXG4pO1xuXG4vLyAtLS0tIFNhZmUgYWNjZXNzIHByaW1pdGl2ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCB7IGlzUHJveHkgfSA9IHR5cGVzO1xuXG5jb25zdCBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKTtcblxuLyoqXG4gKiBXaGV0aGVyIGFuIGFjY2Vzc29yIGlzIHByb3ZpZGVkIGJ5IHRoZSBlbmdpbmUgb3IgdGhlIGhvc3QsIHJhdGhlciB0aGFuXG4gKiBkZWZpbmVkIGJ5IHdvcmtmbG93IGNvZGUuIFNlcmlhbGl6YXRpb24gbXVzdCByZWFkIHNvbWUgcHJvcGVydGllcyB0aGF0IGFyZVxuICogYWNjZXNzb3JzIGJ5IGNvbnN0cnVjdGlvbiAoVjggZGVmaW5lcyBgc3RhY2tgIGFzIGFuIG93biBhY2Nlc3NvciBvbiBldmVyeVxuICogRXJyb3IgaW5zdGFuY2U7IE5vZGUgaW1wbGVtZW50cyBgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5tZXNzYWdlYCBpblxuICogSmF2YVNjcmlwdCksIGFuZCByZXBvcnRpbmcgdGhvc2Ugd291bGQgZHJvd24gdGhlIHNpZ25hbCBpbiBub2lzZS5cbiAqXG4gKiAtIEVuZ2luZSBhY2Nlc3NvcnMgYXJlIG5hdGl2ZSBjb2RlLCBkZXRlY3RlZCB2aWEgdGhlIGNhcHR1cmVkIGhvc3RcbiAqICAgYEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZ2AgKGNyb3NzLXJlYWxtLCB1bmludGVyY2VwdGFibGUpLiBCb3VuZFxuICogICBmdW5jdGlvbnMgYW5kIGNhbGxhYmxlIFByb3hpZXMgYWxzbyBwcmVzZW50IGFzIG5hdGl2ZSBjb2RlIGJ1dCBydW5cbiAqICAgd29ya2Zsb3cgY29kZSwgc28gYm90aCBhcmUgZXhjbHVkZWQgZmlyc3QuXG4gKiAtIEhvc3QgYnVpbHRpbnMgaW1wbGVtZW50ZWQgaW4gSmF2YVNjcmlwdCBhcmUgb3JkaW5hcnkgZnVuY3Rpb25zLCBidXQgdGhleVxuICogICBiZWxvbmcgdG8gdGhlIGhvc3QgcmVhbG0sIGRldGVjdGVkIGJ5IGNvbXBhcmluZyB0aGUgZnVuY3Rpb24nc1xuICogICBwcm90b3R5cGUgYWdhaW5zdCB0aGUgaG9zdCBgRnVuY3Rpb24ucHJvdG90eXBlYC4gV29ya2Zsb3cgY29kZSB0aGF0XG4gKiAgIHJlYWNoZXMgYSBob3N0IGZ1bmN0aW9uIGNhbiBgc2V0UHJvdG90eXBlT2ZgIGl0cyBvd24gZ2V0dGVyIHRvXG4gKiAgIGltcGVyc29uYXRlIHRoaXM7IHRoYXQgY29zdHMgYSBtaXNzaW5nIHJlcG9ydCBlbnRyeSwgbmV2ZXIgaW5jb3JyZWN0XG4gKiAgIG91dHB1dC5cbiAqXG4gKiBWOCdzIG5hdGl2ZSBgc3RhY2tgIGdldHRlciBjYW4gaXRzZWxmIGludm9rZSBhIHdvcmtmbG93LWRlZmluZWRcbiAqIGBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZWA7IHRoYXQgaW5kaXJlY3Rpb24gaXMgbm90IGRldGVjdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGlzRW5naW5lQWNjZXNzb3IoZ2V0dGVyOiBvYmplY3QpOiBib29sZWFuIHtcbiAgaWYgKGlzUHJveHkoZ2V0dGVyKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBBIGJvdW5kIGZ1bmN0aW9uIHN0cmluZ2lmaWVzIGFzIG5hdGl2ZSBjb2RlIGJ1dCBydW5zIGl0cyB0YXJnZXQuIFRoZVxuICAvLyBvbmUgcGFzc2l2ZSBkaXN0aW5ndWlzaGVyIFY4IGV4cG9zZXMgaXMgdGhlIGBuYW1lYCBvd24gcHJvcGVydHlcbiAgLy8gKGBcImJvdW5kIGZuXCJgKS4gV29ya2Zsb3cgY29kZSBjYW4gcmVkZWZpbmUgdGhlIG5hbWUgdG8gaGlkZSBpdDsgdGhhdFxuICAvLyBjb3N0cyBhIG1pc3NpbmcgcmVwb3J0IGVudHJ5LCBsaWtlIHRoZSBvdGhlciBpbXBlcnNvbmF0aW9uIGNhdmVhdHMuXG4gIGNvbnN0IG5hbWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdldHRlciwgJ25hbWUnKT8udmFsdWU7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgbmFtZS5zdGFydHNXaXRoKCdib3VuZCAnKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKFxuICAgIGZ1bmN0aW9uVG9TdHJpbmcoZ2V0dGVyIGFzICgpID0+IHVua25vd24pLmVuZHNXaXRoKCd7IFtuYXRpdmUgY29kZV0gfScpIHx8XG4gICAgUmVmbGVjdC5nZXRQcm90b3R5cGVPZihnZXR0ZXIpID09PSBGdW5jdGlvbi5wcm90b3R5cGVcbiAgKTtcbn1cblxuLyoqXG4gKiBSZWFkcyBgdmFsdWVba2V5XWAgd2l0aCBgW1tHZXRdXWAgc2VtYW50aWNzLCBidXQgdGhyb3VnaCBkZXNjcmlwdG9yczpcbiAqIHBsYWluIGRhdGEgcHJvcGVydGllcyBuZXZlciBpbnZva2UgYW55dGhpbmc7IGFjY2Vzc29yIHByb3BlcnRpZXMgYXJlXG4gKiBpbnZva2VkICh0aGUgZGF0YSBsaXZlcyBiZWhpbmQgdGhlbSkgYW5kIHJlY29yZGVkOyBwcm94aWVzIGZhbGwgYmFjayB0b1xuICogYSBwbGFpbiByZWFkICh0aGVpciB0cmFwcyBhcmUgdGhlIG9ubHkgYWNjZXNzIHBhdGgpIGFuZCBhcmUgcmVjb3JkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkUHJvcGVydHkodmFsdWU6IHVua25vd24sIGtleTogUHJvcGVydHlLZXkpOiB1bmtub3duIHtcbiAgaWYgKFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpc1Byb3h5KHZhbHVlKSkge1xuICAgIHJlY29yZFByb3h5KHZhbHVlKTtcbiAgICByZXR1cm4gKHZhbHVlIGFzIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pW2tleV07XG4gIH1cblxuICBsZXQgY3VycmVudDogb2JqZWN0IHwgbnVsbCA9IHZhbHVlO1xuICB3aGlsZSAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIGlmIChpc1Byb3h5KGN1cnJlbnQpKSB7XG4gICAgICAvLyBhIHByb3h5IGluIHRoZSBwcm90b3R5cGUgY2hhaW46IGl0cyB0cmFwcyBhbnN3ZXIgdGhlIGxvb2t1cFxuICAgICAgcmVjb3JkUHJveHkoY3VycmVudCk7XG4gICAgICByZXR1cm4gKHZhbHVlIGFzIFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4pW2tleV07XG4gICAgfVxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN1cnJlbnQsIGtleSk7XG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIHJldHVybiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0KSB7XG4gICAgICAgIGlmICghaXNFbmdpbmVBY2Nlc3NvcihkZXNjcmlwdG9yLmdldCkpIHtcbiAgICAgICAgICByZWNvcmRHdWVzdENvZGUoJ2dldHRlcicsIFN0cmluZyhrZXkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5nZXQuY2FsbCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBzZXR0ZXItb25seSBwcm9wZXJ0eVxuICAgIH1cbiAgICBjdXJyZW50ID0gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIGBrZXkgaW4gdmFsdWVgIHNlbWFudGljcyB3aXRob3V0IGZpcmluZyBwcm94eSB0cmFwcyBmb3Igb3JkaW5hcnlcbiAqIG9iamVjdHMuIFByb3hpZXMgZmFsbCBiYWNrIHRvIHRoZSBgaW5gIG9wZXJhdG9yIGFuZCBhcmUgcmVjb3JkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0eSh2YWx1ZTogdW5rbm93biwga2V5OiBQcm9wZXJ0eUtleSk6IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNQcm94eSh2YWx1ZSkpIHtcbiAgICByZWNvcmRQcm94eSh2YWx1ZSk7XG4gICAgcmV0dXJuIGtleSBpbiAodmFsdWUgYXMgb2JqZWN0KTtcbiAgfVxuXG4gIGxldCBjdXJyZW50OiBvYmplY3QgfCBudWxsID0gdmFsdWU7XG4gIHdoaWxlIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzUHJveHkoY3VycmVudCkpIHtcbiAgICAgIHJlY29yZFByb3h5KGN1cnJlbnQpO1xuICAgICAgcmV0dXJuIGtleSBpbiAodmFsdWUgYXMgb2JqZWN0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3VycmVudCwga2V5KSkgcmV0dXJuIHRydWU7XG4gICAgY3VycmVudCA9IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudCk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIGB2YWx1ZSBpbnN0YW5jZW9mIENgIHNlbWFudGljcyBmb3IgYSBrbm93biBgQy5wcm90b3R5cGVgLCB3aXRob3V0XG4gKiBjb25zdWx0aW5nIGBTeW1ib2wuaGFzSW5zdGFuY2VgICh3aGljaCB3b3JrZmxvdyBjb2RlIGNhbiBkZWZpbmUpLiBVc2VkXG4gKiBmb3IgaG9zdCBjbGFzc2VzIHRoYXQgYXJlIGluamVjdGVkIGludG8gdGhlIHNhbmRib3ggKEhlYWRlcnMsIFVSTCxcbiAqIFVSTFNlYXJjaFBhcmFtcywgRE9NRXhjZXB0aW9uKSwgd2hlcmUgdGhlIGluc3RhbmNlcyAoZnJvbSBhbnkgcmVhbG0gdGhlXG4gKiBob3N0IGhhbmRlZCB0aGUgY2xhc3MgdG8pIGNhcnJ5IHRoZSBob3N0IHByb3RvdHlwZSBpbiB0aGVpciBjaGFpbi5cbiAqXG4gKiBQcm94aWVzIGFyZSB3YWxrZWQgcmF0aGVyIHRoYW4gcmVqZWN0ZWQ6IGBSZWZsZWN0LmdldFByb3RvdHlwZU9mYCBmaXJlc1xuICogdGhlIHByb3h5J3MgYGdldFByb3RvdHlwZU9mYCB0cmFwLCBtYXRjaGluZyBgaW5zdGFuY2VvZmAgc2VtYW50aWNzLCBhbmRcbiAqIHJlYWwgdmFsdWVzIGRlcGVuZCBvbiB0aGF0OiBOZXh0LmpzIGhhbmRzIHRoZSBydW50aW1lIGEgcHJveGllZFxuICogYE5leHRSZXF1ZXN0YCwgYW5kIGFuc3dlcmluZyBcIm5vdCBhIFJlcXVlc3RcIiBmb3IgaXQgd291bGQgc2lsZW50bHkgYnJlYWtcbiAqIHdlYmhvb2tzLiBUaGUgdHJhcHMgYXJlIGd1ZXN0LW9ic2VydmFibGUsIHNvIHRoZSBwcm94eSBpcyByZWNvcmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFuY2VPZlByb3RvdHlwZShcbiAgdmFsdWU6IHVua25vd24sXG4gIHByb3RvdHlwZTogb2JqZWN0IHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgaWYgKCFwcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKGlzUHJveHkodmFsdWUpKSByZWNvcmRQcm94eSh2YWx1ZSk7XG4gIGxldCBjdXJyZW50OiBvYmplY3QgfCBudWxsID0gUmVmbGVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIHdoaWxlIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IHByb3RvdHlwZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzUHJveHkoY3VycmVudCkpIHJlY29yZFByb3h5KGN1cnJlbnQpO1xuICAgIGN1cnJlbnQgPSBSZWZsZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnQpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gLS0tLSBJbnRyaW5zaWMtYmFja2VkIGV4dHJhY3Rpb24gaGVscGVycyAodXNlZCBieSB0aGUgcmVkdWNlcnMpIC0tLS0tLS0tLS0tLS1cbi8vXG4vLyBJbnRyaW5zaWNzIHJlYWQgaW50ZXJuYWwgc2xvdHMsIHdoaWNoIGEgUHJveHkgZG9lcyBub3QgaGF2ZTogaW52b2tpbmcgb25lXG4vLyB3aXRoIGEgcHJveHkgcmVjZWl2ZXIgdGhyb3dzLCB3aGVyZSB0aGUgcHJlLWV4aXN0aW5nIGR5bmFtaWMgcmVhZCBmb3J3YXJkZWRcbi8vIHRocm91Z2ggdGhlIHRyYXAuIEZvciB0aGUgKHJhcmUpIHByb3h5IGNhc2UsIGZhbGwgYmFjayB0byB0aGUgZHluYW1pYyByZWFkXG4vLyBzbyBiZWhhdmlvciBpcyB1bmNoYW5nZWQsIGFuZCByZWNvcmQgdGhhdCB0aGUgdHJhcHMgcmFuLlxuXG4vKiogYFVSTC5wcm90b3R5cGUuaHJlZmAgZ2V0dGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybEhyZWYodmFsdWU6IFVSTCk6IHN0cmluZyB7XG4gIGlmIChpc1Byb3h5KHZhbHVlKSkge1xuICAgIHJlY29yZFByb3h5KHZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWUuaHJlZjtcbiAgfVxuICByZXR1cm4gdXJsSHJlZkdldHRlcih2YWx1ZSk7XG59XG5cbi8qKiBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ2A6IHJldHVybnMgYCcnYCBpZmYgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsU2VhcmNoUGFyYW1zVG9TdHJpbmcodmFsdWU6IFVSTFNlYXJjaFBhcmFtcyk6IHN0cmluZyB7XG4gIGlmIChpc1Byb3h5KHZhbHVlKSkge1xuICAgIHJlY29yZFByb3h5KHZhbHVlKTtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdXJsU2VhcmNoUGFyYW1zVG9TdHJpbmdNZXRob2QodmFsdWUpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIGEgSGVhZGVycyBpbnN0YW5jZSB0aHJvdWdoIHRoZSBjYXB0dXJlZCBob3N0IGl0ZXJhdG9yLCBzbyB0aGVcbiAqIGl0ZXJhdG9yIG9iamVjdCwgYW5kIGl0cyBgbmV4dGAsIGFyZSBob3N0LXJlYWxtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGVhZGVyc1RvRW50cmllcyh2YWx1ZTogSGVhZGVycyk6IFtzdHJpbmcsIHN0cmluZ11bXSB7XG4gIGlmIChpc1Byb3h5KHZhbHVlKSkge1xuICAgIHJlY29yZFByb3h5KHZhbHVlKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSkgYXMgW3N0cmluZywgc3RyaW5nXVtdO1xuICB9XG4gIHJldHVybiBbLi4uaGVhZGVyc0l0ZXJhdG9yKHZhbHVlKV0gYXMgW3N0cmluZywgc3RyaW5nXVtdO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIGEgZ2VudWluZSBNYXAncyBlbnRyaWVzIGVudGlyZWx5IHRocm91Z2ggaG9zdCBpbnRyaW5zaWNzOiB0aGVcbiAqIGl0ZXJhdG9yIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHRoZSBob3N0IGBNYXAucHJvdG90eXBlLmVudHJpZXNgLCBzbyBpdHNcbiAqIHJlYWxtLCBhbmQgdGhlcmVmb3JlIGl0cyBgbmV4dGAsIGlzIHRoZSBob3N0J3MsIG5vdCB0aGUgc2FuZGJveCdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9FbnRyaWVzKFxuICB2YWx1ZTogTWFwPHVua25vd24sIHVua25vd24+XG4pOiBbdW5rbm93biwgdW5rbm93bl1bXSB7XG4gIHJldHVybiBbLi4ubWFwRW50cmllcyh2YWx1ZSldO1xufVxuXG4vKiogU2VlIHtAbGluayBtYXBUb0VudHJpZXN9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRvVmFsdWVzKHZhbHVlOiBTZXQ8dW5rbm93bj4pOiB1bmtub3duW10ge1xuICByZXR1cm4gWy4uLnNldFZhbHVlcyh2YWx1ZSldO1xufVxuXG4vKipcbiAqIFRoZSBieXRlcyBvZiBhbiBgQXJyYXlCdWZmZXJWaWV3YCwgcmVhZCB2aWEgaW50ZXJuYWwtc2xvdCBnZXR0ZXJzLCBzb1xuICogb3duLXByb3BlcnR5IHNoYWRvd2luZyBhbmQgcHJvdG90eXBlIHBhdGNoZXMgY2Fubm90IGNoYW5nZSB3aGljaCBieXRlc1xuICogYXJlIHNlcmlhbGl6ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aWV3SW5mbyh2YWx1ZTogQXJyYXlCdWZmZXJWaWV3KToge1xuICBidWZmZXI6IEFycmF5QnVmZmVyTGlrZTtcbiAgYnl0ZU9mZnNldDogbnVtYmVyO1xuICBieXRlTGVuZ3RoOiBudW1iZXI7XG59IHtcbiAgaWYgKHR5cGVzLmlzRGF0YVZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcjogZGF0YVZpZXdCdWZmZXIodmFsdWUpLFxuICAgICAgYnl0ZU9mZnNldDogZGF0YVZpZXdCeXRlT2Zmc2V0KHZhbHVlKSxcbiAgICAgIGJ5dGVMZW5ndGg6IGRhdGFWaWV3Qnl0ZUxlbmd0aCh2YWx1ZSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGJ1ZmZlcjogdHlwZWRBcnJheUJ1ZmZlcih2YWx1ZSksXG4gICAgYnl0ZU9mZnNldDogdHlwZWRBcnJheUJ5dGVPZmZzZXQodmFsdWUpLFxuICAgIGJ5dGVMZW5ndGg6IHR5cGVkQXJyYXlCeXRlTGVuZ3RoKHZhbHVlKSxcbiAgfTtcbn1cblxuLy8gLS0tLSBIYXJkZW5lZCBkZXZhbHVlIG9wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gVGhlIHdvcmtmbG93IHJlZHVjZXJzIGNsYWltIG1vc3Qgc3BlY2lhbCB0eXBlcyBiZWZvcmUgZGV2YWx1ZSdzIGJ1aWx0LWluXG4vLyBoYW5kbGluZyBydW5zLCBzbyB0aGVzZSBvcGVyYXRpb25zIG1haW5seSBnb3Zlcm4gcGxhaW4gb2JqZWN0cywgYXJyYXlzLFxuLy8gYm94ZWQgcHJpbWl0aXZlcywgdGhlbmFibGUgcHJvYmVzLCBhbmQgY2xhc3NpZmljYXRpb24gKGB0YWdPZmApLCB3aGljaFxuLy8gcnVucyBmb3IgZXZlcnkgb2JqZWN0IHRoZSByZWR1Y2VycyBkaWQgbm90IGNsYWltLlxuXG5jb25zdCBLTk9XTl9WSUVXX1RBR1MgPSBuZXcgU2V0KFtcbiAgJ0ludDhBcnJheScsXG4gICdVaW50OEFycmF5JyxcbiAgJ1VpbnQ4Q2xhbXBlZEFycmF5JyxcbiAgJ0ludDE2QXJyYXknLFxuICAnVWludDE2QXJyYXknLFxuICAnRmxvYXQxNkFycmF5JyxcbiAgJ0ludDMyQXJyYXknLFxuICAnVWludDMyQXJyYXknLFxuICAnRmxvYXQzMkFycmF5JyxcbiAgJ0Zsb2F0NjRBcnJheScsXG4gICdCaWdJbnQ2NEFycmF5JyxcbiAgJ0JpZ1VpbnQ2NEFycmF5Jyxcbl0pO1xuXG4vKipcbiAqIFRhZ3MgdGhhdCB7QGxpbmsgYnJhbmRPZn0gZGVjaWRlcyBhdXRob3JpdGF0aXZlbHkuIElmIHRoZSBicmFuZCBjaGVjayBzYWlkXG4gKiBcIm5vdCBvbmUgb2YgdGhlc2VcIiB0aGVuIGEgYFN5bWJvbC50b1N0cmluZ1RhZ2AgY2xhaW1pbmcgb25lIGlzIGEgc3Bvb2YsIGFuZFxuICogaG9ub3VyaW5nIGl0IHdvdWxkIHJvdXRlIHRoZSB2YWx1ZSBpbnRvIGFuIGV4dHJhY3RvciB0aGF0IHJlcXVpcmVzIHRoZSByZWFsXG4gKiBpbnRlcm5hbCBzbG90IChgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Agc2VtYW50aWNzIGxldCBhbnkgb2JqZWN0IGNsYWltXG4gKiBgW29iamVjdCBEYXRlXWApLiBVbmJyYW5kZWQgdmFsdWVzIHRoYXQgY2xhaW0gb25lIG9mIHRoZXNlIGFyZSBjbGFzc2lmaWVkXG4gKiBhcyBwbGFpbiBvYmplY3RzIGluc3RlYWQuXG4gKi9cbmNvbnN0IEJSQU5EX0RFQ0lERURfVEFHUyA9IG5ldyBTZXQoW1xuICAnRGF0ZScsXG4gICdSZWdFeHAnLFxuICAnTWFwJyxcbiAgJ1NldCcsXG4gICdBcnJheScsXG4gICdEYXRhVmlldycsXG4gICdBcnJheUJ1ZmZlcicsXG4gICdTaGFyZWRBcnJheUJ1ZmZlcicsXG4gICdOdW1iZXInLFxuICAnU3RyaW5nJyxcbiAgJ0Jvb2xlYW4nLFxuICAnQmlnSW50JyxcbiAgJ1VSTCcsXG4gICdVUkxTZWFyY2hQYXJhbXMnLFxuICAuLi5LTk9XTl9WSUVXX1RBR1MsXG5dKTtcblxuLyoqXG4gKiBDbGFzc2lmaWVzIGEgdmFsdWUgYnkgZW5naW5lIGJyYW5kLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vIGJyYW5kXG4gKiBtYXRjaGVzICh0aGUgY2FsbGVyIGZhbGxzIGJhY2sgdG8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agc2VtYW50aWNzKS5cbiAqL1xuZnVuY3Rpb24gYnJhbmRPZih2YWx1ZTogb2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVzLmlzRGF0ZSh2YWx1ZSkpIHJldHVybiAnRGF0ZSc7XG4gIGlmICh0eXBlcy5pc1JlZ0V4cCh2YWx1ZSkpIHJldHVybiAnUmVnRXhwJztcbiAgaWYgKHR5cGVzLmlzTWFwKHZhbHVlKSkgcmV0dXJuICdNYXAnO1xuICBpZiAodHlwZXMuaXNTZXQodmFsdWUpKSByZXR1cm4gJ1NldCc7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuICdBcnJheSc7XG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgdGFnID0gdHlwZWRBcnJheVRhZyh2YWx1ZSk7XG4gICAgcmV0dXJuIHRhZyAhPT0gdW5kZWZpbmVkICYmIEtOT1dOX1ZJRVdfVEFHUy5oYXModGFnKSA/IHRhZyA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodHlwZXMuaXNEYXRhVmlldyh2YWx1ZSkpIHJldHVybiAnRGF0YVZpZXcnO1xuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkpIHJldHVybiAnQXJyYXlCdWZmZXInO1xuICBpZiAodHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcih2YWx1ZSkpIHJldHVybiAnU2hhcmVkQXJyYXlCdWZmZXInO1xuICBpZiAodHlwZXMuaXNOdW1iZXJPYmplY3QodmFsdWUpKSByZXR1cm4gJ051bWJlcic7XG4gIGlmICh0eXBlcy5pc1N0cmluZ09iamVjdCh2YWx1ZSkpIHJldHVybiAnU3RyaW5nJztcbiAgaWYgKHR5cGVzLmlzQm9vbGVhbk9iamVjdCh2YWx1ZSkpIHJldHVybiAnQm9vbGVhbic7XG4gIGlmICh0eXBlcy5pc0JpZ0ludE9iamVjdCh2YWx1ZSkpIHJldHVybiAnQmlnSW50JztcbiAgaWYgKGlzSW5zdGFuY2VPZlByb3RvdHlwZSh2YWx1ZSwgVVJMLnByb3RvdHlwZSkpIHJldHVybiAnVVJMJztcbiAgaWYgKGlzSW5zdGFuY2VPZlByb3RvdHlwZSh2YWx1ZSwgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gJ1VSTFNlYXJjaFBhcmFtcyc7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZWFkcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB0aGUgd2F5IGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB3b3VsZCxcbiAqIGJ1dCB0aHJvdWdoIGRlc2NyaXB0b3JzOiBhIGRhdGEtcHJvcGVydHkgdGFnICh0aGUgY29tbW9uIGNhc2UsIGUuZy5cbiAqIFRlbXBvcmFsIHBvbHlmaWxscykgY29zdHMgbm8gd29ya2Zsb3ctY29kZSBleGVjdXRpb247IGFuIGFjY2Vzc29yIHRhZyBpc1xuICogaW52b2tlZCAoY29tcGF0KSBhbmQgcmVjb3JkZWQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRUb1N0cmluZ1RhZyh2YWx1ZTogb2JqZWN0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdGFnID0gcmVhZFByb3BlcnR5KHZhbHVlLCBTeW1ib2wudG9TdHJpbmdUYWcpO1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyB0YWcgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBoYXJkZW5lZFN0cmluZ2lmeU9wZXJhdGlvbnM6IFBhcnRpYWw8U3RyaW5naWZ5T3BlcmF0aW9ucz4gPSB7XG4gIHRhZ09mOiAodmFsdWU6IG9iamVjdCkgPT4ge1xuICAgIGlmIChpc1Byb3h5KHZhbHVlKSkge1xuICAgICAgLy8gQSBwcm94eSdzIGNsYXNzaWZpY2F0aW9uIGlzIGFuc3dlcmVkIGJ5IGl0cyB0cmFwcywgd2hpY2ggaXMgdGhlXG4gICAgICAvLyBvbmx5IGFjY2VzcyBwYXRoIHRoZXJlIGlzLiBSZWNvcmQgaXQgYW5kIHByZXNlcnZlIHRvZGF5J3NcbiAgICAgIC8vIGJlaGF2aW9yIGZvciBldmVyeXRoaW5nIGRvd25zdHJlYW0uXG4gICAgICByZWNvcmRQcm94eSh2YWx1ZSk7XG4gICAgICByZXR1cm4gZGVmYXVsdFN0cmluZ2lmeU9wZXJhdGlvbnMudGFnT2YodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBicmFuZCA9IGJyYW5kT2YodmFsdWUpO1xuICAgIGlmIChicmFuZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYnJhbmQ7XG4gICAgLy8gTm8gZW5naW5lIGJyYW5kIG1hdGNoZWQuIEEgYFN5bWJvbC50b1N0cmluZ1RhZ2AgaXMgc3RpbGwgbWVhbmluZ2Z1bCBmb3JcbiAgICAvLyB0eXBlcyBkZXZhbHVlIGlkZW50aWZpZXMgdGhhdCB3YXkgKGBUZW1wb3JhbC4qYCksIGJ1dCBvbmUgbmFtaW5nIGFcbiAgICAvLyBicmFuZC1kZWNpZGVkIHR5cGUgaXMgYSBzcG9vZiBhbmQgaXMgaWdub3JlZC5cbiAgICBjb25zdCB0YWcgPSByZWFkVG9TdHJpbmdUYWcodmFsdWUpO1xuICAgIGlmICh0YWcgPT09IHVuZGVmaW5lZCB8fCBCUkFORF9ERUNJREVEX1RBR1MuaGFzKHRhZykpIHJldHVybiAnT2JqZWN0JztcbiAgICByZXR1cm4gdGFnO1xuICB9LFxuXG4gIGlzVGhlbmFibGU6ICh2YWx1ZTogeyB0aGVuPzogdW5rbm93biB9KSA9PiB7XG4gICAgaWYgKHR5cGVzLmlzUHJvbWlzZSh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0eXBlb2YgcmVhZFByb3BlcnR5KHZhbHVlLCAndGhlbicpID09PSAnZnVuY3Rpb24nO1xuICB9LFxuXG4gIHVuYm94OiAoYm94ZWQ6IG9iamVjdCkgPT4ge1xuICAgIGlmICh0eXBlcy5pc051bWJlck9iamVjdChib3hlZCkpIHJldHVybiBudW1iZXJWYWx1ZU9mKGJveGVkKTtcbiAgICBpZiAodHlwZXMuaXNTdHJpbmdPYmplY3QoYm94ZWQpKSByZXR1cm4gc3RyaW5nVmFsdWVPZihib3hlZCk7XG4gICAgaWYgKHR5cGVzLmlzQm9vbGVhbk9iamVjdChib3hlZCkpIHJldHVybiBib29sZWFuVmFsdWVPZihib3hlZCk7XG4gICAgcmV0dXJuIGJpZ0ludFZhbHVlT2YoYm94ZWQpO1xuICB9LFxuXG4gIHRvSVNPU3RyaW5nOiAoZGF0ZTogRGF0ZSkgPT5cbiAgICBOdW1iZXIuaXNOYU4oZGF0ZUdldERhdGUoZGF0ZSkpID8gJycgOiBkYXRlVG9JU09TdHJpbmcoZGF0ZSksXG5cbiAgdG9TdHJpbmdWYWx1ZTogKHZhbHVlOiBvYmplY3QpID0+IHtcbiAgICAvLyBSZWFjaGVkIGZvciBVUkwgLyBVUkxTZWFyY2hQYXJhbXMgKHdoZW4gdGhlIHJlZHVjZXJzIGRpZCBub3QgY2xhaW1cbiAgICAvLyB0aGVtLCBlLmcuIGluc3RhbmNlcyBvZiBhIGRpZmZlcmVudCByZWFsbSdzIGNsYXNzZXMpIGFuZCBmb3JcbiAgICAvLyB0b1N0cmluZ1RhZy1icmFuZGVkIG9iamVjdHMgbGlrZSBUZW1wb3JhbCBwb2x5ZmlsbHMsIHdob3NlIHN0cmluZ1xuICAgIC8vIGZvcm0gb25seSB0aGVpciBvd24gdG9TdHJpbmcoKSBjYW4gcHJvZHVjZS5cbiAgICBpZiAoaXNJbnN0YW5jZU9mUHJvdG90eXBlKHZhbHVlLCBVUkwucHJvdG90eXBlKSkge1xuICAgICAgcmV0dXJuIHVybEhyZWYodmFsdWUgYXMgVVJMKTtcbiAgICB9XG4gICAgaWYgKGlzSW5zdGFuY2VPZlByb3RvdHlwZSh2YWx1ZSwgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZSkpIHtcbiAgICAgIHJldHVybiB1cmxTZWFyY2hQYXJhbXNUb1N0cmluZyh2YWx1ZSBhcyBVUkxTZWFyY2hQYXJhbXMpO1xuICAgIH1cbiAgICByZWNvcmRHdWVzdENvZGUoXG4gICAgICAnbWV0aG9kJyxcbiAgICAgIGB0b1N0cmluZyAoJHtyZWFkVG9TdHJpbmdUYWcodmFsdWUpID8/ICd1bmtub3duJ30pYFxuICAgICk7XG4gICAgcmV0dXJuICh2YWx1ZSBhcyB7IHRvU3RyaW5nKCk6IHN0cmluZyB9KS50b1N0cmluZygpO1xuICB9LFxuXG4gIHJlZ0V4cEluZm86IChyZWdleHA6IFJlZ0V4cCkgPT4gKHtcbiAgICBzb3VyY2U6IHJlZ0V4cFNvdXJjZShyZWdleHApLFxuICAgIGZsYWdzOiByZWdFeHBGbGFncyhyZWdleHApLFxuICB9KSxcblxuICB2YWx1ZXNPZjogKHNldDogU2V0PHVua25vd24+KSA9PiBzZXRUb1ZhbHVlcyhzZXQpLFxuICBlbnRyaWVzT2Y6IChtYXA6IE1hcDx1bmtub3duLCB1bmtub3duPikgPT5cbiAgICBtYXBUb0VudHJpZXMobWFwKSBhcyBbdW5rbm93biwgdW5rbm93bl1bXSxcblxuICB2aWV3SW5mbzogKHZpZXc6IEFycmF5QnVmZmVyVmlldykgPT4ge1xuICAgIGNvbnN0IGluZm8gPSB2aWV3SW5mbyh2aWV3KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW5mbyxcbiAgICAgIC8vIGRldmFsdWUgb25seSByZWFkcyBgbGVuZ3RoYCBmb3IgdHlwZWQtYXJyYXkgc3Vidmlld3M7IERhdGFWaWV3XG4gICAgICAvLyBzdWJ2aWV3cyBhcmUgZW5jb2RlZCBmcm9tIGBieXRlTGVuZ3RoYC5cbiAgICAgIGxlbmd0aDogdHlwZXMuaXNEYXRhVmlldyh2aWV3KSA/IDAgOiB0eXBlZEFycmF5TGVuZ3RoKHZpZXcpLFxuICAgICAgYnVmZmVyQnl0ZUxlbmd0aDogdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihpbmZvLmJ1ZmZlcilcbiAgICAgICAgPyBzaGFyZWRBcnJheUJ1ZmZlckJ5dGVMZW5ndGgoaW5mby5idWZmZXIpXG4gICAgICAgIDogYXJyYXlCdWZmZXJCeXRlTGVuZ3RoKGluZm8uYnVmZmVyKSxcbiAgICB9O1xuICB9LFxuXG4gIHNoYXBlT2Y6ICh2YWx1ZTogb2JqZWN0KSA9PiB7XG4gICAgaWYgKGlzUHJveHkodmFsdWUpKSByZWNvcmRQcm94eSh2YWx1ZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRTdHJpbmdpZnlPcGVyYXRpb25zLnNoYXBlT2YodmFsdWUpO1xuICB9LFxuXG4gIGdldDogKHZhbHVlOiBvYmplY3QsIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiByZWFkUHJvcGVydHkodmFsdWUsIGtleSksXG59O1xuIl19
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Serialization module public API.
2
+ * Serialization module: public API.
3
3
  *
4
4
  * Re-exports the mode-specific serialize/deserialize functions and
5
5
  * the codec/format/encryption abstractions.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Serialization module public API.
2
+ * Serialization module: public API.
3
3
  *
4
4
  * Re-exports the mode-specific serialize/deserialize functions and
5
5
  * the codec/format/encryption abstractions.
@@ -19,4 +19,4 @@ import * as workflow from './workflow.js';
19
19
  export { workflow, step, client };
20
20
  // Re-export revive helper (used by legacy compat in serialization.ts)
21
21
  export { revive } from './reducers/common.js';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxtQ0FBbUM7QUFDbkMsT0FBTyxFQUNMLHFCQUFxQixFQUdyQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksR0FDYixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLGtDQUFrQztBQUNsQyxPQUFPLEVBRUwsT0FBTyxFQUVQLE9BQU8sR0FDUixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLG9DQUFvQztBQUNwQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBV3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakUsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsZ0RBQWdEO0FBQ2hELE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRWxDLHNFQUFzRTtBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcmlhbGl6YXRpb24gbW9kdWxlIOKAlCBwdWJsaWMgQVBJLlxuICpcbiAqIFJlLWV4cG9ydHMgdGhlIG1vZGUtc3BlY2lmaWMgc2VyaWFsaXplL2Rlc2VyaWFsaXplIGZ1bmN0aW9ucyBhbmRcbiAqIHRoZSBjb2RlYy9mb3JtYXQvZW5jcnlwdGlvbiBhYnN0cmFjdGlvbnMuXG4gKi9cblxuLy8gUmUtZXhwb3J0IGNvZGVjIGludGVyZmFjZSBhbmQgbW9kZSB0eXBlXG5leHBvcnQgdHlwZSB7IENvZGVjLCBDb2RlY09wdGlvbnMsIFNlcmlhbGl6YXRpb25Nb2RlIH0gZnJvbSAnLi9jb2RlYy5qcyc7XG5leHBvcnQgeyBkZXZhbHVlQ29kZWMgfSBmcm9tICcuL2NvZGVjLWRldmFsdWUuanMnO1xuLy8gUmUtZXhwb3J0IGNvbXBvc2FibGUgY29tcHJlc3Npb25cbmV4cG9ydCB7XG4gIENPTVBSRVNTSU9OX01JTl9CWVRFUyxcbiAgdHlwZSBDb21wcmVzc2lvbkNvZGVjLFxuICB0eXBlIENvbXByZXNzaW9uU3RhdHMsXG4gIGNvbXByZXNzLFxuICBkZWNvbXByZXNzLFxuICBpc0NvbXByZXNzZWQsXG59IGZyb20gJy4vY29tcHJlc3Npb24uanMnO1xuLy8gUmUtZXhwb3J0IGNvbXBvc2FibGUgZW5jcnlwdGlvblxuZXhwb3J0IHtcbiAgdHlwZSBDcnlwdG9LZXksXG4gIGRlY3J5cHQsXG4gIHR5cGUgRW5jcnlwdGlvbktleVBhcmFtLFxuICBlbmNyeXB0LFxufSBmcm9tICcuL2VuY3J5cHRpb24uanMnO1xuLy8gUmUtZXhwb3J0IGZvcm1hdCBwcmVmaXggdXRpbGl0aWVzXG5leHBvcnQge1xuICBkZWNvZGVGb3JtYXRQcmVmaXgsXG4gIGVuY29kZVdpdGhGb3JtYXRQcmVmaXgsXG4gIGlzRW5jcnlwdGVkLFxuICBwZWVrRm9ybWF0UHJlZml4LFxufSBmcm9tICcuL2Zvcm1hdC5qcyc7XG4vLyBSZS1leHBvcnQgaGFyZGVuZWQtc2VyaWFsaXphdGlvbiBvYnNlcnZhdGlvbiB0eXBlcyAocG9wdWxhdGVkIHZpYVxuLy8gYENvZGVjT3B0aW9ucy5ndWVzdENvZGVTdGF0c2ApXG5leHBvcnQgdHlwZSB7IEd1ZXN0Q29kZUV4ZWN1dGlvbiwgR3Vlc3RDb2RlU3RhdHMgfSBmcm9tICcuL2hhcmRlbmVkLmpzJztcbi8vIFJlLWV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBGb3JtYXRQcmVmaXgsXG4gIFJlZHVjZXJzLFxuICBSZXZpdmVycyxcbiAgU2VyaWFsaXphYmxlU3BlY2lhbCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBpc0Zvcm1hdFByZWZpeCwgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5pbXBvcnQgKiBhcyBjbGllbnQgZnJvbSAnLi9jbGllbnQuanMnO1xuaW1wb3J0ICogYXMgc3RlcCBmcm9tICcuL3N0ZXAuanMnO1xuLy8gUmUtZXhwb3J0IG1vZGUtc3BlY2lmaWMgbW9kdWxlcyBhcyBuYW1lc3BhY2VzXG5pbXBvcnQgKiBhcyB3b3JrZmxvdyBmcm9tICcuL3dvcmtmbG93LmpzJztcbmV4cG9ydCB7IHdvcmtmbG93LCBzdGVwLCBjbGllbnQgfTtcblxuLy8gUmUtZXhwb3J0IHJldml2ZSBoZWxwZXIgKHVzZWQgYnkgbGVnYWN5IGNvbXBhdCBpbiBzZXJpYWxpemF0aW9uLnRzKVxuZXhwb3J0IHsgcmV2aXZlIH0gZnJvbSAnLi9yZWR1Y2Vycy9jb21tb24uanMnO1xuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxtQ0FBbUM7QUFDbkMsT0FBTyxFQUNMLHFCQUFxQixFQUdyQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksR0FDYixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLGtDQUFrQztBQUNsQyxPQUFPLEVBRUwsT0FBTyxFQUVQLE9BQU8sR0FDUixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLG9DQUFvQztBQUNwQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixXQUFXLEVBQ1gsZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBV3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakUsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsZ0RBQWdEO0FBQ2hELE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRWxDLHNFQUFzRTtBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcmlhbGl6YXRpb24gbW9kdWxlOiBwdWJsaWMgQVBJLlxuICpcbiAqIFJlLWV4cG9ydHMgdGhlIG1vZGUtc3BlY2lmaWMgc2VyaWFsaXplL2Rlc2VyaWFsaXplIGZ1bmN0aW9ucyBhbmRcbiAqIHRoZSBjb2RlYy9mb3JtYXQvZW5jcnlwdGlvbiBhYnN0cmFjdGlvbnMuXG4gKi9cblxuLy8gUmUtZXhwb3J0IGNvZGVjIGludGVyZmFjZSBhbmQgbW9kZSB0eXBlXG5leHBvcnQgdHlwZSB7IENvZGVjLCBDb2RlY09wdGlvbnMsIFNlcmlhbGl6YXRpb25Nb2RlIH0gZnJvbSAnLi9jb2RlYy5qcyc7XG5leHBvcnQgeyBkZXZhbHVlQ29kZWMgfSBmcm9tICcuL2NvZGVjLWRldmFsdWUuanMnO1xuLy8gUmUtZXhwb3J0IGNvbXBvc2FibGUgY29tcHJlc3Npb25cbmV4cG9ydCB7XG4gIENPTVBSRVNTSU9OX01JTl9CWVRFUyxcbiAgdHlwZSBDb21wcmVzc2lvbkNvZGVjLFxuICB0eXBlIENvbXByZXNzaW9uU3RhdHMsXG4gIGNvbXByZXNzLFxuICBkZWNvbXByZXNzLFxuICBpc0NvbXByZXNzZWQsXG59IGZyb20gJy4vY29tcHJlc3Npb24uanMnO1xuLy8gUmUtZXhwb3J0IGNvbXBvc2FibGUgZW5jcnlwdGlvblxuZXhwb3J0IHtcbiAgdHlwZSBDcnlwdG9LZXksXG4gIGRlY3J5cHQsXG4gIHR5cGUgRW5jcnlwdGlvbktleVBhcmFtLFxuICBlbmNyeXB0LFxufSBmcm9tICcuL2VuY3J5cHRpb24uanMnO1xuLy8gUmUtZXhwb3J0IGZvcm1hdCBwcmVmaXggdXRpbGl0aWVzXG5leHBvcnQge1xuICBkZWNvZGVGb3JtYXRQcmVmaXgsXG4gIGVuY29kZVdpdGhGb3JtYXRQcmVmaXgsXG4gIGlzRW5jcnlwdGVkLFxuICBwZWVrRm9ybWF0UHJlZml4LFxufSBmcm9tICcuL2Zvcm1hdC5qcyc7XG4vLyBSZS1leHBvcnQgaGFyZGVuZWQtc2VyaWFsaXphdGlvbiBvYnNlcnZhdGlvbiB0eXBlcyAocG9wdWxhdGVkIHZpYVxuLy8gYENvZGVjT3B0aW9ucy5ndWVzdENvZGVTdGF0c2ApXG5leHBvcnQgdHlwZSB7IEd1ZXN0Q29kZUV4ZWN1dGlvbiwgR3Vlc3RDb2RlU3RhdHMgfSBmcm9tICcuL2hhcmRlbmVkLmpzJztcbi8vIFJlLWV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUge1xuICBGb3JtYXRQcmVmaXgsXG4gIFJlZHVjZXJzLFxuICBSZXZpdmVycyxcbiAgU2VyaWFsaXphYmxlU3BlY2lhbCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBpc0Zvcm1hdFByZWZpeCwgU2VyaWFsaXphdGlvbkZvcm1hdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5pbXBvcnQgKiBhcyBjbGllbnQgZnJvbSAnLi9jbGllbnQuanMnO1xuaW1wb3J0ICogYXMgc3RlcCBmcm9tICcuL3N0ZXAuanMnO1xuLy8gUmUtZXhwb3J0IG1vZGUtc3BlY2lmaWMgbW9kdWxlcyBhcyBuYW1lc3BhY2VzXG5pbXBvcnQgKiBhcyB3b3JrZmxvdyBmcm9tICcuL3dvcmtmbG93LmpzJztcbmV4cG9ydCB7IHdvcmtmbG93LCBzdGVwLCBjbGllbnQgfTtcblxuLy8gUmUtZXhwb3J0IHJldml2ZSBoZWxwZXIgKHVzZWQgYnkgbGVnYWN5IGNvbXBhdCBpbiBzZXJpYWxpemF0aW9uLnRzKVxuZXhwb3J0IHsgcmV2aXZlIH0gZnJvbSAnLi9yZWR1Y2Vycy9jb21tb24uanMnO1xuIl19
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * VM-compatible copy: identical semantics to class.ts before the host-side
3
3
  * hardening (#3257) made that module depend on `serialization/hardened.ts`
4
- * (which imports `node:util` and captures host intrinsics meaningless
4
+ * (which imports `node:util` and captures host intrinsics, meaningless
5
5
  * and unbundleable inside the QuickJS VM, where the codec already runs in
6
6
  * the guest realm). The host/guest boundary hardening for the QuickJS
7
7
  * engine lands with the host-side serde (#3263), which retires this
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * VM-compatible copy: identical semantics to class.ts before the host-side
3
3
  * hardening (#3257) made that module depend on `serialization/hardened.ts`
4
- * (which imports `node:util` and captures host intrinsics meaningless
4
+ * (which imports `node:util` and captures host intrinsics, meaningless
5
5
  * and unbundleable inside the QuickJS VM, where the codec already runs in
6
6
  * the guest realm). The host/guest boundary hardening for the QuickJS
7
7
  * engine lands with the host-side serde (#3263), which retires this
@@ -74,4 +74,4 @@ export function getClassRevivers(global = globalThis) {
74
74
  },
75
75
  };
76
76
  }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtdm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9yZWR1Y2Vycy9jbGFzcy12bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNIOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3JFLHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxtRUFBbUU7UUFDbkUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBSSxLQUFhLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzlELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXBELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzFDLElBQUksT0FBTyxTQUFTLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUVsRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQzVCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyx5Q0FBeUMsQ0FDaEcsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFNBQThCLFVBQVU7SUFFeEMsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUV4QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFJLEdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLDRCQUE0QixNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUNwRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWTS1jb21wYXRpYmxlIGNvcHk6IGlkZW50aWNhbCBzZW1hbnRpY3MgdG8gY2xhc3MudHMgYmVmb3JlIHRoZSBob3N0LXNpZGVcbiAqIGhhcmRlbmluZyAoIzMyNTcpIG1hZGUgdGhhdCBtb2R1bGUgZGVwZW5kIG9uIGBzZXJpYWxpemF0aW9uL2hhcmRlbmVkLnRzYFxuICogKHdoaWNoIGltcG9ydHMgYG5vZGU6dXRpbGAgYW5kIGNhcHR1cmVzIGhvc3QgaW50cmluc2ljcyDigJQgbWVhbmluZ2xlc3NcbiAqIGFuZCB1bmJ1bmRsZWFibGUgaW5zaWRlIHRoZSBRdWlja0pTIFZNLCB3aGVyZSB0aGUgY29kZWMgYWxyZWFkeSBydW5zIGluXG4gKiB0aGUgZ3Vlc3QgcmVhbG0pLiBUaGUgaG9zdC9ndWVzdCBib3VuZGFyeSBoYXJkZW5pbmcgZm9yIHRoZSBRdWlja0pTXG4gKiBlbmdpbmUgbGFuZHMgd2l0aCB0aGUgaG9zdC1zaWRlIHNlcmRlICgjMzI2MyksIHdoaWNoIHJldGlyZXMgdGhpc1xuICogYnVuZGxlIGVudGlyZWx5LiBXaXJlIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gdGhlIGhhcmRlbmVkIGhvc3QgdmVyc2lvbi5cbiAqL1xuLyoqXG4gKiBSZWR1Y2VycyBhbmQgcmV2aXZlcnMgZm9yIGN1c3RvbSBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIEhhbmRsZXM6XG4gKiAtIENsYXNzOiBjbGFzcyBjb25zdHJ1Y3RvcnMgd2l0aCBhIGBjbGFzc0lkYCBwcm9wZXJ0eVxuICogLSBJbnN0YW5jZTogaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBjdXN0b20gV09SS0ZMT1dfU0VSSUFMSVpFL0RFU0VSSUFMSVpFIG1ldGhvZHNcbiAqL1xuXG5pbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbmltcG9ydCB7IGdldFNlcmlhbGl6YXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NsYXNzLXNlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWR1Y2VycywgUmV2aXZlcnMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIC0tLS0gUmVkdWNlcnMgLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NSZWR1Y2VycygpOiBQYXJ0aWFsPFJlZHVjZXJzPiB7XG4gIHJldHVybiB7XG4gICAgLy8gQ2xhc3MgYW5kIEluc3RhbmNlIGFyZSBpbnRlbnRpb25hbGx5IHBsYWNlZCBiZWZvcmUgRXJyb3Igc28gdGhhdFxuICAgIC8vIGN1c3RvbSBFcnJvciBzdWJjbGFzc2VzIHdpdGggV09SS0ZMT1dfU0VSSUFMSVpFIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIG92ZXIgdGhlIGdlbmVyaWMgRXJyb3Igc2VyaWFsaXphdGlvbiAoZGV2YWx1ZSB1c2VzIGZpcnN0LW1hdGNoLXdpbnMpLlxuICAgIENsYXNzOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSAodmFsdWUgYXMgYW55KS5jbGFzc0lkO1xuICAgICAgaWYgKHR5cGVvZiBjbGFzc0lkICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHsgY2xhc3NJZCB9O1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNscyA9IHZhbHVlLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKCFjbHMgfHwgdHlwZW9mIGNscyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemUgPSBjbHNbV09SS0ZMT1dfU0VSSUFMSVpFXTtcbiAgICAgIGlmICh0eXBlb2Ygc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGNsYXNzSWQgPSBjbHMuY2xhc3NJZDtcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDbGFzcyBcIiR7Y2xzLm5hbWV9XCIgd2l0aCAke1N0cmluZyhXT1JLRkxPV19TRVJJQUxJWkUpfSBtdXN0IGhhdmUgYSBzdGF0aWMgXCJjbGFzc0lkXCIgcHJvcGVydHkuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gc2VyaWFsaXplLmNhbGwoY2xzLCB2YWx1ZSk7XG4gICAgICByZXR1cm4geyBjbGFzc0lkLCBkYXRhIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLSBSZXZpdmVycyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc1Jldml2ZXJzKFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzXG4pOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBjbHMgPSBnZXRTZXJpYWxpemF0aW9uQ2xhc3MoY2xhc3NJZCwgZ2xvYmFsKTtcbiAgICAgIGlmICghY2xzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhlIGNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzcy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xzO1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBkYXRhID0gdmFsdWUuZGF0YTtcblxuICAgICAgY29uc3QgY2xzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQsIGdsb2JhbCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZSA9IChjbHMgYXMgYW55KVtXT1JLRkxPV19ERVNFUklBTElaRV07XG4gICAgICBpZiAodHlwZW9mIGRlc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyAke1N0cmluZyhXT1JLRkxPV19ERVNFUklBTElaRSl9IG1ldGhvZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZS5jYWxsKGNscywgZGF0YSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Mtdm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9yZWR1Y2Vycy9jbGFzcy12bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNIOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3JFLHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxtRUFBbUU7UUFDbkUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBSSxLQUFhLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzlELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXBELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzFDLElBQUksT0FBTyxTQUFTLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUVsRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQzVCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyx5Q0FBeUMsQ0FDaEcsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFNBQThCLFVBQVU7SUFFeEMsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUV4QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFJLEdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLDRCQUE0QixNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUNwRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWTS1jb21wYXRpYmxlIGNvcHk6IGlkZW50aWNhbCBzZW1hbnRpY3MgdG8gY2xhc3MudHMgYmVmb3JlIHRoZSBob3N0LXNpZGVcbiAqIGhhcmRlbmluZyAoIzMyNTcpIG1hZGUgdGhhdCBtb2R1bGUgZGVwZW5kIG9uIGBzZXJpYWxpemF0aW9uL2hhcmRlbmVkLnRzYFxuICogKHdoaWNoIGltcG9ydHMgYG5vZGU6dXRpbGAgYW5kIGNhcHR1cmVzIGhvc3QgaW50cmluc2ljcywgbWVhbmluZ2xlc3NcbiAqIGFuZCB1bmJ1bmRsZWFibGUgaW5zaWRlIHRoZSBRdWlja0pTIFZNLCB3aGVyZSB0aGUgY29kZWMgYWxyZWFkeSBydW5zIGluXG4gKiB0aGUgZ3Vlc3QgcmVhbG0pLiBUaGUgaG9zdC9ndWVzdCBib3VuZGFyeSBoYXJkZW5pbmcgZm9yIHRoZSBRdWlja0pTXG4gKiBlbmdpbmUgbGFuZHMgd2l0aCB0aGUgaG9zdC1zaWRlIHNlcmRlICgjMzI2MyksIHdoaWNoIHJldGlyZXMgdGhpc1xuICogYnVuZGxlIGVudGlyZWx5LiBXaXJlIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gdGhlIGhhcmRlbmVkIGhvc3QgdmVyc2lvbi5cbiAqL1xuLyoqXG4gKiBSZWR1Y2VycyBhbmQgcmV2aXZlcnMgZm9yIGN1c3RvbSBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIEhhbmRsZXM6XG4gKiAtIENsYXNzOiBjbGFzcyBjb25zdHJ1Y3RvcnMgd2l0aCBhIGBjbGFzc0lkYCBwcm9wZXJ0eVxuICogLSBJbnN0YW5jZTogaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBjdXN0b20gV09SS0ZMT1dfU0VSSUFMSVpFL0RFU0VSSUFMSVpFIG1ldGhvZHNcbiAqL1xuXG5pbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbmltcG9ydCB7IGdldFNlcmlhbGl6YXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NsYXNzLXNlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWR1Y2VycywgUmV2aXZlcnMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIC0tLS0gUmVkdWNlcnMgLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NSZWR1Y2VycygpOiBQYXJ0aWFsPFJlZHVjZXJzPiB7XG4gIHJldHVybiB7XG4gICAgLy8gQ2xhc3MgYW5kIEluc3RhbmNlIGFyZSBpbnRlbnRpb25hbGx5IHBsYWNlZCBiZWZvcmUgRXJyb3Igc28gdGhhdFxuICAgIC8vIGN1c3RvbSBFcnJvciBzdWJjbGFzc2VzIHdpdGggV09SS0ZMT1dfU0VSSUFMSVpFIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIG92ZXIgdGhlIGdlbmVyaWMgRXJyb3Igc2VyaWFsaXphdGlvbiAoZGV2YWx1ZSB1c2VzIGZpcnN0LW1hdGNoLXdpbnMpLlxuICAgIENsYXNzOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNsYXNzSWQgPSAodmFsdWUgYXMgYW55KS5jbGFzc0lkO1xuICAgICAgaWYgKHR5cGVvZiBjbGFzc0lkICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHsgY2xhc3NJZCB9O1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNscyA9IHZhbHVlLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKCFjbHMgfHwgdHlwZW9mIGNscyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemUgPSBjbHNbV09SS0ZMT1dfU0VSSUFMSVpFXTtcbiAgICAgIGlmICh0eXBlb2Ygc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGNsYXNzSWQgPSBjbHMuY2xhc3NJZDtcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDbGFzcyBcIiR7Y2xzLm5hbWV9XCIgd2l0aCAke1N0cmluZyhXT1JLRkxPV19TRVJJQUxJWkUpfSBtdXN0IGhhdmUgYSBzdGF0aWMgXCJjbGFzc0lkXCIgcHJvcGVydHkuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gc2VyaWFsaXplLmNhbGwoY2xzLCB2YWx1ZSk7XG4gICAgICByZXR1cm4geyBjbGFzc0lkLCBkYXRhIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLSBSZXZpdmVycyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc1Jldml2ZXJzKFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzXG4pOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBjbHMgPSBnZXRTZXJpYWxpemF0aW9uQ2xhc3MoY2xhc3NJZCwgZ2xvYmFsKTtcbiAgICAgIGlmICghY2xzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhlIGNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzcy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xzO1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBkYXRhID0gdmFsdWUuZGF0YTtcblxuICAgICAgY29uc3QgY2xzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQsIGdsb2JhbCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZSA9IChjbHMgYXMgYW55KVtXT1JLRkxPV19ERVNFUklBTElaRV07XG4gICAgICBpZiAodHlwZW9mIGRlc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyAke1N0cmluZyhXT1JLRkxPV19ERVNFUklBTElaRSl9IG1ldGhvZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZS5jYWxsKGNscywgZGF0YSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -35,7 +35,7 @@ export function getClassReducers() {
35
35
  if (typeof classId !== 'string') {
36
36
  throw new Error(`Class "${String(readProperty(cls, 'name'))}" with ${String(WORKFLOW_SERIALIZE)} must have a static "classId" property.`);
37
37
  }
38
- // Custom serializers are workflow code by definition the data only
38
+ // Custom serializers are workflow code by definition: the data only
39
39
  // exists behind them. Record the execution so retention-aware callers
40
40
  // can account for possible VM-state perturbation.
41
41
  recordGuestCode('method', `[WORKFLOW_SERIALIZE] (${classId})`);
@@ -70,4 +70,4 @@ export function getClassRevivers(global = globalThis) {
70
70
  },
71
71
  };
72
72
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9yZWR1Y2Vycy9jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRy9ELHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxtRUFBbUU7UUFDbkUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzlELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXBELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN4RCxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLFVBQVUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsVUFBVSxNQUFNLENBQUMsa0JBQWtCLENBQUMseUNBQXlDLENBQ3pILENBQUM7WUFDSixDQUFDO1lBRUQscUVBQXFFO1lBQ3JFLHNFQUFzRTtZQUN0RSxrREFBa0Q7WUFDbEQsZUFBZSxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUMvRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFNBQThCLFVBQVU7SUFFeEMsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUV4QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFJLEdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLDRCQUE0QixNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUNwRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWR1Y2VycyBhbmQgcmV2aXZlcnMgZm9yIGN1c3RvbSBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIEhhbmRsZXM6XG4gKiAtIENsYXNzOiBjbGFzcyBjb25zdHJ1Y3RvcnMgd2l0aCBhIGBjbGFzc0lkYCBwcm9wZXJ0eVxuICogLSBJbnN0YW5jZTogaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBjdXN0b20gV09SS0ZMT1dfU0VSSUFMSVpFL0RFU0VSSUFMSVpFIG1ldGhvZHNcbiAqL1xuXG5pbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbmltcG9ydCB7IGdldFNlcmlhbGl6YXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NsYXNzLXNlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgcmVhZFByb3BlcnR5LCByZWNvcmRHdWVzdENvZGUgfSBmcm9tICcuLi9oYXJkZW5lZC5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZHVjZXJzLCBSZXZpdmVycyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8gLS0tLSBSZWR1Y2VycyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc1JlZHVjZXJzKCk6IFBhcnRpYWw8UmVkdWNlcnM+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyBDbGFzcyBhbmQgSW5zdGFuY2UgYXJlIGludGVudGlvbmFsbHkgcGxhY2VkIGJlZm9yZSBFcnJvciBzbyB0aGF0XG4gICAgLy8gY3VzdG9tIEVycm9yIHN1YmNsYXNzZXMgd2l0aCBXT1JLRkxPV19TRVJJQUxJWkUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gb3ZlciB0aGUgZ2VuZXJpYyBFcnJvciBzZXJpYWxpemF0aW9uIChkZXZhbHVlIHVzZXMgZmlyc3QtbWF0Y2gtd2lucykuXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHJlYWRQcm9wZXJ0eSh2YWx1ZSwgJ2NsYXNzSWQnKTtcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NJZCAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB7IGNsYXNzSWQgfTtcbiAgICB9LFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBjbHMgPSByZWFkUHJvcGVydHkodmFsdWUsICdjb25zdHJ1Y3RvcicpO1xuICAgICAgaWYgKCFjbHMgfHwgdHlwZW9mIGNscyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemUgPSByZWFkUHJvcGVydHkoY2xzLCBXT1JLRkxPV19TRVJJQUxJWkUpO1xuICAgICAgaWYgKHR5cGVvZiBzZXJpYWxpemUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblxuICAgICAgY29uc3QgY2xhc3NJZCA9IHJlYWRQcm9wZXJ0eShjbHMsICdjbGFzc0lkJyk7XG4gICAgICBpZiAodHlwZW9mIGNsYXNzSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke1N0cmluZyhyZWFkUHJvcGVydHkoY2xzLCAnbmFtZScpKX1cIiB3aXRoICR7U3RyaW5nKFdPUktGTE9XX1NFUklBTElaRSl9IG11c3QgaGF2ZSBhIHN0YXRpYyBcImNsYXNzSWRcIiBwcm9wZXJ0eS5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEN1c3RvbSBzZXJpYWxpemVycyBhcmUgd29ya2Zsb3cgY29kZSBieSBkZWZpbml0aW9uIOKAlCB0aGUgZGF0YSBvbmx5XG4gICAgICAvLyBleGlzdHMgYmVoaW5kIHRoZW0uIFJlY29yZCB0aGUgZXhlY3V0aW9uIHNvIHJldGVudGlvbi1hd2FyZSBjYWxsZXJzXG4gICAgICAvLyBjYW4gYWNjb3VudCBmb3IgcG9zc2libGUgVk0tc3RhdGUgcGVydHVyYmF0aW9uLlxuICAgICAgcmVjb3JkR3Vlc3RDb2RlKCdtZXRob2QnLCBgW1dPUktGTE9XX1NFUklBTElaRV0gKCR7Y2xhc3NJZH0pYCk7XG4gICAgICBjb25zdCBkYXRhID0gc2VyaWFsaXplLmNhbGwoY2xzLCB2YWx1ZSk7XG4gICAgICByZXR1cm4geyBjbGFzc0lkLCBkYXRhIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLSBSZXZpdmVycyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc1Jldml2ZXJzKFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzXG4pOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBjbHMgPSBnZXRTZXJpYWxpemF0aW9uQ2xhc3MoY2xhc3NJZCwgZ2xvYmFsKTtcbiAgICAgIGlmICghY2xzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhlIGNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzcy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xzO1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBkYXRhID0gdmFsdWUuZGF0YTtcblxuICAgICAgY29uc3QgY2xzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQsIGdsb2JhbCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZSA9IChjbHMgYXMgYW55KVtXT1JLRkxPV19ERVNFUklBTElaRV07XG4gICAgICBpZiAodHlwZW9mIGRlc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyAke1N0cmluZyhXT1JLRkxPV19ERVNFUklBTElaRSl9IG1ldGhvZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZS5jYWxsKGNscywgZGF0YSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXphdGlvbi9yZWR1Y2Vycy9jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRy9ELHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxtRUFBbUU7UUFDbkUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzlELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXBELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN4RCxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLFVBQVUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsVUFBVSxNQUFNLENBQUMsa0JBQWtCLENBQUMseUNBQXlDLENBQ3pILENBQUM7WUFDSixDQUFDO1lBRUQsb0VBQW9FO1lBQ3BFLHNFQUFzRTtZQUN0RSxrREFBa0Q7WUFDbEQsZUFBZSxDQUFDLFFBQVEsRUFBRSx5QkFBeUIsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUMvRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELHFCQUFxQjtBQUVyQixNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFNBQThCLFVBQVU7SUFFeEMsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUM5QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUV4QixNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLGlGQUFpRixDQUNuRyxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFJLEdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxPQUFPLDRCQUE0QixNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUNwRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWR1Y2VycyBhbmQgcmV2aXZlcnMgZm9yIGN1c3RvbSBjbGFzcyBzZXJpYWxpemF0aW9uLlxuICpcbiAqIEhhbmRsZXM6XG4gKiAtIENsYXNzOiBjbGFzcyBjb25zdHJ1Y3RvcnMgd2l0aCBhIGBjbGFzc0lkYCBwcm9wZXJ0eVxuICogLSBJbnN0YW5jZTogaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBjdXN0b20gV09SS0ZMT1dfU0VSSUFMSVpFL0RFU0VSSUFMSVpFIG1ldGhvZHNcbiAqL1xuXG5pbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbmltcG9ydCB7IGdldFNlcmlhbGl6YXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NsYXNzLXNlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgcmVhZFByb3BlcnR5LCByZWNvcmRHdWVzdENvZGUgfSBmcm9tICcuLi9oYXJkZW5lZC5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZHVjZXJzLCBSZXZpdmVycyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8gLS0tLSBSZWR1Y2VycyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc1JlZHVjZXJzKCk6IFBhcnRpYWw8UmVkdWNlcnM+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyBDbGFzcyBhbmQgSW5zdGFuY2UgYXJlIGludGVudGlvbmFsbHkgcGxhY2VkIGJlZm9yZSBFcnJvciBzbyB0aGF0XG4gICAgLy8gY3VzdG9tIEVycm9yIHN1YmNsYXNzZXMgd2l0aCBXT1JLRkxPV19TRVJJQUxJWkUgdGFrZSBwcmVjZWRlbmNlXG4gICAgLy8gb3ZlciB0aGUgZ2VuZXJpYyBFcnJvciBzZXJpYWxpemF0aW9uIChkZXZhbHVlIHVzZXMgZmlyc3QtbWF0Y2gtd2lucykuXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHJlYWRQcm9wZXJ0eSh2YWx1ZSwgJ2NsYXNzSWQnKTtcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NJZCAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB7IGNsYXNzSWQgfTtcbiAgICB9LFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBjbHMgPSByZWFkUHJvcGVydHkodmFsdWUsICdjb25zdHJ1Y3RvcicpO1xuICAgICAgaWYgKCFjbHMgfHwgdHlwZW9mIGNscyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzZXJpYWxpemUgPSByZWFkUHJvcGVydHkoY2xzLCBXT1JLRkxPV19TRVJJQUxJWkUpO1xuICAgICAgaWYgKHR5cGVvZiBzZXJpYWxpemUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcblxuICAgICAgY29uc3QgY2xhc3NJZCA9IHJlYWRQcm9wZXJ0eShjbHMsICdjbGFzc0lkJyk7XG4gICAgICBpZiAodHlwZW9mIGNsYXNzSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke1N0cmluZyhyZWFkUHJvcGVydHkoY2xzLCAnbmFtZScpKX1cIiB3aXRoICR7U3RyaW5nKFdPUktGTE9XX1NFUklBTElaRSl9IG11c3QgaGF2ZSBhIHN0YXRpYyBcImNsYXNzSWRcIiBwcm9wZXJ0eS5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEN1c3RvbSBzZXJpYWxpemVycyBhcmUgd29ya2Zsb3cgY29kZSBieSBkZWZpbml0aW9uOiB0aGUgZGF0YSBvbmx5XG4gICAgICAvLyBleGlzdHMgYmVoaW5kIHRoZW0uIFJlY29yZCB0aGUgZXhlY3V0aW9uIHNvIHJldGVudGlvbi1hd2FyZSBjYWxsZXJzXG4gICAgICAvLyBjYW4gYWNjb3VudCBmb3IgcG9zc2libGUgVk0tc3RhdGUgcGVydHVyYmF0aW9uLlxuICAgICAgcmVjb3JkR3Vlc3RDb2RlKCdtZXRob2QnLCBgW1dPUktGTE9XX1NFUklBTElaRV0gKCR7Y2xhc3NJZH0pYCk7XG4gICAgICBjb25zdCBkYXRhID0gc2VyaWFsaXplLmNhbGwoY2xzLCB2YWx1ZSk7XG4gICAgICByZXR1cm4geyBjbGFzc0lkLCBkYXRhIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLSBSZXZpdmVycyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc1Jldml2ZXJzKFxuICBnbG9iYWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBnbG9iYWxUaGlzXG4pOiBQYXJ0aWFsPFJldml2ZXJzPiB7XG4gIHJldHVybiB7XG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBjbHMgPSBnZXRTZXJpYWxpemF0aW9uQ2xhc3MoY2xhc3NJZCwgZ2xvYmFsKTtcbiAgICAgIGlmICghY2xzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgbm90IGZvdW5kLiBNYWtlIHN1cmUgdGhlIGNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCByZWdpc3RlclNlcmlhbGl6YXRpb25DbGFzcy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xzO1xuICAgIH0sXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NJZCA9IHZhbHVlLmNsYXNzSWQ7XG4gICAgICBjb25zdCBkYXRhID0gdmFsdWUuZGF0YTtcblxuICAgICAgY29uc3QgY2xzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKGNsYXNzSWQsIGdsb2JhbCk7XG4gICAgICBpZiAoIWNscykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsYXNzIFwiJHtjbGFzc0lkfVwiIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoZSBjbGFzcyBpcyByZWdpc3RlcmVkIHdpdGggcmVnaXN0ZXJTZXJpYWxpemF0aW9uQ2xhc3MuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZSA9IChjbHMgYXMgYW55KVtXT1JLRkxPV19ERVNFUklBTElaRV07XG4gICAgICBpZiAodHlwZW9mIGRlc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xhc3MgXCIke2NsYXNzSWR9XCIgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyAke1N0cmluZyhXT1JLRkxPV19ERVNFUklBTElaRSl9IG1ldGhvZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZS5jYWxsKGNscywgZGF0YSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==