footprintjs 10.3.0 → 10.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +63 -25
  2. package/dist/esm/index.d.ts +2 -0
  3. package/dist/esm/index.js +1 -1
  4. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  5. package/dist/esm/lib/capture/absentEntries.js +81 -0
  6. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  7. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  8. package/dist/esm/lib/capture/historyData.d.ts +13 -0
  9. package/dist/esm/lib/capture/historyData.js +96 -0
  10. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  11. package/dist/esm/lib/capture/historyNote.js +57 -0
  12. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  13. package/dist/esm/lib/capture/historyTarget.js +35 -0
  14. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  15. package/dist/esm/lib/capture/historyTypes.js +4 -0
  16. package/dist/esm/lib/capture/nativeCoverage.d.ts +20 -7
  17. package/dist/esm/lib/capture/nativeCoverage.js +50 -12
  18. package/dist/esm/lib/capture/nativeSourceAddress.d.ts +3 -0
  19. package/dist/esm/lib/capture/nativeSourceAddress.js +15 -0
  20. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  21. package/dist/esm/lib/capture/noteShape.js +93 -0
  22. package/dist/esm/lib/capture/readSources.d.ts +49 -0
  23. package/dist/esm/lib/capture/readSources.js +99 -0
  24. package/dist/esm/lib/capture/sinkSettlement.d.ts +6 -0
  25. package/dist/esm/lib/capture/sinkSettlement.js +10 -0
  26. package/dist/esm/lib/capture/sourceReadCounts.d.ts +18 -0
  27. package/dist/esm/lib/capture/sourceReadCounts.js +27 -0
  28. package/dist/esm/lib/capture/sourceReferenceBudget.d.ts +10 -0
  29. package/dist/esm/lib/capture/sourceReferenceBudget.js +21 -0
  30. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +3 -0
  31. package/dist/esm/lib/capture/storedReadSourceCounts.js +78 -0
  32. package/dist/esm/lib/capture/storedReadSources.d.ts +4 -0
  33. package/dist/esm/lib/capture/storedReadSources.js +104 -0
  34. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +14 -2
  35. package/dist/esm/lib/engine/handlers/servedSubflowResults.js +13 -2
  36. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  37. package/dist/esm/lib/engine/types.d.ts +4 -0
  38. package/dist/esm/lib/engine/types.js +1 -1
  39. package/dist/esm/lib/memory/StageContext.d.ts +9 -0
  40. package/dist/esm/lib/memory/StageContext.js +96 -9
  41. package/dist/esm/lib/memory/frameTypes.d.ts +3 -0
  42. package/dist/esm/lib/memory/frameTypes.js +1 -1
  43. package/dist/esm/lib/memory/logAddress.d.ts +3 -0
  44. package/dist/esm/lib/memory/logAddress.js +7 -0
  45. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  46. package/dist/esm/lib/memory/runPolicy.js +2 -1
  47. package/dist/esm/lib/pause/record.js +8 -2
  48. package/dist/esm/lib/pause/types.d.ts +2 -0
  49. package/dist/esm/lib/pause/types.js +1 -1
  50. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +19 -3
  51. package/dist/esm/lib/runner/ExecutionRuntime.js +92 -6
  52. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
  53. package/dist/esm/lib/runner/FlowChartExecutor.js +50 -10
  54. package/dist/esm/lib/runner/attach.js +3 -1
  55. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  56. package/dist/esm/lib/runner/captureHistory.js +112 -0
  57. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  58. package/dist/esm/lib/runner/checkpoint.js +3 -1
  59. package/dist/esm/lib/runner/index.d.ts +1 -0
  60. package/dist/esm/lib/runner/index.js +1 -1
  61. package/dist/esm/lib/runner/options.js +42 -3
  62. package/dist/esm/lib/runner/readStoredCapture.d.ts +41 -0
  63. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  64. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  65. package/dist/esm/lib/runner/recordSink.js +48 -13
  66. package/dist/esm/lib/runner/snapshot.js +2 -2
  67. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  68. package/dist/esm/lib/runner/storedCaptureAdmission.js +99 -0
  69. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  70. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  71. package/dist/esm/lib/sinks/fileSink.js +8 -2
  72. package/dist/esm/trace.d.ts +2 -0
  73. package/dist/esm/trace.js +2 -1
  74. package/dist/index.js +1 -1
  75. package/dist/lib/capture/absentEntries.js +86 -0
  76. package/dist/lib/capture/checkpointCapture.js +110 -0
  77. package/dist/lib/capture/historyData.js +104 -0
  78. package/dist/lib/capture/historyNote.js +61 -0
  79. package/dist/lib/capture/historyTarget.js +40 -0
  80. package/dist/lib/capture/historyTypes.js +7 -0
  81. package/dist/lib/capture/nativeCoverage.js +52 -13
  82. package/dist/lib/capture/nativeSourceAddress.js +19 -0
  83. package/dist/lib/capture/noteShape.js +103 -0
  84. package/dist/lib/capture/readSources.js +106 -0
  85. package/dist/lib/capture/sinkSettlement.js +14 -0
  86. package/dist/lib/capture/sourceReadCounts.js +31 -0
  87. package/dist/lib/capture/sourceReferenceBudget.js +25 -0
  88. package/dist/lib/capture/storedReadSourceCounts.js +82 -0
  89. package/dist/lib/capture/storedReadSources.js +108 -0
  90. package/dist/lib/engine/handlers/SubflowExecutor.js +14 -2
  91. package/dist/lib/engine/handlers/servedSubflowResults.js +13 -2
  92. package/dist/lib/engine/types.js +1 -1
  93. package/dist/lib/memory/StageContext.js +96 -9
  94. package/dist/lib/memory/frameTypes.js +1 -1
  95. package/dist/lib/memory/logAddress.js +11 -0
  96. package/dist/lib/memory/runPolicy.js +2 -1
  97. package/dist/lib/pause/record.js +8 -2
  98. package/dist/lib/pause/types.js +1 -1
  99. package/dist/lib/runner/ExecutionRuntime.js +91 -5
  100. package/dist/lib/runner/FlowChartExecutor.js +50 -10
  101. package/dist/lib/runner/attach.js +3 -1
  102. package/dist/lib/runner/captureHistory.js +116 -0
  103. package/dist/lib/runner/checkpoint.js +3 -1
  104. package/dist/lib/runner/index.js +1 -1
  105. package/dist/lib/runner/options.js +42 -3
  106. package/dist/lib/runner/readStoredCapture.js +40 -0
  107. package/dist/lib/runner/recordSink.js +50 -15
  108. package/dist/lib/runner/snapshot.js +2 -2
  109. package/dist/lib/runner/storedCaptureAdmission.js +103 -0
  110. package/dist/lib/scope/ScopeFacade.js +2 -2
  111. package/dist/lib/sinks/fileSink.js +8 -2
  112. package/dist/trace.js +4 -2
  113. package/dist/types/index.d.ts +2 -0
  114. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  115. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  116. package/dist/types/lib/capture/historyData.d.ts +13 -0
  117. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  118. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  119. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  120. package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
  121. package/dist/types/lib/capture/nativeSourceAddress.d.ts +3 -0
  122. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  123. package/dist/types/lib/capture/readSources.d.ts +49 -0
  124. package/dist/types/lib/capture/sinkSettlement.d.ts +6 -0
  125. package/dist/types/lib/capture/sourceReadCounts.d.ts +18 -0
  126. package/dist/types/lib/capture/sourceReferenceBudget.d.ts +10 -0
  127. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +3 -0
  128. package/dist/types/lib/capture/storedReadSources.d.ts +4 -0
  129. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  130. package/dist/types/lib/engine/types.d.ts +4 -0
  131. package/dist/types/lib/memory/StageContext.d.ts +9 -0
  132. package/dist/types/lib/memory/frameTypes.d.ts +3 -0
  133. package/dist/types/lib/memory/logAddress.d.ts +3 -0
  134. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  135. package/dist/types/lib/pause/types.d.ts +2 -0
  136. package/dist/types/lib/runner/ExecutionRuntime.d.ts +19 -3
  137. package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
  138. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  139. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  140. package/dist/types/lib/runner/index.d.ts +1 -0
  141. package/dist/types/lib/runner/readStoredCapture.d.ts +41 -0
  142. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  143. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  144. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  145. package/dist/types/trace.d.ts +2 -0
  146. package/package.json +2 -2
@@ -25,6 +25,7 @@
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.RunRecord = exports.resolveRecordSink = exports.RecordSinkError = void 0;
27
27
  const write_1 = require("foottrace/write");
28
+ const sinkSettlement_js_1 = require("../capture/sinkSettlement.js");
28
29
  const devMode_js_1 = require("../devMode.js");
29
30
  const errorInfo_js_1 = require("../errors/errorInfo.js");
30
31
  const redaction_js_1 = require("../memory/redaction.js");
@@ -57,7 +58,7 @@ function resolveRecordSink(option) {
57
58
  if (isAdapter(option))
58
59
  return { adapter: option, onFailure: 'report', flush: 'auto' };
59
60
  if (option !== null && typeof option === 'object' && Object.hasOwn(option, 'adapter')) {
60
- const { adapter, onFailure = 'report', flush = 'auto' } = option;
61
+ const { adapter, onFailure = 'report', flush = 'auto', capture } = option;
61
62
  if (!isAdapter(adapter)) {
62
63
  throw new TypeError('FlowChartExecutor: sink.adapter must be a RecordSink (opened, commit, note, closed)');
63
64
  }
@@ -67,7 +68,25 @@ function resolveRecordSink(option) {
67
68
  if (flush !== 'auto' && flush !== 'manual') {
68
69
  throw new TypeError("FlowChartExecutor: sink.flush must be 'auto' or 'manual'");
69
70
  }
70
- return { adapter, onFailure, flush };
71
+ if (capture !== undefined) {
72
+ if (!capture || typeof capture.acknowledge !== 'function')
73
+ throw new TypeError('sink.capture requires acknowledge');
74
+ for (const [key, max] of [
75
+ ['maxBytes', 8 * 1024 * 1024],
76
+ ['timeoutMs', 30_000],
77
+ ]) {
78
+ const value = capture[key];
79
+ if (value !== undefined && (!Number.isSafeInteger(value) || value < 1 || value > max))
80
+ throw new RangeError(`sink.capture.${key} must be a positive whole number at most ${max}`);
81
+ }
82
+ }
83
+ const fixedCapture = capture &&
84
+ Object.freeze({
85
+ acknowledge: capture.acknowledge.bind(capture),
86
+ ...(capture.maxBytes !== undefined && { maxBytes: capture.maxBytes }),
87
+ ...(capture.timeoutMs !== undefined && { timeoutMs: capture.timeoutMs }),
88
+ });
89
+ return { adapter, onFailure, flush, ...(fixedCapture && { capture: fixedCapture }) };
71
90
  }
72
91
  throw new TypeError('FlowChartExecutor: sink must be a RecordSink (opened, commit, note, closed) or { adapter, onFailure?, flush? }');
73
92
  }
@@ -88,6 +107,8 @@ class RunRecord {
88
107
  /** Aborted at the first loss under `'fail'` — composed into the leg's signal; fresh per leg ({@link beginLeg}). */
89
108
  stopper;
90
109
  failure;
110
+ capturePending = 0;
111
+ captureStatus;
91
112
  /** Opaque error identities only: no raw entry or adapter error is enumerable on the transport error. */
92
113
  invocationFailures = new WeakMap();
93
114
  constructor(resolved) {
@@ -148,7 +169,15 @@ class RunRecord {
148
169
  // observes native promises through Promise.prototype.then and guards hostile thenables too.
149
170
  if (returned === null || (typeof returned !== 'object' && typeof returned !== 'function'))
150
171
  return returned;
151
- return settleOnce(returned, () => undefined, failed);
172
+ if (!this.resolved.capture)
173
+ return (0, sinkSettlement_js_1.settleOnce)(returned, () => undefined, failed);
174
+ this.capturePending++;
175
+ return (0, sinkSettlement_js_1.settleOnce)(returned, () => {
176
+ this.capturePending--;
177
+ }, (cause) => {
178
+ this.capturePending--;
179
+ return failed(cause);
180
+ });
152
181
  }
153
182
  catch (cause) {
154
183
  return failed(cause);
@@ -179,6 +208,7 @@ class RunRecord {
179
208
  this.stopper = new AbortController();
180
209
  this.failure = undefined;
181
210
  this.warned = false;
211
+ this.captureStatus = undefined;
182
212
  }
183
213
  /** The leg's redaction rule — a resume builds a new one; the next `opened` / `closed` is served under it. */
184
214
  useRule(rule) {
@@ -200,8 +230,22 @@ class RunRecord {
200
230
  entries: this.entries,
201
231
  failed: this.failed,
202
232
  ...(this.lastError === undefined ? {} : { lastError: this.lastError }),
233
+ ...(this.captureStatus && { capture: this.captureStatus }),
203
234
  };
204
235
  }
236
+ get captureOptions() {
237
+ return this.resolved.capture;
238
+ }
239
+ get pendingCaptureDeliveries() {
240
+ return this.capturePending;
241
+ }
242
+ captureResult(result) {
243
+ this.captureStatus = Object.freeze(result);
244
+ }
245
+ /** Same served seed as opened; a history digest never sees a seeded policy secret. */
246
+ captureInitialState(state) {
247
+ return this.rule ? this.rule.retainState(state, write_1.LOG_PLACEHOLDER) : state;
248
+ }
205
249
  /**
206
250
  * Await the adapter's `flush()`, at most `timeoutMs` when given. A flush that throws or rejects is a loss
207
251
  * (counted, and fatal under `'fail'`); one still running at the deadline is `pending` and keeps running — and,
@@ -218,7 +262,7 @@ class RunRecord {
218
262
  const flush = adapter.flush; // read once: a getter runs once, inside the guard
219
263
  if (typeof flush !== 'function')
220
264
  return { done: true, failed: false, pending: false };
221
- settled = settleOnce(flush.call(adapter), () => ({ done: true, failed: false, pending: false }), (error) => {
265
+ settled = (0, sinkSettlement_js_1.settleOnce)(flush.call(adapter), () => ({ done: true, failed: false, pending: false }), (error) => {
222
266
  if (!givenUp)
223
267
  this.lost(error, undefined, this.errorView(error, rule));
224
268
  return { done: false, failed: true, pending: false };
@@ -284,19 +328,10 @@ function tellAdapter(adapter, failure) {
284
328
  const listener = adapter.onFailure;
285
329
  if (typeof listener !== 'function')
286
330
  return;
287
- settleOnce(listener.call(adapter, failure), () => undefined, () => undefined);
331
+ (0, sinkSettlement_js_1.settleOnce)(listener.call(adapter, failure), () => undefined, () => undefined);
288
332
  }
289
333
  catch {
290
334
  // A listener that fails is the adapter's own business: the loss is already counted.
291
335
  }
292
336
  }
293
- /**
294
- * `value`, settled ONCE into `onValue` / `onError` — never through the value's own `then`: a native promise is
295
- * watched through the real `Promise.prototype.then` (an own `then` on it is not trusted, so its rejection is always
296
- * handled), any other thenable adopted into a fresh promise. A plain value is a fulfilment.
297
- */
298
- function settleOnce(value, onValue, onError) {
299
- const adopted = value instanceof Promise ? value : new Promise((resolve) => resolve(value));
300
- return Promise.prototype.then.call(adopted, onValue, onError);
301
- }
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkU2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3JlY29yZFNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHOzs7QUFJSCwyQ0FBa0Q7QUFFbEQsOENBQTBDO0FBQzFDLHlEQUFzRTtBQUV0RSx5REFBMkQ7QUF1QzNEOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxLQUFLO0lBRUY7SUFEcEIsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzNDLFlBQVksT0FBZSxFQUFXLEtBQWM7UUFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRHFCLFVBQUssR0FBTCxLQUFLLENBQVM7SUFFcEQsQ0FBQztDQUNGO0FBTEQsMENBS0M7QUFTRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBZWhFLFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQVEsS0FBaUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsTUFBZTtJQUMvQyxJQUFJLE1BQU0sS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDM0MsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDdEYsSUFBSSxNQUFNLEtBQUssSUFBSSxJ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QUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGO0FBaE5ELDhCQWdOQztBQUVELGdIQUFnSDtBQUNoSCxTQUFTLFdBQVcsQ0FBQyxPQUFtQixFQUFFLE9BQWlFO0lBQ3pHLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDNUMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVO1lBQUUsT0FBTztRQUMzQyxVQUFVLENBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQy9CLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFDZixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asb0ZBQW9GO0lBQ3RGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsVUFBVSxDQUFJLEtBQWMsRUFBRSxPQUFnQixFQUFFLE9BQThCO0lBQ3JGLE1BQU0sT0FBTyxHQUFxQixLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBZSxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJ1bm5lci9yZWNvcmRTaW5rLnRzIOKAlCB0aGUgcnVuJ3Mgc2lkZSBvZiB0aGUgY3Jhc2gtc2FmZSByZWNvcmQgKGRlc2lnbiDCpzMuNSwgcGFja2V0IFA2KS5cbiAqXG4gKiBmb290dHJhY2Ugb3ducyB0aGUgcG9ydCAoYFJlY29yZFNpbmtgLCBgZm9vdHRyYWNlL3dyaXRlYCk6IGEgbG9nIGJ1aWx0IHdpdGggYSBzaW5rIGhhbmRzIGl0IGV2ZXJ5IGVudHJ5IEFTIElUXG4gKiBMQU5EUyDigJQgYG9wZW5lZGAsIGBjb21taXRgLCBgbm90ZWAsIGBjbG9zZWRgIOKAlCBhbmQgY291bnRzIHdoYXQgdGhlIHNpbmsgZGlkIG5vdCB0YWtlLiBUaGlzIGZpbGUgaXMgd2hhdCB0aGVcbiAqIEVYRUNVVE9SIGFkZHMgYXJvdW5kIGFuIGFwcCdzIGFkYXB0ZXIsIG9uZSB7QGxpbmsgUnVuUmVjb3JkfSBwZXIgcnVuOlxuICpcbiAqICAgLSBUSEUgT05FIExBVywgYmVmb3JlIGFueSBieXRlIGxlYXZlczogdGhlIGBvcGVuZWRgIGJhc2UgaXMgdGhlIHJ1bidzIHNlcnZlZCBmb3JtIG9mIGl0ICh0aGUgcmVkYWN0aW9uIHJ1bGUnc1xuICogICAgIGByZXRhaW5TdGF0ZWAsIHRoZSBtaXJyb3IncyBzZWVkIOKAlCBzbyBhIHBvbGljeSBrZXkgc2VlZGVkIGJ5IGBpbml0aWFsQ29udGV4dGAgb3IgYSBjaGVja3BvaW50IG5ldmVyIHJlYWNoZXNcbiAqICAgICB0aGUgc2luayksIGFuZCB0aGUgYG9wZW5lZGAgLyBgY2xvc2VkYCBtZXRhIGFyZSBib3VuZGFyeSByZWNvcmRzIChgcmV0YWluQm91bmRhcnlgKS4gQSBjb21taXQgaXMgdGhlIGxvZydzIG93blxuICogICAgIGJ1bmRsZSwgYWxyZWFkeSBzY3J1YmJlZCBhdCBjb21taXQ7IGFuIGF0dGVtcHQgbm90ZSBjYXJyaWVzIHRoZSBzZXJ2ZWQgYEF0dGVtcHRSZWNvcmRgIChubyBgcmF3YCkuXG4gKiAgIC0gQUNDT1VOVElORzogZXZlcnkgZW50cnkgaGFuZGVkIHRvIHRoZSBhZGFwdGVyIGlzIGNvdW50ZWQsIGV2ZXJ5IGxvc3MgdG9vIChgZ2V0U25hcHNob3QoKS5zaW5rYCksIHdpdGggYVxuICogICAgIGRldi1tb2RlIHdhcm5pbmcgb24gdGhlIGZpcnN0IGxvc3Mgb2YgYSBydW4uIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgIGhlYXJzIGEgZGlzcGF0Y2hlZCBlbnRyeSdzIGxvc3NcbiAqICAgICB3aXRoIHRoYXQgc2FtZSBzZXJ2ZWQgZW50cnkgYW5kIGEgc2VydmVkIGVycm9yLCBpc29sYXRlZC4gQSByZWZ1c2FsIGJlZm9yZSBkaXNwYXRjaCBpcyBjb3VudGVkIHdpdGhvdXRcbiAqICAgICBmb3J3YXJkaW5nIEZvb3R0cmFjZSdzIHVuc2VydmVkIGVudHJ5LlxuICogICAtIFRIRSBGQUlMVVJFIE1PREUgKG93bmVyIHJ1bGluZyBRMyk6IGAncmVwb3J0J2AgKGRlZmF1bHQpIOKAlCB0aGUgcnVuIGdvZXMgb247IGAnZmFpbCdgIOKAlCB0aGUgZmlyc3QgbG9zdCBlbnRyeVxuICogICAgIGFib3J0cyB0aGUgcnVuJ3Mgc2lnbmFsIHdpdGggYSB7QGxpbmsgUmVjb3JkU2lua0Vycm9yfSwgYW5kIGEgcnVuIHRoYXQgZmluaXNoZWQgd2l0aCBhIGxvc3MgcmVqZWN0cyB3aXRoIGl0LlxuICogICAtIEZMVVNIOiBgJ2F1dG8nYCAoZGVmYXVsdCkg4oCUIGBydW4oKWAgLyBgcmVzdW1lKClgIGF3YWl0IHRoZSBhZGFwdGVyJ3MgYGZsdXNoKClgIGFmdGVyIHRoZSBjbG9zaW5nIGVudHJ5O1xuICogICAgIGAnbWFudWFsJ2Ag4oCUIHRoZSBhcHAgY2FsbHMgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgLlxuICpcbiAqIEV2ZXJ5IGFkYXB0ZXIgbWV0aG9kIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20gdGhlIGxvZzsgd2hhdGV2ZXIgdGhlIGFkYXB0ZXIgdGhyb3dzIG9yIHJlamVjdHMgd2l0aCBpcyB0aGVcbiAqIGxvZydzIHRvIGNvdW50IChgRXZlbnRMb2cgwrcgc2lua0ZhaWx1cmVzYCksIG5ldmVyIHRoZSBydW4ncyDigJQgc28gbm90aGluZyBoZXJlIHRocm93cyB0byB0aGUgZW5naW5lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZEVudHJ5LCBSZWNvcmRTaW5rIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcbmltcG9ydCB7IExPR19QTEFDRUhPTERFUiB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgdGhyb3duVGV4dCB9IGZyb20gJy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25SdWxlIH0gZnJvbSAnLi4vbWVtb3J5L3JlZGFjdGlvbi5qcyc7XG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRTaW5rU3RhdHMgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKiogV2hhdCBhIGxvc3QgZW50cnkgZG9lcyB0byB0aGUgcnVuOiBgJ3JlcG9ydCdgIGNvdW50cyBpdCBhbmQgZ29lcyBvbjsgYCdmYWlsJ2AgZmFpbHMgdGhlIHJ1bi4gKi9cbmV4cG9ydCB0eXBlIFJlY29yZFNpbmtGYWlsdXJlTW9kZSA9ICdyZXBvcnQnIHwgJ2ZhaWwnO1xuXG4vKiogV2hlbiB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBydW5zOiBhZnRlciBlYWNoIHJ1bidzIGNsb3NpbmcgZW50cnkgKGAnYXV0bydgKSwgb3Igd2hlbiB0aGUgYXBwIGFza3MuICovXG5leHBvcnQgdHlwZSBSZWNvcmRTaW5rRmx1c2hNb2RlID0gJ2F1dG8nIHwgJ21hbnVhbCc7XG5cbi8qKlxuICogVGhlIGV4ZWN1dG9yJ3MgYHNpbmtgIG9wdGlvbiBpbiBpdHMgbG9uZyBmb3JtLiBUaGUgc2hvcnQgZm9ybSBpcyB0aGUgYWRhcHRlciBpdHNlbGYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBzaW5rOiB7IGFkYXB0ZXI6IGZpbGVTaW5rKCcvdmFyL2Zvb3RwcmludC9ydW4uanNvbmwnKSwgb25GYWlsdXJlOiAnZmFpbCcgfSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFNpbmtPcHRpb25zIHtcbiAgLyoqIFdoZXJlIHRoZSBlbnRyaWVzIGdvIOKAlCBgZmlsZVNpbmsocGF0aClgIChgZm9vdHByaW50anMvc2lua3NgKSwgYG1lbW9yeVNpbmsoKWAgKGBmb290dHJhY2Uvd3JpdGVgKSwgb3IgeW91cnMuICovXG4gIHJlYWRvbmx5IGFkYXB0ZXI6IFJlY29yZFNpbms7XG4gIC8qKiBgJ3JlcG9ydCdgIChkZWZhdWx0KTogYSBsb3N0IGVudHJ5IGlzIGNvdW50ZWQgYW5kIHRoZSBydW4gZ29lcyBvbi4gYCdmYWlsJ2A6IHRoZSBmaXJzdCBvbmUgZmFpbHMgdGhlIHJ1bi4gKi9cbiAgcmVhZG9ubHkgb25GYWlsdXJlPzogUmVjb3JkU2lua0ZhaWx1cmVNb2RlO1xuICAvKiogYCdhdXRvJ2AgKGRlZmF1bHQpOiBgcnVuKClgIGF3YWl0cyB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBhZnRlciB0aGUgY2xvc2luZyBlbnRyeS4gYCdtYW51YWwnYDogYGZsdXNoUmVjb3JkKClgLiAqL1xuICByZWFkb25seSBmbHVzaD86IFJlY29yZFNpbmtGbHVzaE1vZGU7XG59XG5cbi8qKiBUaGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uOiBhbiBhZGFwdGVyLCBvciB7QGxpbmsgUmVjb3JkU2lua09wdGlvbnN9LiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua09wdGlvbiA9IFJlY29yZFNpbmsgfCBSZWNvcmRTaW5rT3B0aW9ucztcblxuLyoqIFdoYXQgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgIHJlc29sdmVzIHdpdGgg4oCUIHRoZSBgZHJhaW5PYnNlcnZlcnNgIHNoYXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRGbHVzaFJlc3VsdCB7XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIGZpbmlzaGVkIChvciB0aGVyZSB3YXMgbm90aGluZyB0byBmbHVzaCkuICovXG4gIHJlYWRvbmx5IGRvbmU6IGJvb2xlYW47XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIHRocmV3IG9yIHJlamVjdGVkIOKAlCBjb3VudGVkIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLiAqL1xuICByZWFkb25seSBmYWlsZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgZmx1c2ggaGFkIG5vdCBzZXR0bGVkIHdoZW4gYHRpbWVvdXRNc2AgcmFuIG91dC4gKi9cbiAgcmVhZG9ubHkgcGVuZGluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHJ1biB3aXRoIGBzaW5rOiB7IG9uRmFpbHVyZTogJ2ZhaWwnIH1gIGxvc3QgYW4gZW50cnk6IHRoZSByZWNvcmQgdGhlIGFwcCBhc2tlZCB0byBiZSBrZXB0IGlzIG5vdCB3aG9sZS5cbiAqIGBjYXVzZWAgaXMgdGhlIGFkYXB0ZXIncyBvd24gZXJyb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRTaW5rRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSAnUmVjb3JkU2lua0Vycm9yJztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCByZWFkb25seSBjYXVzZTogdW5rbm93bikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKiBUaGUgb3B0aW9uIHJlc29sdmVkIG9uY2UsIGF0IGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRSZWNvcmRTaW5rIHtcbiAgcmVhZG9ubHkgYWRhcHRlcjogUmVjb3JkU2luaztcbiAgcmVhZG9ubHkgb25GYWlsdXJlOiBSZWNvcmRTaW5rRmFpbHVyZU1vZGU7XG4gIHJlYWRvbmx5IGZsdXNoOiBSZWNvcmRTaW5rRmx1c2hNb2RlO1xufVxuXG5jb25zdCBNRVRIT0RTID0gWydvcGVuZWQnLCAnY29tbWl0JywgJ25vdGUnLCAnY2xvc2VkJ10gYXMgY29uc3Q7XG5cbmludGVyZmFjZSBTaW5rRXJyb3JWaWV3IHtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbiAgcmVhZG9ubHkgbWFza2VkOiBib29sZWFuO1xuICByZWFkb25seSBydWxlPzogUmVkYWN0aW9uUnVsZTtcbn1cblxuaW50ZXJmYWNlIEludm9jYXRpb25GYWlsdXJlIHtcbiAgcmVhZG9ubHkgZW50cnk6IFJlY29yZEVudHJ5O1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcbiAgcmVhZG9ubHkgdmlldzogU2lua0Vycm9yVmlldztcbn1cblxuZnVuY3Rpb24gaXNBZGFwdGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkU2luayB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBNRVRIT0RTLmV2ZXJ5KChtKSA9PiB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uLCBvciByZWZ1c2UgaXQgd2l0aCBhIGBUeXBlRXJyb3JgIG5hbWluZyB3aGF0IGlzIHdyb25nIOKAlCBhIHdpcmluZyBtaXN0YWtlXG4gKiB0aGUgYXBwIG1ha2VzIG9uY2UsIHNvIGl0IGZhaWxzIGF0IGNvbnN0cnVjdGlvbiwgbmV2ZXIgbWlkLXJ1bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWNvcmRTaW5rKG9wdGlvbjogdW5rbm93bik6IFJlc29sdmVkUmVjb3JkU2luayB8IHVuZGVmaW5lZCB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGlzQWRhcHRlcihvcHRpb24pKSByZXR1cm4geyBhZGFwdGVyOiBvcHRpb24sIG9uRmFpbHVyZTogJ3JlcG9ydCcsIGZsdXNoOiAnYXV0bycgfTtcbiAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBPYmplY3QuaGFzT3duKG9wdGlvbiwgJ2FkYXB0ZXInKSkge1xuICAgIGNvbnN0IHsgYWRhcHRlciwgb25GYWlsdXJlID0gJ3JlcG9ydCcsIGZsdXNoID0gJ2F1dG8nIH0gPSBvcHRpb24gYXMgUGFydGlhbDxSZWNvcmRTaW5rT3B0aW9ucz47XG4gICAgaWYgKCFpc0FkYXB0ZXIoYWRhcHRlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rLmFkYXB0ZXIgbXVzdCBiZSBhIFJlY29yZFNpbmsgKG9wZW5lZCwgY29tbWl0LCBub3RlLCBjbG9zZWQpJyk7XG4gICAgfVxuICAgIGlmIChvbkZhaWx1cmUgIT09ICdyZXBvcnQnICYmIG9uRmFpbHVyZSAhPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsub25GYWlsdXJlIG11c3QgYmUgJ3JlcG9ydCcgb3IgJ2ZhaWwnXCIpO1xuICAgIH1cbiAgICBpZiAoZmx1c2ggIT09ICdhdXRvJyAmJiBmbHVzaCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGbG93Q2hhcnRFeGVjdXRvcjogc2luay5mbHVzaCBtdXN0IGJlICdhdXRvJyBvciAnbWFudWFsJ1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWRhcHRlciwgb25GYWlsdXJlLCBmbHVzaCB9O1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rIG11c3QgYmUgYSBSZWNvcmRTaW5rIChvcGVuZWQsIGNvbW1pdCwgbm90ZSwgY2xvc2VkKSBvciB7IGFkYXB0ZXIsIG9uRmFpbHVyZT8sIGZsdXNoPyB9JyxcbiAgKTtcbn1cblxuLyoqXG4gKiBPbmUgcnVuJ3MgcmVjb3JkIHNpbms6IHRoZSBzaW5rIGV2ZXJ5IGxvZyBvZiB0aGUgcnVuIHdyaXRlcyB0byAocm9vdCBhbmQgbW91bnRzKSwgaXRzIGFjY291bnRpbmcgYW5kIGl0c1xuICogZmFpbHVyZSBtb2RlLiBBIHNhbWUtZXhlY3V0b3IgcmVzdW1lIGtlZXBzIGl0ICh0aGUgcm9vdCBsb2cgZ29lcyBvbik7IGEgZnJlc2ggcnVuIG1ha2VzIGEgbmV3IG9uZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1blJlY29yZCB7XG4gIC8qKiBIYW5kIHRoaXMgdG8gZXZlcnkgYEV2ZW50TG9nYCBvZiB0aGUgcnVuLiAqL1xuICByZWFkb25seSBzaW5rOiBSZWNvcmRTaW5rO1xuICBwcml2YXRlIGVudHJpZXMgPSAwO1xuICBwcml2YXRlIGZhaWxlZCA9IDA7XG4gIHByaXZhdGUgbGFzdEVycm9yPzogc3RyaW5nO1xuICBwcml2YXRlIHdhcm5lZCA9IGZhbHNlO1xuICBwcml2YXRlIHJ1bGU/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogQWJvcnRlZCBhdCB0aGUgZmlyc3QgbG9zcyB1bmRlciBgJ2ZhaWwnYCDigJQgY29tcG9zZWQgaW50byB0aGUgbGVnJ3Mgc2lnbmFsOyBmcmVzaCBwZXIgbGVnICh7QGxpbmsgYmVnaW5MZWd9KS4gKi9cbiAgcHJpdmF0ZSBzdG9wcGVyPzogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIGZhaWx1cmU/OiBSZWNvcmRTaW5rRXJyb3I7XG4gIC8qKiBPcGFxdWUgZXJyb3IgaWRlbnRpdGllcyBvbmx5OiBubyByYXcgZW50cnkgb3IgYWRhcHRlciBlcnJvciBpcyBlbnVtZXJhYmxlIG9uIHRoZSB0cmFuc3BvcnQgZXJyb3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW52b2NhdGlvbkZhaWx1cmVzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBJbnZvY2F0aW9uRmFpbHVyZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkOiBSZXNvbHZlZFJlY29yZFNpbmspIHtcbiAgICBpZiAocmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBhZGFwdGVyID0gcmVzb2x2ZWQuYWRhcHRlcjtcbiAgICBjb25zdCBoYW5kZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmVudHJpZXMgKz0gMTtcbiAgICB9O1xuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIG9wZW5lZDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5ydWxlO1xuICAgICAgICBjb25zdCBzZXJ2ZWQgPSB7XG4gICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZShlbnRyeS5pbml0aWFsU3RhdGUsIExPR19QTEFDRUhPTERFUikgOiBlbnRyeS5pbml0aWFsU3RhdGUsXG4gICAgICAgICAgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5zZXJ2ZWQsIGtpbmQ6ICdvcGVuZWQnIH0sICgpID0+IGFkYXB0ZXIub3BlbmVkKHNlcnZlZCksIHJ1bGUpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5lbnRyeSwga2luZDogJ2NvbW1pdCcgfSwgKCkgPT4gYWRhcHRlci5jb21taXQoZW50cnkpLCB0aGlzLnJ1bGUpO1xuICAgICAgfSxcbiAgICAgIG5vdGU6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKFxuICAgICAgICAgIHsgYWRkcmVzczogZW50cnkuYWRkcmVzcywgYXQ6IGVudHJ5LmF0LCBraW5kOiAnbm90ZScsIG5vdGU6IGVudHJ5LmtpbmQsIGRhdGE6IGVudHJ5LmRhdGEgfSxcbiAgICAgICAgICAoKSA9PiBhZGFwdGVyLm5vdGUoZW50cnkpLFxuICAgICAgICAgIHRoaXMucnVsZSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjbG9zZWQ6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgY29uc3Qgc2VydmVkID0geyAuLi5lbnRyeSwgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pIH07XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZSh7IC4uLnNlcnZlZCwga2luZDogJ2Nsb3NlZCcgfSwgKCkgPT4gYWRhcHRlci5jbG9zZWQoc2VydmVkKSwgdGhpcy5ydWxlKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWx1cmU6IChmYWlsdXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludm9jYXRpb24gPVxuICAgICAgICAgIGZhaWx1cmUuZXJyb3IgIT09IG51bGwgJiYgKHR5cGVvZiBmYWlsdXJlLmVycm9yID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgZmFpbHVyZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgID8gdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuZ2V0KGZhaWx1cmUuZXJyb3IpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gQmVmb3JlIGFkbWlzc2lvbiAoZS5nLiBhIG1ldGEtY29weSByZWZ1c2FsKSwgbm8gZGlzcGF0Y2hlZCBzZXJ2ZWQgZW50cnkgZXhpc3RzLiBDb3VudCB0aGUgbG9zcyBhbmRcbiAgICAgICAgLy8gYXBwbHkgdGhlIGZhaWx1cmUgbW9kZSwgYnV0IG5ldmVyIGhhbmQgdGhlIGFkYXB0ZXIgRm9vdHRyYWNlJ3Mgb3JpZ2luYWwsIHVuc2VydmVkIGVudHJ5LlxuICAgICAgICBpZiAoaW52b2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLmxvc3QoZmFpbHVyZS5lcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhmYWlsdXJlLmVycm9yLCB0aGlzLnJ1bGUpKTtcbiAgICAgICAgZWxzZSB0aGlzLmxvc3QoaW52b2NhdGlvbi5jYXVzZSwgaW52b2NhdGlvbi5lbnRyeSwgaW52b2NhdGlvbi52aWV3KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlIHRoZSBzZXJ2ZWQgZW50cnkgbm93OyBhbiBhc3luY2hyb25vdXMgZmFpbHVyZSBrZWVwcyB0aGlzIGxlZydzIHJ1bGUsIG5vdCBhIGxhdGVyIHJlc3VtZSdzIHJ1bGUuICovXG4gIHByaXZhdGUgaW52b2tlKGVudHJ5OiBSZWNvcmRFbnRyeSwgY2FsbDogKCkgPT4gdW5rbm93biwgcnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIGNvbnN0IGZhaWxlZCA9IChjYXVzZTogdW5rbm93bik6IG5ldmVyID0+IHtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gbmV3IEVycm9yKCdyZWNvcmQgc2luazogYWRhcHRlciBpbnZvY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuc2V0KGVudmVsb3BlLCB7IGVudHJ5LCBjYXVzZSwgdmlldzogdGhpcy5lcnJvclZpZXcoY2F1c2UsIHJ1bGUpIH0pO1xuICAgICAgdGhyb3cgZW52ZWxvcGU7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBjYWxsKCk7XG4gICAgICAvLyBWb2lkIGFkYXB0ZXJzIGtlZXAgdGhlaXIgc3luY2hyb25vdXMgcGF0aDsgb25seSBhbiBvYmplY3QvZnVuY3Rpb24gY2FuIGJlIGEgdGhlbmFibGUuIHNldHRsZU9uY2VcbiAgICAgIC8vIG9ic2VydmVzIG5hdGl2ZSBwcm9taXNlcyB0aHJvdWdoIFByb21pc2UucHJvdG90eXBlLnRoZW4gYW5kIGd1YXJkcyBob3N0aWxlIHRoZW5hYmxlcyB0b28uXG4gICAgICBpZiAocmV0dXJuZWQgPT09IG51bGwgfHwgKHR5cGVvZiByZXR1cm5lZCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHJldHVybmVkICE9PSAnZnVuY3Rpb24nKSkgcmV0dXJuIHJldHVybmVkO1xuICAgICAgcmV0dXJuIHNldHRsZU9uY2UocmV0dXJuZWQsICgpID0+IHVuZGVmaW5lZCwgZmFpbGVkKTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgcmV0dXJuIGZhaWxlZChjYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEEgc2luayBlcnJvciBpcyB0aGUgZGlhZ25vc3RpYyBlcnJvcnMucmVjb3JkU2lua0Vycm9yOyByYXcgY2F1c2VzIGJlbG9uZyBvbmx5IHRvIHRoZSBjYWxsZXIncyBleGNlcHRpb24uICovXG4gIHByaXZhdGUgZXJyb3JWaWV3KGVycm9yOiB1bmtub3duLCBydWxlOiBSZWRhY3Rpb25SdWxlIHwgdW5kZWZpbmVkKTogU2lua0Vycm9yVmlldyB7XG4gICAgY29uc3QgdGV4dCA9IHRocm93blRleHQoZXJyb3IpO1xuICAgIGNvbnN0IHJldGFpbmVkID0gcnVsZVxuICAgICAgPyBydWxlLnJldGFpblN0YWdlRXJyb3IoZXJyb3IsIHRleHQsIHJ1bGUucmV0YWluRGlhZ25vc3RpYyhbJ2Vycm9ycycsICdyZWNvcmRTaW5rRXJyb3InXSwgdGV4dCkpXG4gICAgICA6IHsgbWVzc2FnZTogdGV4dCwgc3RydWN0dXJlZEVycm9yOiBleHRyYWN0RXJyb3JJbmZvKGVycm9yKSB9O1xuICAgIGNvbnN0IHNlcnZlZCA9IHsgLi4ucmV0YWluZWQuc3RydWN0dXJlZEVycm9yIH07XG4gICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShzZXJ2ZWQsICdyYXcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogcmV0YWluZWQubWVzc2FnZSxcbiAgICAgIGVycm9yOiBzZXJ2ZWQsXG4gICAgICBtYXNrZWQ6IHJldGFpbmVkLm1lc3NhZ2UgIT09IHRleHQgfHwgcmV0YWluZWQuc3RydWN0dXJlZEVycm9yLnJhdyAhPT0gZXJyb3IsXG4gICAgICBydWxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSBzdGFydHMgYSBuZXcgbGVnIG9uIHRoZSBzYW1lIHJlY29yZDogdGhlIGNvdW50cyBnbyBvbiAob25lIGxvZywgb25lIHJlY29yZCksIGJ1dCB0aGVcbiAgICogZmFpbHVyZSBtb2RlIGlzIHRoZSBMRUcncyDigJQgYSBsb3NzIGluIGFuIGVhcmxpZXIgbGVnICh3aGljaCBhbHJlYWR5IGZhaWxlZCB0aGF0IGxlZykgZG9lcyBub3Qgc3RvcCB0aGlzIG9uZSDigJRcbiAgICogYW5kIHRoZSBkZXYtbW9kZSB3YXJuaW5nIG1heSBmaXJlIGFnYWluLlxuICAgKi9cbiAgYmVnaW5MZWcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmZhaWx1cmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53YXJuZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBUaGUgbGVnJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIGEgcmVzdW1lIGJ1aWxkcyBhIG5ldyBvbmU7IHRoZSBuZXh0IGBvcGVuZWRgIC8gYGNsb3NlZGAgaXMgc2VydmVkIHVuZGVyIGl0LiAqL1xuICB1c2VSdWxlKHJ1bGU6IFJlZGFjdGlvblJ1bGUgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bGUgPSBydWxlO1xuICB9XG5cbiAgLyoqIEFib3J0cyBhdCB0aGUgZmlyc3QgbG9zcyB1bmRlciBgb25GYWlsdXJlOiAnZmFpbCdgOyBhYnNlbnQgb3RoZXJ3aXNlLiAqL1xuICBnZXQgc3RvcFNpZ25hbCgpOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcHBlcj8uc2lnbmFsO1xuICB9XG5cbiAgZ2V0IGZsdXNoTW9kZSgpOiBSZWNvcmRTaW5rRmx1c2hNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZC5mbHVzaDtcbiAgfVxuXG4gIC8qKiBUaGUgbG9zcyB0aGF0IGZhaWxzIHRoZSBydW4gdW5kZXIgYCdmYWlsJ2A7IGFic2VudCB3aGlsZSBub3RoaW5nIHdhcyBsb3N0IChhbmQgYWx3YXlzIHVuZGVyIGAncmVwb3J0J2ApLiAqL1xuICBnZXQgZmF0YWwoKTogUmVjb3JkU2lua0Vycm9yIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mYWlsdXJlO1xuICB9XG5cbiAgc3RhdHMoKTogUmVjb3JkU2lua1N0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzLFxuICAgICAgZmFpbGVkOiB0aGlzLmZhaWxlZCxcbiAgICAgIC4uLih0aGlzLmxhc3RFcnJvciA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGxhc3RFcnJvcjogdGhpcy5sYXN0RXJyb3IgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdCB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCwgYXQgbW9zdCBgdGltZW91dE1zYCB3aGVuIGdpdmVuLiBBIGZsdXNoIHRoYXQgdGhyb3dzIG9yIHJlamVjdHMgaXMgYSBsb3NzXG4gICAqIChjb3VudGVkLCBhbmQgZmF0YWwgdW5kZXIgYCdmYWlsJ2ApOyBvbmUgc3RpbGwgcnVubmluZyBhdCB0aGUgZGVhZGxpbmUgaXMgYHBlbmRpbmdgIGFuZCBrZWVwcyBydW5uaW5nIOKAlCBhbmQsXG4gICAqIHdpdGggYHBlbmRpbmdJc0xvc3NgICh0aGUgcnVuJ3Mgb3duIGZsdXNoKSwgY291bnRlZCBhcyBhIGxvc3MgdG9vLCBzbyBhIGZsdXNoIHRoYXQgbmV2ZXIgc2V0dGxlcyBjYW5ub3QgaG9sZCBhXG4gICAqIHJ1biBvcGVuLCBhbmQgY2Fubm90IHBhc3MgZm9yIG9uZSB0aGF0IGxhbmRlZC4gTm90aGluZyBoZXJlIHRocm93czogYSBob3N0aWxlIGFkYXB0ZXIgKGEgdGhyb3dpbmcgYGZsdXNoYFxuICAgKiBnZXR0ZXIsIGEgcHJvbWlzZSB3aXRoIGl0cyBvd24gYHRoZW5gKSBpcyBhIGxvc3MsIG5ldmVyIHRoZSBydW4ncyBlcnJvci5cbiAgICovXG4gIGFzeW5jIGZsdXNoKHRpbWVvdXRNcz86IG51bWJlciwgcGVuZGluZ0lzTG9zcyA9IGZhbHNlKTogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLnJlc29sdmVkLmFkYXB0ZXI7XG4gICAgY29uc3QgcnVsZSA9IHRoaXMucnVsZTtcbiAgICBsZXQgc2V0dGxlZDogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD47XG4gICAgbGV0IGdpdmVuVXAgPSBmYWxzZTsgLy8gYSBmbHVzaCBhbHJlYWR5IGNvdW50ZWQgYXMgYSBsb3NzIGF0IHRoZSBkZWFkbGluZSBpcyBub3QgY291bnRlZCBhZ2FpbiB3aGVuIGl0IHJlamVjdHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmx1c2g6IHVua25vd24gPSBhZGFwdGVyLmZsdXNoOyAvLyByZWFkIG9uY2U6IGEgZ2V0dGVyIHJ1bnMgb25jZSwgaW5zaWRlIHRoZSBndWFyZFxuICAgICAgaWYgKHR5cGVvZiBmbHVzaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfTtcbiAgICAgIHNldHRsZWQgPSBzZXR0bGVPbmNlKFxuICAgICAgICBmbHVzaC5jYWxsKGFkYXB0ZXIpLFxuICAgICAgICAoKTogUmVjb3JkRmx1c2hSZXN1bHQgPT4gKHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfSksXG4gICAgICAgIChlcnJvcik6IFJlY29yZEZsdXNoUmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIWdpdmVuVXApIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvc3QoZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZXJyb3IsIHJ1bGUpKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh0aW1lb3V0TXMgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykpIHJldHVybiBzZXR0bGVkO1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPFJlY29yZEZsdXNoUmVzdWx0PigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoeyBkb25lOiBmYWxzZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogdHJ1ZSB9KSwgTWF0aC5tYXgoMCwgdGltZW91dE1zKSk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbc2V0dGxlZCwgcGVuZGluZ10pO1xuICAgICAgaWYgKHJlc3VsdC5wZW5kaW5nICYmIHBlbmRpbmdJc0xvc3MpIHtcbiAgICAgICAgZ2l2ZW5VcCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGByZWNvcmQgc2luazogZmx1c2goKSBkaWQgbm90IHNldHRsZSB3aXRoaW4gJHtNYXRoLm1heCgwLCB0aW1lb3V0TXMpfW1zYCk7XG4gICAgICAgIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIG1ldGEgYXMgc2VydmVkOiBhIGJvdW5kYXJ5IHJlY29yZCwgc2NydWJiZWQgYnkga2V5IG5hbWUgYXQgZXZlcnkgZGVwdGggKGFuIGluZXJ0IHJ1bGUgY29waWVzIG5vdGhpbmcpLiAqL1xuICBzZXJ2ZShtZXRhOiBNZXRhKTogTWV0YSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZSA/IHRoaXMucnVsZS5yZXRhaW5Cb3VuZGFyeShtZXRhLCBMT0dfUExBQ0VIT0xERVIpIDogbWV0YTtcbiAgfVxuXG4gIC8qKiBPbmUgbG9zczogY291bnRlZCwgd2FybmVkIG9uY2UgcGVyIHJ1biwgdG9sZCB3aXRoIGEgc2FmZSBkaXNwYXRjaGVkIGVudHJ5IHdoZW4gYXZhaWxhYmxlLCBmYXRhbCB1bmRlciAnZmFpbCcuICovXG4gIHByaXZhdGUgbG9zdChlcnJvcjogdW5rbm93biwgZW50cnk6IFJlY29yZEVudHJ5IHwgdW5kZWZpbmVkLCB2aWV3OiBTaW5rRXJyb3JWaWV3KTogdm9pZCB7XG4gICAgdGhpcy5mYWlsZWQgKz0gMTtcbiAgICBjb25zdCB0ZXh0ID0gdmlldy50ZXh0O1xuICAgIHRoaXMubGFzdEVycm9yID0gdGV4dDtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMud2FybmVkKSB7XG4gICAgICB0aGlzLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gcmVjb3JkIHNpbms6IGFuIGVudHJ5IHdhcyBub3Qgc3RvcmVkICgke3RleHR9KS4gVGhlIHJ1biBnb2VzIG9uOyBgICtcbiAgICAgICAgICAnZ2V0U25hcHNob3QoKS5zaW5rIGNvdW50cyBldmVyeSBsb3NzLicsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBUaGUgZmFpbHVyZSBtb2RlIGZpcnN0OiBub3RoaW5nIHRoZSBhZGFwdGVyJ3Mgb3duIGxpc3RlbmVyIGRvZXMgY2FuIHNraXAgaXQuXG4gICAgaWYgKHRoaXMuc3RvcHBlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmFpbHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZhaWx1cmUgPSBuZXcgUmVjb3JkU2lua0Vycm9yKGByZWNvcmQgc2luazogYW4gZW50cnkgd2FzIG5vdCBzdG9yZWQg4oCUICR7dGV4dH1gLCBlcnJvcik7XG4gICAgICBpZiAodmlldy5tYXNrZWQpIHtcbiAgICAgICAgLy8gVGhlIGNhbGxlciBrZWVwcyB0aGUgcmVhbCBjYXVzZSwgYnV0IG9ic2VydmVycyBvZiB0aGlzIG5ldyB3cmFwcGVyIG11c3QgaW5oZXJpdCBpdHMgcmVtZW1iZXJlZCBtYXNrLlxuICAgICAgICB2aWV3LnJ1bGU/LnJldGFpblN0YWdlRXJyb3IodGhpcy5mYWlsdXJlLCB0aGlzLmZhaWx1cmUubWVzc2FnZSwgU0NPUEVfUExBQ0VIT0xERVIpO1xuICAgICAgICBpZiAodGhpcy5ydWxlICE9PSB2aWV3LnJ1bGUpIHRoaXMucnVsZT8ucmV0YWluU3RhZ2VFcnJvcih0aGlzLmZhaWx1cmUsIHRoaXMuZmFpbHVyZS5tZXNzYWdlLCBTQ09QRV9QTEFDRUhPTERFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BwZXIuYWJvcnQodGhpcy5mYWlsdXJlKTtcbiAgICB9XG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHRlbGxBZGFwdGVyKHRoaXMucmVzb2x2ZWQuYWRhcHRlciwgeyBlbnRyeSwgZXJyb3I6IHZpZXcuZXJyb3IgfSk7XG4gIH1cbn1cblxuLyoqIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgLCBpc29sYXRlZDogYSB0aHJvd2luZyBnZXR0ZXIsIGEgdGhyb3cgb3IgYSByZWplY3Rpb24gdGhlcmUgY2hhbmdlcyBub3RoaW5nLiAqL1xuZnVuY3Rpb24gdGVsbEFkYXB0ZXIoYWRhcHRlcjogUmVjb3JkU2luaywgZmFpbHVyZTogeyByZWFkb25seSBlbnRyeTogUmVjb3JkRW50cnk7IHJlYWRvbmx5IGVycm9yOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ZW5lcjogdW5rbm93biA9IGFkYXB0ZXIub25GYWlsdXJlO1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBzZXR0bGVPbmNlKFxuICAgICAgbGlzdGVuZXIuY2FsbChhZGFwdGVyLCBmYWlsdXJlKSxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICAvLyBBIGxpc3RlbmVyIHRoYXQgZmFpbHMgaXMgdGhlIGFkYXB0ZXIncyBvd24gYnVzaW5lc3M6IHRoZSBsb3NzIGlzIGFscmVhZHkgY291bnRlZC5cbiAgfVxufVxuXG4vKipcbiAqIGB2YWx1ZWAsIHNldHRsZWQgT05DRSBpbnRvIGBvblZhbHVlYCAvIGBvbkVycm9yYCDigJQgbmV2ZXIgdGhyb3VnaCB0aGUgdmFsdWUncyBvd24gYHRoZW5gOiBhIG5hdGl2ZSBwcm9taXNlIGlzXG4gKiB3YXRjaGVkIHRocm91Z2ggdGhlIHJlYWwgYFByb21pc2UucHJvdG90eXBlLnRoZW5gIChhbiBvd24gYHRoZW5gIG9uIGl0IGlzIG5vdCB0cnVzdGVkLCBzbyBpdHMgcmVqZWN0aW9uIGlzIGFsd2F5c1xuICogaGFuZGxlZCksIGFueSBvdGhlciB0aGVuYWJsZSBhZG9wdGVkIGludG8gYSBmcmVzaCBwcm9taXNlLiBBIHBsYWluIHZhbHVlIGlzIGEgZnVsZmlsbWVudC5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlT25jZTxUPih2YWx1ZTogdW5rbm93biwgb25WYWx1ZTogKCkgPT4gVCwgb25FcnJvcjogKGVycm9yOiB1bmtub3duKSA9PiBUKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFkb3B0ZWQ6IFByb21pc2U8dW5rbm93bj4gPSB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIHJldHVybiBQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoYWRvcHRlZCwgb25WYWx1ZSwgb25FcnJvcikgYXMgUHJvbWlzZTxUPjtcbn1cbiJdfQ==
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkU2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3JlY29yZFNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHOzs7QUFJSCwyQ0FBa0Q7QUFHbEQsb0VBQTBEO0FBQzFELDhDQUEwQztBQUMxQyx5REFBc0U7QUFFdEUseURBQTJEO0FBeUMzRDs7O0dBR0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsS0FBSztJQUVGO0lBRHBCLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUMzQyxZQUFZLE9BQWUsRUFBVyxLQUFjO1FBQ2xELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURxQixVQUFLLEdBQUwsS0FBSyxDQUFTO0lBRXBELENBQUM7Q0FDRjtBQUxELDBDQUtDO0FBVUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsQ0FBQztBQWVoRSxTQUFTLFNBQVMsQ0FBQyxLQUFjO0lBQy9CLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFRLEtBQWlDLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE1BQWU7SUFDL0MsSUFBSSxNQUFNLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3RGLElBQUksTUFB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U0FBUztZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGO0FBaFBELDhCQWdQQztBQUVELGdIQUFnSDtBQUNoSCxTQUFTLFdBQVcsQ0FBQyxPQUFtQixFQUFFLE9BQWlFO0lBQ3pHLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDNUMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVO1lBQUUsT0FBTztRQUMzQyxJQUFBLDhCQUFVLEVBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQy9CLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFDZixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asb0ZBQW9GO0lBQ3RGLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBydW5uZXIvcmVjb3JkU2luay50cyDigJQgdGhlIHJ1bidzIHNpZGUgb2YgdGhlIGNyYXNoLXNhZmUgcmVjb3JkIChkZXNpZ24gwqczLjUsIHBhY2tldCBQNikuXG4gKlxuICogZm9vdHRyYWNlIG93bnMgdGhlIHBvcnQgKGBSZWNvcmRTaW5rYCwgYGZvb3R0cmFjZS93cml0ZWApOiBhIGxvZyBidWlsdCB3aXRoIGEgc2luayBoYW5kcyBpdCBldmVyeSBlbnRyeSBBUyBJVFxuICogTEFORFMg4oCUIGBvcGVuZWRgLCBgY29tbWl0YCwgYG5vdGVgLCBgY2xvc2VkYCDigJQgYW5kIGNvdW50cyB3aGF0IHRoZSBzaW5rIGRpZCBub3QgdGFrZS4gVGhpcyBmaWxlIGlzIHdoYXQgdGhlXG4gKiBFWEVDVVRPUiBhZGRzIGFyb3VuZCBhbiBhcHAncyBhZGFwdGVyLCBvbmUge0BsaW5rIFJ1blJlY29yZH0gcGVyIHJ1bjpcbiAqXG4gKiAgIC0gVEhFIE9ORSBMQVcsIGJlZm9yZSBhbnkgYnl0ZSBsZWF2ZXM6IHRoZSBgb3BlbmVkYCBiYXNlIGlzIHRoZSBydW4ncyBzZXJ2ZWQgZm9ybSBvZiBpdCAodGhlIHJlZGFjdGlvbiBydWxlJ3NcbiAqICAgICBgcmV0YWluU3RhdGVgLCB0aGUgbWlycm9yJ3Mgc2VlZCDigJQgc28gYSBwb2xpY3kga2V5IHNlZWRlZCBieSBgaW5pdGlhbENvbnRleHRgIG9yIGEgY2hlY2twb2ludCBuZXZlciByZWFjaGVzXG4gKiAgICAgdGhlIHNpbmspLCBhbmQgdGhlIGBvcGVuZWRgIC8gYGNsb3NlZGAgbWV0YSBhcmUgYm91bmRhcnkgcmVjb3JkcyAoYHJldGFpbkJvdW5kYXJ5YCkuIEEgY29tbWl0IGlzIHRoZSBsb2cncyBvd25cbiAqICAgICBidW5kbGUsIGFscmVhZHkgc2NydWJiZWQgYXQgY29tbWl0OyBhbiBhdHRlbXB0IG5vdGUgY2FycmllcyB0aGUgc2VydmVkIGBBdHRlbXB0UmVjb3JkYCAobm8gYHJhd2ApLlxuICogICAtIEFDQ09VTlRJTkc6IGV2ZXJ5IGVudHJ5IGhhbmRlZCB0byB0aGUgYWRhcHRlciBpcyBjb3VudGVkLCBldmVyeSBsb3NzIHRvbyAoYGdldFNuYXBzaG90KCkuc2lua2ApLCB3aXRoIGFcbiAqICAgICBkZXYtbW9kZSB3YXJuaW5nIG9uIHRoZSBmaXJzdCBsb3NzIG9mIGEgcnVuLiBUaGUgYWRhcHRlcidzIG93biBgb25GYWlsdXJlYCBoZWFycyBhIGRpc3BhdGNoZWQgZW50cnkncyBsb3NzXG4gKiAgICAgd2l0aCB0aGF0IHNhbWUgc2VydmVkIGVudHJ5IGFuZCBhIHNlcnZlZCBlcnJvciwgaXNvbGF0ZWQuIEEgcmVmdXNhbCBiZWZvcmUgZGlzcGF0Y2ggaXMgY291bnRlZCB3aXRob3V0XG4gKiAgICAgZm9yd2FyZGluZyBGb290dHJhY2UncyB1bnNlcnZlZCBlbnRyeS5cbiAqICAgLSBUSEUgRkFJTFVSRSBNT0RFIChvd25lciBydWxpbmcgUTMpOiBgJ3JlcG9ydCdgIChkZWZhdWx0KSDigJQgdGhlIHJ1biBnb2VzIG9uOyBgJ2ZhaWwnYCDigJQgdGhlIGZpcnN0IGxvc3QgZW50cnlcbiAqICAgICBhYm9ydHMgdGhlIHJ1bidzIHNpZ25hbCB3aXRoIGEge0BsaW5rIFJlY29yZFNpbmtFcnJvcn0sIGFuZCBhIHJ1biB0aGF0IGZpbmlzaGVkIHdpdGggYSBsb3NzIHJlamVjdHMgd2l0aCBpdC5cbiAqICAgLSBGTFVTSDogYCdhdXRvJ2AgKGRlZmF1bHQpIOKAlCBgcnVuKClgIC8gYHJlc3VtZSgpYCBhd2FpdCB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBhZnRlciB0aGUgY2xvc2luZyBlbnRyeTtcbiAqICAgICBgJ21hbnVhbCdgIOKAlCB0aGUgYXBwIGNhbGxzIGBleGVjdXRvci5mbHVzaFJlY29yZCgpYC5cbiAqXG4gKiBFdmVyeSBhZGFwdGVyIG1ldGhvZCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHRoZSBsb2c7IHdoYXRldmVyIHRoZSBhZGFwdGVyIHRocm93cyBvciByZWplY3RzIHdpdGggaXMgdGhlXG4gKiBsb2cncyB0byBjb3VudCAoYEV2ZW50TG9nIMK3IHNpbmtGYWlsdXJlc2ApLCBuZXZlciB0aGUgcnVuJ3Mg4oCUIHNvIG5vdGhpbmcgaGVyZSB0aHJvd3MgdG8gdGhlIGVuZ2luZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1ldGEgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRFbnRyeSwgUmVjb3JkU2luayB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5T3B0aW9ucywgQ2FwdHVyZUhpc3RvcnlTdGF0dXMgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgeyBzZXR0bGVPbmNlIH0gZnJvbSAnLi4vY2FwdHVyZS9zaW5rU2V0dGxlbWVudC5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB7IGV4dHJhY3RFcnJvckluZm8sIHRocm93blRleHQgfSBmcm9tICcuLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcmVkYWN0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkU2lua1N0YXRzIH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcblxuLyoqIFdoYXQgYSBsb3N0IGVudHJ5IGRvZXMgdG8gdGhlIHJ1bjogYCdyZXBvcnQnYCBjb3VudHMgaXQgYW5kIGdvZXMgb247IGAnZmFpbCdgIGZhaWxzIHRoZSBydW4uICovXG5leHBvcnQgdHlwZSBSZWNvcmRTaW5rRmFpbHVyZU1vZGUgPSAncmVwb3J0JyB8ICdmYWlsJztcblxuLyoqIFdoZW4gdGhlIGFkYXB0ZXIncyBgZmx1c2goKWAgcnVuczogYWZ0ZXIgZWFjaCBydW4ncyBjbG9zaW5nIGVudHJ5IChgJ2F1dG8nYCksIG9yIHdoZW4gdGhlIGFwcCBhc2tzLiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua0ZsdXNoTW9kZSA9ICdhdXRvJyB8ICdtYW51YWwnO1xuXG4vKipcbiAqIFRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24gaW4gaXRzIGxvbmcgZm9ybS4gVGhlIHNob3J0IGZvcm0gaXMgdGhlIGFkYXB0ZXIgaXRzZWxmLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgc2luazogeyBhZGFwdGVyOiBmaWxlU2luaygnL3Zhci9mb290cHJpbnQvcnVuLmpzb25sJyksIG9uRmFpbHVyZTogJ2ZhaWwnIH0gfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTaW5rT3B0aW9ucyB7XG4gIC8qKiBXaGVyZSB0aGUgZW50cmllcyBnbyDigJQgYGZpbGVTaW5rKHBhdGgpYCAoYGZvb3RwcmludGpzL3NpbmtzYCksIGBtZW1vcnlTaW5rKClgIChgZm9vdHRyYWNlL3dyaXRlYCksIG9yIHlvdXJzLiAqL1xuICByZWFkb25seSBhZGFwdGVyOiBSZWNvcmRTaW5rO1xuICAvKiogYCdyZXBvcnQnYCAoZGVmYXVsdCk6IGEgbG9zdCBlbnRyeSBpcyBjb3VudGVkIGFuZCB0aGUgcnVuIGdvZXMgb24uIGAnZmFpbCdgOiB0aGUgZmlyc3Qgb25lIGZhaWxzIHRoZSBydW4uICovXG4gIHJlYWRvbmx5IG9uRmFpbHVyZT86IFJlY29yZFNpbmtGYWlsdXJlTW9kZTtcbiAgLyoqIGAnYXV0bydgIChkZWZhdWx0KTogYHJ1bigpYCBhd2FpdHMgdGhlIGFkYXB0ZXIncyBgZmx1c2goKWAgYWZ0ZXIgdGhlIGNsb3NpbmcgZW50cnkuIGAnbWFudWFsJ2A6IGBmbHVzaFJlY29yZCgpYC4gKi9cbiAgcmVhZG9ubHkgZmx1c2g/OiBSZWNvcmRTaW5rRmx1c2hNb2RlO1xuICAvKiogT3B0LWluIGNhcHR1cmUgZXZpZGVuY2UgYW5kIGV4cGxpY2l0IGhvc3QgYWNrbm93bGVkZ2VtZW50OyBvcmRpbmFyeSBmbHVzaCBuZXZlciBpbXBsaWVzIGR1cmFiaWxpdHkuICovXG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlSGlzdG9yeU9wdGlvbnM7XG59XG5cbi8qKiBUaGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uOiBhbiBhZGFwdGVyLCBvciB7QGxpbmsgUmVjb3JkU2lua09wdGlvbnN9LiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua09wdGlvbiA9IFJlY29yZFNpbmsgfCBSZWNvcmRTaW5rT3B0aW9ucztcblxuLyoqIFdoYXQgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgIHJlc29sdmVzIHdpdGgg4oCUIHRoZSBgZHJhaW5PYnNlcnZlcnNgIHNoYXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRGbHVzaFJlc3VsdCB7XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIGZpbmlzaGVkIChvciB0aGVyZSB3YXMgbm90aGluZyB0byBmbHVzaCkuICovXG4gIHJlYWRvbmx5IGRvbmU6IGJvb2xlYW47XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIHRocmV3IG9yIHJlamVjdGVkIOKAlCBjb3VudGVkIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLiAqL1xuICByZWFkb25seSBmYWlsZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgZmx1c2ggaGFkIG5vdCBzZXR0bGVkIHdoZW4gYHRpbWVvdXRNc2AgcmFuIG91dC4gKi9cbiAgcmVhZG9ubHkgcGVuZGluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHJ1biB3aXRoIGBzaW5rOiB7IG9uRmFpbHVyZTogJ2ZhaWwnIH1gIGxvc3QgYW4gZW50cnk6IHRoZSByZWNvcmQgdGhlIGFwcCBhc2tlZCB0byBiZSBrZXB0IGlzIG5vdCB3aG9sZS5cbiAqIGBjYXVzZWAgaXMgdGhlIGFkYXB0ZXIncyBvd24gZXJyb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRTaW5rRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSAnUmVjb3JkU2lua0Vycm9yJztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCByZWFkb25seSBjYXVzZTogdW5rbm93bikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKiBUaGUgb3B0aW9uIHJlc29sdmVkIG9uY2UsIGF0IGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRSZWNvcmRTaW5rIHtcbiAgcmVhZG9ubHkgYWRhcHRlcjogUmVjb3JkU2luaztcbiAgcmVhZG9ubHkgb25GYWlsdXJlOiBSZWNvcmRTaW5rRmFpbHVyZU1vZGU7XG4gIHJlYWRvbmx5IGZsdXNoOiBSZWNvcmRTaW5rRmx1c2hNb2RlO1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZUhpc3RvcnlPcHRpb25zO1xufVxuXG5jb25zdCBNRVRIT0RTID0gWydvcGVuZWQnLCAnY29tbWl0JywgJ25vdGUnLCAnY2xvc2VkJ10gYXMgY29uc3Q7XG5cbmludGVyZmFjZSBTaW5rRXJyb3JWaWV3IHtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbiAgcmVhZG9ubHkgbWFza2VkOiBib29sZWFuO1xuICByZWFkb25seSBydWxlPzogUmVkYWN0aW9uUnVsZTtcbn1cblxuaW50ZXJmYWNlIEludm9jYXRpb25GYWlsdXJlIHtcbiAgcmVhZG9ubHkgZW50cnk6IFJlY29yZEVudHJ5O1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcbiAgcmVhZG9ubHkgdmlldzogU2lua0Vycm9yVmlldztcbn1cblxuZnVuY3Rpb24gaXNBZGFwdGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkU2luayB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBNRVRIT0RTLmV2ZXJ5KChtKSA9PiB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uLCBvciByZWZ1c2UgaXQgd2l0aCBhIGBUeXBlRXJyb3JgIG5hbWluZyB3aGF0IGlzIHdyb25nIOKAlCBhIHdpcmluZyBtaXN0YWtlXG4gKiB0aGUgYXBwIG1ha2VzIG9uY2UsIHNvIGl0IGZhaWxzIGF0IGNvbnN0cnVjdGlvbiwgbmV2ZXIgbWlkLXJ1bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWNvcmRTaW5rKG9wdGlvbjogdW5rbm93bik6IFJlc29sdmVkUmVjb3JkU2luayB8IHVuZGVmaW5lZCB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGlzQWRhcHRlcihvcHRpb24pKSByZXR1cm4geyBhZGFwdGVyOiBvcHRpb24sIG9uRmFpbHVyZTogJ3JlcG9ydCcsIGZsdXNoOiAnYXV0bycgfTtcbiAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBPYmplY3QuaGFzT3duKG9wdGlvbiwgJ2FkYXB0ZXInKSkge1xuICAgIGNvbnN0IHsgYWRhcHRlciwgb25GYWlsdXJlID0gJ3JlcG9ydCcsIGZsdXNoID0gJ2F1dG8nLCBjYXB0dXJlIH0gPSBvcHRpb24gYXMgUGFydGlhbDxSZWNvcmRTaW5rT3B0aW9ucz47XG4gICAgaWYgKCFpc0FkYXB0ZXIoYWRhcHRlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rLmFkYXB0ZXIgbXVzdCBiZSBhIFJlY29yZFNpbmsgKG9wZW5lZCwgY29tbWl0LCBub3RlLCBjbG9zZWQpJyk7XG4gICAgfVxuICAgIGlmIChvbkZhaWx1cmUgIT09ICdyZXBvcnQnICYmIG9uRmFpbHVyZSAhPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsub25GYWlsdXJlIG11c3QgYmUgJ3JlcG9ydCcgb3IgJ2ZhaWwnXCIpO1xuICAgIH1cbiAgICBpZiAoZmx1c2ggIT09ICdhdXRvJyAmJiBmbHVzaCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGbG93Q2hhcnRFeGVjdXRvcjogc2luay5mbHVzaCBtdXN0IGJlICdhdXRvJyBvciAnbWFudWFsJ1wiKTtcbiAgICB9XG4gICAgaWYgKGNhcHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFjYXB0dXJlIHx8IHR5cGVvZiBjYXB0dXJlLmFja25vd2xlZGdlICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaW5rLmNhcHR1cmUgcmVxdWlyZXMgYWNrbm93bGVkZ2UnKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgbWF4XSBvZiBbXG4gICAgICAgIFsnbWF4Qnl0ZXMnLCA4ICogMTAyNCAqIDEwMjRdLFxuICAgICAgICBbJ3RpbWVvdXRNcycsIDMwXzAwMF0sXG4gICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FwdHVyZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEgfHwgdmFsdWUgPiBtYXgpKVxuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBzaW5rLmNhcHR1cmUuJHtrZXl9IG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgYXQgbW9zdCAke21heH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZml4ZWRDYXB0dXJlID1cbiAgICAgIGNhcHR1cmUgJiZcbiAgICAgIE9iamVjdC5mcmVlemUoe1xuICAgICAgICBhY2tub3dsZWRnZTogY2FwdHVyZS5hY2tub3dsZWRnZS5iaW5kKGNhcHR1cmUpLFxuICAgICAgICAuLi4oY2FwdHVyZS5tYXhCeXRlcyAhPT0gdW5kZWZpbmVkICYmIHsgbWF4Qnl0ZXM6IGNhcHR1cmUubWF4Qnl0ZXMgfSksXG4gICAgICAgIC4uLihjYXB0dXJlLnRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dE1zOiBjYXB0dXJlLnRpbWVvdXRNcyB9KSxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7IGFkYXB0ZXIsIG9uRmFpbHVyZSwgZmx1c2gsIC4uLihmaXhlZENhcHR1cmUgJiYgeyBjYXB0dXJlOiBmaXhlZENhcHR1cmUgfSkgfTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdGbG93Q2hhcnRFeGVjdXRvcjogc2luayBtdXN0IGJlIGEgUmVjb3JkU2luayAob3BlbmVkLCBjb21taXQsIG5vdGUsIGNsb3NlZCkgb3IgeyBhZGFwdGVyLCBvbkZhaWx1cmU/LCBmbHVzaD8gfScsXG4gICk7XG59XG5cbi8qKlxuICogT25lIHJ1bidzIHJlY29yZCBzaW5rOiB0aGUgc2luayBldmVyeSBsb2cgb2YgdGhlIHJ1biB3cml0ZXMgdG8gKHJvb3QgYW5kIG1vdW50cyksIGl0cyBhY2NvdW50aW5nIGFuZCBpdHNcbiAqIGZhaWx1cmUgbW9kZS4gQSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSBrZWVwcyBpdCAodGhlIHJvb3QgbG9nIGdvZXMgb24pOyBhIGZyZXNoIHJ1biBtYWtlcyBhIG5ldyBvbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW5SZWNvcmQge1xuICAvKiogSGFuZCB0aGlzIHRvIGV2ZXJ5IGBFdmVudExvZ2Agb2YgdGhlIHJ1bi4gKi9cbiAgcmVhZG9ubHkgc2luazogUmVjb3JkU2luaztcbiAgcHJpdmF0ZSBlbnRyaWVzID0gMDtcbiAgcHJpdmF0ZSBmYWlsZWQgPSAwO1xuICBwcml2YXRlIGxhc3RFcnJvcj86IHN0cmluZztcbiAgcHJpdmF0ZSB3YXJuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBydWxlPzogUmVkYWN0aW9uUnVsZTtcbiAgLyoqIEFib3J0ZWQgYXQgdGhlIGZpcnN0IGxvc3MgdW5kZXIgYCdmYWlsJ2Ag4oCUIGNvbXBvc2VkIGludG8gdGhlIGxlZydzIHNpZ25hbDsgZnJlc2ggcGVyIGxlZyAoe0BsaW5rIGJlZ2luTGVnfSkuICovXG4gIHByaXZhdGUgc3RvcHBlcj86IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBmYWlsdXJlPzogUmVjb3JkU2lua0Vycm9yO1xuICBwcml2YXRlIGNhcHR1cmVQZW5kaW5nID0gMDtcbiAgcHJpdmF0ZSBjYXB0dXJlU3RhdHVzPzogQ2FwdHVyZUhpc3RvcnlTdGF0dXM7XG4gIC8qKiBPcGFxdWUgZXJyb3IgaWRlbnRpdGllcyBvbmx5OiBubyByYXcgZW50cnkgb3IgYWRhcHRlciBlcnJvciBpcyBlbnVtZXJhYmxlIG9uIHRoZSB0cmFuc3BvcnQgZXJyb3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW52b2NhdGlvbkZhaWx1cmVzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBJbnZvY2F0aW9uRmFpbHVyZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkOiBSZXNvbHZlZFJlY29yZFNpbmspIHtcbiAgICBpZiAocmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBhZGFwdGVyID0gcmVzb2x2ZWQuYWRhcHRlcjtcbiAgICBjb25zdCBoYW5kZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmVudHJpZXMgKz0gMTtcbiAgICB9O1xuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIG9wZW5lZDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5ydWxlO1xuICAgICAgICBjb25zdCBzZXJ2ZWQgPSB7XG4gICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZShlbnRyeS5pbml0aWFsU3RhdGUsIExPR19QTEFDRUhPTERFUikgOiBlbnRyeS5pbml0aWFsU3RhdGUsXG4gICAgICAgICAgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5zZXJ2ZWQsIGtpbmQ6ICdvcGVuZWQnIH0sICgpID0+IGFkYXB0ZXIub3BlbmVkKHNlcnZlZCksIHJ1bGUpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5lbnRyeSwga2luZDogJ2NvbW1pdCcgfSwgKCkgPT4gYWRhcHRlci5jb21taXQoZW50cnkpLCB0aGlzLnJ1bGUpO1xuICAgICAgfSxcbiAgICAgIG5vdGU6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKFxuICAgICAgICAgIHsgYWRkcmVzczogZW50cnkuYWRkcmVzcywgYXQ6IGVudHJ5LmF0LCBraW5kOiAnbm90ZScsIG5vdGU6IGVudHJ5LmtpbmQsIGRhdGE6IGVudHJ5LmRhdGEgfSxcbiAgICAgICAgICAoKSA9PiBhZGFwdGVyLm5vdGUoZW50cnkpLFxuICAgICAgICAgIHRoaXMucnVsZSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjbG9zZWQ6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgY29uc3Qgc2VydmVkID0geyAuLi5lbnRyeSwgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pIH07XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZSh7IC4uLnNlcnZlZCwga2luZDogJ2Nsb3NlZCcgfSwgKCkgPT4gYWRhcHRlci5jbG9zZWQoc2VydmVkKSwgdGhpcy5ydWxlKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWx1cmU6IChmYWlsdXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludm9jYXRpb24gPVxuICAgICAgICAgIGZhaWx1cmUuZXJyb3IgIT09IG51bGwgJiYgKHR5cGVvZiBmYWlsdXJlLmVycm9yID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgZmFpbHVyZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgID8gdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuZ2V0KGZhaWx1cmUuZXJyb3IpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gQmVmb3JlIGFkbWlzc2lvbiAoZS5nLiBhIG1ldGEtY29weSByZWZ1c2FsKSwgbm8gZGlzcGF0Y2hlZCBzZXJ2ZWQgZW50cnkgZXhpc3RzLiBDb3VudCB0aGUgbG9zcyBhbmRcbiAgICAgICAgLy8gYXBwbHkgdGhlIGZhaWx1cmUgbW9kZSwgYnV0IG5ldmVyIGhhbmQgdGhlIGFkYXB0ZXIgRm9vdHRyYWNlJ3Mgb3JpZ2luYWwsIHVuc2VydmVkIGVudHJ5LlxuICAgICAgICBpZiAoaW52b2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLmxvc3QoZmFpbHVyZS5lcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhmYWlsdXJlLmVycm9yLCB0aGlzLnJ1bGUpKTtcbiAgICAgICAgZWxzZSB0aGlzLmxvc3QoaW52b2NhdGlvbi5jYXVzZSwgaW52b2NhdGlvbi5lbnRyeSwgaW52b2NhdGlvbi52aWV3KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlIHRoZSBzZXJ2ZWQgZW50cnkgbm93OyBhbiBhc3luY2hyb25vdXMgZmFpbHVyZSBrZWVwcyB0aGlzIGxlZydzIHJ1bGUsIG5vdCBhIGxhdGVyIHJlc3VtZSdzIHJ1bGUuICovXG4gIHByaXZhdGUgaW52b2tlKGVudHJ5OiBSZWNvcmRFbnRyeSwgY2FsbDogKCkgPT4gdW5rbm93biwgcnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIGNvbnN0IGZhaWxlZCA9IChjYXVzZTogdW5rbm93bik6IG5ldmVyID0+IHtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gbmV3IEVycm9yKCdyZWNvcmQgc2luazogYWRhcHRlciBpbnZvY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuc2V0KGVudmVsb3BlLCB7IGVudHJ5LCBjYXVzZSwgdmlldzogdGhpcy5lcnJvclZpZXcoY2F1c2UsIHJ1bGUpIH0pO1xuICAgICAgdGhyb3cgZW52ZWxvcGU7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBjYWxsKCk7XG4gICAgICAvLyBWb2lkIGFkYXB0ZXJzIGtlZXAgdGhlaXIgc3luY2hyb25vdXMgcGF0aDsgb25seSBhbiBvYmplY3QvZnVuY3Rpb24gY2FuIGJlIGEgdGhlbmFibGUuIHNldHRsZU9uY2VcbiAgICAgIC8vIG9ic2VydmVzIG5hdGl2ZSBwcm9taXNlcyB0aHJvdWdoIFByb21pc2UucHJvdG90eXBlLnRoZW4gYW5kIGd1YXJkcyBob3N0aWxlIHRoZW5hYmxlcyB0b28uXG4gICAgICBpZiAocmV0dXJuZWQgPT09IG51bGwgfHwgKHR5cGVvZiByZXR1cm5lZCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHJldHVybmVkICE9PSAnZnVuY3Rpb24nKSkgcmV0dXJuIHJldHVybmVkO1xuICAgICAgaWYgKCF0aGlzLnJlc29sdmVkLmNhcHR1cmUpIHJldHVybiBzZXR0bGVPbmNlKHJldHVybmVkLCAoKSA9PiB1bmRlZmluZWQsIGZhaWxlZCk7XG4gICAgICB0aGlzLmNhcHR1cmVQZW5kaW5nKys7XG4gICAgICByZXR1cm4gc2V0dGxlT25jZShcbiAgICAgICAgcmV0dXJuZWQsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVQZW5kaW5nLS07XG4gICAgICAgIH0sXG4gICAgICAgIChjYXVzZSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FwdHVyZVBlbmRpbmctLTtcbiAgICAgICAgICByZXR1cm4gZmFpbGVkKGNhdXNlKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIHJldHVybiBmYWlsZWQoY2F1c2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBIHNpbmsgZXJyb3IgaXMgdGhlIGRpYWdub3N0aWMgZXJyb3JzLnJlY29yZFNpbmtFcnJvcjsgcmF3IGNhdXNlcyBiZWxvbmcgb25seSB0byB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uLiAqL1xuICBwcml2YXRlIGVycm9yVmlldyhlcnJvcjogdW5rbm93biwgcnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IFNpbmtFcnJvclZpZXcge1xuICAgIGNvbnN0IHRleHQgPSB0aHJvd25UZXh0KGVycm9yKTtcbiAgICBjb25zdCByZXRhaW5lZCA9IHJ1bGVcbiAgICAgID8gcnVsZS5yZXRhaW5TdGFnZUVycm9yKGVycm9yLCB0ZXh0LCBydWxlLnJldGFpbkRpYWdub3N0aWMoWydlcnJvcnMnLCAncmVjb3JkU2lua0Vycm9yJ10sIHRleHQpKVxuICAgICAgOiB7IG1lc3NhZ2U6IHRleHQsIHN0cnVjdHVyZWRFcnJvcjogZXh0cmFjdEVycm9ySW5mbyhlcnJvcikgfTtcbiAgICBjb25zdCBzZXJ2ZWQgPSB7IC4uLnJldGFpbmVkLnN0cnVjdHVyZWRFcnJvciB9O1xuICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoc2VydmVkLCAncmF3Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IHJldGFpbmVkLm1lc3NhZ2UsXG4gICAgICBlcnJvcjogc2VydmVkLFxuICAgICAgbWFza2VkOiByZXRhaW5lZC5tZXNzYWdlICE9PSB0ZXh0IHx8IHJldGFpbmVkLnN0cnVjdHVyZWRFcnJvci5yYXcgIT09IGVycm9yLFxuICAgICAgcnVsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc2FtZS1leGVjdXRvciByZXN1bWUgc3RhcnRzIGEgbmV3IGxlZyBvbiB0aGUgc2FtZSByZWNvcmQ6IHRoZSBjb3VudHMgZ28gb24gKG9uZSBsb2csIG9uZSByZWNvcmQpLCBidXQgdGhlXG4gICAqIGZhaWx1cmUgbW9kZSBpcyB0aGUgTEVHJ3Mg4oCUIGEgbG9zcyBpbiBhbiBlYXJsaWVyIGxlZyAod2hpY2ggYWxyZWFkeSBmYWlsZWQgdGhhdCBsZWcpIGRvZXMgbm90IHN0b3AgdGhpcyBvbmUg4oCUXG4gICAqIGFuZCB0aGUgZGV2LW1vZGUgd2FybmluZyBtYXkgZmlyZSBhZ2Fpbi5cbiAgICovXG4gIGJlZ2luTGVnKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc29sdmVkLm9uRmFpbHVyZSA9PT0gJ2ZhaWwnKSB0aGlzLnN0b3BwZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5mYWlsdXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMud2FybmVkID0gZmFsc2U7XG4gICAgdGhpcy5jYXB0dXJlU3RhdHVzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFRoZSBsZWcncyByZWRhY3Rpb24gcnVsZSDigJQgYSByZXN1bWUgYnVpbGRzIGEgbmV3IG9uZTsgdGhlIG5leHQgYG9wZW5lZGAgLyBgY2xvc2VkYCBpcyBzZXJ2ZWQgdW5kZXIgaXQuICovXG4gIHVzZVJ1bGUocnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMucnVsZSA9IHJ1bGU7XG4gIH1cblxuICAvKiogQWJvcnRzIGF0IHRoZSBmaXJzdCBsb3NzIHVuZGVyIGBvbkZhaWx1cmU6ICdmYWlsJ2A7IGFic2VudCBvdGhlcndpc2UuICovXG4gIGdldCBzdG9wU2lnbmFsKCk6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdG9wcGVyPy5zaWduYWw7XG4gIH1cblxuICBnZXQgZmx1c2hNb2RlKCk6IFJlY29yZFNpbmtGbHVzaE1vZGUge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkLmZsdXNoO1xuICB9XG5cbiAgLyoqIFRoZSBsb3NzIHRoYXQgZmFpbHMgdGhlIHJ1biB1bmRlciBgJ2ZhaWwnYDsgYWJzZW50IHdoaWxlIG5vdGhpbmcgd2FzIGxvc3QgKGFuZCBhbHdheXMgdW5kZXIgYCdyZXBvcnQnYCkuICovXG4gIGdldCBmYXRhbCgpOiBSZWNvcmRTaW5rRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZhaWx1cmU7XG4gIH1cblxuICBzdGF0cygpOiBSZWNvcmRTaW5rU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB0aGlzLmVudHJpZXMsXG4gICAgICBmYWlsZWQ6IHRoaXMuZmFpbGVkLFxuICAgICAgLi4uKHRoaXMubGFzdEVycm9yID09PSB1bmRlZmluZWQgPyB7fSA6IHsgbGFzdEVycm9yOiB0aGlzLmxhc3RFcnJvciB9KSxcbiAgICAgIC4uLih0aGlzLmNhcHR1cmVTdGF0dXMgJiYgeyBjYXB0dXJlOiB0aGlzLmNhcHR1cmVTdGF0dXMgfSksXG4gICAgfTtcbiAgfVxuXG4gIGdldCBjYXB0dXJlT3B0aW9ucygpOiBDYXB0dXJlSGlzdG9yeU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkLmNhcHR1cmU7XG4gIH1cblxuICBnZXQgcGVuZGluZ0NhcHR1cmVEZWxpdmVyaWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZVBlbmRpbmc7XG4gIH1cblxuICBjYXB0dXJlUmVzdWx0KHJlc3VsdDogQ2FwdHVyZUhpc3RvcnlTdGF0dXMpOiB2b2lkIHtcbiAgICB0aGlzLmNhcHR1cmVTdGF0dXMgPSBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gIH1cblxuICAvKiogU2FtZSBzZXJ2ZWQgc2VlZCBhcyBvcGVuZWQ7IGEgaGlzdG9yeSBkaWdlc3QgbmV2ZXIgc2VlcyBhIHNlZWRlZCBwb2xpY3kgc2VjcmV0LiAqL1xuICBjYXB0dXJlSW5pdGlhbFN0YXRlKHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5ydWxlID8gKHRoaXMucnVsZS5yZXRhaW5TdGF0ZShzdGF0ZSwgTE9HX1BMQUNFSE9MREVSKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdCB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCwgYXQgbW9zdCBgdGltZW91dE1zYCB3aGVuIGdpdmVuLiBBIGZsdXNoIHRoYXQgdGhyb3dzIG9yIHJlamVjdHMgaXMgYSBsb3NzXG4gICAqIChjb3VudGVkLCBhbmQgZmF0YWwgdW5kZXIgYCdmYWlsJ2ApOyBvbmUgc3RpbGwgcnVubmluZyBhdCB0aGUgZGVhZGxpbmUgaXMgYHBlbmRpbmdgIGFuZCBrZWVwcyBydW5uaW5nIOKAlCBhbmQsXG4gICAqIHdpdGggYHBlbmRpbmdJc0xvc3NgICh0aGUgcnVuJ3Mgb3duIGZsdXNoKSwgY291bnRlZCBhcyBhIGxvc3MgdG9vLCBzbyBhIGZsdXNoIHRoYXQgbmV2ZXIgc2V0dGxlcyBjYW5ub3QgaG9sZCBhXG4gICAqIHJ1biBvcGVuLCBhbmQgY2Fubm90IHBhc3MgZm9yIG9uZSB0aGF0IGxhbmRlZC4gTm90aGluZyBoZXJlIHRocm93czogYSBob3N0aWxlIGFkYXB0ZXIgKGEgdGhyb3dpbmcgYGZsdXNoYFxuICAgKiBnZXR0ZXIsIGEgcHJvbWlzZSB3aXRoIGl0cyBvd24gYHRoZW5gKSBpcyBhIGxvc3MsIG5ldmVyIHRoZSBydW4ncyBlcnJvci5cbiAgICovXG4gIGFzeW5jIGZsdXNoKHRpbWVvdXRNcz86IG51bWJlciwgcGVuZGluZ0lzTG9zcyA9IGZhbHNlKTogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLnJlc29sdmVkLmFkYXB0ZXI7XG4gICAgY29uc3QgcnVsZSA9IHRoaXMucnVsZTtcbiAgICBsZXQgc2V0dGxlZDogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD47XG4gICAgbGV0IGdpdmVuVXAgPSBmYWxzZTsgLy8gYSBmbHVzaCBhbHJlYWR5IGNvdW50ZWQgYXMgYSBsb3NzIGF0IHRoZSBkZWFkbGluZSBpcyBub3QgY291bnRlZCBhZ2FpbiB3aGVuIGl0IHJlamVjdHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmx1c2g6IHVua25vd24gPSBhZGFwdGVyLmZsdXNoOyAvLyByZWFkIG9uY2U6IGEgZ2V0dGVyIHJ1bnMgb25jZSwgaW5zaWRlIHRoZSBndWFyZFxuICAgICAgaWYgKHR5cGVvZiBmbHVzaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfTtcbiAgICAgIHNldHRsZWQgPSBzZXR0bGVPbmNlKFxuICAgICAgICBmbHVzaC5jYWxsKGFkYXB0ZXIpLFxuICAgICAgICAoKTogUmVjb3JkRmx1c2hSZXN1bHQgPT4gKHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfSksXG4gICAgICAgIChlcnJvcik6IFJlY29yZEZsdXNoUmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIWdpdmVuVXApIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvc3QoZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZXJyb3IsIHJ1bGUpKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh0aW1lb3V0TXMgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykpIHJldHVybiBzZXR0bGVkO1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPFJlY29yZEZsdXNoUmVzdWx0PigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoeyBkb25lOiBmYWxzZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogdHJ1ZSB9KSwgTWF0aC5tYXgoMCwgdGltZW91dE1zKSk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbc2V0dGxlZCwgcGVuZGluZ10pO1xuICAgICAgaWYgKHJlc3VsdC5wZW5kaW5nICYmIHBlbmRpbmdJc0xvc3MpIHtcbiAgICAgICAgZ2l2ZW5VcCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGByZWNvcmQgc2luazogZmx1c2goKSBkaWQgbm90IHNldHRsZSB3aXRoaW4gJHtNYXRoLm1heCgwLCB0aW1lb3V0TXMpfW1zYCk7XG4gICAgICAgIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIG1ldGEgYXMgc2VydmVkOiBhIGJvdW5kYXJ5IHJlY29yZCwgc2NydWJiZWQgYnkga2V5IG5hbWUgYXQgZXZlcnkgZGVwdGggKGFuIGluZXJ0IHJ1bGUgY29waWVzIG5vdGhpbmcpLiAqL1xuICBzZXJ2ZShtZXRhOiBNZXRhKTogTWV0YSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZSA/IHRoaXMucnVsZS5yZXRhaW5Cb3VuZGFyeShtZXRhLCBMT0dfUExBQ0VIT0xERVIpIDogbWV0YTtcbiAgfVxuXG4gIC8qKiBPbmUgbG9zczogY291bnRlZCwgd2FybmVkIG9uY2UgcGVyIHJ1biwgdG9sZCB3aXRoIGEgc2FmZSBkaXNwYXRjaGVkIGVudHJ5IHdoZW4gYXZhaWxhYmxlLCBmYXRhbCB1bmRlciAnZmFpbCcuICovXG4gIHByaXZhdGUgbG9zdChlcnJvcjogdW5rbm93biwgZW50cnk6IFJlY29yZEVudHJ5IHwgdW5kZWZpbmVkLCB2aWV3OiBTaW5rRXJyb3JWaWV3KTogdm9pZCB7XG4gICAgdGhpcy5mYWlsZWQgKz0gMTtcbiAgICBjb25zdCB0ZXh0ID0gdmlldy50ZXh0O1xuICAgIHRoaXMubGFzdEVycm9yID0gdGV4dDtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMud2FybmVkKSB7XG4gICAgICB0aGlzLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gcmVjb3JkIHNpbms6IGFuIGVudHJ5IHdhcyBub3Qgc3RvcmVkICgke3RleHR9KS4gVGhlIHJ1biBnb2VzIG9uOyBgICtcbiAgICAgICAgICAnZ2V0U25hcHNob3QoKS5zaW5rIGNvdW50cyBldmVyeSBsb3NzLicsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBUaGUgZmFpbHVyZSBtb2RlIGZpcnN0OiBub3RoaW5nIHRoZSBhZGFwdGVyJ3Mgb3duIGxpc3RlbmVyIGRvZXMgY2FuIHNraXAgaXQuXG4gICAgaWYgKHRoaXMuc3RvcHBlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmFpbHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZhaWx1cmUgPSBuZXcgUmVjb3JkU2lua0Vycm9yKGByZWNvcmQgc2luazogYW4gZW50cnkgd2FzIG5vdCBzdG9yZWQg4oCUICR7dGV4dH1gLCBlcnJvcik7XG4gICAgICBpZiAodmlldy5tYXNrZWQpIHtcbiAgICAgICAgLy8gVGhlIGNhbGxlciBrZWVwcyB0aGUgcmVhbCBjYXVzZSwgYnV0IG9ic2VydmVycyBvZiB0aGlzIG5ldyB3cmFwcGVyIG11c3QgaW5oZXJpdCBpdHMgcmVtZW1iZXJlZCBtYXNrLlxuICAgICAgICB2aWV3LnJ1bGU/LnJldGFpblN0YWdlRXJyb3IodGhpcy5mYWlsdXJlLCB0aGlzLmZhaWx1cmUubWVzc2FnZSwgU0NPUEVfUExBQ0VIT0xERVIpO1xuICAgICAgICBpZiAodGhpcy5ydWxlICE9PSB2aWV3LnJ1bGUpIHRoaXMucnVsZT8ucmV0YWluU3RhZ2VFcnJvcih0aGlzLmZhaWx1cmUsIHRoaXMuZmFpbHVyZS5tZXNzYWdlLCBTQ09QRV9QTEFDRUhPTERFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BwZXIuYWJvcnQodGhpcy5mYWlsdXJlKTtcbiAgICB9XG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHRlbGxBZGFwdGVyKHRoaXMucmVzb2x2ZWQuYWRhcHRlciwgeyBlbnRyeSwgZXJyb3I6IHZpZXcuZXJyb3IgfSk7XG4gIH1cbn1cblxuLyoqIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgLCBpc29sYXRlZDogYSB0aHJvd2luZyBnZXR0ZXIsIGEgdGhyb3cgb3IgYSByZWplY3Rpb24gdGhlcmUgY2hhbmdlcyBub3RoaW5nLiAqL1xuZnVuY3Rpb24gdGVsbEFkYXB0ZXIoYWRhcHRlcjogUmVjb3JkU2luaywgZmFpbHVyZTogeyByZWFkb25seSBlbnRyeTogUmVjb3JkRW50cnk7IHJlYWRvbmx5IGVycm9yOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ZW5lcjogdW5rbm93biA9IGFkYXB0ZXIub25GYWlsdXJlO1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBzZXR0bGVPbmNlKFxuICAgICAgbGlzdGVuZXIuY2FsbChhZGFwdGVyLCBmYWlsdXJlKSxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICAvLyBBIGxpc3RlbmVyIHRoYXQgZmFpbHMgaXMgdGhlIGFkYXB0ZXIncyBvd24gYnVzaW5lc3M6IHRoZSBsb3NzIGlzIGFscmVhZHkgY291bnRlZC5cbiAgfVxufVxuIl19
@@ -79,7 +79,7 @@ function servedSnapshot(traverser, observers, options, sink) {
79
79
  runtime.capture.limit('redaction-active');
80
80
  return {
81
81
  ...snapshot,
82
- capture: runtime.capture.snapshot(snapshot.commitLog.length, control, options?.redact === true),
82
+ capture: runtime.captureSnapshot(snapshot.commitLog.length, control, options?.redact === true),
83
83
  };
84
84
  }
85
85
  return snapshot;
@@ -145,4 +145,4 @@ function collectRecorderSnapshots(observers, collected, includeCapture = false)
145
145
  return out;
146
146
  }
147
147
  exports.collectRecorderSnapshots = collectRecorderSnapshots;
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCx5Q0FBd0M7QUFDeEMsMkNBQTZDO0FBRzdDLDhDQUEwQztBQUMxQyx3RkFBa0Y7QUFHbEYseURBQXFEO0FBS3JEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFNBQXVDLEVBQ3ZDLFNBQXVCLEVBQ3ZCLE9BQThCLEVBQzlCLElBQXNCO0lBRXRCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQyxDQUFDO0lBQzlFLElBQUksSUFBQSxzQkFBUyxHQUFFLEVBQUUsQ0FBQztRQUNoQixpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLDhEQUE4RDtRQUM5RCxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUEsa0JBQVUsRUFBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUEsOENBQW9CLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksaUJBQXFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQXFDLEVBQUUsQ0FBQztJQUMxRCxNQUFNLE9B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QyxDQUFDLENBQUMsQ0FBQztRQUN4RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUU7WUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQXJCRCw0REFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHNuYXBzaG90IOKAlCB3aGF0IGBGbG93Q2hhcnRFeGVjdXRvci5nZXRTbmFwc2hvdCgpYCBzZXJ2ZXMgKEY5KS5cbiAqXG4gKiBUaGUgdHJhdmVyc2VyJ3MgcnVudGltZSBzbmFwc2hvdCwgcGx1cyB3aGF0IG9ubHkgdGhlIGV4ZWN1dG9yIGtub3dzOiB0aGVcbiAqIHNlcnZlZCBzdWJmbG93IHJlc3VsdHMgKGVhY2ggc3ViZmxvdydzIG93biBtaXJyb3IgdW5kZXIgYHJlZGFjdDogdHJ1ZWApLCBvbmVcbiAqIHJlY29yZGVyIHJvdyBwZXIgcmVjb3JkZXIgaWQsIGFuZCB0aGUgZGVmZXJyZWQgdGllcidzIGFjY291bnRpbmcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgc2VydmVSZWNvcmQgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50IH0gZnJvbSAnLi4vY2FwdHVyZS9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB7IHNlcnZlZFN1YmZsb3dSZXN1bHRzIH0gZnJvbSAnLi4vZW5naW5lL2hhbmRsZXJzL3NlcnZlZFN1YmZsb3dSZXN1bHRzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3djaGFydFRyYXZlcnNlciB9IGZyb20gJy4uL2VuZ2luZS90cmF2ZXJzYWwvRmxvd2NoYXJ0VHJhdmVyc2VyLmpzJztcbmltcG9ydCB7IGNvcHlCdW5kbGUgfSBmcm9tICcuLi9yZWNvcmRlci9zbmFwc2hvdC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bk9ic2VydmVycyB9IGZyb20gJy4vYXR0YWNoLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUmVjb3JkU2lua1N0YXRzLCBSdW50aW1lU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZWQgc25hcHNob3QuIGBzaGFyZWRTdGF0ZWAgaXMgdGhlIExJVkUgdmlldyBpbiBwcm9kdWN0aW9uICh6ZXJvXG4gKiBjb3B5KTsgaW4gZGV2IG1vZGUgaXQgaXMgYSBkZWVwLWZyb3plbiBDTE9ORSwgc28gYSBjb25zdW1lciBtdXRhdGlvbiB0aHJvd3NcbiAqIGluc3RlYWQgb2YgY29ycnVwdGluZyBlbmdpbmUgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZWRTbmFwc2hvdChcbiAgdHJhdmVyc2VyOiBGbG93Y2hhcnRUcmF2ZXJzZXI8YW55LCBhbnk+LFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgb3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9LFxuICBzaW5rPzogUmVjb3JkU2lua1N0YXRzLFxuKTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3Qgc25hcHNob3QgPSBzZXJ2ZWRMb2codHJhdmVyc2VyLmdldFNuYXBzaG90KG9wdGlvbnMpIGFzIFJ1bnRpbWVTbmFwc2hvdCk7XG4gIGlmIChpc0Rldk1vZGUoKSkge1xuICAgIC8vIERldi1tb2RlIG11dGF0aW9uIGd1YXJkOiBmcmVlemUgYSBDTE9ORSwgbmV2ZXIgdGhlIGxpdmUgZW5naW5lXG4gICAgLy8gc3RhdGUg4oCUIGBzbmFwc2hvdC5zaGFyZWRTdGF0ZWAgSVMgU2hhcmVkTWVtb3J5J3MgY3VycmVudCBnZW5lcmF0aW9uLFxuICAgIC8vIHdob3NlIHVuY2hhbmdlZCBzdWJ0cmVlcyBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlc1xuICAgIC8vIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICAgIC8vIFByb2R1Y3Rpb24gc3RheXMgemVyby1jb3B5OyBjbG9uZS1hbHdheXMgaXMgYSBtZWFzdXJlZCBkZWNpc2lvblxuICAgIC8vIGRlZmVycmVkIHVudGlsIHRoZSBiZW5jaCBzYXlzIGl0J3MgYWZmb3JkYWJsZSAoQkFDS0xPRyAjOCkuXG4gICAgLy8gTk9URTogZGVlcEZyZWV6ZSAoY2FwdHVyZS9mcmVlemUudHMg4oCUIHRoZSBvbmUgd2FsaykgY2Fubm90IHJlYWNoXG4gICAgLy8gTWFwL1NldCBJTlRFUk5BTFMgKGBtYXAuc2V0KClgIG9uIHRoZSBmcm96ZW4gY2xvbmUgd29uJ3QgdGhyb3cpIGFuZFxuICAgIC8vIHNraXBzIHR5cGVkIGFycmF5cy4gVGhlIENMT05FIHN0aWxsIGlzb2xhdGVzIHRoZSBlbmdpbmUuXG4gICAgc25hcHNob3Quc2hhcmVkU3RhdGUgPSBkZWVwRnJlZXplKHN0cnVjdHVyZWRDbG9uZShzbmFwc2hvdC5zaGFyZWRTdGF0ZSkpO1xuICB9XG4gIGNvbnN0IHNmUmVzdWx0cyA9IHRyYXZlcnNlci5nZXRTdWJmbG93UmVzdWx0cygpO1xuICBpZiAoc2ZSZXN1bHRzLnNpemUgPiAwKSB7XG4gICAgLy8gVW5kZXIgYHJlZGFjdDogdHJ1ZWAgZWFjaCBzdWJmbG93J3MgYGdsb2JhbENvbnRleHRgIGlzIGl0cyBvd24gbWlycm9yXG4gICAgLy8gKDkuMjAuMCkg4oCUIHNlcnZlZCwgbmV2ZXIgd3JpdHRlbiBpbnRvIHRoZSByZWNvcmQgKHNlZVxuICAgIC8vIGVuZ2luZS9oYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0cy50cykuIFBsYWluOiB0aGUgcmVjb3JkcyBhcyB0aGV5IGFyZS5cbiAgICBzbmFwc2hvdC5zdWJmbG93UmVzdWx0cyA9IHNlcnZlZFN1YmZsb3dSZXN1bHRzKHNmUmVzdWx0cywgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKTtcbiAgfVxuXG4gIGxldCByZWNvcmRlclNuYXBzaG90czogUmVjb3JkZXJTbmFwc2hvdFtdO1xuICBjb25zdCBhY2tub3dsZWRnZWQ6IFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudFtdID0gW107XG4gIGNvbnN0IHJ1bnRpbWUgPSB0cmF2ZXJzZXIuZ2V0UnVudGltZSgpIGFzIGltcG9ydCgnLi9FeGVjdXRpb25SdW50aW1lLmpzJykuRXhlY3V0aW9uUnVudGltZTtcbiAgY29uc3QgaW5saW5lRmxvdyA9IHJ1bnRpbWUuY2FwdHVyZSA/IG5ldyBTZXQob2JzZXJ2ZXJzLmZsb3dSZWNvcmRlcnMpIDogdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHJlY29yZGVyU25hcHNob3RzID0gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKFxuICAgICAgb2JzZXJ2ZXJzLFxuICAgICAgaW5saW5lRmxvdyAmJlxuICAgICAgICAoKHJlY29yZGVyLCByb3cpID0+IHtcbiAgICAgICAgICBpZiAoaW5saW5lRmxvdy5oYXMocmVjb3JkZXIgYXMgRmxvd1JlY29yZGVyKSAmJiByb3cuY2FwdHVyZT8ucnVuSWQgPT09IHNuYXBzaG90LnJ1bklkKVxuICAgICAgICAgICAgYWNrbm93bGVkZ2VkLnB1c2gocm93LmNhcHR1cmUpO1xuICAgICAgICB9KSxcbiAgICAgIHJ1bnRpbWUuY2FwdHVyZSAhPT0gdW5kZWZpbmVkLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcnVudGltZS5jYXB0dXJlPy5saW1pdCgncmVjb3JkZXItc25hcHNob3QtZmFpbGVkJyk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKHJlY29yZGVyU25hcHNob3RzLmxlbmd0aCA+IDApIHtcbiAgICBzbmFwc2hvdC5yZWNvcmRlcnMgPSByZWNvcmRlclNuYXBzaG90cztcbiAgfVxuXG4gIC8vIFJGQy0wMDEgQmxvY2sgOTogdGhlIGRlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgc3VyZmFjZS4gUHJlc2VudFxuICAvLyBPTkxZIHdoZW4gYSBkZWZlcnJlZCBvYnNlcnZlciB3YXMgYXR0YWNoZWQgb24gdGhpcyBleGVjdXRvciDigJRcbiAgLy8gemVyby1jb3N0IGRpc2NpcGxpbmUgZm9yIGV2ZXJ5b25lIGVsc2UuXG4gIGlmIChvYnNlcnZlcnMuZGVmZXJyZWRUaWVyKSB7XG4gICAgc25hcHNob3Qub2JzZXJ2ZXJTdGF0cyA9IG9ic2VydmVycy5kZWZlcnJlZFRpZXIuZ2V0U3RhdHMoKTtcbiAgfVxuXG4gIC8vIFRoZSBjcmFzaC1zYWZlIHJlY29yZCdzIGFjY291bnRpbmcgKDEwLjEsIFA2KTogcHJlc2VudCBPTkxZIGZvciBhbiBleGVjdXRvciBidWlsdCB3aXRoIGEgYHNpbmtgLCBvbmNlIGEgcnVuXG4gIC8vIHN0YXJ0ZWQuXG4gIGlmIChzaW5rICE9PSB1bmRlZmluZWQpIHNuYXBzaG90LnNpbmsgPSBzaW5rO1xuXG4gIGlmIChydW50aW1lLmNhcHR1cmUpIHtcbiAgICBjb25zdCBjb250cm9sID1cbiAgICAgIGFja25vd2xlZGdlZC5sZW5ndGggPT09IDBcbiAgICAgICAgPyAndW5rbm93bidcbiAgICAgICAgOiBhY2tub3dsZWRnZWQuZXZlcnkoKGFjaykgPT4gYWNrLmNvbnRyb2wgPT09ICdjYXB0dXJlZCcpXG4gICAgICAgID8gJ2NhcHR1cmVkJ1xuICAgICAgICA6IGFja25vd2xlZGdlZC5zb21lKChhY2spID0+IGFjay5jb250cm9sID09PSAncGFydGlhbCcpXG4gICAgICAgID8gJ3BhcnRpYWwnXG4gICAgICAgIDogJ3Vua25vd24nO1xuICAgIGlmIChydW50aW1lLnJvb3RTdGFnZUNvbnRleHQuZ2V0UG9saWN5KCkucmVkYWN0aW9uPy5pc0luZXJ0KCkgPT09IGZhbHNlKSBydW50aW1lLmNhcHR1cmUubGltaXQoJ3JlZGFjdGlvbi1hY3RpdmUnKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc25hcHNob3QsXG4gICAgICBjYXB0dXJlOiBydW50aW1lLmNhcHR1cmUuc25hcHNob3Qoc25hcHNob3QuY29tbWl0TG9nLmxlbmd0aCwgY29udHJvbCwgb3B0aW9ucz8ucmVkYWN0ID09PSB0cnVlKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBUaGUgY29tbWl0IGxvZyBhbmQgdGhlIGZvbGQgYmFzZSBhcyBhIHJlYWRlciBtYXkgaG9sZCB0aGVtICg5LjQ0LjIpOiBhIHJlY29yZCBmcmVlemluZyBzZWFsZWQgd2hvbGVcbiAqIGlzIHNlcnZlZCBhcyBpdHNlbGY7IG9uZSBob2xkaW5nIHdoYXQgZnJlZXppbmcgY2Fubm90IHNlYWwg4oCUIGEgRGF0ZSwgYSBNYXAsIGEgYnVmZmVyIOKApiDigJQgYXMgYSBjb3B5XG4gKiBvZiBpdHMgb3BlbiBwYXRocywgdGhlIHJlYWRlcidzIG93biAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCkuIEhlcmUsIGF0IHRoZSBwdWJsaWMgZG9vcjpcbiAqIHRoZSBlbmdpbmUncyBvd24gc25hcHNob3Qgb2YgYSBsb2cgKGEgc3ViZmxvdyBtb3VudCdzKSBpcyBub3Qgc2VydmVkLCBzbyB0aGUgcnVuIHBheXMgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gc2VydmVkTG9nKHNuYXBzaG90OiBSdW50aW1lU25hcHNob3QpOiBSdW50aW1lU25hcHNob3Qge1xuICBjb25zdCB7IGluaXRpYWxTdGF0ZSB9ID0gc25hcHNob3Q7XG4gIHJldHVybiB7XG4gICAgLi4uc25hcHNob3QsXG4gICAgY29tbWl0TG9nOiBPYmplY3QuZnJlZXplKHNuYXBzaG90LmNvbW1pdExvZy5tYXAoc2VydmVSZWNvcmQpKSBhcyBDb21taXRCdW5kbGVbXSxcbiAgICAuLi4oaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQgPyB7fSA6IHsgaW5pdGlhbFN0YXRlOiBzZXJ2ZVJlY29yZChpbml0aWFsU3RhdGUpIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIENvbGxlY3QgYHRvU25hcHNob3QoKWAgYnVuZGxlcyBmcm9tIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIOKAlCBPTkUgZW50cnlcbiAqIHBlciByZWNvcmRlciBpZCwgYWNyb3NzIGFsbCBjaGFubmVscyBhbmQgYm90aCBkZWxpdmVyeSB0aWVycy5cbiAqXG4gKiBUaGUgZGVkdXBlIGlzIGxvYWQtYmVhcmluZywgbm90IHRpZGluZXNzLiBBIHJlY29yZGVyIHRoYXQgaW1wbGVtZW50cyBhXG4gKiBzaGFyZWQtbmFtZSBob29rIChgb25FcnJvcmAgLyBgb25QYXVzZWAgLyBgb25SZXN1bWVgIOKAlCBkZWNsYXJlZCBvbiBCT1RIXG4gKiB0aGUgc2NvcGUgYW5kIGZsb3cgaW50ZXJmYWNlcykgaXMgbGVnaXRpbWF0ZWx5IHJlZ2lzdGVyZWQgb24gQk9USCBpbmxpbmVcbiAqIGxpc3RzIGJ5IGBhdHRhY2hDb21iaW5lZFJlY29yZGVyYCwgYW5kIHRoYXQgaXMgYnkgZGVzaWduOiBlYWNoIGNoYW5uZWxcbiAqIGNhbGxzIHRoZSBob29rIHdpdGggaXRzIG93biBwYXlsb2FkIHZhcmlhbnQuIGBNZXRyaWNSZWNvcmRlci5vblBhdXNlYCBpc1xuICogdGhlIGV2ZXJ5ZGF5IGNhc2UuIFdhbGtpbmcgdGhlIGxpc3RzIHdpdGhvdXQgYSBzaGFyZWQgYHNlZW5gIHNldCB0dXJuZWRcbiAqIHRoYXQgaW50byBhIERVUExJQ0FURUQgc25hcHNob3QgZW50cnkgKHNhbWUgaWQgdHdpY2UpLCB3aGljaCBicmVha3MgZXZlcnlcbiAqIGNvbnN1bWVyIHRoYXQgaW5kZXhlcyBgc25hcHNob3QucmVjb3JkZXJzYCBieSBpZC5cbiAqXG4gKiBPcmRlcmluZyBpcyBzY29wZSBsaXN0IOKGkiBmbG93IGxpc3Qg4oaSIGRlZmVycmVkIHRpZXIsIGFuZCB0aGUgRklSU1QgYnVuZGxlXG4gKiBmb3IgYW4gaWQgd2lucy4gQSByZWNvcmRlciB3aXRoIG5vIGB0b1NuYXBzaG90YCBuZXZlciBjbGFpbXMgYW4gaWQsIHNvIGl0XG4gKiBjYW5ub3Qgc2hhZG93IGEgc2FtZS1pZCByZWNvcmRlciB0aGF0IGRvZXMgaGF2ZSBvbmUuXG4gKlxuICogVGhlIHJvdyBpcyBSRUJVSUxUIGZpZWxkIGJ5IGZpZWxkIGJ5IHRoZSBvbmUgY29waWVyIChgcmVjb3JkZXIvc25hcHNob3QudHNcbiAqIMK3IGNvcHlCdW5kbGVgLCBzaGFyZWQgd2l0aCBgQ29tcG9zaXRlUmVjb3JkZXJgKSByYXRoZXIgdGhhbiBzcHJlYWQsIHNvIGFcbiAqIHJlY29yZGVyIGNhbm5vdCBzbXVnZ2xlIGFuIGBpZGAgb2YgaXRzIG93biBjaG9vc2luZyBpbnRvIHRoZSBzbmFwc2hvdCAodGhlXG4gKiBpZCBpcyB0aGUgZXhlY3V0b3IncywgYW5kIGNvbnN1bWVycyBpbmRleCBieSBpdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UmVjb3JkZXJTbmFwc2hvdHMoXG4gIG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzLFxuICBjb2xsZWN0ZWQ/OiAocmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIsIHJvdzogUmVjb3JkZXJTbmFwc2hvdCkgPT4gdm9pZCxcbiAgaW5jbHVkZUNhcHR1cmUgPSBmYWxzZSxcbik6IFJlY29yZGVyU25hcHNob3RbXSB7XG4gIGNvbnN0IG91dDogUmVjb3JkZXJTbmFwc2hvdFtdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgY29sbGVjdCA9IChyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogdm9pZCA9PiB7XG4gICAgaWYgKCFyLnRvU25hcHNob3QgfHwgc2Vlbi5oYXMoci5pZCkpIHJldHVybjtcbiAgICBzZWVuLmFkZChyLmlkKTtcbiAgICBjb25zdCByb3cgPSBjb3B5QnVuZGxlKHIuaWQsIHIudG9TbmFwc2hvdCgpLCBpbmNsdWRlQ2FwdHVyZSk7XG4gICAgb3V0LnB1c2gocm93KTtcbiAgICBjb2xsZWN0ZWQ/LihyLCByb3cpO1xuICB9O1xuICBmb3IgKGNvbnN0IHIgb2Ygb2JzZXJ2ZXJzLnNjb3BlUmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBmb3IgKGNvbnN0IHIgb2Ygb2JzZXJ2ZXJzLmZsb3dSZWNvcmRlcnMpIGNvbGxlY3Qocik7XG4gIGlmIChvYnNlcnZlcnMuZGVmZXJyZWRUaWVyKSB7XG4gICAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5kZWZlcnJlZFRpZXIuc2NvcGVMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gICAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5kZWZlcnJlZFRpZXIuZmxvd0xpc3RSZWNvcmRlcnMoKSkgY29sbGVjdChyKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9zbmFwc2hvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCx5Q0FBd0M7QUFDeEMsMkNBQTZDO0FBRzdDLDhDQUEwQztBQUMxQyx3RkFBa0Y7QUFHbEYseURBQXFEO0FBS3JEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFNBQXVDLEVBQ3ZDLFNBQXVCLEVBQ3ZCLE9BQThCLEVBQzlCLElBQXNCO0lBRXRCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBb0IsQ0FBQyxDQUFDO0lBQzlFLElBQUksSUFBQSxzQkFBUyxHQUFFLEVBQUUsQ0FBQztRQUNoQixpRUFBaUU7UUFDakUsdUVBQXVFO1FBQ3ZFLHlEQUF5RDtRQUN6RCwyQkFBMkI7UUFDM0Isa0VBQWtFO1FBQ2xFLDhEQUE4RDtRQUM5RCxtRUFBbUU7UUFDbkUsc0VBQXNFO1FBQ3RFLDJEQUEyRDtRQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUEsa0JBQVUsRUFBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2hELElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELDRFQUE0RTtRQUM1RSxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUEsOENBQW9CLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksaUJBQXFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQXFDLEVBQUUsQ0FBQztJQUMxRCxNQUFNLE9B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QyxDQUFDO1FBQ3hFLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBckJELDREQXFCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogc25hcHNob3Qg4oCUIHdoYXQgYEZsb3dDaGFydEV4ZWN1dG9yLmdldFNuYXBzaG90KClgIHNlcnZlcyAoRjkpLlxuICpcbiAqIFRoZSB0cmF2ZXJzZXIncyBydW50aW1lIHNuYXBzaG90LCBwbHVzIHdoYXQgb25seSB0aGUgZXhlY3V0b3Iga25vd3M6IHRoZVxuICogc2VydmVkIHN1YmZsb3cgcmVzdWx0cyAoZWFjaCBzdWJmbG93J3Mgb3duIG1pcnJvciB1bmRlciBgcmVkYWN0OiB0cnVlYCksIG9uZVxuICogcmVjb3JkZXIgcm93IHBlciByZWNvcmRlciBpZCwgYW5kIHRoZSBkZWZlcnJlZCB0aWVyJ3MgYWNjb3VudGluZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBzZXJ2ZVJlY29yZCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBkZWVwRnJlZXplIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBSZWNvcmRlckNhcHR1cmVBY2tub3dsZWRnZW1lbnQgfSBmcm9tICcuLi9jYXB0dXJlL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgc2VydmVkU3ViZmxvd1Jlc3VsdHMgfSBmcm9tICcuLi9lbmdpbmUvaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0VHJhdmVyc2VyIH0gZnJvbSAnLi4vZW5naW5lL3RyYXZlcnNhbC9GbG93Y2hhcnRUcmF2ZXJzZXIuanMnO1xuaW1wb3J0IHsgY29weUJ1bmRsZSB9IGZyb20gJy4uL3JlY29yZGVyL3NuYXBzaG90LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuT2JzZXJ2ZXJzIH0gZnJvbSAnLi9hdHRhY2guanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSZWNvcmRTaW5rU3RhdHMsIFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5cbi8qKlxuICogVGhlIHNlcnZlZCBzbmFwc2hvdC4gYHNoYXJlZFN0YXRlYCBpcyB0aGUgTElWRSB2aWV3IGluIHByb2R1Y3Rpb24gKHplcm9cbiAqIGNvcHkpOyBpbiBkZXYgbW9kZSBpdCBpcyBhIGRlZXAtZnJvemVuIENMT05FLCBzbyBhIGNvbnN1bWVyIG11dGF0aW9uIHRocm93c1xuICogaW5zdGVhZCBvZiBjb3JydXB0aW5nIGVuZ2luZSBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlZFNuYXBzaG90KFxuICB0cmF2ZXJzZXI6IEZsb3djaGFydFRyYXZlcnNlcjxhbnksIGFueT4sXG4gIG9ic2VydmVyczogUnVuT2JzZXJ2ZXJzLFxuICBvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0sXG4gIHNpbms/OiBSZWNvcmRTaW5rU3RhdHMsXG4pOiBSdW50aW1lU25hcHNob3Qge1xuICBjb25zdCBzbmFwc2hvdCA9IHNlcnZlZExvZyh0cmF2ZXJzZXIuZ2V0U25hcHNob3Qob3B0aW9ucykgYXMgUnVudGltZVNuYXBzaG90KTtcbiAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgLy8gRGV2LW1vZGUgbXV0YXRpb24gZ3VhcmQ6IGZyZWV6ZSBhIENMT05FLCBuZXZlciB0aGUgbGl2ZSBlbmdpbmVcbiAgICAvLyBzdGF0ZSDigJQgYHNuYXBzaG90LnNoYXJlZFN0YXRlYCBJUyBTaGFyZWRNZW1vcnkncyBjdXJyZW50IGdlbmVyYXRpb24sXG4gICAgLy8gd2hvc2UgdW5jaGFuZ2VkIHN1YnRyZWVzIGV2ZXJ5IGxhdGVyIGdlbmVyYXRpb24gc2hhcmVzXG4gICAgLy8gKGNvcHktb24td3JpdGUsIDkuMjkuMCkuXG4gICAgLy8gUHJvZHVjdGlvbiBzdGF5cyB6ZXJvLWNvcHk7IGNsb25lLWFsd2F5cyBpcyBhIG1lYXN1cmVkIGRlY2lzaW9uXG4gICAgLy8gZGVmZXJyZWQgdW50aWwgdGhlIGJlbmNoIHNheXMgaXQncyBhZmZvcmRhYmxlIChCQUNLTE9HICM4KS5cbiAgICAvLyBOT1RFOiBkZWVwRnJlZXplIChjYXB0dXJlL2ZyZWV6ZS50cyDigJQgdGhlIG9uZSB3YWxrKSBjYW5ub3QgcmVhY2hcbiAgICAvLyBNYXAvU2V0IElOVEVSTkFMUyAoYG1hcC5zZXQoKWAgb24gdGhlIGZyb3plbiBjbG9uZSB3b24ndCB0aHJvdykgYW5kXG4gICAgLy8gc2tpcHMgdHlwZWQgYXJyYXlzLiBUaGUgQ0xPTkUgc3RpbGwgaXNvbGF0ZXMgdGhlIGVuZ2luZS5cbiAgICBzbmFwc2hvdC5zaGFyZWRTdGF0ZSA9IGRlZXBGcmVlemUoc3RydWN0dXJlZENsb25lKHNuYXBzaG90LnNoYXJlZFN0YXRlKSk7XG4gIH1cbiAgY29uc3Qgc2ZSZXN1bHRzID0gdHJhdmVyc2VyLmdldFN1YmZsb3dSZXN1bHRzKCk7XG4gIGlmIChzZlJlc3VsdHMuc2l6ZSA+IDApIHtcbiAgICAvLyBVbmRlciBgcmVkYWN0OiB0cnVlYCBlYWNoIHN1YmZsb3cncyBgZ2xvYmFsQ29udGV4dGAgaXMgaXRzIG93biBtaXJyb3JcbiAgICAvLyAoOS4yMC4wKSDigJQgc2VydmVkLCBuZXZlciB3cml0dGVuIGludG8gdGhlIHJlY29yZCAoc2VlXG4gICAgLy8gZW5naW5lL2hhbmRsZXJzL3NlcnZlZFN1YmZsb3dSZXN1bHRzLnRzKS4gUGxhaW46IHRoZSByZWNvcmRzIGFzIHRoZXkgYXJlLlxuICAgIHNuYXBzaG90LnN1YmZsb3dSZXN1bHRzID0gc2VydmVkU3ViZmxvd1Jlc3VsdHMoc2ZSZXN1bHRzLCBvcHRpb25zPy5yZWRhY3QgPT09IHRydWUpO1xuICB9XG5cbiAgbGV0IHJlY29yZGVyU25hcHNob3RzOiBSZWNvcmRlclNuYXBzaG90W107XG4gIGNvbnN0IGFja25vd2xlZGdlZDogUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50W10gPSBbXTtcbiAgY29uc3QgcnVudGltZSA9IHRyYXZlcnNlci5nZXRSdW50aW1lKCkgYXMgaW1wb3J0KCcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnKS5FeGVjdXRpb25SdW50aW1lO1xuICBjb25zdCBpbmxpbmVGbG93ID0gcnVudGltZS5jYXB0dXJlID8gbmV3IFNldChvYnNlcnZlcnMuZmxvd1JlY29yZGVycykgOiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmVjb3JkZXJTbmFwc2hvdHMgPSBjb2xsZWN0UmVjb3JkZXJTbmFwc2hvdHMoXG4gICAgICBvYnNlcnZlcnMsXG4gICAgICBpbmxpbmVGbG93ICYmXG4gICAgICAgICgocmVjb3JkZXIsIHJvdykgPT4ge1xuICAgICAgICAgIGlmIChpbmxpbmVGbG93LmhhcyhyZWNvcmRlciBhcyBGbG93UmVjb3JkZXIpICYmIHJvdy5jYXB0dXJlPy5ydW5JZCA9PT0gc25hcHNob3QucnVuSWQpXG4gICAgICAgICAgICBhY2tub3dsZWRnZWQucHVzaChyb3cuY2FwdHVyZSk7XG4gICAgICAgIH0pLFxuICAgICAgcnVudGltZS5jYXB0dXJlICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBydW50aW1lLmNhcHR1cmU/LmxpbWl0KCdyZWNvcmRlci1zbmFwc2hvdC1mYWlsZWQnKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAocmVjb3JkZXJTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIHNuYXBzaG90LnJlY29yZGVycyA9IHJlY29yZGVyU25hcHNob3RzO1xuICB9XG5cbiAgLy8gUkZDLTAwMSBCbG9jayA5OiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgYWNjb3VudGluZyBzdXJmYWNlLiBQcmVzZW50XG4gIC8vIE9OTFkgd2hlbiBhIGRlZmVycmVkIG9ic2VydmVyIHdhcyBhdHRhY2hlZCBvbiB0aGlzIGV4ZWN1dG9yIOKAlFxuICAvLyB6ZXJvLWNvc3QgZGlzY2lwbGluZSBmb3IgZXZlcnlvbmUgZWxzZS5cbiAgaWYgKG9ic2VydmVycy5kZWZlcnJlZFRpZXIpIHtcbiAgICBzbmFwc2hvdC5vYnNlcnZlclN0YXRzID0gb2JzZXJ2ZXJzLmRlZmVycmVkVGllci5nZXRTdGF0cygpO1xuICB9XG5cbiAgLy8gVGhlIGNyYXNoLXNhZmUgcmVjb3JkJ3MgYWNjb3VudGluZyAoMTAuMSwgUDYpOiBwcmVzZW50IE9OTFkgZm9yIGFuIGV4ZWN1dG9yIGJ1aWx0IHdpdGggYSBgc2lua2AsIG9uY2UgYSBydW5cbiAgLy8gc3RhcnRlZC5cbiAgaWYgKHNpbmsgIT09IHVuZGVmaW5lZCkgc25hcHNob3Quc2luayA9IHNpbms7XG5cbiAgaWYgKHJ1bnRpbWUuY2FwdHVyZSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPVxuICAgICAgYWNrbm93bGVkZ2VkLmxlbmd0aCA9PT0gMFxuICAgICAgICA/ICd1bmtub3duJ1xuICAgICAgICA6IGFja25vd2xlZGdlZC5ldmVyeSgoYWNrKSA9PiBhY2suY29udHJvbCA9PT0gJ2NhcHR1cmVkJylcbiAgICAgICAgPyAnY2FwdHVyZWQnXG4gICAgICAgIDogYWNrbm93bGVkZ2VkLnNvbWUoKGFjaykgPT4gYWNrLmNvbnRyb2wgPT09ICdwYXJ0aWFsJylcbiAgICAgICAgPyAncGFydGlhbCdcbiAgICAgICAgOiAndW5rbm93bic7XG4gICAgaWYgKHJ1bnRpbWUucm9vdFN0YWdlQ29udGV4dC5nZXRQb2xpY3koKS5yZWRhY3Rpb24/LmlzSW5lcnQoKSA9PT0gZmFsc2UpIHJ1bnRpbWUuY2FwdHVyZS5saW1pdCgncmVkYWN0aW9uLWFjdGl2ZScpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zbmFwc2hvdCxcbiAgICAgIGNhcHR1cmU6IHJ1bnRpbWUuY2FwdHVyZVNuYXBzaG90KHNuYXBzaG90LmNvbW1pdExvZy5sZW5ndGgsIGNvbnRyb2wsIG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gc25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIGNvbW1pdCBsb2cgYW5kIHRoZSBmb2xkIGJhc2UgYXMgYSByZWFkZXIgbWF5IGhvbGQgdGhlbSAoOS40NC4yKTogYSByZWNvcmQgZnJlZXppbmcgc2VhbGVkIHdob2xlXG4gKiBpcyBzZXJ2ZWQgYXMgaXRzZWxmOyBvbmUgaG9sZGluZyB3aGF0IGZyZWV6aW5nIGNhbm5vdCBzZWFsIOKAlCBhIERhdGUsIGEgTWFwLCBhIGJ1ZmZlciDigKYg4oCUIGFzIGEgY29weVxuICogb2YgaXRzIG9wZW4gcGF0aHMsIHRoZSByZWFkZXIncyBvd24gKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBzZXJ2ZVJlY29yZGApLiBIZXJlLCBhdCB0aGUgcHVibGljIGRvb3I6XG4gKiB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IG9mIGEgbG9nIChhIHN1YmZsb3cgbW91bnQncykgaXMgbm90IHNlcnZlZCwgc28gdGhlIHJ1biBwYXlzIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHNlcnZlZExvZyhzbmFwc2hvdDogUnVudGltZVNuYXBzaG90KTogUnVudGltZVNuYXBzaG90IHtcbiAgY29uc3QgeyBpbml0aWFsU3RhdGUgfSA9IHNuYXBzaG90O1xuICByZXR1cm4ge1xuICAgIC4uLnNuYXBzaG90LFxuICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZShzbmFwc2hvdC5jb21taXRMb2cubWFwKHNlcnZlUmVjb3JkKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgLi4uKGluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IGluaXRpYWxTdGF0ZTogc2VydmVSZWNvcmQoaW5pdGlhbFN0YXRlKSB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGB0b1NuYXBzaG90KClgIGJ1bmRsZXMgZnJvbSBldmVyeSBhdHRhY2hlZCByZWNvcmRlciDigJQgT05FIGVudHJ5XG4gKiBwZXIgcmVjb3JkZXIgaWQsIGFjcm9zcyBhbGwgY2hhbm5lbHMgYW5kIGJvdGggZGVsaXZlcnkgdGllcnMuXG4gKlxuICogVGhlIGRlZHVwZSBpcyBsb2FkLWJlYXJpbmcsIG5vdCB0aWRpbmVzcy4gQSByZWNvcmRlciB0aGF0IGltcGxlbWVudHMgYVxuICogc2hhcmVkLW5hbWUgaG9vayAoYG9uRXJyb3JgIC8gYG9uUGF1c2VgIC8gYG9uUmVzdW1lYCDigJQgZGVjbGFyZWQgb24gQk9USFxuICogdGhlIHNjb3BlIGFuZCBmbG93IGludGVyZmFjZXMpIGlzIGxlZ2l0aW1hdGVseSByZWdpc3RlcmVkIG9uIEJPVEggaW5saW5lXG4gKiBsaXN0cyBieSBgYXR0YWNoQ29tYmluZWRSZWNvcmRlcmAsIGFuZCB0aGF0IGlzIGJ5IGRlc2lnbjogZWFjaCBjaGFubmVsXG4gKiBjYWxscyB0aGUgaG9vayB3aXRoIGl0cyBvd24gcGF5bG9hZCB2YXJpYW50LiBgTWV0cmljUmVjb3JkZXIub25QYXVzZWAgaXNcbiAqIHRoZSBldmVyeWRheSBjYXNlLiBXYWxraW5nIHRoZSBsaXN0cyB3aXRob3V0IGEgc2hhcmVkIGBzZWVuYCBzZXQgdHVybmVkXG4gKiB0aGF0IGludG8gYSBEVVBMSUNBVEVEIHNuYXBzaG90IGVudHJ5IChzYW1lIGlkIHR3aWNlKSwgd2hpY2ggYnJlYWtzIGV2ZXJ5XG4gKiBjb25zdW1lciB0aGF0IGluZGV4ZXMgYHNuYXBzaG90LnJlY29yZGVyc2AgYnkgaWQuXG4gKlxuICogT3JkZXJpbmcgaXMgc2NvcGUgbGlzdCDihpIgZmxvdyBsaXN0IOKGkiBkZWZlcnJlZCB0aWVyLCBhbmQgdGhlIEZJUlNUIGJ1bmRsZVxuICogZm9yIGFuIGlkIHdpbnMuIEEgcmVjb3JkZXIgd2l0aCBubyBgdG9TbmFwc2hvdGAgbmV2ZXIgY2xhaW1zIGFuIGlkLCBzbyBpdFxuICogY2Fubm90IHNoYWRvdyBhIHNhbWUtaWQgcmVjb3JkZXIgdGhhdCBkb2VzIGhhdmUgb25lLlxuICpcbiAqIFRoZSByb3cgaXMgUkVCVUlMVCBmaWVsZCBieSBmaWVsZCBieSB0aGUgb25lIGNvcGllciAoYHJlY29yZGVyL3NuYXBzaG90LnRzXG4gKiDCtyBjb3B5QnVuZGxlYCwgc2hhcmVkIHdpdGggYENvbXBvc2l0ZVJlY29yZGVyYCkgcmF0aGVyIHRoYW4gc3ByZWFkLCBzbyBhXG4gKiByZWNvcmRlciBjYW5ub3Qgc211Z2dsZSBhbiBgaWRgIG9mIGl0cyBvd24gY2hvb3NpbmcgaW50byB0aGUgc25hcHNob3QgKHRoZVxuICogaWQgaXMgdGhlIGV4ZWN1dG9yJ3MsIGFuZCBjb25zdW1lcnMgaW5kZXggYnkgaXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlY29yZGVyU25hcHNob3RzKFxuICBvYnNlcnZlcnM6IFJ1bk9ic2VydmVycyxcbiAgY29sbGVjdGVkPzogKHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyLCByb3c6IFJlY29yZGVyU25hcHNob3QpID0+IHZvaWQsXG4gIGluY2x1ZGVDYXB0dXJlID0gZmFsc2UsXG4pOiBSZWNvcmRlclNuYXBzaG90W10ge1xuICBjb25zdCBvdXQ6IFJlY29yZGVyU25hcHNob3RbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGNvbGxlY3QgPSAocjogU2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcik6IHZvaWQgPT4ge1xuICAgIGlmICghci50b1NuYXBzaG90IHx8IHNlZW4uaGFzKHIuaWQpKSByZXR1cm47XG4gICAgc2Vlbi5hZGQoci5pZCk7XG4gICAgY29uc3Qgcm93ID0gY29weUJ1bmRsZShyLmlkLCByLnRvU25hcHNob3QoKSwgaW5jbHVkZUNhcHR1cmUpO1xuICAgIG91dC5wdXNoKHJvdyk7XG4gICAgY29sbGVjdGVkPy4ociwgcm93KTtcbiAgfTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5zY29wZVJlY29yZGVycykgY29sbGVjdChyKTtcbiAgZm9yIChjb25zdCByIG9mIG9ic2VydmVycy5mbG93UmVjb3JkZXJzKSBjb2xsZWN0KHIpO1xuICBpZiAob2JzZXJ2ZXJzLmRlZmVycmVkVGllcikge1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLnNjb3BlTGlzdFJlY29yZGVycygpKSBjb2xsZWN0KHIpO1xuICAgIGZvciAoY29uc3QgciBvZiBvYnNlcnZlcnMuZGVmZXJyZWRUaWVyLmZsb3dMaXN0UmVjb3JkZXJzKCkpIGNvbGxlY3Qocik7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdfQ==
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.admitStoredCapture = void 0;
4
+ const absentEntries_js_1 = require("../capture/absentEntries.js");
5
+ const historyData_js_1 = require("../capture/historyData.js");
6
+ const historyNote_js_1 = require("../capture/historyNote.js");
7
+ const historyTarget_js_1 = require("../capture/historyTarget.js");
8
+ const historyTypes_js_1 = require("../capture/historyTypes.js");
9
+ const noteShape_js_1 = require("../capture/noteShape.js");
10
+ const storedReadSources_js_1 = require("../capture/storedReadSources.js");
11
+ /** One exact pair only; nothing here interprets commits, causal links or business values. */
12
+ function capturePair(log, runId, maxBytes) {
13
+ const evidence = log.notes.filter((n) => n.kind === historyTypes_js_1.CAPTURE_HISTORY_NOTE);
14
+ const receipts = log.notes.filter((n) => n.kind === historyTypes_js_1.CAPTURE_RECEIPT_NOTE);
15
+ if (!receipts.length)
16
+ return 'receipt-missing';
17
+ if (evidence.length !== 1 || receipts.length !== 1)
18
+ return 'history-ambiguous';
19
+ const payload = (0, historyData_js_1.copyHistoryData)(evidence[0].data, maxBytes);
20
+ const target = (0, historyTarget_js_1.copyHistoryTarget)(payload.target);
21
+ if (!target ||
22
+ target.runId !== runId ||
23
+ target.logAddress.logRunId !== runId ||
24
+ target.commits.from !== 0 ||
25
+ target.commits.to !== log.commitLog.length)
26
+ return 'scope-mismatch';
27
+ const receipt = (0, historyTarget_js_1.copyHistoryReceipt)(receipts[0].data, target);
28
+ if (!receipt)
29
+ return 'receipt-refused';
30
+ const basis = (0, historyData_js_1.copyHistoryData)({ commitLog: log.commitLog, ...(log.initialState !== undefined && { initialState: log.initialState }) }, maxBytes);
31
+ return { payload, target, receipt, basis };
32
+ }
33
+ function captureEnding(log, capture, target) {
34
+ const expected = capture.boundary.status === 'completed' ? 'ok' : capture.boundary.status === 'paused' ? 'paused' : 'failed';
35
+ if (expected !== log.outcome)
36
+ return 'boundary-mismatch';
37
+ let close = -1;
38
+ let closes = 0;
39
+ log.entries.forEach((e, index) => {
40
+ if (e.kind === 'closed') {
41
+ close = index;
42
+ closes++;
43
+ }
44
+ });
45
+ const observation = log.entries.findIndex((e) => e.kind === 'note' && e.note === historyTypes_js_1.CAPTURE_HISTORY_NOTE);
46
+ const acknowledgement = log.entries.findIndex((e) => e.kind === 'note' && e.note === historyTypes_js_1.CAPTURE_RECEIPT_NOTE);
47
+ if (close < 0 || observation <= close || acknowledgement <= observation)
48
+ return 'sequence-mismatch';
49
+ if (closes !== 1 ||
50
+ (0, noteShape_js_1.ownData)(log.meta.closed, 'runId') !== target.runId ||
51
+ (0, noteShape_js_1.ownData)(log.meta.opened, 'runId') !== target.runId)
52
+ return 'boundary-mismatch';
53
+ return undefined;
54
+ }
55
+ function captureEvidence(payload, capture) {
56
+ if (!payload.executionTree || typeof payload.executionTree !== 'object' || Array.isArray(payload.executionTree))
57
+ return 'evidence-missing';
58
+ if (capture.channels.control === 'captured' &&
59
+ (!Array.isArray(payload.recorders) ||
60
+ !payload.recorders.some((r) => r?.capture?.runId === capture.runId && r.capture.control === 'captured')))
61
+ return 'recorder-evidence-missing';
62
+ return undefined;
63
+ }
64
+ /** @internal Engine-metadata admission after Foottrace's generic record validation. */
65
+ async function admitStoredCapture(log, runId, maxBytes) {
66
+ const unknown = (reason) => ({ status: 'unknown', reason });
67
+ const pair = capturePair(log, runId, maxBytes);
68
+ if (typeof pair === 'string')
69
+ return unknown(pair);
70
+ const { payload, target, receipt, basis } = pair;
71
+ const body = (0, historyData_js_1.historyEvidence)(payload);
72
+ if ((await (0, historyData_js_1.historyDigest)({ evidence: body, record: basis })) !== target.digest)
73
+ return unknown('evidence-mismatch');
74
+ if (!(0, absentEntries_js_1.validateAbsentEntries)(payload))
75
+ return unknown('absent-evidence-refused');
76
+ const capture = (0, historyNote_js_1.historyNote)(payload.capture, target);
77
+ if (!capture || capture.limitations.includes('resumed-segment'))
78
+ return unknown('capture-refused');
79
+ const readSources = capture.version === 2
80
+ ? (0, storedReadSources_js_1.storedReadSources)(payload.readSources, capture, basis.commitLog, basis.initialState, payload.executionTree)
81
+ : undefined;
82
+ if (capture.version === 2 ? !readSources : Object.hasOwn(payload, 'readSources'))
83
+ return unknown('source-evidence-refused');
84
+ const refusal = captureEnding(log, capture, target) ?? captureEvidence(payload, capture);
85
+ if (refusal)
86
+ return unknown(refusal);
87
+ return Object.freeze({
88
+ status: 'acknowledged',
89
+ history: Object.freeze({
90
+ runId,
91
+ capture,
92
+ ...(readSources && { readSources }),
93
+ executionTree: payload.executionTree,
94
+ ...(payload.absent !== undefined ? { absent: payload.absent } : {}),
95
+ ...(payload.recorders !== undefined ? { recorders: payload.recorders } : {}),
96
+ commitLog: basis.commitLog,
97
+ ...(basis.initialState && { initialState: basis.initialState }),
98
+ receipt,
99
+ }),
100
+ });
101
+ }
102
+ exports.admitStoredCapture = admitStoredCapture;
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkQ2FwdHVyZUFkbWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3N0b3JlZENhcHR1cmVBZG1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsa0VBQW9FO0FBQ3BFLDhEQUE0RjtBQUM1Riw4REFBd0Q7QUFDeEQsa0VBQW9GO0FBRXBGLGdFQUF3RjtBQUN4RiwwREFBa0Q7QUFFbEQsMEVBQW9FO0FBWXBFLDZGQUE2RjtBQUM3RixTQUFTLFdBQVcsQ0FBQyxHQUFjLEVBQUUsS0FBYSxFQUFFLFFBQWdCO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLHNDQUFvQixDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssc0NBQW9CLENBQUMsQ0FBQztJQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQy9DLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUMvRSxNQUFNLE9BQU8sR0FBRyxJQUFBLGdDQUFlLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQTRCLENBQUM7SUFDeEYsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQ0FBaUIsRUFBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsSUFDRSxDQUFDLE1BQU07UUFDUCxNQUFNLENBQUMsS0FBSyxLQUFLLEtBQUs7UUFDdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxR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QUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQThCO1lBQ3JELEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQXdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0QsT0FBTztTQUNSLENBQUM7S0FDSCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBcENELGdEQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBTdG9yZWRMb2cgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgeyB2YWxpZGF0ZUFic2VudEVudHJpZXMgfSBmcm9tICcuLi9jYXB0dXJlL2Fic2VudEVudHJpZXMuanMnO1xuaW1wb3J0IHsgY29weUhpc3RvcnlEYXRhLCBoaXN0b3J5RGlnZXN0LCBoaXN0b3J5RXZpZGVuY2UgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlEYXRhLmpzJztcbmltcG9ydCB7IGhpc3RvcnlOb3RlIH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5Tm90ZS5qcyc7XG5pbXBvcnQgeyBjb3B5SGlzdG9yeVJlY2VpcHQsIGNvcHlIaXN0b3J5VGFyZ2V0IH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VGFyZ2V0LmpzJztcbmltcG9ydCB0eXBlIHsgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0LCBDYXB0dXJlSGlzdG9yeVRhcmdldCB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVR5cGVzLmpzJztcbmltcG9ydCB7IENBUFRVUkVfSElTVE9SWV9OT1RFLCBDQVBUVVJFX1JFQ0VJUFRfTk9URSB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVR5cGVzLmpzJztcbmltcG9ydCB7IG93bkRhdGEgfSBmcm9tICcuLi9jYXB0dXJlL25vdGVTaGFwZS5qcyc7XG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUNhcHR1cmVPYnNlcnZhdGlvbiB9IGZyb20gJy4uL2NhcHR1cmUvcmVhZFNvdXJjZXMuanMnO1xuaW1wb3J0IHsgc3RvcmVkUmVhZFNvdXJjZXMgfSBmcm9tICcuLi9jYXB0dXJlL3N0b3JlZFJlYWRTb3VyY2VzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4uL21lbW9yeS9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0b3JlZENhcHR1cmVSZXN1bHQgfSBmcm9tICcuL3JlYWRTdG9yZWRDYXB0dXJlLmpzJztcblxudHlwZSBQYWlyID0ge1xuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldDtcbiAgcmVjZWlwdDogQ2FwdHVyZUhpc3RvcnlSZWNlaXB0O1xuICBiYXNpczogeyBjb21taXRMb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdOyBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xufTtcblxuLyoqIE9uZSBleGFjdCBwYWlyIG9ubHk7IG5vdGhpbmcgaGVyZSBpbnRlcnByZXRzIGNvbW1pdHMsIGNhdXNhbCBsaW5rcyBvciBidXNpbmVzcyB2YWx1ZXMuICovXG5mdW5jdGlvbiBjYXB0dXJlUGFpcihsb2c6IFN0b3JlZExvZywgcnVuSWQ6IHN0cmluZywgbWF4Qnl0ZXM6IG51bWJlcik6IFBhaXIgfCBzdHJpbmcge1xuICBjb25zdCBldmlkZW5jZSA9IGxvZy5ub3Rlcy5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gQ0FQVFVSRV9ISVNUT1JZX05PVEUpO1xuICBjb25zdCByZWNlaXB0cyA9IGxvZy5ub3Rlcy5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gQ0FQVFVSRV9SRUNFSVBUX05PVEUpO1xuICBpZiAoIXJlY2VpcHRzLmxlbmd0aCkgcmV0dXJuICdyZWNlaXB0LW1pc3NpbmcnO1xuICBpZiAoZXZpZGVuY2UubGVuZ3RoICE9PSAxIHx8IHJlY2VpcHRzLmxlbmd0aCAhPT0gMSkgcmV0dXJuICdoaXN0b3J5LWFtYmlndW91cyc7XG4gIGNvbnN0IHBheWxvYWQgPSBjb3B5SGlzdG9yeURhdGEoZXZpZGVuY2VbMF0hLmRhdGEsIG1heEJ5dGVzKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgdGFyZ2V0ID0gY29weUhpc3RvcnlUYXJnZXQocGF5bG9hZC50YXJnZXQpO1xuICBpZiAoXG4gICAgIXRhcmdldCB8fFxuICAgIHRhcmdldC5ydW5JZCAhPT0gcnVuSWQgfHxcbiAgICB0YXJnZXQubG9nQWRkcmVzcy5sb2dSdW5JZCAhPT0gcnVuSWQgfHxcbiAgICB0YXJnZXQuY29tbWl0cy5mcm9tICE9PSAwIHx8XG4gICAgdGFyZ2V0LmNvbW1pdHMudG8gIT09IGxvZy5jb21taXRMb2cubGVuZ3RoXG4gIClcbiAgICByZXR1cm4gJ3Njb3BlLW1pc21hdGNoJztcbiAgY29uc3QgcmVjZWlwdCA9IGNvcHlIaXN0b3J5UmVjZWlwdChyZWNlaXB0c1swXSEuZGF0YSwgdGFyZ2V0KTtcbiAgaWYgKCFyZWNlaXB0KSByZXR1cm4gJ3JlY2VpcHQtcmVmdXNlZCc7XG4gIGNvbnN0IGJhc2lzID0gY29weUhpc3RvcnlEYXRhKFxuICAgIHsgY29tbWl0TG9nOiBsb2cuY29tbWl0TG9nLCAuLi4obG9nLmluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHsgaW5pdGlhbFN0YXRlOiBsb2cuaW5pdGlhbFN0YXRlIH0pIH0sXG4gICAgbWF4Qnl0ZXMsXG4gICkgYXMgUGFpclsnYmFzaXMnXTtcbiAgcmV0dXJuIHsgcGF5bG9hZCwgdGFyZ2V0LCByZWNlaXB0LCBiYXNpcyB9O1xufVxuXG5mdW5jdGlvbiBjYXB0dXJlRW5kaW5nKFxuICBsb2c6IFN0b3JlZExvZyxcbiAgY2FwdHVyZTogTmF0aXZlQ2FwdHVyZU9ic2VydmF0aW9uLFxuICB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXhwZWN0ZWQgPVxuICAgIGNhcHR1cmUuYm91bmRhcnkuc3RhdHVzID09PSAnY29tcGxldGVkJyA/ICdvaycgOiBjYXB0dXJlLmJvdW5kYXJ5LnN0YXR1cyA9PT0gJ3BhdXNlZCcgPyAncGF1c2VkJyA6ICdmYWlsZWQnO1xuICBpZiAoZXhwZWN0ZWQgIT09IGxvZy5vdXRjb21lKSByZXR1cm4gJ2JvdW5kYXJ5LW1pc21hdGNoJztcbiAgbGV0IGNsb3NlID0gLTE7XG4gIGxldCBjbG9zZXMgPSAwO1xuICBsb2cuZW50cmllcy5mb3JFYWNoKChlLCBpbmRleCkgPT4ge1xuICAgIGlmIChlLmtpbmQgPT09ICdjbG9zZWQnKSB7XG4gICAgICBjbG9zZSA9IGluZGV4O1xuICAgICAgY2xvc2VzKys7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgb2JzZXJ2YXRpb24gPSBsb2cuZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2luZCA9PT0gJ25vdGUnICYmIGUubm90ZSA9PT0gQ0FQVFVSRV9ISVNUT1JZX05PVEUpO1xuICBjb25zdCBhY2tub3dsZWRnZW1lbnQgPSBsb2cuZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUua2luZCA9PT0gJ25vdGUnICYmIGUubm90ZSA9PT0gQ0FQVFVSRV9SRUNFSVBUX05PVEUpO1xuICBpZiAoY2xvc2UgPCAwIHx8IG9ic2VydmF0aW9uIDw9IGNsb3NlIHx8IGFja25vd2xlZGdlbWVudCA8PSBvYnNlcnZhdGlvbikgcmV0dXJuICdzZXF1ZW5jZS1taXNtYXRjaCc7XG4gIGlmIChcbiAgICBjbG9zZXMgIT09IDEgfHxcbiAgICBvd25EYXRhKGxvZy5tZXRhLmNsb3NlZCwgJ3J1bklkJykgIT09IHRhcmdldC5ydW5JZCB8fFxuICAgIG93bkRhdGEobG9nLm1ldGEub3BlbmVkLCAncnVuSWQnKSAhPT0gdGFyZ2V0LnJ1bklkXG4gIClcbiAgICByZXR1cm4gJ2JvdW5kYXJ5LW1pc21hdGNoJztcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FwdHVyZUV2aWRlbmNlKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjYXB0dXJlOiBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXBheWxvYWQuZXhlY3V0aW9uVHJlZSB8fCB0eXBlb2YgcGF5bG9hZC5leGVjdXRpb25UcmVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBheWxvYWQuZXhlY3V0aW9uVHJlZSkpXG4gICAgcmV0dXJuICdldmlkZW5jZS1taXNzaW5nJztcbiAgaWYgKFxuICAgIGNhcHR1cmUuY2hhbm5lbHMuY29udHJvbCA9PT0gJ2NhcHR1cmVkJyAmJlxuICAgICghQXJyYXkuaXNBcnJheShwYXlsb2FkLnJlY29yZGVycykgfHxcbiAgICAgICFwYXlsb2FkLnJlY29yZGVycy5zb21lKChyKSA9PiByPy5jYXB0dXJlPy5ydW5JZCA9PT0gY2FwdHVyZS5ydW5JZCAmJiByLmNhcHR1cmUuY29udHJvbCA9PT0gJ2NhcHR1cmVkJykpXG4gIClcbiAgICByZXR1cm4gJ3JlY29yZGVyLWV2aWRlbmNlLW1pc3NpbmcnO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogQGludGVybmFsIEVuZ2luZS1tZXRhZGF0YSBhZG1pc3Npb24gYWZ0ZXIgRm9vdHRyYWNlJ3MgZ2VuZXJpYyByZWNvcmQgdmFsaWRhdGlvbi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZG1pdFN0b3JlZENhcHR1cmUoXG4gIGxvZzogU3RvcmVkTG9nLFxuICBydW5JZDogc3RyaW5nLFxuICBtYXhCeXRlczogbnVtYmVyLFxuKTogUHJvbWlzZTxTdG9yZWRDYXB0dXJlUmVzdWx0PiB7XG4gIGNvbnN0IHVua25vd24gPSAocmVhc29uOiBzdHJpbmcpOiBTdG9yZWRDYXB0dXJlUmVzdWx0ID0+ICh7IHN0YXR1czogJ3Vua25vd24nLCByZWFzb24gfSk7XG4gIGNvbnN0IHBhaXIgPSBjYXB0dXJlUGFpcihsb2csIHJ1bklkLCBtYXhCeXRlcyk7XG4gIGlmICh0eXBlb2YgcGFpciA9PT0gJ3N0cmluZycpIHJldHVybiB1bmtub3duKHBhaXIpO1xuICBjb25zdCB7IHBheWxvYWQsIHRhcmdldCwgcmVjZWlwdCwgYmFzaXMgfSA9IHBhaXI7XG4gIGNvbnN0IGJvZHkgPSBoaXN0b3J5RXZpZGVuY2UocGF5bG9hZCk7XG4gIGlmICgoYXdhaXQgaGlzdG9yeURpZ2VzdCh7IGV2aWRlbmNlOiBib2R5LCByZWNvcmQ6IGJhc2lzIH0pKSAhPT0gdGFyZ2V0LmRpZ2VzdCkgcmV0dXJuIHVua25vd24oJ2V2aWRlbmNlLW1pc21hdGNoJyk7XG4gIGlmICghdmFsaWRhdGVBYnNlbnRFbnRyaWVzKHBheWxvYWQpKSByZXR1cm4gdW5rbm93bignYWJzZW50LWV2aWRlbmNlLXJlZnVzZWQnKTtcbiAgY29uc3QgY2FwdHVyZSA9IGhpc3RvcnlOb3RlKHBheWxvYWQuY2FwdHVyZSwgdGFyZ2V0KTtcbiAgaWYgKCFjYXB0dXJlIHx8IGNhcHR1cmUubGltaXRhdGlvbnMuaW5jbHVkZXMoJ3Jlc3VtZWQtc2VnbWVudCcpKSByZXR1cm4gdW5rbm93bignY2FwdHVyZS1yZWZ1c2VkJyk7XG4gIGNvbnN0IHJlYWRTb3VyY2VzID1cbiAgICBjYXB0dXJlLnZlcnNpb24gPT09IDJcbiAgICAgID8gc3RvcmVkUmVhZFNvdXJjZXMocGF5bG9hZC5yZWFkU291cmNlcywgY2FwdHVyZSwgYmFzaXMuY29tbWl0TG9nLCBiYXNpcy5pbml0aWFsU3RhdGUsIHBheWxvYWQuZXhlY3V0aW9uVHJlZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoY2FwdHVyZS52ZXJzaW9uID09PSAyID8gIXJlYWRTb3VyY2VzIDogT2JqZWN0Lmhhc093bihwYXlsb2FkLCAncmVhZFNvdXJjZXMnKSlcbiAgICByZXR1cm4gdW5rbm93bignc291cmNlLWV2aWRlbmNlLXJlZnVzZWQnKTtcbiAgY29uc3QgcmVmdXNhbCA9IGNhcHR1cmVFbmRpbmcobG9nLCBjYXB0dXJlLCB0YXJnZXQpID8/IGNhcHR1cmVFdmlkZW5jZShwYXlsb2FkLCBjYXB0dXJlKTtcbiAgaWYgKHJlZnVzYWwpIHJldHVybiB1bmtub3duKHJlZnVzYWwpO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJyxcbiAgICBoaXN0b3J5OiBPYmplY3QuZnJlZXplKHtcbiAgICAgIHJ1bklkLFxuICAgICAgY2FwdHVyZSxcbiAgICAgIC4uLihyZWFkU291cmNlcyAmJiB7IHJlYWRTb3VyY2VzIH0pLFxuICAgICAgZXhlY3V0aW9uVHJlZTogcGF5bG9hZC5leGVjdXRpb25UcmVlIGFzIFN0YWdlU25hcHNob3QsXG4gICAgICAuLi4ocGF5bG9hZC5hYnNlbnQgIT09IHVuZGVmaW5lZCA/IHsgYWJzZW50OiBwYXlsb2FkLmFic2VudCBhcyByZWFkb25seSAocmVhZG9ubHkgc3RyaW5nW10pW10gfSA6IHt9KSxcbiAgICAgIC4uLihwYXlsb2FkLnJlY29yZGVycyAhPT0gdW5kZWZpbmVkID8geyByZWNvcmRlcnM6IHBheWxvYWQucmVjb3JkZXJzIGFzIFJlY29yZGVyU25hcHNob3RbXSB9IDoge30pLFxuICAgICAgY29tbWl0TG9nOiBiYXNpcy5jb21taXRMb2csXG4gICAgICAuLi4oYmFzaXMuaW5pdGlhbFN0YXRlICYmIHsgaW5pdGlhbFN0YXRlOiBiYXNpcy5pbml0aWFsU3RhdGUgfSksXG4gICAgICByZWNlaXB0LFxuICAgIH0pLFxuICB9KTtcbn1cbiJdfQ==