@bizdoc/core 1.16.2 → 1.16.3

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 (61) hide show
  1. package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +60 -35
  2. package/esm2020/lib/admin/configuration-designer/designer.base.mjs +8 -24
  3. package/esm2020/lib/admin/configuration-designer/designer.component.mjs +32 -23
  4. package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +3 -4
  5. package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +3 -3
  6. package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +4 -5
  7. package/esm2020/lib/admin/configuration-designer/elements/anomaly-rule.component.mjs +5 -5
  8. package/esm2020/lib/admin/configuration-designer/elements/box-form.component.mjs +5 -5
  9. package/esm2020/lib/admin/configuration-designer/elements/configuration-datasource.component.mjs +5 -5
  10. package/esm2020/lib/admin/configuration-designer/elements/cube-index-utility.component.mjs +3 -3
  11. package/esm2020/lib/admin/configuration-designer/elements/cube-view.component.mjs +3 -3
  12. package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +10 -15
  13. package/esm2020/lib/admin/configuration-designer/elements/documents-report.component.mjs +3 -3
  14. package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +3 -3
  15. package/esm2020/lib/admin/configuration-designer/elements/explore-view.component.mjs +3 -3
  16. package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +3 -9
  17. package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +16 -16
  18. package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +5 -9
  19. package/esm2020/lib/admin/configuration-designer/elements/matrix-view.component.mjs +3 -3
  20. package/esm2020/lib/admin/configuration-designer/elements/parallel-view.component.mjs +3 -3
  21. package/esm2020/lib/admin/configuration-designer/elements/performance-widget.component.mjs +3 -3
  22. package/esm2020/lib/admin/configuration-designer/elements/pivot-view.component.mjs +3 -3
  23. package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +10 -9
  24. package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +5 -5
  25. package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +4 -4
  26. package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +3 -4
  27. package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +3 -3
  28. package/esm2020/lib/admin/configuration-designer/elements/sum-view.component.mjs +3 -3
  29. package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +3 -3
  30. package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +4 -5
  31. package/esm2020/lib/admin/configuration-designer/elements/usage-report.component.mjs +3 -3
  32. package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +4 -11
  33. package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +3 -10
  34. package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +11 -9
  35. package/esm2020/lib/admin/configuration-designer/icon-picker.component.mjs +11 -9
  36. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +3 -3
  37. package/esm2020/lib/system.module.mjs +7 -8
  38. package/esm2020/public-api.mjs +1 -1
  39. package/fesm2015/bizdoc-core.mjs +187 -244
  40. package/fesm2015/bizdoc-core.mjs.map +1 -1
  41. package/fesm2020/bizdoc-core.mjs +184 -238
  42. package/fesm2020/bizdoc-core.mjs.map +1 -1
  43. package/lib/admin/configuration-designer/designer-element.component.d.ts +13 -10
  44. package/lib/admin/configuration-designer/designer.base.d.ts +15 -13
  45. package/lib/admin/configuration-designer/designer.component.d.ts +2 -1
  46. package/lib/admin/configuration-designer/elements/anomaly-rule.component.d.ts +2 -2
  47. package/lib/admin/configuration-designer/elements/box-form.component.d.ts +2 -2
  48. package/lib/admin/configuration-designer/elements/configuration-datasource.component.d.ts +2 -2
  49. package/lib/admin/configuration-designer/elements/folder.component.d.ts +0 -1
  50. package/lib/admin/configuration-designer/elements/form.component.d.ts +3 -1
  51. package/lib/admin/configuration-designer/elements/report.component.d.ts +3 -1
  52. package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +2 -2
  53. package/lib/admin/configuration-designer/elements/utility.component.d.ts +0 -1
  54. package/lib/admin/configuration-designer/elements/view.component.d.ts +0 -1
  55. package/lib/admin/configuration-designer/elements/widget.component.d.ts +5 -2
  56. package/lib/admin/configuration-designer/icon-picker.component.d.ts +2 -1
  57. package/lib/system.module.d.ts +10 -11
  58. package/package.json +1 -1
  59. package/public-api.d.ts +1 -1
  60. package/esm2020/lib/admin/configuration-designer/privileges.component.mjs +0 -60
  61. package/lib/admin/configuration-designer/privileges.component.d.ts +0 -26
@@ -1,40 +1,42 @@
1
1
  import { Component, EventEmitter, HostListener, Injector, Input, Optional, ViewChild, ViewContainerRef } from "@angular/core";
2
2
  import { Validators } from "@angular/forms";
3
- import { Subject, takeUntil } from "rxjs";
3
+ import { debounceTime, Subject, takeUntil } from "rxjs";
4
4
  import { DesignerRef, programName } from "./designer.base";
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../core/slots/pane-ref";
7
7
  import * as i2 from "@angular/forms";
8
- import * as i3 from "../../core/component-factory-resolver";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/material/toolbar";
11
- import * as i6 from "@angular/material/form-field";
12
- import * as i7 from "@angular/material/button";
13
- import * as i8 from "@angular/material/input";
14
- import * as i9 from "@angular/material/icon";
15
- import * as i10 from "../../core/pipes/translate.pipe";
8
+ import * as i3 from "../system.service";
9
+ import * as i4 from "../../core/component-factory-resolver";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "@angular/material/list";
12
+ import * as i7 from "@angular/material/toolbar";
13
+ import * as i8 from "@angular/material/form-field";
14
+ import * as i9 from "@angular/material/button";
15
+ import * as i10 from "@angular/material/input";
16
+ import * as i11 from "@angular/material/icon";
17
+ import * as i12 from "../../core/layout/layout.component";
18
+ import * as i13 from "../core/ace.input";
19
+ import * as i14 from "../../core/pipes/translate.pipe";
16
20
  /**/
17
21
  export class DesignerItemComponent {
18
- constructor(_injector, _pane, _fb, _cfr) {
22
+ constructor(_injector, _pane, _fb, _service, _cfr, _cd) {
19
23
  this._injector = _injector;
20
24
  this._pane = _pane;
21
25
  this._fb = _fb;
26
+ this._service = _service;
22
27
  this._cfr = _cfr;
28
+ this._cd = _cd;
23
29
  if (_pane && _pane.dialog) {
24
- const { designer, editMode, isNew, model, template } = _pane.data;
25
- this._model = model;
26
- this._isNew = isNew;
30
+ const { designer, mode, model, template } = _pane.data;
27
31
  Object.assign(this, {
28
- designer, editMode,
32
+ designer, mode,
29
33
  model: JSON.parse(JSON.stringify(model)),
30
34
  template
31
35
  });
32
36
  }
33
37
  }
34
38
  save() {
35
- if (this._isNew) {
36
- }
37
- Object.assign(this._model, this.model);
39
+ this.change.emit(this.model);
38
40
  this._pane.close();
39
41
  }
40
42
  ngOnInit() {
@@ -47,32 +49,51 @@ export class DesignerItemComponent {
47
49
  let factory = this._cfr.resolve(this.template);
48
50
  let cRef = this._container.createComponent(factory, 0, injector);
49
51
  cRef.instance.model = this.model;
50
- cRef.instance.editMode = this.editMode;
52
+ cRef.instance.mode = this.mode;
51
53
  typeinstance = cRef.instance;
52
54
  let elementinstance;
53
55
  if (this.model.template) {
54
56
  let factory = this._cfr.resolve(this.model.template);
55
57
  let cRef = this._econtainer.createComponent(factory, 0, injector);
56
58
  cRef.instance.model = this.model;
57
- cRef.instance.editMode = this.editMode;
59
+ cRef.instance.mode = this.mode;
58
60
  elementinstance = cRef.instance;
59
61
  }
60
- if (this.editMode) {
62
+ if (this.mode === 'edit') {
61
63
  this.change = new EventEmitter();
62
64
  this.form = this._fb.group({
63
65
  name: this._fb.control(null, Validators.required),
64
- title: this._fb.control(null, Validators.required),
66
+ title: this._fb.control({ disabled: this.model.resource }, Validators.required),
65
67
  });
66
68
  this._destroy = new Subject();
67
69
  const { name, title } = this.form.controls;
68
70
  !this.model.draft && name.disable();
69
- this.model.draft && title.valueChanges.pipe(takeUntil(this._destroy)).subscribe((t) => t && name.setValue(programName(t)));
71
+ this.model.draft && title.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe((t) => t && name.setValue(programName(t)));
72
+ if (this.model.privileges) {
73
+ this.form.addControl('privileges', this._fb.group({
74
+ rule: null,
75
+ roles: this._fb.control(null),
76
+ }), { emitEvent: false });
77
+ this._service.roles().subscribe(r => {
78
+ this.roles = r.concat(this.designer.roles.
79
+ filter(r => !r.disabled).
80
+ map(r => ({
81
+ name: r.name,
82
+ title: r.title,
83
+ dataType: r.dataType
84
+ })));
85
+ });
86
+ }
87
+ if (!elementinstance && this.model.arguments?.length) {
88
+ const options = this._fb.group({});
89
+ this.model.arguments?.forEach(a => options.addControl(a.name, this._fb.control(null, a.required ? Validators.required : null)));
90
+ this.form.addControl('options', options, { emitEvent: false });
91
+ }
70
92
  this.form.patchValue(this.model);
71
- this.form.valueChanges.pipe(takeUntil(this._destroy)).
93
+ this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).
72
94
  subscribe(v => {
73
95
  Object.assign(this.model, v);
74
96
  this.dirty = true;
75
- this.change.emit();
76
97
  });
77
98
  let state, typestate, elementstate;
78
99
  function validate() {
@@ -83,30 +104,34 @@ export class DesignerItemComponent {
83
104
  this.valid = validate();
84
105
  });
85
106
  typeinstance.form.patchValue(this.model);
86
- typeinstance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
107
+ typeinstance.form.statusChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe(s => {
87
108
  typestate = s;
88
109
  this.valid = validate();
89
110
  });
90
- typeinstance.form.valueChanges.pipe(takeUntil(this._destroy)).subscribe(v => {
111
+ typeinstance.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe(v => {
91
112
  Object.assign(this.model, v);
92
113
  this.dirty = true;
93
- this.change.emit();
94
114
  });
95
115
  if (elementinstance) {
96
116
  elementinstance.form.patchValue(this.model.options);
97
- elementinstance.form.valueChanges.pipe(takeUntil(this._destroy)).
117
+ elementinstance.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(100)).
98
118
  subscribe(v => this.assignargs(v));
99
- elementinstance.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
119
+ elementinstance.form.statusChanges.pipe(takeUntil(this._destroy), debounceTime(100)).subscribe(s => {
100
120
  typestate = s;
101
121
  this.valid = validate();
102
122
  });
103
123
  }
104
124
  }
105
125
  }
126
+ setOptions(obj) {
127
+ this.form.get('options').patchValue(obj);
128
+ }
129
+ overrideResource() {
130
+ this.form.get('title').enable();
131
+ }
106
132
  assignargs(evt) {
107
133
  Object.assign(this.model.options, evt);
108
134
  this.dirty = true;
109
- this.change.emit();
110
135
  }
111
136
  /**
112
137
  * Ctrl-s save
@@ -122,14 +147,14 @@ export class DesignerItemComponent {
122
147
  this._destroy?.next();
123
148
  }
124
149
  }
125
- DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.Injector }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.BizDocComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component });
126
- DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { template: "template", model: "model", designer: "designer" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"editMode; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.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: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
150
+ DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, deps: [{ token: i0.Injector }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.SystemService }, { token: i4.BizDocComponentFactoryResolver }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
151
+ DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.3", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { template: "template", model: "model", designer: "designer" }, host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_econtainer", first: true, predicate: ["econtainer"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"mode === 'edit'; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\" *ngIf=\"mode === 'edit'\">\r\n <ng-container *ngIf=\"model.arguments?.length\">\r\n <bizdoc-layout [fields]=\"model.arguments\" [model]=\"model.options\"\r\n (modelChange)=\"setOptions($event)\"></bizdoc-layout>\r\n </ng-container>\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <ng-container *ngIf=\"model.privileges\" formGroupName=\"privileges\">\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i6.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i6.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i7.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i10.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: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.LayoutComponent, selector: "bizdoc-layout", inputs: ["fields", "model", "dirty", "params", "valid"], outputs: ["modelChange", "dirtyChange", "validChange"] }, { kind: "component", type: i13.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
127
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerItemComponent, decorators: [{
128
153
  type: Component,
129
- args: [{ selector: 'bizdoc-designer-element', template: "<ng-container *ngIf=\"editMode; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"] }]
154
+ args: [{ selector: 'bizdoc-designer-element', template: "<ng-container *ngIf=\"mode === 'edit'; else info\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!valid\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <span class=\"help\">{{model.help}}</span>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </form>\r\n</ng-container>\r\n\r\n<ng-template #info>\r\n <span class=\"family\">{{model.family}}</span>\r\n</ng-template>\r\n\r\n<ng-container #econtainer></ng-container>\r\n<ng-container #container></ng-container>\r\n\r\n\r\n<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\" *ngIf=\"mode === 'edit'\">\r\n <ng-container *ngIf=\"model.arguments?.length\">\r\n <bizdoc-layout [fields]=\"model.arguments\" [model]=\"model.options\"\r\n (modelChange)=\"setOptions($event)\"></bizdoc-layout>\r\n </ng-container>\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <ng-container *ngIf=\"model.privileges\" formGroupName=\"privileges\">\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n</form>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}\n"] }]
130
155
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.PaneRef, decorators: [{
131
156
  type: Optional
132
- }] }, { type: i2.FormBuilder }, { type: i3.BizDocComponentFactoryResolver }]; }, propDecorators: { template: [{
157
+ }] }, { type: i2.FormBuilder }, { type: i3.SystemService }, { type: i4.BizDocComponentFactoryResolver }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { template: [{
133
158
  type: Input
134
159
  }], model: [{
135
160
  type: Input
@@ -145,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
145
170
  type: HostListener,
146
171
  args: ['document:keydown', ['$event']]
147
172
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFVLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQTZDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFDLE9BQU8sRUFBRSxXQUFXLEVBQXVGLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFTaEosSUFBSTtBQU1KLE1BQU0sT0FDRSxxQkFBcUI7SUFjM0IsWUFDVSxTQUFtQixFQUNQLEtBQWMsRUFDMUIsR0FBZ0IsRUFDaEIsSUFBb0M7UUFIcEMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNQLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixTQUFJLEdBQUosSUFBSSxDQUFnQztRQUU1QyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQWtCLENB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QUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRTRELFVBQVU7c0JBQTNFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0csV0FBVztzQkFBN0UsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFrSGpFLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbXBvbmVudC1mYWN0b3J5LXJlc29sdmVyXCI7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgRWxlbWVudE1vZGVsLCBEZXNpZ25lckVsZW1lbnRDb21wb25lbnQsIERlc2lnbmVyTW9kZWwsIERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQsIHByb2dyYW1OYW1lIH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbGVtZXREYXRhIHtcclxuICBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBpc05ldzogYm9vbGVhbjtcclxuICB0ZW1wbGF0ZTogc3RyaW5nO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw7XHJcbiAgZGVzaWduZXI6IERlc2lnbmVyTW9kZWw7XHJcbn1cclxuLyoqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1kZXNpZ25lci1lbGVtZW50JyxcclxuICBzdHlsZVVybHM6IFsnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgRGVzaWduZXJJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBtb2RlbCE6IEVsZW1lbnRNb2RlbDtcclxuICBASW5wdXQoKSBkZXNpZ25lciE6IERlc2lnbmVyTW9kZWw7XHJcbiAgY2hhbmdlOiBFdmVudEVtaXR0ZXI8dm9pZD47XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgZGlydHk6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfaXNOZXc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3k6IFN1YmplY3Q8dm9pZD47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgKSB7XHJcbiAgICBpZiAoX3BhbmUgJiYgX3BhbmUuZGlhbG9nKSB7XHJcbiAgICAgIGNvbnN0IHsgZGVzaWduZXIsIGVkaXRNb2RlLCBpc05ldywgbW9kZWwsIHRlbXBsYXRlIH0gPSBfcGFuZS5kYXRhIGFzIEVsZW1ldERhdGE7XHJcbiAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XHJcbiAgICAgIHRoaXMuX2lzTmV3ID0gaXNOZXc7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywge1xyXG4gICAgICAgIGRlc2lnbmVyLCBlZGl0TW9kZSxcclxuICAgICAgICBtb2RlbDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb2RlbCkpLFxyXG4gICAgICAgIHRlbXBsYXRlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuX2lzTmV3KSB7XHJcbiAgICB9XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX21vZGVsLCB0aGlzLm1vZGVsKTtcclxuICAgIHRoaXMuX3BhbmUuY2xvc2UoKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwub3B0aW9ucykgdGhpcy5tb2RlbC5vcHRpb25zID0ge307XHJcblxyXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoW3tcclxuICAgICAgcHJvdmlkZTogRGVzaWduZXJSZWYsIHVzZVZhbHVlOiBuZXcgRGVzaWduZXJSZWYodGhpcy5kZXNpZ25lciwgdGhpcy5tb2RlbClcclxuICAgIH1dLCB0aGlzLl9pbmplY3Rvcik7XHJcblxyXG4gICAgbGV0IHR5cGVpbnN0YW5jZTtcclxuXHJcbiAgICBsZXQgZmFjdG9yeSA9IHRoaXMuX2Nmci5yZXNvbHZlKHRoaXMudGVtcGxhdGUpO1xyXG5cclxuICAgIGxldCBjUmVmID0gdGhpcy5fY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lclR5cGVFbGVtZW50Q29tcG9uZW50PihmYWN0b3J5LCAwLCBpbmplY3Rvcik7XHJcbiAgICBjUmVmLmluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgIGNSZWYuaW5zdGFuY2UuZWRpdE1vZGUgPSB0aGlzLmVkaXRNb2RlO1xyXG4gICAgdHlwZWluc3RhbmNlID0gY1JlZi5pbnN0YW5jZTtcclxuXHJcbiAgICBsZXQgZWxlbWVudGluc3RhbmNlO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGxldCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUodGhpcy5tb2RlbC50ZW1wbGF0ZSk7XHJcblxyXG4gICAgICBsZXQgY1JlZiA9IHRoaXMuX2Vjb250YWluZXIuY3JlYXRlQ29tcG9uZW50PERlc2lnbmVyRWxlbWVudENvbXBvbmVudD4oZmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgY1JlZi5pbnN0YW5jZS5lZGl0TW9kZSA9IHRoaXMuZWRpdE1vZGU7XHJcbiAgICAgIGVsZW1lbnRpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgICBuYW1lOiB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5fZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAgIGNvbnN0IHsgbmFtZSwgdGl0bGUgfSA9IHRoaXMuZm9ybS5jb250cm9scztcclxuICAgICAgIXRoaXMubW9kZWwuZHJhZnQgJiYgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMubW9kZWwuZHJhZnQgJiYgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgICB0ICYmIG5hbWUuc2V0VmFsdWUocHJvZ3JhbU5hbWUodCkpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgICBzdWJzY3JpYmUodiA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsIHYpO1xyXG4gICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGxldCBzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXMsIHR5cGVzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXMsIGVsZW1lbnRzdGF0ZTogRm9ybUNvbnRyb2xTdGF0dXM7XHJcbiAgICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xyXG4gICAgICAgIHJldHVybiAoIXR5cGVzdGF0ZSB8fCB0eXBlc3RhdGUgPT09ICdWQUxJRCcpICYmICghc3RhdGUgfHwgc3RhdGUgPT09ICdWQUxJRCcpICYmICghZWxlbWVudHN0YXRlIHx8IGVsZW1lbnRzdGF0ZSA9PT0gJ1ZBTElEJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgICBzdGF0ZSA9IHM7XHJcbiAgICAgICAgdGhpcy52YWxpZCA9IHZhbGlkYXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0eXBlaW5zdGFuY2UuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0eXBlaW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgdHlwZXN0YXRlID0gcztcclxuICAgICAgICB0aGlzLnZhbGlkID0gdmFsaWRhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHR5cGVpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdik7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVsZW1lbnRpbnN0YW5jZSkge1xyXG4gICAgICAgIGVsZW1lbnRpbnN0YW5jZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbC5vcHRpb25zKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICAgICAgc3Vic2NyaWJlKHYgPT4gdGhpcy5hc3NpZ25hcmdzKHYpKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgICB0eXBlc3RhdGUgPSBzO1xyXG4gICAgICAgICAgdGhpcy52YWxpZCA9IHZhbGlkYXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYXNzaWduYXJncyhldnQpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbC5vcHRpb25zLCBldnQpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRNb2RlOyBlbHNlIGluZm9cIj5cclxuICA8bWF0LXRvb2xiYXI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiF2YWxpZFwiPjxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L21hdC10b29sYmFyPlxyXG4gIDxzcGFuIGNsYXNzPVwiaGVscFwiPnt7bW9kZWwuaGVscH19PC9zcGFuPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgJm5ic3A7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNpbmZvPlxyXG4gIDxzcGFuIGNsYXNzPVwiZmFtaWx5XCI+e3ttb2RlbC5mYW1pbHl9fTwvc3Bhbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiJdfQ==
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBVSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUssT0FBTyxFQUE2QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEQsT0FBTyxFQUFFLFdBQVcsRUFBMkYsV0FBVyxFQUFjLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEssSUFBSTtBQU1KLE1BQU0sT0FDRSxxQkFBcUI7SUFhM0IsWUFDVSxTQUFtQixFQUNQLEtBQWMsRUFDMUIsR0FBZ0IsRUFDaEIsUUFBdUIsRUFDdkIsSUFBb0MsRUFDcEMsR0FBc0I7UUFMdEIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNQLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQWdDO1FBQ3BDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBRTlCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVB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QjtRQUN0QyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDOztrSEF4SksscUJBQXFCO3NHQUFyQixxQkFBcUIsdVNBT21CLGdCQUFnQixrSEFDZixnQkFBZ0IsMkNDOUJqRSx3ekRBMENBOzJGRHBCUSxxQkFBcUI7a0JBTjVCLFNBQVM7K0JBQ0UseUJBQXlCOzswQkFvQmhDLFFBQVE7K0tBWkYsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFNEQsVUFBVTtzQkFBM0UsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRyxXQUFXO3NCQUE3RSxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQXdJakUsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdFNlbGVjdGlvbkxpc3QgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdFwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbXBvbmVudC1mYWN0b3J5LXJlc29sdmVyXCI7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5pbXBvcnQgeyBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyUmVmLCBFbGVtZW50TW9kZWwsIERlc2lnbmVyRWxlbWVudENvbXBvbmVudEJhc2UsIERlc2lnbmVyTW9kZWwsIERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQsIHByb2dyYW1OYW1lLCBEZXNpZ25Nb2RlIH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbGVtZXREYXRhIHtcclxuICBtb2RlOiBEZXNpZ25Nb2RlO1xyXG4gIHRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDtcclxuICBkZXNpZ25lcjogRGVzaWduZXJNb2RlbDtcclxufVxyXG4vKiovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQnLFxyXG4gIHN0eWxlVXJsczogWydkZXNpZ25lci1lbGVtZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGVVcmw6ICdkZXNpZ25lci1lbGVtZW50LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIG1vZGU6IERlc2lnbk1vZGU7XHJcbiAgQElucHV0KCkgdGVtcGxhdGUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbW9kZWwhOiBFbGVtZW50TW9kZWw7XHJcbiAgQElucHV0KCkgZGVzaWduZXIhOiBEZXNpZ25lck1vZGVsO1xyXG4gIGNoYW5nZTogRXZlbnRFbWl0dGVyPEVsZW1lbnRNb2RlbD47XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgZGlydHk6IGJvb2xlYW47XHJcbiAgcm9sZXM6IEVsZW1lbnRNb2RlbFtdO1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3k6IFN1YmplY3Q8dm9pZD47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NmcjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge1xyXG4gICAgaWYgKF9wYW5lICYmIF9wYW5lLmRpYWxvZykge1xyXG4gICAgICBjb25zdCB7IGRlc2lnbmVyLCBtb2RlLCBtb2RlbCwgdGVtcGxhdGUgfSA9IF9wYW5lLmRhdGEgYXMgRWxlbWV0RGF0YTtcclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XHJcbiAgICAgICAgZGVzaWduZXIsIG1vZGUsXHJcbiAgICAgICAgbW9kZWw6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobW9kZWwpKSxcclxuICAgICAgICB0ZW1wbGF0ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLm9wdGlvbnMpIHRoaXMubW9kZWwub3B0aW9ucyA9IHt9O1xyXG5cclxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKFt7XHJcbiAgICAgIHByb3ZpZGU6IERlc2lnbmVyUmVmLCB1c2VWYWx1ZTogbmV3IERlc2lnbmVyUmVmKHRoaXMuZGVzaWduZXIsIHRoaXMubW9kZWwpXHJcbiAgICB9XSwgdGhpcy5faW5qZWN0b3IpO1xyXG5cclxuICAgIGxldCB0eXBlaW5zdGFuY2U7XHJcblxyXG4gICAgbGV0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLnRlbXBsYXRlKTtcclxuXHJcbiAgICBsZXQgY1JlZiA9IHRoaXMuX2NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8RGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudD4oZmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgY1JlZi5pbnN0YW5jZS5tb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICBjUmVmLmluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICB0eXBlaW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG5cclxuICAgIGxldCBlbGVtZW50aW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZWwudGVtcGxhdGUpIHtcclxuICAgICAgbGV0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGxldCBjUmVmID0gdGhpcy5fZWNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQ8RGVzaWduZXJFbGVtZW50Q29tcG9uZW50QmFzZT4oZmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgY1JlZi5pbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xyXG4gICAgICBlbGVtZW50aW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xyXG4gICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudE1vZGVsPigpO1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgICAgbmFtZTogdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICB0aXRsZTogdGhpcy5fZmIuY29udHJvbCh7IGRpc2FibGVkOiB0aGlzLm1vZGVsLnJlc291cmNlIH0sIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5fZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAgIGNvbnN0IHsgbmFtZSwgdGl0bGUgfSA9IHRoaXMuZm9ybS5jb250cm9scztcclxuICAgICAgIXRoaXMubW9kZWwuZHJhZnQgJiYgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMubW9kZWwuZHJhZnQgJiYgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKCh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgdCAmJiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5tb2RlbC5wcml2aWxlZ2VzKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3ByaXZpbGVnZXMnLFxyXG4gICAgICAgICAgdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBydWxlOiBudWxsLFxyXG4gICAgICAgICAgICByb2xlczogdGhpcy5fZmIuY29udHJvbDxzdHJpbmdbXT4obnVsbCksXHJcbiAgICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uucm9sZXMoKS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJvbGVzID0gci5jb25jYXQodGhpcy5kZXNpZ25lci5yb2xlcy5cclxuICAgICAgICAgICAgZmlsdGVyKHIgPT4gIXIuZGlzYWJsZWQpLlxyXG4gICAgICAgICAgICBtYXAociA9PiAoe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgICAgICB0aXRsZTogci50aXRsZSxcclxuICAgICAgICAgICAgICBkYXRhVHlwZTogci5kYXRhVHlwZVxyXG4gICAgICAgICAgICB9KSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghZWxlbWVudGluc3RhbmNlICYmIHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmIuZ3JvdXAoe30pO1xyXG4gICAgICAgIHRoaXMubW9kZWwuYXJndW1lbnRzPy5mb3JFYWNoKGEgPT5cclxuICAgICAgICAgIG9wdGlvbnMuYWRkQ29udHJvbChhLm5hbWUsIHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgYS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKSkpO1xyXG4gICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgb3B0aW9ucywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuXHJcbiAgICAgICAgc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLCB2KTtcclxuICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBsZXQgc3RhdGU6IEZvcm1Db250cm9sU3RhdHVzLCB0eXBlc3RhdGU6IEZvcm1Db250cm9sU3RhdHVzLCBlbGVtZW50c3RhdGU6IEZvcm1Db250cm9sU3RhdHVzO1xyXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKCF0eXBlc3RhdGUgfHwgdHlwZXN0YXRlID09PSAnVkFMSUQnKSAmJiAoIXN0YXRlIHx8IHN0YXRlID09PSAnVkFMSUQnKSAmJiAoIWVsZW1lbnRzdGF0ZSB8fCBlbGVtZW50c3RhdGUgPT09ICdWQUxJRCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgICAgc3RhdGUgPSBzO1xyXG4gICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZGF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdHlwZWluc3RhbmNlLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsKTtcclxuICAgICAgdHlwZWluc3RhbmNlLmZvcm0uc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZShzID0+IHtcclxuICAgICAgICB0eXBlc3RhdGUgPSBzO1xyXG4gICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZGF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdHlwZWluc3RhbmNlLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdik7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZWxlbWVudGluc3RhbmNlKSB7XHJcbiAgICAgICAgZWxlbWVudGluc3RhbmNlLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsLm9wdGlvbnMpO1xyXG4gICAgICAgIGVsZW1lbnRpbnN0YW5jZS5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDEwMCkpLlxyXG4gICAgICAgICAgc3Vic2NyaWJlKHYgPT4gdGhpcy5hc3NpZ25hcmdzKHYpKTtcclxuICAgICAgICBlbGVtZW50aW5zdGFuY2UuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHMgPT4ge1xyXG4gICAgICAgICAgdHlwZXN0YXRlID0gcztcclxuICAgICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZGF0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldE9wdGlvbnMob2JqOiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ29wdGlvbnMnKS5wYXRjaFZhbHVlKG9iaik7XHJcbiAgfVxyXG4gIG92ZXJyaWRlUmVzb3VyY2UoKSB7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCd0aXRsZScpLmVuYWJsZSgpO1xyXG4gIH1cclxuICBhc3NpZ25hcmdzKGV2dCkge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLm9wdGlvbnMsIGV2dCk7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3RybC1zIHNhdmVcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiAoZXZlbnQud2hpY2ggPT09IDgzIHx8IGV2ZW50LndoaWNoID09PSAxMTUpKSB7XHJcbiAgICAgIHRoaXMudmFsaWQgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveT8ubmV4dCgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnOyBlbHNlIGluZm9cIj5cclxuICA8bWF0LXRvb2xiYXI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiF2YWxpZFwiPjxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L21hdC10b29sYmFyPlxyXG4gIDxzcGFuIGNsYXNzPVwiaGVscFwiPnt7bW9kZWwuaGVscH19PC9zcGFuPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgJm5ic3A7XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNpbmZvPlxyXG4gIDxzcGFuIGNsYXNzPVwiZmFtaWx5XCI+e3ttb2RlbC5mYW1pbHl9fTwvc3Bhbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG48Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGVsLmFyZ3VtZW50cz8ubGVuZ3RoXCI+XHJcbiAgICA8Yml6ZG9jLWxheW91dCBbZmllbGRzXT1cIm1vZGVsLmFyZ3VtZW50c1wiIFttb2RlbF09XCJtb2RlbC5vcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJzZXRPcHRpb25zKCRldmVudClcIj48L2JpemRvYy1sYXlvdXQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3snUHJpdmlsZWdlcyd8dHJhbnNsYXRlfX08L2gyPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlbC5wcml2aWxlZ2VzXCIgZm9ybUdyb3VwTmFtZT1cInByaXZpbGVnZXNcIj5cclxuICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgZm9ybUNvbnRyb2xOYW1lPVwicm9sZXNcIiAqbmdJZj1cInJvbGVzXCI+XHJcbiAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfX08L21hdC1saXN0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0NvbmRpdGlvbid8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwicnVsZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnUHJvZ3JhbW1hYmxlRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT5cclxuIl19
@@ -1,5 +1,4 @@
1
1
  import { Directive, Inject } from "@angular/core";
2
- import { Validators } from "@angular/forms";
3
2
  import { isArray } from "../../core/functions";
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@angular/forms";
@@ -13,44 +12,29 @@ export class DesignerRef {
13
12
  get options() { return this._element.options; }
14
13
  }
15
14
  /** */
16
- export class DesignerElementComponent {
15
+ export class DesignerElementComponentBase {
17
16
  constructor(_fb, _ref) {
18
17
  this._fb = _fb;
19
18
  this._ref = _ref;
20
19
  }
21
20
  get options() { return this.model.options; }
22
- ngOnInit() {
23
- }
24
21
  drop(event, collection) {
25
22
  const element = collection.at(event.previousIndex);
26
23
  collection.removeAt(event.previousIndex);
27
24
  collection.insert(event.currentIndex, element);
28
25
  }
29
26
  }
30
- DesignerElementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerElementComponent, deps: [{ token: i1.FormBuilder }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive });
31
- DesignerElementComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.3", type: DesignerElementComponent, ngImport: i0 });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerElementComponent, decorators: [{
27
+ DesignerElementComponentBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerElementComponentBase, deps: [{ token: i1.FormBuilder }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Directive });
28
+ DesignerElementComponentBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.3", type: DesignerElementComponentBase, ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImport: i0, type: DesignerElementComponentBase, decorators: [{
33
30
  type: Directive
34
31
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: DesignerRef, decorators: [{
35
32
  type: Inject,
36
33
  args: [DesignerRef]
37
34
  }] }]; } });
38
- export class DesignerTypeElementComponent extends DesignerElementComponent {
39
- setPrivilieges(obj) {
40
- this.form.get('privileges').patchValue(obj);
41
- }
42
- setOptions(obj) {
43
- this.form.get('options').patchValue(obj);
44
- }
35
+ export class DesignerTypeElementComponent extends DesignerElementComponentBase {
45
36
  ngOnInit() {
46
- if (this.editMode) {
47
- const options = this._fb.group({});
48
- this.model.arguments?.forEach(a => options.addControl(a.name, this._fb.control(null, a.required ? Validators.required : null)));
49
- this.form.addControl('options', options, { emitEvent: false });
50
- this.model.privileges && this.form.addControl('privileges', this._fb.group({
51
- rule: null,
52
- roles: this._fb.control([]),
53
- }), { emitEvent: false });
37
+ if (this.mode === 'edit') {
54
38
  }
55
39
  }
56
40
  }
@@ -71,7 +55,7 @@ export function programName(name) {
71
55
  replace(NON_NAME_CHAR, '_');
72
56
  }
73
57
  /** */
74
- export class DesignerCubeElementComponent extends DesignerElementComponent {
58
+ export class DesignerCubeElementComponent extends DesignerElementComponentBase {
75
59
  constructor(fb, ref) {
76
60
  super(fb, ref);
77
61
  this.cubes = ref.designer.cubes;
@@ -121,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.3", ngImpor
121
105
  type: Inject,
122
106
  args: [DesignerRef]
123
107
  }] }]; } });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9kZXNpZ25lci5iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFxQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUUvQyxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixTQUF3QixFQUNsQyxRQUFzQjtRQURaLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUFJLENBQUM7SUFDckMsSUFBSSxRQUFRLEtBQW1CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxPQUFPLEtBQWtCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxPQUFPLEtBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Q0FDbkQ7QUFVRCxNQUFNO0FBRU4sTUFBTSxPQUFnQix3QkFBd0I7SUFNNUMsWUFBc0IsR0FBZ0IsRUFDTCxJQUFpQjtRQUQ1QixRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQ0wsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUNsRCxDQUFDO0lBTEQsSUFBSSxPQUFPLEtBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFNOUMsUUFBUTtJQUNSLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBNkIsRUFBRSxVQUFxQjtRQUN2RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFD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QTRCOzJGQUE1Qiw0QkFBNEI7a0JBRGpELFNBQVM7b0ZBaUNvQixXQUFXOzBCQUFwQyxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3RcIjtcclxuaW1wb3J0IHsgU2NvcGVUeXBlIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IEF4ZXNNYXAsIEN1YmVBeGlzLCBDdWJlSW5kZXgsIEN1YmVWaWV3LCBGaWVsZEluZm8sIEd1aWRlU3RlcCwgUG9zaXRpb25Qb2xpY3kgfSBmcm9tIFwiLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyUmVmPE8gPSBhbnk+IHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kZXNpZ25lcjogRGVzaWduZXJNb2RlbCxcclxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRNb2RlbCkgeyB9XHJcbiAgZ2V0IGRlc2lnbmVyKCk6IERlc2lnbmVySW5mbyB7IHJldHVybiB0aGlzLl9kZXNpZ25lcjsgfVxyXG4gIGdldCBlbGVtZW50KCk6IEVsZW1lbnRJbmZvIHsgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7IH1cclxuICBnZXQgb3B0aW9ucygpOiBPIHsgcmV0dXJuIHRoaXMuX2VsZW1lbnQub3B0aW9uczsgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudEluZm8ge1xyXG4gIGZhbWlseT86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBkcmFmdD86IGJvb2xlYW47XHJcbiAgZW1wdHk/OiBib29sZWFuO1xyXG59XHJcbi8qKiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxUID0gYW55PiB7XHJcbiAgYXJndW1lbnRzOiBib29sZWFuO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw8VD47XHJcbiAgZ2V0IG9wdGlvbnMoKTogVCB7IHJldHVybiB0aGlzLm1vZGVsLm9wdGlvbnMgfVxyXG4gIGVkaXRNb2RlOiBib29sZWFuO1xyXG4gIGFic3RyYWN0IGZvcm06IEZvcm1Hcm91cDtcclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIEBJbmplY3QoRGVzaWduZXJSZWYpIHByb3RlY3RlZCBfcmVmOiBEZXNpZ25lclJlZikge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8Rm9ybUdyb3VwPiwgY29sbGVjdGlvbjogRm9ybUFycmF5KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gY29sbGVjdGlvbi5hdChldmVudC5wcmV2aW91c0luZGV4KTtcclxuICAgIGNvbGxlY3Rpb24ucmVtb3ZlQXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICBjb2xsZWN0aW9uLmluc2VydChldmVudC5jdXJyZW50SW5kZXgsIGVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQ8VCA9IGFueT4gZXh0ZW5kcyBEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8VD4ge1xyXG4gIHNldFByaXZpbGllZ2VzKG9iajogUHJpdmlsZWdlc01vZGVsKSB7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdwcml2aWxlZ2VzJykucGF0Y2hWYWx1ZShvYmopO1xyXG4gIH1cclxuICBzZXRPcHRpb25zKG9iajogVCkge1xyXG4gICAgdGhpcy5mb3JtLmdldCgnb3B0aW9ucycpLnBhdGNoVmFsdWUob2JqKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZmIuZ3JvdXAoe30pO1xyXG4gICAgICB0aGlzLm1vZGVsLmFyZ3VtZW50cz8uZm9yRWFjaChhID0+IG9wdGlvbnMuYWRkQ29udHJvbChhLm5hbWUsIHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgYS5yZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsKSkpO1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIG9wdGlvbnMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5tb2RlbC5wcml2aWxlZ2VzICYmIHRoaXMuZm9ybS5hZGRDb250cm9sKCdwcml2aWxlZ2VzJyxcclxuICAgICAgICB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgICAgICBydWxlOiBudWxsLFxyXG4gICAgICAgICAgcm9sZXM6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nW10+KFtdKSxcclxuICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgTkFNRV9DSEFSID0gL1tBLVpdKy9nLFxyXG4gIE5PTl9OQU1FX0NIQVIgPSAvW15cXHddKy9nO1xyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3JhbU5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIG5hbWUuXHJcbiAgICByZXBsYWNlKCcgJywgJy0nKS5cclxuICAgIHJlcGxhY2UoTkFNRV9DSEFSLCAoYywgaSkgPT4gKGkgPiAwICYmIG5hbWUuY2hhckF0KGkgLSAxKSAhPT0gJy0nID8gJy0nIDogJycpICsgYy50b0xvd2VyQ2FzZSgpKS5cclxuICAgIHJlcGxhY2UoTk9OX05BTUVfQ0hBUiwgJ18nKTtcclxufVxyXG5cclxuLyoqICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzaWduZXJDdWJlRWxlbWVudENvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgY3ViZTogRWxlbWVudE1vZGVsO1xyXG4gIHNlY29uZGFyeUF4ZXM6IEN1YmVBeGlzW107XHJcbiAgdGhpcmRBeGVzOiBDdWJlQXhpc1tdO1xyXG4gIGZvcnRoQXhlczogQ3ViZUF4aXNbXTtcclxuICBwcm90ZWN0ZWQgX3NlY29uZGFyeUF4ZXMoYXhpczogc3RyaW5nW10gfCBzdHJpbmcpIHtcclxuICAgIGlmICghYXhpcykgcmV0dXJuO1xyXG4gICAgdGhpcy5zZWNvbmRhcnlBeGVzID0gdGhpcy5jdWJlLmF4ZXMuZmlsdGVyKGEgPT4gaXNBcnJheShheGlzKSA/IGF4aXMuaW5kZXhPZihhLm5hbWUpIDwgMCA6IGF4aXMgIT09IGEubmFtZSk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBfdGhpcmRBeGVzKGF4aXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XHJcbiAgICBpZiAoIWF4aXMpIHJldHVybjtcclxuICAgIHRoaXMudGhpcmRBeGVzID0gdGhpcy5zZWNvbmRhcnlBeGVzLmZpbHRlcihhID0+IGlzQXJyYXkoYXhpcykgPyBheGlzLmluZGV4T2YoYS5uYW1lKSA8IDAgOiBhLm5hbWUgIT09IGF4aXMpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgX2ZvcnRoQXhlcyhheGlzOiBzdHJpbmdbXSB8IHN0cmluZykge1xyXG4gICAgaWYgKCFheGlzKSByZXR1cm47XHJcbiAgICB0aGlzLmZvcnRoQXhlcyA9IHRoaXMudGhpcmRBeGVzLmZpbHRlcihhID0+IGlzQXJyYXkoYXhpcykgPyBheGlzLmluZGV4T2YoYS5uYW1lKSA8IDAgOiBhLm5hbWUgIT09IGF4aXMpO1xyXG4gIH1cclxuICBjdWJlU2VsZWN0ZWQoZXZ0OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHRoaXMuY3ViZSA9IGV2dC52YWx1ZTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2N1YmUnKS5zZXRWYWx1ZSgoZXZ0LnZhbHVlIGFzIEVsZW1lbnRNb2RlbCkubmFtZSk7XHJcbiAgfVxyXG4gIHhBeGlzU2VsZWN0ZWQoZXZ0OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHRoaXMuX3NlY29uZGFyeUF4ZXMoZXZ0LnZhbHVlKTtcclxuICB9XHJcbiAgc2VyaWVzU2VsZWN0ZWQoZXZ0OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHRoaXMuX3RoaXJkQXhlcyhldnQudmFsdWUpO1xyXG4gIH1cclxuICBmb3J0aFNlbGVjdGVkKGV2dDogTWF0U2VsZWN0Q2hhbmdlKSB7XHJcbiAgICB0aGlzLl9mb3J0aEF4ZXMoZXZ0LnZhbHVlKTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcmVmOiBEZXNpZ25lclJlZikge1xyXG4gICAgc3VwZXIoZmIsIHJlZik7XHJcbiAgICB0aGlzLmN1YmVzID0gcmVmLmRlc2lnbmVyLmN1YmVzO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IGN1YmVJZCA9IHRoaXMub3B0aW9uc1snY3ViZSddO1xyXG4gICAgdGhpcy5jdWJlID0gIWN1YmVJZCA/IHRoaXMuY3ViZXNbMF0gYXMgRWxlbWVudE1vZGVsIDogdGhpcy5jdWJlcy5maW5kKGMgPT4gYy5uYW1lID09PSBjdWJlSWQpIGFzIEVsZW1lbnRNb2RlbDtcclxuICAgIGlmICh0aGlzLm9wdGlvbnNbJ3hBeGlzJ10pIHtcclxuICAgICAgdGhpcy5fc2Vjb25kYXJ5QXhlcyh0aGlzLm9wdGlvbnNbJ3hBeGlzJ10pO1xyXG4gICAgICB0aGlzLm9wdGlvbnNbJ3NlcmllcyddICYmIHRoaXMuX3RoaXJkQXhlcyh0aGlzLm9wdGlvbnNbJ3NlcmllcyddKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEZXNpZ25lckluZm8ge1xyXG4gIHR5cGVzOiBFbGVtZW50SW5mb1tdO1xyXG4gIGd1aWRlczogRWxlbWVudEluZm9bXTtcclxuICByZXBvcnRzOiBFbGVtZW50SW5mb1tdO1xyXG4gIHRSZXBvcnRzOiBUZW1wbGF0ZUluZm9bXTtcclxuICBmb3JtczogRWxlbWVudEluZm9bXTtcclxuICBjdWJlczogRWxlbWVudEluZm9bXTtcclxuICB1dGlsaXRpZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgZm9sZGVyczogRWxlbWVudEluZm9bXTtcclxuICByb2xlczogRWxlbWVudEluZm9bXTtcclxuICBydWxlczogRWxlbWVudEluZm9bXTtcclxuICB2aWV3czogRWxlbWVudEluZm9bXTtcclxuICB3aWRnZXRzOiBFbGVtZW50SW5mb1tdO1xyXG4gIGFjdGlvbnM6IEVsZW1lbnRJbmZvW107XHJcbiAgc3RhdGVzOiBFbGVtZW50SW5mb1tdO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVzaWduZXJNb2RlbCB7XHJcbiAgdHlwZXM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgdFR5cGVzOiBUZW1wbGF0ZUluZm9bXTtcclxuICBndWlkZXM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgcmVwb3J0czogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICB0UmVwb3J0czogVGVtcGxhdGVJbmZvW107XHJcbiAgZm9ybXM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgdEZvcm1zOiBUZW1wbGF0ZUluZm9bXTtcclxuICBjdWJlczogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICB0Q3ViZXM6IFRlbXBsYXRlSW5mb1tdO1xyXG4gIHV0aWxpdGllczogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICB0VXRpbGl0aWVzOiBUZW1wbGF0ZUluZm9bXTtcclxuICBmb2xkZXJzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHJvbGVzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHJ1bGVzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHRSdWxlczogVGVtcGxhdGVJbmZvW107XHJcbiAgdmlld3M6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgdFZpZXdzOiBUZW1wbGF0ZUluZm9bXTtcclxuICB3aWRnZXRzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHRXaWRnZXRzOiBUZW1wbGF0ZUluZm9bXTtcclxuICBhY3Rpb25zOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHRBY3Rpb25zOiBUZW1wbGF0ZUluZm9bXTtcclxuICBzdGF0ZXM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUluZm8ge1xyXG4gIHRlbXBsYXRlPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgZmFtaWx5Pzogc3RyaW5nO1xyXG4gIGhlbHA/OiBzdHJpbmc7XHJcbiAgdHlwZT86IHN0cmluZztcclxuICBhcmd1bWVudHM/OiBGaWVsZEluZm9bXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRNb2RlbDxUID0gYW55PiB7XHJcbiAgb3JkaW5hbD86IG51bWJlcjtcclxuICBoZWxwPzogc3RyaW5nO1xyXG4gIGNvbmZpZ3VyYXRpb25GaWxlPzogc3RyaW5nO1xyXG4gIHRlbXBsYXRlPzogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgcmVzb3VyY2U/OiBib29sZWFuO1xyXG4gIGNvcHlPZj86IHN0cmluZztcclxuICBmYW1pbHk/OiBzdHJpbmc7XHJcbiAgdHlwZT86IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgZHJhZnQ/OiBib29sZWFuO1xyXG4gIGVtcHR5PzogYm9vbGVhbjtcclxuICBvcHRpb25zPzogVDtcclxuICBhcmd1bWVudHM/OiBGaWVsZEluZm9bXTtcclxuICBwcml2aWxlZ2VzPzogUHJpdmlsZWdlc01vZGVsO1xyXG4gIGFub21hbHk/OiBBbm9tYWx5UG9saWN5O1xyXG4gIGFzc2lnbmFibGU/OiBib29sZWFuO1xyXG4gIHBvc2l0aW9uPzogUG9zaXRpb25Qb2xpY3k7XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgc3RlcHM6IEd1aWRlU3RlcFtdO1xyXG4gIGN1cnJlbmN5Q29kZT86IHN0cmluZztcclxuICBheGVzPzogQ3ViZUF4aXNbXTtcclxuICB2aWV3cz86IEN1YmVWaWV3W107XHJcbiAgaW5kaWNlcz86IEN1YmVJbmRleFtdO1xyXG4gIHNjb3BlPzogU2NvcGVUeXBlO1xyXG4gIGNvbG9yPzogc3RyaW5nO1xyXG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcclxuICBydWxlcz86IFBlcm1pc3Npb25Nb2RlbFtdO1xyXG4gIHBvc2l0aW9ucz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfTtcclxuICBwYXR0ZXJucz86IFBhdHRlcm5Nb2RlbFtdO1xyXG59XHJcbmV4cG9ydCB0eXBlIEFub21hbHlQb2xpY3kgPSAnUG9zaXRpb25zJyB8ICdSZWNpcGllbnRzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVybk1vZGVsIHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGF4ZXM6IEF4ZXNNYXA7XHJcbiAgcnVsZT86IHN0cmluZztcclxuICByb2xlcz86IHN0cmluZ1tdO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbk1vZGVsIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBydWxlPzogc3RyaW5nO1xyXG4gIHJvbGVzPzogc3RyaW5nW107XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBQcml2aWxlZ2VzTW9kZWwge1xyXG4gIHJ1bGU/OiBzdHJpbmc7XHJcbiAgcm9sZXM/OiBzdHJpbmdbXTtcclxufVxyXG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vY29uZmlndXJhdGlvbi1kZXNpZ25lci9kZXNpZ25lci5iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUtsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUUvQyxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixTQUF3QixFQUNsQyxRQUFzQjtRQURaLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBYztJQUFJLENBQUM7SUFDckMsSUFBSSxRQUFRLEtBQW1CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxPQUFPLEtBQWtCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxPQUFPLEtBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Q0FDbkQ7QUFnQkQsTUFBTTtBQUVOLE1BQU0sT0FBZ0IsNEJBQTRCO0lBS2hELFlBQXNCLEdBQWdCLEVBQ0wsSUFBaUI7UUFENUIsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNMLFNBQUksR0FBSixJQUFJLENBQWE7SUFDbEQsQ0FBQztJQUpELElBQUksT0FBTyxLQUFRLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFDO0lBSzlDLElBQUksQ0FBQyxLQUE2QixFQUFFLFVBQXFCO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFB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aENELDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQURqRCxTQUFTO29GQWlDb0IsV0FBVzswQkFBcEMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xyXG5pbXBvcnQgeyBTY29wZVR5cGUgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vY29yZS9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgQXhlc01hcCwgQ3ViZUF4aXMsIEN1YmVJbmRleCwgQ3ViZVZpZXcsIEZpZWxkSW5mbywgR3VpZGVTdGVwLCBQb3NpdGlvblBvbGljeSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5leHBvcnQgY2xhc3MgRGVzaWduZXJSZWY8TyA9IGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Rlc2lnbmVyOiBEZXNpZ25lck1vZGVsLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudE1vZGVsKSB7IH1cclxuICBnZXQgZGVzaWduZXIoKTogRGVzaWduZXJJbmZvIHsgcmV0dXJuIHRoaXMuX2Rlc2lnbmVyOyB9XHJcbiAgZ2V0IGVsZW1lbnQoKTogRWxlbWVudEluZm8geyByZXR1cm4gdGhpcy5fZWxlbWVudDsgfVxyXG4gIGdldCBvcHRpb25zKCk6IE8geyByZXR1cm4gdGhpcy5fZWxlbWVudC5vcHRpb25zOyB9XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50SW5mbzxPID0gYW55PiB7XHJcbiAgZmFtaWx5Pzogc3RyaW5nO1xyXG4gIHR5cGU/OiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGRyYWZ0PzogYm9vbGVhbjtcclxuICBlbXB0eT86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8VD4ge1xyXG4gIG1vZGVsOiBFbGVtZW50SW5mbzxUPjtcclxuICBtb2RlOiBEZXNpZ25Nb2RlO1xyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxufVxyXG5leHBvcnQgZGVjbGFyZSB0eXBlIERlc2lnbk1vZGUgPSAnZWRpdCcgfCAnd2lkZ2V0JztcclxuLyoqICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50QmFzZTxUID0gYW55PiBpbXBsZW1lbnRzIERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxUPiB7XHJcbiAgbW9kZTogRGVzaWduTW9kZTtcclxuICBtb2RlbDogRWxlbWVudE1vZGVsPFQ+O1xyXG4gIGdldCBvcHRpb25zKCk6IFQgeyByZXR1cm4gdGhpcy5tb2RlbC5vcHRpb25zIH1cclxuICBhYnN0cmFjdCBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSBwcm90ZWN0ZWQgX3JlZjogRGVzaWduZXJSZWYpIHtcclxuICB9XHJcbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8Rm9ybUdyb3VwPiwgY29sbGVjdGlvbjogRm9ybUFycmF5KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gY29sbGVjdGlvbi5hdChldmVudC5wcmV2aW91c0luZGV4KTtcclxuICAgIGNvbGxlY3Rpb24ucmVtb3ZlQXQoZXZlbnQucHJldmlvdXNJbmRleCk7XHJcbiAgICBjb2xsZWN0aW9uLmluc2VydChldmVudC5jdXJyZW50SW5kZXgsIGVsZW1lbnQpO1xyXG4gIH1cclxufVxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQ8VCA9IGFueT4gZXh0ZW5kcyBEZXNpZ25lckVsZW1lbnRDb21wb25lbnRCYXNlPFQ+IHtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0Jykge1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgTkFNRV9DSEFSID0gL1tBLVpdKy9nLFxyXG4gIE5PTl9OQU1FX0NIQVIgPSAvW15cXHddKy9nO1xyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3JhbU5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIG5hbWUuXHJcbiAgICByZXBsYWNlKCcgJywgJy0nKS5cclxuICAgIHJlcGxhY2UoTkFNRV9DSEFSLCAoYywgaSkgPT4gKGkgPiAwICYmIG5hbWUuY2hhckF0KGkgLSAxKSAhPT0gJy0nID8gJy0nIDogJycpICsgYy50b0xvd2VyQ2FzZSgpKS5cclxuICAgIHJlcGxhY2UoTk9OX05BTUVfQ0hBUiwgJ18nKTtcclxufVxyXG5cclxuLyoqICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGVzaWduZXJDdWJlRWxlbWVudENvbXBvbmVudDxUID0gYW55PiBleHRlbmRzIERlc2lnbmVyRWxlbWVudENvbXBvbmVudEJhc2U8VD4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHJlYWRvbmx5IGN1YmVzOiBFbGVtZW50SW5mb1tdO1xyXG4gIGN1YmU6IEVsZW1lbnRNb2RlbDtcclxuICBzZWNvbmRhcnlBeGVzOiBDdWJlQXhpc1tdO1xyXG4gIHRoaXJkQXhlczogQ3ViZUF4aXNbXTtcclxuICBmb3J0aEF4ZXM6IEN1YmVBeGlzW107XHJcbiAgcHJvdGVjdGVkIF9zZWNvbmRhcnlBeGVzKGF4aXM6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XHJcbiAgICBpZiAoIWF4aXMpIHJldHVybjtcclxuICAgIHRoaXMuc2Vjb25kYXJ5QXhlcyA9IHRoaXMuY3ViZS5heGVzLmZpbHRlcihhID0+IGlzQXJyYXkoYXhpcykgPyBheGlzLmluZGV4T2YoYS5uYW1lKSA8IDAgOiBheGlzICE9PSBhLm5hbWUpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgX3RoaXJkQXhlcyhheGlzOiBzdHJpbmdbXSB8IHN0cmluZykge1xyXG4gICAgaWYgKCFheGlzKSByZXR1cm47XHJcbiAgICB0aGlzLnRoaXJkQXhlcyA9IHRoaXMuc2Vjb25kYXJ5QXhlcy5maWx0ZXIoYSA9PiBpc0FycmF5KGF4aXMpID8gYXhpcy5pbmRleE9mKGEubmFtZSkgPCAwIDogYS5uYW1lICE9PSBheGlzKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIF9mb3J0aEF4ZXMoYXhpczogc3RyaW5nW10gfCBzdHJpbmcpIHtcclxuICAgIGlmICghYXhpcykgcmV0dXJuO1xyXG4gICAgdGhpcy5mb3J0aEF4ZXMgPSB0aGlzLnRoaXJkQXhlcy5maWx0ZXIoYSA9PiBpc0FycmF5KGF4aXMpID8gYXhpcy5pbmRleE9mKGEubmFtZSkgPCAwIDogYS5uYW1lICE9PSBheGlzKTtcclxuICB9XHJcbiAgY3ViZVNlbGVjdGVkKGV2dDogTWF0U2VsZWN0Q2hhbmdlKSB7XHJcbiAgICB0aGlzLmN1YmUgPSBldnQudmFsdWU7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdjdWJlJykuc2V0VmFsdWUoKGV2dC52YWx1ZSBhcyBFbGVtZW50TW9kZWwpLm5hbWUpO1xyXG4gIH1cclxuICB4QXhpc1NlbGVjdGVkKGV2dDogTWF0U2VsZWN0Q2hhbmdlKSB7XHJcbiAgICB0aGlzLl9zZWNvbmRhcnlBeGVzKGV2dC52YWx1ZSk7XHJcbiAgfVxyXG4gIHNlcmllc1NlbGVjdGVkKGV2dDogTWF0U2VsZWN0Q2hhbmdlKSB7XHJcbiAgICB0aGlzLl90aGlyZEF4ZXMoZXZ0LnZhbHVlKTtcclxuICB9XHJcbiAgZm9ydGhTZWxlY3RlZChldnQ6IE1hdFNlbGVjdENoYW5nZSkge1xyXG4gICAgdGhpcy5fZm9ydGhBeGVzKGV2dC52YWx1ZSk7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKGZiOiBGb3JtQnVpbGRlcixcclxuICAgIEBJbmplY3QoRGVzaWduZXJSZWYpIHJlZjogRGVzaWduZXJSZWYpIHtcclxuICAgIHN1cGVyKGZiLCByZWYpO1xyXG4gICAgdGhpcy5jdWJlcyA9IHJlZi5kZXNpZ25lci5jdWJlcztcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBjdWJlSWQgPSB0aGlzLm9wdGlvbnNbJ2N1YmUnXTtcclxuICAgIHRoaXMuY3ViZSA9ICFjdWJlSWQgPyB0aGlzLmN1YmVzWzBdIGFzIEVsZW1lbnRNb2RlbCA6IHRoaXMuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gY3ViZUlkKSBhcyBFbGVtZW50TW9kZWw7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zWyd4QXhpcyddKSB7XHJcbiAgICAgIHRoaXMuX3NlY29uZGFyeUF4ZXModGhpcy5vcHRpb25zWyd4QXhpcyddKTtcclxuICAgICAgdGhpcy5vcHRpb25zWydzZXJpZXMnXSAmJiB0aGlzLl90aGlyZEF4ZXModGhpcy5vcHRpb25zWydzZXJpZXMnXSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVzaWduZXJJbmZvIHtcclxuICB0eXBlczogRWxlbWVudEluZm9bXTtcclxuICBndWlkZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgcmVwb3J0czogRWxlbWVudEluZm9bXTtcclxuICB0UmVwb3J0czogVGVtcGxhdGVJbmZvW107XHJcbiAgZm9ybXM6IEVsZW1lbnRJbmZvW107XHJcbiAgY3ViZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgdXRpbGl0aWVzOiBFbGVtZW50SW5mb1tdO1xyXG4gIGZvbGRlcnM6IEVsZW1lbnRJbmZvW107XHJcbiAgcm9sZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgcnVsZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgdmlld3M6IEVsZW1lbnRJbmZvW107XHJcbiAgd2lkZ2V0czogRWxlbWVudEluZm9bXTtcclxuICBhY3Rpb25zOiBFbGVtZW50SW5mb1tdO1xyXG4gIHN0YXRlczogRWxlbWVudEluZm9bXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIERlc2lnbmVyTW9kZWwge1xyXG4gIHR5cGVzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHRUeXBlczogVGVtcGxhdGVJbmZvW107XHJcbiAgZ3VpZGVzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHJlcG9ydHM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgdFJlcG9ydHM6IFRlbXBsYXRlSW5mb1tdO1xyXG4gIGZvcm1zOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHRGb3JtczogVGVtcGxhdGVJbmZvW107XHJcbiAgY3ViZXM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgdEN1YmVzOiBUZW1wbGF0ZUluZm9bXTtcclxuICB1dGlsaXRpZXM6IEVsZW1lbnRNb2RlbDxhbnk+W107XHJcbiAgdFV0aWxpdGllczogVGVtcGxhdGVJbmZvW107XHJcbiAgZm9sZGVyczogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICByb2xlczogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICBydWxlczogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICB0UnVsZXM6IFRlbXBsYXRlSW5mb1tdO1xyXG4gIHZpZXdzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG4gIHRWaWV3czogVGVtcGxhdGVJbmZvW107XHJcbiAgd2lkZ2V0czogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICB0V2lkZ2V0czogVGVtcGxhdGVJbmZvW107XHJcbiAgYWN0aW9uczogRWxlbWVudE1vZGVsPGFueT5bXTtcclxuICB0QWN0aW9uczogVGVtcGxhdGVJbmZvW107XHJcbiAgc3RhdGVzOiBFbGVtZW50TW9kZWw8YW55PltdO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGVtcGxhdGVJbmZvIHtcclxuICB0ZW1wbGF0ZT86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIGZhbWlseT86IHN0cmluZztcclxuICBoZWxwPzogc3RyaW5nO1xyXG4gIHR5cGU/OiBzdHJpbmc7XHJcbiAgYXJndW1lbnRzPzogRmllbGRJbmZvW107XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50TW9kZWw8VCA9IGFueT4ge1xyXG4gIG9yZGluYWw/OiBudW1iZXI7XHJcbiAgaGVscD86IHN0cmluZztcclxuICBjb25maWd1cmF0aW9uRmlsZT86IHN0cmluZztcclxuICB0ZW1wbGF0ZT86IHN0cmluZztcclxuICBpY29uPzogc3RyaW5nO1xyXG4gIHJlc291cmNlPzogYm9vbGVhbjtcclxuICBjb3B5T2Y/OiBzdHJpbmc7XHJcbiAgZmFtaWx5Pzogc3RyaW5nO1xyXG4gIHR5cGU/OiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGRyYWZ0PzogYm9vbGVhbjtcclxuICBlbXB0eT86IGJvb2xlYW47XHJcbiAgb3B0aW9ucz86IFQ7XHJcbiAgYXJndW1lbnRzPzogRmllbGRJbmZvW107XHJcbiAgcHJpdmlsZWdlcz86IFByaXZpbGVnZXNNb2RlbDtcclxuICBhbm9tYWx5PzogQW5vbWFseVBvbGljeTtcclxuICBhc3NpZ25hYmxlPzogYm9vbGVhbjtcclxuICBwb3NpdGlvbj86IFBvc2l0aW9uUG9saWN5O1xyXG4gIGRhdGFUeXBlPzogc3RyaW5nO1xyXG4gIHN0ZXBzPzogR3VpZGVTdGVwW107XHJcbiAgY3VycmVuY3lDb2RlPzogc3RyaW5nO1xyXG4gIGF4ZXM/OiBDdWJlQXhpc1tdO1xyXG4gIHZpZXdzPzogQ3ViZVZpZXdbXTtcclxuICBpbmRpY2VzPzogQ3ViZUluZGV4W107XHJcbiAgc2NvcGU/OiBTY29wZVR5cGU7XHJcbiAgY29sb3I/OiBzdHJpbmc7XHJcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xyXG4gIHJ1bGVzPzogUGVybWlzc2lvbk1vZGVsW107XHJcbiAgcG9zaXRpb25zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xyXG4gIHBhdHRlcm5zPzogUGF0dGVybk1vZGVsW107XHJcbn1cclxuZXhwb3J0IHR5cGUgQW5vbWFseVBvbGljeSA9ICdQb3NpdGlvbnMnIHwgJ1JlY2lwaWVudHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXR0ZXJuTW9kZWwge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgYXhlczogQXhlc01hcDtcclxuICBydWxlPzogc3RyaW5nO1xyXG4gIHJvbGVzPzogc3RyaW5nW107XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uTW9kZWwge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHJ1bGU/OiBzdHJpbmc7XHJcbiAgcm9sZXM/OiBzdHJpbmdbXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIFByaXZpbGVnZXNNb2RlbCB7XHJcbiAgcnVsZT86IHN0cmluZztcclxuICByb2xlcz86IHN0cmluZ1tdO1xyXG59XHJcbiJdfQ==