ngx-edu-sharing-ui 10.0.16 → 10.0.17

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.
@@ -1,4 +1,4 @@
1
- import { Component, Input, ViewChildren, } from '@angular/core';
1
+ import { Component, Input, signal, ViewChildren, } from '@angular/core';
2
2
  import { MdsWidgetComponent, } from './widget/mds-widget.component';
3
3
  import { HOME_REPOSITORY, RestConstants, } from 'ngx-edu-sharing-api';
4
4
  import { replaceElementWithDiv } from './replace-element-with-div';
@@ -35,6 +35,7 @@ export class MdsViewerComponent {
35
35
  this.containerRef = containerRef;
36
36
  this.sanitizer = sanitizer;
37
37
  this.viewInstance = viewInstance;
38
+ this.templates = signal(null);
38
39
  /**
39
40
  * show group headings (+ icons) for the individual templates
40
41
  */
@@ -66,14 +67,15 @@ export class MdsViewerComponent {
66
67
  catch (e) {
67
68
  return;
68
69
  }
69
- this.templates = [];
70
+ const templates = [];
70
71
  for (const view of this.getGroup().views) {
71
72
  const v = this.getView(view);
72
- this.templates.push({
73
+ templates.push({
73
74
  view: v,
74
75
  html: this.sanitizer.bypassSecurityTrustHtml(this.prepareHTML(v.html)),
75
76
  });
76
77
  }
78
+ this.templates.set(templates);
77
79
  // wait for angular to inflate the new binding
78
80
  setTimeout(() => {
79
81
  for (const widget of (this.mdsEditorInstanceService?.widgets.value ||
@@ -82,13 +84,12 @@ export class MdsViewerComponent {
82
84
  definition,
83
85
  getInitalValuesAsync: async () => {
84
86
  return {
85
- individualValues: this.data[definition.id],
87
+ jointValues: this.data[definition.id],
86
88
  };
87
89
  },
88
90
  getInitialDisplayValues: () => new BehaviorSubject(null),
89
91
  };
90
92
  }))) {
91
- // @TODO: it would be better to filter by widgets based on template and condition, should be implemented in 5.1
92
93
  this.container.toArray().forEach((c) => {
93
94
  let element = c.nativeElement.getElementsByTagName(widget.definition.id)?.[0];
94
95
  if (element) {
@@ -145,11 +146,11 @@ export class MdsViewerComponent {
145
146
  }
146
147
  }
147
148
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsViewerComponent, deps: [{ token: i1.MdsService }, { token: i2.MdsViewerService }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i3.DomSanitizer }, { token: i4.ViewInstanceService }], target: i0.ɵɵFactoryTarget.Component }); }
148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: MdsViewerComponent, selector: "es-mds-viewer", inputs: { mdsEditorInstanceService: "mdsEditorInstanceService", groupId: "groupId", setId: "setId", data: "data", showGroupHeadings: "showGroupHeadings", headingLevel: "headingLevel" }, providers: [MdsViewerService, ViewInstanceService], viewQueries: [{ propertyName: "container", predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<es-spinner-small *ngIf=\"!templates\"></es-spinner-small>\n<div *ngFor=\"let t of templates\" #container class=\"mds-viewer\">\n <div *ngIf=\"showGroupHeadings && t.view.caption\" class=\"card-title-element group-heading\">\n <i [esIcon]=\"t.view.icon\" *ngIf=\"t.view.icon\"></i><span>{{ t.view.caption }}</span>\n </div>\n <div class=\"template\" [innerHTML]=\"t.html\"></div>\n</div>\n", styles: [":host ::ng-deep es-mds-editor-widget-container{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.SpinnerSmallComponent, selector: "es-spinner-small", inputs: ["diameter"] }, { kind: "directive", type: i7.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }] }); }
149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: MdsViewerComponent, selector: "es-mds-viewer", inputs: { mdsEditorInstanceService: "mdsEditorInstanceService", groupId: "groupId", setId: "setId", data: "data", showGroupHeadings: "showGroupHeadings", headingLevel: "headingLevel" }, providers: [MdsViewerService, ViewInstanceService], viewQueries: [{ propertyName: "container", predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<es-spinner-small *ngIf=\"!templates()\"></es-spinner-small>\n<div *ngFor=\"let t of templates()\" #container class=\"mds-viewer\">\n <div *ngIf=\"showGroupHeadings && t.view.caption\" class=\"card-title-element group-heading\">\n <i [esIcon]=\"t.view.icon\" *ngIf=\"t.view.icon\"></i><span>{{ t.view.caption }}</span>\n </div>\n <div class=\"template\" [innerHTML]=\"t.html\"></div>\n</div>\n", styles: [":host ::ng-deep es-mds-editor-widget-container{margin-bottom:0}es-spinner-small{display:flex;justify-content:center;align-items:center;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.SpinnerSmallComponent, selector: "es-spinner-small", inputs: ["diameter"] }, { kind: "directive", type: i7.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }] }); }
149
150
  }
150
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsViewerComponent, decorators: [{
151
152
  type: Component,
152
- args: [{ selector: 'es-mds-viewer', providers: [MdsViewerService, ViewInstanceService], template: "<es-spinner-small *ngIf=\"!templates\"></es-spinner-small>\n<div *ngFor=\"let t of templates\" #container class=\"mds-viewer\">\n <div *ngIf=\"showGroupHeadings && t.view.caption\" class=\"card-title-element group-heading\">\n <i [esIcon]=\"t.view.icon\" *ngIf=\"t.view.icon\"></i><span>{{ t.view.caption }}</span>\n </div>\n <div class=\"template\" [innerHTML]=\"t.html\"></div>\n</div>\n", styles: [":host ::ng-deep es-mds-editor-widget-container{margin-bottom:0}\n"] }]
153
+ args: [{ selector: 'es-mds-viewer', providers: [MdsViewerService, ViewInstanceService], template: "<es-spinner-small *ngIf=\"!templates()\"></es-spinner-small>\n<div *ngFor=\"let t of templates()\" #container class=\"mds-viewer\">\n <div *ngIf=\"showGroupHeadings && t.view.caption\" class=\"card-title-element group-heading\">\n <i [esIcon]=\"t.view.icon\" *ngIf=\"t.view.icon\"></i><span>{{ t.view.caption }}</span>\n </div>\n <div class=\"template\" [innerHTML]=\"t.html\"></div>\n</div>\n", styles: [":host ::ng-deep es-mds-editor-widget-container{margin-bottom:0}es-spinner-small{display:flex;justify-content:center;align-items:center;width:100%;height:100%}\n"] }]
153
154
  }], ctorParameters: () => [{ type: i1.MdsService }, { type: i2.MdsViewerService }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i3.DomSanitizer }, { type: i4.ViewInstanceService }], propDecorators: { container: [{
154
155
  type: ViewChildren,
155
156
  args: ['container']
@@ -166,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
166
167
  }], headingLevel: [{
167
168
  type: Input
168
169
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvbWRzLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvbWRzLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUlULEtBQUssRUFJTCxZQUFZLEdBRWYsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUlILGtCQUFrQixHQUNyQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxlQUFlLEVBSWYsYUFBYSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFRdkMsTUFBTSxPQUFPLGtCQUFrQjtJQWtCM0I7Ozs7O09BS0c7SUFDSCxJQUNJLFlBQVksQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7SUFDMUMsQ0FBQztJQUVELFlBQ1ksVUFBc0IsRUFDdEIsZ0JBQWtDLEVBQ2xDLGVBQXlDLEVBQ3pDLFFBQWtCLEVBQ2xC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QUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRSxDQUFDO1lBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDOytHQXBLUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrT0FGaEIsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQywwSUNyQ3RELDZZQU9BOzs0RkRnQ2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNJLGVBQWUsYUFHZCxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO3dRQUd2QixTQUFTO3NCQUFuQyxZQUFZO3VCQUFDLFdBQVc7Z0JBRWhCLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFVRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBU0YsWUFBWTtzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gICAgSW5pdGlhbFZhbHVlcyxcbiAgICBNZHNWYWx1ZUxpc3QsXG4gICAgTWRzVmlld2VyV2lkZ2V0LFxuICAgIE1kc1dpZGdldENvbXBvbmVudCxcbn0gZnJvbSAnLi93aWRnZXQvbWRzLXdpZGdldC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBIT01FX1JFUE9TSVRPUlksXG4gICAgTWRzRGVmaW5pdGlvbixcbiAgICBNZHNTZXJ2aWNlLFxuICAgIE1kc1ZpZXcsXG4gICAgUmVzdENvbnN0YW50cyxcbn0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBWYWx1ZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZWFyY2gtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVwbGFjZUVsZW1lbnRXaXRoRGl2IH0gZnJvbSAnLi9yZXBsYWNlLWVsZW1lbnQtd2l0aC1kaXYnO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBNZHNWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi9tZHMtdmlld2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlld0luc3RhbmNlU2VydmljZSB9IGZyb20gJy4vdmlldy1pbnN0YW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW1kcy12aWV3ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnbWRzLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ21kcy12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtNZHNWaWV3ZXJTZXJ2aWNlLCBWaWV3SW5zdGFuY2VTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTWRzVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBAVmlld0NoaWxkcmVuKCdjb250YWluZXInKSBjb250YWluZXI6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIEBJbnB1dCgpIG1kc0VkaXRvckluc3RhbmNlU2VydmljZTogYW55O1xuICAgIEBJbnB1dCgpIGdyb3VwSWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBzZXRJZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGE6IFZhbHVlcztcbiAgICBtZHM6IE1kc0RlZmluaXRpb247XG4gICAgdGVtcGxhdGVzOiB7XG4gICAgICAgIHZpZXc6IE1kc1ZpZXc7XG4gICAgICAgIGh0bWw6IFNhZmVIdG1sO1xuICAgIH1bXTtcblxuICAgIC8qKlxuICAgICAqIHNob3cgZ3JvdXAgaGVhZGluZ3MgKCsgaWNvbnMpIGZvciB0aGUgaW5kaXZpZHVhbCB0ZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaG93R3JvdXBIZWFkaW5ncyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVhZGluZyBsZXZlbCBmcm9tIDEgdG8gNiB0byB1c2UgZm9yIHdpZGdldCBsYWJlbHMsIGVxdWl2YWxlbnQgdG8gYGgxYCB0byBgaDZgLlxuICAgICAqXG4gICAgICogSWYgbm90IHNldCwgd2lkZ2V0IGxhYmVscyBhcmUgbm90IG1hcmtlZCBhcyBoZWFkaW5ncyBhbmQgYW4gaW52aXNpYmxlIGNvbG9uIGlzIGFkZGVkIGJldHdlZW5cbiAgICAgKiBsYWJlbHMgYW5kIHZhbHVlcywgdGhhdCB3aWxsIGJlIHJlYWQgb3V0IGJ5IHNjcmVlbiByZWFkZXJzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhlYWRpbmdMZXZlbCh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnZpZXdJbnN0YW5jZS5oZWFkaW5nTGV2ZWwgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGhlYWRpbmdMZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0luc3RhbmNlLmhlYWRpbmdMZXZlbDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBtZHNTZXJ2aWNlOiBNZHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1kc1ZpZXdlclNlcnZpY2U6IE1kc1ZpZXdlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSB2aWV3SW5zdGFuY2U6IFZpZXdJbnN0YW5jZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgZ2V0R3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kcy5ncm91cHMuZmluZCgoZzogYW55KSA9PiBnLmlkID09IHRoaXMuZ3JvdXBJZCk7XG4gICAgfVxuICAgIGdldFZpZXcoaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tZHMudmlld3MuZmluZCgodjogYW55KSA9PiB2LmlkID09IGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5mbGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1kcykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluZmxhdGUoKSwgMTAwMCAvIDYwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5tZHNWaWV3ZXJTZXJ2aWNlLnZhbHVlcyQubmV4dCh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5tZHNWaWV3ZXJTZXJ2aWNlLm1kcyQubmV4dCh0aGlzLm1kcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5tZHNFZGl0b3JJbnN0YW5jZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLm1kc0VkaXRvckluc3RhbmNlU2VydmljZS5pbml0V2l0aG91dE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SWQsXG4gICAgICAgICAgICAgICAgICAgIEhPTUVfUkVQT1NJVE9SWSxcbiAgICAgICAgICAgICAgICAgICAgJ3ZpZXdlcicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemF0aW9uIHdhcyBpbnRlcnJ1cHRlZC4gUHJvYmFibHksIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYWdhaW4gYmVmb3JlIGl0XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIGZpbmlzaC5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGVtcGxhdGVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLmdldEdyb3VwKCkudmlld3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmdldFZpZXcodmlldyk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB2aWV3OiB2LFxuICAgICAgICAgICAgICAgIGh0bWw6IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMucHJlcGFyZUhUTUwodi5odG1sKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3YWl0IGZvciBhbmd1bGFyIHRvIGluZmxhdGUgdGhlIG5ldyBiaW5kaW5nXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB3aWRnZXQgb2YgKHRoaXMubWRzRWRpdG9ySW5zdGFuY2VTZXJ2aWNlPy53aWRnZXRzLnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5tZHMud2lkZ2V0cy5tYXAoKGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbml0YWxWYWx1ZXNBc3luYzogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGl2aWR1YWxWYWx1ZXM6IHRoaXMuZGF0YVtkZWZpbml0aW9uLmlkISFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgSW5pdGlhbFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbml0aWFsRGlzcGxheVZhbHVlczogKCkgPT4gbmV3IEJlaGF2aW9yU3ViamVjdDxNZHNWYWx1ZUxpc3Q+KG51bGwpLFxuICAgICAgICAgICAgICAgICAgICB9IGFzIE1kc1ZpZXdlcldpZGdldDtcbiAgICAgICAgICAgICAgICB9KSkgYXMgTWRzVmlld2VyV2lkZ2V0W10pIHtcbiAgICAgICAgICAgICAgICAvLyBAVE9ETzogaXQgd291bGQgYmUgYmV0dGVyIHRvIGZpbHRlciBieSB3aWRnZXRzIGJhc2VkIG9uIHRlbXBsYXRlIGFuZCBjb25kaXRpb24sIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiA1LjFcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci50b0FycmF5KCkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBjLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQuZGVmaW5pdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgKT8uWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWRzRWRpdG9yVmlld0NvbXBvbmVudC51cGRhdGVXaWRnZXRXaXRoSFRNTEF0dHJpYnV0ZXMoZWxlbWVudCwgdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gcmVwbGFjZUVsZW1lbnRXaXRoRGl2KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBVSVNlcnZpY2UuaW5qZWN0QW5ndWxhckNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZHNXaWRnZXRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNsb3NlIGFsbCBjdXN0b20gdGFncyBpbnNpZGUgdGhlIGh0bWwgd2hpY2ggYXJlIG5vdCBjbG9zZWRcbiAgICAgKiBlLmcuIDxjbTpuYW1lPlxuICAgICAqICAgICAtPiA8Y206bmFtZT48L2NtOm5hbWU+XG4gICAgICogQHBhcmFtIGh0bWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHByZXBhcmVIVE1MKGh0bWw6IHN0cmluZykge1xuICAgICAgICBmb3IgKGNvbnN0IHcgb2YgdGhpcy5tZHMud2lkZ2V0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBodG1sLmluZGV4T2YoJzwnICsgdy5pZCk7XG4gICAgICAgICAgICBpZiAoc3RhcnQgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IGh0bWwuaW5kZXhPZignPicsIHN0YXJ0KSArIDE7XG4gICAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcoMCwgZW5kKSArICc8LycgKyB3LmlkICsgJz4nICsgaHRtbC5zdWJzdHJpbmcoZW5kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGxldCBpbmZsYXRlID0gZmFsc2U7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNldElkKSB7XG4gICAgICAgICAgICB0aGlzLm1kcyA9IGF3YWl0IHRoaXMubWRzU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRNZXRhZGF0YVNldCh7IG1ldGFkYXRhU2V0OiB0aGlzLnNldElkIH0pXG4gICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgaW5mbGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtSZXN0Q29uc3RhbnRzLkNNX1BST1BfTUVUQURBVEFTRVRfRURVX01FVEFEQVRBU0VUXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZHMgPSBhd2FpdCB0aGlzLm1kc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmdldE1ldGFkYXRhU2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhU2V0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtSZXN0Q29uc3RhbnRzLkNNX1BST1BfTUVUQURBVEFTRVRfRURVX01FVEFEQVRBU0VUXVswXSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5tZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1kcyA9IGF3YWl0IHRoaXMubWRzU2VydmljZS5nZXRNZXRhZGF0YVNldCh7fSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmZsYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5mbGF0ZSkge1xuICAgICAgICAgICAgdm9pZCB0aGlzLmluZmxhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxlcy1zcGlubmVyLXNtYWxsICpuZ0lmPVwiIXRlbXBsYXRlc1wiPjwvZXMtc3Bpbm5lci1zbWFsbD5cbjxkaXYgKm5nRm9yPVwibGV0IHQgb2YgdGVtcGxhdGVzXCIgI2NvbnRhaW5lciBjbGFzcz1cIm1kcy12aWV3ZXJcIj5cbiAgPGRpdiAqbmdJZj1cInNob3dHcm91cEhlYWRpbmdzICYmIHQudmlldy5jYXB0aW9uXCIgY2xhc3M9XCJjYXJkLXRpdGxlLWVsZW1lbnQgZ3JvdXAtaGVhZGluZ1wiPlxuICAgIDxpIFtlc0ljb25dPVwidC52aWV3Lmljb25cIiAqbmdJZj1cInQudmlldy5pY29uXCI+PC9pPjxzcGFuPnt7IHQudmlldy5jYXB0aW9uIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRlbXBsYXRlXCIgW2lubmVySFRNTF09XCJ0Lmh0bWxcIj48L2Rpdj5cbjwvZGl2PlxuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvbWRzLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvbWRzLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUlULEtBQUssRUFHTCxNQUFNLEVBRU4sWUFBWSxHQUVmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFJSCxrQkFBa0IsR0FDckIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQ0gsZUFBZSxFQUlmLGFBQWEsR0FDaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBUXZDLE1BQU0sT0FBTyxrQkFBa0I7SUFvQjNCOzs7OztPQUtHO0lBQ0gsSUFDSSxZQUFZLENBQUMsS0FBb0I7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUNZLFVBQXNCLEVBQ3RCLGdCQUFrQyxFQUNsQyxlQUF5QyxFQUN6QyxR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SSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEUsQ0FBQztZQUNELE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQzsrR0F0S1Esa0JBQWtCO21HQUFsQixrQkFBa0Isa09BRmhCLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsMElDdEN0RCxpWkFPQTs7NEZEaUNhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDSSxlQUFlLGFBR2QsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQzt3UUFHdkIsU0FBUztzQkFBbkMsWUFBWTt1QkFBQyxXQUFXO2dCQUVoQix3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBWUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVNGLFlBQVk7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBRdWVyeUxpc3QsXG4gICAgc2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtcbiAgICBJbml0aWFsVmFsdWVzLFxuICAgIE1kc1ZhbHVlTGlzdCxcbiAgICBNZHNWaWV3ZXJXaWRnZXQsXG4gICAgTWRzV2lkZ2V0Q29tcG9uZW50LFxufSBmcm9tICcuL3dpZGdldC9tZHMtd2lkZ2V0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEhPTUVfUkVQT1NJVE9SWSxcbiAgICBNZHNEZWZpbml0aW9uLFxuICAgIE1kc1NlcnZpY2UsXG4gICAgTWRzVmlldyxcbiAgICBSZXN0Q29uc3RhbnRzLFxufSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IFZhbHVlcyB9IGZyb20gJy4uL3NlcnZpY2VzL3NlYXJjaC1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyByZXBsYWNlRWxlbWVudFdpdGhEaXYgfSBmcm9tICcuL3JlcGxhY2UtZWxlbWVudC13aXRoLWRpdic7XG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91aS5zZXJ2aWNlJztcbmltcG9ydCB7IE1kc1ZpZXdlclNlcnZpY2UgfSBmcm9tICcuL21kcy12aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWaWV3SW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi92aWV3LWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXMtbWRzLXZpZXdlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdtZHMtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnbWRzLXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW01kc1ZpZXdlclNlcnZpY2UsIFZpZXdJbnN0YW5jZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBNZHNWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2NvbnRhaW5lcicpIGNvbnRhaW5lcjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgQElucHV0KCkgbWRzRWRpdG9ySW5zdGFuY2VTZXJ2aWNlOiBhbnk7XG4gICAgQElucHV0KCkgZ3JvdXBJZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNldElkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YTogVmFsdWVzO1xuICAgIG1kczogTWRzRGVmaW5pdGlvbjtcbiAgICB0ZW1wbGF0ZXMgPSBzaWduYWw8XG4gICAgICAgIHtcbiAgICAgICAgICAgIHZpZXc6IE1kc1ZpZXc7XG4gICAgICAgICAgICBodG1sOiBTYWZlSHRtbDtcbiAgICAgICAgfVtdXG4gICAgPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqIHNob3cgZ3JvdXAgaGVhZGluZ3MgKCsgaWNvbnMpIGZvciB0aGUgaW5kaXZpZHVhbCB0ZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaG93R3JvdXBIZWFkaW5ncyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaGVhZGluZyBsZXZlbCBmcm9tIDEgdG8gNiB0byB1c2UgZm9yIHdpZGdldCBsYWJlbHMsIGVxdWl2YWxlbnQgdG8gYGgxYCB0byBgaDZgLlxuICAgICAqXG4gICAgICogSWYgbm90IHNldCwgd2lkZ2V0IGxhYmVscyBhcmUgbm90IG1hcmtlZCBhcyBoZWFkaW5ncyBhbmQgYW4gaW52aXNpYmxlIGNvbG9uIGlzIGFkZGVkIGJldHdlZW5cbiAgICAgKiBsYWJlbHMgYW5kIHZhbHVlcywgdGhhdCB3aWxsIGJlIHJlYWQgb3V0IGJ5IHNjcmVlbiByZWFkZXJzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhlYWRpbmdMZXZlbCh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnZpZXdJbnN0YW5jZS5oZWFkaW5nTGV2ZWwgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGhlYWRpbmdMZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0luc3RhbmNlLmhlYWRpbmdMZXZlbDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBtZHNTZXJ2aWNlOiBNZHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1kc1ZpZXdlclNlcnZpY2U6IE1kc1ZpZXdlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSB2aWV3SW5zdGFuY2U6IFZpZXdJbnN0YW5jZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgZ2V0R3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1kcy5ncm91cHMuZmluZCgoZzogYW55KSA9PiBnLmlkID09IHRoaXMuZ3JvdXBJZCk7XG4gICAgfVxuICAgIGdldFZpZXcoaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tZHMudmlld3MuZmluZCgodjogYW55KSA9PiB2LmlkID09IGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5mbGF0ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1kcykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluZmxhdGUoKSwgMTAwMCAvIDYwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5tZHNWaWV3ZXJTZXJ2aWNlLnZhbHVlcyQubmV4dCh0aGlzLmRhdGEpO1xuICAgICAgICAgICAgdGhpcy5tZHNWaWV3ZXJTZXJ2aWNlLm1kcyQubmV4dCh0aGlzLm1kcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5tZHNFZGl0b3JJbnN0YW5jZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLm1kc0VkaXRvckluc3RhbmNlU2VydmljZS5pbml0V2l0aG91dE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SWQsXG4gICAgICAgICAgICAgICAgICAgIEhPTUVfUkVQT1NJVE9SWSxcbiAgICAgICAgICAgICAgICAgICAgJ3ZpZXdlcicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemF0aW9uIHdhcyBpbnRlcnJ1cHRlZC4gUHJvYmFibHksIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYWdhaW4gYmVmb3JlIGl0XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIGZpbmlzaC5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHZpZXcgb2YgdGhpcy5nZXRHcm91cCgpLnZpZXdzKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5nZXRWaWV3KHZpZXcpO1xuICAgICAgICAgICAgdGVtcGxhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHZpZXc6IHYsXG4gICAgICAgICAgICAgICAgaHRtbDogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5wcmVwYXJlSFRNTCh2Lmh0bWwpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGVtcGxhdGVzLnNldCh0ZW1wbGF0ZXMpO1xuICAgICAgICAvLyB3YWl0IGZvciBhbmd1bGFyIHRvIGluZmxhdGUgdGhlIG5ldyBiaW5kaW5nXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB3aWRnZXQgb2YgKHRoaXMubWRzRWRpdG9ySW5zdGFuY2VTZXJ2aWNlPy53aWRnZXRzLnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5tZHMud2lkZ2V0cy5tYXAoKGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbml0YWxWYWx1ZXNBc3luYzogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50VmFsdWVzOiB0aGlzLmRhdGFbZGVmaW5pdGlvbi5pZCEhXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEluaXRpYWxWYWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW5pdGlhbERpc3BsYXlWYWx1ZXM6ICgpID0+IG5ldyBCZWhhdmlvclN1YmplY3Q8TWRzVmFsdWVMaXN0PihudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBNZHNWaWV3ZXJXaWRnZXQ7XG4gICAgICAgICAgICAgICAgfSkpIGFzIE1kc1ZpZXdlcldpZGdldFtdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIudG9BcnJheSgpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gYy5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LmRlZmluaXRpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgICk/LlswXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1kc0VkaXRvclZpZXdDb21wb25lbnQudXBkYXRlV2lkZ2V0V2l0aEhUTUxBdHRyaWJ1dGVzKGVsZW1lbnQsIHcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHJlcGxhY2VFbGVtZW50V2l0aERpdihlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgVUlTZXJ2aWNlLmluamVjdEFuZ3VsYXJDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWRzV2lkZ2V0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjbG9zZSBhbGwgY3VzdG9tIHRhZ3MgaW5zaWRlIHRoZSBodG1sIHdoaWNoIGFyZSBub3QgY2xvc2VkXG4gICAgICogZS5nLiA8Y206bmFtZT5cbiAgICAgKiAgICAgLT4gPGNtOm5hbWU+PC9jbTpuYW1lPlxuICAgICAqIEBwYXJhbSBodG1sXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlSFRNTChodG1sOiBzdHJpbmcpIHtcbiAgICAgICAgZm9yIChjb25zdCB3IG9mIHRoaXMubWRzLndpZGdldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gaHRtbC5pbmRleE9mKCc8JyArIHcuaWQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBodG1sLmluZGV4T2YoJz4nLCBzdGFydCkgKyAxO1xuICAgICAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKDAsIGVuZCkgKyAnPC8nICsgdy5pZCArICc+JyArIGh0bWwuc3Vic3RyaW5nKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBsZXQgaW5mbGF0ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hhbmdlcy5zZXRJZCkge1xuICAgICAgICAgICAgdGhpcy5tZHMgPSBhd2FpdCB0aGlzLm1kc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0TWV0YWRhdGFTZXQoeyBtZXRhZGF0YVNldDogdGhpcy5zZXRJZCB9KVxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIGluZmxhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbUmVzdENvbnN0YW50cy5DTV9QUk9QX01FVEFEQVRBU0VUX0VEVV9NRVRBREFUQVNFVF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWRzID0gYXdhaXQgdGhpcy5tZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRNZXRhZGF0YVNldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YVNldDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbUmVzdENvbnN0YW50cy5DTV9QUk9QX01FVEFEQVRBU0VUX0VEVV9NRVRBREFUQVNFVF1bMF0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubWRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZHMgPSBhd2FpdCB0aGlzLm1kc1NlcnZpY2UuZ2V0TWV0YWRhdGFTZXQoe30pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5mbGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZmxhdGUpIHtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5pbmZsYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZXMtc3Bpbm5lci1zbWFsbCAqbmdJZj1cIiF0ZW1wbGF0ZXMoKVwiPjwvZXMtc3Bpbm5lci1zbWFsbD5cbjxkaXYgKm5nRm9yPVwibGV0IHQgb2YgdGVtcGxhdGVzKClcIiAjY29udGFpbmVyIGNsYXNzPVwibWRzLXZpZXdlclwiPlxuICA8ZGl2ICpuZ0lmPVwic2hvd0dyb3VwSGVhZGluZ3MgJiYgdC52aWV3LmNhcHRpb25cIiBjbGFzcz1cImNhcmQtdGl0bGUtZWxlbWVudCBncm91cC1oZWFkaW5nXCI+XG4gICAgPGkgW2VzSWNvbl09XCJ0LnZpZXcuaWNvblwiICpuZ0lmPVwidC52aWV3Lmljb25cIj48L2k+PHNwYW4+e3sgdC52aWV3LmNhcHRpb24gfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidGVtcGxhdGVcIiBbaW5uZXJIVE1MXT1cInQuaHRtbFwiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { DatePipe } from '@angular/common';
2
- import { Component, Input, ViewChild, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, Input, signal, ViewChild, } from '@angular/core';
3
3
  import { MatRipple } from '@angular/material/core';
4
4
  import { filter, first, map } from 'rxjs/operators';
5
5
  import { RestConstants } from 'ngx-edu-sharing-api';
@@ -101,23 +101,30 @@ export class MdsWidgetComponent {
101
101
  * allow inline editing
102
102
  */
103
103
  this.inlineEditing = 'auto';
104
+ this.basicType = signal(null);
105
+ this.isEmpty = computed(() => {
106
+ if (this.basicType() === 'license') {
107
+ return false;
108
+ }
109
+ return this.value()?.every((v) => !v) || this.value()?.length === 0 || !this.value();
110
+ });
104
111
  this.license$ = new BehaviorSubject(null);
105
- this.value = undefined;
112
+ this.value = signal(undefined);
106
113
  this.temporaryValue = undefined;
107
114
  // super(toast, null, translate);
108
115
  }
109
116
  async ngOnChanges(changes) {
110
- this.value = await this.getNodeValue();
117
+ this.value.set(await this.getNodeValue());
111
118
  }
112
119
  async ngOnInit() {
113
- this.value = await this.getNodeValue();
120
+ this.value.set(await this.getNodeValue());
114
121
  this.widget
115
122
  .getInitialDisplayValues()
116
123
  .pipe(filter((v) => !!v))
117
124
  .subscribe(async (value) => {
118
- this.value = value.values.map((v) => v.displayString);
125
+ this.value.set(value.values.map((v) => v.displayString));
119
126
  });
120
- this.basicType = this.getBasicType();
127
+ this.basicType.set(this.getBasicType());
121
128
  this.rawValue = await this.getRawValue().toPromise();
122
129
  }
123
130
  getDefinition() {
@@ -162,7 +169,6 @@ export class MdsWidgetComponent {
162
169
  return MdsWidgetComponent.inlineEditing.includes(this.widget?.definition.type);
163
170
  }
164
171
  getNodeValues() {
165
- console.log(this.mdsViewerService);
166
172
  if (this.mdsEditorInstance) {
167
173
  return (this.mdsEditorInstance.values$.value ||
168
174
  this.mdsEditorInstance.nodes$.value.map((n) => n.properties));
@@ -228,14 +234,8 @@ export class MdsWidgetComponent {
228
234
  console.warn('Unsupported link type ' + this.getDefinition().link);
229
235
  }
230
236
  }
231
- isEmpty() {
232
- if (this.basicType === 'license') {
233
- return false;
234
- }
235
- return this.value?.every((v) => !v) || this.value?.length === 0 || !this.value;
236
- }
237
237
  formatDate() {
238
- return this.value.map((v) => {
238
+ return this.value().map((v) => {
239
239
  if (this.getDefinition().format) {
240
240
  try {
241
241
  return new DatePipe('en').transform(v, this.getDefinition().format);
@@ -255,7 +255,7 @@ export class MdsWidgetComponent {
255
255
  });
256
256
  }
257
257
  formatNumber() {
258
- return this.value.map((v) => {
258
+ return this.value().map((v) => {
259
259
  if (this.widget.definition.format === 'bytes') {
260
260
  return new FormatSizePipe(this.translate).transform(v);
261
261
  }
@@ -263,7 +263,7 @@ export class MdsWidgetComponent {
263
263
  });
264
264
  }
265
265
  formatText() {
266
- return this.value.map((v) => {
266
+ return this.value().map((v) => {
267
267
  if (this.widget.definition.format) {
268
268
  return this.widget.definition.format.replace('${value}', v);
269
269
  }
@@ -276,7 +276,7 @@ export class MdsWidgetComponent {
276
276
  await this.mdsEditorInstance.saveWidgetValue(instance.widget);
277
277
  }
278
278
  this.temporaryValue = instance.widget.getValue();
279
- this.value = await this.getNodeValue();
279
+ this.value.set(await this.getNodeValue());
280
280
  this.editWrapper.nativeElement.children[0].innerHTML = null;
281
281
  await this.mdsEditorInstance.fetchDisplayValues(this.widget);
282
282
  }
@@ -354,11 +354,11 @@ export class MdsWidgetComponent {
354
354
  void this.view.injectEditField(this, this.editWrapper.nativeElement.children[0]);
355
355
  }
356
356
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsWidgetComponent, deps: [{ token: i1.TranslateService }, { token: i2.UIService }, { token: i3.ViewInstanceService }, { token: i4.MdsViewerService }, { token: i5.NodeHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
357
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: MdsWidgetComponent, selector: "es-mds-widget", inputs: { widget: "widget", showCaption: "showCaption", inlineEditing: "inlineEditing", definition: "definition", view: "view" }, viewQueries: [{ propertyName: "editWrapper", first: true, predicate: ["editWrapper"], descendants: true }, { propertyName: "matRipple", first: true, predicate: MatRipple, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<es-mds-editor-widget-container\n *ngIf=\"!editWrapper.innerText.trim()\"\n [injectedView]=\"this\"\n [widget]=\"widget\"\n [label]=\"false\"\n [wrapInFormField]=\"false\"\n [wrapInGroup]=\"false\"\n [valueType]=\"valueType\"\n matRipple\n [matRippleDisabled]=\"true\"\n>\n <div class=\"edit-wrapper\">\n <div\n *ngIf=\"!isEmpty() || !widget.definition.hideIfEmpty || isEditable()\"\n class=\"widget-wrapper\"\n >\n <div\n class=\"widget-label\"\n [attr.role]=\"headingLevel ? 'heading' : null\"\n [attr.aria-level]=\"headingLevel\"\n *ngIf=\"widget.definition.caption && showCaption\"\n >\n {{ widget.definition.caption\n }}<span *ngIf=\"!headingLevel\" class=\"cdk-visually-hidden\">: </span>\n </div>\n <div\n class=\"value-wrapper\"\n [class.value-wrapper-edit]=\"isEditable()\"\n (click)=\"isEditable() ? startEdit($event) : null\"\n >\n <div *ngIf=\"isEmpty()\" class=\"widget-data widget-no-data widget-type-{{ basicType }}\">\n -\n </div>\n <div\n *ngIf=\"!isEmpty()\"\n class=\"widget-data widget-type-{{ basicType }} {{\n widget.definition.link ? 'widget-link' : ''\n }}\"\n (click)=\"click()\"\n >\n <div *ngIf=\"basicType === 'text'\">{{ formatText() }}</div>\n <div *ngIf=\"basicType === 'number'\">{{ formatNumber() }}</div>\n <div *ngIf=\"basicType === 'date'\">{{ formatDate() }}</div>\n <div *ngIf=\"basicType === 'license' && (license$ | async) as license\">\n <img alt=\"\" [src]=\"license.icon\" /> {{ license.name }}\n </div>\n <div *ngIf=\"basicType === 'array'\">\n <div class=\"array-entry\" *ngFor=\"let v of value\">{{ v }}</div>\n </div>\n <div *ngIf=\"basicType === 'tree'\">\n <div class=\"tree-entry\" *ngFor=\"let v of rawValue\">\n <ng-container *ngTemplateOutlet=\"treeEntry; context: { path: v.path }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"basicType === 'vcard'\">\n <div class=\"array-entry\" *ngFor=\"let v of value\">{{ v | vcardName }}</div>\n </div>\n <div *ngIf=\"basicType === 'slider'\">\n <span class=\"slider-value\">{{ value }}</span\n ><span> / </span><span class=\"slider-max\">{{ widget.definition.max }}</span>\n </div>\n <div *ngIf=\"basicType === 'duration'\">\n <span class=\"duration-value\">{{ value[0] | appMdsDuration }}</span>\n </div>\n <div *ngIf=\"basicType === 'range'\">\n <span class=\"slider-value\">{{ value[0] }}</span\n >-<span class=\"slider-value\">{{ value[1] }}</span>\n </div>\n <div *ngIf=\"basicType === 'unknown'\">\n The widget type {{ widget.definition.type }} is currently not supported via angular\n rendering\n </div>\n </div>\n </div>\n </div>\n <!--<button mat-icon-button\n *ngIf=\"mdsEditorInstance.editorMode === 'inline' && widget.definition.interactionType === 'Input'\"\n (click)=\"view.injectEditField(this, edit)\"\n class=\"btn-edit\">\n <i esIcon=\"edit\"></i>\n </button>-->\n </div>\n</es-mds-editor-widget-container>\n<div class=\"edit-wrapper\">\n <div #editWrapper><div #edit></div></div>\n <!--<button *ngIf=\"!!editWrapper.innerText.trim()\" mat-icon-button><i esIcon=\"save\"></i></button>-->\n</div>\n<ng-template #treeEntry let-path=\"path\">\n <ng-container *ngFor=\"let t of path; let first = first\">\n <ng-container *ngIf=\"!first\">\n <span class=\"cdk-visually-hidden\">{{ 'SUB_CATEGORY_ARIA' | translate }}</span>\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"false\"></i>\n </ng-container>\n <a\n [routerLink]=\"'/' + ROUTER_PREFIX + 'search'\"\n [queryParams]=\"getSearchParams(t)\"\n *ngIf=\"widget.definition.isSearchable\"\n >{{ t.caption }}</a\n >\n <span *ngIf=\"!widget.definition.isSearchable\">{{ t.caption }}</span>\n </ng-container>\n</ng-template>\n", styles: [".widget-label{font-size:90%;opacity:.8}.edit-wrapper{display:flex;align-items:center;transition:var(--transitionNormal) all}.edit-wrapper>div:first-child{flex-grow:1}.edit-wrapper>button{margin-left:10px}.edit-wrapper .widget-wrapper{padding:2px 5px}.edit-wrapper .value-wrapper-edit:hover{outline:1px solid #ccc;cursor:text}.widget-data{padding:4px 0 10px;word-break:break-word}.widget-data.widget-type-slider{opacity:.8}.widget-data.widget-type-slider .slider-value{opacity:.9;font-weight:700}.widget-data.widget-type-array .array-entry,.widget-data.widget-type-vcard .array-entry{display:inline}.widget-data.widget-type-array .array-entry:not(:last-child):after,.widget-data.widget-type-vcard .array-entry:not(:last-child):after{content:\", \";padding-right:.3em;display:inline;align-items:flex-end}.widget-data.widget-type-tree>div{display:flex;flex-wrap:wrap;gap:10px}.widget-data.widget-type-tree .tree-entry{display:inline-block;border-radius:5px;padding:5px 10px;background-color:#f9f9f9}.widget-data.widget-type-tree .tree-entry>a{color:var(--palette-primary-800);text-decoration:none}.widget-data.widget-type-tree .tree-entry>*{vertical-align:middle}.widget-data.widget-type-tree .tree-entry>i{font-size:18px}.widget-data.widget-link{text-decoration:underline;cursor:pointer}.widget-type-text>div{white-space:pre-line}:host ::ng-deep .edit-wrapper .widget-container mat-form-field{margin-top:.5em}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i10.MdsDurationPipe, name: "appMdsDuration" }, { kind: "pipe", type: i11.VCardNamePipe, name: "vcardName" }] }); }
357
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: MdsWidgetComponent, selector: "es-mds-widget", inputs: { widget: "widget", showCaption: "showCaption", inlineEditing: "inlineEditing", definition: "definition", view: "view" }, viewQueries: [{ propertyName: "editWrapper", first: true, predicate: ["editWrapper"], descendants: true }, { propertyName: "matRipple", first: true, predicate: MatRipple, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<es-mds-editor-widget-container\n *ngIf=\"!editWrapper.innerText.trim()\"\n [injectedView]=\"this\"\n [widget]=\"widget\"\n [label]=\"false\"\n [wrapInFormField]=\"false\"\n [wrapInGroup]=\"false\"\n [valueType]=\"valueType\"\n matRipple\n [matRippleDisabled]=\"true\"\n>\n <div class=\"edit-wrapper\">\n <div\n *ngIf=\"!isEmpty() || !widget.definition.hideIfEmpty || isEditable()\"\n class=\"widget-wrapper\"\n >\n <div\n class=\"widget-label\"\n [attr.role]=\"headingLevel ? 'heading' : null\"\n [attr.aria-level]=\"headingLevel\"\n *ngIf=\"widget.definition.caption && showCaption\"\n >\n {{ widget.definition.caption\n }}<span *ngIf=\"!headingLevel\" class=\"cdk-visually-hidden\">: </span>\n </div>\n <div\n class=\"value-wrapper\"\n [class.value-wrapper-edit]=\"isEditable()\"\n (click)=\"isEditable() ? startEdit($event) : null\"\n >\n <div *ngIf=\"isEmpty()\" class=\"widget-data widget-no-data widget-type-{{ basicType() }}\">\n -\n </div>\n <div\n *ngIf=\"!isEmpty()\"\n class=\"widget-data widget-type-{{ basicType() }} {{\n widget.definition.link ? 'widget-link' : ''\n }}\"\n (click)=\"click()\"\n >\n <div *ngIf=\"basicType() === 'text'\">{{ formatText() }}</div>\n <div *ngIf=\"basicType() === 'number'\">{{ formatNumber() }}</div>\n <div *ngIf=\"basicType() === 'date'\">{{ formatDate() }}</div>\n <div *ngIf=\"basicType() === 'license' && (license$ | async) as license\">\n <img alt=\"\" [src]=\"license.icon\" /> {{ license.name }}\n </div>\n <div *ngIf=\"basicType() === 'array'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v }}</div>\n </div>\n <div *ngIf=\"basicType() === 'tree'\">\n <div class=\"tree-entry\" *ngFor=\"let v of rawValue\">\n <ng-container *ngTemplateOutlet=\"treeEntry; context: { path: v.path }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"basicType() === 'vcard'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v | vcardName }}</div>\n </div>\n <div *ngIf=\"basicType() === 'slider'\">\n <span class=\"slider-value\">{{ value }}</span\n ><span> / </span><span class=\"slider-max\">{{ widget.definition.max }}</span>\n </div>\n <div *ngIf=\"basicType() === 'duration'\">\n <span class=\"duration-value\">{{ value()[0] | appMdsDuration }}</span>\n </div>\n <div *ngIf=\"basicType() === 'range'\">\n <span class=\"slider-value\">{{ value()[0] }}</span\n >-<span class=\"slider-value\">{{ value()[1] }}</span>\n </div>\n <div *ngIf=\"basicType() === 'unknown'\">\n The widget type {{ widget.definition.type }} is currently not supported via angular\n rendering\n </div>\n </div>\n </div>\n </div>\n <!--<button mat-icon-button\n *ngIf=\"mdsEditorInstance.editorMode === 'inline' && widget.definition.interactionType === 'Input'\"\n (click)=\"view.injectEditField(this, edit)\"\n class=\"btn-edit\">\n <i esIcon=\"edit\"></i>\n </button>-->\n </div>\n</es-mds-editor-widget-container>\n<div class=\"edit-wrapper\">\n <div #editWrapper><div #edit></div></div>\n <!--<button *ngIf=\"!!editWrapper.innerText.trim()\" mat-icon-button><i esIcon=\"save\"></i></button>-->\n</div>\n<ng-template #treeEntry let-path=\"path\">\n <ng-container *ngFor=\"let t of path; let first = first\">\n <ng-container *ngIf=\"!first\">\n <span class=\"cdk-visually-hidden\">{{ 'SUB_CATEGORY_ARIA' | translate }}</span>\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"false\"></i>\n </ng-container>\n <a\n [routerLink]=\"'/' + ROUTER_PREFIX + 'search'\"\n [queryParams]=\"getSearchParams(t)\"\n *ngIf=\"widget.definition.isSearchable\"\n >{{ t.caption }}</a\n >\n <span *ngIf=\"!widget.definition.isSearchable\">{{ t.caption }}</span>\n </ng-container>\n</ng-template>\n", styles: [".widget-label{font-size:90%;opacity:.8}.edit-wrapper{display:flex;align-items:center;transition:var(--transitionNormal) all}.edit-wrapper>div:first-child{flex-grow:1}.edit-wrapper>button{margin-left:10px}.edit-wrapper .widget-wrapper{padding:2px 5px}.edit-wrapper .value-wrapper-edit:hover{outline:1px solid #ccc;cursor:text}.widget-data{padding:4px 0 10px;word-break:break-word}.widget-data.widget-type-slider{opacity:.8}.widget-data.widget-type-slider .slider-value{opacity:.9;font-weight:700}.widget-data.widget-type-array .array-entry,.widget-data.widget-type-vcard .array-entry{display:inline}.widget-data.widget-type-array .array-entry:not(:last-child):after,.widget-data.widget-type-vcard .array-entry:not(:last-child):after{content:\", \";padding-right:.3em;display:inline;align-items:flex-end}.widget-data.widget-type-tree>div{display:flex;flex-wrap:wrap;gap:10px}.widget-data.widget-type-tree .tree-entry{display:inline-block;border-radius:5px;padding:5px 10px;background-color:#f9f9f9}.widget-data.widget-type-tree .tree-entry>a{color:var(--palette-primary-800);text-decoration:none}.widget-data.widget-type-tree .tree-entry>*{vertical-align:middle}.widget-data.widget-type-tree .tree-entry>i{font-size:18px}.widget-data.widget-link{text-decoration:underline;cursor:pointer}.widget-type-text>div{white-space:pre-line}:host ::ng-deep .edit-wrapper .widget-container mat-form-field{margin-top:.5em}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i10.MdsDurationPipe, name: "appMdsDuration" }, { kind: "pipe", type: i11.VCardNamePipe, name: "vcardName" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
358
358
  }
359
359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsWidgetComponent, decorators: [{
360
360
  type: Component,
361
- args: [{ selector: 'es-mds-widget', template: "<es-mds-editor-widget-container\n *ngIf=\"!editWrapper.innerText.trim()\"\n [injectedView]=\"this\"\n [widget]=\"widget\"\n [label]=\"false\"\n [wrapInFormField]=\"false\"\n [wrapInGroup]=\"false\"\n [valueType]=\"valueType\"\n matRipple\n [matRippleDisabled]=\"true\"\n>\n <div class=\"edit-wrapper\">\n <div\n *ngIf=\"!isEmpty() || !widget.definition.hideIfEmpty || isEditable()\"\n class=\"widget-wrapper\"\n >\n <div\n class=\"widget-label\"\n [attr.role]=\"headingLevel ? 'heading' : null\"\n [attr.aria-level]=\"headingLevel\"\n *ngIf=\"widget.definition.caption && showCaption\"\n >\n {{ widget.definition.caption\n }}<span *ngIf=\"!headingLevel\" class=\"cdk-visually-hidden\">: </span>\n </div>\n <div\n class=\"value-wrapper\"\n [class.value-wrapper-edit]=\"isEditable()\"\n (click)=\"isEditable() ? startEdit($event) : null\"\n >\n <div *ngIf=\"isEmpty()\" class=\"widget-data widget-no-data widget-type-{{ basicType }}\">\n -\n </div>\n <div\n *ngIf=\"!isEmpty()\"\n class=\"widget-data widget-type-{{ basicType }} {{\n widget.definition.link ? 'widget-link' : ''\n }}\"\n (click)=\"click()\"\n >\n <div *ngIf=\"basicType === 'text'\">{{ formatText() }}</div>\n <div *ngIf=\"basicType === 'number'\">{{ formatNumber() }}</div>\n <div *ngIf=\"basicType === 'date'\">{{ formatDate() }}</div>\n <div *ngIf=\"basicType === 'license' && (license$ | async) as license\">\n <img alt=\"\" [src]=\"license.icon\" /> {{ license.name }}\n </div>\n <div *ngIf=\"basicType === 'array'\">\n <div class=\"array-entry\" *ngFor=\"let v of value\">{{ v }}</div>\n </div>\n <div *ngIf=\"basicType === 'tree'\">\n <div class=\"tree-entry\" *ngFor=\"let v of rawValue\">\n <ng-container *ngTemplateOutlet=\"treeEntry; context: { path: v.path }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"basicType === 'vcard'\">\n <div class=\"array-entry\" *ngFor=\"let v of value\">{{ v | vcardName }}</div>\n </div>\n <div *ngIf=\"basicType === 'slider'\">\n <span class=\"slider-value\">{{ value }}</span\n ><span> / </span><span class=\"slider-max\">{{ widget.definition.max }}</span>\n </div>\n <div *ngIf=\"basicType === 'duration'\">\n <span class=\"duration-value\">{{ value[0] | appMdsDuration }}</span>\n </div>\n <div *ngIf=\"basicType === 'range'\">\n <span class=\"slider-value\">{{ value[0] }}</span\n >-<span class=\"slider-value\">{{ value[1] }}</span>\n </div>\n <div *ngIf=\"basicType === 'unknown'\">\n The widget type {{ widget.definition.type }} is currently not supported via angular\n rendering\n </div>\n </div>\n </div>\n </div>\n <!--<button mat-icon-button\n *ngIf=\"mdsEditorInstance.editorMode === 'inline' && widget.definition.interactionType === 'Input'\"\n (click)=\"view.injectEditField(this, edit)\"\n class=\"btn-edit\">\n <i esIcon=\"edit\"></i>\n </button>-->\n </div>\n</es-mds-editor-widget-container>\n<div class=\"edit-wrapper\">\n <div #editWrapper><div #edit></div></div>\n <!--<button *ngIf=\"!!editWrapper.innerText.trim()\" mat-icon-button><i esIcon=\"save\"></i></button>-->\n</div>\n<ng-template #treeEntry let-path=\"path\">\n <ng-container *ngFor=\"let t of path; let first = first\">\n <ng-container *ngIf=\"!first\">\n <span class=\"cdk-visually-hidden\">{{ 'SUB_CATEGORY_ARIA' | translate }}</span>\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"false\"></i>\n </ng-container>\n <a\n [routerLink]=\"'/' + ROUTER_PREFIX + 'search'\"\n [queryParams]=\"getSearchParams(t)\"\n *ngIf=\"widget.definition.isSearchable\"\n >{{ t.caption }}</a\n >\n <span *ngIf=\"!widget.definition.isSearchable\">{{ t.caption }}</span>\n </ng-container>\n</ng-template>\n", styles: [".widget-label{font-size:90%;opacity:.8}.edit-wrapper{display:flex;align-items:center;transition:var(--transitionNormal) all}.edit-wrapper>div:first-child{flex-grow:1}.edit-wrapper>button{margin-left:10px}.edit-wrapper .widget-wrapper{padding:2px 5px}.edit-wrapper .value-wrapper-edit:hover{outline:1px solid #ccc;cursor:text}.widget-data{padding:4px 0 10px;word-break:break-word}.widget-data.widget-type-slider{opacity:.8}.widget-data.widget-type-slider .slider-value{opacity:.9;font-weight:700}.widget-data.widget-type-array .array-entry,.widget-data.widget-type-vcard .array-entry{display:inline}.widget-data.widget-type-array .array-entry:not(:last-child):after,.widget-data.widget-type-vcard .array-entry:not(:last-child):after{content:\", \";padding-right:.3em;display:inline;align-items:flex-end}.widget-data.widget-type-tree>div{display:flex;flex-wrap:wrap;gap:10px}.widget-data.widget-type-tree .tree-entry{display:inline-block;border-radius:5px;padding:5px 10px;background-color:#f9f9f9}.widget-data.widget-type-tree .tree-entry>a{color:var(--palette-primary-800);text-decoration:none}.widget-data.widget-type-tree .tree-entry>*{vertical-align:middle}.widget-data.widget-type-tree .tree-entry>i{font-size:18px}.widget-data.widget-link{text-decoration:underline;cursor:pointer}.widget-type-text>div{white-space:pre-line}:host ::ng-deep .edit-wrapper .widget-container mat-form-field{margin-top:.5em}\n"] }]
361
+ args: [{ selector: 'es-mds-widget', changeDetection: ChangeDetectionStrategy.Default, template: "<es-mds-editor-widget-container\n *ngIf=\"!editWrapper.innerText.trim()\"\n [injectedView]=\"this\"\n [widget]=\"widget\"\n [label]=\"false\"\n [wrapInFormField]=\"false\"\n [wrapInGroup]=\"false\"\n [valueType]=\"valueType\"\n matRipple\n [matRippleDisabled]=\"true\"\n>\n <div class=\"edit-wrapper\">\n <div\n *ngIf=\"!isEmpty() || !widget.definition.hideIfEmpty || isEditable()\"\n class=\"widget-wrapper\"\n >\n <div\n class=\"widget-label\"\n [attr.role]=\"headingLevel ? 'heading' : null\"\n [attr.aria-level]=\"headingLevel\"\n *ngIf=\"widget.definition.caption && showCaption\"\n >\n {{ widget.definition.caption\n }}<span *ngIf=\"!headingLevel\" class=\"cdk-visually-hidden\">: </span>\n </div>\n <div\n class=\"value-wrapper\"\n [class.value-wrapper-edit]=\"isEditable()\"\n (click)=\"isEditable() ? startEdit($event) : null\"\n >\n <div *ngIf=\"isEmpty()\" class=\"widget-data widget-no-data widget-type-{{ basicType() }}\">\n -\n </div>\n <div\n *ngIf=\"!isEmpty()\"\n class=\"widget-data widget-type-{{ basicType() }} {{\n widget.definition.link ? 'widget-link' : ''\n }}\"\n (click)=\"click()\"\n >\n <div *ngIf=\"basicType() === 'text'\">{{ formatText() }}</div>\n <div *ngIf=\"basicType() === 'number'\">{{ formatNumber() }}</div>\n <div *ngIf=\"basicType() === 'date'\">{{ formatDate() }}</div>\n <div *ngIf=\"basicType() === 'license' && (license$ | async) as license\">\n <img alt=\"\" [src]=\"license.icon\" /> {{ license.name }}\n </div>\n <div *ngIf=\"basicType() === 'array'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v }}</div>\n </div>\n <div *ngIf=\"basicType() === 'tree'\">\n <div class=\"tree-entry\" *ngFor=\"let v of rawValue\">\n <ng-container *ngTemplateOutlet=\"treeEntry; context: { path: v.path }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"basicType() === 'vcard'\">\n <div class=\"array-entry\" *ngFor=\"let v of value()\">{{ v | vcardName }}</div>\n </div>\n <div *ngIf=\"basicType() === 'slider'\">\n <span class=\"slider-value\">{{ value }}</span\n ><span> / </span><span class=\"slider-max\">{{ widget.definition.max }}</span>\n </div>\n <div *ngIf=\"basicType() === 'duration'\">\n <span class=\"duration-value\">{{ value()[0] | appMdsDuration }}</span>\n </div>\n <div *ngIf=\"basicType() === 'range'\">\n <span class=\"slider-value\">{{ value()[0] }}</span\n >-<span class=\"slider-value\">{{ value()[1] }}</span>\n </div>\n <div *ngIf=\"basicType() === 'unknown'\">\n The widget type {{ widget.definition.type }} is currently not supported via angular\n rendering\n </div>\n </div>\n </div>\n </div>\n <!--<button mat-icon-button\n *ngIf=\"mdsEditorInstance.editorMode === 'inline' && widget.definition.interactionType === 'Input'\"\n (click)=\"view.injectEditField(this, edit)\"\n class=\"btn-edit\">\n <i esIcon=\"edit\"></i>\n </button>-->\n </div>\n</es-mds-editor-widget-container>\n<div class=\"edit-wrapper\">\n <div #editWrapper><div #edit></div></div>\n <!--<button *ngIf=\"!!editWrapper.innerText.trim()\" mat-icon-button><i esIcon=\"save\"></i></button>-->\n</div>\n<ng-template #treeEntry let-path=\"path\">\n <ng-container *ngFor=\"let t of path; let first = first\">\n <ng-container *ngIf=\"!first\">\n <span class=\"cdk-visually-hidden\">{{ 'SUB_CATEGORY_ARIA' | translate }}</span>\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"false\"></i>\n </ng-container>\n <a\n [routerLink]=\"'/' + ROUTER_PREFIX + 'search'\"\n [queryParams]=\"getSearchParams(t)\"\n *ngIf=\"widget.definition.isSearchable\"\n >{{ t.caption }}</a\n >\n <span *ngIf=\"!widget.definition.isSearchable\">{{ t.caption }}</span>\n </ng-container>\n</ng-template>\n", styles: [".widget-label{font-size:90%;opacity:.8}.edit-wrapper{display:flex;align-items:center;transition:var(--transitionNormal) all}.edit-wrapper>div:first-child{flex-grow:1}.edit-wrapper>button{margin-left:10px}.edit-wrapper .widget-wrapper{padding:2px 5px}.edit-wrapper .value-wrapper-edit:hover{outline:1px solid #ccc;cursor:text}.widget-data{padding:4px 0 10px;word-break:break-word}.widget-data.widget-type-slider{opacity:.8}.widget-data.widget-type-slider .slider-value{opacity:.9;font-weight:700}.widget-data.widget-type-array .array-entry,.widget-data.widget-type-vcard .array-entry{display:inline}.widget-data.widget-type-array .array-entry:not(:last-child):after,.widget-data.widget-type-vcard .array-entry:not(:last-child):after{content:\", \";padding-right:.3em;display:inline;align-items:flex-end}.widget-data.widget-type-tree>div{display:flex;flex-wrap:wrap;gap:10px}.widget-data.widget-type-tree .tree-entry{display:inline-block;border-radius:5px;padding:5px 10px;background-color:#f9f9f9}.widget-data.widget-type-tree .tree-entry>a{color:var(--palette-primary-800);text-decoration:none}.widget-data.widget-type-tree .tree-entry>*{vertical-align:middle}.widget-data.widget-type-tree .tree-entry>i{font-size:18px}.widget-data.widget-link{text-decoration:underline;cursor:pointer}.widget-type-text>div{white-space:pre-line}:host ::ng-deep .edit-wrapper .widget-container mat-form-field{margin-top:.5em}\n"] }]
362
362
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.UIService }, { type: i3.ViewInstanceService }, { type: i4.MdsViewerService }, { type: i5.NodeHelperService }], propDecorators: { widget: [{
363
363
  type: Input
364
364
  }], showCaption: [{
@@ -376,4 +376,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
376
376
  type: ViewChild,
377
377
  args: [MatRipple]
378
378
  }] } });
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvd2lkZ2V0L21kcy13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9tZHMtdmlld2VyL3dpZGdldC9tZHMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBNkIsYUFBYSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBSzNDLE1BQU0sQ0FBTixJQUFZLE9BVVg7QUFWRCxXQUFZLE9BQU87SUFDZixvQkFBUyxDQUFBO0lBQ1QsNkJBQWtCLENBQUE7SUFDbEIsc0JBQVcsQ0FBQTtJQUNYLDZCQUFrQixDQUFBO0lBQ2xCLDJDQUFnQyxDQUFB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V0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDOytHQXBVUSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrVEErQmhCLFNBQVMscUVDaEl4QixnbklBc0dBOzs0RkRMYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksZUFBZTs4TUF5QmhCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRW9CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRixTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZHNWYWx1ZSwgTWRzV2lkZ2V0LCBOb2RlLCBSZXN0Q29uc3RhbnRzLCBTdWdnZXN0aW9uIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBVSUNvbnN0YW50cyB9IGZyb20gJy4uLy4uL3V0aWwvdWktY29uc3RhbnRzJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL0RhdGVIZWxwZXInO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBWaWV3SW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vdmlldy1pbnN0YW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3RIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL3Jlc3QtaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdFNpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvZmlsZS1zaXplLnBpcGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWRzVmlld2VyU2VydmljZSB9IGZyb20gJy4uL21kcy12aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWYWx1ZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWFyY2gtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcblxuZXhwb3J0IGVudW0gTWRzVHlwZSB7XG4gICAgSW8gPSAnaW8nLFxuICAgIElvQnVsayA9ICdpb19idWxrJyxcbiAgICBNYXAgPSAnbWFwJyxcbiAgICBNYXBSZWYgPSAnbWFwX3JlZicsXG4gICAgSW9DaGlsZE9iamVjdCA9ICdpb19jaGlsZG9iamVjdCcsXG4gICAgQ29sbGVjdGlvbiA9ICdjb2xsZWN0aW9uJyxcbiAgICBUb29sRGVmaW5pdGlvbiA9ICd0b29sX2RlZmluaXRpb24nLFxuICAgIFRvb2xJbnN0YW5jZSA9ICd0b29sX2luc3RhbmNlJyxcbiAgICBTYXZlZFNlYXJjaCA9ICdzYXZlZF9zZWFyY2gnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kc1ZhbHVlTGlzdCB7XG4gICAgdmFsdWVzOiBTdWdnZXN0aW9uW107XG59XG5leHBvcnQgaW50ZXJmYWNlIE1kc1ZpZXdlcldpZGdldCB7XG4gICAgZGVmaW5pdGlvbjogTWRzV2lkZ2V0O1xuICAgIGdldEluaXRhbFZhbHVlc0FzeW5jKCk6IFByb21pc2U8SW5pdGlhbFZhbHVlcz47XG4gICAgZ2V0SW5pdGlhbERpc3BsYXlWYWx1ZXMoKTogQmVoYXZpb3JTdWJqZWN0PE1kc1ZhbHVlTGlzdD47XG59XG5leHBvcnQgZW51bSBNZHNXaWRnZXRUeXBlIHtcbiAgICBUZXh0ID0gJ3RleHQnLFxuICAgIE51bWJlciA9ICdudW1iZXInLFxuICAgIEVtYWlsID0gJ2VtYWlsJyxcbiAgICBEYXRlID0gJ2RhdGUnLFxuICAgIE1vbnRoID0gJ21vbnRoJyxcbiAgICBDb2xvciA9ICdjb2xvcicsXG4gICAgVGV4dGFyZWEgPSAndGV4dGFyZWEnLFxuICAgIFRpbnlNQ0UgPSAndGlueU1DRScsXG4gICAgVkNhcmQgPSAndmNhcmQnLFxuICAgIENoZWNrYm94ID0gJ2NoZWNrYm94JyxcbiAgICBSYWRpb0hvcml6b250YWwgPSAncmFkaW9Ib3Jpem9udGFsJyxcbiAgICBSYWRpb1ZlcnRpY2FsID0gJ3JhZGlvVmVydGljYWwnLFxuICAgIENoZWNrYm94SG9yaXpvbnRhbCA9ICdjaGVja2JveEhvcml6b250YWwnLFxuICAgIENoZWNrYm94VmVydGljYWwgPSAnY2hlY2tib3hWZXJ0aWNhbCcsXG4gICAgTXVsdGlWYWx1ZUJhZGdlcyA9ICdtdWx0aXZhbHVlQmFkZ2VzJyxcbiAgICBNdWx0aVZhbHVlRml4ZWRCYWRnZXMgPSAnbXVsdGl2YWx1ZUZpeGVkQmFkZ2VzJyxcbiAgICBNdWx0aVZhbHVlU3VnZ2VzdEJhZGdlcyA9ICdtdWx0aXZhbHVlU3VnZ2VzdEJhZGdlcycsXG4gICAgTXVsdGlWYWx1ZUF1dGhvcml0eUJhZGdlcyA9ICdtdWx0aXZhbHVlQXV0aG9yaXR5QmFkZ2VzJyxcbiAgICBTaW5nbGVvcHRpb24gPSAnc2luZ2xlb3B0aW9uJyxcbiAgICBTbGlkZXIgPSAnc2xpZGVyJyxcbiAgICBSYW5nZSA9ICdyYW5nZScsXG4gICAgRHVyYXRpb24gPSAnZHVyYXRpb24nLFxuICAgIFNpbmdsZVZhbHVlVHJlZSA9ICdzaW5nbGV2YWx1ZVRyZWUnLFxuICAgIFNpbmdsZVZhbHVlU3VnZ2VzdEJhZGdlcyA9ICdzaW5nbGV2YWx1ZVN1Z2dlc3RCYWRnZXMnLFxuICAgIE11bHRpVmFsdWVUcmVlID0gJ211bHRpdmFsdWVUcmVlJyxcbiAgICBEZWZhdWx0VmFsdWUgPSAnZGVmYXVsdHZhbHVlJyxcbiAgICBGYWNldExpc3QgPSAnZmFjZXRMaXN0Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsVmFsdWVzIHtcbiAgICAvKiogVmFsdWVzIHRoYXQgYXJlIGluaXRpYWxseSBwcmVzZW50IGluIGFsbCBub2Rlcy4gKi9cbiAgICByZWFkb25seSBqb2ludFZhbHVlczogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogVmFsdWVzIHRoYXQgYXJlIGluaXRpYWxseSBwcmVzZW50IGluIHNvbWUgYnV0IG5vdCBhbGwgbm9kZXMuXG4gICAgICpcbiAgICAgKiBDYW4gYmUgbnVsbCBidXQgd2lsbCBuZXZlciBiZSBzZXQgdG8gYW4gZW1wdHkgYXJyYXkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5kaXZpZHVhbFZhbHVlcz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBTdHJpbmcsXG4gICAgTXVsdGlWYWx1ZSxcbiAgICBSYW5nZSxcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1tZHMtd2lkZ2V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJ21kcy13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydtZHMtd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgLy8gcmVxdWlyZWQgZm9yIGV4dGVybmFsIGVkaXRvciBpbmplY3Rpb25cbn0pXG5leHBvcnQgY2xhc3MgTWRzV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIHJlYWRvbmx5IFJPVVRFUl9QUkVGSVggPSBVSUNvbnN0YW50cy5ST1VURVJfUFJFRklYO1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGlubGluZUVkaXRpbmc6IE1kc1dpZGdldFR5cGVbXSA9IFtcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5UZXh0LFxuICAgICAgICBNZHNXaWRnZXRUeXBlLk51bWJlcixcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5EYXRlLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLkVtYWlsLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLlRleHRhcmVhLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLlNpbmdsZW9wdGlvbixcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5TaW5nbGVWYWx1ZVRyZWUsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuU2luZ2xlVmFsdWVTdWdnZXN0QmFkZ2VzLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLk11bHRpVmFsdWVCYWRnZXMsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuTXVsdGlWYWx1ZUZpeGVkQmFkZ2VzLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLk11bHRpVmFsdWVTdWdnZXN0QmFkZ2VzLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLk11bHRpVmFsdWVUcmVlLFxuICAgIF07XG5cbiAgICByZWFkb25seSB2YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuU3RyaW5nO1xuXG4gICAgLy8gdXNlIGFueSBpbnN0ZWFkIG9mIGBXaWRnZXRgIGNhdXNlIG9mIGV4dGVybmFsIHR5cGVcbiAgICBASW5wdXQoKSB3aWRnZXQ6IE1kc1ZpZXdlcldpZGdldDtcbiAgICBASW5wdXQoKSBzaG93Q2FwdGlvbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogYWxsb3cgaW5saW5lIGVkaXRpbmdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbmxpbmVFZGl0aW5nOiAnYXV0bycgfCAnYWx3YXlzJyA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBkZWZpbml0aW9uOiBNZHNXaWRnZXQ7XG4gICAgLy8gdXNlIGFueSBpbnN0ZWFkIG9mIE1kc0VkaXRvclZpZXdDb21wb25lbnQgY2F1c2Ugb2YgZXh0ZXJuYWwgdHlwZVxuICAgIEBJbnB1dCgpIHZpZXc6IGFueTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRXcmFwcGVyJykgZWRpdFdyYXBwZXI6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChNYXRSaXBwbGUpIG1hdFJpcHBsZTogTWF0UmlwcGxlO1xuICAgIGJhc2ljVHlwZTogc3RyaW5nO1xuICAgIHJhd1ZhbHVlOiB7IHBhdGg6IE1kc1ZhbHVlW107IGlkOiBzdHJpbmcgfVtdO1xuXG4gICAgcHJpdmF0ZSBtZHNFZGl0b3JJbnN0YW5jZTogYW55O1xuICAgIGxpY2Vuc2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IG5hbWU6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+KG51bGwpO1xuXG4gICAgZ2V0IGhlYWRpbmdMZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0luc3RhbmNlLmhlYWRpbmdMZXZlbDtcbiAgICB9XG5cbiAgICB2YWx1ZTogc3RyaW5nW10gPSB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSB0ZW1wb3JhcnlWYWx1ZTogc3RyaW5nW10gPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgLy8gcHVibGljIG1kc0VkaXRvckluc3RhbmNlOiBNZHNFZGl0b3JJbnN0YW5jZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdWk6IFVJU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3SW5zdGFuY2U6IFZpZXdJbnN0YW5jZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWRzVmlld2VyU2VydmljZTogTWRzVmlld2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub2RlSGVscGVyOiBOb2RlSGVscGVyU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgLy8gc3VwZXIodG9hc3QsIG51bGwsIHRyYW5zbGF0ZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICB0aGlzLnZhbHVlID0gYXdhaXQgdGhpcy5nZXROb2RlVmFsdWUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGF3YWl0IHRoaXMuZ2V0Tm9kZVZhbHVlKCk7XG4gICAgICAgIHRoaXMud2lkZ2V0XG4gICAgICAgICAgICAuZ2V0SW5pdGlhbERpc3BsYXlWYWx1ZXMoKVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCh2OiBNZHNWYWx1ZUxpc3QpID0+ICEhdikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jICh2YWx1ZTogTWRzVmFsdWVMaXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlcy5tYXAoKHYpID0+IHYuZGlzcGxheVN0cmluZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXNpY1R5cGUgPSB0aGlzLmdldEJhc2ljVHlwZSgpO1xuICAgICAgICB0aGlzLnJhd1ZhbHVlID0gYXdhaXQgdGhpcy5nZXRSYXdWYWx1ZSgpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldERlZmluaXRpb24oKTogTWRzV2lkZ2V0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0Py5kZWZpbml0aW9uIHx8IHRoaXMuZGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgICBnZXRCYXNpY1R5cGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5nZXREZWZpbml0aW9uKCkuaWQpIHtcbiAgICAgICAgICAgIGNhc2UgJ2xpY2Vuc2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbGljZW5zZSc7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmdldERlZmluaXRpb24oKS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgICAgIGNhc2UgJ3NpbmdsZW9wdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgICAgICAgIGNhc2UgJ3ZjYXJkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZjYXJkJztcbiAgICAgICAgICAgIGNhc2UgJ211bHRpdmFsdWVGaXhlZEJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdtdWx0aXZhbHVlU3VnZ2VzdEJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdzaW5nbGV2YWx1ZVN1Z2dlc3RCYWRnZXMnOlxuICAgICAgICAgICAgY2FzZSAnbXVsdGl2YWx1ZUJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdzaW5nbGV2YWx1ZVRyZWUnOlxuICAgICAgICAgICAgY2FzZSAnbXVsdGl2YWx1ZVRyZWUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdJbnN0YW5jZS50cmVlRGlzcGxheSA9PT0gJ2ZsYXQnID8gJ2FycmF5JyA6ICd0cmVlJztcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzbGlkZXInO1xuICAgICAgICAgICAgY2FzZSAnZHVyYXRpb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZHVyYXRpb24nO1xuICAgICAgICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAncmFuZ2UnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuXG4gICAgc3VwcG9ydHNJbmxpbmVFZGl0aW5nKCkge1xuICAgICAgICByZXR1cm4gTWRzV2lkZ2V0Q29tcG9uZW50LmlubGluZUVkaXRpbmcuaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLndpZGdldD8uZGVmaW5pdGlvbi50eXBlIGFzIE1kc1dpZGdldFR5cGUsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Tm9kZVZhbHVlcygpIHtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5tZHNWaWV3ZXJTZXJ2aWNlKTtcbiAgICAgICAgaWYgKHRoaXMubWRzRWRpdG9ySW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHRoaXMubWRzRWRpdG9ySW5zdGFuY2UudmFsdWVzJC52YWx1ZSBhcyBWYWx1ZXMpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5ub2RlcyQudmFsdWUubWFwKChuOiBOb2RlKSA9PiBuLnByb3BlcnRpZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWRzVmlld2VyU2VydmljZS52YWx1ZXMkLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm9kZVZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy50ZW1wb3JhcnlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSh0aGlzLnRlbXBvcmFyeVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0RGVmaW5pdGlvbigpLmlkO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldE5vZGVWYWx1ZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QmFzaWNUeXBlKCkgPT09ICdsaWNlbnNlJykge1xuICAgICAgICAgICAgdGhpcy5saWNlbnNlJC5uZXh0KHtcbiAgICAgICAgICAgICAgICBpY29uOiBhd2FpdCB0aGlzLm5vZGVIZWxwZXIuZ2V0TGljZW5zZUljb24oe1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdldE5vZGVWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICB9IGFzIE5vZGUpLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubm9kZUhlbHBlci5nZXRMaWNlbnNlTmFtZSh7IHByb3BlcnRpZXM6IHRoaXMuZ2V0Tm9kZVZhbHVlcygpIH0gYXMgTm9kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nZXREZWZpbml0aW9uKCkudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWVzW2lkICsgJ19mcm9tJ10/LlswXSwgdmFsdWVzW2lkICsgJ190byddPy5bMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWVzPy5baWRdKSB7XG4gICAgICAgICAgICAvLyBzdXBwb3J0IG9uIHRoZSBmbHkgY2hhbmdlcyt1cGRhdGVzIG9mIHRoZSB2YWx1ZXNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKHZhbHVlc1tpZF0pO1xuICAgICAgICB9IGVsc2UgaWYgKChhd2FpdCB0aGlzLndpZGdldC5nZXRJbml0YWxWYWx1ZXNBc3luYygpKT8uam9pbnRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy53aWRnZXQuZ2V0SW5pdGFsVmFsdWVzQXN5bmMoKSkuam9pbnRWYWx1ZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlKGRhdGE6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGE7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUuZXZlcnkoKHYpID0+ICF2KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nZXREZWZpbml0aW9uKCkudmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gdGhpcy53aWRnZXQuZGVmaW5pdGlvbi52YWx1ZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh2OiBhbnkpID0+IGRhdGEuZmlsdGVyKChkKSA9PiBkID09PSB2LmlkKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIC5tYXAoKHY6IGFueSkgPT4gdi5jYXB0aW9uKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVmaW5pdGlvbigpLmxpbmsgPT09ICdfQkxBTksnKSB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLmZvcm1hdFRleHQoKVswXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXREZWZpbml0aW9uKCkubGluayA9PT0gJ19TRUxGJykge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmZvcm1hdFRleHQoKVswXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgbGluayB0eXBlICcgKyB0aGlzLmdldERlZmluaXRpb24oKS5saW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2ljVHlwZSA9PT0gJ2xpY2Vuc2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU/LmV2ZXJ5KCh2KSA9PiAhdikgfHwgdGhpcy52YWx1ZT8ubGVuZ3RoID09PSAwIHx8ICF0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIGZvcm1hdERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0RGVmaW5pdGlvbigpLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVBpcGUoJ2VuJykudHJhbnNmb3JtKHYsIHRoaXMuZ2V0RGVmaW5pdGlvbigpLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBmb3JtYXQgZGF0ZScsIGUsIHRoaXMuZ2V0RGVmaW5pdGlvbigpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERhdGVIZWxwZXIuZm9ybWF0RGF0ZSh0aGlzLnRyYW5zbGF0ZSwgdiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Fsd2F5c1RpbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGVIZWxwZXIuZm9ybWF0RGF0ZSh0aGlzLnRyYW5zbGF0ZSwgdiwge1xuICAgICAgICAgICAgICAgICAgICBzaG93QWx3YXlzVGltZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9ybWF0TnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldC5kZWZpbml0aW9uLmZvcm1hdCA9PT0gJ2J5dGVzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0U2l6ZVBpcGUodGhpcy50cmFuc2xhdGUpLnRyYW5zZm9ybSh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3JtYXRUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldC5kZWZpbml0aW9uLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndpZGdldC5kZWZpbml0aW9uLmZvcm1hdC5yZXBsYWNlKCcke3ZhbHVlfScsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZTogTWRzRWRpdG9yV2lkZ2V0QmFzZVxuICAgIGFzeW5jIGZpbmlzaEVkaXQoaW5zdGFuY2U6IGFueSwgc3RvcmUgPSBmYWxzZSkge1xuICAgICAgICBpZiAoc3RvcmUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubWRzRWRpdG9ySW5zdGFuY2Uuc2F2ZVdpZGdldFZhbHVlKGluc3RhbmNlLndpZGdldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZW1wb3JhcnlWYWx1ZSA9IGluc3RhbmNlLndpZGdldC5nZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnZhbHVlID0gYXdhaXQgdGhpcy5nZXROb2RlVmFsdWUoKTtcbiAgICAgICAgdGhpcy5lZGl0V3JhcHBlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmlubmVySFRNTCA9IG51bGw7XG4gICAgICAgIGF3YWl0IHRoaXMubWRzRWRpdG9ySW5zdGFuY2UuZmV0Y2hEaXNwbGF5VmFsdWVzKHRoaXMud2lkZ2V0KTtcbiAgICB9XG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMubWRzRWRpdG9ySW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbmxpbmVFZGl0aW5nID09PSAnYWx3YXlzJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VwcG9ydHNJbmxpbmVFZGl0aW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLm1kc0VkaXRvckluc3RhbmNlLm5vZGVzJC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubWRzRWRpdG9ySW5zdGFuY2UuZWRpdG9yTW9kZSA9PT0gJ2lubGluZScgJiZcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRlZmluaXRpb24uaW50ZXJhY3Rpb25UeXBlID09PSAnSW5wdXQnICYmXG4gICAgICAgICAgICBub2Rlcz8ubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBSZXN0SGVscGVyLmhhc0FjY2Vzc1Blcm1pc3Npb24obm9kZXNbMF0sIFJlc3RDb25zdGFudHMuQUNDRVNTX1dSSVRFKSAmJlxuICAgICAgICAgICAgdGhpcy5zdXBwb3J0c0lubGluZUVkaXRpbmcoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgICAvLyB0aGlzLm1hdFJpcHBsZS5sYXVuY2goe30pO1xuICAgICAgICBhd2FpdCB0aGlzLnVpLnNjcm9sbFNtb290aEVsZW1lbnRUb0NoaWxkKHRoaXMuZWRpdFdyYXBwZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMubWF0UmlwcGxlLmxhdW5jaCh7fSk7XG4gICAgICAgIC8vY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy52aWV3LmluamVjdEVkaXRGaWVsZCh0aGlzLCB0aGlzLmVkaXRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICAvL2F3YWl0IHRoaXMudWkuc2Nyb2xsU21vb3RoRWxlbWVudFRvQ2hpbGQocmVzdWx0Lmh0bWxFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHBhdGggZm9yIGEgZ2l2ZW4gdmFsdWUgaW4gYSB0cmVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYXRoKHY6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuZ2V0RGVmaW5pdGlvbigpLnZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB2LFxuICAgICAgICAgICAgICAgICAgICBjYXB0aW9uOiB2LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhdGg6IE1kc1ZhbHVlW10gPSBbXTtcbiAgICAgICAgbGV0IHBvaW50ZXI6IHN0cmluZyA9IHY7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMuZ2V0RGVmaW5pdGlvbigpLnZhbHVlcy5maW5kKCh3KSA9PiB3LmlkID09PSBwb2ludGVyKTtcbiAgICAgICAgICAgIGlmIChtYXBwZWQpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2gobWFwcGVkKTtcbiAgICAgICAgICAgICAgICBwb2ludGVyID0gbWFwcGVkLnBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGgucmV2ZXJzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZldGNoIHRoZSByYXcgbm9kZSB2YWx1ZVxuICAgICAqIE5vdGU6IFdpbGwgbm90IHdvcmsgaW4gYSBidWxrIHN0YXRlIVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UmF3VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLm1kc0VkaXRvckluc3RhbmNlPy5ub2RlcyQucGlwZShcbiAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgIG1hcCgodjogTm9kZVtdKSA9PlxuICAgICAgICAgICAgICAgICAgICAodj8uWzBdPy5wcm9wZXJ0aWVzW3RoaXMud2lkZ2V0LmRlZmluaXRpb24uaWRdIGFzIHN0cmluZ1tdKT8ubWFwKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiB0aGlzLmdldFBhdGgoaWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICkgfHwgb2YobnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRTZWFyY2hQYXJhbXMoa2V5OiBNZHNWYWx1ZSkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICBjb25zdCBtZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICAgICAgICBtZHNbdGhpcy53aWRnZXQuZGVmaW5pdGlvbi5pZF0gPSBba2V5LmlkXTtcbiAgICAgICAgcGFyYW1zLm1kcyA9IHRoaXMubWRzRWRpdG9ySW5zdGFuY2UubWRzSWQ7XG4gICAgICAgIHBhcmFtcy5zaWRlbmF2ID0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLnJlcG8gPSB0aGlzLm1kc0VkaXRvckluc3RhbmNlLm5vZGVzJC52YWx1ZT8uWzBdLnJlZi5yZXBvO1xuICAgICAgICBwYXJhbXMuZmlsdGVycyA9IEpTT04uc3RyaW5naWZ5KG1kcyk7XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgc3RhcnRFZGl0KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB2b2lkIHRoaXMudmlldy5pbmplY3RFZGl0RmllbGQodGhpcywgdGhpcy5lZGl0V3JhcHBlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICB9XG59XG4iLCI8ZXMtbWRzLWVkaXRvci13aWRnZXQtY29udGFpbmVyXG4gICpuZ0lmPVwiIWVkaXRXcmFwcGVyLmlubmVyVGV4dC50cmltKClcIlxuICBbaW5qZWN0ZWRWaWV3XT1cInRoaXNcIlxuICBbd2lkZ2V0XT1cIndpZGdldFwiXG4gIFtsYWJlbF09XCJmYWxzZVwiXG4gIFt3cmFwSW5Gb3JtRmllbGRdPVwiZmFsc2VcIlxuICBbd3JhcEluR3JvdXBdPVwiZmFsc2VcIlxuICBbdmFsdWVUeXBlXT1cInZhbHVlVHlwZVwiXG4gIG1hdFJpcHBsZVxuICBbbWF0UmlwcGxlRGlzYWJsZWRdPVwidHJ1ZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJlZGl0LXdyYXBwZXJcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIiFpc0VtcHR5KCkgfHwgIXdpZGdldC5kZWZpbml0aW9uLmhpZGVJZkVtcHR5IHx8IGlzRWRpdGFibGUoKVwiXG4gICAgICBjbGFzcz1cIndpZGdldC13cmFwcGVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwid2lkZ2V0LWxhYmVsXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJoZWFkaW5nTGV2ZWwgPyAnaGVhZGluZycgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJoZWFkaW5nTGV2ZWxcIlxuICAgICAgICAqbmdJZj1cIndpZGdldC5kZWZpbml0aW9uLmNhcHRpb24gJiYgc2hvd0NhcHRpb25cIlxuICAgICAgPlxuICAgICAgICB7eyB3aWRnZXQuZGVmaW5pdGlvbi5jYXB0aW9uXG4gICAgICAgIH19PHNwYW4gKm5nSWY9XCIhaGVhZGluZ0xldmVsXCIgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+OiA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ2YWx1ZS13cmFwcGVyXCJcbiAgICAgICAgW2NsYXNzLnZhbHVlLXdyYXBwZXItZWRpdF09XCJpc0VkaXRhYmxlKClcIlxuICAgICAgICAoY2xpY2spPVwiaXNFZGl0YWJsZSgpID8gc3RhcnRFZGl0KCRldmVudCkgOiBudWxsXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzRW1wdHkoKVwiIGNsYXNzPVwid2lkZ2V0LWRhdGEgd2lkZ2V0LW5vLWRhdGEgd2lkZ2V0LXR5cGUte3sgYmFzaWNUeXBlIH19XCI+XG4gICAgICAgICAgLVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiIWlzRW1wdHkoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtZGF0YSB3aWRnZXQtdHlwZS17eyBiYXNpY1R5cGUgfX0ge3tcbiAgICAgICAgICAgIHdpZGdldC5kZWZpbml0aW9uLmxpbmsgPyAnd2lkZ2V0LWxpbmsnIDogJydcbiAgICAgICAgICB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSA9PT0gJ3RleHQnXCI+e3sgZm9ybWF0VGV4dCgpIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSA9PT0gJ251bWJlcidcIj57eyBmb3JtYXROdW1iZXIoKSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICdkYXRlJ1wiPnt7IGZvcm1hdERhdGUoKSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICdsaWNlbnNlJyAmJiAobGljZW5zZSQgfCBhc3luYykgYXMgbGljZW5zZVwiPlxuICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBbc3JjXT1cImxpY2Vuc2UuaWNvblwiIC8+IHt7IGxpY2Vuc2UubmFtZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICdhcnJheSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJheS1lbnRyeVwiICpuZ0Zvcj1cImxldCB2IG9mIHZhbHVlXCI+e3sgdiB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICd0cmVlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZW50cnlcIiAqbmdGb3I9XCJsZXQgdiBvZiByYXdWYWx1ZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJlZUVudHJ5OyBjb250ZXh0OiB7IHBhdGg6IHYucGF0aCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlID09PSAndmNhcmQnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyYXktZW50cnlcIiAqbmdGb3I9XCJsZXQgdiBvZiB2YWx1ZVwiPnt7IHYgfCB2Y2FyZE5hbWUgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlID09PSAnc2xpZGVyJ1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZXItdmFsdWVcIj57eyB2YWx1ZSB9fTwvc3BhblxuICAgICAgICAgICAgPjxzcGFuPiAvIDwvc3Bhbj48c3BhbiBjbGFzcz1cInNsaWRlci1tYXhcIj57eyB3aWRnZXQuZGVmaW5pdGlvbi5tYXggfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSA9PT0gJ2R1cmF0aW9uJ1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkdXJhdGlvbi12YWx1ZVwiPnt7IHZhbHVlWzBdIHwgYXBwTWRzRHVyYXRpb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZXItdmFsdWVcIj57eyB2YWx1ZVswXSB9fTwvc3BhblxuICAgICAgICAgICAgPi08c3BhbiBjbGFzcz1cInNsaWRlci12YWx1ZVwiPnt7IHZhbHVlWzFdIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICd1bmtub3duJ1wiPlxuICAgICAgICAgICAgVGhlIHdpZGdldCB0eXBlIHt7IHdpZGdldC5kZWZpbml0aW9uLnR5cGUgfX0gaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGFuZ3VsYXJcbiAgICAgICAgICAgIHJlbmRlcmluZ1xuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS08YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtZHNFZGl0b3JJbnN0YW5jZS5lZGl0b3JNb2RlID09PSAnaW5saW5lJyAmJiB3aWRnZXQuZGVmaW5pdGlvbi5pbnRlcmFjdGlvblR5cGUgPT09ICdJbnB1dCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInZpZXcuaW5qZWN0RWRpdEZpZWxkKHRoaXMsIGVkaXQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWVkaXRcIj5cbiAgICAgIDxpIGVzSWNvbj1cImVkaXRcIj48L2k+XG4gICAgPC9idXR0b24+LS0+XG4gIDwvZGl2PlxuPC9lcy1tZHMtZWRpdG9yLXdpZGdldC1jb250YWluZXI+XG48ZGl2IGNsYXNzPVwiZWRpdC13cmFwcGVyXCI+XG4gIDxkaXYgI2VkaXRXcmFwcGVyPjxkaXYgI2VkaXQ+PC9kaXY+PC9kaXY+XG4gIDwhLS08YnV0dG9uICpuZ0lmPVwiISFlZGl0V3JhcHBlci5pbm5lclRleHQudHJpbSgpXCIgbWF0LWljb24tYnV0dG9uPjxpIGVzSWNvbj1cInNhdmVcIj48L2k+PC9idXR0b24+LS0+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjdHJlZUVudHJ5IGxldC1wYXRoPVwicGF0aFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0IG9mIHBhdGg7IGxldCBmaXJzdCA9IGZpcnN0XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaXJzdFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCI+e3sgJ1NVQl9DQVRFR09SWV9BUklBJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDxpIGVzSWNvbj1cImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgW2FyaWFdPVwiZmFsc2VcIj48L2k+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGFcbiAgICAgIFtyb3V0ZXJMaW5rXT1cIicvJyArIFJPVVRFUl9QUkVGSVggKyAnc2VhcmNoJ1wiXG4gICAgICBbcXVlcnlQYXJhbXNdPVwiZ2V0U2VhcmNoUGFyYW1zKHQpXCJcbiAgICAgICpuZ0lmPVwid2lkZ2V0LmRlZmluaXRpb24uaXNTZWFyY2hhYmxlXCJcbiAgICAgID57eyB0LmNhcHRpb24gfX08L2FcbiAgICA+XG4gICAgPHNwYW4gKm5nSWY9XCIhd2lkZ2V0LmRlZmluaXRpb24uaXNTZWFyY2hhYmxlXCI+e3sgdC5jYXB0aW9uIH19PC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvd2lkZ2V0L21kcy13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9tZHMtdmlld2VyL3dpZGdldC9tZHMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBRVIsS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBNkIsYUFBYSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7O0FBSzNDLE1BQU0sQ0FBTixJQUFZLE9BVVg7QUFWRCxXQUFZLE9BQU87SUFDZixvQkFBUyxDQUFBO0lBQ1QsNkJBQWtCLENBQUE7SUFDbEIsc0JBQVcsQ0FBQTtJ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QUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWlCO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDOytHQWxVUSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrVEErQmhCLFNBQVMscUVDcEl4QixvcElBc0dBOzs0RkREYSxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0ksZUFBZSxtQkFHUix1QkFBdUIsQ0FBQyxPQUFPOzhNQXVCdkMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLFNBQVM7c0JBQTlCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBzaWduYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZHNWYWx1ZSwgTWRzV2lkZ2V0LCBOb2RlLCBSZXN0Q29uc3RhbnRzLCBTdWdnZXN0aW9uIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBVSUNvbnN0YW50cyB9IGZyb20gJy4uLy4uL3V0aWwvdWktY29uc3RhbnRzJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL0RhdGVIZWxwZXInO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBWaWV3SW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vdmlldy1pbnN0YW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3RIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL3Jlc3QtaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdFNpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvZmlsZS1zaXplLnBpcGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWRzVmlld2VyU2VydmljZSB9IGZyb20gJy4uL21kcy12aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWYWx1ZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWFyY2gtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcblxuZXhwb3J0IGVudW0gTWRzVHlwZSB7XG4gICAgSW8gPSAnaW8nLFxuICAgIElvQnVsayA9ICdpb19idWxrJyxcbiAgICBNYXAgPSAnbWFwJyxcbiAgICBNYXBSZWYgPSAnbWFwX3JlZicsXG4gICAgSW9DaGlsZE9iamVjdCA9ICdpb19jaGlsZG9iamVjdCcsXG4gICAgQ29sbGVjdGlvbiA9ICdjb2xsZWN0aW9uJyxcbiAgICBUb29sRGVmaW5pdGlvbiA9ICd0b29sX2RlZmluaXRpb24nLFxuICAgIFRvb2xJbnN0YW5jZSA9ICd0b29sX2luc3RhbmNlJyxcbiAgICBTYXZlZFNlYXJjaCA9ICdzYXZlZF9zZWFyY2gnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1kc1ZhbHVlTGlzdCB7XG4gICAgdmFsdWVzOiBTdWdnZXN0aW9uW107XG59XG5leHBvcnQgaW50ZXJmYWNlIE1kc1ZpZXdlcldpZGdldCB7XG4gICAgZGVmaW5pdGlvbjogTWRzV2lkZ2V0O1xuICAgIGdldEluaXRhbFZhbHVlc0FzeW5jKCk6IFByb21pc2U8SW5pdGlhbFZhbHVlcz47XG4gICAgZ2V0SW5pdGlhbERpc3BsYXlWYWx1ZXMoKTogQmVoYXZpb3JTdWJqZWN0PE1kc1ZhbHVlTGlzdD47XG59XG5leHBvcnQgZW51bSBNZHNXaWRnZXRUeXBlIHtcbiAgICBUZXh0ID0gJ3RleHQnLFxuICAgIE51bWJlciA9ICdudW1iZXInLFxuICAgIEVtYWlsID0gJ2VtYWlsJyxcbiAgICBEYXRlID0gJ2RhdGUnLFxuICAgIE1vbnRoID0gJ21vbnRoJyxcbiAgICBDb2xvciA9ICdjb2xvcicsXG4gICAgVGV4dGFyZWEgPSAndGV4dGFyZWEnLFxuICAgIFRpbnlNQ0UgPSAndGlueU1DRScsXG4gICAgVkNhcmQgPSAndmNhcmQnLFxuICAgIENoZWNrYm94ID0gJ2NoZWNrYm94JyxcbiAgICBSYWRpb0hvcml6b250YWwgPSAncmFkaW9Ib3Jpem9udGFsJyxcbiAgICBSYWRpb1ZlcnRpY2FsID0gJ3JhZGlvVmVydGljYWwnLFxuICAgIENoZWNrYm94SG9yaXpvbnRhbCA9ICdjaGVja2JveEhvcml6b250YWwnLFxuICAgIENoZWNrYm94VmVydGljYWwgPSAnY2hlY2tib3hWZXJ0aWNhbCcsXG4gICAgTXVsdGlWYWx1ZUJhZGdlcyA9ICdtdWx0aXZhbHVlQmFkZ2VzJyxcbiAgICBNdWx0aVZhbHVlRml4ZWRCYWRnZXMgPSAnbXVsdGl2YWx1ZUZpeGVkQmFkZ2VzJyxcbiAgICBNdWx0aVZhbHVlU3VnZ2VzdEJhZGdlcyA9ICdtdWx0aXZhbHVlU3VnZ2VzdEJhZGdlcycsXG4gICAgTXVsdGlWYWx1ZUF1dGhvcml0eUJhZGdlcyA9ICdtdWx0aXZhbHVlQXV0aG9yaXR5QmFkZ2VzJyxcbiAgICBTaW5nbGVvcHRpb24gPSAnc2luZ2xlb3B0aW9uJyxcbiAgICBTbGlkZXIgPSAnc2xpZGVyJyxcbiAgICBSYW5nZSA9ICdyYW5nZScsXG4gICAgRHVyYXRpb24gPSAnZHVyYXRpb24nLFxuICAgIFNpbmdsZVZhbHVlVHJlZSA9ICdzaW5nbGV2YWx1ZVRyZWUnLFxuICAgIFNpbmdsZVZhbHVlU3VnZ2VzdEJhZGdlcyA9ICdzaW5nbGV2YWx1ZVN1Z2dlc3RCYWRnZXMnLFxuICAgIE11bHRpVmFsdWVUcmVlID0gJ211bHRpdmFsdWVUcmVlJyxcbiAgICBEZWZhdWx0VmFsdWUgPSAnZGVmYXVsdHZhbHVlJyxcbiAgICBGYWNldExpc3QgPSAnZmFjZXRMaXN0Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsVmFsdWVzIHtcbiAgICAvKiogVmFsdWVzIHRoYXQgYXJlIGluaXRpYWxseSBwcmVzZW50IGluIGFsbCBub2Rlcy4gKi9cbiAgICByZWFkb25seSBqb2ludFZhbHVlczogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogVmFsdWVzIHRoYXQgYXJlIGluaXRpYWxseSBwcmVzZW50IGluIHNvbWUgYnV0IG5vdCBhbGwgbm9kZXMuXG4gICAgICpcbiAgICAgKiBDYW4gYmUgbnVsbCBidXQgd2lsbCBuZXZlciBiZSBzZXQgdG8gYW4gZW1wdHkgYXJyYXkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5kaXZpZHVhbFZhbHVlcz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBTdHJpbmcsXG4gICAgTXVsdGlWYWx1ZSxcbiAgICBSYW5nZSxcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1tZHMtd2lkZ2V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJ21kcy13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydtZHMtd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICAgIC8vIHJlcXVpcmVkIGZvciBleHRlcm5hbCBlZGl0b3IgaW5qZWN0aW9uXG59KVxuZXhwb3J0IGNsYXNzIE1kc1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICByZWFkb25seSBST1VURVJfUFJFRklYID0gVUlDb25zdGFudHMuUk9VVEVSX1BSRUZJWDtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBpbmxpbmVFZGl0aW5nOiBNZHNXaWRnZXRUeXBlW10gPSBbXG4gICAgICAgIE1kc1dpZGdldFR5cGUuVGV4dCxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5OdW1iZXIsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuRGF0ZSxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5FbWFpbCxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5UZXh0YXJlYSxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5TaW5nbGVvcHRpb24sXG4gICAgICAgIE1kc1dpZGdldFR5cGUuU2luZ2xlVmFsdWVUcmVlLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLlNpbmdsZVZhbHVlU3VnZ2VzdEJhZGdlcyxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5NdWx0aVZhbHVlQmFkZ2VzLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLk11bHRpVmFsdWVGaXhlZEJhZGdlcyxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5NdWx0aVZhbHVlU3VnZ2VzdEJhZGdlcyxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5NdWx0aVZhbHVlVHJlZSxcbiAgICBdO1xuXG4gICAgcmVhZG9ubHkgdmFsdWVUeXBlID0gVmFsdWVUeXBlLlN0cmluZztcblxuICAgIC8vIHVzZSBhbnkgaW5zdGVhZCBvZiBgV2lkZ2V0YCBjYXVzZSBvZiBleHRlcm5hbCB0eXBlXG4gICAgQElucHV0KCkgd2lkZ2V0OiBNZHNWaWV3ZXJXaWRnZXQ7XG4gICAgQElucHV0KCkgc2hvd0NhcHRpb24gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIGFsbG93IGlubGluZSBlZGl0aW5nXG4gICAgICovXG4gICAgQElucHV0KCkgaW5saW5lRWRpdGluZzogJ2F1dG8nIHwgJ2Fsd2F5cycgPSAnYXV0byc7XG4gICAgQElucHV0KCkgZGVmaW5pdGlvbjogTWRzV2lkZ2V0O1xuICAgIC8vIHVzZSBhbnkgaW5zdGVhZCBvZiBNZHNFZGl0b3JWaWV3Q29tcG9uZW50IGNhdXNlIG9mIGV4dGVybmFsIHR5cGVcbiAgICBASW5wdXQoKSB2aWV3OiBhbnk7XG5cbiAgICBAVmlld0NoaWxkKCdlZGl0V3JhcHBlcicpIGVkaXRXcmFwcGVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoTWF0UmlwcGxlKSBtYXRSaXBwbGU6IE1hdFJpcHBsZTtcbiAgICBiYXNpY1R5cGUgPSBzaWduYWw8c3RyaW5nPihudWxsKTtcbiAgICByYXdWYWx1ZTogeyBwYXRoOiBNZHNWYWx1ZVtdOyBpZDogc3RyaW5nIH1bXTtcblxuICAgIGlzRW1wdHkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJhc2ljVHlwZSgpID09PSAnbGljZW5zZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSgpPy5ldmVyeSgodikgPT4gIXYpIHx8IHRoaXMudmFsdWUoKT8ubGVuZ3RoID09PSAwIHx8ICF0aGlzLnZhbHVlKCk7XG4gICAgfSk7XG4gICAgcHJpdmF0ZSBtZHNFZGl0b3JJbnN0YW5jZTogYW55O1xuICAgIGxpY2Vuc2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IG5hbWU6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+KG51bGwpO1xuXG4gICAgZ2V0IGhlYWRpbmdMZXZlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0luc3RhbmNlLmhlYWRpbmdMZXZlbDtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHNpZ25hbDxzdHJpbmdbXT4odW5kZWZpbmVkKTtcbiAgICBwcml2YXRlIHRlbXBvcmFyeVZhbHVlOiBzdHJpbmdbXSA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAvLyBwdWJsaWMgbWRzRWRpdG9ySW5zdGFuY2U6IE1kc0VkaXRvckluc3RhbmNlU2VydmljZSxcbiAgICAgICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1aTogVUlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdJbnN0YW5jZTogVmlld0luc3RhbmNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtZHNWaWV3ZXJTZXJ2aWNlOiBNZHNWaWV3ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVIZWxwZXI6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICAvLyBzdXBlcih0b2FzdCwgbnVsbCwgdHJhbnNsYXRlKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KGF3YWl0IHRoaXMuZ2V0Tm9kZVZhbHVlKCkpO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZhbHVlLnNldChhd2FpdCB0aGlzLmdldE5vZGVWYWx1ZSgpKTtcbiAgICAgICAgdGhpcy53aWRnZXRcbiAgICAgICAgICAgIC5nZXRJbml0aWFsRGlzcGxheVZhbHVlcygpXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoKHY6IE1kc1ZhbHVlTGlzdCkgPT4gISF2KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHZhbHVlOiBNZHNWYWx1ZUxpc3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZS52YWx1ZXMubWFwKCh2KSA9PiB2LmRpc3BsYXlTdHJpbmcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhc2ljVHlwZS5zZXQodGhpcy5nZXRCYXNpY1R5cGUoKSk7XG4gICAgICAgIHRoaXMucmF3VmFsdWUgPSBhd2FpdCB0aGlzLmdldFJhd1ZhbHVlKCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RGVmaW5pdGlvbigpOiBNZHNXaWRnZXQge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQ/LmRlZmluaXRpb24gfHwgdGhpcy5kZWZpbml0aW9uO1xuICAgIH1cblxuICAgIGdldEJhc2ljVHlwZSgpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmdldERlZmluaXRpb24oKS5pZCkge1xuICAgICAgICAgICAgY2FzZSAnbGljZW5zZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdsaWNlbnNlJztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuZ2V0RGVmaW5pdGlvbigpLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgICAgY2FzZSAnc2luZ2xlb3B0aW9uJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgICAgICAgY2FzZSAndmNhcmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAndmNhcmQnO1xuICAgICAgICAgICAgY2FzZSAnbXVsdGl2YWx1ZUZpeGVkQmFkZ2VzJzpcbiAgICAgICAgICAgIGNhc2UgJ211bHRpdmFsdWVTdWdnZXN0QmFkZ2VzJzpcbiAgICAgICAgICAgIGNhc2UgJ3NpbmdsZXZhbHVlU3VnZ2VzdEJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdtdWx0aXZhbHVlQmFkZ2VzJzpcbiAgICAgICAgICAgIGNhc2UgJ3NpbmdsZXZhbHVlVHJlZSc6XG4gICAgICAgICAgICBjYXNlICdtdWx0aXZhbHVlVHJlZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld0luc3RhbmNlLnRyZWVEaXNwbGF5ID09PSAnZmxhdCcgPyAnYXJyYXknIDogJ3RyZWUnO1xuICAgICAgICAgICAgY2FzZSAnc2xpZGVyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NsaWRlcic7XG4gICAgICAgICAgICBjYXNlICdkdXJhdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkdXJhdGlvbic7XG4gICAgICAgICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdyYW5nZSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG5cbiAgICBzdXBwb3J0c0lubGluZUVkaXRpbmcoKSB7XG4gICAgICAgIHJldHVybiBNZHNXaWRnZXRDb21wb25lbnQuaW5saW5lRWRpdGluZy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Py5kZWZpbml0aW9uLnR5cGUgYXMgTWRzV2lkZ2V0VHlwZSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXROb2RlVmFsdWVzKCkge1xuICAgICAgICBpZiAodGhpcy5tZHNFZGl0b3JJbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAodGhpcy5tZHNFZGl0b3JJbnN0YW5jZS52YWx1ZXMkLnZhbHVlIGFzIFZhbHVlcykgfHxcbiAgICAgICAgICAgICAgICB0aGlzLm1kc0VkaXRvckluc3RhbmNlLm5vZGVzJC52YWx1ZS5tYXAoKG46IE5vZGUpID0+IG4ucHJvcGVydGllcylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZHNWaWV3ZXJTZXJ2aWNlLnZhbHVlcyQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBhc3luYyBnZXROb2RlVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBvcmFyeVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKHRoaXMudGVtcG9yYXJ5VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXREZWZpbml0aW9uKCkuaWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Tm9kZVZhbHVlcygpO1xuICAgICAgICBpZiAodGhpcy5nZXRCYXNpY1R5cGUoKSA9PT0gJ2xpY2Vuc2UnKSB7XG4gICAgICAgICAgICB0aGlzLmxpY2Vuc2UkLm5leHQoe1xuICAgICAgICAgICAgICAgIGljb246IGF3YWl0IHRoaXMubm9kZUhlbHBlci5nZXRMaWNlbnNlSWNvbih7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZ2V0Tm9kZVZhbHVlcygpLFxuICAgICAgICAgICAgICAgIH0gYXMgTm9kZSksXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5ub2RlSGVscGVyLmdldExpY2Vuc2VOYW1lKHsgcHJvcGVydGllczogdGhpcy5nZXROb2RlVmFsdWVzKCkgfSBhcyBOb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldERlZmluaXRpb24oKS50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZXNbaWQgKyAnX2Zyb20nXT8uWzBdLCB2YWx1ZXNbaWQgKyAnX3RvJ10/LlswXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZXM/LltpZF0pIHtcbiAgICAgICAgICAgIC8vIHN1cHBvcnQgb24gdGhlIGZseSBjaGFuZ2VzK3VwZGF0ZXMgb2YgdGhlIHZhbHVlc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUodmFsdWVzW2lkXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGF3YWl0IHRoaXMud2lkZ2V0LmdldEluaXRhbFZhbHVlc0FzeW5jKCkpPy5qb2ludFZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLndpZGdldC5nZXRJbml0YWxWYWx1ZXNBc3luYygpKS5qb2ludFZhbHVlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoZGF0YTogc3RyaW5nW10pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZGF0YTtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5ldmVyeSgodikgPT4gIXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmdldERlZmluaXRpb24oKS52YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLndpZGdldC5kZWZpbml0aW9uLnZhbHVlc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHY6IGFueSkgPT4gZGF0YS5maWx0ZXIoKGQpID0+IGQgPT09IHYuaWQpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgLm1hcCgodjogYW55KSA9PiB2LmNhcHRpb24pO1xuICAgICAgICAgICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5nZXREZWZpbml0aW9uKCkubGluayA9PT0gJ19CTEFOSycpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMuZm9ybWF0VGV4dCgpWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldERlZmluaXRpb24oKS5saW5rID09PSAnX1NFTEYnKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuZm9ybWF0VGV4dCgpWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbnN1cHBvcnRlZCBsaW5rIHR5cGUgJyArIHRoaXMuZ2V0RGVmaW5pdGlvbigpLmxpbmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKS5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldERlZmluaXRpb24oKS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGVQaXBlKCdlbicpLnRyYW5zZm9ybSh2LCB0aGlzLmdldERlZmluaXRpb24oKS5mb3JtYXQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3QgZm9ybWF0IGRhdGUnLCBlLCB0aGlzLmdldERlZmluaXRpb24oKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRlSGVscGVyLmZvcm1hdERhdGUodGhpcy50cmFuc2xhdGUsIHYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dBbHdheXNUaW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRlSGVscGVyLmZvcm1hdERhdGUodGhpcy50cmFuc2xhdGUsIHYsIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Fsd2F5c1RpbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvcm1hdE51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKS5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldC5kZWZpbml0aW9uLmZvcm1hdCA9PT0gJ2J5dGVzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0U2l6ZVBpcGUodGhpcy50cmFuc2xhdGUpLnRyYW5zZm9ybSh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3JtYXRUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSgpLm1hcCgodikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0LmRlZmluaXRpb24uZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0LmRlZmluaXRpb24uZm9ybWF0LnJlcGxhY2UoJyR7dmFsdWV9Jywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGluc3RhbmNlOiBNZHNFZGl0b3JXaWRnZXRCYXNlXG4gICAgYXN5bmMgZmluaXNoRWRpdChpbnN0YW5jZTogYW55LCBzdG9yZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChzdG9yZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5zYXZlV2lkZ2V0VmFsdWUoaW5zdGFuY2Uud2lkZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRlbXBvcmFyeVZhbHVlID0gaW5zdGFuY2Uud2lkZ2V0LmdldFZhbHVlKCk7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KGF3YWl0IHRoaXMuZ2V0Tm9kZVZhbHVlKCkpO1xuICAgICAgICB0aGlzLmVkaXRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0uaW5uZXJIVE1MID0gbnVsbDtcbiAgICAgICAgYXdhaXQgdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5mZXRjaERpc3BsYXlWYWx1ZXModGhpcy53aWRnZXQpO1xuICAgIH1cblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5tZHNFZGl0b3JJbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlubGluZUVkaXRpbmcgPT09ICdhbHdheXMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0c0lubGluZUVkaXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMubWRzRWRpdG9ySW5zdGFuY2Uubm9kZXMkLnZhbHVlO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5lZGl0b3JNb2RlID09PSAnaW5saW5lJyAmJlxuICAgICAgICAgICAgdGhpcy53aWRnZXQuZGVmaW5pdGlvbi5pbnRlcmFjdGlvblR5cGUgPT09ICdJbnB1dCcgJiZcbiAgICAgICAgICAgIG5vZGVzPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIFJlc3RIZWxwZXIuaGFzQWNjZXNzUGVybWlzc2lvbihub2Rlc1swXSwgUmVzdENvbnN0YW50cy5BQ0NFU1NfV1JJVEUpICYmXG4gICAgICAgICAgICB0aGlzLnN1cHBvcnRzSW5saW5lRWRpdGluZygpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZm9jdXMoKSB7XG4gICAgICAgIC8vIHRoaXMubWF0UmlwcGxlLmxhdW5jaCh7fSk7XG4gICAgICAgIGF3YWl0IHRoaXMudWkuc2Nyb2xsU21vb3RoRWxlbWVudFRvQ2hpbGQodGhpcy5lZGl0V3JhcHBlci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5tYXRSaXBwbGUubGF1bmNoKHt9KTtcbiAgICAgICAgLy9jb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnZpZXcuaW5qZWN0RWRpdEZpZWxkKHRoaXMsIHRoaXMuZWRpdFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIC8vYXdhaXQgdGhpcy51aS5zY3JvbGxTbW9vdGhFbGVtZW50VG9DaGlsZChyZXN1bHQuaHRtbEVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcGF0aCBmb3IgYSBnaXZlbiB2YWx1ZSBpbiBhIHRyZWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhdGgodjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5nZXREZWZpbml0aW9uKCkudmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICAgICAgICAgIGNhcHRpb246IHYsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF0aDogTWRzVmFsdWVbXSA9IFtdO1xuICAgICAgICBsZXQgcG9pbnRlcjogc3RyaW5nID0gdjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5nZXREZWZpbml0aW9uKCkudmFsdWVzLmZpbmQoKHcpID0+IHcuaWQgPT09IHBvaW50ZXIpO1xuICAgICAgICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaChtYXBwZWQpO1xuICAgICAgICAgICAgICAgIHBvaW50ZXIgPSBtYXBwZWQucGFyZW50O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aC5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZmV0Y2ggdGhlIHJhdyBub2RlIHZhbHVlXG4gICAgICogTm90ZTogV2lsbCBub3Qgd29yayBpbiBhIGJ1bGsgc3RhdGUhXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSYXdWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubWRzRWRpdG9ySW5zdGFuY2U/Lm5vZGVzJC5waXBlKFxuICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgbWFwKCh2OiBOb2RlW10pID0+XG4gICAgICAgICAgICAgICAgICAgICh2Py5bMF0/LnByb3BlcnRpZXNbdGhpcy53aWRnZXQuZGVmaW5pdGlvbi5pZF0gYXMgc3RyaW5nW10pPy5tYXAoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMuZ2V0UGF0aChpZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSB8fCBvZihudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFNlYXJjaFBhcmFtcyhrZXk6IE1kc1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG1kczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gICAgICAgIG1kc1t0aGlzLndpZGdldC5kZWZpbml0aW9uLmlkXSA9IFtrZXkuaWRdO1xuICAgICAgICBwYXJhbXMubWRzID0gdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5tZHNJZDtcbiAgICAgICAgcGFyYW1zLnNpZGVuYXYgPSB0cnVlO1xuICAgICAgICBwYXJhbXMucmVwbyA9IHRoaXMubWRzRWRpdG9ySW5zdGFuY2Uubm9kZXMkLnZhbHVlPy5bMF0ucmVmLnJlcG87XG4gICAgICAgIHBhcmFtcy5maWx0ZXJzID0gSlNPTi5zdHJpbmdpZnkobWRzKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBzdGFydEVkaXQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZvaWQgdGhpcy52aWV3LmluamVjdEVkaXRGaWVsZCh0aGlzLCB0aGlzLmVkaXRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgIH1cbn1cbiIsIjxlcy1tZHMtZWRpdG9yLXdpZGdldC1jb250YWluZXJcbiAgKm5nSWY9XCIhZWRpdFdyYXBwZXIuaW5uZXJUZXh0LnRyaW0oKVwiXG4gIFtpbmplY3RlZFZpZXddPVwidGhpc1wiXG4gIFt3aWRnZXRdPVwid2lkZ2V0XCJcbiAgW2xhYmVsXT1cImZhbHNlXCJcbiAgW3dyYXBJbkZvcm1GaWVsZF09XCJmYWxzZVwiXG4gIFt3cmFwSW5Hcm91cF09XCJmYWxzZVwiXG4gIFt2YWx1ZVR5cGVdPVwidmFsdWVUeXBlXCJcbiAgbWF0UmlwcGxlXG4gIFttYXRSaXBwbGVEaXNhYmxlZF09XCJ0cnVlXCJcbj5cbiAgPGRpdiBjbGFzcz1cImVkaXQtd3JhcHBlclwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiIWlzRW1wdHkoKSB8fCAhd2lkZ2V0LmRlZmluaXRpb24uaGlkZUlmRW1wdHkgfHwgaXNFZGl0YWJsZSgpXCJcbiAgICAgIGNsYXNzPVwid2lkZ2V0LXdyYXBwZXJcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ3aWRnZXQtbGFiZWxcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cImhlYWRpbmdMZXZlbCA/ICdoZWFkaW5nJyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cImhlYWRpbmdMZXZlbFwiXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0LmRlZmluaXRpb24uY2FwdGlvbiAmJiBzaG93Q2FwdGlvblwiXG4gICAgICA+XG4gICAgICAgIHt7IHdpZGdldC5kZWZpbml0aW9uLmNhcHRpb25cbiAgICAgICAgfX08c3BhbiAqbmdJZj1cIiFoZWFkaW5nTGV2ZWxcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj46IDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInZhbHVlLXdyYXBwZXJcIlxuICAgICAgICBbY2xhc3MudmFsdWUtd3JhcHBlci1lZGl0XT1cImlzRWRpdGFibGUoKVwiXG4gICAgICAgIChjbGljayk9XCJpc0VkaXRhYmxlKCkgPyBzdGFydEVkaXQoJGV2ZW50KSA6IG51bGxcIlxuICAgICAgPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFbXB0eSgpXCIgY2xhc3M9XCJ3aWRnZXQtZGF0YSB3aWRnZXQtbm8tZGF0YSB3aWRnZXQtdHlwZS17eyBiYXNpY1R5cGUoKSB9fVwiPlxuICAgICAgICAgIC1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIiFpc0VtcHR5KClcIlxuICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWRhdGEgd2lkZ2V0LXR5cGUte3sgYmFzaWNUeXBlKCkgfX0ge3tcbiAgICAgICAgICAgIHdpZGdldC5kZWZpbml0aW9uLmxpbmsgPyAnd2lkZ2V0LWxpbmsnIDogJydcbiAgICAgICAgICB9fVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSgpID09PSAndGV4dCdcIj57eyBmb3JtYXRUZXh0KCkgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlKCkgPT09ICdudW1iZXInXCI+e3sgZm9ybWF0TnVtYmVyKCkgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlKCkgPT09ICdkYXRlJ1wiPnt7IGZvcm1hdERhdGUoKSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUoKSA9PT0gJ2xpY2Vuc2UnICYmIChsaWNlbnNlJCB8IGFzeW5jKSBhcyBsaWNlbnNlXCI+XG4gICAgICAgICAgICA8aW1nIGFsdD1cIlwiIFtzcmNdPVwibGljZW5zZS5pY29uXCIgLz4ge3sgbGljZW5zZS5uYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSgpID09PSAnYXJyYXknXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyYXktZW50cnlcIiAqbmdGb3I9XCJsZXQgdiBvZiB2YWx1ZSgpXCI+e3sgdiB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUoKSA9PT0gJ3RyZWUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1lbnRyeVwiICpuZ0Zvcj1cImxldCB2IG9mIHJhd1ZhbHVlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlRW50cnk7IGNvbnRleHQ6IHsgcGF0aDogdi5wYXRoIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUoKSA9PT0gJ3ZjYXJkJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycmF5LWVudHJ5XCIgKm5nRm9yPVwibGV0IHYgb2YgdmFsdWUoKVwiPnt7IHYgfCB2Y2FyZE5hbWUgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlKCkgPT09ICdzbGlkZXInXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlci12YWx1ZVwiPnt7IHZhbHVlIH19PC9zcGFuXG4gICAgICAgICAgICA+PHNwYW4+IC8gPC9zcGFuPjxzcGFuIGNsYXNzPVwic2xpZGVyLW1heFwiPnt7IHdpZGdldC5kZWZpbml0aW9uLm1heCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlKCkgPT09ICdkdXJhdGlvbidcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHVyYXRpb24tdmFsdWVcIj57eyB2YWx1ZSgpWzBdIHwgYXBwTWRzRHVyYXRpb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSgpID09PSAncmFuZ2UnXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlci12YWx1ZVwiPnt7IHZhbHVlKClbMF0gfX08L3NwYW5cbiAgICAgICAgICAgID4tPHNwYW4gY2xhc3M9XCJzbGlkZXItdmFsdWVcIj57eyB2YWx1ZSgpWzFdIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUoKSA9PT0gJ3Vua25vd24nXCI+XG4gICAgICAgICAgICBUaGUgd2lkZ2V0IHR5cGUge3sgd2lkZ2V0LmRlZmluaXRpb24udHlwZSB9fSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgYW5ndWxhclxuICAgICAgICAgICAgcmVuZGVyaW5nXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLTxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIm1kc0VkaXRvckluc3RhbmNlLmVkaXRvck1vZGUgPT09ICdpbmxpbmUnICYmIHdpZGdldC5kZWZpbml0aW9uLmludGVyYWN0aW9uVHlwZSA9PT0gJ0lucHV0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidmlldy5pbmplY3RFZGl0RmllbGQodGhpcywgZWRpdClcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4tZWRpdFwiPlxuICAgICAgPGkgZXNJY29uPVwiZWRpdFwiPjwvaT5cbiAgICA8L2J1dHRvbj4tLT5cbiAgPC9kaXY+XG48L2VzLW1kcy1lZGl0b3Itd2lkZ2V0LWNvbnRhaW5lcj5cbjxkaXYgY2xhc3M9XCJlZGl0LXdyYXBwZXJcIj5cbiAgPGRpdiAjZWRpdFdyYXBwZXI+PGRpdiAjZWRpdD48L2Rpdj48L2Rpdj5cbiAgPCEtLTxidXR0b24gKm5nSWY9XCIhIWVkaXRXcmFwcGVyLmlubmVyVGV4dC50cmltKClcIiBtYXQtaWNvbi1idXR0b24+PGkgZXNJY29uPVwic2F2ZVwiPjwvaT48L2J1dHRvbj4tLT5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICN0cmVlRW50cnkgbGV0LXBhdGg9XCJwYXRoXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHQgb2YgcGF0aDsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyAnU1VCX0NBVEVHT1JZX0FSSUEnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPGkgZXNJY29uPVwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIiBbYXJpYV09XCJmYWxzZVwiPjwvaT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8YVxuICAgICAgW3JvdXRlckxpbmtdPVwiJy8nICsgUk9VVEVSX1BSRUZJWCArICdzZWFyY2gnXCJcbiAgICAgIFtxdWVyeVBhcmFtc109XCJnZXRTZWFyY2hQYXJhbXModClcIlxuICAgICAgKm5nSWY9XCJ3aWRnZXQuZGVmaW5pdGlvbi5pc1NlYXJjaGFibGVcIlxuICAgICAgPnt7IHQuY2FwdGlvbiB9fTwvYVxuICAgID5cbiAgICA8c3BhbiAqbmdJZj1cIiF3aWRnZXQuZGVmaW5pdGlvbi5pc1NlYXJjaGFibGVcIj57eyB0LmNhcHRpb24gfX08L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { Pipe } from '@angular/core';
2
2
  import { RestConstants } from 'ngx-edu-sharing-api';
3
3
  import { RestHelper } from '../util/rest-helper';
4
- import { isString } from 'lodash';
4
+ import { isString } from 'lodash-es';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ngx-translate/core";
7
7
  export class NodeTitlePipe {
@@ -32,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
32
32
  type: Pipe,
33
33
  args: [{ name: 'nodeTitle' }]
34
34
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10aXRsZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9waXBlcy9ub2RlLXRpdGxlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFRLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7QUFHbEMsTUFBTSxPQUFPLGFBQWE7SUFDdEIsU0FBUyxDQUFDLElBQThCLEVBQUUsSUFBaUM7UUFDdkUsSUFBSSxDQUFFLElBQWEsRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQ1AsSUFBSSxFQUFFLElBQUksS0FBSyxNQUFNO1lBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQVksQ0FBQztZQUNsQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFZLENBQUMsQ0FBQztRQUM1QyxJQUFLLElBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3pCLFVBQVUsR0FBSSxJQUFhLEVBQUUsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzVFO2dCQUNJLFFBQVEsRUFBRSxLQUFLO2FBQ2xCLENBQ0osQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBRyxDQUFDOytHQXRCMUMsYUFBYTs2R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGVUcmFuc2Zvcm0sIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IFJlc3RIZWxwZXIgfSBmcm9tICcuLi91dGlsL3Jlc3QtaGVscGVyJztcbmltcG9ydCB7IE5vZGVSb290IH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gnO1xuXG5AUGlwZSh7IG5hbWU6ICdub2RlVGl0bGUnIH0pXG5leHBvcnQgY2xhc3MgTm9kZVRpdGxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShub2RlOiBOb2RlIHwgTm9kZVJvb3QgfCAnSE9NRScsIGFyZ3M/OiB7IHR5cGU6ICduYW1lJyB8ICd0aXRsZScgfSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghKG5vZGUgYXMgTm9kZSk/Lm5hbWUgJiYgaXNTdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChub2RlID09PSAnSE9NRScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnV09SS1NQQUNFLicgKyBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdXT1JLU1BBQ0UuJyArIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgIGFyZ3M/LnR5cGUgPT09ICduYW1lJ1xuICAgICAgICAgICAgICAgID8gUmVzdEhlbHBlci5nZXROYW1lKG5vZGUgYXMgTm9kZSlcbiAgICAgICAgICAgICAgICA6IFJlc3RIZWxwZXIuZ2V0VGl0bGUobm9kZSBhcyBOb2RlKTtcbiAgICAgICAgaWYgKChub2RlIGFzIE5vZGUpPy5wcm9wZXJ0aWVzPy5bUmVzdENvbnN0YW50cy5DQ01fUFJPUF9NQVBUWVBFXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgJ01BUFRZUEUuJyArIChub2RlIGFzIE5vZGUpPy5wcm9wZXJ0aWVzPy5bUmVzdENvbnN0YW50cy5DQ01fUFJPUF9NQVBUWVBFXVswXSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxufVxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10aXRsZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9waXBlcy9ub2RlLXRpdGxlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFRLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFHckMsTUFBTSxPQUFPLGFBQWE7SUFDdEIsU0FBUyxDQUFDLElBQThCLEVBQUUsSUFBaUM7UUFDdkUsSUFBSSxDQUFFLElBQWEsRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQ1AsSUFBSSxFQUFFLElBQUksS0FBSyxNQUFNO1lBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQVksQ0FBQztZQUNsQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFZLENBQUMsQ0FBQztRQUM1QyxJQUFLLElBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3pCLFVBQVUsR0FBSSxJQUFhLEVBQUUsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzVFO2dCQUNJLFFBQVEsRUFBRSxLQUFLO2FBQ2xCLENBQ0osQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBRyxDQUFDOytHQXRCMUMsYUFBYTs2R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGVUcmFuc2Zvcm0sIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IFJlc3RIZWxwZXIgfSBmcm9tICcuLi91dGlsL3Jlc3QtaGVscGVyJztcbmltcG9ydCB7IE5vZGVSb290IH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5AUGlwZSh7IG5hbWU6ICdub2RlVGl0bGUnIH0pXG5leHBvcnQgY2xhc3MgTm9kZVRpdGxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybShub2RlOiBOb2RlIHwgTm9kZVJvb3QgfCAnSE9NRScsIGFyZ3M/OiB7IHR5cGU6ICduYW1lJyB8ICd0aXRsZScgfSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghKG5vZGUgYXMgTm9kZSk/Lm5hbWUgJiYgaXNTdHJpbmcobm9kZSkpIHtcbiAgICAgICAgICAgIGlmIChub2RlID09PSAnSE9NRScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnV09SS1NQQUNFLicgKyBub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdXT1JLU1BBQ0UuJyArIG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgIGFyZ3M/LnR5cGUgPT09ICduYW1lJ1xuICAgICAgICAgICAgICAgID8gUmVzdEhlbHBlci5nZXROYW1lKG5vZGUgYXMgTm9kZSlcbiAgICAgICAgICAgICAgICA6IFJlc3RIZWxwZXIuZ2V0VGl0bGUobm9kZSBhcyBOb2RlKTtcbiAgICAgICAgaWYgKChub2RlIGFzIE5vZGUpPy5wcm9wZXJ0aWVzPy5bUmVzdENvbnN0YW50cy5DQ01fUFJPUF9NQVBUWVBFXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgJ01BUFRZUEUuJyArIChub2RlIGFzIE5vZGUpPy5wcm9wZXJ0aWVzPy5bUmVzdENvbnN0YW50cy5DQ01fUFJPUF9NQVBUWVBFXVswXSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { isNumeric } from './isNumeric';
2
- import { isArray } from 'lodash';
2
+ import { isArray } from 'lodash-es';
3
3
  export class Helper {
4
4
  static deepCopy(data) {
5
5
  if (data == null)
@@ -61,4 +61,4 @@ export class Helper {
61
61
  return obj;
62
62
  }
63
63
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi91dGlsL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFakMsTUFBTSxPQUFPLE1BQU07SUFDUixNQUFNLENBQUMsUUFBUSxDQUFDLElBQVM7UUFDNUIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBVztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFZLEVBQUUsT0FBWTtRQUNqRCxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsT0FBTyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQzVDLElBQUksT0FBTyxJQUFJLElBQUk7WUFBRSxPQUFPLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLDBCQUEwQixDQUFDLE1BQVcsRUFBRSxJQUFZO1FBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNmLE9BQU8sR0FBRyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ00sTUFBTSxDQUFDLDBCQUEwQixDQUFDLEdBQVEsRUFBRSxRQUFrQjtRQUNqRSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFBRSxTQUFTO1lBQ3JDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO2lCQUFNLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gJy4vaXNOdW1lcmljJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY2xhc3MgSGVscGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIGRlZXBDb3B5KGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGVlcENvcHlBcnJheShkYXRhOiBhbnlbXSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBkYXRhO1xuICAgICAgICByZXR1cm4gZGF0YS5zbGljZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBib3RoIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgc3RvcmVkXG4gICAgICogd2lsbCBub3Qgd29yayBmb3IgY2xhc3NlcyBpbmNsdWRpbmcgbWV0aG9kcyBvciBzaW1pbGFyIGR5bmFtaWMgZGF0YVxuICAgICAqIEBwYXJhbSBvYmplY3QxXG4gICAgICogQHBhcmFtIG9iamVjdDJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG9iamVjdEVxdWFscyhvYmplY3QxOiBhbnksIG9iamVjdDI6IGFueSkge1xuICAgICAgICBpZiAob2JqZWN0MSA9PSBudWxsKSByZXR1cm4gb2JqZWN0MiA9PSBudWxsO1xuICAgICAgICBpZiAob2JqZWN0MiA9PSBudWxsKSByZXR1cm4gb2JqZWN0MSA9PSBudWxsO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0MSkgPT0gSlNPTi5zdHJpbmdpZnkob2JqZWN0Mik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IGRhdGEgZnJvbSBhbiBvYmplY3QgYmFzZWQgb24gYSBkb3R0ZWQgcGF0aFxuICAgICAqIGFsc28gc3VwcG9ydHMgYXJyYXlzIGxpa2UgXCJhcnJheS4wLmtleVwiXG4gICAgICogQHBhcmFtIG5lc3RlZCB0aGUgb2JqZWN0IHRvIHJldHVybiB0aGUgZGF0YSBmcm9tXG4gICAgICogQHBhcmFtIHBhdGggdGhlIHBhdGggb2YgdGhlIGZpZWxkIGxvY2F0aW9uIGluIGRvdHRlZCBub3RhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RG90UGF0aEZyb21OZXN0ZWRPYmplY3QobmVzdGVkOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzcGxpdCA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IG9iaiA9IG5lc3RlZDtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1lcmljKGtleSkpIHtcbiAgICAgICAgICAgICAgICBvYmogPSBvYmo/LltwYXJzZUludChrZXkpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmogPSBvYmo/LltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZmlsdGVyT2JqZWN0UHJvcGVydHlOZXN0ZWQob2JqOiBhbnksIHByb3BlcnR5OiBzdHJpbmdbXSkge1xuICAgICAgICBmb3IgKGxldCBpIGluIG9iaikge1xuICAgICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmluY2x1ZGVzKGkpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9ialtpXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBIZWxwZXIuZmlsdGVyT2JqZWN0UHJvcGVydHlOZXN0ZWQob2JqW2ldLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG59XG4iXX0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi91dGlsL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsTUFBTSxPQUFPLE1BQU07SUFDUixNQUFNLENBQUMsUUFBUSxDQUFDLElBQVM7UUFDNUIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBVztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFZLEVBQUUsT0FBWTtRQUNqRCxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQUUsT0FBTyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQzVDLElBQUksT0FBTyxJQUFJLElBQUk7WUFBRSxPQUFPLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLDBCQUEwQixDQUFDLE1BQVcsRUFBRSxJQUFZO1FBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNmLE9BQU8sR0FBRyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ00sTUFBTSxDQUFDLDBCQUEwQixDQUFDLEdBQVEsRUFBRSxRQUFrQjtRQUNqRSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFBRSxTQUFTO1lBQ3JDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO2lCQUFNLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gJy4vaXNOdW1lcmljJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgY2xhc3MgSGVscGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIGRlZXBDb3B5KGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZGVlcENvcHlBcnJheShkYXRhOiBhbnlbXSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBkYXRhO1xuICAgICAgICByZXR1cm4gZGF0YS5zbGljZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBib3RoIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgc3RvcmVkXG4gICAgICogd2lsbCBub3Qgd29yayBmb3IgY2xhc3NlcyBpbmNsdWRpbmcgbWV0aG9kcyBvciBzaW1pbGFyIGR5bmFtaWMgZGF0YVxuICAgICAqIEBwYXJhbSBvYmplY3QxXG4gICAgICogQHBhcmFtIG9iamVjdDJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG9iamVjdEVxdWFscyhvYmplY3QxOiBhbnksIG9iamVjdDI6IGFueSkge1xuICAgICAgICBpZiAob2JqZWN0MSA9PSBudWxsKSByZXR1cm4gb2JqZWN0MiA9PSBudWxsO1xuICAgICAgICBpZiAob2JqZWN0MiA9PSBudWxsKSByZXR1cm4gb2JqZWN0MSA9PSBudWxsO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0MSkgPT0gSlNPTi5zdHJpbmdpZnkob2JqZWN0Mik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IGRhdGEgZnJvbSBhbiBvYmplY3QgYmFzZWQgb24gYSBkb3R0ZWQgcGF0aFxuICAgICAqIGFsc28gc3VwcG9ydHMgYXJyYXlzIGxpa2UgXCJhcnJheS4wLmtleVwiXG4gICAgICogQHBhcmFtIG5lc3RlZCB0aGUgb2JqZWN0IHRvIHJldHVybiB0aGUgZGF0YSBmcm9tXG4gICAgICogQHBhcmFtIHBhdGggdGhlIHBhdGggb2YgdGhlIGZpZWxkIGxvY2F0aW9uIGluIGRvdHRlZCBub3RhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RG90UGF0aEZyb21OZXN0ZWRPYmplY3QobmVzdGVkOiBhbnksIHBhdGg6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzcGxpdCA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IG9iaiA9IG5lc3RlZDtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIHNwbGl0KSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1lcmljKGtleSkpIHtcbiAgICAgICAgICAgICAgICBvYmogPSBvYmo/LltwYXJzZUludChrZXkpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmogPSBvYmo/LltrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZmlsdGVyT2JqZWN0UHJvcGVydHlOZXN0ZWQob2JqOiBhbnksIHByb3BlcnR5OiBzdHJpbmdbXSkge1xuICAgICAgICBmb3IgKGxldCBpIGluIG9iaikge1xuICAgICAgICAgICAgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoaSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmluY2x1ZGVzKGkpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9ialtpXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9ialtpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBIZWxwZXIuZmlsdGVyT2JqZWN0UHJvcGVydHlOZXN0ZWQob2JqW2ldLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG59XG4iXX0=