verben-authentication-ui 0.5.6 → 0.5.9

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 (23) hide show
  1. package/esm2022/lib/components/role-control/role-control.component.mjs +33 -7
  2. package/esm2022/lib/components/user-management/base-table-style.mjs +2 -2
  3. package/esm2022/lib/components/user-management/services/user-management.service.mjs +19 -1
  4. package/esm2022/lib/components/user-management/user-management-form/use-management-form.component.mjs +13 -3
  5. package/esm2022/lib/components/user-management/user-management.component.mjs +303 -97
  6. package/esm2022/lib/components/user-request/user-request.component.mjs +2 -2
  7. package/esm2022/lib/components/user-request-approval/access-request.columns.mjs +12 -7
  8. package/esm2022/lib/components/user-request-approval/states/user-access-request.state.mjs +2 -2
  9. package/esm2022/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +3 -3
  10. package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +8 -9
  11. package/esm2022/lib/components/user-request-approval/user-request-form/use-request-form.component.mjs +7 -3
  12. package/esm2022/lib/models/conditions.mjs +13 -0
  13. package/esm2022/lib/services/http-web-request.service.mjs +2 -2
  14. package/fesm2022/verben-authentication-ui.mjs +476 -216
  15. package/fesm2022/verben-authentication-ui.mjs.map +1 -1
  16. package/lib/components/role-control/role-control.component.d.ts +2 -2
  17. package/lib/components/user-management/services/user-management.service.d.ts +1 -0
  18. package/lib/components/user-management/user-management-form/use-management-form.component.d.ts +9 -1
  19. package/lib/components/user-management/user-management.component.d.ts +48 -9
  20. package/lib/components/user-request-approval/user-request-approval.component.d.ts +1 -0
  21. package/lib/components/user-request-approval/user-request-form/use-request-form.component.d.ts +1 -0
  22. package/lib/models/conditions.d.ts +11 -0
  23. package/package.json +2 -2
@@ -1,40 +1,98 @@
1
- import { Component, ViewChild } from '@angular/core';
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
2
  import { columns } from './user-management.columns';
3
+ import { SearchPropertySign } from '../../models/SearchPropertySign';
3
4
  import { baseStyle } from './base-table-style';
4
5
  import { DataFilterType, } from 'verben-ng-ui';
5
6
  import { UserAccessRequestStatus } from '../../models/user-access-request-status';
6
7
  import { ObjectState } from '../../models/object-state';
7
8
  import { ErrorResponse } from '../../models/ErrorResponse';
9
+ import { UserManagementFormComponent } from './user-management-form/use-management-form.component';
10
+ import { Subject } from 'rxjs';
8
11
  import * as i0 from "@angular/core";
9
- import * as i1 from "./services/user-management.service";
10
- import * as i2 from "@angular/common";
11
- import * as i3 from "verben-ng-ui";
12
- import * as i4 from "./user-management-form/use-management-form.component";
12
+ import * as i1 from "@angular/router";
13
+ import * as i2 from "./services/user-management.service";
14
+ import * as i3 from "../../services/http-web-request.service";
15
+ import * as i4 from "../../services/util.service";
16
+ import * as i5 from "../../services/environment.service";
17
+ import * as i6 from "@angular/common";
18
+ import * as i7 from "verben-ng-ui";
19
+ import * as i8 from "./user-management-form/use-management-form.component";
20
+ var DateFilterTypes;
21
+ (function (DateFilterTypes) {
22
+ DateFilterTypes["Before"] = "LT";
23
+ DateFilterTypes["On"] = "EQ";
24
+ DateFilterTypes["After"] = "GT";
25
+ })(DateFilterTypes || (DateFilterTypes = {}));
13
26
  export class UserManagementComponent {
27
+ route;
14
28
  userManagementService;
29
+ server;
30
+ utilService;
31
+ envSvc;
15
32
  cardDataView;
16
33
  dataView;
34
+ childComponent;
35
+ currentSearchTerm = '';
36
+ filteredColumns = columns;
37
+ skip = 0;
17
38
  users = [];
39
+ searchTerm$ = new Subject();
40
+ searchDebounceTime = 500;
41
+ pageSize = 10;
42
+ pageState = null;
18
43
  errorMessage = '';
44
+ appliedFilters = false;
45
+ isLoading = false;
46
+ hasMore = true;
47
+ User = [];
48
+ dataFit = {
49
+ PageSize: 10,
50
+ Skip: 0,
51
+ Total: 0,
52
+ Result: [],
53
+ LastItem: [''],
54
+ IsLoadingResults: false
55
+ };
56
+ currentFilters = [];
57
+ currentSorts = [];
58
+ role = '';
19
59
  cardContextHistory = [];
20
- constructor(userManagementService) {
60
+ constructor(route, userManagementService, server, utilService, envSvc) {
61
+ this.route = route;
21
62
  this.userManagementService = userManagementService;
63
+ this.server = server;
64
+ this.utilService = utilService;
65
+ this.envSvc = envSvc;
22
66
  }
23
- ngOnInit() {
67
+ async ngOnInit() {
24
68
  this.selectedParent = '1';
25
69
  this.selectedOption = ['Opt 1'];
26
70
  this.selectedOptionTwo = ['1'];
27
71
  this.selectedOptionThree = '1';
28
- this.fetchUsers();
29
- this.fetchDatq();
72
+ // this.fetchUsers();
73
+ // this.fetchDatq();
74
+ this.fetchDatq2();
75
+ // this.fetchUser();
76
+ this.fetchUsersByRole();
77
+ this.route.paramMap.subscribe(params => {
78
+ this.role = params.get('role') || ''; // Default to an empty string if no role
79
+ this.fetchUsersByRole();
80
+ });
30
81
  }
31
- async fetchUsers() {
32
- const res = await this.userManagementService.getUsers(0, 10, 'name', 'asc');
33
- console.log(res);
34
- if (res instanceof ErrorResponse) {
35
- console.error('Error:', res);
36
- }
37
- else {
82
+ async fetchUsersByRole() {
83
+ try {
84
+ // Use `this.role` to filter or fetch users by their role
85
+ const roleParam = this.role?.trim() || null; // Ensure valid role or null
86
+ const res = await this.userManagementService.getRealUsers(roleParam, 0, // Skip
87
+ 10, // Limit
88
+ 'name', // Sort parameter
89
+ 'asc' // Sort order
90
+ );
91
+ if (res instanceof ErrorResponse) {
92
+ console.error('Error:', res);
93
+ return; // Exit on error
94
+ }
95
+ // Map the response to `cardData`
38
96
  this.cardData = res.map(({ FirstName, MailAddress, PhoneNumber, RoleID, Status }) => ({
39
97
  selected: false,
40
98
  title: FirstName,
@@ -53,12 +111,45 @@ export class UserManagementComponent {
53
111
  children: [],
54
112
  }));
55
113
  }
114
+ catch (error) {
115
+ console.error('Unexpected error while fetching users by role:', error);
116
+ }
56
117
  }
118
+ // User/GetUsers/{skip}/{limit}/{sortParam}/{sortOrder}
119
+ // User/GetUserWithParam/{param}/{skip}/{limit}/{sortParam}/{sortOrder}
120
+ // User/SaveUsers(List<User>)
121
+ // User/Login(LoginParam param)
122
+ // User/ChangeFirstTimePassword(PasswordRequestParam passwordRequestParam):Void
123
+ // User/DeleteUsers(List<string>)
124
+ // this.setUpMappedData(result);
125
+ // this.setUpCardData();
57
126
  // new update
58
127
  cardData = [];
59
128
  data = []; // Initialize data
60
- async fetchDatq() {
61
- const res = await this.userManagementService.getUsers(0, 10, 'name', 'asc');
129
+ // async fetchDatq(): Promise<void> {
130
+ // const res = await this.userManagementService.getUsers(0, 10, 'name', 'asc');
131
+ // console.log(res);
132
+ // if (res instanceof ErrorResponse) {
133
+ // console.error('Error:', res);
134
+ // } else {
135
+ // this.data = res.map((user) => ({
136
+ // CreatedAt: user.CreatedAt, // API key for "Created"
137
+ // Name: `${user.FirstName} ${user.LastName}`, // Combine FirstName and LastName
138
+ // MailAddress: user.MailAddress, // Use correct key for "E-Mail"
139
+ // PhoneNumber: user.PhoneNumber || '', // Handle undefined PhoneNumber
140
+ // Address: user.Address || '', // If Address exists in API
141
+ // Role: user.RoleID || '', // Map Role if available
142
+ // Status: user.Status || '', // Map Status
143
+ // UpdatedAt: user.UpdatedAt,
144
+ // DataState: user.DataState,
145
+ // FirstName: user.FirstName,
146
+ // LastName: user.LastName,
147
+ // OtherName: user.OtherName,
148
+ // }));
149
+ // }
150
+ // }
151
+ async fetchDatq2() {
152
+ const res = await this.userManagementService.getRealUsers(this.role, 0, 10, 'name', 'asc');
62
153
  console.log(res);
63
154
  if (res instanceof ErrorResponse) {
64
155
  console.error('Error:', res);
@@ -80,6 +171,57 @@ export class UserManagementComponent {
80
171
  }));
81
172
  }
82
173
  }
174
+ async fetchUser(sortValue = 'CreatedAt', order = 'asc') {
175
+ this.isLoading = true;
176
+ this.utilService.sendBI(true);
177
+ try {
178
+ const res = await this.server.get(`User/GetUsers/${this.skip}/${this.pageSize}/${sortValue}/${order}`);
179
+ this.utilService.sendBI(false);
180
+ if (res instanceof ErrorResponse) {
181
+ // Handle error response
182
+ console.error('Error fetching logs:', res);
183
+ }
184
+ else {
185
+ const response = res;
186
+ this.dataFit = response;
187
+ this.User = [...this.User, ...response.Result];
188
+ this.skip += this.pageSize;
189
+ this.hasMore = this.skip < response.Total;
190
+ }
191
+ }
192
+ catch (error) {
193
+ console.error('Error:', error);
194
+ }
195
+ finally {
196
+ this.isLoading = false;
197
+ }
198
+ }
199
+ async fetchUsers() {
200
+ const res = await this.userManagementService.getUsers(0, 10, 'name', 'asc');
201
+ console.log(res);
202
+ if (res instanceof ErrorResponse) {
203
+ console.error('Error:', res);
204
+ }
205
+ else {
206
+ this.cardData = res.map(({ FirstName, MailAddress, PhoneNumber, RoleID, Status }) => ({
207
+ selected: false,
208
+ title: FirstName,
209
+ data: {
210
+ FirstName,
211
+ MailAddress,
212
+ PhoneNumber,
213
+ RoleID,
214
+ Status,
215
+ },
216
+ body: [
217
+ { title: 'Name', value: FirstName },
218
+ { title: 'E-Mail Address', value: MailAddress },
219
+ { title: 'Phone Number', value: PhoneNumber ?? '' },
220
+ ],
221
+ children: [],
222
+ }));
223
+ }
224
+ }
83
225
  columns = columns;
84
226
  // data = mockData;
85
227
  styles = baseStyle;
@@ -89,6 +231,13 @@ export class UserManagementComponent {
89
231
  selectedOptionTwo = [];
90
232
  selectedOptionThree;
91
233
  missingObject;
234
+ clearLogs(sortValue = 'CreatedAt', order = 'asc') {
235
+ this.User = []; // Clear the logs array
236
+ this.skip = 0; // Reset the skip value
237
+ this.hasMore = true; // Reset the flag to allow fetching more logs
238
+ this.appliedFilters = false;
239
+ this.fetchUser(sortValue, order);
240
+ }
92
241
  generateNewUserManagement() {
93
242
  const newId = this.data.length + 1; // Incremental ID based on current data length
94
243
  return {
@@ -115,32 +264,6 @@ export class UserManagementComponent {
115
264
  Status: UserAccessRequestStatus.Pending,
116
265
  };
117
266
  }
118
- // Function to add a new user to mockData
119
- addNewUserToMockData() {
120
- const newUser = this.generateNewUserManagement();
121
- this.data.push(newUser); // Adds the new user to the data array
122
- // Optionally, update cardData with the new user entry for card display
123
- const fullName = `${newUser.FirstName} ${newUser.LastName}`;
124
- const newCardData = {
125
- selected: false,
126
- title: fullName,
127
- data: {
128
- Name: fullName,
129
- MailAddress: newUser.MailAddress,
130
- PhoneNumber: newUser.PhoneNumber,
131
- RoleID: newUser.Role,
132
- Status: newUser.Status,
133
- },
134
- body: [
135
- { title: 'Name', value: fullName },
136
- { title: 'E-Mail Address', value: newUser.MailAddress },
137
- { title: 'Phone Number', value: newUser.PhoneNumber ?? '' },
138
- ],
139
- children: [],
140
- };
141
- this.cardData.push(newCardData); // Update cardData array with the new user
142
- return newUser;
143
- }
144
267
  // Grid view properties
145
268
  isGridView = true;
146
269
  currentData;
@@ -148,6 +271,8 @@ export class UserManagementComponent {
148
271
  selectedFilterTableCount = 0;
149
272
  isOPen = true;
150
273
  selectedSortCount = 0;
274
+ showFilter = false;
275
+ searchTerm = '';
151
276
  showColumn = false;
152
277
  showSort = false;
153
278
  selectedAll = false;
@@ -187,6 +312,32 @@ export class UserManagementComponent {
187
312
  { Id: '5', Name: 'Akintunde' },
188
313
  ]), 3000));
189
314
  }
315
+ onSave() {
316
+ if (this.childComponent.form.valid) {
317
+ // const userData: User = this.childComponent.form.value;
318
+ // console.log('Payload:', [userData]); // Log the payload to check its structure
319
+ // this.userManagementService.saveUsers([userData]).then(
320
+ // (result) => {
321
+ // if (result instanceof ErrorResponse) {
322
+ // console.error('ErrorResponse from server:', result.ErrorMsg);
323
+ // } else {
324
+ // console.log('User saved successfully:', result);
325
+ // }
326
+ // },
327
+ // (error) => {
328
+ // console.error('Unexpected error saving user:', error);
329
+ // }
330
+ // );
331
+ console.log(this.childComponent.form.value);
332
+ }
333
+ else {
334
+ console.error('Form is invalid');
335
+ }
336
+ }
337
+ onDelete() {
338
+ console.log('Child form delete triggered');
339
+ // Perform delete logic here
340
+ }
190
341
  onDropdownChange(event) {
191
342
  // console.log({
192
343
  // 'Test Parent Value': this.selectedParent,
@@ -260,57 +411,89 @@ export class UserManagementComponent {
260
411
  // this.changeDetectorRef.detectChanges();
261
412
  }
262
413
  }
263
- newItem() {
264
- const newData = this.addNewUserToMockData();
265
- const newCardData = {
266
- selected: true,
267
- title: `${newData.FirstName} ${newData.LastName}`,
268
- data: {
269
- ...newData,
270
- },
271
- body: [
272
- { title: 'Name', value: `${newData.FirstName} ${newData.LastName}` },
273
- { title: 'E-Mail Address', value: newData.MailAddress },
274
- { title: 'Phone Number', value: newData.PhoneNumber ?? '' },
275
- ],
276
- children: [],
277
- };
278
- if (this.dataView.isTableView) {
279
- this.dataView.toggleView();
414
+ async postSearch(payload) {
415
+ this.utilService.sendBI(true);
416
+ const res = await this.server.post(``, payload);
417
+ this.utilService.sendBI(false);
418
+ if (res instanceof ErrorResponse) {
419
+ this.appliedFilters = false;
420
+ return;
421
+ }
422
+ else {
423
+ this.appliedFilters = true;
424
+ const response = res;
425
+ this.dataFit = response;
426
+ this.User = response.Result;
280
427
  }
281
- // First reset all selections
282
- this.cardData.forEach((item) => {
283
- item.selected = false;
284
- if (item.children) {
285
- item.children.forEach((child) => (child.selected = false));
428
+ }
429
+ onFilterApplied(appliedFilter) {
430
+ this.showFilter = false;
431
+ if (Array.isArray(appliedFilter)) {
432
+ this.selectedFilterTableCount = appliedFilter.length;
433
+ console.log(appliedFilter);
434
+ const queryParams = appliedFilter
435
+ .filter((filter) => filter.checked)
436
+ .map((filter) => ({
437
+ PropertyName: filter.name,
438
+ EntityValue: filter.value,
439
+ Type: filter.type,
440
+ Operator: 'And',
441
+ Sign: filter.condition === "Equals"
442
+ ? "=="
443
+ : filter.condition === "NotEquals"
444
+ ? "!="
445
+ : filter.condition === "GreaterThan"
446
+ ? ">"
447
+ : filter.condition === "LessThan"
448
+ ? "<"
449
+ : filter.condition === "Contains"
450
+ ? "LIKE"
451
+ : "",
452
+ }));
453
+ this.postSearch(queryParams);
454
+ }
455
+ }
456
+ reset() {
457
+ this.skip = 0;
458
+ this.pageSize = 20;
459
+ }
460
+ async onSearch(event) {
461
+ this.searchTerm = event.value;
462
+ this.reset();
463
+ if (!this.searchTerm) {
464
+ this.clearLogs('name', 'asc');
465
+ return;
466
+ }
467
+ this.isLoading = true;
468
+ this.utilService.sendBI(true);
469
+ try {
470
+ const res = await this.server.get(`User/GetUserWithParam/${this.searchTerm}/${this.skip}/${this.pageSize}/name/asc`);
471
+ this.utilService.sendBI(false);
472
+ if (res instanceof ErrorResponse) {
473
+ console.error('Error during search:', res);
474
+ this.appliedFilters = false;
286
475
  }
287
- });
288
- // this.cardData = [newCardData].concat(this.cardData);
289
- // this.cardDataView.onItemClick(newCardData)
290
- this.cardData = [newCardData, ...this.cardData];
291
- this.currentData = this.cardDataView.onItemClick(newCardData);
476
+ else {
477
+ const response = res;
478
+ this.dataFit = response;
479
+ this.User = response.Result;
480
+ }
481
+ }
482
+ catch (error) {
483
+ console.error('Search error:', error);
484
+ this.appliedFilters = false;
485
+ }
486
+ finally {
487
+ this.isLoading = false;
488
+ }
292
489
  }
293
- // toggleChildView(action: string) {
294
- // if (action === 'create') {
295
- // const newCard: CardData = {
296
- // selected: false,
297
- // title: 'New Card', // Default title, change as needed
298
- // data: { Name: '', MailAddress: '', PhoneNumber: '' },
299
- // body: [
300
- // { title: 'Name', value: '' },
301
- // { title: 'E-Mail Address', value: '' },
302
- // { title: 'Phone Number', value: '' }
303
- // ],
304
- // children: []
305
- // };
306
- // this.cardData.push(newCard);
307
- // }
308
- // }
309
490
  clearData() {
310
491
  this.currentData = {};
311
492
  }
312
493
  loadMore() {
313
- this.cardData = this.cardData.concat(this.cardData);
494
+ if (this.hasMore) {
495
+ this.fetchUser();
496
+ }
314
497
  }
315
498
  onColumnChange(event) {
316
499
  this.showColumn = event;
@@ -322,18 +505,34 @@ export class UserManagementComponent {
322
505
  onColumnsUpdated(updatedColumns) {
323
506
  this.onColumnChange(false);
324
507
  this.selectedColumnCount = updatedColumns.length;
508
+ if (updatedColumns) {
509
+ // Filter columns to include only visible ones
510
+ this.filteredColumns = this.columns.filter((col) => this.visibleColumns.find((filter) => filter.name === col.header && filter.checked));
511
+ // Reorder columns based on the order in visibleColumns
512
+ const visibleColumnOrder = this.visibleColumns
513
+ .filter((filter) => filter.checked)
514
+ .map((filter) => filter.name);
515
+ this.columns.sort((a, b) => {
516
+ const indexA = visibleColumnOrder.indexOf(a.header);
517
+ const indexB = visibleColumnOrder.indexOf(b.header);
518
+ return indexA - indexB;
519
+ });
520
+ }
325
521
  }
522
+ // onFilterUpdated(updatedFilters: IDataFilter[]): void {
523
+ // if (!Array.isArray(updatedFilters)) {
524
+ // console.error('updatedFilters is not an array:', updatedFilters);
525
+ // updatedFilters = []; // fallback to an empty array
526
+ // }
527
+ // }
326
528
  onSortUpdated(updatedSorts) {
327
- this.onSortChange(false);
328
- this.selectedSortCount = updatedSorts.length;
329
- console.log(updatedSorts);
529
+ this.currentSorts = updatedSorts;
330
530
  }
331
531
  onViewChange(isGridView) { }
332
532
  onStateChange(event) {
333
533
  console.log(`State changed for ${event.key}:`, event.value);
334
534
  if (event.key === 'create') {
335
535
  console.log('peace is a boy');
336
- this.newItem();
337
536
  // const newUser = this.newItem()
338
537
  // if ( newUser && this.cardDataView) {
339
538
  // this.dataView.toggleView();
@@ -350,17 +549,24 @@ export class UserManagementComponent {
350
549
  // }
351
550
  }
352
551
  }
353
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, deps: [{ token: i1.UserManagementService }], target: i0.ɵɵFactoryTarget.Component });
354
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserManagementComponent, selector: "lib-user-management", viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [data]=\"data\"\n [columns]=\"columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow >\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n >\n <verbena-badge\n borderRadius=\"20px\"\n width=\"121px\"\n text=\"{{value}}\"\n bgColor=\"#D6F3E6\"\n textColor=\"#2DB76F\"\n pd=\"5px 15px\"\n fontSize=\"16px\"\n >\n\n\n </verbena-badge>\n </ng-template>\n </ng-container>\n\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n class=\"gap-1\"\n >\n <verben-left-card-data-view class=\"m-0 gap-2\" >\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl scroll-no border-primary border-[1px] gap-1 h-full justify-pp m-0 overflow-y-auto overflow-hidden\"\n [cardDataList]=\"cardData\"\n\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"vlcd.showChildren(item)\"\n [ngClass]=\"vlcd.showToggle(item) ? 'visible' : 'invisible'\"\n class=\"items-center flex cursor-pointer\"\n [icon]=\"item.isChildrenExpanded ? 'minus' : 'plus'\"\n />\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer bg-secondary rounded-xl overflow-hidden w-[329px] !max-w-[329px]\"\n >\n <div\n class=\"w-2 rounded-xl rounded-tr-none rounded-br-none overflow-hidden\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col w-full \">\n <div class=\" grid grid-cols-5 items-center pl-6 py-3 pr-1\">\n <div class=\" col-span-3\">\n <span class=\"font-semibold text-[16px] text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-[13px] font-medium truncate text-wrap\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\" col-span-2 \">\n <p class=\"grid\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"phone\" class=\"text-sm font-medium\"\n >Manager</span\n >\n <span class=\" bg-[#CAE1CC] text-center text-[#4ABB54] text-[13px] mt-[8px] rounded-[9px]\">\n {{item.data.Status}}\n </span>\n </p>\n <!-- <lib-user-access-request-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-access-request-status-badge> -->\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <div class=\" bg-secondary-100 py-10 flex flex-col gap-20 px-9\">\n <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n <div class=\"flex justify-between bottom-8 left-0 right-0 p-3\">\n <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button text=\"Save\" bgColor=\"#FFE681\" textColor=\"#404040\"\n border=\"1px solid #FFE681\">\n <!-- (click)=\"\" -->\n </verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n</div>\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-\\[329px\\]{width:329px}.w-full{width:100%}.\\!max-w-\\[329px\\]{max-width:329px!important}.flex-1{flex:1 1 0%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-\\[1\\.5vw\\]{gap:1.5vw}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.text-center{text-align:center}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.master-only-contanier{margin-top:0!important}.scroll-no::-webkit-scrollbar{width:4px}.scroll-no::-webkit-scrollbar-thumb{background:gray}.justify-pp{justify-content:start!important;margin-top:0!important}.toolbar{margin:0!important}@media screen and (max-width: 1024px){.scroll-no{padding:5px}}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i3.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i3.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i3.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i3.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i3.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i3.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i3.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i3.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i3.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i3.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i3.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i3.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i3.VerbenaBadgeComponent, selector: "verbena-badge", inputs: ["text", "bgColor", "textColor", "borderRadius", "pd", "fontSize", "width", "height"] }, { kind: "component", type: i4.UserManagementFormComponent, selector: "lib-user-request-form", inputs: ["currentData"], outputs: ["switchView"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
552
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UserManagementService }, { token: i3.HttpWebRequestService }, { token: i4.UtilService }, { token: i5.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
553
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserManagementComponent, selector: "lib-user-management", inputs: { searchDebounceTime: "searchDebounceTime", pageSize: "pageSize" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "childComponent", first: true, predicate: UserManagementFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n \n isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n (onSearchChange)=\"onSearch($event)\"\n [searchValue]=\"searchTerm\"\n [selectedSortCount]=\"0\"\n [showFilterChild]=\"showFilter\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n [isTableView]=\"false\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [data]=\"User\"\n [columns]=\"filteredColumns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow >\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n >\n <verbena-badge\n borderRadius=\"20px\"\n width=\"121px\"\n text=\"{{value}}\"\n bgColor=\"#D6F3E6\"\n textColor=\"#2DB76F\"\n pd=\"5px 15px\"\n fontSize=\"16px\"\n >\n\n\n </verbena-badge>\n </ng-template>\n </ng-container>\n\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n class=\"gap-1\"\n >\n <verben-left-card-data-view class=\"m-0 gap-2\" >\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl scroll-no border-primary border-[1px] gap-1 h-full justify-pp m-0 overflow-y-auto overflow-hidden\"\n [cardDataList]=\"cardData\"\n\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" >\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"vlcd.showChildren(item)\"\n [ngClass]=\"vlcd.showToggle(item) ? 'visible' : 'invisible'\"\n class=\"items-center flex cursor-pointer\"\n [icon]=\"item.isChildrenExpanded ? 'minus' : 'plus'\"\n />\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl !max-w-[304px]\"\n >\n <div\n class=\"w-2 rounded-xl rounded-tr-none rounded-br-none overflow-hidden\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col w-full \">\n <div class=\" grid grid-cols-5 items-center pl-6 py-3 pr-1\">\n <div class=\" col-span-3\">\n <span class=\"font-semibold text-[16px] text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-[13px] font-medium truncate text-wrap\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\" col-span-2 \">\n <p class=\"grid\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"phone\" class=\"text-sm font-medium\"\n >Manager</span\n >\n <span class=\" bg-[#CAE1CC] text-center text-[#4ABB54] text-[13px] mt-[8px] rounded-[9px]\">\n {{item.data.Status}}\n </span>\n </p>\n <!-- <lib-user-access-request-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-access-request-status-badge> -->\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <div class=\" bg-secondary-100 py-2 flex flex-col gap-20 px-2\">\n <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n <div class=\"flex justify-between bottom-8 left-0 right-0 p-3\">\n <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\" (click)=\"onDelete()\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button text=\"Save\" bgColor=\"#FFE681\" (click)=\"onSave()\" textColor=\"#404040\"\n border=\"1px solid #FFE681\">\n <!-- (click)=\"\" -->\n </verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n (filtersApplied)=\"onFilterApplied($event)\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"User\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n</div>\n\n\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.\\!max-w-\\[304px\\]{max-width:304px!important}.flex-1{flex:1 1 0%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-\\[1\\.5vw\\]{gap:1.5vw}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.text-center{text-align:center}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.master-only-contanier{margin-top:0!important}.scroll-no::-webkit-scrollbar{width:4px}.scroll-no::-webkit-scrollbar-thumb{background:gray}.justify-pp{justify-content:start!important;margin-top:0!important}.toolbar{margin:0!important}@media screen and (max-width: 1024px){.scroll-no{padding:5px}}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i7.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i7.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i7.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i7.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i7.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i7.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i7.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i7.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i7.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions"] }, { kind: "component", type: i7.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated"] }, { kind: "component", type: i7.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i7.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i7.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i7.VerbenaBadgeComponent, selector: "verbena-badge", inputs: ["text", "bgColor", "textColor", "borderRadius", "pd", "fontSize", "width", "height"] }, { kind: "component", type: i8.UserManagementFormComponent, selector: "lib-user-request-form", inputs: ["currentData"], outputs: ["switchView", "onApproval"] }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
355
554
  }
356
555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, decorators: [{
357
556
  type: Component,
358
- args: [{ selector: 'lib-user-management', template: "<div class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n isCreate: true,\n isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [data]=\"data\"\n [columns]=\"columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow >\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n >\n <verbena-badge\n borderRadius=\"20px\"\n width=\"121px\"\n text=\"{{value}}\"\n bgColor=\"#D6F3E6\"\n textColor=\"#2DB76F\"\n pd=\"5px 15px\"\n fontSize=\"16px\"\n >\n\n\n </verbena-badge>\n </ng-template>\n </ng-container>\n\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n class=\"gap-1\"\n >\n <verben-left-card-data-view class=\"m-0 gap-2\" >\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl scroll-no border-primary border-[1px] gap-1 h-full justify-pp m-0 overflow-y-auto overflow-hidden\"\n [cardDataList]=\"cardData\"\n\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"vlcd.showChildren(item)\"\n [ngClass]=\"vlcd.showToggle(item) ? 'visible' : 'invisible'\"\n class=\"items-center flex cursor-pointer\"\n [icon]=\"item.isChildrenExpanded ? 'minus' : 'plus'\"\n />\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer bg-secondary rounded-xl overflow-hidden w-[329px] !max-w-[329px]\"\n >\n <div\n class=\"w-2 rounded-xl rounded-tr-none rounded-br-none overflow-hidden\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col w-full \">\n <div class=\" grid grid-cols-5 items-center pl-6 py-3 pr-1\">\n <div class=\" col-span-3\">\n <span class=\"font-semibold text-[16px] text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-[13px] font-medium truncate text-wrap\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\" col-span-2 \">\n <p class=\"grid\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"phone\" class=\"text-sm font-medium\"\n >Manager</span\n >\n <span class=\" bg-[#CAE1CC] text-center text-[#4ABB54] text-[13px] mt-[8px] rounded-[9px]\">\n {{item.data.Status}}\n </span>\n </p>\n <!-- <lib-user-access-request-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-access-request-status-badge> -->\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <div class=\" bg-secondary-100 py-10 flex flex-col gap-20 px-9\">\n <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n <div class=\"flex justify-between bottom-8 left-0 right-0 p-3\">\n <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button text=\"Save\" bgColor=\"#FFE681\" textColor=\"#404040\"\n border=\"1px solid #FFE681\">\n <!-- (click)=\"\" -->\n </verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n</div>\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-\\[329px\\]{width:329px}.w-full{width:100%}.\\!max-w-\\[329px\\]{max-width:329px!important}.flex-1{flex:1 1 0%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-\\[1\\.5vw\\]{gap:1.5vw}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-9{padding-left:2.25rem;padding-right:2.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.text-center{text-align:center}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.master-only-contanier{margin-top:0!important}.scroll-no::-webkit-scrollbar{width:4px}.scroll-no::-webkit-scrollbar-thumb{background:gray}.justify-pp{justify-content:start!important;margin-top:0!important}.toolbar{margin:0!important}@media screen and (max-width: 1024px){.scroll-no{padding:5px}}\n"] }]
359
- }], ctorParameters: () => [{ type: i1.UserManagementService }], propDecorators: { cardDataView: [{
557
+ args: [{ selector: 'lib-user-management', template: "<div class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n \n isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n (onSearchChange)=\"onSearch($event)\"\n [searchValue]=\"searchTerm\"\n [selectedSortCount]=\"0\"\n [showFilterChild]=\"showFilter\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n [isTableView]=\"false\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [data]=\"User\"\n [columns]=\"filteredColumns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow >\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n >\n <verbena-badge\n borderRadius=\"20px\"\n width=\"121px\"\n text=\"{{value}}\"\n bgColor=\"#D6F3E6\"\n textColor=\"#2DB76F\"\n pd=\"5px 15px\"\n fontSize=\"16px\"\n >\n\n\n </verbena-badge>\n </ng-template>\n </ng-container>\n\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n class=\"gap-1\"\n >\n <verben-left-card-data-view class=\"m-0 gap-2\" >\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl scroll-no border-primary border-[1px] gap-1 h-full justify-pp m-0 overflow-y-auto overflow-hidden\"\n [cardDataList]=\"cardData\"\n\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" >\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"vlcd.showChildren(item)\"\n [ngClass]=\"vlcd.showToggle(item) ? 'visible' : 'invisible'\"\n class=\"items-center flex cursor-pointer\"\n [icon]=\"item.isChildrenExpanded ? 'minus' : 'plus'\"\n />\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl !max-w-[304px]\"\n >\n <div\n class=\"w-2 rounded-xl rounded-tr-none rounded-br-none overflow-hidden\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col w-full \">\n <div class=\" grid grid-cols-5 items-center pl-6 py-3 pr-1\">\n <div class=\" col-span-3\">\n <span class=\"font-semibold text-[16px] text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-[13px] font-medium truncate text-wrap\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\" col-span-2 \">\n <p class=\"grid\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"phone\" class=\"text-sm font-medium\"\n >Manager</span\n >\n <span class=\" bg-[#CAE1CC] text-center text-[#4ABB54] text-[13px] mt-[8px] rounded-[9px]\">\n {{item.data.Status}}\n </span>\n </p>\n <!-- <lib-user-access-request-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-access-request-status-badge> -->\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <div class=\" bg-secondary-100 py-2 flex flex-col gap-20 px-2\">\n <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n <div class=\"flex justify-between bottom-8 left-0 right-0 p-3\">\n <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\" (click)=\"onDelete()\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button text=\"Save\" bgColor=\"#FFE681\" (click)=\"onSave()\" textColor=\"#404040\"\n border=\"1px solid #FFE681\">\n <!-- (click)=\"\" -->\n </verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n (filtersApplied)=\"onFilterApplied($event)\"\n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"User\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n</div>\n\n\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.\\!max-w-\\[304px\\]{max-width:304px!important}.flex-1{flex:1 1 0%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-\\[1\\.5vw\\]{gap:1.5vw}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-6{padding-left:1.5rem}.pr-1{padding-right:.25rem}.text-center{text-align:center}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.master-only-contanier{margin-top:0!important}.scroll-no::-webkit-scrollbar{width:4px}.scroll-no::-webkit-scrollbar-thumb{background:gray}.justify-pp{justify-content:start!important;margin-top:0!important}.toolbar{margin:0!important}@media screen and (max-width: 1024px){.scroll-no{padding:5px}}\n"] }]
558
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.UserManagementService }, { type: i3.HttpWebRequestService }, { type: i4.UtilService }, { type: i5.EnvironmentService }], propDecorators: { cardDataView: [{
360
559
  type: ViewChild,
361
560
  args: ['vdcv']
362
561
  }], dataView: [{
363
562
  type: ViewChild,
364
563
  args: ['vdv']
564
+ }], childComponent: [{
565
+ type: ViewChild,
566
+ args: [UserManagementFormComponent]
567
+ }], searchDebounceTime: [{
568
+ type: Input
569
+ }], pageSize: [{
570
+ type: Input
365
571
  }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvdXNlci1tYW5hZ2VtZW50L3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItbWFuYWdlbWVudC91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvQyxPQUFPLEVBRUwsY0FBYyxHQU1mLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQVkzRCxNQUFNLE9BQU8sdUJBQXVCO0lBU2Q7SUFSRCxZQUFZLENBQXlCO0lBQ3RDLFFBQVEsQ0FBcUI7SUFFL0MsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBRTFCLGtCQUFrQixHQUFlLEVBQUUsQ0FBQztJQUVwQyxZQUFvQixxQkFBNEM7UUFBNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtJQUFHLENBQUM7SUFFcEUsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFD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QUFHLENBQUMscUJBQXFCLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUU5QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFZixpQ0FBaUM7WUFFakMsdUNBQXVDO1lBQ3ZDLGdDQUFnQztZQUNoQyxrQ0FBa0M7WUFDbEMsc0NBQXNDO1lBQ3RDLDZCQUE2QjtZQUM3QiwyQkFBMkI7WUFDM0Isb0VBQW9FO1lBQ3BFLFFBQVE7WUFDUixRQUFRO1lBRVIsK0RBQStEO1lBRS9ELHdDQUF3QztZQUN4QywrQ0FBK0M7WUFDL0MsSUFBSTtRQUNOLENBQUM7SUFDSCxDQUFDO3dHQS9ZVSx1QkFBdUI7NEZBQXZCLHVCQUF1QixtUEM5QnBDLHFrVkF3UkE7OzRGRDFQYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzBGQUtaLFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29sdW1ucyB9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LmNvbHVtbnMnO1xuaW1wb3J0IHsgbW9ja0RhdGEgfSBmcm9tICcuL2hlbHBlcic7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgVXNlck1hbmFnZW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1tYW5hZ2VtZW50JztcbmltcG9ydCB7XG4gIENhcmREYXRhLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgSURhdGFGaWx0ZXIsXG4gIERyb3Bkb3duTG9hZEV2ZW50LFxuICBEcm9wZG93bkNoYW5nZUV2ZW50LFxuICBDYXJkRGF0YVZpZXdDb21wb25lbnQsXG4gIERhdGFWaWV3Q29tcG9uZW50LFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgVXNlckFjY2Vzc1JlcXVlc3RTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1hY2Nlc3MtcmVxdWVzdC1zdGF0dXMnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlci1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvRXJyb3JSZXNwb25zZSc7XG5cbmludGVyZmFjZSBUZXN0UGFyZW50T2JqZWN0IHtcbiAgSWQ6IHN0cmluZztcbiAgTmFtZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdXNlci1tYW5hZ2VtZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VtZW50Q29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgndmRjdicpIGNhcmREYXRhVmlldyE6IENhcmREYXRhVmlld0NvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgndmR2JykgZGF0YVZpZXchOiBEYXRhVmlld0NvbXBvbmVudDtcblxuICB1c2VyczogVXNlcltdID0gW107XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG5cbiAgY2FyZENvbnRleHRIaXN0b3J5OiBDYXJkRGF0YVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1c2VyTWFuYWdlbWVudFNlcnZpY2U6IFVzZXJNYW5hZ2VtZW50U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUGFyZW50ID0gJzEnO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBbJ09wdCAxJ107XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvblR3byA9IFsnMSddO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25UaHJlZSA9ICcxJztcbiAgICB0aGlzLmZldGNoVXNlcnMoKTtcbiAgICB0aGlzLmZldGNoRGF0cSgpO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hVc2VycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnVzZXJNYW5hZ2VtZW50U2VydmljZS5nZXRVc2VycygwLCAxMCwgJ25hbWUnLCAnYXNjJyk7XG5cbiAgICBjb25zb2xlLmxvZyhyZXMpO1xuXG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FyZERhdGEgPSByZXMubWFwKFxuICAgICAgICAoeyBGaXJzdE5hbWUsIE1haWxBZGRyZXNzLCBQaG9uZU51bWJlciwgUm9sZUlELCBTdGF0dXMgfSkgPT4gKHtcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgdGl0bGU6IEZpcnN0TmFtZSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBGaXJzdE5hbWUsXG4gICAgICAgICAgICBNYWlsQWRkcmVzcyxcbiAgICAgICAgICAgIFBob25lTnVtYmVyLFxuICAgICAgICAgICAgUm9sZUlELFxuICAgICAgICAgICAgU3RhdHVzLFxuICAgICAgICAgIH0gYXMgUGFydGlhbDxVc2VyTWFuYWdlbWVudD4sXG4gICAgICAgICAgYm9keTogW1xuICAgICAgICAgICAgeyB0aXRsZTogJ05hbWUnLCB2YWx1ZTogRmlyc3ROYW1lIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiAnRS1NYWlsIEFkZHJlc3MnLCB2YWx1ZTogTWFpbEFkZHJlc3MgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6ICdQaG9uZSBOdW1iZXInLCB2YWx1ZTogUGhvbmVOdW1iZXIgPz8gJycgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmV3IHVwZGF0ZVxuXG4gIGNhcmREYXRhOiBDYXJkRGF0YVtdID0gW107XG5cbiAgZGF0YTogYW55W10gPSBbXTsgLy8gSW5pdGlhbGl6ZSBkYXRhXG5cbiAgYXN5bmMgZmV0Y2hEYXRxKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudXNlck1hbmFnZW1lbnRTZXJ2aWNlLmdldFVzZXJzKDAsIDEwLCAnbmFtZScsICdhc2MnKTtcblxuICAgIGNvbnNvbGUubG9nKHJlcyk7XG5cbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0gcmVzLm1hcCgodXNlcikgPT4gKHtcbiAgICAgICAgQ3JlYXRlZEF0OiB1c2VyLkNyZWF0ZWRBdCwgLy8gQVBJIGtleSBmb3IgXCJDcmVhdGVkXCJcbiAgICAgICAgTmFtZTogYCR7dXNlci5GaXJzdE5hbWV9ICR7dXNlci5MYXN0TmFtZX1gLCAvLyBDb21iaW5lIEZpcnN0TmFtZSBhbmQgTGFzdE5hbWVcbiAgICAgICAgTWFpbEFkZHJlc3M6IHVzZXIuTWFpbEFkZHJlc3MsIC8vIFVzZSBjb3JyZWN0IGtleSBmb3IgXCJFLU1haWxcIlxuICAgICAgICBQaG9uZU51bWJlcjogdXNlci5QaG9uZU51bWJlciB8fCAnJywgLy8gSGFuZGxlIHVuZGVmaW5lZCBQaG9uZU51bWJlclxuICAgICAgICBBZGRyZXNzOiB1c2VyLkFkZHJlc3MgfHwgJycsIC8vIElmIEFkZHJlc3MgZXhpc3RzIGluIEFQSVxuICAgICAgICBSb2xlOiB1c2VyLlJvbGVJRCB8fCAnJywgLy8gTWFwIFJvbGUgaWYgYXZhaWxhYmxlXG4gICAgICAgIFN0YXR1czogdXNlci5TdGF0dXMgfHwgJycsIC8vIE1hcCBTdGF0dXNcbiAgICAgICAgVXBkYXRlZEF0OiB1c2VyLlVwZGF0ZWRBdCxcbiAgICAgICAgRGF0YVN0YXRlOiB1c2VyLkRhdGFTdGF0ZSxcbiAgICAgICAgRmlyc3ROYW1lOiB1c2VyLkZpcnN0TmFtZSxcbiAgICAgICAgTGFzdE5hbWU6IHVzZXIuTGFzdE5hbWUsXG4gICAgICAgIE90aGVyTmFtZTogdXNlci5PdGhlck5hbWUsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgY29sdW1ucyA9IGNvbHVtbnM7XG4gIC8vIGRhdGEgPSBtb2NrRGF0YTtcbiAgc3R5bGVzID0gYmFzZVN0eWxlO1xuXG4gIHNlbGVjdGVkUGFyZW50Pzogc3RyaW5nO1xuICBiYXNpY09wdGlvbj86IHN0cmluZztcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkT3B0aW9uVHdvOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZE9wdGlvblRocmVlPzogc3RyaW5nO1xuICBtaXNzaW5nT2JqZWN0OiBhbnk7XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5ld1VzZXJNYW5hZ2VtZW50KCk6IFVzZXJNYW5hZ2VtZW50IHtcbiAgICBjb25zdCBuZXdJZCA9IHRoaXMuZGF0YS5sZW5ndGggKyAxOyAvLyBJbmNyZW1lbnRhbCBJRCBiYXNlZCBvbiBjdXJyZW50IGRhdGEgbGVuZ3RoXG5cbiAgICByZXR1cm4ge1xuICAgICAgRmlyc3ROYW1lOiBgRmlyc3QgJHtuZXdJZH1gLFxuICAgICAgTGFzdE5hbWU6IGBMYXN0ICR7bmV3SWR9YCxcbiAgICAgIE90aGVyTmFtZTogYE90aGVyICR7bmV3SWR9YCxcbiAgICAgIElkOiBgJHtuZXdJZH1gLFxuICAgICAgaWQ6IG5ld0lkLFxuICAgICAgTWFpbEFkZHJlc3M6IGAgYCxcbiAgICAgIFBob25lTnVtYmVyOiBgYCxcbiAgICAgIFJlcXVlc3RTdGF0dXM6IFVzZXJBY2Nlc3NSZXF1ZXN0U3RhdHVzLlBlbmRpbmcsXG4gICAgICBBZGRyZXNzOiBgIGAsXG4gICAgICBQYXNzd29yZDogJyAnLFxuICAgICAgRXhwaXJlT246IG5ldyBEYXRlKCksXG4gICAgICBJc1NlZWRlZDogZmFsc2UsXG4gICAgICBPVFBFeHBpcmVPbjogbmV3IERhdGUoKSxcbiAgICAgIFRlbmFudHM6IFtgVGVuYW50JHtuZXdJZH1gXSxcbiAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgVGVuYW50SWQ6IGBUZW5hbnQke25ld0lkfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIFN0YXR1czogVXNlckFjY2Vzc1JlcXVlc3RTdGF0dXMuUGVuZGluZyxcbiAgICB9O1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gYWRkIGEgbmV3IHVzZXIgdG8gbW9ja0RhdGFcbiAgYWRkTmV3VXNlclRvTW9ja0RhdGEoKTogVXNlck1hbmFnZW1lbnQge1xuICAgIGNvbnN0IG5ld1VzZXIgPSB0aGlzLmdlbmVyYXRlTmV3VXNlck1hbmFnZW1lbnQoKTtcbiAgICB0aGlzLmRhdGEucHVzaChuZXdVc2VyKTsgLy8gQWRkcyB0aGUgbmV3IHVzZXIgdG8gdGhlIGRhdGEgYXJyYXlcblxuICAgIC8vIE9wdGlvbmFsbHksIHVwZGF0ZSBjYXJkRGF0YSB3aXRoIHRoZSBuZXcgdXNlciBlbnRyeSBmb3IgY2FyZCBkaXNwbGF5XG5cbiAgICBjb25zdCBmdWxsTmFtZSA9IGAke25ld1VzZXIuRmlyc3ROYW1lfSAke25ld1VzZXIuTGFzdE5hbWV9YDtcbiAgICBjb25zdCBuZXdDYXJkRGF0YTogQ2FyZERhdGEgPSB7XG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICB0aXRsZTogZnVsbE5hbWUsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIE5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICBNYWlsQWRkcmVzczogbmV3VXNlci5NYWlsQWRkcmVzcyxcbiAgICAgICAgUGhvbmVOdW1iZXI6IG5ld1VzZXIuUGhvbmVOdW1iZXIsXG4gICAgICAgIFJvbGVJRDogbmV3VXNlci5Sb2xlLFxuICAgICAgICBTdGF0dXM6IG5ld1VzZXIuU3RhdHVzLFxuICAgICAgfSBhcyBQYXJ0aWFsPFVzZXJNYW5hZ2VtZW50PixcbiAgICAgIGJvZHk6IFtcbiAgICAgICAgeyB0aXRsZTogJ05hbWUnLCB2YWx1ZTogZnVsbE5hbWUgfSxcbiAgICAgICAgeyB0aXRsZTogJ0UtTWFpbCBBZGRyZXNzJywgdmFsdWU6IG5ld1VzZXIuTWFpbEFkZHJlc3MgfSxcbiAgICAgICAgeyB0aXRsZTogJ1Bob25lIE51bWJlcicsIHZhbHVlOiBuZXdVc2VyLlBob25lTnVtYmVyID8/ICcnIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG5cbiAgICB0aGlzLmNhcmREYXRhLnB1c2gobmV3Q2FyZERhdGEpOyAvLyBVcGRhdGUgY2FyZERhdGEgYXJyYXkgd2l0aCB0aGUgbmV3IHVzZXJcbiAgICByZXR1cm4gbmV3VXNlcjtcbiAgfVxuXG4gIC8vIEdyaWQgdmlldyBwcm9wZXJ0aWVzXG4gIGlzR3JpZFZpZXc6IGJvb2xlYW4gPSB0cnVlO1xuICBjdXJyZW50RGF0YSE6IENhcmREYXRhO1xuICBzZWxlY3RlZENvbHVtbkNvdW50OiBudW1iZXIgPSAwO1xuICBzZWxlY3RlZEZpbHRlclRhYmxlQ291bnQ6IG51bWJlciA9IDA7XG4gIGlzT1BlbjogYm9vbGVhbiA9IHRydWU7XG4gIHNlbGVjdGVkU29ydENvdW50OiBudW1iZXIgPSAwO1xuICBzaG93Q29sdW1uOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkQWxsOiBib29sZWFuID0gZmFsc2U7XG4gIHZpc2libGVDb2x1bW5zOiBJRGF0YUZpbHRlcltdID0gY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgICBuYW1lOiB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZycgPyBjb2wuaGVhZGVyIDogY29sLmlkLFxuICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gIH0pKTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7IG5hbWU6ICdOYW1lJywgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ01haWxBZGRyZXNzJywgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ1Bob25lTnVtYmVyJywgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ0NyZWF0ZWRBdCcsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gIF07XG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAgeyBuYW1lOiAnTmFtZScsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdNYWlsQWRkcmVzcycsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdQaG9uZU51bWJlcicsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdDcmVhdGVkQXQnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLCBjaGVja2VkOiBmYWxzZSB9LFxuICBdO1xuXG4gIHRlc3RQYXJlbnRzOiBUZXN0UGFyZW50T2JqZWN0W10gPSBbXG4gICAgeyBJZDogJzEnLCBOYW1lOiAnTWFuYWdlcicgfSxcbiAgICB7IElkOiAnMicsIE5hbWU6ICdBZG1pbmlzdHJhdG9yJyB9LFxuICAgIHsgSWQ6ICczJywgTmFtZTogJ0plbG9tJyB9LFxuICBdO1xuXG4gIGdldFBhcmVudExhYmVsKGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc29sZS5sb2coeyBNaXNzaW5nT2JqOiB0aGlzLm1pc3NpbmdPYmplY3QgfSk7XG4gICAgcmV0dXJuIHRoaXMubWlzc2luZ09iamVjdC5OYW1lO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmVQYXJlbnRzKGV2ZW50OiBEcm9wZG93bkxvYWRFdmVudCk6IFByb21pc2U8VGVzdFBhcmVudE9iamVjdFtdPiB7XG4gICAgY29uc29sZS5sb2coeyBQYXJlbnRMb2FkRXZlbnQ6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpKSB9KTtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIHJlc29sdmUoW1xuICAgICAgICAgICAgeyBJZDogJzEnLCBOYW1lOiAnSmltbHknIH0sXG4gICAgICAgICAgICB7IElkOiAnMicsIE5hbWU6ICdKZWNpbCcgfSxcbiAgICAgICAgICAgIHsgSWQ6ICczJywgTmFtZTogJ0plbG9tJyB9LFxuICAgICAgICAgICAgeyBJZDogJzQnLCBOYW1lOiAnSmVtaW1hJyB9LFxuICAgICAgICAgICAgeyBJZDogJzUnLCBOYW1lOiAnQWtpbnR1bmRlJyB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICAzMDAwXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG9uRHJvcGRvd25DaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmxvZyh7XG4gICAgLy8gICAnVGVzdCBQYXJlbnQgVmFsdWUnOiB0aGlzLnNlbGVjdGVkUGFyZW50LFxuICAgIC8vICAgLi4uXG4gICAgLy8gfSk7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZFJvd3M6IFVzZXJNYW5hZ2VtZW50W10pIHtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0aW9uIGNoYW5nZWQ6Jywgc2VsZWN0ZWRSb3dzKTtcbiAgICAvLyBIYW5kbGUgdGhlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydChleHBvcnRlZERhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc29sZS5sb2coJ0V4cG9ydGVkIGRhdGE6JywgZXhwb3J0ZWREYXRhKTtcbiAgICB0aGlzLmRvd25sb2FkQ1NWKGV4cG9ydGVkRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkQ1NWKGRhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXG4gICAgICBoZWFkZXJzLmpvaW4oJywnKSxcbiAgICAgIC4uLmRhdGEubWFwKChyb3cpID0+IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHJvd1toZWFkZXJdKS5qb2luKCcsJykpLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ2V4cG9ydC5jc3YnKTtcbiAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHlGaWx0ZXJzKCkge1xuICAvLyAgIHRoaXMuZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAvLyAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQXJyYXkuZXZlcnkoKGZpbHRlcikgPT4ge1xuICAvLyAgICAgICBpZiAoZmlsdGVyLmNoZWNrZWQpIHtcbiAgLy8gICAgICAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gIC8vICAgICAgICAgICBjYXNlIERhdGFGaWx0ZXJUeXBlLlN0cmluZzpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmlsdGVyLm5hbWVdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyLm5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIC8vICAgICAgICAgICBjYXNlIERhdGFGaWx0ZXJUeXBlLkRhdGU6XG4gIC8vICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShpdGVtW2ZpbHRlci5uYW1lXSkgPj0gbmV3IERhdGUoZmlsdGVyLm5hbWUpO1xuICAvLyAgICAgICAgICAgZGVmYXVsdDpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIHJldHVybiB0cnVlO1xuICAvLyAgICAgfSk7XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgZ2V0Q2FyZERhdGFCeU1haWxBZGRyZXNzKG1haWxBZGRyZXNzOiBzdHJpbmcpOiBDYXJkRGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc29sZS5sb2coJ2NhcmREYXRhIGFycmF5OicsIHRoaXMuY2FyZERhdGEpO1xuICAgIGNvbnNvbGUubG9nKG1haWxBZGRyZXNzKTtcblxuICAgIHJldHVybiB0aGlzLmNhcmREYXRhLmZpbmQoKHsgZGF0YSB9KSA9PiBkYXRhPy5NYWlsQWRkcmVzcyA9PT0gbWFpbEFkZHJlc3MpO1xuICB9XG5cbiAgb3BlbkRldGFpbFZpZXcobWFpbEFkZHJlc3M6IHN0cmluZykge1xuICAgIGNvbnN0IGNhcmRJdGVtID0gdGhpcy5nZXRDYXJkRGF0YUJ5TWFpbEFkZHJlc3MobWFpbEFkZHJlc3MpO1xuICAgIGNvbnNvbGUubG9nKGNhcmRJdGVtKTtcblxuICAgIGlmIChjYXJkSXRlbSAmJiB0aGlzLmNhcmREYXRhVmlldykge1xuICAgICAgdGhpcy5kYXRhVmlldy50b2dnbGVWaWV3KCk7XG4gICAgICAvLyBGaXJzdCByZXNldCBhbGwgc2VsZWN0aW9uc1xuICAgICAgdGhpcy5jYXJkRGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiAoY2hpbGQuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBpdGVtXG4gICAgICBjYXJkSXRlbS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soY2FyZEl0ZW0pO1xuXG4gICAgICAvLyBGb3JjZSBjaGFuZ2UgZGV0ZWN0aW9uIGlmIG5lZWRlZFxuICAgICAgLy8gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmV3SXRlbSgpIHtcbiAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5hZGROZXdVc2VyVG9Nb2NrRGF0YSgpO1xuICAgIGNvbnN0IG5ld0NhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgdGl0bGU6IGAke25ld0RhdGEuRmlyc3ROYW1lfSAke25ld0RhdGEuTGFzdE5hbWV9YCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgLi4ubmV3RGF0YSxcbiAgICAgIH0gYXMgUGFydGlhbDxVc2VyTWFuYWdlbWVudD4sXG4gICAgICBib2R5OiBbXG4gICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IGAke25ld0RhdGEuRmlyc3ROYW1lfSAke25ld0RhdGEuTGFzdE5hbWV9YCB9LFxuICAgICAgICB7IHRpdGxlOiAnRS1NYWlsIEFkZHJlc3MnLCB2YWx1ZTogbmV3RGF0YS5NYWlsQWRkcmVzcyB9LFxuICAgICAgICB7IHRpdGxlOiAnUGhvbmUgTnVtYmVyJywgdmFsdWU6IG5ld0RhdGEuUGhvbmVOdW1iZXIgPz8gJycgfSxcbiAgICAgIF0sXG4gICAgICBjaGlsZHJlbjogW10sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICB9XG4gICAgLy8gRmlyc3QgcmVzZXQgYWxsIHNlbGVjdGlvbnNcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdGhpcy5jYXJkRGF0YSA9IFtuZXdDYXJkRGF0YV0uY29uY2F0KHRoaXMuY2FyZERhdGEpO1xuICAgIC8vIHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKG5ld0NhcmREYXRhKVxuXG4gICAgdGhpcy5jYXJkRGF0YSA9IFtuZXdDYXJkRGF0YSwgLi4udGhpcy5jYXJkRGF0YV07XG5cbiAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2sobmV3Q2FyZERhdGEpO1xuICB9XG5cbiAgLy8gdG9nZ2xlQ2hpbGRWaWV3KGFjdGlvbjogc3RyaW5nKSB7XG4gIC8vICAgaWYgKGFjdGlvbiA9PT0gJ2NyZWF0ZScpIHtcbiAgLy8gICAgIGNvbnN0IG5ld0NhcmQ6IENhcmREYXRhID0ge1xuICAvLyAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gIC8vICAgICAgIHRpdGxlOiAnTmV3IENhcmQnLCAvLyBEZWZhdWx0IHRpdGxlLCBjaGFuZ2UgYXMgbmVlZGVkXG4gIC8vICAgICAgIGRhdGE6IHsgTmFtZTogJycsIE1haWxBZGRyZXNzOiAnJywgUGhvbmVOdW1iZXI6ICcnIH0sXG4gIC8vICAgICAgIGJvZHk6IFtcbiAgLy8gICAgICAgICB7IHRpdGxlOiAnTmFtZScsIHZhbHVlOiAnJyB9LFxuICAvLyAgICAgICAgIHsgdGl0bGU6ICdFLU1haWwgQWRkcmVzcycsIHZhbHVlOiAnJyB9LFxuICAvLyAgICAgICAgIHsgdGl0bGU6ICdQaG9uZSBOdW1iZXInLCB2YWx1ZTogJycgfVxuICAvLyAgICAgICBdLFxuICAvLyAgICAgICBjaGlsZHJlbjogW11cbiAgLy8gICAgIH07XG5cbiAgLy8gICAgIHRoaXMuY2FyZERhdGEucHVzaChuZXdDYXJkKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICBjbGVhckRhdGEoKSB7XG4gICAgdGhpcy5jdXJyZW50RGF0YSA9IHt9IGFzIENhcmREYXRhO1xuICB9XG5cbiAgbG9hZE1vcmUoKSB7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KHRoaXMuY2FyZERhdGEpO1xuICB9XG5cbiAgb25Db2x1bW5DaGFuZ2UoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dDb2x1bW4gPSBldmVudDtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd1NvcnQgPSBldmVudDtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gIH1cblxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5vbkNvbHVtbkNoYW5nZShmYWxzZSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkNvdW50ID0gdXBkYXRlZENvbHVtbnMubGVuZ3RoO1xuICB9XG5cbiAgb25Tb3J0VXBkYXRlZCh1cGRhdGVkU29ydHM6IElEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLm9uU29ydENoYW5nZShmYWxzZSk7XG4gICAgdGhpcy5zZWxlY3RlZFNvcnRDb3VudCA9IHVwZGF0ZWRTb3J0cy5sZW5ndGg7XG4gICAgY29uc29sZS5sb2codXBkYXRlZFNvcnRzKTtcbiAgfVxuXG4gIG9uVmlld0NoYW5nZShpc0dyaWRWaWV3OiBib29sZWFuKTogdm9pZCB7fVxuXG4gIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgU3RhdGUgY2hhbmdlZCBmb3IgJHtldmVudC5rZXl9OmAsIGV2ZW50LnZhbHVlKTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnY3JlYXRlJykge1xuICAgICAgY29uc29sZS5sb2coJ3BlYWNlIGlzIGEgYm95Jyk7XG5cbiAgICAgIHRoaXMubmV3SXRlbSgpO1xuXG4gICAgICAvLyBjb25zdCBuZXdVc2VyID0gdGhpcy5uZXdJdGVtKClcblxuICAgICAgLy8gaWYgKCBuZXdVc2VyICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICAvLyAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgLy8gICAvLyBGaXJzdCByZXNldCBhbGwgc2VsZWN0aW9uc1xuICAgICAgLy8gICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIC8vICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAvLyAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgIC8vICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9KTtcblxuICAgICAgLy8gICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2sobmV3VXNlcik7XG5cbiAgICAgIC8vICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICAgIC8vICAgLy8gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAvLyB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZXNzYWdlLWxvZy1jb250YWluZXJcIj5cbiAgPHZlcmJlbi1kYXRhLXZpZXdcbiAgICAjdmR2XG4gICAgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgIGlzQ29sdW1uOiB0cnVlLFxuICAgICAgaXNGaWx0ZXI6IHRydWUsXG4gICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICBpc0V4cG9ydDogdHJ1ZSxcbiAgICAgIGlzU2VsZWN0OiB0cnVlLFxuICAgICAgaXNDcmVhdGU6IHRydWUsXG4gICAgICBpc1RvZ2dsZTp0cnVlXG4gICAgfVwiXG4gICAgW2J1dHRvbkNsYXNzXT1cIidteS1jdXN0b20tYnV0dG9uLWNsYXNzJ1wiXG4gICAgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgIFthY3RpdmVJY29uQ2xhc3NdPVwiJ215LWFjdGl2ZS1pY29uLWNsYXNzJ1wiXG4gICAgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiXG4gICAgW3NlbGVjdGVkU29ydENvdW50XT1cIjBcIlxuICAgIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwiMFwiXG4gICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm10LTJcIiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgW3N0eWxlQ29uZmlnXT1cInN0eWxlc1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInNlbGVjdFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCIgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oKVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIiBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgIGxldC10b2dnbGVBbGxSb3dzPVwidG9nZ2xlQWxsUm93c1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJhbGxSb3dzU2VsZWN0ZWQoKVwiIFtpbmRldGVybWluYXRlXT1cInNvbWVSb3dzU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJjcmVhdGVkQXRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWUgbGV0LWRlbGV0ZVJvdyA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNlwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRGV0YWlsVmlldyh2YWx1ZSlcIlxuICAgICAgICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuXG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlcj5cbiAgICAgICAgICAgIDxzdHJvbmc+QWN0aW9uczwvc3Ryb25nPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInN0YXR1c1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNjZWxsXG4gICAgICAgICAgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgICAgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCJcbiAgICAgICAgICBsZXQtZGVsZXRlUm93PVwiZGVsZXRlUm93XCJcbiAgICAgICAgICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbmEtYmFkZ2VcbiAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiMjBweFwiXG4gICAgICAgICAgIHdpZHRoPVwiMTIxcHhcIlxuICAgICAgICAgICAgdGV4dD1cInt7dmFsdWV9fVwiXG4gICAgICAgICAgICBiZ0NvbG9yPVwiI0Q2RjNFNlwiXG4gICAgICAgICAgICB0ZXh0Q29sb3I9XCIjMkRCNzZGXCJcbiAgICAgICAgICAgIHBkPVwiNXB4IDE1cHhcIlxuICAgICAgICAgICAgZm9udFNpemU9XCIxNnB4XCJcbiAgICAgICAgICA+XG5cblxuICAgICAgICA8L3ZlcmJlbmEtYmFkZ2U+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3XG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEycHhcIlxuICAgICAgICAobG9hZE1vcmVDbGljayk9XCJsb2FkTW9yZSgpXCJcbiAgICAgICAgI3ZkY3ZcbiAgICAgICAgZGF0YUlkPVwiTWFpbEFkZHJlc3NcIlxuICAgICAgICBib3JkZXI9XCI1cHhcIlxuICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgcmJnQ29sb3I9XCIjZjVmNmY5XCJcbiAgICAgICAgbWc9XCIwcHhcIlxuICAgICAgICBjbGFzcz1cImdhcC0xXCJcbiAgICAgID5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwibS0wIGdhcC0yXCIgPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGFcbiAgICAgICAgICAgICN2bGNkXG4gICAgICAgICAgICBbcGFyZW50XT1cInZkY3ZcIlxuICAgICAgICAgICAgZGF0YUlkPVwiTWFpbEFkZHJlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwICByb3VuZGVkLXhsIHNjcm9sbC1ubyBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF0gZ2FwLTEgaC1mdWxsIGp1c3RpZnktcHAgbS0wIG92ZXJmbG93LXktYXV0byBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiXG5cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImN1cnJlbnREYXRhID0gdmRjdi5vbkl0ZW1DbGljayhpdGVtKVwiIGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmxjZC5zaG93Q2hpbGRyZW4oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidmxjZC5zaG93VG9nZ2xlKGl0ZW0pID8gJ3Zpc2libGUnIDogJ2ludmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPyAnbWludXMnIDogJ3BsdXMnXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyICBiZy1zZWNvbmRhcnkgcm91bmRlZC14bCBvdmVyZmxvdy1oaWRkZW4gdy1bMzI5cHhdICFtYXgtdy1bMzI5cHhdXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0yIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZSBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgIFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGdyaWQgZ3JpZC1jb2xzLTUgaXRlbXMtY2VudGVyIHBsLTYgcHktMyBwci0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBjb2wtc3Bhbi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1bMTZweF0gdGV4dC1bIzQwNDA0MF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+UGhvbmUgTnVtYmVyOjwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSB0cnVuY2F0ZSB0ZXh0LXdyYXBcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5QaG9uZU51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgY29sLXNwYW4tMiBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVcIiBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5Sb2xlPC9sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5NYW5hZ2VyPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIgYmctWyNDQUUxQ0NdIHRleHQtY2VudGVyIHRleHQtWyM0QUJCNTRdIHRleHQtWzEzcHhdIG10LVs4cHhdIHJvdW5kZWQtWzlweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uZGF0YS5TdGF0dXN9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaWItdXNlci1hY2Nlc3MtcmVxdWVzdC1zdGF0dXMtYmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJpdGVtLmRhdGEuU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi11c2VyLWFjY2Vzcy1yZXF1ZXN0LXN0YXR1cy1iYWRnZT4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtc21cIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2lJdGVtIG9mIGl0ZW0uYm9keTsgdHJhY2sgY2lJdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZm9udC1saWdodCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBjaUl0ZW0udGl0bGUgfX06PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiPnt7IGNpSXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIiBiZy1zZWNvbmRhcnktMTAwIHB5LTEwIGZsZXggZmxleC1jb2wgZ2FwLTIwIHB4LTlcIj5cbiAgICAgICAgICAgIDxsaWItdXNlci1yZXF1ZXN0LWZvcm1cbiAgICAgICAgICAgIFtjdXJyZW50RGF0YV09XCJjdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAoc3dpdGNoVmlldyk9XCJ2ZHYudG9nZ2xlVmlldygpXCJcbiAgICAgICAgICAgID48L2xpYi11c2VyLXJlcXVlc3QtZm9ybT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBib3R0b20tOCBsZWZ0LTAgcmlnaHQtMCBwLTNcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIHRleHQ9XCJEZWxldGVcIiBiZ0NvbG9yPVwiIzk5OTk5OVwiIHRleHRDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgIzk5OTk5OVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJ2ZHYudG9nZ2xlVmlldygpXCIgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uICB0ZXh0PVwiU2F2ZVwiIGJnQ29sb3I9XCIjRkZFNjgxXCIgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICAgICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgI0ZGRTY4MVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwiXCIgLS0+XG4gICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3RlciBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnaW5hdG9yLXRleHRcIlxuICAgICAgICAgICAgICA+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmVcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXctZm9vdGVyPlxuICAgICAgPC92ZXJiZW4tY2FyZC1kYXRhLXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjb2x1bW4tY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdmlzaWJsZS1jb2x1bW5cbiAgICAgICAgKGNvbHVtbnNVcGRhdGVkKT1cIm9uQ29sdW1uc1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG4gICAgICAgIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgICBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIlxuICAgICAgICBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cIjVcIlxuICAgICAgPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlclxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIlxuICAgICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgICB3aWR0aD1cIjQyMHB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCJcbiAgICAgICAgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgICBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiXG4gICAgICA+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlXG4gICAgICAgIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MDBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIlxuICAgICAgPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiZGF0YVwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgJiYgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIlxuICAgIGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDx2ZXJiZW5hLWJ1dHRvbiBbZm9udFdlaWdodF09XCInYm9sZCdcIiBbYmdDb2xvcl09XCInIzhFOEQ4NydcIiBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCIgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
572
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvdXNlci1tYW5hZ2VtZW50L3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItbWFuYWdlbWVudC91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJL0MsT0FBTyxFQUVMLGNBQWMsR0FRZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQWlDLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBSzlELElBQUssZUFJSjtBQUpELFdBQUssZUFBZTtJQUNsQixnQ0FBOEIsQ0FBQTtJQUM5Qiw0QkFBMEIsQ0FBQTtJQUMxQiwrQkFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSkks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LEVBQUUsY0FBYyxDQUFDLElBQUk7S0FDMUIsQ0FBQyxDQUFDLENBQUM7SUFFSixXQUFXLEdBQWtCO1FBQzNCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQzdELEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ3BFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ3BFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO0tBQ2pFLENBQUM7SUFFRixXQUFXLEdBQWtCO1FBQzNCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQzdELEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ3BFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1FBQ3BFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO0tBQ2pFLENBQUM7SUFFRixXQUFXLEdBQXVCO1FBQ2hDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1FBQzVCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1FBQ2xDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVB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QW1CLElBQVMsQ0FBQztJQUUxQyxhQUFhLENBQUMsS0FBc0M7UUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBSTlCLGlDQUFpQztZQUVqQyx1Q0FBdUM7WUFDdkMsZ0NBQWdDO1lBQ2hDLGtDQUFrQztZQUNsQyxzQ0FBc0M7WUFDdEMsNkJBQTZCO1lBQzdCLDJCQUEyQjtZQUMzQixvRUFBb0U7WUFDcEUsUUFBUTtZQUNSLFFBQVE7WUFFUiwrREFBK0Q7WUFFL0Qsd0NBQXdDO1lBQ3hDLCtDQUErQztZQUMvQyxJQUFJO1FBQ04sQ0FBQztJQUNILENBQUM7d0dBL29CVSx1QkFBdUI7NEZBQXZCLHVCQUF1QixnV0FHdkIsMkJBQTJCLGdEQ3ZEeEMsaWpXQXlTQTs7NEZEclBhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7c05BS1osWUFBWTtzQkFBOUIsU0FBUzt1QkFBQyxNQUFNO2dCQUNDLFFBQVE7c0JBQXpCLFNBQVM7dUJBQUMsS0FBSztnQkFDd0IsY0FBYztzQkFBckQsU0FBUzt1QkFBQywyQkFBMkI7Z0JBUTdCLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2x1bW5zIH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQuY29sdW1ucyc7XG5cbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5U2lnbiB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVNpZ24nO1xuaW1wb3J0IHsgbW9ja0RhdGEgfSBmcm9tICcuL2hlbHBlcic7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9QYWdlZFJlc3VsdCc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VtZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItbWFuYWdlbWVudCc7XG5cbmltcG9ydCB7XG4gIENhcmREYXRhLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgSURhdGFGaWx0ZXIsXG4gIERyb3Bkb3duTG9hZEV2ZW50LFxuICBEcm9wZG93bkNoYW5nZUV2ZW50LFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBDb25kaXRpb25hbE9wdGlvbnMsXG4gIENhcmREYXRhVmlld0NvbXBvbmVudCxcbiAgRGF0YVZpZXdDb21wb25lbnQsXG59IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBVc2VyQWNjZXNzUmVxdWVzdFN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLWFjY2Vzcy1yZXF1ZXN0LXN0YXR1cyc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9vYmplY3Qtc3RhdGUnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXItbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlcic7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0Vycm9yUmVzcG9uc2UnO1xuaW1wb3J0IHsgVXNlck1hbmFnZW1lbnRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZm9ybS91c2UtbWFuYWdlbWVudC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy9jb25kaXRpb25zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuXG5lbnVtIERhdGVGaWx0ZXJUeXBlcyB7XG4gIEJlZm9yZSA9IFNlYXJjaFByb3BlcnR5U2lnbi5MVCxcbiAgT24gPSBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gIEFmdGVyID0gU2VhcmNoUHJvcGVydHlTaWduLkdULFxufVxuXG5cbmludGVyZmFjZSBUZXN0UGFyZW50T2JqZWN0IHtcbiAgSWQ6IHN0cmluZztcbiAgTmFtZTogc3RyaW5nO1xufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi11c2VyLW1hbmFnZW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZW1lbnRDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd2ZGN2JykgY2FyZERhdGFWaWV3ITogQ2FyZERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd2ZHYnKSBkYXRhVmlldyE6IERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKFVzZXJNYW5hZ2VtZW50Rm9ybUNvbXBvbmVudCkgY2hpbGRDb21wb25lbnQhOiBVc2VyTWFuYWdlbWVudEZvcm1Db21wb25lbnQ7XG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG5cbiAgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFVzZXJNYW5hZ2VtZW50PltdID1jb2x1bW5zXG4gIHNraXA6IG51bWJlciA9IDA7XG4gIHVzZXJzOiBVc2VyW10gPSBbXTtcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIHNlYXJjaERlYm91bmNlVGltZTogbnVtYmVyID0gNTAwO1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIHBhZ2VTdGF0ZTogUGFnZWRSZXN1bHQ8VXNlcj4gfCBudWxsID0gbnVsbDtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgYXBwbGllZEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGhhc01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBVc2VyOiBVc2VyTWFuYWdlbWVudFtdID0gW107XG4gIGRhdGFGaXQ6IFBhZ2VkUmVzdWx0PFVzZXJNYW5hZ2VtZW50PiA9IHtcbiAgICBQYWdlU2l6ZTogMTAsXG4gICAgU2tpcDogMCxcbiAgICBUb3RhbDogMCxcbiAgICBSZXN1bHQ6IFtdLFxuICAgIExhc3RJdGVtOiBbJyddLFxuICAgIElzTG9hZGluZ1Jlc3VsdHM6IGZhbHNlXG4gIH07XG5cbiAgXG5cbiAgY3VycmVudEZpbHRlcnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgY3VycmVudFNvcnRzOiBJRGF0YUZpbHRlcltdID0gW107XG5cblxuXG4gIHJvbGU6IHN0cmluZyA9ICcnO1xuXG4gIGNhcmRDb250ZXh0SGlzdG9yeTogQ2FyZERhdGFbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdXNlck1hbmFnZW1lbnRTZXJ2aWNlOiBVc2VyTWFuYWdlbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIGVudlN2YzogRW52aXJvbm1lbnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlbGVjdGVkUGFyZW50ID0gJzEnO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBbJ09wdCAxJ107XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvblR3byA9IFsnMSddO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25UaHJlZSA9ICcxJztcbiAgICAvLyB0aGlzLmZldGNoVXNlcnMoKTtcbiAgICAvLyB0aGlzLmZldGNoRGF0cSgpO1xuICAgIHRoaXMuZmV0Y2hEYXRxMigpO1xuICAgIC8vIHRoaXMuZmV0Y2hVc2VyKCk7XG5cbiAgICB0aGlzLmZldGNoVXNlcnNCeVJvbGUoKTtcbiAgIFxuICAgIHRoaXMucm91dGUucGFyYW1NYXAuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICB0aGlzLnJvbGUgPSBwYXJhbXMuZ2V0KCdyb2xlJykgfHwgJyc7ICAvLyBEZWZhdWx0IHRvIGFuIGVtcHR5IHN0cmluZyBpZiBubyByb2xlXG4gICAgICB0aGlzLmZldGNoVXNlcnNCeVJvbGUoKTtcbiAgICB9KTtcbiAgICBcblxuICAgICAgICAgXG4gIH1cblxuXG4gIGFzeW5jIGZldGNoVXNlcnNCeVJvbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBgdGhpcy5yb2xlYCB0byBmaWx0ZXIgb3IgZmV0Y2ggdXNlcnMgYnkgdGhlaXIgcm9sZVxuICAgICAgY29uc3Qgcm9sZVBhcmFtID0gdGhpcy5yb2xlPy50cmltKCkgfHwgbnVsbDsgLy8gRW5zdXJlIHZhbGlkIHJvbGUgb3IgbnVsbFxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy51c2VyTWFuYWdlbWVudFNlcnZpY2UuZ2V0UmVhbFVzZXJzKFxuICAgICAgICByb2xlUGFyYW0sXG4gICAgICAgIDAsIC8vIFNraXBcbiAgICAgICAgMTAsIC8vIExpbWl0XG4gICAgICAgICduYW1lJywgLy8gU29ydCBwYXJhbWV0ZXJcbiAgICAgICAgJ2FzYycgLy8gU29ydCBvcmRlclxuICAgICAgKTtcbiAgXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCByZXMpO1xuICAgICAgICByZXR1cm47IC8vIEV4aXQgb24gZXJyb3JcbiAgICAgIH1cbiAgXG4gICAgICAvLyBNYXAgdGhlIHJlc3BvbnNlIHRvIGBjYXJkRGF0YWBcbiAgICAgIHRoaXMuY2FyZERhdGEgPSByZXMubWFwKCh7IEZpcnN0TmFtZSwgTWFpbEFkZHJlc3MsIFBob25lTnVtYmVyLCBSb2xlSUQsIFN0YXR1cyB9KSA9PiAoe1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiBGaXJzdE5hbWUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBGaXJzdE5hbWUsXG4gICAgICAgICAgTWFpbEFkZHJlc3MsXG4gICAgICAgICAgUGhvbmVOdW1iZXIsXG4gICAgICAgICAgUm9sZUlELFxuICAgICAgICAgIFN0YXR1cyxcbiAgICAgICAgfSBhcyBQYXJ0aWFsPFVzZXJNYW5hZ2VtZW50PixcbiAgICAgICAgYm9keTogW1xuICAgICAgICAgIHsgdGl0bGU6ICdOYW1lJywgdmFsdWU6IEZpcnN0TmFtZSB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdFLU1haWwgQWRkcmVzcycsIHZhbHVlOiBNYWlsQWRkcmVzcyB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdQaG9uZSBOdW1iZXInLCB2YWx1ZTogUGhvbmVOdW1iZXIgPz8gJycgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgfSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGZldGNoaW5nIHVzZXJzIGJ5IHJvbGU6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vICAgICBVc2VyL0dldFVzZXJzL3tza2lwfS97bGltaXR9L3tzb3J0UGFyYW19L3tzb3J0T3JkZXJ9XG4vLyBVc2VyL0dldFVzZXJXaXRoUGFyYW0ve3BhcmFtfS97c2tpcH0ve2xpbWl0fS97c29ydFBhcmFtfS97c29ydE9yZGVyfVxuLy8gVXNlci9TYXZlVXNlcnMoTGlzdDxVc2VyPilcbi8vIFVzZXIvTG9naW4oTG9naW5QYXJhbSBwYXJhbSlcbi8vIFVzZXIvQ2hhbmdlRmlyc3RUaW1lUGFzc3dvcmQoUGFzc3dvcmRSZXF1ZXN0UGFyYW0gcGFzc3dvcmRSZXF1ZXN0UGFyYW0pOlZvaWRcbi8vIFVzZXIvRGVsZXRlVXNlcnMoTGlzdDxzdHJpbmc+KVxuXG5cbiAgICAvLyB0aGlzLnNldFVwTWFwcGVkRGF0YShyZXN1bHQpO1xuICAgIC8vIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuXG4gIC8vIG5ldyB1cGRhdGVcblxuICBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdO1xuXG4gIGRhdGE6IGFueVtdID0gW107IC8vIEluaXRpYWxpemUgZGF0YVxuXG4gIC8vIGFzeW5jIGZldGNoRGF0cSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnVzZXJNYW5hZ2VtZW50U2VydmljZS5nZXRVc2VycygwLCAxMCwgJ25hbWUnLCAnYXNjJyk7XG5cbiAgLy8gICBjb25zb2xlLmxvZyhyZXMpO1xuXG4gIC8vICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIHJlcyk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuZGF0YSA9IHJlcy5tYXAoKHVzZXIpID0+ICh7XG4gIC8vICAgICAgIENyZWF0ZWRBdDogdXNlci5DcmVhdGVkQXQsIC8vIEFQSSBrZXkgZm9yIFwiQ3JlYXRlZFwiXG4gIC8vICAgICAgIE5hbWU6IGAke3VzZXIuRmlyc3ROYW1lfSAke3VzZXIuTGFzdE5hbWV9YCwgLy8gQ29tYmluZSBGaXJzdE5hbWUgYW5kIExhc3ROYW1lXG4gIC8vICAgICAgIE1haWxBZGRyZXNzOiB1c2VyLk1haWxBZGRyZXNzLCAvLyBVc2UgY29ycmVjdCBrZXkgZm9yIFwiRS1NYWlsXCJcbiAgLy8gICAgICAgUGhvbmVOdW1iZXI6IHVzZXIuUGhvbmVOdW1iZXIgfHwgJycsIC8vIEhhbmRsZSB1bmRlZmluZWQgUGhvbmVOdW1iZXJcbiAgLy8gICAgICAgQWRkcmVzczogdXNlci5BZGRyZXNzIHx8ICcnLCAvLyBJZiBBZGRyZXNzIGV4aXN0cyBpbiBBUElcbiAgLy8gICAgICAgUm9sZTogdXNlci5Sb2xlSUQgfHwgJycsIC8vIE1hcCBSb2xlIGlmIGF2YWlsYWJsZVxuICAvLyAgICAgICBTdGF0dXM6IHVzZXIuU3RhdHVzIHx8ICcnLCAvLyBNYXAgU3RhdHVzXG4gIC8vICAgICAgIFVwZGF0ZWRBdDogdXNlci5VcGRhdGVkQXQsXG4gIC8vICAgICAgIERhdGFTdGF0ZTogdXNlci5EYXRhU3RhdGUsXG4gIC8vICAgICAgIEZpcnN0TmFtZTogdXNlci5GaXJzdE5hbWUsXG4gIC8vICAgICAgIExhc3ROYW1lOiB1c2VyLkxhc3ROYW1lLFxuICAvLyAgICAgICBPdGhlck5hbWU6IHVzZXIuT3RoZXJOYW1lLFxuICAvLyAgICAgfSkpO1xuICAvLyAgIH1cbiAgLy8gfVxuICBhc3luYyBmZXRjaERhdHEyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudXNlck1hbmFnZW1lbnRTZXJ2aWNlLmdldFJlYWxVc2Vycyh0aGlzLnJvbGUsIDAsIDEwLCAnbmFtZScsICdhc2MnKTtcblxuICAgIGNvbnNvbGUubG9nKHJlcyk7XG5cbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgcmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0gcmVzLm1hcCgodXNlcikgPT4gKHtcbiAgICAgICAgQ3JlYXRlZEF0OiB1c2VyLkNyZWF0ZWRBdCwgLy8gQVBJIGtleSBmb3IgXCJDcmVhdGVkXCJcbiAgICAgICAgTmFtZTogYCR7dXNlci5GaXJzdE5hbWV9ICR7dXNlci5MYXN0TmFtZX1gLCAvLyBDb21iaW5lIEZpcnN0TmFtZSBhbmQgTGFzdE5hbWVcbiAgICAgICAgTWFpbEFkZHJlc3M6IHVzZXIuTWFpbEFkZHJlc3MsIC8vIFVzZSBjb3JyZWN0IGtleSBmb3IgXCJFLU1haWxcIlxuICAgICAgICBQaG9uZU51bWJlcjogdXNlci5QaG9uZU51bWJlciB8fCAnJywgLy8gSGFuZGxlIHVuZGVmaW5lZCBQaG9uZU51bWJlclxuICAgICAgICBBZGRyZXNzOiB1c2VyLkFkZHJlc3MgfHwgJycsIC8vIElmIEFkZHJlc3MgZXhpc3RzIGluIEFQSVxuICAgICAgICBSb2xlOiB1c2VyLlJvbGVJRCB8fCAnJywgLy8gTWFwIFJvbGUgaWYgYXZhaWxhYmxlXG4gICAgICAgIFN0YXR1czogdXNlci5TdGF0dXMgfHwgJycsIC8vIE1hcCBTdGF0dXNcbiAgICAgICAgVXBkYXRlZEF0OiB1c2VyLlVwZGF0ZWRBdCxcbiAgICAgICAgRGF0YVN0YXRlOiB1c2VyLkRhdGFTdGF0ZSxcbiAgICAgICAgRmlyc3ROYW1lOiB1c2VyLkZpcnN0TmFtZSxcbiAgICAgICAgTGFzdE5hbWU6IHVzZXIuTGFzdE5hbWUsXG4gICAgICAgIE90aGVyTmFtZTogdXNlci5PdGhlck5hbWUsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgXG4gIGFzeW5jIGZldGNoVXNlcihzb3J0VmFsdWU6IHN0cmluZyA9ICdDcmVhdGVkQXQnLCBvcmRlcjogc3RyaW5nID0gJ2FzYycpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICBgVXNlci9HZXRVc2Vycy8ke3RoaXMuc2tpcH0vJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRWYWx1ZX0vJHtvcmRlcn1gXG4gICAgICApO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3IgcmVzcG9uc2VcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgbG9nczonLCByZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXMgYXMgUGFnZWRSZXN1bHQ8VXNlck1hbmFnZW1lbnQ+O1xuICAgICAgICB0aGlzLmRhdGFGaXQgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5Vc2VyID0gWy4uLnRoaXMuVXNlciwgLi4ucmVzcG9uc2UuUmVzdWx0XTtcbiAgICAgICAgdGhpcy5za2lwICs9IHRoaXMucGFnZVNpemU7XG4gICAgICAgIHRoaXMuaGFzTW9yZSA9IHRoaXMuc2tpcCA8IHJlc3BvbnNlLlRvdGFsO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hVc2VycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnVzZXJNYW5hZ2VtZW50U2VydmljZS5nZXRVc2VycygwLCAxMCwgJ25hbWUnLCAnYXNjJyk7XG5cbiAgICBjb25zb2xlLmxvZyhyZXMpO1xuXG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FyZERhdGEgPSByZXMubWFwKFxuICAgICAgICAoeyBGaXJzdE5hbWUsIE1haWxBZGRyZXNzLCBQaG9uZU51bWJlciwgUm9sZUlELCBTdGF0dXMgfSkgPT4gKHtcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgdGl0bGU6IEZpcnN0TmFtZSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBGaXJzdE5hbWUsXG4gICAgICAgICAgICBNYWlsQWRkcmVzcyxcbiAgICAgICAgICAgIFBob25lTnVtYmVyLFxuICAgICAgICAgICAgUm9sZUlELFxuICAgICAgICAgICAgU3RhdHVzLFxuICAgICAgICAgIH0gYXMgUGFydGlhbDxVc2VyTWFuYWdlbWVudD4sXG4gICAgICAgICAgYm9keTogW1xuICAgICAgICAgICAgeyB0aXRsZTogJ05hbWUnLCB2YWx1ZTogRmlyc3ROYW1lIH0sXG4gICAgICAgICAgICB7IHRpdGxlOiAnRS1NYWlsIEFkZHJlc3MnLCB2YWx1ZTogTWFpbEFkZHJlc3MgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6ICdQaG9uZSBOdW1iZXInLCB2YWx1ZTogUGhvbmVOdW1iZXIgPz8gJycgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxuICBjb2x1bW5zID0gY29sdW1ucztcbiAgLy8gZGF0YSA9IG1vY2tEYXRhO1xuICBzdHlsZXMgPSBiYXNlU3R5bGU7XG5cbiAgc2VsZWN0ZWRQYXJlbnQ/OiBzdHJpbmc7XG4gIGJhc2ljT3B0aW9uPzogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRPcHRpb25Ud286IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkT3B0aW9uVGhyZWU/OiBzdHJpbmc7XG4gIG1pc3NpbmdPYmplY3Q6IGFueTtcblxuXG5cbiAgY2xlYXJMb2dzKHNvcnRWYWx1ZTogc3RyaW5nID0gJ0NyZWF0ZWRBdCcsIG9yZGVyOiBzdHJpbmcgPSAnYXNjJykge1xuICAgIHRoaXMuVXNlciA9IFtdOyAvLyBDbGVhciB0aGUgbG9ncyBhcnJheVxuICAgIHRoaXMuc2tpcCA9IDA7IC8vIFJlc2V0IHRoZSBza2lwIHZhbHVlXG4gICAgdGhpcy5oYXNNb3JlID0gdHJ1ZTsgLy8gUmVzZXQgdGhlIGZsYWcgdG8gYWxsb3cgZmV0Y2hpbmcgbW9yZSBsb2dzXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGZhbHNlO1xuICAgIHRoaXMuZmV0Y2hVc2VyKHNvcnRWYWx1ZSwgb3JkZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5ld1VzZXJNYW5hZ2VtZW50KCk6IFVzZXJNYW5hZ2VtZW50IHtcbiAgICBjb25zdCBuZXdJZCA9IHRoaXMuZGF0YS5sZW5ndGggKyAxOyAvLyBJbmNyZW1lbnRhbCBJRCBiYXNlZCBvbiBjdXJyZW50IGRhdGEgbGVuZ3RoXG5cbiAgICByZXR1cm4ge1xuICAgICAgRmlyc3ROYW1lOiBgRmlyc3QgJHtuZXdJZH1gLFxuICAgICAgTGFzdE5hbWU6IGBMYXN0ICR7bmV3SWR9YCxcbiAgICAgIE90aGVyTmFtZTogYE90aGVyICR7bmV3SWR9YCxcbiAgICAgIElkOiBgJHtuZXdJZH1gLFxuICAgICAgaWQ6IG5ld0lkLFxuICAgICAgTWFpbEFkZHJlc3M6IGAgYCxcbiAgICAgIFBob25lTnVtYmVyOiBgYCxcbiAgICAgIFJlcXVlc3RTdGF0dXM6IFVzZXJBY2Nlc3NSZXF1ZXN0U3RhdHVzLlBlbmRpbmcsXG4gICAgICBBZGRyZXNzOiBgIGAsXG4gICAgICBQYXNzd29yZDogJyAnLFxuICAgICAgRXhwaXJlT246IG5ldyBEYXRlKCksXG4gICAgICBJc1NlZWRlZDogZmFsc2UsXG4gICAgICBPVFBFeHBpcmVPbjogbmV3IERhdGUoKSxcbiAgICAgIFRlbmFudHM6IFtgVGVuYW50JHtuZXdJZH1gXSxcbiAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgVGVuYW50SWQ6IGBUZW5hbnQke25ld0lkfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIFN0YXR1czogVXNlckFjY2Vzc1JlcXVlc3RTdGF0dXMuUGVuZGluZyxcbiAgICB9O1xuICB9XG5cbiBcblxuICAvLyBHcmlkIHZpZXcgcHJvcGVydGllc1xuICBpc0dyaWRWaWV3OiBib29sZWFuID0gdHJ1ZTtcbiAgY3VycmVudERhdGEhOiBDYXJkRGF0YTtcbiAgc2VsZWN0ZWRDb2x1bW5Db3VudDogbnVtYmVyID0gMDtcbiAgc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50OiBudW1iZXIgPSAwO1xuICBpc09QZW46IGJvb2xlYW4gPSB0cnVlO1xuICBzZWxlY3RlZFNvcnRDb3VudDogbnVtYmVyID0gMDtcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcbiAgc2hvd0NvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93U29ydDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuICB2aXNpYmxlQ29sdW1uczogSURhdGFGaWx0ZXJbXSA9IGNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgY2hlY2tlZDogZmFsc2UsXG4gICAgbmFtZTogdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnID8gY29sLmhlYWRlciA6IGNvbC5pZCxcbiAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICB9KSk7XG5cbiAgZmlsdGVyQXJyYXk6IElEYXRhRmlsdGVyW10gPSBbXG4gICAgeyBuYW1lOiAnTmFtZScsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdNYWlsQWRkcmVzcycsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdQaG9uZU51bWJlcicsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdDcmVhdGVkQXQnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLCBjaGVja2VkOiBmYWxzZSB9LFxuICBdO1xuXG4gIHNvcnRPcHRpb25zOiBJRGF0YUZpbHRlcltdID0gW1xuICAgIHsgbmFtZTogJ05hbWUnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnTWFpbEFkZHJlc3MnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnUGhvbmVOdW1iZXInLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnQ3JlYXRlZEF0JywgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSwgY2hlY2tlZDogZmFsc2UgfSxcbiAgXTtcblxuICB0ZXN0UGFyZW50czogVGVzdFBhcmVudE9iamVjdFtdID0gW1xuICAgIHsgSWQ6ICcxJywgTmFtZTogJ01hbmFnZXInIH0sXG4gICAgeyBJZDogJzInLCBOYW1lOiAnQWRtaW5pc3RyYXRvcicgfSxcbiAgICB7IElkOiAnMycsIE5hbWU6ICdKZWxvbScgfSxcbiAgXTtcblxuICBnZXRQYXJlbnRMYWJlbChjb250ZXh0OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnNvbGUubG9nKHsgTWlzc2luZ09iajogdGhpcy5taXNzaW5nT2JqZWN0IH0pO1xuICAgIHJldHVybiB0aGlzLm1pc3NpbmdPYmplY3QuTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlUGFyZW50cyhldmVudDogRHJvcGRvd25Mb2FkRXZlbnQpOiBQcm9taXNlPFRlc3RQYXJlbnRPYmplY3RbXT4ge1xuICAgIGNvbnNvbGUubG9nKHsgUGFyZW50TG9hZEV2ZW50OiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50KSkgfSk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICByZXNvbHZlKFtcbiAgICAgICAgICAgIHsgSWQ6ICcxJywgTmFtZTogJ0ppbWx5JyB9LFxuICAgICAgICAgICAgeyBJZDogJzInLCBOYW1lOiAnSmVjaWwnIH0sXG4gICAgICAgICAgICB7IElkOiAnMycsIE5hbWU6ICdKZWxvbScgfSxcbiAgICAgICAgICAgIHsgSWQ6ICc0JywgTmFtZTogJ0plbWltYScgfSxcbiAgICAgICAgICAgIHsgSWQ6ICc1JywgTmFtZTogJ0FraW50dW5kZScgfSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgMzAwMFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGlsZENvbXBvbmVudC5mb3JtLnZhbGlkKSB7XG4gICAgICAvLyBjb25zdCB1c2VyRGF0YTogVXNlciA9IHRoaXMuY2hpbGRDb21wb25lbnQuZm9ybS52YWx1ZTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdQYXlsb2FkOicsIFt1c2VyRGF0YV0pOyAvLyBMb2cgdGhlIHBheWxvYWQgdG8gY2hlY2sgaXRzIHN0cnVjdHVyZVxuICBcbiAgICAgIC8vIHRoaXMudXNlck1hbmFnZW1lbnRTZXJ2aWNlLnNhdmVVc2VycyhbdXNlckRhdGFdKS50aGVuKFxuICAgICAgLy8gICAocmVzdWx0KSA9PiB7XG4gICAgICAvLyAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yUmVzcG9uc2UgZnJvbSBzZXJ2ZXI6JywgcmVzdWx0LkVycm9yTXNnKTtcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ1VzZXIgc2F2ZWQgc3VjY2Vzc2Z1bGx5OicsIHJlc3VsdCk7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9LFxuICAgICAgLy8gICAoZXJyb3IpID0+IHtcbiAgICAgIC8vICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGVycm9yIHNhdmluZyB1c2VyOicsIGVycm9yKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gKTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGRDb21wb25lbnQuZm9ybS52YWx1ZSk7XG4gICAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignRm9ybSBpcyBpbnZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgb25EZWxldGUoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NoaWxkIGZvcm0gZGVsZXRlIHRyaWdnZXJlZCcpO1xuICAgIC8vIFBlcmZvcm0gZGVsZXRlIGxvZ2ljIGhlcmVcbiAgfVxuICBvbkRyb3Bkb3duQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5sb2coe1xuICAgIC8vICAgJ1Rlc3QgUGFyZW50IFZhbHVlJzogdGhpcy5zZWxlY3RlZFBhcmVudCxcbiAgICAvLyAgIC4uLlxuICAgIC8vIH0pO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzOiBVc2VyTWFuYWdlbWVudFtdKSB7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGlvbiBjaGFuZ2VkOicsIHNlbGVjdGVkUm93cyk7XG4gICAgLy8gSGFuZGxlIHRoZSBzZWxlY3Rpb24gY2hhbmdlXG4gIH1cblxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZENTVihkYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKTtcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gW1xuICAgICAgaGVhZGVycy5qb2luKCcsJyksXG4gICAgICAuLi5kYXRhLm1hcCgocm93KSA9PiBoZWFkZXJzLm1hcCgoaGVhZGVyKSA9PiByb3dbaGVhZGVyXSkuam9pbignLCcpKSxcbiAgICBdLmpvaW4oJ1xcbicpO1xuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgaWYgKGxpbmsuZG93bmxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsICdleHBvcnQuY3N2Jyk7XG4gICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5RmlsdGVycygpIHtcbiAgLy8gICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgLy8gICAgIHJldHVybiB0aGlzLmZpbHRlckFycmF5LmV2ZXJ5KChmaWx0ZXIpID0+IHtcbiAgLy8gICAgICAgaWYgKGZpbHRlci5jaGVja2VkKSB7XG4gIC8vICAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAvLyAgICAgICAgICAgY2FzZSBEYXRhRmlsdGVyVHlwZS5TdHJpbmc6XG4gIC8vICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpbHRlci5uYW1lXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlci5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAvLyAgICAgICAgICAgY2FzZSBEYXRhRmlsdGVyVHlwZS5EYXRlOlxuICAvLyAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoaXRlbVtmaWx0ZXIubmFtZV0pID49IG5ldyBEYXRlKGZpbHRlci5uYW1lKTtcbiAgLy8gICAgICAgICAgIGRlZmF1bHQ6XG4gIC8vICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfVxuICAvLyAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgIH0pO1xuICAvLyAgIH0pO1xuICAvLyB9XG4gIGdldENhcmREYXRhQnlNYWlsQWRkcmVzcyhtYWlsQWRkcmVzczogc3RyaW5nKTogQ2FyZERhdGEgfCB1bmRlZmluZWQge1xuICAgIGNvbnNvbGUubG9nKCdjYXJkRGF0YSBhcnJheTonLCB0aGlzLmNhcmREYXRhKTtcbiAgICBjb25zb2xlLmxvZyhtYWlsQWRkcmVzcyk7XG5cbiAgICByZXR1cm4gdGhpcy5jYXJkRGF0YS5maW5kKCh7IGRhdGEgfSkgPT4gZGF0YT8uTWFpbEFkZHJlc3MgPT09IG1haWxBZGRyZXNzKTtcbiAgfVxuXG4gIG9wZW5EZXRhaWxWaWV3KG1haWxBZGRyZXNzOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjYXJkSXRlbSA9IHRoaXMuZ2V0Q2FyZERhdGFCeU1haWxBZGRyZXNzKG1haWxBZGRyZXNzKTtcbiAgICBjb25zb2xlLmxvZyhjYXJkSXRlbSk7XG5cbiAgICBpZiAoY2FyZEl0ZW0gJiYgdGhpcy5jYXJkRGF0YVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgLy8gRmlyc3QgcmVzZXQgYWxsIHNlbGVjdGlvbnNcbiAgICAgIHRoaXMuY2FyZERhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgaXRlbVxuICAgICAgY2FyZEl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKGNhcmRJdGVtKTtcblxuICAgICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICAgIC8vIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG5cbiAgYXN5bmMgcG9zdFNlYXJjaChwYXlsb2FkOiBhbnkpIHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcblxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PFVzZXJNYW5hZ2VtZW50PjtcbiAgICAgIHRoaXMuZGF0YUZpdCA9IHJlc3BvbnNlO1xuICAgICAgdGhpcy5Vc2VyID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgIH1cbiAgfVxuXG5cbiAgXG5cbiAgb25GaWx0ZXJBcHBsaWVkKGFwcGxpZWRGaWx0ZXI6IElEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLnNob3dGaWx0ZXIgPSBmYWxzZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcHBsaWVkRmlsdGVyKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlclRhYmxlQ291bnQgPSBhcHBsaWVkRmlsdGVyLmxlbmd0aDtcbiAgICAgIGNvbnNvbGUubG9nKGFwcGxpZWRGaWx0ZXIpO1xuXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGFwcGxpZWRGaWx0ZXJcbiAgICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXIuY2hlY2tlZClcbiAgICAgICAgLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgICAgIFByb3BlcnR5TmFtZTogZmlsdGVyLm5hbWUsXG4gICAgICAgICAgRW50aXR5VmFsdWU6IGZpbHRlci52YWx1ZSxcbiAgICAgICAgICBUeXBlOiBmaWx0ZXIudHlwZSxcbiAgICAgICAgICBPcGVyYXRvcjogJ0FuZCcsXG4gICAgICAgICAgIFNpZ246XG4gICAgICAgICAgICBmaWx0ZXIuY29uZGl0aW9uID09PSBcIkVxdWFsc1wiXG4gICAgICAgICAgICAgID8gXCI9PVwiXG4gICAgICAgICAgICAgIDogZmlsdGVyLmNvbmRpdGlvbiA9PT0gXCJOb3RFcXVhbHNcIlxuICAgICAgICAgICAgICA/IFwiIT1cIlxuICAgICAgICAgICAgICA6IGZpbHRlci5jb25kaXRpb24gPT09IFwiR3JlYXRlclRoYW5cIlxuICAgICAgICAgICAgICA/IFwiPlwiXG4gICAgICAgICAgICAgIDogZmlsdGVyLmNvbmRpdGlvbiA9PT0gXCJMZXNzVGhhblwiXG4gICAgICAgICAgICAgID8gXCI8XCJcbiAgICAgICAgICAgICAgOiBmaWx0ZXIuY29uZGl0aW9uID09PSBcIkNvbnRhaW5zXCJcbiAgICAgICAgICAgICAgPyBcIkxJS0VcIlxuICAgICAgICAgICAgICA6IFwiXCIsIFxuICAgICAgICB9KSk7XG5cbiAgICAgIHRoaXMucG9zdFNlYXJjaChxdWVyeVBhcmFtcyk7XG4gICAgfVxuICB9XG5cblxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc2tpcCA9IDA7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xuICB9XG5cbiAgYXN5bmMgb25TZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5jbGVhckxvZ3MoJ25hbWUnLCAnYXNjJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgYFVzZXIvR2V0VXNlcldpdGhQYXJhbS8ke3RoaXMuc2VhcmNoVGVybX0vJHt0aGlzLnNraXB9LyR7dGhpcy5wYWdlU2l6ZX0vbmFtZS9hc2NgXG4gICAgICApO1xuXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBzZWFyY2g6JywgcmVzKTtcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXMgYXMgUGFnZWRSZXN1bHQ8VXNlck1hbmFnZW1lbnQ+O1xuICAgICAgICB0aGlzLmRhdGFGaXQgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5Vc2VyID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTZWFyY2ggZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0ge30gYXMgQ2FyZERhdGE7XG4gIH1cblxuICBcbiAgbG9hZE1vcmUoKSB7XG4gICAgaWYgKHRoaXMuaGFzTW9yZSkge1xuICAgICAgdGhpcy5mZXRjaFVzZXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbHVtbkNoYW5nZShldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd0NvbHVtbiA9IGV2ZW50O1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93U29ydCA9IGV2ZW50O1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29sdW1uc1VwZGF0ZWQodXBkYXRlZENvbHVtbnM6IElEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLm9uQ29sdW1uQ2hhbmdlKGZhbHNlKTtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uQ291bnQgPSB1cGRhdGVkQ29sdW1ucy5sZW5ndGg7XG5cbiAgICBpZiAodXBkYXRlZENvbHVtbnMpIHtcbiAgICAgIC8vIEZpbHRlciBjb2x1bW5zIHRvIGluY2x1ZGUgb25seSB2aXNpYmxlIG9uZXNcbiAgICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PlxuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGZpbHRlcikgPT4gZmlsdGVyLm5hbWUgPT09IGNvbC5oZWFkZXIgJiYgZmlsdGVyLmNoZWNrZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgXG4gICAgICAvLyBSZW9yZGVyIGNvbHVtbnMgYmFzZWQgb24gdGhlIG9yZGVyIGluIHZpc2libGVDb2x1bW5zXG4gICAgICBjb25zdCB2aXNpYmxlQ29sdW1uT3JkZXIgPSB0aGlzLnZpc2libGVDb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLmNoZWNrZWQpXG4gICAgICAgIC5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLm5hbWUpO1xuICBcbiAgICAgIHRoaXMuY29sdW1ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4QSA9IHZpc2libGVDb2x1bW5PcmRlci5pbmRleE9mKGEuaGVhZGVyIGFzIHN0cmluZyk7XG4gICAgICAgIGNvbnN0IGluZGV4QiA9IHZpc2libGVDb2x1bW5PcmRlci5pbmRleE9mKGIuaGVhZGVyIGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiBpbmRleEEgLSBpbmRleEI7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBvbkZpbHRlclVwZGF0ZWQodXBkYXRlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10pOiB2b2lkIHtcbiAgLy8gICBpZiAoIUFycmF5LmlzQXJyYXkodXBkYXRlZEZpbHRlcnMpKSB7XG4gIC8vICAgICBjb25zb2xlLmVycm9yKCd1cGRhdGVkRmlsdGVycyBpcyBub3QgYW4gYXJyYXk6JywgdXBkYXRlZEZpbHRlcnMpO1xuICAvLyAgICAgdXBkYXRlZEZpbHRlcnMgPSBbXTsgLy8gZmFsbGJhY2sgdG8gYW4gZW1wdHkgYXJyYXlcbiAgLy8gICB9XG4gIFxuICBcbiAgLy8gfVxuICBcbiAgb25Tb3J0VXBkYXRlZCh1cGRhdGVkU29ydHM6IElEYXRhRmlsdGVyW10pOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IHVwZGF0ZWRTb3J0cztcbiAgICBcbiAgfVxuXG5cblxuICAgIFxuXG4gIG9uVmlld0NoYW5nZShpc0dyaWRWaWV3OiBib29sZWFuKTogdm9pZCB7fVxuXG4gIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgU3RhdGUgY2hhbmdlZCBmb3IgJHtldmVudC5rZXl9OmAsIGV2ZW50LnZhbHVlKTtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnY3JlYXRlJykge1xuICAgICAgY29uc29sZS5sb2coJ3BlYWNlIGlzIGEgYm95Jyk7XG5cbiAgICAgIFxuXG4gICAgICAvLyBjb25zdCBuZXdVc2VyID0gdGhpcy5uZXdJdGVtKClcblxuICAgICAgLy8gaWYgKCBuZXdVc2VyICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICAvLyAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgLy8gICAvLyBGaXJzdCByZXNldCBhbGwgc2VsZWN0aW9uc1xuICAgICAgLy8gICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIC8vICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAvLyAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgIC8vICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9KTtcblxuICAgICAgLy8gICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2sobmV3VXNlcik7XG5cbiAgICAgIC8vICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICAgIC8vICAgLy8gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAvLyB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZXNzYWdlLWxvZy1jb250YWluZXJcIj5cbiAgPHZlcmJlbi1kYXRhLXZpZXdcbiAgICAjdmR2XG4gICAgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdHJ1ZSxcbiAgICAgIGlzQ29sdW1uOiB0cnVlLFxuICAgICAgaXNGaWx0ZXI6IHRydWUsXG4gICAgICBpc1NvcnQ6IHRydWUsXG4gICAgICBpc0V4cG9ydDogdHJ1ZSxcbiAgICAgIGlzU2VsZWN0OiB0cnVlLFxuICAgICBcbiAgICAgIGlzVG9nZ2xlOnRydWVcbiAgICB9XCJcbiAgICBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCJcbiAgICBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCJcbiAgICBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCIwXCJcbiAgICAob25TZWFyY2hDaGFuZ2UpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgW3NlYXJjaFZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2hvd0ZpbHRlckNoaWxkXT1cInNob3dGaWx0ZXJcIlxuICAgIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwiMFwiXG4gICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICAgIFtpc1RhYmxlVmlld109XCJmYWxzZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMlwiIHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGVcbiAgICAgICAgW2RhdGFdPVwiVXNlclwiXG4gICAgICAgIFtjb2x1bW5zXT1cImZpbHRlcmVkQ29sdW1uc1wiXG4gICAgICAgIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiIGxldC10b2dnbGVSb3dTZWxlY3Rpb249XCJ0b2dnbGVSb3dTZWxlY3Rpb25cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZFwiIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKClcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlciBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCIgbGV0LXNvbWVSb3dzU2VsZWN0ZWQ9XCJzb21lUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICBsZXQtdG9nZ2xlQWxsUm93cz1cInRvZ2dsZUFsbFJvd3NcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKClcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlIGxldC1kZWxldGVSb3cgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTZcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRldGFpbFZpZXcodmFsdWUpXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cblxuICAgICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICA8c3Ryb25nPkFjdGlvbnM8L3N0cm9uZz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzdGF0dXNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAjY2VsbFxuICAgICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgbGV0LWRlbGV0ZVJvdz1cImRlbGV0ZVJvd1wiXG4gICAgICAgICAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx2ZXJiZW5hLWJhZGdlXG4gICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjIwcHhcIlxuICAgICAgICAgICB3aWR0aD1cIjEyMXB4XCJcbiAgICAgICAgICAgIHRleHQ9XCJ7e3ZhbHVlfX1cIlxuICAgICAgICAgICAgYmdDb2xvcj1cIiNENkYzRTZcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwiIzJEQjc2RlwiXG4gICAgICAgICAgICBwZD1cIjVweCAxNXB4XCJcbiAgICAgICAgICAgIGZvbnRTaXplPVwiMTZweFwiXG4gICAgICAgICAgPlxuXG5cbiAgICAgICAgPC92ZXJiZW5hLWJhZGdlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlld1xuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMnB4XCJcbiAgICAgICAgKGxvYWRNb3JlQ2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgICN2ZGN2XG4gICAgICAgIGRhdGFJZD1cIk1haWxBZGRyZXNzXCJcbiAgICAgICAgYm9yZGVyPVwiNXB4XCJcbiAgICAgICAgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiXG4gICAgICAgIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiXG4gICAgICAgIG1nPVwiMHB4XCJcbiAgICAgICAgY2xhc3M9XCJnYXAtMVwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cIm0tMCBnYXAtMlwiID5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhXG4gICAgICAgICAgICAjdmxjZFxuICAgICAgICAgICAgW3BhcmVudF09XCJ2ZGN2XCJcbiAgICAgICAgICAgIGRhdGFJZD1cIk1haWxBZGRyZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCAgcm91bmRlZC14bCBzY3JvbGwtbm8gYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdIGdhcC0xIGgtZnVsbCBqdXN0aWZ5LXBwIG0tMCBvdmVyZmxvdy15LWF1dG8gb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjdXJyZW50RGF0YSA9IHZkY3Yub25JdGVtQ2xpY2soaXRlbSlcIiA+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2bGNkLnNob3dDaGlsZHJlbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ2bGNkLnNob3dUb2dnbGUoaXRlbSkgPyAndmlzaWJsZScgOiAnaW52aXNpYmxlJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW1zLWNlbnRlciBmbGV4ICBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCA/ICdtaW51cycgOiAncGx1cydcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsICFtYXgtdy1bMzA0cHhdXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0yIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZSBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgIFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGdyaWQgZ3JpZC1jb2xzLTUgaXRlbXMtY2VudGVyIHBsLTYgcHktMyBwci0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBjb2wtc3Bhbi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1bMTZweF0gdGV4dC1bIzQwNDA0MF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LVsxMHB4XSBmb250LWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+UGhvbmUgTnVtYmVyOjwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cInBob25lXCIgY2xhc3M9XCJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSB0cnVuY2F0ZSB0ZXh0LXdyYXBcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5QaG9uZU51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgY29sLXNwYW4tMiBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVcIiBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5Sb2xlPC9sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5NYW5hZ2VyPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIgYmctWyNDQUUxQ0NdIHRleHQtY2VudGVyIHRleHQtWyM0QUJCNTRdIHRleHQtWzEzcHhdIG10LVs4cHhdIHJvdW5kZWQtWzlweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uZGF0YS5TdGF0dXN9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaWItdXNlci1hY2Nlc3MtcmVxdWVzdC1zdGF0dXMtYmFkZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJpdGVtLmRhdGEuU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi11c2VyLWFjY2Vzcy1yZXF1ZXN0LXN0YXR1cy1iYWRnZT4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbm9ybWFsIHRleHQtc21cIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY2lJdGVtIG9mIGl0ZW0uYm9keTsgdHJhY2sgY2lJdGVtLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZm9udC1saWdodCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBjaUl0ZW0udGl0bGUgfX06PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibGFja1wiPnt7IGNpSXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuXG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIiBiZy1zZWNvbmRhcnktMTAwIHB5LTIgZmxleCBmbGV4LWNvbCBnYXAtMjAgcHgtMlwiPlxuICAgICAgICAgICAgPGxpYi11c2VyLXJlcXVlc3QtZm9ybVxuICAgICAgICAgICAgW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgPjwvbGliLXVzZXItcmVxdWVzdC1mb3JtPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvdHRvbS04IGxlZnQtMCByaWdodC0wIHAtM1wiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gdGV4dD1cIkRlbGV0ZVwiIGJnQ29sb3I9XCIjOTk5OTk5XCIgdGV4dENvbG9yPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjOTk5OTk5XCIgKGNsaWNrKT1cIm9uRGVsZXRlKClcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiAoY2xpY2spPVwidmR2LnRvZ2dsZVZpZXcoKVwiIHRleHQ9XCJTd2l0Y2ggVG8gVGFibGVcIlxuICAgICAgICAgICAgICAgICAgc3R5bGVUeXBlPVwieWx3LW91dGxpbmVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiAgdGV4dD1cIlNhdmVcIiBiZ0NvbG9yPVwiI0ZGRTY4MVwiIChjbGljayk9XCJvblNhdmUoKVwiIHRleHRDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgICAgICAgICAgICAgYm9yZGVyPVwiMXB4IHNvbGlkICNGRkU2ODFcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cIlwiIC0tPlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC92ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgY2xhc3M9XCJmbG9hdC1yaWdodFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCJcbiAgICAgICAgICAgICAgPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlXCI+TG9hZCBtb3JlPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXZpc2libGUtY29sdW1uXG4gICAgICAgIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIlxuICAgICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgICB3aWR0aD1cIjQwMHB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCJcbiAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCI1XCJcbiAgICAgID48L3ZlcmJlbi12aXNpYmxlLWNvbHVtbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MjBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIlxuICAgICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tc29ydC10YWJsZVxuICAgICAgICAoc2VsZWN0ZWRPcHRpb25zKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG5cbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIlxuICAgICAgPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgW2RhdGFdPVwiVXNlclwiIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgJiYgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIlxuICAgIGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDx2ZXJiZW5hLWJ1dHRvbiBbZm9udFdlaWdodF09XCInYm9sZCdcIiBbYmdDb2xvcl09XCInIzhFOEQ4NydcIiBbYm9yZGVyUmFkaXVzXT1cIic0cHgnXCIgW3RleHRDb2xvcl09XCInI2ZmZidcIlxuICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzIHRleHQtWyMzNDc5RTldIHVuZGVybGluZVwiXG4gICAgPlxuICAgICAgTG9hZCBtb3JlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cblxuIl19