@igo2/context 17.0.0-next.2 → 17.0.0-next.4

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.
@@ -56,21 +56,8 @@ export class ContextListComponent {
56
56
  this.next();
57
57
  }
58
58
  _contexts = { ours: [] };
59
- get selectedContext() {
60
- return this._selectedContext;
61
- }
62
- set selectedContext(value) {
63
- this._selectedContext = value;
64
- this.cdRef.detectChanges();
65
- }
66
- _selectedContext;
67
- get map() {
68
- return this._map;
69
- }
70
- set map(value) {
71
- this._map = value;
72
- }
73
- _map;
59
+ selectedContext;
60
+ map;
74
61
  get defaultContextId() {
75
62
  return this.contextConfigs
76
63
  ? this._defaultContextId
@@ -368,7 +355,7 @@ export class ContextListComponent {
368
355
  this.show.emit(context);
369
356
  }
370
357
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ConfigService }, { token: i2.AuthService }, { token: i3.MatDialog }, { token: i4.LanguageService }, { token: i5.StorageService }], target: i0.ɵɵFactoryTarget.Component });
371
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextListComponent, isStandalone: true, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template\r\n ngFor\r\n let-groupContexts\r\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\r\n >\r\n <igo-collapsible\r\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\r\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\r\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\r\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-container\r\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\r\n ></ng-container>\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
358
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextListComponent, isStandalone: true, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <button\n mat-icon-button\n matSuffix\n class=\"clear-button\"\n *ngIf=\"term.length\"\n aria-label=\"Clear\"\n color=\"warn\"\n (click)=\"clearFilter()\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n *ngIf=\"!sortedAlpha\"\n class=\"sort-alpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort(true)\"\n >\n <mat-icon\n color=\"primary\"\n svgIcon=\"sort-alphabetical-variant\"\n ></mat-icon>\n </button>\n <button\n *ngIf=\"sortedAlpha\"\n class=\"sort-alpha\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort(false)\"\n >\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"plus\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\n (edit)=\"edit.emit(context)\"\n (delete)=\"delete.emit(context)\"\n (clone)=\"clone.emit(context)\"\n (save)=\"save.emit(context)\"\n (hide)=\"hideContext(context)\"\n (show)=\"showContext(context)\"\n (favorite)=\"favorite.emit(context)\"\n (manageTools)=\"manageTools.emit(context)\"\n (managePermissions)=\"managePermissions.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
372
359
  }
373
360
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListComponent, decorators: [{
374
361
  type: Component,
@@ -391,7 +378,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
391
378
  AsyncPipe,
392
379
  KeyValuePipe,
393
380
  TranslateModule
394
- ], template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template\r\n ngFor\r\n let-groupContexts\r\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\r\n >\r\n <igo-collapsible\r\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\r\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\r\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\r\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-container\r\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\r\n ></ng-container>\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"] }]
381
+ ], template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <button\n mat-icon-button\n matSuffix\n class=\"clear-button\"\n *ngIf=\"term.length\"\n aria-label=\"Clear\"\n color=\"warn\"\n (click)=\"clearFilter()\"\n >\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n *ngIf=\"!sortedAlpha\"\n class=\"sort-alpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort(true)\"\n >\n <mat-icon\n color=\"primary\"\n svgIcon=\"sort-alphabetical-variant\"\n ></mat-icon>\n </button>\n <button\n *ngIf=\"sortedAlpha\"\n class=\"sort-alpha\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort(false)\"\n >\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"plus\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\n (edit)=\"edit.emit(context)\"\n (delete)=\"delete.emit(context)\"\n (clone)=\"clone.emit(context)\"\n (save)=\"save.emit(context)\"\n (hide)=\"hideContext(context)\"\n (show)=\"showContext(context)\"\n (favorite)=\"favorite.emit(context)\"\n (manageTools)=\"manageTools.emit(context)\"\n (managePermissions)=\"managePermissions.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"] }]
395
382
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ConfigService }, { type: i2.AuthService }, { type: i3.MatDialog }, { type: i4.LanguageService }, { type: i5.StorageService }], propDecorators: { contexts: [{
396
383
  type: Input
397
384
  }], selectedContext: [{
@@ -431,4 +418,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
431
418
  }], term: [{
432
419
  type: Input
433
420
  }] } });
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1saXN0L2NvbnRleHQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGlCQUFpQixFQUNsQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBUTlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBNkI5RCxNQUFNLE9BQU8sb0JBQW9CO0lBMEhyQjtJQUNEO0lBQ0E7SUFDQztJQUNBO0lBQ0E7SUE5SEgsY0FBYyxDQUF3QjtJQUNyQyxlQUFlLEdBQWlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFNBQVMsR0FBa0MsSUFBSSxlQUFlLENBQzVELElBQUksQ0FBQyxlQUFlLENBQ3JCLENBQUM7SUFFRixPQUFPLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7SUFFN0IsUUFBUSxDQUFlO0lBRS9CLElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNPLFNBQVMsR0FBaUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFL0MsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxLQUFzQjtRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUNPLGdCQUFnQixDQUFrQjtJQUUxQyxJQUNJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNPLElBQUksQ0FBUztJQUVyQixJQUNJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3hCLENBQUMsQ0FBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBWTtnQkFDekQsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBQ08saUJBQWlCLENBQVM7SUFFM0IsU0FBUyxHQUF1QixFQUFFLENBQUM7SUFFaEMsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzdDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUMvQyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDM0MsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzdDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUMzQyxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDNUMsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO0lBQy9ELElBQUksR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUMzQyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDM0Msa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUNqRCxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDL0MsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDeEQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQ2xELHdCQUF3QixHQUFHLElBQUksWUFBWSxFQUVsRCxDQUFDO0lBRUcsWUFBWSxHQUFHO1FBQ3BCLElBQUksRUFBRSx3Q0FBd0M7UUFDOUMsTUFBTSxFQUFFLDJDQUEyQztRQUNuRCxNQUFNLEVBQUUsMkNBQTJDO0tBQ3BELENBQUM7SUFFSyxLQUFLLENBQW1CO0lBQ3hCLFdBQVcsR0FBNEIsRUFBRSxDQUFDO0lBRTFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxhQUFhLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBRWxCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFMUI7O09BRUc7SUFDSCxJQUNJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNNLEtBQUssR0FBVyxFQUFFLENBQUM7SUFFMUIsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFjO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDTyxZQUFZLEdBQVksU0FBUyxDQUFDO0lBRW5DLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUVuRCxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFN0IsSUFBSSxPQUFPO1FBQ1QsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUMxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU07WUFDN0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFDVSxLQUF3QixFQUN6QixhQUE0QixFQUM1QixJQUFpQixFQUNoQixNQUFpQixFQUNqQixlQUFnQyxFQUNoQyxjQUE4QjtRQUw5QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUV0QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTzthQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQjtnQkFDRSxFQUFFLEVBQUUsY0FBYztnQkFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MseUNBQXlDLENBQzFDO2dCQUNELElBQUksRUFBRSxhQUFhO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUM3QyxnREFBZ0QsQ0FDakQ7Z0JBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxFQUFFLEVBQUUsZ0JBQWdCO2dCQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQyx1Q0FBdUMsQ0FDeEM7Z0JBQ0QsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzdDLDhDQUE4QyxDQUMvQztnQkFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxJQUFJO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsUUFBc0I7UUFDL0MsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUk7cUJBQy9CLFdBQVcsRUFBRTtxQkFDYixTQUFTLENBQUMsS0FBSyxDQUFDO3FCQUNoQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDLEtBQUs7cUJBQ3pDLFdBQVcsRUFBRTtxQkFDYixTQUFTLENBQUMsS0FBSyxDQUFDO3FCQUNoQixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLGNBQWMsR0FBaUI7Z0JBQ2pDLElBQUk7YUFDTCxDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNqRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJO3lCQUMvQixXQUFXLEVBQUU7eUJBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQzt5QkFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxLQUFLO3lCQUN6QyxXQUFXLEVBQUU7eUJBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQzt5QkFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUNsQyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNoRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJO3lCQUMvQixXQUFXLEVBQUU7eUJBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQzt5QkFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxLQUFLO3lCQUN6QyxXQUFXLEVBQUU7eUJBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQzt5QkFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNuQyxPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNqQyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLFVBQVU7UUFDZixRQUFRLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQy9CLEtBQUssdUJBQXVCLENBQUMsTUFBTTtnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLHVCQUF1QixDQUFDLEtBQUs7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO1lBQ2Y7Z0JBQ0UsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07b0JBQ2xCLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQzlDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO29CQUNsQixDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUM5QyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMxQyxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBc0I7UUFDckMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzFELFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNaLENBQUM7b0JBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUN0RCxPQUFPLENBQUMsQ0FBQztvQkFDWCxDQUFDO29CQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEQsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWixDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEQsT0FBTyxDQUFDLENBQUM7b0JBQ1gsQ0FBQztvQkFDRCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLE9BQU8sR0FBRzthQUNQLFNBQVMsQ0FBQyxLQUFLLENBQUM7YUFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQzthQUMvQixXQUFXLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWtCO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFlO1FBQzNCLElBQUksQ0FBQyxNQUFNO2FBQ1IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3RELFdBQVcsRUFBRTthQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUMzQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFLO1FBQ2pCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEUsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsTUFBTztRQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixVQUFVLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsdUJBQXVCLEdBQUcsVUFBVSxDQUFDLElBQUksRUFDekMsVUFBVSxDQUFDLE9BQU8sQ0FDbkIsQ0FBQztZQUNGLFVBQVUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRTFCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMvQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUNyQixNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNyQix1QkFBdUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQy9DLFVBQVUsQ0FBQyxPQUFPLENBQ25CLENBQUM7Z0JBQ0YsZ0JBQWdCLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELElBQ0Usa0JBQWtCO29CQUNsQixrQkFBa0IsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFDakQsQ0FBQztvQkFDRCxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztvQkFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDLElBQUksRUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FDbkIsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXdCO1FBQ2xDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxRQUFRLEdBQWlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNwRSxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEUsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUF3QjtRQUNsQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO3VHQTVZVSxvQkFBb0I7MkZBQXBCLG9CQUFvQiw2aUJDOUVqQyw0ME9BaU5BLHVpQkR2SkksYUFBYSwwRkFDYixJQUFJLDRGQUNKLGtCQUFrQiwyYUFDbEIsY0FBYywwV0FDZCxXQUFXLDhtQkFDWCxlQUFlLDJJQUNmLGFBQWEsb0xBQ2IsZ0JBQWdCLDhUQUNoQixrQkFBa0Isc1BBQ2xCLGFBQWEsaXdCQUNiLEtBQUssa0hBQ0wsaUJBQWlCLCtXQUNqQixvQkFBb0IsaUhBQ3BCLG9CQUFvQix1T0FDcEIsaUJBQWlCLHdSQUNqQixTQUFTLHlDQUNULFlBQVksZ0RBQ1osZUFBZTs7MkZBR04sb0JBQW9CO2tCQTNCaEMsU0FBUzsrQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixJQUFJO3dCQUNKLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixLQUFLO3dCQUNMLGlCQUFpQjt3QkFDakIsb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGVBQWU7cUJBQ2hCOytOQWNHLFFBQVE7c0JBRFgsS0FBSztnQkFXRixlQUFlO3NCQURsQixLQUFLO2dCQVdGLEdBQUc7c0JBRE4sS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBY0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkF3QkgsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAaWdvMi9hdXRoJztcclxuaW1wb3J0IHtcclxuICBBY3Rpb25TdG9yZSxcclxuICBBY3Rpb25iYXJDb21wb25lbnQsXHJcbiAgQWN0aW9uYmFyTW9kZSxcclxuICBDb2xsYXBzaWJsZUNvbXBvbmVudCxcclxuICBMaXN0Q29tcG9uZW50LFxyXG4gIExpc3RJdGVtRGlyZWN0aXZlXHJcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcclxuaW1wb3J0IHR5cGUgeyBJZ29NYXAgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYXAtYnV0dG9uL2Jvb2ttYXJrLWJ1dHRvbi9ib29rbWFyay1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29udGV4dEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9jb250ZXh0LWl0ZW0vY29udGV4dC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ29udGV4dFByb2ZpbHMsXHJcbiAgQ29udGV4dFNlcnZpY2VPcHRpb25zLFxyXG4gIENvbnRleHRVc2VyUGVybWlzc2lvbixcclxuICBDb250ZXh0c0xpc3QsXHJcbiAgRGV0YWlsZWRDb250ZXh0XHJcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnRleHQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29udGV4dExpc3RDb250cm9sc0VudW0gfSBmcm9tICcuL2NvbnRleHQtbGlzdC5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWNvbnRleHQtbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29udGV4dC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBMaXN0Q29tcG9uZW50LFxyXG4gICAgTmdJZixcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIEFjdGlvbmJhckNvbXBvbmVudCxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBOZ0ZvcixcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgQ29sbGFwc2libGVDb21wb25lbnQsXHJcbiAgICBDb250ZXh0SXRlbUNvbXBvbmVudCxcclxuICAgIExpc3RJdGVtRGlyZWN0aXZlLFxyXG4gICAgQXN5bmNQaXBlLFxyXG4gICAgS2V5VmFsdWVQaXBlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGV4dExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIGNvbnRleHRDb25maWdzOiBDb250ZXh0U2VydmljZU9wdGlvbnM7XHJcbiAgcHJpdmF0ZSBjb250ZXh0c0luaXRpYWw6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcclxuICBjb250ZXh0cyQ6IEJlaGF2aW9yU3ViamVjdDxDb250ZXh0c0xpc3Q+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHRoaXMuY29udGV4dHNJbml0aWFsXHJcbiAgKTtcclxuXHJcbiAgY2hhbmdlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xyXG5cclxuICBwcml2YXRlIGNoYW5nZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbnRleHRzKCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XHJcbiAgfVxyXG4gIHNldCBjb250ZXh0cyh2YWx1ZTogQ29udGV4dHNMaXN0KSB7XHJcbiAgICB0aGlzLl9jb250ZXh0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbnRleHRzOiBDb250ZXh0c0xpc3QgPSB7IG91cnM6IFtdIH07XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGVkQ29udGV4dCgpOiBEZXRhaWxlZENvbnRleHQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29udGV4dDtcclxuICB9XHJcbiAgc2V0IHNlbGVjdGVkQ29udGV4dCh2YWx1ZTogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbnRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RlZENvbnRleHQ6IERldGFpbGVkQ29udGV4dDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGVmYXVsdENvbnRleHRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dENvbmZpZ3NcclxuICAgICAgPyB0aGlzLl9kZWZhdWx0Q29udGV4dElkXHJcbiAgICAgIDogKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdmYXZvcml0ZS5jb250ZXh0LnVyaScpIGFzIHN0cmluZykgfHxcclxuICAgICAgICAgIHRoaXMuX2RlZmF1bHRDb250ZXh0SWQ7XHJcbiAgfVxyXG4gIHNldCBkZWZhdWx0Q29udGV4dElkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlZmF1bHRDb250ZXh0SWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdENvbnRleHRJZDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgY29sbGFwc2VkOiB7IGNvbnRleHRTY29wZSB9W10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSB1bnNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGNsb25lID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0aXRsZTogc3RyaW5nOyBlbXB0eTogYm9vbGVhbiB9PigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIHNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgc2hvd0hpZGRlbkNvbnRleHRzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBmYXZvcml0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBtYW5hZ2VQZXJtaXNzaW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBtYW5hZ2VUb29scyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJQZXJtaXNzaW9uc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgQ29udGV4dFVzZXJQZXJtaXNzaW9uW11cclxuICA+KCk7XHJcblxyXG4gIHB1YmxpYyB0aXRsZU1hcHBpbmcgPSB7XHJcbiAgICBvdXJzOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIub3VyQ29udGV4dHMnLFxyXG4gICAgc2hhcmVkOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc2hhcmVkQ29udGV4dHMnLFxyXG4gICAgcHVibGljOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIucHVibGljQ29udGV4dHMnXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHVzZXJzOiBDb250ZXh0UHJvZmlsc1tdO1xyXG4gIHB1YmxpYyBwZXJtaXNzaW9uczogQ29udGV4dFVzZXJQZXJtaXNzaW9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGFjdGlvblN0b3JlID0gbmV3IEFjdGlvblN0b3JlKFtdKTtcclxuICBwdWJsaWMgYWN0aW9uYmFyTW9kZSA9IEFjdGlvbmJhck1vZGUuT3ZlcmxheTtcclxuXHJcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xyXG5cclxuICBwdWJsaWMgc2hvd0hpZGRlbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb250ZXh0IGZpbHRlciB0ZXJtXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdGVybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90ZXJtID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgZ2V0IHRlcm0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtO1xyXG4gIH1cclxuICBwdWJsaWMgX3Rlcm06IHN0cmluZyA9ICcnO1xyXG5cclxuICBnZXQgc29ydGVkQWxwaGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGVkQWxwaGE7XHJcbiAgfVxyXG4gIHNldCBzb3J0ZWRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc29ydGVkQWxwaGEgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0ZWRBbHBoYTogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHNob3dDb250ZXh0RmlsdGVyID0gQ29udGV4dExpc3RDb250cm9sc0VudW0uYWx3YXlzO1xyXG5cclxuICBwdWJsaWMgdGhyZXNob2xkVG9GaWx0ZXIgPSA1O1xyXG5cclxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLnB1YmxpYz8ubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLnNoYXJlZD8ubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5jb250ZXh0Q29uZmlncyA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2NvbnRleHQnKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkJCA9IHRoaXMuY2hhbmdlJFxyXG4gICAgICAucGlwZShkZWJvdW5jZSgoKSA9PiB0aW1lcig1MCkpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRleHRzJC5uZXh0KHRoaXMuZmlsdGVyQ29udGV4dHNMaXN0KHRoaXMuY29udGV4dHMpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25TdG9yZS5sb2FkKFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnZW1wdHlDb250ZXh0JyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZW1wdHlDb250ZXh0J1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ21hcC1vdXRsaW5lJyxcclxuICAgICAgICB0b29sdGlwOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5lbXB0eUNvbnRleHRUb29sdGlwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVDb250ZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnY29udGV4dEZyb21NYXAnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5jb250ZXh0TWFwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ21hcC1jaGVjaycsXHJcbiAgICAgICAgdG9vbHRpcDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuY29udGV4dE1hcFRvb2x0aXAnXHJcbiAgICAgICAgKSxcclxuICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUNvbnRleHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICBpZiAodGhpcy50ZXJtID09PSAnJykge1xyXG4gICAgICBpZiAodGhpcy5zb3J0ZWRBbHBoYSkge1xyXG4gICAgICAgIGNvbnRleHRzID0gdGhpcy5zb3J0Q29udGV4dHNMaXN0KGNvbnRleHRzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGV4dHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBvdXJzID0gY29udGV4dHMub3Vycy5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdGhpcy50ZXJtXHJcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgdXBkYXRlQ29udGV4dHM6IENvbnRleHRzTGlzdCA9IHtcclxuICAgICAgICBvdXJzXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXh0cy5wdWJsaWMpIHtcclxuICAgICAgICBjb25zdCBwdWJsaWNzID0gY29udGV4dHMucHVibGljLmZpbHRlcigoY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHRoaXMudGVybVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIHJldHVybiBjb250ZXh0VGl0bGVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUNvbnRleHRzLnB1YmxpYyA9IHB1YmxpY3M7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRleHRzLnNoYXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHNoYXJlZCA9IGNvbnRleHRzLnNoYXJlZC5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQgPSBjb250ZXh0LnRpdGxlXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVDb250ZXh0cy5zaGFyZWQgPSBzaGFyZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNvcnRlZEFscGhhKSB7XHJcbiAgICAgICAgdXBkYXRlQ29udGV4dHMgPSB0aGlzLnNvcnRDb250ZXh0c0xpc3QodXBkYXRlQ29udGV4dHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dGaWx0ZXIoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2hvd0NvbnRleHRGaWx0ZXIpIHtcclxuICAgICAgY2FzZSBDb250ZXh0TGlzdENvbnRyb2xzRW51bS5hbHdheXM6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGNhc2UgQ29udGV4dExpc3RDb250cm9sc0VudW0ubmV2ZXI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGxldCB0b3RhbExlbmd0aCA9IHRoaXMuY29udGV4dHMub3Vycy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cy5wdWJsaWNcclxuICAgICAgICAgID8gKHRvdGFsTGVuZ3RoICs9IHRoaXMuY29udGV4dHMucHVibGljLmxlbmd0aClcclxuICAgICAgICAgIDogKHRvdGFsTGVuZ3RoICs9IDApO1xyXG4gICAgICAgIHRoaXMuY29udGV4dHMuc2hhcmVkXHJcbiAgICAgICAgICA/ICh0b3RhbExlbmd0aCArPSB0aGlzLmNvbnRleHRzLnNoYXJlZC5sZW5ndGgpXHJcbiAgICAgICAgICA6ICh0b3RhbExlbmd0aCArPSAwKTtcclxuICAgICAgICBpZiAodG90YWxMZW5ndGggPj0gdGhpcy50aHJlc2hvbGRUb0ZpbHRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNvcnRDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCkge1xyXG4gICAgaWYgKGNvbnRleHRzKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRleHRzTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udGV4dHMpKTtcclxuICAgICAgY29udGV4dHNMaXN0Lm91cnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGNvbnRleHRzTGlzdC5zaGFyZWQpIHtcclxuICAgICAgICBjb250ZXh0c0xpc3Quc2hhcmVkLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dHNMaXN0LnB1YmxpYykge1xyXG4gICAgICAgIGNvbnRleHRzTGlzdC5wdWJsaWMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGV4dHNMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXplKHN0cjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTb3J0KHNvcnRBbHBoYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zb3J0ZWRBbHBoYSA9IHNvcnRBbHBoYTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy50ZXJtID0gJyc7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb250ZXh0KGVtcHR5PzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaWFsb2dcclxuICAgICAgLm9wZW4oQm9va21hcmtEaWFsb2dDb21wb25lbnQsIHsgZGlzYWJsZUNsb3NlOiBmYWxzZSB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KHsgdGl0bGUsIGVtcHR5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uKHVzZXI/KTogQ29udGV4dFVzZXJQZXJtaXNzaW9uIHtcclxuICAgIGlmICh1c2VyKSB7XHJcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmZpbmQoKHApID0+IHAubmFtZSA9PT0gdXNlci5uYW1lKTtcclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyLCBwYXJlbnQ/KSB7XHJcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5nZXRQZXJtaXNzaW9uKHVzZXIpO1xyXG4gICAgaWYgKHBlcm1pc3Npb24pIHtcclxuICAgICAgcGVybWlzc2lvbi5jaGVja2VkID0gIXBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgJ2NvbnRleHRzLnBlcm1pc3Npb25zLicgKyBwZXJtaXNzaW9uLm5hbWUsXHJcbiAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICk7XHJcbiAgICAgIHBlcm1pc3Npb24uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgbGV0IGluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiBwYXJlbnQuY2hpbGRzKSB7XHJcbiAgICAgICAgY29uc3QgY1Blcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XHJcbiAgICAgICAgaWYgKGNQZXJtaXNzaW9uLmNoZWNrZWQgIT09IHBlcm1pc3Npb24uY2hlY2tlZCkge1xyXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihwYXJlbnQpO1xyXG4gICAgICBpZiAocGFyZW50UGVybWlzc2lvbikge1xyXG4gICAgICAgIHBhcmVudFBlcm1pc3Npb24uY2hlY2tlZCA9IHBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcclxuICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgcGFyZW50UGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwYXJlbnRQZXJtaXNzaW9uLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZXIuY2hpbGRzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiB1c2VyLmNoaWxkcykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihjKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24gJiZcclxuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkICE9PSBwZXJtaXNzaW9uLmNoZWNrZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkID0gcGVybWlzc2lvbi5jaGVja2VkO1xyXG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgY2hpbGRyZW5QZXJtaXNzaW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlclBlcm1pc3Npb25zQ2hhbmdlZC5lbWl0KHRoaXMucGVybWlzc2lvbnMpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUNvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmhpZGRlbiA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0hpZGRlbikge1xyXG4gICAgICBjb25zdCBjb250ZXh0czogQ29udGV4dHNMaXN0ID0geyBvdXJzOiBbXSwgc2hhcmVkOiBbXSwgcHVibGljOiBbXSB9O1xyXG4gICAgICBjb250ZXh0cy5vdXJzID0gdGhpcy5jb250ZXh0cy5vdXJzLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIGNvbnRleHRzLnNoYXJlZCA9IHRoaXMuY29udGV4dHMuc2hhcmVkLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIGNvbnRleHRzLnB1YmxpYyA9IHRoaXMuY29udGV4dHMucHVibGljLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcclxuICAgIH1cclxuICAgIHRoaXMuaGlkZS5lbWl0KGNvbnRleHQpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0NvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93LmVtaXQoY29udGV4dCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZ28tbGlzdCBbbmF2aWdhdGlvbl09XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRleHQtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwic2hvd0ZpbHRlcigpXCIgZmxvYXRMYWJlbD1cImFsd2F5c1wiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclBsYWNlSG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZmlsdGVyUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInRlcm1cIlxyXG4gICAgICAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgY2xhc3M9XCJjbGVhci1idXR0b25cIlxyXG4gICAgICAgICpuZ0lmPVwidGVybS5sZW5ndGhcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhc29ydGVkQWxwaGFcIlxyXG4gICAgICAgIGNsYXNzPVwic29ydC1hbHBoYVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc29ydEFscGhhYmV0aWNhbGx5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQodHJ1ZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgc3ZnSWNvbj1cInNvcnQtYWxwaGFiZXRpY2FsLXZhcmlhbnRcIlxyXG4gICAgICAgID48L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwic29ydGVkQWxwaGFcIlxyXG4gICAgICAgIGNsYXNzPVwic29ydC1hbHBoYVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNvcnRDb250ZXh0T3JkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwid2FyblwiIHN2Z0ljb249XCJzb3J0LXZhcmlhbnQtcmVtb3ZlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8aWdvLWFjdGlvbmJhclxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcclxuICAgICAgICBjbGFzcz1cImFkZC1jb250ZXh0LWJ1dHRvblwiXHJcbiAgICAgICAgW2ljb25Db2xvcl09XCJjb2xvclwiXHJcbiAgICAgICAgW3N0b3JlXT1cImFjdGlvblN0b3JlXCJcclxuICAgICAgICBbd2l0aEljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgaWNvbj1cInBsdXNcIlxyXG4gICAgICAgIFt3aXRoVGl0bGVdPVwiYWN0aW9uYmFyTW9kZSA9PT0gJ292ZXJsYXknXCJcclxuICAgICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXHJcbiAgICAgICAgW21vZGVdPVwiYWN0aW9uYmFyTW9kZVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZ28tYWN0aW9uYmFyPlxyXG5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcclxuICAgICAgICBjbGFzcz1cInVzZXJzLWZpbHRlclwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclVzZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWNjb3VudE1lbnVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIHN2Z0ljb249XCJmaWx0ZXItbWVudVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LW1lbnUgI2FjY291bnRNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5jaGlsZHM7IGVsc2Ugd2l0aFN1Yk1lbnVcIlxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsLW1lbnVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkodXNlcilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB1c2VyLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhTdWJNZW51PlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdWJBY2NvdW50TWVudVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5pbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1tZW51ICNzdWJBY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgdXNlci5jaGlsZHNcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKGNoaWxkKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkoY2hpbGQsIHVzZXIpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgY2hpbGQudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwicHJvZmlsLW1lbnVcIj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2hvd0hpZGRlblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNob3dIaWRkZW5Db250ZXh0cy5lbWl0KClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3sgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNob3dIaWRkZW4nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlXHJcbiAgICBuZ0ZvclxyXG4gICAgbGV0LWdyb3VwQ29udGV4dHNcclxuICAgIFtuZ0Zvck9mXT1cIiRhbnkoY29udGV4dHMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIlxyXG4gID5cclxuICAgIDxpZ28tY29sbGFwc2libGVcclxuICAgICAgKm5nSWY9XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlLmxlbmd0aCAmJiBhdXRoLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgICBbdGl0bGVdPVwidGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFtjb2xsYXBzZWRdPVwiJGFueShjb2xsYXBzZWRbdGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XV0pXCJcclxuICAgICAgKHRvZ2dsZSk9XCJjb2xsYXBzZWRbdGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XV0gPSAkYW55KCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbnRleHQgW25nRm9yT2ZdPVwiJGFueShncm91cENvbnRleHRzKS52YWx1ZVwiPlxyXG4gICAgICAgIDxpZ28tY29udGV4dC1pdGVtXHJcbiAgICAgICAgICBpZ29MaXN0SXRlbVxyXG4gICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkQ29udGV4dCAmJiBzZWxlY3RlZENvbnRleHQudXJpID09PSBjb250ZXh0LnVyaVwiXHJcbiAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICAgIFtkZWZhdWx0XT1cIlxyXG4gICAgICAgICAgICBjb250ZXh0LmlkICYmXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQuaWRcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoY2xvbmUpPVwiY2xvbmUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoc2F2ZSk9XCJzYXZlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGhpZGUpPVwiaGlkZUNvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNob3cpPVwic2hvd0NvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVRvb2xzKT1cIm1hbmFnZVRvb2xzLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVBlcm1pc3Npb25zKT1cIm1hbmFnZVBlcm1pc3Npb25zLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAodW5zZWxlY3QpPVwidW5zZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvaWdvLWNvbGxhcHNpYmxlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nSWY9XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlLmxlbmd0aCAmJiAhYXV0aC5hdXRoZW50aWNhdGVkXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29udGV4dCBbbmdGb3JPZl09XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlXCI+XHJcbiAgICAgIDxpZ28tY29udGV4dC1pdGVtXHJcbiAgICAgICAgaWdvTGlzdEl0ZW1cclxuICAgICAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICAgICAgW3Nob3dGYXZvcml0ZV09XCJcclxuICAgICAgICAgIGNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdmYXZvcml0ZUNvbnRleHQ0Tm9uQXV0aGVudGljYXRlZCcpXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb250ZXh0ICYmIHNlbGVjdGVkQ29udGV4dC51cmkgPT09IGNvbnRleHQudXJpXCJcclxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICBbZGVmYXVsdF09XCJcclxuICAgICAgICAgIGNvbnRleHRDb25maWdzXHJcbiAgICAgICAgICAgID8gZGVmYXVsdENvbnRleHRJZCA9PT0gY29udGV4dC5pZFxyXG4gICAgICAgICAgICA6IGRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQudXJpXHJcbiAgICAgICAgXCJcclxuICAgICAgICAoZmF2b3JpdGUpPVwiZmF2b3JpdGUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgKHVuc2VsZWN0KT1cInVuc2VsZWN0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzRW1wdHlcIiBjbGFzcz1cIm5vLXJlc3VsdFwiPlxyXG4gICAge3sgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLm5vUmVzdWx0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvZGl2PlxyXG48L2lnby1saXN0PlxyXG4iXX0=
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1saXN0L2NvbnRleHQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLGlCQUFpQixFQUNsQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBUTlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBNkI5RCxNQUFNLE9BQU8sb0JBQW9CO0lBMkdyQjtJQUNEO0lBQ0E7SUFDQztJQUNBO0lBQ0E7SUEvR0gsY0FBYyxDQUF3QjtJQUNyQyxlQUFlLEdBQWlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JELFNBQVMsR0FBa0MsSUFBSSxlQUFlLENBQzVELElBQUksQ0FBQyxlQUFlLENBQ3JCLENBQUM7SUFFRixPQUFPLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7SUFFN0IsUUFBUSxDQUFlO0lBRS9CLElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNPLFNBQVMsR0FBaUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFdEMsZUFBZSxDQUFrQjtJQUVqQyxHQUFHLENBQVM7SUFFckIsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsY0FBYztZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUN4QixDQUFDLENBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQVk7Z0JBQ3pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUNPLGlCQUFpQixDQUFTO0lBRTNCLFNBQVMsR0FBdUIsRUFBRSxDQUFDO0lBRWhDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUM3QyxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDL0MsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzNDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUM3QyxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDM0MsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzVDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztJQUMvRCxJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDM0MsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQzNDLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFDakQsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQy9DLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBQ3hELFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUNsRCx3QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFFbEQsQ0FBQztJQUVHLFlBQVksR0FBRztRQUNwQixJQUFJLEVBQUUsd0NBQXdDO1FBQzlDLE1BQU0sRUFBRSwyQ0FBMkM7UUFDbkQsTUFBTSxFQUFFLDJDQUEyQztLQUNwRCxDQUFDO0lBRUssS0FBSyxDQUFtQjtJQUN4QixXQUFXLEdBQTRCLEVBQUUsQ0FBQztJQUUxQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFFdEMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUVsQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTFCOztPQUVHO0lBQ0gsSUFDSSxJQUFJLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDTSxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBRTFCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ08sWUFBWSxHQUFZLFNBQVMsQ0FBQztJQUVuQyxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFFbkQsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBRTdCLElBQUksT0FBTztRQUNULE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDMUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNO1lBQzdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQ1UsS0FBd0IsRUFDekIsYUFBNEIsRUFDNUIsSUFBaUIsRUFDaEIsTUFBaUIsRUFDakIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFMOUIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFFdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU87YUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEI7Z0JBQ0UsRUFBRSxFQUFFLGNBQWM7Z0JBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQzNDLHlDQUF5QyxDQUMxQztnQkFDRCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDN0MsZ0RBQWdELENBQ2pEO2dCQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLGdCQUFnQjtnQkFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsdUNBQXVDLENBQ3hDO2dCQUNELElBQUksRUFBRSxXQUFXO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUM3Qyw4Q0FBOEMsQ0FDL0M7Z0JBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXNCO1FBQy9DLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM1QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJO3FCQUMvQixXQUFXLEVBQUU7cUJBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQztxQkFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxLQUFLO3FCQUN6QyxXQUFXLEVBQUU7cUJBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQztxQkFDaEIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxjQUFjLEdBQWlCO2dCQUNqQyxJQUFJO2FBQ0wsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSTt5QkFDL0IsV0FBVyxFQUFFO3lCQUNiLFNBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkMsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsS0FBSzt5QkFDekMsV0FBVyxFQUFFO3lCQUNiLFNBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkMsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDbEMsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSTt5QkFDL0IsV0FBVyxFQUFFO3lCQUNiLFNBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkMsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsS0FBSzt5QkFDekMsV0FBVyxFQUFFO3lCQUNiLFNBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkMsT0FBTyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsY0FBYyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDakMsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxVQUFVO1FBQ2YsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQixLQUFLLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyx1QkFBdUIsQ0FBQyxLQUFLO2dCQUNoQyxPQUFPLEtBQUssQ0FBQztZQUNmO2dCQUNFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO29CQUNsQixDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUM5QyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDbEIsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDOUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDMUMsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQXNCO1FBQ3JDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxRCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN0RCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNaLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN0RCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEQsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWixDQUFDO29CQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEQsT0FBTyxDQUFDLENBQUM7b0JBQ1gsQ0FBQztvQkFDRCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQy9CLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3RELE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1osQ0FBQztvQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3RELE9BQU8sQ0FBQyxDQUFDO29CQUNYLENBQUM7b0JBQ0QsT0FBTyxDQUFDLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVztRQUNuQixPQUFPLEdBQUc7YUFDUCxTQUFTLENBQUMsS0FBSyxDQUFDO2FBQ2hCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7YUFDL0IsV0FBVyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFrQjtRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBZTtRQUMzQixJQUFJLENBQUMsTUFBTTthQUNSLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUN0RCxXQUFXLEVBQUU7YUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSztRQUNqQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU87UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQ3pDLFVBQVUsQ0FBQyxPQUFPLENBQ25CLENBQUM7WUFDRixVQUFVLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztZQUUxQixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDL0MsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDckIsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUMvQyxVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO2dCQUNGLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxJQUNFLGtCQUFrQjtvQkFDbEIsa0JBQWtCLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQ2pELENBQUM7b0JBQ0Qsa0JBQWtCLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7b0JBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNyQix1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEVBQ2pELFVBQVUsQ0FBQyxPQUFPLENBQ25CLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUF3QjtRQUNsQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sUUFBUSxHQUFpQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDcEUsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBd0I7UUFDbEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQzt1R0E3WFUsb0JBQW9COzJGQUFwQixvQkFBb0IsNmlCQzlFakMsNDVOQW1OQSx1aUJEekpJLGFBQWEsMEZBQ2IsSUFBSSw0RkFDSixrQkFBa0IsMmFBQ2xCLGNBQWMsMFdBQ2QsV0FBVyw4bUJBQ1gsZUFBZSwySUFDZixhQUFhLG9MQUNiLGdCQUFnQiw4VEFDaEIsa0JBQWtCLHNQQUNsQixhQUFhLGl3QkFDYixLQUFLLGtIQUNMLGlCQUFpQiwrV0FDakIsb0JBQW9CLGlIQUNwQixvQkFBb0IsdU9BQ3BCLGlCQUFpQix3UkFDakIsU0FBUyx5Q0FDVCxZQUFZLGdEQUNaLGVBQWU7OzJGQUdOLG9CQUFvQjtrQkEzQmhDLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGFBQWE7d0JBQ2IsSUFBSTt3QkFDSixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsS0FBSzt3QkFDTCxpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixlQUFlO3FCQUNoQjsrTkFjRyxRQUFRO3NCQURYLEtBQUs7Z0JBVUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBR0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQWNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBd0JILElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgS2V5VmFsdWVQaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvYXV0aCc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aW9uU3RvcmUsXHJcbiAgQWN0aW9uYmFyQ29tcG9uZW50LFxyXG4gIEFjdGlvbmJhck1vZGUsXHJcbiAgQ29sbGFwc2libGVDb21wb25lbnQsXHJcbiAgTGlzdENvbXBvbmVudCxcclxuICBMaXN0SXRlbURpcmVjdGl2ZVxyXG59IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2NvbmZpZyc7XHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvc3RvcmFnZSc7XHJcbmltcG9ydCB0eXBlIHsgSWdvTWFwIH0gZnJvbSAnQGlnbzIvZ2VvJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBCb29rbWFya0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbnRleHQtbWFwLWJ1dHRvbi9ib29rbWFyay1idXR0b24vYm9va21hcmstZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbnRleHRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dC1pdGVtL2NvbnRleHQtaXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRleHRQcm9maWxzLFxyXG4gIENvbnRleHRTZXJ2aWNlT3B0aW9ucyxcclxuICBDb250ZXh0VXNlclBlcm1pc3Npb24sXHJcbiAgQ29udGV4dHNMaXN0LFxyXG4gIERldGFpbGVkQ29udGV4dFxyXG59IGZyb20gJy4uL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvbnRleHRMaXN0Q29udHJvbHNFbnVtIH0gZnJvbSAnLi9jb250ZXh0LWxpc3QuZW51bSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1jb250ZXh0LWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnRleHQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTGlzdENvbXBvbmVudCxcclxuICAgIE5nSWYsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBBY3Rpb25iYXJDb21wb25lbnQsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgTmdGb3IsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIENvbGxhcHNpYmxlQ29tcG9uZW50LFxyXG4gICAgQ29udGV4dEl0ZW1Db21wb25lbnQsXHJcbiAgICBMaXN0SXRlbURpcmVjdGl2ZSxcclxuICAgIEFzeW5jUGlwZSxcclxuICAgIEtleVZhbHVlUGlwZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRleHRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyBjb250ZXh0Q29uZmlnczogQ29udGV4dFNlcnZpY2VPcHRpb25zO1xyXG4gIHByaXZhdGUgY29udGV4dHNJbml0aWFsOiBDb250ZXh0c0xpc3QgPSB7IG91cnM6IFtdIH07XHJcbiAgY29udGV4dHMkOiBCZWhhdmlvclN1YmplY3Q8Q29udGV4dHNMaXN0PiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICB0aGlzLmNvbnRleHRzSW5pdGlhbFxyXG4gICk7XHJcblxyXG4gIGNoYW5nZSQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2UkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBjb250ZXh0cygpOiBDb250ZXh0c0xpc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRzO1xyXG4gIH1cclxuICBzZXQgY29udGV4dHModmFsdWU6IENvbnRleHRzTGlzdCkge1xyXG4gICAgdGhpcy5fY29udGV4dHMgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jb250ZXh0czogQ29udGV4dHNMaXN0ID0geyBvdXJzOiBbXSB9O1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RlZENvbnRleHQ6IERldGFpbGVkQ29udGV4dDtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRlZmF1bHRDb250ZXh0SWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRleHRDb25maWdzXHJcbiAgICAgID8gdGhpcy5fZGVmYXVsdENvbnRleHRJZFxyXG4gICAgICA6ICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnZmF2b3JpdGUuY29udGV4dC51cmknKSBhcyBzdHJpbmcpIHx8XHJcbiAgICAgICAgICB0aGlzLl9kZWZhdWx0Q29udGV4dElkO1xyXG4gIH1cclxuICBzZXQgZGVmYXVsdENvbnRleHRJZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kZWZhdWx0Q29udGV4dElkID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RlZmF1bHRDb250ZXh0SWQ6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGNvbGxhcHNlZDogeyBjb250ZXh0U2NvcGUgfVtdID0gW107XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgdW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBjbG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGl0bGU6IHN0cmluZzsgZW1wdHk6IGJvb2xlYW4gfT4oKTtcclxuICBAT3V0cHV0KCkgaGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBzaG93ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIHNob3dIaWRkZW5Db250ZXh0cyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgZmF2b3JpdGUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgbWFuYWdlUGVybWlzc2lvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgbWFuYWdlVG9vbHMgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyUGVybWlzc2lvbnNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIENvbnRleHRVc2VyUGVybWlzc2lvbltdXHJcbiAgPigpO1xyXG5cclxuICBwdWJsaWMgdGl0bGVNYXBwaW5nID0ge1xyXG4gICAgb3VyczogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLm91ckNvbnRleHRzJyxcclxuICAgIHNoYXJlZDogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNoYXJlZENvbnRleHRzJyxcclxuICAgIHB1YmxpYzogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnB1YmxpY0NvbnRleHRzJ1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1c2VyczogQ29udGV4dFByb2ZpbHNbXTtcclxuICBwdWJsaWMgcGVybWlzc2lvbnM6IENvbnRleHRVc2VyUGVybWlzc2lvbltdID0gW107XHJcblxyXG4gIHB1YmxpYyBhY3Rpb25TdG9yZSA9IG5ldyBBY3Rpb25TdG9yZShbXSk7XHJcbiAgcHVibGljIGFjdGlvbmJhck1vZGUgPSBBY3Rpb25iYXJNb2RlLk92ZXJsYXk7XHJcblxyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuXHJcbiAgcHVibGljIHNob3dIaWRkZW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udGV4dCBmaWx0ZXIgdGVybVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRlcm0odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGVybSA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGdldCB0ZXJtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybTtcclxuICB9XHJcbiAgcHVibGljIF90ZXJtOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgZ2V0IHNvcnRlZEFscGhhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlZEFscGhhO1xyXG4gIH1cclxuICBzZXQgc29ydGVkQWxwaGEodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NvcnRlZEFscGhhID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc29ydGVkQWxwaGE6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzaG93Q29udGV4dEZpbHRlciA9IENvbnRleHRMaXN0Q29udHJvbHNFbnVtLmFsd2F5cztcclxuXHJcbiAgcHVibGljIHRocmVzaG9sZFRvRmlsdGVyID0gNTtcclxuXHJcbiAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhdGhpcy5jb250ZXh0cy5vdXJzLmxlbmd0aCAmJlxyXG4gICAgICAhdGhpcy5jb250ZXh0cy5wdWJsaWM/Lmxlbmd0aCAmJlxyXG4gICAgICAhdGhpcy5jb250ZXh0cy5zaGFyZWQ/Lmxlbmd0aFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcclxuICAgIHB1YmxpYyBhdXRoOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY29udGV4dENvbmZpZ3MgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdjb250ZXh0Jyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY2hhbmdlJCQgPSB0aGlzLmNoYW5nZSRcclxuICAgICAgLnBpcGUoZGVib3VuY2UoKCkgPT4gdGltZXIoNTApKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cyQubmV4dCh0aGlzLmZpbHRlckNvbnRleHRzTGlzdCh0aGlzLmNvbnRleHRzKSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWN0aW9uU3RvcmUubG9hZChbXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ2VtcHR5Q29udGV4dCcsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmVtcHR5Q29udGV4dCdcclxuICAgICAgICApLFxyXG4gICAgICAgIGljb246ICdtYXAtb3V0bGluZScsXHJcbiAgICAgICAgdG9vbHRpcDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZW1wdHlDb250ZXh0VG9vbHRpcCdcclxuICAgICAgICApLFxyXG4gICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlQ29udGV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ2NvbnRleHRGcm9tTWFwJyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuY29udGV4dE1hcCdcclxuICAgICAgICApLFxyXG4gICAgICAgIGljb246ICdtYXAtY2hlY2snLFxyXG4gICAgICAgIHRvb2x0aXA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmNvbnRleHRNYXBUb29sdGlwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVDb250ZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuZXh0KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyQ29udGV4dHNMaXN0KGNvbnRleHRzOiBDb250ZXh0c0xpc3QpOiBDb250ZXh0c0xpc3Qge1xyXG4gICAgaWYgKHRoaXMudGVybSA9PT0gJycpIHtcclxuICAgICAgaWYgKHRoaXMuc29ydGVkQWxwaGEpIHtcclxuICAgICAgICBjb250ZXh0cyA9IHRoaXMuc29ydENvbnRleHRzTGlzdChjb250ZXh0cyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbnRleHRzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgb3VycyA9IGNvbnRleHRzLm91cnMuZmlsdGVyKChjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHRoaXMudGVybVxyXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQgPSBjb250ZXh0LnRpdGxlXHJcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IHVwZGF0ZUNvbnRleHRzOiBDb250ZXh0c0xpc3QgPSB7XHJcbiAgICAgICAgb3Vyc1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29udGV4dHMucHVibGljKSB7XHJcbiAgICAgICAgY29uc3QgcHVibGljcyA9IGNvbnRleHRzLnB1YmxpYy5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQgPSBjb250ZXh0LnRpdGxlXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVDb250ZXh0cy5wdWJsaWMgPSBwdWJsaWNzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXh0cy5zaGFyZWQpIHtcclxuICAgICAgICBjb25zdCBzaGFyZWQgPSBjb250ZXh0cy5zaGFyZWQuZmlsdGVyKChjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdGhpcy50ZXJtXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICBjb25zdCBjb250ZXh0VGl0bGVOb3JtYWxpemVkID0gY29udGV4dC50aXRsZVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdXBkYXRlQ29udGV4dHMuc2hhcmVkID0gc2hhcmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zb3J0ZWRBbHBoYSkge1xyXG4gICAgICAgIHVwZGF0ZUNvbnRleHRzID0gdGhpcy5zb3J0Q29udGV4dHNMaXN0KHVwZGF0ZUNvbnRleHRzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2hhbmdlJCQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93RmlsdGVyKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLnNob3dDb250ZXh0RmlsdGVyKSB7XHJcbiAgICAgIGNhc2UgQ29udGV4dExpc3RDb250cm9sc0VudW0uYWx3YXlzOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBjYXNlIENvbnRleHRMaXN0Q29udHJvbHNFbnVtLm5ldmVyOlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBsZXQgdG90YWxMZW5ndGggPSB0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuY29udGV4dHMucHVibGljXHJcbiAgICAgICAgICA/ICh0b3RhbExlbmd0aCArPSB0aGlzLmNvbnRleHRzLnB1YmxpYy5sZW5ndGgpXHJcbiAgICAgICAgICA6ICh0b3RhbExlbmd0aCArPSAwKTtcclxuICAgICAgICB0aGlzLmNvbnRleHRzLnNoYXJlZFxyXG4gICAgICAgICAgPyAodG90YWxMZW5ndGggKz0gdGhpcy5jb250ZXh0cy5zaGFyZWQubGVuZ3RoKVxyXG4gICAgICAgICAgOiAodG90YWxMZW5ndGggKz0gMCk7XHJcbiAgICAgICAgaWYgKHRvdGFsTGVuZ3RoID49IHRoaXMudGhyZXNob2xkVG9GaWx0ZXIpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzb3J0Q29udGV4dHNMaXN0KGNvbnRleHRzOiBDb250ZXh0c0xpc3QpIHtcclxuICAgIGlmIChjb250ZXh0cykge1xyXG4gICAgICBjb25zdCBjb250ZXh0c0xpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRleHRzKSk7XHJcbiAgICAgIGNvbnRleHRzTGlzdC5vdXJzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPCB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPiB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChjb250ZXh0c0xpc3Quc2hhcmVkKSB7XHJcbiAgICAgICAgY29udGV4dHNMaXN0LnNoYXJlZC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPCB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPiB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHRzTGlzdC5wdWJsaWMpIHtcclxuICAgICAgICBjb250ZXh0c0xpc3QucHVibGljLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbnRleHRzTGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZShzdHI6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHN0clxyXG4gICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU29ydChzb3J0QWxwaGE6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc29ydGVkQWxwaGEgPSBzb3J0QWxwaGE7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcigpIHtcclxuICAgIHRoaXMudGVybSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ29udGV4dChlbXB0eT86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogZmFsc2UgfSlcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgLnN1YnNjcmliZSgodGl0bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGUuZW1pdCh7IHRpdGxlLCBlbXB0eSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGVybWlzc2lvbih1c2VyPyk6IENvbnRleHRVc2VyUGVybWlzc2lvbiB7XHJcbiAgICBpZiAodXNlcikge1xyXG4gICAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHVzZXIubmFtZSk7XHJcbiAgICAgIHJldHVybiBwZXJtaXNzaW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkodXNlciwgcGFyZW50Pykge1xyXG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbih1c2VyKTtcclxuICAgIGlmIChwZXJtaXNzaW9uKSB7XHJcbiAgICAgIHBlcm1pc3Npb24uY2hlY2tlZCA9ICFwZXJtaXNzaW9uLmNoZWNrZWQ7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxyXG4gICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgcGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICApO1xyXG4gICAgICBwZXJtaXNzaW9uLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGxldCBpbmRldGVybWluYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgcGFyZW50LmNoaWxkcykge1xyXG4gICAgICAgIGNvbnN0IGNQZXJtaXNzaW9uID0gdGhpcy5nZXRQZXJtaXNzaW9uKGMpO1xyXG4gICAgICAgIGlmIChjUGVybWlzc2lvbi5jaGVja2VkICE9PSBwZXJtaXNzaW9uLmNoZWNrZWQpIHtcclxuICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhcmVudFBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24ocGFyZW50KTtcclxuICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb24pIHtcclxuICAgICAgICBwYXJlbnRQZXJtaXNzaW9uLmNoZWNrZWQgPSBwZXJtaXNzaW9uLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgICAnY29udGV4dHMucGVybWlzc2lvbnMuJyArIHBhcmVudFBlcm1pc3Npb24ubmFtZSxcclxuICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcGFyZW50UGVybWlzc2lvbi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1c2VyLmNoaWxkcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdXNlci5jaGlsZHMpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlblBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hpbGRyZW5QZXJtaXNzaW9uICYmXHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24uY2hlY2tlZCAhPT0gcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24uY2hlY2tlZCA9IHBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxyXG4gICAgICAgICAgICAnY29udGV4dHMucGVybWlzc2lvbnMuJyArIGNoaWxkcmVuUGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgICAgICBwZXJtaXNzaW9uLmNoZWNrZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJQZXJtaXNzaW9uc0NoYW5nZWQuZW1pdCh0aGlzLnBlcm1pc3Npb25zKTtcclxuICB9XHJcblxyXG4gIGhpZGVDb250ZXh0KGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgY29udGV4dC5oaWRkZW4gPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLnNob3dIaWRkZW4pIHtcclxuICAgICAgY29uc3QgY29udGV4dHM6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10sIHNoYXJlZDogW10sIHB1YmxpYzogW10gfTtcclxuICAgICAgY29udGV4dHMub3VycyA9IHRoaXMuY29udGV4dHMub3Vycy5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xyXG4gICAgICBjb250ZXh0cy5zaGFyZWQgPSB0aGlzLmNvbnRleHRzLnNoYXJlZC5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xyXG4gICAgICBjb250ZXh0cy5wdWJsaWMgPSB0aGlzLmNvbnRleHRzLnB1YmxpYy5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xyXG4gICAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZGUuZW1pdChjb250ZXh0KTtcclxuICB9XHJcblxyXG4gIHNob3dDb250ZXh0KGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgY29udGV4dC5oaWRkZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvdy5lbWl0KGNvbnRleHQpO1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWxpc3QgW25hdmlnYXRpb25dPVwidHJ1ZVwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGV4dC1maWx0ZXItY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwic2hvd0ZpbHRlcigpXCIgZmxvYXRMYWJlbD1cImFsd2F5c1wiPlxuICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZmlsdGVyUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5maWx0ZXJQbGFjZUhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXJtXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgY2xhc3M9XCJjbGVhci1idXR0b25cIlxuICAgICAgICAqbmdJZj1cInRlcm0ubGVuZ3RoXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhc29ydGVkQWxwaGFcIlxuICAgICAgICBjbGFzcz1cInNvcnQtYWxwaGFcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgW21hdFRvb2x0aXBdPVwiXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNvcnRBbHBoYWJldGljYWxseScgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTb3J0KHRydWUpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBzdmdJY29uPVwic29ydC1hbHBoYWJldGljYWwtdmFyaWFudFwiXG4gICAgICAgID48L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic29ydGVkQWxwaGFcIlxuICAgICAgICBjbGFzcz1cInNvcnQtYWxwaGFcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNvcnRDb250ZXh0T3JkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTb3J0KGZhbHNlKVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cIndhcm5cIiBzdmdJY29uPVwic29ydC12YXJpYW50LXJlbW92ZVwiPjwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGlnby1hY3Rpb25iYXJcbiAgICAgICAgKm5nSWY9XCJhdXRoLmF1dGhlbnRpY2F0ZWQgJiYgY29udGV4dENvbmZpZ3NcIlxuICAgICAgICBjbGFzcz1cImFkZC1jb250ZXh0LWJ1dHRvblwiXG4gICAgICAgIFtpY29uQ29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbc3RvcmVdPVwiYWN0aW9uU3RvcmVcIlxuICAgICAgICBbd2l0aEljb25dPVwidHJ1ZVwiXG4gICAgICAgIGljb249XCJwbHVzXCJcbiAgICAgICAgW3dpdGhUaXRsZV09XCJhY3Rpb25iYXJNb2RlID09PSAnb3ZlcmxheSdcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXG4gICAgICAgIFttb2RlXT1cImFjdGlvbmJhck1vZGVcIlxuICAgICAgPlxuICAgICAgPC9pZ28tYWN0aW9uYmFyPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcbiAgICAgICAgY2xhc3M9XCJ1c2Vycy1maWx0ZXJcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclVzZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhY2NvdW50TWVudVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBzdmdJY29uPVwiZmlsdGVyLW1lbnVcIj48L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bWF0LW1lbnUgI2FjY291bnRNZW51PVwibWF0TWVudVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5jaGlsZHM7IGVsc2Ugd2l0aFN1Yk1lbnVcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmNoZWNrZWRcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoU3ViTWVudT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwic3ViQWNjb3VudE1lbnVcIlxuICAgICAgICAgICAgICBjbGFzcz1cInByb2ZpbC1tZW51XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldFBlcm1pc3Npb24odXNlcikuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5pbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVRvZ2dsZUNhdGVnb3J5KHVzZXIpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdXNlci50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8bWF0LW1lbnUgI3N1YkFjY291bnRNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiB1c2VyLmNoaWxkc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKGNoaWxkKS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUb2dnbGVDYXRlZ29yeShjaGlsZCwgdXNlcilcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJwcm9maWwtbWVudVwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInNob3dIaWRkZW5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNob3dIaWRkZW5Db250ZXh0cy5lbWl0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7ICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5zaG93SGlkZGVuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1tZW51PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGVcbiAgICBuZ0ZvclxuICAgIGxldC1ncm91cENvbnRleHRzXG4gICAgW25nRm9yT2ZdPVwiJGFueShjb250ZXh0cyQgfCBhc3luYykgfCBrZXl2YWx1ZVwiXG4gID5cbiAgICA8aWdvLWNvbGxhcHNpYmxlXG4gICAgICAqbmdJZj1cIiRhbnkoZ3JvdXBDb250ZXh0cykudmFsdWUubGVuZ3RoICYmIGF1dGguYXV0aGVudGljYXRlZFwiXG4gICAgICBbdGl0bGVdPVwidGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY29sbGFwc2VkXT1cIiRhbnkoY29sbGFwc2VkW3RpdGxlTWFwcGluZ1skYW55KGdyb3VwQ29udGV4dHMpLmtleV1dKVwiXG4gICAgICAodG9nZ2xlKT1cImNvbGxhcHNlZFt0aXRsZU1hcHBpbmdbJGFueShncm91cENvbnRleHRzKS5rZXldXSA9ICRhbnkoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb250ZXh0IFtuZ0Zvck9mXT1cIiRhbnkoZ3JvdXBDb250ZXh0cykudmFsdWVcIj5cbiAgICAgICAgPGlnby1jb250ZXh0LWl0ZW1cbiAgICAgICAgICBpZ29MaXN0SXRlbVxuICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb250ZXh0ICYmIHNlbGVjdGVkQ29udGV4dC51cmkgPT09IGNvbnRleHQudXJpXCJcbiAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgICBbZGVmYXVsdF09XCJcbiAgICAgICAgICAgIGNvbnRleHQuaWQgJiZcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCAmJlxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29udGV4dElkID09PSBjb250ZXh0LmlkXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoY29udGV4dClcIlxuICAgICAgICAgIChkZWxldGUpPVwiZGVsZXRlLmVtaXQoY29udGV4dClcIlxuICAgICAgICAgIChjbG9uZSk9XCJjbG9uZS5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgICAoc2F2ZSk9XCJzYXZlLmVtaXQoY29udGV4dClcIlxuICAgICAgICAgIChoaWRlKT1cImhpZGVDb250ZXh0KGNvbnRleHQpXCJcbiAgICAgICAgICAoc2hvdyk9XCJzaG93Q29udGV4dChjb250ZXh0KVwiXG4gICAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxuICAgICAgICAgIChtYW5hZ2VUb29scyk9XCJtYW5hZ2VUb29scy5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgICAobWFuYWdlUGVybWlzc2lvbnMpPVwibWFuYWdlUGVybWlzc2lvbnMuZW1pdChjb250ZXh0KVwiXG4gICAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXG4gICAgICAgICAgKHVuc2VsZWN0KT1cInVuc2VsZWN0LmVtaXQoY29udGV4dClcIlxuICAgICAgICA+XG4gICAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pZ28tY29sbGFwc2libGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICpuZ0lmPVwiJGFueShncm91cENvbnRleHRzKS52YWx1ZS5sZW5ndGggJiYgIWF1dGguYXV0aGVudGljYXRlZFwiXG4gICAgICBuZ0ZvclxuICAgICAgbGV0LWNvbnRleHRcbiAgICAgIFtuZ0Zvck9mXT1cIiRhbnkoZ3JvdXBDb250ZXh0cykudmFsdWVcIlxuICAgID5cbiAgICAgIDxpZ28tY29udGV4dC1pdGVtXG4gICAgICAgIGlnb0xpc3RJdGVtXG4gICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgW3Nob3dGYXZvcml0ZV09XCJcbiAgICAgICAgICBjb25maWdTZXJ2aWNlLmdldENvbmZpZygnZmF2b3JpdGVDb250ZXh0NE5vbkF1dGhlbnRpY2F0ZWQnKVxuICAgICAgICBcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb250ZXh0ICYmIHNlbGVjdGVkQ29udGV4dC51cmkgPT09IGNvbnRleHQudXJpXCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFtkZWZhdWx0XT1cIlxuICAgICAgICAgIGNvbnRleHRDb25maWdzXG4gICAgICAgICAgICA/IGRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQuaWRcbiAgICAgICAgICAgIDogZGVmYXVsdENvbnRleHRJZCA9PT0gY29udGV4dC51cmlcbiAgICAgICAgXCJcbiAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgKHVuc2VsZWN0KT1cInVuc2VsZWN0LmVtaXQoY29udGV4dClcIlxuICAgICAgPlxuICAgICAgPC9pZ28tY29udGV4dC1pdGVtPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiAqbmdJZj1cImlzRW1wdHlcIiBjbGFzcz1cIm5vLXJlc3VsdFwiPlxuICAgIHt7ICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5ub1Jlc3VsdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2lnby1saXN0PlxuIl19
@@ -137,7 +137,7 @@ export class PoiButtonComponent {
137
137
  });
138
138
  }
139
139
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiButtonComponent, deps: [{ token: i1.MatDialog }, { token: i2.AuthService }, { token: i3.PoiService }, { token: i4.MessageService }, { token: i5.LanguageService }, { token: i6.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component });
140
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: PoiButtonComponent, isStandalone: true, selector: "igo-poi-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"], dependencies: [{ kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] });
140
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: PoiButtonComponent, isStandalone: true, selector: "igo-poi-button", inputs: { map: "map", color: "color" }, providers: [PoiService], ngImport: i0, template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"], dependencies: [{ kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] });
141
141
  }
142
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiButtonComponent, decorators: [{
143
143
  type: Component,
@@ -150,10 +150,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
150
150
  MatDividerModule,
151
151
  NgFor,
152
152
  TranslateModule
153
- ], template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"] }]
153
+ ], providers: [PoiService], template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"] }]
154
154
  }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.AuthService }, { type: i3.PoiService }, { type: i4.MessageService }, { type: i5.LanguageService }, { type: i6.ConfirmDialogService }], propDecorators: { map: [{
155
155
  type: Input
156
156
  }], color: [{
157
157
  type: Input
158
158
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL3BvaS1idXR0b24vcG9pLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL3BvaS1idXR0b24vcG9pLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdwRCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7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LENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDNUIsTUFBTTtZQUNOLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLFFBQVEsRUFBRSxHQUFHO1lBQ2IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBL0lVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLGtIQzNDL0IsNjVCQW1DQSxzWURGSSxlQUFlLG1yQkFDZixlQUFlLDhCQUNmLGVBQWUsNElBQ2Ysd0JBQXdCLGdFQUN4QixhQUFhLG9MQUNiLGdCQUFnQixvSUFDaEIsS0FBSyxrSEFDTCxlQUFlOzsyRkFHTixrQkFBa0I7a0JBaEI5QixTQUFTOytCQUNFLGdCQUFnQixjQUdkLElBQUksV0FDUDt3QkFDUCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixLQUFLO3dCQUNMLGVBQWU7cUJBQ2hCOytOQUlHLEdBQUc7c0JBRE4sS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvYXV0aCc7XHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dTZXJ2aWNlLCBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lc3NhZ2UnO1xyXG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcblxyXG5pbXBvcnQgKiBhcyBvbGVhc2luZyBmcm9tICdvbC9lYXNpbmcnO1xyXG5pbXBvcnQgb2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcclxuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUG9pRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9wb2ktZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBvaSB9IGZyb20gJy4vc2hhcmVkL3BvaS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvcG9pLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tcG9pLWJ1dHRvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BvaS1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BvaS1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIFN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxyXG4gICAgTmdGb3IsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb2lCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgY29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xvcjtcclxuICB9XHJcbiAgc2V0IGNvbG9yKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbG9yOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBwb2lzOiBQb2lbXTtcclxuICBwcml2YXRlIGF1dGhlbnRpY2F0ZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtRGlhbG9nU2VydmljZTogQ29uZmlybURpYWxvZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGUkJCA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aGVudGljYXRlJC5zdWJzY3JpYmUoKGF1dGgpID0+IHtcclxuICAgICAgaWYgKGF1dGgpIHtcclxuICAgICAgICB0aGlzLmdldFBvaXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlJCQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBvaShwb2k6IFBvaSkge1xyXG4gICAgaWYgKHBvaSAmJiBwb2kuaWQpIHtcclxuICAgICAgdGhpcy5jb25maXJtRGlhbG9nU2VydmljZVxyXG4gICAgICAgIC5vcGVuKFxyXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAgICdpZ28uY29udGV4dC5wb2lCdXR0b24uZGlhbG9nLmNvbmZpcm1EZWxldGUnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcclxuICAgICAgICAgIGlmIChjb25maXJtKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9pU2VydmljZS5kZWxldGUocG9pLmlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQucG9pQnV0dG9uLmRpYWxvZy5kZWxldGVNc2cnLFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQucG9pQnV0dG9uLmRpYWxvZy5kZWxldGVUaXRsZScsXHJcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogcG9pLnRpdGxlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaXMgPSB0aGlzLnBvaXMuZmlsdGVyKChwKSA9PiBwLmlkICE9PSBwb2kuaWQpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXJyLmVycm9yLnRpdGxlID0gJ0RFTEVURSBQb2lzJztcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc2hvd0Vycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQb2lzKCkge1xyXG4gICAgdGhpcy5wb2lTZXJ2aWNlXHJcbiAgICAgIC5nZXQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXApID0+IHtcclxuICAgICAgICAgIHRoaXMucG9pcyA9IHJlcDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGVyci5lcnJvci50aXRsZSA9ICdHRVQgUG9pcyc7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVBvaSgpIHtcclxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCk7XHJcbiAgICBjb25zdCBwcm9qID0gdmlldy5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpO1xyXG4gICAgY29uc3QgY2VudGVyOiBhbnkgPSBuZXcgb2xQb2ludCh2aWV3LmdldENlbnRlcigpKS50cmFuc2Zvcm0oXHJcbiAgICAgIHByb2osXHJcbiAgICAgICdFUFNHOjQzMjYnXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHBvaTogUG9pID0ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIHg6IGNlbnRlci5nZXRDb29yZGluYXRlcygpWzBdLFxyXG4gICAgICB5OiBjZW50ZXIuZ2V0Q29vcmRpbmF0ZXMoKVsxXSxcclxuICAgICAgem9vbTogdmlldy5nZXRab29tKClcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5kaWFsb2dcclxuICAgICAgLm9wZW4oUG9pRGlhbG9nQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogZmFsc2UgfSlcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnN1YnNjcmliZSgodGl0bGUpID0+IHtcclxuICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgIHBvaS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgICAgdGhpcy5wb2lTZXJ2aWNlLmNyZWF0ZShwb2kpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKG5ld1BvaSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICdpZ28uY29udGV4dC5wb2lCdXR0b24uZGlhbG9nLmNyZWF0ZU1zZycsXHJcbiAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQucG9pQnV0dG9uLmRpYWxvZy5jcmVhdGVUaXRsZScsXHJcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiBwb2kudGl0bGUgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcG9pLmlkID0gbmV3UG9pLmlkO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9pcy5wdXNoKHBvaSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBlcnIuZXJyb3IudGl0bGUgPSAnUE9TVCBQb2lzJztcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tT25Qb2koaWQpIHtcclxuICAgIGNvbnN0IHBvaSA9IHRoaXMucG9pcy5maW5kKChwKSA9PiBwLmlkID09PSBpZCk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gb2xwcm9qLmZyb21Mb25MYXQoXHJcbiAgICAgIFtOdW1iZXIocG9pLngpLCBOdW1iZXIocG9pLnkpXSxcclxuICAgICAgdGhpcy5tYXAucHJvamVjdGlvblxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuYW5pbWF0ZSh7XHJcbiAgICAgIGNlbnRlcixcclxuICAgICAgem9vbTogcG9pLnpvb20sXHJcbiAgICAgIGR1cmF0aW9uOiA1MDAsXHJcbiAgICAgIGVhc2luZzogb2xlYXNpbmcuZWFzZU91dFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtc2VsZWN0XG4gIFtwbGFjZWhvbGRlcl09XCInaWdvLmNvbnRleHQucG9pQnV0dG9uLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gIGZsb2F0UGxhY2Vob2xkZXI9XCJuZXZlclwiXG4+XG4gIDxtYXQtb3B0aW9uIChjbGljayk9XCJjcmVhdGVQb2koKVwiIGNsYXNzPVwicG9pLW9wdGlvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVBvaVwiPlxuICAgICAge3sgJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5jcmVhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwiY3JlYXRlUG9pKClcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwicGx1cy1jaXJjbGVcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1vcHRpb24+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8bWF0LW9wdGlvblxuICAgICpuZ0Zvcj1cImxldCBwb2kgb2YgcG9pc1wiXG4gICAgY2xhc3M9XCJwb2ktb3B0aW9uXCJcbiAgICBbdmFsdWVdPVwicG9pLmlkXCJcbiAgICAoY2xpY2spPVwiem9vbU9uUG9pKHBvaS5pZClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlUG9pXCI+e3sgcG9pLnRpdGxlIH19PC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBpZ29TdG9wUHJvcGFnYXRpb25cbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlUG9pKHBvaSlcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGVsZXRlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtb3B0aW9uPlxuPC9tYXQtc2VsZWN0PlxuIl19
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL3BvaS1idXR0b24vcG9pLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYXAtYnV0dG9uL3BvaS1idXR0b24vcG9pLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdwRCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7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LENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDNUIsTUFBTTtZQUNOLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtZQUNkLFFBQVEsRUFBRSxHQUFHO1lBQ2IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBL0lVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLHFHQUZsQixDQUFDLFVBQVUsQ0FBQywwQkMxQ3pCLDY1QkFtQ0Esc1lERkksZUFBZSxtckJBQ2YsZUFBZSw4QkFDZixlQUFlLDRJQUNmLHdCQUF3QixnRUFDeEIsYUFBYSxvTEFDYixnQkFBZ0Isb0lBQ2hCLEtBQUssa0hBQ0wsZUFBZTs7MkZBSU4sa0JBQWtCO2tCQWpCOUIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FHZCxJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsS0FBSzt3QkFDTCxlQUFlO3FCQUNoQixhQUNVLENBQUMsVUFBVSxDQUFDOytOQUluQixHQUFHO3NCQUROLEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BpZ28yL2F1dGgnO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nU2VydmljZSwgU3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcclxuaW1wb3J0IHR5cGUgeyBJZ29NYXAgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5cclxuaW1wb3J0ICogYXMgb2xlYXNpbmcgZnJvbSAnb2wvZWFzaW5nJztcclxuaW1wb3J0IG9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFBvaURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vcG9pLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQb2kgfSBmcm9tICcuL3NoYXJlZC9wb2kuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3BvaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLXBvaS1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wb2ktYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wb2ktYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIE5nRm9yLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtQb2lTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9pQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xyXG4gICAgcmV0dXJuIHRoaXMuX21hcDtcclxuICB9XHJcbiAgc2V0IG1hcCh2YWx1ZTogSWdvTWFwKSB7XHJcbiAgICB0aGlzLl9tYXAgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sb3I7XHJcbiAgfVxyXG4gIHNldCBjb2xvcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jb2xvciA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9jb2xvcjogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgcG9pczogUG9pW107XHJcbiAgcHJpdmF0ZSBhdXRoZW50aWNhdGUkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcG9pU2VydmljZTogUG9pU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybURpYWxvZ1NlcnZpY2U6IENvbmZpcm1EaWFsb2dTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXV0aGVudGljYXRlJCQgPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZSQuc3Vic2NyaWJlKChhdXRoKSA9PiB7XHJcbiAgICAgIGlmIChhdXRoKSB7XHJcbiAgICAgICAgdGhpcy5nZXRQb2lzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQb2kocG9pOiBQb2kpIHtcclxuICAgIGlmIChwb2kgJiYgcG9pLmlkKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2VcclxuICAgICAgICAub3BlbihcclxuICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAnaWdvLmNvbnRleHQucG9pQnV0dG9uLmRpYWxvZy5jb25maXJtRGVsZXRlJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgICAgICB0aGlzLnBvaVNlcnZpY2UuZGVsZXRlKHBvaS5pZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICAgICAgJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5kaWFsb2cuZGVsZXRlTXNnJyxcclxuICAgICAgICAgICAgICAgICAgJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5kaWFsb2cuZGVsZXRlVGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IHBvaS50aXRsZSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2lzID0gdGhpcy5wb2lzLmZpbHRlcigocCkgPT4gcC5pZCAhPT0gcG9pLmlkKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIGVyci5lcnJvci50aXRsZSA9ICdERUxFVEUgUG9pcyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UG9pcygpIHtcclxuICAgIHRoaXMucG9pU2VydmljZVxyXG4gICAgICAuZ2V0KClcclxuICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVwKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvaXMgPSByZXA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBlcnIuZXJyb3IudGl0bGUgPSAnR0VUIFBvaXMnO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zaG93RXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVQb2koKSB7XHJcbiAgICBjb25zdCB2aWV3ID0gdGhpcy5tYXAub2wuZ2V0VmlldygpO1xyXG4gICAgY29uc3QgcHJvaiA9IHZpZXcuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKTtcclxuICAgIGNvbnN0IGNlbnRlcjogYW55ID0gbmV3IG9sUG9pbnQodmlldy5nZXRDZW50ZXIoKSkudHJhbnNmb3JtKFxyXG4gICAgICBwcm9qLFxyXG4gICAgICAnRVBTRzo0MzI2J1xyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwb2k6IFBvaSA9IHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICB4OiBjZW50ZXIuZ2V0Q29vcmRpbmF0ZXMoKVswXSxcclxuICAgICAgeTogY2VudGVyLmdldENvb3JkaW5hdGVzKClbMV0sXHJcbiAgICAgIHpvb206IHZpZXcuZ2V0Wm9vbSgpXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZGlhbG9nXHJcbiAgICAgIC5vcGVuKFBvaURpYWxvZ0NvbXBvbmVudCwgeyBkaXNhYmxlQ2xvc2U6IGZhbHNlIH0pXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHRpdGxlKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICBwb2kudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICAgIHRoaXMucG9pU2VydmljZS5jcmVhdGUocG9pKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIChuZXdQb2kpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQucG9pQnV0dG9uLmRpYWxvZy5jcmVhdGVNc2cnLFxyXG4gICAgICAgICAgICAgICAgJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5kaWFsb2cuY3JlYXRlVGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogcG9pLnRpdGxlIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHBvaS5pZCA9IG5ld1BvaS5pZDtcclxuICAgICAgICAgICAgICB0aGlzLnBvaXMucHVzaChwb2kpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgZXJyLmVycm9yLnRpdGxlID0gJ1BPU1QgUG9pcyc7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zaG93RXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgem9vbU9uUG9pKGlkKSB7XHJcbiAgICBjb25zdCBwb2kgPSB0aGlzLnBvaXMuZmluZCgocCkgPT4gcC5pZCA9PT0gaWQpO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlciA9IG9scHJvai5mcm9tTG9uTGF0KFxyXG4gICAgICBbTnVtYmVyKHBvaS54KSwgTnVtYmVyKHBvaS55KV0sXHJcbiAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmFuaW1hdGUoe1xyXG4gICAgICBjZW50ZXIsXHJcbiAgICAgIHpvb206IHBvaS56b29tLFxyXG4gICAgICBkdXJhdGlvbjogNTAwLFxyXG4gICAgICBlYXNpbmc6IG9sZWFzaW5nLmVhc2VPdXRcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LXNlbGVjdFxuICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5jb250ZXh0LnBvaUJ1dHRvbi5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICBmbG9hdFBsYWNlaG9sZGVyPVwibmV2ZXJcIlxuPlxuICA8bWF0LW9wdGlvbiAoY2xpY2spPVwiY3JlYXRlUG9pKClcIiBjbGFzcz1cInBvaS1vcHRpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVQb2lcIj5cbiAgICAgIHt7ICdpZ28uY29udGV4dC5wb2lCdXR0b24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGlnb1N0b3BQcm9wYWdhdGlvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgKGNsaWNrKT1cImNyZWF0ZVBvaSgpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInBsdXMtY2lyY2xlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtb3B0aW9uPlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPG1hdC1vcHRpb25cbiAgICAqbmdGb3I9XCJsZXQgcG9pIG9mIHBvaXNcIlxuICAgIGNsYXNzPVwicG9pLW9wdGlvblwiXG4gICAgW3ZhbHVlXT1cInBvaS5pZFwiXG4gICAgKGNsaWNrKT1cInpvb21PblBvaShwb2kuaWQpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVBvaVwiPnt7IHBvaS50aXRsZSB9fTwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXG4gICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZVBvaShwb2kpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LW9wdGlvbj5cbjwvbWF0LXNlbGVjdD5cbiJdfQ==