vcomply-workflow-engine 6.6.8 → 7.0.0

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 (21) hide show
  1. package/esm2022/lib/sharedComponents/policy-access/policy-access.component.mjs +21 -3
  2. package/esm2022/lib/sharedComponents/select-approvers/select-approvers.component.mjs +1 -1
  3. package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +1 -1
  4. package/esm2022/lib/workflow-interfaces/create-policy-form.mjs +1 -1
  5. package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +65 -4
  6. package/esm2022/lib/workflow-program/create-program-ui/pipes/filter.pipe.mjs +5 -2
  7. package/esm2022/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +35 -3
  8. package/esm2022/lib/workflow-program/workflow-program.component.mjs +1 -1
  9. package/esm2022/lib/workflow-risk/workflow-risk.component.mjs +1 -1
  10. package/esm2022/lib/workflow-services/organization-user.service.mjs +27 -3
  11. package/fesm2022/vcomply-workflow-engine.mjs +161 -25
  12. package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
  13. package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +1 -1
  14. package/lib/sharedComponents/policy-access/policy-access.component.d.ts +7 -1
  15. package/lib/workflow-interfaces/create-policy-form.d.ts +1 -0
  16. package/lib/workflow-policy/workflow-policy.component.d.ts +6 -0
  17. package/lib/workflow-program/create-program-ui/pipes/filter.pipe.d.ts +1 -1
  18. package/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.d.ts +9 -3
  19. package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
  20. package/lib/workflow-services/organization-user.service.d.ts +3 -1
  21. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
2
4
  import { SearchPipe } from '../pipes/search.pipe';
3
5
  import { ASSETS } from '../../../constants/assets.constants';
4
6
  import * as i0 from "@angular/core";
@@ -201,6 +203,8 @@ export class UserGroupListComponent {
201
203
  this.mode = 'CREATE';
202
204
  this.fieldType = '';
203
205
  this.searchKey = '';
206
+ this.searchSubject = new Subject();
207
+ this.destroy$ = new Subject();
204
208
  this.approvalWorkflowType = 'SEQUENTIAL';
205
209
  this.usersList = [];
206
210
  this.groupsList = [];
@@ -236,9 +240,11 @@ export class UserGroupListComponent {
236
240
  this.defaultSelectedUsers = [];
237
241
  this.defaultSelectedUserIds = [];
238
242
  this.userType = 'assignees';
243
+ this.isPaginationEnabled = false;
239
244
  this.showConfirmation = false;
240
245
  this.animation = true;
241
246
  this.currentTab = 'USER';
247
+ this.setupDebounceForUserSearch();
242
248
  }
243
249
  ngOnInit() {
244
250
  let disabledIds = [...this.disabledIds, ...this.nonRemovableUserIds];
@@ -248,6 +254,11 @@ export class UserGroupListComponent {
248
254
  setTimeout(() => {
249
255
  this.animation = false;
250
256
  }, 300);
257
+ // Setup debounced search
258
+ }
259
+ ngOnDestroy() {
260
+ this.destroy$.next();
261
+ this.destroy$.complete();
251
262
  }
252
263
  switchTab(tab) {
253
264
  this.currentTab = tab;
@@ -340,18 +351,37 @@ export class UserGroupListComponent {
340
351
  setAllUsersSelected(event) {
341
352
  this.futureUsersWillSelect = event;
342
353
  if (event) {
354
+ // Clear any existing search and reset to first page
355
+ this.searchKey = '';
356
+ this.userCurrentPage = 1;
357
+ this.fetchUserData.emit({ page: 1, searchKey: '' });
343
358
  this.selectedUsers = [];
344
359
  this.selectedGroups = [];
345
360
  this.selectedUserIds = [];
346
361
  this.selectedGroupIds = [];
347
362
  }
348
363
  }
364
+ onSearchKeyChange(searchKey) {
365
+ this.searchSubject.next(searchKey || '');
366
+ }
367
+ setupDebounceForUserSearch() {
368
+ this.searchSubject.pipe(debounceTime(800), // Wait 800ms after user stops typing
369
+ distinctUntilChanged(), // Only emit if the value has changed
370
+ takeUntil(this.destroy$)).subscribe(searchKey => {
371
+ this.userCurrentPage = 1;
372
+ if (this.isPaginationEnabled) {
373
+ // Server-side search: fetch new data
374
+ this.fetchUserData.emit({ page: 1, searchKey: searchKey });
375
+ }
376
+ // Client-side search: handled automatically by the filter pipe
377
+ });
378
+ }
349
379
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserGroupListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
350
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserGroupListComponent, selector: "user-group-list", inputs: { groupEnabled: "groupEnabled", panelTitle: "panelTitle", singleSelect: "singleSelect", selectedReviewer: "selectedReviewer", featureflag: "featureflag", reviewerWorkflowType: "reviewerWorkflowType", mode: "mode", fieldType: "fieldType", fromResponsibility: "fromResponsibility", assignorId: "assignorId", assigneeIds: "assigneeIds", reviewerIds: "reviewerIds", overseerIds: "overseerIds", FromProgram: "FromProgram", userListInfo: "userListInfo", groupListInfo: "groupListInfo", fromApprovalWorkflow: "fromApprovalWorkflow", approvalType: "approvalType", showFutureUsersSwitch: "showFutureUsersSwitch", futureUsersWillSelect: "futureUsersWillSelect", isAllDisabled: "isAllDisabled", isGroupTabShow: "isGroupTabShow", disabledIds: "disabledIds", nonRemovableUserIds: "nonRemovableUserIds", allUserSelectedDisabled: "allUserSelectedDisabled", nonRemovableGroupIds: "nonRemovableGroupIds", loading: "loading", setUserList: ["userlist", "setUserList"], setSelectedUser: ["selectedUsers", "setSelectedUser"], setDefaultSelectedUsers: ["defaultSelectedUsers", "setDefaultSelectedUsers"], userType: "userType", setGroupList: ["groupList", "setGroupList"], setSelectedGroup: ["selectedGroups", "setSelectedGroup"] }, outputs: { save: "save", cancel: "cancel", reviewerWorkflowTypeChange: "reviewerWorkflowTypeChange", fetchUserData: "fetchUserData" }, ngImport: i0, template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div\n class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"groupEnabled\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | filter : searchKey)?.length\n : usersList?.length || userListInfo?.total_items\n }}</span\n >\n </button>\n <button\n *ngIf=\"isGroupTabShow\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span\n >\n </button>\n </div>\n\n <div\n class=\"future-user vx-d-flex vx-align-center\"\n *ngIf=\"showFutureUsersSwitch\"\n >\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i\n class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\"\n [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n >\n <app-cs-switch\n [ngValue]=\"futureUsersWillSelect\"\n (ngValueChange)=\"setAllUsersSelected($event)\"\n >\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n *ngIf=\"!featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\"\n />\n <input\n *ngIf=\"featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | filter : searchKey as users\">\n <vui-pagination\n *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \"\n [currentPage]=\"userCurrentPage\"\n [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"\n ></vui-pagination>\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n *ngIf=\"!singleSelect\"\n #user\n [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n (change)=\"selectAllUser($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li\n class=\"vx-mb-3\"\n *ngIf=\"!singleSelect\"\n [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"true\"\n >\n <vui-checkbox\n (change)=\"selectItem($event, user)\"\n [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \"\n ><div class=\"user-name\">\n {{ user?.member_name }}\n </div></vui-checkbox\n >\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio\n [name]=\"'radio-selector'\"\n (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\"\n [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container\n *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\"\n >\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n #group\n [checked]=\"allGroupSelected\"\n [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox\n (change)=\"selectGroup($event, group)\"\n [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \"\n [checked]=\"selectedGroupIds?.includes(group?.group_id)\"\n >\n <div\n class=\"user-name vx-d-flex vx-align-center vx-w-100\"\n [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\"\n >{{ group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span\n >\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar\n *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\"\n [showWorkflow]=\"selectedReviewer\"\n [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <ng-container *ngIf=\"!groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\"\n >&#xe9ae;</i\n >\n <div\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"element?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ element?.member_name }}</span\n >\n <button\n *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover\n (click)=\"groupDisable.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div\n class=\"user-group-chip\"\n *ngIf=\"selectedUsers?.length && groupEnabled\"\n >\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"counter\"\n *ngIf=\"selectedUsers?.length > 1\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\"\n >User {{ selectedGroups?.length > 0 ? \" & \" : \" selected\" }}</span\n >\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\"\n >Users {{ selectedGroups?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div\n class=\"counter group\"\n *ngIf=\"selectedGroups?.length > 1\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let element of selectedUsers | slice : 1; let i = index\"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n <span\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar\n *ngIf=\"singleSelect && !loading\"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i\n class=\"icons\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe90d;</i\n >\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.PaginationComponent, selector: "vui-pagination", inputs: ["from", "to", "total", "showPageDetail", "totalPage", "currentPage", "pageInSingleView"], outputs: ["pageChanged"] }, { kind: "component", type: i4.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NoDataComponentUI, selector: "app-no-data", inputs: ["action", "secondaryAction", "noDataImage", "noDataText", "noDataButton", "secondaryButton", "noDataSecButton", "altText", "smallButton"], outputs: ["buttonAction", "secondaryActionButton"] }, { kind: "component", type: i8.CsRadioComponentUI, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "component", type: i9.CsSwitchComponentUI, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "component", type: i10.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i11.CheckboxComponent, selector: "vui-checkbox", inputs: ["disabled", "checked", "indeterminateEnabled"] }, { kind: "component", type: i12.VuiFloatingBarComponent, selector: "vui-floating-bar", inputs: ["selectedData", "groupSelected", "displayElementKey", "elementId", "singularText", "pluralText", "showNextButton", "showFrequencyText", "showWorkflow", "workflowText", "currentFrequency", "isDisabled", "workflowList", "selectedWorkflow", "workflowPlaceHolder", "mode", "nextDisabled", "nonRemovableUsersList", "removePosition"], outputs: ["closeEvent", "deleteEvent", "closeList", "workflowTypeChanged"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i13.TooltipMessagePipe, name: "tooltipMessage" }, { kind: "pipe", type: i14.SearchPipe, name: "search" }, { kind: "pipe", type: i15.FilterPipe, name: "filter" }] }); }
380
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserGroupListComponent, selector: "user-group-list", inputs: { groupEnabled: "groupEnabled", panelTitle: "panelTitle", singleSelect: "singleSelect", selectedReviewer: "selectedReviewer", featureflag: "featureflag", reviewerWorkflowType: "reviewerWorkflowType", mode: "mode", fieldType: "fieldType", fromResponsibility: "fromResponsibility", assignorId: "assignorId", assigneeIds: "assigneeIds", reviewerIds: "reviewerIds", overseerIds: "overseerIds", FromProgram: "FromProgram", userListInfo: "userListInfo", groupListInfo: "groupListInfo", fromApprovalWorkflow: "fromApprovalWorkflow", approvalType: "approvalType", showFutureUsersSwitch: "showFutureUsersSwitch", futureUsersWillSelect: "futureUsersWillSelect", isAllDisabled: "isAllDisabled", isGroupTabShow: "isGroupTabShow", disabledIds: "disabledIds", nonRemovableUserIds: "nonRemovableUserIds", allUserSelectedDisabled: "allUserSelectedDisabled", nonRemovableGroupIds: "nonRemovableGroupIds", loading: "loading", setUserList: ["userlist", "setUserList"], setSelectedUser: ["selectedUsers", "setSelectedUser"], setDefaultSelectedUsers: ["defaultSelectedUsers", "setDefaultSelectedUsers"], userType: "userType", isPaginationEnabled: "isPaginationEnabled", setGroupList: ["groupList", "setGroupList"], setSelectedGroup: ["selectedGroups", "setSelectedGroup"] }, outputs: { save: "save", cancel: "cancel", reviewerWorkflowTypeChange: "reviewerWorkflowTypeChange", fetchUserData: "fetchUserData" }, ngImport: i0, template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div\n class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"groupEnabled\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <button\n *ngIf=\"!isPaginationEnabled\"\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | filter : searchKey)?.length\n : usersList?.length || userListInfo?.total_items\n }}</span\n >\n </button>\n <button\n *ngIf=\"isPaginationEnabled\"\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\" && isPaginationEnabled\n ? userListInfo?.total_items\n : userListInfo?.total\n }}</span\n >\n </button>\n <button\n *ngIf=\"isGroupTabShow\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span\n >\n </button>\n </div>\n\n <div\n class=\"future-user vx-d-flex vx-align-center\"\n *ngIf=\"showFutureUsersSwitch\"\n >\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i\n class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\"\n [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n >\n <app-cs-switch\n [ngValue]=\"futureUsersWillSelect\"\n (ngValueChange)=\"setAllUsersSelected($event)\"\n >\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n *ngIf=\"!featureflag\"\n [(ngModel)]=\"searchKey\"\n [disabled]=\"futureUsersWillSelect\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\"\n />\n <ng-container *ngIf=\"featureflag\">\n <input\n *ngIf=\"isPaginationEnabled; else searchInputWithoutPagination\"\n [(ngModel)]=\"searchKey\"\n (ngModelChange)=\"onSearchKeyChange($event)\"\n [disabled]=\"futureUsersWillSelect\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n <ng-template #searchInputWithoutPagination>\n <input\n [(ngModel)]=\"searchKey\"\n [disabled]=\"futureUsersWillSelect\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n </ng-template>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | filter : searchKey : isPaginationEnabled as users\">\n <vui-pagination\n *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \"\n [currentPage]=\"userCurrentPage\"\n [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"\n [from]=\"userListInfo?.from\"\n [to]=\"userListInfo?.to\"\n [total]=\"userListInfo?.total\"\n ></vui-pagination>\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <ng-container *ngIf=\"!isPaginationEnabled\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n *ngIf=\"!singleSelect\"\n #user\n [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n (change)=\"selectAllUser($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n </ng-container>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li\n class=\"vx-mb-3\"\n *ngIf=\"!singleSelect\"\n [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"true\"\n >\n <vui-checkbox\n (change)=\"selectItem($event, user)\"\n [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \"\n ><div class=\"user-name\">\n {{ user?.member_name }}\n </div></vui-checkbox\n >\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio\n [name]=\"'radio-selector'\"\n (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\"\n [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container\n *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\"\n >\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n #group\n [checked]=\"allGroupSelected\"\n [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox\n (change)=\"selectGroup($event, group)\"\n [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \"\n [checked]=\"selectedGroupIds?.includes(group?.group_id)\"\n >\n <div\n class=\"user-name vx-d-flex vx-align-center vx-w-100\"\n [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\"\n >{{ group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span\n >\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar\n *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\"\n [showWorkflow]=\"selectedReviewer\"\n [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <ng-container *ngIf=\"!groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\"\n >&#xe9ae;</i\n >\n <div\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"element?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ element?.member_name }}</span\n >\n <button\n *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover\n (click)=\"groupDisable.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div\n class=\"user-group-chip\"\n *ngIf=\"selectedUsers?.length && groupEnabled\"\n >\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"counter\"\n *ngIf=\"selectedUsers?.length > 1\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\"\n >User {{ selectedGroups?.length > 0 ? \" & \" : \" selected\" }}</span\n >\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\"\n >Users {{ selectedGroups?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div\n class=\"counter group\"\n *ngIf=\"selectedGroups?.length > 1\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let element of selectedUsers | slice : 1; let i = index\"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n <span\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar\n *ngIf=\"singleSelect && !loading\"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i\n class=\"icons\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe90d;</i\n >\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.PaginationComponent, selector: "vui-pagination", inputs: ["from", "to", "total", "showPageDetail", "totalPage", "currentPage", "pageInSingleView"], outputs: ["pageChanged"] }, { kind: "component", type: i4.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.NoDataComponentUI, selector: "app-no-data", inputs: ["action", "secondaryAction", "noDataImage", "noDataText", "noDataButton", "secondaryButton", "noDataSecButton", "altText", "smallButton"], outputs: ["buttonAction", "secondaryActionButton"] }, { kind: "component", type: i8.CsRadioComponentUI, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value"], outputs: ["checkedEvent"] }, { kind: "component", type: i9.CsSwitchComponentUI, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "component", type: i10.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i11.CheckboxComponent, selector: "vui-checkbox", inputs: ["disabled", "checked", "indeterminateEnabled"] }, { kind: "component", type: i12.VuiFloatingBarComponent, selector: "vui-floating-bar", inputs: ["selectedData", "groupSelected", "displayElementKey", "elementId", "singularText", "pluralText", "showNextButton", "showFrequencyText", "showWorkflow", "workflowText", "currentFrequency", "isDisabled", "workflowList", "selectedWorkflow", "workflowPlaceHolder", "mode", "nextDisabled", "nonRemovableUsersList", "removePosition"], outputs: ["closeEvent", "deleteEvent", "closeList", "workflowTypeChanged"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i13.TooltipMessagePipe, name: "tooltipMessage" }, { kind: "pipe", type: i14.SearchPipe, name: "search" }, { kind: "pipe", type: i15.FilterPipe, name: "filter" }] }); }
351
381
  }
352
382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserGroupListComponent, decorators: [{
353
383
  type: Component,
354
- args: [{ selector: 'user-group-list', template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div\n class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"groupEnabled\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | filter : searchKey)?.length\n : usersList?.length || userListInfo?.total_items\n }}</span\n >\n </button>\n <button\n *ngIf=\"isGroupTabShow\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span\n >\n </button>\n </div>\n\n <div\n class=\"future-user vx-d-flex vx-align-center\"\n *ngIf=\"showFutureUsersSwitch\"\n >\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i\n class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\"\n [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n >\n <app-cs-switch\n [ngValue]=\"futureUsersWillSelect\"\n (ngValueChange)=\"setAllUsersSelected($event)\"\n >\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n *ngIf=\"!featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\"\n />\n <input\n *ngIf=\"featureflag\"\n [(ngModel)]=\"searchKey\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | filter : searchKey as users\">\n <vui-pagination\n *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \"\n [currentPage]=\"userCurrentPage\"\n [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"\n ></vui-pagination>\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n *ngIf=\"!singleSelect\"\n #user\n [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n (change)=\"selectAllUser($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li\n class=\"vx-mb-3\"\n *ngIf=\"!singleSelect\"\n [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"true\"\n >\n <vui-checkbox\n (change)=\"selectItem($event, user)\"\n [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \"\n ><div class=\"user-name\">\n {{ user?.member_name }}\n </div></vui-checkbox\n >\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio\n [name]=\"'radio-selector'\"\n (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\"\n [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container\n *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\"\n >\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n #group\n [checked]=\"allGroupSelected\"\n [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox\n (change)=\"selectGroup($event, group)\"\n [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \"\n [checked]=\"selectedGroupIds?.includes(group?.group_id)\"\n >\n <div\n class=\"user-name vx-d-flex vx-align-center vx-w-100\"\n [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\"\n >{{ group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span\n >\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar\n *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\"\n [showWorkflow]=\"selectedReviewer\"\n [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <ng-container *ngIf=\"!groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\"\n >&#xe9ae;</i\n >\n <div\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"element?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ element?.member_name }}</span\n >\n <button\n *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover\n (click)=\"groupDisable.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div\n class=\"user-group-chip\"\n *ngIf=\"selectedUsers?.length && groupEnabled\"\n >\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"counter\"\n *ngIf=\"selectedUsers?.length > 1\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\"\n >User {{ selectedGroups?.length > 0 ? \" & \" : \" selected\" }}</span\n >\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\"\n >Users {{ selectedGroups?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div\n class=\"counter group\"\n *ngIf=\"selectedGroups?.length > 1\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let element of selectedUsers | slice : 1; let i = index\"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n <span\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar\n *ngIf=\"singleSelect && !loading\"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i\n class=\"icons\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe90d;</i\n >\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"] }]
384
+ args: [{ selector: 'user-group-list', template: "<div class=\"user-group-list\" [class.animate]=\"animation\">\n <div class=\"user-group-list-head\">\n <h3 class=\"user-group-list-title\">{{ panelTitle }}</h3>\n </div>\n <div class=\"user-group-list-body\">\n <div class=\"user-group-list-body-inner\">\n <app-loader-inline *ngIf=\"loading\"></app-loader-inline>\n <div\n class=\"user-group-list-tab vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"groupEnabled\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <button\n *ngIf=\"!isPaginationEnabled\"\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\"\n ? (usersList | filter : searchKey)?.length\n : usersList?.length || userListInfo?.total_items\n }}</span\n >\n </button>\n <button\n *ngIf=\"isPaginationEnabled\"\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"USER\" && isPaginationEnabled\n ? userListInfo?.total_items\n : userListInfo?.total\n }}</span\n >\n </button>\n <button\n *ngIf=\"isGroupTabShow\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-pb-2 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n {{ featureflag ? \"USER GROUPS\" : \"GROUPS\" }}\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{\n searchKey?.length && currentTab === \"GROUP\"\n ? (groupsList | search : searchKey : \"group_name\")?.length\n : groupsList?.length || groupListInfo?.total_items\n }}</span\n >\n </button>\n </div>\n\n <div\n class=\"future-user vx-d-flex vx-align-center\"\n *ngIf=\"showFutureUsersSwitch\"\n >\n <div class=\"vx-fs-11 vx-fw-500 vx-label-txt vx-tt-uppercase\">\n Visible to All Current & Future Users\n </div>\n <i\n class=\"icons info vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-1\"\n [appTooltip]=\"\n 'If selected, this policy will be visible to all users that are currently active in your VComply account and users that might be added in the future.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n >\n <app-cs-switch\n [ngValue]=\"futureUsersWillSelect\"\n (ngValueChange)=\"setAllUsersSelected($event)\"\n >\n </app-cs-switch>\n </div>\n </div>\n\n <div class=\"search-block vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n *ngIf=\"!featureflag\"\n [(ngModel)]=\"searchKey\"\n [disabled]=\"futureUsersWillSelect\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search Group'\n }}\"\n />\n <ng-container *ngIf=\"featureflag\">\n <input\n *ngIf=\"isPaginationEnabled; else searchInputWithoutPagination\"\n [(ngModel)]=\"searchKey\"\n (ngModelChange)=\"onSearchKeyChange($event)\"\n [disabled]=\"futureUsersWillSelect\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n <ng-template #searchInputWithoutPagination>\n <input\n [(ngModel)]=\"searchKey\"\n [disabled]=\"futureUsersWillSelect\"\n type=\"text\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User' : 'Search User Group'\n }}\"\n />\n </ng-template>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER' && !loading\">\n <ng-container *ngIf=\"usersList | filter : searchKey : isPaginationEnabled as users\">\n <vui-pagination\n *ngIf=\"\n userListInfo?.total_pages > 1 &&\n usersList?.length !== userListInfo?.total_items\n \"\n [currentPage]=\"userCurrentPage\"\n [totalPage]=\"userListInfo?.total_pages\"\n (pageChanged)=\"userPageChange($event)\"\n [from]=\"userListInfo?.from\"\n [to]=\"userListInfo?.to\"\n [total]=\"userListInfo?.total\"\n ></vui-pagination>\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"users?.length > 0; else nouser\">\n <ng-container *ngIf=\"!isPaginationEnabled\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n *ngIf=\"!singleSelect\"\n #user\n [checked]=\"allUserSelected || futureUsersWillSelect\"\n [disabled]=\"\n allUserSelectedDisabled ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n (change)=\"selectAllUser($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !user?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n </ng-container>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <ng-container *ngFor=\"let user of users\">\n <li\n class=\"vx-mb-3\"\n *ngIf=\"!singleSelect\"\n [appTooltip]=\"\n user\n | tooltipMessage\n : fromResponsibility\n : reviewerIds\n : overseerIds\n : assignorId\n : assigneeIds\n : 'member_id'\n : disabledIds?.includes(user?.member_id)\n : FromProgram\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"true\"\n >\n <vui-checkbox\n (change)=\"selectItem($event, user)\"\n [disabled]=\"\n disabledIds?.includes(user?.member_id) ||\n futureUsersWillSelect ||\n isAllDisabled\n \"\n [checked]=\"\n selectedUserIds?.includes(user?.member_id) ||\n futureUsersWillSelect\n \"\n ><div class=\"user-name\">\n {{ user?.member_name }}\n </div></vui-checkbox\n >\n </li>\n <li class=\"vx-mb-3\" *ngIf=\"singleSelect\">\n <app-cs-radio\n [name]=\"'radio-selector'\"\n (checkedEvent)=\"selectItemRadio($event, user)\"\n [name]=\"'rx-category'\"\n [checked]=\"selectedUserIds?.includes(user?.member_id)\"\n [appTooltip]=\"user?.member_email\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ user?.member_name }}\n </app-cs-radio>\n </li>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n <ng-template #nouser>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0 ? 'No match found.' : 'No Users found.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP'\">\n <ng-container\n *ngIf=\"groupsList | search : searchKey : 'group_name' as groups\"\n >\n <div\n class=\"user-group-list-mid\"\n [class.with-pagination]=\"isPagination\"\n >\n <ng-container *ngIf=\"groups?.length > 0; else nogroup\">\n <div class=\"user-list-select vx-mb-2\">\n <vui-checkbox\n #group\n [checked]=\"allGroupSelected\"\n [disabled]=\"allGroupSelectedDisabled\"\n (change)=\"selectAllGroup($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{ !group?.checked ? \"Select All\" : \"Deselect All\" }}\n </div>\n </vui-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li class=\"vx-mb-3\" *ngFor=\"let group of groups\">\n <vui-checkbox\n (change)=\"selectGroup($event, group)\"\n [disabled]=\"\n nonRemovableGroupIds?.includes(group?.group_id)\n \"\n [checked]=\"selectedGroupIds?.includes(group?.group_id)\"\n >\n <div\n class=\"user-name vx-d-flex vx-align-center vx-w-100\"\n [appTooltip]=\"group?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n <div class=\"group-name\">{{ group?.group_name }}</div>\n <span\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase\"\n >{{ group?.member_count }}\n {{ group?.member_count > 1 ? \"USERS\" : \"USER\" }}</span\n >\n </div>\n </vui-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-template #nogroup>\n <app-no-data\n *ngIf=\"!loading\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"user-group-list-footer\">\n <vui-floating-bar\n *ngIf=\"\n (!singleSelect || (!singleSelect && selectedReviewer)) && !loading\n \"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n (workflowTypeChanged)=\"workflowTypeChanged($event)\"\n [selectedWorkflow]=\"reviewerWorkflowType\"\n [showWorkflow]=\"selectedReviewer\"\n [groupSelected]=\"selectedGroups\"\n [mode]=\"mode\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <ng-container *ngIf=\"!groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-mr-2\"\n *ngFor=\"let element of selectedUsers?.slice(0, 1); let i = index\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"selectItem({ target: { checked: false } }, element)\"\n >&#xe9ae;</i\n >\n <div\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == selectedUsers?.length ? \"Final\" : 1 }}\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"element?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ element?.member_name }}</span\n >\n <button\n *ngIf=\"selectedUsers?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\n appPopover\n (click)=\"groupDisable.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.slice(1)?.length }}\n </button>\n </div>\n\n <!-- <div class=\"chip\" *ngFor=\"let element of selectedUsers?.slice(0,1);let i = index\"><i *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\" (click)=\"selectItem({target:{checked:false}},element)\" class=\"icons\">&#xe90d;</i> <span>{{element?.member_name}}</span></div>\n <div class=\"counter\" *ngIf=\"selectedUsers?.length>1\" appPopover (click)=\"groupDisable.popover()\"\n placement=\"left\">+{{selectedUsers?.slice(1)?.length}}</div> -->\n </ng-container>\n <div\n class=\"user-group-chip\"\n *ngIf=\"selectedUsers?.length && groupEnabled\"\n >\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableUserIds?.includes(selectedUsers[0]?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedUsers[0]?.member_name }}</div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"counter\"\n *ngIf=\"selectedUsers?.length > 1\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedUsers?.length - 1 }}\n </div>\n </ng-container>\n </div>\n <div class=\"name userGroup-name\">\n <!-- {{selectedGroups && selectedGroups?.length > 0 ?' & ':''}} -->\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length === 1\"\n >User {{ selectedGroups?.length > 0 ? \" & \" : \" selected\" }}</span\n >\n <span class=\"userGroup-text\" *ngIf=\"selectedUsers?.length > 1\"\n >Users {{ selectedGroups?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n </div>\n\n <div class=\"user-group-chip\" *ngIf=\"selectedGroups?.length\">\n <i\n class=\"icons cross\"\n *ngIf=\"!nonRemovableGroupIds?.includes(selectedGroups[0]?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, selectedGroups[0])\n \"\n >&#xe9ae;</i\n >\n <div class=\"user-group-name\">{{ selectedGroups[0]?.group_name }}</div>\n <div\n class=\"counter group\"\n *ngIf=\"selectedGroups?.length > 1\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n +{{ selectedGroups?.length - 1 }}\n </div>\n </div>\n <div class=\"name userGroup-name\">\n <span *ngIf=\"selectedGroups?.length === 1\">{{\n featureflag ? \"User Group selected\" : \"Group selected\"\n }}</span>\n <span *ngIf=\"selectedGroups?.length > 1\">{{\n featureflag ? \"User Groups selected\" : \"Groups selected\"\n }}</span>\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let element of selectedUsers | slice : 1; let i = index\"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupDisable [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedUsers.slice(1); let i = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableUserIds?.includes(element?.member_id)\"\n (click)=\"\n selectItem({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n <span\n *ngIf=\"\n fromApprovalWorkflow &&\n approvalWorkflowType.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n i + 1 === selectedUsers?.length - 1 ? \"Final\" : i + 2\n }}</span\n >\n {{ element?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let element of selectedGroups | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"!nonRemovableGroupIds?.includes(element?.group_id)\"\n (click)=\"\n selectGroup({ target: { checked: false } }, element)\n \"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </vui-floating-bar>\n <vui-floating-bar\n *ngIf=\"singleSelect && !loading\"\n (closeEvent)=\"saveList()\"\n (closeList)=\"closeList()\"\n [nextDisabled]=\"fromApprovalWorkflow && selectedUsers?.length === 0\"\n >\n <div class=\"chip\" *ngIf=\"selectedUsers?.length\">\n <ng-container>\n <i\n class=\"icons\"\n (click)=\"\n selectItem({ target: { checked: false } }, selectedUsers[0])\n \"\n >&#xe90d;</i\n >\n <span class=\"value\"> {{ selectedUsers[0]?.member_name }}</span>\n </ng-container>\n </div>\n </vui-floating-bar>\n </div>\n </div>\n\n <div class=\"user-group-list-confirmation\" *ngIf=\"showConfirmation\">\n <div class=\"confirmation-top\">\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\n <div class=\"text\">\n This action will reset the default {{ userType }} selected for the\n Program.\n </div>\n </div>\n <div class=\"confirmation-bottom\">\n <div class=\"message\">Are you sure you would like to proceed?</div>\n <div class=\"button-group\">\n <button class=\"no-btn\" (click)=\"confirmAction('NO')\">NO</button>\n <button class=\"yes-btn\" (click)=\"confirmAction('YES')\">YES</button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";::ng-deep .user-group-list{background:#fff;position:fixed;inset:0 500px 0 0}::ng-deep .user-group-list:before{background:#1e5dd3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .user-group-list.animate{animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .user-group-list-head{background:#fbfbfb;height:44px;padding:0 16px;display:flex;justify-content:space-between;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .user-group-list-title{color:#161b2f;font-size:14px;font-weight:500;margin:0!important;padding:0}::ng-deep .user-group-list-body{padding:32px 32px 0;height:calc(100vh - 124px)}::ng-deep .user-group-list-body .search-block{position:relative}::ng-deep .user-group-list-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.75rem .75rem .75rem 2.5rem;outline:none;border:1px solid #7475763F;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .user-group-list-body .search-block input::placeholder{font-size:14px;color:#747576}::ng-deep .user-group-list-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-group-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.75rem);overflow:hidden;overflow-y:auto;margin-bottom:.5rem;padding-right:.75rem}::ng-deep .user-group-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-group-list-mid.with-pagination{height:calc(100vh - 17.5rem)}::ng-deep .user-group-list-mid .selected-owners{border-bottom:1px solid #dbdbdb}::ng-deep .user-group-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkbox,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item .checkmark,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value{color:#161b2f!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-group-list-mid .user-list-select vui-checkbox .checkbox-item span.value .user-name,::ng-deep .user-group-list-mid .user-list-select vui-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-group-list-mid .user-list-item ul li{width:50%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox{width:calc(100% - 4.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 2.5rem)}::ng-deep .user-group-list-mid .user-list-item ul li vui-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-group-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:.1875rem solid transparent;margin-right:1.75rem!important}::ng-deep .user-group-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-group-list-tab button.active{pointer-events:none}::ng-deep .user-group-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-group-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-group-list-tab .future-user{margin-top:-.75rem}::ng-deep .user-group-list-tab .future-user .info{cursor:pointer}::ng-deep .user-group-list-confirmation{background:#161b2f;border-radius:.25rem;position:absolute;left:1rem;right:1rem;bottom:1.75rem;z-index:1}::ng-deep .user-group-list-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .user-group-list-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .user-group-list-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .user-group-list-confirmation .confirmation-bottom{background:#282e48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .user-group-list-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .user-group-list-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}.group{background:#1e5dd3!important;border-color:#1e5dd3!important}.wf-action-list{width:220px}.wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.wf-action-list ul.action-item{display:block}.wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.wf-action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}.wf-action-list ul.action-item li button:hover{background:#f3f3f3}.wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.wf-action-list ul.action-item li .avatar-card.within-con{display:block}.wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.wf-action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}.wf-action-list ul.action-item li .avatar-card.no-image{display:block}.wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.wf-action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.wf-action-list ul.action-item li .chip-item i{color:#747576;margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.wf-action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.wf-action-list ul.action-item li .chip-item span.id{font-size:9px}.wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}\n"] }]
355
385
  }], ctorParameters: function () { return []; }, propDecorators: { save: [{
356
386
  type: Output
357
387
  }], cancel: [{
@@ -425,6 +455,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
425
455
  args: ['defaultSelectedUsers']
426
456
  }], userType: [{
427
457
  type: Input
458
+ }], isPaginationEnabled: [{
459
+ type: Input
428
460
  }], setGroupList: [{
429
461
  type: Input,
430
462
  args: ['groupList']
@@ -432,4 +464,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
432
464
  type: Input,
433
465
  args: ['selectedGroups']
434
466
  }] } });
435
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXByb2dyYW0vY3JlYXRlLXByb2dyYW0tdWkvdXNlci1ncm91cC1saXN0L3VzZXItZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL2NyZWF0ZS1wcm9ncmFtLXVpL3VzZXItZ3JvdXAtbGlzdC91c2VyLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU83RCxNQUFNLE9BQU8sc0JBQXNCO0lBMkJqQyxJQUFhLFlBQVksQ0FBQyxLQUE2QztRQUNyRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUE0QkQsSUFBdUIsV0FBVyxDQUFDLEtBQVU7UUFDM0MsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLHFCQUFx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c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ08sWUFBWTtzQkFBeEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBVUcsT0FBTztzQkFBZixLQUFLO2dCQUVpQixXQUFXO3NCQUFqQyxLQUFLO3VCQUFDLFVBQVU7Z0JBU1csZUFBZTtzQkFBMUMsS0FBSzt1QkFBQyxlQUFlO2dCQWdCYSx1QkFBdUI7c0JBQXpELEtBQUs7dUJBQUMsc0JBQXNCO2dCQVNwQixRQUFRO3NCQUFoQixLQUFLO2dCQTBCa0IsWUFBWTtzQkFBbkMsS0FBSzt1QkFBQyxXQUFXO2dCQVNXLGdCQUFnQjtzQkFBNUMsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hQaXBlIH0gZnJvbSAnLi4vcGlwZXMvc2VhcmNoLnBpcGUnO1xuaW1wb3J0IHsgQVNTRVRTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1c2VyLWdyb3VwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5sZXNzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJHcm91cExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBBU1NFVFMgPSBBU1NFVFM7XG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBncm91cEVuYWJsZWQhOiBmYWxzZTtcbiAgQElucHV0KCkgcGFuZWxUaXRsZSA9ICdTZWxlY3QgVXNlcihzKSc7XG4gIEBJbnB1dCgpIHNpbmdsZVNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RlZFJldmlld2VyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZlYXR1cmVmbGFnID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJldmlld2VyV29ya2Zsb3dUeXBlOiBzdHJpbmcgPSAnU0VRVUVOVElBTCc7XG4gIEBPdXRwdXQoKSByZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbW9kZTogc3RyaW5nID0gJ0NSRUFURSc7XG4gIEBJbnB1dCgpIGZpZWxkVHlwZSA9ICcnO1xuICBzZWFyY2hLZXkgPSAnJztcbiAgaXNQYWdpbmF0aW9uOiBhbnk7XG4gIGFwcHJvdmFsV29ya2Zsb3dUeXBlOiAnQU5ZT05FJyB8ICdST1VORFJPQklOJyB8ICdTRVFVRU5USUFMJyA9ICdTRVFVRU5USUFMJztcbiAgdXNlcnNMaXN0OiBhbnkgPSBbXTtcbiAgZ3JvdXBzTGlzdDogYW55ID0gW107XG4gIEBJbnB1dCgpIGZyb21SZXNwb25zaWJpbGl0eTogYW55O1xuICBASW5wdXQoKSBhc3NpZ25vcklkOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhc3NpZ25lZUlkczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgcmV2aWV3ZXJJZHM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIG92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBGcm9tUHJvZ3JhbSA9IGZhbHNlO1xuICBASW5wdXQoKSB1c2VyTGlzdEluZm8hOiBhbnk7XG4gIEBJbnB1dCgpIGdyb3VwTGlzdEluZm8hOiBhbnk7XG4gIEBJbnB1dCgpIGZyb21BcHByb3ZhbFdvcmtmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCBhcHByb3ZhbFR5cGUodmFsdWU6ICdBTllPTkUnIHwgJ1JPVU5EUk9CSU4nIHwgJ1NFUVVFTlRJQUwnKSB7XG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93VHlwZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHNob3dGdXR1cmVVc2Vyc1N3aXRjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmdXR1cmVVc2Vyc1dpbGxTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNBbGxEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0dyb3VwVGFiU2hvdzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGZldGNoVXNlckRhdGEgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgZGlzYWJsZWRJZHM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBub25SZW1vdmFibGVVc2VySWRzOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgYWxsVXNlclNlbGVjdGVkRGlzYWJsZWQgPSBmYWxzZTtcbiAgc2VsZWN0ZWRVc2VyczogYW55ID0gW107XG4gIHNlbGVjdGVkVXNlcklkczogYW55ID0gW107XG4gIGFsbFVzZXJzSWRzOiBhbnkgPSBbXTtcbiAgYWxsVXNlclNlbGVjdGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbm9uUmVtb3ZhYmxlR3JvdXBJZHM6IGFueSA9IFtdO1xuICBzZWxlY3RlZEdyb3VwczogYW55ID0gW107XG4gIHNlbGVjdGVkR3JvdXBJZHM6IGFueSA9IFtdO1xuICBhbGxHcm91cHNJZHM6IGFueSA9IFtdO1xuICBhbGxHcm91cFNlbGVjdGVkID0gZmFsc2U7XG4gIGFsbEdyb3VwU2VsZWN0ZWREaXNhYmxlZCA9IGZhbHNlO1xuICBzZWFyY2hQaXBlID0gbmV3IFNlYXJjaFBpcGUoKTtcblxuICB1c2VyQ3VycmVudFBhZ2UgPSAxO1xuICBncm91cEN1cnJlbnRQYWdlID0gMTtcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBub25EaXNhYmxlZFVzZXJzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoJ3VzZXJsaXN0Jykgc2V0IHNldFVzZXJMaXN0KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgdGhpcy51c2Vyc0xpc3QgPSBbLi4udmFsdWVdO1xuICAgICAgdGhpcy5hbGxVc2Vyc0lkcyA9IHRoaXMudXNlcnNMaXN0Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkKTtcbiAgICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gICAgICB0aGlzLnNldFVzZXJMaXN0SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnc2VsZWN0ZWRVc2VycycpIHNldCBzZXRTZWxlY3RlZFVzZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRVc2VycywgLi4udmFsdWVdLFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gICAgICB0aGlzLnNldFVzZXJMaXN0SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGRlZmF1bHRTZWxlY3RlZFVzZXJzOiBhbnkgPSBbXTtcbiAgZGVmYXVsdFNlbGVjdGVkVXNlcklkczogYW55ID0gW107XG4gIEBJbnB1dCgnZGVmYXVsdFNlbGVjdGVkVXNlcnMnKSBzZXQgc2V0RGVmYXVsdFNlbGVjdGVkVXNlcnModmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgIFsuLi50aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJzLCAuLi52YWx1ZV0sXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VySWRzID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2Vycy5tYXAoXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkXG4gICAgKTtcbiAgfVxuICBASW5wdXQoKSB1c2VyVHlwZTogc3RyaW5nID0gJ2Fzc2lnbmVlcyc7XG4gIHNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcblxuICBzZXRVc2VyTGlzdEluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlckN1cnJlbnRQYWdlID09PSAxKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRVc2VycztcbiAgICAgIGNvbnN0IG90aGVyVXNlciA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgKGVsZTogYW55KSA9PiAhdGhpcy5zZWxlY3RlZFVzZXJJZHMuaW5jbHVkZXMoZWxlPy5tZW1iZXJfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy51c2Vyc0xpc3QgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnNlbGVjdGVkPy5zb3J0KCksIC4uLm90aGVyVXNlcj8uc29ydCgpXSxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGFsbFVzZXJTZWxlY3RlZFN0YXR1cygpIHtcbiAgICB0aGlzLmFsbFVzZXJTZWxlY3RlZCA9XG4gICAgICB0aGlzLmFsbFVzZXJzSWRzLnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMuc29ydCgpPy50b1N0cmluZygpO1xuICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkRGlzYWJsZWQgPVxuICAgICAgdGhpcy5hbGxVc2Vyc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzLnNvcnQoKT8udG9TdHJpbmcoKSAmJlxuICAgICAgdGhpcy5hbGxVc2Vyc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMubm9uUmVtb3ZhYmxlVXNlcklkcy5zb3J0KCk/LnRvU3RyaW5nKCk7XG4gIH1cblxuICBASW5wdXQoJ2dyb3VwTGlzdCcpIHNldCBzZXRHcm91cExpc3QodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdyb3Vwc0xpc3QgPSBbLi4udmFsdWVdO1xuICAgICAgdGhpcy5hbGxHcm91cHNJZHMgPSB0aGlzLmdyb3Vwc0xpc3QubWFwKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCk7XG4gICAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0R3JvdXBMaXN0SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgnc2VsZWN0ZWRHcm91cHMnKSBzZXQgc2V0U2VsZWN0ZWRHcm91cCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRHcm91cHMsIC4uLnZhbHVlXSxcbiAgICAgICdncm91cF9pZCdcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMubWFwKFxuICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkXG4gICAgKTtcbiAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICB0aGlzLnNldEdyb3VwTGlzdEluaXQoKTtcbiAgfVxuXG4gIHNldEdyb3VwTGlzdEluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlckN1cnJlbnRQYWdlID09PSAxKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRHcm91cHM7XG4gICAgICBjb25zdCBvdGhlckdyb3VwID0gdGhpcy5ncm91cHNMaXN0LmZpbHRlcihcbiAgICAgICAgKGVsZTogYW55KSA9PiAhdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmluY2x1ZGVzKGVsZT8uZ3JvdXBfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5ncm91cHNMaXN0ID0gdGhpcy51bmlxdWVCeVByb3AoXG4gICAgICAgIFsuLi5zZWxlY3RlZD8uc29ydCgpLCAuLi5vdGhlckdyb3VwPy5zb3J0KCldLFxuICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBhbGxHcm91cFNlbGVjdGVkU3RhdHVzKCkge1xuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZCA9XG4gICAgICB0aGlzLmFsbEdyb3Vwc0lkcz8uc29ydCgpPy50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzPy5zb3J0KCk/LnRvU3RyaW5nKCk7XG4gICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkRGlzYWJsZWQgPVxuICAgICAgdGhpcy5hbGxHcm91cHNJZHMuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuc29ydCgpPy50b1N0cmluZygpICYmXG4gICAgICB0aGlzLmFsbEdyb3Vwc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMubm9uUmVtb3ZhYmxlR3JvdXBJZHMuc29ydCgpPy50b1N0cmluZygpO1xuICB9XG5cbiAgdXNlclBhZ2VDaGFuZ2UocGFnZTogYW55KSB7XG4gICAgdGhpcy51c2VyQ3VycmVudFBhZ2UgPSBwYWdlO1xuICAgIHRoaXMuZmV0Y2hVc2VyRGF0YS5lbWl0KHsgcGFnZSwgc2VhcmNoS2V5OiB0aGlzLnNlYXJjaEtleSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMjIERlc2NyaXB0aW9uXG4gICAqIFNlbGVjdHMgaXRlbSBvciBkZXNlbGVjdCBhIGl0bWVcbiAgICogQHBhcmFtIGV2dFxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgc2VsZWN0SXRlbShldnQ6IGFueSwgcGF5bG9hZDogYW55KSB7XG4gICAgZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWVcbiAgICAgID8gdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRVc2VyKCdBREQnLCBwYXlsb2FkKVxuICAgICAgOiB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZFVzZXIoJ0RFTEVURScsIHBheWxvYWQpO1xuICB9XG5cbiAgc2VsZWN0SXRlbVJhZGlvKGV2dDogYW55LCBwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAoZXZ0Py50YXJnZXQ/LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRVc2VyKCdBREQnLCBwYXlsb2FkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW5pcHVsYXRlcyBzZWxlY3RlZCBpdGVtcyBpbiByb2xlIGxpc3RcbiAgICogQHBhcmFtIGFjdGlvbiA6J0FERCcgfCAnREVMRVRFJ1xuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgbWFuaXB1bGF0ZVNlbGVjdGVkVXNlcihhY3Rpb246ICdBREQnIHwgJ0RFTEVURScsIHBheWxvYWQ6IGFueSkge1xuICAgIGlmIChhY3Rpb24gPT09ICdBREQnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRVc2VycywgLi4uW3BheWxvYWRdXSxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5tYXAoXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdERUxFVEUnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmluZEluZGV4KFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkID09PSBwYXlsb2FkPy5tZW1iZXJfaWRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmlsdGVyKFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQgIT09IHBheWxvYWQ/Lm1lbWJlcl9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2VySWRzLmZpbHRlcihcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZSAhPT0gcGF5bG9hZD8ubWVtYmVyX2lkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWxsVXNlclNlbGVjdGVkU3RhdHVzKCk7XG4gIH1cbiAgc2VsZWN0QWxsVXNlcihldnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2dD8udGFyZ2V0Py5jaGVja2VkID09PSB0cnVlO1xuICAgIGNvbnN0IHNvdXJjZVVzZXJzID0gdGhpcy5mcm9tUmVzcG9uc2liaWxpdHkgPyB0aGlzLmRpc2FibGVVc2VycygpIDogdGhpcy51c2Vyc0xpc3Q7XG4gICAgXG4gICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gc291cmNlVXNlcnM7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5tYXAoKHVzZXI6IHsgbWVtYmVyX2lkOiBzdHJpbmcgfCBudW1iZXIgfSkgPT4gdXNlcj8ubWVtYmVyX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKCh1c2VyOiB7IG1lbWJlcl9pZDogc3RyaW5nIHwgbnVtYmVyIH0pID0+IFxuICAgICAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJJZHMuaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzID0gdGhpcy5zZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogeyBtZW1iZXJfaWQ6IHN0cmluZyB8IG51bWJlciB9KSA9PiB1c2VyPy5tZW1iZXJfaWQpO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmFsbFVzZXJTZWxlY3RlZFN0YXR1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyMgRGVzY3JpcHRpb25cbiAgICogU2VsZWN0cyBpdGVtIG9yIGRlc2VsZWN0IGEgaXRtZVxuICAgKiBAcGFyYW0gZXZ0XG4gICAqIEBwYXJhbSBwYXlsb2FkXG4gICAqL1xuICBzZWxlY3RHcm91cChldnQ6IGFueSwgcGF5bG9hZDogYW55KSB7XG4gICAgZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWVcbiAgICAgID8gdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRHcm91cCgnQUREJywgcGF5bG9hZClcbiAgICAgIDogdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRHcm91cCgnREVMRVRFJywgcGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBNYW5pcHVsYXRlcyBzZWxlY3RlZCBpdGVtcyBpbiByb2xlIGxpc3RcbiAgICogQHBhcmFtIGFjdGlvbiA6J0FERCcgfCAnREVMRVRFJ1xuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgbWFuaXB1bGF0ZVNlbGVjdGVkR3JvdXAoYWN0aW9uOiAnQUREJyB8ICdERUxFVEUnLCBwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnQUREJykge1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4udGhpcy5zZWxlY3RlZEdyb3VwcywgLi4uW3BheWxvYWRdXSxcbiAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdERUxFVEUnKSB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdGVkR3JvdXBzLmZpbmRJbmRleChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkID09PSBwYXlsb2FkPy5ncm91cF9pZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLnNlbGVjdGVkR3JvdXBzLmZpbHRlcihcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQgIT09IHBheWxvYWQ/Lmdyb3VwX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cElkcy5maWx0ZXIoXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUgIT09IHBheWxvYWQ/Lmdyb3VwX2lkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpO1xuICB9XG4gIHNlbGVjdEFsbEdyb3VwKGV2dDogYW55KSB7XG4gICAgY29uc3QgZ3JvdXBEYXRhID0gdGhpcy5zZWFyY2hQaXBlLnRyYW5zZm9ybShcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCxcbiAgICAgIHRoaXMuc2VhcmNoS2V5LFxuICAgICAgJ2dyb3VwX25hbWUnXG4gICAgKTtcbiAgICBpZiAoZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSBncm91cERhdGE7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSBncm91cERhdGEubWFwKChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmdyb3Vwc0xpc3QuZmlsdGVyKChlbGU6IGFueSkgPT5cbiAgICAgICAgdGhpcy5ub25SZW1vdmFibGVHcm91cElkcy5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMuc2VsZWN0ZWRHcm91cHMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpO1xuICB9XG5cbiAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBsZXQgZGlzYWJsZWRJZHMgPSBbLi4udGhpcy5kaXNhYmxlZElkcywgLi4udGhpcy5ub25SZW1vdmFibGVVc2VySWRzXTtcbiAgICB0aGlzLmRpc2FibGVkSWRzID0gWy4uLm5ldyBTZXQoZGlzYWJsZWRJZHMpXTtcbiAgICB0aGlzLnBhZ2luYXRpb25WaXNpYmxlKCk7XG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICB9LCAzMDApO1xuICB9XG4gIGN1cnJlbnRUYWIgPSAnVVNFUic7XG4gIHN3aXRjaFRhYih0YWI6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcbiAgICB0aGlzLnNlYXJjaEtleSA9ICcnO1xuICB9XG5cbiAgc2F2ZUxpc3QoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VySWRzICYmXG4gICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJJZHM/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzPy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcklkcz8uZm9yRWFjaCgoaWQ6IG51bWJlcik6IGFueSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dDb25maXJtYXRpb24pXG4gICAgICB0aGlzLnNhdmUuZW1pdCh7XG4gICAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkVXNlcnMsXG4gICAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZEdyb3VwcyxcbiAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0OiB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCxcbiAgICAgIH0pO1xuICB9XG5cbiAgY29uZmlybUFjdGlvbihldnQ6ICdZRVMnIHwgJ05PJykge1xuICAgIGlmIChldnQgPT09ICdZRVMnKSB7XG4gICAgICB0aGlzLnNhdmUuZW1pdCh7XG4gICAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkVXNlcnMsXG4gICAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZEdyb3VwcyxcbiAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0OiB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXZ0ID09PSAnTk8nKSB7XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjbG9zZUxpc3QoKSB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgLy9cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcbiAgICogQHBhcmFtIGFycmF5XG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHVuaXF1ZUJ5UHJvcChhcnJheTogYW55LCBrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgYXJyYXlcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxuICAgICAgICAgICAgaXRlbSAmJiBpdGVtW2tleV0gJiYgYWNjLnNldChpdGVtW2tleV0sIGl0ZW0pLCBhY2NcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBNYXAoKVxuICAgICAgICApXG4gICAgICAgIC52YWx1ZXMoKVxuICAgICk7XG4gIH1cblxuICBwYWdpbmF0aW9uVmlzaWJsZSgpIHtcbiAgICBpZiAodGhpcy51c2VyTGlzdEluZm8/LnRvdGFsX3BhZ2VzID4gMSkge1xuICAgICAgdGhpcy5pc1BhZ2luYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICB3b3JrZmxvd1R5cGVDaGFuZ2VkKGV2ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJldmlld2VyV29ya2Zsb3dUeXBlID0gZXZlbnQ7XG4gICAgdGhpcy5yZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGRpc2FibGVVc2VycygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZnJvbVJlc3BvbnNpYmlsaXR5KSB7XG4gICAgICBjYXNlICdBc3NpZ25lZSc6XG4gICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLm92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmV2aWV3ZXInOlxuICAgICAgICB0aGlzLm5vbkRpc2FibGVkVXNlcnMgPSB0aGlzLnVzZXJzTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5hc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ092ZXJzZWVyJzpcbiAgICAgICAgdGhpcy5ub25EaXNhYmxlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKFxuICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbm9ySWQ/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb2xsYWJvcmF0b3InOlxuICAgICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZElkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ub25EaXNhYmxlZFVzZXJzO1xuICB9XG5cbiAgc2V0QWxsVXNlcnNTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5mdXR1cmVVc2Vyc1dpbGxTZWxlY3QgPSBldmVudDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdFwiIFtjbGFzcy5hbmltYXRlXT1cImFuaW1hdGlvblwiPlxuICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LWhlYWRcIj5cbiAgICA8aDMgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtdGl0bGVcIj57eyBwYW5lbFRpdGxlIH19PC9oMz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtYm9keS1pbm5lclwiPlxuICAgICAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGluZ1wiPjwvYXBwLWxvYWRlci1pbmxpbmU+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidXNlci1ncm91cC1saXN0LXRhYiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tYi0yXCJcbiAgICAgICAgKm5nSWY9XCJncm91cEVuYWJsZWRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ1VTRVInKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYi1idG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnVVNFUidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFVTRVJTXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cInZ4LXBsLTEgdngtcHItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LW1sLTIgdngtbGgtNFwiXG4gICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgIHNlYXJjaEtleT8ubGVuZ3RoICYmIGN1cnJlbnRUYWIgPT09IFwiVVNFUlwiXG4gICAgICAgICAgICAgICAgICA/ICh1c2Vyc0xpc3QgfCBmaWx0ZXIgOiBzZWFyY2hLZXkpPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogdXNlcnNMaXN0Py5sZW5ndGggfHwgdXNlckxpc3RJbmZvPy50b3RhbF9pdGVtc1xuICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNHcm91cFRhYlNob3dcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYignR1JPVVAnKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRhYi1idG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1wYi0yIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50VGFiID09PSAnR1JPVVAnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBmZWF0dXJlZmxhZyA/IFwiVVNFUiBHUk9VUFNcIiA6IFwiR1JPVVBTXCIgfX1cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCJcbiAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggJiYgY3VycmVudFRhYiA9PT0gXCJHUk9VUFwiXG4gICAgICAgICAgICAgICAgICA/IChncm91cHNMaXN0IHwgc2VhcmNoIDogc2VhcmNoS2V5IDogXCJncm91cF9uYW1lXCIpPy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogZ3JvdXBzTGlzdD8ubGVuZ3RoIHx8IGdyb3VwTGlzdEluZm8/LnRvdGFsX2l0ZW1zXG4gICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZ1dHVyZS11c2VyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICpuZ0lmPVwic2hvd0Z1dHVyZVVzZXJzU3dpdGNoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZVwiPlxuICAgICAgICAgICAgVmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyc1xuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb25zIGluZm8gdngtZnMtMTIgdngtdHh0LWJsdWUgdngtbWwtMSB2eC1tci0xXCJcbiAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAnSWYgc2VsZWN0ZWQsIHRoaXMgcG9saWN5IHdpbGwgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbiB5b3VyIFZDb21wbHkgYWNjb3VudCBhbmQgdXNlcnMgdGhhdCBtaWdodCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgID4mI3hlOTFmOzwvaVxuICAgICAgICAgID5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgW25nVmFsdWVdPVwiZnV0dXJlVXNlcnNXaWxsU2VsZWN0XCJcbiAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNldEFsbFVzZXJzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ibG9jayB2eC1tYi0yXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgKm5nSWY9XCIhZmVhdHVyZWZsYWdcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoS2V5XCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgY3VycmVudFRhYiA9PT0gJ1VTRVInID8gJ1NlYXJjaCBVc2VyJyA6ICdTZWFyY2ggR3JvdXAnXG4gICAgICAgICAgfX1cIlxuICAgICAgICAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdJZj1cImZlYXR1cmVmbGFnXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEtleVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcbiAgICAgICAgICAgIGN1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcicgOiAnU2VhcmNoIFVzZXIgR3JvdXAnXG4gICAgICAgICAgfX1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnVVNFUicgJiYgIWxvYWRpbmdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJzTGlzdCB8IGZpbHRlciA6IHNlYXJjaEtleSBhcyB1c2Vyc1wiPlxuICAgICAgICAgIDx2dWktcGFnaW5hdGlvblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgdXNlckxpc3RJbmZvPy50b3RhbF9wYWdlcyA+IDEgJiZcbiAgICAgICAgICAgICAgdXNlcnNMaXN0Py5sZW5ndGggIT09IHVzZXJMaXN0SW5mbz8udG90YWxfaXRlbXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwidXNlckN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgIFt0b3RhbFBhZ2VdPVwidXNlckxpc3RJbmZvPy50b3RhbF9wYWdlc1wiXG4gICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwidXNlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvdnVpLXBhZ2luYXRpb24+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtbWlkXCJcbiAgICAgICAgICAgIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwiaXNQYWdpbmF0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlcnM/Lmxlbmd0aCA+IDA7IGVsc2Ugbm91c2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzaW5nbGVTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgI3VzZXJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFVzZXJTZWxlY3RlZCB8fCBmdXR1cmVVc2Vyc1dpbGxTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICBhbGxVc2VyU2VsZWN0ZWREaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNBbGxEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsVXNlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1uYW1lIHZ4LWZzLTEyIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtbm9uZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7ICF1c2VyPy5jaGVja2VkID8gXCJTZWxlY3QgQWxsXCIgOiBcIkRlc2VsZWN0IEFsbFwiIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LW0tMCB2eC1wLTAgdngtZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtbWItM1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhc2luZ2xlU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0b29sdGlwTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZnJvbVJlc3BvbnNpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXZpZXdlcklkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3ZlcnNlZXJJZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2lnbm9ySWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzc2lnbmVlSWRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGlzYWJsZWRJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZyb21Qcm9ncmFtXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHZ1aS1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RJdGVtKCRldmVudCwgdXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZElkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbGxEaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ2eC1tYi0zXCIgKm5nSWY9XCJzaW5nbGVTZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIncmFkaW8tc2VsZWN0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwic2VsZWN0SXRlbVJhZGlvKCRldmVudCwgdXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3J4LWNhdGVnb3J5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwidXNlcj8ubWVtYmVyX2VtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm91c2VyPlxuICAgICAgICAgICAgICA8YXBwLW5vLWRhdGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBbbm9EYXRhSW1hZ2VdPVwiQVNTRVRTLnNlYXJjaF9kYXRhXCJcbiAgICAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaEtleT8ubGVuZ3RoID4gMCA/ICdObyBtYXRjaCBmb3VuZC4nIDogJ05vIFVzZXJzIGZvdW5kLidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9hcHAtbm8tZGF0YT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnR1JPVVAnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImdyb3Vwc0xpc3QgfCBzZWFyY2ggOiBzZWFyY2hLZXkgOiAnZ3JvdXBfbmFtZScgYXMgZ3JvdXBzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidXNlci1ncm91cC1saXN0LW1pZFwiXG4gICAgICAgICAgICBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cImlzUGFnaW5hdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID4gMDsgZWxzZSBub2dyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3Qtc2VsZWN0IHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAjZ3JvdXBcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbEdyb3VwU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbEdyb3VwU2VsZWN0ZWREaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEFsbEdyb3VwKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZnMtMTIgdngtZnctNjAwIHZ4LWxhYmVsLXR4dCB2eC10dC1ub25lXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgIWdyb3VwPy5jaGVja2VkID8gXCJTZWxlY3QgQWxsXCIgOiBcIkRlc2VsZWN0IEFsbFwiIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInZ4LW0tMCB2eC1wLTAgdngtZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ2eC1tYi0zXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RHcm91cCgkZXZlbnQsIGdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVtb3ZhYmxlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLW5hbWUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC13LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJncm91cD8uZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLW5hbWVcIj57eyBncm91cD8uZ3JvdXBfbmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyIHZ4LWZzLTkgdngtZnctNjAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC0zIHZ4LXR0LXVwcGVyY2FzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID57eyBncm91cD8ubWVtYmVyX2NvdW50IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5tZW1iZXJfY291bnQgPiAxID8gXCJVU0VSU1wiIDogXCJVU0VSXCIgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC92dWktY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vZ3JvdXA+XG4gICAgICAgICAgICAgIDxhcHAtbm8tZGF0YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtub0RhdGFJbWFnZV09XCJBU1NFVFMuc2VhcmNoX2RhdGFcIlxuICAgICAgICAgICAgICAgIFtub0RhdGFUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gJ05vIG1hdGNoIGZvdW5kLidcbiAgICAgICAgICAgICAgICAgICAgOiAnTm8gZGF0YSB0byBkaXNwbGF5LidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9hcHAtbm8tZGF0YT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LWZvb3RlclwiPlxuICAgICAgPHZ1aS1mbG9hdGluZy1iYXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoIXNpbmdsZVNlbGVjdCB8fCAoIXNpbmdsZVNlbGVjdCAmJiBzZWxlY3RlZFJldmlld2VyKSkgJiYgIWxvYWRpbmdcbiAgICAgICAgXCJcbiAgICAgICAgKGNsb3NlRXZlbnQpPVwic2F2ZUxpc3QoKVwiXG4gICAgICAgIChjbG9zZUxpc3QpPVwiY2xvc2VMaXN0KClcIlxuICAgICAgICAod29ya2Zsb3dUeXBlQ2hhbmdlZCk9XCJ3b3JrZmxvd1R5cGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbc2VsZWN0ZWRXb3JrZmxvd109XCJyZXZpZXdlcldvcmtmbG93VHlwZVwiXG4gICAgICAgIFtzaG93V29ya2Zsb3ddPVwic2VsZWN0ZWRSZXZpZXdlclwiXG4gICAgICAgIFtncm91cFNlbGVjdGVkXT1cInNlbGVjdGVkR3JvdXBzXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtuZXh0RGlzYWJsZWRdPVwiZnJvbUFwcHJvdmFsV29ya2Zsb3cgJiYgc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID09PSAwXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cEVuYWJsZWRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTIgdngtbXItMlwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZFVzZXJzPy5zbGljZSgwLCAxKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5tZW1iZXJfaWQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGZyb21BcHByb3ZhbFdvcmtmbG93ICYmXG4gICAgICAgICAgICAgICAgYXBwcm92YWxXb3JrZmxvd1R5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IDEgPT0gc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID8gXCJGaW5hbFwiIDogMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImVsZW1lbnQ/Lm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgID57eyBlbGVtZW50Py5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdyb3VwRGlzYWJsZS5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3t7IHNlbGVjdGVkVXNlcnM/LnNsaWNlKDEpPy5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnM/LnNsaWNlKDAsMSk7bGV0IGkgPSBpbmRleFwiPjxpICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIiAoY2xpY2spPVwic2VsZWN0SXRlbSh7dGFyZ2V0OntjaGVja2VkOmZhbHNlfX0sZWxlbWVudClcIiBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+IDxzcGFuPnt7ZWxlbWVudD8ubWVtYmVyX25hbWV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aD4xXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXBEaXNhYmxlLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIj4re3tzZWxlY3RlZFVzZXJzPy5zbGljZSgxKT8ubGVuZ3RofX08L2Rpdj4gLS0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ1c2VyLWdyb3VwLWNoaXBcIlxuICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRVc2Vycz8ubGVuZ3RoICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zc1wiXG4gICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhzZWxlY3RlZFVzZXJzWzBdPy5tZW1iZXJfaWQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgc2VsZWN0SXRlbSh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIHNlbGVjdGVkVXNlcnNbMF0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLW5hbWVcIj57eyBzZWxlY3RlZFVzZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cEVuYWJsZWRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAoY2xpY2spPVwidXNlckNvdW50LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB1c2VyR3JvdXAtbmFtZVwiPlxuICAgICAgICAgIDwhLS0ge3tzZWxlY3RlZEdyb3VwcyAmJiBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/JyAmICc6Jyd9fSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJHcm91cC10ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPT09IDFcIlxuICAgICAgICAgICAgPlVzZXIge3sgc2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCA+IDAgPyBcIiAmIFwiIDogXCIgc2VsZWN0ZWRcIiB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVzZXJHcm91cC10ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgID5Vc2VycyB7eyBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOiBcInNlbGVjdGVkXCIgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWNoaXBcIiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zc1wiXG4gICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVHcm91cElkcz8uaW5jbHVkZXMoc2VsZWN0ZWRHcm91cHNbMF0/Lmdyb3VwX2lkKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIHNlbGVjdEdyb3VwKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgc2VsZWN0ZWRHcm91cHNbMF0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLW5hbWVcIj57eyBzZWxlY3RlZEdyb3Vwc1swXT8uZ3JvdXBfbmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY291bnRlciBncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgIChjbGljayk9XCJncm91cENvdW50LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAre3sgc2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lIHVzZXJHcm91cC1uYW1lXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID09PSAxXCI+e3tcbiAgICAgICAgICAgIGZlYXR1cmVmbGFnID8gXCJVc2VyIEdyb3VwIHNlbGVjdGVkXCIgOiBcIkdyb3VwIHNlbGVjdGVkXCJcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAxXCI+e3tcbiAgICAgICAgICAgIGZlYXR1cmVmbGFnID8gXCJVc2VyIEdyb3VwcyBzZWxlY3RlZFwiIDogXCJHcm91cHMgc2VsZWN0ZWRcIlxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBzZWxlY3RlZFVzZXJzIHwgc2xpY2UgOiAxOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudD8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNncm91cERpc2FibGUgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnMuc2xpY2UoMSk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVVc2VySWRzPy5pbmNsdWRlcyhlbGVtZW50Py5tZW1iZXJfaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgZWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21BcHByb3ZhbFdvcmtmbG93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbFdvcmtmbG93VHlwZS50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICsgMSA9PT0gc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoIC0gMSA/IFwiRmluYWxcIiA6IGkgKyAyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCBvZiBzZWxlY3RlZEdyb3VwcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9uUmVtb3ZhYmxlR3JvdXBJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0R3JvdXAoeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudD8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgIDwvdnVpLWZsb2F0aW5nLWJhcj5cbiAgICAgIDx2dWktZmxvYXRpbmctYmFyXG4gICAgICAgICpuZ0lmPVwic2luZ2xlU2VsZWN0ICYmICFsb2FkaW5nXCJcbiAgICAgICAgKGNsb3NlRXZlbnQpPVwic2F2ZUxpc3QoKVwiXG4gICAgICAgIChjbG9zZUxpc3QpPVwiY2xvc2VMaXN0KClcIlxuICAgICAgICBbbmV4dERpc2FibGVkXT1cImZyb21BcHByb3ZhbFdvcmtmbG93ICYmIHNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwXCIgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgc2VsZWN0ZWRVc2Vyc1swXSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+IHt7IHNlbGVjdGVkVXNlcnNbMF0/Lm1lbWJlcl9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdnVpLWZsb2F0aW5nLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1jb25maXJtYXRpb25cIiAqbmdJZj1cInNob3dDb25maXJtYXRpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlybWF0aW9uLXRvcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb24tYmxvY2tcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkzMDs8L2k+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dFwiPlxuICAgICAgICBUaGlzIGFjdGlvbiB3aWxsIHJlc2V0IHRoZSBkZWZhdWx0IHt7IHVzZXJUeXBlIH19IHNlbGVjdGVkIGZvciB0aGVcbiAgICAgICAgUHJvZ3JhbS5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tYm90dG9tXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPkFyZSB5b3Ugc3VyZSB5b3Ugd291bGQgbGlrZSB0byBwcm9jZWVkPzwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1ncm91cFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm8tYnRuXCIgKGNsaWNrKT1cImNvbmZpcm1BY3Rpb24oJ05PJylcIj5OTzwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwieWVzLWJ0blwiIChjbGljayk9XCJjb25maXJtQWN0aW9uKCdZRVMnKVwiPllFUzwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXByb2dyYW0vY3JlYXRlLXByb2dyYW0tdWkvdXNlci1ncm91cC1saXN0L3VzZXItZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1wcm9ncmFtL2NyZWF0ZS1wcm9ncmFtLXVpL3VzZXItZ3JvdXAtbGlzdC91c2VyLWdyb3VwLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxzQkFBc0I7SUE2QmpDLElBQWEsWUFBWSxDQUFDLEtBQTZDO1FBQ3JFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQTRCRCxJQUF1QixXQUFXLENBQUMsS0FBVTtRQUMzQyxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFX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c0JBQTFCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ08sWUFBWTtzQkFBeEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFNRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBVUcsT0FBTztzQkFBZixLQUFLO2dCQUVpQixXQUFXO3NCQUFqQyxLQUFLO3VCQUFDLFVBQVU7Z0JBU1csZUFBZTtzQkFBMUMsS0FBSzt1QkFBQyxlQUFlO2dCQWdCYSx1QkFBdUI7c0JBQXpELEtBQUs7dUJBQUMsc0JBQXNCO2dCQVNwQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkEwQmtCLFlBQVk7c0JBQW5DLEtBQUs7dUJBQUMsV0FBVztnQkFTVyxnQkFBZ0I7c0JBQTVDLEtBQUs7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWFyY2hQaXBlIH0gZnJvbSAnLi4vcGlwZXMvc2VhcmNoLnBpcGUnO1xuaW1wb3J0IHsgQVNTRVRTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1c2VyLWdyb3VwLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1ncm91cC1saXN0LmNvbXBvbmVudC5sZXNzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJHcm91cExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEFTU0VUUyA9IEFTU0VUUztcbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIGdyb3VwRW5hYmxlZCE6IGZhbHNlO1xuICBASW5wdXQoKSBwYW5lbFRpdGxlID0gJ1NlbGVjdCBVc2VyKHMpJztcbiAgQElucHV0KCkgc2luZ2xlU2VsZWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUmV2aWV3ZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgZmVhdHVyZWZsYWcgPSBmYWxzZTtcbiAgQElucHV0KCkgcmV2aWV3ZXJXb3JrZmxvd1R5cGU6IHN0cmluZyA9ICdTRVFVRU5USUFMJztcbiAgQE91dHB1dCgpIHJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBtb2RlOiBzdHJpbmcgPSAnQ1JFQVRFJztcbiAgQElucHV0KCkgZmllbGRUeXBlID0gJyc7XG4gIHNlYXJjaEtleSA9ICcnO1xuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBpc1BhZ2luYXRpb246IGFueTtcbiAgYXBwcm92YWxXb3JrZmxvd1R5cGU6ICdBTllPTkUnIHwgJ1JPVU5EUk9CSU4nIHwgJ1NFUVVFTlRJQUwnID0gJ1NFUVVFTlRJQUwnO1xuICB1c2Vyc0xpc3Q6IGFueSA9IFtdO1xuICBncm91cHNMaXN0OiBhbnkgPSBbXTtcbiAgQElucHV0KCkgZnJvbVJlc3BvbnNpYmlsaXR5OiBhbnk7XG4gIEBJbnB1dCgpIGFzc2lnbm9ySWQ6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFzc2lnbmVlSWRzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSByZXZpZXdlcklkczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgb3ZlcnNlZXJJZHM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIEZyb21Qcm9ncmFtID0gZmFsc2U7XG4gIEBJbnB1dCgpIHVzZXJMaXN0SW5mbyE6IGFueTtcbiAgQElucHV0KCkgZ3JvdXBMaXN0SW5mbyE6IGFueTtcbiAgQElucHV0KCkgZnJvbUFwcHJvdmFsV29ya2Zsb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGFwcHJvdmFsVHlwZSh2YWx1ZTogJ0FOWU9ORScgfCAnUk9VTkRST0JJTicgfCAnU0VRVUVOVElBTCcpIHtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dUeXBlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2hvd0Z1dHVyZVVzZXJzU3dpdGNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZ1dHVyZVVzZXJzV2lsbFNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0FsbERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzR3JvdXBUYWJTaG93OiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgZmV0Y2hVc2VyRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoKSBkaXNhYmxlZElkczogYW55ID0gW107XG4gIEBJbnB1dCgpIG5vblJlbW92YWJsZVVzZXJJZHM6IGFueSA9IFtdO1xuICBASW5wdXQoKSBhbGxVc2VyU2VsZWN0ZWREaXNhYmxlZCA9IGZhbHNlO1xuICBzZWxlY3RlZFVzZXJzOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRVc2VySWRzOiBhbnkgPSBbXTtcbiAgYWxsVXNlcnNJZHM6IGFueSA9IFtdO1xuICBhbGxVc2VyU2VsZWN0ZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBub25SZW1vdmFibGVHcm91cElkczogYW55ID0gW107XG4gIHNlbGVjdGVkR3JvdXBzOiBhbnkgPSBbXTtcbiAgc2VsZWN0ZWRHcm91cElkczogYW55ID0gW107XG4gIGFsbEdyb3Vwc0lkczogYW55ID0gW107XG4gIGFsbEdyb3VwU2VsZWN0ZWQgPSBmYWxzZTtcbiAgYWxsR3JvdXBTZWxlY3RlZERpc2FibGVkID0gZmFsc2U7XG4gIHNlYXJjaFBpcGUgPSBuZXcgU2VhcmNoUGlwZSgpO1xuXG4gIHVzZXJDdXJyZW50UGFnZSA9IDE7XG4gIGdyb3VwQ3VycmVudFBhZ2UgPSAxO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIG5vbkRpc2FibGVkVXNlcnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgndXNlcmxpc3QnKSBzZXQgc2V0VXNlckxpc3QodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnVzZXJzTGlzdCA9IFsuLi52YWx1ZV07XG4gICAgICB0aGlzLmFsbFVzZXJzSWRzID0gdGhpcy51c2Vyc0xpc3QubWFwKChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0VXNlckxpc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdzZWxlY3RlZFVzZXJzJykgc2V0IHNldFNlbGVjdGVkVXNlcih2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4udGhpcy5zZWxlY3RlZFVzZXJzLCAuLi52YWx1ZV0sXG4gICAgICAgICdtZW1iZXJfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcnMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkXG4gICAgICApO1xuICAgICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKTtcbiAgICAgIHRoaXMuc2V0VXNlckxpc3RJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdFNlbGVjdGVkVXNlcnM6IGFueSA9IFtdO1xuICBkZWZhdWx0U2VsZWN0ZWRVc2VySWRzOiBhbnkgPSBbXTtcbiAgQElucHV0KCdkZWZhdWx0U2VsZWN0ZWRVc2VycycpIHNldCBzZXREZWZhdWx0U2VsZWN0ZWRVc2Vycyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VycyA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgWy4uLnRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcnMsIC4uLnZhbHVlXSxcbiAgICAgICdtZW1iZXJfaWQnXG4gICAgKTtcbiAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJJZHMgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJzLm1hcChcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5tZW1iZXJfaWRcbiAgICApO1xuICB9XG4gIEBJbnB1dCgpIHVzZXJUeXBlOiBzdHJpbmcgPSAnYXNzaWduZWVzJztcbiAgQElucHV0KCkgaXNQYWdpbmF0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Q29uZmlybWF0aW9uID0gZmFsc2U7XG5cbiAgc2V0VXNlckxpc3RJbml0KCkge1xuICAgIGlmICh0aGlzLnVzZXJDdXJyZW50UGFnZSA9PT0gMSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVXNlcnM7XG4gICAgICBjb25zdCBvdGhlclVzZXIgPSB0aGlzLnVzZXJzTGlzdC5maWx0ZXIoXG4gICAgICAgIChlbGU6IGFueSkgPT4gIXRoaXMuc2VsZWN0ZWRVc2VySWRzLmluY2x1ZGVzKGVsZT8ubWVtYmVyX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMudXNlcnNMaXN0ID0gdGhpcy51bmlxdWVCeVByb3AoXG4gICAgICAgIFsuLi5zZWxlY3RlZD8uc29ydCgpLCAuLi5vdGhlclVzZXI/LnNvcnQoKV0sXG4gICAgICAgICdtZW1iZXJfaWQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBhbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKSB7XG4gICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWQgPVxuICAgICAgdGhpcy5hbGxVc2Vyc0lkcy5zb3J0KCkudG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzLnNvcnQoKT8udG9TdHJpbmcoKTtcbiAgICB0aGlzLmFsbFVzZXJTZWxlY3RlZERpc2FibGVkID1cbiAgICAgIHRoaXMuYWxsVXNlcnNJZHMuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcy5zb3J0KCk/LnRvU3RyaW5nKCkgJiZcbiAgICAgIHRoaXMuYWxsVXNlcnNJZHMuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLm5vblJlbW92YWJsZVVzZXJJZHMuc29ydCgpPy50b1N0cmluZygpO1xuICB9XG5cbiAgQElucHV0KCdncm91cExpc3QnKSBzZXQgc2V0R3JvdXBMaXN0KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5ncm91cHNMaXN0ID0gWy4uLnZhbHVlXTtcbiAgICAgIHRoaXMuYWxsR3JvdXBzSWRzID0gdGhpcy5ncm91cHNMaXN0Lm1hcCgoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQpO1xuICAgICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkU3RhdHVzKCk7XG4gICAgICB0aGlzLnNldEdyb3VwTGlzdEluaXQoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoJ3NlbGVjdGVkR3JvdXBzJykgc2V0IHNldFNlbGVjdGVkR3JvdXAodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgIFsuLi50aGlzLnNlbGVjdGVkR3JvdXBzLCAuLi52YWx1ZV0sXG4gICAgICAnZ3JvdXBfaWQnXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnNlbGVjdGVkR3JvdXBzLm1hcChcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZFxuICAgICk7XG4gICAgdGhpcy5hbGxHcm91cFNlbGVjdGVkU3RhdHVzKCk7XG4gICAgdGhpcy5zZXRHcm91cExpc3RJbml0KCk7XG4gIH1cblxuICBzZXRHcm91cExpc3RJbml0KCkge1xuICAgIGlmICh0aGlzLnVzZXJDdXJyZW50UGFnZSA9PT0gMSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkR3JvdXBzO1xuICAgICAgY29uc3Qgb3RoZXJHcm91cCA9IHRoaXMuZ3JvdXBzTGlzdC5maWx0ZXIoXG4gICAgICAgIChlbGU6IGFueSkgPT4gIXRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhlbGU/Lmdyb3VwX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IHRoaXMudW5pcXVlQnlQcm9wKFxuICAgICAgICBbLi4uc2VsZWN0ZWQ/LnNvcnQoKSwgLi4ub3RoZXJHcm91cD8uc29ydCgpXSxcbiAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgYWxsR3JvdXBTZWxlY3RlZFN0YXR1cygpIHtcbiAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWQgPVxuICAgICAgdGhpcy5hbGxHcm91cHNJZHM/LnNvcnQoKT8udG9TdHJpbmcoKSA9PT1cbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcz8uc29ydCgpPy50b1N0cmluZygpO1xuICAgIHRoaXMuYWxsR3JvdXBTZWxlY3RlZERpc2FibGVkID1cbiAgICAgIHRoaXMuYWxsR3JvdXBzSWRzLnNvcnQoKS50b1N0cmluZygpID09PVxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzLnNvcnQoKT8udG9TdHJpbmcoKSAmJlxuICAgICAgdGhpcy5hbGxHcm91cHNJZHMuc29ydCgpLnRvU3RyaW5nKCkgPT09XG4gICAgICB0aGlzLm5vblJlbW92YWJsZUdyb3VwSWRzLnNvcnQoKT8udG9TdHJpbmcoKTtcbiAgfVxuXG4gIHVzZXJQYWdlQ2hhbmdlKHBhZ2U6IGFueSkge1xuICAgIHRoaXMudXNlckN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICB0aGlzLmZldGNoVXNlckRhdGEuZW1pdCh7IHBhZ2UsIHNlYXJjaEtleTogdGhpcy5zZWFyY2hLZXkgfSk7XG4gIH1cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKiBTZWxlY3RzIGl0ZW0gb3IgZGVzZWxlY3QgYSBpdG1lXG4gICAqIEBwYXJhbSBldnRcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICovXG4gIHNlbGVjdEl0ZW0oZXZ0OiBhbnksIHBheWxvYWQ6IGFueSkge1xuICAgIGV2dD8udGFyZ2V0Py5jaGVja2VkID09PSB0cnVlXG4gICAgICA/IHRoaXMubWFuaXB1bGF0ZVNlbGVjdGVkVXNlcignQUREJywgcGF5bG9hZClcbiAgICAgIDogdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRVc2VyKCdERUxFVEUnLCBwYXlsb2FkKTtcbiAgfVxuXG4gIHNlbGVjdEl0ZW1SYWRpbyhldnQ6IGFueSwgcGF5bG9hZDogYW55KSB7XG4gICAgaWYgKGV2dD8udGFyZ2V0Py5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcbiAgICAgIHRoaXMubWFuaXB1bGF0ZVNlbGVjdGVkVXNlcignQUREJywgcGF5bG9hZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICMjIyMgRGVzY3JpcHRpb25cbiAgICpcbiAgICogTWFuaXB1bGF0ZXMgc2VsZWN0ZWQgaXRlbXMgaW4gcm9sZSBsaXN0XG4gICAqIEBwYXJhbSBhY3Rpb24gOidBREQnIHwgJ0RFTEVURSdcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICovXG4gIG1hbmlwdWxhdGVTZWxlY3RlZFVzZXIoYWN0aW9uOiAnQUREJyB8ICdERUxFVEUnLCBwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uID09PSAnQUREJykge1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdGhpcy51bmlxdWVCeVByb3AoXG4gICAgICAgIFsuLi50aGlzLnNlbGVjdGVkVXNlcnMsIC4uLltwYXlsb2FkXV0sXG4gICAgICAgICdtZW1iZXJfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcnMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnREVMRVRFJykge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFVzZXJzLmZpbmRJbmRleChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1lbWJlcl9pZCA9PT0gcGF5bG9hZD8ubWVtYmVyX2lkXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gdGhpcy5zZWxlY3RlZFVzZXJzLmZpbHRlcihcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubWVtYmVyX2lkICE9PSBwYXlsb2FkPy5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcklkcy5maWx0ZXIoXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUgIT09IHBheWxvYWQ/Lm1lbWJlcl9pZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFsbFVzZXJTZWxlY3RlZFN0YXR1cygpO1xuICB9XG4gIHNlbGVjdEFsbFVzZXIoZXZ0OiBhbnkpIHtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldnQ/LnRhcmdldD8uY2hlY2tlZCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzb3VyY2VVc2VycyA9IHRoaXMuZnJvbVJlc3BvbnNpYmlsaXR5ID8gdGhpcy5kaXNhYmxlVXNlcnMoKSA6IHRoaXMudXNlcnNMaXN0O1xuICAgIFxuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHNvdXJjZVVzZXJzO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnNlbGVjdGVkVXNlcnMubWFwKCh1c2VyOiB7IG1lbWJlcl9pZDogc3RyaW5nIHwgbnVtYmVyIH0pID0+IHVzZXI/Lm1lbWJlcl9pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcigodXNlcjogeyBtZW1iZXJfaWQ6IHN0cmluZyB8IG51bWJlciB9KSA9PiBcbiAgICAgICAgdGhpcy5ub25SZW1vdmFibGVVc2VySWRzLmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcklkcyA9IHRoaXMuc2VsZWN0ZWRVc2Vycy5tYXAoKHVzZXI6IHsgbWVtYmVyX2lkOiBzdHJpbmcgfCBudW1iZXIgfSkgPT4gdXNlcj8ubWVtYmVyX2lkKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5hbGxVc2VyU2VsZWN0ZWRTdGF0dXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAjIyMjIERlc2NyaXB0aW9uXG4gICAqIFNlbGVjdHMgaXRlbSBvciBkZXNlbGVjdCBhIGl0bWVcbiAgICogQHBhcmFtIGV2dFxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKi9cbiAgc2VsZWN0R3JvdXAoZXZ0OiBhbnksIHBheWxvYWQ6IGFueSkge1xuICAgIGV2dD8udGFyZ2V0Py5jaGVja2VkID09PSB0cnVlXG4gICAgICA/IHRoaXMubWFuaXB1bGF0ZVNlbGVjdGVkR3JvdXAoJ0FERCcsIHBheWxvYWQpXG4gICAgICA6IHRoaXMubWFuaXB1bGF0ZVNlbGVjdGVkR3JvdXAoJ0RFTEVURScsIHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqICMjIyMgRGVzY3JpcHRpb25cbiAgICpcbiAgICogTWFuaXB1bGF0ZXMgc2VsZWN0ZWQgaXRlbXMgaW4gcm9sZSBsaXN0XG4gICAqIEBwYXJhbSBhY3Rpb24gOidBREQnIHwgJ0RFTEVURSdcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICovXG4gIG1hbmlwdWxhdGVTZWxlY3RlZEdyb3VwKGFjdGlvbjogJ0FERCcgfCAnREVMRVRFJywgcGF5bG9hZDogYW55KSB7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ0FERCcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChcbiAgICAgICAgWy4uLnRoaXMuc2VsZWN0ZWRHcm91cHMsIC4uLltwYXlsb2FkXV0sXG4gICAgICAgICdncm91cF9pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnNlbGVjdGVkR3JvdXBzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnREVMRVRFJykge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEdyb3Vwcy5maW5kSW5kZXgoXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5ncm91cF9pZCA9PT0gcGF5bG9hZD8uZ3JvdXBfaWRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gdGhpcy5zZWxlY3RlZEdyb3Vwcy5maWx0ZXIoXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkICE9PSBwYXlsb2FkPy5ncm91cF9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuZmlsdGVyKFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlICE9PSBwYXlsb2FkPy5ncm91cF9pZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKTtcbiAgfVxuICBzZWxlY3RBbGxHcm91cChldnQ6IGFueSkge1xuICAgIGNvbnN0IGdyb3VwRGF0YSA9IHRoaXMuc2VhcmNoUGlwZS50cmFuc2Zvcm0oXG4gICAgICB0aGlzLmdyb3Vwc0xpc3QsXG4gICAgICB0aGlzLnNlYXJjaEtleSxcbiAgICAgICdncm91cF9uYW1lJ1xuICAgICk7XG4gICAgaWYgKGV2dD8udGFyZ2V0Py5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gZ3JvdXBEYXRhO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gZ3JvdXBEYXRhLm1hcCgoZWxlOiBhbnkpID0+IGVsZT8uZ3JvdXBfaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBzID0gdGhpcy5ncm91cHNMaXN0LmZpbHRlcigoZWxlOiBhbnkpID0+XG4gICAgICAgIHRoaXMubm9uUmVtb3ZhYmxlR3JvdXBJZHMuaW5jbHVkZXMoZWxlPy5ncm91cF9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnNlbGVjdGVkR3JvdXBzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lmdyb3VwX2lkXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmFsbEdyb3VwU2VsZWN0ZWRTdGF0dXMoKTtcbiAgfVxuXG4gIGFuaW1hdGlvbiA9IHRydWU7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0dXBEZWJvdW5jZUZvclVzZXJTZWFyY2goKTtcbiAgIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBsZXQgZGlzYWJsZWRJZHMgPSBbLi4udGhpcy5kaXNhYmxlZElkcywgLi4udGhpcy5ub25SZW1vdmFibGVVc2VySWRzXTtcbiAgICB0aGlzLmRpc2FibGVkSWRzID0gWy4uLm5ldyBTZXQoZGlzYWJsZWRJZHMpXTtcbiAgICB0aGlzLnBhZ2luYXRpb25WaXNpYmxlKCk7XG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICB9LCAzMDApO1xuXG4gICAgLy8gU2V0dXAgZGVib3VuY2VkIHNlYXJjaFxuICAgIFxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG4gIGN1cnJlbnRUYWIgPSAnVVNFUic7XG4gIHN3aXRjaFRhYih0YWI6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcbiAgICB0aGlzLnNlYXJjaEtleSA9ICcnO1xuICB9XG5cbiAgc2F2ZUxpc3QoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0ZWRVc2VySWRzICYmXG4gICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZFVzZXJJZHM/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySWRzPy5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGVkVXNlcklkcz8uZm9yRWFjaCgoaWQ6IG51bWJlcik6IGFueSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFVzZXJJZHM/LmluY2x1ZGVzKGlkKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dDb25maXJtYXRpb24pXG4gICAgICB0aGlzLnNhdmUuZW1pdCh7XG4gICAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkVXNlcnMsXG4gICAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZEdyb3VwcyxcbiAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0OiB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCxcbiAgICAgIH0pO1xuICB9XG5cbiAgY29uZmlybUFjdGlvbihldnQ6ICdZRVMnIHwgJ05PJykge1xuICAgIGlmIChldnQgPT09ICdZRVMnKSB7XG4gICAgICB0aGlzLnNhdmUuZW1pdCh7XG4gICAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkVXNlcnMsXG4gICAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZEdyb3VwcyxcbiAgICAgICAgZnV0dXJlVXNlcnNXaWxsU2VsZWN0OiB0aGlzLmZ1dHVyZVVzZXJzV2lsbFNlbGVjdCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZXZ0ID09PSAnTk8nKSB7XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjbG9zZUxpc3QoKSB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgLy9cblxuICAvKipcbiAgICogIyMjIyBEZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB1bmlxdWUgYXJyYXkgb2Ygb2JqZWN0IGJhc2VkIG9uIHVuaXF1ZSBrZXlcbiAgICogQHBhcmFtIGFycmF5XG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHVuaXF1ZUJ5UHJvcChhcnJheTogYW55LCBrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgYXJyYXlcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxuICAgICAgICAgICAgaXRlbSAmJiBpdGVtW2tleV0gJiYgYWNjLnNldChpdGVtW2tleV0sIGl0ZW0pLCBhY2NcbiAgICAgICAgICApLFxuICAgICAgICAgIG5ldyBNYXAoKVxuICAgICAgICApXG4gICAgICAgIC52YWx1ZXMoKVxuICAgICk7XG4gIH1cblxuICBwYWdpbmF0aW9uVmlzaWJsZSgpIHtcbiAgICBpZiAodGhpcy51c2VyTGlzdEluZm8/LnRvdGFsX3BhZ2VzID4gMSkge1xuICAgICAgdGhpcy5pc1BhZ2luYXRpb24gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICB3b3JrZmxvd1R5cGVDaGFuZ2VkKGV2ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJldmlld2VyV29ya2Zsb3dUeXBlID0gZXZlbnQ7XG4gICAgdGhpcy5yZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGRpc2FibGVVc2VycygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZnJvbVJlc3BvbnNpYmlsaXR5KSB7XG4gICAgICBjYXNlICdBc3NpZ25lZSc6XG4gICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLm92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmV2aWV3ZXInOlxuICAgICAgICB0aGlzLm5vbkRpc2FibGVkVXNlcnMgPSB0aGlzLnVzZXJzTGlzdC5maWx0ZXIoXG4gICAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5hc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ092ZXJzZWVyJzpcbiAgICAgICAgdGhpcy5ub25EaXNhYmxlZFVzZXJzID0gdGhpcy51c2Vyc0xpc3QuZmlsdGVyKFxuICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbm9ySWQ/LmluY2x1ZGVzKHVzZXI/Lm1lbWJlcl9pZCkgfHxcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb2xsYWJvcmF0b3InOlxuICAgICAgICAgIHRoaXMubm9uRGlzYWJsZWRVc2VycyA9IHRoaXMudXNlcnNMaXN0LmZpbHRlcihcbiAgICAgICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZElkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ub25EaXNhYmxlZFVzZXJzO1xuICB9XG5cbiAgc2V0QWxsVXNlcnNTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5mdXR1cmVVc2Vyc1dpbGxTZWxlY3QgPSBldmVudDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIC8vIENsZWFyIGFueSBleGlzdGluZyBzZWFyY2ggYW5kIHJlc2V0IHRvIGZpcnN0IHBhZ2VcbiAgICAgIHRoaXMuc2VhcmNoS2V5ID0gJyc7XG4gICAgICB0aGlzLnVzZXJDdXJyZW50UGFnZSA9IDE7XG4gICAgICB0aGlzLmZldGNoVXNlckRhdGEuZW1pdCh7IHBhZ2U6IDEsIHNlYXJjaEtleTogJycgfSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VycyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwcyA9IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJZHMgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoS2V5Q2hhbmdlKHNlYXJjaEtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJqZWN0Lm5leHQoc2VhcmNoS2V5IHx8ICcnKTtcbiAgfVxuXG4gIHNldHVwRGVib3VuY2VGb3JVc2VyU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoU3ViamVjdC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDgwMCksIC8vIFdhaXQgODAwbXMgYWZ0ZXIgdXNlciBzdG9wcyB0eXBpbmdcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIC8vIE9ubHkgZW1pdCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKHNlYXJjaEtleSA9PiB7XG4gICAgICB0aGlzLnVzZXJDdXJyZW50UGFnZSA9IDE7XG4gICAgICBpZiAodGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKSB7XG4gICAgICAgIC8vIFNlcnZlci1zaWRlIHNlYXJjaDogZmV0Y2ggbmV3IGRhdGFcbiAgICAgICAgdGhpcy5mZXRjaFVzZXJEYXRhLmVtaXQoeyBwYWdlOiAxLCBzZWFyY2hLZXk6IHNlYXJjaEtleSB9KTtcbiAgICAgIH1cbiAgICAgIC8vIENsaWVudC1zaWRlIHNlYXJjaDogaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBmaWx0ZXIgcGlwZVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0XCIgW2NsYXNzLmFuaW1hdGVdPVwiYW5pbWF0aW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtaGVhZFwiPlxuICAgIDxoMyBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC10aXRsZVwiPnt7IHBhbmVsVGl0bGUgfX08L2gzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbGlzdC1ib2R5LWlubmVyXCI+XG4gICAgICA8YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJsb2FkaW5nXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtdGFiIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIlxuICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCIhaXNQYWdpbmF0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVGFiKCdVU0VSJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0YWItYnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtcGItMiB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFRhYiA9PT0gJ1VTRVInXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBVU0VSU1xuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1wbC0xIHZ4LXByLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tbC0yIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICBzZWFyY2hLZXk/Lmxlbmd0aCAmJiBjdXJyZW50VGFiID09PSBcIlVTRVJcIlxuICAgICAgICAgICAgICAgICAgPyAodXNlcnNMaXN0IHwgZmlsdGVyIDogc2VhcmNoS2V5KT8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICA6IHVzZXJzTGlzdD8ubGVuZ3RoIHx8IHVzZXJMaXN0SW5mbz8udG90YWxfaXRlbXNcbiAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImlzUGFnaW5hdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYignVVNFUicpXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LXBiLTIgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdVU0VSJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgVVNFUlNcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCJcbiAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggJiYgY3VycmVudFRhYiA9PT0gXCJVU0VSXCIgJiYgaXNQYWdpbmF0aW9uRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgPyB1c2VyTGlzdEluZm8/LnRvdGFsX2l0ZW1zXG4gICAgICAgICAgICAgICAgICA6IHVzZXJMaXN0SW5mbz8udG90YWxcbiAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImlzR3JvdXBUYWJTaG93XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ0dST1VQJylcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0YWItYnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtcGItMiB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudFRhYiA9PT0gJ0dST1VQJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZmVhdHVyZWZsYWcgPyBcIlVTRVIgR1JPVVBTXCIgOiBcIkdST1VQU1wiIH19XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cInZ4LXBsLTEgdngtcHItMSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LW1sLTIgdngtbGgtNFwiXG4gICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgIHNlYXJjaEtleT8ubGVuZ3RoICYmIGN1cnJlbnRUYWIgPT09IFwiR1JPVVBcIlxuICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBzTGlzdCB8IHNlYXJjaCA6IHNlYXJjaEtleSA6IFwiZ3JvdXBfbmFtZVwiKT8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICA6IGdyb3Vwc0xpc3Q/Lmxlbmd0aCB8fCBncm91cExpc3RJbmZvPy50b3RhbF9pdGVtc1xuICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmdXR1cmUtdXNlciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAqbmdJZj1cInNob3dGdXR1cmVVc2Vyc1N3aXRjaFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC10dC11cHBlcmNhc2VcIj5cbiAgICAgICAgICAgIFZpc2libGUgdG8gQWxsIEN1cnJlbnQgJiBGdXR1cmUgVXNlcnNcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBpbmZvIHZ4LWZzLTEyIHZ4LXR4dC1ibHVlIHZ4LW1sLTEgdngtbXItMVwiXG4gICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCB0aGlzIHBvbGljeSB3aWxsIGJlIHZpc2libGUgdG8gYWxsIHVzZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgaW4geW91ciBWQ29tcGx5IGFjY291bnQgYW5kIHVzZXJzIHRoYXQgbWlnaHQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4nXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICA+JiN4ZTkxZjs8L2lcbiAgICAgICAgICA+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImZ1dHVyZVVzZXJzV2lsbFNlbGVjdFwiXG4gICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZXRBbGxVc2Vyc1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmxvY2sgdngtbWItMlwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYjs8L2k+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICpuZ0lmPVwiIWZlYXR1cmVmbGFnXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEtleVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZ1dHVyZVVzZXJzV2lsbFNlbGVjdFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tcbiAgICAgICAgICAgIGN1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcicgOiAnU2VhcmNoIEdyb3VwJ1xuICAgICAgICAgIH19XCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZlYXR1cmVmbGFnXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAqbmdJZj1cImlzUGFnaW5hdGlvbkVuYWJsZWQ7IGVsc2Ugc2VhcmNoSW5wdXRXaXRob3V0UGFnaW5hdGlvblwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEtleVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaEtleUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmdXR1cmVVc2Vyc1dpbGxTZWxlY3RcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgICBjdXJyZW50VGFiID09PSAnVVNFUicgPyAnU2VhcmNoIFVzZXInIDogJ1NlYXJjaCBVc2VyIEdyb3VwJ1xuICAgICAgICAgICAgfX1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZWFyY2hJbnB1dFdpdGhvdXRQYWdpbmF0aW9uPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoS2V5XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZ1dHVyZVVzZXJzV2lsbFNlbGVjdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcicgOiAnU2VhcmNoIFVzZXIgR3JvdXAnXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdVU0VSJyAmJiAhbG9hZGluZ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlcnNMaXN0IHwgZmlsdGVyIDogc2VhcmNoS2V5IDogaXNQYWdpbmF0aW9uRW5hYmxlZCBhcyB1c2Vyc1wiPlxuICAgICAgICAgIDx2dWktcGFnaW5hdGlvblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgdXNlckxpc3RJbmZvPy50b3RhbF9wYWdlcyA+IDEgJiZcbiAgICAgICAgICAgICAgdXNlcnNMaXN0Py5sZW5ndGggIT09IHVzZXJMaXN0SW5mbz8udG90YWxfaXRlbXNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwidXNlckN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgIFt0b3RhbFBhZ2VdPVwidXNlckxpc3RJbmZvPy50b3RhbF9wYWdlc1wiXG4gICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwidXNlclBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZnJvbV09XCJ1c2VyTGlzdEluZm8/LmZyb21cIlxuICAgICAgICAgICAgW3RvXT1cInVzZXJMaXN0SW5mbz8udG9cIlxuICAgICAgICAgICAgW3RvdGFsXT1cInVzZXJMaXN0SW5mbz8udG90YWxcIlxuICAgICAgICAgID48L3Z1aS1wYWdpbmF0aW9uPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidXNlci1ncm91cC1saXN0LW1pZFwiXG4gICAgICAgICAgICBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cImlzUGFnaW5hdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJzPy5sZW5ndGggPiAwOyBlbHNlIG5vdXNlclwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzUGFnaW5hdGlvbkVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LXNlbGVjdCB2eC1tYi0yXCI+XG4gICAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXNpbmdsZVNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICN1c2VyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbFVzZXJTZWxlY3RlZCB8fCBmdXR1cmVVc2Vyc1dpbGxTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgYWxsVXNlclNlbGVjdGVkRGlzYWJsZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3QgfHxcbiAgICAgICAgICAgICAgICAgICAgICBpc0FsbERpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsVXNlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1uYW1lIHZ4LWZzLTEyIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAhdXNlcj8uY2hlY2tlZCA/IFwiU2VsZWN0IEFsbFwiIDogXCJEZXNlbGVjdCBBbGxcIiB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvdnVpLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidngtbS0wIHZ4LXAtMCB2eC1kLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1tYi0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzaW5nbGVTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRvb2x0aXBNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmcm9tUmVzcG9uc2liaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJldmlld2VySWRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvdmVyc2Vlcklkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNzaWdub3JJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNzaWduZWVJZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdtZW1iZXJfaWQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXNhYmxlZElkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRnJvbVByb2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8dnVpLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEl0ZW0oJGV2ZW50LCB1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkSWRzPy5pbmNsdWRlcyh1c2VyPy5tZW1iZXJfaWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZVVzZXJzV2lsbFNlbGVjdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FsbERpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVXNlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmVVc2Vyc1dpbGxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInVzZXItbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC92dWktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInZ4LW1iLTNcIiAqbmdJZj1cInNpbmdsZVNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidyYWRpby1zZWxlY3RvcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrZWRFdmVudCk9XCJzZWxlY3RJdGVtUmFkaW8oJGV2ZW50LCB1c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCIncngtY2F0ZWdvcnknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVXNlcklkcz8uaW5jbHVkZXModXNlcj8ubWVtYmVyX2lkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ1c2VyPy5tZW1iZXJfZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXI/Lm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3MtcmFkaW8+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3VzZXI+XG4gICAgICAgICAgICAgIDxhcHAtbm8tZGF0YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtub0RhdGFJbWFnZV09XCJBU1NFVFMuc2VhcmNoX2RhdGFcIlxuICAgICAgICAgICAgICAgIFtub0RhdGFUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5Py5sZW5ndGggPiAwID8gJ05vIG1hdGNoIGZvdW5kLicgOiAnTm8gVXNlcnMgZm91bmQuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L2FwcC1uby1kYXRhPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdHUk9VUCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiZ3JvdXBzTGlzdCB8IHNlYXJjaCA6IHNlYXJjaEtleSA6ICdncm91cF9uYW1lJyBhcyBncm91cHNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtbWlkXCJcbiAgICAgICAgICAgIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwiaXNQYWdpbmF0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBzPy5sZW5ndGggPiAwOyBlbHNlIG5vZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1zZWxlY3QgdngtbWItMlwiPlxuICAgICAgICAgICAgICAgIDx2dWktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICNncm91cFxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsR3JvdXBTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsR3JvdXBTZWxlY3RlZERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsR3JvdXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItbmFtZSB2eC1mcy0xMiB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAhZ3JvdXA/LmNoZWNrZWQgPyBcIlNlbGVjdCBBbGxcIiA6IFwiRGVzZWxlY3QgQWxsXCIgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdnVpLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidngtbS0wIHZ4LXAtMCB2eC1kLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInZ4LW1iLTNcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2dWktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEdyb3VwKCRldmVudCwgZ3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBub25SZW1vdmFibGVHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItbmFtZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImdyb3VwPy5ncm91cF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtbmFtZVwiPnt7IGdyb3VwPy5ncm91cF9uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgdngtZnMtOSB2eC1mdy02MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTMgdngtdHQtdXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGdyb3VwPy5tZW1iZXJfY291bnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXA/Lm1lbWJlcl9jb3VudCA+IDEgPyBcIlVTRVJTXCIgOiBcIlVTRVJcIiB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3Z1aS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ncm91cD5cbiAgICAgICAgICAgICAgPGFwcC1uby1kYXRhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIkFTU0VUUy5zZWFyY2hfZGF0YVwiXG4gICAgICAgICAgICAgICAgW25vRGF0YVRleHRdPVwiXG4gICAgICAgICAgICAgICAgICBzZWFyY2hLZXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnTm8gbWF0Y2ggZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICA6ICdObyBkYXRhIHRvIGRpc3BsYXkuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L2FwcC1uby1kYXRhPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdyb3VwLWxpc3QtZm9vdGVyXCI+XG4gICAgICA8dnVpLWZsb2F0aW5nLWJhclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICghc2luZ2xlU2VsZWN0IHx8ICghc2luZ2xlU2VsZWN0ICYmIHNlbGVjdGVkUmV2aWV3ZXIpKSAmJiAhbG9hZGluZ1xuICAgICAgICBcIlxuICAgICAgICAoY2xvc2VFdmVudCk9XCJzYXZlTGlzdCgpXCJcbiAgICAgICAgKGNsb3NlTGlzdCk9XCJjbG9zZUxpc3QoKVwiXG4gICAgICAgICh3b3JrZmxvd1R5cGVDaGFuZ2VkKT1cIndvcmtmbG93VHlwZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFtzZWxlY3RlZFdvcmtmbG93XT1cInJldmlld2VyV29ya2Zsb3dUeXBlXCJcbiAgICAgICAgW3Nob3dXb3JrZmxvd109XCJzZWxlY3RlZFJldmlld2VyXCJcbiAgICAgICAgW2dyb3VwU2VsZWN0ZWRdPVwic2VsZWN0ZWRHcm91cHNcIlxuICAgICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgICAgW25leHREaXNhYmxlZF09XCJmcm9tQXBwcm92YWxXb3JrZmxvdyAmJiBzZWxlY3RlZFVzZXJzPy5sZW5ndGggPT09IDBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMiB2eC1tci0yXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnM/LnNsaWNlKDAsIDEpOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbSh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZnJvbUFwcHJvdmFsV29ya2Zsb3cgJiZcbiAgICAgICAgICAgICAgICBhcHByb3ZhbFdvcmtmbG93VHlwZS50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgMSA9PSBzZWxlY3RlZFVzZXJzPy5sZW5ndGggPyBcIkZpbmFsXCIgOiAxIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiZWxlbWVudD8ubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgPnt7IGVsZW1lbnQ/Lm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JvdXBEaXNhYmxlLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgc2VsZWN0ZWRVc2Vycz8uc2xpY2UoMSk/Lmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2Ygc2VsZWN0ZWRVc2Vycz8uc2xpY2UoMCwxKTtsZXQgaSA9IGluZGV4XCI+PGkgKm5nSWY9XCIhbm9uUmVtb3ZhYmxlVXNlcklkcz8uaW5jbHVkZXMoZWxlbWVudD8ubWVtYmVyX2lkKVwiIChjbGljayk9XCJzZWxlY3RJdGVtKHt0YXJnZXQ6e2NoZWNrZWQ6ZmFsc2V9fSxlbGVtZW50KVwiIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT4gPHNwYW4+e3tlbGVtZW50Py5tZW1iZXJfbmFtZX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlclwiICpuZ0lmPVwic2VsZWN0ZWRVc2Vycz8ubGVuZ3RoPjFcIiBhcHBQb3BvdmVyIChjbGljayk9XCJncm91cERpc2FibGUucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiPit7e3NlbGVjdGVkVXNlcnM/LnNsaWNlKDEpPy5sZW5ndGh9fTwvZGl2PiAtLT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInVzZXItZ3JvdXAtY2hpcFwiXG4gICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFVzZXJzPy5sZW5ndGggJiYgZ3JvdXBFbmFibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKHNlbGVjdGVkVXNlcnNbMF0/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBzZWxlY3RJdGVtKHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IGZhbHNlIH0gfSwgc2VsZWN0ZWRVc2Vyc1swXSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbmFtZVwiPnt7IHNlbGVjdGVkVXNlcnNbMF0/Lm1lbWJlcl9uYW1lIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwRW5hYmxlZFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQ291bnQucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICt7eyBzZWxlY3RlZFVzZXJzPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lIHVzZXJHcm91cC1uYW1lXCI+XG4gICAgICAgICAgPCEtLSB7e3NlbGVjdGVkR3JvdXBzICYmIHNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAwID8nICYgJzonJ319IC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlckdyb3VwLXRleHRcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA9PT0gMVwiXG4gICAgICAgICAgICA+VXNlciB7eyBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOiBcIiBzZWxlY3RlZFwiIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXNlckdyb3VwLXRleHRcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgPlVzZXJzIHt7IHNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPiAwID8gXCIgJiBcIiA6IFwic2VsZWN0ZWRcIiB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtY2hpcFwiICpuZ0lmPVwic2VsZWN0ZWRHcm91cHM/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIW5vblJlbW92YWJsZUdyb3VwSWRzPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3Vwc1swXT8uZ3JvdXBfaWQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgc2VsZWN0R3JvdXAoeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBzZWxlY3RlZEdyb3Vwc1swXSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ3JvdXAtbmFtZVwiPnt7IHNlbGVjdGVkR3JvdXBzWzBdPy5ncm91cF9uYW1lIH19PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjb3VudGVyIGdyb3VwXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgKGNsaWNrKT1cImdyb3VwQ291bnQucG9wb3ZlcigpXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICt7eyBzZWxlY3RlZEdyb3Vwcz8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWUgdXNlckdyb3VwLW5hbWVcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkR3JvdXBzPy5sZW5ndGggPT09IDFcIj57e1xuICAgICAgICAgICAgZmVhdHVyZWZsYWcgPyBcIlVzZXIgR3JvdXAgc2VsZWN0ZWRcIiA6IFwiR3JvdXAgc2VsZWN0ZWRcIlxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRHcm91cHM/Lmxlbmd0aCA+IDFcIj57e1xuICAgICAgICAgICAgZmVhdHVyZWZsYWcgPyBcIlVzZXIgR3JvdXBzIHNlbGVjdGVkXCIgOiBcIkdyb3VwcyBzZWxlY3RlZFwiXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjdXNlckNvdW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkVXNlcnMgfCBzbGljZSA6IDE7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9uUmVtb3ZhYmxlVXNlcklkcz8uaW5jbHVkZXMoZWxlbWVudD8ubWVtYmVyX2lkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwRGlzYWJsZSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2Ygc2VsZWN0ZWRVc2Vycy5zbGljZSgxKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vblJlbW92YWJsZVVzZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm1lbWJlcl9pZClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUFwcHJvdmFsV29ya2Zsb3cgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsV29ya2Zsb3dUeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdzZXF1ZW50aWFsJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAxID09PSBzZWxlY3RlZFVzZXJzPy5sZW5ndGggLSAxID8gXCJGaW5hbFwiIDogaSArIDJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQ/Lm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXBDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50IG9mIHNlbGVjdGVkR3JvdXBzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFub25SZW1vdmFibGVHcm91cElkcz8uaW5jbHVkZXMoZWxlbWVudD8uZ3JvdXBfaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RHcm91cCh7IHRhcmdldDogeyBjaGVja2VkOiBmYWxzZSB9IH0sIGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgPC92dWktZmxvYXRpbmctYmFyPlxuICAgICAgPHZ1aS1mbG9hdGluZy1iYXJcbiAgICAgICAgKm5nSWY9XCJzaW5nbGVTZWxlY3QgJiYgIWxvYWRpbmdcIlxuICAgICAgICAoY2xvc2VFdmVudCk9XCJzYXZlTGlzdCgpXCJcbiAgICAgICAgKGNsb3NlTGlzdCk9XCJjbG9zZUxpc3QoKVwiXG4gICAgICAgIFtuZXh0RGlzYWJsZWRdPVwiZnJvbUFwcHJvdmFsV29ya2Zsb3cgJiYgc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoID09PSAwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBcIiAqbmdJZj1cInNlbGVjdGVkVXNlcnM/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9LCBzZWxlY3RlZFVzZXJzWzBdKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj4ge3sgc2VsZWN0ZWRVc2Vyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92dWktZmxvYXRpbmctYmFyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwidXNlci1ncm91cC1saXN0LWNvbmZpcm1hdGlvblwiICpuZ0lmPVwic2hvd0NvbmZpcm1hdGlvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tdG9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ibG9ja1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTMwOzwvaT48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+XG4gICAgICAgIFRoaXMgYWN0aW9uIHdpbGwgcmVzZXQgdGhlIGRlZmF1bHQge3sgdXNlclR5cGUgfX0gc2VsZWN0ZWQgZm9yIHRoZVxuICAgICAgICBQcm9ncmFtLlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1ib3R0b21cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+QXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQ/PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJuby1idG5cIiAoY2xpY2spPVwiY29uZmlybUFjdGlvbignTk8nKVwiPk5PPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ5ZXMtYnRuXCIgKGNsaWNrKT1cImNvbmZpcm1BY3Rpb24oJ1lFUycpXCI+WUVTPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==