ngx-edu-sharing-ui 10.0.14 → 10.0.16

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.
@@ -7,18 +7,19 @@ import { UIConstants } from '../../util/ui-constants';
7
7
  import { DateHelper } from '../../util/DateHelper';
8
8
  import { RestHelper } from '../../util/rest-helper';
9
9
  import { FormatSizePipe } from '../../pipes/file-size.pipe';
10
- import { of } from 'rxjs';
10
+ import { BehaviorSubject, of } from 'rxjs';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@ngx-translate/core";
13
13
  import * as i2 from "../../services/ui.service";
14
14
  import * as i3 from "../view-instance.service";
15
15
  import * as i4 from "../mds-viewer.service";
16
- import * as i5 from "@angular/common";
17
- import * as i6 from "@angular/material/core";
18
- import * as i7 from "@angular/router";
19
- import * as i8 from "../../directives/icon.directive";
20
- import * as i9 from "../../pipes/mds-duration.pipe";
21
- import * as i10 from "../../pipes/vcard-name.pipe";
16
+ import * as i5 from "../../services/node-helper.service";
17
+ import * as i6 from "@angular/common";
18
+ import * as i7 from "@angular/material/core";
19
+ import * as i8 from "@angular/router";
20
+ import * as i9 from "../../directives/icon.directive";
21
+ import * as i10 from "../../pipes/mds-duration.pipe";
22
+ import * as i11 from "../../pipes/vcard-name.pipe";
22
23
  export var MdsType;
23
24
  (function (MdsType) {
24
25
  MdsType["Io"] = "io";
@@ -87,11 +88,12 @@ export class MdsWidgetComponent {
87
88
  }
88
89
  constructor(
89
90
  // public mdsEditorInstance: MdsEditorInstanceService,
90
- translate, ui, viewInstance, mdsViewerService) {
91
+ translate, ui, viewInstance, mdsViewerService, nodeHelper) {
91
92
  this.translate = translate;
92
93
  this.ui = ui;
93
94
  this.viewInstance = viewInstance;
94
95
  this.mdsViewerService = mdsViewerService;
96
+ this.nodeHelper = nodeHelper;
95
97
  this.ROUTER_PREFIX = UIConstants.ROUTER_PREFIX;
96
98
  this.valueType = ValueType.String;
97
99
  this.showCaption = true;
@@ -99,6 +101,7 @@ export class MdsWidgetComponent {
99
101
  * allow inline editing
100
102
  */
101
103
  this.inlineEditing = 'auto';
104
+ this.license$ = new BehaviorSubject(null);
102
105
  this.value = undefined;
103
106
  this.temporaryValue = undefined;
104
107
  // super(toast, null, translate);
@@ -121,6 +124,10 @@ export class MdsWidgetComponent {
121
124
  return this.widget?.definition || this.definition;
122
125
  }
123
126
  getBasicType() {
127
+ switch (this.getDefinition().id) {
128
+ case 'license':
129
+ return 'license';
130
+ }
124
131
  switch (this.getDefinition().type) {
125
132
  case 'text':
126
133
  case 'email':
@@ -155,8 +162,10 @@ export class MdsWidgetComponent {
155
162
  return MdsWidgetComponent.inlineEditing.includes(this.widget?.definition.type);
156
163
  }
157
164
  getNodeValues() {
165
+ console.log(this.mdsViewerService);
158
166
  if (this.mdsEditorInstance) {
159
- return this.mdsEditorInstance?.values$.value;
167
+ return (this.mdsEditorInstance.values$.value ||
168
+ this.mdsEditorInstance.nodes$.value.map((n) => n.properties));
160
169
  }
161
170
  else {
162
171
  return this.mdsViewerService.values$.value;
@@ -168,6 +177,14 @@ export class MdsWidgetComponent {
168
177
  }
169
178
  const id = this.getDefinition().id;
170
179
  const values = this.getNodeValues();
180
+ if (this.getBasicType() === 'license') {
181
+ this.license$.next({
182
+ icon: await this.nodeHelper.getLicenseIcon({
183
+ properties: this.getNodeValues(),
184
+ }),
185
+ name: this.nodeHelper.getLicenseName({ properties: this.getNodeValues() }),
186
+ });
187
+ }
171
188
  if (this.getDefinition().type === 'range') {
172
189
  if (values) {
173
190
  return [values[id + '_from']?.[0], values[id + '_to']?.[0]];
@@ -176,10 +193,10 @@ export class MdsWidgetComponent {
176
193
  }
177
194
  else if (values?.[id]) {
178
195
  // support on the fly changes+updates of the values
179
- return this.getValue(this.mdsEditorInstance.values$.value[id]);
196
+ return this.getValue(values[id]);
180
197
  }
181
198
  else if ((await this.widget.getInitalValuesAsync())?.jointValues) {
182
- return ((await this.widget.getInitalValuesAsync()).jointValues);
199
+ return (await this.widget.getInitalValuesAsync()).jointValues;
183
200
  }
184
201
  else {
185
202
  return null;
@@ -212,6 +229,9 @@ export class MdsWidgetComponent {
212
229
  }
213
230
  }
214
231
  isEmpty() {
232
+ if (this.basicType === 'license') {
233
+ return false;
234
+ }
215
235
  return this.value?.every((v) => !v) || this.value?.length === 0 || !this.value;
216
236
  }
217
237
  formatDate() {
@@ -333,13 +353,13 @@ export class MdsWidgetComponent {
333
353
  event.stopPropagation();
334
354
  void this.view.injectEditField(this, this.editWrapper.nativeElement.children[0]);
335
355
  }
336
- 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 }], target: i0.ɵɵFactoryTarget.Component }); }
337
- 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 === '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: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.MdsDurationPipe, name: "appMdsDuration" }, { kind: "pipe", type: i10.VCardNamePipe, name: "vcardName" }] }); }
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" }] }); }
338
358
  }
339
359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsWidgetComponent, decorators: [{
340
360
  type: Component,
341
- 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 === '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"] }]
342
- }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.UIService }, { type: i3.ViewInstanceService }, { type: i4.MdsViewerService }], propDecorators: { widget: [{
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"] }]
362
+ }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.UIService }, { type: i3.ViewInstanceService }, { type: i4.MdsViewerService }, { type: i5.NodeHelperService }], propDecorators: { widget: [{
343
363
  type: Input
344
364
  }], showCaption: [{
345
365
  type: Input
@@ -356,4 +376,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
356
376
  type: ViewChild,
357
377
  args: [MatRipple]
358
378
  }] } });
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRzLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL21kcy12aWV3ZXIvd2lkZ2V0L21kcy13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9tZHMtdmlld2VyL3dpZGdldC9tZHMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsU0FBUyxFQUVULEtBQUssRUFJTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBNkIsYUFBYSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDM0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBK0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFJdkQsTUFBTSxDQUFOLElBQVksT0FVWDtBQVZELFdBQVksT0FBTztJQUNmLG9CQUFTLENBQUE7SUFDVCw2QkFBa0IsQ0FBQTtJQUNsQixzQkFBVyxDQUFBO0lBQ1gsNkJBQWtCLENBQUE7SUFDbEIsMkNBQWdDLENBQUE7SUFDaEMsb0NB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LE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWlCO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDOytHQS9TUSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwrVEErQmhCLFNBQVMscUVDL0h4QixrOEhBbUdBOzs0RkRIYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksZUFBZTs4S0F5QmhCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRW9CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRixTQUFTO3NCQUE5QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0UmlwcGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpcnN0LCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZHNWYWx1ZSwgTWRzV2lkZ2V0LCBOb2RlLCBSZXN0Q29uc3RhbnRzLCBTdWdnZXN0aW9uIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBVSUNvbnN0YW50cyB9IGZyb20gJy4uLy4uL3V0aWwvdWktY29uc3RhbnRzJztcbmltcG9ydCB7IERhdGVIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL0RhdGVIZWxwZXInO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBWaWV3SW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vdmlldy1pbnN0YW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3RIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL3Jlc3QtaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdFNpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvZmlsZS1zaXplLnBpcGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWRzVmlld2VyU2VydmljZSB9IGZyb20gJy4uL21kcy12aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWYWx1ZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWFyY2gtaGVscGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgZW51bSBNZHNUeXBlIHtcbiAgICBJbyA9ICdpbycsXG4gICAgSW9CdWxrID0gJ2lvX2J1bGsnLFxuICAgIE1hcCA9ICdtYXAnLFxuICAgIE1hcFJlZiA9ICdtYXBfcmVmJyxcbiAgICBJb0NoaWxkT2JqZWN0ID0gJ2lvX2NoaWxkb2JqZWN0JyxcbiAgICBDb2xsZWN0aW9uID0gJ2NvbGxlY3Rpb24nLFxuICAgIFRvb2xEZWZpbml0aW9uID0gJ3Rvb2xfZGVmaW5pdGlvbicsXG4gICAgVG9vbEluc3RhbmNlID0gJ3Rvb2xfaW5zdGFuY2UnLFxuICAgIFNhdmVkU2VhcmNoID0gJ3NhdmVkX3NlYXJjaCcsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWRzVmFsdWVMaXN0IHtcbiAgICB2YWx1ZXM6IFN1Z2dlc3Rpb25bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWRzVmlld2VyV2lkZ2V0IHtcbiAgICBkZWZpbml0aW9uOiBNZHNXaWRnZXQ7XG4gICAgZ2V0SW5pdGFsVmFsdWVzQXN5bmMoKTogUHJvbWlzZTxJbml0aWFsVmFsdWVzPjtcbiAgICBnZXRJbml0aWFsRGlzcGxheVZhbHVlcygpOiBCZWhhdmlvclN1YmplY3Q8TWRzVmFsdWVMaXN0Pjtcbn1cbmV4cG9ydCBlbnVtIE1kc1dpZGdldFR5cGUge1xuICAgIFRleHQgPSAndGV4dCcsXG4gICAgTnVtYmVyID0gJ251bWJlcicsXG4gICAgRW1haWwgPSAnZW1haWwnLFxuICAgIERhdGUgPSAnZGF0ZScsXG4gICAgTW9udGggPSAnbW9udGgnLFxuICAgIENvbG9yID0gJ2NvbG9yJyxcbiAgICBUZXh0YXJlYSA9ICd0ZXh0YXJlYScsXG4gICAgVGlueU1DRSA9ICd0aW55TUNFJyxcbiAgICBWQ2FyZCA9ICd2Y2FyZCcsXG4gICAgQ2hlY2tib3ggPSAnY2hlY2tib3gnLFxuICAgIFJhZGlvSG9yaXpvbnRhbCA9ICdyYWRpb0hvcml6b250YWwnLFxuICAgIFJhZGlvVmVydGljYWwgPSAncmFkaW9WZXJ0aWNhbCcsXG4gICAgQ2hlY2tib3hIb3Jpem9udGFsID0gJ2NoZWNrYm94SG9yaXpvbnRhbCcsXG4gICAgQ2hlY2tib3hWZXJ0aWNhbCA9ICdjaGVja2JveFZlcnRpY2FsJyxcbiAgICBNdWx0aVZhbHVlQmFkZ2VzID0gJ211bHRpdmFsdWVCYWRnZXMnLFxuICAgIE11bHRpVmFsdWVGaXhlZEJhZGdlcyA9ICdtdWx0aXZhbHVlRml4ZWRCYWRnZXMnLFxuICAgIE11bHRpVmFsdWVTdWdnZXN0QmFkZ2VzID0gJ211bHRpdmFsdWVTdWdnZXN0QmFkZ2VzJyxcbiAgICBNdWx0aVZhbHVlQXV0aG9yaXR5QmFkZ2VzID0gJ211bHRpdmFsdWVBdXRob3JpdHlCYWRnZXMnLFxuICAgIFNpbmdsZW9wdGlvbiA9ICdzaW5nbGVvcHRpb24nLFxuICAgIFNsaWRlciA9ICdzbGlkZXInLFxuICAgIFJhbmdlID0gJ3JhbmdlJyxcbiAgICBEdXJhdGlvbiA9ICdkdXJhdGlvbicsXG4gICAgU2luZ2xlVmFsdWVUcmVlID0gJ3NpbmdsZXZhbHVlVHJlZScsXG4gICAgU2luZ2xlVmFsdWVTdWdnZXN0QmFkZ2VzID0gJ3NpbmdsZXZhbHVlU3VnZ2VzdEJhZGdlcycsXG4gICAgTXVsdGlWYWx1ZVRyZWUgPSAnbXVsdGl2YWx1ZVRyZWUnLFxuICAgIERlZmF1bHRWYWx1ZSA9ICdkZWZhdWx0dmFsdWUnLFxuICAgIEZhY2V0TGlzdCA9ICdmYWNldExpc3QnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxWYWx1ZXMge1xuICAgIC8qKiBWYWx1ZXMgdGhhdCBhcmUgaW5pdGlhbGx5IHByZXNlbnQgaW4gYWxsIG5vZGVzLiAqL1xuICAgIHJlYWRvbmx5IGpvaW50VmFsdWVzOiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBWYWx1ZXMgdGhhdCBhcmUgaW5pdGlhbGx5IHByZXNlbnQgaW4gc29tZSBidXQgbm90IGFsbCBub2Rlcy5cbiAgICAgKlxuICAgICAqIENhbiBiZSBudWxsIGJ1dCB3aWxsIG5ldmVyIGJlIHNldCB0byBhbiBlbXB0eSBhcnJheS5cbiAgICAgKi9cbiAgICByZWFkb25seSBpbmRpdmlkdWFsVmFsdWVzPzogc3RyaW5nW107XG59XG5leHBvcnQgZW51bSBWYWx1ZVR5cGUge1xuICAgIFN0cmluZyxcbiAgICBNdWx0aVZhbHVlLFxuICAgIFJhbmdlLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW1kcy13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbWRzLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ21kcy13aWRnZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICAvLyByZXF1aXJlZCBmb3IgZXh0ZXJuYWwgZWRpdG9yIGluamVjdGlvblxufSlcbmV4cG9ydCBjbGFzcyBNZHNXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgcmVhZG9ubHkgUk9VVEVSX1BSRUZJWCA9IFVJQ29uc3RhbnRzLlJPVVRFUl9QUkVGSVg7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgaW5saW5lRWRpdGluZzogTWRzV2lkZ2V0VHlwZVtdID0gW1xuICAgICAgICBNZHNXaWRnZXRUeXBlLlRleHQsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuTnVtYmVyLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLkRhdGUsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuRW1haWwsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuVGV4dGFyZWEsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuU2luZ2xlb3B0aW9uLFxuICAgICAgICBNZHNXaWRnZXRUeXBlLlNpbmdsZVZhbHVlVHJlZSxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5TaW5nbGVWYWx1ZVN1Z2dlc3RCYWRnZXMsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuTXVsdGlWYWx1ZUJhZGdlcyxcbiAgICAgICAgTWRzV2lkZ2V0VHlwZS5NdWx0aVZhbHVlRml4ZWRCYWRnZXMsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuTXVsdGlWYWx1ZVN1Z2dlc3RCYWRnZXMsXG4gICAgICAgIE1kc1dpZGdldFR5cGUuTXVsdGlWYWx1ZVRyZWUsXG4gICAgXTtcblxuICAgIHJlYWRvbmx5IHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5TdHJpbmc7XG5cbiAgICAvLyB1c2UgYW55IGluc3RlYWQgb2YgYFdpZGdldGAgY2F1c2Ugb2YgZXh0ZXJuYWwgdHlwZVxuICAgIEBJbnB1dCgpIHdpZGdldDogTWRzVmlld2VyV2lkZ2V0O1xuICAgIEBJbnB1dCgpIHNob3dDYXB0aW9uID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBhbGxvdyBpbmxpbmUgZWRpdGluZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlubGluZUVkaXRpbmc6ICdhdXRvJyB8ICdhbHdheXMnID0gJ2F1dG8nO1xuICAgIEBJbnB1dCgpIGRlZmluaXRpb246IE1kc1dpZGdldDtcbiAgICAvLyB1c2UgYW55IGluc3RlYWQgb2YgTWRzRWRpdG9yVmlld0NvbXBvbmVudCBjYXVzZSBvZiBleHRlcm5hbCB0eXBlXG4gICAgQElucHV0KCkgdmlldzogYW55O1xuXG4gICAgQFZpZXdDaGlsZCgnZWRpdFdyYXBwZXInKSBlZGl0V3JhcHBlcjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKE1hdFJpcHBsZSkgbWF0UmlwcGxlOiBNYXRSaXBwbGU7XG4gICAgYmFzaWNUeXBlOiBzdHJpbmc7XG4gICAgcmF3VmFsdWU6IHsgcGF0aDogTWRzVmFsdWVbXTsgaWQ6IHN0cmluZyB9W107XG5cbiAgICBwcml2YXRlIG1kc0VkaXRvckluc3RhbmNlOiBhbnk7XG5cbiAgICBnZXQgaGVhZGluZ0xldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3SW5zdGFuY2UuaGVhZGluZ0xldmVsO1xuICAgIH1cblxuICAgIHZhbHVlOiBzdHJpbmdbXSA9IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHRlbXBvcmFyeVZhbHVlOiBzdHJpbmdbXSA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAvLyBwdWJsaWMgbWRzRWRpdG9ySW5zdGFuY2U6IE1kc0VkaXRvckluc3RhbmNlU2VydmljZSxcbiAgICAgICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1aTogVUlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdJbnN0YW5jZTogVmlld0luc3RhbmNlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtZHNWaWV3ZXJTZXJ2aWNlOiBNZHNWaWV3ZXJTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICAvLyBzdXBlcih0b2FzdCwgbnVsbCwgdHJhbnNsYXRlKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBhd2FpdCB0aGlzLmdldE5vZGVWYWx1ZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gYXdhaXQgdGhpcy5nZXROb2RlVmFsdWUoKTtcbiAgICAgICAgdGhpcy53aWRnZXRcbiAgICAgICAgICAgIC5nZXRJbml0aWFsRGlzcGxheVZhbHVlcygpXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoKHY6IE1kc1ZhbHVlTGlzdCkgPT4gISF2KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHZhbHVlOiBNZHNWYWx1ZUxpc3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUudmFsdWVzLm1hcCgodikgPT4gdi5kaXNwbGF5U3RyaW5nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhc2ljVHlwZSA9IHRoaXMuZ2V0QmFzaWNUeXBlKCk7XG4gICAgICAgIHRoaXMucmF3VmFsdWUgPSBhd2FpdCB0aGlzLmdldFJhd1ZhbHVlKCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RGVmaW5pdGlvbigpOiBNZHNXaWRnZXQge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQ/LmRlZmluaXRpb24gfHwgdGhpcy5kZWZpbml0aW9uO1xuICAgIH1cblxuICAgIGdldEJhc2ljVHlwZSgpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmdldERlZmluaXRpb24oKS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgICAgIGNhc2UgJ3NpbmdsZW9wdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgICAgICAgIGNhc2UgJ3ZjYXJkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZjYXJkJztcbiAgICAgICAgICAgIGNhc2UgJ211bHRpdmFsdWVGaXhlZEJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdtdWx0aXZhbHVlU3VnZ2VzdEJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdzaW5nbGV2YWx1ZVN1Z2dlc3RCYWRnZXMnOlxuICAgICAgICAgICAgY2FzZSAnbXVsdGl2YWx1ZUJhZGdlcyc6XG4gICAgICAgICAgICBjYXNlICdzaW5nbGV2YWx1ZVRyZWUnOlxuICAgICAgICAgICAgY2FzZSAnbXVsdGl2YWx1ZVRyZWUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdJbnN0YW5jZS50cmVlRGlzcGxheSA9PT0gJ2ZsYXQnID8gJ2FycmF5JyA6ICd0cmVlJztcbiAgICAgICAgICAgIGNhc2UgJ3NsaWRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzbGlkZXInO1xuICAgICAgICAgICAgY2FzZSAnZHVyYXRpb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZHVyYXRpb24nO1xuICAgICAgICAgICAgY2FzZSAncmFuZ2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiAncmFuZ2UnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuXG4gICAgc3VwcG9ydHNJbmxpbmVFZGl0aW5nKCkge1xuICAgICAgICByZXR1cm4gTWRzV2lkZ2V0Q29tcG9uZW50LmlubGluZUVkaXRpbmcuaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLndpZGdldD8uZGVmaW5pdGlvbi50eXBlIGFzIE1kc1dpZGdldFR5cGUsXG4gICAgICAgICk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Tm9kZVZhbHVlcygpIHtcbiAgICAgICAgaWYodGhpcy5tZHNFZGl0b3JJbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWRzRWRpdG9ySW5zdGFuY2U/LnZhbHVlcyQudmFsdWUgYXMgVmFsdWVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWRzVmlld2VyU2VydmljZS52YWx1ZXMkLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm9kZVZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy50ZW1wb3JhcnlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSh0aGlzLnRlbXBvcmFyeVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0RGVmaW5pdGlvbigpLmlkO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldE5vZGVWYWx1ZXMoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVmaW5pdGlvbigpLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbHVlc1tpZCArICdfZnJvbSddPy5bMF0sIHZhbHVlc1tpZCArICdfdG8nXT8uWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlcz8uW2lkXSkge1xuICAgICAgICAgICAgLy8gc3VwcG9ydCBvbiB0aGUgZmx5IGNoYW5nZXMrdXBkYXRlcyBvZiB0aGUgdmFsdWVzXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSh0aGlzLm1kc0VkaXRvckluc3RhbmNlLnZhbHVlcyQudmFsdWVbaWRdKTtcbiAgICAgICAgfSBlbHNlIGlmICgoYXdhaXQgdGhpcy53aWRnZXQuZ2V0SW5pdGFsVmFsdWVzQXN5bmMoKSk/LmpvaW50VmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gKChhd2FpdCB0aGlzLndpZGdldC5nZXRJbml0YWxWYWx1ZXNBc3luYygpKS5qb2ludFZhbHVlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlKGRhdGE6IHN0cmluZ1tdKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGE7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUuZXZlcnkoKHYpID0+ICF2KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nZXREZWZpbml0aW9uKCkudmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwaW5nID0gdGhpcy53aWRnZXQuZGVmaW5pdGlvbi52YWx1ZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh2OiBhbnkpID0+IGRhdGEuZmlsdGVyKChkKSA9PiBkID09PSB2LmlkKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgIC5tYXAoKHY6IGFueSkgPT4gdi5jYXB0aW9uKTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVmaW5pdGlvbigpLmxpbmsgPT09ICdfQkxBTksnKSB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLmZvcm1hdFRleHQoKVswXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXREZWZpbml0aW9uKCkubGluayA9PT0gJ19TRUxGJykge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB0aGlzLmZvcm1hdFRleHQoKVswXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5zdXBwb3J0ZWQgbGluayB0eXBlICcgKyB0aGlzLmdldERlZmluaXRpb24oKS5saW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlPy5ldmVyeSgodikgPT4gIXYpIHx8IHRoaXMudmFsdWU/Lmxlbmd0aCA9PT0gMCB8fCAhdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBmb3JtYXREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldERlZmluaXRpb24oKS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGVQaXBlKCdlbicpLnRyYW5zZm9ybSh2LCB0aGlzLmdldERlZmluaXRpb24oKS5mb3JtYXQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3QgZm9ybWF0IGRhdGUnLCBlLCB0aGlzLmdldERlZmluaXRpb24oKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRlSGVscGVyLmZvcm1hdERhdGUodGhpcy50cmFuc2xhdGUsIHYsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dBbHdheXNUaW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBEYXRlSGVscGVyLmZvcm1hdERhdGUodGhpcy50cmFuc2xhdGUsIHYsIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Fsd2F5c1RpbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvcm1hdE51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXQuZGVmaW5pdGlvbi5mb3JtYXQgPT09ICdieXRlcycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdFNpemVQaXBlKHRoaXMudHJhbnNsYXRlKS50cmFuc2Zvcm0odik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9ybWF0VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXQuZGVmaW5pdGlvbi5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQuZGVmaW5pdGlvbi5mb3JtYXQucmVwbGFjZSgnJHt2YWx1ZX0nLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gaW5zdGFuY2U6IE1kc0VkaXRvcldpZGdldEJhc2VcbiAgICBhc3luYyBmaW5pc2hFZGl0KGluc3RhbmNlOiBhbnksIHN0b3JlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHN0b3JlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1kc0VkaXRvckluc3RhbmNlLnNhdmVXaWRnZXRWYWx1ZShpbnN0YW5jZS53aWRnZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGVtcG9yYXJ5VmFsdWUgPSBpbnN0YW5jZS53aWRnZXQuZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGF3YWl0IHRoaXMuZ2V0Tm9kZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuZWRpdFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5pbm5lckhUTUwgPSBudWxsO1xuICAgICAgICBhd2FpdCB0aGlzLm1kc0VkaXRvckluc3RhbmNlLmZldGNoRGlzcGxheVZhbHVlcyh0aGlzLndpZGdldCk7XG4gICAgfVxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1kc0VkaXRvckluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdGluZyA9PT0gJ2Fsd2F5cycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cHBvcnRzSW5saW5lRWRpdGluZygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5ub2RlcyQudmFsdWU7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLm1kc0VkaXRvckluc3RhbmNlLmVkaXRvck1vZGUgPT09ICdpbmxpbmUnICYmXG4gICAgICAgICAgICB0aGlzLndpZGdldC5kZWZpbml0aW9uLmludGVyYWN0aW9uVHlwZSA9PT0gJ0lucHV0JyAmJlxuICAgICAgICAgICAgbm9kZXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgUmVzdEhlbHBlci5oYXNBY2Nlc3NQZXJtaXNzaW9uKG5vZGVzWzBdLCBSZXN0Q29uc3RhbnRzLkFDQ0VTU19XUklURSkgJiZcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydHNJbmxpbmVFZGl0aW5nKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBmb2N1cygpIHtcbiAgICAgICAgLy8gdGhpcy5tYXRSaXBwbGUubGF1bmNoKHt9KTtcbiAgICAgICAgYXdhaXQgdGhpcy51aS5zY3JvbGxTbW9vdGhFbGVtZW50VG9DaGlsZCh0aGlzLmVkaXRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLm1hdFJpcHBsZS5sYXVuY2goe30pO1xuICAgICAgICAvL2NvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudmlldy5pbmplY3RFZGl0RmllbGQodGhpcywgdGhpcy5lZGl0V3JhcHBlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgLy9hd2FpdCB0aGlzLnVpLnNjcm9sbFNtb290aEVsZW1lbnRUb0NoaWxkKHJlc3VsdC5odG1sRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRoZSBwYXRoIGZvciBhIGdpdmVuIHZhbHVlIGluIGEgdHJlZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UGF0aCh2OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldERlZmluaXRpb24oKS52YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDogdixcbiAgICAgICAgICAgICAgICAgICAgY2FwdGlvbjogdixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoOiBNZHNWYWx1ZVtdID0gW107XG4gICAgICAgIGxldCBwb2ludGVyOiBzdHJpbmcgPSB2O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLmdldERlZmluaXRpb24oKS52YWx1ZXMuZmluZCgodykgPT4gdy5pZCA9PT0gcG9pbnRlcik7XG4gICAgICAgICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKG1hcHBlZCk7XG4gICAgICAgICAgICAgICAgcG9pbnRlciA9IG1hcHBlZC5wYXJlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmZXRjaCB0aGUgcmF3IG5vZGUgdmFsdWVcbiAgICAgKiBOb3RlOiBXaWxsIG5vdCB3b3JrIGluIGEgYnVsayBzdGF0ZSFcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJhd1ZhbHVlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5tZHNFZGl0b3JJbnN0YW5jZT8ubm9kZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICBtYXAoKHY6IE5vZGVbXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKHY/LlswXT8ucHJvcGVydGllc1t0aGlzLndpZGdldC5kZWZpbml0aW9uLmlkXSBhcyBzdHJpbmdbXSk/Lm1hcCgoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdGhpcy5nZXRQYXRoKGlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApIHx8IG9mKG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0U2VhcmNoUGFyYW1zKGtleTogTWRzVmFsdWUpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3QgbWRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcbiAgICAgICAgbWRzW3RoaXMud2lkZ2V0LmRlZmluaXRpb24uaWRdID0gW2tleS5pZF07XG4gICAgICAgIHBhcmFtcy5tZHMgPSB0aGlzLm1kc0VkaXRvckluc3RhbmNlLm1kc0lkO1xuICAgICAgICBwYXJhbXMuc2lkZW5hdiA9IHRydWU7XG4gICAgICAgIHBhcmFtcy5yZXBvID0gdGhpcy5tZHNFZGl0b3JJbnN0YW5jZS5ub2RlcyQudmFsdWU/LlswXS5yZWYucmVwbztcbiAgICAgICAgcGFyYW1zLmZpbHRlcnMgPSBKU09OLnN0cmluZ2lmeShtZHMpO1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdm9pZCB0aGlzLnZpZXcuaW5qZWN0RWRpdEZpZWxkKHRoaXMsIHRoaXMuZWRpdFdyYXBwZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgfVxufVxuIiwiPGVzLW1kcy1lZGl0b3Itd2lkZ2V0LWNvbnRhaW5lclxuICAqbmdJZj1cIiFlZGl0V3JhcHBlci5pbm5lclRleHQudHJpbSgpXCJcbiAgW2luamVjdGVkVmlld109XCJ0aGlzXCJcbiAgW3dpZGdldF09XCJ3aWRnZXRcIlxuICBbbGFiZWxdPVwiZmFsc2VcIlxuICBbd3JhcEluRm9ybUZpZWxkXT1cImZhbHNlXCJcbiAgW3dyYXBJbkdyb3VwXT1cImZhbHNlXCJcbiAgW3ZhbHVlVHlwZV09XCJ2YWx1ZVR5cGVcIlxuICBtYXRSaXBwbGVcbiAgW21hdFJpcHBsZURpc2FibGVkXT1cInRydWVcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZWRpdC13cmFwcGVyXCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCIhaXNFbXB0eSgpIHx8ICF3aWRnZXQuZGVmaW5pdGlvbi5oaWRlSWZFbXB0eSB8fCBpc0VkaXRhYmxlKClcIlxuICAgICAgY2xhc3M9XCJ3aWRnZXQtd3JhcHBlclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIndpZGdldC1sYWJlbFwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwiaGVhZGluZ0xldmVsID8gJ2hlYWRpbmcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiaGVhZGluZ0xldmVsXCJcbiAgICAgICAgKm5nSWY9XCJ3aWRnZXQuZGVmaW5pdGlvbi5jYXB0aW9uICYmIHNob3dDYXB0aW9uXCJcbiAgICAgID5cbiAgICAgICAge3sgd2lkZ2V0LmRlZmluaXRpb24uY2FwdGlvblxuICAgICAgICB9fTxzcGFuICpuZ0lmPVwiIWhlYWRpbmdMZXZlbFwiIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPjogPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidmFsdWUtd3JhcHBlclwiXG4gICAgICAgIFtjbGFzcy52YWx1ZS13cmFwcGVyLWVkaXRdPVwiaXNFZGl0YWJsZSgpXCJcbiAgICAgICAgKGNsaWNrKT1cImlzRWRpdGFibGUoKSA/IHN0YXJ0RWRpdCgkZXZlbnQpIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0VtcHR5KClcIiBjbGFzcz1cIndpZGdldC1kYXRhIHdpZGdldC1uby1kYXRhIHdpZGdldC10eXBlLXt7IGJhc2ljVHlwZSB9fVwiPlxuICAgICAgICAgIC1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIiFpc0VtcHR5KClcIlxuICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWRhdGEgd2lkZ2V0LXR5cGUte3sgYmFzaWNUeXBlIH19IHt7XG4gICAgICAgICAgICB3aWRnZXQuZGVmaW5pdGlvbi5saW5rID8gJ3dpZGdldC1saW5rJyA6ICcnXG4gICAgICAgICAgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJjbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICd0ZXh0J1wiPnt7IGZvcm1hdFRleHQoKSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICdudW1iZXInXCI+e3sgZm9ybWF0TnVtYmVyKCkgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlID09PSAnZGF0ZSdcIj57eyBmb3JtYXREYXRlKCkgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlID09PSAnYXJyYXknXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyYXktZW50cnlcIiAqbmdGb3I9XCJsZXQgdiBvZiB2YWx1ZVwiPnt7IHYgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlID09PSAndHJlZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWVudHJ5XCIgKm5nRm9yPVwibGV0IHYgb2YgcmF3VmFsdWVcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWVFbnRyeTsgY29udGV4dDogeyBwYXRoOiB2LnBhdGggfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSA9PT0gJ3ZjYXJkJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFycmF5LWVudHJ5XCIgKm5nRm9yPVwibGV0IHYgb2YgdmFsdWVcIj57eyB2IHwgdmNhcmROYW1lIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImJhc2ljVHlwZSA9PT0gJ3NsaWRlcidcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyLXZhbHVlXCI+e3sgdmFsdWUgfX08L3NwYW5cbiAgICAgICAgICAgID48c3Bhbj4gLyA8L3NwYW4+PHNwYW4gY2xhc3M9XCJzbGlkZXItbWF4XCI+e3sgd2lkZ2V0LmRlZmluaXRpb24ubWF4IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICdkdXJhdGlvbidcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHVyYXRpb24tdmFsdWVcIj57eyB2YWx1ZVswXSB8IGFwcE1kc0R1cmF0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJiYXNpY1R5cGUgPT09ICdyYW5nZSdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyLXZhbHVlXCI+e3sgdmFsdWVbMF0gfX08L3NwYW5cbiAgICAgICAgICAgID4tPHNwYW4gY2xhc3M9XCJzbGlkZXItdmFsdWVcIj57eyB2YWx1ZVsxXSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmFzaWNUeXBlID09PSAndW5rbm93bidcIj5cbiAgICAgICAgICAgIFRoZSB3aWRnZXQgdHlwZSB7eyB3aWRnZXQuZGVmaW5pdGlvbi50eXBlIH19IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBhbmd1bGFyXG4gICAgICAgICAgICByZW5kZXJpbmdcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWRzRWRpdG9ySW5zdGFuY2UuZWRpdG9yTW9kZSA9PT0gJ2lubGluZScgJiYgd2lkZ2V0LmRlZmluaXRpb24uaW50ZXJhY3Rpb25UeXBlID09PSAnSW5wdXQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ2aWV3LmluamVjdEVkaXRGaWVsZCh0aGlzLCBlZGl0KVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1lZGl0XCI+XG4gICAgICA8aSBlc0ljb249XCJlZGl0XCI+PC9pPlxuICAgIDwvYnV0dG9uPi0tPlxuICA8L2Rpdj5cbjwvZXMtbWRzLWVkaXRvci13aWRnZXQtY29udGFpbmVyPlxuPGRpdiBjbGFzcz1cImVkaXQtd3JhcHBlclwiPlxuICA8ZGl2ICNlZGl0V3JhcHBlcj48ZGl2ICNlZGl0PjwvZGl2PjwvZGl2PlxuICA8IS0tPGJ1dHRvbiAqbmdJZj1cIiEhZWRpdFdyYXBwZXIuaW5uZXJUZXh0LnRyaW0oKVwiIG1hdC1pY29uLWJ1dHRvbj48aSBlc0ljb249XCJzYXZlXCI+PC9pPjwvYnV0dG9uPi0tPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI3RyZWVFbnRyeSBsZXQtcGF0aD1cInBhdGhcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdCBvZiBwYXRoOyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2RrLXZpc3VhbGx5LWhpZGRlblwiPnt7ICdTVUJfQ0FURUdPUllfQVJJQScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8aSBlc0ljb249XCJrZXlib2FyZF9hcnJvd19yaWdodFwiIFthcmlhXT1cImZhbHNlXCI+PC9pPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxhXG4gICAgICBbcm91dGVyTGlua109XCInLycgKyBST1VURVJfUFJFRklYICsgJ3NlYXJjaCdcIlxuICAgICAgW3F1ZXJ5UGFyYW1zXT1cImdldFNlYXJjaFBhcmFtcyh0KVwiXG4gICAgICAqbmdJZj1cIndpZGdldC5kZWZpbml0aW9uLmlzU2VhcmNoYWJsZVwiXG4gICAgICA+e3sgdC5jYXB0aW9uIH19PC9hXG4gICAgPlxuICAgIDxzcGFuICpuZ0lmPVwiIXdpZGdldC5kZWZpbml0aW9uLmlzU2VhcmNoYWJsZVwiPnt7IHQuY2FwdGlvbiB9fTwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
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=
@@ -0,0 +1,18 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/progress-spinner";
5
+ export class SpinnerSmallComponent {
6
+ constructor() {
7
+ this.diameter = 20;
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerSmallComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SpinnerSmallComponent, isStandalone: true, selector: "es-spinner-small", inputs: { diameter: "diameter" }, ngImport: i0, template: "<mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"diameter\"\n></mat-progress-spinner>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerSmallComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'es-spinner-small', standalone: true, imports: [MatProgressSpinnerModule], template: "<mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"diameter\"\n></mat-progress-spinner>\n" }]
15
+ }], ctorParameters: () => [], propDecorators: { diameter: [{
16
+ type: Input
17
+ }] } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci1zbWFsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXItc21hbGwvc3Bpbm5lci1zbWFsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXItc21hbGwvc3Bpbm5lci1zbWFsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBUzlFLE1BQU0sT0FBTyxxQkFBcUI7SUFFOUI7UUFEUyxhQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ1IsQ0FBQzsrR0FGUCxxQkFBcUI7bUdBQXJCLHFCQUFxQiw4R0NWbEMsNkhBS0EseURER2Msd0JBQXdCOzs0RkFFekIscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLGtCQUFrQixjQUdoQixJQUFJLFdBQ1AsQ0FBQyx3QkFBd0IsQ0FBQzt3REFHMUIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLXNwaW5uZXItc21hbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnc3Bpbm5lci1zbWFsbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3NwaW5uZXItc21hbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTcGlubmVyU21hbGxDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIGRpYW1ldGVyID0gMjA7XG4gICAgY29uc3RydWN0b3IoKSB7fVxufVxuIiwiPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gIGNvbG9yPVwicHJpbWFyeVwiXG4gIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgW2RpYW1ldGVyXT1cImRpYW1ldGVyXCJcbj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuIl19