ngx-st-tables 1.0.0 → 1.0.2

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.
package/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # NgxLocalTable
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project ngx-st-tables` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-st-tables`.
8
- > Note: Don't forget to add `--project ngx-st-tables` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build ngx-st-tables` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build ngx-st-tables`, go to the dist folder `cd dist/ngx-st-tables` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test ngx-st-tables` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
1
+ # NgxLocalTable
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project ngx-st-tables` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-st-tables`.
8
+ > Note: Don't forget to add `--project ngx-st-tables` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build ngx-st-tables` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build ngx-st-tables`, go to the dist folder `cd dist/ngx-st-tables` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test ngx-st-tables` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,145 @@
1
+
2
+ .search-form {
3
+ button {
4
+ height: 40px;
5
+ }
6
+
7
+ mat-form-field {
8
+ &:first-child {
9
+ padding-left: 0;
10
+ }
11
+
12
+ &:last-child {
13
+ padding-right: 0;
14
+ }
15
+ }
16
+
17
+
18
+ .clear {
19
+ padding: 0;
20
+
21
+ i {
22
+ height: 20px;
23
+ width: 20px;
24
+ font-size: 20px;
25
+ cursor: pointer;
26
+ }
27
+ }
28
+ }
29
+
30
+ table {
31
+ width: 100%;
32
+
33
+ &::ng-deep {
34
+ thead {
35
+ tr {
36
+ background-color: #fff9c4;
37
+
38
+ th {
39
+ border-color: #fdd835;
40
+ }
41
+ }
42
+ }
43
+
44
+ tbody {
45
+ & > tr {
46
+ cursor: pointer;
47
+
48
+ &.active {
49
+ background-color: #a5d6a7;
50
+ }
51
+
52
+ &:hover {
53
+ background-color: #a5d6a7;
54
+ }
55
+
56
+ &.disabled {
57
+ cursor: not-allowed;
58
+
59
+ &:hover {
60
+ background-color: inherit;
61
+ }
62
+ }
63
+
64
+ &.detail-row {
65
+ height: 0;
66
+ cursor: default;
67
+
68
+ &:hover {
69
+ background-color: transparent;
70
+ }
71
+
72
+ .element-detail {
73
+ overflow: hidden;
74
+ display: flex;
75
+
76
+ p {
77
+ padding: 20px 0;
78
+ margin-bottom: 0;
79
+ white-space: pre-wrap
80
+ }
81
+ }
82
+ }
83
+
84
+ td {
85
+ i.active-row {
86
+ color: #1b5e20;
87
+ font-weight: bold;
88
+ font-size: 25px;
89
+ height: 25px;
90
+ width: 25px;
91
+ margin-top: 2px;
92
+ }
93
+ }
94
+
95
+ td {
96
+ & > div {
97
+ max-height: 200px;
98
+ overflow: hidden;
99
+ overflow-y: auto;
100
+ }
101
+ a {
102
+ button {
103
+ color: #000;
104
+ }
105
+
106
+ i {
107
+ color: #333;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+ .mat-column-active {
115
+ width: 48px;
116
+ }
117
+ }
118
+
119
+ &.no-hover {
120
+ &::ng-deep {
121
+
122
+ tbody {
123
+ tr {
124
+ cursor: default;
125
+
126
+ &.active {
127
+ background-color: transparent;
128
+ }
129
+
130
+ &:hover {
131
+ background-color: transparent;
132
+ }
133
+ }
134
+ }
135
+ }
136
+ }
137
+
138
+ &.admin-table {
139
+ &::ng-deep {
140
+ .actions-cell {
141
+ width: 100px;
142
+ }
143
+ }
144
+ }
145
+ }
@@ -50,10 +50,10 @@ export class ConfigurationsComponent {
50
50
  }
51
51
  }
52
52
  ConfigurationsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ConfigurationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
53
- ConfigurationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ConfigurationsComponent, selector: "app-configurations[configurationsSettings]", inputs: { configurationsSettings: "configurationsSettings", configurations: "configurations", initSelectedConfig: "initSelectedConfig" }, outputs: { createNewConfig: "createNewConfig", removeConfig: "removeConfig", changeConfig: "changeConfig" }, ngImport: i0, template: "<div class=\"col-auto row align-items-center\" style=\"padding: 0;\">\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\n <mat-option [value]=\"null\"></mat-option>\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n add\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n delete\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"creatingConfiguration\">\n <mat-form-field class=\"col-auto\">\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\n <input matInput [(ngModel)]=\"createConfigurationName\">\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"removingConfiguration\">\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n</div>\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4.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"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
+ ConfigurationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: ConfigurationsComponent, selector: "app-configurations[configurationsSettings]", inputs: { configurationsSettings: "configurationsSettings", configurations: "configurations", initSelectedConfig: "initSelectedConfig" }, outputs: { createNewConfig: "createNewConfig", removeConfig: "removeConfig", changeConfig: "changeConfig" }, ngImport: i0, template: "<div class=\"col-auto row align-items-center\" style=\"padding: 0;\">\r\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\r\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\r\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\r\n <mat-option [value]=\"null\"></mat-option>\r\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n add\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n delete\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"creatingConfiguration\">\r\n <mat-form-field class=\"col-auto\">\r\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\r\n <input matInput [(ngModel)]=\"createConfigurationName\">\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"removingConfiguration\">\r\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n</div>\r\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"], components: [{ type: i1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i2.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i4.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"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatLabel, selector: "mat-label" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ConfigurationsComponent, decorators: [{
55
55
  type: Component,
56
- args: [{ selector: 'app-configurations[configurationsSettings]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"col-auto row align-items-center\" style=\"padding: 0;\">\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\n <mat-option [value]=\"null\"></mat-option>\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\n </mat-select>\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n add\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n delete\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"creatingConfiguration\">\n <mat-form-field class=\"col-auto\">\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\n <input matInput [(ngModel)]=\"createConfigurationName\">\n </mat-form-field>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"removingConfiguration\">\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n done\n </span>\n </button>\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\n <span class=\"material-icons-outlined\">\n close\n </span>\n </button>\n </ng-container>\n</div>\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"] }]
56
+ args: [{ selector: 'app-configurations[configurationsSettings]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"col-auto row align-items-center\" style=\"padding: 0;\">\r\n <ng-container *ngIf=\"!creatingConfiguration && !removingConfiguration\">\r\n <mat-form-field class=\"col-auto\" style=\"padding-right: 0;\">\r\n <mat-label>{{configurationsSettings.selectLabel}}</mat-label>\r\n <mat-select [(ngModel)]=\"selectedConfig\" (ngModelChange)=\"selectedConfigChanged()\">\r\n <mat-option [value]=\"null\"></mat-option>\r\n <mat-option *ngFor=\"let config of configurations\" [value]=\"config\">{{config.configName}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"showCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n add\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" [disabled]=\"!selectedConfig\" (click)=\"deleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n delete\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"creatingConfiguration\">\r\n <mat-form-field class=\"col-auto\">\r\n <mat-label>{{configurationsSettings.createLabel}}</mat-label>\r\n <input matInput [(ngModel)]=\"createConfigurationName\">\r\n </mat-form-field>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"saveCreateConfiguration()\" [disabled]=\"!createConfigurationName\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"hideCreateConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"removingConfiguration\">\r\n <p class=\"col-auto\" style=\"margin: 0; font-weight: bold;font-size: 16px;\">{{configurationsSettings.deleteWarningTitle}}</p>\r\n <button mat-icon-button class=\"col-auto green-icon\" (click)=\"acceptDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n done\r\n </span>\r\n </button>\r\n <button mat-icon-button class=\"col-auto red-icon\" (click)=\"declineDeleteConfiguration()\">\r\n <span class=\"material-icons-outlined\">\r\n close\r\n </span>\r\n </button>\r\n </ng-container>\r\n</div>\r\n", styles: [".green-icon span{color:#2e7d32}.red-icon span{color:#c62828}\n"] }]
57
57
  }], ctorParameters: function () { return []; }, propDecorators: { configurationsSettings: [{
58
58
  type: Input
59
59
  }], configurations: [{
@@ -67,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
67
67
  }], changeConfig: [{
68
68
  type: Output
69
69
  }] } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXRHLE1BQU0sT0FBTyx1QkFBdUI7SUE2QmhDO1FBZkEsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFFN0IsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBSzlCLENBQUM7SUF0QkQsSUFDSSxrQkFBa0IsQ0FBQyxNQUErQztRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBcUJELFFBQVE7SUFDUixDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7b0hBbkVRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlVQ1ZwQyxvL0VBb0RBOzJGRDFDYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksNENBQTRDLG1CQUdyQyx1QkFBdUIsQ0FBQyxNQUFNOzBFQUsvQyxzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdENvbmZpZ3VyYXRpb25zU2V0dGluZ3NNb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9sb2NhbC10YWJsZS9zdC1jb25maWd1cmF0aW9ucy1zZXR0aW5ncy5tb2RlbFwiO1xuaW1wb3J0IHtTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9sb2NhbC10YWJsZS9zdC1sb2NhbC1zdG9yYWdlLWNvbmZpZ3VyYXRpb24ubW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbnNTZXR0aW5nc10nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBASW5wdXQoKVxuICAgIGNvbmZpZ3VyYXRpb25zU2V0dGluZ3M6IFN0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsO1xuXG4gICAgQElucHV0KClcbiAgICBjb25maWd1cmF0aW9uczogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWxbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGluaXRTZWxlY3RlZENvbmZpZyhjb25maWc6IFN0TG9jYWxTdG9yYWdlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIGNyZWF0ZU5ld0NvbmZpZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcmVtb3ZlQ29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBjaGFuZ2VDb25maWcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgICBjcmVhdGluZ0NvbmZpZ3VyYXRpb24gPSBmYWxzZTtcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xuXG4gICAgcmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG5cbiAgICBzZWxlY3RlZENvbmZpZzogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgfVxuXG4gICAgc2hvd0NyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMuY3JlYXRpbmdDb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xuICAgIH1cblxuICAgIGhpZGVDcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgICAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbmZpZ3VyYXRpb25OYW1lID0gJyc7XG4gICAgfVxuXG4gICAgc2F2ZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMuY3JlYXRpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xuICAgICAgICB0aGlzLmNyZWF0ZU5ld0NvbmZpZy5lbWl0KHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhY2NlcHREZWxldGVDb25maWd1cmF0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbW92aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZW1vdmVDb25maWcuZW1pdCh0aGlzLnNlbGVjdGVkQ29uZmlnIS5jb25maWdJZCk7XG4gICAgfVxuXG4gICAgZGVjbGluZURlbGV0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRDb25maWdDaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLmNoYW5nZUNvbmZpZy5lbWl0KHRoaXMuc2VsZWN0ZWRDb25maWc/LmNvbmZpZ0lkIHx8IG51bGwpO1xuICAgIH1cbn1cblxuXG4iLCI8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMDtcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNyZWF0aW5nQ29uZmlndXJhdGlvbiAmJiAhcmVtb3ZpbmdDb25maWd1cmF0aW9uXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAwO1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2NvbmZpZ3VyYXRpb25zU2V0dGluZ3Muc2VsZWN0TGFiZWx9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZENvbmZpZ1wiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkQ29uZmlnQ2hhbmdlZCgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIm51bGxcIj48L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uc1wiIFt2YWx1ZV09XCJjb25maWdcIj57e2NvbmZpZy5jb25maWdOYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiIChjbGljayk9XCJzaG93Q3JlYXRlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgYWRkXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIHJlZC1pY29uXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZENvbmZpZ1wiIChjbGljayk9XCJkZWxldGVDb25maWd1cmF0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICBkZWxldGVcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRpbmdDb25maWd1cmF0aW9uXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7Y29uZmlndXJhdGlvbnNTZXR0aW5ncy5jcmVhdGVMYWJlbH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJjcmVhdGVDb25maWd1cmF0aW9uTmFtZVwiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIGdyZWVuLWljb25cIiAoY2xpY2spPVwic2F2ZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKVwiIFtkaXNhYmxlZF09XCIhY3JlYXRlQ29uZmlndXJhdGlvbk5hbWVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICBkb25lXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIHJlZC1pY29uXCIgKGNsaWNrKT1cImhpZGVDcmVhdGVDb25maWd1cmF0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICBjbG9zZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZW1vdmluZ0NvbmZpZ3VyYXRpb25cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJjb2wtYXV0b1wiIHN0eWxlPVwibWFyZ2luOiAwOyBmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDE2cHg7XCI+e3tjb25maWd1cmF0aW9uc1NldHRpbmdzLmRlbGV0ZVdhcm5pbmdUaXRsZX19PC9wPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImNvbC1hdXRvIGdyZWVuLWljb25cIiAoY2xpY2spPVwiYWNjZXB0RGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgZG9uZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiIChjbGljayk9XCJkZWNsaW5lRGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgY2xvc2VcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbG9jYWwtdGFibGUvY29uZmlndXJhdGlvbnMvY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXRHLE1BQU0sT0FBTyx1QkFBdUI7SUE2QmhDO1FBZkEsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzdDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWpELDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFFN0IsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBSzlCLENBQUM7SUF0QkQsSUFDSSxrQkFBa0IsQ0FBQyxNQUErQztRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBcUJELFFBQVE7SUFDUixDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7b0hBbkVRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHlVQ1ZwQyw0bEZBb0RBOzJGRDFDYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksNENBQTRDLG1CQUdyQyx1QkFBdUIsQ0FBQyxNQUFNOzBFQUsvQyxzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxNQUFNO2dCQUlQLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1N0Q29uZmlndXJhdGlvbnNTZXR0aW5nc01vZGVsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2xvY2FsLXRhYmxlL3N0LWNvbmZpZ3VyYXRpb25zLXNldHRpbmdzLm1vZGVsXCI7XHJcbmltcG9ydCB7U3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWx9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvbG9jYWwtdGFibGUvc3QtbG9jYWwtc3RvcmFnZS1jb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNvbmZpZ3VyYXRpb25zW2NvbmZpZ3VyYXRpb25zU2V0dGluZ3NdJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgY29uZmlndXJhdGlvbnNTZXR0aW5nczogU3RDb25maWd1cmF0aW9uc1NldHRpbmdzTW9kZWw7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGNvbmZpZ3VyYXRpb25zOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgaW5pdFNlbGVjdGVkQ29uZmlnKGNvbmZpZzogU3RMb2NhbFN0b3JhZ2VDb25maWd1cmF0aW9uTW9kZWwgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZyA9IGNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIGNyZWF0ZU5ld0NvbmZpZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcmVtb3ZlQ29uZmlnID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBjaGFuZ2VDb25maWcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XHJcblxyXG4gICAgY3JlYXRpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XHJcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uTmFtZSA9ICcnO1xyXG5cclxuICAgIHJlbW92aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHNlbGVjdGVkQ29uZmlnOiBTdExvY2FsU3RvcmFnZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZ0NvbmZpZ3VyYXRpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk5hbWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQ3JlYXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQ29uZmlndXJhdGlvbk5hbWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3JlYXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNyZWF0aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTmV3Q29uZmlnLmVtaXQodGhpcy5jcmVhdGVDb25maWd1cmF0aW9uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnJlbW92aW5nQ29uZmlndXJhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYWNjZXB0RGVsZXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnJlbW92aW5nQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb25maWcgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ29uZmlnLmVtaXQodGhpcy5zZWxlY3RlZENvbmZpZyEuY29uZmlnSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY2xpbmVEZWxldGVDb25maWd1cmF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZpbmdDb25maWd1cmF0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRDb25maWdDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ29uZmlnLmVtaXQodGhpcy5zZWxlY3RlZENvbmZpZz8uY29uZmlnSWQgfHwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiY29sLWF1dG8gcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMDtcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3JlYXRpbmdDb25maWd1cmF0aW9uICYmICFyZW1vdmluZ0NvbmZpZ3VyYXRpb25cIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtYXV0b1wiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMDtcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2NvbmZpZ3VyYXRpb25zU2V0dGluZ3Muc2VsZWN0TGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29uZmlnXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRDb25maWdDaGFuZ2VkKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uc1wiIFt2YWx1ZV09XCJjb25maWdcIj57e2NvbmZpZy5jb25maWdOYW1lfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiIChjbGljayk9XCJzaG93Q3JlYXRlQ29uZmlndXJhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGFkZFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRDb25maWdcIiAoY2xpY2spPVwiZGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGRlbGV0ZVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3JlYXRpbmdDb25maWd1cmF0aW9uXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e2NvbmZpZ3VyYXRpb25zU2V0dGluZ3MuY3JlYXRlTGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJjcmVhdGVDb25maWd1cmF0aW9uTmFtZVwiPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byBncmVlbi1pY29uXCIgKGNsaWNrKT1cInNhdmVDcmVhdGVDb25maWd1cmF0aW9uKClcIiBbZGlzYWJsZWRdPVwiIWNyZWF0ZUNvbmZpZ3VyYXRpb25OYW1lXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGRvbmVcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gcmVkLWljb25cIiAoY2xpY2spPVwiaGlkZUNyZWF0ZUNvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICBjbG9zZVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVtb3ZpbmdDb25maWd1cmF0aW9uXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJjb2wtYXV0b1wiIHN0eWxlPVwibWFyZ2luOiAwOyBmb250LXdlaWdodDogYm9sZDtmb250LXNpemU6IDE2cHg7XCI+e3tjb25maWd1cmF0aW9uc1NldHRpbmdzLmRlbGV0ZVdhcm5pbmdUaXRsZX19PC9wPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY29sLWF1dG8gZ3JlZW4taWNvblwiIChjbGljayk9XCJhY2NlcHREZWxldGVDb25maWd1cmF0aW9uKClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgZG9uZVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjb2wtYXV0byByZWQtaWNvblwiIChjbGljayk9XCJkZWNsaW5lRGVsZXRlQ29uZmlndXJhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIGNsb3NlXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19