@rivet-health/design-system 27.1.0 → 27.1.1

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.
@@ -231,15 +231,7 @@ export var RivSelect;
231
231
  for (const match of result.matches ?? []) {
232
232
  // filter out inexact matches
233
233
  if (exactMatch && match.value != null) {
234
- match.indices = match.indices.filter(matchedIndices => {
235
- const matchedValue = match
236
- .value.slice(matchedIndices[0], matchedIndices[1] + 1)
237
- .toLowerCase();
238
- // fuse is weird with it's matches. For a text of "planning" and a search string of "plan"
239
- // the matched value will be "plann" with the extra 'n' because of its fuzzy matching.
240
- // so just make sure the matched value at least starts with the search string.
241
- return matchedValue.startsWith(query.search.toLowerCase());
242
- });
234
+ match.indices = match.indices.filter(isFuseMatchExact(match, query.search));
243
235
  }
244
236
  if (match.key === 'title') {
245
237
  highlights.titleHighlightIndices = [...match.indices];
@@ -264,6 +256,21 @@ export var RivSelect;
264
256
  return createManager(source, options);
265
257
  }
266
258
  RivSelect.createInMemoryManager = createInMemoryManager;
259
+ function isFuseMatchExact(match, search) {
260
+ return matchedIndices => {
261
+ const matchedValue = match
262
+ .value.slice(matchedIndices[0], matchedIndices[1] + 1)
263
+ .toLowerCase();
264
+ // fuse is weird with it's matches. For a text of "planning" and a search string of "plan"
265
+ // the matched value will be "plann" with the extra 'n' because of its fuzzy matching.
266
+ // so just make sure the matched value at least starts with the search string.
267
+ // it's extra weird because for a text of "analytics" and a search string of "nalytics",
268
+ // the matched value will be "analytics". So we just need to make sure the the matched value
269
+ // includes the search string because there might be extra stuff on the front or the end.
270
+ return matchedValue.includes(search.toLowerCase());
271
+ };
272
+ }
273
+ RivSelect.isFuseMatchExact = isFuseMatchExact;
267
274
  //////////////////////////////////
268
275
  // State reducer (with helpers) //
269
276
  //////////////////////////////////
@@ -573,4 +580,4 @@ export var RivSelect;
573
580
  }
574
581
  }
575
582
  })(RivSelect || (RivSelect = {}));
576
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFrQyxNQUFNLFNBQVMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0QsT0FBTyxFQUNMLFdBQVcsRUFFWCxHQUFHLEVBQ0gsS0FBSyxFQUVMLGFBQWEsRUFDYixJQUFJLEVBQ0osU0FBUyxFQUNULE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUc1RCxNQUFNLEtBQVcsU0FBUyxDQW0vQnpCO0FBbi9CRCxXQUFpQixTQUFTO0lBQ3hCLGFBQWE7SUFDYixhQUFhO0lBQ2IsYUFBYTtJQW9HYjs7O09BR0c7SUFDSCxNQUFhLFNBQWdDLFNBQVEsR0FBb0I7UUFDOUQsR0FBRyxDQUFDLE1BQXVCO1lBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRVEsR0FBRyxDQUFDLE1BQXVCO1lBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDcEIsdUVBQXVFO2dCQUN2RSxtRUFBbUU7Z0JBQ25FLHFCQUFxQjtnQkFDckIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNuQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxD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Q0FBQztBQUNILENBQUMsRUFuL0JnQixTQUFTLEtBQVQsU0FBUyxRQW0vQnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZ1c2UsIHsgRnVzZVJlc3VsdCwgSUZ1c2VPcHRpb25zIH0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGZsYXR0ZW5EZWVwLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgY29ubmVjdGFibGUsXG4gIENvbm5lY3RhYmxlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBPcHRpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSALS0tLS0tLS0tLS0tLS0tLS0tLeKUgOKUgOKUgOKUkFxuICAgKiDilIIgQmFzZU9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICog4pSCIFRoZSBjb3JlIGRhdGEgcmVxdWlyZWQgZm9yIGVhY2ggb3B0aW9uICAgIOKUglxuICAgKiDilIIgKHN1Y2ggYXMgaWQgYW5kIHRpdGxlKS4gICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC0tLS0tLS0tLS0tLS0tLS0tLS3ilIDilIDilKRcbiAgICog4pSCIE9wdGlvbiAoQmFzZU9wdGlvbiArIGNoaWxkcmVuKSAgICAgICAgICAgIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBQcm92aWRlcyByZWN1cnNpdmUgdHlwZSBzYWZldHkgdG8gdGhlICAgICDilIJcbiAgICog4pSCIHR5cGUgc2FmZXR5IHRvIHRoZSBCYXNlT3B0aW9uLiAgICAgICAgICAgIOKUglxuICAgKiDilJTilIAtLS0tLS0tLS0tLS0tLS0tLS3ilKwtLS0tLS0t4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCIFNvdXJjZU9wdGlvbiAoT3B0aW9uICsgc2VhcmNoIGhpZ2hsaWdodHMpIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBBZGRzIHNlYXJjaCBoaWdobGlnaHRzIHRvIHRoZSBPcHRpb24gYW5kICDilIJcbiAgICog4pSCIGlzIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIG9wdGlvbiBTb3VyY2UgIOKUglxuICAgKiDilIIgKGRhdGEgZmV0Y2hlcikgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiBGdWxsT3B0aW9uIChTb3VyY2VPcHRpb24gKyBVSSBzdGF0ZSkgICAgICDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgQXVnbWVudHMgdGhlIFNvdXJjZU9wdGlvbiB3aXRoIGFsbCBvZiB0aGUg4pSCXG4gICAqIOKUgiBVSSBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSAgICDilIJcbiAgICog4pSCIHN0YXRlLCBzdWNoIGFzIHNlbGVjdGlvbiBzdGF0dXMsIHdoZXRoZXIgIOKUglxuICAgKiDilIIgb3Igbm90IHRoZSBub2RlIGlzIGV4cGFuZGVkLCBldGMuICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHVzYWdlcyBvZiBPbWl0PC4uLj4gaW4gdGhpcyBzZWN0aW9uIGFyZSBub3QgcmVxdWlyZWQsIGJ1dFxuICAgKiBkbyBoZWxwIGluLWVkaXRvciB0eXBlIGhpbnRzIHRvIGJlIG1vcmUgY2xlYXIgYW5kIGRpcmVjdC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgaGVscD86IHN0cmluZztcbiAgICBjb3VudD86IG51bWJlcjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbiA9IEJhc2VPcHRpb24+ID0gTyAmIHtcbiAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIE9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgIGNoaWxkcmVuPzogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIFNvdXJjZU9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gT3B0aW9uIGdyb3VwcyAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gT3B0aW9uR3JvdXAsIFNvdXJjZU9wdGlvbkdyb3VwLCBhbmRcbiAgICogRnVsbE9wdGlvbkdyb3VwIGlzIGFuYWxvZ291cyB0byB0aGUgb3B0aW9uIHR5cGVzIGFib3ZlLlxuICAgKlxuICAgKiBBcyB3aXRoIGJlZm9yZSwgdGhlIHVzZSBvZiBPbWl0PC4uLj4gaXMgbm90IHJlcXVpcmVkIGJ1dCBoZWxwZnVsLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBPcHRpb25Hcm91cDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaGVhZGVyPzogc3RyaW5nO1xuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgU291cmNlT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgT3B0aW9uU2V0IGNsYXNzIHByb3ZpZGVzIFNldC1saWtlIGZ1bmN0aW9uYWxpdHksIGJ1dCB1bmlxdWVuZXNzIGlzXG4gICAqIGRldGVybWluZWQgYnkgdGhlIG9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE9wdGlvblNldDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gZXh0ZW5kcyBTZXQ8U291cmNlT3B0aW9uPE8+PiB7XG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICByZXR1cm4gISFbLi4udGhpc10uZmluZChvID0+IG8uaWQgPT09IG9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgYWRkKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBpZiAodGhpcy5oYXMob3B0aW9uKSkge1xuICAgICAgICAvLyBUaGUgU2V0IGFscmVhZHkgaGFzIHNvbWUgdmVyc2lvbiBvZiB0aGlzIG9wdGlvbiwgYnV0IHdlJ2xsIG1ha2Ugc3VyZVxuICAgICAgICAvLyBpdCBoYXMgdGhlIG1vc3QgcmVjZW50IG9iamVjdCByZWZlcmVuY2UgKHdoaWxlIGtlZXBpbmcgaW5zZXJ0aW9uXG4gICAgICAgIC8vIG9yZGVyIGNvbnNpc3RlbnQpLlxuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLnRoaXNdLm1hcChvID0+XG4gICAgICAgICAgby5pZCA9PT0gb3B0aW9uLmlkID8gb3B0aW9uIDogbyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICBuZXdPcHRpb25zLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgc3VwZXIuYWRkKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmFkZChvcHRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFsuLi50aGlzXS5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBzdXBlci5kZWxldGUoZXhpc3RpbmcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgQ29yZVN0YXRlIHByb3ZpZGVzIGFsbCBvZiB0aGUgZm91bmRhdGlvbmFsIHBpZWNlcyBvZiBzdGF0ZSByZXF1aXJlZFxuICAgKiBmb3IgYSB3b3JraW5nIGNvbXBvbmVudC4gRnVsbFN0YXRlIGlzIGEgcHVyZSBkZXJpdmF0aW9uIG9mIENvcmVTdGF0ZSBwbHVzXG4gICAqIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBwcm92aWRlcyBjb252ZW5pZW5jZXMgZm9yIHJlbmRlcmluZyB0aGVcbiAgICogY29tcG9uZW50cy4gQWN0aW9ucyBhbmQgdGhlIGNvcmUgc3RhdGUgYXJlIHBhc3NlZCB0byB0aGUgcmVkdWNlciB0b1xuICAgKiBwcm9kdWNlIG5ldyBDb3JlU3RhdGVzICh3aGljaCBhcmUgdGhlbiB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgRnVsbFN0YXRlcykuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBxdWVyeToge1xuICAgICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgfTtcbiAgICBsb2FkOiB7XG4gICAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICAgIH07XG4gICAgc291cmNlT3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgc2VsZWN0ZWQ6IE9wdGlvblNldDxPPjtcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgICBvcGVuOiBib29sZWFuO1xuICAgICAgZXhwYW5kZWRPcHRpb25zOiBTZXQ8T1snaWQnXT47XG4gICAgfTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gQ29yZVN0YXRlPE8+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBzaG93U2VhcmNoOiBib29sZWFuO1xuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICB9O1xuICAgIGZ1bGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgc2VsZWN0ZWQ6IHN0cmluZztcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXZpZGVyczogYm9vbGVhbjtcbiAgICAgIGlubGluZTogYm9vbGVhbjtcbiAgICAgIG1heEhlaWdodDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1heFdpZHRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgZGlzcGxheUxpbWl0TWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHNob3dTaW5nbGVTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gQWN0aW9ucyAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7IHR5cGU6ICdvcGVuQ2hhbmdlJzsgb3BlbjogYm9vbGVhbiB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogQ29yZVN0YXRlPE8+WydzZWxlY3Rpb24nXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbic7XG4gICAgICAgIGlkOiBPWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9O1xuXG4gIHR5cGUgSW50ZXJuYWxBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWRDb21wbGV0ZSc7IGRhdGE6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10gfVxuICAgIHwgeyB0eXBlOiAnbG9hZEVycm9yJzsgZXJyb3I6IHVua25vd24gfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gU291cmNlIC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgU291cmNlJ3Mgam9iIGlzIHRvIGZldGNoIG9wdGlvbnMgKGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlKSB3aGljaFxuICAgKiB0aGVuIGJsZW5kIHdpdGggdGhlIG90aGVyIHBpZWNlcyBvZiBzdGF0ZSB0byBwcm9kdWNlIHRoZSBGdWxsU3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSAoXG4gICAgcXVlcnk6IENvcmVTdGF0ZTxPPlsncXVlcnknXSxcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248Tz4sXG4gICkgPT4gUHJvbWlzZTxTb3VyY2VPcHRpb25Hcm91cDxPPltdPjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIE1hbmFnZXIgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPE8+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPE8+PjtcbiAgICBhbGxvd011bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgICBhbGxvd1NlYXJjaD86IGJvb2xlYW47XG4gICAgYWxsb3dTZWxlY3RBbGw/OiBib29sZWFuO1xuICAgIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIGRpdmlkZXJzPzogYm9vbGVhbjtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIG1heEhlaWdodD86IHN0cmluZyB8IG51bGw7XG4gICAgbWF4V2lkdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIGRpc3BsYXlMaW1pdD86IG51bWJlcjtcbiAgICBzaG93U2luZ2xlU2VsZWN0ZWQ/OiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPE8+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IFtdLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIHNlbGVjdGVkOiBuZXcgT3B0aW9uU2V0KCksXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdC4uLicsXG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBleHBhbmRlZE9wdGlvbnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxPPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGludGVybmFsQWN0aW9uczogU3ViamVjdDxJbnRlcm5hbEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTxDb3JlU3RhdGU8Tz4+ID0gbWVyZ2UoXG4gICAgICBhY3Rpb25zLFxuICAgICAgaW50ZXJuYWxBY3Rpb25zLFxuICAgICkucGlwZShcbiAgICAgIHNjYW4oXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PlxuICAgICAgICAgIHNpZGVFZmZlY3RzKHJlZHVjZShzdGF0ZSwgYWN0aW9uKSwgYWN0aW9uLCBzb3VyY2UsIGludGVybmFsQWN0aW9ucyksXG4gICAgICAgIGRlZmF1bHRlZEluaXRpYWxTdGF0ZSxcbiAgICAgICksXG4gICAgICBzdGFydFdpdGgoZGVmYXVsdGVkSW5pdGlhbFN0YXRlKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxPPj4gPSBjb25uZWN0YWJsZShcbiAgICAgIGNvcmVTdGF0ZS5waXBlKFxuICAgICAgICBtYXAocyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSA9XG4gICAgICAgICAgICBzLnNvdXJjZU9wdGlvbkdyb3Vwcy5tYXAob3B0aW9uR3JvdXAgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbkdyb3VwLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbkdyb3VwLm9wdGlvbnMubWFwKG9wdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzLCBvcHRpb24pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpO1xuXG4gICAgICAgICAgY29uc3QgZnVsbE9wdGlvbkdyb3VwcyA9IGFwcGx5RGlzcGxheUxpbWl0KFxuICAgICAgICAgICAgYWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgb3B0aW9ucz8uZGlzcGxheUxpbWl0LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgIHNob3dTZWFyY2g6XG4gICAgICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICghIXMucXVlcnkuc2VhcmNoIHx8IGNvdW50QWxsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpID4gNSksXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiBvcHRpb25zPy5zZWFyY2hQbGFjZWhvbGRlciA/PyAnU2VhcmNoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiAhIW9wdGlvbnM/LmFsbG93TXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiAhIW9wdGlvbnM/LmFsbG93U2VsZWN0QWxsLFxuICAgICAgICAgICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6XG4gICAgICAgICAgICAgICAgZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZSh0b3BMZXZlbE9wdGlvbnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0U2VsZWN0ZWREaXNwbGF5KHMpLFxuICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMpLFxuICAgICAgICAgICAgICBkaXZpZGVyczogISFvcHRpb25zPy5kaXZpZGVycyxcbiAgICAgICAgICAgICAgaW5saW5lOiAhIW9wdGlvbnM/LmlubGluZSxcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBvcHRpb25zPy5tYXhIZWlnaHQgPz8gbnVsbCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IG9wdGlvbnM/Lm1heFdpZHRoID8/IG51bGwsXG4gICAgICAgICAgICAgIGRpc3BsYXlMaW1pdE1lc3NhZ2U6IGdldERpc3BsYXlMaW1pdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgY291bnRWaXNpYmxlT3B0aW9ucyhmdWxsT3B0aW9uR3JvdXBzLCAhIXMucXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgICBjb3VudFZpc2libGVPcHRpb25zKGFsbE9wdGlvbkdyb3VwcywgISFzLnF1ZXJ5LnNlYXJjaCksXG4gICAgICAgICAgICAgICAgcy5xdWVyeSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiAhIW9wdGlvbnM/LnNob3dTaW5nbGVTZWxlY3RlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCB0aGUgb3B0aW9ucyBpbW1lZGlhdGVseSBmb3Igc2VsZWN0cyB0aGF0IGFyZSBkaXNwbGF5ZWQgaW5saW5lLlxuICAgIGlmIChvcHRpb25zPy5pbmxpbmUpIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlIH07XG4gIH1cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgTWFuYWdlck9wdGlvbnM8Tz4gJiB7XG4gICAgICBmdXNlT3B0aW9ucz86IElGdXNlT3B0aW9uczxPPjtcbiAgICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxPcHRpb25Hcm91cDxPPltdPiB8IE9wdGlvbkdyb3VwPE8+W10sXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGxldCBkYXRhOiBPcHRpb25Hcm91cDxPPltdO1xuICAgIGxldCBmdXNlOiBGdXNlPE8+O1xuICAgIGxldCBleGFjdE1hdGNoOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHBhcmVudHM6IE1hcDxPWydpZCddLCBPWydpZCddPjtcbiAgICBsZXQgY2hpbGRyZW46IE1hcDxPWydpZCddLCBPWydpZCddW10+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8Tz4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8qXG4gICAgICAgIFJlLWZldGNoIHRoZSBvcHRpb25zIG9uIHRoZSBsb2FkIGFjdGlvbiwgYW5kIHJlYnVpbGQgdGhlIHN0YXRlXG4gICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgb3B0aW9uIGRhdGEuXG4gICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpO1xuXG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShmbGF0dGVuT3B0aW9ucyh0b3BMZXZlbE9wdGlvbnMsIGZhbHNlKSwge1xuICAgICAgICAgIHRocmVzaG9sZDogMC4yLFxuICAgICAgICAgIGtleXM6IFsndGl0bGUnXSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4YWN0TWF0Y2ggPSBvcHRpb25zPy5mdXNlT3B0aW9ucz8udGhyZXNob2xkID09IDA7XG4gICAgICAgIFtwYXJlbnRzLCBjaGlsZHJlbl0gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIElmIHRoZSB1c2VyIGlzIG5vdCBzZWFyY2hpbmcgb3B0aW9ucywgcmV0dXJuIHRoZSBmdWxsIHNldCBvZiBvcHRpb25zXG4gICAgICAgIGFzLWlzLlxuICAgICAgKi9cbiAgICAgIGlmICghcXVlcnkuc2VhcmNoKSByZXR1cm4gZGF0YTtcblxuICAgICAgLypcbiAgICAgICAgRXhlY3V0ZSB0aGUgc2VhcmNoIHdpdGggZnVzZS4gT25jZSB3ZSBoYXZlIHRoZSBzZWFyY2ggbWF0Y2ggZGF0YSxcbiAgICAgICAgcmVidWlsZCBqdXN0IGFzIG11Y2ggb2YgdGhlIHRyZWUgYXMgaXMgbmVlZGVkIHRvIHJlbmRlciB0aGUgc2VhcmNoXG4gICAgICAgIHJlc3VsdHMuIFNwZWNpZmljYWxseSwgYW55IG1hdGNoIHdpbGwgbmVlZCBhbGwgb2YgaXRzIGFuY2VzdG9ycyAoc29cbiAgICAgICAgdGhhdCBtYXRjaGVkIGxlYWYgbm9kZXMgYXJlIHNob3duIG5lc3RlZCB1bmRlciB0aGVpciBhbmNlc3RvcnMpIGFuZCBhbGxcbiAgICAgICAgb2YgaXRzIGNoaWxkcmVuIChiZWNhdXNlIGEgbWF0Y2hpbmcgcGFyZW50IG1lYW5zIHRoYXQgYWxsIG9mIGl0c1xuICAgICAgICBkZXNjZW5kYW50cyBtYXRjaCB0b28sIHBlciB0aGUgZGVzaWduIHNwZWNpZmljYXRpb24pLCB3aGV0aGVyIHRoZXlcbiAgICAgICAgdGhlbXNlbHZlcyBtYXRjaGVkIG9yIG5vdC5cbiAgICAgICovXG4gICAgICBjb25zdCBtYXRjaGVkT3B0aW9uczogRnVzZVJlc3VsdDxPPltdID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRJZHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0uaWQpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWF0Y2hBbmNlc3RvcnM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RBbmNlc3RvcnMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgICAgIG1hdGNoQW5jZXN0b3JzLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb2xsZWN0QW5jZXN0b3JzKFtwYXJlbnRJZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sbGVjdEFuY2VzdG9ycyhbLi4ubWF0Y2hlZElkc10pO1xuXG4gICAgICBjb25zdCBtYXRjaERlc2NlbmRhbnRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KCk7XG4gICAgICBmdW5jdGlvbiBjb2xsZWN0RGVzY2VuZGFudHMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbklkcyA9IGNoaWxkcmVuLmdldChpZCk7XG4gICAgICAgICAgaWYgKGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICAgIG1hdGNoRGVzY2VuZGFudHMuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxlY3REZXNjZW5kYW50cyhjaGlsZHJlbklkcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0RGVzY2VuZGFudHMoWy4uLm1hdGNoZWRJZHNdKTtcblxuICAgICAgLypcbiAgICAgICAgTmV4dCwgd2UnbGwgY29tYmluZSBhbGwgdGhlIG1hdGNoZWQgSURzIHdpdGggdGhlaXIgZGlyZWN0IGFuY2VzdG9ycyBhbmRcbiAgICAgICAgZGVzY2FuZGFudHMsIGFuZCBmaWx0ZXIgdGhlIG9yaWdpbmFsIGRhdGEgc2V0IGRvd24gdG8ganVzdCB0aGVzZVxuICAgICAgICBvcHRpb25zLlxuICAgICAgKi9cbiAgICAgIGNvbnN0IGZpbHRlcmVkSWRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KFtcbiAgICAgICAgLi4ubWF0Y2hlZElkcyxcbiAgICAgICAgLi4ubWF0Y2hBbmNlc3RvcnMsXG4gICAgICAgIC4uLm1hdGNoRGVzY2VuZGFudHMsXG4gICAgICBdKTtcblxuICAgICAgZnVuY3Rpb24gZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBPcHRpb248Tz5bXSk6IE9wdGlvbjxPPltdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zOiBPcHRpb248Tz5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmVkSWRzLmhhcyhvcHRpb24uaWQpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXJPcHRpb25zKG9wdGlvbi5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhnZXRUb3BMZXZlbE9wdGlvbnMoZGF0YSkpO1xuXG4gICAgICAvKlxuICAgICAgICBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFuIGFycmF5IG9mIGRpc3RpbmN0IHRyZWVzICh0b3AtbGV2ZWwgb3B0aW9ucyksXG4gICAgICAgIGZpbHRlcmVkIGRvd24gdG8gb25seSB0aGUgb3B0aW9ucyBtYXRjaGluZyB0aGUgc2VhcmNoIHF1ZXJ5LiBOb3RlIHRoYXRcbiAgICAgICAgd2UgZG9uJ3QgY2FyZSBhYm91dCBzZWN0aW9uIGhlYWRlcnMgd2hlbiBzZWFyY2hpbmcgc2luY2UgcmVzdWx0cyBzaG91bGRcbiAgICAgICAgYmUgb3JkZXJlZCBieSByZWxldmFuY2UuIFRvIGNhbGN1bGF0ZSB0aGUgb3JkZXIgb2YgdGhlc2UgdHJlZXMsIHdlJ2xsXG4gICAgICAgIHRha2UgdGhlIHRvdGFsIG1hdGNoIHNjb3JlcyBmb3Igb3B0aW9ucyBmb3VuZCBpbiB0aGUgdHJlZSwgZGl2aWRlZCBieVxuICAgICAgICB0aGUgY291bnQgb2YgbWF0Y2hlcyBpbiB0aGUgdHJlZSAodGhlIGJlc3QgYXZlcmFnZSBtYXRjaCBzY29yZSkuXG4gICAgICAqL1xuXG4gICAgICBjb25zdCBzY29yZU1hcDogTWFwPE9bJ2lkJ10sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IFtyZXN1bHQuaXRlbS5pZCwgcmVzdWx0LnNjb3JlID8/IDBdKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBvcmRlcmVkID0gc29ydEJ5KGZpbHRlcmVkT3B0aW9ucywgKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyID0+IHtcbiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlU2NvcmUob3B0aW9uOiBPcHRpb248Tz4pOiBudW1iZXIge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2NvcmVNYXAuZ2V0KG9wdGlvbi5pZCkgPz8gMCkgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoc2NvcmUsIGNoaWxkKSA9PiBzY29yZSArIGNhbGN1bGF0ZVNjb3JlKGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvdW50KG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAob3B0aW9uLmNoaWxkcmVuID8/IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChjb3VudCwgY2hpbGQpID0+IGNvdW50ICsgY2FsY3VsYXRlQ291bnQoY2hpbGQpLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxTY29yZSA9IGNhbGN1bGF0ZVNjb3JlKG9wdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBjYWxjdWxhdGVDb3VudChvcHRpb24pO1xuICAgICAgICByZXR1cm4gdG90YWxTY29yZSAvIHRvdGFsQ291bnQ7XG4gICAgICB9KTtcblxuICAgICAgLypcbiAgICAgICAgRmluYWxseSwgd2UnbGwgYWRkIGhpZ2hsaWdodCBpbmRpY2VzIHRvIHRoZSBtYXRjaGVzIHNvIHRoYXQgdGhleSBjYW4gYmVcbiAgICAgICAgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgICAgKi9cblxuICAgICAgdHlwZSBIaWdobGlnaHRzID0ge1xuICAgICAgICB0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgICAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodE1hcDogTWFwPE9bJ2lkJ10sIEhpZ2hsaWdodHM+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0czogSGlnaGxpZ2h0cyA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0Lm1hdGNoZXMgPz8gW10pIHtcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgaW5leGFjdCBtYXRjaGVzXG4gICAgICAgICAgICBpZiAoZXhhY3RNYXRjaCAmJiBtYXRjaC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hdGNoLmluZGljZXMgPSBtYXRjaC5pbmRpY2VzLmZpbHRlcihtYXRjaGVkSW5kaWNlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFZhbHVlID0gbWF0Y2hcbiAgICAgICAgICAgICAgICAgIC52YWx1ZSEuc2xpY2UobWF0Y2hlZEluZGljZXNbMF0sIG1hdGNoZWRJbmRpY2VzWzFdICsgMSlcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIC8vIGZ1c2UgaXMgd2VpcmQgd2l0aCBpdCdzIG1hdGNoZXMuIEZvciBhIHRleHQgb2YgXCJwbGFubmluZ1wiIGFuZCBhIHNlYXJjaCBzdHJpbmcgb2YgXCJwbGFuXCJcbiAgICAgICAgICAgICAgICAvLyB0aGUgbWF0Y2hlZCB2YWx1ZSB3aWxsIGJlIFwicGxhbm5cIiB3aXRoIHRoZSBleHRyYSAnbicgYmVjYXVzZSBvZiBpdHMgZnV6enkgbWF0Y2hpbmcuXG4gICAgICAgICAgICAgICAgLy8gc28ganVzdCBtYWtlIHN1cmUgdGhlIG1hdGNoZWQgdmFsdWUgYXQgbGVhc3Qgc3RhcnRzIHdpdGggdGhlIHNlYXJjaCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRWYWx1ZS5zdGFydHNXaXRoKHF1ZXJ5LnNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2gua2V5ID09PSAndGl0bGUnKSB7XG4gICAgICAgICAgICAgIGhpZ2hsaWdodHMudGl0bGVIaWdobGlnaHRJbmRpY2VzID0gWy4uLm1hdGNoLmluZGljZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoLmtleSA9PT0gJ3N1YnRpdGxlJykge1xuICAgICAgICAgICAgICBoaWdobGlnaHRzLnN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA9IFsuLi5tYXRjaC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtyZXN1bHQuaXRlbS5pZCwgaGlnaGxpZ2h0c107XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGZ1bmN0aW9uIGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcHRpb25zOiBPcHRpb248Tz5bXSk6IFNvdXJjZU9wdGlvbjxPPltdIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKG9wdGlvbiA9PiAoe1xuICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAuLi5oaWdobGlnaHRNYXAuZ2V0KG9wdGlvbi5pZCksXG4gICAgICAgICAgLi4uKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICA/IHsgY2hpbGRyZW46IGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcHRpb24uY2hpbGRyZW4pIH1cbiAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt7IG9wdGlvbnM6IGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcmRlcmVkKSB9XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gU3RhdGUgcmVkdWNlciAod2l0aCBoZWxwZXJzKSAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheUxpbWl0TWVzc2FnZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgZGlzcGxheWVkT3B0aW9uQ291bnQ6IG51bWJlcixcbiAgICB0b3RhbE9wdGlvbkNvdW50OiBudW1iZXIsXG4gICAgcXVlcnk6IENvcmVTdGF0ZTxPPlsncXVlcnknXSxcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGRpc3BsYXllZE9wdGlvbkNvdW50ID09PSB0b3RhbE9wdGlvbkNvdW50KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByaXZOdW1iZXIgPSBuZXcgTnVtYmVyUGlwZSgpO1xuICAgIGNvbnN0IGRpc3BsYXllZCA9IHJpdk51bWJlci50cmFuc2Zvcm0oZGlzcGxheWVkT3B0aW9uQ291bnQpO1xuICAgIGNvbnN0IHRvdGFsID0gcml2TnVtYmVyLnRyYW5zZm9ybSh0b3RhbE9wdGlvbkNvdW50KTtcbiAgICBjb25zdCBzdGFydCA9IGBTaG93aW5nICR7ZGlzcGxheWVkfSBvZiAke3RvdGFsfSBvcHRpb25zYDtcbiAgICByZXR1cm4gcXVlcnkuc2VhcmNoID8gYCR7c3RhcnR9IG1hdGNoaW5nIFwiJHtxdWVyeS5zZWFyY2h9XCJgIDogc3RhcnQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudFZpc2libGVPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdLFxuICAgIGxlYWZPbmx5OiBib29sZWFuLFxuICApOiBudW1iZXIge1xuICAgIGZ1bmN0aW9uIGNvdW50KG9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSk6IG51bWJlciB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKGFjYywgb3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb24uZXhwYW5kZWQgJiYgb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYWNjICsgKGxlYWZPbmx5ID8gMCA6IDEpICsgY291bnQob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjICsgMTtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25Hcm91cHMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBncm91cCkgPT4gdG90YWwgKyBjb3VudChncm91cC5vcHRpb25zKSxcbiAgICAgIDAsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvdW50QWxsT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgKTogbnVtYmVyIHtcbiAgICBmdW5jdGlvbiBjb3VudChvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBudW1iZXIge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYWNjICsgMSArIGNvdW50KG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgZ3JvdXApID0+IHRvdGFsICsgY291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseURpc3BsYXlMaW1pdDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBkaXNwbGF5TGltaXQ/OiBudW1iZXIsXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICBpZiAoZGlzcGxheUxpbWl0ID09PSB1bmRlZmluZWQpIHJldHVybiBvcHRpb25Hcm91cHM7XG5cbiAgICB0eXBlIERpc3BsYXlMaW1pdE9wdGlvbnMgPSBbRnVsbE9wdGlvbjxPPltdLCBudW1iZXJdO1xuICAgIGZ1bmN0aW9uIGZpbHRlcldpdGhMaW1pdChcbiAgICAgIG9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICAgIHJlbWFpbmluZzogbnVtYmVyLFxuICAgICk6IERpc3BsYXlMaW1pdE9wdGlvbnMge1xuICAgICAgbGV0IGxlZnQgPSByZW1haW5pbmc7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9uczogRnVsbE9wdGlvbjxPPltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsZWZ0IDw9IDApIGJyZWFrO1xuXG4gICAgICAgIGlmIChvcHRpb24uZXhwYW5kZWQgJiYgb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBbY2hpbGRPcHRpb25zLCBjaGlsZFJlbWFpbmluZ10gPSBmaWx0ZXJXaXRoTGltaXQoXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICBsZWZ0IC0gMSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkT3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZWZ0ID0gY2hpbGRSZW1haW5pbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIGxlZnQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt2aXNpYmxlT3B0aW9ucywgbGVmdF07XG4gICAgfVxuXG4gICAgdHlwZSBEaXNwbGF5TGltaXRHcm91cHMgPSBbRnVsbE9wdGlvbkdyb3VwPE8+W10sIG51bWJlcl07XG4gICAgY29uc3Qgc3RhcnRpbmdWYWx1ZTogRGlzcGxheUxpbWl0R3JvdXBzID0gW1tdLCBkaXNwbGF5TGltaXRdO1xuICAgIGNvbnN0IFtyZXNvbHZlZEdyb3Vwc10gPSBvcHRpb25Hcm91cHMucmVkdWNlPERpc3BsYXlMaW1pdEdyb3Vwcz4oXG4gICAgICAoW2dyb3VwcywgcmVtYWluaW5nXSwgZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgW29wdGlvbnMsIGxlZnRBZnRlcl0gPSBmaWx0ZXJXaXRoTGltaXQoZ3JvdXAub3B0aW9ucywgcmVtYWluaW5nKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIFtbLi4uZ3JvdXBzLCB7IC4uLmdyb3VwLCBvcHRpb25zIH1dLCBsZWZ0QWZ0ZXJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbZ3JvdXBzLCByZW1haW5pbmddO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhcnRpbmdWYWx1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkR3JvdXBzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwTWFwczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICk6IFtNYXA8T1snaWQnXSwgT1snaWQnXT4sIE1hcDxPWydpZCddLCBPWydpZCddW10+XSB7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBidWlsZFBhcmVudHNNYXAob3B0aW9uczogT3B0aW9uPE8+W10sIHBhcmVudD86IE9wdGlvbjxPPik6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50cy5zZXQob3B0aW9uLmlkLCBwYXJlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb24uY2hpbGRyZW4sIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zOiBPcHRpb248Tz5bXSk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZHJlbi5zZXQoXG4gICAgICAgICAgICBvcHRpb24uaWQsXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4ubWFwKCh7IGlkIH0pID0+IGlkKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIFtwYXJlbnRzLCBjaGlsZHJlbl07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IEZ1bGxPcHRpb248Tz5bXTtcbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10sXG4gICk6IFNvdXJjZU9wdGlvbjxPPltdO1xuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogT3B0aW9uR3JvdXA8Tz5bXSxcbiAgKTogT3B0aW9uPE8+W107XG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxcbiAgICBPIGV4dGVuZHMgQmFzZU9wdGlvbixcbiAgICBHIGV4dGVuZHMgeyBvcHRpb25zOiByZWFkb25seSBUW10gfSxcbiAgICBUID0gRyBleHRlbmRzIEZ1bGxPcHRpb25Hcm91cDxPPlxuICAgICAgPyBGdWxsT3B0aW9uPE8+XG4gICAgICA6IEcgZXh0ZW5kcyBTb3VyY2VPcHRpb25Hcm91cDxPPlxuICAgICAgPyBTb3VyY2VPcHRpb248Tz5cbiAgICAgIDogT3B0aW9uPE8+LFxuICA+KG9wdGlvbkdyb3VwczogR1tdKTogVFtdIHtcbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZTxUW10+KFxuICAgICAgKG9wdGlvbnMsIGdyb3VwKSA9PiBbLi4ub3B0aW9ucywgLi4uZ3JvdXAub3B0aW9uc10sXG4gICAgICBbXSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgY2hpbGRyZW46IEZ1bGxPcHRpb248Tz5bXSxcbiAgKTogTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSB0cnVlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG5cbiAgZnVuY3Rpb24gYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBvcHRpb246IFNvdXJjZU9wdGlvbjxPPixcbiAgKTogRnVsbE9wdGlvbjxPPiB7XG4gICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhdWdtZW50ZWRDaGlsZHJlbiA9IG9wdGlvbi5jaGlsZHJlbi5tYXAoY2hpbGQgPT5cbiAgICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzdGF0ZSwgY2hpbGQpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgY2hpbGRyZW46IGF1Z21lbnRlZENoaWxkcmVuLFxuICAgICAgICBzZWxlY3RlZDogZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZShhdWdtZW50ZWRDaGlsZHJlbiksXG4gICAgICAgIGV4cGFuZGVkOiBzdGF0ZS5xdWVyeS5zZWFyY2hcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IHN0YXRlLmRpc3BsYXkuZXhwYW5kZWRPcHRpb25zLmhhcyhvcHRpb24uaWQpLFxuICAgICAgICBzZWxlY3RhYmxlOiAhc3RhdGUucXVlcnkuc2VhcmNoLFxuICAgICAgICBleHBhbmRhYmxlOiAhc3RhdGUucXVlcnkuc2VhcmNoLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbixcbiAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZDogc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkLmhhcyhvcHRpb24pLFxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZWxlY3RlZERpc3BsYXk8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdLm1hcCgoeyB0aXRsZSB9KSA9PiB0aXRsZSkuam9pbignLCAnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMuZXZlcnkoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoKSByZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQuJztcbiAgICAgIHJldHVybiAnTm8gb3B0aW9ucy4nO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IFNvdXJjZU9wdGlvbjxPPltdLFxuICAgIGlkOiBPWydpZCddLFxuICApOiBTb3VyY2VPcHRpb248Tz4gfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9uLmlkID09PSBpZCkgcmV0dXJuIG9wdGlvbjtcbiAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGZpbmRPcHRpb24ob3B0aW9uLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgIGlmIChjaGlsZCkgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogT1tdIHtcbiAgICByZXR1cm4gZmxhdHRlbkRlZXAoXG4gICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IG9wdGlvbi5jaGlsZHJlbi5tYXAoY2hpbGQgPT5cbiAgICAgICAgICAgIGZsYXR0ZW5PcHRpb25zKFtjaGlsZF0sIGxlYWZPbmx5KSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBsZWFmT25seSA/IGRlc2NlbmRhbnRzIDogW29wdGlvbiwgLi4uZGVzY2VuZGFudHNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVNlbGVjdGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpO1xuICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24odG9wTGV2ZWxPcHRpb25zLCBpZCk7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybiBzdGF0ZTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gIShcbiAgICAgIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb24oc3RhdGUsIG9wdGlvbikuc2VsZWN0ZWQgPT09IHRydWVcbiAgICApO1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5PcHRpb25zKFtvcHRpb25dLCB0cnVlKTtcbiAgICBmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgbmV3U2VsZWN0aW9uLmFkZChsZWFmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NlbGVjdGlvbi5kZWxldGUobGVhZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIHNlbGVjdGVkOiBuZXdTZWxlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTZWxlY3RlZE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzKTtcbiAgICBjb25zdCBvcHRpb24gPSBmaW5kT3B0aW9uKHRvcExldmVsT3B0aW9ucywgaWQpO1xuICAgIGlmICghb3B0aW9uKSByZXR1cm4gc3RhdGU7XG5cbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgT3B0aW9uU2V0PE8+KCk7XG4gICAgbmV3U2VsZWN0aW9uLmFkZChvcHRpb24pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIHNlbGVjdGVkOiBuZXdTZWxlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVWaXNpYmxlU2VsZWN0ZWQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoXG4gICAgICBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzKSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICBjb25zdCBpc0FsbFNlbGVjdGVkID0gbGVhdmVzLmV2ZXJ5KGxlYWYgPT5cbiAgICAgIFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdLm1hcCgoeyBpZCB9KSA9PiBpZCkuaW5jbHVkZXMobGVhZi5pZCksXG4gICAgKTtcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgT3B0aW9uU2V0KHN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG5cbiAgICBmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG4gICAgICBpZiAoaXNBbGxTZWxlY3RlZCkgbmV3U2VsZWN0aW9uLmRlbGV0ZShsZWFmKTtcbiAgICAgIGVsc2UgbmV3U2VsZWN0aW9uLmFkZChsZWFmKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgLi4uc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3RlZDogbmV3U2VsZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlT3B0aW9uRXhwYW5kZWQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgaWQ6IE9bJ2lkJ10sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSAhc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMuaGFzKGlkKTtcbiAgICBjb25zdCBuZXdFeHBhbmRlZE9wdGlvbnMgPSBuZXcgU2V0KHN0YXRlLmRpc3BsYXkuZXhwYW5kZWRPcHRpb25zKTtcbiAgICBpZiAobmV3VmFsdWUpIG5ld0V4cGFuZGVkT3B0aW9ucy5hZGQoaWQpO1xuICAgIGVsc2UgbmV3RXhwYW5kZWRPcHRpb25zLmRlbGV0ZShpZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGlzcGxheToge1xuICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICBleHBhbmRlZE9wdGlvbnM6IG5ld0V4cGFuZGVkT3B0aW9ucyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZGVFZmZlY3RzPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGFjdGlvbjogQWN0aW9uPE8+IHwgSW50ZXJuYWxBY3Rpb248Tz4sXG4gICAgc291cmNlOiBTb3VyY2U8Tz4sXG4gICAgaW50ZXJuYWxBY3Rpb25zOiBTdWJqZWN0PEludGVybmFsQWN0aW9uPE8+PixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBpZiAoXG4gICAgICBhY3Rpb24udHlwZSA9PT0gJ2xvYWQnIHx8XG4gICAgICBhY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENoYW5nZScgfHxcbiAgICAgIChhY3Rpb24udHlwZSA9PT0gJ29wZW5DaGFuZ2UnICYmIGFjdGlvbi5vcGVuKVxuICAgICkge1xuICAgICAgc291cmNlKHN0YXRlLnF1ZXJ5LCBhY3Rpb24pXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgIGludGVybmFsQWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWRDb21wbGV0ZScsIGRhdGEgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgaW50ZXJuYWxBY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZEVycm9yJywgZXJyb3IgfSk7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVkdWNlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGFjdGlvbjogQWN0aW9uPE8+IHwgSW50ZXJuYWxBY3Rpb248Tz4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnbG9hZCc6XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIGNhc2UgJ2xvYWRDb21wbGV0ZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgbG9hZDoge1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNvdXJjZU9wdGlvbkdyb3VwczogYWN0aW9uLmRhdGEsXG4gICAgICAgIH07XG4gICAgICBjYXNlICdsb2FkRXJyb3InOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnb3BlbkNoYW5nZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICAgICAgb3BlbjogYWN0aW9uLm9wZW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIHNlYXJjaDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJzpcbiAgICAgICAgcmV0dXJuIHRvZ2dsZVNlbGVjdGVkKHN0YXRlLCBhY3Rpb24uaWQpO1xuICAgICAgY2FzZSAnc2V0U2VsZWN0ZWRPcHRpb24nOlxuICAgICAgICByZXR1cm4gc2V0U2VsZWN0ZWRPcHRpb24oc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgICBjYXNlICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlVmlzaWJsZVNlbGVjdGVkKHN0YXRlKTtcbiAgICAgIGNhc2UgJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJzpcbiAgICAgICAgcmV0dXJuIHRvZ2dsZU9wdGlvbkV4cGFuZGVkKHN0YXRlLCBhY3Rpb24uaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
583
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUtOLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsV0FBVyxFQUVYLEdBQUcsRUFDSCxLQUFLLEVBRUwsYUFBYSxFQUNiLElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzVELE1BQU0sS0FBVyxTQUFTLENBbWdDekI7QUFuZ0NELFdBQWlCLFNBQVM7SUFDeEIsYUFBYTtJQUNiLGFBQWE7SUFDYixhQUFhO0lBb0diOzs7T0FHRztJQUNILE1BQWEsU0FBZ0MsU0FBUSxHQUFvQjtRQUM5RCxHQUFHLENBQUMsTUFBdUI7WUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFUSxHQUFHLENBQUMsTUFBdUI7WUFDbEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNwQix1RUFBdUU7Z0JBQ3ZFLG1FQUFtRTtnQkFDbkUscUJBQXFCO2dCQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ25DLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENB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QUUsQ0FBQyxDQUFDO1lBQzdDLEtBQUssdUJBQXVCO2dCQUMxQixPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxFQW5nQ2dCLFNBQVMsS0FBVCxTQUFTLFFBbWdDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVzZSwge1xuICBGdXNlUmVzdWx0LFxuICBGdXNlUmVzdWx0TWF0Y2gsXG4gIElGdXNlT3B0aW9ucyxcbiAgUmFuZ2VUdXBsZSxcbn0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGZsYXR0ZW5EZWVwLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgY29ubmVjdGFibGUsXG4gIENvbm5lY3RhYmxlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBPcHRpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSALS0tLS0tLS0tLS0tLS0tLS0tLeKUgOKUgOKUgOKUkFxuICAgKiDilIIgQmFzZU9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICog4pSCIFRoZSBjb3JlIGRhdGEgcmVxdWlyZWQgZm9yIGVhY2ggb3B0aW9uICAgIOKUglxuICAgKiDilIIgKHN1Y2ggYXMgaWQgYW5kIHRpdGxlKS4gICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC0tLS0tLS0tLS0tLS0tLS0tLS3ilIDilIDilKRcbiAgICog4pSCIE9wdGlvbiAoQmFzZU9wdGlvbiArIGNoaWxkcmVuKSAgICAgICAgICAgIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBQcm92aWRlcyByZWN1cnNpdmUgdHlwZSBzYWZldHkgdG8gdGhlICAgICDilIJcbiAgICog4pSCIHR5cGUgc2FmZXR5IHRvIHRoZSBCYXNlT3B0aW9uLiAgICAgICAgICAgIOKUglxuICAgKiDilJTilIAtLS0tLS0tLS0tLS0tLS0tLS3ilKwtLS0tLS0t4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCIFNvdXJjZU9wdGlvbiAoT3B0aW9uICsgc2VhcmNoIGhpZ2hsaWdodHMpIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBBZGRzIHNlYXJjaCBoaWdobGlnaHRzIHRvIHRoZSBPcHRpb24gYW5kICDilIJcbiAgICog4pSCIGlzIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIG9wdGlvbiBTb3VyY2UgIOKUglxuICAgKiDilIIgKGRhdGEgZmV0Y2hlcikgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiBGdWxsT3B0aW9uIChTb3VyY2VPcHRpb24gKyBVSSBzdGF0ZSkgICAgICDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgQXVnbWVudHMgdGhlIFNvdXJjZU9wdGlvbiB3aXRoIGFsbCBvZiB0aGUg4pSCXG4gICAqIOKUgiBVSSBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSAgICDilIJcbiAgICog4pSCIHN0YXRlLCBzdWNoIGFzIHNlbGVjdGlvbiBzdGF0dXMsIHdoZXRoZXIgIOKUglxuICAgKiDilIIgb3Igbm90IHRoZSBub2RlIGlzIGV4cGFuZGVkLCBldGMuICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHVzYWdlcyBvZiBPbWl0PC4uLj4gaW4gdGhpcyBzZWN0aW9uIGFyZSBub3QgcmVxdWlyZWQsIGJ1dFxuICAgKiBkbyBoZWxwIGluLWVkaXRvciB0eXBlIGhpbnRzIHRvIGJlIG1vcmUgY2xlYXIgYW5kIGRpcmVjdC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgaGVscD86IHN0cmluZztcbiAgICBjb3VudD86IG51bWJlcjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbiA9IEJhc2VPcHRpb24+ID0gTyAmIHtcbiAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIE9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgIGNoaWxkcmVuPzogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIFNvdXJjZU9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gT3B0aW9uIGdyb3VwcyAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gT3B0aW9uR3JvdXAsIFNvdXJjZU9wdGlvbkdyb3VwLCBhbmRcbiAgICogRnVsbE9wdGlvbkdyb3VwIGlzIGFuYWxvZ291cyB0byB0aGUgb3B0aW9uIHR5cGVzIGFib3ZlLlxuICAgKlxuICAgKiBBcyB3aXRoIGJlZm9yZSwgdGhlIHVzZSBvZiBPbWl0PC4uLj4gaXMgbm90IHJlcXVpcmVkIGJ1dCBoZWxwZnVsLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBPcHRpb25Hcm91cDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaGVhZGVyPzogc3RyaW5nO1xuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgU291cmNlT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgT3B0aW9uU2V0IGNsYXNzIHByb3ZpZGVzIFNldC1saWtlIGZ1bmN0aW9uYWxpdHksIGJ1dCB1bmlxdWVuZXNzIGlzXG4gICAqIGRldGVybWluZWQgYnkgdGhlIG9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE9wdGlvblNldDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gZXh0ZW5kcyBTZXQ8U291cmNlT3B0aW9uPE8+PiB7XG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICByZXR1cm4gISFbLi4udGhpc10uZmluZChvID0+IG8uaWQgPT09IG9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgYWRkKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBpZiAodGhpcy5oYXMob3B0aW9uKSkge1xuICAgICAgICAvLyBUaGUgU2V0IGFscmVhZHkgaGFzIHNvbWUgdmVyc2lvbiBvZiB0aGlzIG9wdGlvbiwgYnV0IHdlJ2xsIG1ha2Ugc3VyZVxuICAgICAgICAvLyBpdCBoYXMgdGhlIG1vc3QgcmVjZW50IG9iamVjdCByZWZlcmVuY2UgKHdoaWxlIGtlZXBpbmcgaW5zZXJ0aW9uXG4gICAgICAgIC8vIG9yZGVyIGNvbnNpc3RlbnQpLlxuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLnRoaXNdLm1hcChvID0+XG4gICAgICAgICAgby5pZCA9PT0gb3B0aW9uLmlkID8gb3B0aW9uIDogbyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICBuZXdPcHRpb25zLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgc3VwZXIuYWRkKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmFkZChvcHRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFsuLi50aGlzXS5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBzdXBlci5kZWxldGUoZXhpc3RpbmcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgQ29yZVN0YXRlIHByb3ZpZGVzIGFsbCBvZiB0aGUgZm91bmRhdGlvbmFsIHBpZWNlcyBvZiBzdGF0ZSByZXF1aXJlZFxuICAgKiBmb3IgYSB3b3JraW5nIGNvbXBvbmVudC4gRnVsbFN0YXRlIGlzIGEgcHVyZSBkZXJpdmF0aW9uIG9mIENvcmVTdGF0ZSBwbHVzXG4gICAqIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBwcm92aWRlcyBjb252ZW5pZW5jZXMgZm9yIHJlbmRlcmluZyB0aGVcbiAgICogY29tcG9uZW50cy4gQWN0aW9ucyBhbmQgdGhlIGNvcmUgc3RhdGUgYXJlIHBhc3NlZCB0byB0aGUgcmVkdWNlciB0b1xuICAgKiBwcm9kdWNlIG5ldyBDb3JlU3RhdGVzICh3aGljaCBhcmUgdGhlbiB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgRnVsbFN0YXRlcykuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBxdWVyeToge1xuICAgICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgfTtcbiAgICBsb2FkOiB7XG4gICAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICAgIH07XG4gICAgc291cmNlT3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgc2VsZWN0ZWQ6IE9wdGlvblNldDxPPjtcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgICBvcGVuOiBib29sZWFuO1xuICAgICAgZXhwYW5kZWRPcHRpb25zOiBTZXQ8T1snaWQnXT47XG4gICAgfTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gQ29yZVN0YXRlPE8+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBzaG93U2VhcmNoOiBib29sZWFuO1xuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICB9O1xuICAgIGZ1bGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgc2VsZWN0ZWQ6IHN0cmluZztcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXZpZGVyczogYm9vbGVhbjtcbiAgICAgIGlubGluZTogYm9vbGVhbjtcbiAgICAgIG1heEhlaWdodDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1heFdpZHRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgZGlzcGxheUxpbWl0TWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHNob3dTaW5nbGVTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gQWN0aW9ucyAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7IHR5cGU6ICdvcGVuQ2hhbmdlJzsgb3BlbjogYm9vbGVhbiB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogQ29yZVN0YXRlPE8+WydzZWxlY3Rpb24nXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbic7XG4gICAgICAgIGlkOiBPWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9O1xuXG4gIHR5cGUgSW50ZXJuYWxBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWRDb21wbGV0ZSc7IGRhdGE6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10gfVxuICAgIHwgeyB0eXBlOiAnbG9hZEVycm9yJzsgZXJyb3I6IHVua25vd24gfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gU291cmNlIC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgU291cmNlJ3Mgam9iIGlzIHRvIGZldGNoIG9wdGlvbnMgKGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlKSB3aGljaFxuICAgKiB0aGVuIGJsZW5kIHdpdGggdGhlIG90aGVyIHBpZWNlcyBvZiBzdGF0ZSB0byBwcm9kdWNlIHRoZSBGdWxsU3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSAoXG4gICAgcXVlcnk6IENvcmVTdGF0ZTxPPlsncXVlcnknXSxcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248Tz4sXG4gICkgPT4gUHJvbWlzZTxTb3VyY2VPcHRpb25Hcm91cDxPPltdPjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIE1hbmFnZXIgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPE8+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPE8+PjtcbiAgICBhbGxvd011bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgICBhbGxvd1NlYXJjaD86IGJvb2xlYW47XG4gICAgYWxsb3dTZWxlY3RBbGw/OiBib29sZWFuO1xuICAgIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIGRpdmlkZXJzPzogYm9vbGVhbjtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIG1heEhlaWdodD86IHN0cmluZyB8IG51bGw7XG4gICAgbWF4V2lkdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIGRpc3BsYXlMaW1pdD86IG51bWJlcjtcbiAgICBzaG93U2luZ2xlU2VsZWN0ZWQ/OiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPE8+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IFtdLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIHNlbGVjdGVkOiBuZXcgT3B0aW9uU2V0KCksXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdC4uLicsXG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBleHBhbmRlZE9wdGlvbnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxPPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGludGVybmFsQWN0aW9uczogU3ViamVjdDxJbnRlcm5hbEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTxDb3JlU3RhdGU8Tz4+ID0gbWVyZ2UoXG4gICAgICBhY3Rpb25zLFxuICAgICAgaW50ZXJuYWxBY3Rpb25zLFxuICAgICkucGlwZShcbiAgICAgIHNjYW4oXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PlxuICAgICAgICAgIHNpZGVFZmZlY3RzKHJlZHVjZShzdGF0ZSwgYWN0aW9uKSwgYWN0aW9uLCBzb3VyY2UsIGludGVybmFsQWN0aW9ucyksXG4gICAgICAgIGRlZmF1bHRlZEluaXRpYWxTdGF0ZSxcbiAgICAgICksXG4gICAgICBzdGFydFdpdGgoZGVmYXVsdGVkSW5pdGlhbFN0YXRlKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxPPj4gPSBjb25uZWN0YWJsZShcbiAgICAgIGNvcmVTdGF0ZS5waXBlKFxuICAgICAgICBtYXAocyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSA9XG4gICAgICAgICAgICBzLnNvdXJjZU9wdGlvbkdyb3Vwcy5tYXAob3B0aW9uR3JvdXAgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbkdyb3VwLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbkdyb3VwLm9wdGlvbnMubWFwKG9wdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzLCBvcHRpb24pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpO1xuXG4gICAgICAgICAgY29uc3QgZnVsbE9wdGlvbkdyb3VwcyA9IGFwcGx5RGlzcGxheUxpbWl0KFxuICAgICAgICAgICAgYWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgb3B0aW9ucz8uZGlzcGxheUxpbWl0LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgIHNob3dTZWFyY2g6XG4gICAgICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICghIXMucXVlcnkuc2VhcmNoIHx8IGNvdW50QWxsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpID4gNSksXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiBvcHRpb25zPy5zZWFyY2hQbGFjZWhvbGRlciA/PyAnU2VhcmNoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiAhIW9wdGlvbnM/LmFsbG93TXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiAhIW9wdGlvbnM/LmFsbG93U2VsZWN0QWxsLFxuICAgICAgICAgICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6XG4gICAgICAgICAgICAgICAgZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZSh0b3BMZXZlbE9wdGlvbnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0U2VsZWN0ZWREaXNwbGF5KHMpLFxuICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMpLFxuICAgICAgICAgICAgICBkaXZpZGVyczogISFvcHRpb25zPy5kaXZpZGVycyxcbiAgICAgICAgICAgICAgaW5saW5lOiAhIW9wdGlvbnM/LmlubGluZSxcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBvcHRpb25zPy5tYXhIZWlnaHQgPz8gbnVsbCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IG9wdGlvbnM/Lm1heFdpZHRoID8/IG51bGwsXG4gICAgICAgICAgICAgIGRpc3BsYXlMaW1pdE1lc3NhZ2U6IGdldERpc3BsYXlMaW1pdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgY291bnRWaXNpYmxlT3B0aW9ucyhmdWxsT3B0aW9uR3JvdXBzLCAhIXMucXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgICBjb3VudFZpc2libGVPcHRpb25zKGFsbE9wdGlvbkdyb3VwcywgISFzLnF1ZXJ5LnNlYXJjaCksXG4gICAgICAgICAgICAgICAgcy5xdWVyeSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiAhIW9wdGlvbnM/LnNob3dTaW5nbGVTZWxlY3RlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCB0aGUgb3B0aW9ucyBpbW1lZGlhdGVseSBmb3Igc2VsZWN0cyB0aGF0IGFyZSBkaXNwbGF5ZWQgaW5saW5lLlxuICAgIGlmIChvcHRpb25zPy5pbmxpbmUpIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlIH07XG4gIH1cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgTWFuYWdlck9wdGlvbnM8Tz4gJiB7XG4gICAgICBmdXNlT3B0aW9ucz86IElGdXNlT3B0aW9uczxPPjtcbiAgICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxPcHRpb25Hcm91cDxPPltdPiB8IE9wdGlvbkdyb3VwPE8+W10sXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGxldCBkYXRhOiBPcHRpb25Hcm91cDxPPltdO1xuICAgIGxldCBmdXNlOiBGdXNlPE8+O1xuICAgIGxldCBleGFjdE1hdGNoOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHBhcmVudHM6IE1hcDxPWydpZCddLCBPWydpZCddPjtcbiAgICBsZXQgY2hpbGRyZW46IE1hcDxPWydpZCddLCBPWydpZCddW10+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8Tz4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8qXG4gICAgICAgIFJlLWZldGNoIHRoZSBvcHRpb25zIG9uIHRoZSBsb2FkIGFjdGlvbiwgYW5kIHJlYnVpbGQgdGhlIHN0YXRlXG4gICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgb3B0aW9uIGRhdGEuXG4gICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpO1xuXG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShmbGF0dGVuT3B0aW9ucyh0b3BMZXZlbE9wdGlvbnMsIGZhbHNlKSwge1xuICAgICAgICAgIHRocmVzaG9sZDogMC4yLFxuICAgICAgICAgIGtleXM6IFsndGl0bGUnXSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4YWN0TWF0Y2ggPSBvcHRpb25zPy5mdXNlT3B0aW9ucz8udGhyZXNob2xkID09IDA7XG4gICAgICAgIFtwYXJlbnRzLCBjaGlsZHJlbl0gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIElmIHRoZSB1c2VyIGlzIG5vdCBzZWFyY2hpbmcgb3B0aW9ucywgcmV0dXJuIHRoZSBmdWxsIHNldCBvZiBvcHRpb25zXG4gICAgICAgIGFzLWlzLlxuICAgICAgKi9cbiAgICAgIGlmICghcXVlcnkuc2VhcmNoKSByZXR1cm4gZGF0YTtcblxuICAgICAgLypcbiAgICAgICAgRXhlY3V0ZSB0aGUgc2VhcmNoIHdpdGggZnVzZS4gT25jZSB3ZSBoYXZlIHRoZSBzZWFyY2ggbWF0Y2ggZGF0YSxcbiAgICAgICAgcmVidWlsZCBqdXN0IGFzIG11Y2ggb2YgdGhlIHRyZWUgYXMgaXMgbmVlZGVkIHRvIHJlbmRlciB0aGUgc2VhcmNoXG4gICAgICAgIHJlc3VsdHMuIFNwZWNpZmljYWxseSwgYW55IG1hdGNoIHdpbGwgbmVlZCBhbGwgb2YgaXRzIGFuY2VzdG9ycyAoc29cbiAgICAgICAgdGhhdCBtYXRjaGVkIGxlYWYgbm9kZXMgYXJlIHNob3duIG5lc3RlZCB1bmRlciB0aGVpciBhbmNlc3RvcnMpIGFuZCBhbGxcbiAgICAgICAgb2YgaXRzIGNoaWxkcmVuIChiZWNhdXNlIGEgbWF0Y2hpbmcgcGFyZW50IG1lYW5zIHRoYXQgYWxsIG9mIGl0c1xuICAgICAgICBkZXNjZW5kYW50cyBtYXRjaCB0b28sIHBlciB0aGUgZGVzaWduIHNwZWNpZmljYXRpb24pLCB3aGV0aGVyIHRoZXlcbiAgICAgICAgdGhlbXNlbHZlcyBtYXRjaGVkIG9yIG5vdC5cbiAgICAgICovXG4gICAgICBjb25zdCBtYXRjaGVkT3B0aW9uczogRnVzZVJlc3VsdDxPPltdID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRJZHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0uaWQpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWF0Y2hBbmNlc3RvcnM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RBbmNlc3RvcnMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgICAgIG1hdGNoQW5jZXN0b3JzLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb2xsZWN0QW5jZXN0b3JzKFtwYXJlbnRJZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sbGVjdEFuY2VzdG9ycyhbLi4ubWF0Y2hlZElkc10pO1xuXG4gICAgICBjb25zdCBtYXRjaERlc2NlbmRhbnRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KCk7XG4gICAgICBmdW5jdGlvbiBjb2xsZWN0RGVzY2VuZGFudHMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbklkcyA9IGNoaWxkcmVuLmdldChpZCk7XG4gICAgICAgICAgaWYgKGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICAgIG1hdGNoRGVzY2VuZGFudHMuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxlY3REZXNjZW5kYW50cyhjaGlsZHJlbklkcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0RGVzY2VuZGFudHMoWy4uLm1hdGNoZWRJZHNdKTtcblxuICAgICAgLypcbiAgICAgICAgTmV4dCwgd2UnbGwgY29tYmluZSBhbGwgdGhlIG1hdGNoZWQgSURzIHdpdGggdGhlaXIgZGlyZWN0IGFuY2VzdG9ycyBhbmRcbiAgICAgICAgZGVzY2FuZGFudHMsIGFuZCBmaWx0ZXIgdGhlIG9yaWdpbmFsIGRhdGEgc2V0IGRvd24gdG8ganVzdCB0aGVzZVxuICAgICAgICBvcHRpb25zLlxuICAgICAgKi9cbiAgICAgIGNvbnN0IGZpbHRlcmVkSWRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KFtcbiAgICAgICAgLi4ubWF0Y2hlZElkcyxcbiAgICAgICAgLi4ubWF0Y2hBbmNlc3RvcnMsXG4gICAgICAgIC4uLm1hdGNoRGVzY2VuZGFudHMsXG4gICAgICBdKTtcblxuICAgICAgZnVuY3Rpb24gZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBPcHRpb248Tz5bXSk6IE9wdGlvbjxPPltdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zOiBPcHRpb248Tz5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmVkSWRzLmhhcyhvcHRpb24uaWQpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXJPcHRpb25zKG9wdGlvbi5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhnZXRUb3BMZXZlbE9wdGlvbnMoZGF0YSkpO1xuXG4gICAgICAvKlxuICAgICAgICBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFuIGFycmF5IG9mIGRpc3RpbmN0IHRyZWVzICh0b3AtbGV2ZWwgb3B0aW9ucyksXG4gICAgICAgIGZpbHRlcmVkIGRvd24gdG8gb25seSB0aGUgb3B0aW9ucyBtYXRjaGluZyB0aGUgc2VhcmNoIHF1ZXJ5LiBOb3RlIHRoYXRcbiAgICAgICAgd2UgZG9uJ3QgY2FyZSBhYm91dCBzZWN0aW9uIGhlYWRlcnMgd2hlbiBzZWFyY2hpbmcgc2luY2UgcmVzdWx0cyBzaG91bGRcbiAgICAgICAgYmUgb3JkZXJlZCBieSByZWxldmFuY2UuIFRvIGNhbGN1bGF0ZSB0aGUgb3JkZXIgb2YgdGhlc2UgdHJlZXMsIHdlJ2xsXG4gICAgICAgIHRha2UgdGhlIHRvdGFsIG1hdGNoIHNjb3JlcyBmb3Igb3B0aW9ucyBmb3VuZCBpbiB0aGUgdHJlZSwgZGl2aWRlZCBieVxuICAgICAgICB0aGUgY291bnQgb2YgbWF0Y2hlcyBpbiB0aGUgdHJlZSAodGhlIGJlc3QgYXZlcmFnZSBtYXRjaCBzY29yZSkuXG4gICAgICAqL1xuXG4gICAgICBjb25zdCBzY29yZU1hcDogTWFwPE9bJ2lkJ10sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IFtyZXN1bHQuaXRlbS5pZCwgcmVzdWx0LnNjb3JlID8/IDBdKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBvcmRlcmVkID0gc29ydEJ5KGZpbHRlcmVkT3B0aW9ucywgKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyID0+IHtcbiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlU2NvcmUob3B0aW9uOiBPcHRpb248Tz4pOiBudW1iZXIge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2NvcmVNYXAuZ2V0KG9wdGlvbi5pZCkgPz8gMCkgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoc2NvcmUsIGNoaWxkKSA9PiBzY29yZSArIGNhbGN1bGF0ZVNjb3JlKGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvdW50KG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAob3B0aW9uLmNoaWxkcmVuID8/IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChjb3VudCwgY2hpbGQpID0+IGNvdW50ICsgY2FsY3VsYXRlQ291bnQoY2hpbGQpLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxTY29yZSA9IGNhbGN1bGF0ZVNjb3JlKG9wdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBjYWxjdWxhdGVDb3VudChvcHRpb24pO1xuICAgICAgICByZXR1cm4gdG90YWxTY29yZSAvIHRvdGFsQ291bnQ7XG4gICAgICB9KTtcblxuICAgICAgLypcbiAgICAgICAgRmluYWxseSwgd2UnbGwgYWRkIGhpZ2hsaWdodCBpbmRpY2VzIHRvIHRoZSBtYXRjaGVzIHNvIHRoYXQgdGhleSBjYW4gYmVcbiAgICAgICAgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgICAgKi9cblxuICAgICAgdHlwZSBIaWdobGlnaHRzID0ge1xuICAgICAgICB0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgICAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodE1hcDogTWFwPE9bJ2lkJ10sIEhpZ2hsaWdodHM+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0czogSGlnaGxpZ2h0cyA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0Lm1hdGNoZXMgPz8gW10pIHtcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgaW5leGFjdCBtYXRjaGVzXG4gICAgICAgICAgICBpZiAoZXhhY3RNYXRjaCAmJiBtYXRjaC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hdGNoLmluZGljZXMgPSBtYXRjaC5pbmRpY2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgICBpc0Z1c2VNYXRjaEV4YWN0KG1hdGNoLCBxdWVyeS5zZWFyY2gpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoLmtleSA9PT0gJ3RpdGxlJykge1xuICAgICAgICAgICAgICBoaWdobGlnaHRzLnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA9IFsuLi5tYXRjaC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaC5rZXkgPT09ICdzdWJ0aXRsZScpIHtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0cy5zdWJ0aXRsZUhpZ2hsaWdodEluZGljZXMgPSBbLi4ubWF0Y2guaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbcmVzdWx0Lml0ZW0uaWQsIGhpZ2hsaWdodHNdO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBmdW5jdGlvbiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3B0aW9uczogT3B0aW9uPE8+W10pOiBTb3VyY2VPcHRpb248Tz5bXSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgLi4uaGlnaGxpZ2h0TWFwLmdldChvcHRpb24uaWQpLFxuICAgICAgICAgIC4uLihvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgPyB7IGNoaWxkcmVuOiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3B0aW9uLmNoaWxkcmVuKSB9XG4gICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbeyBvcHRpb25zOiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3JkZXJlZCkgfV07XG4gICAgfTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgb3B0aW9ucyk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNGdXNlTWF0Y2hFeGFjdChcbiAgICBtYXRjaDogRnVzZVJlc3VsdE1hdGNoLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICApOiAoXG4gICAgdmFsdWU6IFJhbmdlVHVwbGUsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhcnJheTogcmVhZG9ubHkgUmFuZ2VUdXBsZVtdLFxuICApID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYXRjaGVkSW5kaWNlcyA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVkVmFsdWUgPSBtYXRjaFxuICAgICAgICAudmFsdWUhLnNsaWNlKG1hdGNoZWRJbmRpY2VzWzBdLCBtYXRjaGVkSW5kaWNlc1sxXSArIDEpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgLy8gZnVzZSBpcyB3ZWlyZCB3aXRoIGl0J3MgbWF0Y2hlcy4gRm9yIGEgdGV4dCBvZiBcInBsYW5uaW5nXCIgYW5kIGEgc2VhcmNoIHN0cmluZyBvZiBcInBsYW5cIlxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcInBsYW5uXCIgd2l0aCB0aGUgZXh0cmEgJ24nIGJlY2F1c2Ugb2YgaXRzIGZ1enp5IG1hdGNoaW5nLlxuICAgICAgLy8gc28ganVzdCBtYWtlIHN1cmUgdGhlIG1hdGNoZWQgdmFsdWUgYXQgbGVhc3Qgc3RhcnRzIHdpdGggdGhlIHNlYXJjaCBzdHJpbmcuXG4gICAgICAvLyBpdCdzIGV4dHJhIHdlaXJkIGJlY2F1c2UgZm9yIGEgdGV4dCBvZiBcImFuYWx5dGljc1wiIGFuZCBhIHNlYXJjaCBzdHJpbmcgb2YgXCJuYWx5dGljc1wiLFxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcImFuYWx5dGljc1wiLiBTbyB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0aGUgbWF0Y2hlZCB2YWx1ZVxuICAgICAgLy8gaW5jbHVkZXMgdGhlIHNlYXJjaCBzdHJpbmcgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBleHRyYSBzdHVmZiBvbiB0aGUgZnJvbnQgb3IgdGhlIGVuZC5cbiAgICAgIHJldHVybiBtYXRjaGVkVmFsdWUuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFN0YXRlIHJlZHVjZXIgKHdpdGggaGVscGVycykgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlMaW1pdE1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGRpc3BsYXllZE9wdGlvbkNvdW50OiBudW1iZXIsXG4gICAgdG90YWxPcHRpb25Db3VudDogbnVtYmVyLFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChkaXNwbGF5ZWRPcHRpb25Db3VudCA9PT0gdG90YWxPcHRpb25Db3VudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcml2TnVtYmVyID0gbmV3IE51bWJlclBpcGUoKTtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSByaXZOdW1iZXIudHJhbnNmb3JtKGRpc3BsYXllZE9wdGlvbkNvdW50KTtcbiAgICBjb25zdCB0b3RhbCA9IHJpdk51bWJlci50cmFuc2Zvcm0odG90YWxPcHRpb25Db3VudCk7XG4gICAgY29uc3Qgc3RhcnQgPSBgU2hvd2luZyAke2Rpc3BsYXllZH0gb2YgJHt0b3RhbH0gb3B0aW9uc2A7XG4gICAgcmV0dXJuIHF1ZXJ5LnNlYXJjaCA/IGAke3N0YXJ0fSBtYXRjaGluZyBcIiR7cXVlcnkuc2VhcmNofVwiYCA6IHN0YXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gY291bnRWaXNpYmxlT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogbnVtYmVyIHtcbiAgICBmdW5jdGlvbiBjb3VudChvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBudW1iZXIge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmV4cGFuZGVkICYmIG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIChsZWFmT25seSA/IDAgOiAxKSArIGNvdW50KG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgZ3JvdXApID0+IHRvdGFsICsgY291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudEFsbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IG51bWJlciB7XG4gICAgZnVuY3Rpb24gY291bnQob3B0aW9uczogRnVsbE9wdGlvbjxPPltdKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIDEgKyBjb3VudChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIGdyb3VwKSA9PiB0b3RhbCArIGNvdW50KGdyb3VwLm9wdGlvbnMpLFxuICAgICAgMCxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlEaXNwbGF5TGltaXQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICAgZGlzcGxheUxpbWl0PzogbnVtYmVyLFxuICApOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSB7XG4gICAgaWYgKGRpc3BsYXlMaW1pdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gb3B0aW9uR3JvdXBzO1xuXG4gICAgdHlwZSBEaXNwbGF5TGltaXRPcHRpb25zID0gW0Z1bGxPcHRpb248Tz5bXSwgbnVtYmVyXTtcbiAgICBmdW5jdGlvbiBmaWx0ZXJXaXRoTGltaXQoXG4gICAgICBvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10sXG4gICAgICByZW1haW5pbmc6IG51bWJlcixcbiAgICApOiBEaXNwbGF5TGltaXRPcHRpb25zIHtcbiAgICAgIGxldCBsZWZ0ID0gcmVtYWluaW5nO1xuICAgICAgY29uc3QgdmlzaWJsZU9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAobGVmdCA8PSAwKSBicmVhaztcblxuICAgICAgICBpZiAob3B0aW9uLmV4cGFuZGVkICYmIG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgW2NoaWxkT3B0aW9ucywgY2hpbGRSZW1haW5pbmddID0gZmlsdGVyV2l0aExpbWl0KFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLFxuICAgICAgICAgICAgbGVmdCAtIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZE9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGVmdCA9IGNoaWxkUmVtYWluaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpc2libGVPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICBsZWZ0LS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdmlzaWJsZU9wdGlvbnMsIGxlZnRdO1xuICAgIH1cblxuICAgIHR5cGUgRGlzcGxheUxpbWl0R3JvdXBzID0gW0Z1bGxPcHRpb25Hcm91cDxPPltdLCBudW1iZXJdO1xuICAgIGNvbnN0IHN0YXJ0aW5nVmFsdWU6IERpc3BsYXlMaW1pdEdyb3VwcyA9IFtbXSwgZGlzcGxheUxpbWl0XTtcbiAgICBjb25zdCBbcmVzb2x2ZWRHcm91cHNdID0gb3B0aW9uR3JvdXBzLnJlZHVjZTxEaXNwbGF5TGltaXRHcm91cHM+KFxuICAgICAgKFtncm91cHMsIHJlbWFpbmluZ10sIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IFtvcHRpb25zLCBsZWZ0QWZ0ZXJdID0gZmlsdGVyV2l0aExpbWl0KGdyb3VwLm9wdGlvbnMsIHJlbWFpbmluZyk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbWy4uLmdyb3VwcywgeyAuLi5ncm91cCwgb3B0aW9ucyB9XSwgbGVmdEFmdGVyXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW2dyb3VwcywgcmVtYWluaW5nXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0YXJ0aW5nVmFsdWUsXG4gICAgKTtcblxuICAgIHJldHVybiByZXNvbHZlZEdyb3VwcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJlbGF0aW9uc2hpcE1hcHM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdLFxuICApOiBbTWFwPE9bJ2lkJ10sIE9bJ2lkJ10+LCBNYXA8T1snaWQnXSwgT1snaWQnXVtdPl0ge1xuICAgIGNvbnN0IHBhcmVudHMgPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnM6IE9wdGlvbjxPPltdLCBwYXJlbnQ/OiBPcHRpb248Tz4pOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHBhcmVudHMuc2V0KG9wdGlvbi5pZCwgcGFyZW50LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBidWlsZFBhcmVudHNNYXAob3B0aW9uLmNoaWxkcmVuLCBvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIGZ1bmN0aW9uIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uczogT3B0aW9uPE8+W10pOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgY2hpbGRyZW4uc2V0KFxuICAgICAgICAgICAgb3B0aW9uLmlkLFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLm1hcCgoeyBpZCB9KSA9PiBpZCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zKTtcblxuICAgIHJldHVybiBbcGFyZW50cywgY2hpbGRyZW5dO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdLFxuICApOiBGdWxsT3B0aW9uPE8+W107XG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdLFxuICApOiBTb3VyY2VPcHRpb248Tz5bXTtcbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IE9wdGlvbjxPPltdO1xuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8XG4gICAgTyBleHRlbmRzIEJhc2VPcHRpb24sXG4gICAgRyBleHRlbmRzIHsgb3B0aW9uczogcmVhZG9ubHkgVFtdIH0sXG4gICAgVCA9IEcgZXh0ZW5kcyBGdWxsT3B0aW9uR3JvdXA8Tz5cbiAgICAgID8gRnVsbE9wdGlvbjxPPlxuICAgICAgOiBHIGV4dGVuZHMgU291cmNlT3B0aW9uR3JvdXA8Tz5cbiAgICAgID8gU291cmNlT3B0aW9uPE8+XG4gICAgICA6IE9wdGlvbjxPPixcbiAgPihvcHRpb25Hcm91cHM6IEdbXSk6IFRbXSB7XG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2U8VFtdPihcbiAgICAgIChvcHRpb25zLCBncm91cCkgPT4gWy4uLm9wdGlvbnMsIC4uLmdyb3VwLm9wdGlvbnNdLFxuICAgICAgW10sXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhcmVudE11bHRpU2VsZWN0aW9uU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGNoaWxkcmVuOiBGdWxsT3B0aW9uPE8+W10sXG4gICk6IE11bHRpU2VsZWN0aW9uU3RhdGUge1xuICAgIGlmIChjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCA9PT0gdHJ1ZSkpIHJldHVybiB0cnVlO1xuICAgIGlmIChjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCA9PT0gZmFsc2UpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICdpbmRldGVybWluYXRlJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgb3B0aW9uOiBTb3VyY2VPcHRpb248Tz4sXG4gICk6IEZ1bGxPcHRpb248Tz4ge1xuICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgYXVnbWVudGVkQ2hpbGRyZW4gPSBvcHRpb24uY2hpbGRyZW4ubWFwKGNoaWxkID0+XG4gICAgICAgIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb24oc3RhdGUsIGNoaWxkKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgIGNoaWxkcmVuOiBhdWdtZW50ZWRDaGlsZHJlbixcbiAgICAgICAgc2VsZWN0ZWQ6IGdldFBhcmVudE11bHRpU2VsZWN0aW9uU3RhdGUoYXVnbWVudGVkQ2hpbGRyZW4pLFxuICAgICAgICBleHBhbmRlZDogc3RhdGUucXVlcnkuc2VhcmNoXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMob3B0aW9uLmlkKSxcbiAgICAgICAgc2VsZWN0YWJsZTogIXN0YXRlLnF1ZXJ5LnNlYXJjaCxcbiAgICAgICAgZXhwYW5kYWJsZTogIXN0YXRlLnF1ZXJ5LnNlYXJjaCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0ZWQ6IHN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZC5oYXMob3B0aW9uKSxcbiAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWREaXNwbGF5PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXS5tYXAoKHsgdGl0bGUgfSkgPT4gdGl0bGUpLmpvaW4oJywgJyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRaZXJvU3RhdGVNZXNzYWdlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzLmV2ZXJ5KGdyb3VwID0+IGdyb3VwLm9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCkgcmV0dXJuICdObyByZXN1bHRzIGZvdW5kLic7XG4gICAgICByZXR1cm4gJ05vIG9wdGlvbnMuJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBTb3VyY2VPcHRpb248Tz5bXSxcbiAgICBpZDogT1snaWQnXSxcbiAgKTogU291cmNlT3B0aW9uPE8+IHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbi5pZCA9PT0gaWQpIHJldHVybiBvcHRpb247XG4gICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBmaW5kT3B0aW9uKG9wdGlvbi5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoY2hpbGQpIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmbGF0dGVuT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICAgbGVhZk9ubHk6IGJvb2xlYW4sXG4gICk6IE9bXSB7XG4gICAgcmV0dXJuIGZsYXR0ZW5EZWVwKFxuICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSBvcHRpb24uY2hpbGRyZW4ubWFwKGNoaWxkID0+XG4gICAgICAgICAgICBmbGF0dGVuT3B0aW9ucyhbY2hpbGRdLCBsZWFmT25seSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbGVhZk9ubHkgPyBkZXNjZW5kYW50cyA6IFtvcHRpb24sIC4uLmRlc2NlbmRhbnRzXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzKTtcbiAgICBjb25zdCBvcHRpb24gPSBmaW5kT3B0aW9uKHRvcExldmVsT3B0aW9ucywgaWQpO1xuICAgIGlmICghb3B0aW9uKSByZXR1cm4gc3RhdGU7XG5cbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgT3B0aW9uU2V0KHN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9ICEoXG4gICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHN0YXRlLCBvcHRpb24pLnNlbGVjdGVkID09PSB0cnVlXG4gICAgKTtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhbb3B0aW9uXSwgdHJ1ZSk7XG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld1NlbGVjdGlvbi5hZGQobGVhZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3U2VsZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U2VsZWN0ZWRPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgaWQ6IE9bJ2lkJ10sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3Vwcyk7XG4gICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIGlkKTtcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldDxPPigpO1xuICAgIG5ld1NlbGVjdGlvbi5hZGQob3B0aW9uKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3U2VsZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlVmlzaWJsZVNlbGVjdGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5PcHRpb25zKFxuICAgICAgZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3VwcyksXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IGxlYXZlcy5ldmVyeShsZWFmID0+XG4gICAgICBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXS5tYXAoKHsgaWQgfSkgPT4gaWQpLmluY2x1ZGVzKGxlYWYuaWQpLFxuICAgICk7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQpIG5ld1NlbGVjdGlvbi5kZWxldGUobGVhZik7XG4gICAgICBlbHNlIG5ld1NlbGVjdGlvbi5hZGQobGVhZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIC4uLnN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9wdGlvbkV4cGFuZGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIXN0YXRlLmRpc3BsYXkuZXhwYW5kZWRPcHRpb25zLmhhcyhpZCk7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRPcHRpb25zID0gbmV3IFNldChzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucyk7XG4gICAgaWYgKG5ld1ZhbHVlKSBuZXdFeHBhbmRlZE9wdGlvbnMuYWRkKGlkKTtcbiAgICBlbHNlIG5ld0V4cGFuZGVkT3B0aW9ucy5kZWxldGUoaWQpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgZXhwYW5kZWRPcHRpb25zOiBuZXdFeHBhbmRlZE9wdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzaWRlRWZmZWN0czxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBhY3Rpb246IEFjdGlvbjxPPiB8IEludGVybmFsQWN0aW9uPE8+LFxuICAgIHNvdXJjZTogU291cmNlPE8+LFxuICAgIGludGVybmFsQWN0aW9uczogU3ViamVjdDxJbnRlcm5hbEFjdGlvbjxPPj4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgaWYgKFxuICAgICAgYWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgYWN0aW9uLnR5cGUgPT09ICdzZWFyY2hDaGFuZ2UnIHx8XG4gICAgICAoYWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJyAmJiBhY3Rpb24ub3BlbilcbiAgICApIHtcbiAgICAgIHNvdXJjZShzdGF0ZS5xdWVyeSwgYWN0aW9uKVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkQ29tcGxldGUnLCBkYXRhIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGludGVybmFsQWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWRFcnJvcicsIGVycm9yIH0pO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZHVjZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBhY3Rpb246IEFjdGlvbjxPPiB8IEludGVybmFsQWN0aW9uPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICBjYXNlICdsb2FkQ29tcGxldGUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IGFjdGlvbi5kYXRhLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnbG9hZEVycm9yJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ29wZW5DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIG9wZW46IGFjdGlvbi5vcGVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b2dnbGVPcHRpb25TZWxlY3RlZCc6XG4gICAgICAgIHJldHVybiB0b2dnbGVTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICAgIGNhc2UgJ3NldFNlbGVjdGVkT3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIHNldFNlbGVjdGVkT3B0aW9uKHN0YXRlLCBhY3Rpb24uaWQpO1xuICAgICAgY2FzZSAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHRvZ2dsZVZpc2libGVTZWxlY3RlZChzdGF0ZSk7XG4gICAgICBjYXNlICd0b2dnbGVPcHRpb25FeHBhbmRlZCc6XG4gICAgICAgIHJldHVybiB0b2dnbGVPcHRpb25FeHBhbmRlZChzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, } from '@angular/core';
2
2
  import Fuse from 'fuse.js';
3
3
  import { BehaviorSubject, combineLatest, map } from 'rxjs';
4
+ import { RivSelect } from '../../../input/select/state';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
6
7
  import * as i2 from "../../../input/button/button.component";
@@ -39,19 +40,22 @@ export class TableColumnSettingsSideSheetComponent {
39
40
  keys: ['resolvedName'],
40
41
  ignoreLocation: true,
41
42
  threshold: 0,
43
+ includeMatches: true,
42
44
  });
43
45
  return { fuse, allColumns };
44
46
  })),
45
47
  this.filterQuery,
46
48
  ]).pipe(map(([{ fuse, allColumns }, filterQuery]) => {
47
49
  if (filterQuery) {
48
- const matches = fuse.search(filterQuery).map(match => ({
49
- ...match.item,
50
- highlightIndices: [
51
- ...(match.matches?.find(result => result.key === 'resolvedName')
52
- ?.indices || []),
53
- ],
54
- }));
50
+ const matches = fuse.search(filterQuery).map(match => {
51
+ const firstmatch = match.matches?.find(result => result.key === 'resolvedName');
52
+ return {
53
+ ...match.item,
54
+ highlightIndices: [
55
+ ...(firstmatch?.indices || []).filter(RivSelect.isFuseMatchExact(firstmatch, filterQuery)),
56
+ ],
57
+ };
58
+ });
55
59
  const enabledColumns = matches.filter(column => column.enabled);
56
60
  const disabledColumns = matches.filter(column => !column.enabled);
57
61
  return {
@@ -160,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
160
164
  type: ViewChild,
161
165
  args: ['trigger', { read: ElementRef }]
162
166
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQXNCdkUsTUFBTSxPQUFPLHFDQUFxQztJQU5sRDtRQWtCVyxTQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUErSGxFLHFCQUFnQixHQUFrQixJQUFJLENBQUM7UUFDdkMsc0JBQWlCLEdBQWEsSUFBSSxDQUFDO1FBQ25DLHlCQUFvQixHQUFrQixJQUFJLENBQUM7S0F1QzVDO0lBcEtDLFFBQVE7UUFDTixJQUFJLENB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SyxJQUFJLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDOUIsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELHlCQUF5QixDQUFDLEtBQWE7UUFDckMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztrSUF2TFUscUNBQXFDO3NIQUFyQyxxQ0FBcUMsMExBU2xCLFVBQVUsNkJDeEMxQywwbVBBZ05BOzJGRGpMYSxxQ0FBcUM7a0JBTmpELFNBQVM7K0JBQ0Usc0NBQXNDLG1CQUcvQix1QkFBdUIsQ0FBQyxNQUFNOzhCQVMvQyxPQUFPO3NCQUROLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IEZ1c2UgZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcblxudHlwZSBDb2x1bW5MaXN0PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+ID0gKFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+ICYge1xuICByZXNvbHZlZE5hbWU6IEMgfCBzdHJpbmc7XG4gIGhpZ2hsaWdodEluZGljZXM6IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gIHN0YXRlSW5kZXg6IG51bWJlcjtcbiAgaXNMYXN0UGlubmVkQ29sdW1uOiBib29sZWFuO1xufSlbXTtcblxudHlwZSBDb2x1bW5Hcm91cHM8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPSB7XG4gIGVuYWJsZWRDb2x1bW5zOiBDb2x1bW5MaXN0PEM+O1xuICBkaXNhYmxlZENvbHVtbnM6IENvbHVtbkxpc3Q8Qz47XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbHVtblNldHRpbmdzU2lkZVNoZWV0Q29tcG9uZW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4gaW1wbGVtZW50cyBPbkluaXRcbntcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlRhYmxlLk1hbmFnZXI8UiwgQywgRj47XG5cbiAgQFZpZXdDaGlsZCgndHJpZ2dlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBhbmNob3I/OiBFbGVtZW50UmVmO1xuXG4gIHJlYWRvbmx5IG9wZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICByZWFkb25seSBmaWx0ZXJRdWVyeSA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gIHJlYWRvbmx5IHNlYXJjaGluZyA9IHRoaXMuZmlsdGVyUXVlcnkucGlwZShtYXAocXVlcnkgPT4gISFxdWVyeSkpO1xuXG4gIGNvbHVtbkxpc3Q/OiBPYnNlcnZhYmxlPENvbHVtbkdyb3VwczxDPj47XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5MaXN0ID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmFnZXIhLnN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gcy5kaXNwbGF5LmFsbENvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBzLmRpc3BsYXkuYWxsQ29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbHVtblBpbm5lZCA9XG4gICAgICAgICAgICAgIGkgKyAyIDw9IGNvbHVtbnNMZW5ndGhcbiAgICAgICAgICAgICAgICA/IHMuZGlzcGxheS5hbGxDb2x1bW5zW2kgKyAxXS5waW5uZWRcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIHJlc29sdmVkTmFtZTpcbiAgICAgICAgICAgICAgICBzLmRpc3BsYXkuY29sdW1uTmFtZU1hcC5nZXQoY29sdW1uLm5hbWUpID8/IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICBzdGF0ZUluZGV4OiBpLFxuICAgICAgICAgICAgICBpc0xhc3RQaW5uZWRDb2x1bW46IGNvbHVtbi5waW5uZWQgJiYgIW5leHRDb2x1bW5QaW5uZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhbGxDb2x1bW5zLCB7XG4gICAgICAgICAgICBrZXlzOiBbJ3Jlc29sdmVkTmFtZSddLFxuICAgICAgICAgICAgaWdub3JlTG9jYXRpb246IHRydWUsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgZnVzZSwgYWxsQ29sdW1ucyB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0aGlzLmZpbHRlclF1ZXJ5LFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt7IGZ1c2UsIGFsbENvbHVtbnMgfSwgZmlsdGVyUXVlcnldKSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmdXNlLnNlYXJjaChmaWx0ZXJRdWVyeSkubWFwKG1hdGNoID0+ICh7XG4gICAgICAgICAgICAuLi5tYXRjaC5pdGVtLFxuICAgICAgICAgICAgaGlnaGxpZ2h0SW5kaWNlczogW1xuICAgICAgICAgICAgICAuLi4obWF0Y2gubWF0Y2hlcz8uZmluZChyZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3Jlc29sdmVkTmFtZScpXG4gICAgICAgICAgICAgICAgPy5pbmRpY2VzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGNvbnN0IGVuYWJsZWRDb2x1bW5zID0gbWF0Y2hlcy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lbmFibGVkKTtcbiAgICAgICAgICBjb25zdCBkaXNhYmxlZENvbHVtbnMgPSBtYXRjaGVzLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbmFibGVkQ29sdW1ucyxcbiAgICAgICAgICAgIGRpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsVmlzYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgaGlnaGxpZ2h0SW5kaWNlczogW10sXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IGFsbFZpc2FibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICBjb2x1bW4gPT4gY29sdW1uLmVuYWJsZWQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkQ29sdW1ucyA9IGFsbFZpc2FibGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICBjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5hYmxlZENvbHVtbnM6IGVuYWJsZWRDb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVkQ29sdW1uczogZGlzYWJsZWRDb2x1bW5zLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNvbHVtbkVuYWJsZWRDaGFuZ2UoY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiwgZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJyxcbiAgICAgIGNvbHVtbjogY29sdW1uLm5hbWUsXG4gICAgICBlbmFibGVkLFxuICAgIH0pO1xuICB9XG5cbiAgY29sdW1uUGluQ2hhbmdlKGNvbHVtbjogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sIHBpbm5lZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnLFxuICAgICAgY29sdW1uOiBjb2x1bW4ubmFtZSxcbiAgICAgIHBpbm5lZCxcbiAgICB9KTtcbiAgfVxuICByZXNldFRvRGVmYXVsdCgpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbk1vdmVUbyhjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZScsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLm5hbWUsXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5GcmVlemVVcFRvKGZyZWV6ZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZScsXG4gICAgICBmcmVlemUsXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIGFsbENvbHVtbnNEaXNhYmxlZChjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID09IDAgJiYgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgZW5hYmxlQWxsQ29sdW1ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnLFxuICAgICAgZW5hYmxlZCxcbiAgICB9KTtcbiAgfVxuXG4gIGRyYWdnZWRDb2x1bW5JZHg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkQ29sdW1uTmFtZTogQyB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkT3ZlckNvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ1N0YXJ0KGlkeDogbnVtYmVyLCBuYW1lOiBDKSB7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uSWR4ID0gaWR4O1xuICAgIHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUgPSBuYW1lO1xuICB9XG5cbiAgZHJhZ092ZXIob250b0lkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG9udG9JZHg7XG4gIH1cblxuICBkcm9wKG9udG9JZHg6IG51bWJlciwgc3RhdGVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnLFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLmRyYWdnZWRDb2x1bW5JZHgsXG4gICAgICAgIG5ld0luZGV4OiBzdGF0ZUluZGV4LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGRyb3BFbmFibGVkU3RhdGUoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5OYW1lICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJyxcbiAgICAgICAgY29sdW1uOiB0aGlzLmRyYWdnZWRDb2x1bW5OYW1lLFxuICAgICAgICBlbmFibGVkOiBlbmFibGVkLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnZ2VkQ29sdW1uTmFtZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZWRDb2x1bW5zV2l0aE9mZnNldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG4iLCI8YnV0dG9uICN0cmlnZ2VyIHJpdkJ1dHRvbiAoY2xpY2spPVwib3Blbi5uZXh0KHRydWUpXCI+Q29sdW1uczwvYnV0dG9uPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uTGlzdCB8IGFzeW5jOyBsZXQgY29sdW1uc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib3BlbiB8IGFzeW5jXCI+XG4gICAgPHJpdi1zaWRlLXNoZWV0IChjbG9zZSk9XCJvcGVuLm5leHQoZmFsc2UpOyBmaWx0ZXJRdWVyeS5uZXh0KCcnKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgPHNwYW4+Q29sdW1uczwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuLm5leHQoZmFsc2UpOyBmaWx0ZXJRdWVyeS5uZXh0KCcnKVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICBbbmFtZV09XCInY29sdW1uLXNlYXJjaCdcIlxuICAgICAgICAgIFt2YWx1ZV09XCIoZmlsdGVyUXVlcnkgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWx0ZXJRdWVyeS5uZXh0KCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uc1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCJcbiAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZSh0cnVlKVwiXG4gICAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2x1bW4taGVhZGVyLWxhYmVsXCI+U2hvd24gaW4gdGFibGU8L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsQ29sdW1uc0VuYWJsZWQoY29sdW1ucylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmFibGVBbGxDb2x1bW5zKGZhbHNlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBIaWRlIGFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoaSlcIlxuICAgICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcChpLCBjb2x1bW4uc3RhdGVJbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci10b3BdPVwiXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA+IGlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLWJvdHRvbV09XCJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4IDwgaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uVGVtcGxhdGU7IGNvbnRleHQ6IHsgY29sdW1uIH1cIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5pc0xhc3RQaW5uZWRDb2x1bW4gJiYgIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcm96ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbm5lZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidQaW5JbmFjdGl2ZSdcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkZyb3plbiB0aHJvdWdoIGhlcmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW3JpdlRvb2x0aXBdPVwiJ1VuLWZyZWV6ZSBjb2x1bW5zJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFjb2x1bW4uZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uRnJlZXplVXBUbyhmYWxzZSwgY29sdW1uLnN0YXRlSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmICEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWhlYWRlclwiXG4gICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKHRydWUpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj5ObyBjb2x1bW5zIHNob3duPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiByaXZCdXR0b24gW3ZhcmlhbnRdPVwiJ2dob3N0J1wiIChjbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgIFJlc2V0IHRvIGRlZmF1bHRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGl2aWRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICghKHNlYXJjaGluZyB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICgoc2VhcmNoaW5nIHwgYXN5bmMpICYmIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZShmYWxzZSlcIlxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPkhpZGRlbiBmcm9tIHRhYmxlPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsQ29sdW1uc0Rpc2FibGVkKGNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlQWxsQ29sdW1ucyh0cnVlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTaG93IGFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLmRpc2FibGVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kcm9wcGFibGVdPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KGNvbHVtbi5zdGF0ZUluZGV4LCBjb2x1bW4ubmFtZSlcIlxuICAgICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChkcmFnb3Zlcik9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgZHJhZ092ZXIoaSArIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGRyb3ApPVwiXG4gICAgICAgICAgICAgICAgICBkcm9wKGkgKyBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCwgY29sdW1uLnN0YXRlSW5kZXgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uVGVtcGxhdGU7IGNvbnRleHQ6IHsgY29sdW1uIH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1zaWRlLXNoZWV0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NvbHVtblRlbXBsYXRlIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicmVvcmRlclwiICpuZ0lmPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIj5cbiAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidSZW9yZGVyJ1wiIFtzaXplXT1cIjIwXCI+PC9yaXYtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgIFt0ZXh0XT1cImNvbHVtbi5yZXNvbHZlZE5hbWVcIlxuICAgICAgICBbaW5kaWNlc109XCJjb2x1bW4uaGlnaGxpZ2h0SW5kaWNlc1wiXG4gICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8cml2LW1lbnUgY2xhc3M9XCJoaWRkZW5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVuYWJsZWQgJiYgIWNvbHVtbi5waW5uZWRcIlxuICAgICAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwiY29sdW1uRnJlZXplVXBUbyh0cnVlLCBjb2x1bW4uc3RhdGVJbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgRnJlZXplIHVwIHRvIGNvbHVtblxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uLmVuYWJsZWQgJiYgY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5GcmVlemVVcFRvKGZhbHNlLCAwKVwiXG4gICAgICAgID5cbiAgICAgICAgICBVbi1mcmVlemUgY29sdW1uc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiByaXYtbWVudS1pdGVtIChjbGljayk9XCJjb2x1bW5Nb3ZlVG8oY29sdW1uLCAnc3RhcnQnKVwiPlxuICAgICAgICAgIE1vdmUgdG8gc3RhcnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gcml2LW1lbnUtaXRlbSAoY2xpY2spPVwiY29sdW1uTW92ZVRvKGNvbHVtbiwgJ2VuZCcpXCI+XG4gICAgICAgICAgTW92ZSB0byBlbmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkVuYWJsZWRDaGFuZ2UoY29sdW1uLCAhY29sdW1uLmVuYWJsZWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbHVtbi5lbmFibGVkID8gJ0hpZGUgY29sdW1uJyA6ICdTaG93IGNvbHVtbicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1tZW51PlxuICAgICAgPGJ1dHRvblxuICAgICAgICByaXZCdXR0b25cbiAgICAgICAgW3JpdlRvb2x0aXBdPVwiY29sdW1uLmVuYWJsZWQgPyAnSGlkZSBjb2x1bW4nIDogJ1Nob3cgY29sdW1uJ1wiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgIFtpY29uXT1cImNvbHVtbi5lbmFibGVkID8gJ0V5ZScgOiAnRXllT2ZmJ1wiXG4gICAgICAgIChjbGljayk9XCJjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbiwgIWNvbHVtbi5lbmFibGVkKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7QUFvQnhELE1BQU0sT0FBTyxxQ0FBcUM7SUFObEQ7UUFrQlcsU0FBSSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdEMsY0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBc0lsRSxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFhLElBQUksQ0FBQztRQUNuQyx5QkFBb0IsR0FB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VUFBVTthQUNyQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZ0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFO1lBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQzlCLE9BQU8sRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7a0lBOUxVLHFDQUFxQztzSEFBckMscUNBQXFDLDBMQVNsQixVQUFVLDZCQ3pDMUMsMG1QQWdOQTsyRkRoTGEscUNBQXFDO2tCQU5qRCxTQUFTOytCQUNFLHNDQUFzQyxtQkFHL0IsdUJBQXVCLENBQUMsTUFBTTs4QkFTL0MsT0FBTztzQkFETixLQUFLO2dCQUlOLE1BQU07c0JBREwsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEhpZ2hsaWdodENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3Zpc3VhbGl6YXRpb24vaGlnaGxpZ2h0L2hpZ2hsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBSaXZTZWxlY3QgfSBmcm9tICcuLi8uLi8uLi9pbnB1dC9zZWxlY3Qvc3RhdGUnO1xuXG50eXBlIENvbHVtbkxpc3Q8QyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbj4gPSAoUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4gJiB7XG4gIHJlc29sdmVkTmFtZTogQyB8IHN0cmluZztcbiAgaGlnaGxpZ2h0SW5kaWNlczogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgc3RhdGVJbmRleDogbnVtYmVyO1xuICBpc0xhc3RQaW5uZWRDb2x1bW46IGJvb2xlYW47XG59KVtdO1xuXG50eXBlIENvbHVtbkdyb3VwczxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPiA9IHtcbiAgZW5hYmxlZENvbHVtbnM6IENvbHVtbkxpc3Q8Qz47XG4gIGRpc2FibGVkQ29sdW1uczogQ29sdW1uTGlzdDxDPjtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi10YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uU2V0dGluZ3NTaWRlU2hlZXRDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuPiBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2VGFibGUuTWFuYWdlcjxSLCBDLCBGPjtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGFuY2hvcj86IEVsZW1lbnRSZWY7XG5cbiAgcmVhZG9ubHkgb3BlbiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGZpbHRlclF1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgcmVhZG9ubHkgc2VhcmNoaW5nID0gdGhpcy5maWx0ZXJRdWVyeS5waXBlKG1hcChxdWVyeSA9PiAhIXF1ZXJ5KSk7XG5cbiAgY29sdW1uTGlzdD86IE9ic2VydmFibGU8Q29sdW1uR3JvdXBzPEM+PjtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbHVtbkxpc3QgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWFuYWdlciEuc3RhdGUucGlwZShcbiAgICAgICAgbWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnNMZW5ndGggPSBzLmRpc3BsYXkuYWxsQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHMuZGlzcGxheS5hbGxDb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXh0Q29sdW1uUGlubmVkID1cbiAgICAgICAgICAgICAgaSArIDIgPD0gY29sdW1uc0xlbmd0aFxuICAgICAgICAgICAgICAgID8gcy5kaXNwbGF5LmFsbENvbHVtbnNbaSArIDFdLnBpbm5lZFxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgcmVzb2x2ZWROYW1lOlxuICAgICAgICAgICAgICAgIHMuZGlzcGxheS5jb2x1bW5OYW1lTWFwLmdldChjb2x1bW4ubmFtZSkgPz8gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgIHN0YXRlSW5kZXg6IGksXG4gICAgICAgICAgICAgIGlzTGFzdFBpbm5lZENvbHVtbjogY29sdW1uLnBpbm5lZCAmJiAhbmV4dENvbHVtblBpbm5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGFsbENvbHVtbnMsIHtcbiAgICAgICAgICAgIGtleXM6IFsncmVzb2x2ZWROYW1lJ10sXG4gICAgICAgICAgICBpZ25vcmVMb2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogMCxcbiAgICAgICAgICAgIGluY2x1ZGVNYXRjaGVzOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IGZ1c2UsIGFsbENvbHVtbnMgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgdGhpcy5maWx0ZXJRdWVyeSxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbeyBmdXNlLCBhbGxDb2x1bW5zIH0sIGZpbHRlclF1ZXJ5XSkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyUXVlcnkpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2goZmlsdGVyUXVlcnkpLm1hcChtYXRjaCA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdG1hdGNoID0gbWF0Y2gubWF0Y2hlcz8uZmluZChcbiAgICAgICAgICAgICAgcmVzdWx0ID0+IHJlc3VsdC5rZXkgPT09ICdyZXNvbHZlZE5hbWUnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm1hdGNoLml0ZW0sXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEluZGljZXM6IFtcbiAgICAgICAgICAgICAgICAuLi4oZmlyc3RtYXRjaD8uaW5kaWNlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgUml2U2VsZWN0LmlzRnVzZU1hdGNoRXhhY3QoZmlyc3RtYXRjaCEsIGZpbHRlclF1ZXJ5KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IG1hdGNoZXMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZW5hYmxlZCk7XG4gICAgICAgICAgY29uc3QgZGlzYWJsZWRDb2x1bW5zID0gbWF0Y2hlcy5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4uZW5hYmxlZCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW5hYmxlZENvbHVtbnMsXG4gICAgICAgICAgICBkaXNhYmxlZENvbHVtbnMsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsbFZpc2FibGVDb2x1bW5zID0gYWxsQ29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIGhpZ2hsaWdodEluZGljZXM6IFtdLFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgZW5hYmxlZENvbHVtbnMgPSBhbGxWaXNhYmxlQ29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgY29sdW1uID0+IGNvbHVtbi5lbmFibGVkLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkaXNhYmxlZENvbHVtbnMgPSBhbGxWaXNhYmxlQ29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgY29sdW1uID0+ICFjb2x1bW4uZW5hYmxlZCxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVuYWJsZWRDb2x1bW5zOiBlbmFibGVkQ29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlZENvbHVtbnM6IGRpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbjogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sIGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZScsXG4gICAgICBjb2x1bW46IGNvbHVtbi5uYW1lLFxuICAgICAgZW5hYmxlZCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtblBpbkNoYW5nZShjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwaW5uZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJyxcbiAgICAgIGNvbHVtbjogY29sdW1uLm5hbWUsXG4gICAgICBwaW5uZWQsXG4gICAgfSk7XG4gIH1cbiAgcmVzZXRUb0RlZmF1bHQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucycsXG4gICAgfSk7XG4gIH1cblxuICBjb2x1bW5Nb3ZlVG8oY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPiwgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnLFxuICAgICAgcG9zaXRpb24sXG4gICAgICBjb2x1bW46IGNvbHVtbi5uYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgY29sdW1uRnJlZXplVXBUbyhmcmVlemU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnLFxuICAgICAgZnJlZXplLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH1cblxuICBhbGxDb2x1bW5zRGlzYWJsZWQoY29sdW1uczogQ29sdW1uR3JvdXBzPEM+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICBhbGxDb2x1bW5zRW5hYmxlZChjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPT0gMCAmJiBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGVuYWJsZUFsbENvbHVtbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJyxcbiAgICAgIGVuYWJsZWQsXG4gICAgfSk7XG4gIH1cblxuICBkcmFnZ2VkQ29sdW1uSWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgZHJhZ2dlZENvbHVtbk5hbWU6IEMgfCBudWxsID0gbnVsbDtcbiAgZHJhZ2dlZE92ZXJDb2x1bW5JZHg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRyYWdTdGFydChpZHg6IG51bWJlciwgbmFtZTogQykge1xuICAgIHRoaXMuZHJhZ2dlZENvbHVtbklkeCA9IGlkeDtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5OYW1lID0gbmFtZTtcbiAgfVxuXG4gIGRyYWdPdmVyKG9udG9JZHg6IG51bWJlcikge1xuICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBvbnRvSWR4O1xuICB9XG5cbiAgZHJvcChvbnRvSWR4OiBudW1iZXIsIHN0YXRlSW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJyxcbiAgICAgICAgcHJldmlvdXNJbmRleDogdGhpcy5kcmFnZ2VkQ29sdW1uSWR4LFxuICAgICAgICBuZXdJbmRleDogc3RhdGVJbmRleCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG51bGw7XG4gICAgICB0aGlzLmRyYWdnZWRDb2x1bW5OYW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBkcm9wRW5hYmxlZFN0YXRlKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5kcmFnZ2VkQ29sdW1uTmFtZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZScsXG4gICAgICAgIGNvbHVtbjogdGhpcy5kcmFnZ2VkQ29sdW1uTmFtZSxcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbk5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVkQ29sdW1uc1dpdGhPZmZzZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxufVxuIiwiPGJ1dHRvbiAjdHJpZ2dlciByaXZCdXR0b24gKGNsaWNrKT1cIm9wZW4ubmV4dCh0cnVlKVwiPkNvbHVtbnM8L2J1dHRvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkxpc3QgfCBhc3luYzsgbGV0IGNvbHVtbnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wZW4gfCBhc3luY1wiPlxuICAgIDxyaXYtc2lkZS1zaGVldCAoY2xvc2UpPVwib3Blbi5uZXh0KGZhbHNlKTsgZmlsdGVyUXVlcnkubmV4dCgnJylcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgIDxzcGFuPkNvbHVtbnM8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgIFtpY29uXT1cIidYJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbi5uZXh0KGZhbHNlKTsgZmlsdGVyUXVlcnkubmV4dCgnJylcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxyaXYtc2VhcmNoXG4gICAgICAgICAgW25hbWVdPVwiJ2NvbHVtbi1zZWFyY2gnXCJcbiAgICAgICAgICBbdmFsdWVdPVwiKGZpbHRlclF1ZXJ5IHwgYXN5bmMpIHx8ICcnXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZmlsdGVyUXVlcnkubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgPjwvcml2LXNlYXJjaD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWhlYWRlclwiXG4gICAgICAgICAgICAgIChkcm9wKT1cImRyb3BFbmFibGVkU3RhdGUodHJ1ZSlcIlxuICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPlNob3duIGluIHRhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlQWxsQ29sdW1ucyhmYWxzZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgSGlkZSBhbGxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1ucy5lbmFibGVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kcmFnZ2FibGVdPVwiIShzZWFyY2hpbmcgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZHJvcHBhYmxlXT1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KGNvbHVtbi5zdGF0ZUluZGV4LCBjb2x1bW4ubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdlbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKGkpXCJcbiAgICAgICAgICAgICAgICAgIChkcm9wKT1cImRyb3AoaSwgY29sdW1uLnN0YXRlSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5kcmFnZ2VkLW92ZXItdG9wXT1cIlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNvbHVtbklkeCA9PT0gaSAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggPiBpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci1ib3R0b21dPVwiXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA8IGlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblRlbXBsYXRlOyBjb250ZXh0OiB7IGNvbHVtbiB9XCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uaXNMYXN0UGlubmVkQ29sdW1uICYmICEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4gc2Nyb2xsLXBhZGRpbmdcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnJvemVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaW5uZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInUGluSW5hY3RpdmUnXCIgW3NpemVdPVwiMjBcIj48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Gcm96ZW4gdGhyb3VnaCBoZXJlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtyaXZUb29sdGlwXT1cIidVbi1mcmVlemUgY29sdW1ucydcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidYJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkZyZWV6ZVVwVG8oZmFsc2UsIGNvbHVtbi5zdGF0ZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPT0gMCAmJiAhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIlxuICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEVuYWJsZWRTdGF0ZSh0cnVlKVwiXG4gICAgICAgICAgICAoZHJhZ292ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+Tm8gY29sdW1ucyBzaG93bjwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gcml2QnV0dG9uIFt2YXJpYW50XT1cIidnaG9zdCdcIiAoY2xpY2spPVwicmVzZXRUb0RlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICBSZXNldCB0byBkZWZhdWx0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRpdmlkZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAoIShzZWFyY2hpbmcgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgICAoKHNlYXJjaGluZyB8IGFzeW5jKSAmJiBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDApKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIChkcm9wKT1cImRyb3BFbmFibGVkU3RhdGUoZmFsc2UpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZHJhZ092ZXIoLTEpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbi1oZWFkZXItbGFiZWxcIj5IaWRkZW4gZnJvbSB0YWJsZTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbENvbHVtbnNEaXNhYmxlZChjb2x1bW5zKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuYWJsZUFsbENvbHVtbnModHJ1ZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2hvdyBhbGxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1ucy5kaXNhYmxlZENvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCIhKHNlYXJjaGluZyB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZHJvcHBhYmxlXT1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cImRyYWdTdGFydChjb2x1bW4uc3RhdGVJbmRleCwgY29sdW1uLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwiXG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIGRyYWdPdmVyKGkgKyBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChkcm9wKT1cIlxuICAgICAgICAgICAgICAgICAgZHJvcChpICsgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgsIGNvbHVtbi5zdGF0ZUluZGV4KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblRlbXBsYXRlOyBjb250ZXh0OiB7IGNvbHVtbiB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9yaXYtc2lkZS1zaGVldD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5UZW1wbGF0ZSBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gc2Nyb2xsLXBhZGRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInJlb3JkZXJcIiAqbmdJZj1cIiEoc2VhcmNoaW5nIHwgYXN5bmMpXCI+XG4gICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInUmVvcmRlcidcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgICA8cml2LWhpZ2hsaWdodFxuICAgICAgICBbdGV4dF09XCJjb2x1bW4ucmVzb2x2ZWROYW1lXCJcbiAgICAgICAgW2luZGljZXNdPVwiY29sdW1uLmhpZ2hsaWdodEluZGljZXNcIlxuICAgICAgPjwvcml2LWhpZ2hsaWdodD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPHJpdi1tZW51IGNsYXNzPVwiaGlkZGVuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cImNvbHVtbi5lbmFibGVkICYmICFjb2x1bW4ucGlubmVkXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkZyZWV6ZVVwVG8odHJ1ZSwgY29sdW1uLnN0YXRlSW5kZXgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEZyZWV6ZSB1cCB0byBjb2x1bW5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cImNvbHVtbi5lbmFibGVkICYmIGNvbHVtbi5waW5uZWRcIlxuICAgICAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwiY29sdW1uRnJlZXplVXBUbyhmYWxzZSwgMClcIlxuICAgICAgICA+XG4gICAgICAgICAgVW4tZnJlZXplIGNvbHVtbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gcml2LW1lbnUtaXRlbSAoY2xpY2spPVwiY29sdW1uTW92ZVRvKGNvbHVtbiwgJ3N0YXJ0JylcIj5cbiAgICAgICAgICBNb3ZlIHRvIHN0YXJ0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHJpdi1tZW51LWl0ZW0gKGNsaWNrKT1cImNvbHVtbk1vdmVUbyhjb2x1bW4sICdlbmQnKVwiPlxuICAgICAgICAgIE1vdmUgdG8gZW5kXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJjb2x1bW5FbmFibGVkQ2hhbmdlKGNvbHVtbiwgIWNvbHVtbi5lbmFibGVkKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2x1bW4uZW5hYmxlZCA/ICdIaWRlIGNvbHVtbicgOiAnU2hvdyBjb2x1bW4nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9yaXYtbWVudT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgcml2QnV0dG9uXG4gICAgICAgIFtyaXZUb29sdGlwXT1cImNvbHVtbi5lbmFibGVkID8gJ0hpZGUgY29sdW1uJyA6ICdTaG93IGNvbHVtbidcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWNvbHVtbi5lbmFibGVkXCJcbiAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICBbaWNvbl09XCJjb2x1bW4uZW5hYmxlZCA/ICdFeWUnIDogJ0V5ZU9mZidcIlxuICAgICAgICAoY2xpY2spPVwiY29sdW1uRW5hYmxlZENoYW5nZShjb2x1bW4sICFjb2x1bW4uZW5hYmxlZClcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1993,15 +1993,7 @@ var RivSelect;
1993
1993
  for (const match of (_a = result.matches) !== null && _a !== void 0 ? _a : []) {
1994
1994
  // filter out inexact matches
1995
1995
  if (exactMatch && match.value != null) {
1996
- match.indices = match.indices.filter(matchedIndices => {
1997
- const matchedValue = match
1998
- .value.slice(matchedIndices[0], matchedIndices[1] + 1)
1999
- .toLowerCase();
2000
- // fuse is weird with it's matches. For a text of "planning" and a search string of "plan"
2001
- // the matched value will be "plann" with the extra 'n' because of its fuzzy matching.
2002
- // so just make sure the matched value at least starts with the search string.
2003
- return matchedValue.startsWith(query.search.toLowerCase());
2004
- });
1996
+ match.indices = match.indices.filter(isFuseMatchExact(match, query.search));
2005
1997
  }
2006
1998
  if (match.key === 'title') {
2007
1999
  highlights.titleHighlightIndices = [...match.indices];
@@ -2025,6 +2017,21 @@ var RivSelect;
2025
2017
  return createManager(source, options);
2026
2018
  }
2027
2019
  RivSelect.createInMemoryManager = createInMemoryManager;
2020
+ function isFuseMatchExact(match, search) {
2021
+ return matchedIndices => {
2022
+ const matchedValue = match
2023
+ .value.slice(matchedIndices[0], matchedIndices[1] + 1)
2024
+ .toLowerCase();
2025
+ // fuse is weird with it's matches. For a text of "planning" and a search string of "plan"
2026
+ // the matched value will be "plann" with the extra 'n' because of its fuzzy matching.
2027
+ // so just make sure the matched value at least starts with the search string.
2028
+ // it's extra weird because for a text of "analytics" and a search string of "nalytics",
2029
+ // the matched value will be "analytics". So we just need to make sure the the matched value
2030
+ // includes the search string because there might be extra stuff on the front or the end.
2031
+ return matchedValue.includes(search.toLowerCase());
2032
+ };
2033
+ }
2034
+ RivSelect.isFuseMatchExact = isFuseMatchExact;
2028
2035
  //////////////////////////////////
2029
2036
  // State reducer (with helpers) //
2030
2037
  //////////////////////////////////
@@ -5462,6 +5469,7 @@ class TableColumnSettingsSideSheetComponent {
5462
5469
  keys: ['resolvedName'],
5463
5470
  ignoreLocation: true,
5464
5471
  threshold: 0,
5472
+ includeMatches: true,
5465
5473
  });
5466
5474
  return { fuse, allColumns };
5467
5475
  })),
@@ -5469,10 +5477,11 @@ class TableColumnSettingsSideSheetComponent {
5469
5477
  ]).pipe(map(([{ fuse, allColumns }, filterQuery]) => {
5470
5478
  if (filterQuery) {
5471
5479
  const matches = fuse.search(filterQuery).map(match => {
5472
- var _a, _b;
5473
- return (Object.assign(Object.assign({}, match.item), { highlightIndices: [
5474
- ...(((_b = (_a = match.matches) === null || _a === void 0 ? void 0 : _a.find(result => result.key === 'resolvedName')) === null || _b === void 0 ? void 0 : _b.indices) || []),
5475
- ] }));
5480
+ var _a;
5481
+ const firstmatch = (_a = match.matches) === null || _a === void 0 ? void 0 : _a.find(result => result.key === 'resolvedName');
5482
+ return Object.assign(Object.assign({}, match.item), { highlightIndices: [
5483
+ ...((firstmatch === null || firstmatch === void 0 ? void 0 : firstmatch.indices) || []).filter(RivSelect.isFuseMatchExact(firstmatch, filterQuery)),
5484
+ ] });
5476
5485
  });
5477
5486
  const enabledColumns = matches.filter(column => column.enabled);
5478
5487
  const disabledColumns = matches.filter(column => !column.enabled);