@coolon/angular-ui-powerups 16.1.0-alpha.304 → 16.1.0-alpha.306

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.
@@ -19,29 +19,43 @@ export class HighlightPipe extends GarbageCollector {
19
19
  ngOnDestroy() {
20
20
  this.dispose();
21
21
  }
22
+ /** The markup last produced, and the trusted value wrapping it. */
23
+ lastHtml;
24
+ lastResult;
22
25
  /**
23
26
  * Highlights occurrences of `searchModel` within `value`.
24
27
  *
28
+ * The pipe is impure, so it runs on every change detection of its view. It hands back the same
29
+ * trusted value while the markup is unchanged: a fresh one each time would read as a new binding,
30
+ * and an `[innerHTML]` would replace its text on every pass though nothing about it had changed.
31
+ *
25
32
  * @param value The string to search within.
26
33
  * @param searchTextFilter Intercept the search text to allow matching against substrings.
27
34
  */
28
35
  transform(value, searchTextFilter) {
36
+ const html = this.highlight(value, searchTextFilter);
37
+ if (html !== this.lastHtml) {
38
+ this.lastHtml = html;
39
+ this.lastResult = this.sanitizer.bypassSecurityTrustHtml(html);
40
+ }
41
+ return this.lastResult;
42
+ }
43
+ highlight(value, searchTextFilter) {
29
44
  const sanitisedValue = escape(value);
30
45
  const rawModelValue = this.highlightContext?.aupHighlightTextModel?.value ?? '';
31
46
  const filtered = searchTextFilter ? searchTextFilter(rawModelValue) : rawModelValue;
32
47
  const searchText = escape(filtered ?? '');
33
48
  if (isEmpty(searchText) || !isString(value)) {
34
- return this.sanitizer.bypassSecurityTrustHtml(sanitisedValue);
49
+ return sanitisedValue;
35
50
  }
36
51
  // Match in a case insensitive manner
37
52
  const re = new RegExp(escapeStringRegexp(searchText), 'gi');
38
53
  const match = sanitisedValue.match(re);
39
54
  // If there's no match, just return the original value.
40
55
  if (!match) {
41
- return this.sanitizer.bypassSecurityTrustHtml(sanitisedValue);
56
+ return sanitisedValue;
42
57
  }
43
- const result = sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
44
- return this.sanitizer.bypassSecurityTrustHtml(result);
58
+ return sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
45
59
  }
46
60
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, deps: [{ token: i1.DomSanitizer }, { token: i2.HighlightTextModelDirective, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
47
61
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, name: "aupHighlight", pure: false });
@@ -55,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
55
69
  }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.HighlightTextModelDirective, decorators: [{
56
70
  type: Optional
57
71
  }] }]; } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9kaXJlY3RpdmVzL2hpZ2hsaWdodC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtIQUFrSDtBQUNsSCxPQUFPLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBTzdFLE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCO0lBRTdCO0lBQ3FCO0lBRHpDLFlBQW9CLFNBQXVCLEVBQ0YsZ0JBQThDO1FBQ3JGLEtBQUssRUFBRSxDQUFDO1FBRlUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7SUFFdkYsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEtBQVUsRUFBRSxnQkFBNEQ7UUFFaEYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLE1BQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3hGLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ3BGLE1BQU0sVUFBVSxHQUFXLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbEQsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQscUNBQXFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDL0Q7UUFHRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO3VHQXpDVSxhQUFhO3FHQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLElBQUksRUFBRSxLQUFLO2lCQUNaOzswQkFJYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBBbmd1bGFyIFBpcGUgdHJhbnNmb3JtIHNpZ25hdHVyZSB1c2VzIGFueSBieSBjb252ZW50aW9uICovXG5pbXBvcnQgeyBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEdhcmJhZ2VDb2xsZWN0b3IsIFZhbHVlTW9kZWwgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gJ2VzY2FwZS1zdHJpbmctcmVnZXhwJztcbmltcG9ydCB7IGVzY2FwZSwgaXNFbXB0eSwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtIaWdobGlnaHRUZXh0TW9kZWxEaXJlY3RpdmV9IGZyb20gJy4vaGlnaGxpZ2h0LXRleHQtbW9kZWwuZGlyZWN0aXZlJztcblxuXG5AUGlwZSh7XG4gIG5hbWU6ICdhdXBIaWdobGlnaHQnLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRQaXBlIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRDb250ZXh0PzogSGlnaGxpZ2h0VGV4dE1vZGVsRGlyZWN0aXZlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgb2NjdXJyZW5jZXMgb2YgYHNlYXJjaE1vZGVsYCB3aXRoaW4gYHZhbHVlYC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzdHJpbmcgdG8gc2VhcmNoIHdpdGhpbi5cbiAgICogQHBhcmFtIHNlYXJjaFRleHRGaWx0ZXIgSW50ZXJjZXB0IHRoZSBzZWFyY2ggdGV4dCB0byBhbGxvdyBtYXRjaGluZyBhZ2FpbnN0IHN1YnN0cmluZ3MuXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgc2VhcmNoVGV4dEZpbHRlcj86IChyYXc6c3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogYW55IHtcblxuICAgIGNvbnN0IHNhbml0aXNlZFZhbHVlID0gZXNjYXBlKHZhbHVlKTtcblxuICAgIGNvbnN0IHJhd01vZGVsVmFsdWU6IHN0cmluZyA9IHRoaXMuaGlnaGxpZ2h0Q29udGV4dD8uYXVwSGlnaGxpZ2h0VGV4dE1vZGVsPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHNlYXJjaFRleHRGaWx0ZXIgPyBzZWFyY2hUZXh0RmlsdGVyKHJhd01vZGVsVmFsdWUpIDogcmF3TW9kZWxWYWx1ZTtcbiAgICBjb25zdCBzZWFyY2hUZXh0OiBzdHJpbmcgPSBlc2NhcGUoZmlsdGVyZWQgPz8gJycpO1xuXG4gICAgaWYgKGlzRW1wdHkoc2VhcmNoVGV4dCkgfHwgIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHNhbml0aXNlZFZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBNYXRjaCBpbiBhIGNhc2UgaW5zZW5zaXRpdmUgbWFubmVyXG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGVzY2FwZVN0cmluZ1JlZ2V4cChzZWFyY2hUZXh0KSwgJ2dpJyk7XG4gICAgY29uc3QgbWF0Y2ggPSBzYW5pdGlzZWRWYWx1ZS5tYXRjaChyZSk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHNhbml0aXNlZFZhbHVlKTtcbiAgICB9XG5cblxuICAgIGNvbnN0IHJlc3VsdCA9IHNhbml0aXNlZFZhbHVlLnJlcGxhY2UocmUsICc8bWFyaz4nICsgbWF0Y2hbMF0gKyAnPC9tYXJrPicpO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChyZXN1bHQpO1xuICB9XG59XG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9kaXJlY3RpdmVzL2hpZ2hsaWdodC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtIQUFrSDtBQUNsSCxPQUFPLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBTzdFLE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCO0lBRTdCO0lBQ3FCO0lBRHpDLFlBQW9CLFNBQXVCLEVBQ0YsZ0JBQThDO1FBQ3JGLEtBQUssRUFBRSxDQUFDO1FBRlUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7SUFFdkYsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELG1FQUFtRTtJQUMzRCxRQUFRLENBQVU7SUFDbEIsVUFBVSxDQUFNO0lBRXhCOzs7Ozs7Ozs7T0FTRztJQUNILFNBQVMsQ0FBQyxLQUFVLEVBQUUsZ0JBQTREO1FBQ2hGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDckQsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEU7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFVLEVBQUUsZ0JBQTREO1FBQ3hGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4RixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNwRixNQUFNLFVBQVUsR0FBVyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWxELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNDLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO1FBRUQscUNBQXFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLGNBQWMsQ0FBQztTQUN2QjtRQUVELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO3VHQXZEVSxhQUFhO3FHQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBSnpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLElBQUksRUFBRSxLQUFLO2lCQUNaOzswQkFJYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBBbmd1bGFyIFBpcGUgdHJhbnNmb3JtIHNpZ25hdHVyZSB1c2VzIGFueSBieSBjb252ZW50aW9uICovXG5pbXBvcnQgeyBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEdhcmJhZ2VDb2xsZWN0b3IsIFZhbHVlTW9kZWwgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgZXNjYXBlU3RyaW5nUmVnZXhwIGZyb20gJ2VzY2FwZS1zdHJpbmctcmVnZXhwJztcbmltcG9ydCB7IGVzY2FwZSwgaXNFbXB0eSwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtIaWdobGlnaHRUZXh0TW9kZWxEaXJlY3RpdmV9IGZyb20gJy4vaGlnaGxpZ2h0LXRleHQtbW9kZWwuZGlyZWN0aXZlJztcblxuXG5AUGlwZSh7XG4gIG5hbWU6ICdhdXBIaWdobGlnaHQnLFxuICBwdXJlOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRQaXBlIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRDb250ZXh0PzogSGlnaGxpZ2h0VGV4dE1vZGVsRGlyZWN0aXZlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqIFRoZSBtYXJrdXAgbGFzdCBwcm9kdWNlZCwgYW5kIHRoZSB0cnVzdGVkIHZhbHVlIHdyYXBwaW5nIGl0LiAqL1xuICBwcml2YXRlIGxhc3RIdG1sPzogc3RyaW5nO1xuICBwcml2YXRlIGxhc3RSZXN1bHQ6IGFueTtcblxuICAvKipcbiAgICogSGlnaGxpZ2h0cyBvY2N1cnJlbmNlcyBvZiBgc2VhcmNoTW9kZWxgIHdpdGhpbiBgdmFsdWVgLlxuICAgKlxuICAgKiBUaGUgcGlwZSBpcyBpbXB1cmUsIHNvIGl0IHJ1bnMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBvZiBpdHMgdmlldy4gSXQgaGFuZHMgYmFjayB0aGUgc2FtZVxuICAgKiB0cnVzdGVkIHZhbHVlIHdoaWxlIHRoZSBtYXJrdXAgaXMgdW5jaGFuZ2VkOiBhIGZyZXNoIG9uZSBlYWNoIHRpbWUgd291bGQgcmVhZCBhcyBhIG5ldyBiaW5kaW5nLFxuICAgKiBhbmQgYW4gYFtpbm5lckhUTUxdYCB3b3VsZCByZXBsYWNlIGl0cyB0ZXh0IG9uIGV2ZXJ5IHBhc3MgdGhvdWdoIG5vdGhpbmcgYWJvdXQgaXQgaGFkIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEBwYXJhbSBzZWFyY2hUZXh0RmlsdGVyIEludGVyY2VwdCB0aGUgc2VhcmNoIHRleHQgdG8gYWxsb3cgbWF0Y2hpbmcgYWdhaW5zdCBzdWJzdHJpbmdzLlxuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHNlYXJjaFRleHRGaWx0ZXI/OiAocmF3OnN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGFueSB7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuaGlnaGxpZ2h0KHZhbHVlLCBzZWFyY2hUZXh0RmlsdGVyKTtcbiAgICBpZiAoaHRtbCAhPT0gdGhpcy5sYXN0SHRtbCkge1xuICAgICAgdGhpcy5sYXN0SHRtbCA9IGh0bWw7XG4gICAgICB0aGlzLmxhc3RSZXN1bHQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdFJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgaGlnaGxpZ2h0KHZhbHVlOiBhbnksIHNlYXJjaFRleHRGaWx0ZXI/OiAocmF3OnN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2FuaXRpc2VkVmFsdWUgPSBlc2NhcGUodmFsdWUpO1xuXG4gICAgY29uc3QgcmF3TW9kZWxWYWx1ZTogc3RyaW5nID0gdGhpcy5oaWdobGlnaHRDb250ZXh0Py5hdXBIaWdobGlnaHRUZXh0TW9kZWw/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gc2VhcmNoVGV4dEZpbHRlciA/IHNlYXJjaFRleHRGaWx0ZXIocmF3TW9kZWxWYWx1ZSkgOiByYXdNb2RlbFZhbHVlO1xuICAgIGNvbnN0IHNlYXJjaFRleHQ6IHN0cmluZyA9IGVzY2FwZShmaWx0ZXJlZCA/PyAnJyk7XG5cbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXh0KSB8fCAhaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICByZXR1cm4gc2FuaXRpc2VkVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTWF0Y2ggaW4gYSBjYXNlIGluc2Vuc2l0aXZlIG1hbm5lclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChlc2NhcGVTdHJpbmdSZWdleHAoc2VhcmNoVGV4dCksICdnaScpO1xuICAgIGNvbnN0IG1hdGNoID0gc2FuaXRpc2VkVmFsdWUubWF0Y2gocmUpO1xuXG4gICAgLy8gSWYgdGhlcmUncyBubyBtYXRjaCwganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLlxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBzYW5pdGlzZWRWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2FuaXRpc2VkVmFsdWUucmVwbGFjZShyZSwgJzxtYXJrPicgKyBtYXRjaFswXSArICc8L21hcms+Jyk7XG4gIH1cbn1cbiJdfQ==
@@ -67,11 +67,16 @@ export class NavigationSession extends GarbageCollector {
67
67
  const snapshot = this.urlService.parseUrl(url);
68
68
  const filteredSegments = Array.from(this._visitSegments.values())
69
69
  .filter(it => snapshot.containsVisitSegment(it));
70
- const visit = Visit.fromSegments(filteredSegments);
70
+ const activeVisit = this.context.activeVisit;
71
+ // A redirect back to the place already showing ends on a route Angular never re-guards, so
72
+ // none of this session's segments survive the filter: the navigation is a return to the
73
+ // active visit.
74
+ const visit = filteredSegments.length > 0
75
+ ? Visit.fromSegments(filteredSegments)
76
+ : Visit.fromSegments(activeVisit?.segments.filter(it => snapshot.containsVisitSegment(it)) ?? []);
71
77
  // Angular only runs guards for routes whose parameters changed, so a place that stays active
72
78
  // (e.g. the parent when Back only changes the child) never reaches this session. Keep its
73
79
  // segment from the active visit, otherwise Visit fills it in with empty parameters.
74
- const activeVisit = this.context.activeVisit;
75
80
  const segments = visit.segments.map(segment => this._visitSegments.has(segment.placeDefinition)
76
81
  ? segment
77
82
  : activeVisit?.getSegmentFor(segment.placeDefinition) ?? segment);
@@ -190,4 +195,4 @@ export class NavigationSession extends GarbageCollector {
190
195
  return context;
191
196
  }
192
197
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFHMUY7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLGdCQUFnQjtJQVd6QztJQUFxQztJQVQxRCxpQkFBaUIsR0FBYSxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBRTFELDZCQUE2QixHQUFHLElBQUksR0FBRyxFQUFxRCxDQUFDO0lBSTdGLG1CQUFtQixDQUFxQjtJQUVoRCxZQUFxQixPQUEwQixFQUFXLFdBQW1CO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFcsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFBVyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUUzRSw4Q0FBOEM7UUFDOUMsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLHlDQUF5QyxFQUFFLENBQUM7UUFDN0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsK0ZBQStGO1lBQy9GLDhGQUE4RjtZQUM5RixpR0FBaUc7WUFDakcsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENB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QjtRQUNqQixzRUFBc0U7UUFDdEUsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMscUNBQXFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlckV2ZW50fSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0dhcmJhZ2VDb2xsZWN0b3IsIGxhbmcsIExvZ2dlcn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25Db250ZXh0fSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24tc2VydmljZS1yb3V0aW5nLWFkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHtQbGFjZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3BsYWNlLWNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUge1BsYWNlRGVmaW5pdGlvbn0gZnJvbSBcIi4uLy4uL3BsYWNlLWRlZmluaXRpb25cIjtcbmltcG9ydCB0eXBlIHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXJsLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtVcmxTbmFwc2hvdH0gZnJvbSBcIi4uLy4uL3VybC1zbmFwc2hvdFwiO1xuaW1wb3J0IHtWaXNpdH0gZnJvbSBcIi4uLy4uL3Zpc2l0XCI7XG5pbXBvcnQgdHlwZSB7VmlzaXRTZWdtZW50fSBmcm9tIFwiLi4vLi4vdmlzaXQtc2VnbWVudFwiO1xuaW1wb3J0IHtQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJ9IGZyb20gXCIuLi9wbGFjZS1jb21wb25lbnQtZGVhY3RpdmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHtOYXZpZ2F0aW9uQ29udGV4dH0gZnJvbSBcIi4vbmF2aWdhdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXRlc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF2aWdhdGlvblNlc3Npb24gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBkZWJ1Z1Byb3BlcnR5S2V5czogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfdmlzaXRTZWdtZW50cyA9IG5ldyBNYXA8UGxhY2VEZWZpbml0aW9uLCBWaXNpdFNlZ21lbnQ+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycyA9IG5ldyBNYXA8UGxhY2VDb21wb25lbnQsIFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcj4oKTtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNQb3BTdGF0ZTogYm9vbGVhbjtcblxuXG4gIHByaXZhdGUgX2ludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25Db250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgbmV3ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApXG4gICAgLy8gVE9ETzogY2FuIEkgZ2V0IGF3YXkgd2l0aG91dCBjcmVhdGluZyBvbmUgZXZlcnkgdGltZT9cbiAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgLy8gdGhlIGludGVyYWN0aW9uIGNvbnRleHQgY2FuIGJlIGRldGFjaGVkIGR1cmluZyB0aGUgYmFjayBidXR0b24gY2FuY2VsbGF0aW9uIHN0YXRlIHRyYW5zaXRpb25cbiAgICAgIC8vIGFzIHRoZSB0cmFuc2l0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCBhY3Rpdml0eUNhbmNlbGxhdGlvbiBpc24ndC4gIE90aGVyd2lzZSBkaXNwb3NlIHdpbGwgYmVcbiAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkgY2FuY2VsIGlmIHRoZSBjb250ZXh0IGlzIGRpc3Bvc2VkIHNvIHdlIGRvbid0IGhhdmUgd29ycnkgYWJvdXQgZGV0YWNoaW5nIGV0Yy5cbiAgICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0ludGVyYWN0aW9uU3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJydXB0aWJsZSBzZXNzaW9ucyBhcmUgaW50ZXJuYWwgaG91c2VrZWVwaW5nIG5hdmlnYXRpb25zIChlLmcuIGludGVyYWN0aW9uLWlkXG4gICAqIHN5bmNocm9uaXNhdGlvbikuIEhpc3RvcmljYWxseSBvbmx5IHRoZXNlIHF1ZXVlZCBhbiBvdmVybGFwcGluZyBuYXZpZ2F0aW9uIHdoaWxlIHJlYWxcbiAgICogbmF2aWdhdGlvbnMgZHJvcHBlZCBpdDsgQUxMIG92ZXJsYXBwaW5nIG5hdmlnYXRpb25zIG5vdyBxdWV1ZSAoc2VlXG4gICAqIFBsYWNlUm91dGVyLmhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbiksIHNvIHRoaXMgZmxhZyBpcyBkaWFnbm9zdGljIG9ubHkuXG4gICAqL1xuICBnZXQgaXNJbnRlcnJ1cHRpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzSW50ZXJhY3Rpb25TeW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgZ2V0IHVybFNlcnZpY2UoKTogVXJsU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC51cmxTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aW9uU2VydmljZUFkYXB0ZXIoKTogSW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyO1xuICB9XG5cbiAgaW5pdGlhbGlzZVZpc2l0U2VnbWVudHModmlzaXQ6IFZpc2l0KSB7XG4gICAgdmlzaXQuc2VnbWVudHMuZm9yRWFjaChpdCA9PiB0aGlzLnVwZGF0ZVZpc2l0U2VnbWVudChpdCkpXG4gIH1cblxuICB1cGRhdGVWaXNpdFNlZ21lbnQoc2VnbWVudDogVmlzaXRTZWdtZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2coYHVwZGF0ZVZpc2l0U2VnbWVudGAsIHNlZ21lbnQudG9EZWJ1Z1N0cmluZygpKTtcbiAgICB0aGlzLl92aXNpdFNlZ21lbnRzLnNldChzZWdtZW50LnBsYWNlRGVmaW5pdGlvbiwgc2VnbWVudCk7XG4gIH1cblxuXG4gIGdldFZpc2l0U2VnbWVudEZvcihwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLl92aXNpdFNlZ21lbnRzLmdldChwbGFjZURlZik7XG4gICAgLy8gY29uc29sZS5sb2coYEdldHRpbmcgdmlzaXQgZm9yICR7cGxhY2VEZWYuY29tcG9uZW50Lm5hbWV9YCwge3Zpc2l0fSk7XG4gICAgcmV0dXJuIHZpc2l0O1xuICB9XG5cbiAgY3JlYXRlVXBkYXRlZFZpc2l0KHVybDogc3RyaW5nKSA6VmlzaXQge1xuICAgIC8vIFRoZSB2aXNpdCBzZWdtZW50cyBjYW4gaGF2ZSBhcmJpcmFyeSBwbGFjZXMgaW4gdGhlbSBhZnRlciByZWRpcmVjdHNcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGZpbHRlciB0aGVtIGJhc2VkIG9uIHRoZSBmaW5hbCB1cmwuXG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnVybFNlcnZpY2UucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmaWx0ZXJlZFNlZ21lbnRzID0gQXJyYXkuZnJvbSh0aGlzLl92aXNpdFNlZ21lbnRzLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihpdCA9PiBzbmFwc2hvdC5jb250YWluc1Zpc2l0U2VnbWVudChpdCkpO1xuICAgIGNvbnN0IHZpc2l0ID0gVmlzaXQuZnJvbVNlZ21lbnRzKGZpbHRlcmVkU2VnbWVudHMpO1xuICAgIC8vIEFuZ3VsYXIgb25seSBydW5zIGd1YXJkcyBmb3Igcm91dGVzIHdob3NlIHBhcmFtZXRlcnMgY2hhbmdlZCwgc28gYSBwbGFjZSB0aGF0IHN0YXlzIGFjdGl2ZVxuICAgIC8vIChlLmcuIHRoZSBwYXJlbnQgd2hlbiBCYWNrIG9ubHkgY2hhbmdlcyB0aGUgY2hpbGQpIG5ldmVyIHJlYWNoZXMgdGhpcyBzZXNzaW9uLiBLZWVwIGl0c1xuICAgIC8vIHNlZ21lbnQgZnJvbSB0aGUgYWN0aXZlIHZpc2l0LCBvdGhlcndpc2UgVmlzaXQgZmlsbHMgaXQgaW4gd2l0aCBlbXB0eSBwYXJhbWV0ZXJzLlxuICAgIGNvbnN0IGFjdGl2ZVZpc2l0ID0gdGhpcy5jb250ZXh0LmFjdGl2ZVZpc2l0O1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdmlzaXQuc2VnbWVudHMubWFwKHNlZ21lbnQgPT4gdGhpcy5fdmlzaXRTZWdtZW50cy5oYXMoc2VnbWVudC5wbGFjZURlZmluaXRpb24pXG4gICAgICA/IHNlZ21lbnRcbiAgICAgIDogYWN0aXZlVmlzaXQ/LmdldFNlZ21lbnRGb3Ioc2VnbWVudC5wbGFjZURlZmluaXRpb24pID8/IHNlZ21lbnQpO1xuICAgIHJldHVybiBWaXNpdC5mcm9tU2VnbWVudHMoc2VnbWVudHMpO1xuICB9XG5cbiAgZ2V0IGNhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICB9XG5cbiAgbm90aWZ5QWN0aXZlKCkge1xuICAgIC8vIG5vb3AuXG4gIH1cblxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgIC8vIG5hdmlnYXRpb24gc2Vzc2lvbnMgY2FuIGhhdmUgbWFueSBjYW5jZWwgc3RhcnQgY3ljbGVzIGR1ZSB0byBwbGFjZSBndWFyZCByZWRpcmVjdHNcbiAgICB0aGlzLmlnbm9yZShldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblVybENoYW5nZSh1cmw6IHN0cmluZykge1xuICAgIC8vIE5vcm1hbGx5IHdlIGp1c3QgaWdub3JlIHRoZXNlIGJ1dCB0aGV5IGFyZSB0aGUgb25seSB3YXkgb2YgZGV0ZWN0aW5nIGlmIHRoZSBiYWNrIGJ1dHRvblxuICAgIC8vIHdhcyBjbGlja2VkIGR1cmluZyBhIGNhbkRlYWN0aXZhdGUgcHJvbWlzZS5cbiAgICAvLyAxLiBhIHJvdXRlIGlzIGluIHByb2dyZXNzIGFuZCBhd2FpdGluZyBhIGNhbkRlYWN0aXZhdGVHdWFyZFxuICAgIC8vIDIuIHRoZSB1c2VyIHRoZSBjbGlja3MgdGhlIGJhY2sgYnV0dG9uLlxuICAgIC8vIFNvIHRvIGhhbmRsZSB0aGF0IHNjZW5hcmlvIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UndmUgZ290IGEgY2FuIGRlYWN0aXZhdGUgaW50ZXJhY3Rpb24gaW5cbiAgICAvLyBwcm9ncmVzcyBhbmQgdGhlIGRvIHRoZSBhcHByb3ByaWF0ZSBjbGVhbiB1cC5cbiAgICBpZiAodGhpcy5jYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0ICYmIHRoaXMuY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dC5pc0FjdGl2ZSgpKSB7XG4gICAgICB0aGlzLmNhbmNlbENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbih1cmwpO1xuICAgIH1cbiAgfVxuXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBnZXRWaXNpdFNlZ21lbnRzKCk6IFZpc2l0U2VnbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl92aXNpdFNlZ21lbnRzLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbGxlZ2FsVHJhbnNpdGlvbjxSPihtZXNzYWdlOiBzdHJpbmcgfCBSb3V0ZXJFdmVudCk6IFIge1xuICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgJHttZXNzYWdlLnRvU3RyaW5nKCl9IG5vdCBzdXBwb3J0ZWQgYnkgJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsLCBvcHRpb25zOiB7IHJlcGxhY2VDdXJyZW50OiBib29sZWFuIH0gPSB7IHJlcGxhY2VDdXJyZW50OiBmYWxzZSB9KSB7XG4gICAgLy8gY29uc29sZS5sb2coYC0tLT4gcmVzZXR0aW5nIGJyb3dzZXIgbG9jYXRpb24gdG86ICR7dXJsfWApO1xuICAgIHRoaXMudXJsU2VydmljZS5yZXNldEJyb3dzZXJMb2NhdGlvbih1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJvdGVjdGVkIHJlcGFpckJyb3dzZXJIaXN0b3J5QW5kVXJsQWZ0ZXJHdWFyZENhbmNlbGxhdGlvbihwb3BwZWRIaXN0b3J5VG9SZXBsYWNlOiBzdHJpbmcsIGFjdGl2ZVVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gSW1wb3J0YW50OiBJIHRyaWVkIHRvIHBlcmZvcm0gdGhpcyBmaXggYXQgYSBsYXRlciBwb2ludCBpbnQgaGUgcm91dGluZyBjeWNsZSBidXQgaXQgY3JlYXRlZCBhbGwga2luZHMgb2ZcbiAgICAvLyBzdHJhbmdlbmVzcy5cbiAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oXCJXT1JLLUFST1VORDogVXBkYXRpbmcgYnJvd3NlciBsb2NhdGlvbiBhZnRlciBwb3Agc3RhdGUgLSBzZWUgYW5ndWxhciBpc3N1ZSAjMTM1ODZcIik7XG4gICAgLy8gY29uc29sZS5sb2coYHJlcGxhY2luZyAke3RoaXMudXJsU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25VcmxTbmFwc2hvdCgpLnVybH0gd2l0aCAke3BvcHBlZEhpc3RvcnlUb1JlcGxhY2V9YCk7XG4gICAgdGhpcy51cmxTZXJ2aWNlLnJlc2V0QnJvd3NlckxvY2F0aW9uKHBvcHBlZEhpc3RvcnlUb1JlcGxhY2UsIHsgcmVwbGFjZUN1cnJlbnQ6IHRydWUgfSk7XG4gICAgLy8gY29uc29sZS5sb2coYHB1c2hpbmcgJHthY3RpdmVVcmx9IGJhY2sgb250byB0aGUgaGlzdG9yeS5gKTtcbiAgICB0aGlzLnVybFNlcnZpY2UucmVzZXRCcm93c2VyTG9jYXRpb24oYWN0aXZlVXJsLCB7IHJlcGxhY2VDdXJyZW50OiBmYWxzZSB9KTtcbiAgfVxuXG5cbiAgaWdub3JlKGV2ZW50OiBSb3V0ZXJFdmVudCwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgcmVhc29uID0gcmVhc29uID8gYCAtPiAke3JlYXNvbn1gIDogXCJcIjtcbiAgICAvLyBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYElnbm9yaW5nIHJvdXRlciBldmVudCR7cmVhc29ufTogJHtldmVudC5jb25zdHJ1Y3Rvci5uYW1lfSAtPiAke2V2ZW50LnVybH0gOjogJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KCR7dGhpcy5kZWJ1Z1N0YXRlKCl9KWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVidWdTdGF0ZShwcm9wZXJ0aWVzPzogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gKHByb3BlcnRpZXMgfHwgdGhpcy5kZWJ1Z1Byb3BlcnR5S2V5cykubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIGAke3B9OiAke3RoaXNbcF19YDtcbiAgICB9KS5qb2luKFwiLCBcIik7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBjYW5EZWFjdGl2YXRlUGxhY2UoJHtjb21wb25lbnQucGxhY2VEZWZpbml0aW9uLnBhdGh9LCAke2N1cnJlbnRVcmwudXJsfSAtPiAke25leHRVcmwudXJsfSlgKTtcbiAgICAvLyBsb29rdXAgdGhlIGhhbmRsZXIgYW5kIGNyZWF0ZSBpdCBpZiB3ZSd2ZSBub3Qgc2VlbiBpdCB5ZXRcbiAgICBsZXQgaGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuZ2V0KGNvbXBvbmVudCk7XG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICBjb25zdCBpc1ByaW1hcnlIYW5kbGVyID0gdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5zaXplID09PSAwOyAvLyBvbmx5IHByaW1hcnkgaGFuZGxlciBjYW5jZWxzIHRoZSBhcHAgbW9kZWwgaW50ZXJhdGlvbnNcbiAgICAgIGhhbmRsZXIgPSBuZXcgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyKGNvbXBvbmVudCwgdGhpcywgaXNQcmltYXJ5SGFuZGxlcik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLnNldChjb21wb25lbnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlci5jYW5EZWFjdGl2YXRlKGN1cnJlbnRVcmwsIG5leHRVcmwpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIGNhbkRlYWN0aXZhdGVQbGFjZSgke2NvbXBvbmVudC5wbGFjZURlZmluaXRpb24ucGF0aH0pOiAke3Jlc3VsdH1gKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb24obmV3VXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGJhY2sgYnV0dG9uIHByZXNzZWQgZHVyaW5nIG5hdmlnYXRpb24gc2Vzc2lvbiBpbnRlcmFjdGlvbiBwcm9taXNlYCk7XG4gICAgLy8gZGV0YWNoIHRoZSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBzZXNzaW9uIHNvIGl0IGRvZXNuJ3QgZ2V0IGRpc3Bvc2VkIHVudGlsIHRoZSBhY3Rpdml0eSBoYXMgZmluaXNoZWRcbiAgICAvLyBhbGwgaXQncyB0aGluZ3MuXG4gICAgY29uc3QgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCA9IHRoaXMuZGV0YWNoQ2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgIC8vIFRPRE86IEkgbmVlZCB0byBtYWtlIHRoZSBleGNsdXNpdmUgaW50ZXJhY3Rpb24gY29udGV4dCBkaXNhbGxvdyBuZXN0ZWQgYWN0aXZpdGllcyBvclxuICAgIC8vICAgICAgIHRoYXQgd291bGQgbWVzcyB0aGluZ3MgdXAgZW50aXJlbHkuIE9yLCBjYW4gSSBkbyBhIGNvbnRleHQuYWJvcnRBbGwoKS50aGVuKC4uKVxuICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhcImNhbmNlbGxpbmcgY3VycmVudCBuYXZpZ2F0aW9uIGFjdGl2aXR5Li5cIik7XG4gICAgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dC5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpLnRoZW4oKCkgPT4ge1xuICAgICAgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dC5kaXNwb3NlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbmRsZUNhbkRlYWN0aXZhdGVDYW5jZWxsZWRFdmVudFNjZW5hcmlvKG5ld1VybCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYW5kbGVDYW5EZWFjdGl2YXRlQ2FuY2VsbGVkRXZlbnRTY2VuYXJpbyhuZXdVcmw6IHN0cmluZyk6IHZvaWRcblxuICBwcm90ZWN0ZWQgcmVpbnN0YXRlVXJsQWZ0ZXJBbmd1bGFyQ2hhbmdlZEl0T25DYW5jZWxsYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICAvLyBBbmd1bGFyIGNhbGxzIF90aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpIG9uIGNhbmNlbGxpbmcgYW5kIGZ1Y2tzIG91ciBoaXN0b3J5LlxuICAgIC8vIFNvIHRoaXMgbWVhbnMgdGhhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyB0aGUgdXJsIHdlIHdhbnQgdG8gZ28gYmFjayB0bywgYW5kIG5vdCB0aGUgb25lIHRoYXQgd2FzIG9uXG4gICAgLy8gaXQgYmVmb3JlIHRoZSBjYW5jZWwgZXZlbnQgZmlyZWQuXG4gICAgLy8gU28gd2UgbmVlZCB0bzpcbiAgICAvLyAtIHJlcGxhY2UgdGhlIGp1c3QgaW5zZXJ0ZWQgdXJsIHdpdGggdGhlIG9uZSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUuXG4gICAgLy8gLSBwdXNoIG91ciBhY3R1YWwgdXJsIGJhY2sgb250byB0aGUgdG9wIG9mIHRoZSBzdGFjay5cbiAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCwgeyByZXBsYWNlQ3VycmVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRhY2hDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSBudWxsO1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG4iXX0=
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFHMUY7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLGdCQUFnQjtJQVd6QztJQUFxQztJQVQxRCxpQkFBaUIsR0FBYSxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBRTFELDZCQUE2QixHQUFHLElBQUksR0FBRyxFQUFxRCxDQUFDO0lBSTdGLG1CQUFtQixDQUFxQjtJQUVoRCxZQUFxQixPQUEwQixFQUFXLFdBQW1CO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFcsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFBVyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUUzRSw4Q0FBOEM7UUFDOUMsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLHlDQUF5QyxFQUFFLENBQUM7UUFDN0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsK0ZBQStGO1lBQy9GLDhGQUE4RjtZQUM5RixpR0FBaUc7WUFDakcsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENB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QUFDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMvRCwrQkFBK0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSVMsK0NBQStDLENBQUMsR0FBVztRQUNuRSxzRkFBc0Y7UUFDdEYsd0dBQXdHO1FBQ3hHLG9DQUFvQztRQUNwQyxpQkFBaUI7UUFDakIsc0VBQXNFO1FBQ3RFLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVTLHFDQUFxQztRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXJFdmVudH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtHYXJiYWdlQ29sbGVjdG9yLCBsYW5nLCBMb2dnZXJ9IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uQ29udGV4dH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHtJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlcn0gZnJvbSBcIi4uLy4uLy4uL2ludGVyYWN0aW9uL3NlcnZpY2VzL2ludGVyYWN0aW9uLXNlcnZpY2Utcm91dGluZy1hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7UGxhY2VDb21wb25lbnR9IGZyb20gXCIuLi8uLi9wbGFjZS1jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHtQbGFjZURlZmluaXRpb259IGZyb20gXCIuLi8uLi9wbGFjZS1kZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSB7VXJsU2VydmljZX0gZnJvbSBcIi4uLy4uL3VybC1zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7VXJsU25hcHNob3R9IGZyb20gXCIuLi8uLi91cmwtc25hcHNob3RcIjtcbmltcG9ydCB7VmlzaXR9IGZyb20gXCIuLi8uLi92aXNpdFwiO1xuaW1wb3J0IHR5cGUge1Zpc2l0U2VnbWVudH0gZnJvbSBcIi4uLy4uL3Zpc2l0LXNlZ21lbnRcIjtcbmltcG9ydCB7UGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyfSBmcm9tIFwiLi4vcGxhY2UtY29tcG9uZW50LWRlYWN0aXZhdGlvbi1oYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7TmF2aWdhdGlvbkNvbnRleHR9IGZyb20gXCIuL25hdmlnYXRpb24tY29udGV4dFwiO1xuXG4vKipcbiAqIFRyYW5zaWVudCBzdGF0ZXNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdmlnYXRpb25TZXNzaW9uIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgZGVidWdQcm9wZXJ0eUtleXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgX3Zpc2l0U2VnbWVudHMgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXRTZWdtZW50PigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFBsYWNlQ29tcG9uZW50LCBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXI+KCk7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzUG9wU3RhdGU6IGJvb2xlYW47XG5cblxuICBwcml2YXRlIF9pbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dCwgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gY29uc29sZS5sb2coYG5ldyAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKVxuICAgIC8vIFRPRE86IGNhbiBJIGdldCBhd2F5IHdpdGhvdXQgY3JlYXRpbmcgb25lIGV2ZXJ5IHRpbWU/XG4gICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0ID0gdGhpcy5jb250ZXh0LnJvdXRlckludGVyYWN0aW9uQWRhcHRlci5jcmVhdGVOYXZpZ2F0aW9uU2Vzc2lvbkludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMub25EaXNwb3NlKCgpID0+IHtcbiAgICAgIC8vIHRoZSBpbnRlcmFjdGlvbiBjb250ZXh0IGNhbiBiZSBkZXRhY2hlZCBkdXJpbmcgdGhlIGJhY2sgYnV0dG9uIGNhbmNlbGxhdGlvbiBzdGF0ZSB0cmFuc2l0aW9uXG4gICAgICAvLyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgYWN0aXZpdHlDYW5jZWxsYXRpb24gaXNuJ3QuICBPdGhlcndpc2UgZGlzcG9zZSB3aWxsIGJlXG4gICAgICAvLyBjYWxsZWQgYmVmb3JlIHRoZSBjb250ZXh0IGhhcyBiZWVuIGNhbmNlbGxlZC4gIEl0IG1pZ2h0IGJlIHdvcmsgaGF2aW5nIHRoZSBpbnRlcmFjdGlvbiBjb250ZXh0XG4gICAgICAvLyBhdXRvbWF0aWNhbGx5IGNhbmNlbCBpZiB0aGUgY29udGV4dCBpcyBkaXNwb3NlZCBzbyB3ZSBkb24ndCBoYXZlIHdvcnJ5IGFib3V0IGRldGFjaGluZyBldGMuXG4gICAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25Db250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dC5kaXNwb3NlKCk7IC8vIG9yIGRvIHNvbWV0aGluZyBsaWtlIGNhbmNlbEFuZERpc3Bvc2U/XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNJbnRlcmFjdGlvblN5bmMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycnVwdGlibGUgc2Vzc2lvbnMgYXJlIGludGVybmFsIGhvdXNla2VlcGluZyBuYXZpZ2F0aW9ucyAoZS5nLiBpbnRlcmFjdGlvbi1pZFxuICAgKiBzeW5jaHJvbmlzYXRpb24pLiBIaXN0b3JpY2FsbHkgb25seSB0aGVzZSBxdWV1ZWQgYW4gb3ZlcmxhcHBpbmcgbmF2aWdhdGlvbiB3aGlsZSByZWFsXG4gICAqIG5hdmlnYXRpb25zIGRyb3BwZWQgaXQ7IEFMTCBvdmVybGFwcGluZyBuYXZpZ2F0aW9ucyBub3cgcXVldWUgKHNlZVxuICAgKiBQbGFjZVJvdXRlci5oYW5kbGVPdmVybGFwcGluZ05hdmlnYXRpb24pLCBzbyB0aGlzIGZsYWcgaXMgZGlhZ25vc3RpYyBvbmx5LlxuICAgKi9cbiAgZ2V0IGlzSW50ZXJydXB0aWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ludGVyYWN0aW9uU3luYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIGdldCB1cmxTZXJ2aWNlKCk6IFVybFNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQudXJsU2VydmljZTtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvblNlcnZpY2VBZGFwdGVyKCk6IEludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnJvdXRlckludGVyYWN0aW9uQWRhcHRlcjtcbiAgfVxuXG4gIGluaXRpYWxpc2VWaXNpdFNlZ21lbnRzKHZpc2l0OiBWaXNpdCkge1xuICAgIHZpc2l0LnNlZ21lbnRzLmZvckVhY2goaXQgPT4gdGhpcy51cGRhdGVWaXNpdFNlZ21lbnQoaXQpKVxuICB9XG5cbiAgdXBkYXRlVmlzaXRTZWdtZW50KHNlZ21lbnQ6IFZpc2l0U2VnbWVudCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGB1cGRhdGVWaXNpdFNlZ21lbnRgLCBzZWdtZW50LnRvRGVidWdTdHJpbmcoKSk7XG4gICAgdGhpcy5fdmlzaXRTZWdtZW50cy5zZXQoc2VnbWVudC5wbGFjZURlZmluaXRpb24sIHNlZ21lbnQpO1xuICB9XG5cblxuICBnZXRWaXNpdFNlZ21lbnRGb3IocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbikge1xuICAgIGNvbnN0IHZpc2l0ID0gdGhpcy5fdmlzaXRTZWdtZW50cy5nZXQocGxhY2VEZWYpO1xuICAgIC8vIGNvbnNvbGUubG9nKGBHZXR0aW5nIHZpc2l0IGZvciAke3BsYWNlRGVmLmNvbXBvbmVudC5uYW1lfWAsIHt2aXNpdH0pO1xuICAgIHJldHVybiB2aXNpdDtcbiAgfVxuXG4gIGNyZWF0ZVVwZGF0ZWRWaXNpdCh1cmw6IHN0cmluZykgOlZpc2l0IHtcbiAgICAvLyBUaGUgdmlzaXQgc2VnbWVudHMgY2FuIGhhdmUgYXJiaXJhcnkgcGxhY2VzIGluIHRoZW0gYWZ0ZXIgcmVkaXJlY3RzXG4gICAgLy8gc28gd2UgaGF2ZSB0byBmaWx0ZXIgdGhlbSBiYXNlZCBvbiB0aGUgZmluYWwgdXJsLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy51cmxTZXJ2aWNlLnBhcnNlVXJsKHVybCk7XG4gICAgY29uc3QgZmlsdGVyZWRTZWdtZW50cyA9IEFycmF5LmZyb20odGhpcy5fdmlzaXRTZWdtZW50cy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoaXQgPT4gc25hcHNob3QuY29udGFpbnNWaXNpdFNlZ21lbnQoaXQpKTtcbiAgICBjb25zdCBhY3RpdmVWaXNpdCA9IHRoaXMuY29udGV4dC5hY3RpdmVWaXNpdDtcbiAgICAvLyBBIHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBsYWNlIGFscmVhZHkgc2hvd2luZyBlbmRzIG9uIGEgcm91dGUgQW5ndWxhciBuZXZlciByZS1ndWFyZHMsIHNvXG4gICAgLy8gbm9uZSBvZiB0aGlzIHNlc3Npb24ncyBzZWdtZW50cyBzdXJ2aXZlIHRoZSBmaWx0ZXI6IHRoZSBuYXZpZ2F0aW9uIGlzIGEgcmV0dXJuIHRvIHRoZVxuICAgIC8vIGFjdGl2ZSB2aXNpdC5cbiAgICBjb25zdCB2aXNpdCA9IGZpbHRlcmVkU2VnbWVudHMubGVuZ3RoID4gMFxuICAgICAgPyBWaXNpdC5mcm9tU2VnbWVudHMoZmlsdGVyZWRTZWdtZW50cylcbiAgICAgIDogVmlzaXQuZnJvbVNlZ21lbnRzKGFjdGl2ZVZpc2l0Py5zZWdtZW50cy5maWx0ZXIoaXQgPT4gc25hcHNob3QuY29udGFpbnNWaXNpdFNlZ21lbnQoaXQpKSA/PyBbXSk7XG4gICAgLy8gQW5ndWxhciBvbmx5IHJ1bnMgZ3VhcmRzIGZvciByb3V0ZXMgd2hvc2UgcGFyYW1ldGVycyBjaGFuZ2VkLCBzbyBhIHBsYWNlIHRoYXQgc3RheXMgYWN0aXZlXG4gICAgLy8gKGUuZy4gdGhlIHBhcmVudCB3aGVuIEJhY2sgb25seSBjaGFuZ2VzIHRoZSBjaGlsZCkgbmV2ZXIgcmVhY2hlcyB0aGlzIHNlc3Npb24uIEtlZXAgaXRzXG4gICAgLy8gc2VnbWVudCBmcm9tIHRoZSBhY3RpdmUgdmlzaXQsIG90aGVyd2lzZSBWaXNpdCBmaWxscyBpdCBpbiB3aXRoIGVtcHR5IHBhcmFtZXRlcnMuXG4gICAgY29uc3Qgc2VnbWVudHMgPSB2aXNpdC5zZWdtZW50cy5tYXAoc2VnbWVudCA9PiB0aGlzLl92aXNpdFNlZ21lbnRzLmhhcyhzZWdtZW50LnBsYWNlRGVmaW5pdGlvbilcbiAgICAgID8gc2VnbWVudFxuICAgICAgOiBhY3RpdmVWaXNpdD8uZ2V0U2VnbWVudEZvcihzZWdtZW50LnBsYWNlRGVmaW5pdGlvbikgPz8gc2VnbWVudCk7XG4gICAgcmV0dXJuIFZpc2l0LmZyb21TZWdtZW50cyhzZWdtZW50cyk7XG4gIH1cblxuICBnZXQgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQ7XG4gIH1cblxuICBub3RpZnlBY3RpdmUoKSB7XG4gICAgLy8gbm9vcC5cbiAgfVxuXG4gIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgLy8gbmF2aWdhdGlvbiBzZXNzaW9ucyBjYW4gaGF2ZSBtYW55IGNhbmNlbCBzdGFydCBjeWNsZXMgZHVlIHRvIHBsYWNlIGd1YXJkIHJlZGlyZWN0c1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlKHVybDogc3RyaW5nKSB7XG4gICAgLy8gTm9ybWFsbHkgd2UganVzdCBpZ25vcmUgdGhlc2UgYnV0IHRoZXkgYXJlIHRoZSBvbmx5IHdheSBvZiBkZXRlY3RpbmcgaWYgdGhlIGJhY2sgYnV0dG9uXG4gICAgLy8gd2FzIGNsaWNrZWQgZHVyaW5nIGEgY2FuRGVhY3RpdmF0ZSBwcm9taXNlLlxuICAgIC8vIDEuIGEgcm91dGUgaXMgaW4gcHJvZ3Jlc3MgYW5kIGF3YWl0aW5nIGEgY2FuRGVhY3RpdmF0ZUd1YXJkXG4gICAgLy8gMi4gdGhlIHVzZXIgdGhlIGNsaWNrcyB0aGUgYmFjayBidXR0b24uXG4gICAgLy8gU28gdG8gaGFuZGxlIHRoYXQgc2NlbmFyaW8gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSd2ZSBnb3QgYSBjYW4gZGVhY3RpdmF0ZSBpbnRlcmFjdGlvbiBpblxuICAgIC8vIHByb2dyZXNzIGFuZCB0aGUgZG8gdGhlIGFwcHJvcHJpYXRlIGNsZWFuIHVwLlxuICAgIGlmICh0aGlzLmNhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQgJiYgdGhpcy5jYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmlzQWN0aXZlKCkpIHtcbiAgICAgIHRoaXMuY2FuY2VsQ2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uKHVybCk7XG4gICAgfVxuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIGdldFZpc2l0U2VnbWVudHMoKTogVmlzaXRTZWdtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3Zpc2l0U2VnbWVudHMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlsbGVnYWxUcmFuc2l0aW9uPFI+KG1lc3NhZ2U6IHN0cmluZyB8IFJvdXRlckV2ZW50KTogUiB7XG4gICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGAke21lc3NhZ2UudG9TdHJpbmcoKX0gbm90IHN1cHBvcnRlZCBieSAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjdXJyZW50Um91dGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCk7XG4gIH1cblxuICByZXNldEJyb3dzZXJMb2NhdGlvbih1cmwsIG9wdGlvbnM6IHsgcmVwbGFjZUN1cnJlbnQ6IGJvb2xlYW4gfSA9IHsgcmVwbGFjZUN1cnJlbnQ6IGZhbHNlIH0pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiByZXNldHRpbmcgYnJvd3NlciBsb2NhdGlvbiB0bzogJHt1cmx9YCk7XG4gICAgdGhpcy51cmxTZXJ2aWNlLnJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwcm90ZWN0ZWQgcmVwYWlyQnJvd3Nlckhpc3RvcnlBbmRVcmxBZnRlckd1YXJkQ2FuY2VsbGF0aW9uKHBvcHBlZEhpc3RvcnlUb1JlcGxhY2U6IHN0cmluZywgYWN0aXZlVXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBJbXBvcnRhbnQ6IEkgdHJpZWQgdG8gcGVyZm9ybSB0aGlzIGZpeCBhdCBhIGxhdGVyIHBvaW50IGludCBoZSByb3V0aW5nIGN5Y2xlIGJ1dCBpdCBjcmVhdGVkIGFsbCBraW5kcyBvZlxuICAgIC8vIHN0cmFuZ2VuZXNzLlxuICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhcIldPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NlwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgcmVwbGFjaW5nICR7dGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvblVybFNuYXBzaG90KCkudXJsfSB3aXRoICR7cG9wcGVkSGlzdG9yeVRvUmVwbGFjZX1gKTtcbiAgICB0aGlzLnVybFNlcnZpY2UucmVzZXRCcm93c2VyTG9jYXRpb24ocG9wcGVkSGlzdG9yeVRvUmVwbGFjZSwgeyByZXBsYWNlQ3VycmVudDogdHJ1ZSB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhgcHVzaGluZyAke2FjdGl2ZVVybH0gYmFjayBvbnRvIHRoZSBoaXN0b3J5LmApO1xuICAgIHRoaXMudXJsU2VydmljZS5yZXNldEJyb3dzZXJMb2NhdGlvbihhY3RpdmVVcmwsIHsgcmVwbGFjZUN1cnJlbnQ6IGZhbHNlIH0pO1xuICB9XG5cblxuICBpZ25vcmUoZXZlbnQ6IFJvdXRlckV2ZW50LCByZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZWFzb24gPSByZWFzb24gPyBgIC0+ICR7cmVhc29ufWAgOiBcIlwiO1xuICAgIC8vIExvZ2dlci5nZXQodGhpcykuaW5mbyhgSWdub3Jpbmcgcm91dGVyIGV2ZW50JHtyZWFzb259OiAke2V2ZW50LmNvbnN0cnVjdG9yLm5hbWV9IC0+ICR7ZXZlbnQudXJsfSA6OiAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0oJHt0aGlzLmRlYnVnU3RhdGUoKX0pYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWJ1Z1N0YXRlKHByb3BlcnRpZXM/OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiAocHJvcGVydGllcyB8fCB0aGlzLmRlYnVnUHJvcGVydHlLZXlzKS5tYXAocCA9PiB7XG4gICAgICByZXR1cm4gYCR7cH06ICR7dGhpc1twXX1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IGNhbkRlYWN0aXZhdGVQbGFjZSgke2NvbXBvbmVudC5wbGFjZURlZmluaXRpb24ucGF0aH0sICR7Y3VycmVudFVybC51cmx9IC0+ICR7bmV4dFVybC51cmx9KWApO1xuICAgIC8vIGxvb2t1cCB0aGUgaGFuZGxlciBhbmQgY3JlYXRlIGl0IGlmIHdlJ3ZlIG5vdCBzZWVuIGl0IHlldFxuICAgIGxldCBoYW5kbGVyID0gdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5nZXQoY29tcG9uZW50KTtcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IGlzUHJpbWFyeUhhbmRsZXIgPSB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLnNpemUgPT09IDA7IC8vIG9ubHkgcHJpbWFyeSBoYW5kbGVyIGNhbmNlbHMgdGhlIGFwcCBtb2RlbCBpbnRlcmF0aW9uc1xuICAgICAgaGFuZGxlciA9IG5ldyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIoY29tcG9uZW50LCB0aGlzLCBpc1ByaW1hcnlIYW5kbGVyKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyLmNhbkRlYWN0aXZhdGUoY3VycmVudFVybCwgbmV4dFVybCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gY2FuRGVhY3RpdmF0ZVBsYWNlKCR7Y29tcG9uZW50LnBsYWNlRGVmaW5pdGlvbi5wYXRofSk6ICR7cmVzdWx0fWApO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbihuZXdVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2VgKTtcbiAgICAvLyBkZXRhY2ggdGhlIGludGVyYWN0aW9uIGZyb20gdGhlIHNlc3Npb24gc28gaXQgZG9lc24ndCBnZXQgZGlzcG9zZWQgdW50aWwgdGhlIGFjdGl2aXR5IGhhcyBmaW5pc2hlZFxuICAgIC8vIGFsbCBpdCdzIHRoaW5ncy5cbiAgICBjb25zdCBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0ID0gdGhpcy5kZXRhY2hDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgLy8gVE9ETzogSSBuZWVkIHRvIG1ha2UgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBjb250ZXh0IGRpc2FsbG93IG5lc3RlZCBhY3Rpdml0aWVzIG9yXG4gICAgLy8gICAgICAgdGhhdCB3b3VsZCBtZXNzIHRoaW5ncyB1cCBlbnRpcmVseS4gT3IsIGNhbiBJIGRvIGEgY29udGV4dC5hYm9ydEFsbCgpLnRoZW4oLi4pXG4gICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKFwiY2FuY2VsbGluZyBjdXJyZW50IG5hdmlnYXRpb24gYWN0aXZpdHkuLlwiKTtcbiAgICBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCkudGhlbigoKSA9PiB7XG4gICAgICBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuaGFuZGxlQ2FuRGVhY3RpdmF0ZUNhbmNlbGxlZEV2ZW50U2NlbmFyaW8obmV3VXJsKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhbmRsZUNhbkRlYWN0aXZhdGVDYW5jZWxsZWRFdmVudFNjZW5hcmlvKG5ld1VybDogc3RyaW5nKTogdm9pZFxuXG4gIHByb3RlY3RlZCByZWluc3RhdGVVcmxBZnRlckFuZ3VsYXJDaGFuZ2VkSXRPbkNhbmNlbGxhdGlvbih1cmw6IHN0cmluZykge1xuICAgIC8vIEFuZ3VsYXIgY2FsbHMgX3RoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkgb24gY2FuY2VsbGluZyBhbmQgZnVja3Mgb3VyIGhpc3RvcnkuXG4gICAgLy8gU28gdGhpcyBtZWFucyB0aGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIHRoZSB1cmwgd2Ugd2FudCB0byBnbyBiYWNrIHRvLCBhbmQgbm90IHRoZSBvbmUgdGhhdCB3YXMgb25cbiAgICAvLyBpdCBiZWZvcmUgdGhlIGNhbmNlbCBldmVudCBmaXJlZC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvOlxuICAgIC8vIC0gcmVwbGFjZSB0aGUganVzdCBpbnNlcnRlZCB1cmwgd2l0aCB0aGUgb25lIHRoYXQgdXNlZCB0byBiZSB0aGVyZS5cbiAgICAvLyAtIHB1c2ggb3VyIGFjdHVhbCB1cmwgYmFjayBvbnRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLlxuICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odXJsLCB7IHJlcGxhY2VDdXJyZW50OiB0cnVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGFjaENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IG51bGw7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cbiJdfQ==
@@ -673,29 +673,43 @@ class HighlightPipe extends GarbageCollector {
673
673
  ngOnDestroy() {
674
674
  this.dispose();
675
675
  }
676
+ /** The markup last produced, and the trusted value wrapping it. */
677
+ lastHtml;
678
+ lastResult;
676
679
  /**
677
680
  * Highlights occurrences of `searchModel` within `value`.
678
681
  *
682
+ * The pipe is impure, so it runs on every change detection of its view. It hands back the same
683
+ * trusted value while the markup is unchanged: a fresh one each time would read as a new binding,
684
+ * and an `[innerHTML]` would replace its text on every pass though nothing about it had changed.
685
+ *
679
686
  * @param value The string to search within.
680
687
  * @param searchTextFilter Intercept the search text to allow matching against substrings.
681
688
  */
682
689
  transform(value, searchTextFilter) {
690
+ const html = this.highlight(value, searchTextFilter);
691
+ if (html !== this.lastHtml) {
692
+ this.lastHtml = html;
693
+ this.lastResult = this.sanitizer.bypassSecurityTrustHtml(html);
694
+ }
695
+ return this.lastResult;
696
+ }
697
+ highlight(value, searchTextFilter) {
683
698
  const sanitisedValue = escape(value);
684
699
  const rawModelValue = this.highlightContext?.aupHighlightTextModel?.value ?? '';
685
700
  const filtered = searchTextFilter ? searchTextFilter(rawModelValue) : rawModelValue;
686
701
  const searchText = escape(filtered ?? '');
687
702
  if (isEmpty(searchText) || !isString(value)) {
688
- return this.sanitizer.bypassSecurityTrustHtml(sanitisedValue);
703
+ return sanitisedValue;
689
704
  }
690
705
  // Match in a case insensitive manner
691
706
  const re = new RegExp(escapeStringRegexp(searchText), 'gi');
692
707
  const match = sanitisedValue.match(re);
693
708
  // If there's no match, just return the original value.
694
709
  if (!match) {
695
- return this.sanitizer.bypassSecurityTrustHtml(sanitisedValue);
710
+ return sanitisedValue;
696
711
  }
697
- const result = sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
698
- return this.sanitizer.bypassSecurityTrustHtml(result);
712
+ return sanitisedValue.replace(re, '<mark>' + match[0] + '</mark>');
699
713
  }
700
714
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, deps: [{ token: i1.DomSanitizer }, { token: HighlightTextModelDirective, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
701
715
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: HighlightPipe, name: "aupHighlight", pure: false });
@@ -10026,11 +10040,16 @@ class NavigationSession extends GarbageCollector {
10026
10040
  const snapshot = this.urlService.parseUrl(url);
10027
10041
  const filteredSegments = Array.from(this._visitSegments.values())
10028
10042
  .filter(it => snapshot.containsVisitSegment(it));
10029
- const visit = Visit.fromSegments(filteredSegments);
10043
+ const activeVisit = this.context.activeVisit;
10044
+ // A redirect back to the place already showing ends on a route Angular never re-guards, so
10045
+ // none of this session's segments survive the filter: the navigation is a return to the
10046
+ // active visit.
10047
+ const visit = filteredSegments.length > 0
10048
+ ? Visit.fromSegments(filteredSegments)
10049
+ : Visit.fromSegments(activeVisit?.segments.filter(it => snapshot.containsVisitSegment(it)) ?? []);
10030
10050
  // Angular only runs guards for routes whose parameters changed, so a place that stays active
10031
10051
  // (e.g. the parent when Back only changes the child) never reaches this session. Keep its
10032
10052
  // segment from the active visit, otherwise Visit fills it in with empty parameters.
10033
- const activeVisit = this.context.activeVisit;
10034
10053
  const segments = visit.segments.map(segment => this._visitSegments.has(segment.placeDefinition)
10035
10054
  ? segment
10036
10055
  : activeVisit?.getSegmentFor(segment.placeDefinition) ?? segment);