ngx-material-entity 0.1.0 → 0.1.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 (120) hide show
  1. package/CONTRIBUTING.md +7 -1
  2. package/README.md +3 -2
  3. package/classes/base-builder.class.d.ts +35 -0
  4. package/classes/entity-model.class.d.ts +1 -1
  5. package/classes/entity-service.class.d.ts +27 -17
  6. package/classes/entity-utilities.class.d.ts +96 -46
  7. package/components/confirm-dialog/confirm-dialog-data.builder.d.ts +23 -0
  8. package/components/confirm-dialog/confirm-dialog-data.d.ts +18 -8
  9. package/components/confirm-dialog/confirm-dialog.component.d.ts +15 -5
  10. package/components/get-validation-error-message.function.d.ts +3 -2
  11. package/components/input/add-array-item-dialog-data.builder.d.ts +21 -0
  12. package/components/input/add-array-item-dialog-data.d.ts +20 -0
  13. package/components/input/input.component.d.ts +116 -26
  14. package/components/input/input.module.d.ts +6 -4
  15. package/components/table/create-dialog/create-dialog-data.builder.d.ts +21 -0
  16. package/components/table/create-dialog/create-entity-dialog-data.builder.d.ts +22 -0
  17. package/components/table/create-dialog/create-entity-dialog-data.d.ts +2 -2
  18. package/components/table/create-dialog/create-entity-dialog.component.d.ts +19 -5
  19. package/components/table/edit-dialog/edit-dialog-data.builder.d.ts +25 -0
  20. package/components/table/edit-dialog/edit-entity-dialog-data.d.ts +5 -5
  21. package/components/table/edit-dialog/edit-entity-dialog.builder.d.ts +23 -0
  22. package/components/table/edit-dialog/edit-entity-dialog.component.d.ts +23 -5
  23. package/components/table/table-data.builder.d.ts +51 -0
  24. package/components/table/table-data.d.ts +40 -24
  25. package/components/table/table.component.d.ts +52 -5
  26. package/components/table/table.module.d.ts +3 -1
  27. package/decorators/array/array-decorator-internal.data.d.ts +45 -0
  28. package/decorators/array/array-decorator.data.d.ts +129 -0
  29. package/decorators/array/array.decorator.d.ts +10 -0
  30. package/decorators/base/base-property.decorator.d.ts +7 -6
  31. package/decorators/base/decorator-types.enum.d.ts +7 -7
  32. package/decorators/base/property-decorator-internal.data.d.ts +24 -0
  33. package/decorators/base/property-decorator.data.d.ts +70 -0
  34. package/decorators/boolean/boolean-decorator-internal.data.d.ts +25 -0
  35. package/decorators/boolean/boolean-decorator.data.d.ts +37 -0
  36. package/decorators/boolean/boolean.decorator.d.ts +8 -0
  37. package/decorators/number/number-decorator-internal.data.d.ts +22 -0
  38. package/decorators/number/number-decorator.data.d.ts +38 -0
  39. package/decorators/number/number.decorator.d.ts +8 -0
  40. package/decorators/object/object-decorator-internal.data.d.ts +11 -0
  41. package/decorators/object/object-decorator.data.d.ts +25 -0
  42. package/decorators/object/object.decorator.d.ts +9 -0
  43. package/decorators/string/string-decorator-internal.data.d.ts +43 -0
  44. package/decorators/string/string-decorator.data.d.ts +79 -0
  45. package/decorators/string/string.decorator.d.ts +8 -0
  46. package/esm2020/classes/base-builder.class.mjs +43 -0
  47. package/esm2020/classes/entity-model.class.mjs +2 -2
  48. package/esm2020/classes/entity-service.class.mjs +20 -14
  49. package/esm2020/classes/entity-utilities.class.mjs +182 -101
  50. package/esm2020/components/confirm-dialog/confirm-dialog-data.builder.mjs +44 -0
  51. package/esm2020/components/confirm-dialog/confirm-dialog-data.mjs +1 -1
  52. package/esm2020/components/confirm-dialog/confirm-dialog.component.mjs +18 -22
  53. package/esm2020/components/get-validation-error-message.function.mjs +8 -3
  54. package/esm2020/components/input/add-array-item-dialog-data.builder.mjs +30 -0
  55. package/esm2020/components/input/add-array-item-dialog-data.mjs +2 -0
  56. package/esm2020/components/input/input.component.mjs +168 -32
  57. package/esm2020/components/input/input.module.mjs +19 -9
  58. package/esm2020/components/table/create-dialog/create-dialog-data.builder.mjs +32 -0
  59. package/esm2020/components/table/create-dialog/create-entity-dialog-data.builder.mjs +26 -0
  60. package/esm2020/components/table/create-dialog/create-entity-dialog-data.mjs +1 -1
  61. package/esm2020/components/table/create-dialog/create-entity-dialog.component.mjs +30 -30
  62. package/esm2020/components/table/create-dialog/create-entity-dialog.module.mjs +20 -4
  63. package/esm2020/components/table/edit-dialog/edit-dialog-data.builder.mjs +41 -0
  64. package/esm2020/components/table/edit-dialog/edit-entity-dialog-data.mjs +1 -1
  65. package/esm2020/components/table/edit-dialog/edit-entity-dialog.builder.mjs +27 -0
  66. package/esm2020/components/table/edit-dialog/edit-entity-dialog.component.mjs +43 -47
  67. package/esm2020/components/table/table-data.builder.mjs +105 -0
  68. package/esm2020/components/table/table-data.mjs +1 -1
  69. package/esm2020/components/table/table.component.mjs +90 -82
  70. package/esm2020/components/table/table.module.mjs +12 -4
  71. package/esm2020/decorators/array/array-decorator-internal.data.mjs +51 -0
  72. package/esm2020/decorators/array/array-decorator.data.mjs +7 -0
  73. package/esm2020/decorators/array/array.decorator.mjs +24 -0
  74. package/esm2020/decorators/base/base-property.decorator.mjs +6 -5
  75. package/esm2020/decorators/base/decorator-types.enum.mjs +1 -1
  76. package/esm2020/decorators/base/property-decorator-internal.data.mjs +38 -0
  77. package/esm2020/decorators/base/property-decorator.data.mjs +6 -0
  78. package/esm2020/decorators/boolean/boolean-decorator-internal.data.mjs +33 -0
  79. package/esm2020/decorators/boolean/boolean-decorator.data.mjs +7 -0
  80. package/esm2020/decorators/boolean/boolean.decorator.mjs +21 -0
  81. package/esm2020/decorators/number/number-decorator-internal.data.mjs +23 -0
  82. package/esm2020/decorators/number/number-decorator.data.mjs +7 -0
  83. package/esm2020/decorators/number/number.decorator.mjs +18 -0
  84. package/esm2020/decorators/object/object-decorator-internal.data.mjs +12 -0
  85. package/esm2020/decorators/object/object-decorator.data.mjs +7 -0
  86. package/esm2020/decorators/object/object.decorator.mjs +13 -0
  87. package/esm2020/decorators/string/string-decorator-internal.data.mjs +48 -0
  88. package/esm2020/decorators/string/string-decorator.data.mjs +7 -0
  89. package/esm2020/decorators/string/string.decorator.mjs +24 -0
  90. package/esm2020/public-api.mjs +15 -10
  91. package/fesm2015/ngx-material-entity.mjs +1221 -880
  92. package/fesm2015/ngx-material-entity.mjs.map +1 -1
  93. package/fesm2020/ngx-material-entity.mjs +1225 -877
  94. package/fesm2020/ngx-material-entity.mjs.map +1 -1
  95. package/package.json +2 -1
  96. package/public-api.d.ts +15 -7
  97. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.d.ts +0 -35
  98. package/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.d.ts +0 -12
  99. package/components/input/array-table/array-table.component.d.ts +0 -34
  100. package/components/input/array-table/array-table.module.d.ts +0 -19
  101. package/components/input/internal-input/internal-input.component.d.ts +0 -57
  102. package/components/input/internal-input/internal-input.module.d.ts +0 -16
  103. package/decorators/array.decorator.d.ts +0 -125
  104. package/decorators/base/property-decorator-config.interface.d.ts +0 -50
  105. package/decorators/boolean.decorator.d.ts +0 -42
  106. package/decorators/number.decorator.d.ts +0 -40
  107. package/decorators/object.decorator.d.ts +0 -27
  108. package/decorators/string.decorator.d.ts +0 -76
  109. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.component.mjs +0 -43
  110. package/esm2020/components/input/array-table/add-array-item-dialog/add-array-item-dialog.module.mjs +0 -22
  111. package/esm2020/components/input/array-table/array-table.component.mjs +0 -116
  112. package/esm2020/components/input/array-table/array-table.module.mjs +0 -66
  113. package/esm2020/components/input/internal-input/internal-input.component.mjs +0 -73
  114. package/esm2020/components/input/internal-input/internal-input.module.mjs +0 -54
  115. package/esm2020/decorators/array.decorator.mjs +0 -70
  116. package/esm2020/decorators/base/property-decorator-config.interface.mjs +0 -31
  117. package/esm2020/decorators/boolean.decorator.mjs +0 -44
  118. package/esm2020/decorators/number.decorator.mjs +0 -36
  119. package/esm2020/decorators/object.decorator.mjs +0 -23
  120. package/esm2020/decorators/string.decorator.mjs +0 -61
@@ -8,6 +8,10 @@ import { MatDialog } from '@angular/material/dialog';
8
8
  import { NgxMatEntityCreateDialogComponent } from './create-dialog/create-entity-dialog.component';
9
9
  import { NgxMatEntityEditDialogComponent } from './edit-dialog/edit-entity-dialog.component';
10
10
  import { NgxMatEntityConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';
11
+ import { ConfirmDialogDataBuilder } from '../confirm-dialog/confirm-dialog-data.builder';
12
+ import { CreateEntityDialogDataBuilder } from './create-dialog/create-entity-dialog-data.builder';
13
+ import { TableDataBuilder } from './table-data.builder';
14
+ import { EditEntityDialogDataBuilder } from '../table/edit-dialog/edit-entity-dialog.builder';
11
15
  import * as i0 from "@angular/core";
12
16
  import * as i1 from "@angular/material/dialog";
13
17
  import * as i2 from "@angular/material/form-field";
@@ -18,6 +22,12 @@ import * as i6 from "@angular/material/checkbox";
18
22
  import * as i7 from "@angular/material/paginator";
19
23
  import * as i8 from "@angular/material/input";
20
24
  import * as i9 from "@angular/common";
25
+ /**
26
+ * Generates a fully functional table for displaying, creating, updating and deleting entities
27
+ * based on the configuration passed in the @Input "tableData".
28
+ *
29
+ * It offers a lot of customization options which can be found in "TableData".
30
+ */
21
31
  export class NgxMatEntityTableComponent {
22
32
  constructor(dialog, injector) {
23
33
  this.dialog = dialog;
@@ -26,27 +36,26 @@ export class NgxMatEntityTableComponent {
26
36
  this.dataSource = new MatTableDataSource();
27
37
  this.selection = new SelectionModel(true, []);
28
38
  }
39
+ /**
40
+ * Sets up all the configuration for the table and the EntityService.
41
+ */
29
42
  ngOnInit() {
30
- this.validateInput();
31
- this.entityService = this.injector.get(this.entitiesData.baseData.EntityServiceClass);
32
- const givenDisplayColumns = this.entitiesData.baseData.displayColumns.map((v) => v.displayName);
33
- if (this.entitiesData.baseData.multiSelectActions?.length) {
34
- if (givenDisplayColumns.find((s) => s === 'select')) {
35
- throw new Error(`The name "select" for a display column is reserved for the multi-select action functionality.
36
- Please choose a different name.`);
37
- }
43
+ this.data = new TableDataBuilder(this.tableData).getResult();
44
+ this.entityService = this.injector.get(this.data.baseData.EntityServiceClass);
45
+ const givenDisplayColumns = this.data.baseData.displayColumns.map((v) => v.displayName);
46
+ if (this.data.baseData.multiSelectActions.length) {
38
47
  this.displayedColumns = ['select'].concat(givenDisplayColumns);
39
48
  }
40
49
  else {
41
50
  this.displayedColumns = givenDisplayColumns;
42
51
  }
43
52
  this.dataSource.sortingDataAccessor = (entity, header) => {
44
- return this.entitiesData.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity);
53
+ return this.data.baseData.displayColumns.find((dp) => dp.displayName === header)?.value(entity);
45
54
  };
46
55
  this.dataSource.sort = this.sort;
47
- if (this.entitiesData.baseData.searchString) {
56
+ if (this.data.baseData.searchString) {
48
57
  this.dataSource.filterPredicate = (entity, filter) => {
49
- const searchStr = this.entitiesData.baseData.searchString?.(entity);
58
+ const searchStr = this.data.baseData.searchString(entity);
50
59
  const formattedSearchString = searchStr.toLowerCase();
51
60
  const formattedFilterString = filter.toLowerCase();
52
61
  return formattedSearchString.includes(formattedFilterString);
@@ -60,62 +69,33 @@ export class NgxMatEntityTableComponent {
60
69
  });
61
70
  this.entityService.read();
62
71
  }
63
- validateInput() {
64
- if (!this.entitiesData.baseData.displayColumns) {
65
- throw new Error('Missing required Input data "displayColumns"');
66
- }
67
- if (!this.entitiesData.baseData.title) {
68
- throw new Error('Missing required Input data "title"');
69
- }
70
- if (!this.entitiesData.baseData.EntityServiceClass) {
71
- throw new Error('Missing required Input data "EntityServiceClass"');
72
- }
73
- if (this.entitiesData.baseData.allowCreate === undefined) {
74
- this.entitiesData.baseData.allowCreate = true;
75
- }
76
- if (this.entitiesData.baseData.allowEdit === undefined) {
77
- this.entitiesData.baseData.allowEdit = () => true;
78
- }
79
- if (this.entitiesData.baseData.allowDelete === undefined) {
80
- this.entitiesData.baseData.allowDelete = () => true;
81
- }
82
- if ((this.entitiesData.baseData.allowEdit !== (() => false)
83
- || this.entitiesData.baseData.allowDelete !== (() => false)
84
- || this.entitiesData.baseData.allowCreate)
85
- && !this.entitiesData.baseData.EntityClass) {
86
- throw new Error(`
87
- Missing required Input data "EntityClass".
88
- You can only omit this value if you can neither create or update entities.`);
89
- }
90
- if (this.entitiesData.baseData.allowCreate && !this.entitiesData.baseData.create && !this.entitiesData.createDialogData) {
91
- throw new Error(`Missing required Input data "createDialogData".
92
- You can only omit this value when creation is disallowed or done with a custom create method.`);
93
- }
94
- if ((this.entitiesData.baseData.allowEdit !== (() => false)
95
- || this.entitiesData.baseData.allowDelete !== (() => false))
96
- && !this.entitiesData.baseData.edit
97
- && !this.entitiesData.editDialogData) {
98
- throw new Error(`Missing required Input data "editDialogData".
99
- You can only omit this value when editing and deleting is disallowed or done with a custom edit method.`);
100
- }
101
- }
72
+ /**
73
+ * Edits an entity. This either calls the edit-Method provided by the user or uses a default edit-dialog.
74
+ *
75
+ * @param entity - The entity that should be updated.
76
+ * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.
77
+ */
102
78
  editEntity(entity) {
103
- if (this.entitiesData.baseData.allowEdit?.(entity)) {
104
- if (this.entitiesData.baseData.edit) {
105
- this.entitiesData.baseData.edit(new this.entitiesData.baseData.EntityClass(entity));
79
+ if (this.data.baseData.allowEdit(entity)) {
80
+ if (!this.data.baseData.EntityClass) {
81
+ throw new Error('No "EntityClass" specified for this table');
82
+ }
83
+ if (this.data.baseData.edit) {
84
+ this.data.baseData.edit(new this.data.baseData.EntityClass(entity));
106
85
  }
107
86
  else {
108
- this.editDefault(new this.entitiesData.baseData.EntityClass(entity));
87
+ this.editDefault(new this.data.baseData.EntityClass(entity));
109
88
  }
110
89
  }
111
90
  }
112
91
  editDefault(entity) {
113
- const dialogData = {
92
+ const inputDialogData = {
114
93
  entity: entity,
115
- EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,
116
- allowDelete: this.entitiesData.baseData.allowDelete,
117
- editDialogData: this.entitiesData.editDialogData
94
+ EntityServiceClass: this.data.baseData.EntityServiceClass,
95
+ allowDelete: this.data.baseData.allowDelete,
96
+ editDialogData: this.data.editDialogData
118
97
  };
98
+ const dialogData = new EditEntityDialogDataBuilder(inputDialogData).getResult();
119
99
  firstValueFrom(this.dialog.open(NgxMatEntityEditDialogComponent, {
120
100
  data: dialogData,
121
101
  minWidth: '60%',
@@ -130,22 +110,30 @@ export class NgxMatEntityTableComponent {
130
110
  }
131
111
  });
132
112
  }
113
+ /**
114
+ * Creates a new Entity. This either calls the create-Method provided by the user or uses a default create-dialog.
115
+ *
116
+ * @throws When no EntityClass was provided, as a new call is needed to initialize metadata.
117
+ */
133
118
  createEntity() {
134
- if (this.entitiesData.baseData.allowCreate) {
135
- if (this.entitiesData.baseData.create) {
136
- this.entitiesData.baseData.create(new this.entitiesData.baseData.EntityClass());
119
+ if (this.data.baseData.allowCreate) {
120
+ if (!this.data.baseData.EntityClass) {
121
+ throw new Error('No "EntityClass" specified for this table');
122
+ }
123
+ if (this.data.baseData.create) {
124
+ this.data.baseData.create(new this.data.baseData.EntityClass());
137
125
  }
138
126
  else {
139
- this.createDefault(new this.entitiesData.baseData.EntityClass());
127
+ this.createDefault(new this.data.baseData.EntityClass());
140
128
  }
141
129
  }
142
130
  }
143
131
  createDefault(entity) {
144
- const dialogData = {
132
+ const dialogData = new CreateEntityDialogDataBuilder({
145
133
  entity: entity,
146
- EntityServiceClass: this.entitiesData.baseData.EntityServiceClass,
147
- createDialogData: this.entitiesData.createDialogData
148
- };
134
+ EntityServiceClass: this.data.baseData.EntityServiceClass,
135
+ createDialogData: this.data.createDialogData
136
+ }).getResult();
149
137
  this.dialog.open(NgxMatEntityCreateDialogComponent, {
150
138
  data: dialogData,
151
139
  minWidth: '60%',
@@ -153,26 +141,26 @@ export class NgxMatEntityTableComponent {
153
141
  restoreFocus: false
154
142
  });
155
143
  }
144
+ /**
145
+ * Runs the MultiAction for all selected entries.
146
+ * Also handles confirmation with an additional dialog if configured.
147
+ *
148
+ * @param action - The MultiAction to run.
149
+ */
156
150
  runMultiAction(action) {
157
151
  if (!action.requireConfirmDialog || !action.requireConfirmDialog(this.selection.selected)) {
158
152
  return this.confirmRunMultiAction(action);
159
153
  }
160
- const dialogData = {
161
- // eslint-disable-next-line max-len
162
- text: action.confirmDialogData?.text ? action.confirmDialogData?.text : [`Do you really want to run this action on ${this.selection.selected.length} entries?`],
163
- type: 'default',
164
- confirmButtonLabel: action.confirmDialogData?.confirmButtonLabel ? action.confirmDialogData?.confirmButtonLabel : 'Confirm',
165
- cancelButtonLabel: action.confirmDialogData?.cancelButtonLabel ? action.confirmDialogData?.cancelButtonLabel : 'Cancel',
166
- title: action.confirmDialogData?.title ? action.confirmDialogData?.title : action.displayName,
167
- requireConfirmation: action.confirmDialogData?.requireConfirmation ? action.confirmDialogData?.requireConfirmation : false,
168
- confirmationText: action.confirmDialogData?.confirmationText ? action.confirmDialogData?.confirmationText : undefined
169
- };
170
- const dialogref = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
154
+ const dialogData = new ConfirmDialogDataBuilder(action.confirmDialogData)
155
+ .withDefault('text', [`Do you really want to run this action on ${this.selection.selected.length} entries?`])
156
+ .withDefault('title', action.displayName)
157
+ .getResult();
158
+ const dialogRef = this.dialog.open(NgxMatEntityConfirmDialogComponent, {
171
159
  data: dialogData,
172
160
  autoFocus: false,
173
161
  restoreFocus: false
174
162
  });
175
- dialogref.afterClosed().subscribe((res) => {
163
+ dialogRef.afterClosed().subscribe((res) => {
176
164
  if (res === 1) {
177
165
  this.confirmRunMultiAction(action);
178
166
  }
@@ -181,6 +169,12 @@ export class NgxMatEntityTableComponent {
181
169
  confirmRunMultiAction(action) {
182
170
  action.action(this.selection.selected);
183
171
  }
172
+ /**
173
+ * Checks if an MultiAction is disabled (e.g. Because no entries have been selected).
174
+ *
175
+ * @param action - The MultiAction to check.
176
+ * @returns Whether or not the Action can be used.
177
+ */
184
178
  multiActionDisabled(action) {
185
179
  if (!this.selection.selected.length) {
186
180
  return true;
@@ -190,6 +184,9 @@ export class NgxMatEntityTableComponent {
190
184
  }
191
185
  return false;
192
186
  }
187
+ /**
188
+ * Toggles all entries in the table.
189
+ */
193
190
  masterToggle() {
194
191
  if (this.isAllSelected()) {
195
192
  this.selection.clear();
@@ -198,6 +195,12 @@ export class NgxMatEntityTableComponent {
198
195
  this.dataSource.data.forEach((row) => this.selection.select(row));
199
196
  }
200
197
  }
198
+ /**
199
+ * Checks if all entries in the table have been selected.
200
+ * This is needed to display the "masterToggle"-checkbox correctly.
201
+ *
202
+ * @returns Whether or not all entries in the table have been selected.
203
+ */
201
204
  isAllSelected() {
202
205
  const numSelected = this.selection.selected.length;
203
206
  const numRows = this.dataSource.data.length;
@@ -207,17 +210,22 @@ export class NgxMatEntityTableComponent {
207
210
  this.onDestroy.next(undefined);
208
211
  this.onDestroy.complete();
209
212
  }
213
+ /**
214
+ * Applies the search input to filter the table entries.
215
+ *
216
+ * @param event - The keyup-event which contains the search-string of the user.
217
+ */
210
218
  applyFilter(event) {
211
219
  const filterValue = event.target.value;
212
220
  this.dataSource.filter = filterValue.trim().toLowerCase();
213
221
  }
214
222
  }
215
223
  NgxMatEntityTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableComponent, deps: [{ token: i1.MatDialog }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
216
- NgxMatEntityTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NgxMatEntityTableComponent, selector: "ngx-mat-entity-table", inputs: { entitiesData: "entitiesData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true, static: true }], ngImport: i0, template: "<h1 class=\"title\">{{entitiesData.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of entitiesData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"entitiesData.baseData.allowEdit?.(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button{margin-bottom:15px}}@media (max-width: 575px){.create-button{margin-bottom:15px}}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.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"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i2.MatLabel, selector: "mat-label" }, { 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"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5.MatCellDef, selector: "[matCellDef]" }, { type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
224
+ NgxMatEntityTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: NgxMatEntityTableComponent, selector: "ngx-mat-entity-table", inputs: { tableData: "tableData" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "filter", first: true, predicate: ["filter"], descendants: true, static: true }], ngImport: i0, template: "<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.multiSelectActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate\"\n [class.col-lg-4]=\"!data.baseData.allowCreate\"\n [class.col-md-3]=\"data.baseData.allowCreate\"\n [class.col-md-6]=\"!data.baseData.allowCreate\"\n [class.col-sm-6]=\"data.baseData.allowCreate\"\n [class.col-sm-12]=\"!data.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.multiSelectLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of data.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate\"\n [class.col-lg-2]=\"data.baseData.multiSelectActions.length\"\n [class.col-lg-4]=\"!data.baseData.multiSelectActions.length\"\n [class.col-md-3]=\"data.baseData.multiSelectActions.length\"\n [class.col-md-6]=\"!data.baseData.multiSelectActions.length\"\n [class.col-sm-6]=\"data.baseData.multiSelectActions.length\"\n [class.col-sm-12]=\"!data.baseData.multiSelectActions.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"data.baseData.allowEdit(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button,.create-button{margin-bottom:15px}}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.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"] }, { type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }], directives: [{ type: i2.MatLabel, selector: "mat-label" }, { 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"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5.MatCellDef, selector: "[matCellDef]" }, { type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }] });
217
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableComponent, decorators: [{
218
226
  type: Component,
219
- args: [{ selector: 'ngx-mat-entity-table', template: "<h1 class=\"title\">{{entitiesData.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{entitiesData.baseData.searchLabel ? entitiesData.baseData.searchLabel : 'Search'}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-2]=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-4]=\"!entitiesData.baseData.allowCreate\"\n [class.col-md-3]=\"entitiesData.baseData.allowCreate\"\n [class.col-md-6]=\"!entitiesData.baseData.allowCreate\"\n [class.col-sm-6]=\"entitiesData.baseData.allowCreate\"\n [class.col-sm-12]=\"!entitiesData.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{entitiesData.baseData.multiSelectLabel ? entitiesData.baseData.multiSelectLabel : 'Actions'}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of entitiesData.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"entitiesData.baseData.allowCreate\"\n [class.col-lg-2]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-lg-4]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-3]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-md-6]=\"!entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-6]=\"entitiesData.baseData.multiSelectActions?.length\"\n [class.col-sm-12]=\"!entitiesData.baseData.multiSelectActions?.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{entitiesData.baseData.createButtonLabel ? entitiesData.baseData.createButtonLabel : 'Create'}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of entitiesData.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"entitiesData.baseData.allowEdit?.(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button{margin-bottom:15px}}@media (max-width: 575px){.create-button{margin-bottom:15px}}\n"] }]
220
- }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.Injector }]; }, propDecorators: { entitiesData: [{
227
+ args: [{ selector: 'ngx-mat-entity-table', template: "<h1 class=\"title\">{{data.baseData.title}}</h1>\n\n<div class=\"row\">\n <mat-form-field class=\"col-lg-8 col-md-6 col-sm-12\">\n <mat-label>{{data.baseData.searchLabel}}</mat-label>\n <input matInput (keyup)=\"applyFilter($event)\" />\n </mat-form-field>\n <div\n *ngIf=\"data.baseData.multiSelectActions.length\"\n [class.col-lg-2]=\"data.baseData.allowCreate\"\n [class.col-lg-4]=\"!data.baseData.allowCreate\"\n [class.col-md-3]=\"data.baseData.allowCreate\"\n [class.col-md-6]=\"!data.baseData.allowCreate\"\n [class.col-sm-6]=\"data.baseData.allowCreate\"\n [class.col-sm-12]=\"!data.baseData.allowCreate\"\n >\n <button class=\"actions-button\" [matMenuTriggerFor]=\"menu\" mat-raised-button>\n {{data.baseData.multiSelectLabel}}\n </button>\n </div>\n <mat-menu #menu=\"matMenu\">\n <button *ngFor=\"let action of data.baseData.multiSelectActions\" [disabled]=\"multiActionDisabled(action)\" (click)=\"runMultiAction(action)\" mat-menu-item>\n {{action.displayName}}\n </button>\n </mat-menu>\n\n <div\n *ngIf=\"data.baseData.allowCreate\"\n [class.col-lg-2]=\"data.baseData.multiSelectActions.length\"\n [class.col-lg-4]=\"!data.baseData.multiSelectActions.length\"\n [class.col-md-3]=\"data.baseData.multiSelectActions.length\"\n [class.col-md-6]=\"!data.baseData.multiSelectActions.length\"\n [class.col-sm-6]=\"data.baseData.multiSelectActions.length\"\n [class.col-sm-12]=\"!data.baseData.multiSelectActions.length\"\n >\n <button class=\"create-button\" (click)=\"createEntity()\" mat-raised-button>\n {{data.baseData.createButtonLabel}}\n </button>\n </div>\n</div>\n\n<div class=\"mat-elevation-z8\">\n <mat-table *ngIf=\"dataSource\" [dataSource]=\"dataSource\" matSort>\n <!-- select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\" [indeterminate]=\"selection.hasValue() && !isAllSelected()\"> </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let module\" class=\"module\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(module) : null\" [checked]=\"selection.isSelected(module)\"> </mat-checkbox>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let dCol of data.baseData.displayColumns\" [matColumnDef]=\"dCol.displayName\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n {{dCol.displayName}}\n </mat-header-cell>\n <mat-cell class=\"entity\" [class.enabled]=\"data.baseData.allowEdit(entity)\" (click)=\"editEntity(entity)\" *matCellDef=\"let entity\">\n {{dCol.value(entity)}}\n </mat-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\n </mat-table>\n\n <mat-paginator *ngIf=\"dataSource\" id=\"paginator\" [length]=\"dataSource.filteredData.length\" [pageIndex]=\"0\" [pageSize]=\"10\" [pageSizeOptions]=\"[5, 10, 25, 50]\"> </mat-paginator>\n</div>\n", styles: [".title{text-align:center}button{width:100%}.mat-column-select{flex:0 0 75px}.enabled:hover{cursor:pointer}@media (max-width: 767px){.actions-button,.create-button{margin-bottom:15px}}\n"] }]
228
+ }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.Injector }]; }, propDecorators: { tableData: [{
221
229
  type: Input
222
230
  }], paginator: [{
223
231
  type: ViewChild,
@@ -229,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
229
237
  type: ViewChild,
230
238
  args: ['filter', { static: true }]
231
239
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFbkcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7O0FBUWhHLE1BQU0sT0FBTywwQkFBMEI7SUFpQm5DLFlBQTZCLE1BQWlCLEVBQW1CLFFBQWtCO1FBQXRELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVJsRSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FB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QztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3BCLE1BQU0sV0FBVyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUQsQ0FBQzs7d0hBek9RLDBCQUEwQjs0R0FBMUIsMEJBQTBCLGlKQVV4QixZQUFZLHFGQUNaLE9BQU8sK0pDakN0Qix3c0hBb0VBOzRGRDlDYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksc0JBQXNCO3VIQVVoQyxZQUFZO3NCQURYLEtBQUs7Z0JBS3FDLFNBQVM7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSCxJQUFJO3NCQUF6QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS1tb2RlbC5jbGFzcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVFbnRpdHlEaWFsb2dEYXRhIH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5RWRpdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0RW50aXR5RGlhbG9nRGF0YSB9IGZyb20gJy4vZWRpdC1kaWFsb2cvZWRpdC1lbnRpdHktZGlhbG9nLWRhdGEnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RBY3Rpb24sIEVudGl0aWVzRGF0YSwgQ3JlYXRlRGlhbG9nRGF0YSwgRWRpdERpYWxvZ0RhdGEgfSBmcm9tICcuL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nRGF0YSB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVudGl0aWVzLWNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW50aXRpZXNEYXRhITogRW50aXRpZXNEYXRhPEVudGl0eVR5cGU+O1xuXG4gICAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlITogRW50aXR5U2VydmljZTxFbnRpdHlUeXBlPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQhOiBNYXRTb3J0O1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGZpbHRlciE6IHN0cmluZztcbiAgICBkaXNwbGF5ZWRDb2x1bW5zITogc3RyaW5nW107XG4gICAgZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPEVudGl0eVR5cGU+ID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4gPSBuZXcgU2VsZWN0aW9uTW9kZWw8RW50aXR5VHlwZT4odHJ1ZSwgW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0KCk7XG5cbiAgICAgICAgdGhpcy5lbnRpdHlTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzKSBhcyBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+O1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnMgPSB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5tYXAoKHYpID0+IHYuZGlzcGxheU5hbWUpO1xuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChnaXZlbkRpc3BsYXlDb2x1bW5zLmZpbmQoKHMpID0+IHMgPT09ICdzZWxlY3QnKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSBuYW1lIFwic2VsZWN0XCIgZm9yIGEgZGlzcGxheSBjb2x1bW4gaXMgcmVzZXJ2ZWQgZm9yIHRoZSBtdWx0aS1zZWxlY3QgYWN0aW9uIGZ1bmN0aW9uYWxpdHkuXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBjaG9vc2UgYSBkaWZmZXJlbnQgbmFtZS5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsnc2VsZWN0J10uY29uY2F0KGdpdmVuRGlzcGxheUNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gZ2l2ZW5EaXNwbGF5Q29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGVudGl0eTogRW50aXR5VHlwZSwgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucy5maW5kKChkcCkgPT4gZHAuZGlzcGxheU5hbWUgPT09IGhlYWRlcik/LnZhbHVlKGVudGl0eSkgYXMgc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgaWYgKHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU3RyID0gdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuc2VhcmNoU3RyaW5nPy4oZW50aXR5KSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkU2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRmlsdGVyU3RyaW5nID0gZmlsdGVyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFNlYXJjaFN0cmluZy5pbmNsdWRlcyhmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcblxuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UuZW50aXRpZXNTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBlbnRpdGllcztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UucmVhZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5kaXNwbGF5Q29sdW1ucykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIElucHV0IGRhdGEgXCJkaXNwbGF5Q29sdW1uc1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS50aXRsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIElucHV0IGRhdGEgXCJ0aXRsZVwiJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBJbnB1dCBkYXRhIFwiRW50aXR5U2VydmljZUNsYXNzXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dFZGl0ID0gKCkgPT4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dEZWxldGUgPSAoKSA9PiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgIT09ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0RlbGV0ZSAhPT0gKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAmJiAhdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgICAgICAgICAgIE1pc3NpbmcgcmVxdWlyZWQgSW5wdXQgZGF0YSBcIkVudGl0eUNsYXNzXCIuXG4gICAgICAgICAgICAgICAgWW91IGNhbiBvbmx5IG9taXQgdGhpcyB2YWx1ZSBpZiB5b3UgY2FuIG5laXRoZXIgY3JlYXRlIG9yIHVwZGF0ZSBlbnRpdGllcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSAmJiAhdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuY3JlYXRlICYmICF0aGlzLmVudGl0aWVzRGF0YS5jcmVhdGVEaWFsb2dEYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYE1pc3NpbmcgcmVxdWlyZWQgSW5wdXQgZGF0YSBcImNyZWF0ZURpYWxvZ0RhdGFcIi5cbiAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgb21pdCB0aGlzIHZhbHVlIHdoZW4gY3JlYXRpb24gaXMgZGlzYWxsb3dlZCBvciBkb25lIHdpdGggYSBjdXN0b20gY3JlYXRlIG1ldGhvZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQgIT09ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0RlbGV0ZSAhPT0gKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgJiYgIXRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmVkaXRcbiAgICAgICAgICAgICYmICF0aGlzLmVudGl0aWVzRGF0YS5lZGl0RGlhbG9nRGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBJbnB1dCBkYXRhIFwiZWRpdERpYWxvZ0RhdGFcIi5cbiAgICAgICAgICAgICAgICBZb3UgY2FuIG9ubHkgb21pdCB0aGlzIHZhbHVlIHdoZW4gZWRpdGluZyBhbmQgZGVsZXRpbmcgaXMgZGlzYWxsb3dlZCBvciBkb25lIHdpdGggYSBjdXN0b20gZWRpdCBtZXRob2QuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRFbnRpdHkoZW50aXR5OiBFbnRpdHlUeXBlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQ/LihlbnRpdHkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuZWRpdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmVkaXQobmV3IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKGVudGl0eSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0RGVmYXVsdChuZXcgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBlZGl0RGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogRWRpdEVudGl0eURpYWxvZ0RhdGE8RW50aXR5VHlwZT4gPSB7XG4gICAgICAgICAgICBlbnRpdHk6IGVudGl0eSxcbiAgICAgICAgICAgIEVudGl0eVNlcnZpY2VDbGFzczogdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzLFxuICAgICAgICAgICAgYWxsb3dEZWxldGU6IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93RGVsZXRlIGFzIChlbnRpdHk6IEVudGl0eVR5cGUpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICBlZGl0RGlhbG9nRGF0YTogdGhpcy5lbnRpdGllc0RhdGEuZWRpdERpYWxvZ0RhdGEgYXMgRWRpdERpYWxvZ0RhdGE8RW50aXR5VHlwZT5cbiAgICAgICAgfTtcbiAgICAgICAgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKCBOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9KS5hZnRlckNsb3NlZCgpXG4gICAgICAgICkudGhlbigocmVzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YVt0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGVudGl0eS5pZCldID0gZW50aXR5O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVFbnRpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLmNyZWF0ZShuZXcgdGhpcy5lbnRpdGllc0RhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHQobmV3IHRoaXMuZW50aXRpZXNEYXRhLmJhc2VEYXRhLkVudGl0eUNsYXNzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ3JlYXRlRW50aXR5RGlhbG9nRGF0YTxFbnRpdHlUeXBlPiA9IHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgRW50aXR5U2VydmljZUNsYXNzOiB0aGlzLmVudGl0aWVzRGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MsXG4gICAgICAgICAgICBjcmVhdGVEaWFsb2dEYXRhOiB0aGlzLmVudGl0aWVzRGF0YS5jcmVhdGVEaWFsb2dEYXRhIGFzIENyZWF0ZURpYWxvZ0RhdGFcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlDcmVhdGVEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBydW5NdWx0aUFjdGlvbihhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogdm9pZCB7XG4gICAgICAgIGlmICghYWN0aW9uLnJlcXVpcmVDb25maXJtRGlhbG9nIHx8ICFhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2codGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWFsb2dEYXRhOiBDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICB0ZXh0OiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRleHQgPyBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRleHQgOiBbYERvIHlvdSByZWFsbHkgd2FudCB0byBydW4gdGhpcyBhY3Rpb24gb24gJHt0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGh9IGVudHJpZXM/YF0sXG4gICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8uY29uZmlybUJ1dHRvbkxhYmVsID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtQnV0dG9uTGFiZWwgOiAnQ29uZmlybScsXG4gICAgICAgICAgICBjYW5jZWxCdXR0b25MYWJlbDogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jYW5jZWxCdXR0b25MYWJlbCA/IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8uY2FuY2VsQnV0dG9uTGFiZWwgOiAnQ2FuY2VsJyxcbiAgICAgICAgICAgIHRpdGxlOiBhY3Rpb24uY29uZmlybURpYWxvZ0RhdGE/LnRpdGxlID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy50aXRsZSA6IGFjdGlvbi5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHJlcXVpcmVDb25maXJtYXRpb246IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8ucmVxdWlyZUNvbmZpcm1hdGlvbiA/IGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YT8ucmVxdWlyZUNvbmZpcm1hdGlvbiA6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlybWF0aW9uVGV4dDogYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtYXRpb25UZXh0ID8gYWN0aW9uLmNvbmZpcm1EaWFsb2dEYXRhPy5jb25maXJtYXRpb25UZXh0IDogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRpYWxvZ3JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dyZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgY29uZmlybVJ1bk11bHRpQWN0aW9uKGFjdGlvbjogTXVsdGlTZWxlY3RBY3Rpb248RW50aXR5VHlwZT4pOiB2b2lkIHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgbXVsdGlBY3Rpb25EaXNhYmxlZChhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uLmVuYWJsZWQ/Lih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbWFzdGVyVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKChyb3cpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95Lm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBhcHBseUZpbHRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxufSIsIjxoMSBjbGFzcz1cInRpdGxlXCI+e3tlbnRpdGllc0RhdGEuYmFzZURhdGEudGl0bGV9fTwvaDE+XG5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtbGctOCBjb2wtbWQtNiBjb2wtc20tMTJcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbCA/IGVudGl0aWVzRGF0YS5iYXNlRGF0YS5zZWFyY2hMYWJlbCA6ICdTZWFyY2gnfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCIgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZW50aXRpZXNEYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb25zLWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5tdWx0aVNlbGVjdExhYmVsID8gZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0TGFiZWwgOiAnQWN0aW9ucyd9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zXCIgW2Rpc2FibGVkXT1cIm11bHRpQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5NdWx0aUFjdGlvbihhY3Rpb24pXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJlbnRpdGllc0RhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy00XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLW1kLTNdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFlbnRpdGllc0RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zPy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTZdPVwiZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS0xMl09XCIhZW50aXRpZXNEYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucz8ubGVuZ3RoXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjcmVhdGUtYnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZUVudGl0eSgpXCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2VudGl0aWVzRGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA/IGVudGl0aWVzRGF0YS5iYXNlRGF0YS5jcmVhdGVCdXR0b25MYWJlbCA6ICdDcmVhdGUnfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8bWF0LXRhYmxlICpuZ0lmPVwiZGF0YVNvdXJjZVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgbW9kdWxlXCIgY2xhc3M9XCJtb2R1bGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUobW9kdWxlKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChtb2R1bGUpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZENvbCBvZiBlbnRpdGllc0RhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImRDb2wuZGlzcGxheU5hbWVcIj5cbiAgICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIHt7ZENvbC5kaXNwbGF5TmFtZX19XG4gICAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgIDxtYXQtY2VsbCBjbGFzcz1cImVudGl0eVwiIFtjbGFzcy5lbmFibGVkXT1cImVudGl0aWVzRGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQ/LihlbnRpdHkpXCIgKGNsaWNrKT1cImVkaXRFbnRpdHkoZW50aXR5KVwiICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiPlxuICAgICAgICAgICAgICAgIHt7ZENvbC52YWx1ZShlbnRpdHkpfX1cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtcm93PlxuICAgIDwvbWF0LXRhYmxlPlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJkYXRhU291cmNlXCIgaWQ9XCJwYWdpbmF0b3JcIiBbbGVuZ3RoXT1cImRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aFwiIFtwYWdlSW5kZXhdPVwiMFwiIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCI+IDwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkcsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHN0YsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEcsT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLCtDQUErQyxDQUFDO0FBQ3BILE9BQU8sRUFBRSw2QkFBNkIsRUFBa0MsTUFBTSxtREFBbUQsQ0FBQztBQUNsSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLDJCQUEyQixFQUFnQyxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7Ozs7OztBQUU1SDs7Ozs7R0FLRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUFtQm5DLFlBQTZCLE1BQWlCLEVBQW1CLFFBQWtCO1FBQXRELFdBQU0sR0FBTixNQUFNLENBQVc7UUFBbUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVJsRSxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUtqRCxlQUFVLEdBQW1DLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN0RSxjQUFTLEdBQStCLElBQUksY0FBYyxDQUFhLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVLLENBQUM7SUFFdkY7O09BRUc7SUFDSCxRQUFRO1FBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUU3RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUE4QixDQUFDO1FBRTNHLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2xFO2FBQ0k7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7U0FDL0M7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixHQUFHLENBQUMsTUFBa0IsRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUN6RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBVyxDQUFDO1FBQzlHLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxNQUFrQixFQUFFLE1BQWMsRUFBRSxFQUFFO2dCQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUU7Z0JBQzNELE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNqRSxDQUFDLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUUzQyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3RGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsTUFBa0I7UUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2FBQ2hFO1lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO2lCQUNJO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNoRTtTQUNKO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFrQjtRQUNsQyxNQUFNLGVBQWUsR0FBcUM7WUFDdEQsTUFBTSxFQUFFLE1BQU07WUFDZCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7WUFDekQsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFDM0MsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztTQUMzQyxDQUFBO1FBQ0QsTUFBTSxVQUFVLEdBQTZDLElBQUksMkJBQTJCLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUgsY0FBYyxDQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQzlDLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsU0FBUyxFQUFFLEtBQUs7WUFDaEIsWUFBWSxFQUFFLEtBQUs7U0FDdEIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNuQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ25CLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDWCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMxQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2FBQ2hFO1lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDbkU7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDNUQ7U0FDSjtJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBa0I7UUFDcEMsTUFBTSxVQUFVLEdBQStDLElBQUksNkJBQTZCLENBQzVGO1lBQ0ksTUFBTSxFQUFFLE1BQU07WUFDZCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7WUFDekQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7U0FDL0MsQ0FDSixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUU7WUFDaEQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsS0FBSztZQUNoQixZQUFZLEVBQUUsS0FBSztTQUN0QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsTUFBcUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZGLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsTUFBTSxVQUFVLEdBQThCLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO2FBQy9GLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyw0Q0FBNEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxXQUFXLENBQUMsQ0FBQzthQUM1RyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDeEMsU0FBUyxFQUFFLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUU7WUFDbkUsSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsWUFBWSxFQUFFLEtBQUs7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQzlDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFxQztRQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsTUFBcUM7UUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLEVBQUU7WUFDckQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFCO2FBQ0k7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckU7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhO1FBQ1QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxPQUFPLFdBQVcsS0FBSyxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEtBQVk7UUFDcEIsTUFBTSxXQUFXLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO1FBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5RCxDQUFDOzt3SEE5TlEsMEJBQTBCOzRHQUExQiwwQkFBMEIsMklBWXhCLFlBQVkscUZBQ1osT0FBTywrSkMzQ3RCLDgzR0FvRUE7NEZEdENhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSxzQkFBc0I7dUhBVWhDLFNBQVM7c0JBRFIsS0FBSztnQkFPcUMsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNILElBQUk7c0JBQXpDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxNQUFNO3NCQUE1QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZW50aXR5LW1vZGVsLmNsYXNzJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlDcmVhdGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NyZWF0ZS1kaWFsb2cvY3JlYXRlLWVudGl0eS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE5neE1hdEVudGl0eUVkaXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2VkaXQtZGlhbG9nL2VkaXQtZW50aXR5LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdEVudGl0eURpYWxvZ0RhdGEgfSBmcm9tICcuL2VkaXQtZGlhbG9nL2VkaXQtZW50aXR5LWRpYWxvZy1kYXRhJztcbmltcG9ydCB7IE11bHRpU2VsZWN0QWN0aW9uLCBUYWJsZURhdGEgfSBmcm9tICcuL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtRGlhbG9nRGF0YUJ1aWxkZXIsIENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgfSBmcm9tICcuLi9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgQ3JlYXRlRW50aXR5RGlhbG9nRGF0YUJ1aWxkZXIsIENyZWF0ZUVudGl0eURpYWxvZ0RhdGFJbnRlcm5hbCB9IGZyb20gJy4vY3JlYXRlLWRpYWxvZy9jcmVhdGUtZW50aXR5LWRpYWxvZy1kYXRhLmJ1aWxkZXInO1xuaW1wb3J0IHsgVGFibGVEYXRhQnVpbGRlciwgVGFibGVEYXRhSW50ZXJuYWwgfSBmcm9tICcuL3RhYmxlLWRhdGEuYnVpbGRlcic7XG5pbXBvcnQgeyBFZGl0RW50aXR5RGlhbG9nRGF0YUJ1aWxkZXIsIEVkaXRFbnRpdHlEaWFsb2dEYXRhSW50ZXJuYWwgfSBmcm9tICcuLi90YWJsZS9lZGl0LWRpYWxvZy9lZGl0LWVudGl0eS1kaWFsb2cuYnVpbGRlcic7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZnVsbHkgZnVuY3Rpb25hbCB0YWJsZSBmb3IgZGlzcGxheWluZywgY3JlYXRpbmcsIHVwZGF0aW5nIGFuZCBkZWxldGluZyBlbnRpdGllc1xuICogYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gcGFzc2VkIGluIHRoZSBASW5wdXQgXCJ0YWJsZURhdGFcIi5cbiAqXG4gKiBJdCBvZmZlcnMgYSBsb3Qgb2YgY3VzdG9taXphdGlvbiBvcHRpb25zIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBcIlRhYmxlRGF0YVwiLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1tYXQtZW50aXR5LXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVDb21wb25lbnQ8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRhYmxlRGF0YSE6IFRhYmxlRGF0YTxFbnRpdHlUeXBlPjtcblxuICAgIGRhdGEhOiBUYWJsZURhdGFJbnRlcm5hbDxFbnRpdHlUeXBlPjtcblxuICAgIHByaXZhdGUgZW50aXR5U2VydmljZSE6IEVudGl0eVNlcnZpY2U8RW50aXR5VHlwZT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBzb3J0ITogTWF0U29ydDtcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaWx0ZXIhOiBzdHJpbmc7XG4gICAgZGlzcGxheWVkQ29sdW1ucyE6IHN0cmluZ1tdO1xuICAgIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxFbnRpdHlUeXBlPiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPEVudGl0eVR5cGU+KHRydWUsIFtdKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YWJsZSBhbmQgdGhlIEVudGl0eVNlcnZpY2UuXG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBUYWJsZURhdGFCdWlsZGVyKHRoaXMudGFibGVEYXRhKS5nZXRSZXN1bHQoKTtcblxuICAgICAgICB0aGlzLmVudGl0eVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldCh0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5U2VydmljZUNsYXNzKSBhcyBFbnRpdHlTZXJ2aWNlPEVudGl0eVR5cGU+O1xuXG4gICAgICAgIGNvbnN0IGdpdmVuRGlzcGxheUNvbHVtbnMgPSB0aGlzLmRhdGEuYmFzZURhdGEuZGlzcGxheUNvbHVtbnMubWFwKCh2KSA9PiB2LmRpc3BsYXlOYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5tdWx0aVNlbGVjdEFjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbJ3NlbGVjdCddLmNvbmNhdChnaXZlbkRpc3BsYXlDb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IGdpdmVuRGlzcGxheUNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydGluZ0RhdGFBY2Nlc3NvciA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGhlYWRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zLmZpbmQoKGRwKSA9PiBkcC5kaXNwbGF5TmFtZSA9PT0gaGVhZGVyKT8udmFsdWUoZW50aXR5KSBhcyBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgICAgICBpZiAodGhpcy5kYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChlbnRpdHk6IEVudGl0eVR5cGUsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU3RyID0gdGhpcy5kYXRhLmJhc2VEYXRhLnNlYXJjaFN0cmluZyhlbnRpdHkpIDtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRTZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRGaWx0ZXJTdHJpbmcgPSBmaWx0ZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkU2VhcmNoU3RyaW5nLmluY2x1ZGVzKGZvcm1hdHRlZEZpbHRlclN0cmluZyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSB0aGlzLmZpbHRlcjtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuXG4gICAgICAgIHRoaXMuZW50aXR5U2VydmljZS5lbnRpdGllc1N1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKGVudGl0aWVzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGVudGl0aWVzO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW50aXR5U2VydmljZS5yZWFkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdHMgYW4gZW50aXR5LiBUaGlzIGVpdGhlciBjYWxscyB0aGUgZWRpdC1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgZWRpdC1kaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW50aXR5IC0gVGhlIGVudGl0eSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICAqIEB0aHJvd3MgV2hlbiBubyBFbnRpdHlDbGFzcyB3YXMgcHJvdmlkZWQsIGFzIGEgbmV3IGNhbGwgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgbWV0YWRhdGEuXG4gICAgICovXG4gICAgZWRpdEVudGl0eShlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5hbGxvd0VkaXQoZW50aXR5KSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiRW50aXR5Q2xhc3NcIiBzcGVjaWZpZWQgZm9yIHRoaXMgdGFibGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuYmFzZURhdGEuZWRpdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5iYXNlRGF0YS5lZGl0KG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXREZWZhdWx0KG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoZW50aXR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVkaXREZWZhdWx0KGVudGl0eTogRW50aXR5VHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dERpYWxvZ0RhdGE6IEVkaXRFbnRpdHlEaWFsb2dEYXRhPEVudGl0eVR5cGU+ID0ge1xuICAgICAgICAgICAgZW50aXR5OiBlbnRpdHksXG4gICAgICAgICAgICBFbnRpdHlTZXJ2aWNlQ2xhc3M6IHRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlTZXJ2aWNlQ2xhc3MsXG4gICAgICAgICAgICBhbGxvd0RlbGV0ZTogdGhpcy5kYXRhLmJhc2VEYXRhLmFsbG93RGVsZXRlLFxuICAgICAgICAgICAgZWRpdERpYWxvZ0RhdGE6IHRoaXMuZGF0YS5lZGl0RGlhbG9nRGF0YVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IEVkaXRFbnRpdHlEaWFsb2dEYXRhSW50ZXJuYWw8RW50aXR5VHlwZT4gPSBuZXcgRWRpdEVudGl0eURpYWxvZ0RhdGFCdWlsZGVyKGlucHV0RGlhbG9nRGF0YSkuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzYwJScsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgICAgICB9KS5hZnRlckNsb3NlZCgpXG4gICAgICAgICkudGhlbigocmVzOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YVt0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGVudGl0eS5pZCldID0gZW50aXR5O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IEVudGl0eS4gVGhpcyBlaXRoZXIgY2FsbHMgdGhlIGNyZWF0ZS1NZXRob2QgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3IgdXNlcyBhIGRlZmF1bHQgY3JlYXRlLWRpYWxvZy5cbiAgICAgKlxuICAgICAqIEB0aHJvd3MgV2hlbiBubyBFbnRpdHlDbGFzcyB3YXMgcHJvdmlkZWQsIGFzIGEgbmV3IGNhbGwgaXMgbmVlZGVkIHRvIGluaXRpYWxpemUgbWV0YWRhdGEuXG4gICAgICovXG4gICAgY3JlYXRlRW50aXR5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gXCJFbnRpdHlDbGFzc1wiIHNwZWNpZmllZCBmb3IgdGhpcyB0YWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5iYXNlRGF0YS5jcmVhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYmFzZURhdGEuY3JlYXRlKG5ldyB0aGlzLmRhdGEuYmFzZURhdGEuRW50aXR5Q2xhc3MoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHQobmV3IHRoaXMuZGF0YS5iYXNlRGF0YS5FbnRpdHlDbGFzcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdChlbnRpdHk6IEVudGl0eVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogQ3JlYXRlRW50aXR5RGlhbG9nRGF0YUludGVybmFsPEVudGl0eVR5cGU+ID0gbmV3IENyZWF0ZUVudGl0eURpYWxvZ0RhdGFCdWlsZGVyKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgICAgIEVudGl0eVNlcnZpY2VDbGFzczogdGhpcy5kYXRhLmJhc2VEYXRhLkVudGl0eVNlcnZpY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaWFsb2dEYXRhOiB0aGlzLmRhdGEuY3JlYXRlRGlhbG9nRGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICApLmdldFJlc3VsdCgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE5neE1hdEVudGl0eUNyZWF0ZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnNjAlJyxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIE11bHRpQWN0aW9uIGZvciBhbGwgc2VsZWN0ZWQgZW50cmllcy5cbiAgICAgKiBBbHNvIGhhbmRsZXMgY29uZmlybWF0aW9uIHdpdGggYW4gYWRkaXRpb25hbCBkaWFsb2cgaWYgY29uZmlndXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gLSBUaGUgTXVsdGlBY3Rpb24gdG8gcnVuLlxuICAgICAqL1xuICAgIHJ1bk11bHRpQWN0aW9uKGFjdGlvbjogTXVsdGlTZWxlY3RBY3Rpb248RW50aXR5VHlwZT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFhY3Rpb24ucmVxdWlyZUNvbmZpcm1EaWFsb2cgfHwgIWFjdGlvbi5yZXF1aXJlQ29uZmlybURpYWxvZyh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1SdW5NdWx0aUFjdGlvbihhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpYWxvZ0RhdGE6IENvbmZpcm1EaWFsb2dEYXRhSW50ZXJuYWwgPSBuZXcgQ29uZmlybURpYWxvZ0RhdGFCdWlsZGVyKGFjdGlvbi5jb25maXJtRGlhbG9nRGF0YSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGV4dCcsIFtgRG8geW91IHJlYWxseSB3YW50IHRvIHJ1biB0aGlzIGFjdGlvbiBvbiAke3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aH0gZW50cmllcz9gXSlcbiAgICAgICAgICAgIC53aXRoRGVmYXVsdCgndGl0bGUnLCBhY3Rpb24uZGlzcGxheU5hbWUpXG4gICAgICAgICAgICAuZ2V0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oTmd4TWF0RW50aXR5Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25maXJtUnVuTXVsdGlBY3Rpb24oYWN0aW9uOiBNdWx0aVNlbGVjdEFjdGlvbjxFbnRpdHlUeXBlPik6IHZvaWQge1xuICAgICAgICBhY3Rpb24uYWN0aW9uKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYW4gTXVsdGlBY3Rpb24gaXMgZGlzYWJsZWQgKGUuZy4gQmVjYXVzZSBubyBlbnRyaWVzIGhhdmUgYmVlbiBzZWxlY3RlZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIC0gVGhlIE11bHRpQWN0aW9uIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBBY3Rpb24gY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgbXVsdGlBY3Rpb25EaXNhYmxlZChhY3Rpb246IE11bHRpU2VsZWN0QWN0aW9uPEVudGl0eVR5cGU+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uLmVuYWJsZWQ/Lih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyBhbGwgZW50cmllcyBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgbWFzdGVyVG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKChyb3cpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbGwgZW50cmllcyBpbiB0aGUgdGFibGUgaGF2ZSBiZWVuIHNlbGVjdGVkLlxuICAgICAqIFRoaXMgaXMgbmVlZGVkIHRvIGRpc3BsYXkgdGhlIFwibWFzdGVyVG9nZ2xlXCItY2hlY2tib3ggY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgYWxsIGVudHJpZXMgaW4gdGhlIHRhYmxlIGhhdmUgYmVlbiBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uRGVzdHJveS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc2VhcmNoIGlucHV0IHRvIGZpbHRlciB0aGUgdGFibGUgZW50cmllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBrZXl1cC1ldmVudCB3aGljaCBjb250YWlucyB0aGUgc2VhcmNoLXN0cmluZyBvZiB0aGUgdXNlci5cbiAgICAgKi9cbiAgICBhcHBseUZpbHRlcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxufSIsIjxoMSBjbGFzcz1cInRpdGxlXCI+e3tkYXRhLmJhc2VEYXRhLnRpdGxlfX08L2gxPlxuXG48ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLWxnLTggY29sLW1kLTYgY29sLXNtLTEyXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3tkYXRhLmJhc2VEYXRhLnNlYXJjaExhYmVsfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IChrZXl1cCk9XCJhcHBseUZpbHRlcigkZXZlbnQpXCIgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJkYXRhLmJhc2VEYXRhLm11bHRpU2VsZWN0QWN0aW9ucy5sZW5ndGhcIlxuICAgICAgICBbY2xhc3MuY29sLWxnLTJdPVwiZGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZVwiXG4gICAgICAgIFtjbGFzcy5jb2wtbGctNF09XCIhZGF0YS5iYXNlRGF0YS5hbGxvd0NyZWF0ZVwiXG4gICAgICAgIFtjbGFzcy5jb2wtbWQtM109XCJkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC02XT1cIiFkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS02XT1cImRhdGEuYmFzZURhdGEuYWxsb3dDcmVhdGVcIlxuICAgICAgICBbY2xhc3MuY29sLXNtLTEyXT1cIiFkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICA+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhY3Rpb25zLWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgbWF0LXJhaXNlZC1idXR0b24+XG4gICAgICAgICAgICB7e2RhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RMYWJlbH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGRhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zXCIgW2Rpc2FibGVkXT1cIm11bHRpQWN0aW9uRGlzYWJsZWQoYWN0aW9uKVwiIChjbGljayk9XCJydW5NdWx0aUFjdGlvbihhY3Rpb24pXCIgbWF0LW1lbnUtaXRlbT5cbiAgICAgICAgICAgIHt7YWN0aW9uLmRpc3BsYXlOYW1lfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cblxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJkYXRhLmJhc2VEYXRhLmFsbG93Q3JlYXRlXCJcbiAgICAgICAgW2NsYXNzLmNvbC1sZy0yXT1cImRhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtbGctNF09XCIhZGF0YS5iYXNlRGF0YS5tdWx0aVNlbGVjdEFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1tZC0zXT1cImRhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtbWQtNl09XCIhZGF0YS5iYXNlRGF0YS5tdWx0aVNlbGVjdEFjdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgW2NsYXNzLmNvbC1zbS02XT1cImRhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zLmxlbmd0aFwiXG4gICAgICAgIFtjbGFzcy5jb2wtc20tMTJdPVwiIWRhdGEuYmFzZURhdGEubXVsdGlTZWxlY3RBY3Rpb25zLmxlbmd0aFwiXG4gICAgPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY3JlYXRlLWJ1dHRvblwiIChjbGljayk9XCJjcmVhdGVFbnRpdHkoKVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICAgICAge3tkYXRhLmJhc2VEYXRhLmNyZWF0ZUJ1dHRvbkxhYmVsfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIj5cbiAgICA8bWF0LXRhYmxlICpuZ0lmPVwiZGF0YVNvdXJjZVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0PlxuICAgICAgICA8IS0tIHNlbGVjdCBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgbW9kdWxlXCIgY2xhc3M9XCJtb2R1bGVcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUobW9kdWxlKSA6IG51bGxcIiBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChtb2R1bGUpXCI+IDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZENvbCBvZiBkYXRhLmJhc2VEYXRhLmRpc3BsYXlDb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJkQ29sLmRpc3BsYXlOYW1lXCI+XG4gICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICB7e2RDb2wuZGlzcGxheU5hbWV9fVxuICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8bWF0LWNlbGwgY2xhc3M9XCJlbnRpdHlcIiBbY2xhc3MuZW5hYmxlZF09XCJkYXRhLmJhc2VEYXRhLmFsbG93RWRpdChlbnRpdHkpXCIgKGNsaWNrKT1cImVkaXRFbnRpdHkoZW50aXR5KVwiICptYXRDZWxsRGVmPVwibGV0IGVudGl0eVwiPlxuICAgICAgICAgICAgICAgIHt7ZENvbC52YWx1ZShlbnRpdHkpfX1cbiAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC9tYXQtcm93PlxuICAgIDwvbWF0LXRhYmxlPlxuXG4gICAgPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJkYXRhU291cmNlXCIgaWQ9XCJwYWdpbmF0b3JcIiBbbGVuZ3RoXT1cImRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aFwiIFtwYWdlSW5kZXhdPVwiMFwiIFtwYWdlU2l6ZV09XCIxMFwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAyNSwgNTBdXCI+IDwvbWF0LXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
@@ -10,6 +10,8 @@ import { MatPaginatorModule } from '@angular/material/paginator';
10
10
  import { MatButtonModule } from '@angular/material/button';
11
11
  import { MatMenuModule } from '@angular/material/menu';
12
12
  import { MatDialogModule } from '@angular/material/dialog';
13
+ import { NgxMatEntityCreateDialogModule } from './create-dialog/create-entity-dialog.module';
14
+ import { NgxMatEntityEditDialogModule } from './edit-dialog/edit-entity-dialog.module';
13
15
  import * as i0 from "@angular/core";
14
16
  export class NgxMatEntityTableModule {
15
17
  }
@@ -23,7 +25,9 @@ NgxMatEntityTableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
23
25
  MatPaginatorModule,
24
26
  MatButtonModule,
25
27
  MatMenuModule,
26
- MatDialogModule], exports: [NgxMatEntityTableComponent] });
28
+ MatDialogModule,
29
+ NgxMatEntityCreateDialogModule,
30
+ NgxMatEntityEditDialogModule], exports: [NgxMatEntityTableComponent] });
27
31
  NgxMatEntityTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, imports: [[
28
32
  CommonModule,
29
33
  MatInputModule,
@@ -34,7 +38,9 @@ NgxMatEntityTableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0",
34
38
  MatPaginatorModule,
35
39
  MatButtonModule,
36
40
  MatMenuModule,
37
- MatDialogModule
41
+ MatDialogModule,
42
+ NgxMatEntityCreateDialogModule,
43
+ NgxMatEntityEditDialogModule,
38
44
  ]] });
39
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NgxMatEntityTableModule, decorators: [{
40
46
  type: NgModule,
@@ -50,9 +56,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
50
56
  MatPaginatorModule,
51
57
  MatButtonModule,
52
58
  MatMenuModule,
53
- MatDialogModule
59
+ MatDialogModule,
60
+ NgxMatEntityCreateDialogModule,
61
+ NgxMatEntityEditDialogModule,
54
62
  ],
55
63
  exports: [NgxMatEntityTableComponent]
56
64
  }]
57
65
  }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBa0IzRCxNQUFNLE9BQU8sdUJBQXVCOztxSEFBdkIsdUJBQXVCO3NIQUF2Qix1QkFBdUIsaUJBZmpCLDBCQUEwQixhQUVyQyxZQUFZO1FBQ1osY0FBYztRQUNkLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGNBQWM7UUFDZCxrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGFBQWE7UUFDYixlQUFlLGFBRVQsMEJBQTBCO3NIQUUzQix1QkFBdUIsWUFkdkI7WUFDTCxZQUFZO1lBQ1osY0FBYztZQUNkLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsaUJBQWlCO1lBQ2pCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO1NBQ2xCOzRGQUdRLHVCQUF1QjtrQkFoQm5DLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQzFDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixlQUFlO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5neE1hdEVudGl0eVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVNb2R1bGUge30iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdGVyaWFsLWVudGl0eS9zcmMvY29tcG9uZW50cy90YWJsZS90YWJsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBb0J2RixNQUFNLE9BQU8sdUJBQXVCOztxSEFBdkIsdUJBQXVCO3NIQUF2Qix1QkFBdUIsaUJBakJqQiwwQkFBMEIsYUFFckMsWUFBWTtRQUNaLGNBQWM7UUFDZCxXQUFXO1FBQ1gsa0JBQWtCO1FBQ2xCLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2Qsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixhQUFhO1FBQ2IsZUFBZTtRQUNmLDhCQUE4QjtRQUM5Qiw0QkFBNEIsYUFFdEIsMEJBQTBCO3NIQUUzQix1QkFBdUIsWUFoQnZCO1lBQ0wsWUFBWTtZQUNaLGNBQWM7WUFDZCxXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCLGVBQWU7WUFDZixhQUFhO1lBQ2IsZUFBZTtZQUNmLDhCQUE4QjtZQUM5Qiw0QkFBNEI7U0FDL0I7NEZBR1EsdUJBQXVCO2tCQWxCbkMsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztvQkFDMUMsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsOEJBQThCO3dCQUM5Qiw0QkFBNEI7cUJBQy9CO29CQUNELE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5VGFibGVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTmd4TWF0RW50aXR5Q3JlYXRlRGlhbG9nTW9kdWxlIH0gZnJvbSAnLi9jcmVhdGUtZGlhbG9nL2NyZWF0ZS1lbnRpdHktZGlhbG9nLm1vZHVsZSc7XG5pbXBvcnQgeyBOZ3hNYXRFbnRpdHlFZGl0RGlhbG9nTW9kdWxlIH0gZnJvbSAnLi9lZGl0LWRpYWxvZy9lZGl0LWVudGl0eS1kaWFsb2cubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgICAgIE5neE1hdEVudGl0eUNyZWF0ZURpYWxvZ01vZHVsZSxcbiAgICAgICAgTmd4TWF0RW50aXR5RWRpdERpYWxvZ01vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtOZ3hNYXRFbnRpdHlUYWJsZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0RW50aXR5VGFibGVNb2R1bGUge30iXX0=
@@ -0,0 +1,51 @@
1
+ import { PropertyDecoratorConfigInternal } from '../base/property-decorator-internal.data';
2
+ /**
3
+ * The internal EntityArrayDecoratorConfig. Sets default values.
4
+ */
5
+ export class EntityArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
6
+ constructor(data) {
7
+ super(data);
8
+ this.createInline = data.createInline != undefined ? data.createInline : true;
9
+ this.displayStyle = data.displayStyle;
10
+ this.itemType = data.itemType;
11
+ this.EntityClass = data.EntityClass;
12
+ this.displayColumns = data.displayColumns;
13
+ this.createInline = data.createInline != undefined ? data.createInline : true;
14
+ this.missingErrorMessage = data.missingErrorMessage ? data.missingErrorMessage : 'Needs to contain at least one value';
15
+ this.defaultWidths = data.defaultWidths ? data.defaultWidths : [12, 12, 12];
16
+ this.addButtonLabel = data.addButtonLabel ? data.addButtonLabel : 'Add';
17
+ this.removeButtonLabel = data.removeButtonLabel ? data.removeButtonLabel : 'Remove';
18
+ }
19
+ }
20
+ /**
21
+ * The internal StringChipsArrayDecoratorConfig. Sets default values.
22
+ */
23
+ export class StringChipsArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
24
+ constructor(data) {
25
+ super(data);
26
+ this.deleteIcon = data.deleteIcon ? data.deleteIcon : 'fas fa-circle-minus';
27
+ this.displayStyle = data.displayStyle;
28
+ this.itemType = data.itemType;
29
+ this.maxLength = data.maxLength;
30
+ this.minLength = data.minLength;
31
+ this.regex = data.regex;
32
+ this.defaultWidths = data.defaultWidths ? data.defaultWidths : [6, 12, 12];
33
+ }
34
+ }
35
+ /**
36
+ * The internal AutocompleteStringChipsArrayDecoratorConfig. Sets default values.
37
+ */
38
+ export class AutocompleteStringChipsArrayDecoratorConfigInternal extends PropertyDecoratorConfigInternal {
39
+ constructor(data) {
40
+ super(data);
41
+ this.autocompleteValues = data.autocompleteValues;
42
+ this.deleteIcon = data.deleteIcon ? data.deleteIcon : 'fas fa-circle-minus';
43
+ this.displayStyle = data.displayStyle;
44
+ this.itemType = data.itemType;
45
+ this.maxLength = data.maxLength;
46
+ this.minLength = data.minLength;
47
+ this.regex = data.regex;
48
+ this.defaultWidths = data.defaultWidths ? data.defaultWidths : [6, 12, 12];
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZGVjb3JhdG9yLWludGVybmFsLmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0ZXJpYWwtZW50aXR5L3NyYy9kZWNvcmF0b3JzL2FycmF5L2FycmF5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzNGOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtDQUNULFNBQVEsK0JBQStCO0lBcUJ2QyxZQUFZLElBQTRDO1FBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM5RSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUM7UUFDdkgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDdEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFBLENBQUMsQ0FBQyxRQUFRLENBQUE7SUFDdEYsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUNBQXdDLFNBQVEsK0JBQStCO0lBY3hGLFlBQVksSUFBcUM7UUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1EQUNULFNBQVEsK0JBQStCO0lBaUJ2QyxZQUFZLElBQWlEO1FBQ3pELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQTtRQUMzRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZW50aXR5LW1vZGVsLmNsYXNzJztcbmltcG9ydCB7IENyZWF0ZURpYWxvZ0RhdGEgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLWRhdGEnO1xuaW1wb3J0IHsgRGVjb3JhdG9yVHlwZXMgfSBmcm9tICcuLi9iYXNlL2RlY29yYXRvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9iYXNlL3Byb3BlcnR5LWRlY29yYXRvci1pbnRlcm5hbC5kYXRhJztcbmltcG9ydCB7IEFycmF5VGFibGVEaXNwbGF5Q29sdW1uLCBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnLCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZywgU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyB9IGZyb20gJy4vYXJyYXktZGVjb3JhdG9yLmRhdGEnO1xuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZy4gU2V0cyBkZWZhdWx0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eUFycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWw8RW50aXR5VHlwZSBleHRlbmRzIEVudGl0eT5cbiAgICBleHRlbmRzIFByb3BlcnR5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgaW1wbGVtZW50cyBFbnRpdHlBcnJheURlY29yYXRvckNvbmZpZzxFbnRpdHlUeXBlPiB7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGl0ZW1UeXBlOiBEZWNvcmF0b3JUeXBlcy5PQkpFQ1Q7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBkaXNwbGF5U3R5bGU6ICd0YWJsZSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBFbnRpdHlDbGFzczogbmV3IChlbnRpdHk/OiBFbnRpdHlUeXBlKSA9PiBFbnRpdHlUeXBlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheUNvbHVtbnM6IEFycmF5VGFibGVEaXNwbGF5Q29sdW1uPEVudGl0eVR5cGU+W107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBjcmVhdGVEaWFsb2dEYXRhPzogQ3JlYXRlRGlhbG9nRGF0YTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGNyZWF0ZUlubGluZTogYm9vbGVhbjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIG1pc3NpbmdFcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGFkZEJ1dHRvbkxhYmVsOiBzdHJpbmc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICByZW1vdmVCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogRW50aXR5QXJyYXlEZWNvcmF0b3JDb25maWc8RW50aXR5VHlwZT4pIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMuY3JlYXRlSW5saW5lID0gZGF0YS5jcmVhdGVJbmxpbmUgIT0gdW5kZWZpbmVkID8gZGF0YS5jcmVhdGVJbmxpbmUgOiB0cnVlO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9IGRhdGEuZGlzcGxheVN0eWxlO1xuICAgICAgICB0aGlzLml0ZW1UeXBlID0gZGF0YS5pdGVtVHlwZTtcbiAgICAgICAgdGhpcy5FbnRpdHlDbGFzcyA9IGRhdGEuRW50aXR5Q2xhc3M7XG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBkYXRhLmRpc3BsYXlDb2x1bW5zO1xuICAgICAgICB0aGlzLmNyZWF0ZUlubGluZSA9IGRhdGEuY3JlYXRlSW5saW5lICE9IHVuZGVmaW5lZCA/IGRhdGEuY3JlYXRlSW5saW5lIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5taXNzaW5nRXJyb3JNZXNzYWdlID0gZGF0YS5taXNzaW5nRXJyb3JNZXNzYWdlID8gZGF0YS5taXNzaW5nRXJyb3JNZXNzYWdlIDogJ05lZWRzIHRvIGNvbnRhaW4gYXQgbGVhc3Qgb25lIHZhbHVlJztcbiAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGhzID0gZGF0YS5kZWZhdWx0V2lkdGhzID8gZGF0YS5kZWZhdWx0V2lkdGhzIDogWzEyLCAxMiwgMTJdO1xuICAgICAgICB0aGlzLmFkZEJ1dHRvbkxhYmVsID0gZGF0YS5hZGRCdXR0b25MYWJlbCA/IGRhdGEuYWRkQnV0dG9uTGFiZWw6ICdBZGQnXG4gICAgICAgIHRoaXMucmVtb3ZlQnV0dG9uTGFiZWwgPSBkYXRhLnJlbW92ZUJ1dHRvbkxhYmVsID8gZGF0YS5yZW1vdmVCdXR0b25MYWJlbDogJ1JlbW92ZSdcbiAgICB9XG59XG5cbi8qKlxuICogVGhlIGludGVybmFsIFN0cmluZ0NoaXBzQXJyYXlEZWNvcmF0b3JDb25maWcuIFNldHMgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnSW50ZXJuYWwgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBpdGVtVHlwZTogRGVjb3JhdG9yVHlwZXMuU1RSSU5HO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGlzcGxheVN0eWxlOiAnY2hpcHMnO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgZGVsZXRlSWNvbjogc3RyaW5nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gICAgcmVnZXg/OiBSZWdFeHA7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnKSB7XG4gICAgICAgIHN1cGVyKGRhdGEpO1xuICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBkYXRhLmRlbGV0ZUljb24gPyBkYXRhLmRlbGV0ZUljb24gOiAnZmFzIGZhLWNpcmNsZS1taW51cyc7XG4gICAgICAgIHRoaXMuZGlzcGxheVN0eWxlID0gZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSBkYXRhLml0ZW1UeXBlO1xuICAgICAgICB0aGlzLm1heExlbmd0aCA9IGRhdGEubWF4TGVuZ3RoO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IGRhdGEubWluTGVuZ3RoO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gZGF0YS5yZWdleDtcbiAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGhzID0gZGF0YS5kZWZhdWx0V2lkdGhzID8gZGF0YS5kZWZhdWx0V2lkdGhzIDogWzYsIDEyLCAxMl07XG4gICAgfVxufVxuXG4vKipcbiAqIFRoZSBpbnRlcm5hbCBBdXRvY29tcGxldGVTdHJpbmdDaGlwc0FycmF5RGVjb3JhdG9yQ29uZmlnLiBTZXRzIGRlZmF1bHQgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZ0ludGVybmFsXG4gICAgZXh0ZW5kcyBQcm9wZXJ0eURlY29yYXRvckNvbmZpZ0ludGVybmFsIGltcGxlbWVudHMgQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZyB7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGF1dG9jb21wbGV0ZVZhbHVlczogc3RyaW5nW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtanNkb2NcbiAgICBpdGVtVHlwZTogRGVjb3JhdG9yVHlwZXMuU1RSSU5HX0FVVE9DT01QTEVURTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRpc3BsYXlTdHlsZTogJ2NoaXBzJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIGRlbGV0ZUljb246IHN0cmluZztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1qc2RvY1xuICAgIHJlZ2V4PzogUmVnRXhwO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogQXV0b2NvbXBsZXRlU3RyaW5nQ2hpcHNBcnJheURlY29yYXRvckNvbmZpZykge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVWYWx1ZXMgPSBkYXRhLmF1dG9jb21wbGV0ZVZhbHVlcztcbiAgICAgICAgdGhpcy5kZWxldGVJY29uID0gZGF0YS5kZWxldGVJY29uID8gZGF0YS5kZWxldGVJY29uIDogJ2ZhcyBmYS1jaXJjbGUtbWludXMnXG4gICAgICAgIHRoaXMuZGlzcGxheVN0eWxlID0gZGF0YS5kaXNwbGF5U3R5bGU7XG4gICAgICAgIHRoaXMuaXRlbVR5cGUgPSBkYXRhLml0ZW1UeXBlO1xuICAgICAgICB0aGlzLm1heExlbmd0aCA9IGRhdGEubWF4TGVuZ3RoO1xuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IGRhdGEubWluTGVuZ3RoO1xuICAgICAgICB0aGlzLnJlZ2V4ID0gZGF0YS5yZWdleDtcbiAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGhzID0gZGF0YS5kZWZhdWx0V2lkdGhzID8gZGF0YS5kZWZhdWx0V2lkdGhzIDogWzYsIDEyLCAxMl07XG4gICAgfVxufSJdfQ==