@bizdoc/core 2.1.9 → 2.1.10

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.
Files changed (55) hide show
  1. package/assets/themes/brown.min.css +1 -1
  2. package/assets/themes/dark.min.css +1 -1
  3. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  4. package/assets/themes/deep-purple-teal.min.css +1 -1
  5. package/assets/themes/default.min.css +1 -1
  6. package/assets/themes/green.min.css +1 -1
  7. package/assets/themes/indigo.min.css +1 -1
  8. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +3 -3
  9. package/esm2022/lib/admin/architecture/declarations.mjs +1 -1
  10. package/esm2022/lib/admin/architecture/designer-element.component.mjs +3 -3
  11. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +3 -3
  12. package/esm2022/lib/admin/architecture/designer.component.mjs +5 -3
  13. package/esm2022/lib/admin/architecture/elements/action.component.mjs +3 -3
  14. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +3 -3
  15. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +3 -4
  16. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +3 -3
  17. package/esm2022/lib/admin/architecture/elements/form.component.mjs +3 -3
  18. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +3 -3
  19. package/esm2022/lib/admin/architecture/elements/job.component.mjs +59 -0
  20. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +3 -3
  21. package/esm2022/lib/admin/architecture/elements/type.component.mjs +3 -3
  22. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +3 -3
  23. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +3 -3
  24. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +3 -3
  25. package/esm2022/lib/admin/profiler/profiler.component.mjs +3 -3
  26. package/esm2022/lib/admin/system.service.mjs +7 -1
  27. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  28. package/esm2022/lib/compose/box/box.component.mjs +3 -3
  29. package/esm2022/lib/compose/comments/edits.component.mjs +3 -3
  30. package/esm2022/lib/compose/comments/votes.component.mjs +3 -3
  31. package/esm2022/lib/compose/form.component.mjs +3 -3
  32. package/esm2022/lib/compose/trace/trace.component.mjs +3 -3
  33. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +3 -3
  34. package/esm2022/lib/core/animations.mjs +2 -2
  35. package/esm2022/lib/core/checkbox.mjs +3 -3
  36. package/esm2022/lib/core/fields/options.component.mjs +3 -3
  37. package/esm2022/lib/core/guide/guide.component.mjs +3 -3
  38. package/esm2022/lib/core/guide/help-tip.component.mjs +3 -3
  39. package/esm2022/lib/core/none.component.mjs +5 -5
  40. package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  41. package/esm2022/lib/core/save-changes.dialog.mjs +3 -3
  42. package/esm2022/lib/cube/matrix/table.component.mjs +3 -3
  43. package/esm2022/lib/dashboard/score/activity.widget.mjs +3 -3
  44. package/esm2022/lib/home/options/options.component.mjs +3 -3
  45. package/esm2022/lib/impersonate/impersonate.component.mjs +3 -3
  46. package/esm2022/lib/scheduler/schedule.component.mjs +3 -3
  47. package/esm2022/lib/system.module.mjs +6 -3
  48. package/fesm2022/bizdoc-core.mjs +127 -76
  49. package/fesm2022/bizdoc-core.mjs.map +1 -1
  50. package/lib/admin/architecture/declarations.d.ts +1 -0
  51. package/lib/admin/architecture/elements/cube.component.d.ts +1 -2
  52. package/lib/admin/architecture/elements/job.component.d.ts +19 -0
  53. package/lib/admin/system.service.d.ts +5 -0
  54. package/lib/system.module.d.ts +56 -55
  55. package/package.json +9 -9
@@ -290,16 +290,16 @@ export let FormDesignerComponent = class FormDesignerComponent {
290
290
  });
291
291
  }
292
292
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: FormDesignerComponent, deps: [{ token: i3.FormBuilder }, { token: i4.PaneRef }, { token: i0.ChangeDetectorRef }, { token: i5.PromptService }, { token: i6.SystemService }, { token: i7.TranslateService }, { token: i8.PanesRouter }, { token: i1.SessionService }, { token: i0.ElementRef }, { token: i9.UtilityRef }], target: i0.ɵɵFactoryTarget.Component }); }
293
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: FormDesignerComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: DesignControlComponent, selector: "bizdoc-box-control-design", inputs: ["metadata"] }, { kind: "pipe", type: i17.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] }); }
293
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: FormDesignerComponent, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-mdc-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-mdc-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i11.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i11.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i12.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: DesignControlComponent, selector: "bizdoc-box-control-design", inputs: ["metadata"] }, { kind: "pipe", type: i17.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }] }); }
294
294
  };
295
295
  FormDesignerComponent = __decorate([
296
296
  BizDoc({ selector: 'bizdoc-form-designer' })
297
297
  ], FormDesignerComponent);
298
298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: FormDesignerComponent, decorators: [{
299
299
  type: Component,
300
- args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
300
+ args: [{ template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\r\n <button mat-icon-button (click)=\"undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"historyIndex === -1\"><mat-icon class=\"mat-icon-rtl-mirror\">undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"historyIndex === history.length - 1\"><mat-icon class=\"mat-icon-rtl-mirror\">redo</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <!--<button mat-icon-button (click)=\"opensettings()\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>-->\r\n</mat-toolbar>\r\n<form autocomplete=\"off\" [formGroup]=\"form\" *ngIf=\"model\">\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, sections)\">\r\n <section class=\"column\" *ngFor=\"let s of sections.controls; let si = index\" cdkDrag [attr.data-index]=\"si\">\r\n <div class=\"row\">\r\n <mat-icon class=\"section-drag\" cdkDragHandle>drag_indicator</mat-icon>\r\n <div class=\"column\" [formGroup]=\"s\">\r\n <h2 class=\"mat-mdc-title\">{{s.get('title').value|localizedString}}</h2>\r\n <p class=\"mat-mdc-body-1\" *ngIf=\"s.get('note').value\">{{s.get('note').value|localizedString}}</p>\r\n <div cdkDropList (cdkDropListDropped)=\"drop($event, s.get('rows'))\">\r\n <div *ngFor=\"let r of s.get('rows').controls; let ri = index\" class=\"row designer-row\" cdkDrag [attr.data-index]=\"ri\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n <div cdkDropList cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event, r.get('fields'))\" class=\"row\">\r\n <div *ngFor=\"let f of r.get('fields').controls; let fi = index\" cdkDrag class=\"designer-field row\" [attr.data-index]=\"fi\">\r\n <!--<mat-icon cdkDragHandle>{{iconOf(f.value.type)}}</mat-icon>-->\r\n <bizdoc-box-control-design [metadata]=\"f.value\"></bizdoc-box-control-design>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeField(r, f)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editField(f)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n <!--<div *cdkDragPlaceholder class=\"drag-placeholder\"></div>-->\r\n </div>\r\n </div>\r\n <div class=\"column\">\r\n <button mat-stroked-button [matMenuTriggerFor]=\"fieldMenu\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #fieldMenu>\r\n <button mat-menu-item *ngFor=\"let c of controls\" (click)=\"addField(s, r, c, $event)\">\r\n <mat-icon>{{c.icon}}</mat-icon>\r\n <span>{{c.title}}</span>\r\n </button>\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <div class=\"tools\">\r\n <button mat-stroked-button (click)=\"removeRow(s, r)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tools row\">\r\n <button mat-stroked-button (click)=\"addRow(s, $event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button (click)=\"removeSection(s)\" [bizdocTooltip]=\"'Discard'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n <button mat-stroked-button (click)=\"editSection(s)\" [bizdocTooltip]=\"'Settings'|translate\" type=\"button\"><mat-icon>settings</mat-icon></button>\r\n </div>\r\n </section>\r\n <button mat-stroked-button (click)=\"addSection($event)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add</mat-icon></button>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:8px}:host ::ng-deep .cdk-drag-handle{cursor:move}section,.designer-row{border:2px solid transparent;border-radius:3px;padding:8px}.designer-field button{opacity:.1}.designer-field:hover button{opacity:1}section:hover,.designer-row:hover{border:2px dotted}section .designer-row{margin:5px 0}section .designer-row .designer-field{flex:1}.drag-placeholder{border:2px dashed}\n"] }]
301
301
  }], ctorParameters: function () { return [{ type: i3.FormBuilder }, { type: i4.PaneRef }, { type: i0.ChangeDetectorRef }, { type: i5.PromptService }, { type: i6.SystemService }, { type: i7.TranslateService }, { type: i8.PanesRouter }, { type: i1.SessionService }, { type: i0.ElementRef }, { type: i9.UtilityRef }]; }, propDecorators: { handleKeyboardEvent: [{
302
302
  type: HostListener,
303
303
  args: ['document:keydown', ['$event']]
304
304
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LWRlc2lnbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9kZXNpZ25lci9ib3gtZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL2Rlc2lnbmVyL2JveC1kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDO0FBSTFKLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFXbEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTVELE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFDVSxJQUFzQixFQUNDLE9BQXFCLEVBQzVDLFFBQXdCLEVBQ3hCLEdBQW1DO1FBSG5DLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ0MsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUM1QyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFnQztJQUFLLENBQUM7SUFDbkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFD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cnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29udHJvbENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Jhc2VcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29uZmlnLCBCSVpET0NfQ09ORklHLCBPcGVuUG9saWN5IH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9kZWNvcmF0b3JzXCI7XHJcbmltcG9ydCB7IGNsZWFudXAgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgQ3ViZSwgVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2xvdHMvcm91dGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHByb2dyYW1OYW1lIH0gZnJvbSBcIi4uLy4uL2FyY2hpdGVjdHVyZS9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29udHJvbEluZm8sIFN5c3RlbVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc3lzdGVtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eVJlZiB9IGZyb20gXCIuLi8uLi91dGlsaXR5LXJlZlwiO1xyXG5pbXBvcnQgeyBCb3hGb3JtTWV0YWRhdGEsIEZpZWxkTW9kZWwsIEJveFJvd01vZGVsLCBTZWN0aW9uTW9kZWwgfSBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29udHJvbFByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tIFwiLi9wcm9wZXJ0aWVzLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTZWN0aW9uUHJvcGVydGllc0NvbXBvbmVudCB9IGZyb20gXCIuL3NlY3Rpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEJveFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSBcIi4vc2V0dGluZ3MuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtYm94LWNvbnRyb2wtZGVzaWduJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVzaWduQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBtZXRhZGF0YTogRmllbGRNb2RlbDtcclxuICBwcml2YXRlIF9pbnN0YW5jZTogQ29udHJvbENvbXBvbmVudDxhbnk+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgQEluamVjdChCSVpET0NfQ09ORklHKSBwcml2YXRlIF9jb25maWc6IEJpekRvY0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Y6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwpIHsgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICFjaGFuZ2VzWydtZXRhZGF0YSddLmZpcnN0Q2hhbmdlICYmIE9iamVjdC5hc3NpZ24odGhpcy5faW5zdGFuY2UsIHRoaXMubWV0YWRhdGEpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgY29udHJvbHMgfSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZSxcclxuICAgICAgeyBjb250cm9sVHlwZSB9ID0gdGhpcy5tZXRhZGF0YSxcclxuICAgICAgY29udHJvbCA9IGNvbnRyb2xzW2NvbnRyb2xUeXBlXSB8fCAoY29udHJvbHNbY29udHJvbFR5cGVdID0gY29udHJvbHMuZmluZChjID0+IGMubmFtZSA9PT0gY29udHJvbFR5cGUpKSxcclxuICAgICAgc2VsZWN0b3IgPSBjb250cm9sLnRlbXBsYXRlO1xyXG4gICAgY29uc3QgY29tcCA9IHRoaXMuX2NmLmNvbXBvbmVudChzZWxlY3Rvcik7XHJcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5fdmNyLmNyZWF0ZUNvbXBvbmVudDxDb250cm9sQ29tcG9uZW50Pihjb21wKTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5faW5zdGFuY2UgPSBjb21wUmVmLmluc3RhbmNlO1xyXG4gICAgT2JqZWN0LmFzc2lnbihpbnN0YW5jZSwgdGhpcy5tZXRhZGF0YSk7XHJcbiAgICBpbnN0YW5jZS5hcHBlYXJhbmNlID0gdGhpcy5fY29uZmlnLmFwcGVhcmFuY2UgfHwgJ291dGxpbmUnO1xyXG4gICAgaW5zdGFuY2UubW9kZSA9ICdjb21wb3NlJztcclxuICAgIGluc3RhbmNlLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gIH1cclxufVxyXG4vKiogKi9cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICdib3gtZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydib3gtZGVzaWduZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLWZvcm0tZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHRvb2xzID0gdHJ1ZTtcclxuICBzYXZpbmcgPSBmYWxzZTtcclxuICBtb2RlbDogQm94Rm9ybU1ldGFkYXRhO1xyXG4gIHJlYWRvbmx5IGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XHJcbiAgaGlzdG9yeUluZGV4ID0gLTE7XHJcbiAgcmVhZG9ubHkgZGF0YXR5cGVzOiBUeXBlW107XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEN1YmVbXTtcclxuICByZWFkb25seSBzZWN0aW9ucyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgc3ViamVjdDogbnVsbCxcclxuICAgIHZhbHVlOiBudWxsLFxyXG4gICAgc3VtbWFyeTogbnVsbCxcclxuICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zXHJcbiAgfSk7XHJcbiAgY29udHJvbHM6IENvbnRyb2xJbmZvW107XHJcbiAgcHJpdmF0ZSBfZm9ybUlkOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3N5c3RlbTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IEJveEZvcm1NZXRhZGF0YSwgZm9ybUlkOiBzdHJpbmcgfSwgQm94Rm9ybU1ldGFkYXRhLCBzdHJpbmc+KSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGFuZS5xdWVyeVBhcmFtc0NoYW5nZSgpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgeyBmb3JtSWQgfSA9IHA7XHJcbiAgICAgIGZvcm1JZCAmJiB0aGlzLl9vcGVuKGZvcm1JZCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3N5c3RlbS5jb250cm9scygpLnN1YnNjcmliZShjID0+IHtcclxuICAgICAgdGhpcy5jb250cm9scyA9IGMuZmlsdGVyKGMgPT4gIWMuc3lzdGVtKTtcclxuICAgICAgYy5mb3JFYWNoKGMgPT4gdGhpcy5jb250cm9sc1tjLm5hbWVdID0gYyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb3Blbihmb3JtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLl9mb3JtSWQgPSBmb3JtSWQ7XHJcbiAgICAgIHRoaXMuX2Fzc2lnbihyKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYXNzaWduKG1vZGVsOiBCb3hGb3JtTWV0YWRhdGEpIHtcclxuICAgIHRoaXMubW9kZWwgPSBtb2RlbCB8fCB7IHNlY3Rpb25zOiBbXSB9O1xyXG4gICAgdGhpcy5zZWN0aW9ucy5jbGVhcih7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLm1vZGVsLnNlY3Rpb25zLmZvckVhY2gocyA9PiB0aGlzLnNlY3Rpb25zLnB1c2godGhpcy5fc2VjdGlvbmZvcm0ocykgYXMgYW55LCB7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWN0aW9uZm9ybShtb2RlbDogU2VjdGlvbk1vZGVsKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiBtb2RlbC5uYW1lLFxyXG4gICAgICB0aXRsZTogbW9kZWwudGl0bGUsXHJcbiAgICAgIG5vdGU6IG1vZGVsLm5vdGUsXHJcbiAgICAgIG11bHRpTGluZTogbW9kZWwubXVsdGlMaW5lLFxyXG4gICAgICByb3dzOiB0aGlzLl9mYi5hcnJheShtb2RlbC5yb3dzPy5tYXAociA9PiB0aGlzLl9yb3dmb3JtKHIpKSB8fCBbXSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jvd2Zvcm0ocm93OiBCb3hSb3dNb2RlbCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBmaWVsZHM6IHRoaXMuX2ZiLmFycmF5KHJvdy5maWVsZHM/Lm1hcChmID0+IHRoaXMuX2ZpZWxkZm9ybShmKSkpXHJcbiAgICB9KVxyXG4gIH1cclxuICBwcml2YXRlIF9maWVsZGZvcm0oZmllbGQ6IEZpZWxkTW9kZWwpOiBhbnkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuX2ZiLmNvbnRyb2woZmllbGQpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIGFkZFNlY3Rpb24oZXZ0PzogRXZlbnQpIHtcclxuICAgIGxldCBuID0gMCwgbmFtZSwgdGl0bGU7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9ICdzZWN0aW9uJyArICdfJyArIG47XHJcbiAgICAgIHRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnU2VjdGlvbk4nLCBuKTtcclxuICAgIH0gd2hpbGUgKHRoaXMuc2VjdGlvbnMuY29udHJvbHMuZmluZChzID0+IHMuZ2V0KCduYW1lJykudmFsdWUgPT09IG5hbWUgfHwgcy5nZXQoJ3RpdGxlJykudmFsdWUgPT09IHRpdGxlKSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LkRpYWxvZyB8IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUsXHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBkcmFmdDogdHJ1ZSxcclxuICAgICAgICByb3dzOiBbeyBmaWVsZHM6IFtdIH1dXHJcbiAgICAgIH0gYXMgU2VjdGlvbk1vZGVsXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKHRoaXMuX3NlY3Rpb25mb3JtKHYpIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgYWRkUm93KHNlY3Rpb246IEZvcm1Hcm91cCwgZXZ0PzogRXZlbnQpIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHNlY3Rpb24uZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5KS5wdXNoKHRoaXMuX3Jvd2Zvcm0oe1xyXG4gICAgICBmaWVsZHM6IFtdIGFzIGFueVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBzZWN0aW9uW2RhdGEtaW5kZXg9JyR7dGhpcy5zZWN0aW9ucy5jb250cm9scy5pbmRleE9mKHNlY3Rpb24gYXMgYW55KX0nXSAuZGVzaWduZXItcm93Omxhc3QtY2hpbGQgYnV0dG9uYCk/LmZvY3VzKClcclxuICB9XHJcbiAgaWNvbk9mKHR5cGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5jb250cm9sc1t0eXBlXS5pY29uIH1cclxuICBhZGRGaWVsZChzZWN0aW9uOiBGb3JtR3JvdXAsIHJvdzogRm9ybUdyb3VwLCBjb250cm9sOiBDb250cm9sSW5mbywgZXZ0PzogRXZlbnQpIHtcclxuICAgIGxldCBuID0gMCwgbmFtZSwgbGFiZWw7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9IGNvbnRyb2wubmFtZS5yZXBsYWNlKCctJywgJ18nKSArICdfJyArIG47XHJcbiAgICAgIGxhYmVsID0gY29udHJvbC50aXRsZSArICcgJyArIG47XHJcbiAgICB9IHdoaWxlICgoc2VjdGlvbi5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLlxyXG4gICAgICBmaW5kKHIgPT4gKHIuZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZpbmQoZiA9PiBmLnZhbHVlLm5hbWUgPT09IG5hbWUgfHwgZi52YWx1ZS5sYWJlbCA9PT0gbGFiZWwpICE9IG51bGwpKTtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShDb250cm9sUHJvcGVydGllc0NvbXBvbmVudCwge1xyXG4gICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuRGlhbG9nIHwgT3BlblBvbGljeS5EaXNtaXNzYWJsZSxcclxuICAgICAgaWNvbjogY29udHJvbC5pY29uLFxyXG4gICAgICBzdGF0ZToge1xyXG4gICAgICAgIG5hbWUsIGxhYmVsLCBkcmFmdDogdHJ1ZSxcclxuICAgICAgICBjb250cm9sVHlwZTogY29udHJvbC5uYW1lXHJcbiAgICAgIH0gYXMgRmllbGRNb2RlbFxyXG4gICAgfSkudGhlbihlID0+IGUuY2xvc2VkKCkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgICAgIChyb3cuZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXkpLnB1c2godGhpcy5fZmllbGRmb3JtKHYpKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBlZGl0RmllbGQoZmllbGQ6IEZvcm1Hcm91cCkge1xyXG4gICAgY29uc3QgbW9kZWwgPSBmaWVsZC5nZXRSYXdWYWx1ZSgpIGFzIEZpZWxkTW9kZWwsXHJcbiAgICAgIGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW21vZGVsLmNvbnRyb2xUeXBlXTtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShDb250cm9sUHJvcGVydGllc0NvbXBvbmVudCwge1xyXG4gICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuVGFiIHwgT3BlblBvbGljeS5EZWZlcixcclxuICAgICAgaWNvbjogY29udHJvbC5pY29uLFxyXG4gICAgICBzdGF0ZTogbW9kZWxcclxuICAgIH0pLnRoZW4oZSA9PiBlLmNsb3NlZCgpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgICAgICBmaWVsZC5zZXRWYWx1ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBlZGl0U2VjdGlvbihmaWVsZDogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LlRhYiB8IE9wZW5Qb2xpY3kuRGVmZXIsXHJcbiAgICAgIHN0YXRlOiBmaWVsZC5nZXRSYXdWYWx1ZSgpXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgZmllbGQuc2V0VmFsdWUodik7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgb3BlbnNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKEJveFNldHRpbmdzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWIgfCBPcGVuUG9saWN5LkRlZmVyLFxyXG4gICAgICBzdGF0ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKClcclxuICAgIH0pLnRoZW4oZSA9PiBlLmNsb3NlZCgpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHYpXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIHJlbW92ZUZpZWxkKHJvdzogRm9ybUdyb3VwLCBmaWVsZDogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIChyb3cuZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLnJlbW92ZShmaWVsZCk7XHJcbiAgfVxyXG4gIHJlbW92ZVNlY3Rpb24oc2VjdGlvbjogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIHRoaXMuc2VjdGlvbnMuY29udHJvbHMucmVtb3ZlKHNlY3Rpb24gYXMgYW55KTtcclxuICB9XHJcbiAgcmVtb3ZlUm93KHNlY3Rpb246IEZvcm1Hcm91cCwgcm93OiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHNlY3Rpb24uZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5KS5jb250cm9scy5yZW1vdmUocm93KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbm90aWZ5Q2hhbmdlKCkge1xyXG4gICAgdGhpcy5oaXN0b3J5LnB1c2goSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLnZhbHVlKSk7XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleCA9IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxO1xyXG4gICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG4gIHVuZG8oKSB7XHJcbiAgICB0aGlzLl9yZXN0b3JlKCk7XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleC0tO1xyXG4gIH1cclxuICByZWRvKCkge1xyXG4gICAgdGhpcy5fcmVzdG9yZSgpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVzdG9yZSgpIHtcclxuICAgIHRoaXMuX2Fzc2lnbihKU09OLnBhcnNlKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3RybC1zIHNhdmU7IEN0cmwteiB1bmRvXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1MnIHx8IGV2ZW50LmtleSA9PT0gJ3MnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRpcnR5ICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8Rm9ybUdyb3VwPiwgY29sbGVjdGlvbjogRm9ybUFycmF5KSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb2xsZWN0aW9uLmF0KGV2ZW50LnByZXZpb3VzSW5kZXgpO1xyXG4gICAgICBjb2xsZWN0aW9uLnJlbW92ZUF0KGV2ZW50LnByZXZpb3VzSW5kZXgpO1xyXG4gICAgICBjb2xsZWN0aW9uLmluc2VydChldmVudC5jdXJyZW50SW5kZXgsIGVsZW1lbnQpO1xyXG4gICAgICAvL21vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICB0cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgLy8gICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcclxuICAgICAgLy8gICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXHJcbiAgICAgIC8vICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXHJcbiAgICAgIC8vICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcclxuICAgICAgLy8gICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGVsID0gdGhpcy5mb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIHRoaXMuX3JlZi5leGVjdXRlKHsgbWV0YWRhdGE6IGNsZWFudXAodGhpcy5tb2RlbCksIGZvcm1JZDogdGhpcy5fZm9ybUlkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9wcy50b2FzdCgnQ2hhbmdlc1NhdmVkJyk7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb3Jtcy5maW5kKGYgPT4gZi5uYW1lID09IHRoaXMuX2Zvcm1JZCk7XHJcbiAgICAgICAgaWYgKGZvcm0pIGZvcm0ub3B0aW9ucyA9IHRoaXMubW9kZWw7XHJcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgfSwgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPG1hdC10b29sYmFyPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0uZGlydHkgfHwgbG9hZGluZyB8fCBzYXZpbmdcIiBbYml6ZG9jVG9vbHRpcF09XCInU2F2ZSd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ1bmRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInVW5kbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiaGlzdG9yeUluZGV4ID09PSAtMVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj51bmRvPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVkbygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlZG8nIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImhpc3RvcnlJbmRleCA9PT0gaGlzdG9yeS5sZW5ndGggLSAxXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPnJlZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICA8IS0tPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5zZXR0aW5ncygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NldHRpbmdzJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj48L2J1dHRvbj4tLT5cclxuPC9tYXQtdG9vbGJhcj5cclxuPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCJtb2RlbFwiPlxyXG4gIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgc2VjdGlvbnMpXCI+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImNvbHVtblwiICpuZ0Zvcj1cImxldCBzIG9mIHNlY3Rpb25zLmNvbnRyb2xzOyBsZXQgc2kgPSBpbmRleFwiIGNka0RyYWcgW2F0dHIuZGF0YS1pbmRleF09XCJzaVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VjdGlvbi1kcmFnXCIgY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiIFtmb3JtR3JvdXBdPVwic1wiPlxyXG4gICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3tzLmdldCgndGl0bGUnKS52YWx1ZXxsb2NhbGl6ZWRTdHJpbmd9fTwvaDI+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cIm1hdC1ib2R5LTFcIiAqbmdJZj1cInMuZ2V0KCdub3RlJykudmFsdWVcIj57e3MuZ2V0KCdub3RlJykudmFsdWV8bG9jYWxpemVkU3RyaW5nfX08L3A+XHJcbiAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIHMuZ2V0KCdyb3dzJykpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHIgb2Ygcy5nZXQoJ3Jvd3MnKS5jb250cm9sczsgbGV0IHJpID0gaW5kZXhcIiBjbGFzcz1cInJvdyBkZXNpZ25lci1yb3dcIiBjZGtEcmFnIFthdHRyLmRhdGEtaW5kZXhdPVwicmlcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPGRpdiBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIHIuZ2V0KCdmaWVsZHMnKSlcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZiBvZiByLmdldCgnZmllbGRzJykuY29udHJvbHM7IGxldCBmaSA9IGluZGV4XCIgY2RrRHJhZyBjbGFzcz1cImRlc2lnbmVyLWZpZWxkIHJvd1wiIFthdHRyLmRhdGEtaW5kZXhdPVwiZmlcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPnt7aWNvbk9mKGYudmFsdWUudHlwZSl9fTwvbWF0LWljb24+LS0+XHJcbiAgICAgICAgICAgICAgICAgIDxiaXpkb2MtYm94LWNvbnRyb2wtZGVzaWduIFttZXRhZGF0YV09XCJmLnZhbHVlXCI+PC9iaXpkb2MtYm94LWNvbnRyb2wtZGVzaWduPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlRmllbGQociwgZilcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJlZGl0RmllbGQoZilcIiBbYml6ZG9jVG9vbHRpcF09XCInU2V0dGluZ3MnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxkaXYgKmNka0RyYWdQbGFjZWhvbGRlciBjbGFzcz1cImRyYWctcGxhY2Vob2xkZXJcIj48L2Rpdj4tLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJmaWVsZE1lbnVcIiBbYml6ZG9jVG9vbHRpcF09XCInQWRkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI2ZpZWxkTWVudT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBjIG9mIGNvbnRyb2xzXCIgKGNsaWNrKT1cImFkZEZpZWxkKHMsIHIsIGMsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+e3tjLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlUm93KHMsIHIpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0Rpc2NhcmQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRvb2xzIHJvd1wiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJhZGRSb3cocywgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cInJlbW92ZVNlY3Rpb24ocylcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJlZGl0U2VjdGlvbihzKVwiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImFkZFNlY3Rpb24oJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LWRlc2lnbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS9kZXNpZ25lci9ib3gtZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL2Rlc2lnbmVyL2JveC1kZXNpZ25lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDO0FBSTFKLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFXbEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTVELE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFDVSxJQUFzQixFQUNDLE9BQXFCLEVBQzVDLFFBQXdCLEVBQ3hCLEdBQW1DO1FBSG5DLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ0MsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUM1QyxhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFnQztJQUFLLENBQUM7SUFDbkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFD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cnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29udHJvbENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL2Jhc2VcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29uZmlnLCBCSVpET0NfQ09ORklHLCBPcGVuUG9saWN5IH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9kZWNvcmF0b3JzXCI7XHJcbmltcG9ydCB7IGNsZWFudXAgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgQ3ViZSwgVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2xvdHMvcm91dGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHByb2dyYW1OYW1lIH0gZnJvbSBcIi4uLy4uL2FyY2hpdGVjdHVyZS9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29udHJvbEluZm8sIFN5c3RlbVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc3lzdGVtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXRpbGl0eVJlZiB9IGZyb20gXCIuLi8uLi91dGlsaXR5LXJlZlwiO1xyXG5pbXBvcnQgeyBCb3hGb3JtTWV0YWRhdGEsIEZpZWxkTW9kZWwsIEJveFJvd01vZGVsLCBTZWN0aW9uTW9kZWwgfSBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgQ29udHJvbFByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tIFwiLi9wcm9wZXJ0aWVzLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTZWN0aW9uUHJvcGVydGllc0NvbXBvbmVudCB9IGZyb20gXCIuL3NlY3Rpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEJveFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSBcIi4vc2V0dGluZ3MuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtYm94LWNvbnRyb2wtZGVzaWduJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVzaWduQ29udHJvbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKSBtZXRhZGF0YTogRmllbGRNb2RlbDtcclxuICBwcml2YXRlIF9pbnN0YW5jZTogQ29udHJvbENvbXBvbmVudDxhbnk+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgQEluamVjdChCSVpET0NfQ09ORklHKSBwcml2YXRlIF9jb25maWc6IEJpekRvY0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Y6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwpIHsgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICFjaGFuZ2VzWydtZXRhZGF0YSddLmZpcnN0Q2hhbmdlICYmIE9iamVjdC5hc3NpZ24odGhpcy5faW5zdGFuY2UsIHRoaXMubWV0YWRhdGEpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgY29udHJvbHMgfSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZSxcclxuICAgICAgeyBjb250cm9sVHlwZSB9ID0gdGhpcy5tZXRhZGF0YSxcclxuICAgICAgY29udHJvbCA9IGNvbnRyb2xzW2NvbnRyb2xUeXBlXSB8fCAoY29udHJvbHNbY29udHJvbFR5cGVdID0gY29udHJvbHMuZmluZChjID0+IGMubmFtZSA9PT0gY29udHJvbFR5cGUpKSxcclxuICAgICAgc2VsZWN0b3IgPSBjb250cm9sLnRlbXBsYXRlO1xyXG4gICAgY29uc3QgY29tcCA9IHRoaXMuX2NmLmNvbXBvbmVudChzZWxlY3Rvcik7XHJcbiAgICBjb25zdCBjb21wUmVmID0gdGhpcy5fdmNyLmNyZWF0ZUNvbXBvbmVudDxDb250cm9sQ29tcG9uZW50Pihjb21wKTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5faW5zdGFuY2UgPSBjb21wUmVmLmluc3RhbmNlO1xyXG4gICAgT2JqZWN0LmFzc2lnbihpbnN0YW5jZSwgdGhpcy5tZXRhZGF0YSk7XHJcbiAgICBpbnN0YW5jZS5hcHBlYXJhbmNlID0gdGhpcy5fY29uZmlnLmFwcGVhcmFuY2UgfHwgJ291dGxpbmUnO1xyXG4gICAgaW5zdGFuY2UubW9kZSA9ICdjb21wb3NlJztcclxuICAgIGluc3RhbmNlLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gIH1cclxufVxyXG4vKiogKi9cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICdib3gtZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydib3gtZGVzaWduZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLWZvcm0tZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHRvb2xzID0gdHJ1ZTtcclxuICBzYXZpbmcgPSBmYWxzZTtcclxuICBtb2RlbDogQm94Rm9ybU1ldGFkYXRhO1xyXG4gIHJlYWRvbmx5IGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XHJcbiAgaGlzdG9yeUluZGV4ID0gLTE7XHJcbiAgcmVhZG9ubHkgZGF0YXR5cGVzOiBUeXBlW107XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEN1YmVbXTtcclxuICByZWFkb25seSBzZWN0aW9ucyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgc3ViamVjdDogbnVsbCxcclxuICAgIHZhbHVlOiBudWxsLFxyXG4gICAgc3VtbWFyeTogbnVsbCxcclxuICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zXHJcbiAgfSk7XHJcbiAgY29udHJvbHM6IENvbnRyb2xJbmZvW107XHJcbiAgcHJpdmF0ZSBfZm9ybUlkOiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3N5c3RlbTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIHsgbWV0YWRhdGE6IEJveEZvcm1NZXRhZGF0YSwgZm9ybUlkOiBzdHJpbmcgfSwgQm94Rm9ybU1ldGFkYXRhLCBzdHJpbmc+KSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGFuZS5xdWVyeVBhcmFtc0NoYW5nZSgpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgeyBmb3JtSWQgfSA9IHA7XHJcbiAgICAgIGZvcm1JZCAmJiB0aGlzLl9vcGVuKGZvcm1JZCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3N5c3RlbS5jb250cm9scygpLnN1YnNjcmliZShjID0+IHtcclxuICAgICAgdGhpcy5jb250cm9scyA9IGMuZmlsdGVyKGMgPT4gIWMuc3lzdGVtKTtcclxuICAgICAgYy5mb3JFYWNoKGMgPT4gdGhpcy5jb250cm9sc1tjLm5hbWVdID0gYyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb3Blbihmb3JtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0aGlzLl9mb3JtSWQgPSBmb3JtSWQ7XHJcbiAgICAgIHRoaXMuX2Fzc2lnbihyKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYXNzaWduKG1vZGVsOiBCb3hGb3JtTWV0YWRhdGEpIHtcclxuICAgIHRoaXMubW9kZWwgPSBtb2RlbCB8fCB7IHNlY3Rpb25zOiBbXSB9O1xyXG4gICAgdGhpcy5zZWN0aW9ucy5jbGVhcih7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLm1vZGVsLnNlY3Rpb25zLmZvckVhY2gocyA9PiB0aGlzLnNlY3Rpb25zLnB1c2godGhpcy5fc2VjdGlvbmZvcm0ocykgYXMgYW55LCB7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWN0aW9uZm9ybShtb2RlbDogU2VjdGlvbk1vZGVsKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiBtb2RlbC5uYW1lLFxyXG4gICAgICB0aXRsZTogbW9kZWwudGl0bGUsXHJcbiAgICAgIG5vdGU6IG1vZGVsLm5vdGUsXHJcbiAgICAgIG11bHRpTGluZTogbW9kZWwubXVsdGlMaW5lLFxyXG4gICAgICByb3dzOiB0aGlzLl9mYi5hcnJheShtb2RlbC5yb3dzPy5tYXAociA9PiB0aGlzLl9yb3dmb3JtKHIpKSB8fCBbXSlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jvd2Zvcm0ocm93OiBCb3hSb3dNb2RlbCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBmaWVsZHM6IHRoaXMuX2ZiLmFycmF5KHJvdy5maWVsZHM/Lm1hcChmID0+IHRoaXMuX2ZpZWxkZm9ybShmKSkpXHJcbiAgICB9KVxyXG4gIH1cclxuICBwcml2YXRlIF9maWVsZGZvcm0oZmllbGQ6IEZpZWxkTW9kZWwpOiBhbnkge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuX2ZiLmNvbnRyb2woZmllbGQpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG4gIGFkZFNlY3Rpb24oZXZ0PzogRXZlbnQpIHtcclxuICAgIGxldCBuID0gMCwgbmFtZSwgdGl0bGU7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9ICdzZWN0aW9uJyArICdfJyArIG47XHJcbiAgICAgIHRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnU2VjdGlvbk4nLCBuKTtcclxuICAgIH0gd2hpbGUgKHRoaXMuc2VjdGlvbnMuY29udHJvbHMuZmluZChzID0+IHMuZ2V0KCduYW1lJykudmFsdWUgPT09IG5hbWUgfHwgcy5nZXQoJ3RpdGxlJykudmFsdWUgPT09IHRpdGxlKSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LkRpYWxvZyB8IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUsXHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgbmFtZSxcclxuICAgICAgICB0aXRsZSxcclxuICAgICAgICBkcmFmdDogdHJ1ZSxcclxuICAgICAgICByb3dzOiBbeyBmaWVsZHM6IFtdIH1dXHJcbiAgICAgIH0gYXMgU2VjdGlvbk1vZGVsXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKHRoaXMuX3NlY3Rpb25mb3JtKHYpIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgYWRkUm93KHNlY3Rpb246IEZvcm1Hcm91cCwgZXZ0PzogRXZlbnQpIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHNlY3Rpb24uZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5KS5wdXNoKHRoaXMuX3Jvd2Zvcm0oe1xyXG4gICAgICBmaWVsZHM6IFtdIGFzIGFueVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBzZWN0aW9uW2RhdGEtaW5kZXg9JyR7dGhpcy5zZWN0aW9ucy5jb250cm9scy5pbmRleE9mKHNlY3Rpb24gYXMgYW55KX0nXSAuZGVzaWduZXItcm93Omxhc3QtY2hpbGQgYnV0dG9uYCk/LmZvY3VzKClcclxuICB9XHJcbiAgaWNvbk9mKHR5cGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5jb250cm9sc1t0eXBlXS5pY29uIH1cclxuICBhZGRGaWVsZChzZWN0aW9uOiBGb3JtR3JvdXAsIHJvdzogRm9ybUdyb3VwLCBjb250cm9sOiBDb250cm9sSW5mbywgZXZ0PzogRXZlbnQpIHtcclxuICAgIGxldCBuID0gMCwgbmFtZSwgbGFiZWw7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9IGNvbnRyb2wubmFtZS5yZXBsYWNlKCctJywgJ18nKSArICdfJyArIG47XHJcbiAgICAgIGxhYmVsID0gY29udHJvbC50aXRsZSArICcgJyArIG47XHJcbiAgICB9IHdoaWxlICgoc2VjdGlvbi5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLlxyXG4gICAgICBmaW5kKHIgPT4gKHIuZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmZpbmQoZiA9PiBmLnZhbHVlLm5hbWUgPT09IG5hbWUgfHwgZi52YWx1ZS5sYWJlbCA9PT0gbGFiZWwpICE9IG51bGwpKTtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShDb250cm9sUHJvcGVydGllc0NvbXBvbmVudCwge1xyXG4gICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuRGlhbG9nIHwgT3BlblBvbGljeS5EaXNtaXNzYWJsZSxcclxuICAgICAgaWNvbjogY29udHJvbC5pY29uLFxyXG4gICAgICBzdGF0ZToge1xyXG4gICAgICAgIG5hbWUsIGxhYmVsLCBkcmFmdDogdHJ1ZSxcclxuICAgICAgICBjb250cm9sVHlwZTogY29udHJvbC5uYW1lXHJcbiAgICAgIH0gYXMgRmllbGRNb2RlbFxyXG4gICAgfSkudGhlbihlID0+IGUuY2xvc2VkKCkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBpZiAodikge1xyXG4gICAgICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgICAgIChyb3cuZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXkpLnB1c2godGhpcy5fZmllbGRmb3JtKHYpKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBlZGl0RmllbGQoZmllbGQ6IEZvcm1Hcm91cCkge1xyXG4gICAgY29uc3QgbW9kZWwgPSBmaWVsZC5nZXRSYXdWYWx1ZSgpIGFzIEZpZWxkTW9kZWwsXHJcbiAgICAgIGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW21vZGVsLmNvbnRyb2xUeXBlXTtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShDb250cm9sUHJvcGVydGllc0NvbXBvbmVudCwge1xyXG4gICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuVGFiIHwgT3BlblBvbGljeS5EZWZlcixcclxuICAgICAgaWNvbjogY29udHJvbC5pY29uLFxyXG4gICAgICBzdGF0ZTogbW9kZWxcclxuICAgIH0pLnRoZW4oZSA9PiBlLmNsb3NlZCgpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgaWYgKHYpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgICAgICBmaWVsZC5zZXRWYWx1ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBlZGl0U2VjdGlvbihmaWVsZDogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoU2VjdGlvblByb3BlcnRpZXNDb21wb25lbnQsIHtcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LlRhYiB8IE9wZW5Qb2xpY3kuRGVmZXIsXHJcbiAgICAgIHN0YXRlOiBmaWVsZC5nZXRSYXdWYWx1ZSgpXHJcbiAgICB9KS50aGVuKGUgPT4gZS5jbG9zZWQoKS5zdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgICAgZmllbGQuc2V0VmFsdWUodik7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgb3BlbnNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKEJveFNldHRpbmdzQ29tcG9uZW50LCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5UYWIgfCBPcGVuUG9saWN5LkRlZmVyLFxyXG4gICAgICBzdGF0ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKClcclxuICAgIH0pLnRoZW4oZSA9PiBlLmNsb3NlZCgpLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgdGhpcy5fbm90aWZ5Q2hhbmdlKCk7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHYpXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIHJlbW92ZUZpZWxkKHJvdzogRm9ybUdyb3VwLCBmaWVsZDogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIChyb3cuZ2V0KCdmaWVsZHMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLnJlbW92ZShmaWVsZCk7XHJcbiAgfVxyXG4gIHJlbW92ZVNlY3Rpb24oc2VjdGlvbjogRm9ybUdyb3VwKSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIHRoaXMuc2VjdGlvbnMuY29udHJvbHMucmVtb3ZlKHNlY3Rpb24gYXMgYW55KTtcclxuICB9XHJcbiAgcmVtb3ZlUm93KHNlY3Rpb246IEZvcm1Hcm91cCwgcm93OiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuX25vdGlmeUNoYW5nZSgpO1xyXG4gICAgKHNlY3Rpb24uZ2V0KCdyb3dzJykgYXMgRm9ybUFycmF5KS5jb250cm9scy5yZW1vdmUocm93KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbm90aWZ5Q2hhbmdlKCkge1xyXG4gICAgdGhpcy5oaXN0b3J5LnB1c2goSlNPTi5zdHJpbmdpZnkodGhpcy5mb3JtLnZhbHVlKSk7XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleCA9IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxO1xyXG4gICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG4gIHVuZG8oKSB7XHJcbiAgICB0aGlzLl9yZXN0b3JlKCk7XHJcbiAgICB0aGlzLmhpc3RvcnlJbmRleC0tO1xyXG4gIH1cclxuICByZWRvKCkge1xyXG4gICAgdGhpcy5fcmVzdG9yZSgpO1xyXG4gICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVzdG9yZSgpIHtcclxuICAgIHRoaXMuX2Fzc2lnbihKU09OLnBhcnNlKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3RybC1zIHNhdmU7IEN0cmwteiB1bmRvXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1MnIHx8IGV2ZW50LmtleSA9PT0gJ3MnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRpcnR5ICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8Rm9ybUdyb3VwPiwgY29sbGVjdGlvbjogRm9ybUFycmF5KSB7XHJcbiAgICB0aGlzLl9ub3RpZnlDaGFuZ2UoKTtcclxuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb2xsZWN0aW9uLmF0KGV2ZW50LnByZXZpb3VzSW5kZXgpO1xyXG4gICAgICBjb2xsZWN0aW9uLnJlbW92ZUF0KGV2ZW50LnByZXZpb3VzSW5kZXgpO1xyXG4gICAgICBjb2xsZWN0aW9uLmluc2VydChldmVudC5jdXJyZW50SW5kZXgsIGVsZW1lbnQpO1xyXG4gICAgICAvL21vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICB0cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgLy8gICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcclxuICAgICAgLy8gICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXHJcbiAgICAgIC8vICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXHJcbiAgICAgIC8vICAgIGV2ZW50LmN1cnJlbnRJbmRleCxcclxuICAgICAgLy8gICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XHJcbiAgICB0aGlzLm1vZGVsID0gdGhpcy5mb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIHRoaXMuX3JlZi5leGVjdXRlKHsgbWV0YWRhdGE6IGNsZWFudXAodGhpcy5tb2RlbCksIGZvcm1JZDogdGhpcy5fZm9ybUlkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9wcy50b2FzdCgnQ2hhbmdlc1NhdmVkJyk7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb3Jtcy5maW5kKGYgPT4gZi5uYW1lID09IHRoaXMuX2Zvcm1JZCk7XHJcbiAgICAgICAgaWYgKGZvcm0pIGZvcm0ub3B0aW9ucyA9IHRoaXMubW9kZWw7XHJcbiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgfSwgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPG1hdC10b29sYmFyPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0uZGlydHkgfHwgbG9hZGluZyB8fCBzYXZpbmdcIiBbYml6ZG9jVG9vbHRpcF09XCInU2F2ZSd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ1bmRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInVW5kbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiaGlzdG9yeUluZGV4ID09PSAtMVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj51bmRvPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVkbygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlZG8nIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImhpc3RvcnlJbmRleCA9PT0gaGlzdG9yeS5sZW5ndGggLSAxXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPnJlZG88L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICA8IS0tPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5zZXR0aW5ncygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NldHRpbmdzJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj48L2J1dHRvbj4tLT5cclxuPC9tYXQtdG9vbGJhcj5cclxuPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCJtb2RlbFwiPlxyXG4gIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgc2VjdGlvbnMpXCI+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImNvbHVtblwiICpuZ0Zvcj1cImxldCBzIG9mIHNlY3Rpb25zLmNvbnRyb2xzOyBsZXQgc2kgPSBpbmRleFwiIGNka0RyYWcgW2F0dHIuZGF0YS1pbmRleF09XCJzaVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VjdGlvbi1kcmFnXCIgY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiIFtmb3JtR3JvdXBdPVwic1wiPlxyXG4gICAgICAgICAgPGgyIGNsYXNzPVwibWF0LW1kYy10aXRsZVwiPnt7cy5nZXQoJ3RpdGxlJykudmFsdWV8bG9jYWxpemVkU3RyaW5nfX08L2gyPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtYXQtbWRjLWJvZHktMVwiICpuZ0lmPVwicy5nZXQoJ25vdGUnKS52YWx1ZVwiPnt7cy5nZXQoJ25vdGUnKS52YWx1ZXxsb2NhbGl6ZWRTdHJpbmd9fTwvcD5cclxuICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgcy5nZXQoJ3Jvd3MnKSlcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgciBvZiBzLmdldCgncm93cycpLmNvbnRyb2xzOyBsZXQgcmkgPSBpbmRleFwiIGNsYXNzPVwicm93IGRlc2lnbmVyLXJvd1wiIGNka0RyYWcgW2F0dHIuZGF0YS1pbmRleF09XCJyaVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgci5nZXQoJ2ZpZWxkcycpKVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmIG9mIHIuZ2V0KCdmaWVsZHMnKS5jb250cm9sczsgbGV0IGZpID0gaW5kZXhcIiBjZGtEcmFnIGNsYXNzPVwiZGVzaWduZXItZmllbGQgcm93XCIgW2F0dHIuZGF0YS1pbmRleF09XCJmaVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+e3tpY29uT2YoZi52YWx1ZS50eXBlKX19PC9tYXQtaWNvbj4tLT5cclxuICAgICAgICAgICAgICAgICAgPGJpemRvYy1ib3gtY29udHJvbC1kZXNpZ24gW21ldGFkYXRhXT1cImYudmFsdWVcIj48L2JpemRvYy1ib3gtY29udHJvbC1kZXNpZ24+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVGaWVsZChyLCBmKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImVkaXRGaWVsZChmKVwiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiZHJhZy1wbGFjZWhvbGRlclwiPjwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZpZWxkTWVudVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjZmllbGRNZW51PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGMgb2YgY29udHJvbHNcIiAoY2xpY2spPVwiYWRkRmllbGQocywgciwgYywgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57e2MuaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2MudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIChjbGljayk9XCJyZW1vdmVSb3cocywgcilcIiBbYml6ZG9jVG9vbHRpcF09XCInRGlzY2FyZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidG9vbHMgcm93XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImFkZFJvdyhzLCAkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlU2VjdGlvbihzKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cImVkaXRTZWN0aW9uKHMpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NldHRpbmdzJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiYWRkU2VjdGlvbigkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
@@ -136,11 +136,11 @@ export class ProfileSettingsDialog {
136
136
  this.form.patchValue({});
137
137
  }
138
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ProfileSettingsDialog, deps: [{ token: i1.AccountService }, { token: i2.MatDialogRef }, { token: i3.FormBuilder }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
139
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ProfileSettingsDialog, selector: "ng-component", viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }], ngImport: i0, template: "<h2 mat-dialog-title>{{'Settings' | translate }}</h2>\r\n<mat-dialog-content>\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"column\" formGroupName=\"outOfOffice\">\r\n <h3 class=\"mat-body-strong\">{{'OutOfOffice'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"substitute\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"outOfOffice.value.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"userDisplay\"\r\n (optionSelected)=\"setId($event)\">\r\n <mat-option *ngFor=\"let u of ousers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.controls['from'].value\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <!--<hr />-->\r\n <div class=\"column\" formGroupName=\"grantAccess\">\r\n <h3 class=\"mat-body-strong\">{{'GrantAccess'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!grantAccess.value.active\">\r\n <mat-chip-row *ngFor=\"let u of grantAccess.value.users || []\"\r\n [removable]=\"grantAccess.value.active\"\r\n (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n </mat-chip-grid>\r\n <input [formControl]=\"grants\" placeholder=\"{{'Users'| translate}}\"\r\n [required]=\"grantAccess.value.active\"\r\n [matAutocomplete]=\"grantAuto\"\r\n #grantInput\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" color=\"primary\" [disabled]=\"!form.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n</mat-dialog-actions>\r\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i5.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i5.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i5.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i5.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i12.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: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.UserNamePipe, name: "userName" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: ProfileSettingsDialog, selector: "ng-component", viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }], ngImport: i0, template: "<h2 mat-dialog-title>{{'Settings' | translate }}</h2>\r\n<mat-dialog-content>\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"column\" formGroupName=\"outOfOffice\">\r\n <h3 class=\"mat-mdc-body-strong\">{{'OutOfOffice'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"substitute\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"outOfOffice.value.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"userDisplay\"\r\n (optionSelected)=\"setId($event)\">\r\n <mat-option *ngFor=\"let u of ousers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.controls['from'].value\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <!--<hr />-->\r\n <div class=\"column\" formGroupName=\"grantAccess\">\r\n <h3 class=\"mat-mdc-body-strong\">{{'GrantAccess'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!grantAccess.value.active\">\r\n <mat-chip-row *ngFor=\"let u of grantAccess.value.users || []\"\r\n [removable]=\"grantAccess.value.active\"\r\n (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n </mat-chip-grid>\r\n <input [formControl]=\"grants\" placeholder=\"{{'Users'| translate}}\"\r\n [required]=\"grantAccess.value.active\"\r\n [matAutocomplete]=\"grantAuto\"\r\n #grantInput\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" color=\"primary\" [disabled]=\"!form.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n</mat-dialog-actions>\r\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i5.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i5.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i5.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i5.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i12.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: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.UserNamePipe, name: "userName" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] }); }
140
140
  }
141
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: ProfileSettingsDialog, decorators: [{
142
142
  type: Component,
143
- args: [{ template: "<h2 mat-dialog-title>{{'Settings' | translate }}</h2>\r\n<mat-dialog-content>\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"column\" formGroupName=\"outOfOffice\">\r\n <h3 class=\"mat-body-strong\">{{'OutOfOffice'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"substitute\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"outOfOffice.value.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"userDisplay\"\r\n (optionSelected)=\"setId($event)\">\r\n <mat-option *ngFor=\"let u of ousers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.controls['from'].value\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <!--<hr />-->\r\n <div class=\"column\" formGroupName=\"grantAccess\">\r\n <h3 class=\"mat-body-strong\">{{'GrantAccess'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!grantAccess.value.active\">\r\n <mat-chip-row *ngFor=\"let u of grantAccess.value.users || []\"\r\n [removable]=\"grantAccess.value.active\"\r\n (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n </mat-chip-grid>\r\n <input [formControl]=\"grants\" placeholder=\"{{'Users'| translate}}\"\r\n [required]=\"grantAccess.value.active\"\r\n [matAutocomplete]=\"grantAuto\"\r\n #grantInput\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" color=\"primary\" [disabled]=\"!form.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n</mat-dialog-actions>\r\n" }]
143
+ args: [{ template: "<h2 mat-dialog-title>{{'Settings' | translate }}</h2>\r\n<mat-dialog-content>\r\n <form autocomplete=\"off\" [formGroup]=\"form\">\r\n <div class=\"column\" formGroupName=\"outOfOffice\">\r\n <h3 class=\"mat-mdc-body-strong\">{{'OutOfOffice'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"substitute\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"outOfOffice.value.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"userDisplay\"\r\n (optionSelected)=\"setId($event)\">\r\n <mat-option *ngFor=\"let u of ousers$ | async\" [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n <div>\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"from\" formControlName=\"from\" placeholder=\"{{'From'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"from\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #from></mat-datepicker>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <input matInput [matDatepicker]=\"to\" formControlName=\"to\" [min]=\"form.controls['from'].value\" placeholder=\"{{'To'| translate}}\" />\r\n <mat-datepicker-toggle [for]=\"to\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #to></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <!--<hr />-->\r\n <div class=\"column\" formGroupName=\"grantAccess\">\r\n <h3 class=\"mat-mdc-body-strong\">{{'GrantAccess'|translate}}</h3>\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <mat-form-field>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!grantAccess.value.active\">\r\n <mat-chip-row *ngFor=\"let u of grantAccess.value.users || []\"\r\n [removable]=\"grantAccess.value.active\"\r\n (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n </mat-chip-grid>\r\n <input [formControl]=\"grants\" placeholder=\"{{'Users'| translate}}\"\r\n [required]=\"grantAccess.value.active\"\r\n [matAutocomplete]=\"grantAuto\"\r\n #grantInput\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n <mat-option *ngFor=\"let u of gusers$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" color=\"primary\" [disabled]=\"!form.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n</mat-dialog-actions>\r\n" }]
144
144
  }], ctorParameters: function () { return [{ type: i1.AccountService }, { type: i2.MatDialogRef }, { type: i3.FormBuilder }, { type: undefined, decorators: [{
145
145
  type: Inject,
146
146
  args: [MAT_DIALOG_DATA]
@@ -151,4 +151,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
151
151
  type: ViewChild,
152
152
  args: ['grantInput', { read: MatChipInput }]
153
153
  }] } });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0b2ZvZmZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9wcm9maWxlci9vdXRvZm9mZmljZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL3Byb2ZpbGVyL291dG9mb2ZmaWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVaEQsTUFBTSxPQUFPLHFCQUFxQjtJQXVCaEMsWUFBb0IsU0FBeUIsRUFDbkMsVUFBK0MsRUFDL0MsR0FBZ0IsRUFFakIsS0FBc0I7UUFKWCxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUNuQyxlQUFVLEdBQVYsVUFBVSxDQUFxQztRQUMvQyxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBRWpCLFVBQUssR0FBTCxLQUFL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QUFDLE1BQU0sQ0FBQyxLQUFlLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUs7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUVsRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs4R0E1SFUscUJBQXFCLHVHQTBCdEIsZUFBZTtrR0ExQmQscUJBQXFCLGlKQUlLLFFBQVEsbUdBQ1osWUFBWSw2QkN6Qi9DLGk1R0FnRUE7OzJGRDVDYSxxQkFBcUI7a0JBRGpDLFNBQVM7OzswQkEyQkwsTUFBTTsyQkFBQyxlQUFlOzRDQXRCd0IsY0FBYztzQkFBOUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBMUQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5URVIsIENPTU1BLCBTRU1JQ09MT04gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2tleWNvZGVzXCI7XHJcbmltcG9ydCB7IFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRha2VVbnRpbCwgZmlsdGVyLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IE91dE9mT2ZmaWNlU2V0dGluZ3MsIEdyYW50U2V0dGluZ3MsIFVzZXJJbmZvLCB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPdXRPZk9mZmljZURhdGEge1xyXG4gIHVzZXJJZDogc3RyaW5nO1xyXG4gIG91dE9mT2ZmaWNlOiBPdXRPZk9mZmljZVNldHRpbmdzO1xyXG4gIGdyYW50QWNjZXNzOiBHcmFudFNldHRpbmdzO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGVVcmw6ICdvdXRvZm9mZmljZS5jb21wb25lbnQuaHRtbCcgfSlcclxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXR0aW5nc0RpYWxvZyBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUEsIFNFTUlDT0xPTl07XHJcbiAgcmVhZG9ubHkgc3Vic3RpdHV0ZSA9IHRoaXMuX2ZiLmNvbnRyb2w8VXNlckluZm8gfCBzdHJpbmc+KG51bGwpO1xyXG4gIHJlYWRvbmx5IGdyYW50cyA9IHRoaXMuX2ZiLmNvbnRyb2woW10pO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1YnN0aXR1ZUlucHV0JywgeyByZWFkOiBNYXRJbnB1dCB9KSBzdWJzdGl0dWVJbnB1dDogTWF0SW5wdXQ7XHJcbiAgQFZpZXdDaGlsZCgnZ3JhbnRJbnB1dCcsIHsgcmVhZDogTWF0Q2hpcElucHV0IH0pIGdyYW50SW5wdXQ6IE1hdENoaXBJbnB1dDtcclxuICByZWFkb25seSBvdXRPZk9mZmljZSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICBzdWJzdGl0dWVJZDogdGhpcy5fZmIuY29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcclxuICAgIGZyb206IHRoaXMuX2ZiLmNvbnRyb2w8RGF0ZSB8IG51bGw+KG51bGwpLFxyXG4gICAgdG86IHRoaXMuX2ZiLmNvbnRyb2w8RGF0ZSB8IG51bGw+KG51bGwpXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgZ3JhbnRBY2Nlc3MgPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgdXNlcnM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KFtdKVxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBvdXRPZk9mZmljZTogdGhpcy5vdXRPZk9mZmljZSxcclxuICAgIGdyYW50QWNjZXNzOiB0aGlzLmdyYW50QWNjZXNzXHJcbiAgfSk7XHJcbiAgb3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICBndXNlcnMkOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxQcm9maWxlU2V0dGluZ3NEaWFsb2c+LFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpXHJcbiAgICBwdWJsaWMgbW9kZWw6IE91dE9mT2ZmaWNlRGF0YSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgY29uc3QgeyBhY3RpdmUsIHRvLCBmcm9tIH0gPSB0aGlzLm91dE9mT2ZmaWNlLmNvbnRyb2xzO1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLm91dE9mT2ZmaWNlIHx8ICF0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLmFjdGl2ZSkge1xyXG4gICAgICB0by5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgZnJvbS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5zdWJzdGl0dXRlLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1dGUuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgaWYgKCF0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgICAgdG8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLnN1YnN0aXR1ZUlkICYmXHJcbiAgICAgIHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLnN1YnN0aXR1ZUlkKS5zdWJzY3JpYmUodSA9PlxyXG4gICAgICAgIHRoaXMuc3Vic3RpdHV0ZS5zZXRWYWx1ZSh1LCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgYWN0aXZlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICBmcm9tLmVuYWJsZSgpO1xyXG4gICAgICAgICAgZnJvbS52YWx1ZSAmJiB0by5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuc3Vic3RpdHV0ZS5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuc3Vic3RpdHV0ZS5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dWVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZyb20uZGlzYWJsZSgpO1xyXG4gICAgICAgICAgdG8uZGlzYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dXRlLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dXRlLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5vdXNlcnMkID0gdGhpcy5zdWJzdGl0dXRlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpKSxcclxuICAgICAgc3dpdGNoTWFwKHYgPT4gdGhpcy5fYWNjb3VudHMuZmluZEFsbCh2IGFzIGFueSkpLFxyXG4gICAgICBtYXAociA9PiByLmZpbHRlcih1ID0+IHUuaWQgIT09IHRoaXMubW9kZWwudXNlcklkKSkpO1xyXG4gICAgZnJvbS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpKS5cclxuICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgdG8uZW5hYmxlKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG8uZGlzYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICAgIGlmICghdGhpcy5tb2RlbC5ncmFudEFjY2VzcyB8fCAhdGhpcy5tb2RlbC5ncmFudEFjY2Vzcy5hY3RpdmUpIHtcclxuICAgICAgdGhpcy5ncmFudHMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyYW50QWNjZXNzLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpKS5cclxuICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICB0aGlzLmdyYW50cy5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRzLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLmdyYW50SW5wdXQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdyYW50cy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5ndXNlcnMkID0gdGhpcy5ncmFudHMudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2RpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKSxcclxuICAgICAgZmlsdGVyKHYgPT4gaXNTdHJpbmcodikpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYgYXMgYW55KSksXHJcbiAgICAgIG1hcChyID0+IHIuZmlsdGVyKHUgPT4gdS5pZCAhPT0gdGhpcy5tb2RlbC51c2VySWQpKSk7XHJcbiAgfVxyXG4gIHVzZXJEaXNwbGF5ID0gKGl0ZW06IFVzZXJJbmZvKSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubmFtZSA6IG51bGw7XHJcbiAgfVxyXG4gIHNldElkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XHJcbiAgICBjb25zdCB7IGlkIH0gPSBldmVudC5vcHRpb24udmFsdWUgYXMgVXNlckluZm87XHJcbiAgICB0aGlzLm91dE9mT2ZmaWNlLmNvbnRyb2xzWydzdWJzdGl0dWVJZCddLnNldFZhbHVlKGlkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICovXHJcbiAgcmVtb3ZlR3JhbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgdXNlcnMgPSB0aGlzLmZvcm0udmFsdWUuZ3JhbnRBY2Nlc3M/LnVzZXJzO1xyXG4gICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKGlkKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlucFxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIGFkZEdyYW50KGlucDogSFRNTElucHV0RWxlbWVudCwgZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzPy51c2VycztcclxuICAgIGNvbnN0IGlkID0gZXZlbnQub3B0aW9uLnZhbHVlIGFzIHN0cmluZztcclxuICAgIGlmICghdXNlcnMpXHJcbiAgICAgIHRoaXMuZ3JhbnRBY2Nlc3MuY29udHJvbHNbJ3VzZXJzJ10uc2V0VmFsdWUoW2lkXSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHVzZXJzLnB1c2goaWQpO1xyXG4gICAgaW5wLnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG59XHJcbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7J1NldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgZm9ybUdyb3VwTmFtZT1cIm91dE9mT2ZmaWNlXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cIm1hdC1ib2R5LXN0cm9uZ1wiPnt7J091dE9mT2ZmaWNlJ3x0cmFuc2xhdGV9fTwvaDM+XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgPGJyIC8+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInN1YnN0aXR1dGVcIiB0eXBlPVwic2VhcmNoXCIgW21hdEF1dG9jb21wbGV0ZV09XCJzYXV0b1wiICNzdWJzdGl0dWVJbnB1dFxyXG4gICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Fzc29jaWF0ZScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwib3V0T2ZPZmZpY2UudmFsdWUuYWN0aXZlXCIgLz5cclxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjc2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwidXNlckRpc3BsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJzZXRJZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdSBvZiBvdXNlcnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwidVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj57e3UubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZnJvbVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBwbGFjZWhvbGRlcj1cInt7J0Zyb20nfCB0cmFuc2xhdGV9fVwiIC8+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIFtmb3JdPVwiZnJvbVwiIG1hdFN1ZmZpeD48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZnJvbT48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInRvXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9cIiBbbWluXT1cImZvcm0uY29udHJvbHNbJ2Zyb20nXS52YWx1ZVwiIHBsYWNlaG9sZGVyPVwie3snVG8nfCB0cmFuc2xhdGV9fVwiIC8+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIFtmb3JdPVwidG9cIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3RvPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS08aHIgLz4tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiBmb3JtR3JvdXBOYW1lPVwiZ3JhbnRBY2Nlc3NcIj5cclxuICAgICAgPGgzIGNsYXNzPVwibWF0LWJvZHktc3Ryb25nXCI+e3snR3JhbnRBY2Nlc3MnfHRyYW5zbGF0ZX19PC9oMz5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1jaGlwLWdyaWQgI2dyYW50TGlzdCBbYXR0ci5hcmlhLWxhYmVsXT1cIlwiIFtkaXNhYmxlZF09XCIhZ3JhbnRBY2Nlc3MudmFsdWUuYWN0aXZlXCI+XHJcbiAgICAgICAgICA8bWF0LWNoaXAtcm93ICpuZ0Zvcj1cImxldCB1IG9mIGdyYW50QWNjZXNzLnZhbHVlLnVzZXJzIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92YWJsZV09XCJncmFudEFjY2Vzcy52YWx1ZS5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmVHcmFudCh1KVwiPlxyXG4gICAgICAgICAgICB7e3UgfCB1c2VyTmFtZSB8IGFzeW5jfX1cclxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxyXG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cclxuICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cImdyYW50c1wiIHBsYWNlaG9sZGVyPVwie3snVXNlcnMnfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJncmFudEFjY2Vzcy52YWx1ZS5hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImdyYW50QXV0b1wiXHJcbiAgICAgICAgICAgICAgICNncmFudElucHV0XHJcbiAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiZ3JhbnRMaXN0XCJcclxuICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiPlxyXG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNncmFudEF1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwiYWRkR3JhbnQoZ3JhbnRJbnB1dCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHUgb2YgZ3VzZXJzJCB8IGFzeW5jXCIgW3ZhbHVlXT1cInUuaWRcIj5cclxuICAgICAgICAgICAge3t1Lm5hbWV9fVxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInUuZW1haWxcIj4mbmJzcDsgLSB7e3UuZW1haWx9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Zvcm0+XHJcbjwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG48bWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJmb3JtLnZhbHVlXCIgY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbGlkXCI+e3snT0snIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWRpYWxvZy1jbG9zZT57eydDYW5jZWwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiJdfQ==
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0b2ZvZmZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9wcm9maWxlci9vdXRvZm9mZmljZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL3Byb2ZpbGVyL291dG9mb2ZmaWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVaEQsTUFBTSxPQUFPLHFCQUFxQjtJQXVCaEMsWUFBb0IsU0FBeUIsRUFDbkMsVUFBK0MsRUFDL0MsR0FBZ0IsRUFFakIsS0FBc0I7UUFKWCxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUNuQyxlQUFVLEdBQVYsVUFBVSxDQUFxQztRQUMvQyxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBRWpCLFVBQUssR0FBTCxLQUFL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QUFDLE1BQU0sQ0FBQyxLQUFlLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUs7WUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUVsRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQzs4R0E1SFUscUJBQXFCLHVHQTBCdEIsZUFBZTtrR0ExQmQscUJBQXFCLGlKQUlLLFFBQVEsbUdBQ1osWUFBWSw2QkN6Qi9DLHk1R0FnRUE7OzJGRDVDYSxxQkFBcUI7a0JBRGpDLFNBQVM7OzswQkEyQkwsTUFBTTsyQkFBQyxlQUFlOzRDQXRCd0IsY0FBYztzQkFBOUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBMUQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5URVIsIENPTU1BLCBTRU1JQ09MT04gfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2tleWNvZGVzXCI7XHJcbmltcG9ydCB7IFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHNcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRha2VVbnRpbCwgZmlsdGVyLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvYWNjb3VudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IE91dE9mT2ZmaWNlU2V0dGluZ3MsIEdyYW50U2V0dGluZ3MsIFVzZXJJbmZvLCB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPdXRPZk9mZmljZURhdGEge1xyXG4gIHVzZXJJZDogc3RyaW5nO1xyXG4gIG91dE9mT2ZmaWNlOiBPdXRPZk9mZmljZVNldHRpbmdzO1xyXG4gIGdyYW50QWNjZXNzOiBHcmFudFNldHRpbmdzO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHsgdGVtcGxhdGVVcmw6ICdvdXRvZm9mZmljZS5jb21wb25lbnQuaHRtbCcgfSlcclxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXR0aW5nc0RpYWxvZyBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUEsIFNFTUlDT0xPTl07XHJcbiAgcmVhZG9ubHkgc3Vic3RpdHV0ZSA9IHRoaXMuX2ZiLmNvbnRyb2w8VXNlckluZm8gfCBzdHJpbmc+KG51bGwpO1xyXG4gIHJlYWRvbmx5IGdyYW50cyA9IHRoaXMuX2ZiLmNvbnRyb2woW10pO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1YnN0aXR1ZUlucHV0JywgeyByZWFkOiBNYXRJbnB1dCB9KSBzdWJzdGl0dWVJbnB1dDogTWF0SW5wdXQ7XHJcbiAgQFZpZXdDaGlsZCgnZ3JhbnRJbnB1dCcsIHsgcmVhZDogTWF0Q2hpcElucHV0IH0pIGdyYW50SW5wdXQ6IE1hdENoaXBJbnB1dDtcclxuICByZWFkb25seSBvdXRPZk9mZmljZSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICBzdWJzdGl0dWVJZDogdGhpcy5fZmIuY29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcclxuICAgIGZyb206IHRoaXMuX2ZiLmNvbnRyb2w8RGF0ZSB8IG51bGw+KG51bGwpLFxyXG4gICAgdG86IHRoaXMuX2ZiLmNvbnRyb2w8RGF0ZSB8IG51bGw+KG51bGwpXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgZ3JhbnRBY2Nlc3MgPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgdXNlcnM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KFtdKVxyXG4gIH0pO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBvdXRPZk9mZmljZTogdGhpcy5vdXRPZk9mZmljZSxcclxuICAgIGdyYW50QWNjZXNzOiB0aGlzLmdyYW50QWNjZXNzXHJcbiAgfSk7XHJcbiAgb3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICBndXNlcnMkOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxQcm9maWxlU2V0dGluZ3NEaWFsb2c+LFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpXHJcbiAgICBwdWJsaWMgbW9kZWw6IE91dE9mT2ZmaWNlRGF0YSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgY29uc3QgeyBhY3RpdmUsIHRvLCBmcm9tIH0gPSB0aGlzLm91dE9mT2ZmaWNlLmNvbnRyb2xzO1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLm91dE9mT2ZmaWNlIHx8ICF0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLmFjdGl2ZSkge1xyXG4gICAgICB0by5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgZnJvbS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5zdWJzdGl0dXRlLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1dGUuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgaWYgKCF0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgICAgdG8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLnN1YnN0aXR1ZUlkICYmXHJcbiAgICAgIHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm91dE9mT2ZmaWNlLnN1YnN0aXR1ZUlkKS5zdWJzY3JpYmUodSA9PlxyXG4gICAgICAgIHRoaXMuc3Vic3RpdHV0ZS5zZXRWYWx1ZSh1LCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgYWN0aXZlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICBmcm9tLmVuYWJsZSgpO1xyXG4gICAgICAgICAgZnJvbS52YWx1ZSAmJiB0by5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuc3Vic3RpdHV0ZS5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuc3Vic3RpdHV0ZS5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dWVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGZyb20uZGlzYWJsZSgpO1xyXG4gICAgICAgICAgdG8uZGlzYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dXRlLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dXRlLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5vdXNlcnMkID0gdGhpcy5zdWJzdGl0dXRlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKSksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpKSxcclxuICAgICAgc3dpdGNoTWFwKHYgPT4gdGhpcy5fYWNjb3VudHMuZmluZEFsbCh2IGFzIGFueSkpLFxyXG4gICAgICBtYXAociA9PiByLmZpbHRlcih1ID0+IHUuaWQgIT09IHRoaXMubW9kZWwudXNlcklkKSkpO1xyXG4gICAgZnJvbS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpKS5cclxuICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgdG8uZW5hYmxlKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdG8uZGlzYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICAgIGlmICghdGhpcy5tb2RlbC5ncmFudEFjY2VzcyB8fCAhdGhpcy5tb2RlbC5ncmFudEFjY2Vzcy5hY3RpdmUpIHtcclxuICAgICAgdGhpcy5ncmFudHMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyYW50QWNjZXNzLmNvbnRyb2xzWydhY3RpdmUnXS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkpKS5cclxuICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgICB0aGlzLmdyYW50cy5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRzLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLmdyYW50SW5wdXQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdyYW50cy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5ndXNlcnMkID0gdGhpcy5ncmFudHMudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2RpYWxvZ1JlZi5hZnRlckNsb3NlZCgpKSxcclxuICAgICAgZmlsdGVyKHYgPT4gaXNTdHJpbmcodikpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYgYXMgYW55KSksXHJcbiAgICAgIG1hcChyID0+IHIuZmlsdGVyKHUgPT4gdS5pZCAhPT0gdGhpcy5tb2RlbC51c2VySWQpKSk7XHJcbiAgfVxyXG4gIHVzZXJEaXNwbGF5ID0gKGl0ZW06IFVzZXJJbmZvKSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubmFtZSA6IG51bGw7XHJcbiAgfVxyXG4gIHNldElkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XHJcbiAgICBjb25zdCB7IGlkIH0gPSBldmVudC5vcHRpb24udmFsdWUgYXMgVXNlckluZm87XHJcbiAgICB0aGlzLm91dE9mT2ZmaWNlLmNvbnRyb2xzWydzdWJzdGl0dWVJZCddLnNldFZhbHVlKGlkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICovXHJcbiAgcmVtb3ZlR3JhbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgdXNlcnMgPSB0aGlzLmZvcm0udmFsdWUuZ3JhbnRBY2Nlc3M/LnVzZXJzO1xyXG4gICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKGlkKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlucFxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIGFkZEdyYW50KGlucDogSFRNTElucHV0RWxlbWVudCwgZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzPy51c2VycztcclxuICAgIGNvbnN0IGlkID0gZXZlbnQub3B0aW9uLnZhbHVlIGFzIHN0cmluZztcclxuICAgIGlmICghdXNlcnMpXHJcbiAgICAgIHRoaXMuZ3JhbnRBY2Nlc3MuY29udHJvbHNbJ3VzZXJzJ10uc2V0VmFsdWUoW2lkXSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHVzZXJzLnB1c2goaWQpO1xyXG4gICAgaW5wLnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG59XHJcbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7J1NldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XHJcbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgZm9ybUdyb3VwTmFtZT1cIm91dE9mT2ZmaWNlXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cIm1hdC1tZGMtYm9keS1zdHJvbmdcIj57eydPdXRPZk9mZmljZSd8dHJhbnNsYXRlfX08L2gzPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDxiciAvPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzdWJzdGl0dXRlXCIgdHlwZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwic2F1dG9cIiAjc3Vic3RpdHVlSW5wdXRcclxuICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBc3NvY2lhdGUnIHwgdHJhbnNsYXRlXCIgW3JlcXVpcmVkXT1cIm91dE9mT2ZmaWNlLnZhbHVlLmFjdGl2ZVwiIC8+XHJcbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI3NhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgW2Rpc3BsYXlXaXRoXT1cInVzZXJEaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwic2V0SWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHUgb2Ygb3VzZXJzJCB8IGFzeW5jXCIgW3ZhbHVlXT1cInVcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3t1Lm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cImZyb21cIiBmb3JtQ29udHJvbE5hbWU9XCJmcm9tXCIgcGxhY2Vob2xkZXI9XCJ7eydGcm9tJ3wgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cImZyb21cIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI2Zyb20+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICZuYnNwO1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJ0b1wiIGZvcm1Db250cm9sTmFtZT1cInRvXCIgW21pbl09XCJmb3JtLmNvbnRyb2xzWydmcm9tJ10udmFsdWVcIiBwbGFjZWhvbGRlcj1cInt7J1RvJ3wgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBbZm9yXT1cInRvXCIgbWF0U3VmZml4PjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyICN0bz48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tPGhyIC8+LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgZm9ybUdyb3VwTmFtZT1cImdyYW50QWNjZXNzXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cIm1hdC1tZGMtYm9keS1zdHJvbmdcIj57eydHcmFudEFjY2Vzcyd8dHJhbnNsYXRlfX08L2gzPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWNoaXAtZ3JpZCAjZ3JhbnRMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiXCIgW2Rpc2FibGVkXT1cIiFncmFudEFjY2Vzcy52YWx1ZS5hY3RpdmVcIj5cclxuICAgICAgICAgIDxtYXQtY2hpcC1yb3cgKm5nRm9yPVwibGV0IHUgb2YgZ3JhbnRBY2Nlc3MudmFsdWUudXNlcnMgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cImdyYW50QWNjZXNzLnZhbHVlLmFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZUdyYW50KHUpXCI+XHJcbiAgICAgICAgICAgIHt7dSB8IHVzZXJOYW1lIHwgYXN5bmN9fVxyXG4gICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XHJcbiAgICAgICAgPC9tYXQtY2hpcC1ncmlkPlxyXG4gICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiZ3JhbnRzXCIgcGxhY2Vob2xkZXI9XCJ7eydVc2Vycyd8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImdyYW50QWNjZXNzLnZhbHVlLmFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiZ3JhbnRBdXRvXCJcclxuICAgICAgICAgICAgICAgI2dyYW50SW5wdXRcclxuICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJncmFudExpc3RcIlxyXG4gICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCI+XHJcbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2dyYW50QXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRHcmFudChncmFudElucHV0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdSBvZiBndXNlcnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwidS5pZFwiPlxyXG4gICAgICAgICAgICB7e3UubmFtZX19XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidS5lbWFpbFwiPiZuYnNwOyAtIHt7dS5lbWFpbH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbjxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImZvcm0udmFsdWVcIiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIj57eydPSycgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtZGlhbG9nLWNsb3NlPnt7J0NhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG48L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuIl19