footprintjs 9.23.2 → 9.23.3

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.
@@ -53,6 +53,7 @@
53
53
  */
54
54
  Object.defineProperty(exports, "__esModule", { value: true });
55
55
  exports.ParallelForEachHandler = void 0;
56
+ const handles_js_1 = require("../../reactive/handles.js");
56
57
  const types_js_1 = require("../../reactive/types.js");
57
58
  const createProtectedScope_js_1 = require("../../scope/protection/createProtectedScope.js");
58
59
  const branchSegment_js_1 = require("../branchSegment.js");
@@ -127,9 +128,17 @@ class ParallelForEachHandler {
127
128
  /**
128
129
  * Evaluate the items selector against the live scope. A non-array return is
129
130
  * a chart bug, not a runtime condition — it fails loudly, naming the stage.
131
+ *
132
+ * The selector reads the typed scope, so what it returns is usually the
133
+ * scope's own array HANDLE (a Proxy bound to the parent stage) and every
134
+ * `items[index]` an element handle. The items are about to cross into
135
+ * branch runtimes — closed over by `branch(item, index)` and seeded as the
136
+ * branch's `item` — so they are taken as VALUES here (`unwrapHandles`,
137
+ * reactive/handles.ts). 9.22.0–9.23.2 seeded the handle itself and every
138
+ * branch over an object item failed at its seed commit (DataCloneError).
130
139
  */
131
140
  resolveItems(config, scope, node) {
132
- const items = config.items(scope);
141
+ const items = (0, handles_js_1.unwrapHandles)(config.items(scope));
133
142
  if (items === undefined || items === null)
134
143
  return [];
135
144
  if (!Array.isArray(items)) {
@@ -222,4 +231,4 @@ function notify(scope, method) {
222
231
  if (s && typeof s[method] === 'function')
223
232
  s[method]();
224
233
  }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYWxsZWxGb3JFYWNoSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL1BhcmFsbGVsRm9yRWFjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7OztBQUdILHNEQUF5RDtBQUN6RCw0RkFBc0Y7QUFDdEYsMERBQXlEO0FBc0J6RCxNQUFhLHNCQUFzQjtJQUV2QjtJQUNBO0lBQ0E7SUFIVixZQUNVLElBQStCLEVBQy9CLGdCQUFnRCxFQUNoRCxLQUF5QztRQUZ6QyxTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdDO1FBQ2hELFVBQUssR0FBTCxLQUFLLENBQW9DO0lBQ2hELENBQUM7SUFFSjs7O09BR0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUNQLElBQTZCLEVBQzdCLE9BQXFCLEVBQ3JCLFVBQThCLEVBQzlCLGdCQUFrQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBeUQsQ0FBQztRQUU5RSwwRUFBMEU7UUFDMUUsNEVBQTRFO1FBQzVFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRyxNQUFNLFlBQVksR0FBRyxRQUFRLElBQUssUUFBZ0IsQ0FBQyx5QkFBYyxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQzVFLE1BQU0sS0FBSyxHQUFHLFlBQVk7WUFDeEIsQ0FBQyxDQUFDLFFBQVE7WUFDVixDQUFDLENBQUUsSUFBQSw4Q0FBb0Is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QUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQXFCLEVBQUUsSUFBWSxFQUFFLE9BQWtCO1FBQzVGLE1BQU0sQ0FBQyxHQUFHLFFBQThDLENBQUM7UUFDekQsSUFBSSxPQUFPLENBQUMsRUFBRSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLFNBQW1ELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQWtELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JFLE9BQU87UUFDVCxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQTFNRCx3REEwTUM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBUyxNQUFNLENBQUMsS0FBYyxFQUFFLE1BQTZDO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLEtBQTRDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVTtRQUFHLENBQUMsQ0FBQyxNQUFNLENBQWdCLEVBQUUsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJhbGxlbEZvckVhY2hIYW5kbGVyIOKAlCBkeW5hbWljIGZhbi1vdXQ6IG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBDT1VOVFxuICogZGVjaWRlZCBhdCBydW50aW1lIGZyb20gdGhlIHBheWxvYWQuXG4gKlxuICogRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDEgKyBEMikuIFJvdW5kIEIgYnVpbGRzIGV4YWN0bHlcbiAqIHRoYXQgZG9jdW1lbnQuXG4gKlxuICogIyMgV2hhdCB0aGlzIGhhbmRsZXIgZG9lcyBOT1QgaW52ZW50XG4gKlxuICogQWxtb3N0IGV2ZXJ5dGhpbmcgaGVyZSBpcyBleGlzdGluZyBtYWNoaW5lcnksIHdpcmVkIHRvZ2V0aGVyOlxuICpcbiAqIC0gKipFYWNoIGJyYW5jaCBpcyBhIGdlbmVyYXRlZCBTVUJGTE9XLioqIEl0cyBwYXRoIHNlZ21lbnQgaXNcbiAqICAgYDxwYXJlbnRTdGFnZUlkPn48aW5kZXg+YCAoc2VlIGBlbmdpbmUvYnJhbmNoU2VnbWVudC50c2ApIOKAlCBhIHN1YmZsb3dQYXRoXG4gKiAgIHNlZ21lbnQgaW4gdGhlIGdyYW1tYXIgdGhhdCBhbHJlYWR5IHNoaXBzLCBOT1QgYSBuZXcgZGVsaW1pdGVyIGNsYXNzLiBTbyBhXG4gKiAgIGJyYW5jaCBnZXRzLCBmb3IgZnJlZTogYSBmcmVzaCBpc29sYXRlZCBgRXhlY3V0aW9uUnVudGltZWAgKGJyYW5jaGVzIGNhbm5vdFxuICogICBjb3JydXB0IGVhY2ggb3RoZXIncyBpbi1mbGlnaHQgc3RhdGUpLCB0aGUgaW5wdXRNYXBwZXIgc2VhbSBmb3IgZmVlZGluZyB0aGVcbiAqICAgaXRlbSBpbiwgYW5kIOKAlCB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIGRlc2lnbiDigJQgYHBhcnNlUnVudGltZVN0YWdlSWRgLFxuICogICBgY2F1c2FsQ2hhaW5gLCBgc2xpY2VGb3JLZXlgIGFuZCBgZm9yd2FyZFNsaWNlRm9yS2V5YCByZWFkaW5nIGJyYW5jaFxuICogICBjb21taXRzIHdpdGggWkVSTyBjaGFuZ2VzLCBiZWNhdXNlIHRoZSBpZCBzaGFwZSBJUyB0aGUgc2hpcHBlZCBzaGFwZS5cbiAqIC0gKipUaGUgZmFuLW91dCBpdHNlbGYgaXMgYENoaWxkcmVuRXhlY3V0b3JgLioqIFRoYXQgaXMgd2hhdCBtYWtlcyB0aGVcbiAqICAgZmFpbHVyZSBwb2xpY3kgXCJQYXJhbGxlbCdzIGV4aXN0aW5nIGZhaWx1cmUgcG9saWN5XCIgcmF0aGVyIHRoYW4gYSBzZWNvbmRcbiAqICAgb25lOiBgZmFpbEZhc3RgIOKGkiBgUHJvbWlzZS5hbGxgLCBvdGhlcndpc2UgYmVzdC1lZmZvcnQgYFByb21pc2UuYWxsU2V0dGxlZGAuXG4gKiAgIEl0IGFsc28gZmlyZXMgYG9uRm9ya2AgKyBgb25TdGFnZUV4ZWN1dGVkKCdmb3JrJylgIGFuZCBidWJibGVzIGFcbiAqICAgYFBhdXNlU2lnbmFsYCBvdXQgb2YgYSBicmFuY2gsIGFsbCB1bmNoYW5nZWQuXG4gKlxuICogIyMgVGhlIGxhd3MgdGhpcyBoYW5kbGVyIG93bnNcbiAqXG4gKiAqKk9yZGVyIGlzIGl0ZW1zIG9yZGVyLioqIFJlc3VsdHMgYXJlIGFzc2VtYmxlZCBieSBpbmRleCBmcm9tIHRoZSBmYW4tb3V0J3NcbiAqIGtleWVkIHJlc3VsdHMsIG5ldmVyIGJ5IGNvbXBsZXRpb24gb3JkZXIsIGFuZCBsYW5kIGFzIE9ORSBhcnJheSB3cml0ZSBvbiB0aGVcbiAqIHBhcmVudCDigJQgc28gYGludG9baV1gIGlzIGFsd2F5cyBicmFuY2ggYGlgJ3MgcmVzdWx0IG5vIG1hdHRlciB3aGljaCBicmFuY2hcbiAqIGZpbmlzaGVkIGZpcnN0LiBBIGZhaWxlZCBicmFuY2ggKGJlc3QtZWZmb3J0IG1vZGUpIGxlYXZlcyBgdW5kZWZpbmVkYCBpbiBpdHNcbiAqIHNsb3Q7IHdoaWNoIGJyYW5jaCBmYWlsZWQgaXMgbm90IHJlcG9ydGVkIGhlcmUsIGJlY2F1c2UgdGhhdCBnYXAgaXNcbiAqIHByZS1leGlzdGluZyBpbiB0aGUgcGFyYWxsZWwgZmFuLW91dCBhbmQgbm90IHRoaXMgZmVhdHVyZSdzIHRvIHdpZGVuLlxuICpcbiAqICoqbWF4QnJhbmNoZXMgdHJ1bmNhdGVzLCBhbmQgc2F5cyBzby4qKiBJdGVtcyBwYXN0IHRoZSBjZWlsaW5nIGRvIG5vdCBydW4uXG4gKiBUaGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCBpbiB0aGUgc3RhZ2UncyBvd24gY29tbWl0LXZpc2libGUgbG9nIGFuZCBhcyBhXG4gKiBmbG93IG1lc3NhZ2Ug4oCUIGJvdW5kZWQgZXhlY3V0aW9uLCBzdGF0ZWQsIG5ldmVyIHNpbGVudC5cbiAqXG4gKiAqKkJyYW5jaCBjaGFydHMgYXJlIHJlLXJlZ2lzdGVyZWQgb24gRVZFUlkgdmlzaXQuKiogVGhlIGdlbmVyYXRlZCBzZWdtZW50c1xuICogYXJlIHN0YWJsZSBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBhbmQgc3ViZmxvdyByZWdpc3RyYXRpb24gaXMgbm9ybWFsbHlcbiAqIGZpcnN0LXdyaXRlLXdpbnMg4oCUIHdoaWNoIHdvdWxkIG1lYW4gYSBsb29waW5nIGZhbi1vdXQgc2lsZW50bHkgcmUtZXhlY3V0aW5nXG4gKiBpdGVyYXRpb24gMSdzIGJyYW5jaCBjaGFydHMgZm9yZXZlciwgZXZlbiB3aGVuIHRoZSBmYWN0b3J5IHJldHVybnMgZGlmZmVyZW50XG4gKiBjaGFydHMuIFRoaXMgaGFuZGxlciBvdmVyd3JpdGVzIGluc3RlYWQuIFBlci1pdGVyYXRpb24gcmVzdWx0cyBzdGF5XG4gKiBhZGRyZXNzYWJsZSB0aHJvdWdoIHRoZSBtb3VudCdzIGBydW50aW1lU3RhZ2VJZGAga2V5LCBleGFjdGx5IGFzIHRoZXkgZG8gZm9yXG4gKiBhIGhhbmQtYXV0aG9yZWQgbG9vcGluZyBzdWJmbG93LlxuICpcbiAqICoqRXZlbnQgb3JkZXIuKiogYG9uU3RhZ2VTdGFydGAg4oaSIHRoZSBgaXRlbXNgIHJlYWQg4oaSIGBvbkZvcmtgIOKGkiBicmFuY2hlcyDihpJcbiAqIHRoZSBvcmRlcmVkLWFycmF5IHdyaXRlIOKGkiBgb25TdGFnZUVuZGAg4oaSIGBvbkNvbW1pdGAuIFRoZSBzdGFnZSdzIG93biBjb21taXRcbiAqIHRoZXJlZm9yZSBsYW5kcyBBRlRFUiBpdHMgYG9uRm9ya2AsIHdoaWNoIGlzIHRoZSBvbmUgcGxhY2UgYSBzdGFnZSdzIGNvbW1pdFxuICogZm9sbG93cyBpdHMgZmFuLW91dCBldmVudCDigJQgdW5hdm9pZGFibGUgYW5kIGhvbmVzdDogdGhlIHJlc3VsdCBpcyBub3RcbiAqIGtub3dhYmxlIHVudGlsIHRoZSBicmFuY2hlcyBzZXR0bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IElTX1RZUEVEX1NDT1BFIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUHJvdGVjdGVkU2NvcGUgfSBmcm9tICcuLi8uLi9zY29wZS9wcm90ZWN0aW9uL2NyZWF0ZVByb3RlY3RlZFNjb3BlLmpzJztcbmltcG9ydCB7IGJ1aWxkQnJhbmNoU2VnbWVudCB9IGZyb20gJy4uL2JyYW5jaFNlZ21lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIEhhbmRsZXJEZXBzLCBOb2RlUmVzdWx0VHlwZSwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDaGlsZHJlbkV4ZWN1dG9yIH0gZnJvbSAnLi9DaGlsZHJlbkV4ZWN1dG9yLmpzJztcblxuLyoqXG4gKiBUcmF2ZXJzZXItb3duZWQgb3BlcmF0aW9ucyB0aGUgaGFuZGxlciBuZWVkcy4gUGFzc2VkIGFzIGZ1bmN0aW9ucyAobm90IHRoZVxuICogdHJhdmVyc2VyKSBzbyB0aGUgaGFuZGxlciBrZWVwcyB0aGUgc2FtZSBuby1iYWNrLXJlZmVyZW5jZSBzaGFwZSBhcyBldmVyeVxuICogb3RoZXIgaGFuZGxlciBpbiB0aGlzIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hIb29rczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIFRoZSB0cmF2ZXJzZXIncyBgcHJlZml4Tm9kZVRyZWVgIOKAlCBieXRlLXR3aW4gb2YgdGhlIGJ1aWxkZXIncyBgX3ByZWZpeE5vZGVUcmVlYC4gKi9cbiAgcHJlZml4Tm9kZVRyZWUobm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHByZWZpeDogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBSZWdpc3RlciAoT1ZFUldSSVRJTkcpIGEgZ2VuZXJhdGVkIGJyYW5jaCBzdWJmbG93ICsgaXRzIHN0YWdlIGZ1bmN0aW9ucy4gKi9cbiAgcmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nLCByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgY2hhcnQ6IEJyYW5jaENoYXJ0KTogdm9pZDtcbiAgLyoqIFJlYWQgYSBjb21wbGV0ZWQgYnJhbmNoJ3MgZmluYWwgc2hhcmVkIHN0YXRlLCBmb3IgdGhlIGBzdWJmbG93T3V0cHV0ID8/IHN0YXRlYCBmYWxsYmFjay4gKi9cbiAgYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgLyoqIE1pcnJvciB0aGUgZ2VuZXJhdGVkIGJyYW5jaGVzIGludG8gdGhlIHJ1bnRpbWUgc3RydWN0dXJlLCBmb3IgdmlzdWFsaXphdGlvbi4gKi9cbiAgcmVjb3JkQnJhbmNoU3RydWN0dXJlKG5vZGVJZDogc3RyaW5nLCBicmFuY2hlczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbEZvckVhY2hIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkV4ZWN1dG9yOiBDaGlsZHJlbkV4ZWN1dG9yPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBob29rczogUGFyYWxsZWxGb3JFYWNoSG9va3M8VE91dCwgVFNjb3BlPixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGZhbi1vdXQgdG8gY29tcGxldGlvbiBhbmQgY29tbWl0IHRoZSBvcmRlcmVkIHJlc3VsdHMuXG4gICAqIFJldHVybnMgdGhlIHJlc3VsdHMgYXJyYXkgKHRoZSBzdGFnZSdzIG91dHB1dCkuXG4gICAqL1xuICBhc3luYyBydW4oXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuXG4gICAgLy8gU2FtZSBzY29wZSBjb25zdHJ1Y3Rpb24gU3RhZ2VSdW5uZXIgcGVyZm9ybXMsIHByb3RlY3Rpb24gaW5jbHVkZWQ6IHRoaXNcbiAgICAvLyBzdGFnZSBoYXMgbm8gdXNlciBmdW5jdGlvbiwgYnV0IGBpdGVtcyhzY29wZSlgIElTIHVzZXIgY29kZSwgc28gaXRzIHJlYWRzXG4gICAgLy8gYXJlIHRyYWNrZWQgYW5kIGEgc3RyYXkgYXNzaWdubWVudCBpbnNpZGUgaXQgaXMgY2F1Z2h0IGJ5IHRoZSBzYW1lXG4gICAgLy8gcHJvdGVjdGlvbiBldmVyeSBvdGhlciBzdGFnZSBnZXRzLiAoVHlwZWRTY29wZSBicmluZ3MgaXRzIG93biBwcm94eS4pXG4gICAgY29uc3QgcmF3U2NvcGUgPSB0aGlzLmRlcHMuc2NvcGVGYWN0b3J5KGNvbnRleHQsIG5vZGUubmFtZSwgdGhpcy5kZXBzLnJlYWRPbmx5Q29udGV4dCwgdGhpcy5kZXBzLmV4ZWN1dGlvbkVudik7XG4gICAgY29uc3QgaXNUeXBlZFNjb3BlID0gcmF3U2NvcGUgJiYgKHJhd1Njb3BlIGFzIGFueSlbSVNfVFlQRURfU0NPUEVdID09PSB0cnVlO1xuICAgIGNvbnN0IHNjb3BlID0gaXNUeXBlZFNjb3BlXG4gICAgICA/IHJhd1Njb3BlXG4gICAgICA6IChjcmVhdGVQcm90ZWN0ZWRTY29wZShyYXdTY29wZSBhcyBvYmplY3QsIHtcbiAgICAgICAgICBtb2RlOiB0aGlzLmRlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICAgICAgICBzdGFnZU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgfSkgYXMgVFNjb3BlKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZVN0YXJ0Jyk7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVzb2x2ZUl0ZW1zKGNvbmZpZywgc2NvcGUsIG5vZGUpO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGJyYW5jaENvdW50ID0gTWF0aC5taW4odG90YWwsIGNvbmZpZy5tYXhCcmFuY2hlcyk7XG4gICAgY29uc3QgdHJ1bmNhdGVkID0gdG90YWwgPiBicmFuY2hDb3VudDtcblxuICAgIGNvbnRleHQuYWRkTG9nKCdwYXJhbGxlbEZvckVhY2gnLCB7XG4gICAgICBpdGVtczogdG90YWwsXG4gICAgICBicmFuY2hlczogYnJhbmNoQ291bnQsXG4gICAgICBtYXhCcmFuY2hlczogY29uZmlnLm1heEJyYW5jaGVzLFxuICAgICAgdHJ1bmNhdGVkLFxuICAgICAgaW50bzogY29uZmlnLmludG8sXG4gICAgfSk7XG4gICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgLy8gU3RhdGVkLCBub3Qgc2lsZW50IOKAlCBpbiB0aGUgc3RhZ2UncyBvd24gZmxvdyBtZXNzYWdlcyBBTkQgaXRzIGxvZ3MgYWJvdmUuXG4gICAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgICAgICdjaGlsZHJlbicsXG4gICAgICAgIGBtYXhCcmFuY2hlcyByZWFjaGVkOiBydW5uaW5nICR7YnJhbmNoQ291bnR9IG9mICR7dG90YWx9IGl0ZW1zICgke3RvdGFsIC0gYnJhbmNoQ291bnR9IG5vdCBydW4pYCxcbiAgICAgICAgeyBjb3VudDogYnJhbmNoQ291bnQgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdHM6IHVua25vd25bXTtcbiAgICBpZiAoYnJhbmNoQ291bnQgPT09IDApIHtcbiAgICAgIC8vIFplcm8gaXRlbXMgPSB6ZXJvIGJyYW5jaGVzOiBubyBmYW4tb3V0IGV2ZW50LCBhbiBlbXB0eSBvcmRlcmVkIGFycmF5LlxuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBicmFuY2hlcyA9IHRoaXMuYnVpbGRCcmFuY2hlcyhub2RlLCBpdGVtcywgYnJhbmNoQ291bnQpO1xuICAgICAgdGhpcy5ob29rcy5yZWNvcmRCcmFuY2hTdHJ1Y3R1cmUobm9kZS5pZCwgYnJhbmNoZXMpO1xuXG4gICAgICAvLyBUaGUgZmFuLW91dCBub2RlIGhhbmRlZCB0byBDaGlsZHJlbkV4ZWN1dG9yIGlzIGEgdGVtcCB2aWV3IGNhcnJ5aW5nIHRoZVxuICAgICAgLy8gZ2VuZXJhdGVkIGJyYW5jaGVzIChzYW1lIHNoYXBlIGBleGVjdXRlU2VsZWN0ZWRDaGlsZHJlbmAgdXNlcyBmb3IgaXRzXG4gICAgICAvLyBzZWxlY3RlZCBzdWJzZXQpIOKAlCB0aGUgc2hhcmVkIGdyYXBoIG5vZGUgaXMgbmV2ZXIgbXV0YXRlZCwgc28gYSBsb29wXG4gICAgICAvLyByZXZpc2l0IHJlZ2VuZXJhdGVzIGNsZWFubHkuXG4gICAgICBjb25zdCBmb3JrVmlldzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiBicmFuY2hlcyxcbiAgICAgICAgLi4uKGNvbmZpZy5mYWlsRmFzdCAhPT0gdW5kZWZpbmVkICYmIHsgZmFpbEZhc3Q6IGNvbmZpZy5mYWlsRmFzdCB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0cyA9IGF3YWl0IHRoaXMuY2hpbGRyZW5FeGVjdXRvci5leGVjdXRlTm9kZUNoaWxkcmVuKFxuICAgICAgICBmb3JrVmlldyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBicmFuY2hQYXRoLFxuICAgICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgKTtcblxuICAgICAgcmVzdWx0cyA9IHRoaXMuY29sbGVjdE9yZGVyZWQobm9kZSwgYnJhbmNoQ291bnQsIGNoaWxkUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVJlc3VsdHMocmF3U2NvcGUsIGNvbnRleHQsIGNvbmZpZy5pbnRvLCByZXN1bHRzKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZUVuZCcpO1xuICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgaXRlbXMgc2VsZWN0b3IgYWdhaW5zdCB0aGUgbGl2ZSBzY29wZS4gQSBub24tYXJyYXkgcmV0dXJuIGlzXG4gICAqIGEgY2hhcnQgYnVnLCBub3QgYSBydW50aW1lIGNvbmRpdGlvbiDigJQgaXQgZmFpbHMgbG91ZGx5LCBuYW1pbmcgdGhlIHN0YWdlLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlSXRlbXMoXG4gICAgY29uZmlnOiBQYXJhbGxlbEZvckVhY2hDb25maWc8dW5rbm93biwgVFNjb3BlPixcbiAgICBzY29wZTogVFNjb3BlLFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICApOiByZWFkb25seSB1bmtub3duW10ge1xuICAgIGNvbnN0IGl0ZW1zID0gY29uZmlnLml0ZW1zKHNjb3BlKTtcbiAgICBpZiAoaXRlbXMgPT09IHVuZGVmaW5lZCB8fCBpdGVtcyA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhcmFsbGVsRm9yRWFjaCAnJHtub2RlLmlkfSc6IGl0ZW1zKCkgbXVzdCByZXR1cm4gYW4gYXJyYXkgKGdvdCAke3R5cGVvZiBpdGVtc30pLiBgICtcbiAgICAgICAgICAnUmV0dXJuIFtdIHRvIHJ1biB6ZXJvIGJyYW5jaGVzLicsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICAvKiogR2VuZXJhdGUgb25lIHN1YmZsb3ctbW91bnQgbm9kZSBwZXIgYnJhbmNoLCByZWdpc3RlcmluZyBlYWNoIGJyYW5jaCBjaGFydC4gKi9cbiAgcHJpdmF0ZSBidWlsZEJyYW5jaGVzKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGl0ZW1zOiByZWFkb25seSB1bmtub3duW10sXG4gICAgYnJhbmNoQ291bnQ6IG51bWJlcixcbiAgKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSB7XG4gICAgY29uc3QgY29uZmlnID0gbm9kZS5wYXJhbGxlbEZvckVhY2ggYXMgUGFyYWxsZWxGb3JFYWNoQ29uZmlnPHVua25vd24sIFRTY29wZT47XG4gICAgY29uc3QgYnJhbmNoZXM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBicmFuY2hDb3VudDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IGJ1aWxkQnJhbmNoU2VnbWVudChub2RlLmlkLCBpbmRleCk7XG4gICAgICBjb25zdCBjaGFydCA9IGNvbmZpZy5icmFuY2goaXRlbSwgaW5kZXgpO1xuICAgICAgaWYgKCFjaGFydCB8fCAhY2hhcnQucm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHBhcmFsbGVsRm9yRWFjaCAnJHtub2RlLmlkfSc6IGJyYW5jaChpdGVtLCAke2luZGV4fSkgbXVzdCByZXR1cm4gYSBidWlsdCBjaGFydCBgICtcbiAgICAgICAgICAgICcodGhlIHJlc3VsdCBvZiBmbG93Q2hhcnQoLi4uKS5idWlsZCgpKS4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTYW1lIHByZWZpeGluZyBhIGxhenkgc3ViZmxvdyBnZXRzIOKAlCB0aGUgYnJhbmNoJ3MgaW5uZXIgaWRzIGJlY29tZVxuICAgICAgLy8gYDxzZWdtZW50Pi88aWQ+YCwgc28gaXRzIHN0YWdlcyBhZGRyZXNzIGFzIGA8c2VnbWVudD4vPGlkPiM8bj5gLlxuICAgICAgY29uc3QgcHJlZml4ZWRSb290ID0gdGhpcy5ob29rcy5wcmVmaXhOb2RlVHJlZShjaGFydC5yb290IGFzIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBzdWJmbG93SWQpO1xuICAgICAgdGhpcy5ob29rcy5yZWdpc3RlckJyYW5jaFN1YmZsb3coc3ViZmxvd0lkLCBwcmVmaXhlZFJvb3QsIGNoYXJ0KTtcblxuICAgICAgYnJhbmNoZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGAke25vZGUubmFtZX0gWyR7aW5kZXh9XWAsXG4gICAgICAgIGlkOiBzdWJmbG93SWQsXG4gICAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICAgIHN1YmZsb3dJZCxcbiAgICAgICAgc3ViZmxvd05hbWU6IGAke25vZGUubmFtZX0gWyR7aW5kZXh9XWAsXG4gICAgICAgIHN1YmZsb3dNb3VudE9wdGlvbnM6IHtcbiAgICAgICAgICAvLyBEMSdzIFwiaW5wdXRNYXBwZXIgc2VhbSBmb3IgZmVlZGluZyB0aGUgaXRlbSBpblwiOiB0aGUgaXRlbSBpc1xuICAgICAgICAgIC8vIHZpc2libGUgSU4gdGhlIGJyYW5jaCdzIHNjb3BlIChhbmQgc28gaW4gaXRzIGNvbW1pdCBsb2cpIGFzIHdlbGwgYXNcbiAgICAgICAgICAvLyBjbG9zZWQgb3ZlciBieSB0aGUgZmFjdG9yeSDigJQgcHJvdmVuYW5jZSBiZWF0cyBhIGhpZGRlbiBjbG9zdXJlLlxuICAgICAgICAgIGlucHV0TWFwcGVyOiAoKSA9PiAoeyBpdGVtLCBpbmRleCB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBicmFuY2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSByZXN1bHRzIGluIElURU1TIG9yZGVyIOKAlCBuZXZlciBjb21wbGV0aW9uIG9yZGVyLlxuICAgKlxuICAgKiBUaGUgYnJhbmNoJ3MgdmFsdWUgaXMgaXRzIHN1YmZsb3cgb3V0cHV0LCBmYWxsaW5nIGJhY2sgdG8gdGhlIGJyYW5jaCdzXG4gICAqIGZpbmFsIHNoYXJlZCBzdGF0ZSAodGhlIFR5cGVkU2NvcGUgY2FzZSwgd2hlcmUgc3RhZ2UgZnVuY3Rpb25zIHJldHVyblxuICAgKiB2b2lkKSDigJQgdGhlIHNhbWUgYHN1YmZsb3dPdXRwdXQgPz8gc2hhcmVkU3RhdGVgIHJ1bGUgYFN1YmZsb3dFeGVjdXRvcmBcbiAgICogYXBwbGllcyB0byBhbiBvdXRwdXRNYXBwZXIuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3RPcmRlcmVkKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGJyYW5jaENvdW50OiBudW1iZXIsXG4gICAgY2hpbGRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBOb2RlUmVzdWx0VHlwZT4sXG4gICk6IHVua25vd25bXSB7XG4gICAgY29uc3Qgb3JkZXJlZDogdW5rbm93bltdID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJyYW5jaENvdW50OyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBidWlsZEJyYW5jaFNlZ21lbnQobm9kZS5pZCwgaW5kZXgpO1xuICAgICAgY29uc3QgZW50cnkgPSBjaGlsZFJlc3VsdHNbc3ViZmxvd0lkXTtcbiAgICAgIGlmIChlbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LmlzRXJyb3IpIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgbW9kZTogYSBmYWlsZWQgYnJhbmNoIGtlZXBzIGl0cyBTTE9UIChvcmRlciBpcyBpdGVtc1xuICAgICAgICAvLyBvcmRlcikgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWUuIGZhaWxGYXN0IG1vZGUgbmV2ZXIgcmVhY2hlcyBoZXJlIOKAlFxuICAgICAgICAvLyB0aGUgZXJyb3IgYWxyZWFkeSByZWplY3RlZCB0aGUgd2hvbGUgc3RhZ2UuXG4gICAgICAgIG9yZGVyZWQucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG9yZGVyZWQucHVzaChlbnRyeS5yZXN1bHQgPz8gdGhpcy5ob29rcy5icmFuY2hTaGFyZWRTdGF0ZShzdWJmbG93SWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWQ7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIG9yZGVyZWQgYXJyYXkgYXMgT05FIHZhbHVlIG9uIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqIGAkc2V0VmFsdWVgIGRlbGliZXJhdGVseSwgd2hlcmUgYXZhaWxhYmxlOiB0aGUgVHlwZWRTY29wZSBzZXQgdHJhcFxuICAgKiBKU09OLXJvdW5kLXRyaXBzIGV2ZXJ5IG9iamVjdCB3cml0ZSAoRGF0ZeKGknN0cmluZywgTWFw4oaSe30pLCBhbmQgYnJhbmNoXG4gICAqIHJlc3VsdHMgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgcGF5bG9hZCB0aGF0IHdvdWxkIHNpbGVudGx5IGRlZ3JhZGUuXG4gICAqL1xuICBwcml2YXRlIHdyaXRlUmVzdWx0cyhyYXdTY29wZTogVFNjb3BlLCBjb250ZXh0OiBTdGFnZUNvbnRleHQsIGludG86IHN0cmluZywgcmVzdWx0czogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY29uc3QgcyA9IHJhd1Njb3BlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiBzPy4kc2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChzLiRzZXRWYWx1ZSBhcyAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKShpbnRvLCByZXN1bHRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzPy5zZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKHMuc2V0VmFsdWUgYXMgKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkoaW50bywgcmVzdWx0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE5vIGZhY2FkZSAoaGFuZC1yb2xsZWQgc2NvcGUgZmFjdG9yeSkg4oCUIHdyaXRlIHN0cmFpZ2h0IHRvIHRoZSBmcmFtZS5cbiAgICBjb250ZXh0LnNldEdsb2JhbChpbnRvLCByZXN1bHRzKTtcbiAgfVxufVxuXG4vKiogRmlyZSBhIHNjb3BlIGxpZmVjeWNsZSBub3RpZmljYXRpb24gaWYgdGhlIHNjb3BlIHN1cHBvcnRzIGl0LiAqL1xuZnVuY3Rpb24gbm90aWZ5KHNjb3BlOiB1bmtub3duLCBtZXRob2Q6ICdub3RpZnlTdGFnZVN0YXJ0JyB8ICdub3RpZnlTdGFnZUVuZCcpOiB2b2lkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAocyAmJiB0eXBlb2Ygc1ttZXRob2RdID09PSAnZnVuY3Rpb24nKSAoc1ttZXRob2RdIGFzICgpID0+IHZvaWQpKCk7XG59XG4iXX0=
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYWxsZWxGb3JFYWNoSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL1BhcmFsbGVsRm9yRWFjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtREc7OztBQUdILDBEQUEwRDtBQUMxRCxzREFBeUQ7QUFDekQsNEZBQXNGO0FBQ3RGLDBEQUF5RDtBQXNCekQsTUFBYSxzQkFBc0I7SUFFdkI7SUFDQTtJQUNBO0lBSFYsWUFDVSxJQUErQixFQUMvQixnQkFBZ0QsRUFDaEQsS0FBeUM7UUFGekMsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQztRQUNoRCxVQUFLLEdBQUwsS0FBSyxDQUFvQztJQUNoRCxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FDUCxJQUE2QixFQUM3QixPQUFxQixFQUNyQixVQUE4QixFQUM5QixnQkFBa0M7UUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQXlELENBQUM7UUFFOUUsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0csTUFBTSxZQUFZLEdBQUcsUUFBUSxJQUFLLFFBQWdCLENBQUMseUJBQWMsQ0FBQyxLQUFLLElBQUksQ0FBQztRQUM1RSxNQUFNLEtBQUssR0FBRyxZQUFZO1lBQ3hCLENBQUMsQ0FBQyxRQUFRO1lBQ1YsQ0FBQyxDQUFF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QUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLFlBQVksQ0FBQyxRQUFnQixFQUFFLE9BQXFCLEVBQUUsSUFBWSxFQUFFLE9BQWtCO1FBQzVGLE1BQU0sQ0FBQyxHQUFHLFFBQThDLENBQUM7UUFDekQsSUFBSSxPQUFPLENBQUMsRUFBRSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLFNBQW1ELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQWtELENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JFLE9BQU87UUFDVCxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQWxORCx3REFrTkM7QUFFRCxvRUFBb0U7QUFDcEUsU0FBUyxNQUFNLENBQUMsS0FBYyxFQUFFLE1BQTZDO0lBQzNFLE1BQU0sQ0FBQyxHQUFHLEtBQTRDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVTtRQUFHLENBQUMsQ0FBQyxNQUFNLENBQWdCLEVBQUUsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJhbGxlbEZvckVhY2hIYW5kbGVyIOKAlCBkeW5hbWljIGZhbi1vdXQ6IG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBDT1VOVFxuICogZGVjaWRlZCBhdCBydW50aW1lIGZyb20gdGhlIHBheWxvYWQuXG4gKlxuICogRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDEgKyBEMikuIFJvdW5kIEIgYnVpbGRzIGV4YWN0bHlcbiAqIHRoYXQgZG9jdW1lbnQuXG4gKlxuICogIyMgV2hhdCB0aGlzIGhhbmRsZXIgZG9lcyBOT1QgaW52ZW50XG4gKlxuICogQWxtb3N0IGV2ZXJ5dGhpbmcgaGVyZSBpcyBleGlzdGluZyBtYWNoaW5lcnksIHdpcmVkIHRvZ2V0aGVyOlxuICpcbiAqIC0gKipFYWNoIGJyYW5jaCBpcyBhIGdlbmVyYXRlZCBTVUJGTE9XLioqIEl0cyBwYXRoIHNlZ21lbnQgaXNcbiAqICAgYDxwYXJlbnRTdGFnZUlkPn48aW5kZXg+YCAoc2VlIGBlbmdpbmUvYnJhbmNoU2VnbWVudC50c2ApIOKAlCBhIHN1YmZsb3dQYXRoXG4gKiAgIHNlZ21lbnQgaW4gdGhlIGdyYW1tYXIgdGhhdCBhbHJlYWR5IHNoaXBzLCBOT1QgYSBuZXcgZGVsaW1pdGVyIGNsYXNzLiBTbyBhXG4gKiAgIGJyYW5jaCBnZXRzLCBmb3IgZnJlZTogYSBmcmVzaCBpc29sYXRlZCBgRXhlY3V0aW9uUnVudGltZWAgKGJyYW5jaGVzIGNhbm5vdFxuICogICBjb3JydXB0IGVhY2ggb3RoZXIncyBpbi1mbGlnaHQgc3RhdGUpLCB0aGUgaW5wdXRNYXBwZXIgc2VhbSBmb3IgZmVlZGluZyB0aGVcbiAqICAgaXRlbSBpbiwgYW5kIOKAlCB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIGRlc2lnbiDigJQgYHBhcnNlUnVudGltZVN0YWdlSWRgLFxuICogICBgY2F1c2FsQ2hhaW5gLCBgc2xpY2VGb3JLZXlgIGFuZCBgZm9yd2FyZFNsaWNlRm9yS2V5YCByZWFkaW5nIGJyYW5jaFxuICogICBjb21taXRzIHdpdGggWkVSTyBjaGFuZ2VzLCBiZWNhdXNlIHRoZSBpZCBzaGFwZSBJUyB0aGUgc2hpcHBlZCBzaGFwZS5cbiAqIC0gKipUaGUgZmFuLW91dCBpdHNlbGYgaXMgYENoaWxkcmVuRXhlY3V0b3JgLioqIFRoYXQgaXMgd2hhdCBtYWtlcyB0aGVcbiAqICAgZmFpbHVyZSBwb2xpY3kgXCJQYXJhbGxlbCdzIGV4aXN0aW5nIGZhaWx1cmUgcG9saWN5XCIgcmF0aGVyIHRoYW4gYSBzZWNvbmRcbiAqICAgb25lOiBgZmFpbEZhc3RgIOKGkiBgUHJvbWlzZS5hbGxgLCBvdGhlcndpc2UgYmVzdC1lZmZvcnQgYFByb21pc2UuYWxsU2V0dGxlZGAuXG4gKiAgIEl0IGFsc28gZmlyZXMgYG9uRm9ya2AgKyBgb25TdGFnZUV4ZWN1dGVkKCdmb3JrJylgIGFuZCBidWJibGVzIGFcbiAqICAgYFBhdXNlU2lnbmFsYCBvdXQgb2YgYSBicmFuY2gsIGFsbCB1bmNoYW5nZWQuXG4gKlxuICogIyMgVGhlIGxhd3MgdGhpcyBoYW5kbGVyIG93bnNcbiAqXG4gKiAqKk9yZGVyIGlzIGl0ZW1zIG9yZGVyLioqIFJlc3VsdHMgYXJlIGFzc2VtYmxlZCBieSBpbmRleCBmcm9tIHRoZSBmYW4tb3V0J3NcbiAqIGtleWVkIHJlc3VsdHMsIG5ldmVyIGJ5IGNvbXBsZXRpb24gb3JkZXIsIGFuZCBsYW5kIGFzIE9ORSBhcnJheSB3cml0ZSBvbiB0aGVcbiAqIHBhcmVudCDigJQgc28gYGludG9baV1gIGlzIGFsd2F5cyBicmFuY2ggYGlgJ3MgcmVzdWx0IG5vIG1hdHRlciB3aGljaCBicmFuY2hcbiAqIGZpbmlzaGVkIGZpcnN0LiBBIGZhaWxlZCBicmFuY2ggKGJlc3QtZWZmb3J0IG1vZGUpIGxlYXZlcyBgdW5kZWZpbmVkYCBpbiBpdHNcbiAqIHNsb3Q7IHdoaWNoIGJyYW5jaCBmYWlsZWQgaXMgbm90IHJlcG9ydGVkIGhlcmUsIGJlY2F1c2UgdGhhdCBnYXAgaXNcbiAqIHByZS1leGlzdGluZyBpbiB0aGUgcGFyYWxsZWwgZmFuLW91dCBhbmQgbm90IHRoaXMgZmVhdHVyZSdzIHRvIHdpZGVuLlxuICpcbiAqICoqbWF4QnJhbmNoZXMgdHJ1bmNhdGVzLCBhbmQgc2F5cyBzby4qKiBJdGVtcyBwYXN0IHRoZSBjZWlsaW5nIGRvIG5vdCBydW4uXG4gKiBUaGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCBpbiB0aGUgc3RhZ2UncyBvd24gY29tbWl0LXZpc2libGUgbG9nIGFuZCBhcyBhXG4gKiBmbG93IG1lc3NhZ2Ug4oCUIGJvdW5kZWQgZXhlY3V0aW9uLCBzdGF0ZWQsIG5ldmVyIHNpbGVudC5cbiAqXG4gKiAqKkJyYW5jaCBjaGFydHMgYXJlIHJlLXJlZ2lzdGVyZWQgb24gRVZFUlkgdmlzaXQuKiogVGhlIGdlbmVyYXRlZCBzZWdtZW50c1xuICogYXJlIHN0YWJsZSBhY3Jvc3MgbG9vcCBpdGVyYXRpb25zLCBhbmQgc3ViZmxvdyByZWdpc3RyYXRpb24gaXMgbm9ybWFsbHlcbiAqIGZpcnN0LXdyaXRlLXdpbnMg4oCUIHdoaWNoIHdvdWxkIG1lYW4gYSBsb29waW5nIGZhbi1vdXQgc2lsZW50bHkgcmUtZXhlY3V0aW5nXG4gKiBpdGVyYXRpb24gMSdzIGJyYW5jaCBjaGFydHMgZm9yZXZlciwgZXZlbiB3aGVuIHRoZSBmYWN0b3J5IHJldHVybnMgZGlmZmVyZW50XG4gKiBjaGFydHMuIFRoaXMgaGFuZGxlciBvdmVyd3JpdGVzIGluc3RlYWQuIFBlci1pdGVyYXRpb24gcmVzdWx0cyBzdGF5XG4gKiBhZGRyZXNzYWJsZSB0aHJvdWdoIHRoZSBtb3VudCdzIGBydW50aW1lU3RhZ2VJZGAga2V5LCBleGFjdGx5IGFzIHRoZXkgZG8gZm9yXG4gKiBhIGhhbmQtYXV0aG9yZWQgbG9vcGluZyBzdWJmbG93LlxuICpcbiAqICoqRXZlbnQgb3JkZXIuKiogYG9uU3RhZ2VTdGFydGAg4oaSIHRoZSBgaXRlbXNgIHJlYWQg4oaSIGBvbkZvcmtgIOKGkiBicmFuY2hlcyDihpJcbiAqIHRoZSBvcmRlcmVkLWFycmF5IHdyaXRlIOKGkiBgb25TdGFnZUVuZGAg4oaSIGBvbkNvbW1pdGAuIFRoZSBzdGFnZSdzIG93biBjb21taXRcbiAqIHRoZXJlZm9yZSBsYW5kcyBBRlRFUiBpdHMgYG9uRm9ya2AsIHdoaWNoIGlzIHRoZSBvbmUgcGxhY2UgYSBzdGFnZSdzIGNvbW1pdFxuICogZm9sbG93cyBpdHMgZmFuLW91dCBldmVudCDigJQgdW5hdm9pZGFibGUgYW5kIGhvbmVzdDogdGhlIHJlc3VsdCBpcyBub3RcbiAqIGtub3dhYmxlIHVudGlsIHRoZSBicmFuY2hlcyBzZXR0bGUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IHVud3JhcEhhbmRsZXMgfSBmcm9tICcuLi8uLi9yZWFjdGl2ZS9oYW5kbGVzLmpzJztcbmltcG9ydCB7IElTX1RZUEVEX1NDT1BFIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgY3JlYXRlUHJvdGVjdGVkU2NvcGUgfSBmcm9tICcuLi8uLi9zY29wZS9wcm90ZWN0aW9uL2NyZWF0ZVByb3RlY3RlZFNjb3BlLmpzJztcbmltcG9ydCB7IGJ1aWxkQnJhbmNoU2VnbWVudCB9IGZyb20gJy4uL2JyYW5jaFNlZ21lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBUcmF2ZXJzYWxDb250ZXh0IH0gZnJvbSAnLi4vbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIEhhbmRsZXJEZXBzLCBOb2RlUmVzdWx0VHlwZSwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDaGlsZHJlbkV4ZWN1dG9yIH0gZnJvbSAnLi9DaGlsZHJlbkV4ZWN1dG9yLmpzJztcblxuLyoqXG4gKiBUcmF2ZXJzZXItb3duZWQgb3BlcmF0aW9ucyB0aGUgaGFuZGxlciBuZWVkcy4gUGFzc2VkIGFzIGZ1bmN0aW9ucyAobm90IHRoZVxuICogdHJhdmVyc2VyKSBzbyB0aGUgaGFuZGxlciBrZWVwcyB0aGUgc2FtZSBuby1iYWNrLXJlZmVyZW5jZSBzaGFwZSBhcyBldmVyeVxuICogb3RoZXIgaGFuZGxlciBpbiB0aGlzIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hIb29rczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIFRoZSB0cmF2ZXJzZXIncyBgcHJlZml4Tm9kZVRyZWVgIOKAlCBieXRlLXR3aW4gb2YgdGhlIGJ1aWxkZXIncyBgX3ByZWZpeE5vZGVUcmVlYC4gKi9cbiAgcHJlZml4Tm9kZVRyZWUobm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHByZWZpeDogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKiBSZWdpc3RlciAoT1ZFUldSSVRJTkcpIGEgZ2VuZXJhdGVkIGJyYW5jaCBzdWJmbG93ICsgaXRzIHN0YWdlIGZ1bmN0aW9ucy4gKi9cbiAgcmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nLCByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgY2hhcnQ6IEJyYW5jaENoYXJ0KTogdm9pZDtcbiAgLyoqIFJlYWQgYSBjb21wbGV0ZWQgYnJhbmNoJ3MgZmluYWwgc2hhcmVkIHN0YXRlLCBmb3IgdGhlIGBzdWJmbG93T3V0cHV0ID8/IHN0YXRlYCBmYWxsYmFjay4gKi9cbiAgYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgLyoqIE1pcnJvciB0aGUgZ2VuZXJhdGVkIGJyYW5jaGVzIGludG8gdGhlIHJ1bnRpbWUgc3RydWN0dXJlLCBmb3IgdmlzdWFsaXphdGlvbi4gKi9cbiAgcmVjb3JkQnJhbmNoU3RydWN0dXJlKG5vZGVJZDogc3RyaW5nLCBicmFuY2hlczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJhbGxlbEZvckVhY2hIYW5kbGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBjaGlsZHJlbkV4ZWN1dG9yOiBDaGlsZHJlbkV4ZWN1dG9yPFRPdXQsIFRTY29wZT4sXG4gICAgcHJpdmF0ZSBob29rczogUGFyYWxsZWxGb3JFYWNoSG9va3M8VE91dCwgVFNjb3BlPixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSdW4gdGhlIGZhbi1vdXQgdG8gY29tcGxldGlvbiBhbmQgY29tbWl0IHRoZSBvcmRlcmVkIHJlc3VsdHMuXG4gICAqIFJldHVybnMgdGhlIHJlc3VsdHMgYXJyYXkgKHRoZSBzdGFnZSdzIG91dHB1dCkuXG4gICAqL1xuICBhc3luYyBydW4oXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICAgIGJyYW5jaFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB0cmF2ZXJzYWxDb250ZXh0OiBUcmF2ZXJzYWxDb250ZXh0LFxuICApOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuXG4gICAgLy8gU2FtZSBzY29wZSBjb25zdHJ1Y3Rpb24gU3RhZ2VSdW5uZXIgcGVyZm9ybXMsIHByb3RlY3Rpb24gaW5jbHVkZWQ6IHRoaXNcbiAgICAvLyBzdGFnZSBoYXMgbm8gdXNlciBmdW5jdGlvbiwgYnV0IGBpdGVtcyhzY29wZSlgIElTIHVzZXIgY29kZSwgc28gaXRzIHJlYWRzXG4gICAgLy8gYXJlIHRyYWNrZWQgYW5kIGEgc3RyYXkgYXNzaWdubWVudCBpbnNpZGUgaXQgaXMgY2F1Z2h0IGJ5IHRoZSBzYW1lXG4gICAgLy8gcHJvdGVjdGlvbiBldmVyeSBvdGhlciBzdGFnZSBnZXRzLiAoVHlwZWRTY29wZSBicmluZ3MgaXRzIG93biBwcm94eS4pXG4gICAgY29uc3QgcmF3U2NvcGUgPSB0aGlzLmRlcHMuc2NvcGVGYWN0b3J5KGNvbnRleHQsIG5vZGUubmFtZSwgdGhpcy5kZXBzLnJlYWRPbmx5Q29udGV4dCwgdGhpcy5kZXBzLmV4ZWN1dGlvbkVudik7XG4gICAgY29uc3QgaXNUeXBlZFNjb3BlID0gcmF3U2NvcGUgJiYgKHJhd1Njb3BlIGFzIGFueSlbSVNfVFlQRURfU0NPUEVdID09PSB0cnVlO1xuICAgIGNvbnN0IHNjb3BlID0gaXNUeXBlZFNjb3BlXG4gICAgICA/IHJhd1Njb3BlXG4gICAgICA6IChjcmVhdGVQcm90ZWN0ZWRTY29wZShyYXdTY29wZSBhcyBvYmplY3QsIHtcbiAgICAgICAgICBtb2RlOiB0aGlzLmRlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICAgICAgICBzdGFnZU5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgfSkgYXMgVFNjb3BlKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZVN0YXJ0Jyk7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVzb2x2ZUl0ZW1zKGNvbmZpZywgc2NvcGUsIG5vZGUpO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbXMubGVuZ3RoO1xuICAgIGNvbnN0IGJyYW5jaENvdW50ID0gTWF0aC5taW4odG90YWwsIGNvbmZpZy5tYXhCcmFuY2hlcyk7XG4gICAgY29uc3QgdHJ1bmNhdGVkID0gdG90YWwgPiBicmFuY2hDb3VudDtcblxuICAgIGNvbnRleHQuYWRkTG9nKCdwYXJhbGxlbEZvckVhY2gnLCB7XG4gICAgICBpdGVtczogdG90YWwsXG4gICAgICBicmFuY2hlczogYnJhbmNoQ291bnQsXG4gICAgICBtYXhCcmFuY2hlczogY29uZmlnLm1heEJyYW5jaGVzLFxuICAgICAgdHJ1bmNhdGVkLFxuICAgICAgaW50bzogY29uZmlnLmludG8sXG4gICAgfSk7XG4gICAgaWYgKHRydW5jYXRlZCkge1xuICAgICAgLy8gU3RhdGVkLCBub3Qgc2lsZW50IOKAlCBpbiB0aGUgc3RhZ2UncyBvd24gZmxvdyBtZXNzYWdlcyBBTkQgaXRzIGxvZ3MgYWJvdmUuXG4gICAgICBjb250ZXh0LmFkZEZsb3dEZWJ1Z01lc3NhZ2UoXG4gICAgICAgICdjaGlsZHJlbicsXG4gICAgICAgIGBtYXhCcmFuY2hlcyByZWFjaGVkOiBydW5uaW5nICR7YnJhbmNoQ291bnR9IG9mICR7dG90YWx9IGl0ZW1zICgke3RvdGFsIC0gYnJhbmNoQ291bnR9IG5vdCBydW4pYCxcbiAgICAgICAgeyBjb3VudDogYnJhbmNoQ291bnQgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdHM6IHVua25vd25bXTtcbiAgICBpZiAoYnJhbmNoQ291bnQgPT09IDApIHtcbiAgICAgIC8vIFplcm8gaXRlbXMgPSB6ZXJvIGJyYW5jaGVzOiBubyBmYW4tb3V0IGV2ZW50LCBhbiBlbXB0eSBvcmRlcmVkIGFycmF5LlxuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBicmFuY2hlcyA9IHRoaXMuYnVpbGRCcmFuY2hlcyhub2RlLCBpdGVtcywgYnJhbmNoQ291bnQpO1xuICAgICAgdGhpcy5ob29rcy5yZWNvcmRCcmFuY2hTdHJ1Y3R1cmUobm9kZS5pZCwgYnJhbmNoZXMpO1xuXG4gICAgICAvLyBUaGUgZmFuLW91dCBub2RlIGhhbmRlZCB0byBDaGlsZHJlbkV4ZWN1dG9yIGlzIGEgdGVtcCB2aWV3IGNhcnJ5aW5nIHRoZVxuICAgICAgLy8gZ2VuZXJhdGVkIGJyYW5jaGVzIChzYW1lIHNoYXBlIGBleGVjdXRlU2VsZWN0ZWRDaGlsZHJlbmAgdXNlcyBmb3IgaXRzXG4gICAgICAvLyBzZWxlY3RlZCBzdWJzZXQpIOKAlCB0aGUgc2hhcmVkIGdyYXBoIG5vZGUgaXMgbmV2ZXIgbXV0YXRlZCwgc28gYSBsb29wXG4gICAgICAvLyByZXZpc2l0IHJlZ2VuZXJhdGVzIGNsZWFubHkuXG4gICAgICBjb25zdCBmb3JrVmlldzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiBicmFuY2hlcyxcbiAgICAgICAgLi4uKGNvbmZpZy5mYWlsRmFzdCAhPT0gdW5kZWZpbmVkICYmIHsgZmFpbEZhc3Q6IGNvbmZpZy5mYWlsRmFzdCB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0cyA9IGF3YWl0IHRoaXMuY2hpbGRyZW5FeGVjdXRvci5leGVjdXRlTm9kZUNoaWxkcmVuKFxuICAgICAgICBmb3JrVmlldyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBicmFuY2hQYXRoLFxuICAgICAgICB0cmF2ZXJzYWxDb250ZXh0LFxuICAgICAgKTtcblxuICAgICAgcmVzdWx0cyA9IHRoaXMuY29sbGVjdE9yZGVyZWQobm9kZSwgYnJhbmNoQ291bnQsIGNoaWxkUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVJlc3VsdHMocmF3U2NvcGUsIGNvbnRleHQsIGNvbmZpZy5pbnRvLCByZXN1bHRzKTtcbiAgICBub3RpZnkocmF3U2NvcGUsICdub3RpZnlTdGFnZUVuZCcpO1xuICAgIGNvbnRleHQuY29tbWl0KCk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgaXRlbXMgc2VsZWN0b3IgYWdhaW5zdCB0aGUgbGl2ZSBzY29wZS4gQSBub24tYXJyYXkgcmV0dXJuIGlzXG4gICAqIGEgY2hhcnQgYnVnLCBub3QgYSBydW50aW1lIGNvbmRpdGlvbiDigJQgaXQgZmFpbHMgbG91ZGx5LCBuYW1pbmcgdGhlIHN0YWdlLlxuICAgKlxuICAgKiBUaGUgc2VsZWN0b3IgcmVhZHMgdGhlIHR5cGVkIHNjb3BlLCBzbyB3aGF0IGl0IHJldHVybnMgaXMgdXN1YWxseSB0aGVcbiAgICogc2NvcGUncyBvd24gYXJyYXkgSEFORExFIChhIFByb3h5IGJvdW5kIHRvIHRoZSBwYXJlbnQgc3RhZ2UpIGFuZCBldmVyeVxuICAgKiBgaXRlbXNbaW5kZXhdYCBhbiBlbGVtZW50IGhhbmRsZS4gVGhlIGl0ZW1zIGFyZSBhYm91dCB0byBjcm9zcyBpbnRvXG4gICAqIGJyYW5jaCBydW50aW1lcyDigJQgY2xvc2VkIG92ZXIgYnkgYGJyYW5jaChpdGVtLCBpbmRleClgIGFuZCBzZWVkZWQgYXMgdGhlXG4gICAqIGJyYW5jaCdzIGBpdGVtYCDigJQgc28gdGhleSBhcmUgdGFrZW4gYXMgVkFMVUVTIGhlcmUgKGB1bndyYXBIYW5kbGVzYCxcbiAgICogcmVhY3RpdmUvaGFuZGxlcy50cykuIDkuMjIuMOKAkzkuMjMuMiBzZWVkZWQgdGhlIGhhbmRsZSBpdHNlbGYgYW5kIGV2ZXJ5XG4gICAqIGJyYW5jaCBvdmVyIGFuIG9iamVjdCBpdGVtIGZhaWxlZCBhdCBpdHMgc2VlZCBjb21taXQgKERhdGFDbG9uZUVycm9yKS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUl0ZW1zKFxuICAgIGNvbmZpZzogUGFyYWxsZWxGb3JFYWNoQ29uZmlnPHVua25vd24sIFRTY29wZT4sXG4gICAgc2NvcGU6IFRTY29wZSxcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgKTogcmVhZG9ubHkgdW5rbm93bltdIHtcbiAgICBjb25zdCBpdGVtcyA9IHVud3JhcEhhbmRsZXMoY29uZmlnLml0ZW1zKHNjb3BlKSk7XG4gICAgaWYgKGl0ZW1zID09PSB1bmRlZmluZWQgfHwgaXRlbXMgPT09IG51bGwpIHJldHVybiBbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwYXJhbGxlbEZvckVhY2ggJyR7bm9kZS5pZH0nOiBpdGVtcygpIG11c3QgcmV0dXJuIGFuIGFycmF5IChnb3QgJHt0eXBlb2YgaXRlbXN9KS4gYCArXG4gICAgICAgICAgJ1JldHVybiBbXSB0byBydW4gemVybyBicmFuY2hlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlIG9uZSBzdWJmbG93LW1vdW50IG5vZGUgcGVyIGJyYW5jaCwgcmVnaXN0ZXJpbmcgZWFjaCBicmFuY2ggY2hhcnQuICovXG4gIHByaXZhdGUgYnVpbGRCcmFuY2hlcyhcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBpdGVtczogcmVhZG9ubHkgdW5rbm93bltdLFxuICAgIGJyYW5jaENvdW50OiBudW1iZXIsXG4gICk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuICAgIGNvbnN0IGJyYW5jaGVzOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYnJhbmNoQ291bnQ7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBidWlsZEJyYW5jaFNlZ21lbnQobm9kZS5pZCwgaW5kZXgpO1xuICAgICAgY29uc3QgY2hhcnQgPSBjb25maWcuYnJhbmNoKGl0ZW0sIGluZGV4KTtcbiAgICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LnJvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBwYXJhbGxlbEZvckVhY2ggJyR7bm9kZS5pZH0nOiBicmFuY2goaXRlbSwgJHtpbmRleH0pIG11c3QgcmV0dXJuIGEgYnVpbHQgY2hhcnQgYCArXG4gICAgICAgICAgICAnKHRoZSByZXN1bHQgb2YgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKSkuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2FtZSBwcmVmaXhpbmcgYSBsYXp5IHN1YmZsb3cgZ2V0cyDigJQgdGhlIGJyYW5jaCdzIGlubmVyIGlkcyBiZWNvbWVcbiAgICAgIC8vIGA8c2VnbWVudD4vPGlkPmAsIHNvIGl0cyBzdGFnZXMgYWRkcmVzcyBhcyBgPHNlZ21lbnQ+LzxpZD4jPG4+YC5cbiAgICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuaG9va3MucHJlZml4Tm9kZVRyZWUoY2hhcnQucm9vdCBhcyBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgc3ViZmxvd0lkKTtcbiAgICAgIHRoaXMuaG9va3MucmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZCwgcHJlZml4ZWRSb290LCBjaGFydCk7XG5cbiAgICAgIGJyYW5jaGVzLnB1c2goe1xuICAgICAgICBuYW1lOiBgJHtub2RlLm5hbWV9IFske2luZGV4fV1gLFxuICAgICAgICBpZDogc3ViZmxvd0lkLFxuICAgICAgICBpc1N1YmZsb3dSb290OiB0cnVlLFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIHN1YmZsb3dOYW1lOiBgJHtub2RlLm5hbWV9IFske2luZGV4fV1gLFxuICAgICAgICBzdWJmbG93TW91bnRPcHRpb25zOiB7XG4gICAgICAgICAgLy8gRDEncyBcImlucHV0TWFwcGVyIHNlYW0gZm9yIGZlZWRpbmcgdGhlIGl0ZW0gaW5cIjogdGhlIGl0ZW0gaXNcbiAgICAgICAgICAvLyB2aXNpYmxlIElOIHRoZSBicmFuY2gncyBzY29wZSAoYW5kIHNvIGluIGl0cyBjb21taXQgbG9nKSBhcyB3ZWxsIGFzXG4gICAgICAgICAgLy8gY2xvc2VkIG92ZXIgYnkgdGhlIGZhY3Rvcnkg4oCUIHByb3ZlbmFuY2UgYmVhdHMgYSBoaWRkZW4gY2xvc3VyZS5cbiAgICAgICAgICBpbnB1dE1hcHBlcjogKCkgPT4gKHsgaXRlbSwgaW5kZXggfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnJhbmNoZXM7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUgcmVzdWx0cyBpbiBJVEVNUyBvcmRlciDigJQgbmV2ZXIgY29tcGxldGlvbiBvcmRlci5cbiAgICpcbiAgICogVGhlIGJyYW5jaCdzIHZhbHVlIGlzIGl0cyBzdWJmbG93IG91dHB1dCwgZmFsbGluZyBiYWNrIHRvIHRoZSBicmFuY2gnc1xuICAgKiBmaW5hbCBzaGFyZWQgc3RhdGUgKHRoZSBUeXBlZFNjb3BlIGNhc2UsIHdoZXJlIHN0YWdlIGZ1bmN0aW9ucyByZXR1cm5cbiAgICogdm9pZCkg4oCUIHRoZSBzYW1lIGBzdWJmbG93T3V0cHV0ID8/IHNoYXJlZFN0YXRlYCBydWxlIGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIGFwcGxpZXMgdG8gYW4gb3V0cHV0TWFwcGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0T3JkZXJlZChcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBicmFuY2hDb3VudDogbnVtYmVyLFxuICAgIGNoaWxkUmVzdWx0czogUmVjb3JkPHN0cmluZywgTm9kZVJlc3VsdFR5cGU+LFxuICApOiB1bmtub3duW10ge1xuICAgIGNvbnN0IG9yZGVyZWQ6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBicmFuY2hDb3VudDsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgc3ViZmxvd0lkID0gYnVpbGRCcmFuY2hTZWdtZW50KG5vZGUuaWQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY2hpbGRSZXN1bHRzW3N1YmZsb3dJZF07XG4gICAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS5pc0Vycm9yKSB7XG4gICAgICAgIC8vIEJlc3QtZWZmb3J0IG1vZGU6IGEgZmFpbGVkIGJyYW5jaCBrZWVwcyBpdHMgU0xPVCAob3JkZXIgaXMgaXRlbXNcbiAgICAgICAgLy8gb3JkZXIpIHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlLiBmYWlsRmFzdCBtb2RlIG5ldmVyIHJlYWNoZXMgaGVyZSDigJRcbiAgICAgICAgLy8gdGhlIGVycm9yIGFscmVhZHkgcmVqZWN0ZWQgdGhlIHdob2xlIHN0YWdlLlxuICAgICAgICBvcmRlcmVkLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBvcmRlcmVkLnB1c2goZW50cnkucmVzdWx0ID8/IHRoaXMuaG9va3MuYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkKSk7XG4gICAgfVxuICAgIHJldHVybiBvcmRlcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBvcmRlcmVkIGFycmF5IGFzIE9ORSB2YWx1ZSBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiBgJHNldFZhbHVlYCBkZWxpYmVyYXRlbHksIHdoZXJlIGF2YWlsYWJsZTogdGhlIFR5cGVkU2NvcGUgc2V0IHRyYXBcbiAgICogSlNPTi1yb3VuZC10cmlwcyBldmVyeSBvYmplY3Qgd3JpdGUgKERhdGXihpJzdHJpbmcsIE1hcOKGknt9KSwgYW5kIGJyYW5jaFxuICAgKiByZXN1bHRzIGFyZSBleGFjdGx5IHRoZSBraW5kIG9mIHBheWxvYWQgdGhhdCB3b3VsZCBzaWxlbnRseSBkZWdyYWRlLlxuICAgKi9cbiAgcHJpdmF0ZSB3cml0ZVJlc3VsdHMocmF3U2NvcGU6IFRTY29wZSwgY29udGV4dDogU3RhZ2VDb250ZXh0LCBpbnRvOiBzdHJpbmcsIHJlc3VsdHM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSByYXdTY29wZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygcz8uJHNldFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAocy4kc2V0VmFsdWUgYXMgKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkoaW50bywgcmVzdWx0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygcz8uc2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChzLnNldFZhbHVlIGFzIChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQpKGludG8sIHJlc3VsdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBObyBmYWNhZGUgKGhhbmQtcm9sbGVkIHNjb3BlIGZhY3RvcnkpIOKAlCB3cml0ZSBzdHJhaWdodCB0byB0aGUgZnJhbWUuXG4gICAgY29udGV4dC5zZXRHbG9iYWwoaW50bywgcmVzdWx0cyk7XG4gIH1cbn1cblxuLyoqIEZpcmUgYSBzY29wZSBsaWZlY3ljbGUgbm90aWZpY2F0aW9uIGlmIHRoZSBzY29wZSBzdXBwb3J0cyBpdC4gKi9cbmZ1bmN0aW9uIG5vdGlmeShzY29wZTogdW5rbm93biwgbWV0aG9kOiAnbm90aWZ5U3RhZ2VTdGFydCcgfCAnbm90aWZ5U3RhZ2VFbmQnKTogdm9pZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgaWYgKHMgJiYgdHlwZW9mIHNbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykgKHNbbWV0aG9kXSBhcyAoKSA9PiB2b2lkKSgpO1xufVxuIl19
@@ -16,7 +16,17 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.applyOutputMapping = exports.seedSubflowGlobalStore = exports.createSubflowHandlerDeps = exports.getInitialScopeValues = exports.extractParentScopeValues = void 0;
19
- /** Extract values from parent scope using inputMapper. */
19
+ const handles_js_1 = require("../../reactive/handles.js");
20
+ /**
21
+ * Extract values from parent scope using inputMapper.
22
+ *
23
+ * What a mapper returns is a VALUE, not a handle: the mapper read the parent's
24
+ * typed scope, so its result may be — or hold — a Proxy bound to the parent
25
+ * stage, and the seed commit below clones it (`structuredClone`, which cannot
26
+ * clone a Proxy). `unwrapHandles` (reactive/handles.ts) swaps each for the
27
+ * value behind it, O(1), Dates and Maps intact; a handle-free result passes
28
+ * through by reference.
29
+ */
20
30
  function extractParentScopeValues(parentScope, options) {
21
31
  if (!options?.inputMapper) {
22
32
  return {};
@@ -25,7 +35,7 @@ function extractParentScopeValues(parentScope, options) {
25
35
  if (result === null || result === undefined) {
26
36
  return {};
27
37
  }
28
- return result;
38
+ return (0, handles_js_1.unwrapHandles)(result);
29
39
  }
30
40
  exports.extractParentScopeValues = extractParentScopeValues;
31
41
  /**
@@ -93,7 +103,9 @@ function applyOutputMapping(subflowOutput, parentScope, parentContext, options)
93
103
  if (!options?.outputMapper) {
94
104
  return undefined;
95
105
  }
96
- const mappedOutput = options.outputMapper(subflowOutput, parentScope);
106
+ // The same boundary in the other direction: the mapper is handed the
107
+ // parent's typed scope too, so what it returns is taken as a value.
108
+ const mappedOutput = (0, handles_js_1.unwrapHandles)(options.outputMapper(subflowOutput, parentScope));
97
109
  if (mappedOutput === null || mappedOutput === undefined) {
98
110
  return undefined;
99
111
  }
@@ -132,4 +144,4 @@ function applyOutputMapping(subflowOutput, parentScope, parentContext, options)
132
144
  return mappedOutput;
133
145
  }
134
146
  exports.applyOutputMapping = applyOutputMapping;
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBS0gsMERBQTBEO0FBQzFELFNBQWdCLHdCQUF3QixDQUN0QyxXQUF5QixFQUN6QixPQUEwRDtJQUUxRCxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBZEQsNERBY0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUE0QixDQUFDO0FBQ25GLENBQUM7QUFMRCxzREFLQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxVQUFxQyxFQUNyQyxjQUFpQyxFQUNqQyxXQUFvQztJQUVwQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7UUFDckMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxzQkFBc0I7UUFDekQsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjO1FBQ3pDLG1CQUFtQixFQUFF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LENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0QyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUE1Q0QsZ0RBNENDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdWJmbG93SW5wdXRNYXBwZXIg4oCUIFB1cmUgZnVuY3Rpb25zIGZvciBzdWJmbG93IGRhdGEgY29udHJhY3RzLlxuICpcbiAqIE1lbnRhbCBtb2RlbDogU3ViZmxvdyA9IFB1cmUgRnVuY3Rpb25cbiAqIC0gSXNvbGF0ZWQgc2NvcGUgKG93biBHbG9iYWxTdG9yZSlcbiAqIC0gRXhwbGljaXQgaW5wdXRzIHZpYSBpbnB1dE1hcHBlclxuICogLSBFeHBsaWNpdCBvdXRwdXRzIHZpYSBvdXRwdXRNYXBwZXJcbiAqXG4gKiB8IFNjZW5hcmlvICAgICAgICB8IEJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBObyBpbnB1dE1hcHBlciAgfCBTdWJmbG93IHN0YXJ0cyB3aXRoIGVtcHR5IHNjb3BlICAgICAgICAgICB8XG4gKiB8IE5vIG91dHB1dE1hcHBlciB8IFN1YmZsb3cgc2NvcGUgY2hhbmdlcyBkaXNjYXJkZWQgICAgICAgICAgIHxcbiAqIHwgQm90aCBwcmVzZW50ICAgIHwgRnVsbCBkYXRhIGNvbnRyYWN0IChhcmdzIGluLCByZXN1bHRzIG91dCkgfFxuICogfCBOZWl0aGVyIHByZXNlbnQgfCBDb21wbGV0ZSBpc29sYXRpb24gKHNpZGUgZWZmZWN0cyBvbmx5KSAgICB8XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgSGFuZGxlckRlcHMsIElFeGVjdXRpb25SdW50aW1lLCBTdWJmbG93TW91bnRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKiogRXh0cmFjdCB2YWx1ZXMgZnJvbSBwYXJlbnQgc2NvcGUgdXNpbmcgaW5wdXRNYXBwZXIuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4oXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4sXG4pOiBUU3ViZmxvd0lucHV0IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIW9wdGlvbnM/LmlucHV0TWFwcGVyKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gb3B0aW9ucy5pbnB1dE1hcHBlcihwYXJlbnRTY29wZSk7XG4gIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5pdGlhbCBzY29wZSB2YWx1ZXMgZm9yIGEgc3ViZmxvdy5cbiAqIEFsd2F5cyBpc29sYXRlZCDigJQgb25seSBpbnB1dE1hcHBlciB2YWx1ZXMgYXJlIGluY2x1ZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbFNjb3BlVmFsdWVzPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4oXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dJbnB1dD4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBleHRyYWN0UGFyZW50U2NvcGVWYWx1ZXMocGFyZW50U2NvcGUsIG9wdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBIYW5kbGVyRGVwcyBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKiBLZXk6IHNldHMgcmVhZE9ubHlDb250ZXh0IHRvIG1hcHBlZCBpbnB1dCBzbyBTdGFnZVJ1bm5lciBwYXNzZXMgaXQgdG8gU2NvcGVGYWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViZmxvd0hhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4oXG4gIHBhcmVudERlcHM6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4sXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgbWFwcGVkSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogSGFuZGxlckRlcHM8VE91dCwgVFNjb3BlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhZ2VNYXA6IHBhcmVudERlcHMuc3RhZ2VNYXAsXG4gICAgcm9vdDogcGFyZW50RGVwcy5yb290LFxuICAgIHNjb3BlRmFjdG9yeTogcGFyZW50RGVwcy5zY29wZUZhY3RvcnksXG4gICAgc3ViZmxvd3M6IHBhcmVudERlcHMuc3ViZmxvd3MsXG4gICAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcjogcGFyZW50RGVwcy50aHJvdHRsaW5nRXJyb3JDaGVja2VyLFxuICAgIHN0cmVhbUhhbmRsZXJzOiBwYXJlbnREZXBzLnN0cmVhbUhhbmRsZXJzLFxuICAgIHNjb3BlUHJvdGVjdGlvbk1vZGU6IHBhcmVudERlcHMuc2NvcGVQcm90ZWN0aW9uTW9kZSxcbiAgICBleGVjdXRpb25SdW50aW1lOiBzdWJmbG93UnVudGltZSxcbiAgICByZWFkT25seUNvbnRleHQ6IG1hcHBlZElucHV0LFxuICAgIGV4ZWN1dGlvbkVudjogcGFyZW50RGVwcy5leGVjdXRpb25FbnYsIC8vIGluaGVyaXRlZCDigJQgbGlrZSBwcm9jZXNzLmVudlxuICAgIG5hcnJhdGl2ZUdlbmVyYXRvcjogcGFyZW50RGVwcy5uYXJyYXRpdmVHZW5lcmF0b3IsXG4gICAgbG9nZ2VyOiBwYXJlbnREZXBzLmxvZ2dlcixcbiAgfTtcbn1cblxuLyoqXG4gKiBTZWVkIHRoZSBzdWJmbG93J3MgR2xvYmFsU3RvcmUgd2l0aCBpbml0aWFsIHZhbHVlcy5cbiAqIENhbGxlZCBiZWZvcmUgc3ViZmxvdyBleGVjdXRpb24gdG8gbWFrZSBpbnB1dE1hcHBlciB2YWx1ZXMgYXZhaWxhYmxlLlxuICpcbiAqIFJlZGFjdGlvbjogdGhlIHNlZWQgaXMgY29tbWl0dGVkIGFzIHRoZSBzdWJmbG93J3MgYGhpc3RvcnlbMF1gIGJ5IGl0cyByb290XG4gKiBjb250ZXh0LiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnN0YWxscyB0aGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUgb24gdGhhdCBjb250ZXh0XG4gKiBiZWZvcmUgY2FsbGluZyB0aGlzLCBzbyB0aGUgY29tbWl0IHJldGFpbnMgdW5kZXIgdGhlIHBvbGljeSAoOS4xOS4wKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlZWRTdWJmbG93R2xvYmFsU3RvcmUoXG4gIHN1YmZsb3dSdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZSxcbiAgaW5pdGlhbFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiB2b2lkIHtcbiAgY29uc3Qgcm9vdENvbnRleHQgPSBzdWJmbG93UnVudGltZS5yb290U3RhZ2VDb250ZXh0O1xuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRpYWxWYWx1ZXMpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuZXN0ZWRLZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgICAgcm9vdENvbnRleHQuc2V0T2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJvb3RDb250ZXh0LmNvbW1pdCgpO1xufVxuXG4vKipcbiAqIEFwcGx5IG91dHB1dCBtYXBwaW5nIGFmdGVyIHN1YmZsb3cgY29tcGxldGlvbi5cbiAqIFdyaXRlcyBtYXBwZWQgdmFsdWVzIGJhY2sgdG8gcGFyZW50IHNjb3BlIHVzaW5nIG1lcmdlIHNlbWFudGljczpcbiAqIGFycmF5cyBhcmUgYXBwZW5kZWQsIG9iamVjdHMgYXJlIHNoYWxsb3ctbWVyZ2VkLCBzY2FsYXJzIGFyZSByZXBsYWNlZC5cbiAqXG4gKiBSZWRhY3Rpb246IGV2ZXJ5IHdyaXRlIGhlcmUgZ29lcyB0aHJvdWdoIGBwYXJlbnRDb250ZXh0YCdzIHdyaXRlIGZ1bm5lbCxcbiAqIHdoaWNoIGFza3MgdGhlIHJ1bidzIHJlZGFjdGlvbiBydWxlIOKAlCBzbyBhIHBvbGljeS1yZWRhY3RlZCBvciBwZXItY2FsbFxuICogbWFya2VkIGtleSBsYW5kcyBpbiB0aGUgUEFSRU5UJ3MgbG9nIGFuZCBtaXJyb3IgYXMgdGhlIHBsYWNlaG9sZGVyICg5LjE5LjApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPdXRwdXRNYXBwaW5nPFRQYXJlbnRTY29wZSwgVFN1YmZsb3dPdXRwdXQ+KFxuICBzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCxcbiAgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSxcbiAgcGFyZW50Q29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIGFueSwgVFN1YmZsb3dPdXRwdXQ+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnM/Lm91dHB1dE1hcHBlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXBwZWRPdXRwdXQgPSBvcHRpb25zLm91dHB1dE1hcHBlcihzdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZSk7XG5cbiAgaWYgKG1hcHBlZE91dHB1dCA9PT0gbnVsbCB8fCBtYXBwZWRPdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtYXBwZWRPdXRwdXQpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuZXN0ZWRLZXksIG5lc3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkVmFsdWUpKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5hcHBlbmRUb0FycmF5KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgPT09ICdvYmplY3QnICYmIG5lc3RlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5tZXJnZU9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRPYmplY3QoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgaWYgKG9wdGlvbnM/LmFycmF5TWVyZ2UgPT09ICdyZXBsYWNlJykge1xuICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcGFyZW50Q29udGV4dC5nZXRHbG9iYWwoa2V5KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Q29udGV4dC5zZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hcHBlZE91dHB1dDtcbn1cbiJdfQ==
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3ViZmxvd0lucHV0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvaGFuZGxlcnMvU3ViZmxvd0lucHV0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7O0FBR0gsMERBQTBEO0FBRzFEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxXQUF5QixFQUN6QixPQUEwRDtJQUUxRCxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxPQUFPLElBQUEsMEJBQWEsRUFBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBZEQsNERBY0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsV0FBeUIsRUFDekIsT0FBMEQ7SUFFMUQsT0FBTyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUE0QixDQUFDO0FBQ25GLENBQUM7QUFMRCxzREFLQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxVQUFxQyxFQUNyQyxjQUFpQyxFQUNqQyxXQUFvQztJQUVwQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7UUFDckMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1FBQzdCLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxzQkFBc0I7UUFDekQsY0FB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R0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLE9BQU8sRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7cUJBQU0sQ0FBQztvQkFDTixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQTlDRCxnREE4Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1YmZsb3dJbnB1dE1hcHBlciDigJQgUHVyZSBmdW5jdGlvbnMgZm9yIHN1YmZsb3cgZGF0YSBjb250cmFjdHMuXG4gKlxuICogTWVudGFsIG1vZGVsOiBTdWJmbG93ID0gUHVyZSBGdW5jdGlvblxuICogLSBJc29sYXRlZCBzY29wZSAob3duIEdsb2JhbFN0b3JlKVxuICogLSBFeHBsaWNpdCBpbnB1dHMgdmlhIGlucHV0TWFwcGVyXG4gKiAtIEV4cGxpY2l0IG91dHB1dHMgdmlhIG91dHB1dE1hcHBlclxuICpcbiAqIHwgU2NlbmFyaW8gICAgICAgIHwgQmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IE5vIGlucHV0TWFwcGVyICB8IFN1YmZsb3cgc3RhcnRzIHdpdGggZW1wdHkgc2NvcGUgICAgICAgICAgIHxcbiAqIHwgTm8gb3V0cHV0TWFwcGVyIHwgU3ViZmxvdyBzY29wZSBjaGFuZ2VzIGRpc2NhcmRlZCAgICAgICAgICAgfFxuICogfCBCb3RoIHByZXNlbnQgICAgfCBGdWxsIGRhdGEgY29udHJhY3QgKGFyZ3MgaW4sIHJlc3VsdHMgb3V0KSB8XG4gKiB8IE5laXRoZXIgcHJlc2VudCB8IENvbXBsZXRlIGlzb2xhdGlvbiAoc2lkZSBlZmZlY3RzIG9ubHkpICAgIHxcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uLy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHsgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4uLy4uL3JlYWN0aXZlL2hhbmRsZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyRGVwcywgSUV4ZWN1dGlvblJ1bnRpbWUsIFN1YmZsb3dNb3VudE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8qKlxuICogRXh0cmFjdCB2YWx1ZXMgZnJvbSBwYXJlbnQgc2NvcGUgdXNpbmcgaW5wdXRNYXBwZXIuXG4gKlxuICogV2hhdCBhIG1hcHBlciByZXR1cm5zIGlzIGEgVkFMVUUsIG5vdCBhIGhhbmRsZTogdGhlIG1hcHBlciByZWFkIHRoZSBwYXJlbnQnc1xuICogdHlwZWQgc2NvcGUsIHNvIGl0cyByZXN1bHQgbWF5IGJlIOKAlCBvciBob2xkIOKAlCBhIFByb3h5IGJvdW5kIHRvIHRoZSBwYXJlbnRcbiAqIHN0YWdlLCBhbmQgdGhlIHNlZWQgY29tbWl0IGJlbG93IGNsb25lcyBpdCAoYHN0cnVjdHVyZWRDbG9uZWAsIHdoaWNoIGNhbm5vdFxuICogY2xvbmUgYSBQcm94eSkuIGB1bndyYXBIYW5kbGVzYCAocmVhY3RpdmUvaGFuZGxlcy50cykgc3dhcHMgZWFjaCBmb3IgdGhlXG4gKiB2YWx1ZSBiZWhpbmQgaXQsIE8oMSksIERhdGVzIGFuZCBNYXBzIGludGFjdDsgYSBoYW5kbGUtZnJlZSByZXN1bHQgcGFzc2VzXG4gKiB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQYXJlbnRTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogVFN1YmZsb3dJbnB1dCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFvcHRpb25zPy5pbnB1dE1hcHBlcikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IG9wdGlvbnMuaW5wdXRNYXBwZXIocGFyZW50U2NvcGUpO1xuICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHVud3JhcEhhbmRsZXMocmVzdWx0KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGluaXRpYWwgc2NvcGUgdmFsdWVzIGZvciBhIHN1YmZsb3cuXG4gKiBBbHdheXMgaXNvbGF0ZWQg4oCUIG9ubHkgaW5wdXRNYXBwZXIgdmFsdWVzIGFyZSBpbmNsdWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxTY29wZVZhbHVlczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+KFxuICBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlLFxuICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUsIFRTdWJmbG93SW5wdXQ+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gZXh0cmFjdFBhcmVudFNjb3BlVmFsdWVzKHBhcmVudFNjb3BlLCBvcHRpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgSGFuZGxlckRlcHMgZm9yIHN1YmZsb3cgZXhlY3V0aW9uLlxuICogS2V5OiBzZXRzIHJlYWRPbmx5Q29udGV4dCB0byBtYXBwZWQgaW5wdXQgc28gU3RhZ2VSdW5uZXIgcGFzc2VzIGl0IHRvIFNjb3BlRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YmZsb3dIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+KFxuICBwYXJlbnREZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIG1hcHBlZElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IEhhbmRsZXJEZXBzPFRPdXQsIFRTY29wZT4ge1xuICByZXR1cm4ge1xuICAgIHN0YWdlTWFwOiBwYXJlbnREZXBzLnN0YWdlTWFwLFxuICAgIHJvb3Q6IHBhcmVudERlcHMucm9vdCxcbiAgICBzY29wZUZhY3Rvcnk6IHBhcmVudERlcHMuc2NvcGVGYWN0b3J5LFxuICAgIHN1YmZsb3dzOiBwYXJlbnREZXBzLnN1YmZsb3dzLFxuICAgIHRocm90dGxpbmdFcnJvckNoZWNrZXI6IHBhcmVudERlcHMudGhyb3R0bGluZ0Vycm9yQ2hlY2tlcixcbiAgICBzdHJlYW1IYW5kbGVyczogcGFyZW50RGVwcy5zdHJlYW1IYW5kbGVycyxcbiAgICBzY29wZVByb3RlY3Rpb25Nb2RlOiBwYXJlbnREZXBzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgZXhlY3V0aW9uUnVudGltZTogc3ViZmxvd1J1bnRpbWUsXG4gICAgcmVhZE9ubHlDb250ZXh0OiBtYXBwZWRJbnB1dCxcbiAgICBleGVjdXRpb25FbnY6IHBhcmVudERlcHMuZXhlY3V0aW9uRW52LCAvLyBpbmhlcml0ZWQg4oCUIGxpa2UgcHJvY2Vzcy5lbnZcbiAgICBuYXJyYXRpdmVHZW5lcmF0b3I6IHBhcmVudERlcHMubmFycmF0aXZlR2VuZXJhdG9yLFxuICAgIGxvZ2dlcjogcGFyZW50RGVwcy5sb2dnZXIsXG4gIH07XG59XG5cbi8qKlxuICogU2VlZCB0aGUgc3ViZmxvdydzIEdsb2JhbFN0b3JlIHdpdGggaW5pdGlhbCB2YWx1ZXMuXG4gKiBDYWxsZWQgYmVmb3JlIHN1YmZsb3cgZXhlY3V0aW9uIHRvIG1ha2UgaW5wdXRNYXBwZXIgdmFsdWVzIGF2YWlsYWJsZS5cbiAqXG4gKiBSZWRhY3Rpb246IHRoZSBzZWVkIGlzIGNvbW1pdHRlZCBhcyB0aGUgc3ViZmxvdydzIGBoaXN0b3J5WzBdYCBieSBpdHMgcm9vdFxuICogY29udGV4dC4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zdGFsbHMgdGhlIHJ1bidzIHJlZGFjdGlvbiBydWxlIG9uIHRoYXQgY29udGV4dFxuICogYmVmb3JlIGNhbGxpbmcgdGhpcywgc28gdGhlIGNvbW1pdCByZXRhaW5zIHVuZGVyIHRoZSBwb2xpY3kgKDkuMTkuMCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWVkU3ViZmxvd0dsb2JhbFN0b3JlKFxuICBzdWJmbG93UnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWUsXG4gIGluaXRpYWxWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHJvb3RDb250ZXh0ID0gc3ViZmxvd1J1bnRpbWUucm9vdFN0YWdlQ29udGV4dDtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbml0aWFsVmFsdWVzKSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBbbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgIHJvb3RDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByb290Q29udGV4dC5jb21taXQoKTtcbn1cblxuLyoqXG4gKiBBcHBseSBvdXRwdXQgbWFwcGluZyBhZnRlciBzdWJmbG93IGNvbXBsZXRpb24uXG4gKiBXcml0ZXMgbWFwcGVkIHZhbHVlcyBiYWNrIHRvIHBhcmVudCBzY29wZSB1c2luZyBtZXJnZSBzZW1hbnRpY3M6XG4gKiBhcnJheXMgYXJlIGFwcGVuZGVkLCBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCwgc2NhbGFycyBhcmUgcmVwbGFjZWQuXG4gKlxuICogUmVkYWN0aW9uOiBldmVyeSB3cml0ZSBoZXJlIGdvZXMgdGhyb3VnaCBgcGFyZW50Q29udGV4dGAncyB3cml0ZSBmdW5uZWwsXG4gKiB3aGljaCBhc2tzIHRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgc28gYSBwb2xpY3ktcmVkYWN0ZWQgb3IgcGVyLWNhbGxcbiAqIG1hcmtlZCBrZXkgbGFuZHMgaW4gdGhlIFBBUkVOVCdzIGxvZyBhbmQgbWlycm9yIGFzIHRoZSBwbGFjZWhvbGRlciAoOS4xOS4wKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3V0cHV0TWFwcGluZzxUUGFyZW50U2NvcGUsIFRTdWJmbG93T3V0cHV0PihcbiAgc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsXG4gIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUsXG4gIHBhcmVudENvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlLCBhbnksIFRTdWJmbG93T3V0cHV0Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zPy5vdXRwdXRNYXBwZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVGhlIHNhbWUgYm91bmRhcnkgaW4gdGhlIG90aGVyIGRpcmVjdGlvbjogdGhlIG1hcHBlciBpcyBoYW5kZWQgdGhlXG4gIC8vIHBhcmVudCdzIHR5cGVkIHNjb3BlIHRvbywgc28gd2hhdCBpdCByZXR1cm5zIGlzIHRha2VuIGFzIGEgdmFsdWUuXG4gIGNvbnN0IG1hcHBlZE91dHB1dCA9IHVud3JhcEhhbmRsZXMob3B0aW9ucy5vdXRwdXRNYXBwZXIoc3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGUpKTtcblxuICBpZiAobWFwcGVkT3V0cHV0ID09PSBudWxsIHx8IG1hcHBlZE91dHB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1hcHBlZE91dHB1dCkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW25lc3RlZEtleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LmFwcGVuZFRvQXJyYXkoW2tleV0sIG5lc3RlZEtleSwgbmVzdGVkVmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgbmVzdGVkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0Lm1lcmdlT2JqZWN0KFtrZXldLCBuZXN0ZWRLZXksIG5lc3RlZFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldE9iamVjdChba2V5XSwgbmVzdGVkS2V5LCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAob3B0aW9ucz8uYXJyYXlNZXJnZSA9PT0gJ3JlcGxhY2UnKSB7XG4gICAgICAgIHBhcmVudENvbnRleHQuc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBwYXJlbnRDb250ZXh0LmdldEdsb2JhbChrZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIFsuLi5leGlzdGluZywgLi4udmFsdWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRDb250ZXh0LnNldEdsb2JhbChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFwcGVkT3V0cHV0O1xufVxuIl19
@@ -62,6 +62,7 @@
62
62
  Object.defineProperty(exports, "__esModule", { value: true });
63
63
  exports.createArrayProxy = exports.arrayProxyAt = void 0;
64
64
  const allowlist_js_1 = require("./allowlist.js");
65
+ const handles_js_1 = require("./handles.js");
65
66
  const liveView_js_1 = require("./liveView.js");
66
67
  const structuralWrite_js_1 = require("./structuralWrite.js");
67
68
  const writeTraps_js_1 = require("./writeTraps.js");
@@ -206,12 +207,12 @@ function wrapElementMember(value, sink, path, visited) {
206
207
  function createElementProxy(raw, sink, segments, visited) {
207
208
  const members = new liveView_js_1.MemberCache();
208
209
  const live = () => (0, liveView_js_1.liveObject)(raw, sink.readAt(segments));
209
- return new Proxy(raw, {
210
+ return (0, handles_js_1.rememberHandle)(new Proxy(raw, {
210
211
  get: (0, liveView_js_1.liveGetTrap)(live, segments, (value, path) => wrapElementMember(value, sink, path, visited), members),
211
212
  set: (0, writeTraps_js_1.sinkSetTrap)(sink, segments),
212
213
  deleteProperty: (0, writeTraps_js_1.sinkDeleteTrap)(sink, segments),
213
214
  ...(0, liveView_js_1.liveInspectionTraps)(live),
214
- });
215
+ }), live);
215
216
  }
216
217
  /**
217
218
  * Creates a Proxy over an array that intercepts mutating operations.
@@ -231,7 +232,8 @@ function createArrayProxy(getCurrent, commit) {
231
232
  const read = getCurrent;
232
233
  const write = commit;
233
234
  const elements = new Map();
234
- return new Proxy(target, {
235
+ // The array handle's value is the current array itself (handles.ts).
236
+ return (0, handles_js_1.rememberHandle)(new Proxy(target, {
235
237
  get(_target, prop) {
236
238
  if (typeof prop === 'string' && MUTATING_METHODS.has(prop))
237
239
  return mutatingMethod(read, write, prop);
@@ -260,7 +262,7 @@ function createArrayProxy(getCurrent, commit) {
260
262
  has: (_target, prop) => Reflect.has(read(), prop),
261
263
  ownKeys: () => Reflect.ownKeys(read()),
262
264
  getOwnPropertyDescriptor: (_target, prop) => Object.getOwnPropertyDescriptor(read(), prop),
263
- });
265
+ }), read);
264
266
  }
265
267
  exports.createArrayProxy = createArrayProxy;
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvYXJyYXlUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHOzs7QUFFSCxpREFBcUQ7QUFDckQsK0NBQTBGO0FBQzFGLDZEQUFtRDtBQUNuRCxtREFBMkY7QUFFM0YsOEVBQThFO0FBQzlFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsTUFBTTtJQUNOLEtBQUs7SUFDTCxPQUFPO0lBQ1AsU0FBUztJQUNULFFBQVE7SUFDUixNQUFNO0lBQ04sU0FBUztJQUNULE1BQU07SUFDTixZQUFZO0NBQ2IsQ0FBQyxDQUFDO0FBS0gsZ0ZBQWdGO0FBRWhGO3NFQUNzRTtBQUN0RSxTQUFTLE9BQU8sQ0FBQyxPQUFrQixFQUFFLElBQXFCO0lBQ3hELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDN0YsQ0FBQztBQUVELHVHQUF1RztBQUN2RyxTQUFTLFVBQVUsQ0FBQyxJQUFxQjtJQUN2QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtB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O2lCQUN4RCxJQUFJLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RixPQUFPLElBQUksQ0FBQyxDQUFDLGdGQUFnRjtRQUMvRixDQUFDO1FBQ0QsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJO1lBQzFCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO1FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQztLQUMzRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBOUJELDRDQThCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvYXJyYXlUcmFwcyAtLSBBcnJheSBtdXRhdGlvbiBpbnRlcmNlcHRpb24gdmlhIFByb3h5LlxuICpcbiAqIFdoZW4gc2NvcGUuaXRlbXMgaXMgYW4gYXJyYXksIHdlIHJldHVybiBhIFByb3h5IHRoYXQgaW50ZXJjZXB0cyBtdXRhdGluZ1xuICogbWV0aG9kcyAocHVzaCwgcG9wLCBzcGxpY2UsIGV0Yy4pIEFORCBpbmRleGVkIGFjY2Vzcy4gRWFjaCBtdXRhdGlvbjpcbiAqIDEuIENsb25lcyB0aGUgY3VycmVudCBhcnJheVxuICogMi4gQXBwbGllcyB0aGUgbXV0YXRpb24gdG8gdGhlIGNsb25lXG4gKiAzLiBDb21taXRzIHRoZSBuZXcgYXJyYXkgdmlhIHRoZSBjb21taXQgY2FsbGJhY2tcbiAqXG4gKiBOb24tbXV0YXRpbmcgbWV0aG9kcyAobWFwLCBmaWx0ZXIsIGZvckVhY2gsIGV0Yy4pIHBhc3MgdGhyb3VnaCB0byB0aGVcbiAqIGN1cnJlbnQgYXJyYXkgc25hcHNob3Qgd2l0aG91dCBpbnRlcmNlcHRpb24uXG4gKlxuICogVGhlIG9yaWdpbmFsIGFycmF5IGluIHN0YXRlIGlzIE5FVkVSIG11dGF0ZWQgZGlyZWN0bHkgLS0gYWxsIHdyaXRlcyBnb1xuICogdGhyb3VnaCB0aGUgY29tbWl0IGNhbGxiYWNrIHdoaWNoIGNhbGxzIHNldFZhbHVlL3VwZGF0ZVZhbHVlLlxuICpcbiAqIOKUgOKUgCBPbmx5IHRoZSBBU1NJR05FRCB2YWx1ZSBpcyB1bndyYXBwZWQgKDkuMjMuMCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBMYW5kbWluZSAxIHNheXMgdGhlIHNldCB0cmFwIEpTT04tcm91bmQtdHJpcHMgdGhlIHZhbHVlIHRoZSBjYWxsZXIgaGFuZGVkXG4gKiBpbi4gRm9yIGFuIGFycmF5IHRoYXQgaXMgdGhlIGluZGV4LWFzc2lnbmVkIGVsZW1lbnQsIGEgbXV0YXRpbmcgbWV0aG9kJ3NcbiAqIGFyZ3VtZW50cyAoYHB1c2goeClgLCBgc3BsaWNlKGksIG4sIC4uLml0ZW1zKWAsIGBmaWxsKHgpYCksIG9yIHRoZSBsZWFmIGFuXG4gKiBlbGVtZW50IHByb3h5IHdyaXRlcyDigJQgYW5kIGl0IGlzIHVud3JhcHBlZCBIRVJFLCBhdCB0aGUgdHJhcCB0aGF0IHJlY2VpdmVzXG4gKiBpdC4gVGhlIHJlYnVpbHQgYXJyYXkgaXMgaGFuZGVkIHRvIGBjb21taXRgIGFzIGl0IGlzOiBldmVyeSBzaWJsaW5nIHRoZVxuICogY2FsbGVyIGRpZCBub3QgdG91Y2ggcGFzc2VzIHRocm91Z2ggYnkgcmVmZXJlbmNlLCBgRGF0ZWBzIGFuZCBgTWFwYHNcbiAqIGludGFjdC4gVW50aWwgOS4yMy4wIHRoZSBjb21taXQgY2FsbGJhY2tzIHJvdW5kLXRyaXBwZWQgdGhlIFdIT0xFIHJlYnVpbHRcbiAqIGFycmF5LCB3aGljaCBzdHJpbmdpZmllZCB1bnRvdWNoZWQgc2libGluZ3MgYW5kIHdhcyBPKE4pIHBlciBlbGVtZW50IHdyaXRlLlxuICogVGhlIG9uZSB0aGluZyB0aGUgcm91bmQtdHJpcCB1c2VkIHRvIGRvIGZvciB0aGUgYXJyYXkncyBvd24gc2hhcGUg4oCUIGFuXG4gKiBlbXB0aWVkIG9yIHNraXBwZWQgc2xvdCBiZWNhbWUgYG51bGxgLCBKU09OJ3Mgb25seSBzcGVsbGluZyBmb3IgYSBob2xlIOKAlFxuICogaXMgbm93IGRvbmUgZXhwbGljaXRseSBieSB0aGUgdHJhcHMgdGhhdCBjYW4gY3JlYXRlIG9uZSAoYGRlbGV0ZSBhcnJbaV1gLFxuICogYGFycltpXSA9IHZgIHBhc3QgdGhlIGVuZCwgYGFyci5sZW5ndGggPSBuYCBncm93dGgpLlxuICpcbiAqIOKUgOKUgCBJbmRleGVkIGFjY2VzcyBpcyBwYXJ0IG9mIHRoZSBjaGFpbiAoOS4yMi4wKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIGBhcnJbaV1gIHVzZWQgdG8gaGFuZCBiYWNrIHRoZSBSQVcgZWxlbWVudCwgd2hpY2ggYnJva2UgdGhlIHByb3h5IGNoYWluIGF0XG4gKiBleGFjdGx5IHRoZSBwb2ludCB1c2VycyB3cml0ZSB0aHJvdWdoIGl0OiBgb3JkZXIubGluZXNbMF0ucXR5ID0gNGAgd2FzIGFuXG4gKiBpbi1wbGFjZSBtdXRhdGlvbiBvZiBhIGJvcnJvd2VkIHJlYWQg4oCUIG5vIHRyYXAsIG5vIHRyYWNlIHJvdywgbm8gY29tbWl0LlxuICogQmVmb3JlIHRoZSBzdGFnZSdzIGZpcnN0IHN0YWdlZCB3cml0ZSB0aGF0IGJvcnJvd2VkIHZhbHVlIElTIGNvbW1pdHRlZFxuICogc2hhcmVkIG1lbW9yeSwgc28gdGhlIG11dGF0aW9uIG1vdmVkIHN0YXRlIHdoaWxlIHRoZSBsb2cgc3RheWVkIGVtcHR5OyBhZnRlclxuICogaXQsIHRoZSBtdXRhdGlvbiBsYW5kZWQgaW4gdGhlIHByaXZhdGUgYnVmZmVyIGNsb25lIGFuZCB3YXMgZHJvcHBlZC4gU2FtZVxuICogZXhwcmVzc2lvbiwgdHdvIHNpbGVudCBvdXRjb21lcy5cbiAqXG4gKiBOb3cgYW4gaW5kZXhlZCByZWFkIG9mIGEgd3JhcHBhYmxlIGVsZW1lbnQgcmV0dXJucyBhbiBFTEVNRU5UIFBST1hZIHRoYXRcbiAqIGFjY3VtdWxhdGVzIHRoZSBwYXRoIGluc2lkZSB0aGUgZWxlbWVudCBhbmQsIG9uIHdyaXRlLCByZWJ1aWxkcyB0aGUgYXJyYXlcbiAqIGltbXV0YWJseSAoYHN0cnVjdHVyYWxXcml0ZS5zZXRJblBhdGhgLCBiZWhpbmQgYHdyaXRlVHJhcHMuZWxlbWVudFNpbmtgKVxuICogYW5kIGhhbmRzIHRoZSB3aG9sZSBuZXcgYXJyYXkgdG8gYGNvbW1pdGAg4oCUIHRoZSBzYW1lIGZ1bm5lbCBgcHVzaGAgYWxyZWFkeVxuICogdXNlZC4gT25lIHdyaXRlIHBhdGggZm9yIHRoZSB3aG9sZSBhcnJheSwgd2hhdGV2ZXIgZGVwdGggaXQgaXMgYWRkcmVzc2VkIGF0LlxuICpcbiAqIOKUgOKUgCBXaGF0IGlzIHN0aWxsIE5PVCBzZWVuIChieSBkZXNpZ24pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogRWxlbWVudHMgcmVhY2hlZCBXSVRIT1VUIGFuIGluZGV4IOKAlCBgZmluZCgpYCwgYGZpbHRlcigpYCwgYGZvcuKApm9mYCxcbiAqIGBmb3JFYWNoYCwgZGVzdHJ1Y3R1cmluZyDigJQgYXJlIGhhbmRlZCBiYWNrIHJhdywgYmVjYXVzZSB3cmFwcGluZyB0aGVtIHdvdWxkXG4gKiBtZWFuIHJldHVybmluZyBwcm94aWVzIG91dCBvZiBldmVyeSByZWFkIG1ldGhvZCAoYG1hcGAgd291bGQgYnVpbGQgYW4gYXJyYXlcbiAqIG9mIHByb3hpZXMpIGZvciBhIGNvc3QgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBwYXkuIE11dGF0aW5nIG9uZSBvZiB0aG9zZSBpc1xuICogbm90IGxvc3QgaW4gc2lsZW5jZSBlaXRoZXI6IGBTdGFnZUNvbnRleHRgIGNvbXBhcmVzIHdoYXQgYSBzdGFnZSBSRUFEIHdpdGhcbiAqIHdoYXQgdGhlIHZhbHVlIGhvbGRzIGF0IGNvbW1pdCBhbmQsIGluIGRldiBtb2RlLCB3YXJucyB3aXRoIHRoZSBleGFjdCBwYXRoLlxuICogU2VlIHNyYy9saWIvcmVhY3RpdmUvUkVBRE1FLm1kLlxuICpcbiAqIOKUgOKUgCBTaGFwZSAoOS4yMy4xKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIGBjcmVhdGVBcnJheVByb3h5YCBhbmQgYGNyZWF0ZUVsZW1lbnRQcm94eWAgYXJlIE9SQ0hFU1RSQVRPUlM6IHRoZXkgd2lyZVxuICogdHJhcHMgYW5kIGhvbGQgdGhlIGNhY2hlcy4gRXZlcnkgdHJhcCBib2R5IGlzIGEgbmFtZWQgbGVhZiBiZWxvdyDigJQgb25lXG4gKiBjb25jZXJuIGVhY2gg4oCUIGFuZCB0aGUgZWxlbWVudCBwcm94eSdzIHNldC9kZWxldGUvZ2V0IHRyYXBzIGFyZSB0aGUgU0FNRVxuICogbGVhdmVzIHRoZSBuZXN0ZWQgYW5kIHRlcm1pbmFsIG9iamVjdCBwcm94aWVzIHVzZSAoYHdyaXRlVHJhcHMudHNgLFxuICogYGxpdmVWaWV3LnRzYCksIG92ZXIgYW4ge0BsaW5rIGVsZW1lbnRTaW5rfS4gQSBmaXggbGFuZHMgaW4gYSBsZWFmIG9uY2UuXG4gKi9cblxuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgdW53cmFwUHJveHkgfSBmcm9tICcuL3N0cnVjdHVyYWxXcml0ZS5qcyc7XG5pbXBvcnQgeyB0eXBlIFdyaXRlU2luaywgZWxlbWVudFNpbmssIHNpbmtEZWxldGVUcmFwLCBzaW5rU2V0VHJhcCB9IGZyb20gJy4vd3JpdGVUcmFwcy5qcyc7XG5cbi8qKiBNZXRob2RzIHRoYXQgbXV0YXRlIHRoZSBhcnJheSBpbi1wbGFjZS4gV2UgaW50ZXJjZXB0IGFuZCBjb3B5LW9uLXdyaXRlLiAqL1xuY29uc3QgTVVUQVRJTkdfTUVUSE9EUyA9IG5ldyBTZXQoW1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJyxcbiAgJ2ZpbGwnLFxuICAnY29weVdpdGhpbicsXG5dKTtcblxudHlwZSBSZWFkID0gKCkgPT4gdW5rbm93bltdO1xudHlwZSBXcml0ZSA9IChuZXh0OiB1bmtub3duW10pID0+IHZvaWQ7XG5cbi8vIC0tIExlYXZlczogcmVhZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBXSFkgYE51bWJlcihwcm9wKWA6IHRoZSBoaXN0b3JpY2FsIHJlYWRpbmcgb2YgYW4gaW5kZXggbmFtZSDigJQgYCcwMSdgIGFuZFxuICogIGAnJ2AgYWRkcmVzcyBzbG90cyAxIGFuZCAwLCBhcyB0aGV5IGFsd2F5cyBoYXZlLiBJbiByYW5nZSBvbmx5LiAqL1xuZnVuY3Rpb24gaW5kZXhJbihjdXJyZW50OiB1bmtub3duW10sIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGluZGV4ID0gTnVtYmVyKHByb3ApO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IGN1cnJlbnQubGVuZ3RoID8gaW5kZXggOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBBIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4IG5hbWVkIGJ5IGBwcm9wYCAoYW55IHJhbmdlIOKAlCBhIHdyaXRlIHBhc3QgdGhlIGVuZCBncm93cyB0aGUgYXJyYXkpLiAqL1xuZnVuY3Rpb24gaW5kZXhOYW1lZChwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihwcm9wKTtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoaW5kZXgpICYmIGluZGV4ID49IDAgPyBpbmRleCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIFdIWTogYSBub24tbXV0YXRpbmcgcmVhZCBhbnN3ZXJzIGZyb20gdGhlIENVUlJFTlQgYXJyYXksIG5ldmVyIHRoZVxuICogIGNyZWF0aW9uLXRpbWUgdGFyZ2V0IOKAlCBhIG1ldGhvZCBpcyBib3VuZCB0byBpdCwgYW55dGhpbmcgZWxzZSByZWFkIG9mZiBpdC4gKi9cbmZ1bmN0aW9uIGJvdW5kTWVtYmVyKGN1cnJlbnQ6IHVua25vd25bXSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKTogdW5rbm93biB7XG4gIGNvbnN0IHZhbCA9IChjdXJyZW50IGFzIGFueSlbcHJvcF07XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nID8gdmFsLmJpbmQoY3VycmVudCkgOiB2YWw7XG59XG5cbnR5cGUgRWxlbWVudENhY2hlID0gTWFwPG51bWJlciwgeyByZWY6IHVua25vd247IHByb3h5OiB1bmtub3duIH0+O1xuXG4vKiogV0hZIHRoZSBjYWNoZTogcmVhZGluZyBgbGluZXNbaV0ucXR5YCBpbiBhIGxvb3AgbXVzdCBub3QgYWxsb2NhdGUgYSBwcm94eVxuICogIHBlciByZWFkLCBhbmQgYGxpbmVzWzBdID09PSBsaW5lc1swXWAgbXVzdCBob2xkIHdpdGhpbiBhIHN0YWdlLiBWYWxpZGF0ZWQgYnlcbiAqICByYXcgaWRlbnRpdHkg4oCUIGEgY29tbWl0IHJlcGxhY2VzIHRoZSBhcnJheSwgdGhlIHJlZiBjaGVjayBtaXNzZXMsIGFuZCBhXG4gKiAgZnJlc2ggcHJveHkgaXMgYnVpbHQgb3ZlciB0aGUgbmV3IGVsZW1lbnQuIEEgcHJpbWl0aXZlIGlzIGhhbmRlZCBiYWNrIHJhdy4gKi9cbmZ1bmN0aW9uIGNhY2hlZEVsZW1lbnQoY2FjaGU6IEVsZW1lbnRDYWNoZSwgZWxlbWVudDogdW5rbm93biwgaW5kZXg6IG51bWJlciwgcmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlKTogdW5rbm93biB7XG4gIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eShlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlLmdldChpbmRleCk7XG4gIGlmIChjYWNoZWQgJiYgY2FjaGVkLnJlZiA9PT0gZWxlbWVudCkgcmV0dXJuIGNhY2hlZC5wcm94eTtcbiAgY29uc3Qgd3JhcHBlZCA9IHdyYXBFbGVtZW50TWVtYmVyKGVsZW1lbnQsIGVsZW1lbnRTaW5rKHJlYWQsIHdyaXRlLCBpbmRleCksIFtdLCBuZXcgU2V0PG9iamVjdD4oKSk7XG4gIGNhY2hlLnNldChpbmRleCwgeyByZWY6IGVsZW1lbnQsIHByb3h5OiB3cmFwcGVkIH0pO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuLy8gLS0gTGVhdmVzOiB3cml0ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFNsb3RzIGZyb20gdGhlIGN1cnJlbnQgZW5kIHVwIHRvIChub3QgaW5jbHVkaW5nKSBgdXBUb2AgYmVjb21lIGBudWxsYCDigJRcbiAqICB0aGUgSlNPTiBzcGVsbGluZyBvZiBhIGhvbGUsIHdoaWNoIGlzIHdoYXQgdGhlIHdob2xlLWFycmF5IHJvdW5kLXRyaXAgdXNlZFxuICogIHRvIHByb2R1Y2UgZm9yIHRoZW0uIE5vLW9wIHdoZW4gYHVwVG9gIGlzIHdpdGhpbiB0aGUgYXJyYXkuICovXG5mdW5jdGlvbiBmaWxsSG9sZXMoYXJyOiB1bmtub3duW10sIHVwVG86IG51bWJlcik6IHZvaWQge1xuICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aDsgaSA8IHVwVG87IGkrKykgYXJyW2ldID0gbnVsbDtcbn1cblxuLyoqIFdIWTogYSBtdXRhdGluZyBtZXRob2QgcnVucyBvbiBhIENPUFksIHdpdGggaXRzIGFyZ3VtZW50cyB1bndyYXBwZWQgKHRoZXlcbiAqICBhcmUgdGhlIGFzc2lnbmVkIHZhbHVlczsgYSBudW1iZXIgb3IgYSBjb21wYXJhdG9yIHBhc3NlcyB0aHJvdWdoKSwgYW5kIHRoZVxuICogIGNvcHkgaXMgY29tbWl0dGVkIHdob2xlLiBUaGUgYXJyYXkgaW4gc3RhdGUgaXMgbmV2ZXIgdG91Y2hlZC4gKi9cbmZ1bmN0aW9uIG11dGF0aW5nTWV0aG9kKHJlYWQ6IFJlYWQsIHdyaXRlOiBXcml0ZSwgbmFtZTogc3RyaW5nKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IGNsb25lID0gWy4uLnJlYWQoKV07XG4gICAgY29uc3QgcmVzdWx0ID0gKGNsb25lIGFzIGFueSlbbmFtZV0oLi4uYXJncy5tYXAodW53cmFwUHJveHkpKTtcbiAgICB3cml0ZShjbG9uZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqIGBhcnJbaV0gPSB2YDogY29weSwgYG51bGxgIHRoZSBzbG90cyBhIHdyaXRlIHBhc3QgdGhlIGVuZCBza2lwcywgcGxhY2UgdGhlIHVud3JhcHBlZCB2YWx1ZSwgY29tbWl0LiAqL1xuZnVuY3Rpb24gc2V0SW5kZXgocmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlLCBpbmRleDogbnVtYmVyLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICBjb25zdCBjbG9uZSA9IFsuLi5yZWFkKCldO1xuICBmaWxsSG9sZXMoY2xvbmUsIGluZGV4KTtcbiAgY2xvbmVbaW5kZXhdID0gdW53cmFwUHJveHkodmFsdWUpO1xuICB3cml0ZShjbG9uZSk7XG59XG5cbi8qKiBgYXJyLmxlbmd0aCA9IG5gOiBjb3B5LCBgbnVsbGAgdGhlIHNsb3RzIGdyb3d0aCBhZGRzLCB0cnVuY2F0ZSBvciBleHRlbmQsIGNvbW1pdC4gKi9cbmZ1bmN0aW9uIHNldExlbmd0aChyZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUsIGxlbmd0aDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGNsb25lID0gWy4uLnJlYWQoKV07XG4gIGZpbGxIb2xlcyhjbG9uZSwgbGVuZ3RoKTtcbiAgY2xvbmUubGVuZ3RoID0gbGVuZ3RoO1xuICB3cml0ZShjbG9uZSk7XG59XG5cbi8qKiBXSFk6IHdpdGhvdXQgdGhpcyB0cmFwIGBkZWxldGUgaXRlbXNbMl1gIHJlYWNoZXMgdGhlIFJBVyBhcnJheSBjYXB0dXJlZFxuICogIGFzIHRoZSBwcm94eSB0YXJnZXQg4oCUIGNvbW1pdHRlZCBzdGF0ZSwgbm8gY29tbWl0IHJlY29yZC4gSlMgYGRlbGV0ZWAgb24gYW5cbiAqICBpbmRleCBsZWF2ZXMgdGhlIHNsb3QgZW1wdHkgYW5kIHRoZSBsZW5ndGggdW5jaGFuZ2VkLCBhbmQgc28gZG9lcyB0aGlzOlxuICogIHRoZSBlbXB0aWVkIHNsb3QgY29tbWl0cyBhcyBgbnVsbGAsIEpTT04ncyBvbmx5IHNwZWxsaW5nIGZvciBhIGhvbGUuICovXG5mdW5jdGlvbiBkZWxldGVTbG90KHJlYWQ6IFJlYWQsIHdyaXRlOiBXcml0ZSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKTogdm9pZCB7XG4gIGNvbnN0IGNsb25lID0gWy4uLnJlYWQoKV07XG4gIGNvbnN0IGluZGV4ID0gdHlwZW9mIHByb3AgPT09ICdzdHJpbmcnID8gTnVtYmVyKHByb3ApIDogTmFOO1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IGNsb25lLmxlbmd0aCkgY2xvbmVbaW5kZXhdID0gbnVsbDtcbiAgZWxzZSBkZWxldGUgKGNsb25lIGFzIGFueSlbcHJvcF07XG4gIHdyaXRlKGNsb25lKTtcbn1cblxuLy8gLS0gTGVhdmVzOiB0aGUgY2hhaW4gYmVsb3cgYW4gZWxlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFdIWTogYW4gYXJyYXkgYW55d2hlcmUgYmVsb3cgYSBzaW5rJ3Mgcm9vdCBpcyBPTkUgd3JpdGUgcGF0aCDigJQgaXQgcmVhZHNcbiAqIHRocm91Z2ggdGhlIHNpbmsgYW5kIGNvbW1pdHMgdGhlIFdIT0xFIG5ldyBhcnJheSBiYWNrIHRocm91Z2ggaXQsIHNvXG4gKiBgcHVzaGAgdGhyZWUgbGV2ZWxzIGRvd24gYW5kIGBhcnJbaV0ueCA9IHZgIGF0IHRoZSB0b3Agc2hhcmUgYSBmdW5uZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVByb3h5QXQoc2luazogV3JpdGVTaW5rLCBwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd25bXSB7XG4gIHJldHVybiBjcmVhdGVBcnJheVByb3h5KFxuICAgICgpID0+IChzaW5rLnJlYWRBdChwYXRoKSBhcyB1bmtub3duW10pID8/IFtdLFxuICAgIChuZXh0KSA9PiBzaW5rLnB1dChwYXRoLCBuZXh0KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBXcmFwIGEgdmFsdWUgcmVhZCBvdXQgb2YgYW4gZWxlbWVudDogYXJyYXlzIGJlY29tZSBhcnJheSBwcm94aWVzIHdob3NlXG4gKiBjb21taXRzIHJvdXRlIGJhY2sgdGhyb3VnaCB0aGUgb3duaW5nIGFycmF5LCBwbGFpbiBvYmplY3RzIGJlY29tZSBlbGVtZW50XG4gKiBwcm94aWVzIG9uZSBsZXZlbCBkZWVwZXIsIGV2ZXJ5dGhpbmcgZWxzZSBpcyByZXR1cm5lZCBhcy1pcy4gQSB2YWx1ZSBhbHJlYWR5XG4gKiBvbiB0aGUgYWNjZXNzIGNoYWluIChhIGN5Y2xlKSBpcyByZXR1cm5lZCByYXcg4oCUIHRoZSBzYW1lIGJhY2stZWRnZSB0aGVcbiAqIG5lc3RlZC1vYmplY3QgdGVybWluYWwgcHJveHkgdGFrZXMuXG4gKi9cbmZ1bmN0aW9uIHdyYXBFbGVtZW50TWVtYmVyKHZhbHVlOiB1bmtub3duLCBzaW5rOiBXcml0ZVNpbmssIHBhdGg6IHN0cmluZ1tdLCB2aXNpdGVkOiBTZXQ8b2JqZWN0Pik6IHVua25vd24ge1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IGJyYW5jaCA9IG5ldyBTZXQodmlzaXRlZCk7XG4gIGJyYW5jaC5hZGQodmFsdWUgYXMgb2JqZWN0KTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICByZXR1cm4gY3JlYXRlRWxlbWVudFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCBicmFuY2gpO1xufVxuXG4vLyAtLSBPcmNoZXN0cmF0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFByb3h5IG92ZXIgb25lIE9CSkVDVCBlbGVtZW50IChvciBhbiBvYmplY3QgbmVzdGVkIGluc2lkZSBvbmUpLCBjYXJyeWluZyB0aGVcbiAqIHBhdGggZnJvbSB0aGUgZWxlbWVudCBkb3duIHRvIGl0LiBSZWFkcyByZWN1cnNlOyB3cml0ZXMgZ28gYmFjayBvdXQgdGhyb3VnaFxuICogdGhlIG93bmluZyBhcnJheSdzIGNvbW1pdCBjYWxsYmFjayAodGhlIHtAbGluayBlbGVtZW50U2lua30pLlxuICpcbiAqIFJFQURTIEFSRSBMSVZFLiBFdmVyeSB3cml0ZSByZWJ1aWxkcyB0aGUgYXJyYXkgaW1tdXRhYmx5LCBzbyB0aGUgb2JqZWN0IHRoZVxuICogcHJveHkgd2FzIGNyZWF0ZWQgb3ZlciBpcyB0aGUgUFJFLXdyaXRlIGVsZW1lbnQgZm9yIGV2ZXIgYWZ0ZXI7IGEgaGVsZFxuICogaGFuZGxlIHRoYXQgcmVhZCBmcm9tIGl0IHNhdyBpdHMgb3duIHdyaXRlcyB2YW5pc2ggKGBsaW5lLm4gKz0gMWAgdHdpY2VcbiAqIGdhdmUgMiwgYGxpbmUudG90YWwgPSBsaW5lLnF0eSAqIDEwYCB1c2VkIHRoZSBvbGQgYHF0eWAsIGAneCcgaW4gbGluZWAgd2FzXG4gKiBmYWxzZSByaWdodCBhZnRlciBgbGluZS54ID0gMWApLiBFdmVyeSB0cmFwIHRoZXJlZm9yZSByZXNvbHZlcyB0aGUgZWxlbWVudFxuICogdGhyb3VnaCB0aGUgc2luayBmaXJzdCwgYW5kIGZhbGxzIGJhY2sgdG8gdGhlIGNhcHR1cmVkIG9iamVjdCBvbmx5IHdoZW5cbiAqIHRoZSBwYXRoIG5vIGxvbmdlciBleGlzdHMgKHRoZSBzbG90IHdhcyBlbXB0aWVkIG9yIHRoZSBhcnJheSBzaHJhbmspIOKAlCB0aGVcbiAqIHNhbWUgcmVhZC15b3VyLXdyaXRlcyB0aGUgYXJyYXkgcHJveHkgaXRzZWxmIGhhcyBhbHdheXMgaGFkLCBhbmQgdGhlIHNhbWVcbiAqIGxhdyB0aGUgbmVzdGVkIGFuZCB0ZXJtaW5hbCBvYmplY3QgcHJveGllcyBmb2xsb3cgKGxpdmVWaWV3LnRzKS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFByb3h5KFxuICByYXc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzaW5rOiBXcml0ZVNpbmssXG4gIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgdmlzaXRlZDogU2V0PG9iamVjdD4sXG4pOiB1bmtub3duIHtcbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNZW1iZXJDYWNoZSgpO1xuICBjb25zdCBsaXZlID0gKCkgPT4gbGl2ZU9iamVjdChyYXcsIHNpbmsucmVhZEF0KHNlZ21lbnRzKSk7XG4gIHJldHVybiBuZXcgUHJveHkocmF3LCB7XG4gICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgKHZhbHVlLCBwYXRoKSA9PiB3cmFwRWxlbWVudE1lbWJlcih2YWx1ZSwgc2luaywgcGF0aCwgdmlzaXRlZCksIG1lbWJlcnMpLFxuICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFByb3h5IG92ZXIgYW4gYXJyYXkgdGhhdCBpbnRlcmNlcHRzIG11dGF0aW5nIG9wZXJhdGlvbnMuXG4gKlxuICogVGhlIGFjdHVhbCBjdXJyZW50IGFycmF5IGlzIHRoZSBQcm94eSB0YXJnZXQ6IE5vZGUuanMgY29uc29sZS5sb2cgaW5zcGVjdHNcbiAqIHRoZSB0YXJnZXQgZGlyZWN0bHkgKGJ5cGFzc2VzIFByb3h5IHRyYXBzKSwgc28gdGhlIHJlYWwgYXJyYXkgc2hvd3MgY29ycmVjdFxuICogdmFsdWVzLiBUaGUgdGFyZ2V0IHJlZmVyZW5jZSBpcyBmaXhlZCBhdCBjcmVhdGlvbiB0aW1lIOKAlCBhZnRlciBtdXRhdGlvbnMsXG4gKiB0aGUgcHJveHkgcmV0dXJucyBhIG5ldyBwcm94eSAodmlhIGNhY2hlIGludmFsaWRhdGlvbikgd2l0aCB0aGUgZnJlc2ggYXJyYXlcbiAqIGFzIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gZ2V0Q3VycmVudCAtIFJldHVybnMgdGhlIGN1cnJlbnQgYXJyYXkgc25hcHNob3QgZnJvbSBzdGF0ZVxuICogQHBhcmFtIGNvbW1pdCAtIENhbGxlZCB3aXRoIHRoZSBuZXcgYXJyYXkgYWZ0ZXIgYSBtdXRhdGlvbiAodHJpZ2dlcnMgc2V0VmFsdWUpXG4gKiBAcmV0dXJucyBQcm94aWVkIGFycmF5IHdpdGggY29weS1vbi13cml0ZSBzZW1hbnRpY3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFycmF5UHJveHk8VD4oZ2V0Q3VycmVudDogKCkgPT4gVFtdLCBjb21taXQ6IChuZXdBcnJheTogVFtdKSA9PiB2b2lkKTogVFtdIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0Q3VycmVudCgpIGFzIFRbXTtcbiAgY29uc3QgcmVhZCA9IGdldEN1cnJlbnQgYXMgdW5rbm93biBhcyBSZWFkO1xuICBjb25zdCB3cml0ZSA9IGNvbW1pdCBhcyB1bmtub3duIGFzIFdyaXRlO1xuICBjb25zdCBlbGVtZW50czogRWxlbWVudENhY2hlID0gbmV3IE1hcCgpO1xuXG4gIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCB7XG4gICAgZ2V0KF90YXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycgJiYgTVVUQVRJTkdfTUVUSE9EUy5oYXMocHJvcCkpIHJldHVybiBtdXRhdGluZ01ldGhvZChyZWFkLCB3cml0ZSwgcHJvcCk7XG4gICAgICBjb25zdCBjdXJyZW50ID0gcmVhZCgpO1xuICAgICAgaWYgKHByb3AgPT09ICdsZW5ndGgnKSByZXR1cm4gY3VycmVudC5sZW5ndGg7XG4gICAgICBjb25zdCBpbmRleCA9IGluZGV4SW4oY3VycmVudCwgcHJvcCk7XG4gICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZEVsZW1lbnQoZWxlbWVudHMsIGN1cnJlbnRbaW5kZXhdLCBpbmRleCwgcmVhZCwgd3JpdGUpO1xuICAgICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHJldHVybiAoKSA9PiBjdXJyZW50O1xuICAgICAgcmV0dXJuIGJvdW5kTWVtYmVyKGN1cnJlbnQsIHByb3ApO1xuICAgIH0sXG4gICAgc2V0KF90YXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGluZGV4TmFtZWQocHJvcCk7XG4gICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgc2V0SW5kZXgocmVhZCwgd3JpdGUsIGluZGV4LCB2YWx1ZSk7XG4gICAgICBlbHNlIGlmIChwcm9wID09PSAnbGVuZ3RoJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSBzZXRMZW5ndGgocmVhZCwgd3JpdGUsIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBhbnkgb3RoZXIgc2V0IGlzIGlnbm9yZWQgKGFuIGV4cGFuZG8gb24gYW4gYXJyYXkgaXMgb3V0IG9mIGNvbnRyYWN0IOKAlCBSRUFETUUpXG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfdGFyZ2V0LCBwcm9wKSB7XG4gICAgICBkZWxldGVTbG90KHJlYWQsIHdyaXRlLCBwcm9wKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaGFzOiAoX3RhcmdldCwgcHJvcCkgPT4gUmVmbGVjdC5oYXMocmVhZCgpLCBwcm9wKSxcbiAgICBvd25LZXlzOiAoKSA9PiBSZWZsZWN0Lm93bktleXMocmVhZCgpKSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IChfdGFyZ2V0LCBwcm9wKSA9PiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJlYWQoKSwgcHJvcCksXG4gIH0pO1xufVxuIl19
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvYXJyYXlUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHOzs7QUFFSCxpREFBcUQ7QUFDckQsNkNBQThDO0FBQzlDLCtDQUEwRjtBQUMxRiw2REFBbUQ7QUFDbkQsbURBQTJGO0FBRTNGLDhFQUE4RTtBQUM5RSxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQy9CLE1BQU07SUFDTixLQUFLO0lBQ0wsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsTUFBTTtJQUNOLFNBQVM7SUFDVCxNQUFNO0lBQ04sWUFBWTtDQUNiLENBQUMsQ0FBQztBQUtILGdGQUFnRjtBQUVoRjtzRUFDc0U7QUFDdEUsU0FBUyxPQUFPLENBQUMsT0FBa0IsRUFBRSxJQUFxQjtJQUN4RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzdGLENBQUM7QUFFRCx1R0FBdUc7QUFDdkcsU0FBUyxVQUFVLENBQUMsSUFBcUI7SUFDdkMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFL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QUFLLEtBQUssU0FBUztnQkFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3hELElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDLENBQUMsZ0ZBQWdGO1FBQy9GLENBQUM7UUFDRCxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUk7WUFDMUIsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEMsd0JBQXdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO0tBQzNGLENBQUMsRUFDRixJQUFJLENBQ0wsQ0FBQztBQUNKLENBQUM7QUFsQ0QsNENBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS9hcnJheVRyYXBzIC0tIEFycmF5IG11dGF0aW9uIGludGVyY2VwdGlvbiB2aWEgUHJveHkuXG4gKlxuICogV2hlbiBzY29wZS5pdGVtcyBpcyBhbiBhcnJheSwgd2UgcmV0dXJuIGEgUHJveHkgdGhhdCBpbnRlcmNlcHRzIG11dGF0aW5nXG4gKiBtZXRob2RzIChwdXNoLCBwb3AsIHNwbGljZSwgZXRjLikgQU5EIGluZGV4ZWQgYWNjZXNzLiBFYWNoIG11dGF0aW9uOlxuICogMS4gQ2xvbmVzIHRoZSBjdXJyZW50IGFycmF5XG4gKiAyLiBBcHBsaWVzIHRoZSBtdXRhdGlvbiB0byB0aGUgY2xvbmVcbiAqIDMuIENvbW1pdHMgdGhlIG5ldyBhcnJheSB2aWEgdGhlIGNvbW1pdCBjYWxsYmFja1xuICpcbiAqIE5vbi1tdXRhdGluZyBtZXRob2RzIChtYXAsIGZpbHRlciwgZm9yRWFjaCwgZXRjLikgcGFzcyB0aHJvdWdoIHRvIHRoZVxuICogY3VycmVudCBhcnJheSBzbmFwc2hvdCB3aXRob3V0IGludGVyY2VwdGlvbi5cbiAqXG4gKiBUaGUgb3JpZ2luYWwgYXJyYXkgaW4gc3RhdGUgaXMgTkVWRVIgbXV0YXRlZCBkaXJlY3RseSAtLSBhbGwgd3JpdGVzIGdvXG4gKiB0aHJvdWdoIHRoZSBjb21taXQgY2FsbGJhY2sgd2hpY2ggY2FsbHMgc2V0VmFsdWUvdXBkYXRlVmFsdWUuXG4gKlxuICog4pSA4pSAIE9ubHkgdGhlIEFTU0lHTkVEIHZhbHVlIGlzIHVud3JhcHBlZCAoOS4yMy4wKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIExhbmRtaW5lIDEgc2F5cyB0aGUgc2V0IHRyYXAgSlNPTi1yb3VuZC10cmlwcyB0aGUgdmFsdWUgdGhlIGNhbGxlciBoYW5kZWRcbiAqIGluLiBGb3IgYW4gYXJyYXkgdGhhdCBpcyB0aGUgaW5kZXgtYXNzaWduZWQgZWxlbWVudCwgYSBtdXRhdGluZyBtZXRob2Qnc1xuICogYXJndW1lbnRzIChgcHVzaCh4KWAsIGBzcGxpY2UoaSwgbiwgLi4uaXRlbXMpYCwgYGZpbGwoeClgKSwgb3IgdGhlIGxlYWYgYW5cbiAqIGVsZW1lbnQgcHJveHkgd3JpdGVzIOKAlCBhbmQgaXQgaXMgdW53cmFwcGVkIEhFUkUsIGF0IHRoZSB0cmFwIHRoYXQgcmVjZWl2ZXNcbiAqIGl0LiBUaGUgcmVidWlsdCBhcnJheSBpcyBoYW5kZWQgdG8gYGNvbW1pdGAgYXMgaXQgaXM6IGV2ZXJ5IHNpYmxpbmcgdGhlXG4gKiBjYWxsZXIgZGlkIG5vdCB0b3VjaCBwYXNzZXMgdGhyb3VnaCBieSByZWZlcmVuY2UsIGBEYXRlYHMgYW5kIGBNYXBgc1xuICogaW50YWN0LiBVbnRpbCA5LjIzLjAgdGhlIGNvbW1pdCBjYWxsYmFja3Mgcm91bmQtdHJpcHBlZCB0aGUgV0hPTEUgcmVidWlsdFxuICogYXJyYXksIHdoaWNoIHN0cmluZ2lmaWVkIHVudG91Y2hlZCBzaWJsaW5ncyBhbmQgd2FzIE8oTikgcGVyIGVsZW1lbnQgd3JpdGUuXG4gKiBUaGUgb25lIHRoaW5nIHRoZSByb3VuZC10cmlwIHVzZWQgdG8gZG8gZm9yIHRoZSBhcnJheSdzIG93biBzaGFwZSDigJQgYW5cbiAqIGVtcHRpZWQgb3Igc2tpcHBlZCBzbG90IGJlY2FtZSBgbnVsbGAsIEpTT04ncyBvbmx5IHNwZWxsaW5nIGZvciBhIGhvbGUg4oCUXG4gKiBpcyBub3cgZG9uZSBleHBsaWNpdGx5IGJ5IHRoZSB0cmFwcyB0aGF0IGNhbiBjcmVhdGUgb25lIChgZGVsZXRlIGFycltpXWAsXG4gKiBgYXJyW2ldID0gdmAgcGFzdCB0aGUgZW5kLCBgYXJyLmxlbmd0aCA9IG5gIGdyb3d0aCkuXG4gKlxuICog4pSA4pSAIEluZGV4ZWQgYWNjZXNzIGlzIHBhcnQgb2YgdGhlIGNoYWluICg5LjIyLjApIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYGFycltpXWAgdXNlZCB0byBoYW5kIGJhY2sgdGhlIFJBVyBlbGVtZW50LCB3aGljaCBicm9rZSB0aGUgcHJveHkgY2hhaW4gYXRcbiAqIGV4YWN0bHkgdGhlIHBvaW50IHVzZXJzIHdyaXRlIHRocm91Z2ggaXQ6IGBvcmRlci5saW5lc1swXS5xdHkgPSA0YCB3YXMgYW5cbiAqIGluLXBsYWNlIG11dGF0aW9uIG9mIGEgYm9ycm93ZWQgcmVhZCDigJQgbm8gdHJhcCwgbm8gdHJhY2Ugcm93LCBubyBjb21taXQuXG4gKiBCZWZvcmUgdGhlIHN0YWdlJ3MgZmlyc3Qgc3RhZ2VkIHdyaXRlIHRoYXQgYm9ycm93ZWQgdmFsdWUgSVMgY29tbWl0dGVkXG4gKiBzaGFyZWQgbWVtb3J5LCBzbyB0aGUgbXV0YXRpb24gbW92ZWQgc3RhdGUgd2hpbGUgdGhlIGxvZyBzdGF5ZWQgZW1wdHk7IGFmdGVyXG4gKiBpdCwgdGhlIG11dGF0aW9uIGxhbmRlZCBpbiB0aGUgcHJpdmF0ZSBidWZmZXIgY2xvbmUgYW5kIHdhcyBkcm9wcGVkLiBTYW1lXG4gKiBleHByZXNzaW9uLCB0d28gc2lsZW50IG91dGNvbWVzLlxuICpcbiAqIE5vdyBhbiBpbmRleGVkIHJlYWQgb2YgYSB3cmFwcGFibGUgZWxlbWVudCByZXR1cm5zIGFuIEVMRU1FTlQgUFJPWFkgdGhhdFxuICogYWNjdW11bGF0ZXMgdGhlIHBhdGggaW5zaWRlIHRoZSBlbGVtZW50IGFuZCwgb24gd3JpdGUsIHJlYnVpbGRzIHRoZSBhcnJheVxuICogaW1tdXRhYmx5IChgc3RydWN0dXJhbFdyaXRlLnNldEluUGF0aGAsIGJlaGluZCBgd3JpdGVUcmFwcy5lbGVtZW50U2lua2ApXG4gKiBhbmQgaGFuZHMgdGhlIHdob2xlIG5ldyBhcnJheSB0byBgY29tbWl0YCDigJQgdGhlIHNhbWUgZnVubmVsIGBwdXNoYCBhbHJlYWR5XG4gKiB1c2VkLiBPbmUgd3JpdGUgcGF0aCBmb3IgdGhlIHdob2xlIGFycmF5LCB3aGF0ZXZlciBkZXB0aCBpdCBpcyBhZGRyZXNzZWQgYXQuXG4gKlxuICog4pSA4pSAIFdoYXQgaXMgc3RpbGwgTk9UIHNlZW4gKGJ5IGRlc2lnbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBFbGVtZW50cyByZWFjaGVkIFdJVEhPVVQgYW4gaW5kZXgg4oCUIGBmaW5kKClgLCBgZmlsdGVyKClgLCBgZm9y4oCmb2ZgLFxuICogYGZvckVhY2hgLCBkZXN0cnVjdHVyaW5nIOKAlCBhcmUgaGFuZGVkIGJhY2sgcmF3LCBiZWNhdXNlIHdyYXBwaW5nIHRoZW0gd291bGRcbiAqIG1lYW4gcmV0dXJuaW5nIHByb3hpZXMgb3V0IG9mIGV2ZXJ5IHJlYWQgbWV0aG9kIChgbWFwYCB3b3VsZCBidWlsZCBhbiBhcnJheVxuICogb2YgcHJveGllcykgZm9yIGEgY29zdCB0aGUgbGlicmFyeSBzaG91bGQgbm90IHBheS4gTXV0YXRpbmcgb25lIG9mIHRob3NlIGlzXG4gKiBub3QgbG9zdCBpbiBzaWxlbmNlIGVpdGhlcjogYFN0YWdlQ29udGV4dGAgY29tcGFyZXMgd2hhdCBhIHN0YWdlIFJFQUQgd2l0aFxuICogd2hhdCB0aGUgdmFsdWUgaG9sZHMgYXQgY29tbWl0IGFuZCwgaW4gZGV2IG1vZGUsIHdhcm5zIHdpdGggdGhlIGV4YWN0IHBhdGguXG4gKiBTZWUgc3JjL2xpYi9yZWFjdGl2ZS9SRUFETUUubWQuXG4gKlxuICog4pSA4pSAIFNoYXBlICg5LjIzLjEpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYGNyZWF0ZUFycmF5UHJveHlgIGFuZCBgY3JlYXRlRWxlbWVudFByb3h5YCBhcmUgT1JDSEVTVFJBVE9SUzogdGhleSB3aXJlXG4gKiB0cmFwcyBhbmQgaG9sZCB0aGUgY2FjaGVzLiBFdmVyeSB0cmFwIGJvZHkgaXMgYSBuYW1lZCBsZWFmIGJlbG93IOKAlCBvbmVcbiAqIGNvbmNlcm4gZWFjaCDigJQgYW5kIHRoZSBlbGVtZW50IHByb3h5J3Mgc2V0L2RlbGV0ZS9nZXQgdHJhcHMgYXJlIHRoZSBTQU1FXG4gKiBsZWF2ZXMgdGhlIG5lc3RlZCBhbmQgdGVybWluYWwgb2JqZWN0IHByb3hpZXMgdXNlIChgd3JpdGVUcmFwcy50c2AsXG4gKiBgbGl2ZVZpZXcudHNgKSwgb3ZlciBhbiB7QGxpbmsgZWxlbWVudFNpbmt9LiBBIGZpeCBsYW5kcyBpbiBhIGxlYWYgb25jZS5cbiAqL1xuXG5pbXBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuaW1wb3J0IHsgcmVtZW1iZXJIYW5kbGUgfSBmcm9tICcuL2hhbmRsZXMuanMnO1xuaW1wb3J0IHsgbGl2ZUdldFRyYXAsIGxpdmVJbnNwZWN0aW9uVHJhcHMsIGxpdmVPYmplY3QsIE1lbWJlckNhY2hlIH0gZnJvbSAnLi9saXZlVmlldy5qcyc7XG5pbXBvcnQgeyB1bndyYXBQcm94eSB9IGZyb20gJy4vc3RydWN0dXJhbFdyaXRlLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCBlbGVtZW50U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLyoqIE1ldGhvZHMgdGhhdCBtdXRhdGUgdGhlIGFycmF5IGluLXBsYWNlLiBXZSBpbnRlcmNlcHQgYW5kIGNvcHktb24td3JpdGUuICovXG5jb25zdCBNVVRBVElOR19NRVRIT0RTID0gbmV3IFNldChbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnLFxuICAnZmlsbCcsXG4gICdjb3B5V2l0aGluJyxcbl0pO1xuXG50eXBlIFJlYWQgPSAoKSA9PiB1bmtub3duW107XG50eXBlIFdyaXRlID0gKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZDtcblxuLy8gLS0gTGVhdmVzOiByZWFkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFdIWSBgTnVtYmVyKHByb3ApYDogdGhlIGhpc3RvcmljYWwgcmVhZGluZyBvZiBhbiBpbmRleCBuYW1lIOKAlCBgJzAxJ2AgYW5kXG4gKiAgYCcnYCBhZGRyZXNzIHNsb3RzIDEgYW5kIDAsIGFzIHRoZXkgYWx3YXlzIGhhdmUuIEluIHJhbmdlIG9ubHkuICovXG5mdW5jdGlvbiBpbmRleEluKGN1cnJlbnQ6IHVua25vd25bXSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgaW5kZXggPSBOdW1iZXIocHJvcCk7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSAmJiBpbmRleCA+PSAwICYmIGluZGV4IDwgY3VycmVudC5sZW5ndGggPyBpbmRleCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgbm9uLW5lZ2F0aXZlIGludGVnZXIgaW5kZXggbmFtZWQgYnkgYHByb3BgIChhbnkgcmFuZ2Ug4oCUIGEgd3JpdGUgcGFzdCB0aGUgZW5kIGdyb3dzIHRoZSBhcnJheSkuICovXG5mdW5jdGlvbiBpbmRleE5hbWVkKHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGluZGV4ID0gTnVtYmVyKHByb3ApO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgJiYgaW5kZXggPj0gMCA/IGluZGV4IDogdW5kZWZpbmVkO1xufVxuXG4vKiogV0hZOiBhIG5vbi1tdXRhdGluZyByZWFkIGFuc3dlcnMgZnJvbSB0aGUgQ1VSUkVOVCBhcnJheSwgbmV2ZXIgdGhlXG4gKiAgY3JlYXRpb24tdGltZSB0YXJnZXQg4oCUIGEgbWV0aG9kIGlzIGJvdW5kIHRvIGl0LCBhbnl0aGluZyBlbHNlIHJlYWQgb2ZmIGl0LiAqL1xuZnVuY3Rpb24gYm91bmRNZW1iZXIoY3VycmVudDogdW5rbm93bltdLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgY29uc3QgdmFsID0gKGN1cnJlbnQgYXMgYW55KVtwcm9wXTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicgPyB2YWwuYmluZChjdXJyZW50KSA6IHZhbDtcbn1cblxudHlwZSBFbGVtZW50Q2FjaGUgPSBNYXA8bnVtYmVyLCB7IHJlZjogdW5rbm93bjsgcHJveHk6IHVua25vd24gfT47XG5cbi8qKiBXSFkgdGhlIGNhY2hlOiByZWFkaW5nIGBsaW5lc1tpXS5xdHlgIGluIGEgbG9vcCBtdXN0IG5vdCBhbGxvY2F0ZSBhIHByb3h5XG4gKiAgcGVyIHJlYWQsIGFuZCBgbGluZXNbMF0gPT09IGxpbmVzWzBdYCBtdXN0IGhvbGQgd2l0aGluIGEgc3RhZ2UuIFZhbGlkYXRlZCBieVxuICogIHJhdyBpZGVudGl0eSDigJQgYSBjb21taXQgcmVwbGFjZXMgdGhlIGFycmF5LCB0aGUgcmVmIGNoZWNrIG1pc3NlcywgYW5kIGFcbiAqICBmcmVzaCBwcm94eSBpcyBidWlsdCBvdmVyIHRoZSBuZXcgZWxlbWVudC4gQSBwcmltaXRpdmUgaXMgaGFuZGVkIGJhY2sgcmF3LiAqL1xuZnVuY3Rpb24gY2FjaGVkRWxlbWVudChjYWNoZTogRWxlbWVudENhY2hlLCBlbGVtZW50OiB1bmtub3duLCBpbmRleDogbnVtYmVyLCByZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUpOiB1bmtub3duIHtcbiAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGUuZ2V0KGluZGV4KTtcbiAgaWYgKGNhY2hlZCAmJiBjYWNoZWQucmVmID09PSBlbGVtZW50KSByZXR1cm4gY2FjaGVkLnByb3h5O1xuICBjb25zdCB3cmFwcGVkID0gd3JhcEVsZW1lbnRNZW1iZXIoZWxlbWVudCwgZWxlbWVudFNpbmsocmVhZCwgd3JpdGUsIGluZGV4KSwgW10sIG5ldyBTZXQ8b2JqZWN0PigpKTtcbiAgY2FjaGUuc2V0KGluZGV4LCB7IHJlZjogZWxlbWVudCwgcHJveHk6IHdyYXBwZWQgfSk7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG4vLyAtLSBMZWF2ZXM6IHdyaXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogU2xvdHMgZnJvbSB0aGUgY3VycmVudCBlbmQgdXAgdG8gKG5vdCBpbmNsdWRpbmcpIGB1cFRvYCBiZWNvbWUgYG51bGxgIOKAlFxuICogIHRoZSBKU09OIHNwZWxsaW5nIG9mIGEgaG9sZSwgd2hpY2ggaXMgd2hhdCB0aGUgd2hvbGUtYXJyYXkgcm91bmQtdHJpcCB1c2VkXG4gKiAgdG8gcHJvZHVjZSBmb3IgdGhlbS4gTm8tb3Agd2hlbiBgdXBUb2AgaXMgd2l0aGluIHRoZSBhcnJheS4gKi9cbmZ1bmN0aW9uIGZpbGxIb2xlcyhhcnI6IHVua25vd25bXSwgdXBUbzogbnVtYmVyKTogdm9pZCB7XG4gIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoOyBpIDwgdXBUbzsgaSsrKSBhcnJbaV0gPSBudWxsO1xufVxuXG4vKiogV0hZOiBhIG11dGF0aW5nIG1ldGhvZCBydW5zIG9uIGEgQ09QWSwgd2l0aCBpdHMgYXJndW1lbnRzIHVud3JhcHBlZCAodGhleVxuICogIGFyZSB0aGUgYXNzaWduZWQgdmFsdWVzOyBhIG51bWJlciBvciBhIGNvbXBhcmF0b3IgcGFzc2VzIHRocm91Z2gpLCBhbmQgdGhlXG4gKiAgY29weSBpcyBjb21taXR0ZWQgd2hvbGUuIFRoZSBhcnJheSBpbiBzdGF0ZSBpcyBuZXZlciB0b3VjaGVkLiAqL1xuZnVuY3Rpb24gbXV0YXRpbmdNZXRob2QocmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlLCBuYW1lOiBzdHJpbmcpOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgY2xvbmUgPSBbLi4ucmVhZCgpXTtcbiAgICBjb25zdCByZXN1bHQgPSAoY2xvbmUgYXMgYW55KVtuYW1lXSguLi5hcmdzLm1hcCh1bndyYXBQcm94eSkpO1xuICAgIHdyaXRlKGNsb25lKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKiogYGFycltpXSA9IHZgOiBjb3B5LCBgbnVsbGAgdGhlIHNsb3RzIGEgd3JpdGUgcGFzdCB0aGUgZW5kIHNraXBzLCBwbGFjZSB0aGUgdW53cmFwcGVkIHZhbHVlLCBjb21taXQuICovXG5mdW5jdGlvbiBzZXRJbmRleChyZWFkOiBSZWFkLCB3cml0ZTogV3JpdGUsIGluZGV4OiBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IGNsb25lID0gWy4uLnJlYWQoKV07XG4gIGZpbGxIb2xlcyhjbG9uZSwgaW5kZXgpO1xuICBjbG9uZVtpbmRleF0gPSB1bndyYXBQcm94eSh2YWx1ZSk7XG4gIHdyaXRlKGNsb25lKTtcbn1cblxuLyoqIGBhcnIubGVuZ3RoID0gbmA6IGNvcHksIGBudWxsYCB0aGUgc2xvdHMgZ3Jvd3RoIGFkZHMsIHRydW5jYXRlIG9yIGV4dGVuZCwgY29tbWl0LiAqL1xuZnVuY3Rpb24gc2V0TGVuZ3RoKHJlYWQ6IFJlYWQsIHdyaXRlOiBXcml0ZSwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgY2xvbmUgPSBbLi4ucmVhZCgpXTtcbiAgZmlsbEhvbGVzKGNsb25lLCBsZW5ndGgpO1xuICBjbG9uZS5sZW5ndGggPSBsZW5ndGg7XG4gIHdyaXRlKGNsb25lKTtcbn1cblxuLyoqIFdIWTogd2l0aG91dCB0aGlzIHRyYXAgYGRlbGV0ZSBpdGVtc1syXWAgcmVhY2hlcyB0aGUgUkFXIGFycmF5IGNhcHR1cmVkXG4gKiAgYXMgdGhlIHByb3h5IHRhcmdldCDigJQgY29tbWl0dGVkIHN0YXRlLCBubyBjb21taXQgcmVjb3JkLiBKUyBgZGVsZXRlYCBvbiBhblxuICogIGluZGV4IGxlYXZlcyB0aGUgc2xvdCBlbXB0eSBhbmQgdGhlIGxlbmd0aCB1bmNoYW5nZWQsIGFuZCBzbyBkb2VzIHRoaXM6XG4gKiAgdGhlIGVtcHRpZWQgc2xvdCBjb21taXRzIGFzIGBudWxsYCwgSlNPTidzIG9ubHkgc3BlbGxpbmcgZm9yIGEgaG9sZS4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNsb3QocmVhZDogUmVhZCwgd3JpdGU6IFdyaXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgY29uc3QgY2xvbmUgPSBbLi4ucmVhZCgpXTtcbiAgY29uc3QgaW5kZXggPSB0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycgPyBOdW1iZXIocHJvcCkgOiBOYU47XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSAmJiBpbmRleCA+PSAwICYmIGluZGV4IDwgY2xvbmUubGVuZ3RoKSBjbG9uZVtpbmRleF0gPSBudWxsO1xuICBlbHNlIGRlbGV0ZSAoY2xvbmUgYXMgYW55KVtwcm9wXTtcbiAgd3JpdGUoY2xvbmUpO1xufVxuXG4vLyAtLSBMZWF2ZXM6IHRoZSBjaGFpbiBiZWxvdyBhbiBlbGVtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogV0hZOiBhbiBhcnJheSBhbnl3aGVyZSBiZWxvdyBhIHNpbmsncyByb290IGlzIE9ORSB3cml0ZSBwYXRoIOKAlCBpdCByZWFkc1xuICogdGhyb3VnaCB0aGUgc2luayBhbmQgY29tbWl0cyB0aGUgV0hPTEUgbmV3IGFycmF5IGJhY2sgdGhyb3VnaCBpdCwgc29cbiAqIGBwdXNoYCB0aHJlZSBsZXZlbHMgZG93biBhbmQgYGFycltpXS54ID0gdmAgYXQgdGhlIHRvcCBzaGFyZSBhIGZ1bm5lbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFycmF5UHJveHlBdChzaW5rOiBXcml0ZVNpbmssIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIGNyZWF0ZUFycmF5UHJveHkoXG4gICAgKCkgPT4gKHNpbmsucmVhZEF0KHBhdGgpIGFzIHVua25vd25bXSkgPz8gW10sXG4gICAgKG5leHQpID0+IHNpbmsucHV0KHBhdGgsIG5leHQpLFxuICApO1xufVxuXG4vKipcbiAqIFdyYXAgYSB2YWx1ZSByZWFkIG91dCBvZiBhbiBlbGVtZW50OiBhcnJheXMgYmVjb21lIGFycmF5IHByb3hpZXMgd2hvc2VcbiAqIGNvbW1pdHMgcm91dGUgYmFjayB0aHJvdWdoIHRoZSBvd25pbmcgYXJyYXksIHBsYWluIG9iamVjdHMgYmVjb21lIGVsZW1lbnRcbiAqIHByb3hpZXMgb25lIGxldmVsIGRlZXBlciwgZXZlcnl0aGluZyBlbHNlIGlzIHJldHVybmVkIGFzLWlzLiBBIHZhbHVlIGFscmVhZHlcbiAqIG9uIHRoZSBhY2Nlc3MgY2hhaW4gKGEgY3ljbGUpIGlzIHJldHVybmVkIHJhdyDigJQgdGhlIHNhbWUgYmFjay1lZGdlIHRoZVxuICogbmVzdGVkLW9iamVjdCB0ZXJtaW5hbCBwcm94eSB0YWtlcy5cbiAqL1xuZnVuY3Rpb24gd3JhcEVsZW1lbnRNZW1iZXIodmFsdWU6IHVua25vd24sIHNpbms6IFdyaXRlU2luaywgcGF0aDogc3RyaW5nW10sIHZpc2l0ZWQ6IFNldDxvYmplY3Q+KTogdW5rbm93biB7XG4gIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHZpc2l0ZWQuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgYnJhbmNoID0gbmV3IFNldCh2aXNpdGVkKTtcbiAgYnJhbmNoLmFkZCh2YWx1ZSBhcyBvYmplY3QpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gIHJldHVybiBjcmVhdGVFbGVtZW50UHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIGJyYW5jaCk7XG59XG5cbi8vIC0tIE9yY2hlc3RyYXRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUHJveHkgb3ZlciBvbmUgT0JKRUNUIGVsZW1lbnQgKG9yIGFuIG9iamVjdCBuZXN0ZWQgaW5zaWRlIG9uZSksIGNhcnJ5aW5nIHRoZVxuICogcGF0aCBmcm9tIHRoZSBlbGVtZW50IGRvd24gdG8gaXQuIFJlYWRzIHJlY3Vyc2U7IHdyaXRlcyBnbyBiYWNrIG91dCB0aHJvdWdoXG4gKiB0aGUgb3duaW5nIGFycmF5J3MgY29tbWl0IGNhbGxiYWNrICh0aGUge0BsaW5rIGVsZW1lbnRTaW5rfSkuXG4gKlxuICogUkVBRFMgQVJFIExJVkUuIEV2ZXJ5IHdyaXRlIHJlYnVpbGRzIHRoZSBhcnJheSBpbW11dGFibHksIHNvIHRoZSBvYmplY3QgdGhlXG4gKiBwcm94eSB3YXMgY3JlYXRlZCBvdmVyIGlzIHRoZSBQUkUtd3JpdGUgZWxlbWVudCBmb3IgZXZlciBhZnRlcjsgYSBoZWxkXG4gKiBoYW5kbGUgdGhhdCByZWFkIGZyb20gaXQgc2F3IGl0cyBvd24gd3JpdGVzIHZhbmlzaCAoYGxpbmUubiArPSAxYCB0d2ljZVxuICogZ2F2ZSAyLCBgbGluZS50b3RhbCA9IGxpbmUucXR5ICogMTBgIHVzZWQgdGhlIG9sZCBgcXR5YCwgYCd4JyBpbiBsaW5lYCB3YXNcbiAqIGZhbHNlIHJpZ2h0IGFmdGVyIGBsaW5lLnggPSAxYCkuIEV2ZXJ5IHRyYXAgdGhlcmVmb3JlIHJlc29sdmVzIHRoZSBlbGVtZW50XG4gKiB0aHJvdWdoIHRoZSBzaW5rIGZpcnN0LCBhbmQgZmFsbHMgYmFjayB0byB0aGUgY2FwdHVyZWQgb2JqZWN0IG9ubHkgd2hlblxuICogdGhlIHBhdGggbm8gbG9uZ2VyIGV4aXN0cyAodGhlIHNsb3Qgd2FzIGVtcHRpZWQgb3IgdGhlIGFycmF5IHNocmFuaykg4oCUIHRoZVxuICogc2FtZSByZWFkLXlvdXItd3JpdGVzIHRoZSBhcnJheSBwcm94eSBpdHNlbGYgaGFzIGFsd2F5cyBoYWQsIGFuZCB0aGUgc2FtZVxuICogbGF3IHRoZSBuZXN0ZWQgYW5kIHRlcm1pbmFsIG9iamVjdCBwcm94aWVzIGZvbGxvdyAobGl2ZVZpZXcudHMpLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50UHJveHkoXG4gIHJhdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICB2aXNpdGVkOiBTZXQ8b2JqZWN0Pixcbik6IHVua25vd24ge1xuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KHJhdywgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShyYXcsIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsICh2YWx1ZSwgcGF0aCkgPT4gd3JhcEVsZW1lbnRNZW1iZXIodmFsdWUsIHNpbmssIHBhdGgsIHZpc2l0ZWQpLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJveHkgb3ZlciBhbiBhcnJheSB0aGF0IGludGVyY2VwdHMgbXV0YXRpbmcgb3BlcmF0aW9ucy5cbiAqXG4gKiBUaGUgYWN0dWFsIGN1cnJlbnQgYXJyYXkgaXMgdGhlIFByb3h5IHRhcmdldDogTm9kZS5qcyBjb25zb2xlLmxvZyBpbnNwZWN0c1xuICogdGhlIHRhcmdldCBkaXJlY3RseSAoYnlwYXNzZXMgUHJveHkgdHJhcHMpLCBzbyB0aGUgcmVhbCBhcnJheSBzaG93cyBjb3JyZWN0XG4gKiB2YWx1ZXMuIFRoZSB0YXJnZXQgcmVmZXJlbmNlIGlzIGZpeGVkIGF0IGNyZWF0aW9uIHRpbWUg4oCUIGFmdGVyIG11dGF0aW9ucyxcbiAqIHRoZSBwcm94eSByZXR1cm5zIGEgbmV3IHByb3h5ICh2aWEgY2FjaGUgaW52YWxpZGF0aW9uKSB3aXRoIHRoZSBmcmVzaCBhcnJheVxuICogYXMgdGFyZ2V0LlxuICpcbiAqIEBwYXJhbSBnZXRDdXJyZW50IC0gUmV0dXJucyB0aGUgY3VycmVudCBhcnJheSBzbmFwc2hvdCBmcm9tIHN0YXRlXG4gKiBAcGFyYW0gY29tbWl0IC0gQ2FsbGVkIHdpdGggdGhlIG5ldyBhcnJheSBhZnRlciBhIG11dGF0aW9uICh0cmlnZ2VycyBzZXRWYWx1ZSlcbiAqIEByZXR1cm5zIFByb3hpZWQgYXJyYXkgd2l0aCBjb3B5LW9uLXdyaXRlIHNlbWFudGljc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXJyYXlQcm94eTxUPihnZXRDdXJyZW50OiAoKSA9PiBUW10sIGNvbW1pdDogKG5ld0FycmF5OiBUW10pID0+IHZvaWQpOiBUW10ge1xuICBjb25zdCB0YXJnZXQgPSBnZXRDdXJyZW50KCkgYXMgVFtdO1xuICBjb25zdCByZWFkID0gZ2V0Q3VycmVudCBhcyB1bmtub3duIGFzIFJlYWQ7XG4gIGNvbnN0IHdyaXRlID0gY29tbWl0IGFzIHVua25vd24gYXMgV3JpdGU7XG4gIGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG5cbiAgLy8gVGhlIGFycmF5IGhhbmRsZSdzIHZhbHVlIGlzIHRoZSBjdXJyZW50IGFycmF5IGl0c2VsZiAoaGFuZGxlcy50cykuXG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkodGFyZ2V0LCB7XG4gICAgICBnZXQoX3RhcmdldCwgcHJvcCkge1xuICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnICYmIE1VVEFUSU5HX01FVEhPRFMuaGFzKHByb3ApKSByZXR1cm4gbXV0YXRpbmdNZXRob2QocmVhZCwgd3JpdGUsIHByb3ApO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gcmVhZCgpO1xuICAgICAgICBpZiAocHJvcCA9PT0gJ2xlbmd0aCcpIHJldHVybiBjdXJyZW50Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleEluKGN1cnJlbnQsIHByb3ApO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhY2hlZEVsZW1lbnQoZWxlbWVudHMsIGN1cnJlbnRbaW5kZXhdLCBpbmRleCwgcmVhZCwgd3JpdGUpO1xuICAgICAgICBpZiAocHJvcCA9PT0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSkgcmV0dXJuICgpID0+IGN1cnJlbnQ7XG4gICAgICAgIHJldHVybiBib3VuZE1lbWJlcihjdXJyZW50LCBwcm9wKTtcbiAgICAgIH0sXG4gICAgICBzZXQoX3RhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleE5hbWVkKHByb3ApO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgc2V0SW5kZXgocmVhZCwgd3JpdGUsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIGVsc2UgaWYgKHByb3AgPT09ICdsZW5ndGgnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHNldExlbmd0aChyZWFkLCB3cml0ZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gYW55IG90aGVyIHNldCBpcyBpZ25vcmVkIChhbiBleHBhbmRvIG9uIGFuIGFycmF5IGlzIG91dCBvZiBjb250cmFjdCDigJQgUkVBRE1FKVxuICAgICAgfSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5KF90YXJnZXQsIHByb3ApIHtcbiAgICAgICAgZGVsZXRlU2xvdChyZWFkLCB3cml0ZSwgcHJvcCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIGhhczogKF90YXJnZXQsIHByb3ApID0+IFJlZmxlY3QuaGFzKHJlYWQoKSwgcHJvcCksXG4gICAgICBvd25LZXlzOiAoKSA9PiBSZWZsZWN0Lm93bktleXMocmVhZCgpKSxcbiAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogKF90YXJnZXQsIHByb3ApID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmVhZCgpLCBwcm9wKSxcbiAgICB9KSxcbiAgICByZWFkLFxuICApO1xufVxuIl19