vcomply-workflow-engine 6.0.63 → 6.0.65

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 (83) hide show
  1. package/esm2022/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +10 -1
  2. package/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +10 -1
  3. package/esm2022/lib/add-multiple-risk/add-multiple-risk.component.mjs +10 -1
  4. package/esm2022/lib/interfaces/responsibilty.interface.mjs +1 -1
  5. package/esm2022/lib/more-option/more-option.component.mjs +180 -14
  6. package/esm2022/lib/report-a-case/services/report-a-case.service.mjs +2 -3
  7. package/esm2022/lib/report-a-case/workflow-case/workflow-case.component.mjs +4 -4
  8. package/esm2022/lib/services/common.service.mjs +1 -40
  9. package/esm2022/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.mjs +1 -5
  10. package/esm2022/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -5
  11. package/esm2022/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +5 -5
  12. package/esm2022/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -2
  13. package/esm2022/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +2 -6
  14. package/esm2022/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +2 -3
  15. package/esm2022/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +1 -3
  16. package/esm2022/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -5
  17. package/esm2022/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +2 -9
  18. package/esm2022/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +2 -4
  19. package/esm2022/lib/sharedComponents/frequency/frequency.service.mjs +1 -243
  20. package/esm2022/lib/workflow/grc-object/grc-object-container/grc-object-container.component.mjs +17 -45
  21. package/esm2022/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.mjs +10 -13
  22. package/esm2022/lib/workflow/shared/services/grc.service.mjs +2 -2
  23. package/esm2022/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +10 -1
  24. package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +411 -283
  25. package/esm2022/lib/workflow-engine-container/workflow-engine-container.component.mjs +31 -5
  26. package/esm2022/lib/workflow-engine.module.mjs +6 -13
  27. package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +47 -91
  28. package/esm2022/lib/workflow-program/constants.mjs +3 -3
  29. package/esm2022/lib/workflow-program/workflow-program.component.mjs +311 -118
  30. package/esm2022/lib/workflow-services/common-workflow-services/common-route.service.mjs +20 -0
  31. package/esm2022/lib/workflow-services/policy.service.mjs +4 -4
  32. package/esm2022/lib/workflow-services/programs.service.mjs +113 -26
  33. package/esm2022/lib/workflow-services/responsibility.service.mjs +45 -48
  34. package/fesm2022/vcomply-workflow-engine.mjs +17392 -17517
  35. package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
  36. package/lib/add-multiple-responsibility/add-multiple-responsibility.component.d.ts +2 -0
  37. package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +2 -0
  38. package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +3 -1
  39. package/lib/interfaces/responsibilty.interface.d.ts +12 -12
  40. package/lib/services/common.service.d.ts +0 -28
  41. package/lib/sharedComponents/frequency/frequency-random/frequency-random.component.d.ts +0 -1
  42. package/lib/sharedComponents/frequency/frequency.service.d.ts +0 -87
  43. package/lib/workflow/grc-object/grc-object-container/grc-object-container.component.d.ts +1 -5
  44. package/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.d.ts +1 -3
  45. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts +2 -0
  46. package/lib/workflow-compliance/workflow-compliance.component.d.ts +6 -32
  47. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +1 -2
  48. package/lib/workflow-engine.module.d.ts +40 -42
  49. package/lib/workflow-policy/workflow-policy.component.d.ts +3 -10
  50. package/lib/workflow-program/workflow-program.component.d.ts +4 -7
  51. package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
  52. package/lib/workflow-services/common-workflow-services/common-route.service.d.ts +9 -0
  53. package/lib/workflow-services/programs.service.d.ts +53 -13
  54. package/lib/workflow-services/responsibility.service.d.ts +2 -14
  55. package/package.json +1 -1
  56. package/esm2022/lib/constants/api.constants.mjs +0 -8
  57. package/esm2022/lib/constants/mock.mjs +0 -152
  58. package/esm2022/lib/interfaces/frequency.interface.mjs +0 -2
  59. package/esm2022/lib/sharedComponents/list-container/list-container.component.mjs +0 -52
  60. package/esm2022/lib/sharedComponents/program-list/constant.mjs +0 -16
  61. package/esm2022/lib/sharedComponents/program-list/interfaces/data-source.interface.mjs +0 -2
  62. package/esm2022/lib/sharedComponents/program-list/interfaces/list-item.interface.mjs +0 -2
  63. package/esm2022/lib/sharedComponents/program-list/pipes/check-selected-items.pipes.mjs +0 -23
  64. package/esm2022/lib/sharedComponents/program-list/program-list/program-list.component.mjs +0 -182
  65. package/esm2022/lib/sharedComponents/program-list/program-list.module.mjs +0 -47
  66. package/esm2022/lib/sharedComponents/program-list/services/list-utils.service.mjs +0 -27
  67. package/esm2022/lib/sharedComponents/program-list/services/program-list-api.service.mjs +0 -32
  68. package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +0 -24
  69. package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +0 -19
  70. package/lib/constants/api.constants.d.ts +0 -7
  71. package/lib/constants/mock.d.ts +0 -15
  72. package/lib/interfaces/frequency.interface.d.ts +0 -37
  73. package/lib/sharedComponents/list-container/list-container.component.d.ts +0 -9
  74. package/lib/sharedComponents/program-list/constant.d.ts +0 -9
  75. package/lib/sharedComponents/program-list/interfaces/data-source.interface.d.ts +0 -4
  76. package/lib/sharedComponents/program-list/interfaces/list-item.interface.d.ts +0 -5
  77. package/lib/sharedComponents/program-list/pipes/check-selected-items.pipes.d.ts +0 -7
  78. package/lib/sharedComponents/program-list/program-list/program-list.component.d.ts +0 -45
  79. package/lib/sharedComponents/program-list/program-list.module.d.ts +0 -14
  80. package/lib/sharedComponents/program-list/services/list-utils.service.d.ts +0 -7
  81. package/lib/sharedComponents/program-list/services/program-list-api.service.d.ts +0 -14
  82. package/lib/ui-kit/loaders/loaders.module.d.ts +0 -8
  83. package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +0 -9
@@ -5,7 +5,6 @@ import { DEFAULT_24HR, DEFAULT_TIME } from '../constants/time.constants';
5
5
  import { CONSTANTS } from '../link-related-policies/constants';
6
6
  import { LINKS } from '../workflow/shared/constants/cdn-link.constant';
7
7
  import { ASSETS } from '../constants/assets.constants';
8
- import { PROGRAM_LIST_API } from '../constants/api.constants';
9
8
  import * as i0 from "@angular/core";
10
9
  import * as i1 from "../workflow-services/policy.service";
11
10
  import * as i2 from "../ui-kit/snack-bar/snack-bar.service";
@@ -21,24 +20,24 @@ import * as i11 from "../workflow-services/organization-user.service";
21
20
  import * as i12 from "../workflow-services/common-workflow-services/organization-common.service";
22
21
  import * as i13 from "../workflow-services/common-workflow-services/compliance-common.service";
23
22
  import * as i14 from "../services/iframe.service";
24
- import * as i15 from "@angular/forms";
25
- import * as i16 from "@vcomply/editor";
26
- import * as i17 from "../formgroup/cs-radio/cs-radio.component";
27
- import * as i18 from "../formgroup/cs-switch/cs-switch.component";
28
- import * as i19 from "../ui-kit/tooltip/tooltip.directive";
29
- import * as i20 from "../ui-kit/popover/popover.component";
30
- import * as i21 from "../ui-kit/popover/popover.directive";
31
- import * as i22 from "../formgroup/select/cs-select/cs-select.component";
32
- import * as i23 from "../formgroup/select/cs-option/cs-option.component";
33
- import * as i24 from "ng2-date-picker";
34
- import * as i25 from "../sharedComponents/v-loader/loader-inline/loader-inline.component";
35
- import * as i26 from "../workflow-program/create-program-ui/user-group-list/user-group-list.component";
36
- import * as i27 from "../sharedComponents/responsibility-centers-list/responsibility-centers-list.component";
37
- import * as i28 from "../sharedComponents/group-users-list/group-users-list.component";
38
- import * as i29 from "../sharedComponents/policy-template/select-template-list/select-template-list.component";
39
- import * as i30 from "../sharedComponents/format-and-evidence/format-and-evidence.component";
40
- import * as i31 from "../sharedComponents/checkbox-list/checkbox-list.component";
41
- import * as i32 from "../sharedComponents/program-list/program-list/program-list.component";
23
+ import * as i15 from "../workflow-services/common-workflow-services/common-route.service";
24
+ import * as i16 from "@angular/forms";
25
+ import * as i17 from "@vcomply/editor";
26
+ import * as i18 from "../formgroup/cs-radio/cs-radio.component";
27
+ import * as i19 from "../formgroup/cs-switch/cs-switch.component";
28
+ import * as i20 from "../ui-kit/tooltip/tooltip.directive";
29
+ import * as i21 from "../ui-kit/popover/popover.component";
30
+ import * as i22 from "../ui-kit/popover/popover.directive";
31
+ import * as i23 from "../formgroup/select/cs-select/cs-select.component";
32
+ import * as i24 from "../formgroup/select/cs-option/cs-option.component";
33
+ import * as i25 from "ng2-date-picker";
34
+ import * as i26 from "../sharedComponents/v-loader/loader-inline/loader-inline.component";
35
+ import * as i27 from "../workflow-program/create-program-ui/user-group-list/user-group-list.component";
36
+ import * as i28 from "../sharedComponents/responsibility-centers-list/responsibility-centers-list.component";
37
+ import * as i29 from "../sharedComponents/group-users-list/group-users-list.component";
38
+ import * as i30 from "../sharedComponents/policy-template/select-template-list/select-template-list.component";
39
+ import * as i31 from "../sharedComponents/format-and-evidence/format-and-evidence.component";
40
+ import * as i32 from "../sharedComponents/checkbox-list/checkbox-list.component";
42
41
  import * as i33 from "../sharedComponents/owner-list/owner-list.component";
43
42
  import * as i34 from "../sharedComponents/users-radio-list/users-radio-list.component";
44
43
  import * as i35 from "../sharedComponents/frequency/frequency-container/frequency-container.component";
@@ -49,9 +48,8 @@ import * as i39 from "../sharedComponents/approval-workflow/approval-workflow.co
49
48
  import * as i40 from "../sharedComponents/policy-access/policy-access.component";
50
49
  import * as i41 from "../sharedComponents/link-program/link-program/link-program.component";
51
50
  import * as i42 from "../link-related-policies/link-related-policies.component";
52
- import * as i43 from "../sharedComponents/list-container/list-container.component";
53
51
  export class WorkflowPolicyComponent {
54
- constructor(policyService, snackBar, uiKitService, authService, responsibilityService, router, route, frequencyService, platformLocation, changeRef, restApiService, commonService, organizationUserService, organizationCommonService, complianceCommonService, iframeService) {
52
+ constructor(policyService, snackBar, uiKitService, authService, responsibilityService, router, route, frequencyService, platformLocation, changeRef, restApiService, commonService, organizationUserService, organizationCommonService, complianceCommonService, iframeService, commonRouteService) {
55
53
  this.policyService = policyService;
56
54
  this.snackBar = snackBar;
57
55
  this.uiKitService = uiKitService;
@@ -67,6 +65,7 @@ export class WorkflowPolicyComponent {
67
65
  this.organizationCommonService = organizationCommonService;
68
66
  this.complianceCommonService = complianceCommonService;
69
67
  this.iframeService = iframeService;
68
+ this.commonRouteService = commonRouteService;
70
69
  this.ASSETS = ASSETS;
71
70
  this.CONSTANTS = CONSTANTS;
72
71
  this.LINKS = LINKS;
@@ -222,10 +221,6 @@ export class WorkflowPolicyComponent {
222
221
  this.templateView = false;
223
222
  this.templateUrl = '';
224
223
  this.isTemplateClosed = true;
225
- this.programListUrl = PROGRAM_LIST_API;
226
- this.selectedPrograms = {};
227
- this.allProgamSelected = [];
228
- this.linkProgram = {};
229
224
  this.policyForm = {
230
225
  policyName: '',
231
226
  policyNotes: '',
@@ -299,7 +294,6 @@ export class WorkflowPolicyComponent {
299
294
  ngOnInit() {
300
295
  this._initiateAPI();
301
296
  this.overseerGroupList();
302
- this.getLinkProgram();
303
297
  }
304
298
  _initiateAPI() {
305
299
  this.groupEnabled =
@@ -1003,8 +997,16 @@ export class WorkflowPolicyComponent {
1003
997
  this.removeWorkflow();
1004
998
  break;
1005
999
  case 'linkProgram':
1006
- this.allProgamSelected = this.allProgamSelected.filter((program) => program?.id !== event?.id);
1007
- this.removeProgram(event);
1000
+ this.policyForm.linkProgram = {
1001
+ added: [],
1002
+ removed: [
1003
+ {
1004
+ policyIds: [this.policyForm?.policy_id ?? 0],
1005
+ programId: this.selectedLinkProgram?._id,
1006
+ },
1007
+ ],
1008
+ };
1009
+ this.policyForm.programSelectedValues = {};
1008
1010
  this.refreshAllLists();
1009
1011
  break;
1010
1012
  case 'owners':
@@ -1341,7 +1343,6 @@ export class WorkflowPolicyComponent {
1341
1343
  const reviewerID = this.returnIds(policy.selectedReviewers, 'member_id');
1342
1344
  const policyAccessUsersIds = this.returnIds(policy.policy_access_owners, 'member_id') ?? [];
1343
1345
  const policyAccessGroupsIds = this.returnIds(policy.policy_access_groups, '_id') ?? [];
1344
- const linkProgram = this.commonService.transformProgramData(this.selectedPrograms, this.linkProgram?.program?.linked);
1345
1346
  const payload = {
1346
1347
  policy_name: policy.policyName,
1347
1348
  notes: policy.policyNotes,
@@ -1429,7 +1430,12 @@ export class WorkflowPolicyComponent {
1429
1430
  approval_workflow_id: policy?.selectedApprovers[0]?._id
1430
1431
  ? [policy?.selectedApprovers[0]?._id]
1431
1432
  : [],
1432
- linkProgram: linkProgram,
1433
+ linkProgram: Object.keys(policy?.linkProgram).length
1434
+ ? policy?.linkProgram
1435
+ : {
1436
+ added: [],
1437
+ removed: [],
1438
+ },
1433
1439
  business_cycle: Object.keys(policy?.linkProgram).length
1434
1440
  ? policy?.businessCycle
1435
1441
  : undefined,
@@ -1502,6 +1508,7 @@ export class WorkflowPolicyComponent {
1502
1508
  }
1503
1509
  }
1504
1510
  linkDocumentWithPolicy(document) {
1511
+ let url = '';
1505
1512
  if (document.fileName &&
1506
1513
  (document.fileExtension === 'pdf' ||
1507
1514
  document.fileExtension === 'PDF' ||
@@ -1515,18 +1522,15 @@ export class WorkflowPolicyComponent {
1515
1522
  this.loader = false;
1516
1523
  if (document.fileExtension === 'docx' ||
1517
1524
  document.fileExtension === 'DOCX') {
1518
- this.router.navigate(['/policy/edit-policy'], {
1519
- queryParams: { id: this.policyId },
1520
- relativeTo: this.route,
1521
- });
1525
+ url = this.baseURL + '/all/policy/edit-policy?id=' + this.policyId;
1526
+ console.log(url, 'url');
1522
1527
  }
1523
1528
  else if (document.fileExtension === 'pdf' ||
1524
1529
  document.fileExtension === 'PDF') {
1525
- this.router.navigate(['/policy/workroom'], {
1526
- queryParams: { id: this.policyId },
1527
- relativeTo: this.route,
1528
- });
1530
+ url = this.baseURL + '/all/policy/workroom?id=' + this.policyId;
1531
+ console.log(url, 'url');
1529
1532
  }
1533
+ this.commonRouteService.navigateTo(url);
1530
1534
  }
1531
1535
  }
1532
1536
  }, (err) => {
@@ -1616,7 +1620,6 @@ export class WorkflowPolicyComponent {
1616
1620
  }, (error) => {
1617
1621
  console.error(error);
1618
1622
  });
1619
- this.getLinkProgram();
1620
1623
  }
1621
1624
  }
1622
1625
  populatePolicyForm(data, categoryIds) {
@@ -1965,60 +1968,13 @@ export class WorkflowPolicyComponent {
1965
1968
  navigateToTemplate() {
1966
1969
  this.iframeService.redirectIfInIframe(this.templateUrl, true);
1967
1970
  }
1968
- onItemsSelectedChange(items) {
1969
- this.selectedPrograms = items;
1970
- this.allProgamSelected = [].concat(...Object.values(items));
1971
- // console.log('allProgamSelected', this.selectedPrograms,this.allProgamSelected);
1972
- }
1973
- selectCategory() {
1974
- this.allProgamSelected = [].concat(...Object.values(this.selectedPrograms));
1975
- console.log('allProgamSelected', this.selectedPrograms, this.allProgamSelected);
1976
- }
1977
- removeProgram(program) {
1978
- const keys = Object.keys(this.selectedPrograms);
1979
- keys.forEach((key) => {
1980
- const index = this.selectedPrograms[key].findIndex((item) => item?.id === program?.id);
1981
- if (index !== -1) {
1982
- this.selectedPrograms[key].splice(index, 1);
1983
- }
1984
- });
1985
- }
1986
- // TODO: Remove this after testing
1987
- // Get linked program data
1988
- getLinkProgram() {
1989
- this.linkProgram = {
1990
- "program": {
1991
- "linked": [
1992
- 11,
1993
- 12
1994
- ],
1995
- "data": [
1996
- {
1997
- "id": 1,
1998
- "name": "P1",
1999
- "parentId": null
2000
- },
2001
- {
2002
- "id": 3,
2003
- "name": "P3 updated",
2004
- "parentId": null
2005
- },
2006
- {
2007
- "id": 4,
2008
- "name": "P3.1",
2009
- "parentId": 3
2010
- }
2011
- ]
2012
- }
2013
- };
2014
- }
2015
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, deps: [{ token: i1.PolicyService }, { token: i2.SnackBarService }, { token: i3.UiKitService }, { token: i4.AuthService }, { token: i5.ResponsibilityService }, { token: i6.Router }, { token: i6.ActivatedRoute }, { token: i7.FrequencyService }, { token: i8.PlatformLocation }, { token: i0.ChangeDetectorRef }, { token: i9.RestApiService }, { token: i10.CommonService }, { token: i11.OrganizationUserService }, { token: i12.OrganizationCommonService }, { token: i13.ComplianceCommonService }, { token: i14.IframeService }], target: i0.ɵɵFactoryTarget.Component }); }
2016
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowPolicyComponent, selector: "app-workflow-policy", inputs: { mode: "mode", policyId: "policyId", feature: "feature", convertFileData: "convertFileData", selectedCategory: "selectedCategory", isSendForAttestation: "isSendForAttestation", templateId: "templateId" }, outputs: { pickerChanged: "pickerChanged", showConfirmationAlert: "showConfirmationAlert", populateOption: "populateOption", disconnectRefresh: "disconnectRefresh", shiftToEditMode: "shiftToEditMode" }, host: { listeners: { "document:click": "documentClick($event)" } }, viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "formatEvidence", first: true, predicate: ["formatEvidence"], descendants: true }, { propertyName: "datePickerPopUp", first: true, predicate: ["datePicker"], descendants: true, read: ElementRef }], ngImport: i0, template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n [src]=\"ASSETS.what\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n [src]=\"ASSETS.case_category\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.when\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n [src]=\"ASSETS.im_creating\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img *ngIf=\"!policyForm?.addReviewers\" src=\"ASSETS.reviewer\" alt=\"\" />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\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 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.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\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\"\n appPopover\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.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 approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n [src]=\"ASSETS.lock_scope\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.attestations\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n [src]=\"ASSETS.case_assignees\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n [src]=\"ASSETS.responsibility_center\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n [src]=\"ASSETS.associated_risks\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n [src]=\"ASSETS.reviewer\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n [src]=\"ASSETS.oversight\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\n >\n <button\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)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\n >\n <button\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)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n [src]=\"ASSETS.format_evidence\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n allProgamSelected?.length > 0\n \"\n >\n <img\n *ngIf=\"allProgamSelected?.length == 0\"\n [src]=\"ASSETS.link_items\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"allProgamSelected?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"allProgamSelected?.length === 0\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"allProgamSelected?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', allProgamSelected[0])\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"allProgamSelected[0]?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ allProgamSelected[0]?.name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"allProgamSelected?.length > 1\"\n type=\"button\"\n appPopover\n placement=\"left\"\n (click)=\"programResponsibilityPopover.popover()\" \n >\n +{{ allProgamSelected?.length - 1 }}\n </button>\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of allProgamSelected | slice : 1\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n data?.name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i (click)=\"remove('linkProgram', data)\" class=\"icons\">&#xe90d;</i>\n {{ data?.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n [src]=\"ASSETS.assessments\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram' && false\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <!-- Program List Popup -->\n<app-list-container\n*ngIf=\"activeSelector === 'linkProgram'\"\n(close)=\"activeDeselector()\"\n>\n <app-program-list\n body\n (itemsSelectedChange)=\"onItemsSelectedChange($event)\"\n [selectedItems]=\"selectedPrograms\"\n [url]=\"programListUrl\"\n ></app-program-list>\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-w-100\" footer>\n <div class=\"left-side vx-fs-12 vx-d-flex\">\n <ng-container *ngIf=\"allProgamSelected.length > 0\">\n <button class=\"countPolicyBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"> {{ allProgamSelected.length }}</button> \n <span class=\"selected-text\"> Program {{allProgamSelected.length > 1 ? 'Categories' : 'Category'}} Selected</span>\n </ng-container>\n </div>\n <div class=\"right-side vx-d-flex\">\n <button class=\"cancelBtn\" (click)=\"disableSelector()\">Cancel</button>\n <button class=\"nextBtn\" (click)=\"disableSelector(); selectCategory()\">\n Next <i class=\"icons\">&#xe91e;</i>\n </button>\n </div>\n </div>\n</app-list-container>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [feature]=\"feature\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n [feature]=\"feature\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}.left-side{color:#707070}.right-side button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}.right-side button i{margin-left:8px;font-size:11px}.right-side button:disabled{background:#f1f1f1!important;color:#747576!important;opacity:1}.right-side button.cancelBtn{background:transparent!important;color:#eb2424!important}.countPolicyBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem;position:relative}.selected-text{color:#707070;font-size:11px;font-weight:500;position:fixed;padding-left:2.5rem}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.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\";@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/padding/padding.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/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .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}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;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}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .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)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"], dependencies: [{ kind: "directive", type: i15.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: i15.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i16.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i17.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i18.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i19.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i20.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i21.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i22.CsSelectComponent, selector: "cs-select", inputs: ["dropdownLabel", "dropdownSubLabel", "isRequired", "placeholder", "setMaxWidth"], outputs: ["valueChanged"] }, { kind: "component", type: i23.CsOptionComponent, selector: "cs-option", inputs: ["value", "color", "backgroundColor", "optionTooltip"] }, { kind: "component", type: i24.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "component", type: i25.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i26.UserGroupListComponent, selector: "user-group-list", inputs: ["groupEnabled", "panelTitle", "singleSelect", "selectedReviewer", "featureflag", "reviewerWorkflowType", "mode", "fieldType", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds", "FromProgram", "userListInfo", "groupListInfo", "fromApprovalWorkflow", "approvalType", "showFutureUsersSwitch", "futureUsersWillSelect", "isAllDisabled", "isGroupTabShow", "disabledIds", "nonRemovableUserIds", "allUserSelectedDisabled", "nonRemovableGroupIds", "loading", "userlist", "selectedUsers", "defaultSelectedUsers", "userType", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i27.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i28.GroupUsersListComponent, selector: "app-group-users-list", inputs: ["groupsEnabled", "usersList", "groupsList", "selectedUsers", "userIdKey", "groupIdKey", "openedFrom", "selectedGroups", "assigneeGroupsList", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "loader", "isDisabledSelected"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i29.SelectTemplateListComponent, selector: "app-select-template-list", inputs: ["selectedCategoryId", "feature"], outputs: ["onTemplateSelect"] }, { kind: "component", type: i30.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData"], outputs: ["updateFiles"] }, { kind: "component", type: i31.CheckboxListComponent, selector: "app-checkbox-list", inputs: ["itemsList", "selectedItems", "identifierKey", "displayKey", "tooltipKey", "config", "twoColumn", "loaded"], outputs: ["closeList", "saveList"] }, { kind: "component", type: i32.ProgramListComponent, selector: "app-program-list", inputs: ["items", "selectedItems", "url"], outputs: ["itemSelected", "itemDeselected", "itemsSelectedChange"] }, { kind: "component", type: i33.OwnerListComponent, selector: "app-owner-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "showWorkflow", "listHeading", "searchPlaceholder", "pluralText", "singularText", "reviewerWorkflowType", "mode", "noDataText", "workflowList", "workflowText", "disabledIds", "nonRemovableUsersList", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds"], outputs: ["saveSelectedList", "closeUsersList", "reviewerWorkflowTypeChange"] }, { kind: "component", type: i34.UserRadioListComponent, selector: "app-users-radio-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "headerText", "loaded"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i35.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i36.CheckpointsPolicyContainerComponent, selector: "app-checkpoints-policy-container", inputs: ["requiredPoint", "checkpointData"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i37.DocumentSectionComponent, selector: "lib-document-section", inputs: ["selectedDocumentType", "feature", "templateView", "policyId", "policyName", "organization_id", "member_obj_id", "userInfo", "templateUrl", "isTemplateOpened"], outputs: ["disconnectRefresh", "editPolicy", "openTemplate"] }, { kind: "component", type: i38.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i39.ApprovalWorkflowComponent, selector: "app-approval-workflow", inputs: ["approverWorkFlowList", "allApprovers", "selectedCategory", "editApprovalWorkflow", "createApprovalClick", "editWorkflowLevel"], outputs: ["selectedWorkflowNext", "listCancelClicked", "saveApprovalWorkflow", "closeCreateClicked"] }, { kind: "component", type: i40.PolicyAccessComponent, selector: "app-policy-access", inputs: ["policyAccessType", "SelectedCategory", "orgUsersList", "groupList", "selectedUsers", "selectedGroups", "disabledIds", "usersAccessList", "groupsAccessList", "disabledGroupIds", "futureUsersWillSelect"], outputs: ["close", "saveCheckPoint", "setPolicyAccessType"] }, { kind: "component", type: i41.LinkProgramComponent, selector: "vc-link-program", inputs: ["policy", "currentTab", "mode", "programsList", "selectedProgram", "selectedCategories", "selectedLinkProgram", "hideProgramsList"], outputs: ["changeTab", "updatedProgramDetails", "save", "close", "refreshLinkedPolicies"] }, { kind: "component", type: i42.LinkRelatedPoliciesComponent, selector: "app-link-related-policies", inputs: ["selectedPolicies", "mode", "policyId"], outputs: ["closeLinkPolicyList", "selectedList"] }, { kind: "component", type: i43.ListContainerComponent, selector: "app-list-container", inputs: ["heading"], outputs: ["close"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
1971
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, deps: [{ token: i1.PolicyService }, { token: i2.SnackBarService }, { token: i3.UiKitService }, { token: i4.AuthService }, { token: i5.ResponsibilityService }, { token: i6.Router }, { token: i6.ActivatedRoute }, { token: i7.FrequencyService }, { token: i8.PlatformLocation }, { token: i0.ChangeDetectorRef }, { token: i9.RestApiService }, { token: i10.CommonService }, { token: i11.OrganizationUserService }, { token: i12.OrganizationCommonService }, { token: i13.ComplianceCommonService }, { token: i14.IframeService }, { token: i15.CommonRouteService }], target: i0.ɵɵFactoryTarget.Component }); }
1972
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowPolicyComponent, selector: "app-workflow-policy", inputs: { mode: "mode", policyId: "policyId", feature: "feature", convertFileData: "convertFileData", selectedCategory: "selectedCategory", isSendForAttestation: "isSendForAttestation", templateId: "templateId" }, outputs: { pickerChanged: "pickerChanged", showConfirmationAlert: "showConfirmationAlert", populateOption: "populateOption", disconnectRefresh: "disconnectRefresh", shiftToEditMode: "shiftToEditMode" }, host: { listeners: { "document:click": "documentClick($event)" } }, viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "formatEvidence", first: true, predicate: ["formatEvidence"], descendants: true }, { propertyName: "datePickerPopUp", first: true, predicate: ["datePicker"], descendants: true, read: ElementRef }], ngImport: i0, template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n [src]=\"ASSETS.what\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n [src]=\"ASSETS.case_category\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.when\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n [src]=\"ASSETS.im_creating\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img *ngIf=\"!policyForm?.addReviewers\" src=\"ASSETS.reviewer\" alt=\"\" />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\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 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.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\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\"\n appPopover\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.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 approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n [src]=\"ASSETS.lock_scope\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.attestations\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n [src]=\"ASSETS.case_assignees\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n [src]=\"ASSETS.responsibility_center\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n [src]=\"ASSETS.associated_risks\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n [src]=\"ASSETS.reviewer\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n [src]=\"ASSETS.oversight\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\n >\n <button\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)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\n >\n <button\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)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n [src]=\"ASSETS.format_evidence\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.programSelectedValues?.program?.category_id\n \"\n >\n <img\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n [src]=\"ASSETS.link_items\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', policyForm?.programSelectedValues)\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.programSelectedValues?.program?.name }}</span\n >\n <!-- <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"programResponsibilityPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button> -->\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n 'Reporting information security weaknesses'\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Reporting information security weaknesses\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n [src]=\"ASSETS.assessments\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram'\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [feature]=\"feature\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n [feature]=\"feature\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.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\";@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/padding/padding.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/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .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}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;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}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .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)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"], dependencies: [{ kind: "directive", type: i16.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: i16.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i17.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i18.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i19.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i20.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i21.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i22.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i23.CsSelectComponent, selector: "cs-select", inputs: ["dropdownLabel", "dropdownSubLabel", "isRequired", "placeholder", "setMaxWidth"], outputs: ["valueChanged"] }, { kind: "component", type: i24.CsOptionComponent, selector: "cs-option", inputs: ["value", "color", "backgroundColor", "optionTooltip"] }, { kind: "component", type: i25.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "component", type: i26.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i27.UserGroupListComponent, selector: "user-group-list", inputs: ["groupEnabled", "panelTitle", "singleSelect", "selectedReviewer", "featureflag", "reviewerWorkflowType", "mode", "fieldType", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds", "FromProgram", "userListInfo", "groupListInfo", "fromApprovalWorkflow", "approvalType", "showFutureUsersSwitch", "futureUsersWillSelect", "isAllDisabled", "isGroupTabShow", "disabledIds", "nonRemovableUserIds", "allUserSelectedDisabled", "nonRemovableGroupIds", "loading", "userlist", "selectedUsers", "defaultSelectedUsers", "userType", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i28.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i29.GroupUsersListComponent, selector: "app-group-users-list", inputs: ["groupsEnabled", "usersList", "groupsList", "selectedUsers", "userIdKey", "groupIdKey", "openedFrom", "selectedGroups", "assigneeGroupsList", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "loader", "isDisabledSelected"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i30.SelectTemplateListComponent, selector: "app-select-template-list", inputs: ["selectedCategoryId", "feature"], outputs: ["onTemplateSelect"] }, { kind: "component", type: i31.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData"], outputs: ["updateFiles"] }, { kind: "component", type: i32.CheckboxListComponent, selector: "app-checkbox-list", inputs: ["itemsList", "selectedItems", "identifierKey", "displayKey", "tooltipKey", "config", "twoColumn", "loaded"], outputs: ["closeList", "saveList"] }, { kind: "component", type: i33.OwnerListComponent, selector: "app-owner-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "showWorkflow", "listHeading", "searchPlaceholder", "pluralText", "singularText", "reviewerWorkflowType", "mode", "noDataText", "workflowList", "workflowText", "disabledIds", "nonRemovableUsersList", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds"], outputs: ["saveSelectedList", "closeUsersList", "reviewerWorkflowTypeChange"] }, { kind: "component", type: i34.UserRadioListComponent, selector: "app-users-radio-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "headerText", "loaded"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i35.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i36.CheckpointsPolicyContainerComponent, selector: "app-checkpoints-policy-container", inputs: ["requiredPoint", "checkpointData"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i37.DocumentSectionComponent, selector: "lib-document-section", inputs: ["selectedDocumentType", "feature", "templateView", "policyId", "policyName", "organization_id", "member_obj_id", "userInfo", "templateUrl", "isTemplateOpened"], outputs: ["disconnectRefresh", "editPolicy", "openTemplate"] }, { kind: "component", type: i38.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i39.ApprovalWorkflowComponent, selector: "app-approval-workflow", inputs: ["approverWorkFlowList", "allApprovers", "selectedCategory", "editApprovalWorkflow", "createApprovalClick", "editWorkflowLevel"], outputs: ["selectedWorkflowNext", "listCancelClicked", "saveApprovalWorkflow", "closeCreateClicked"] }, { kind: "component", type: i40.PolicyAccessComponent, selector: "app-policy-access", inputs: ["policyAccessType", "SelectedCategory", "orgUsersList", "groupList", "selectedUsers", "selectedGroups", "disabledIds", "usersAccessList", "groupsAccessList", "disabledGroupIds", "futureUsersWillSelect"], outputs: ["close", "saveCheckPoint", "setPolicyAccessType"] }, { kind: "component", type: i41.LinkProgramComponent, selector: "vc-link-program", inputs: ["policy", "currentTab", "mode", "programsList", "selectedProgram", "selectedCategories", "selectedLinkProgram", "hideProgramsList"], outputs: ["changeTab", "updatedProgramDetails", "save", "close", "refreshLinkedPolicies"] }, { kind: "component", type: i42.LinkRelatedPoliciesComponent, selector: "app-link-related-policies", inputs: ["selectedPolicies", "mode", "policyId"], outputs: ["closeLinkPolicyList", "selectedList"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
2017
1973
  }
2018
1974
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, decorators: [{
2019
1975
  type: Component,
2020
- args: [{ selector: 'app-workflow-policy', template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n [src]=\"ASSETS.what\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n [src]=\"ASSETS.case_category\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.when\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n [src]=\"ASSETS.im_creating\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img *ngIf=\"!policyForm?.addReviewers\" src=\"ASSETS.reviewer\" alt=\"\" />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\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 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.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\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\"\n appPopover\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.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 approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n [src]=\"ASSETS.lock_scope\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.attestations\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n [src]=\"ASSETS.case_assignees\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n [src]=\"ASSETS.responsibility_center\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n [src]=\"ASSETS.associated_risks\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n [src]=\"ASSETS.reviewer\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n [src]=\"ASSETS.oversight\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\n >\n <button\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)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\n >\n <button\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)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n [src]=\"ASSETS.format_evidence\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n allProgamSelected?.length > 0\n \"\n >\n <img\n *ngIf=\"allProgamSelected?.length == 0\"\n [src]=\"ASSETS.link_items\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"allProgamSelected?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"allProgamSelected?.length === 0\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"allProgamSelected?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', allProgamSelected[0])\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"allProgamSelected[0]?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ allProgamSelected[0]?.name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"allProgamSelected?.length > 1\"\n type=\"button\"\n appPopover\n placement=\"left\"\n (click)=\"programResponsibilityPopover.popover()\" \n >\n +{{ allProgamSelected?.length - 1 }}\n </button>\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of allProgamSelected | slice : 1\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n data?.name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i (click)=\"remove('linkProgram', data)\" class=\"icons\">&#xe90d;</i>\n {{ data?.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n [src]=\"ASSETS.assessments\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram' && false\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <!-- Program List Popup -->\n<app-list-container\n*ngIf=\"activeSelector === 'linkProgram'\"\n(close)=\"activeDeselector()\"\n>\n <app-program-list\n body\n (itemsSelectedChange)=\"onItemsSelectedChange($event)\"\n [selectedItems]=\"selectedPrograms\"\n [url]=\"programListUrl\"\n ></app-program-list>\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-w-100\" footer>\n <div class=\"left-side vx-fs-12 vx-d-flex\">\n <ng-container *ngIf=\"allProgamSelected.length > 0\">\n <button class=\"countPolicyBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"> {{ allProgamSelected.length }}</button> \n <span class=\"selected-text\"> Program {{allProgamSelected.length > 1 ? 'Categories' : 'Category'}} Selected</span>\n </ng-container>\n </div>\n <div class=\"right-side vx-d-flex\">\n <button class=\"cancelBtn\" (click)=\"disableSelector()\">Cancel</button>\n <button class=\"nextBtn\" (click)=\"disableSelector(); selectCategory()\">\n Next <i class=\"icons\">&#xe91e;</i>\n </button>\n </div>\n </div>\n</app-list-container>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [feature]=\"feature\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n [feature]=\"feature\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}.left-side{color:#707070}.right-side button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}.right-side button i{margin-left:8px;font-size:11px}.right-side button:disabled{background:#f1f1f1!important;color:#747576!important;opacity:1}.right-side button.cancelBtn{background:transparent!important;color:#eb2424!important}.countPolicyBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem;position:relative}.selected-text{color:#707070;font-size:11px;font-weight:500;position:fixed;padding-left:2.5rem}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.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\";@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/padding/padding.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/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .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}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;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}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .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)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"] }]
2021
- }], ctorParameters: function () { return [{ type: i1.PolicyService }, { type: i2.SnackBarService }, { type: i3.UiKitService }, { type: i4.AuthService }, { type: i5.ResponsibilityService }, { type: i6.Router }, { type: i6.ActivatedRoute }, { type: i7.FrequencyService }, { type: i8.PlatformLocation }, { type: i0.ChangeDetectorRef }, { type: i9.RestApiService }, { type: i10.CommonService }, { type: i11.OrganizationUserService }, { type: i12.OrganizationCommonService }, { type: i13.ComplianceCommonService }, { type: i14.IframeService }]; }, propDecorators: { pickerChanged: [{
1976
+ args: [{ selector: 'app-workflow-policy', template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n [src]=\"ASSETS.what\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n [src]=\"ASSETS.case_category\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.when\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n [src]=\"ASSETS.im_creating\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img *ngIf=\"!policyForm?.addReviewers\" src=\"ASSETS.reviewer\" alt=\"\" />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\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 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.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\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\"\n appPopover\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.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 approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n [src]=\"ASSETS.lock_scope\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.attestations\" alt=\"\" />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n [src]=\"ASSETS.approval\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n [src]=\"ASSETS.case_assignees\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n [src]=\"ASSETS.responsibility_center\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n [src]=\"ASSETS.associated_risks\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n [src]=\"ASSETS.reviewer\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n [src]=\"ASSETS.oversight\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\n >\n <button\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)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\n </ng-container>\n <button\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)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\n >\n <button\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)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\n >\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n [src]=\"ASSETS.format_evidence\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.programSelectedValues?.program?.category_id\n \"\n >\n <img\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n [src]=\"ASSETS.link_items\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', policyForm?.programSelectedValues)\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.programSelectedValues?.program?.name }}</span\n >\n <!-- <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover\n (click)=\"programResponsibilityPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button> -->\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n 'Reporting information security weaknesses'\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Reporting information security weaknesses\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n [src]=\"ASSETS.assessments\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\n </ng-container>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram'\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [feature]=\"feature\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n [feature]=\"feature\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.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\";@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/padding/padding.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/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .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}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;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}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .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}::ng-deep .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}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .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)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"] }]
1977
+ }], ctorParameters: function () { return [{ type: i1.PolicyService }, { type: i2.SnackBarService }, { type: i3.UiKitService }, { type: i4.AuthService }, { type: i5.ResponsibilityService }, { type: i6.Router }, { type: i6.ActivatedRoute }, { type: i7.FrequencyService }, { type: i8.PlatformLocation }, { type: i0.ChangeDetectorRef }, { type: i9.RestApiService }, { type: i10.CommonService }, { type: i11.OrganizationUserService }, { type: i12.OrganizationCommonService }, { type: i13.ComplianceCommonService }, { type: i14.IframeService }, { type: i15.CommonRouteService }]; }, propDecorators: { pickerChanged: [{
2022
1978
  type: Output
2023
1979
  }], mode: [{
2024
1980
  type: Input
@@ -2055,4 +2011,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2055
2011
  type: HostListener,
2056
2012
  args: ['document:click', ['$event']]
2057
2013
  }] } });
2058
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXBvbGljeS93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcG9saWN5L3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBVzNDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUtuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPOUQsTUFBTSxPQUFPLHVCQUF1QjtJQStLbEMsWUFDVSxhQUE0QixFQUM1QixRQUF5QixFQUN6QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixxQkFBNEMsRUFDNUMsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUMxQyxnQkFBa0MsRUFDMUIsU0FB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RyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFdUIsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBRTNCLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBd3ZFNUQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICduZzItZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uQWxlcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpcm1hdGlvbi1hbGVydCc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbGljeUZvcm0gfSBmcm9tICcuLi93b3JrZmxvdy1pbnRlcmZhY2VzL2NyZWF0ZS1wb2xpY3ktZm9ybSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBQb2xpY3lTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcG9saWN5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZyZXF1ZW5jeVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtYXRBbmRFdmlkZW5jZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZm9ybWF0LWFuZC1ldmlkZW5jZS9mb3JtYXQtYW5kLWV2aWRlbmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvbGluay1wcm9ncmFtL3Jlc3RhcGkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUXzI0SFIsIERFRkFVTFRfVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cy90aW1lLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uVXNlclNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9vcmdhbml6YXRpb24tdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9jb21tb24td29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBsaWFuY2VDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvY29tbW9uLXdvcmtmbG93LXNlcnZpY2VzL2NvbXBsaWFuY2UtY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09OU1RBTlRTIH0gZnJvbSAnLi4vbGluay1yZWxhdGVkLXBvbGljaWVzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMSU5LUyB9IGZyb20gJy4uL3dvcmtmbG93L3NoYXJlZC9jb25zdGFudHMvY2RuLWxpbmsuY29uc3RhbnQnO1xuaW1wb3J0IHsgSWZyYW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2lmcmFtZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFTU0VUUyB9IGZyb20gJy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnRzJztcbmltcG9ydCB7IFBST0dSQU1fTElTVF9BUEkgfSBmcm9tICcuLi9jb25zdGFudHMvYXBpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0L2ludGVyZmFjZXMvbGlzdC1pdGVtLmludGVyZmFjZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd29ya2Zsb3ctcG9saWN5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93UG9saWN5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQVNTRVRTID0gQVNTRVRTO1xuICBDT05TVEFOVFM6IGFueSA9IENPTlNUQU5UUztcbiAgTElOS1M6IGFueSA9IExJTktTO1xuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xuICBASW5wdXQoKSBwb2xpY3lJZCA9ICcnO1xuICBASW5wdXQoKSBmZWF0dXJlOiBhbnk7XG4gIEBPdXRwdXQoKSBzaG93Q29uZmlybWF0aW9uQWxlcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcbiAgQE91dHB1dCgpIHBvcHVsYXRlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzaGlmdFRvRWRpdE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIGNvbnZlcnRGaWxlRGF0YTogYW55ID0ge307XG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2F0ZWdvcnkgPSAnJztcbiAgQElucHV0KCkgaXNTZW5kRm9yQXR0ZXN0YXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdGVtcGxhdGVJZDogc3RyaW5nID0gJyc7XG5cbiAgQFZpZXdDaGlsZCgnZm9ybWF0RXZpZGVuY2UnKSBmb3JtYXRFdmlkZW5jZSE6IEZvcm1hdEFuZEV2aWRlbmNlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIGRhdGVQaWNrZXJQb3BVcCE6IEVsZW1lbnRSZWY7XG5cbiAgZGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcbiAgICBtb2RlOiAncHJpbWUnLFxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcbiAgICBsaW5rOiB0cnVlLFxuICAgIHBsYWNlaG9sZGVyOiAnQWRkIGEgZGVzY3JpcHRpb24gZm9yIHRoaXMgcG9saWN5LicsXG4gIH07XG4gIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJztcbiAgc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcbiAgbmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBmYWxzZTtcblxuICBhY3RpdmVTZWxlY3RvciA9ICcnO1xuICByY0xpc3Q6IGFueSA9IFtdO1xuICB1c2Vyc0xpc3Q6IGFueSA9IFtdO1xuICBhbGxBcHByb3ZlcnM6IGFueSA9IFtdO1xuICBhbGxSZXZpZXdlcnM6IGFueSA9IFtdO1xuICBhc3NpZ25lZXNMaXN0OiBhbnkgPSBbXTtcbiAgb3duZXJsaXN0OiBhbnkgPSBbXTtcbiAgcmV2aWV3ZXJzTGlzdDogYW55ID0gW107XG4gIG92ZXJzZWVyc0xpc3Q6IGFueSA9IFtdO1xuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgdXNlcnNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGNhdGVnb3J5TGlzdDogYW55ID0gW107XG4gIGdyb3Vwc0xpc3Q6IGFueVtdID0gW107XG4gIHdvcmtGbG93TGlzdDogYW55W10gPSBbXTtcbiAgYXBwcm92ZXJXb3JrRmxvd0xpc3Q6IGFueVtdID0gW107XG4gIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBjY0VtYWlsT2JqSWRzOiBhbnlbXSA9IFtdO1xuICBjY0ZhaWxHcm91cE9iaklkczogYW55W10gPSBbXTtcbiAgdXNlcnNBY2Nlc3NMaXN0OiBhbnlbXSA9IFtdO1xuICB1c2Vyc0FjY2Vzc0xpc3RJZHM6IGFueVtdID0gW107XG4gIGdyb3Vwc0FjY2Vzc0xpc3RJZHM6IGFueVtdID0gW107XG4gIGdyb3Vwc0FjY2Vzc0xpc3Q6IGFueVtdID0gW107XG4gIFNlbGVjdGVkTGlzdE9mUG9saWNpZXM6IGFueVtdID0gW107XG5cbiAgbG9hZGVyID0gZmFsc2U7XG4gIGNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGdyb3Vwc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgY2F0ZWdvcnlDb25maWcgPSB7XG4gICAgcGFuZWxUaXRsZTogJ1NlbGVjdCBQb2xpY3kgQ2F0ZWdvcnknLFxuICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnUG9saWN5IENhdGVnb3J5IFNlbGVjdGVkJyxcbiAgICBmbG9hdGluZ1RleHRQbHVyYWw6ICdQb2xpY3kgQ2F0ZWdvcmllcyBTZWxlY3RlZCcsXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggUG9saWN5IENhdGVnb3J5JyxcbiAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXG4gICAgd29ya2Zsb3c6ICdwb2xpY3knLFxuICB9O1xuICBhcHByb3ZhbFdvcmtmbG93Q29uZmlnID0ge1xuICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgdXNlcihzKScsXG4gICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdVc2VyIHNlbGVjdGVkJyxcbiAgICBmbG9hdGluZ1RleHRQbHVyYWw6ICdVc2VycyBzZWxlY3RlZCcsXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXG4gICAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcbiAgICBzZWxlY3RBbGxFbmFibGVkOiB0cnVlLFxuICB9O1xuXG4gIGFkZE1vcmVMZXZlbHMgPSBmYWxzZTtcbiAgYXBwcm92ZXJzTGlzdEluZGV4ID0gMDtcbiAgd29ya2Zsb3dMaXN0ID0gWydTRVFVRU5USUFMJywgJ1JPVU5ELVJPQklOJywgJ0FOWSBPTkUnXTtcbiAgZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcbiAgZGF0ZUNvbmZpZyA9IHtcbiAgICBkaXNhYmxlS2V5cHJlc3M6IHRydWUsXG4gICAgZm9ybWF0OiAnREQgTU0gWVlZWScsXG4gICAgdW5TZWxlY3RPbkNsaWNrOiB0cnVlLFxuICAgIG9wZW5PbkNsaWNrOiBmYWxzZSxcbiAgICBvcGVuT25Gb2N1czogZmFsc2UsXG4gIH07XG4gIGZyZXF1ZW5jeURldGFpbHMgPSB7XG4gICAgcGF0dGVybjogJycsXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICBkYXRlT2ZNb2RpZmllZDogMCxcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgd2luZG93OiAwLFxuICAgIGZhaWxlZDogMCxcbiAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgZmFpbGVkVGltZTogJycsXG4gICAgY29udGludW91c19mYWlsZWRfZGF5czogMCxcbiAgfTtcbiAgcmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzID0ge1xuICAgIHBhdHRlcm46ICcnLFxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHdpbmRvdzogMCxcbiAgICBmYWlsZWQ6IDAsXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxuICAgIGZhaWxlZFRpbWU6ICcnLFxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDMsXG4gIH07XG4gIGZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ1doYXQgaXMgdGhlIGF0dGVzdGF0aW9uIHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeT8nO1xuICByZXZpZXdlckZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ1doZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkPyc7XG5cbiAgc2lkZVNlbGVjdG9yRWxlbWVudHMgPSBbXG4gICAgJ2FwcHJvdmFsV29ya2Zsb3cnLFxuICAgICdhc3NpZ25lZXMnLFxuICAgICdhcHByb3ZlcnMnLFxuICAgICdyZXZpZXdlcicsXG4gICAgJ2NjRW1haWwnLFxuICAgICdjY0ZhaWwnLFxuICAgICdyYycsXG4gICAgJ2NhdGVnb3J5JyxcbiAgICAnZnJlcXVlbmN5JyxcbiAgICAncmV2aWV3ZXJGcmVxdWVuY3knLFxuICAgICdjaGVja3BvaW50cycsXG4gICAgJ2xpbmtQcm9ncmFtJyxcbiAgICAnaXNBc3Nlc3NtZW50JyxcbiAgICAnaXNMaW5rZWRQb2xpY2VzJyxcbiAgICAnb3duZXJzJyxcbiAgICAncG9saWN5QWNjZXNzJyxcbiAgXTtcbiAgcmlza0NsYXNzaWZpY2F0aW9uID0gW1xuICAgIHsgbmFtZTogJ0xPVycsIHZhbHVlOiAxLCBjbGFzczogJ2xvdycgfSxcbiAgICB7IG5hbWU6ICdMT1ctTWVkaXVtJywgdmFsdWU6IDIsIGNsYXNzOiAnbG93LW1lZCcgfSxcbiAgICB7IG5hbWU6ICdNZWRpdW0tSGlnaCcsIHZhbHVlOiAzLCBjbGFzczogJ21lZC1oaWdoJyB9LFxuICAgIHsgbmFtZTogJ0hpZ2gnLCB2YWx1ZTogNCwgY2xhc3M6ICdoaWdoJyB9LFxuICBdO1xuICBzaG93Umlza0NsYXNzaWZpY2F0aW9uID0gdHJ1ZTtcbiAgc2hvd0NyZWF0ZURvY3VtZW50cyA9IGZhbHNlO1xuICBvcmdhbml6YXRpb25faWQgPSAnJztcbiAgbWVtYmVyX29ial9pZCA9ICcnO1xuICBtZW1iZXJJZCA9IDA7XG4gIHVzZXJJbmZvITogYW55O1xuXG4gIHBvbGljeUFwcHJvdmFsRmxhZyA9IDA7XG4gIGJhc2VVUkwgPSAnJztcbiAgZ3JvdXBFbmFibGVkOiBhbnkgPSB0cnVlO1xuICBvdmVyc2Vlckdyb3Vwc0xpc3Q6IGFueVtdID0gW107XG4gIGVuYWJsZUFwcHJvdmFsV29ya2Zsb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNWZXJzaW9uVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBzZWxlY3RlZExpbmtQcm9ncmFtOiBhbnkgPSB7fTtcbiAgdmVyc2lvbkVycm9yTWVzc2FnZTogc3RyaW5nID1cbiAgICAnWW91IGhhdmUgZW50ZXJlZCBhbiBpbmNvcnJlY3QgZm9ybWF0LiBUaGUgdmVyc2lvbiBmaWVsZCBjYW4gZWl0aGVyIGluY2x1ZGUgbnVtYmVycywgYWxwaGFiZXRzLCBoeXBoZW4gb3IgZG90cy4nO1xuICBzZWxlY3RlZFdvcmtmbG93OiBhbnlbXSA9IFtdO1xuICBlZGl0QXBwcm92YWxXb3JrZmxvdyE6IGFueTtcbiAgYXBwcm92YWxXb3JrZmxvd0lkczogYW55W10gPSBbXTtcbiAgZGVmYXVsdEVkaXRBcHByb3ZlcnM6IGFueSA9IHt9O1xuICBjcmVhdGVBcHByb3ZhbENsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRXb3JrZmxvd0xldmVsID0ge307XG4gIG5vV29ya2Zsb3dTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVtcGxhdGVVcmw6IHN0cmluZyA9ICcnO1xuICBpc1RlbXBsYXRlQ2xvc2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJvZ3JhbUxpc3RVcmw6IGFueSA9IFBST0dSQU1fTElTVF9BUEk7XG4gIHNlbGVjdGVkUHJvZ3JhbXM6IGFueSA9IHt9O1xuICBhbGxQcm9nYW1TZWxlY3RlZDogTGlzdEl0ZW1bXSA9IFtdO1xuICBsaW5rUHJvZ3JhbTogYW55ID0ge307XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9saWN5U2VydmljZTogUG9saWN5U2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lTZXJ2aWNlLFxuICAgIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBjaGFuZ2VSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVzdEFwaVNlcnZpY2U6IFJlc3RBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlOiBPcmdhbml6YXRpb25Vc2VyU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U6IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wbGlhbmNlQ29tbW9uU2VydmljZTogQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYmFzZVVSTCA9IGxvY2F0aW9uPy5vcmlnaW47XG4gICAgaWYgKHRoaXMuYmFzZVVSTCA9PSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJykge1xuICAgICAgdGhpcy5iYXNlVVJMID0gJ2h0dHBzOi8vZGV2LnYtY29tcGx5LmNvbSc7XG4gICAgfVxuICB9XG4gIHBvbGljeUZvcm06IFBvbGljeUZvcm0gPSB7XG4gICAgcG9saWN5TmFtZTogJycsXG4gICAgcG9saWN5Tm90ZXM6ICcnLFxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW10sXG4gICAgc2VsZWN0ZWRBcHByb3ZlcnM6IFtdLFxuICAgIHNlbGVjdGVkQXNzaWduZWVzOiBbXSwgLy9kb3VidCBpbiBuYW1lXG4gICAgc2VsZWN0ZWRHcm91cEFzc2lnbmVlOiBbXSxcbiAgICBzZWxlY3RlZFJldmlld2VyczogW10sXG5cbiAgICBzZWxlY3RlZFJDczogW10sXG4gICAgQ0NGYWlsRW1haWw6IFtdLFxuICAgIENDRmFpbEVtYWlsR3JvdXA6IFtdLFxuICAgIENDRW1haWw6IFtdLFxuICAgIENDR3JvdXBFbWFpbDogW10sXG4gICAgYXZhaWxhYmxlT25Qb3J0YWw6IGZhbHNlLFxuICAgIGFjY2VwdFN1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgICByZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uOiBmYWxzZSxcbiAgICByaXNrUmF0aW5nOiAxLFxuICAgIGFzc29jaWF0ZWREb2N1bWVudHM6IHtcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICB9LFxuICAgIHBvbGljeUR1ZURhdGU6IG1vbWVudCgpLFxuICAgIGN1c3RvbVRhZ3M6IFtdLFxuICAgIGNoZWNrcG9pbnREZXRhaWxzOiBbXSxcbiAgICBMaW5rZWRQb2xpY2llczogW10sXG4gICAgdG90YWxRdWVzdGlvbjogMCxcbiAgICBwYXNzaW5nTWFya3M6IDAsXG4gICAgZG9jdW1lbnRzQW5kTGlua3M6IHtcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcbiAgICB9LFxuICAgIGFkZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogZmFsc2UsXG4gICAgYWRkUmV2aWV3ZXJzOiBmYWxzZSxcbiAgICBhZGRDaGVja3BvaW50czogZmFsc2UsXG4gICAgYWRkT3ZlcnNlZXJzOiBmYWxzZSxcbiAgICBhZGRBc3NvY2lhdGVkRG9jdW1lbnRzOiBmYWxzZSxcbiAgICBhZGRWZXJzaW9uOiBmYWxzZSxcbiAgICBhZGRMaW5rQXNzZXNzbWVudDogZmFsc2UsXG4gICAgYWRkTGlua1Byb2dyYW06IGZhbHNlLFxuICAgIGFkZExpbmtQb2xpY2llczogZmFsc2UsXG4gICAgaXNQb3J0YWxEaXNwbGF5RW5hYmxlZDogZmFsc2UsXG5cbiAgICBmYWlsZWRfdGltZTogJycsXG4gICAgZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxuICAgIGZyZXF1ZW5jeV90ZXh0OiAnJyxcbiAgICBtYXJrX2ZhaWxlZF9hZnRlcjogMCxcbiAgICByZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGU6IDAsXG5cbiAgICByZXZpZXdGYWlsZWRBZnRlcjogMCxcbiAgICByZXZpZXdGYWlsZWRUaW1lOiAnJyxcbiAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxuICAgIHJldmlld19mcmVxdWVuY3lfdHlwZTogJycsXG4gICAgcmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogMCxcbiAgICByZXZpZXc6IGZhbHNlLFxuICAgIGxpbmtQcm9ncmFtOiB7fSxcbiAgICBwcm9ncmFtU2VsZWN0ZWRWYWx1ZXM6IHt9LFxuICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxuICAgIHJldmlld2VyX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxuICAgIHBvbGljeV92ZXJzaW9uOiAnJywgLy8gaXQgd2lsbCBhY2NlcHQgbWF0Y2hlcyBhbHBoYWJldHMsIGh5cGhlbnMgKC0pLCBkb3RzICguKSwgYW5kIG51bWVyaWMgdmFsdWVzIG9ubHkgYW5kIHNob3VsZCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIDYgY2hhcmFjdGVyc1xuICAgIGFzc2Vzc21lbnQ6IFtdLFxuICAgIHBvbGljeV9vd25lcnM6IFtdLFxuICAgIHBvbGljeV9ncm91cF9vd25lcnM6IFtdLFxuICAgIGJ1c2luZXNzQ3ljbGU6IHt9LFxuICAgIHBvbGljeV9pZDogMCxcbiAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IDAsXG4gICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IFtdLFxuICAgIHBvbGljeV9hY2Nlc3NfZ3JvdXBzOiBbXSxcbiAgfTtcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdGlhdGVBUEkoKTtcbiAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgdGhpcy5nZXRMaW5rUHJvZ3JhbSgpO1xuXG4gIH1cblxuICBfaW5pdGlhdGVBUEkoKSB7XG4gICAgdGhpcy5ncm91cEVuYWJsZWQgPVxuICAgICAgdGhpcy5mZWF0dXJlPy5pc0ZlYXR1cmVFbmFibGVkKCdmZl9wb2xpY3lfZ3JvdXBzJykgfHwgdHJ1ZTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcbiAgICAgIHRoaXMuX2luaXRpYXRlRWRpdEFQSSgpO1xuICAgIH1cbiAgICB0aGlzLmdldFVzZXJzTGlzdCgpO1xuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICB0aGlzLmxvYWRlciA9IHRoaXMubW9kZSA9PT0gJ0VESVQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuZ2V0T3JnRGV0YWlscygpO1xuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldFVzZXJEZXRhaWxzKCk/Ll9pZDtcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZT8uZ2V0VXNlckRldGFpbHMoKT8udXNlcjtcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZT8uZ2V0TWVtYmVySWQoKTtcbiAgICB0aGlzLmNoYW5nZVJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmJ1c2luZXNzQ3ljbGUgPSB0aGlzLnJlc3RBcGlTZXJ2aWNlPy5nZXRCdXNpbmVzc0N5Y2xlKCk7XG4gICAgLy90aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICB9XG5cbiAgX2luaXRpYXRlRWRpdEFQSSgpIHtcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcbiAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XG4gIH1cblxuICBnZXRPcmdEZXRhaWxzKCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnRGV0YWlsc0luZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXJlcz8uZW5hYmxlX3Jpc2tjbGFzcykge1xuICAgICAgICAgIHRoaXMuc2hvd1Jpc2tDbGFzc2lmaWNhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXM/Ll9pZCkge1xuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uX2lkID0gcmVzPy5faWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldExpbmtlZFBvbGljaWVzKHBvbGljeUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBvbGljeVNlcnZpY2UuTGlua2VkUG9saWNpZXNMaXN0KHBvbGljeUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzID0gWy4uLm5ldyBTZXQocmVzcG9uc2U/LmRhdGEpXS5yZXZlcnNlKCk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzPy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkXG4gICAgICAgICkubWFwKChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZCk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkID0gcmVzcG9uc2U/LmRpc3BsYXlPblBvcnRhbDtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgbGlzdGluZyBwYWdlcyB0aGUgbGVmdCBzaWRlIG9mIHBvbGljeSBmb3JtIHRvIHNldCBhbmQgZWRpdCB0aGUgZHJvcGRvd24gZmllbGRzIHZhbHVlc1xuICAgKiBAcGFyYW0gdHlwZSBob2xkcyBuYW1lIG9mIHBhcnRpY3VsYXIgbGlzdCBpcyB0byBiZSBkaXNwbGF5ZWRcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcbiAgICogQHBhcmFtIHdvcmtmbG93VHlwZSBpdCBzZXRzIHRoZSBhcHByb3ZhbCB3b3JrZmxvdyB0eXBlIHdoaWxlIGVkaXRpbmcgdGhlIGFwcHJvdmFsIHdvcmtmbG93LlxuICAgKi9cbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuLCB3b3JrZmxvd1R5cGU/OiBhbnkpIHtcbiAgICBpZiAod29ya2Zsb3dUeXBlKSB7XG4gICAgICB0aGlzLndvcmtmbG93VHlwZSA9IHdvcmtmbG93VHlwZTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncmMnOlxuICAgICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xuICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGxpc3RpbmcgcGFnZXNcbiAgICovXG4gIGRpc2FibGVTZWxlY3RvcigpIHtcbiAgICB0aGlzLmFkZE1vcmVMZXZlbHMgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgUmVzcG9uc2liaWxpdHkgY2VudGVycyBsaXN0XG4gICAqL1xuICBnZXRSQ0xpc3QoKSB7XG4gICAgdGhpcy5jb21wbGlhbmNlQ29tbW9uU2VydmljZT8uZ2V0UmNMaXN0SW5mbygpPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmNMaXN0ID0gcmVzO1xuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBsaXN0XG4gICAqL1xuICBnZXRVc2Vyc0xpc3QoKSB7XG4gICAgdGhpcy5vcmdhbml6YXRpb25Vc2VyU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2VycygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHRoaXMudXBkYXRlTWVtYmVySWRLZXkocmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMudXNlcnNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gcmVwbGFjZSBtZW1iZXJfaWQgdmFsdWUgdG8gbXlfbWVtYmVyX2lkXG4gIHVwZGF0ZU1lbWJlcklkS2V5KGxpc3Q6IGFueSkge1xuICAgIGxldCB1cGRhdGVkTGlzdCA9IGxpc3QubWFwKChlbGU6IGFueSkgPT4gKHtcbiAgICAgIC4uLmVsZSxcbiAgICAgIG1lbWJlcl9pZDogZWxlPy5teV9tZW1iZXJfaWQsXG4gICAgfSkpO1xuICAgIHJldHVybiB1cGRhdGVkTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIFBvbGljeSBDYXRlZ29yaWVzIGxpc3RcbiAgICovXG4gIGdldENhdGVnb3JpZXNMaXN0KCkge1xuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRDYXRlZ29yaWVzTGlzdCgpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IHJlcztcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb3JnYW5pemF0aW9uIHVzZXJzIGdyb3VwcyBsaXN0XG4gICAqL1xuICBnZXRHcm91cHNMaXN0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBvbGljeUdyb3VwcygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzLmRhdGE7XG4gICAgICAgIGNvbnN0IGdyb3VwczogYW55ID0gW107XG4gICAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGdyb3VwTmFtZTogZWxlbWVudC5ncm91cF9uYW1lLFxuICAgICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgZ3JvdXBzLnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvL0dldCB0aGUgbGlzdCBvZiBvdmVyc2VlcnMgZ3JvdXAuXG4gIG92ZXJzZWVyR3JvdXBMaXN0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlPy5nZXRPcmdhbml6YXRpb25PdmVyc2VlcnNHcm91cHMoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QgPSByZXM/LmRhdGE7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhcHByb3ZlcnMgd29ya2Zsb3cgZnJvbSB0aGUgc2VsZWN0ZWQgd29ya2Zsb3cgb24gQXBwcm92ZXJzIHdvcmtmbG93IGxpc3RcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHByZWRlZmluZWQgd29ya2Zsb3dcbiAgICovXG4gIHNlbGVjdGVkV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCA9PT0gLTEpIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtdO1xuICAgICAgLy8gdGhpcy5hZGRNb3JlTGV2ZWxzID0gdHJ1ZVxuICAgICAgLy8gdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRhdGEgPSBjbG9uZURlZXAoZXZlbnQuYXBwcm92YWxfd29ya2Zsb3cpO1xuICAgICAgY29uc3QgbmV3QXJyYXkgPSBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0ubmFtZSA9IGl0ZW0udHlwZTtcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbS5hcHByb3ZlcnMubWFwKChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWQpO1xuICAgICAgICBpdGVtLmFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbEFwcHJvdmVycywgaWRzLCAnbWVtYmVyX2lkJyk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBuZXdBcnJheS5maWx0ZXIoXG4gICAgICAgIChsZXZlbDogYW55KSA9PiBsZXZlbC5hcHByb3ZlcnMubGVuZ3RoID4gMFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBBcHByb3ZlcnMgd29ya2Zsb3cgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xuICAgKiBAcGFyYW0gaWQgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXG4gICAqL1xuICBnZXRBcHByb3ZlcldvcmtGbG93KGlkOiBhbnksIGRhdGE/OiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldFdvcmtmbG93TGlzdChpZCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5hcHByb3ZlcldvcmtGbG93TGlzdCA9IHJlczsgLy8gZ2V0dGluZyBhbGwgYXBwcm92ZXIgc2F2ZWQgd29ya2Zsb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XG4gICAgICAgICAgdGhpcy5hcHByb3ZlcldvcmtGbG93TGlzdD8uZm9yRWFjaCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHM/LmluY2x1ZGVzKHdvcmtmbG93Py5faWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ucHVzaCh3b3JrZmxvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhcHByb3ZhbERhdGE6IGFueSA9IFtdO1xuICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubm9Xb3JrZmxvd1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBhcHByb3ZhbFdvcmtmbG93OiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVXb3JrZmxvdygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycykuZm9yRWFjaCgoYXBwcm92ZXJzTGV2ZWwpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVyc1thcHByb3ZlcnNMZXZlbF0uYXBwcm92ZXJzID1cbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2FwcHJvdmVyc0xldmVsXT8uYXBwcm92ZXJzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAoYXBwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHAubWVtYmVyX25hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHByb3ZlclVzZXIgPSB0aGlzLnVzZXJzTGlzdD8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyOiBhbnkpID0+IHVzZXIubXlfbWVtYmVyX2lkID09IGFwcC5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlclVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5tZW1iZXJfbmFtZSA9IGFwcHJvdmVyVXNlcj8ubWVtYmVyX25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXBwcm92YWxXb3JrZmxvdy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDE6IGFwcHJvdmVyc0xldmVsLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBwcm92YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgICB3b3JrZmxvd19uYW1lOiAnJyxcbiAgICAgICAgICAgICAgd29ya2Zsb3dfbW9kdWxlOiAnUE9MSUNZJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHt9LFxuICAgICAgICAgICAgICBhcHByb3ZhbF93b3JrZmxvdzogYXBwcm92YWxXb3JrZmxvdyxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfYXJyOiBbXSxcbiAgICAgICAgICAgICAgY3JlYXRvcjoge30sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3QoXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBbZGF0YS5SZXZpZXdlck1lbWJlcklkXSxcbiAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvdygpIHtcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBbXTtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBbXTtcbiAgICB0aGlzLmVkaXRBcHByb3ZhbFdvcmtmbG93ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgQXBwcm92ZXJzIGFuZCByZXZpZXdlcnMgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xuICAgKiBAcGFyYW0gY2F0ZWdvcnlJZHMgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXG4gICAqL1xuICBnZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KFxuICAgIGNhdGVnb3J5SWRzOiBhbnksXG4gICAgYXBwcm92ZXJJZHM/OiBhbnksXG4gICAgcmV2aWV3ZXJJZHM/OiBhbnksXG4gICAgcG9saWN5PzogYW55XG4gICkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFsbEFwcHJvdmVycyA9IFtdO1xuICAgIHRoaXMuYWxsUmV2aWV3ZXJzID0gW107XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldFJldmlld2VycyhjYXRlZ29yeUlkcykuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgcmVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMgPSB1bmlxQnkoXG4gICAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLmNvbmNhdChlbGVtZW50LmFsbF9hcHByb3ZlcnMpLFxuICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzID0gdW5pcUJ5KFxuICAgICAgICAgICAgICBlbGVtZW50LmFsbF9hcHByb3ZlcnMuY29uY2F0KFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWxsX2F1dGhvcnNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykgdGhpcy5zZXRPd25lcnNPbkxvYWQoKTtcbiAgICAgICAgICAgIGlmIChwb2xpY3k/LnBvbGljeV9vd25lcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgICAgICAgICAgIHBvbGljeT8ucG9saWN5X293bmVycyA/PyBbXSxcbiAgICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRVc2Vyc0FjY2Vzc0xpc3RCeUNhdGVnb3J5KGVsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcHByb3Zlcklkcz8uYXBwcm92ZXJzKSB7XG4gICAgICAgICAgbGV0IG9iaiA9IGFwcHJvdmVySWRzPy5hcHByb3ZlcnM7XG4gICAgICAgICAgbGV0IGFwcHJvdmVyTGV2ZWxzID0gW107XG4gICAgICAgICAgLy8gZm9yICh2YXIgaXRlbSBpbiBvYmopIHtcbiAgICAgICAgICAvLyAgIGNvbnN0IGlkcyA9IG9ialtpdGVtXT8uYXBwcm92ZXJzPy5tYXAoXG4gICAgICAgICAgLy8gICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWRcbiAgICAgICAgICAvLyAgICk7XG5cbiAgICAgICAgICAvLyAgIGxldCBkYXRhID0ge1xuICAgICAgICAgIC8vICAgICBuYW1lOiBvYmpbaXRlbV0/LnR5cGUsXG4gICAgICAgICAgLy8gICAgIGFwcHJvdmVyczogdGhpcy5zZXRMaXN0KHRoaXMuYWxsQXBwcm92ZXJzLCBpZHMsICdtZW1iZXJfaWQnKSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gICBpZiAoZGF0YS5uYW1lID09ICdST1VORFJPQklOJykge1xuICAgICAgICAgIC8vICAgICBkYXRhLm5hbWUgPSAnUk9VTkQtUk9CSU4nO1xuICAgICAgICAgIC8vICAgfSBlbHNlIGlmIChkYXRhLm5hbWUgPT0gJ0FOWU9ORScpIHtcbiAgICAgICAgICAvLyAgICAgZGF0YS5uYW1lID0gJ0FOWSBPTkUnO1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgYXBwcm92ZXJMZXZlbHMucHVzaChkYXRhKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgaWYgKGFwcHJvdmVySWRzPy5hcHByb3ZlcnMpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSBhcHByb3Zlcklkcz8uYXBwcm92ZXJzO1xuICAgICAgICAgICAgbGV0IGFwcHJvdmVyTGV2ZWxzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIG9iaikge1xuICAgICAgICAgICAgICBjb25zdCBpZHMgPSBvYmpbaXRlbV0/LmFwcHJvdmVycz8ubWFwKFxuICAgICAgICAgICAgICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogb2JqW2l0ZW1dPy5uYW1lID8/IG9ialtpdGVtXT8udHlwZSxcbiAgICAgICAgICAgICAgICBhcHByb3ZlcnM6IG9ialtpdGVtXT8uYXBwcm92ZXJzLFxuICAgICAgICAgICAgICAgIGFwcHJvdmFsX2RvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxldmVsMTogb2JqW2l0ZW1dPy5sZXZlbDEgfHwgaXRlbSxcbiAgICAgICAgICAgICAgICBhbGlhc19uYW1lOiBvYmpbaXRlbV0/LmFsaWFzX25hbWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIC8vQ3JlYXRpbmcgaXNzdWUgaW4gYXBwcm92YWwgd29ya2Zsb3cgcGF5bG9hZCAodHlwZSkgd2hpbGUgZWRpdGluZyBwb2xpY3lcbiAgICAgICAgICAgICAgLy8gaWYgKGRhdGEudHlwZSA9PSAnUk9VTkRST0JJTicpIHtcbiAgICAgICAgICAgICAgLy8gICBkYXRhLnR5cGUgPSAnUk9VTkQtUk9CSU4nO1xuICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSAnQU5ZT05FJykge1xuICAgICAgICAgICAgICAvLyAgIGRhdGEudHlwZSA9ICdBTlkgT05FJztcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICBhcHByb3ZlckxldmVscy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmVyTGV2ZWxzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiBhcHByb3ZlckxldmVscyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmV2aWV3ZXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMsXG4gICAgICAgICAgICAgIHJldmlld2VySWRzLFxuICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqKioqKipcbiAgICogSXQgaXMgdG8gcG9wdWxhdGUgbW9yZSBvcHRpb25zIGVsZW1lbnRzIHdoaWxlIGVkaXRpbmcgdGhlIHBvbGljeSBmb3JtXG4gICAqL1xuICBwb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCkge1xuICAgIGNvbnN0IGFjdGl2YXRlZE9wdGlvbnMgPSBbXTtcbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycykge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVNQT05TSUJJTElUWV9DRU5URVInKTtcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpOyB9XG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cykgeyBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTJyk7IH1cbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZE92ZXJzZWVycykge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZEFzc29jaWF0ZWREb2N1bWVudHMpIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVMQVRFRF9ET0NVTUVOVFMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbikge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdWRVJTSU9OJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50Lmxlbmd0aCkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX0FTU0VTU01FTlRTJyk7XG4gICAgICB0aGlzLmdldEFzc2Vzc21lbnREZXRhaWxzKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0gJiZcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxuICAgICkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX1BST0dSQU1fUkVTUE9OU0lCSUxJVElFUycpO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUycpO1xuICAgIH1cbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoYWN0aXZhdGVkT3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGFkZCBhbmQgcmVtb3ZlIHRoZSBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uIHRvIHRoZSBwb2xpY3kgRm9ybVxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgZGV0YWlscyByZWxhdGVkIHRvIGNoZWNrZWQgdmFsdWUsIGNvZGUgcGFydGljdWxhciBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uc1xuICAgKi9cbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgY2FzZSAnUkVTUE9OU0lCSUxJVFlfQ0VOVEVSJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnUkVWSUVXRVInOlxuICAgICAgLy8gICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBjYXNlICdDSEVDS1BPSU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnT1ZFUlNFRVInOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSRUxBVEVEX0RPQ1VNRU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdWRVJTSU9OJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZFZlcnNpb24gPSBldmVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0xJTktfUFJPR1JBTV9SRVNQT05TSUJJTElUSUVTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX0FTU0VTU01FTlRTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50ID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX1JFTEFURURfUE9MSUNJRVMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua1BvbGljaWVzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XG4gICAqL1xuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcbiAgICBjb25zdCBlZGl0TG9hZGVyID1cbiAgICAgIHRoaXMubW9kZSA9PT0gJ0VESVQnXG4gICAgICAgID8gdGhpcy5yY0xpc3RMb2FkZWQgJiZcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCAmJlxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWRcbiAgICAgICAgOiB0cnVlO1xuICAgIGlmICh0aGlzLnVzZXJzTGlzdExvYWRlZCAmJiBlZGl0TG9hZGVyKSB7XG4gICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgaWYgKHRoaXMuY29udmVydEZpbGVEYXRhICYmIHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lKSB7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gdGhpcy5jb252ZXJ0RmlsZURhdGEuZmlsZU5hbWUuc3Vic3RyaW5nKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgdGhpcy5jb252ZXJ0RmlsZURhdGEuZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKVxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5jb252ZXJ0RmlsZURhdGEuY2F0ZWdvcnlJZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkTGlzdCgnY2F0ZWdvcnknLCBbdGhpcy5jb252ZXJ0RmlsZURhdGEuY2F0ZWdvcnlJZF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkTGlzdCgnY2F0ZWdvcnknLCBbdGhpcy5zZWxlY3RlZENhdGVnb3J5XSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcbiAgICAgICAgdGhpcy5lZGl0UG9saWN5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgdGhlIGNvbmZpcm1hdGlvbiBwb3B1cCB3aGVuIGF2YWlsYWJpbGl0eSBvbiBQb2xpY3kgcG9ydGFsIHRvZ2dsZSBpbiBPTlxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgdG9nZ2xlIHZhbHVlIHdoaWNoIGlzIGFsd2F5cyB0cnVlIG9yIGZhbHNlXG4gICAqL1xuICBhdmFpbGFiaWxpdHlPblBvcnRhbChldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb25zdCBjb25maXJtYXRpb25EZXRhaWxzOiBDb25maXJtYXRpb25BbGVydCA9IHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgICBtZXNzYWdlOiBgVGhlIHBvbGljaWVzIHRoYXQgeW91IGludGVuZCB0byBtYWtlIGFjY2Vzc2libGUgdG8gdGhlIGVudGlyZSBvcmdhbml6YXRpb24gY2FuIGJlIGFkZGVkIHRvIHRoZSBwb2xpY3kgcG9ydGFsLlxuICAgICAgICBJdCBpcyBsaWtlIGEgc2hhcmVkIGNhdGFsb2cgb2YgYWxsIGFjdGl2ZSAmIHVwZGF0ZWQgcG9saWNpZXMgdGhhdCBhbnkgbG9nZ2VkIGluIHVzZXIgY2FuIHJlYWQvIGRvd25sb2FkIGZvciByZWZlcmVuY2UuXG4gICAgICAgIEhlbmNlLCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciB5b3UgdG8gc2V0IHVwIGFuIGF0dGVzdGF0aW9uIHNjaGVkdWxlIG9yIHNlbGVjdFxuICAgICAgICByZWFkZXJzIHRvIGF0dGVzdCB0aGUgcG9saWNpZXMuYCxcbiAgICAgICAgYWN0aW9uOiAnUE9MSUNZX1BPUlRBTCcsXG4gICAgICB9O1xuICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uQWxlcnQuZW1pdChjb25maXJtYXRpb25EZXRhaWxzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjZWl2ZXMgdGhlIGlucHV0IGZyb20gdGhlIENvbmZpcm1hdGlvbiBkaWFsb2cgb2YgYXZhaWxhYmxlIG9uIFBvbGljeSBwb3J0YWxcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIG9wdGlvbiBmcm9tIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIHdoaWNoIGlzIGFsd2F5cyBlaXRoZXIgJ1lFUycgb3IgJ05PJ1xuICAgKi9cbiAgY29uZmlybVBvbGljeVBvcnRhbChldmVudDogYW55KSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsID0gZXZlbnQgPT0gJ1lFUycgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKGV2ZW50ID09ICdOTycpIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwb2xpY3lGb3JtIHdpdGggc2VsZWN0ZWQgZWxlbWVudHMgZnJvbSB0aGUgbGlzdGluZywgZnJlcXVlbmN5LCBmaWxlIHVwbG9hZCBjb21wb25lbnRzXG4gICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgZmllbGQgb24gUG9saWN5IGZvcm0uXG4gICAqIEBwYXJhbSBzZWxlY3RlZEl0ZW1zIGNvbnRhaW5zIHRoZSBsaXN0IG9mIHNlbGVjdGVkIGl0ZW1zIGZyb20gdGhlIGxpc3RcbiAgICovXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3JjJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMucmNMaXN0LFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgJ2l0ZW1faWQnXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlMaXN0LFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgb2JqZWN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcbiAgICAgICAgICAnX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzID0gW107XG4gICAgICAgIHRoaXMucmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCk7XG4gICAgICAgIHRoaXMucmVzZXRSZXZpZXdlckZyZXF1ZW5jeSgpO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncyA9IFtdO1xuICAgICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3cob2JqZWN0SWRzKTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFnID0gZWxlbWVudC5jdXN0b21fdGFncztcbiAgICAgICAgICBpZiAodGFnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWduYW1lID09IHRhZ0RhdGEudGFnbmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWduZWVzJzpcbiAgICAgICAgbGV0IHVzZXJJZHMsIGdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICB1c2VySWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIGdyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWUgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIGdyb3VwSWRzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlcklkcyA9IHNlbGVjdGVkSXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCxcbiAgICAgICAgICB1c2VySWRzLFxuICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXZpZXdlcic6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFsbFJldmlld2VycyxcbiAgICAgICAgICBbc2VsZWN0ZWRJdGVtcy5tZW1iZXJfaWRdLFxuICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NFbWFpbCc6XG4gICAgICAgIGxldCBzZWxlY3RlZFVzZXJJZHMsIHNlbGVjdGVkR3JvdXBJZHM7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xuICAgICAgICAgIHNlbGVjdGVkVXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXM/LnVzZXJzLCAnbWVtYmVyX2lkJyk7XG4gICAgICAgICAgc2VsZWN0ZWRHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXM/Lmdyb3VwcywgJ2dyb3VwX2lkJyk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRHcm91cElkcyxcbiAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXJJZHMsXG4gICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jY0VtYWlsT2JqSWRzID0gdGhpcy5nZXRHcm91cE9iamVjdElkKFxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0ZhaWwnOlxuICAgICAgICBsZXQgc2VsZWN0ZWRGYWlsVXNlcklkcywgc2VsZWN0ZWRGYWlsR3JvdXBJZHM7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xuICAgICAgICAgIHNlbGVjdGVkRmFpbFVzZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnVzZXJzLFxuICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlbGVjdGVkRmFpbEdyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5ncm91cHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWxHcm91cCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRGYWlsR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLnVzZXJzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmFpbFVzZXJJZHMsXG4gICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jY0ZhaWxHcm91cE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcHByb3ZlcnMnOlxuICAgICAgICBjb25zdCBhcHByb3ZlcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5hZGRNb3JlTGV2ZWxzKSB7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogdGhpcy53b3JrZmxvd1R5cGUsXG4gICAgICAgICAgICBhcHByb3ZlcnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hZGRNb3JlTGV2ZWxzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW3RoaXMuYXBwcm92ZXJzTGlzdEluZGV4XSA9IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLndvcmtmbG93VHlwZSxcbiAgICAgICAgICBhcHByb3ZlcnMsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV2aWV3ZXJfYXR0YWNobWVudHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXMgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmZpbGVzID8/IFtdO1xuXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rcyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8ubGlua3MgPz8gW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzb2NpYXRlZERvY3VtZW50cyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzLmZvcm1hdEZpbGVzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5maWxlcyA/PyBbXTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnRzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscyA/PyBbXTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnRvdGFsUXVlc3Rpb24gPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPz8gMDtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBhc3NpbmdNYXJrcyA9IHNlbGVjdGVkSXRlbXM/LnJlcXVpcmVkUG9pbnQgPz8gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvd25lcnMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFsbEFwcHJvdmVycyxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncG9saWN5QWNjZXNzJzpcbiAgICAgICAgbGV0IGFjY2Vzc0lkcywgYWNjZXNzR3JvdXBJZHM7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZnV0dXJlVXNlcnNXaWxsU2VsZWN0O1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBhY2Nlc3NJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zLnVzZXJzLCAnbWVtYmVyX2lkJyk7XG4gICAgICAgICAgYWNjZXNzR3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zLmdyb3VwcywgJ2dyb3VwX2lkJyk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXG4gICAgICAgICAgICBhY2Nlc3NHcm91cElkcyxcbiAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjY2Vzc0lkcyA9IHNlbGVjdGVkSXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3Nfb3duZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCxcbiAgICAgICAgICBhY2Nlc3NJZHMsXG4gICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpc0xpbmtlZFBvbGljZXMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uTGlua2VkUG9saWNpZXMgPSB0aGlzLmxpc3RPZlNlbGVjdGVkUG9saWNpZXMoXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uc2VsZWN0ZWRQb2xpY3lMaXN0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IHNlbGVjdGVkSXRlbXM/LnNlbGVjdGVkUG9saWN5TGlzdDtcblxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcbiAgfVxuXG4gIGxpc3RPZlNlbGVjdGVkUG9saWNpZXMoc2VsZWN0ZWRQb2xpY2llczogYW55KSB7XG4gICAgcmV0dXJuIHNlbGVjdGVkUG9saWNpZXM/Lm1hcCgocG9saWN5OiBhbnkpID0+IHBvbGljeT8uY29udHJhY3RfaWQpO1xuICB9XG5cbiAgLy9yZXR1cm4gdGhlIF9pZCBmcm9tIHRoZSBzZWxlY3RlZCBvdmVyc2VlciBncm91cC5cbiAgZ2V0R3JvdXBPYmplY3RJZChvdmVyc2Vlckdyb3VwPzogYW55KSB7XG4gICAgbGV0IG92ZXJzZWVyR3JvdXBJZEFycmF5ID0gb3ZlcnNlZXJHcm91cC5tYXAoKGVsZTogYW55KSA9PiBlbGUuX2lkKTtcbiAgICByZXR1cm4gb3ZlcnNlZXJHcm91cElkQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgcGFydGljdWxhciBlbGVtZW50IGZyb20gc2VsZWN0ZWQgbGlzdFxuICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIGNhc2VcbiAgICogQHBhcmFtIGV2ZW50IGhvbGRzIHRoZSBpZCBvciBrZXkgb2YgZWxlbWVudCB0byBiZSByZW1vdmVkXG4gICAqIEBwYXJhbSByZW1vdmVJbmRleCBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxuICAgKi9cbiAgcmVtb3ZlKHR5cGU6IGFueSwgZXZlbnQ6IGFueSwgcmVtb3ZlSW5kZXg/OiBhbnkpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3JjJzpcbiAgICAgICAgY29uc3QgcmNJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcy5maW5kSW5kZXgoXG4gICAgICAgICAgKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcy5zcGxpY2UocmNJbmRleCwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWduZWVzJzpcbiAgICAgICAgY29uc3QgZW50cnVzdEluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzLmZpbmRJbmRleChcbiAgICAgICAgICAob3duZXI6IGFueSkgPT4gb3duZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzLnNwbGljZShlbnRydXN0SW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyb3VwQXNzaWduZWVzJzpcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleDogYW55ID1cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXAuZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWRcbiAgICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5zcGxpY2UoZ3JvdXBJbmRleCwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICBjb25zdCByZXZpZXdlckluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXIubWVtYmVyX2lkID09IGV2ZW50Lm1lbWJlcl9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMuc3BsaWNlKHJldmlld2VySW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0VtYWlsJzpcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsLmZpbmRJbmRleChcbiAgICAgICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwuc3BsaWNlKG92ZXJzZWVySW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjR3JvdXBFbWFpbCc6XG4gICAgICAgIGNvbnN0IGNjR3JvdXBJbmRleDogYW55ID0gdGhpcy5wb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWw/LmZpbmRJbmRleChcbiAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NHcm91cEVtYWlsPy5zcGxpY2UoY2NHcm91cEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jY0VtYWlsT2JqSWRzID0gdGhpcy5nZXRHcm91cE9iamVjdElkKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJOb3RpZnlJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbC5maW5kSW5kZXgoXG4gICAgICAgICAgKG92ZXJzZWVyTjogYW55KSA9PiBvdmVyc2Vlck4uZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsLnNwbGljZShvdmVyc2Vlck5vdGlmeUluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0dyb3VwRmFpbEVtYWlsJzpcbiAgICAgICAgY29uc3QgY2NGYWlsR3JvdXBJbmRleDogYW55ID1cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChncm91cDogYW55KSA9PiBncm91cD8uZ3JvdXBfaWQgPT0gZXZlbnQ/Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXA/LnNwbGljZShjY0ZhaWxHcm91cEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jY0ZhaWxHcm91cE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcHByb3ZlcnMnOlxuICAgICAgICBjb25zdCBhcHByb3ZlcnNJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1tcbiAgICAgICAgICByZW1vdmVJbmRleFxuICAgICAgICBdLmFwcHJvdmVycy5maW5kSW5kZXgoXG4gICAgICAgICAgKGFwcHJvdmVyOiBhbnkpID0+IGFwcHJvdmVyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW3JlbW92ZUluZGV4XS5hcHByb3ZlcnMuc3BsaWNlKFxuICAgICAgICAgIGFwcHJvdmVyc0luZGV4LFxuICAgICAgICAgIDFcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1tyZW1vdmVJbmRleF0uYXBwcm92ZXJzLmxlbmd0aCA9PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxuICAgICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5Lml0ZW1faWQgPT0gZXZlbnQuaXRlbV9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcbiAgICAgICAgY29uc3QgdGFnID0gZXZlbnQuY3VzdG9tX3RhZ3M7XG4gICAgICAgIGlmICh0YWcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q1QgPSB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnbmFtZSA9PSB0YWdEYXRhLnRhZ25hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5kZXhDVCAhPSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5zcGxpY2UoaW5kZXhDVCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2JqZWN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcbiAgICAgICAgICAnX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzLnNwbGljZShcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5sZW5ndGhcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnBvbGljeUZvcm0gPSBPYmplY3QuYXNzaWduKHRoaXMucG9saWN5Rm9ybSk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IFtdO1xuICAgICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3cob2JqZWN0SWRzKTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMucmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscyA9IFtdO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0udG90YWxRdWVzdGlvbiA9IDA7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dvcmtmbG93TGV2ZWwnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucmVtb3ZlV29ya2Zsb3coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsaW5rUHJvZ3JhbSc6XG4gICAgICAgIHRoaXMuYWxsUHJvZ2FtU2VsZWN0ZWQgPSB0aGlzLmFsbFByb2dhbVNlbGVjdGVkLmZpbHRlcihcbiAgICAgICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5pZCAhPT0gZXZlbnQ/LmlkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJvZ3JhbShldmVudCk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvd25lcnMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwb2xpY3lBY2Nlc3MnOlxuICAgICAgICBjb25zdCB1c2VyQWNjZXNzSW5kZXggPSB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAob3duZXI6IGFueSkgPT4gb3duZXI/LmVtcGxveWVlX2lkID09IGV2ZW50Py5lbXBsb3llZV9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5zcGxpY2UodXNlckFjY2Vzc0luZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhY2Nlc3NHcm91cCc6XG4gICAgICAgIGNvbnN0IGdyb3VwQWNjZXNzSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcbiAgICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5zcGxpY2UoZ3JvdXBBY2Nlc3NJbmRleCwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZnJlcXVlbmN5JzpcbiAgICAgICAgdGhpcy5yZW1vdmVGcmVxdWVuY3koKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpc0xpbmtlZFBvbGljZXMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uTGlua2VkUG9saWNpZXMgPSB0aGlzLnBvbGljeUZvcm0uTGlua2VkUG9saWNpZXM/LmZpbHRlcihcbiAgICAgICAgICAocG9saWN5SWQ6IGFueSkgPT4gZXZlbnQgIT09IHBvbGljeUlkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uZmlsdGVyKFxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZCAhPT0gZXZlbnRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIGFzc2lnbmVlcyBhbmQgb3ZlcnNlZXJzIGxpc3Qgc3VjaCB0aGF0IGJvdGggbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBzYW1lIHVzZXJzIGJhc2VkIG9uIHNlbGVjdGlvblxuICAgKi9cbiAgcmVmcmVzaEFsbExpc3RzKCkge1xuICAgIGxldCBhc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xuICAgIGxldCBvdmVyc2VlcklkczogYW55ID0gW107XG4gICAgY29uc3QgYWxsVXNlcnMgPSBjbG9uZURlZXAodGhpcy51c2Vyc0xpc3QpO1xuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBc3NpZ25lZXMpO1xuICAgIGNvbnN0IG92ZXJzZWVyTGlzdCA9IGNsb25lRGVlcCh0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCk7XG4gICAgY29uc3Qgbm90aWZ5T3ZlcnNlZXJzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCk7XG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIGFzc2lnbmVlc0lkcy5wdXNoKHVzZXIuZW1wbG95ZWVfaWQpO1xuICAgIH0pO1xuICAgIG92ZXJzZWVyTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXIuZW1wbG95ZWVfaWQpO1xuICAgIH0pO1xuICAgIG5vdGlmeU92ZXJzZWVycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXIuZW1wbG95ZWVfaWQpO1xuICAgIH0pO1xuXG4gICAgYXNzaWduZWVzSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVzSWRzKV07XG4gICAgcmV2aWV3ZXJzSWRzID0gWy4uLm5ldyBTZXQocmV2aWV3ZXJzSWRzKV07XG4gICAgb3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldChvdmVyc2VlcklkcyldO1xuXG4gICAgLy8gdGhpcy5hc3NpZ25vcnNMaXN0ID0gYmVoYWxmVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEocmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSB8fCBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpKTtcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAhKFxuICAgICAgICAgIHJldmlld2Vyc0lkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSB8fFxuICAgICAgICAgIG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpXG4gICAgICAgIClcbiAgICApO1xuICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xuICAgICAgY29uc3QgdXNlck9iaiA9IHRoaXMuYXNzaWduZWVzTGlzdDtcbiAgICAgIHVzZXJPYmo/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICB1c2VyLm1lbWJlcl9pZCA9IHVzZXIubXlfbWVtYmVyX2lkO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm93bmVybGlzdCA9IHVzZXJPYmo7XG4gICAgfVxuICAgIC8vIHRoaXMucmV2aWV3ZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKGFzc2lnbmVlc0lkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSB8fCBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSkpO1xuICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICEoXG4gICAgICAgICAgYXNzaWduZWVzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8XG4gICAgICAgICAgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hvbGUgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBpZCdzIGZyb20gYSBwYXJ0aWN1bGFyIGxpc3QgZWxlbWVudHNcbiAgICogQHBhcmFtIGxpc3QgaXQgaXMgdGhlIG1haW4gbGlzdCAgd2hpY2ggY29udGFpbnMgYWxsIGVsZW1lbnRzIGxpc3RcbiAgICogQHBhcmFtIGtleSBjb250YWlucyBrZXkgdG8gZmlsdGVyIHNlbGVjdGVkIGxpc3QgZnJvbSB0aGUgbGlzdFxuICAgKiBAcGFyYW0gaWRzIHNlbGVjdGVkIGlkcyBhcnJheVxuICAgKi9cbiAgc2V0TGlzdChsaXN0OiBhbnlbXSwgaWRzOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcbiAgICBpZHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBsaXN0Py5maW5kSW5kZXgoXG4gICAgICAgIChsaXN0RWxlbWVudDogYW55KSA9PiBsaXN0RWxlbWVudFtrZXldID09IGVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGRhdGEucHVzaChsaXN0W2luZGV4XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpZCdzIGZyb20gYSBwYXJ0aWN1bGFyIGxpc3QgZWxlbWVudHNcbiAgICogQHBhcmFtIGxpc3QgYWN0dWFsIHNlbGVjdGVkIGxpc3RcbiAgICogQHBhcmFtIGtleSBjb250YWlucyBrZXkgdG8gZXh0cmFjdCBpZCBmcm9tIHRoZSBsaXN0XG4gICAqL1xuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxpc3QubWFwKChlbGUpID0+IHtcbiAgICAgIGlmIChlbGVba2V5XSkge1xuICAgICAgICByZXR1cm4gZWxlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcmV2aWV3ZXIgdHlwZSBpbiBhcHByb3ZhbCB3b3JrZmxvd1xuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgcmV2aWV3ZXIgdHlwZVxuICAgKi9cbiAgcmV2aWV3ZXJUeXBlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLndvcmtmbG93VHlwZSA9IGV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZnJlcXVlbmN5IGluIGVkaXQgIG1vZGVcbiAgICovXG4gIGZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnksIG1vZGU6ICdTRUxFQ1QnIHwgJ1BPUFVMQVRFJyA9ICdTRUxFQ1QnKSB7XG4gICAgLy9uZWVkcyB0byBkaXNjdXNzIHdpdGggYmFja2VuZCBhYm91dCBlZGl0IGFuZCBkZWZhdWx0IHZhbHVlc1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBwYXR0ZXJuOiBldmVudD8uZnJlcXVlbmN5X2RldGFpbHMsIC8vXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUsXG4gICAgICBmYWlsZWRBZnRlcjogZXZlbnQ/Lm1hcmtfZmFpbGVkX2FmdGVyLFxuICAgICAgZmFpbGVkX3RpbWVfdXRjOiAnJyxcbiAgICAgIGxpZmVjeWNsZURldGFpbHM6ICcwMDAwLTAwLTAwfn4wJyxcbiAgICAgIHRpbWVJbjI0SHI6IGV2ZW50LmZhaWxlZF90aW1lICE9ICcnID8gZXZlbnQuZmFpbGVkX3RpbWUgOiBERUZBVUxUXzI0SFIsXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwLFxuICAgICAgc3RhcnRGcm9tOiBNYXRoLmZsb29yKFxuICAgICAgICBuZXcgRGF0ZShldmVudC5hc3NpZ25lZV9zdGFydF9kYXRlKS5nZXRUaW1lKCkgLyAxMDAwXG4gICAgICApLFxuICAgICAgc3RhcnREYXRlOiAnJyxcbiAgICAgIHJlcG9ydElkOiAwLFxuICAgICAgdGltZUluMTJocjogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKFxuICAgICAgICBldmVudC5mYWlsZWRfdGltZSAhPSAnJyA/IGV2ZW50LmZhaWxlZF90aW1lIDogREVGQVVMVF8yNEhSXG4gICAgICApLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LmZyZXF1ZW5jeV90ZXh0LFxuICAgIH07XG5cbiAgICB0aGlzLmZyZXF1ZW5jeURhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHMgaW4gdGhlIHBvbGljeUZvcm1cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXG4gICAqL1xuICBmcmVxdWVuY3lEYXRhKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xuICAgICh0aGlzLnBvbGljeUZvcm0uZnJlcXVlbmN5X3RleHQgPSBldmVudC5wbGFjZWhvbGRlciksXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLm1hcmtfZmFpbGVkX2FmdGVyID0gZXZlbnQuZmFpbGVkQWZ0ZXIpO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSBldmVudC53aW5kb3c7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gZXZlbnQudGltZUluMjRIcjtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzaWduZWVfc3RhcnRfZGF0ZSA9IG1vbWVudChldmVudC5zdGFydEZyb20gKiAxMDAwKS5mb3JtYXQoXG4gICAgICAnZGRkIE1NTSBERCBZWVlZJ1xuICAgICk7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCBmYWxzZSk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBldmVudC5wYXR0ZXJuLFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZXZlbnQud2luZG93LFxuICAgICAgZmFpbGVkX2FmdGVyX2RheXM6IGV2ZW50LmZhaWxlZEFmdGVyLFxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXG4gICAgICBzdGFydF9vZl9kYXlfdXRjOiBldmVudC5zdGFydEZyb20sXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBbZXZlbnQucmVwb3J0SWRdLFxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnBsYWNlaG9sZGVyLFxuICAgIH07XG4gICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcHVsYXRlcyB0aGUgZnJlcXVlbmN5IGZpZWxkIHdpdGggc2VsZWN0ZWQgZGF0YSBmcm9tIGZyZXF1ZW5jeSBjb21wb25lbnRcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXG4gICAqL1xuICBmcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZmFpbGVkVGltZSA9IGV2ZW50Py5mcmVxdWVuY3lfdGltZTtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9IGV2ZW50Py5saWZlY3ljbGVfZGV0YWlscztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID0gZXZlbnQ/Lm9uX2NvbXBsZXRpb25fb2ZbMF0gPz8gMDtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZGF0ZU9mTW9kaWZpZWQgPSBldmVudD8uZG9tX3V0YztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDM7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGV2ZW50Py5wbGFjZWhvbGRlclxuICAgICAgPyBldmVudC5wbGFjZWhvbGRlclxuICAgICAgOiAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xuICB9XG5cbiAgcmV2aWV3ZXJGcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihldmVudDogYW55KSB7XG4gICAgLy9uZWVkcyB0byBkaXNjdXNzIHdpdGggYmFja2VuZCBhYm91dCBlZGl0IGFuZCBkZWZhdWx0IHZhbHVlc1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBwYXR0ZXJuOiBldmVudD8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzLCAvL1xuICAgICAgd2luZG93OiBldmVudD8ucmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSxcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8ucmV2aWV3RmFpbGVkQWZ0ZXIsXG4gICAgICBmYWlsZWRfdGltZV91dGM6ICcnLFxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgdGltZUluMjRIcjpcbiAgICAgICAgZXZlbnQucmV2aWV3RmFpbGVkVGltZSAhPSAnJyA/IGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgOiBERUZBVUxUXzI0SFIsXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwLFxuICAgICAgc3RhcnRGcm9tOiBNYXRoLmZsb29yKFxuICAgICAgICBuZXcgRGF0ZShldmVudC5yZXZpZXdlcl9zdGFydF9kYXRlKS5nZXRUaW1lKCkgLyAxMDAwXG4gICAgICApLFxuICAgICAgc3RhcnREYXRlOiAnJyxcbiAgICAgIHJlcG9ydElkOiAwLFxuICAgICAgdGltZUluMTJocjogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKFxuICAgICAgICBldmVudC5yZXZpZXdGYWlsZWRUaW1lICE9ICcnID8gZXZlbnQucmV2aWV3RmFpbGVkVGltZSA6IERFRkFVTFRfMjRIUlxuICAgICAgKSxcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5yZXZpZXdmcmVxdWVuY3lEZXRhaWxzLFxuICAgIH07XG5cbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGF0YShkYXRhKTtcbiAgfVxuXG4gIHJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKSB7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMgPSB7XG4gICAgICBwYXR0ZXJuOiAnJyxcbiAgICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXG4gICAgICBkYXRlT2ZNb2RpZmllZDogMCxcbiAgICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxuICAgICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXG4gICAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcbiAgICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgICAgd2luZG93OiAwLFxuICAgICAgZmFpbGVkOiAwLFxuICAgICAgdGltZTogREVGQVVMVF9USU1FLFxuICAgICAgZmFpbGVkVGltZTogJycsXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAzLFxuICAgIH07XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZEFmdGVyID0gMDtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfdHlwZSA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID0gMDtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkVGltZSA9IERFRkFVTFRfMjRIUjtcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgJ1doZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkID8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHJldmlld2VyIGZyZXF1ZW5jeSBkZXRhaWxzIGluIHRoZSBwb2xpY3lGb3JtXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBmcmVxdWVuY3kgZGV0YWlsc1xuICAgKi9cbiAgcmV2aWV3ZXJGcmVxdWVuY3lEYXRhKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSBldmVudC5mYWlsZWRBZnRlcjtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzID0gZXZlbnQucGF0dGVybjtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV90eXBlID0gZXZlbnQucGF0dGVybi5zcGxpdCgnficpWzBdO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID0gZXZlbnQud2luZG93O1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRUaW1lID0gZXZlbnQudGltZUluMjRIcjtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3ZXJfc3RhcnRfZGF0ZSA9IG1vbWVudChldmVudC5zdGFydEZyb20gKiAxMDAwKS5mb3JtYXQoXG4gICAgICAnZGRkIE1NTSBERCBZWVlZJ1xuICAgICk7XG5cbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgZmFsc2UpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBldmVudC50aW1lSW4xMmhyLFxuICAgICAgcmVtaW5kZXJfYmVmb3JlX2RheXM6IGV2ZW50LndpbmRvdyxcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcbiAgICAgIGxpZmVjeWNsZV9kZXRhaWxzOiBldmVudC5saWZlY3ljbGVEZXRhaWxzLFxuICAgICAgc3RhcnRfb2ZfZGF5X3V0YzogZXZlbnQuc3RhcnRGcm9tLFxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcbiAgICAgIGRvbV91dGM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyxcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlcixcbiAgICB9O1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lQb3B1bGF0aW9uKHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcHVsYXRlcyB0aGUgcmV2aWV3ZXIgZnJlcXVlbmN5IGZpZWxkIHdpdGggc2VsZWN0ZWQgZGF0YSBmcm9tIGZyZXF1ZW5jeSBjb21wb25lbnRcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXG4gICAqL1xuICByZXZpZXdlckZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnBhdHRlcm4gPSBldmVudD8uZnJlcXVlbmN5X2RldGFpbHM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZmFpbGVkVGltZSA9IGV2ZW50Py5mcmVxdWVuY3lfdGltZTtcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy53aW5kb3cgPSBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZmFpbGVkID0gZXZlbnQ/LmZhaWxlZF9hZnRlcl9kYXlzO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9IGV2ZW50Py5saWZlY3ljbGVfZGV0YWlscztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSBldmVudD8uc3RhcnRfb2ZfZGF5X3V0YztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9XG4gICAgICBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gZXZlbnQ/LmRvbV91dGM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyXG4gICAgICA/IGV2ZW50LnBsYWNlaG9sZGVyXG4gICAgICA6ICdXaGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZCA/JztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRhdGEgc3VibWl0dGVkIG9uIGNyZWF0ZSBwb2xpY3kgZm9ybVxuICAgKi9cbiAgdmFsaWRhdGVQb2xpY3koKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgICBjb25zdCBldmVudCA9IHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lO1xuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpID09ICcnIHx8XG4gICAgICAoIXRoaXMucG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgKCh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgIXRoaXMuZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICgodGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWU/Lmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgICB0aGlzLmdyb3VwRW5hYmxlZCkpKSB8fFxuICAgICAgKHRoaXMucG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgKCF0aGlzLmdyb3VwRW5hYmxlZCB8fFxuICAgICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBFbmFibGVkKSkpIHx8XG4gICAgICAoIXRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID09IDApIHx8XG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCA9PSAwIHx8XG4gICAgICAoIXRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmFsX3dvcmtmbG93Py5sZW5ndGggJiZcbiAgICAgICAgIXRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoICYmXG4gICAgICAgIHRoaXMucG9saWN5QXBwcm92YWxGbGFnID09PSAwKSB8fFxuICAgICAgKHRoaXMuZm9ybWF0RXZpZGVuY2UgJiYgdGhpcy5mb3JtYXRFdmlkZW5jZS5uZXdMaW5rLmNvbnRhaW5zRXJyb3IpIHx8XG4gICAgICAhdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aCB8fFxuICAgICAgKHRoaXMuaXNTZW5kRm9yQXR0ZXN0YXRpb24gJiZcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPT09IDApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBhbiBhcGkgY2FsbCB0byBjcmVhdGUgYSBwb2xpY3lcbiAgICogQHBhcmFtIHBvbGljeSBjb250YWlucyBwb2xpY3lGb3JtIGRhdGFcbiAgICovXG4gIHN1Ym1pdFBvbGljeSgpIHtcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZVBvbGljeSgpO1xuICAgIGlmICghdmFsaWQgfHwgIXRoaXMuaXNWZXJzaW9uVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5ub1dvcmtmbG93U2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdztcbiAgICB9XG4gICAgY29uc3QgcG9saWN5ID0gdGhpcy5wb2xpY3lGb3JtO1xuICAgIGxldCBhcHByb3ZlcnNEYXRhOiBhbnkgPSB0aGlzLmNvbnZlcnRBcHByb3ZhbFdvcmtmbG93KFxuICAgICAgcG9saWN5LnNlbGVjdGVkQXBwcm92ZXJzXG4gICAgKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSBwb2xpY3kucG9saWN5RHVlRGF0ZT8uJGQgPz8gcG9saWN5LnBvbGljeUR1ZURhdGU7XG4gICAgbGV0IHJldmlld2VyRmlsZXNBcnJheSA9IGNsb25lRGVlcChwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXMpO1xuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSByZXZpZXdlckZpbGVzQXJyYXkubWFwKChmaWxlOiBhbnkpID0+IHtcbiAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZW5hbWU7XG4gICAgICBmaWxlLmZpbGVfcGF0aCA9IGZpbGUuZmlsZXBhdGg7XG4gICAgICBmaWxlLm9yZ19uYW1lID0gZmlsZS5vcmlnaW5hbF9maWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBmaWxlLmZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUuZmlsZXBhdGg7XG4gICAgICBkZWxldGUgZmlsZS5vcmlnaW5hbF9maWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBmaWxlLmxpbmtTZXQ7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9KTtcblxuICAgIGxldCBhdHRlc3RhdGlvbkZpbGVzQXJyYXkgPSBjbG9uZURlZXAoXG4gICAgICBwb2xpY3kuYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlc1xuICAgICk7XG4gICAgY29uc3QgYXR0ZXN0YXRpb25GaWxlcyA9IGF0dGVzdGF0aW9uRmlsZXNBcnJheS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICBlbGUubmFtZSA9IGVsZS5maWxlbmFtZTtcbiAgICAgIGVsZS5maWxlX3BhdGggPSBlbGUuZmlsZXBhdGg7XG4gICAgICBlbGUub3JpZ2luYWxfZmlsZV9uYW1lID0gZWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZWxlLmZvbGRlcl9pZCA9IGVsZT8uZm9sZGVyX2lkID8gZWxlLmZvbGRlcl9pZCA6IDA7XG4gICAgICBlbGUucGF0aCA9IGVsZT8ucGF0aCA/IGVsZS5wYXRoIDogZWxlLmZpbGVwYXRoICsgZWxlLmZpbGVuYW1lO1xuICAgICAgZWxlLmlzTGlua1NldCA9IGVsZS5saW5rU2V0O1xuICAgICAgZWxlLm90aGVyX3R5cGUgPSBlbGU/Lm90aGVycztcbiAgICAgIGRlbGV0ZSBlbGUuZmlsZW5hbWU7XG4gICAgICBkZWxldGUgZWxlLmZpbGVwYXRoO1xuICAgICAgZGVsZXRlIGVsZS5vcmlnaW5hbF9maWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBlbGUubGlua1NldDtcbiAgICAgIGRlbGV0ZSBlbGUuZmlsZV9uYW1lO1xuICAgICAgZGVsZXRlIGVsZS5vdGhlcnM7XG4gICAgICByZXR1cm4gZWxlO1xuICAgIH0pO1xuICAgIGNvbnN0IHJldmlld2VySUQgPSB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSZXZpZXdlcnMsICdtZW1iZXJfaWQnKTtcbiAgICBjb25zdCBwb2xpY3lBY2Nlc3NVc2Vyc0lkcyA9XG4gICAgICB0aGlzLnJldHVybklkcyhwb2xpY3kucG9saWN5X2FjY2Vzc19vd25lcnMsICdtZW1iZXJfaWQnKSA/PyBbXTtcbiAgICBjb25zdCBwb2xpY3lBY2Nlc3NHcm91cHNJZHMgPVxuICAgICAgdGhpcy5yZXR1cm5JZHMocG9saWN5LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLCAnX2lkJykgPz8gW107XG4gICAgY29uc3QgbGlua1Byb2dyYW0gPSB0aGlzLmNvbW1vblNlcnZpY2UudHJhbnNmb3JtUHJvZ3JhbURhdGEodGhpcy5zZWxlY3RlZFByb2dyYW1zLCB0aGlzLmxpbmtQcm9ncmFtPy5wcm9ncmFtPy5saW5rZWQpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBwb2xpY3lfbmFtZTogcG9saWN5LnBvbGljeU5hbWUsXG4gICAgICBub3RlczogcG9saWN5LnBvbGljeU5vdGVzLFxuICAgICAgaXNfcG9ydGFsX2VuYWJsZTogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsID8gMSA6IDAsXG4gICAgICBpc19zdWdnZXRpb25fZW5hYmxlOiBwb2xpY3kuYWNjZXB0U3VnZ2VzdGlvbnMgPyAxIDogMCxcbiAgICAgIGNhdGVnb3J5X2lkX2FycjogdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkQ2F0ZWdvcmllcywgJ2l0ZW1faWQnKSxcbiAgICAgIGFwcHJvdmVyczogYXBwcm92ZXJzRGF0YSxcbiAgICAgIGFzc2lnbmVlX2lkczogdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHBvbGljeT8uc2VsZWN0ZWRBc3NpZ25lZXMsXG4gICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICkubWFwKChpZCkgPT4gTnVtYmVyKGlkKSksXG4gICAgICB1c2VyZ3JvdXBfaWRzOiB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRHcm91cEFzc2lnbmVlLCAnX2lkJykgPz8gW10sXG4gICAgICBJc19hcHByb3ZhbDogMCwgLy9uZWVkcyB0byBjaGVjayBpbiBmZVxuXG4gICAgICBhc3NvY2lhdGVkX2RvY3VtZW50czogcG9saWN5LmFkZEFzc29jaWF0ZWREb2N1bWVudHNcbiAgICAgICAgPyBhdHRlc3RhdGlvbkZpbGVzXG4gICAgICAgIDogW10sXG5cbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShwb2xpY3kuY3VzdG9tVGFncyksXG5cbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgPyBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgOiAnJyxcbiAgICAgIGZyZXF1ZW5jeV90ZXh0OiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHMgPyBwb2xpY3kuZnJlcXVlbmN5X3RleHQgOiAnJyxcbiAgICAgIHJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZVxuICAgICAgICA6IDAsXG4gICAgICBmYWlsZWRfdGltZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZhaWxlZF90aW1lIDogJycsXG4gICAgICBtYXJrX2ZhaWxlZF9hZnRlcjogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICAgIDogJycsXG4gICAgICAvLyBzdGFydERhdGU6IHBvbGljeS5wb2xpY3lEdWVEYXRlLnRvRGF0ZVN0cmluZygpLFxuICAgICAgc3RhcnREYXRlOiBtb21lbnQoc3RhcnREYXRlKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWScpLFxuXG4gICAgICBSZXZpZXdlckF0dGFjaG1lbnRzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlc1xuICAgICAgICAgID8gcmV2aWV3ZXJGaWxlc1xuICAgICAgICAgIDogW10sXG4gICAgICBSZXZpZXdlckxpbmtzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rc1xuICAgICAgICAgID8gcG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdExpbmtzXG4gICAgICAgICAgOiBbXSxcbiAgICAgIFJldmlld2VyTWVtYmVySWQ6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcmV2aWV3ZXJJRFswXSA/IHJldmlld2VySURbMF0gOiAwLFxuICAgICAgaXNSZXZpZXc6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiZcbiAgICAgICAgICAocG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzIHx8XG4gICAgICAgICAgICBwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3MpICYmXG4gICAgICAgICAgcmV2aWV3ZXJJRFswXVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmV2aWV3RmFpbGVkQWZ0ZXI6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld0ZhaWxlZEFmdGVyXG4gICAgICAgICAgOiAwLFxuICAgICAgcmV2aWV3RmFpbGVkVGltZTpcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgPyBwb2xpY3kucmV2aWV3RmFpbGVkVGltZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X3R5cGU6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfdHlwZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXG4gICAgICAgICAgOiAwLFxuXG4gICAgICBlbnRpdGllczogdGhpcy5wb2xpY3lGb3JtPy5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSQ3MsICdpdGVtX2lkJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuICAgICAgcmlza19jbGFzczogcG9saWN5LnJpc2tSYXRpbmcudG9TdHJpbmcoKSxcblxuICAgICAgQ0NGYWlsRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NGYWlsRW1haWwsICdlbXBsb3llZV9lbWFpbCcpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJyxcbiAgICAgIENDRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuXG4gICAgICBjaGVja3BvaW50RGV0YWlsczogcG9saWN5LmNoZWNrcG9pbnREZXRhaWxzID8/IFtdLFxuICAgICAgdG90YWxRdWVzdGlvbjogcG9saWN5LnRvdGFsUXVlc3Rpb24gPyBwb2xpY3kudG90YWxRdWVzdGlvbiA6IDAsIC8vXG4gICAgICBwYXNzaW5nTWFya3M6IHBvbGljeS5wYXNzaW5nTWFya3MgPyBwb2xpY3kucGFzc2luZ01hcmtzIDogMCwgLy9cblxuICAgICAgcG9saWN5QXBwcm92YWxGbGFnOiAwLFxuXG4gICAgICBpc19zaWduYXR1cmVfcmVxdWlyZWQ6IHBvbGljeS5yZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uID8gMSA6IDAsXG4gICAgICBjY191c2VyZ3JvdXBfaWRzOiB0aGlzLmNjRW1haWxPYmpJZHMsXG4gICAgICBjY19mYWlsX3VzZXJncm91cF9pZHM6IHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMsXG4gICAgICByZXZpZXdlcl9zdGFydF9kYXRlOiBwb2xpY3kucmV2aWV3ZXJfc3RhcnRfZGF0ZSA/PyAnJyxcbiAgICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6IHBvbGljeS5hc3NpZ25lZV9zdGFydF9kYXRlLFxuICAgICAgcG9saWN5X3ZlcnNpb246IHBvbGljeS5hZGRWZXJzaW9uID8gcG9saWN5LnBvbGljeV92ZXJzaW9uIDogJycsXG4gICAgICBhc3Nlc3NtZW50OiBwb2xpY3kuYWRkTGlua0Fzc2Vzc21lbnRcbiAgICAgICAgPyBwb2xpY3kuYXNzZXNzbWVudC5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6IGVsZS5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGVsZS5jYXRlZ29yeV9pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICA6IFtdLFxuICAgICAgcG9saWN5X293bmVyczogdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5tZW1iZXJfaWRcbiAgICAgICksXG4gICAgICBhcHByb3ZhbF93b3JrZmxvd19pZDogcG9saWN5Py5zZWxlY3RlZEFwcHJvdmVyc1swXT8uX2lkXG4gICAgICAgID8gW3BvbGljeT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/Ll9pZF1cbiAgICAgICAgOiBbXSxcbiAgICAgIGxpbmtQcm9ncmFtOiBsaW5rUHJvZ3JhbSxcbiAgICAgIGJ1c2luZXNzX2N5Y2xlOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcbiAgICAgICAgPyBwb2xpY3k/LmJ1c2luZXNzQ3ljbGVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IHBvbGljeS5wb2xpY3lfYWNjZXNzX3R5cGUgPz8gMCxcbiAgICAgIHBvbGljeV9hY2Nlc3Nfb3duZXJzOiBwb2xpY3kuYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgPyBbXVxuICAgICAgICA6IHBvbGljeUFjY2Vzc1VzZXJzSWRzID8/IFtdLFxuICAgICAgcG9saWN5X2FjY2Vzc19ncm91cHM6IHBvbGljeS5hdmFpbGFibGVPblBvcnRhbFxuICAgICAgICA/IFtdXG4gICAgICAgIDogcG9saWN5QWNjZXNzR3JvdXBzSWRzID8/IFtdLFxuICAgICAgZGlzcGxheU9uUG9ydGFsOiBwb2xpY3kuaXNQb3J0YWxEaXNwbGF5RW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIGxpbmtlZFBvbGljaWVzOiBbLi4ubmV3IFNldChwb2xpY3kuTGlua2VkUG9saWNpZXMpXSxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcbiAgICAgIHRoaXMucG9saWN5U2VydmljZS5zdWJtaXRQb2xpY3kocGF5bG9hZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBvbGljeUlkID0gcmVzLl9pZDtcbiAgICAgICAgICBpZiAodGhpcy5jb252ZXJ0RmlsZURhdGE/LmZpbGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxpbmtEb2N1bWVudFdpdGhQb2xpY3kodGhpcy5jb252ZXJ0RmlsZURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnRlbXBsYXRlSWQpIHtcbiAgICAgICAgICAgIHRoaXMub25UZW1wbGF0ZVNlbGVjdChbeyBfaWQ6IHRoaXMudGVtcGxhdGVJZCB9XSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZURvY3VtZW50cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcbiAgICAgIGlmICh0aGlzLnBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMCkge1xuICAgICAgICBkZWxldGUgcGF5bG9hZC5hcHByb3ZlcnM7XG4gICAgICAgIHBheWxvYWQucG9saWN5QXBwcm92YWxGbGFnID0gMjtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9saWN5U2VydmljZS51cGRhdGVQb2xpY3kocGF5bG9hZCwgdGhpcy5wb2xpY3lJZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wb2xpY3lJZCA9IHJlcy5faWQ7XG5cbiAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZW5kRm9yQXR0ZXN0YXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgICAgICdUaGUgcG9saWN5IGhhcyBiZWVuIHNlbnQgZm9yIGF0dGVzdGF0aW9uJyxcbiAgICAgICAgICAgICAgICAnc3VjY2VzcydcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnVGhlIHBvbGljeSBoYXMgYmVlbiB1cGRhdGVkJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVybCA9XG4gICAgICAgICAgICAgIHRoaXMuYmFzZVVSTCArICcvYWxsL3BvbGljeS93b3Jrcm9vbT9pZD0nICsgdGhpcy5wb2xpY3lJZDtcbiAgICAgICAgICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodXJsLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS93b3Jrcm9vbSddLCB7IHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcbiAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxpbmtEb2N1bWVudFdpdGhQb2xpY3koZG9jdW1lbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGRvY3VtZW50LmZpbGVOYW1lICYmXG4gICAgICAoZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ3BkZicgfHxcbiAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ1BERicgfHxcbiAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ2RvY3gnIHx8XG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdET0NYJylcbiAgICApIHtcbiAgICAgIHRoaXMucG9saWN5U2VydmljZVxuICAgICAgICAuZXh0cmFjdEZpbGUoZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiwgZG9jdW1lbnQuZmlsZVBhdGgsIHRoaXMucG9saWN5SWQpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSA9PT0gJ2RvbmUnIHx8IHJlcy5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnZG9jeCcgfHxcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdET0NYJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcG9saWN5L2VkaXQtcG9saWN5J10sIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgaWQ6IHRoaXMucG9saWN5SWQgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAncGRmJyB8fFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ1BERidcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS93b3Jrcm9vbSddLCB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgXCJPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2VyZSB1bmFibGUgdG8gY29tcGxldGUgdGhpcyBhY3Rpb24uIExldCdzIGdpdmUgaXQgYW5vdGhlciB0cnksIHNoYWxsIHdlP1wiLFxuICAgICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgXCJPb3BzISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2VyZSB1bmFibGUgdG8gY29tcGxldGUgdGhpcyBhY3Rpb24uIExldCdzIGdpdmUgaXQgYW5vdGhlciB0cnksIHNoYWxsIHdlP1wiLFxuICAgICAgICAnYWxlcnQnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVucyB0aGUgZGF0ZSBwaWNrZXIgb24gcG9saWN5IGZvcm1cbiAgICovXG4gIG9wZW5EYXRlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0ZVBpY2tlcj8uYXBpPy5vcGVuKCk7XG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XG4gICAgLy8gdGhpcy5zZXRBY3RpdmVGaWVsZFNlbGVjdG9yKCdJU1NVRV9EQVRFX1RJTUUnLCAnSVNTVUVfREFURV9USU1FJyk7XG4gIH1cblxuICAvKipcbiAgICogY2xvc2VzIHRoZSBkYXRlIHBpY2tlciBmcm9tIHBvbGljeSBmb3JtXG4gICAqL1xuICBjbG9zZURhdGVQaWNrZXIoZXZ0OiBhbnkpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XG5cbiAgICBpZiAoIWV2dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZ0Py5kYXRlPy4kZCkge1xuICAgICAgbGV0IG1vbnRoQXJyYXkgPSBbXG4gICAgICAgICdKYW4nLFxuICAgICAgICAnRmViJyxcbiAgICAgICAgJ01hcicsXG4gICAgICAgICdBcHInLFxuICAgICAgICAnSnVuJyxcbiAgICAgICAgJ0p1bCcsXG4gICAgICAgICdBdWcnLFxuICAgICAgICAnU2VwJyxcbiAgICAgICAgJ09jdCcsXG4gICAgICAgICdOb3YnLFxuICAgICAgICAnRGVjJyxcbiAgICAgIF07XG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXREYXRlKCk7XG4gICAgICBjb25zdCBtb250aFZhbHVlID0gbW9udGhBcnJheVtuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXRNb250aCgpXTtcbiAgICAgIGNvbnN0IHllYXJWYWx1ZSA9IG5ldyBEYXRlKGV2dD8uZGF0ZT8uJGQpLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZVZhbHVlfSAke21vbnRoVmFsdWV9ICR7eWVhclZhbHVlfWA7XG4gICAgfVxuICAgIGlmIChldnQ/LmRhdGU/LiRkKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSA9IGV2dD8uZGF0ZT8uJGQ7XG4gICAgfVxuICAgIHRoaXMuZGF0ZVBpY2tlcj8uYXBpPy5jbG9zZSgpO1xuICB9XG4gIGVkaXRQb2xpY3lGcm9tRG9jdW1lbnRzKCkge1xuICAgIHRoaXMubW9kZSA9ICdFRElUJztcbiAgICB0aGlzLnNoaWZ0VG9FZGl0TW9kZS5lbWl0KCk7XG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0NyZWF0ZURvY3VtZW50cyA9IGZhbHNlO1xuICAgIHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuZWRpdFBvbGljeSgpO1xuICB9XG5cbiAgY2hlY2tGb3JDcmVhdGVEb2N1bWVudHMoKSB7XG4gICAgY29uc3QgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaG93Q3JlYXRlRG9jdW1lbnRzJyk7XG4gICAgdGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbiA9IGRhdGEgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbikge1xuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XG4gICAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Nob3dDcmVhdGVEb2N1bWVudHMnKTtcbiAgICB9XG4gIH1cblxuICBlZGl0UG9saWN5KCkge1xuICAgIHRoaXMubW9kZSA9ICdFRElUJztcblxuICAgIGlmICh0aGlzLnBvbGljeUlkKSB7XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UuZWRpdFBvbGljeSh0aGlzLnBvbGljeUlkKS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNbMF07XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZHMgPSBkYXRhLmNhdGVnb3J5X2RldGFpbHNfYXJyLm1hcChcbiAgICAgICAgICAgIChpZDogYW55KSA9PiBpZC5jYXRPYmpJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgPSBkYXRhLnBvbGljeUFwcHJvdmFsRmxhZztcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBkYXRhPy5hcHByb3ZhbFdvcmtmbG93RGV0YWlscz8ubWFwKFxuICAgICAgICAgICAgKHdvcmtmbG93OiBhbnkpID0+IHdvcmtmbG93Py5faWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtdO1xuICAgICAgICAgIHRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnMgPSBkYXRhPy5hcHByb3ZlcnM7XG4gICAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KGNhdGVnb3J5SWRzLCBkYXRhKTtcbiAgICAgICAgICB0aGlzLmdldExpbmtlZFBvbGljaWVzKGRhdGE/Ll9pZCk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvbGljeUZvcm0oZGF0YSwgY2F0ZWdvcnlJZHMpO1xuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZGF0YSk7XG4gICAgICAgICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVQb2xpY3lBY2Nlc3NEZXRhaWxzKGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5nZXRMaW5rUHJvZ3JhbSgpO1xuICAgIH1cbiAgfVxuXG4gIHBvcHVsYXRlUG9saWN5Rm9ybShkYXRhOiBhbnksIGNhdGVnb3J5SWRzOiBhbnkpIHtcbiAgICBjb25zdCByZXZpZXdlckZpbGVzID0gZGF0YS5SZXZpZXdlckF0dGFjaG1lbnRzLm1hcCgoZmlsZTogYW55KSA9PiB7XG4gICAgICBmaWxlLmZpbGVuYW1lID0gZmlsZS5uYW1lO1xuICAgICAgZmlsZS5maWxlcGF0aCA9IGZpbGUuZmlsZV9wYXRoO1xuICAgICAgZmlsZS5vcmlnaW5hbF9maWxlbmFtZSA9IGZpbGUub3JnX25hbWU7XG4gICAgICBmaWxlLmZpbGVfbmFtZSA9IGZpbGUub3JnX25hbWU7XG4gICAgICBmaWxlLmxpbmtTZXQgPSAnJztcbiAgICAgIGRlbGV0ZSBmaWxlLm5hbWU7XG4gICAgICBkZWxldGUgZmlsZS5maWxlX3BhdGg7XG4gICAgICBkZWxldGUgZmlsZS5vcmdfbmFtZTtcblxuICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfSk7XG4gICAgY29uc3QgYXR0ZXN0YXRpb25GaWxlcyA9IGRhdGEuYXNzb2NpYXRlZF9kb2N1bWVudHMubWFwKChlbGU6IGFueSkgPT4ge1xuICAgICAgZWxlLmZpbGVuYW1lID0gZWxlLm5hbWU7XG4gICAgICBlbGUuZmlsZXBhdGggPSBlbGUuZmlsZV9wYXRoO1xuICAgICAgZWxlLm9yaWdpbmFsX2ZpbGVuYW1lID0gZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZTtcbiAgICAgIGVsZS5maWxlX25hbWUgPSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xuICAgICAgZWxlLmxpbmtTZXQgPSBlbGUuaXNMaW5rU2V0O1xuICAgICAgZWxlLm90aGVycyA9IGVsZT8ub3RoZXJfdHlwZTtcblxuICAgICAgZGVsZXRlIGVsZS5uYW1lO1xuICAgICAgZGVsZXRlIGVsZS5maWxlX3BhdGg7XG4gICAgICBkZWxldGUgZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZTtcbiAgICAgIGRlbGV0ZSBlbGUuaXNMaW5rU2V0O1xuICAgICAgZGVsZXRlIGVsZT8ub3RoZXJfdHlwZTtcbiAgICAgIHJldHVybiBlbGU7XG4gICAgfSk7XG4gICAgY29uc3QgZ3JvdXBfZW1wbG95ZWVJZHMgPSBkYXRhLmdyb3VwX2VtcGxveWVlTmFtZXMubWFwKFxuICAgICAgKGlkOiBhbnkpID0+IGlkPy5lbXBsb3llZV9pZFxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBfSWRzID0gZGF0YT8udXNlcmdyb3VwX2lkcz8ubWFwKChpZDogYW55KSA9PiBpZCkgPz8gW107XG5cbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QsXG4gICAgICBjYXRlZ29yeUlkcyxcbiAgICAgICdfaWQnXG4gICAgKTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2lkID0gZGF0YT8ucG9saWN5X2lkO1xuICAgICh0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGRhdGEucG9saWN5X25hbWUpLFxuICAgICAgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOb3RlcyA9IGRhdGEubm90ZXMpLFxuICAgICAgKHRoaXMucG9saWN5Rm9ybS5jdXN0b21UYWdzID0gZGF0YS5jdXN0b21fdGFncyA/IGRhdGEuY3VzdG9tX3RhZ3MgOiBbXSk7XG5cbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBc3NpZ25lZXMgPVxuICAgICAgZ3JvdXBfZW1wbG95ZWVJZHMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIGdyb3VwX2VtcGxveWVlSWRzLCAnbXlfbWVtYmVyX2lkJylcbiAgICAgICAgOiBbXTsgLy9kb3VidCBpbiBuYW1lXG5cbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlID1cbiAgICAgIGdyb3VwX0lkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCwgZ3JvdXBfSWRzLCAnX2lkJylcbiAgICAgICAgOiBbXTtcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcyA9IGRhdGEuZW50aXRpZXNcbiAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMucmNMaXN0LCBkYXRhLmVudGl0aWVzLnNwbGl0KCcsJyksICdpdGVtX2lkJylcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsID0gZGF0YS5DQ0ZhaWxFbWFpbFxuICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBkYXRhLkNDRmFpbEVtYWlsLCAnZW1wbG95ZWVfZW1haWwnKVxuICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWxHcm91cCA9XG4gICAgICBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXG4gICAgICAgICAgZGF0YT8uY2NfZmFpbF91c2VyZ3JvdXBfaWRzLFxuICAgICAgICAgICdfaWQnXG4gICAgICAgIClcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IGRhdGEuQ0NFbWFpbFxuICAgICAgPyB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgZGF0YS5DQ0VtYWlsLnNwbGl0KCcsJyksXG4gICAgICAgICdlbXBsb3llZV9lbWFpbCdcbiAgICAgIClcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbCA9XG4gICAgICBkYXRhPy5jY191c2VyZ3JvdXBfaWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBkYXRhPy5jY191c2VyZ3JvdXBfaWRzLCAnX2lkJylcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPSBkYXRhLmVuYWJsZVBvcnRhbCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBkYXRhLmVuYWJsZVN1Z2dlc3Rpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb24gPSBkYXRhLmlzX3NpZ25hdHVyZV9yZXF1aXJlZFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yaXNrUmF0aW5nID0gZGF0YS5yaXNrX2NsYXNzID8gTnVtYmVyKGRhdGEucmlza19jbGFzcykgOiAxO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50c1xuICAgICAgPyB7XG4gICAgICAgIGZvcm1hdEZpbGVzOiBhdHRlc3RhdGlvbkZpbGVzLFxuICAgICAgfVxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSB9O1xuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlID0gZGF0YS5zdGFydERhdGVcbiAgICAgID8gbW9tZW50KGRhdGEuc3RhcnREYXRlKVxuICAgICAgOiBtb21lbnQoKTtcbiAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBkYXRhLmNoZWNrcG9pbnRzXG4gICAgICA/IGRhdGEuY2hlY2twb2ludHNcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLnRvdGFsUXVlc3Rpb24gPSBkYXRhLnRvdGFsX21hcmtzID8gZGF0YS50b3RhbF9tYXJrcyA6IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBhc3NpbmdNYXJrcyA9IGRhdGEucGFzc19tYXJrcyA/IGRhdGEucGFzc19tYXJrcyA6IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzID0gZGF0YS5SZXZpZXdlckF0dGFjaG1lbnRzXG4gICAgICA/IHtcbiAgICAgICAgZm9ybWF0RmlsZXM6IHJldmlld2VyRmlsZXMsXG4gICAgICAgIGZvcm1hdExpbmtzOiBkYXRhLlJldmlld2VyTGlua3MsXG4gICAgICB9XG4gICAgICA6IHsgZm9ybWF0RmlsZXM6IFtdLCBmb3JtYXRMaW5rczogW10gfTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzID1cbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgPSBkYXRhLlJldmlld2VyTWVtYmVySWQgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZENoZWNrcG9pbnRzID1cbiAgICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRPdmVyc2VlcnMgPVxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwIHx8XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID1cbiAgICAgIGRhdGEuYXNzb2NpYXRlZF9kb2N1bWVudHMubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLmNjRW1haWxPYmpJZHMgPVxuICAgICAgZGF0YT8uY2NfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMCA/IGRhdGE/LmNjX3VzZXJncm91cF9pZHMgOiBbXTtcbiAgICB0aGlzLmNjRmFpbEdyb3VwT2JqSWRzID1cbiAgICAgIGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkc1xuICAgICAgICA6IFtdO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50ID0gZGF0YT8uYXNzZXNzbWVudCA/PyBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua0Fzc2Vzc21lbnQgPSBkYXRhPy5hc3Nlc3NtZW50Py5sZW5ndGg7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFZlcnNpb24gPSBkYXRhPy5wb2xpY3lfdmVyc2lvbiA/IHRydWUgOiBmYWxzZTtcbiAgICAvLyB0aGlzLmNoZWNrRm9yQ3JlYXRlRG9jdW1lbnRzKCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uID0gZGF0YS5wb2xpY3lfdmVyc2lvbjtcbiAgICB0aGlzLnBvbGljeUZvcm0ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzLnByb2dyYW0gPVxuICAgICAgZGF0YT8ucHJvZ3JhbUNhdERldGFpbHMgJiYgZGF0YT8ucHJvZ3JhbUNhdERldGFpbHM/Lmxlbmd0aFxuICAgICAgICA/IGRhdGE/LnByb2dyYW1DYXREZXRhaWxzWzBdXG4gICAgICAgIDoge307XG4gICAgdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtID1cbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcbiAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGE/LnByb2dyYW1DYXREZXRhaWxzWzBdKSlcbiAgICAgICAgOiB7fTtcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG4gIGNoYW5nZU5hbWUoZXZlbnQ6IHN0cmluZykge1xuICAgIGxldCB0ZXh0ID0gZXZlbnQ7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPCguKj8pPi9naSwgJycpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdHlwZVNlbGVjdGVkKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50O1xuICB9XG4gIG9uVmVyc2lvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgcmVnZXhNYXRjaCA9IG5ldyBSZWdFeHAoJ15bQS1aYS16MC05XFxcXC4tXSokJyk7XG4gICAgdGhpcy5pc1ZlcnNpb25WYWxpZCA9IHJlZ2V4TWF0Y2gudGVzdCh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24pO1xuICAgIGlmICghdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xuICAgICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjApIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uRXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAnWW91ciBpbnB1dCBpcyBpbnZhbGlkLiBUaGUgdmVyc2lvbiBmaWVsZCBjYW4gb25seSBpbmNsdWRlIG51bWJlcnMsIGFscGhhYmV0cywgaHlwaGVuIG9yIGRvdHMuIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBpcyAyMCBjaGFyYWN0ZXJzLic7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaXNWZXJzaW9uVmFsaWQgJiZcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjBcbiAgICApIHtcbiAgICAgIHRoaXMudmVyc2lvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICdZb3VyIGlucHV0IGlzIGludmFsaWQuIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBpcyAyMCBjaGFyYWN0ZXJzLic7XG4gICAgfVxuICB9XG5cbiAgLy90aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIHdoZW4gd2UgY2xpY2sgb24gZGl2IHNlbGVjdFxuICBjbGlja0FwcHJvdmFsV29ya2Zsb3coZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBldmVudDtcbiAgICB0aGlzLmNyZWF0ZUFwcHJvdmFsQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xuICB9XG5cbiAgbGlzdENhbmNlbENsaWNrZWQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZmFsc2U7XG4gICAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICAgICAgLy8gdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdGVkQXBwcm92YWxXb3JrZmxvdyhldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW2V2ZW50XTtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBldmVudD8uX2lkID8gW2V2ZW50Py5faWRdIDogW107XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW2V2ZW50XTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgdXBkYXRlZFByb2dyYW1EZXRhaWxzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSBldmVudD8ubGlua1Byb2dyYW07XG4gICAgdGhpcy5wb2xpY3lGb3JtLnByb2dyYW1TZWxlY3RlZFZhbHVlcyA9IGV2ZW50Py5zZWxlY3RlZFZhbHVlcztcbiAgICB0aGlzLnBvbGljeUZvcm0uYnVzaW5lc3NDeWNsZSA9IGV2ZW50Py5idXNpbmVzc0N5Y2xlO1xuICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gIH1cblxuICBvbkFzc2Vzc21lbnRTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50ID0gW2V2ZW50XTtcbiAgfVxuICBnZXRBc3Nlc3NtZW50RGV0YWlscyhhc3Nlc3NtZW50RGV0YWlsczogYW55LCB0eXBlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2VcbiAgICAgIC5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeURldGFpbHMgPSByZXNbMF0uY2F0ZWdvcnkuZmluZChcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLl9pZCA9PSBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkLFxuICAgICAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgICAgICBhc3Nlc3NtZW50RGV0YWlsczoge1xuICAgICAgICAgICAgICAgIGlkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgICAgICAgIGFzc2Vzc21lbnRfbmFtZTogcmVzWzBdLmFzc2Vzc21lbnRfbmFtZSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6IHJlc1swXS5xdWVzdGlvbnNDb3VudCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfZGV0YWlsczogY2F0ZWdvcnlEZXRhaWxzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldE93bmVyc09uTG9hZCgpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgW3RoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKV0sXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gIH1cblxuICBhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbChldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb25zdCBvYmplY3RJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcbiAgICAgICAgJ19pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3cob2JqZWN0SWRzKTtcbiAgICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29udmVydEFwcHJvdmFsV29ya2Zsb3coYXBwcm92ZXJMaXN0OiBhbnkpIHtcbiAgICBsZXQgcmV0dXJuSnNvbjogYW55ID0ge307XG4gICAgY29uc3QgbW9kaWZpZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhcHByb3Zlckxpc3QpKTtcbiAgICBtb2RpZmllZERhdGE/LmZvckVhY2goKHdvcmtmbG93OiBhbnkpID0+IHtcbiAgICAgIHdvcmtmbG93Py5hcHByb3ZhbF93b3JrZmxvdz8uZm9yRWFjaCgoYXBwcm92ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuSnNvblsnbGV2ZWwnICsgaV0gPSBhcHByb3ZlcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXR1cm5Kc29uO1xuICB9XG5cbiAgZGVsZXRlTGV2ZWwoaW5kZXg6IGFueSkge1xuICAgIC8vIEFwcHJvdmVyIExldmVsIGRlbGV0ZVxuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3cuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgIGkgPCB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93Lmxlbmd0aDtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydsZXZlbDEnXSA9PT1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bJ2FsaWFzX25hbWUnXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bXG4gICAgICAgICAgJ2FsaWFzX25hbWUnXG4gICAgICAgIF0gPSBgTGV2ZWwgJHtpICsgMX1gO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdLmFwcHJvdmFsX3dvcmtmbG93W2luZGV4XVsnbGV2ZWwxJ10gPSBgTGV2ZWwgJHtpICsgMVxuICAgICAgICB9YDtcbiAgICB9XG4gIH1cblxuICBlZGl0V29ya2Zsb3coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0QXBwcm92YWxXb3JrZmxvdyA9IGV2ZW50O1xuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gIH1cblxuICAvL0Z1bmN0aW9uIHJlc3BvbnNpYmxlIHdoZW4gd2UgY2xpY2sgb24gQ1JFQVRFIEEgTkVXIEFQUFJPVkFMIFdPUktGTE9XXG4gIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKSB7XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZUFwcHJvdmFsQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgZWRpdExldmVsQ2xpY2tlZChlZGl0TGV2ZWw6IGFueSwgaW5kZXg6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0V29ya2Zsb3dMZXZlbCA9IHtcbiAgICAgIGVkaXRMZXZlbDogZWRpdExldmVsLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgIH07XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgfVxuXG4gIHNldEFjY2Vzc0ZpZWxkKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50ID09IDApIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMudXNlcnNBY2Nlc3NMaXN0O1xuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRMaXN0KCdwb2xpY3lBY2Nlc3MnLCB7XG4gICAgICAgIHVzZXJzOiB0aGlzLnVzZXJzQWNjZXNzTGlzdCxcbiAgICAgICAgZ3JvdXBzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJzQWNjZXNzTGlzdEJ5Q2F0ZWdvcnkoY2F0ZWdvcnlEZXRhaWxzOiBhbnkpIHtcbiAgICBsZXQgdW5pcXVlVXNlcnM6IGFueSA9IFtdO1xuICAgIGxldCB1bmlxdWVHcm91cHNJZDogYW55ID0gW107XG4gICAgdW5pcXVlVXNlcnMgPSB1bmlxQnkoXG4gICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9tYW5hZ2Vycz8uY29uY2F0KFxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9hcHByb3ZlcnMsXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYWxsX2F1dGhvcnNcbiAgICAgICksXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy51c2Vyc0FjY2Vzc0xpc3QgPSB1bmlxdWVVc2VycztcbiAgICB0aGlzLnVzZXJzQWNjZXNzTGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMudXNlcnNBY2Nlc3NMaXN0LCAnbWVtYmVyX2lkJyk7XG5cbiAgICB1bmlxdWVHcm91cHNJZCA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYXV0aG9yX3VzZXJncm91cF9pZHM/LmNvbmNhdChcbiAgICAgICAgICBjYXRlZ29yeURldGFpbHM/Lm93bmVyX3VzZXJncm91cF9pZHNcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBdO1xuICAgIHRoaXMuZ3JvdXBzQWNjZXNzTGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgdW5pcXVlR3JvdXBzSWQsXG4gICAgICAnX2lkJ1xuICAgICk7XG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICB0aGlzLmdyb3Vwc0FjY2Vzc0xpc3QsXG4gICAgICAnZ3JvdXBfaWQnXG4gICAgKTtcbiAgfVxuXG4gIHBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhwb2xpY3lEZXRhaWxzOiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gcG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc190eXBlO1xuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycyxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19ncm91cHMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3VwcyxcbiAgICAgICAgJ19pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID09IDApIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IFtdO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gW107XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRnJlcXVlbmN5KCkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5tYXJrX2ZhaWxlZF9hZnRlciA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFzc2lnbmVlX3N0YXJ0X2RhdGUgPSAnJztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gJyc7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gMDtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBkb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlUGlja2VyT2JqZWN0ID0ge1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgY2xhc3M6ICdlZmZlY3RpdmUtZGF0ZScsXG4gICAgICBwb3B1cDogdGhpcy5kYXRlUGlja2VyUG9wVXAsXG4gICAgICBjb21wb25lbnQ6IHRoaXMuZGF0ZVBpY2tlcixcbiAgICAgIG92ZXJsYXk6IHRoaXMuZGF0ZVBpY2tlck92ZXJsYXksXG4gICAgfTtcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuaGFuZGxlRG9jdW1lbnRDbGljayhkYXRlUGlja2VyT2JqZWN0KTtcbiAgfVxuXG4gIG9uVGVtcGxhdGVTZWxlY3QoZXZlbnQ6IGFueSwgaXNQcmVzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGV2ZW50Py5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNUZW1wbGF0ZUNsb3NlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcblxuICAgIGNvbnN0IHVuYW1lID0gdGhpcy51c2VySW5mbyA/IHRoaXMudXNlckluZm8ubmFtZSA6ICcnO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMubWVtYmVyX29ial9pZDtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5wb2xpY3lJZDtcbiAgICB0aGlzLnRlbXBsYXRlSWQgPSBldmVudFswXT8uX2lkO1xuICAgIHRoaXMucG9saWN5U2VydmljZVxuICAgICAgLnNhdmVQb2xpY3lEZXRhaWxzKHVuYW1lLCB1aWQsIGlkLCBuYW1lLCAnJywgMClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmlldyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25VcmwoKTtcbiAgICAgICAgaWYgKGlzUHJlc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9UZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldE5hdmlnYXRpb25VcmwoKSB7XG4gICAgY29uc3QgYmFzVXJsID1cbiAgICAgIHRoaXMuYmFzZVVSTCArXG4gICAgICAnL2FsbC9wb2xpY3kvZWRpdC1wb2xpY3k/aWQ9JyArXG4gICAgICB0aGlzLnBvbGljeUlkICtcbiAgICAgICcmdGVtcGxhdGVJZD0nICtcbiAgICAgIHRoaXMudGVtcGxhdGVJZDtcbiAgICB0aGlzLnRlbXBsYXRlVXJsID0gYmFzVXJsO1xuICB9XG5cbiAgbmF2aWdhdGVUb1RlbXBsYXRlKCkge1xuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodGhpcy50ZW1wbGF0ZVVybCwgdHJ1ZSk7XG4gIH1cblxuICBvbkl0ZW1zU2VsZWN0ZWRDaGFuZ2UoaXRlbXM6IExpc3RJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXMgPSBpdGVtcztcbiAgICB0aGlzLmFsbFByb2dhbVNlbGVjdGVkID0gKFtdIGFzIGFueSkuY29uY2F0KC4uLiBPYmplY3QudmFsdWVzKGl0ZW1zKSk7XG4gICAvLyBjb25zb2xlLmxvZygnYWxsUHJvZ2FtU2VsZWN0ZWQnLCB0aGlzLnNlbGVjdGVkUHJvZ3JhbXMsdGhpcy5hbGxQcm9nYW1TZWxlY3RlZCk7XG4gIH1cblxuICBzZWxlY3RDYXRlZ29yeSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbFByb2dhbVNlbGVjdGVkID0gKFtdIGFzIGFueSkuY29uY2F0KC4uLiBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0ZWRQcm9ncmFtcykpO1xuICAgIGNvbnNvbGUubG9nKCdhbGxQcm9nYW1TZWxlY3RlZCcsIHRoaXMuc2VsZWN0ZWRQcm9ncmFtcyx0aGlzLmFsbFByb2dhbVNlbGVjdGVkKTtcbiAgfVxuXG4gIHJlbW92ZVByb2dyYW0ocHJvZ3JhbTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRQcm9ncmFtcyk7XG4gICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNba2V5XS5maW5kSW5kZXgoXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09PSBwcm9ncmFtPy5pZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBhZnRlciB0ZXN0aW5nXG4gIC8vIEdldCBsaW5rZWQgcHJvZ3JhbSBkYXRhXG4gIGdldExpbmtQcm9ncmFtKCkge1xuICAgIHRoaXMubGlua1Byb2dyYW0gPSAge1xuICAgIFwicHJvZ3JhbVwiOiB7XG4gICAgICBcImxpbmtlZFwiOiBbXG4gICAgICAgIDExLFxuICAgICAgICAxMlxuICAgICAgXSxcbiAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgXCJuYW1lXCI6IFwiUDFcIixcbiAgICAgICAgICBcInBhcmVudElkXCI6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiaWRcIjogMyxcbiAgICAgICAgICBcIm5hbWVcIjogXCJQMyB1cGRhdGVkXCIsXG4gICAgICAgICAgXCJwYXJlbnRJZFwiOiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImlkXCI6IDQsXG4gICAgICAgICAgXCJuYW1lXCI6IFwiUDMuMVwiLFxuICAgICAgICAgIFwicGFyZW50SWRcIjogM1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9XG4gIH1cbn1cbiIsIjwhLS0gPHA+d29ya2Zsb3ctcG9saWN5IHdvcmtzITwvcD4gLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctcG9saWN5XCI+XG4gICAgPCEtLSBQb2xpY3kgTmFtZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeU5hbWVcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFtzcmNdPVwiQVNTRVRTLndoYXRcIlxuICAgICAgICAgIGFsdD1cIm5hbWVcIlxuICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0/LnBvbGljeU5hbWUgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICduYW1lJ1wiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5TmFtZSAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cbiAgICAgICAgICAgIFBvbGljeSBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJhY3RpdmVTZWxlY3RvciA9ICduYW1lJ1wiXG4gICAgICAgICAgICAoZm9jdXNpbik9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgdHJ1ZSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUgPT0gJycgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICduYW1lJ1wiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwiYWN0aXZhdGVTZWxlY3RvcignbmFtZScsIGZhbHNlKVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gY2hhbmdlTmFtZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSB0aGlzIHBvbGljeVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lLmxlbmd0aCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHBvbGljeUZvcm0ucG9saWN5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbmFtZScsIHRydWUpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgIXBvbGljeUZvcm0ucG9saWN5TmFtZS50cmltKClcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUGxlYXNlIGVudGVyIGEgbmFtZSBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDx2Y29tcGx5LWVkaXRvclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeU5vdGVzXCJcbiAgICAgICAgICAgIFtlZGl0b3JDb25maWddPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgID48L3Zjb21wbHktZWRpdG9yPlxuICAgICAgICAgIDwhLS0gPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJhdmFpbGFiaWxpdHlPblBvcnRhbCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEbyB5b3Ugd2FudCB0aGlzIHBvbGljeSB0byBiZSBhdmFpbGFibGUgb24gdGhlIHBvcnRhbD9cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnVGhlIHBvbGljaWVzIHRoYXQgeW91IGludGVuZCB0byBtYWtlIGFjY2Vzc2libGUgdG8gdGhlIGVudGlyZSBvcmdhbml6YXRpb24gY2FuIGJlIGFkZGVkIHRvIHRoZSBwb2xpY3kgcG9ydGFsLiBJdCBpcyBsaWtlIGEgc2hhcmVkIGNhdGFsb2cgb2YgYWxsIGFjdGl2ZSAmIHVwZGF0ZWQgcG9saWNpZXMgdGhhdCBhbnkgbG9nZ2VkIGluIHVzZXIgY2FuIHJlYWQvZG93bmxvYWQgZm9yIHJlZmVyZW5jZS4nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICA+JiN4ZTkzMjs8L2lcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFjY2VwdCBzdWdnZXN0aW9uc1xuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCB1c2VycyBjYW4gcHJvdmlkZSBpbXByb3ZlbWVudCBzdWdnZXN0aW9ucyB0byB0aGUgcG9saWNpZXMgdGhhdCBhcmUgbGlzdGVkIG9uIHRoZSBQb2xpY3kgUG9ydGFsLidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxuICAgICAgICAgICAgPjwvYXBwLWNzLXN3aXRjaD4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBvbGljeSBDYXRlZ29yeSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2F0ZWdvcnknXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5jYXNlX2NhdGVnb3J5XCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5J1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgID5Qb2xpY3kgQ2F0ZWdvcnkgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjYXRlZ29yeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgYSBjYXRlZ29yeSBmb3IgdGhpcyBwb2xpY3kuXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjYXRlZ29yeSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsIGNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNhdGVnb3J5Lml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBjYXRlZ29yeS5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXRlZ29yeS5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCIgW2NsYXNzLm1vcmUtb25lXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoPjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucGx1c109XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aD4yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDAsMilcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsY2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NhdGVnb3J5Lml0ZW1fbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMlwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2F0ZWdvcnkucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdjYXRlZ29yeSdcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NhdGVnb3J5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2F0ZWdvcnkgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsIGNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkuaXRlbV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgdGhlIGNhdGVnb3J5IGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5jdXN0b21UYWdzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvbGljeUZvcm0/LmN1c3RvbVRhZ3NcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtMlwiPnt7IHRhZy50YWduYW1lIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFnLnZhbHVlXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB0YWcudGFnbmFtZSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFZmZlY3RpdmUgRGF0ZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cImZhbHNlXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMud2hlblwiIGFsdD1cIlwiIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkVmZmVjdGl2ZSBEYXRlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lLXBpY2tlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tlci1ncm91cFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgZWZmZWN0aXZlIGRhdGUgb2YgdGhlIHBvbGljeS5cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgfCBkYXRlIDogJ2RkIE1NTSB5eXl5J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKClcIlxuICAgICAgICAgICAgICAgIGlkPVwiZWZmZWN0aXZlLWRhdGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkyZDs8L2k+XG4gICAgICAgICAgICAgIDxkcC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cImRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7IGNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGVDb25maWdcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2RwLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1vdmVybGF5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0ZVBpY2tlck92ZXJsYXlcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUG9saWN5IE93bmVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ293bmVycydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ293bmVycycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5pbV9jcmVhdGluZ1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5QT0xJQ1kgT1dORVIoUyk8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdvd25lcnMnLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIXBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IG93bmVycyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnb3duZXJzJywgcG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXSwgMClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X293bmVycz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9saWN5VXNlclBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICsge3sgcG9saWN5Rm9ybT8ucG9saWN5X293bmVycy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTEgdngtbXItMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAmXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1NhbWFudGhhIEpvbmVzJ1wiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID5TYW1hbnRoYSBKb25lczwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvbGljeUdyb3VwUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICs0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3BvbGljeVVzZXJQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG93bmVyIG9mIHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIm93bmVyPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ293bmVycycsIG93bmVyLCBpICsgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG93bmVyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lHcm91cFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidIYXJzaHZhcmRoYW4gS2FyaXdhbGEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFyc2h2YXJkaGFuIEthcml3YWxhXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdvd25lcnMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgIXBvbGljeUZvcm0/LnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3Qgb3duZXJzIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJldmlldyAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIj5cbiAgICAgICAgPGltZyAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIiBzcmM9XCJBU1NFVFMucmV2aWV3ZXJcIiBhbHQ9XCJcIiAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UkVWSUVXPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJldmlld1NlbGVjdGlvbiB2eC1wLTMgdngtcGItMFwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1tYi0xXCI+XG4gICAgICAgICAgICAgIERvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZD9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICBuYW1lPVwicmV2aWV3LXR5cGVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIlxuICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cInR5cGVTZWxlY3RlZCh0cnVlKVwiXG4gICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItM1wiPlxuICAgICAgICAgICAgICAgIFlFU1xuICAgICAgICAgICAgICA8L2Rpdj48L2FwcC1jcy1yYWRpb1xuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICBuYW1lPVwicmV2aWV3LXR5cGVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhcG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCJcbiAgICAgICAgICAgICAgKGNoZWNrZWRFdmVudCk9XCJ0eXBlU2VsZWN0ZWQoZmFsc2UpXCJcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0zXCI+XG4gICAgICAgICAgICAgICAgTk9cbiAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtMlwiPlJFVklFV0VSPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgcmV2aWV3aW5nIHRoaXMgcG9saWN5XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJldmlld2VyIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgcmV2aWV3ZXI/Lm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtM1wiPlJFVklFVyBGUkVRVUVOQ1k8L2xhYmVsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyA9PSAnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJ1dHRvblBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFdoZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkcyB0byBiZSByZXZpZXdlZD9cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNFVCBBIEZSRVFVRU5DWVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgcmV2aWV3IHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTmV3IEFwcHJvdmFsIFdvcmtmbG93IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5hcHByb3ZhbFwiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIiBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5QXBwcm92YWxGbGFnICE9PSAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgICAgPkFQUFJPVkFMIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKTsgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3JlYXRlTmV3QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENSRUFURSBBIE5FVyBBUFBST1ZBTCBXT1JLRkxPV1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICFzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBjbGlja0FwcHJvdmFsV29ya2Zsb3codHJ1ZSk7IGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzZWxlY3RlZFdvcmtmbG93Py5sZW5ndGggPiAwICYmIHNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LW1iLTJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tdC0yIHZ4LW1iLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlV29ya2Zsb3coKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFdvcmtmbG93KHNlbGVjdGVkV29ya2Zsb3dbMF0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWwgb2Ygc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3c7XG4gICAgICAgICAgICAgICAgbGV0IGFwcHJvdmFsSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZXZlbC1sZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLW5hbWUgdngtZnMtOSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbGgtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYWxpYXNfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFwcHJvdmFsPy5hbGlhc19uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LmxldmVsMVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFsaWFzX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcHByb3ZhbD8uYWxpYXNfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy5sZXZlbDFcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtOSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1saC0zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZSA9PT0gXCJST1VORFJPQklOXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlJPVU5ELVJPQklOXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8udHlwZSA9PT0gXCJBTllPTkVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiQU5ZIE9ORVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMiB2eC1tbC0yXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICA+IC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPCAyXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IDEgPT0gYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoID8gXCJGaW5hbFwiIDogMSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImFwcHJvdmFsPy5hcHByb3ZlcnNbMF0/Lm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgID57eyBhcHByb3ZhbD8uYXBwcm92ZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ3b3JrZmxvd1BvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAre3sgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICN3b3JrZmxvd1BvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGFwcHJvdmFsPy5hcHByb3ZlcnMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZhbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiYXBwcm92ZXI/Lm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09ICdzZXF1ZW50aWFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxJbmRleCArIDEgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiRmluYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWxJbmRleCArIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcHJvdmVyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRMZXZlbENsaWNrZWQoYXBwcm92YWwsYXBwcm92YWxJbmRleClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRlbGV0ZUxldmVsKGFwcHJvdmFsSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlQnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1tbC00IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5YWU7PC9pPiBERUxFVEVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmFsX3dvcmtmbG93Py5sZW5ndGggJiZcbiAgICAgICAgICAgICAgIXBvbGljeUFwcHJvdmFsRmxhZyAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IG9yIGNyZWF0ZSBhbiBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQb2xpY3kgQWNjZXNzIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidHJ1ZVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwb2xpY3lBY2Nlc3MnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInRydWVcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggJiZcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMubG9ja19zY29wZVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlBPTElDWSBQT1JUQUwgQUNDRVNTPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncG9saWN5QWNjZXNzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFdobyBzaG91bGQgYmUgYWJsZSB0byB2aWV3IHRoaXMgcG9saWN5P1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW10LTIgdngtbWItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9saWN5QWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb2xpY3lBY2Nlc3NQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXNzR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2Nlc3NHcm91cC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBY2Nlc3NQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ1c2VyPy5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3BvbGljeUFjY2VzcycsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5lbXBsb3llZV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNhY2Nlc3NHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYWNjZXNzR3JvdXAnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInZ4LW10LTQgdngtbWItMlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidwb2xpY3lGb3JtQWNjZXNzVHlwZSdcIiBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDBcIiAoY2hlY2tlZEV2ZW50KT1cInNldEFjY2Vzc0ZpZWxkKDApXCJcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dFwiPlxuICAgICAgICAgICAgICAgICAgICBFdmVyeW9uZSB3aG8gaGFzIGFjY2VzcyB0byB0aGlzIFBvbGljeSBDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3BvbGljeUZvcm1BY2Nlc3NUeXBlJ1wiIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiIChjaGVja2VkRXZlbnQpPVwic2V0QWNjZXNzRmllbGQoMSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtbXQtMVwiXG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHVzZXJzL2dyb3Vwc1xuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIlxuICAgICAgICAgICAgICA+VmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyczwvc3BhblxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdCB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICA+QUNDRVBUIFNVR0dFU1RJT05TXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXR0ZXN0YXRpb25zIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJmYWxzZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLmF0dGVzdGF0aW9uc1wiIGFsdD1cIlwiIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QVRURVNUQVRJT05TPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5TYW1hbnRoYSBKb25lczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9saWN5QXR0ZXN0YXRpb25Qb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICArNFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBdHRlc3RhdGlvblBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInSGFyc2h2YXJkaGFuIEthcml3YWxhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICBIYXJzaHZhcmRoYW4gS2FyaXdhbGFcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICA+UkVRVUlSRVMgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ1JlcXVpcmVzIGUtc2lnbmF0dXJlIGZvciBhdHRlc3RhdGlvbiBpbmZvIHRleHQgaGVyZS4uLidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgID4mI3hlOTFmOzwvaVxuICAgICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LW10LTJcIj5XSEVOPzwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBXaGF0IGlzIHRoZSBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpczxiciAvPnBvbGljeT9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2VcIj5cbiAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgRXZlcnkgV2VkbmVzZGF5IGJ5IDExOjU5IHBtXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCJcbiAgICAgICAgICAgID5BU1NFU1NNRU5UIE9GIFVOREVSU1RBTkRJTkc8L2xhYmVsXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPjUgUXVlc3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXBwcm92YWwgV29ya2Zsb3cgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAqbmdJZj1cImZhbHNlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMuYXBwcm92YWxcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycydcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgYXBwcm92YWwtd29ya2Zsb3dcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lBcHByb3ZhbEZsYWcgIT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgICAgQXBwcm92YWwgd29ya2Zsb3cgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBhZGRNb3JlTGV2ZWxzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1R5cGUgPSAnU0VRVUVOVElBTCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDcmVhdGUgYSBuZXcgQXBwcm92YWwgV29ya2Zsb3dcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFwcHJvdmVyV29ya0Zsb3dMaXN0Py5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Y3Mtc2VsZWN0XG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQXBwcm92YWxXb3JrZmxvd1wiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkV29ya2Zsb3dDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeSdcIlxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93XCJcbiAgICAgICAgICAgICAgW3NldE1heFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y3Mtb3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXBwcm92ZXJXb3JrRmxvd0xpc3RcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGRhdGEud29ya2Zsb3dfbmFtZSB9fVxuICAgICAgICAgICAgICA8L2NzLW9wdGlvbj5cbiAgICAgICAgICAgICAgPGNzLW9wdGlvblxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCItMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBhZGRNb3JlTGV2ZWxzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPkNyZWF0ZSBhIG5ldyBhcHByb3ZhbCB3b3JrZmxvdzwvY3Mtb3B0aW9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvY3Mtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxldmVsIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZVwiPkxldmVsIHt7IGkgKyAxIH19PC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj57eyBsZXZlbC5uYW1lIH19PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBsZXZlbC5hcHByb3ZlcnMuc2xpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2FwcHJvdmVycycsIGFwcHJvdmVyLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwXCIgKm5nSWY9XCJsZXZlbC5uYW1lID09ICdTRVFVRU5USUFMJ1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaiArIDFcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPnt7IGFwcHJvdmVyLm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGV2ZWwuYXBwcm92ZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxhYmVsTmFtZS5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgK1xuXG4gICAgICAgICAgICAgICAgICAgIHt7IGxldmVsLmFwcHJvdmVycy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNsYWJlbE5hbWUgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBsZXZlbC5hcHByb3ZlcnMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXBwcm92ZXJzJywgYXBwcm92ZXIsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxldmVsLm5hbWUgPT0gJ1NFUVVFTlRJQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID09IGxldmVsLmFwcHJvdmVycy5zbGljZSgxKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiRmluYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBqICsgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwcm92ZXIubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlLCBsZXZlbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92ZXJzTGlzdEluZGV4ID0gaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtYnRuXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3dvcmtmbG93TGV2ZWwnLCBsZXZlbCwgaSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgIXBvbGljeUFwcHJvdmFsRmxhZ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBvciBjcmVhdGUgYW4gYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgID48YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xuICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICArIEFkZCBNb3JlIExldmVsc1xuICAgICAgICAgICAgPC9idXR0b24+PC9sYWJlbFxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gV2hvIC8gbm93IEF0dGVzdGF0aW9uIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5jYXNlX2Fzc2lnbmVlc1wiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QXR0ZXN0YXRpb248L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LW1iLTJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJiAhZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgcGVyc29ucyByZXNwb25zaWJsZSBmb3IgYXR0ZXN0aW5nIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhZ3JvdXBFbmFibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGFzc2lnbmVlIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5zbGljZSgwLCAxKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgYXNzaWduZWUpXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiYXNzaWduZWUuZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBhc3NpZ25lZS5lbXBsb3llZV9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnbmVlUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cEVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cEVuYWJsZWQgJiYgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICByZW1vdmUoJ2Fzc2lnbmVlcycsIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzWzBdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0/LmVtcGxveWVlX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0/LmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJVc2VyUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAmXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShcbiAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXBBc3NpZ25lZXMnLFxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZVswXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdPy5ncm91cF9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JvdXAucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWduZWVzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgICgocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgICAgICAgICAhZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICAgICAgIChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICAgICAgIChpc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgaWQ9XCJ3aG92YWxpZGF0ZW1zZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb25cIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICBjbGFzcz1cIndoby10b2dnbGVcIlxuICAgICAgICAgICAgPlRISVMgUE9MSUNZIFJFUVVJUkVTIEUtU0lHTkFUVVJFIEZPUiBBVFRFU1RBVElPTlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgdGhlIHJlYWRlcnMgd2lsbCBiZSByZXF1aXJlZCB0byBhdHRlc3QgdGhpcyBwb2xpY3kgdXNpbmcgdGhlaXIgZWxlY3Ryb25pYyBzaWduYXR1cmUuJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgPlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjYXNzaWduZWVQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNVc2VyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgYXNzaWduZWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBhc3NpZ25lZS5lbXBsb3llZV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2dyb3VwQXNzaWduZWVzJywgZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGEuZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgLS0+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlclBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIHBvbGljeUZvcm0/LkNDRW1haWwgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIG92ZXJzZWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/LmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2Vlckdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhIG9mIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRW1haWwnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8IS0tIG92ZXJzZWVyIGVuZCAtLT5cblxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZmFpbCBzdGFydCAtLT5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjRmFpbCcsIG92ZXJzZWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/LmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlckZhaWxHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEZhaWxFbWFpbCcsIGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZmFpbCBlbmQgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFdoZW4gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPldoZW4/PC9sYWJlbD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1pbnB1dCBmcmVxdWVuY3ktY3VzdG9tLWlucHV0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZCBidXR0b24tc2VjXCJcbiAgICAgICAgICA+IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZCBidXR0b24tc2VjIHNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnZnJlcXVlbmN5JywgcmMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiZnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID57eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPCEtLSA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IGZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAgICAgICAgICFncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgICAgKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQpKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBhbiBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+RWZmZWN0aXZlIERhdGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtdGltZS1waWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBkYXRlIGZyb20gd2hpY2ggdGhpcyBwb2xpY3kgZ29lcyBpbnRvIGVmZmVjdC5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSAgfCBkYXRlOiAnZGQgTU1NIHl5eXknXCIgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKCk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRwLWRhdGUtcGlja2VyICNkYXRlUGlja2VyIChvblNlbGVjdCk9XCJkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO2Nsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZGF0ZUNvbmZpZ1wiIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHAtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCIgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGVja3BvaW50cyAvIEFzc2Vzc21lbnQgb2YgVW5kZXJzdGFuZGluZyAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgKm5nSWY9XCJ0cnVlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgICAgQXNzZXNzbWVudCBvZiBVbmRlcnN0YW5kaW5nXG4gICAgICAgICAgICA8IS0tIDxidXR0b24gICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aD09PTBcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsdHJ1ZSlcIj4rIEFkZCBDaGVja3BvaW50czwvYnV0dG9uPiAtLT5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMnLCB0cnVlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZcyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb2xpY3kuXCIgcmVhZG9ubHk+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiPlxuICAgICAgICAgICAgICBTZXQgdXAgYSBxdWVzdGlvbm5haXJlIHRvIGNvbmZpcm0gdGhlIHJlYWRlcuKAmXM8YnIgLz51bmRlcnN0YW5kaW5nXG4gICAgICAgICAgICAgIG9mIHRoZSBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3twb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoICsgKHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPiAxID8nIENoZWNrcG9pbnRzJzonIENoZWNrcG9pbnQnKX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVja3BvaW50LXBvaW50LXRleHQgZmlyc3RcIj5UT1RBTCBQT0lOVFM6IDxzcGFuIGNsYXNzPVwibm9cIj57e3BvbGljeUZvcm0/LnRvdGFsUXVlc3Rpb259fTwvc3Bhbj48YnI+PGVtPkVhY2ggcXVlc3Rpb24gY2FycmllcyAxIHBvaW50PC9lbT48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrcG9pbnQtcG9pbnQtdGV4dFwiPlBPSU5UUyBSRVFVSVJFRCBUTyBBVFRFU1QgOiA8c3BhbiBjbGFzcz1cIm5vXCI+e3twb2xpY3lGb3JtPy5wYXNzaW5nTWFya3N9fTwvc3Bhbj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjaGVja3BvaW50cycsIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzKVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIj57e1xuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggK1xuICAgICAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgID8gXCIgUXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIiBRdWVzdGlvblwiKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGFwcC1wb3BvdmVyICNjaGVja3BvaW50UG9wT3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGNoZWNrcG9pbnQgb2YgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHMgfCBzbGljZTogMTsgbGV0IGogPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2hlY2twb2ludHMnLGNoZWNrcG9pbnQsaisxKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGVja3BvaW50Py5xdWVzdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJpc2sgQ2xhc3NpZmljYXRpb24gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAqbmdJZj1cInNob3dSaXNrQ2xhc3NpZmljYXRpb24gJiYgZmFsc2VcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5yaXNrUmF0aW5nXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMucmlza3NcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiIXBvbGljeUZvcm0/LnJpc2tSYXRpbmdcIiAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5yaXNrUmF0aW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmlzayBDbGFzc2lmaWNhdGlvbjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsYXNzaWZpY2F0aW9uXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb3dcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2xhc3Mgb2Ygcmlza0NsYXNzaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW2NsYXNzLmNsYXNzXVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNsYXNzaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2xhc3MudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnJpc2tSYXRpbmcgPT09IGNsYXNzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucmlza1JhdGluZ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGNsYXNzLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5yZXNwb25zaWJpbGl0eV9jZW50ZXJcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyYydcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJlc3BvbnNpYmlsaXR5IENlbnRlcjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcihzKSB0aGF0IHRoaXMgcG9saWN5IHJlbGF0ZXMgdG8uXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/LnNsaWNlKDAsIDEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyYycsIHJjKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJjLml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyByYy5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJjUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JjUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3MgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByYy5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFZlcnNpb24gLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFZlcnNpb25cIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMuYXNzb2NpYXRlZF9yaXNrc1wiXG4gICAgICAgICAgYWx0PVwibmFtZVwiXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+VkVSU0lPTjwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb25cIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZlcnNpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNwZWNpZnkgdGhlIHBvbGljeSB2ZXJzaW9uLlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCIhaXNWZXJzaW9uVmFsaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdmVyc2lvbkVycm9yTWVzc2FnZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmV2aWV3ZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgJiYgZmFsc2VcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5yZXZpZXdlclwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmV2aWV3ZXIgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciByZXZpZXdpbmcgdGhpcyBwb2xpY3lcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJldmlld2VyIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJldmlld2VyLm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHJldmlld2VyLm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IGEgcmV2aWV3ZXIgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5XaGVuPyA8L2xhYmVsPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTZXQgQSBmcmVxdWVuY3lcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQgYnV0dG9uLXNlY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3QgdGhlIHJldmlldyBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGFwcC1mb3JtYXQtYW5kLWV2aWRlbmNlXG4gICAgICAgICAgICAodXBkYXRlRmlsZXMpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXJfYXR0YWNobWVudHMnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICNmb3JtYXRFdmlkZW5jZVxuICAgICAgICAgICAgW21vZGVdPVwiJ3BvbGljeVJldmlld2VyJ1wiXG4gICAgICAgICAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInBvbGljeUZvcm0/LmRvY3VtZW50c0FuZExpbmtzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9hcHAtZm9ybWF0LWFuZC1ldmlkZW5jZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gT3ZlcnNlZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRPdmVyc2VlcnNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCdcbiAgICAgIFwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NFbWFpbCcgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0ZhaWwnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cIlxuICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDAgfHwgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDBcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAocG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwKSB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5vdmVyc2lnaHRcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0VtYWlsJyAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0ZhaWwnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5PdmVyc2lnaHQ8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoaXMgcG9saWN5P1wiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NFbWFpbCBvZiBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIGNjRW1haWwpXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY2NFbWFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjY0VtYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cEVuYWJsZWRcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBFbmFibGVkICYmIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRW1haWxbMF0uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdLmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWwubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXT8uZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHBvbGljeSBpcyBub3QgYXR0ZXN0ZWQgb24gdGltZT9cIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NGYWlsIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgY2NGYWlsKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNjRmFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRmFpbC5lbXBsb3llZV9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNjRmFpbFBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBFbmFibGVkXCIgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXSlcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3ZlcnNlZXJGYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBbMF0/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXT8uZ3JvdXBfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyRmFpbEdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2NFbWFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRW1haWwgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgY2NFbWFpbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2NjRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRmFpbCBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBjY0ZhaWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjY0ZhaWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVsYXRlZCBEb2N1bWVudHMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5mb3JtYXRfZXZpZGVuY2VcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJFTEFURUQgRE9DVU1FTlRTPC9sYWJlbD5cbiAgICAgICAgICA8YXBwLWZvcm1hdC1hbmQtZXZpZGVuY2VcbiAgICAgICAgICAgICh1cGRhdGVGaWxlcyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NvY2lhdGVkRG9jdW1lbnRzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICBbbW9kZV09XCIncG9saWN5J1wiXG4gICAgICAgICAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInBvbGljeUZvcm0/LmFzc29jaWF0ZWREb2N1bWVudHNcIlxuICAgICAgICAgID48L2FwcC1mb3JtYXQtYW5kLWV2aWRlbmNlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBMaW5rIFByb2dyYW1zICYgUmVzcG9uc2liaWxpdGllcyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFkZExpbmtQcm9ncmFtXCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnbGlua1Byb2dyYW0nXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdsaW5rUHJvZ3JhbScgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwiXG4gICAgICAgICAgYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCA+IDBcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5saW5rX2l0ZW1zXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxuICAgICAgICAgICAgPkxJTksgUFJPR1JBTVMgJiBSRVNQT05TSUJJTElUSUVTPC9sYWJlbFxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2xpbmtQcm9ncmFtJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IFByb2dyYW1zICYgcmVzcG9uc2liaWxpdGllcyB0aGF0IGFyZTxiciAvPmFzc29jaWF0ZWQgd2l0aFxuICAgICAgICAgICAgICB0aGlzIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdsaW5rUHJvZ3JhbScsIGFsbFByb2dhbVNlbGVjdGVkWzBdKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImFsbFByb2dhbVNlbGVjdGVkWzBdPy5uYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+e3sgYWxsUHJvZ2FtU2VsZWN0ZWRbMF0/Lm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXIucG9wb3ZlcigpXCIgIFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IGFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLXBvcG92ZXJcbiAgICAgICAgICAgICAgI3Byb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXJcbiAgICAgICAgICAgICAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgYWxsUHJvZ2FtU2VsZWN0ZWQgfCBzbGljZSA6IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKCdsaW5rUHJvZ3JhbScsIGRhdGEpXCIgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2xpbmtQcm9ncmFtJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExpbmsgQXNzZXNzbWVudCAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0uYWRkTGlua0Fzc2Vzc21lbnRcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdpc0Fzc2Vzc21lbnQnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdpc0Fzc2Vzc21lbnQnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5hc3Nlc3NtZW50c1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5hc3Nlc3NtZW50Py5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkxJTksgQVNTRVNTTUVOVFM8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0Fzc2Vzc21lbnQnLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgYXNzZXNzbWVudHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXM8YnIgLz5wb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uYXNzZXNzbWVudFswXT8uYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfbmFtZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxhcHAtcG9wb3ZlclxuICAgICAgICAgICAgICAjcHJvZ3JhbVJlc3BvbnNpYmlsaXR5UG9wb3ZlclxuICAgICAgICAgICAgICBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXNzZXNzbWVudCBvZiBwb2xpY3lGb3JtLmFzc2Vzc21lbnQgfCBzbGljZSA6IDFcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXNzbWVudD8uYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0Fzc2Vzc21lbnQnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTGluayBSZWxhdGVkIFBvbGljZXMgLS0+XG5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0uYWRkTGlua1BvbGljaWVzXCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSBDT05TVEFOVFMuTElOS19QT0xJQ1lcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2lzTGlua2VkUG9saWNlcycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llc1wiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCIhU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoXCJcbiAgICAgICAgICBbc3JjXT1cIkxJTktTLmxpbmtlZFBvbGljeUltYWdlXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIFt4bWxuc109XCJMSU5LUy5jaGVja2VkXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkxJTksgUkVMQVRFRCBQT0xJQ0lFUzwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2lzTGlua2VkUG9saWNlcycsIHRydWUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBwb2xpY2llcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBvbGljeSBvZiBTZWxlY3RlZExpc3RPZlBvbGljaWVzLnNsaWNlKDAsIDEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKENPTlNUQU5UUy5MSU5LX1BPTElDWSwgcG9saWN5Py5jb250cmFjdF9pZClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3k/LmNvbnRyYWN0X25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Py5jb250cmFjdF9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbGF0ZWRQb2xpY3kucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICt7eyBTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKENPTlNUQU5UUy5MSU5LX1BPTElDWSwgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcmVsYXRlZFBvbGljeSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9saWN5IG9mIFNlbGVjdGVkTGlzdE9mUG9saWNpZXMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShDT05TVEFOVFMuTElOS19QT0xJQ1ksIHBvbGljeT8uY29udHJhY3RfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBvbGljeT8uY29udHJhY3RfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLmlzUG9ydGFsRGlzcGxheUVuYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUZvcm0/LkxpbmtlZFBvbGljaWVzID09IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3aG8tdG9nZ2xlXCJcbiAgICAgICAgICAgID5ESVNQTEFZIE9OIFRIRSBQT0xJQ1kgUE9SVEFMXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiQ09OU1RBTlRTLkxJTktfUE9MSUNZX0hFTFBfVEVYVFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICA+JiN4ZTkxZjs8L2lcbiAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxhcHAtY2hlY2tib3gtbGlzdFxuICAgIFtjb25maWddPVwiY2F0ZWdvcnlDb25maWdcIlxuICAgIFt0d29Db2x1bW5dPVwiZmFsc2VcIlxuICAgIFtpdGVtc0xpc3RdPVwiY2F0ZWdvcnlMaXN0XCJcbiAgICBbc2VsZWN0ZWRJdGVtc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllc1wiXG4gICAgW2lkZW50aWZpZXJLZXldPVwiJ19pZCdcIlxuICAgIFtkaXNwbGF5S2V5XT1cIidpdGVtX25hbWUnXCJcbiAgICBbdG9vbHRpcEtleV09XCInaXRlbV9uYW1lJ1wiXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NhdGVnb3J5J1wiXG4gICAgKHNhdmVMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgJGV2ZW50KVwiXG4gICAgKGNsb3NlTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2xvYWRlZF09XCIhY2F0ZWdvcmllc0xpc3RMb2FkZWRcIlxuICA+XG4gIDwvYXBwLWNoZWNrYm94LWxpc3Q+XG4gIDwhLS0gPGFwcC1jaGVja2JveC1saXN0IFtjb25maWddPVwiYXBwcm92YWxXb3JrZmxvd0NvbmZpZ1wiIFt0d29Db2x1bW5dPVwidHJ1ZVwiXG4gIFtpdGVtc0xpc3RdPVwiXCJcbiAgW3NlbGVjdGVkSXRlbXNdPVwicG9saWN5Rm9ybS5pc3N1ZUNDVXNlcnNcIiBbaWRlbnRpZmllcktleV09XCInZW1wbG95ZWVfZW1haWwnXCIgW2Rpc3BsYXlLZXldPVwiJ2VtcGxveWVlX25hbWUnXCIgW3Rvb2x0aXBLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiXG4gICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3I9PT0nSVNTVUVfQ0MnXCIgKHNhdmVMaXN0KT1cInNlbGVjdG9yQWN0aW9uKCRldmVudCwnSVNTVUVfQ0MnKVwiXG4gIChjbG9zZUxpc3QpPVwiZmllbGREZXNlbGVjdG9yKCdJU1NVRV9DQycpXCI+XG48L2FwcC1jaGVja2JveC1saXN0PiAtLT5cblxuICA8YXBwLXJlc3BvbnNpYmlsaXR5LWNlbnRlcnMtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcIlxuICAgIFtyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XT1cInJjTGlzdFwiXG4gICAgW3NlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRSQ3NcIlxuICAgIFtyY0lkS2V5XT1cIidpdGVtX2lkJ1wiXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VSY0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtsb2FkZWRdPVwicmNMaXN0TG9hZGVkXCJcbiAgPlxuICA8L2FwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJzLWxpc3Q+XG5cbiAgPGFwcC1saW5rLXJlbGF0ZWQtcG9saWNpZXNcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSBDT05TVEFOVFMuTElOS19QT0xJQ1lcIlxuICAgIFtwb2xpY3lJZF09XCJwb2xpY3lJZFwiXG4gICAgW21vZGVdPVwibW9kZVwiXG4gICAgW3NlbGVjdGVkUG9saWNpZXNdPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llc1wiXG4gICAgKGNsb3NlTGlua1BvbGljeUxpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIChzZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdChDT05TVEFOVFMuTElOS19QT0xJQ1ksICRldmVudClcIlxuICA+PC9hcHAtbGluay1yZWxhdGVkLXBvbGljaWVzPlxuXG4gIDxhcHAtdXNlcnMtcmFkaW8tbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIlxuICAgIFtpdGVtRW1haWxLZXldPVwiJ21lbWJlcl9lbWFpbCdcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYWxsUmV2aWV3ZXJzXCJcbiAgICBbaGVhZGVyVGV4dF09XCInU2VsZWN0IGEgUmV2aWV3ZXInXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzXCJcbiAgICBbdXNlcklkS2V5XT1cIidtZW1iZXJfaWQnXCJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXInLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLXVzZXJzLXJhZGlvLWxpc3Q+XG5cbiAgPGFwcC1vd25lci1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRW1haWwnICYmICFncm91cEVuYWJsZWRcIlxuICAgIFt1c2Vyc0xpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICAgIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NFbWFpbFwiXG4gICAgW3VzZXJJZEtleV09XCInZW1wbG95ZWVfaWQnXCJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0VtYWlsJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgPlxuICA8L2FwcC1vd25lci1saXN0PlxuXG4gIDx1c2VyLWdyb3VwLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgJiYgZ3JvdXBFbmFibGVkXCJcbiAgICBbZ3JvdXBFbmFibGVkXT1cInRydWVcIlxuICAgIFt1c2VybGlzdF09XCJvdmVyc2VlcnNMaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0VtYWlsXCJcbiAgICBbc2VsZWN0ZWRHcm91cHNdPVwicG9saWN5Rm9ybS5DQ0dyb3VwRW1haWxcIlxuICAgIChzYXZlKT1cInNhdmVTZWxlY3RlZExpc3QoJ2NjRW1haWwnLCAkZXZlbnQpXCJcbiAgICAoY2FuY2VsKT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCJcbiAgPlxuICA8L3VzZXItZ3JvdXAtbGlzdD5cblxuICA8YXBwLW93bmVyLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2NGYWlsJyAmJiAhZ3JvdXBFbmFibGVkXCJcbiAgICBbdXNlcnNMaXN0XT1cIm92ZXJzZWVyc0xpc3RcIlxuICAgIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLkNDRmFpbEVtYWlsXCJcbiAgICBbdXNlcklkS2V5XT1cIidlbXBsb3llZV9pZCdcIlxuICAgIFtpdGVtTmFtZUtleV09XCInZW1wbG95ZWVfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NjRmFpbCcsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID5cbiAgPC9hcHAtb3duZXItbGlzdD5cblxuICA8dXNlci1ncm91cC1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCcgJiYgZ3JvdXBFbmFibGVkXCJcbiAgICBbZ3JvdXBFbmFibGVkXT1cInRydWVcIlxuICAgIFt1c2VybGlzdF09XCJvdmVyc2VlcnNMaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbFwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uQ0NGYWlsRW1haWxHcm91cFwiXG4gICAgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NGYWlsJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiXG4gID5cbiAgPC91c2VyLWdyb3VwLWxpc3Q+XG5cbiAgPGFwcC1ncm91cC11c2Vycy1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcycgJiYgIWdyb3VwRW5hYmxlZFwiXG4gICAgW3VzZXJzTGlzdF09XCJhc3NpZ25lZXNMaXN0XCJcbiAgICBbZ3JvdXBzTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRBc3NpZ25lZXNcIlxuICAgIFt1c2VySWRLZXldPVwiJ215X21lbWJlcl9pZCdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2Fzc2lnbmVlcycsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID5cbiAgPC9hcHAtZ3JvdXAtdXNlcnMtbGlzdD5cblxuICA8dXNlci1ncm91cC1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcycgJiYgZ3JvdXBFbmFibGVkXCJcbiAgICBbZ3JvdXBFbmFibGVkXT1cInRydWVcIlxuICAgIFt1c2VybGlzdF09XCJvd25lcmxpc3RcIlxuICAgIFtncm91cExpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCJcbiAgICAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCJcbiAgICAoY2FuY2VsKT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbc2VsZWN0ZWRHcm91cHNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWVcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRBc3NpZ25lZXNcIlxuICAgIFtmZWF0dXJlZmxhZ109XCJncm91cEVuYWJsZWRcIlxuICA+XG4gIDwvdXNlci1ncm91cC1saXN0PlxuXG4gIDxhcHAtb3duZXItbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnICYmIGZhbHNlXCJcbiAgICBbbGlzdEhlYWRpbmddPVwiJ1NlbGVjdCBBcHByb3ZlcnMnXCJcbiAgICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiXG4gICAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gICAgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIlxuICAgIFtzaG93V29ya2Zsb3ddPVwidHJ1ZVwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwiXG4gICAgICBhZGRNb3JlTGV2ZWxzXG4gICAgICAgID8gW11cbiAgICAgICAgOiBwb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW2FwcHJvdmVyc0xpc3RJbmRleF0uYXBwcm92ZXJzXG4gICAgXCJcbiAgICBbdXNlcklkS2V5XT1cIidtZW1iZXJfaWQnXCJcbiAgICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXBwcm92ZXJzJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbbW9kZV09XCJtb2RlXCJcbiAgICBbcmV2aWV3ZXJXb3JrZmxvd1R5cGVdPVwid29ya2Zsb3dUeXBlXCJcbiAgICAocmV2aWV3ZXJXb3JrZmxvd1R5cGVDaGFuZ2UpPVwicmV2aWV3ZXJUeXBlQ2hhbmdlKCRldmVudClcIlxuICAgIFt3b3JrZmxvd0xpc3RdPVwid29ya2Zsb3dMaXN0XCJcbiAgICBbd29ya2Zsb3dUZXh0XT1cIidBcHByb3ZhbCBXb3JrZmxvdydcIlxuICA+XG4gIDwvYXBwLW93bmVyLWxpc3Q+XG5cbiAgPGFwcC1mcmVxdWVuY3ktY29udGFpbmVyXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIlxuICAgIFttb2RlXT1cIidwb2xpY3knXCJcbiAgICBbZnJlcXVlbmN5RGV0YWlsc109XCJmcmVxdWVuY3lEZXRhaWxzXCJcbiAgICAoc2VsZWN0ZWRGcmVxdWVuY3kpPVwiZnJlcXVlbmN5RGF0YSgkZXZlbnQpXCJcbiAgICBbZmVhdHVyZV09XCJmZWF0dXJlXCJcbiAgICBbcGFnZVR5cGVdPVwiJ3BvbGljeSdcIlxuICAgIChjbG9zZUZyZXF1ZW5jeSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID48L2FwcC1mcmVxdWVuY3ktY29udGFpbmVyPlxuXG4gIDxhcHAtZnJlcXVlbmN5LWNvbnRhaW5lclxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgIFttb2RlXT1cIidyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgIFtmcmVxdWVuY3lEZXRhaWxzXT1cInJldmlld2VyRnJlcXVlbmN5RGV0YWlsc1wiXG4gICAgKHNlbGVjdGVkRnJlcXVlbmN5KT1cInJldmlld2VyRnJlcXVlbmN5RGF0YSgkZXZlbnQpXCJcbiAgICBbZmVhdHVyZV09XCJmZWF0dXJlXCJcbiAgICBbcGFnZVR5cGVdPVwiJ3BvbGljeSdcIlxuICAgIChjbG9zZUZyZXF1ZW5jeSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID48L2FwcC1mcmVxdWVuY3ktY29udGFpbmVyPlxuXG4gIDx2Yy1saW5rLXByb2dyYW1cbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnbGlua1Byb2dyYW0nICYmIGZhbHNlXCJcbiAgICAoY2xvc2UpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtwb2xpY3ldPVwicG9saWN5Rm9ybVwiXG4gICAgW3NlbGVjdGVkUHJvZ3JhbV09XCJwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXNcIlxuICAgIFttb2RlXT1cIm1vZGVcIlxuICAgIFtzZWxlY3RlZExpbmtQcm9ncmFtXT1cInNlbGVjdGVkTGlua1Byb2dyYW1cIlxuICAgIChjaGFuZ2VUYWIpPVwiY2hhbmdlVGFiKCdsaW5rZWRQcm9ncmFtcycpXCJcbiAgICAodXBkYXRlZFByb2dyYW1EZXRhaWxzKT1cInVwZGF0ZWRQcm9ncmFtRGV0YWlscygkZXZlbnQpXCJcbiAgPlxuICA8L3ZjLWxpbmstcHJvZ3JhbT5cblxuICA8IS0tIFByb2dyYW0gTGlzdCBQb3B1cCAtLT5cbjxhcHAtbGlzdC1jb250YWluZXJcbipuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdsaW5rUHJvZ3JhbSdcIlxuKGNsb3NlKT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4+XG4gIDxhcHAtcHJvZ3JhbS1saXN0XG4gICAgYm9keVxuICAgIChpdGVtc1NlbGVjdGVkQ2hhbmdlKT1cIm9uSXRlbXNTZWxlY3RlZENoYW5nZSgkZXZlbnQpXCJcbiAgICBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZFByb2dyYW1zXCJcbiAgICBbdXJsXT1cInByb2dyYW1MaXN0VXJsXCJcbiAgPjwvYXBwLXByb2dyYW0tbGlzdD5cbiAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXctMTAwXCIgZm9vdGVyPlxuICAgIDxkaXYgIGNsYXNzPVwibGVmdC1zaWRlIHZ4LWZzLTEyIHZ4LWQtZmxleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50UG9saWN5QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIj4ge3sgYWxsUHJvZ2FtU2VsZWN0ZWQubGVuZ3RoIH19PC9idXR0b24+IFxuICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkLXRleHRcIj4gUHJvZ3JhbSB7e2FsbFByb2dhbVNlbGVjdGVkLmxlbmd0aCA+IDEgPyAnQ2F0ZWdvcmllcycgOiAnQ2F0ZWdvcnknfX0gU2VsZWN0ZWQ8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHQtc2lkZSB2eC1kLWZsZXhcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxCdG5cIiAoY2xpY2spPVwiZGlzYWJsZVNlbGVjdG9yKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJuZXh0QnRuXCIgKGNsaWNrKT1cImRpc2FibGVTZWxlY3RvcigpOyBzZWxlY3RDYXRlZ29yeSgpXCI+XG4gICAgICAgIE5leHQgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWU7PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9hcHAtbGlzdC1jb250YWluZXI+XG5cbiAgPGFwcC1jaGVja3BvaW50cy1wb2xpY3ktY29udGFpbmVyXG4gICAgKGNsb3NlQ2hlY2tQb2ludCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2NoZWNrcG9pbnREYXRhXT1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzXCJcbiAgICBbcmVxdWlyZWRQb2ludF09XCJwb2xpY3lGb3JtPy5wYXNzaW5nTWFya3NcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxuICAgIChzYXZlQ2hlY2tQb2ludCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjaGVja3BvaW50cycsICRldmVudClcIlxuICA+PC9hcHAtY2hlY2twb2ludHMtcG9saWN5LWNvbnRhaW5lcj5cbiAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cblxuICA8YXBwLWFwcHJvdmFsLXdvcmtmbG93XG4gICAgKm5nSWY9XCJlbmFibGVBcHByb3ZhbFdvcmtmbG93XCJcbiAgICBbc2VsZWN0ZWRDYXRlZ29yeV09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFthcHByb3ZlcldvcmtGbG93TGlzdF09XCJhcHByb3ZlcldvcmtGbG93TGlzdFwiXG4gICAgW2FsbEFwcHJvdmVyc109XCJhbGxBcHByb3ZlcnNcIlxuICAgIChsaXN0Q2FuY2VsQ2xpY2tlZCk9XCJsaXN0Q2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRXb3JrZmxvd05leHQpPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KCRldmVudClcIlxuICAgIChzYXZlQXBwcm92YWxXb3JrZmxvdyk9XCJhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbCgkZXZlbnQpXCJcbiAgICBbZWRpdEFwcHJvdmFsV29ya2Zsb3ddPVwiZWRpdEFwcHJvdmFsV29ya2Zsb3dcIlxuICAgIFtjcmVhdGVBcHByb3ZhbENsaWNrXT1cImNyZWF0ZUFwcHJvdmFsQ2xpY2tcIlxuICAgIChjbG9zZUNyZWF0ZUNsaWNrZWQpPVwiY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpXCJcbiAgICBbZWRpdFdvcmtmbG93TGV2ZWxdPVwiZWRpdFdvcmtmbG93TGV2ZWxcIlxuICA+PC9hcHAtYXBwcm92YWwtd29ya2Zsb3c+XG4gIDwhLS0gPGFwcC1zZWxlY3QtYXBwcm92ZXJzPjwvYXBwLXNlbGVjdC1hcHByb3ZlcnM+IC0tPlxuXG4gIDxhcHAtcG9saWN5LWFjY2Vzc1xuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCJcbiAgICBbcG9saWN5QWNjZXNzVHlwZV09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGVcIlxuICAgIChjbG9zZSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW29yZ1VzZXJzTGlzdF09XCJ1c2Vyc0xpc3RcIlxuICAgIFt1c2Vyc0FjY2Vzc0xpc3RdPVwidXNlcnNBY2Nlc3NMaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgW2dyb3Vwc0FjY2Vzc0xpc3RdPVwiZ3JvdXBzQWNjZXNzTGlzdFwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1wiXG4gICAgW2Rpc2FibGVkSWRzXT1cInVzZXJzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Rpc2FibGVkR3JvdXBJZHNdPVwiZ3JvdXBzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Z1dHVyZVVzZXJzV2lsbFNlbGVjdF09XCJwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsICRldmVudClcIlxuICAgIChzZXRQb2xpY3lBY2Nlc3NUeXBlKT1cInBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gJGV2ZW50XCJcbiAgPlxuICA8L2FwcC1wb2xpY3ktYWNjZXNzPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8IS0tIDxhcHAtY3JlYXRlLWRvY3VtZW50cyAqbmdJZj1cInNob3dDcmVhdGVEb2N1bWVudHNcIlxuICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxuICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICBbdXNlckluZm9dPVwidXNlckluZm9cIlxuICAgW3BvbGljeUlkXT1cInBvbGljeUlkXCJcbiAgIFtwb2xpY3lOYW1lXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXG4gICAoZGlzY29ubmVjdFJlZnJlc2gpPVwiZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSlcIlxuICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICA+PC9hcHAtY3JlYXRlLWRvY3VtZW50cz4gLS0+XG4gIDxsaWItZG9jdW1lbnQtc2VjdGlvblxuICAgICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiXG4gICAgW3RlbXBsYXRlVmlld109XCJpc1RlbXBsYXRlQ2xvc2VkXCJcbiAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICAgW3VzZXJJbmZvXT1cInVzZXJJbmZvXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFtmZWF0dXJlXT1cImZlYXR1cmVcIlxuICAgIFt0ZW1wbGF0ZVVybF09XCJ0ZW1wbGF0ZVVybFwiXG4gICAgW2lzVGVtcGxhdGVPcGVuZWRdPVwidGVtcGxhdGVWaWV3XCJcbiAgICBbcG9saWN5TmFtZV09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxuICAgIChkaXNjb25uZWN0UmVmcmVzaCk9XCJkaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKVwiXG4gICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICAgKG9wZW5UZW1wbGF0ZSk9XCJ0ZW1wbGF0ZVZpZXcgPSB0cnVlXCJcbiAgPjwvbGliLWRvY3VtZW50LXNlY3Rpb24+XG48L25nLWNvbnRhaW5lcj5cblxuPGFwcC1hc3Nlc3NtZW50LWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIlxuICBbcHJvZ3JhbV9pZHNdPVwiJydcIlxuICBbaXNFZGl0XT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiXG4gIChjYW5jZWxBc3Nlc3NtZW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVwiXG4gIFtzZWxlY3RlZEFzc2Vzc21lbnRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudFswXVwiXG4gIFttb2RlXT1cIidwb2xpY3knXCJcbiAgKG9uQXNzZXNzbWVudFNlbGVjdCk9XCJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgc2F2ZVNlbGVjdGVkTGlzdCgnaXNBc3Nlc3NtZW50JywgZmFsc2UpXG4gIFwiXG4+PC9hcHAtYXNzZXNzbWVudC1saXN0PlxuXG48YXBwLW93bmVyLWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycycgJiYgZmFsc2VcIlxuICBbbGlzdEhlYWRpbmddPVwiJ1NlbGVjdCBBcHByb3ZlcnMnXCJcbiAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIlxuICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICBbc2VsZWN0ZWRVc2Vyc109XCJcbiAgICBhZGRNb3JlTGV2ZWxzXG4gICAgICA/IFtdXG4gICAgICA6IHBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbYXBwcm92ZXJzTGlzdEluZGV4XS5hcHByb3ZlcnNcbiAgXCJcbiAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gIFtpdGVtRW1haWxLZXldPVwiJ21lbWJlcl9lbWFpbCdcIlxuICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiXG4gIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gIChyZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSk9XCJyZXZpZXdlclR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFt3b3JrZmxvd0xpc3RdPVwid29ya2Zsb3dMaXN0XCJcbiAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbj5cbjwvYXBwLW93bmVyLWxpc3Q+XG5cbjxhcHAtb3duZXItbGlzdFxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiXG4gIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IE93bmVyKHMpJ1wiXG4gIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgW3Nob3dXb3JrZmxvd109XCJmYWxzZVwiXG4gIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxuICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvd25lcnMnLCAkZXZlbnQpXCJcbiAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgW21vZGVdPVwibW9kZVwiXG4gIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgPz8gW11cIlxuPlxuPC9hcHAtb3duZXItbGlzdD5cblxuPGFwcC1zZWxlY3QtdGVtcGxhdGUtbGlzdFxuICAqbmdJZj1cInRlbXBsYXRlVmlld1wiXG4gIFtzZWxlY3RlZENhdGVnb3J5SWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzXCJcbiAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gIChvblRlbXBsYXRlU2VsZWN0KT1cIm9uVGVtcGxhdGVTZWxlY3QoJGV2ZW50KVwiXG4+PC9hcHAtc2VsZWN0LXRlbXBsYXRlLWxpc3Q+XG4iXX0=
2014
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXBvbGljeS93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcG9saWN5L3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBVzNDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUtuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sdUJBQXVCO0lBNEtsQyxZQUNVLGFBQTRCLEVBQzVCLFFBQXlCLEVBQ3pCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLHFCQUE0QyxFQUM1QyxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsZ0JBQWtDLEVBQzFDLGdCQUFrQyxFQUMxQixTQUE0QixFQUM1QixjQUE4QixFQUM5QixhQUE0QixFQUM1Qix1QkFBZ0QsRUFDaEQs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biAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlLXBpY2tlcic7XG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XG5pbXBvcnQgeyBDb25maXJtYXRpb25BbGVydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlybWF0aW9uLWFsZXJ0JztcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9saWN5Rm9ybSB9IGZyb20gJy4uL3dvcmtmbG93LWludGVyZmFjZXMvY3JlYXRlLXBvbGljeS1mb3JtJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbGljeVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9wb2xpY3kuc2VydmljZSc7XG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9yZXNwb25zaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1hdEFuZEV2aWRlbmNlQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9mb3JtYXQtYW5kLWV2aWRlbmNlL2Zvcm1hdC1hbmQtZXZpZGVuY2UuY29tcG9uZW50JztcbmltcG9ydCB7IFJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9saW5rLXByb2dyYW0vcmVzdGFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IERFRkFVTFRfMjRIUiwgREVGQVVMVF9USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3RpbWUuY29uc3RhbnRzJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Vc2VyU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL29yZ2FuaXphdGlvbi11c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2NvbW1vbi13b3JrZmxvdy1zZXJ2aWNlcy9vcmdhbml6YXRpb24tY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9jb21tb24td29ya2Zsb3ctc2VydmljZXMvY29tcGxpYW5jZS1jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tICcuLi9saW5rLXJlbGF0ZWQtcG9saWNpZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IExJTktTIH0gZnJvbSAnLi4vd29ya2Zsb3cvc2hhcmVkL2NvbnN0YW50cy9jZG4tbGluay5jb25zdGFudCc7XG5pbXBvcnQgeyBJZnJhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaWZyYW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVNTRVRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29tbW9uUm91dGVTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvY29tbW9uLXdvcmtmbG93LXNlcnZpY2VzL2NvbW1vbi1yb3V0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXBvbGljeScsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50Lmxlc3MnLCAnLi4vZm9ybXMubGVzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1BvbGljeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEFTU0VUUyA9IEFTU0VUUztcbiAgQ09OU1RBTlRTOiBhbnkgPSBDT05TVEFOVFM7XG4gIExJTktTOiBhbnkgPSBMSU5LUztcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcbiAgQElucHV0KCkgcG9saWN5SWQgPSAnJztcbiAgQElucHV0KCkgZmVhdHVyZTogYW55O1xuICBAT3V0cHV0KCkgc2hvd0NvbmZpcm1hdGlvbkFsZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlciE6IERhdGVQaWNrZXJDb21wb25lbnQ7XG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2hpZnRUb0VkaXRNb2RlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBjb252ZXJ0RmlsZURhdGE6IGFueSA9IHt9O1xuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3J5ID0gJyc7XG4gIEBJbnB1dCgpIGlzU2VuZEZvckF0dGVzdGF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRlbXBsYXRlSWQ6IHN0cmluZyA9ICcnO1xuXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1hdEV2aWRlbmNlJykgZm9ybWF0RXZpZGVuY2UhOiBGb3JtYXRBbmRFdmlkZW5jZUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICBkYXRlUGlja2VyUG9wVXAhOiBFbGVtZW50UmVmO1xuXG4gIGRlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XG4gICAgbW9kZTogJ3ByaW1lJyxcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXG4gICAgbGluazogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBhIGRlc2NyaXB0aW9uIGZvciB0aGlzIHBvbGljeS4nLFxuICB9O1xuICB3b3JrZmxvd1R5cGUgPSAnU0VRVUVOVElBTCc7XG4gIHNjcm9sbFRvQm90dG9tID0gZmFsc2U7XG4gIG5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uID0gZmFsc2U7XG5cbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcbiAgcmNMaXN0OiBhbnkgPSBbXTtcbiAgdXNlcnNMaXN0OiBhbnkgPSBbXTtcbiAgYWxsQXBwcm92ZXJzOiBhbnkgPSBbXTtcbiAgYWxsUmV2aWV3ZXJzOiBhbnkgPSBbXTtcbiAgYXNzaWduZWVzTGlzdDogYW55ID0gW107XG4gIG93bmVybGlzdDogYW55ID0gW107XG4gIHJldmlld2Vyc0xpc3Q6IGFueSA9IFtdO1xuICBvdmVyc2VlcnNMaXN0OiBhbnkgPSBbXTtcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIHVzZXJzTGlzdExvYWRlZCA9IGZhbHNlO1xuICBjYXRlZ29yeUxpc3Q6IGFueSA9IFtdO1xuICBncm91cHNMaXN0OiBhbnlbXSA9IFtdO1xuICB3b3JrRmxvd0xpc3Q6IGFueVtdID0gW107XG4gIGFwcHJvdmVyV29ya0Zsb3dMaXN0OiBhbnlbXSA9IFtdO1xuICBzdWJtaXR0ZWQgPSBmYWxzZTtcbiAgY2NFbWFpbE9iaklkczogYW55W10gPSBbXTtcbiAgY2NGYWlsR3JvdXBPYmpJZHM6IGFueVtdID0gW107XG4gIHVzZXJzQWNjZXNzTGlzdDogYW55W10gPSBbXTtcbiAgdXNlcnNBY2Nlc3NMaXN0SWRzOiBhbnlbXSA9IFtdO1xuICBncm91cHNBY2Nlc3NMaXN0SWRzOiBhbnlbXSA9IFtdO1xuICBncm91cHNBY2Nlc3NMaXN0OiBhbnlbXSA9IFtdO1xuICBTZWxlY3RlZExpc3RPZlBvbGljaWVzOiBhbnlbXSA9IFtdO1xuXG4gIGxvYWRlciA9IGZhbHNlO1xuICBjYXRlZ29yaWVzTGlzdExvYWRlZCA9IGZhbHNlO1xuICBncm91cHNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGNhdGVnb3J5Q29uZmlnID0ge1xuICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgUG9saWN5IENhdGVnb3J5JyxcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1BvbGljeSBDYXRlZ29yeSBTZWxlY3RlZCcsXG4gICAgZmxvYXRpbmdUZXh0UGx1cmFsOiAnUG9saWN5IENhdGVnb3JpZXMgU2VsZWN0ZWQnLFxuICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnU2VhcmNoIFBvbGljeSBDYXRlZ29yeScsXG4gICAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcbiAgICBzZWxlY3RBbGxFbmFibGVkOiB0cnVlLFxuICAgIHdvcmtmbG93OiAncG9saWN5JyxcbiAgfTtcbiAgYXBwcm92YWxXb3JrZmxvd0NvbmZpZyA9IHtcbiAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IHVzZXIocyknLFxuICAgIGZsb2F0aW5nVGV4dFNpbmd1bGFyOiAnVXNlciBzZWxlY3RlZCcsXG4gICAgZmxvYXRpbmdUZXh0UGx1cmFsOiAnVXNlcnMgc2VsZWN0ZWQnLFxuICAgIHNlYXJjaFBsYWNlaG9sZGVyOiAnU2VhcmNoIFVzZXInLFxuICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXG4gICAgc2VsZWN0QWxsRW5hYmxlZDogdHJ1ZSxcbiAgfTtcblxuICBhZGRNb3JlTGV2ZWxzID0gZmFsc2U7XG4gIGFwcHJvdmVyc0xpc3RJbmRleCA9IDA7XG4gIHdvcmtmbG93TGlzdCA9IFsnU0VRVUVOVElBTCcsICdST1VORC1ST0JJTicsICdBTlkgT05FJ107XG4gIGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XG4gIGRhdGVDb25maWcgPSB7XG4gICAgZGlzYWJsZUtleXByZXNzOiB0cnVlLFxuICAgIGZvcm1hdDogJ0REIE1NIFlZWVknLFxuICAgIHVuU2VsZWN0T25DbGljazogdHJ1ZSxcbiAgICBvcGVuT25DbGljazogZmFsc2UsXG4gICAgb3Blbk9uRm9jdXM6IGZhbHNlLFxuICB9O1xuICBmcmVxdWVuY3lEZXRhaWxzID0ge1xuICAgIHBhdHRlcm46ICcnLFxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHdpbmRvdzogMCxcbiAgICBmYWlsZWQ6IDAsXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxuICAgIGZhaWxlZFRpbWU6ICcnLFxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gIH07XG4gIHJldmlld2VyRnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICBwYXR0ZXJuOiAnJyxcbiAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxuICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxuICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxuICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICB3aW5kb3c6IDAsXG4gICAgZmFpbGVkOiAwLFxuICAgIHRpbWU6IERFRkFVTFRfVElNRSxcbiAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAzLFxuICB9O1xuICBmcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdXaGF0IGlzIHRoZSBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3k/JztcbiAgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdXaGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZD8nO1xuXG4gIHNpZGVTZWxlY3RvckVsZW1lbnRzID0gW1xuICAgICdhcHByb3ZhbFdvcmtmbG93JyxcbiAgICAnYXNzaWduZWVzJyxcbiAgICAnYXBwcm92ZXJzJyxcbiAgICAncmV2aWV3ZXInLFxuICAgICdjY0VtYWlsJyxcbiAgICAnY2NGYWlsJyxcbiAgICAncmMnLFxuICAgICdjYXRlZ29yeScsXG4gICAgJ2ZyZXF1ZW5jeScsXG4gICAgJ3Jldmlld2VyRnJlcXVlbmN5JyxcbiAgICAnY2hlY2twb2ludHMnLFxuICAgICdsaW5rUHJvZ3JhbScsXG4gICAgJ2lzQXNzZXNzbWVudCcsXG4gICAgJ2lzTGlua2VkUG9saWNlcycsXG4gICAgJ293bmVycycsXG4gICAgJ3BvbGljeUFjY2VzcycsXG4gIF07XG4gIHJpc2tDbGFzc2lmaWNhdGlvbiA9IFtcbiAgICB7IG5hbWU6ICdMT1cnLCB2YWx1ZTogMSwgY2xhc3M6ICdsb3cnIH0sXG4gICAgeyBuYW1lOiAnTE9XLU1lZGl1bScsIHZhbHVlOiAyLCBjbGFzczogJ2xvdy1tZWQnIH0sXG4gICAgeyBuYW1lOiAnTWVkaXVtLUhpZ2gnLCB2YWx1ZTogMywgY2xhc3M6ICdtZWQtaGlnaCcgfSxcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6IDQsIGNsYXNzOiAnaGlnaCcgfSxcbiAgXTtcbiAgc2hvd1Jpc2tDbGFzc2lmaWNhdGlvbiA9IHRydWU7XG4gIHNob3dDcmVhdGVEb2N1bWVudHMgPSBmYWxzZTtcbiAgb3JnYW5pemF0aW9uX2lkID0gJyc7XG4gIG1lbWJlcl9vYmpfaWQgPSAnJztcbiAgbWVtYmVySWQgPSAwO1xuICB1c2VySW5mbyE6IGFueTtcblxuICBwb2xpY3lBcHByb3ZhbEZsYWcgPSAwO1xuICBiYXNlVVJMID0gJyc7XG4gIGdyb3VwRW5hYmxlZDogYW55ID0gdHJ1ZTtcbiAgb3ZlcnNlZXJHcm91cHNMaXN0OiBhbnlbXSA9IFtdO1xuICBlbmFibGVBcHByb3ZhbFdvcmtmbG93OiBib29sZWFuID0gZmFsc2U7XG4gIGlzVmVyc2lvblZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgc2VsZWN0ZWRMaW5rUHJvZ3JhbTogYW55ID0ge307XG4gIHZlcnNpb25FcnJvck1lc3NhZ2U6IHN0cmluZyA9XG4gICAgJ1lvdSBoYXZlIGVudGVyZWQgYW4gaW5jb3JyZWN0IGZvcm1hdC4gVGhlIHZlcnNpb24gZmllbGQgY2FuIGVpdGhlciBpbmNsdWRlIG51bWJlcnMsIGFscGhhYmV0cywgaHlwaGVuIG9yIGRvdHMuJztcbiAgc2VsZWN0ZWRXb3JrZmxvdzogYW55W10gPSBbXTtcbiAgZWRpdEFwcHJvdmFsV29ya2Zsb3chOiBhbnk7XG4gIGFwcHJvdmFsV29ya2Zsb3dJZHM6IGFueVtdID0gW107XG4gIGRlZmF1bHRFZGl0QXBwcm92ZXJzOiBhbnkgPSB7fTtcbiAgY3JlYXRlQXBwcm92YWxDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBlZGl0V29ya2Zsb3dMZXZlbCA9IHt9O1xuICBub1dvcmtmbG93U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVtcGxhdGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIHRlbXBsYXRlVXJsOiBzdHJpbmcgPSAnJztcbiAgaXNUZW1wbGF0ZUNsb3NlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwb2xpY3lTZXJ2aWNlOiBQb2xpY3lTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIHVpS2l0U2VydmljZTogVWlLaXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGZyZXF1ZW5jeVNlcnZpY2U6IEZyZXF1ZW5jeVNlcnZpY2UsXG4gICAgcGxhdGZvcm1Mb2NhdGlvbjogUGxhdGZvcm1Mb2NhdGlvbixcbiAgICBwcml2YXRlIGNoYW5nZVJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZXN0QXBpU2VydmljZTogUmVzdEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgb3JnYW5pemF0aW9uVXNlclNlcnZpY2U6IE9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3JnYW5pemF0aW9uQ29tbW9uU2VydmljZTogT3JnYW5pemF0aW9uQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBsaWFuY2VDb21tb25TZXJ2aWNlOiBDb21wbGlhbmNlQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIGlmcmFtZVNlcnZpY2U6IElmcmFtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25Sb3V0ZVNlcnZpY2U6IENvbW1vblJvdXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmJhc2VVUkwgPSBsb2NhdGlvbj8ub3JpZ2luO1xuICAgIGlmICh0aGlzLmJhc2VVUkwgPT0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMCcpIHtcbiAgICAgIHRoaXMuYmFzZVVSTCA9ICdodHRwczovL2Rldi52LWNvbXBseS5jb20nO1xuICAgIH1cbiAgfVxuICBwb2xpY3lGb3JtOiBQb2xpY3lGb3JtID0ge1xuICAgIHBvbGljeU5hbWU6ICcnLFxuICAgIHBvbGljeU5vdGVzOiAnJyxcbiAgICBzZWxlY3RlZENhdGVnb3JpZXM6IFtdLFxuICAgIHNlbGVjdGVkQXBwcm92ZXJzOiBbXSxcbiAgICBzZWxlY3RlZEFzc2lnbmVlczogW10sIC8vZG91YnQgaW4gbmFtZVxuICAgIHNlbGVjdGVkR3JvdXBBc3NpZ25lZTogW10sXG4gICAgc2VsZWN0ZWRSZXZpZXdlcnM6IFtdLFxuXG4gICAgc2VsZWN0ZWRSQ3M6IFtdLFxuICAgIENDRmFpbEVtYWlsOiBbXSxcbiAgICBDQ0ZhaWxFbWFpbEdyb3VwOiBbXSxcbiAgICBDQ0VtYWlsOiBbXSxcbiAgICBDQ0dyb3VwRW1haWw6IFtdLFxuICAgIGF2YWlsYWJsZU9uUG9ydGFsOiBmYWxzZSxcbiAgICBhY2NlcHRTdWdnZXN0aW9uczogZmFsc2UsXG4gICAgcmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvbjogZmFsc2UsXG4gICAgcmlza1JhdGluZzogMSxcbiAgICBhc3NvY2lhdGVkRG9jdW1lbnRzOiB7XG4gICAgICBmb3JtYXRGaWxlczogW10sXG4gICAgfSxcbiAgICBwb2xpY3lEdWVEYXRlOiBtb21lbnQoKSxcbiAgICBjdXN0b21UYWdzOiBbXSxcbiAgICBjaGVja3BvaW50RGV0YWlsczogW10sXG4gICAgTGlua2VkUG9saWNpZXM6IFtdLFxuICAgIHRvdGFsUXVlc3Rpb246IDAsXG4gICAgcGFzc2luZ01hcmtzOiAwLFxuICAgIGRvY3VtZW50c0FuZExpbmtzOiB7XG4gICAgICBmb3JtYXRGaWxlczogW10sXG4gICAgICBmb3JtYXRMaW5rczogW10sXG4gICAgfSxcbiAgICBhZGRSZXNwb25zaWJpbGl0eUNlbnRlcnM6IGZhbHNlLFxuICAgIGFkZFJldmlld2VyczogZmFsc2UsXG4gICAgYWRkQ2hlY2twb2ludHM6IGZhbHNlLFxuICAgIGFkZE92ZXJzZWVyczogZmFsc2UsXG4gICAgYWRkQXNzb2NpYXRlZERvY3VtZW50czogZmFsc2UsXG4gICAgYWRkVmVyc2lvbjogZmFsc2UsXG4gICAgYWRkTGlua0Fzc2Vzc21lbnQ6IGZhbHNlLFxuICAgIGFkZExpbmtQcm9ncmFtOiBmYWxzZSxcbiAgICBhZGRMaW5rUG9saWNpZXM6IGZhbHNlLFxuICAgIGlzUG9ydGFsRGlzcGxheUVuYWJsZWQ6IGZhbHNlLFxuXG4gICAgZmFpbGVkX3RpbWU6ICcnLFxuICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiAnJyxcbiAgICBmcmVxdWVuY3lfdGV4dDogJycsXG4gICAgbWFya19mYWlsZWRfYWZ0ZXI6IDAsXG4gICAgcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOiAwLFxuXG4gICAgcmV2aWV3RmFpbGVkQWZ0ZXI6IDAsXG4gICAgcmV2aWV3RmFpbGVkVGltZTogJycsXG4gICAgcmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzOiAnJyxcbiAgICByZXZpZXdfZnJlcXVlbmN5X3R5cGU6ICcnLFxuICAgIHJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGU6IDAsXG4gICAgcmV2aWV3OiBmYWxzZSxcbiAgICBsaW5rUHJvZ3JhbToge30sXG4gICAgcHJvZ3JhbVNlbGVjdGVkVmFsdWVzOiB7fSxcbiAgICBhc3NpZ25lZV9zdGFydF9kYXRlOiAnJywgLy9UaHUgRmViIDIyIDIwMjRcbiAgICByZXZpZXdlcl9zdGFydF9kYXRlOiAnJywgLy9UaHUgRmViIDIyIDIwMjRcbiAgICBwb2xpY3lfdmVyc2lvbjogJycsIC8vIGl0IHdpbGwgYWNjZXB0IG1hdGNoZXMgYWxwaGFiZXRzLCBoeXBoZW5zICgtKSwgZG90cyAoLiksIGFuZCBudW1lcmljIHZhbHVlcyBvbmx5IGFuZCBzaG91bGQgYmUgc21hbGxlciBvciBlcXVhbCB0byA2IGNoYXJhY3RlcnNcbiAgICBhc3Nlc3NtZW50OiBbXSxcbiAgICBwb2xpY3lfb3duZXJzOiBbXSxcbiAgICBwb2xpY3lfZ3JvdXBfb3duZXJzOiBbXSxcbiAgICBidXNpbmVzc0N5Y2xlOiB7fSxcbiAgICBwb2xpY3lfaWQ6IDAsXG4gICAgcG9saWN5X2FjY2Vzc190eXBlOiAwLFxuICAgIHBvbGljeV9hY2Nlc3Nfb3duZXJzOiBbXSxcbiAgICBwb2xpY3lfYWNjZXNzX2dyb3VwczogW10sXG4gIH07XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2luaXRpYXRlQVBJKCk7XG4gICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xuICB9XG5cbiAgX2luaXRpYXRlQVBJKCkge1xuICAgIHRoaXMuZ3JvdXBFbmFibGVkID1cbiAgICAgIHRoaXMuZmVhdHVyZT8uaXNGZWF0dXJlRW5hYmxlZCgnZmZfcG9saWN5X2dyb3VwcycpIHx8IHRydWU7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICB0aGlzLl9pbml0aWF0ZUVkaXRBUEkoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRVc2Vyc0xpc3QoKTtcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XG4gICAgdGhpcy5sb2FkZXIgPSB0aGlzLm1vZGUgPT09ICdFRElUJyA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLmdldE9yZ0RldGFpbHMoKTtcbiAgICB0aGlzLm1lbWJlcl9vYmpfaWQgPSB0aGlzLmF1dGhTZXJ2aWNlPy5nZXRVc2VyRGV0YWlscygpPy5faWQ7XG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldFVzZXJEZXRhaWxzKCk/LnVzZXI7XG4gICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldE1lbWJlcklkKCk7XG4gICAgdGhpcy5jaGFuZ2VSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucG9saWN5Rm9ybS5idXNpbmVzc0N5Y2xlID0gdGhpcy5yZXN0QXBpU2VydmljZT8uZ2V0QnVzaW5lc3NDeWNsZSgpO1xuICAgIC8vdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcbiAgfVxuXG4gIF9pbml0aWF0ZUVkaXRBUEkoKSB7XG4gICAgdGhpcy5nZXRSQ0xpc3QoKTtcbiAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XG4gICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xuICB9XG5cbiAgZ2V0T3JnRGV0YWlscygpIHtcbiAgICB0aGlzLm9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U/LmdldE9yZ0RldGFpbHNJbmZvKCk/LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFyZXM/LmVuYWJsZV9yaXNrY2xhc3MpIHtcbiAgICAgICAgICB0aGlzLnNob3dSaXNrQ2xhc3NpZmljYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzPy5faWQpIHtcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbl9pZCA9IHJlcz8uX2lkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRMaW5rZWRQb2xpY2llcyhwb2xpY3lJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLkxpbmtlZFBvbGljaWVzTGlzdChwb2xpY3lJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IFsuLi5uZXcgU2V0KHJlc3BvbnNlPy5kYXRhKV0ucmV2ZXJzZSgpO1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb25hbEZpZWxkcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcyA9IHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uZmlsdGVyKFxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZFxuICAgICAgICApLm1hcCgoaXRlbSkgPT4gaXRlbT8uY29udHJhY3RfaWQpO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uaXNQb3J0YWxEaXNwbGF5RW5hYmxlZCA9IHJlc3BvbnNlPy5kaXNwbGF5T25Qb3J0YWw7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rUG9saWNpZXMgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rUG9saWNpZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgdGhlIGxpc3RpbmcgcGFnZXMgdGhlIGxlZnQgc2lkZSBvZiBwb2xpY3kgZm9ybSB0byBzZXQgYW5kIGVkaXQgdGhlIGRyb3Bkb3duIGZpZWxkcyB2YWx1ZXNcbiAgICogQHBhcmFtIHR5cGUgaG9sZHMgbmFtZSBvZiBwYXJ0aWN1bGFyIGxpc3QgaXMgdG8gYmUgZGlzcGxheWVkXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBib29sZWFuIHZhbHVlIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb3Igbm90XG4gICAqIEBwYXJhbSB3b3JrZmxvd1R5cGUgaXQgc2V0cyB0aGUgYXBwcm92YWwgd29ya2Zsb3cgdHlwZSB3aGlsZSBlZGl0aW5nIHRoZSBhcHByb3ZhbCB3b3JrZmxvdy5cbiAgICovXG4gIGFjdGl2YXRlU2VsZWN0b3IodHlwZTogYW55LCBldmVudDogYm9vbGVhbiwgd29ya2Zsb3dUeXBlPzogYW55KSB7XG4gICAgaWYgKHdvcmtmbG93VHlwZSkge1xuICAgICAgdGhpcy53b3JrZmxvd1R5cGUgPSB3b3JrZmxvd1R5cGU7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3JjJzpcbiAgICAgICAgdGhpcy5nZXRSQ0xpc3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjYXRlZ29yeSc6XG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0VtYWlsJzpcbiAgICAgIGNhc2UgJ2NjRmFpbCc6XG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxuICAgICAgICB0aGlzLmdldEdyb3Vwc0xpc3QoKTtcbiAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBsaXN0aW5nIHBhZ2VzXG4gICAqL1xuICBkaXNhYmxlU2VsZWN0b3IoKSB7XG4gICAgdGhpcy5hZGRNb3JlTGV2ZWxzID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnO1xuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIFJlc3BvbnNpYmlsaXR5IGNlbnRlcnMgbGlzdFxuICAgKi9cbiAgZ2V0UkNMaXN0KCkge1xuICAgIHRoaXMuY29tcGxpYW5jZUNvbW1vblNlcnZpY2U/LmdldFJjTGlzdEluZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnJjTGlzdCA9IHJlcztcbiAgICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBvcmdhbml6YXRpb24gdXNlcnMgbGlzdFxuICAgKi9cbiAgZ2V0VXNlcnNMaXN0KCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uVXNlclNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uVXNlcnMoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy51c2Vyc0xpc3QgPSB0aGlzLnVwZGF0ZU1lbWJlcklkS2V5KHJlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51c2Vyc0xpc3QgPSByZXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIHJlcGxhY2UgbWVtYmVyX2lkIHZhbHVlIHRvIG15X21lbWJlcl9pZFxuICB1cGRhdGVNZW1iZXJJZEtleShsaXN0OiBhbnkpIHtcbiAgICBsZXQgdXBkYXRlZExpc3QgPSBsaXN0Lm1hcCgoZWxlOiBhbnkpID0+ICh7XG4gICAgICAuLi5lbGUsXG4gICAgICBtZW1iZXJfaWQ6IGVsZT8ubXlfbWVtYmVyX2lkLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdXBkYXRlZExpc3Q7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBQb2xpY3kgQ2F0ZWdvcmllcyBsaXN0XG4gICAqL1xuICBnZXRDYXRlZ29yaWVzTGlzdCgpIHtcbiAgICB0aGlzLnBvbGljeVNlcnZpY2UuZ2V0Q2F0ZWdvcmllc0xpc3QoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jYXRlZ29yeUxpc3QgPSByZXM7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBncm91cHMgbGlzdFxuICAgKi9cbiAgZ2V0R3JvdXBzTGlzdCgpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRPcmdhbml6YXRpb25Qb2xpY3lHcm91cHMoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5kYXRhO1xuICAgICAgICBjb25zdCBncm91cHM6IGFueSA9IFtdO1xuICAgICAgICBkYXRhPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBncm91cE5hbWU6IGVsZW1lbnQuZ3JvdXBfbmFtZSxcbiAgICAgICAgICAgIHVzZXJJZHM6IGVsZW1lbnQubWVtYmVyX2lkcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGdyb3Vwcy5wdXNoKG9iaik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3Vwc0xpc3QgPSBncm91cHM7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy9HZXQgdGhlIGxpc3Qgb2Ygb3ZlcnNlZXJzIGdyb3VwLlxuICBvdmVyc2Vlckdyb3VwTGlzdCgpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZT8uZ2V0T3JnYW5pemF0aW9uT3ZlcnNlZXJzR3JvdXBzKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0ID0gcmVzPy5kYXRhO1xuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXBwcm92ZXJzIHdvcmtmbG93IGZyb20gdGhlIHNlbGVjdGVkIHdvcmtmbG93IG9uIEFwcHJvdmVycyB3b3JrZmxvdyBsaXN0XG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBwcmVkZWZpbmVkIHdvcmtmbG93XG4gICAqL1xuICBzZWxlY3RlZFdvcmtmbG93Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgPT09IC0xKSB7XG4gICAgICAvLyB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBbXTtcbiAgICAgIC8vIHRoaXMuYWRkTW9yZUxldmVscyA9IHRydWVcbiAgICAgIC8vIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkYXRhID0gY2xvbmVEZWVwKGV2ZW50LmFwcHJvdmFsX3dvcmtmbG93KTtcbiAgICAgIGNvbnN0IG5ld0FycmF5ID0gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpdGVtLm5hbWUgPSBpdGVtLnR5cGU7XG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW0uYXBwcm92ZXJzLm1hcCgoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkKTtcbiAgICAgICAgaXRlbS5hcHByb3ZlcnMgPSB0aGlzLnNldExpc3QodGhpcy5hbGxBcHByb3ZlcnMsIGlkcywgJ21lbWJlcl9pZCcpO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gbmV3QXJyYXkuZmlsdGVyKFxuICAgICAgICAobGV2ZWw6IGFueSkgPT4gbGV2ZWwuYXBwcm92ZXJzLmxlbmd0aCA+IDBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgQXBwcm92ZXJzIHdvcmtmbG93IGxpc3QgYmFzZWQgb24gc2VsZWN0ZWQgcG9saWN5IGNhdGVnb3JpZXNcbiAgICogQHBhcmFtIGlkIGNvbnRhaW5zIHNlbGVjdGVkIGNhdGVnb3JpZXMgaWQnc1xuICAgKi9cbiAgZ2V0QXBwcm92ZXJXb3JrRmxvdyhpZDogYW55LCBkYXRhPzogYW55KSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRXb3JrZmxvd0xpc3QoaWQpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgIHRoaXMuYXBwcm92ZXJXb3JrRmxvd0xpc3QgPSByZXM7IC8vIGdldHRpbmcgYWxsIGFwcHJvdmVyIHNhdmVkIHdvcmtmbG93c1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtdO1xuICAgICAgICAgIHRoaXMuYXBwcm92ZXJXb3JrRmxvd0xpc3Q/LmZvckVhY2goKHdvcmtmbG93KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzPy5pbmNsdWRlcyh3b3JrZmxvdz8uX2lkKSkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3c/LnB1c2god29ya2Zsb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYXBwcm92YWxEYXRhOiBhbnkgPSBbXTtcbiAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm5vV29ya2Zsb3dTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBsZXQgYXBwcm92YWxXb3JrZmxvdzogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlV29ya2Zsb3coKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnMpLmZvckVhY2goKGFwcHJvdmVyc0xldmVsKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLmFwcHJvdmVycyA9XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVyc1thcHByb3ZlcnNMZXZlbF0/LmFwcHJvdmVycz8ubWFwKFxuICAgICAgICAgICAgICAgICAgKGFwcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXBwLm1lbWJlcl9uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwcm92ZXJVc2VyID0gdGhpcy51c2Vyc0xpc3Q/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAodXNlcjogYW55KSA9PiB1c2VyLm15X21lbWJlcl9pZCA9PSBhcHAubWVtYmVyX2lkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwcm92ZXJVc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAubWVtYmVyX25hbWUgPSBhcHByb3ZlclVzZXI/Lm1lbWJlcl9uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGFwcHJvdmFsV29ya2Zsb3cucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWwxOiBhcHByb3ZlcnNMZXZlbCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2FwcHJvdmVyc0xldmVsXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwcHJvdmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgd29ya2Zsb3dfbmFtZTogJycsXG4gICAgICAgICAgICAgIHdvcmtmbG93X21vZHVsZTogJ1BPTElDWScsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7fSxcbiAgICAgICAgICAgICAgYXBwcm92YWxfd29ya2Zsb3c6IGFwcHJvdmFsV29ya2Zsb3csXG4gICAgICAgICAgICAgIGNhdGVnb3J5X2FycjogW10sXG4gICAgICAgICAgICAgIGNyZWF0b3I6IHt9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3cgPSBhcHByb3ZhbERhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdztcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5nZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgW2RhdGEuUmV2aWV3ZXJNZW1iZXJJZF0sXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlV29ya2Zsb3coKSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzID0gW107XG4gICAgdGhpcy5lZGl0QXBwcm92YWxXb3JrZmxvdyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIEFwcHJvdmVycyBhbmQgcmV2aWV3ZXJzIGxpc3QgYmFzZWQgb24gc2VsZWN0ZWQgcG9saWN5IGNhdGVnb3JpZXNcbiAgICogQHBhcmFtIGNhdGVnb3J5SWRzIGNvbnRhaW5zIHNlbGVjdGVkIGNhdGVnb3JpZXMgaWQnc1xuICAgKi9cbiAgZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChcbiAgICBjYXRlZ29yeUlkczogYW55LFxuICAgIGFwcHJvdmVySWRzPzogYW55LFxuICAgIHJldmlld2VySWRzPzogYW55LFxuICAgIHBvbGljeT86IGFueVxuICApIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5hbGxBcHByb3ZlcnMgPSBbXTtcbiAgICB0aGlzLmFsbFJldmlld2VycyA9IFtdO1xuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRSZXZpZXdlcnMoY2F0ZWdvcnlJZHMpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5sZW5ndGggPj0gMCkge1xuICAgICAgICAgIHJlcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzID0gdW5pcUJ5KFxuICAgICAgICAgICAgICB0aGlzLmFsbEFwcHJvdmVycy5jb25jYXQoZWxlbWVudC5hbGxfYXBwcm92ZXJzKSxcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmFsbFJldmlld2VycyA9IHVuaXFCeShcbiAgICAgICAgICAgICAgZWxlbWVudC5hbGxfYXBwcm92ZXJzLmNvbmNhdChcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFJldmlld2VycyxcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFsbF9hdXRob3JzXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHRoaXMuc2V0T3duZXJzT25Mb2FkKCk7XG4gICAgICAgICAgICBpZiAocG9saWN5Py5wb2xpY3lfb3duZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgICB0aGlzLmFsbEFwcHJvdmVycyxcbiAgICAgICAgICAgICAgICBwb2xpY3k/LnBvbGljeV9vd25lcnMgPz8gW10sXG4gICAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlcnNBY2Nlc3NMaXN0QnlDYXRlZ29yeShlbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXBwcm92ZXJJZHM/LmFwcHJvdmVycykge1xuICAgICAgICAgIGxldCBvYmogPSBhcHByb3Zlcklkcz8uYXBwcm92ZXJzO1xuICAgICAgICAgIGxldCBhcHByb3ZlckxldmVscyA9IFtdO1xuICAgICAgICAgIC8vIGZvciAodmFyIGl0ZW0gaW4gb2JqKSB7XG4gICAgICAgICAgLy8gICBjb25zdCBpZHMgPSBvYmpbaXRlbV0/LmFwcHJvdmVycz8ubWFwKFxuICAgICAgICAgIC8vICAgICAoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkXG4gICAgICAgICAgLy8gICApO1xuXG4gICAgICAgICAgLy8gICBsZXQgZGF0YSA9IHtcbiAgICAgICAgICAvLyAgICAgbmFtZTogb2JqW2l0ZW1dPy50eXBlLFxuICAgICAgICAgIC8vICAgICBhcHByb3ZlcnM6IHRoaXMuc2V0TGlzdCh0aGlzLmFsbEFwcHJvdmVycywgaWRzLCAnbWVtYmVyX2lkJyksXG4gICAgICAgICAgLy8gICB9O1xuICAgICAgICAgIC8vICAgaWYgKGRhdGEubmFtZSA9PSAnUk9VTkRST0JJTicpIHtcbiAgICAgICAgICAvLyAgICAgZGF0YS5uYW1lID0gJ1JPVU5ELVJPQklOJztcbiAgICAgICAgICAvLyAgIH0gZWxzZSBpZiAoZGF0YS5uYW1lID09ICdBTllPTkUnKSB7XG4gICAgICAgICAgLy8gICAgIGRhdGEubmFtZSA9ICdBTlkgT05FJztcbiAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyAgIGFwcHJvdmVyTGV2ZWxzLnB1c2goZGF0YSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIGlmIChhcHByb3Zlcklkcz8uYXBwcm92ZXJzKSB7XG4gICAgICAgICAgICBsZXQgb2JqID0gYXBwcm92ZXJJZHM/LmFwcHJvdmVycztcbiAgICAgICAgICAgIGxldCBhcHByb3ZlckxldmVscyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlbSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgY29uc3QgaWRzID0gb2JqW2l0ZW1dPy5hcHByb3ZlcnM/Lm1hcChcbiAgICAgICAgICAgICAgICAoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGxldCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IG9ialtpdGVtXT8ubmFtZSA/PyBvYmpbaXRlbV0/LnR5cGUsXG4gICAgICAgICAgICAgICAgYXBwcm92ZXJzOiBvYmpbaXRlbV0/LmFwcHJvdmVycyxcbiAgICAgICAgICAgICAgICBhcHByb3ZhbF9kb25lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsZXZlbDE6IG9ialtpdGVtXT8ubGV2ZWwxIHx8IGl0ZW0sXG4gICAgICAgICAgICAgICAgYWxpYXNfbmFtZTogb2JqW2l0ZW1dPy5hbGlhc19uYW1lLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvL0NyZWF0aW5nIGlzc3VlIGluIGFwcHJvdmFsIHdvcmtmbG93IHBheWxvYWQgKHR5cGUpIHdoaWxlIGVkaXRpbmcgcG9saWN5XG4gICAgICAgICAgICAgIC8vIGlmIChkYXRhLnR5cGUgPT0gJ1JPVU5EUk9CSU4nKSB7XG4gICAgICAgICAgICAgIC8vICAgZGF0YS50eXBlID0gJ1JPVU5ELVJPQklOJztcbiAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChkYXRhLnR5cGUgPT0gJ0FOWU9ORScpIHtcbiAgICAgICAgICAgICAgLy8gICBkYXRhLnR5cGUgPSAnQU5ZIE9ORSc7XG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgYXBwcm92ZXJMZXZlbHMucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3cgPSBhcHByb3ZlckxldmVscztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBhcHByb3ZhbF93b3JrZmxvdzogYXBwcm92ZXJMZXZlbHMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJldmlld2VySWRzKSB7XG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxuICAgICAgICAgICAgICByZXZpZXdlcklkcyxcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqXG4gICAqIEl0IGlzIHRvIHBvcHVsYXRlIG1vcmUgb3B0aW9ucyBlbGVtZW50cyB3aGlsZSBlZGl0aW5nIHRoZSBwb2xpY3kgZm9ybVxuICAgKi9cbiAgcG9wdWxhdGVPcHRpb25hbEZpZWxkcygpIHtcbiAgICBjb25zdCBhY3RpdmF0ZWRPcHRpb25zID0gW107XG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnMpIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVTUE9OU0lCSUxJVFlfQ0VOVEVSJyk7XG4gICAgfVxuICAgIC8vIGlmICh0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzKSB7IGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVWSUVXRVInKTsgfVxuICAgIC8vIGlmICh0aGlzLnBvbGljeUZvcm0uYWRkQ2hlY2twb2ludHMpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdDSEVDS1BPSU5UUycpOyB9XG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRPdmVyc2VlcnMpIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnT1ZFUlNFRVInKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzKSB7XG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ1JFTEFURURfRE9DVU1FTlRTJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24pIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnVkVSU0lPTicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudC5sZW5ndGgpIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnTElOS19BU1NFU1NNRU5UUycpO1xuICAgICAgdGhpcy5nZXRBc3Nlc3NtZW50RGV0YWlscyh0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudFswXSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtICYmXG4gICAgICB0aGlzLnBvbGljeUZvcm0/LnByb2dyYW1TZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRcbiAgICApIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnTElOS19QUk9HUkFNX1JFU1BPTlNJQklMSVRJRVMnKTtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rUHJvZ3JhbSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX1JFTEFURURfUE9MSUNJRVMnKTtcbiAgICB9XG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGFjdGl2YXRlZE9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBJdCBpcyB0byBhZGQgYW5kIHJlbW92ZSB0aGUgZWxlbWVudHMgZnJvbSBNb3JlIG9wdGlvbiB0byB0aGUgcG9saWN5IEZvcm1cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGRldGFpbHMgcmVsYXRlZCB0byBjaGVja2VkIHZhbHVlLCBjb2RlIHBhcnRpY3VsYXIgZWxlbWVudHMgZnJvbSBNb3JlIG9wdGlvbnNcbiAgICovXG4gIGFkZE1vcmVJbmZvKGV2ZW50OiBhbnkpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgIGNhc2UgJ1JFU1BPTlNJQklMSVRZX0NFTlRFUic6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSBldmVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ1JFVklFV0VSJzpcbiAgICAgIC8vICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAvLyAgIGJyZWFrO1xuICAgICAgY2FzZSAnQ0hFQ0tQT0lOVFMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkQ2hlY2twb2ludHMgPSBldmVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ09WRVJTRUVSJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZE92ZXJzZWVycyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUkVMQVRFRF9ET0NVTUVOVFMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkQXNzb2NpYXRlZERvY3VtZW50cyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVkVSU0lPTic6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRWZXJzaW9uID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX1BST0dSQU1fUkVTUE9OU0lCSUxJVElFUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rUHJvZ3JhbSA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTElOS19BU1NFU1NNRU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rQXNzZXNzbWVudCA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTElOS19SRUxBVEVEX1BPTElDSUVTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBpcyB0byBlbnN1cmUgd2hldGhlciBhbGwgcmVxdWlyZWQgbGlzdHMgb24gUG9saWN5IGZyb20gaXMgbG9hZGVkIGZyb20gdGhlIGFwaSBjYWxsIG9yIG5vdFxuICAgKi9cbiAgY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKSB7XG4gICAgY29uc3QgZWRpdExvYWRlciA9XG4gICAgICB0aGlzLm1vZGUgPT09ICdFRElUJ1xuICAgICAgICA/IHRoaXMucmNMaXN0TG9hZGVkICYmXG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgJiZcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkXG4gICAgICAgIDogdHJ1ZTtcbiAgICBpZiAodGhpcy51c2Vyc0xpc3RMb2FkZWQgJiYgZWRpdExvYWRlcikge1xuICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YSAmJiB0aGlzLmNvbnZlcnRGaWxlRGF0YS5maWxlTmFtZSkge1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLnN1YnN0cmluZyhcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuc2VsZWN0ZWRDYXRlZ29yeV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICAgIHRoaXMuZWRpdFBvbGljeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBjb25maXJtYXRpb24gcG9wdXAgd2hlbiBhdmFpbGFiaWxpdHkgb24gUG9saWN5IHBvcnRhbCB0b2dnbGUgaW4gT05cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHRvZ2dsZSB2YWx1ZSB3aGljaCBpcyBhbHdheXMgdHJ1ZSBvciBmYWxzZVxuICAgKi9cbiAgYXZhaWxhYmlsaXR5T25Qb3J0YWwoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uRGV0YWlsczogQ29uZmlybWF0aW9uQWxlcnQgPSB7XG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYFRoZSBwb2xpY2llcyB0aGF0IHlvdSBpbnRlbmQgdG8gbWFrZSBhY2Nlc3NpYmxlIHRvIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uIGNhbiBiZSBhZGRlZCB0byB0aGUgcG9saWN5IHBvcnRhbC5cbiAgICAgICAgSXQgaXMgbGlrZSBhIHNoYXJlZCBjYXRhbG9nIG9mIGFsbCBhY3RpdmUgJiB1cGRhdGVkIHBvbGljaWVzIHRoYXQgYW55IGxvZ2dlZCBpbiB1c2VyIGNhbiByZWFkLyBkb3dubG9hZCBmb3IgcmVmZXJlbmNlLlxuICAgICAgICBIZW5jZSwgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgeW91IHRvIHNldCB1cCBhbiBhdHRlc3RhdGlvbiBzY2hlZHVsZSBvciBzZWxlY3RcbiAgICAgICAgcmVhZGVycyB0byBhdHRlc3QgdGhlIHBvbGljaWVzLmAsXG4gICAgICAgIGFjdGlvbjogJ1BPTElDWV9QT1JUQUwnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkFsZXJ0LmVtaXQoY29uZmlybWF0aW9uRGV0YWlscyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIHRoZSBpbnB1dCBmcm9tIHRoZSBDb25maXJtYXRpb24gZGlhbG9nIG9mIGF2YWlsYWJsZSBvbiBQb2xpY3kgcG9ydGFsXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBvcHRpb24gZnJvbSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGljaCBpcyBhbHdheXMgZWl0aGVyICdZRVMnIG9yICdOTydcbiAgICovXG4gIGNvbmZpcm1Qb2xpY3lQb3J0YWwoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCA9IGV2ZW50ID09ICdZRVMnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChldmVudCA9PSAnTk8nKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcG9saWN5Rm9ybSB3aXRoIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlIGxpc3RpbmcsIGZyZXF1ZW5jeSwgZmlsZSB1cGxvYWQgY29tcG9uZW50c1xuICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIGZpZWxkIG9uIFBvbGljeSBmb3JtLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRJdGVtcyBjb250YWlucyB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtcyBmcm9tIHRoZSBsaXN0XG4gICAqL1xuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLnJjTGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdpdGVtX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IFtdO1xuICAgICAgICB0aGlzLnJlc2V0UG9saWN5QWNjZXNzRGV0YWlscygpO1xuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChvYmplY3RJZHMpO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhZyA9IGVsZW1lbnQuY3VzdG9tX3RhZ3M7XG4gICAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnbmFtZSA9PSB0YWdEYXRhLnRhZ25hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGxldCB1c2VySWRzLCBncm91cElkcztcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMudXNlcnMsICdtZW1iZXJfaWQnKTtcbiAgICAgICAgICBncm91cElkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMuZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXG4gICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZXJJZHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgdXNlcklkcyxcbiAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMsXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxuICAgICAgICBsZXQgc2VsZWN0ZWRVc2VySWRzLCBzZWxlY3RlZEdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zPy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIHNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zPy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0dyb3VwRW1haWwgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VySWRzLFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2NFbWFpbE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgICAgbGV0IHNlbGVjdGVkRmFpbFVzZXJJZHMsIHNlbGVjdGVkRmFpbEdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZhaWxVc2VySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy51c2VycyxcbiAgICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZhaWxHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXAgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmFpbEdyb3VwSWRzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEZhaWxVc2VySWRzLFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXBwcm92ZXJzJzpcbiAgICAgICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuYWRkTW9yZUxldmVscykge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxuICAgICAgICAgICAgYXBwcm92ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1t0aGlzLmFwcHJvdmVyc0xpc3RJbmRleF0gPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy53b3JrZmxvd1R5cGUsXG4gICAgICAgICAgYXBwcm92ZXJzLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld2VyX2F0dGFjaG1lbnRzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5maWxlcyA/PyBbXTtcblxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3MgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmxpbmtzID8/IFtdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc29jaWF0ZWREb2N1bWVudHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlcyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uY2hlY2twb2ludERldGFpbHMgPz8gW107XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID8/IDA7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBzZWxlY3RlZEl0ZW1zPy5yZXF1aXJlZFBvaW50ID8/IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3duZXJzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbGljeUFjY2Vzcyc6XG4gICAgICAgIGxldCBhY2Nlc3NJZHMsIGFjY2Vzc0dyb3VwSWRzO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmZ1dHVyZVVzZXJzV2lsbFNlbGVjdDtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgYWNjZXNzSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIGFjY2Vzc0dyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgYWNjZXNzR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2Nlc3NJZHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgYWNjZXNzSWRzLFxuICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXNMaW5rZWRQb2xpY2VzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5saXN0T2ZTZWxlY3RlZFBvbGljaWVzKFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnNlbGVjdGVkUG9saWN5TGlzdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMgPSBzZWxlY3RlZEl0ZW1zPy5zZWxlY3RlZFBvbGljeUxpc3Q7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gIH1cblxuICBsaXN0T2ZTZWxlY3RlZFBvbGljaWVzKHNlbGVjdGVkUG9saWNpZXM6IGFueSkge1xuICAgIHJldHVybiBzZWxlY3RlZFBvbGljaWVzPy5tYXAoKHBvbGljeTogYW55KSA9PiBwb2xpY3k/LmNvbnRyYWN0X2lkKTtcbiAgfVxuXG4gIC8vcmV0dXJuIHRoZSBfaWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3ZlcnNlZXIgZ3JvdXAuXG4gIGdldEdyb3VwT2JqZWN0SWQob3ZlcnNlZXJHcm91cD86IGFueSkge1xuICAgIGxldCBvdmVyc2Vlckdyb3VwSWRBcnJheSA9IG92ZXJzZWVyR3JvdXAubWFwKChlbGU6IGFueSkgPT4gZWxlLl9pZCk7XG4gICAgcmV0dXJuIG92ZXJzZWVyR3JvdXBJZEFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHBhcnRpY3VsYXIgZWxlbWVudCBmcm9tIHNlbGVjdGVkIGxpc3RcbiAgICogQHBhcmFtIHR5cGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciBjYXNlXG4gICAqIEBwYXJhbSBldmVudCBob2xkcyB0aGUgaWQgb3Iga2V5IG9mIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0gcmVtb3ZlSW5kZXggY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MuZmluZEluZGV4KFxuICAgICAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3Muc3BsaWNlKHJjSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKG93bmVyOiBhbnkpID0+IG93bmVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdncm91cEFzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8uc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzLnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NFbWFpbCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbC5maW5kSW5kZXgoXG4gICAgICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsLnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0dyb3VwRW1haWwnOlxuICAgICAgICBjb25zdCBjY0dyb3VwSW5kZXg6IGFueSA9IHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbD8uc3BsaWNlKGNjR3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2NFbWFpbE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRmFpbCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVyTm90aWZ5SW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwuZmluZEluZGV4KFxuICAgICAgICAgIChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbC5zcGxpY2Uob3ZlcnNlZXJOb3RpZnlJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NHcm91cEZhaWxFbWFpbCc6XG4gICAgICAgIGNvbnN0IGNjRmFpbEdyb3VwSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwPy5zcGxpY2UoY2NGYWlsR3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXBwcm92ZXJzJzpcbiAgICAgICAgY29uc3QgYXBwcm92ZXJzSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbXG4gICAgICAgICAgcmVtb3ZlSW5kZXhcbiAgICAgICAgXS5hcHByb3ZlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWQgPT0gZXZlbnQubWVtYmVyX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1tyZW1vdmVJbmRleF0uYXBwcm92ZXJzLnNwbGljZShcbiAgICAgICAgICBhcHByb3ZlcnNJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbcmVtb3ZlSW5kZXhdLmFwcHJvdmVycy5sZW5ndGggPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxuICAgICAgICAgIChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5pdGVtX2lkID09IGV2ZW50Lml0ZW1faWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGV2ZW50LmN1c3RvbV90YWdzO1xuICAgICAgICBpZiAodGFnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleENUID0gdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ25hbWUgPT0gdGFnRGF0YS50YWduYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4Q1QgIT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3Muc3BsaWNlKGluZGV4Q1QsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UoXG4gICAgICAgICAgMCxcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtID0gT2JqZWN0LmFzc2lnbih0aGlzLnBvbGljeUZvcm0pO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChvYmplY3RJZHMpO1xuICAgICAgICB0aGlzLnJlc2V0UG9saWN5QWNjZXNzRGV0YWlscygpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2hlY2twb2ludHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnRvdGFsUXVlc3Rpb24gPSAwO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucGFzc2luZ01hcmtzID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3b3JrZmxvd0xldmVsJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlbW92ZVdvcmtmbG93KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGlua1Byb2dyYW0nOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSB7XG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIHJlbW92ZWQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcG9saWN5SWRzOiBbdGhpcy5wb2xpY3lGb3JtPy5wb2xpY3lfaWQgPz8gMF0sXG4gICAgICAgICAgICAgIHByb2dyYW1JZDogdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtPy5faWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ293bmVycyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X293bmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbGljeUFjY2Vzcyc6XG4gICAgICAgIGNvbnN0IHVzZXJBY2Nlc3NJbmRleCA9IHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMuZmluZEluZGV4KFxuICAgICAgICAgIChvd25lcjogYW55KSA9PiBvd25lcj8uZW1wbG95ZWVfaWQgPT0gZXZlbnQ/LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/LnNwbGljZSh1c2VyQWNjZXNzSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FjY2Vzc0dyb3VwJzpcbiAgICAgICAgY29uc3QgZ3JvdXBBY2Nlc3NJbmRleDogYW55ID1cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/LnNwbGljZShncm91cEFjY2Vzc0luZGV4LCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxuICAgICAgICB0aGlzLnJlbW92ZUZyZXF1ZW5jeSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lzTGlua2VkUG9saWNlcyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcyA9IHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcz8uZmlsdGVyKFxuICAgICAgICAgIChwb2xpY3lJZDogYW55KSA9PiBldmVudCAhPT0gcG9saWN5SWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzID0gdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzPy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkICE9PSBldmVudFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgYXNzaWduZWVzIGFuZCBvdmVyc2VlcnMgbGlzdCBzdWNoIHRoYXQgYm90aCBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNhbWUgdXNlcnMgYmFzZWQgb24gc2VsZWN0aW9uXG4gICAqL1xuICByZWZyZXNoQWxsTGlzdHMoKSB7XG4gICAgbGV0IGFzc2lnbmVlc0lkczogYW55ID0gW107XG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLnVzZXJzTGlzdCk7XG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyk7XG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsKTtcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAodGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsKTtcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYXNzaWduZWVzSWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG5cbiAgICBhc3NpZ25lZXNJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZXNJZHMpXTtcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XG5cbiAgICAvLyB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShyZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSkpO1xuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICEoXG4gICAgICAgICAgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8XG4gICAgICAgICAgb3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZClcbiAgICAgICAgKVxuICAgICk7XG4gICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICBjb25zdCB1c2VyT2JqID0gdGhpcy5hc3NpZ25lZXNMaXN0O1xuICAgICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgIHVzZXIubWVtYmVyX2lkID0gdXNlci5teV9tZW1iZXJfaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub3duZXJsaXN0ID0gdXNlck9iajtcbiAgICB9XG4gICAgLy8gdGhpcy5yZXZpZXdlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEoYXNzaWduZWVzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpKSk7XG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgIShcbiAgICAgICAgICBhc3NpZ25lZXNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZCkgfHxcbiAgICAgICAgICByZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZClcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aG9sZSBsaXN0IGJhc2VkIG9uIHNlbGVjdGVkIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xuICAgKiBAcGFyYW0gbGlzdCBpdCBpcyB0aGUgbWFpbiBsaXN0ICB3aGljaCBjb250YWlucyBhbGwgZWxlbWVudHMgbGlzdFxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBmaWx0ZXIgc2VsZWN0ZWQgbGlzdCBmcm9tIHRoZSBsaXN0XG4gICAqIEBwYXJhbSBpZHMgc2VsZWN0ZWQgaWRzIGFycmF5XG4gICAqL1xuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IFtdO1xuICAgIGlkcz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGxpc3Q/LmZpbmRJbmRleChcbiAgICAgICAgKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xuICAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBleHRyYWN0IGlkIGZyb20gdGhlIGxpc3RcbiAgICovXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKGVsZSkgPT4ge1xuICAgICAgaWYgKGVsZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBlbGVba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXZpZXdlciB0eXBlIGluIGFwcHJvdmFsIHdvcmtmbG93XG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCByZXZpZXdlciB0eXBlXG4gICAqL1xuICByZXZpZXdlclR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMud29ya2Zsb3dUeXBlID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmcmVxdWVuY3kgaW4gZWRpdCAgbW9kZVxuICAgKi9cbiAgZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZXZlbnQ6IGFueSwgbW9kZTogJ1NFTEVDVCcgfCAnUE9QVUxBVEUnID0gJ1NFTEVDVCcpIHtcbiAgICAvL25lZWRzIHRvIGRpc2N1c3Mgd2l0aCBiYWNrZW5kIGFib3V0IGVkaXQgYW5kIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscywgLy9cbiAgICAgIHdpbmRvdzogZXZlbnQ/LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSxcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8ubWFya19mYWlsZWRfYWZ0ZXIsXG4gICAgICBmYWlsZWRfdGltZV91dGM6ICcnLFxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZmFpbGVkX3RpbWUgIT0gJycgPyBldmVudC5mYWlsZWRfdGltZSA6IERFRkFVTFRfMjRIUixcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LmFzc2lnbmVlX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICksXG4gICAgICBzdGFydERhdGU6ICcnLFxuICAgICAgcmVwb3J0SWQ6IDAsXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50LmZhaWxlZF90aW1lICE9ICcnID8gZXZlbnQuZmFpbGVkX3RpbWUgOiBERUZBVUxUXzI0SFJcbiAgICAgICksXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQuZnJlcXVlbmN5X3RleHQsXG4gICAgfTtcblxuICAgIHRoaXMuZnJlcXVlbmN5RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBmcmVxdWVuY3kgZGV0YWlscyBpbiB0aGUgcG9saWN5Rm9ybVxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGV2ZW50LnBhdHRlcm47XG4gICAgKHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9IGV2ZW50LnBsYWNlaG9sZGVyKSxcbiAgICAgICh0aGlzLnBvbGljeUZvcm0ubWFya19mYWlsZWRfYWZ0ZXIgPSBldmVudC5mYWlsZWRBZnRlcik7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IGV2ZW50LndpbmRvdztcbiAgICB0aGlzLnBvbGljeUZvcm0uZmFpbGVkX3RpbWUgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NpZ25lZV9zdGFydF9kYXRlID0gbW9tZW50KGV2ZW50LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXG4gICAgKTtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIGZhbHNlKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGV2ZW50LnBhdHRlcm4sXG4gICAgICBmcmVxdWVuY3lfdGltZTogZXZlbnQudGltZUluMTJocixcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZXZlbnQuZmFpbGVkQWZ0ZXIsXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZXZlbnQubGlmZWN5Y2xlRGV0YWlscyxcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IFtldmVudC5yZXBvcnRJZF0sXG4gICAgICBkb21fdXRjOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQucGxhY2Vob2xkZXIsXG4gICAgfTtcbiAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSBmcmVxdWVuY3kgZmllbGQgd2l0aCBzZWxlY3RlZCBkYXRhIGZyb20gZnJlcXVlbmN5IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIGZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy53aW5kb3cgPSBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSBldmVudD8uc3RhcnRfb2ZfZGF5X3V0YztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMztcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyXG4gICAgICA/IGV2ZW50LnBsYWNlaG9sZGVyXG4gICAgICA6ICdIb3cgb2Z0ZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIGF0dGVzdGVkPyc7XG4gIH1cblxuICByZXZpZXdlckZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICAvL25lZWRzIHRvIGRpc2N1c3Mgd2l0aCBiYWNrZW5kIGFib3V0IGVkaXQgYW5kIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMsIC8vXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlLFxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5yZXZpZXdGYWlsZWRBZnRlcixcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogJycsXG4gICAgICBsaWZlY3ljbGVEZXRhaWxzOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgICB0aW1lSW4yNEhyOlxuICAgICAgICBldmVudC5yZXZpZXdGYWlsZWRUaW1lICE9ICcnID8gZXZlbnQucmV2aWV3RmFpbGVkVGltZSA6IERFRkFVTFRfMjRIUixcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LnJldmlld2VyX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICksXG4gICAgICBzdGFydERhdGU6ICcnLFxuICAgICAgcmVwb3J0SWQ6IDAsXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSXG4gICAgICApLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnJldmlld2ZyZXF1ZW5jeURldGFpbHMsXG4gICAgfTtcblxuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEYXRhKGRhdGEpO1xuICB9XG5cbiAgcmVzZXRSZXZpZXdlckZyZXF1ZW5jeSgpIHtcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICAgIHBhdHRlcm46ICcnLFxuICAgICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICB3aW5kb3c6IDAsXG4gICAgICBmYWlsZWQ6IDAsXG4gICAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDMsXG4gICAgfTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSAnJztcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV90eXBlID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRUaW1lID0gREVGQVVMVF8yNEhSO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQgPyc7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgcmV2aWV3ZXIgZnJlcXVlbmN5IGRldGFpbHMgaW4gdGhlIHBvbGljeUZvcm1cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXG4gICAqL1xuICByZXZpZXdlckZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRBZnRlciA9IGV2ZW50LmZhaWxlZEFmdGVyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X3R5cGUgPSBldmVudC5wYXR0ZXJuLnNwbGl0KCd+JylbMF07XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSBldmVudC53aW5kb3c7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdlcl9zdGFydF9kYXRlID0gbW9tZW50KGV2ZW50LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXG4gICAgKTtcblxuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCBmYWxzZSk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBldmVudC5wYXR0ZXJuLFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZXZlbnQud2luZG93LFxuICAgICAgZmFpbGVkX2FmdGVyX2RheXM6IGV2ZW50LmZhaWxlZEFmdGVyLFxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXG4gICAgICBzdGFydF9vZl9kYXlfdXRjOiBldmVudC5zdGFydEZyb20sXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBbZXZlbnQucmVwb3J0SWRdLFxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnBsYWNlaG9sZGVyLFxuICAgIH07XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSByZXZpZXdlciBmcmVxdWVuY3kgZmllbGQgd2l0aCBzZWxlY3RlZCBkYXRhIGZyb20gZnJlcXVlbmN5IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIHJldmlld2VyRnJlcXVlbmN5UG9wdWxhdGlvbihldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IGV2ZW50Py5yZW1pbmRlcl9iZWZvcmVfZGF5cztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID1cbiAgICAgIGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDA7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZGF0ZU9mTW9kaWZpZWQgPSBldmVudD8uZG9tX3V0YztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBldmVudD8ucGxhY2Vob2xkZXJcbiAgICAgID8gZXZlbnQucGxhY2Vob2xkZXJcbiAgICAgIDogJ1doZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkID8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIHBvbGljeSBmb3JtXG4gICAqL1xuICB2YWxpZGF0ZVBvbGljeSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICB9LCAxMDApO1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWU7XG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGV2ZW50LnJlcGxhY2UocmUsICcnKS50cmltKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZS50cmltKCkgPT0gJycgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAoKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAhdGhpcy5ncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgKCh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBFbmFibGVkKSkpIHx8XG4gICAgICAodGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAoIXRoaXMuZ3JvdXBFbmFibGVkIHx8XG4gICAgICAgICAgKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5ncm91cEVuYWJsZWQpKSkgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5sZW5ndGggPT0gMCkgfHxcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09IDAgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92YWxfd29ya2Zsb3c/Lmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgPT09IDApIHx8XG4gICAgICAodGhpcy5mb3JtYXRFdmlkZW5jZSAmJiB0aGlzLmZvcm1hdEV2aWRlbmNlLm5ld0xpbmsuY29udGFpbnNFcnJvcikgfHxcbiAgICAgICF0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFuIGFwaSBjYWxsIHRvIGNyZWF0ZSBhIHBvbGljeVxuICAgKiBAcGFyYW0gcG9saWN5IGNvbnRhaW5zIHBvbGljeUZvcm0gZGF0YVxuICAgKi9cbiAgc3VibWl0UG9saWN5KCkge1xuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUG9saWN5KCk7XG4gICAgaWYgKCF2YWxpZCB8fCAhdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLm5vV29ya2Zsb3dTZWxlY3RlZCkge1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgIH1cbiAgICBjb25zdCBwb2xpY3kgPSB0aGlzLnBvbGljeUZvcm07XG4gICAgbGV0IGFwcHJvdmVyc0RhdGE6IGFueSA9IHRoaXMuY29udmVydEFwcHJvdmFsV29ya2Zsb3coXG4gICAgICBwb2xpY3kuc2VsZWN0ZWRBcHByb3ZlcnNcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBvbGljeS5wb2xpY3lEdWVEYXRlPy4kZCA/PyBwb2xpY3kucG9saWN5RHVlRGF0ZTtcbiAgICBsZXQgcmV2aWV3ZXJGaWxlc0FycmF5ID0gY2xvbmVEZWVwKHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlcyk7XG4gICAgY29uc3QgcmV2aWV3ZXJGaWxlcyA9IHJldmlld2VyRmlsZXNBcnJheS5tYXAoKGZpbGU6IGFueSkgPT4ge1xuICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlbmFtZTtcbiAgICAgIGZpbGUuZmlsZV9wYXRoID0gZmlsZS5maWxlcGF0aDtcbiAgICAgIGZpbGUub3JnX25hbWUgPSBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUuZmlsZW5hbWU7XG4gICAgICBkZWxldGUgZmlsZS5maWxlcGF0aDtcbiAgICAgIGRlbGV0ZSBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUubGlua1NldDtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH0pO1xuXG4gICAgbGV0IGF0dGVzdGF0aW9uRmlsZXNBcnJheSA9IGNsb25lRGVlcChcbiAgICAgIHBvbGljeS5hc3NvY2lhdGVkRG9jdW1lbnRzLmZvcm1hdEZpbGVzXG4gICAgKTtcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gYXR0ZXN0YXRpb25GaWxlc0FycmF5Lm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgIGVsZS5uYW1lID0gZWxlLmZpbGVuYW1lO1xuICAgICAgZWxlLmZpbGVfcGF0aCA9IGVsZS5maWxlcGF0aDtcbiAgICAgIGVsZS5vcmlnaW5hbF9maWxlX25hbWUgPSBlbGUub3JpZ2luYWxfZmlsZW5hbWU7XG4gICAgICBlbGUuZm9sZGVyX2lkID0gZWxlPy5mb2xkZXJfaWQgPyBlbGUuZm9sZGVyX2lkIDogMDtcbiAgICAgIGVsZS5wYXRoID0gZWxlPy5wYXRoID8gZWxlLnBhdGggOiBlbGUuZmlsZXBhdGggKyBlbGUuZmlsZW5hbWU7XG4gICAgICBlbGUuaXNMaW5rU2V0ID0gZWxlLmxpbmtTZXQ7XG4gICAgICBlbGUub3RoZXJfdHlwZSA9IGVsZT8ub3RoZXJzO1xuICAgICAgZGVsZXRlIGVsZS5maWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBlbGUuZmlsZXBhdGg7XG4gICAgICBkZWxldGUgZWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGVsZS5saW5rU2V0O1xuICAgICAgZGVsZXRlIGVsZS5maWxlX25hbWU7XG4gICAgICBkZWxldGUgZWxlLm90aGVycztcbiAgICAgIHJldHVybiBlbGU7XG4gICAgfSk7XG4gICAgY29uc3QgcmV2aWV3ZXJJRCA9IHRoaXMucmV0dXJuSWRzKHBvbGljeS5zZWxlY3RlZFJldmlld2VycywgJ21lbWJlcl9pZCcpO1xuICAgIGNvbnN0IHBvbGljeUFjY2Vzc1VzZXJzSWRzID1cbiAgICAgIHRoaXMucmV0dXJuSWRzKHBvbGljeS5wb2xpY3lfYWNjZXNzX293bmVycywgJ21lbWJlcl9pZCcpID8/IFtdO1xuICAgIGNvbnN0IHBvbGljeUFjY2Vzc0dyb3Vwc0lkcyA9XG4gICAgICB0aGlzLnJldHVybklkcyhwb2xpY3kucG9saWN5X2FjY2Vzc19ncm91cHMsICdfaWQnKSA/PyBbXTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBwb2xpY3lfbmFtZTogcG9saWN5LnBvbGljeU5hbWUsXG4gICAgICBub3RlczogcG9saWN5LnBvbGljeU5vdGVzLFxuICAgICAgaXNfcG9ydGFsX2VuYWJsZTogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsID8gMSA6IDAsXG4gICAgICBpc19zdWdnZXRpb25fZW5hYmxlOiBwb2xpY3kuYWNjZXB0U3VnZ2VzdGlvbnMgPyAxIDogMCxcbiAgICAgIGNhdGVnb3J5X2lkX2FycjogdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkQ2F0ZWdvcmllcywgJ2l0ZW1faWQnKSxcbiAgICAgIGFwcHJvdmVyczogYXBwcm92ZXJzRGF0YSxcbiAgICAgIGFzc2lnbmVlX2lkczogdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHBvbGljeT8uc2VsZWN0ZWRBc3NpZ25lZXMsXG4gICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICkubWFwKChpZCkgPT4gTnVtYmVyKGlkKSksXG4gICAgICB1c2VyZ3JvdXBfaWRzOiB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRHcm91cEFzc2lnbmVlLCAnX2lkJykgPz8gW10sXG4gICAgICBJc19hcHByb3ZhbDogMCwgLy9uZWVkcyB0byBjaGVjayBpbiBmZVxuXG4gICAgICBhc3NvY2lhdGVkX2RvY3VtZW50czogcG9saWN5LmFkZEFzc29jaWF0ZWREb2N1bWVudHNcbiAgICAgICAgPyBhdHRlc3RhdGlvbkZpbGVzXG4gICAgICAgIDogW10sXG5cbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShwb2xpY3kuY3VzdG9tVGFncyksXG5cbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgPyBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgOiAnJyxcbiAgICAgIGZyZXF1ZW5jeV90ZXh0OiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHMgPyBwb2xpY3kuZnJlcXVlbmN5X3RleHQgOiAnJyxcbiAgICAgIHJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZVxuICAgICAgICA6IDAsXG4gICAgICBmYWlsZWRfdGltZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZhaWxlZF90aW1lIDogJycsXG4gICAgICBtYXJrX2ZhaWxlZF9hZnRlcjogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICAgIDogJycsXG4gICAgICAvLyBzdGFydERhdGU6IHBvbGljeS5wb2xpY3lEdWVEYXRlLnRvRGF0ZVN0cmluZygpLFxuICAgICAgc3RhcnREYXRlOiBtb21lbnQoc3RhcnREYXRlKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWScpLFxuXG4gICAgICBSZXZpZXdlckF0dGFjaG1lbnRzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlc1xuICAgICAgICAgID8gcmV2aWV3ZXJGaWxlc1xuICAgICAgICAgIDogW10sXG4gICAgICBSZXZpZXdlckxpbmtzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rc1xuICAgICAgICAgID8gcG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdExpbmtzXG4gICAgICAgICAgOiBbXSxcbiAgICAgIFJldmlld2VyTWVtYmVySWQ6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcmV2aWV3ZXJJRFswXSA/IHJldmlld2VySURbMF0gOiAwLFxuICAgICAgaXNSZXZpZXc6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiZcbiAgICAgICAgICAocG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzIHx8XG4gICAgICAgICAgICBwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3MpICYmXG4gICAgICAgICAgcmV2aWV3ZXJJRFswXVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmV2aWV3RmFpbGVkQWZ0ZXI6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld0ZhaWxlZEFmdGVyXG4gICAgICAgICAgOiAwLFxuICAgICAgcmV2aWV3RmFpbGVkVGltZTpcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgPyBwb2xpY3kucmV2aWV3RmFpbGVkVGltZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X3R5cGU6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfdHlwZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXG4gICAgICAgICAgOiAwLFxuXG4gICAgICBlbnRpdGllczogdGhpcy5wb2xpY3lGb3JtPy5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSQ3MsICdpdGVtX2lkJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuICAgICAgcmlza19jbGFzczogcG9saWN5LnJpc2tSYXRpbmcudG9TdHJpbmcoKSxcblxuICAgICAgQ0NGYWlsRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NGYWlsRW1haWwsICdlbXBsb3llZV9lbWFpbCcpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJyxcbiAgICAgIENDRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuXG4gICAgICBjaGVja3BvaW50RGV0YWlsczogcG9saWN5LmNoZWNrcG9pbnREZXRhaWxzID8/IFtdLFxuICAgICAgdG90YWxRdWVzdGlvbjogcG9saWN5LnRvdGFsUXVlc3Rpb24gPyBwb2xpY3kudG90YWxRdWVzdGlvbiA6IDAsIC8vXG4gICAgICBwYXNzaW5nTWFya3M6IHBvbGljeS5wYXNzaW5nTWFya3MgPyBwb2xpY3kucGFzc2luZ01hcmtzIDogMCwgLy9cblxuICAgICAgcG9saWN5QXBwcm92YWxGbGFnOiAwLFxuXG4gICAgICBpc19zaWduYXR1cmVfcmVxdWlyZWQ6IHBvbGljeS5yZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uID8gMSA6IDAsXG4gICAgICBjY191c2VyZ3JvdXBfaWRzOiB0aGlzLmNjRW1haWxPYmpJZHMsXG4gICAgICBjY19mYWlsX3VzZXJncm91cF9pZHM6IHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMsXG4gICAgICByZXZpZXdlcl9zdGFydF9kYXRlOiBwb2xpY3kucmV2aWV3ZXJfc3RhcnRfZGF0ZSA/PyAnJyxcbiAgICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6IHBvbGljeS5hc3NpZ25lZV9zdGFydF9kYXRlLFxuICAgICAgcG9saWN5X3ZlcnNpb246IHBvbGljeS5hZGRWZXJzaW9uID8gcG9saWN5LnBvbGljeV92ZXJzaW9uIDogJycsXG4gICAgICBhc3Nlc3NtZW50OiBwb2xpY3kuYWRkTGlua0Fzc2Vzc21lbnRcbiAgICAgICAgPyBwb2xpY3kuYXNzZXNzbWVudC5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6IGVsZS5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGVsZS5jYXRlZ29yeV9pZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICA6IFtdLFxuICAgICAgcG9saWN5X293bmVyczogdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMubWFwKFxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5tZW1iZXJfaWRcbiAgICAgICksXG4gICAgICBhcHByb3ZhbF93b3JrZmxvd19pZDogcG9saWN5Py5zZWxlY3RlZEFwcHJvdmVyc1swXT8uX2lkXG4gICAgICAgID8gW3BvbGljeT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/Ll9pZF1cbiAgICAgICAgOiBbXSxcbiAgICAgIGxpbmtQcm9ncmFtOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcbiAgICAgICAgPyBwb2xpY3k/LmxpbmtQcm9ncmFtXG4gICAgICAgIDoge1xuICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIGJ1c2luZXNzX2N5Y2xlOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcbiAgICAgICAgPyBwb2xpY3k/LmJ1c2luZXNzQ3ljbGVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IHBvbGljeS5wb2xpY3lfYWNjZXNzX3R5cGUgPz8gMCxcbiAgICAgIHBvbGljeV9hY2Nlc3Nfb3duZXJzOiBwb2xpY3kuYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgPyBbXVxuICAgICAgICA6IHBvbGljeUFjY2Vzc1VzZXJzSWRzID8/IFtdLFxuICAgICAgcG9saWN5X2FjY2Vzc19ncm91cHM6IHBvbGljeS5hdmFpbGFibGVPblBvcnRhbFxuICAgICAgICA/IFtdXG4gICAgICAgIDogcG9saWN5QWNjZXNzR3JvdXBzSWRzID8/IFtdLFxuICAgICAgZGlzcGxheU9uUG9ydGFsOiBwb2xpY3kuaXNQb3J0YWxEaXNwbGF5RW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIGxpbmtlZFBvbGljaWVzOiBbLi4ubmV3IFNldChwb2xpY3kuTGlua2VkUG9saWNpZXMpXSxcbiAgICB9O1xuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcbiAgICAgIHRoaXMucG9saWN5U2VydmljZS5zdWJtaXRQb2xpY3kocGF5bG9hZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnBvbGljeUlkID0gcmVzLl9pZDtcbiAgICAgICAgICBpZiAodGhpcy5jb252ZXJ0RmlsZURhdGE/LmZpbGVOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxpbmtEb2N1bWVudFdpdGhQb2xpY3kodGhpcy5jb252ZXJ0RmlsZURhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnRlbXBsYXRlSWQpIHtcbiAgICAgICAgICAgIHRoaXMub25UZW1wbGF0ZVNlbGVjdChbeyBfaWQ6IHRoaXMudGVtcGxhdGVJZCB9XSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZURvY3VtZW50cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcbiAgICAgIGlmICh0aGlzLnBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMCkge1xuICAgICAgICBkZWxldGUgcGF5bG9hZC5hcHByb3ZlcnM7XG4gICAgICAgIHBheWxvYWQucG9saWN5QXBwcm92YWxGbGFnID0gMjtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9saWN5U2VydmljZS51cGRhdGVQb2xpY3kocGF5bG9hZCwgdGhpcy5wb2xpY3lJZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wb2xpY3lJZCA9IHJlcy5faWQ7XG5cbiAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZW5kRm9yQXR0ZXN0YXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgICAgICdUaGUgcG9saWN5IGhhcyBiZWVuIHNlbnQgZm9yIGF0dGVzdGF0aW9uJyxcbiAgICAgICAgICAgICAgICAnc3VjY2VzcydcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnVGhlIHBvbGljeSBoYXMgYmVlbiB1cGRhdGVkJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVybCA9XG4gICAgICAgICAgICAgIHRoaXMuYmFzZVVSTCArICcvYWxsL3BvbGljeS93b3Jrcm9vbT9pZD0nICsgdGhpcy5wb2xpY3lJZDtcbiAgICAgICAgICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodXJsLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS93b3Jrcm9vbSddLCB7IHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcbiAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxpbmtEb2N1bWVudFdpdGhQb2xpY3koZG9jdW1lbnQ6IGFueSkge1xuICAgIGxldCB1cmw6c3RyaW5nID0gJyc7XG4gICAgaWYgKFxuICAgICAgZG9jdW1lbnQuZmlsZU5hbWUgJiZcbiAgICAgIChkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAncGRmJyB8fFxuICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnUERGJyB8fFxuICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnZG9jeCcgfHxcbiAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ0RPQ1gnKVxuICAgICkge1xuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlXG4gICAgICAgIC5leHRyYWN0RmlsZShkb2N1bWVudC5maWxlRXh0ZW5zaW9uLCBkb2N1bWVudC5maWxlUGF0aCwgdGhpcy5wb2xpY3lJZClcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlID09PSAnZG9uZScgfHwgcmVzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdkb2N4JyB8fFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ0RPQ1gnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmJhc2VVUkwgKyAnL2FsbC9wb2xpY3kvZWRpdC1wb2xpY3k/aWQ9JyArIHRoaXMucG9saWN5SWQ7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwsJ3VybCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAncGRmJyB8fFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ1BERidcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuYmFzZVVSTCArICcvYWxsL3BvbGljeS93b3Jrcm9vbT9pZD0nICsgdGhpcy5wb2xpY3lJZDtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHVybCwndXJsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uUm91dGVTZXJ2aWNlLm5hdmlnYXRlVG8odXJsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgICBcIk9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3ZXJlIHVuYWJsZSB0byBjb21wbGV0ZSB0aGlzIGFjdGlvbi4gTGV0J3MgZ2l2ZSBpdCBhbm90aGVyIHRyeSwgc2hhbGwgd2U/XCIsXG4gICAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICBcIk9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3ZXJlIHVuYWJsZSB0byBjb21wbGV0ZSB0aGlzIGFjdGlvbi4gTGV0J3MgZ2l2ZSBpdCBhbm90aGVyIHRyeSwgc2hhbGwgd2U/XCIsXG4gICAgICAgICdhbGVydCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW5zIHRoZSBkYXRlIHBpY2tlciBvbiBwb2xpY3kgZm9ybVxuICAgKi9cbiAgb3BlbkRhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRlUGlja2VyPy5hcGk/Lm9wZW4oKTtcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gdHJ1ZTtcbiAgICAvLyB0aGlzLnNldEFjdGl2ZUZpZWxkU2VsZWN0b3IoJ0lTU1VFX0RBVEVfVElNRScsICdJU1NVRV9EQVRFX1RJTUUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjbG9zZXMgdGhlIGRhdGUgcGlja2VyIGZyb20gcG9saWN5IGZvcm1cbiAgICovXG4gIGNsb3NlRGF0ZVBpY2tlcihldnQ6IGFueSkge1xuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcblxuICAgIGlmICghZXZ0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldnQ/LmRhdGU/LiRkKSB7XG4gICAgICBsZXQgbW9udGhBcnJheSA9IFtcbiAgICAgICAgJ0phbicsXG4gICAgICAgICdGZWInLFxuICAgICAgICAnTWFyJyxcbiAgICAgICAgJ0FwcicsXG4gICAgICAgICdKdW4nLFxuICAgICAgICAnSnVsJyxcbiAgICAgICAgJ0F1ZycsXG4gICAgICAgICdTZXAnLFxuICAgICAgICAnT2N0JyxcbiAgICAgICAgJ05vdicsXG4gICAgICAgICdEZWMnLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG5ldyBEYXRlKGV2dD8uZGF0ZT8uJGQpLmdldERhdGUoKTtcbiAgICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aEFycmF5W25ldyBEYXRlKGV2dD8uZGF0ZT8uJGQpLmdldE1vbnRoKCldO1xuICAgICAgY29uc3QgeWVhclZhbHVlID0gbmV3IERhdGUoZXZ0Py5kYXRlPy4kZCkuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSBgJHtkYXRlVmFsdWV9ICR7bW9udGhWYWx1ZX0gJHt5ZWFyVmFsdWV9YDtcbiAgICB9XG4gICAgaWYgKGV2dD8uZGF0ZT8uJGQpIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlID0gZXZ0Py5kYXRlPy4kZDtcbiAgICB9XG4gICAgdGhpcy5kYXRlUGlja2VyPy5hcGk/LmNsb3NlKCk7XG4gIH1cbiAgZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKSB7XG4gICAgdGhpcy5tb2RlID0gJ0VESVQnO1xuICAgIHRoaXMuc2hpZnRUb0VkaXRNb2RlLmVtaXQoKTtcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gZmFsc2U7XG4gICAgdGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5lZGl0UG9saWN5KCk7XG4gIH1cblxuICBjaGVja0ZvckNyZWF0ZURvY3VtZW50cygpIHtcbiAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Nob3dDcmVhdGVEb2N1bWVudHMnKTtcbiAgICB0aGlzLm5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uID0gZGF0YSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmICh0aGlzLm5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uKSB7XG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcbiAgICAgIHRoaXMuc2hvd0NyZWF0ZURvY3VtZW50cyA9IHRydWU7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc2hvd0NyZWF0ZURvY3VtZW50cycpO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRQb2xpY3koKSB7XG4gICAgdGhpcy5tb2RlID0gJ0VESVQnO1xuXG4gICAgaWYgKHRoaXMucG9saWN5SWQpIHtcbiAgICAgIHRoaXMucG9saWN5U2VydmljZS5lZGl0UG9saWN5KHRoaXMucG9saWN5SWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc1swXTtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkcyA9IGRhdGEuY2F0ZWdvcnlfZGV0YWlsc19hcnIubWFwKFxuICAgICAgICAgICAgKGlkOiBhbnkpID0+IGlkLmNhdE9iaklkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUFwcHJvdmFsRmxhZyA9IGRhdGEucG9saWN5QXBwcm92YWxGbGFnO1xuICAgICAgICAgIHRoaXMuYXBwcm92YWxXb3JrZmxvd0lkcyA9IGRhdGE/LmFwcHJvdmFsV29ya2Zsb3dEZXRhaWxzPy5tYXAoXG4gICAgICAgICAgICAod29ya2Zsb3c6IGFueSkgPT4gd29ya2Zsb3c/Ll9pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XG4gICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycyA9IGRhdGE/LmFwcHJvdmVycztcbiAgICAgICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3coY2F0ZWdvcnlJZHMsIGRhdGEpO1xuICAgICAgICAgIHRoaXMuZ2V0TGlua2VkUG9saWNpZXMoZGF0YT8uX2lkKTtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9saWN5Rm9ybShkYXRhLCBjYXRlZ29yeUlkcyk7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihkYXRhKTtcbiAgICAgICAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZGF0YSk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvbGljeUFjY2Vzc0RldGFpbHMoZGF0YSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHBvcHVsYXRlUG9saWN5Rm9ybShkYXRhOiBhbnksIGNhdGVnb3J5SWRzOiBhbnkpIHtcbiAgICBjb25zdCByZXZpZXdlckZpbGVzID0gZGF0YS5SZXZpZXdlckF0dGFjaG1lbnRzLm1hcCgoZmlsZTogYW55KSA9PiB7XG4gICAgICBmaWxlLmZpbGVuYW1lID0gZmlsZS5uYW1lO1xuICAgICAgZmlsZS5maWxlcGF0aCA9IGZpbGUuZmlsZV9wYXRoO1xuICAgICAgZmlsZS5vcmlnaW5hbF9maWxlbmFtZSA9IGZpbGUub3JnX25hbWU7XG4gICAgICBmaWxlLmZpbGVfbmFtZSA9IGZpbGUub3JnX25hbWU7XG4gICAgICBmaWxlLmxpbmtTZXQgPSAnJztcbiAgICAgIGRlbGV0ZSBmaWxlLm5hbWU7XG4gICAgICBkZWxldGUgZmlsZS5maWxlX3BhdGg7XG4gICAgICBkZWxldGUgZmlsZS5vcmdfbmFtZTtcblxuICAgICAgcmV0dXJuIGZpbGU7XG4gICAgfSk7XG4gICAgY29uc3QgYXR0ZXN0YXRpb25GaWxlcyA9IGRhdGEuYXNzb2NpYXRlZF9kb2N1bWVudHMubWFwKChlbGU6IGFueSkgPT4ge1xuICAgICAgZWxlLmZpbGVuYW1lID0gZWxlLm5hbWU7XG4gICAgICBlbGUuZmlsZXBhdGggPSBlbGUuZmlsZV9wYXRoO1xuICAgICAgZWxlLm9yaWdpbmFsX2ZpbGVuYW1lID0gZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZTtcbiAgICAgIGVsZS5maWxlX25hbWUgPSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xuICAgICAgZWxlLmxpbmtTZXQgPSBlbGUuaXNMaW5rU2V0O1xuICAgICAgZWxlLm90aGVycyA9IGVsZT8ub3RoZXJfdHlwZTtcblxuICAgICAgZGVsZXRlIGVsZS5uYW1lO1xuICAgICAgZGVsZXRlIGVsZS5maWxlX3BhdGg7XG4gICAgICBkZWxldGUgZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZTtcbiAgICAgIGRlbGV0ZSBlbGUuaXNMaW5rU2V0O1xuICAgICAgZGVsZXRlIGVsZT8ub3RoZXJfdHlwZTtcbiAgICAgIHJldHVybiBlbGU7XG4gICAgfSk7XG4gICAgY29uc3QgZ3JvdXBfZW1wbG95ZWVJZHMgPSBkYXRhLmdyb3VwX2VtcGxveWVlTmFtZXMubWFwKFxuICAgICAgKGlkOiBhbnkpID0+IGlkPy5lbXBsb3llZV9pZFxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBfSWRzID0gZGF0YT8udXNlcmdyb3VwX2lkcz8ubWFwKChpZDogYW55KSA9PiBpZCkgPz8gW107XG5cbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgdGhpcy5jYXRlZ29yeUxpc3QsXG4gICAgICBjYXRlZ29yeUlkcyxcbiAgICAgICdfaWQnXG4gICAgKTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2lkID0gZGF0YT8ucG9saWN5X2lkO1xuICAgICh0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGRhdGEucG9saWN5X25hbWUpLFxuICAgICAgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOb3RlcyA9IGRhdGEubm90ZXMpLFxuICAgICAgKHRoaXMucG9saWN5Rm9ybS5jdXN0b21UYWdzID0gZGF0YS5jdXN0b21fdGFncyA/IGRhdGEuY3VzdG9tX3RhZ3MgOiBbXSk7XG5cbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBc3NpZ25lZXMgPVxuICAgICAgZ3JvdXBfZW1wbG95ZWVJZHMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIGdyb3VwX2VtcGxveWVlSWRzLCAnbXlfbWVtYmVyX2lkJylcbiAgICAgICAgOiBbXTsgLy9kb3VidCBpbiBuYW1lXG5cbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlID1cbiAgICAgIGdyb3VwX0lkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCwgZ3JvdXBfSWRzLCAnX2lkJylcbiAgICAgICAgOiBbXTtcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcyA9IGRhdGEuZW50aXRpZXNcbiAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMucmNMaXN0LCBkYXRhLmVudGl0aWVzLnNwbGl0KCcsJyksICdpdGVtX2lkJylcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsID0gZGF0YS5DQ0ZhaWxFbWFpbFxuICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBkYXRhLkNDRmFpbEVtYWlsLCAnZW1wbG95ZWVfZW1haWwnKVxuICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWxHcm91cCA9XG4gICAgICBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXG4gICAgICAgICAgZGF0YT8uY2NfZmFpbF91c2VyZ3JvdXBfaWRzLFxuICAgICAgICAgICdfaWQnXG4gICAgICAgIClcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IGRhdGEuQ0NFbWFpbFxuICAgICAgPyB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgZGF0YS5DQ0VtYWlsLnNwbGl0KCcsJyksXG4gICAgICAgICdlbXBsb3llZV9lbWFpbCdcbiAgICAgIClcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbCA9XG4gICAgICBkYXRhPy5jY191c2VyZ3JvdXBfaWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBkYXRhPy5jY191c2VyZ3JvdXBfaWRzLCAnX2lkJylcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPSBkYXRhLmVuYWJsZVBvcnRhbCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBkYXRhLmVuYWJsZVN1Z2dlc3Rpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb24gPSBkYXRhLmlzX3NpZ25hdHVyZV9yZXF1aXJlZFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yaXNrUmF0aW5nID0gZGF0YS5yaXNrX2NsYXNzID8gTnVtYmVyKGRhdGEucmlza19jbGFzcykgOiAxO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50c1xuICAgICAgPyB7XG4gICAgICAgIGZvcm1hdEZpbGVzOiBhdHRlc3RhdGlvbkZpbGVzLFxuICAgICAgfVxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSB9O1xuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlID0gZGF0YS5zdGFydERhdGVcbiAgICAgID8gbW9tZW50KGRhdGEuc3RhcnREYXRlKVxuICAgICAgOiBtb21lbnQoKTtcbiAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBkYXRhLmNoZWNrcG9pbnRzXG4gICAgICA/IGRhdGEuY2hlY2twb2ludHNcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLnRvdGFsUXVlc3Rpb24gPSBkYXRhLnRvdGFsX21hcmtzID8gZGF0YS50b3RhbF9tYXJrcyA6IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBhc3NpbmdNYXJrcyA9IGRhdGEucGFzc19tYXJrcyA/IGRhdGEucGFzc19tYXJrcyA6IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzID0gZGF0YS5SZXZpZXdlckF0dGFjaG1lbnRzXG4gICAgICA/IHtcbiAgICAgICAgZm9ybWF0RmlsZXM6IHJldmlld2VyRmlsZXMsXG4gICAgICAgIGZvcm1hdExpbmtzOiBkYXRhLlJldmlld2VyTGlua3MsXG4gICAgICB9XG4gICAgICA6IHsgZm9ybWF0RmlsZXM6IFtdLCBmb3JtYXRMaW5rczogW10gfTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzID1cbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgPSBkYXRhLlJldmlld2VyTWVtYmVySWQgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZENoZWNrcG9pbnRzID1cbiAgICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRPdmVyc2VlcnMgPVxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwIHx8XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID1cbiAgICAgIGRhdGEuYXNzb2NpYXRlZF9kb2N1bWVudHMubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLmNjRW1haWxPYmpJZHMgPVxuICAgICAgZGF0YT8uY2NfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMCA/IGRhdGE/LmNjX3VzZXJncm91cF9pZHMgOiBbXTtcbiAgICB0aGlzLmNjRmFpbEdyb3VwT2JqSWRzID1cbiAgICAgIGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkc1xuICAgICAgICA6IFtdO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50ID0gZGF0YT8uYXNzZXNzbWVudCA/PyBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua0Fzc2Vzc21lbnQgPSBkYXRhPy5hc3Nlc3NtZW50Py5sZW5ndGg7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFZlcnNpb24gPSBkYXRhPy5wb2xpY3lfdmVyc2lvbiA/IHRydWUgOiBmYWxzZTtcbiAgICAvLyB0aGlzLmNoZWNrRm9yQ3JlYXRlRG9jdW1lbnRzKCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uID0gZGF0YS5wb2xpY3lfdmVyc2lvbjtcbiAgICB0aGlzLnBvbGljeUZvcm0ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzLnByb2dyYW0gPVxuICAgICAgZGF0YT8ucHJvZ3JhbUNhdERldGFpbHMgJiYgZGF0YT8ucHJvZ3JhbUNhdERldGFpbHM/Lmxlbmd0aFxuICAgICAgICA/IGRhdGE/LnByb2dyYW1DYXREZXRhaWxzWzBdXG4gICAgICAgIDoge307XG4gICAgdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtID1cbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcbiAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGE/LnByb2dyYW1DYXREZXRhaWxzWzBdKSlcbiAgICAgICAgOiB7fTtcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG4gIGNoYW5nZU5hbWUoZXZlbnQ6IHN0cmluZykge1xuICAgIGxldCB0ZXh0ID0gZXZlbnQ7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPCguKj8pPi9naSwgJycpO1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgdHlwZVNlbGVjdGVkKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50O1xuICB9XG4gIG9uVmVyc2lvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgcmVnZXhNYXRjaCA9IG5ldyBSZWdFeHAoJ15bQS1aYS16MC05XFxcXC4tXSokJyk7XG4gICAgdGhpcy5pc1ZlcnNpb25WYWxpZCA9IHJlZ2V4TWF0Y2gudGVzdCh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24pO1xuICAgIGlmICghdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xuICAgICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjApIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uRXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAnWW91ciBpbnB1dCBpcyBpbnZhbGlkLiBUaGUgdmVyc2lvbiBmaWVsZCBjYW4gb25seSBpbmNsdWRlIG51bWJlcnMsIGFscGhhYmV0cywgaHlwaGVuIG9yIGRvdHMuIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBpcyAyMCBjaGFyYWN0ZXJzLic7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaXNWZXJzaW9uVmFsaWQgJiZcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjBcbiAgICApIHtcbiAgICAgIHRoaXMudmVyc2lvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICdZb3VyIGlucHV0IGlzIGludmFsaWQuIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBpcyAyMCBjaGFyYWN0ZXJzLic7XG4gICAgfVxuICB9XG5cbiAgLy90aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIHdoZW4gd2UgY2xpY2sgb24gZGl2IHNlbGVjdFxuICBjbGlja0FwcHJvdmFsV29ya2Zsb3coZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBldmVudDtcbiAgICB0aGlzLmNyZWF0ZUFwcHJvdmFsQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xuICB9XG5cbiAgbGlzdENhbmNlbENsaWNrZWQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZmFsc2U7XG4gICAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICAgICAgLy8gdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdGVkQXBwcm92YWxXb3JrZmxvdyhldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW2V2ZW50XTtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBldmVudD8uX2lkID8gW2V2ZW50Py5faWRdIDogW107XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW2V2ZW50XTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgdXBkYXRlZFByb2dyYW1EZXRhaWxzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSBldmVudD8ubGlua1Byb2dyYW07XG4gICAgdGhpcy5wb2xpY3lGb3JtLnByb2dyYW1TZWxlY3RlZFZhbHVlcyA9IGV2ZW50Py5zZWxlY3RlZFZhbHVlcztcbiAgICB0aGlzLnBvbGljeUZvcm0uYnVzaW5lc3NDeWNsZSA9IGV2ZW50Py5idXNpbmVzc0N5Y2xlO1xuICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gIH1cblxuICBvbkFzc2Vzc21lbnRTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50ID0gW2V2ZW50XTtcbiAgfVxuICBnZXRBc3Nlc3NtZW50RGV0YWlscyhhc3Nlc3NtZW50RGV0YWlsczogYW55LCB0eXBlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2VcbiAgICAgIC5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeURldGFpbHMgPSByZXNbMF0uY2F0ZWdvcnkuZmluZChcbiAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLl9pZCA9PSBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkLFxuICAgICAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgICAgICBhc3Nlc3NtZW50RGV0YWlsczoge1xuICAgICAgICAgICAgICAgIGlkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgICAgICAgIGFzc2Vzc21lbnRfbmFtZTogcmVzWzBdLmFzc2Vzc21lbnRfbmFtZSxcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6IHJlc1swXS5xdWVzdGlvbnNDb3VudCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfZGV0YWlsczogY2F0ZWdvcnlEZXRhaWxzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldE93bmVyc09uTG9hZCgpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgW3RoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKV0sXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gIH1cblxuICBhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbChldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb25zdCBvYmplY3RJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcbiAgICAgICAgJ19pZCdcbiAgICAgICk7XG4gICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3cob2JqZWN0SWRzKTtcbiAgICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29udmVydEFwcHJvdmFsV29ya2Zsb3coYXBwcm92ZXJMaXN0OiBhbnkpIHtcbiAgICBsZXQgcmV0dXJuSnNvbjogYW55ID0ge307XG4gICAgY29uc3QgbW9kaWZpZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhcHByb3Zlckxpc3QpKTtcbiAgICBtb2RpZmllZERhdGE/LmZvckVhY2goKHdvcmtmbG93OiBhbnkpID0+IHtcbiAgICAgIHdvcmtmbG93Py5hcHByb3ZhbF93b3JrZmxvdz8uZm9yRWFjaCgoYXBwcm92ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcbiAgICAgICAgcmV0dXJuSnNvblsnbGV2ZWwnICsgaV0gPSBhcHByb3ZlcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXR1cm5Kc29uO1xuICB9XG5cbiAgZGVsZXRlTGV2ZWwoaW5kZXg6IGFueSkge1xuICAgIC8vIEFwcHJvdmVyIExldmVsIGRlbGV0ZVxuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3cuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgIGkgPCB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93Lmxlbmd0aDtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydsZXZlbDEnXSA9PT1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bJ2FsaWFzX25hbWUnXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bXG4gICAgICAgICAgJ2FsaWFzX25hbWUnXG4gICAgICAgIF0gPSBgTGV2ZWwgJHtpICsgMX1gO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdLmFwcHJvdmFsX3dvcmtmbG93W2luZGV4XVsnbGV2ZWwxJ10gPSBgTGV2ZWwgJHtpICsgMVxuICAgICAgICB9YDtcbiAgICB9XG4gIH1cblxuICBlZGl0V29ya2Zsb3coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0QXBwcm92YWxXb3JrZmxvdyA9IGV2ZW50O1xuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gIH1cblxuICAvL0Z1bmN0aW9uIHJlc3BvbnNpYmxlIHdoZW4gd2UgY2xpY2sgb24gQ1JFQVRFIEEgTkVXIEFQUFJPVkFMIFdPUktGTE9XXG4gIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKSB7XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZUFwcHJvdmFsQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgZWRpdExldmVsQ2xpY2tlZChlZGl0TGV2ZWw6IGFueSwgaW5kZXg6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0V29ya2Zsb3dMZXZlbCA9IHtcbiAgICAgIGVkaXRMZXZlbDogZWRpdExldmVsLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgIH07XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgfVxuXG4gIHNldEFjY2Vzc0ZpZWxkKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50ID09IDApIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMudXNlcnNBY2Nlc3NMaXN0O1xuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRMaXN0KCdwb2xpY3lBY2Nlc3MnLCB7XG4gICAgICAgIHVzZXJzOiB0aGlzLnVzZXJzQWNjZXNzTGlzdCxcbiAgICAgICAgZ3JvdXBzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJzQWNjZXNzTGlzdEJ5Q2F0ZWdvcnkoY2F0ZWdvcnlEZXRhaWxzOiBhbnkpIHtcbiAgICBsZXQgdW5pcXVlVXNlcnM6IGFueSA9IFtdO1xuICAgIGxldCB1bmlxdWVHcm91cHNJZDogYW55ID0gW107XG4gICAgdW5pcXVlVXNlcnMgPSB1bmlxQnkoXG4gICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9tYW5hZ2Vycz8uY29uY2F0KFxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9hcHByb3ZlcnMsXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYWxsX2F1dGhvcnNcbiAgICAgICksXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy51c2Vyc0FjY2Vzc0xpc3QgPSB1bmlxdWVVc2VycztcbiAgICB0aGlzLnVzZXJzQWNjZXNzTGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMudXNlcnNBY2Nlc3NMaXN0LCAnbWVtYmVyX2lkJyk7XG5cbiAgICB1bmlxdWVHcm91cHNJZCA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYXV0aG9yX3VzZXJncm91cF9pZHM/LmNvbmNhdChcbiAgICAgICAgICBjYXRlZ29yeURldGFpbHM/Lm93bmVyX3VzZXJncm91cF9pZHNcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBdO1xuICAgIHRoaXMuZ3JvdXBzQWNjZXNzTGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgdW5pcXVlR3JvdXBzSWQsXG4gICAgICAnX2lkJ1xuICAgICk7XG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICB0aGlzLmdyb3Vwc0FjY2Vzc0xpc3QsXG4gICAgICAnZ3JvdXBfaWQnXG4gICAgKTtcbiAgfVxuXG4gIHBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhwb2xpY3lEZXRhaWxzOiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gcG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc190eXBlO1xuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycyxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19ncm91cHMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3VwcyxcbiAgICAgICAgJ19pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID09IDApIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IFtdO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gW107XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRnJlcXVlbmN5KCkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5tYXJrX2ZhaWxlZF9hZnRlciA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFzc2lnbmVlX3N0YXJ0X2RhdGUgPSAnJztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gJyc7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gMDtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBkb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlUGlja2VyT2JqZWN0ID0ge1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgY2xhc3M6ICdlZmZlY3RpdmUtZGF0ZScsXG4gICAgICBwb3B1cDogdGhpcy5kYXRlUGlja2VyUG9wVXAsXG4gICAgICBjb21wb25lbnQ6IHRoaXMuZGF0ZVBpY2tlcixcbiAgICAgIG92ZXJsYXk6IHRoaXMuZGF0ZVBpY2tlck92ZXJsYXksXG4gICAgfTtcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuaGFuZGxlRG9jdW1lbnRDbGljayhkYXRlUGlja2VyT2JqZWN0KTtcbiAgfVxuXG4gIG9uVGVtcGxhdGVTZWxlY3QoZXZlbnQ6IGFueSwgaXNQcmVzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGV2ZW50Py5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNUZW1wbGF0ZUNsb3NlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcblxuICAgIGNvbnN0IHVuYW1lID0gdGhpcy51c2VySW5mbyA/IHRoaXMudXNlckluZm8ubmFtZSA6ICcnO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMubWVtYmVyX29ial9pZDtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5wb2xpY3lJZDtcbiAgICB0aGlzLnRlbXBsYXRlSWQgPSBldmVudFswXT8uX2lkO1xuICAgIHRoaXMucG9saWN5U2VydmljZVxuICAgICAgLnNhdmVQb2xpY3lEZXRhaWxzKHVuYW1lLCB1aWQsIGlkLCBuYW1lLCAnJywgMClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmlldyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25VcmwoKTtcbiAgICAgICAgaWYgKGlzUHJlc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9UZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldE5hdmlnYXRpb25VcmwoKSB7XG4gICAgY29uc3QgYmFzVXJsID1cbiAgICAgIHRoaXMuYmFzZVVSTCArXG4gICAgICAnL2FsbC9wb2xpY3kvZWRpdC1wb2xpY3k/aWQ9JyArXG4gICAgICB0aGlzLnBvbGljeUlkICtcbiAgICAgICcmdGVtcGxhdGVJZD0nICtcbiAgICAgIHRoaXMudGVtcGxhdGVJZDtcbiAgICB0aGlzLnRlbXBsYXRlVXJsID0gYmFzVXJsO1xuICB9XG5cbiAgbmF2aWdhdGVUb1RlbXBsYXRlKCkge1xuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodGhpcy50ZW1wbGF0ZVVybCwgdHJ1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gPHA+d29ya2Zsb3ctcG9saWN5IHdvcmtzITwvcD4gLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctcG9saWN5XCI+XG4gICAgPCEtLSBQb2xpY3kgTmFtZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeU5hbWVcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFtzcmNdPVwiQVNTRVRTLndoYXRcIlxuICAgICAgICAgIGFsdD1cIm5hbWVcIlxuICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0/LnBvbGljeU5hbWUgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICduYW1lJ1wiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5TmFtZSAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cbiAgICAgICAgICAgIFBvbGljeSBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJhY3RpdmVTZWxlY3RvciA9ICduYW1lJ1wiXG4gICAgICAgICAgICAoZm9jdXNpbik9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgdHJ1ZSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUgPT0gJycgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICduYW1lJ1wiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwiYWN0aXZhdGVTZWxlY3RvcignbmFtZScsIGZhbHNlKVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gY2hhbmdlTmFtZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSB0aGlzIHBvbGljeVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lLmxlbmd0aCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHBvbGljeUZvcm0ucG9saWN5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbmFtZScsIHRydWUpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgIXBvbGljeUZvcm0ucG9saWN5TmFtZS50cmltKClcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUGxlYXNlIGVudGVyIGEgbmFtZSBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDx2Y29tcGx5LWVkaXRvclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeU5vdGVzXCJcbiAgICAgICAgICAgIFtlZGl0b3JDb25maWddPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgID48L3Zjb21wbHktZWRpdG9yPlxuICAgICAgICAgIDwhLS0gPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJhdmFpbGFiaWxpdHlPblBvcnRhbCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEbyB5b3Ugd2FudCB0aGlzIHBvbGljeSB0byBiZSBhdmFpbGFibGUgb24gdGhlIHBvcnRhbD9cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnVGhlIHBvbGljaWVzIHRoYXQgeW91IGludGVuZCB0byBtYWtlIGFjY2Vzc2libGUgdG8gdGhlIGVudGlyZSBvcmdhbml6YXRpb24gY2FuIGJlIGFkZGVkIHRvIHRoZSBwb2xpY3kgcG9ydGFsLiBJdCBpcyBsaWtlIGEgc2hhcmVkIGNhdGFsb2cgb2YgYWxsIGFjdGl2ZSAmIHVwZGF0ZWQgcG9saWNpZXMgdGhhdCBhbnkgbG9nZ2VkIGluIHVzZXIgY2FuIHJlYWQvZG93bmxvYWQgZm9yIHJlZmVyZW5jZS4nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICA+JiN4ZTkzMjs8L2lcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFjY2VwdCBzdWdnZXN0aW9uc1xuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCB1c2VycyBjYW4gcHJvdmlkZSBpbXByb3ZlbWVudCBzdWdnZXN0aW9ucyB0byB0aGUgcG9saWNpZXMgdGhhdCBhcmUgbGlzdGVkIG9uIHRoZSBQb2xpY3kgUG9ydGFsLidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxuICAgICAgICAgICAgPjwvYXBwLWNzLXN3aXRjaD4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBvbGljeSBDYXRlZ29yeSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2F0ZWdvcnknXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5jYXNlX2NhdGVnb3J5XCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5J1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgID5Qb2xpY3kgQ2F0ZWdvcnkgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjYXRlZ29yeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgYSBjYXRlZ29yeSBmb3IgdGhpcyBwb2xpY3kuXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjYXRlZ29yeSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsIGNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNhdGVnb3J5Lml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBjYXRlZ29yeS5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXRlZ29yeS5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCIgW2NsYXNzLm1vcmUtb25lXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoPjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucGx1c109XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aD4yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDAsMilcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsY2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NhdGVnb3J5Lml0ZW1fbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMlwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2F0ZWdvcnkucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdjYXRlZ29yeSdcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NhdGVnb3J5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2F0ZWdvcnkgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsIGNhdGVnb3J5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkuaXRlbV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgdGhlIGNhdGVnb3J5IGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5jdXN0b21UYWdzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvbGljeUZvcm0/LmN1c3RvbVRhZ3NcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtMlwiPnt7IHRhZy50YWduYW1lIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFnLnZhbHVlXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB0YWcudGFnbmFtZSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFZmZlY3RpdmUgRGF0ZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cImZhbHNlXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMud2hlblwiIGFsdD1cIlwiIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkVmZmVjdGl2ZSBEYXRlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lLXBpY2tlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tlci1ncm91cFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgZWZmZWN0aXZlIGRhdGUgb2YgdGhlIHBvbGljeS5cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgfCBkYXRlIDogJ2RkIE1NTSB5eXl5J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKClcIlxuICAgICAgICAgICAgICAgIGlkPVwiZWZmZWN0aXZlLWRhdGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkyZDs8L2k+XG4gICAgICAgICAgICAgIDxkcC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cImRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7IGNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGVDb25maWdcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2RwLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1vdmVybGF5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0ZVBpY2tlck92ZXJsYXlcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUG9saWN5IE93bmVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ293bmVycydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ293bmVycycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5pbV9jcmVhdGluZ1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5QT0xJQ1kgT1dORVIoUyk8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdvd25lcnMnLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIXBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IG93bmVycyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnb3duZXJzJywgcG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXSwgMClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X293bmVycz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9saWN5VXNlclBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICsge3sgcG9saWN5Rm9ybT8ucG9saWN5X293bmVycy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTEgdngtbXItMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAmXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1NhbWFudGhhIEpvbmVzJ1wiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID5TYW1hbnRoYSBKb25lczwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvbGljeUdyb3VwUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICs0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3BvbGljeVVzZXJQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG93bmVyIG9mIHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIm93bmVyPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ293bmVycycsIG93bmVyLCBpICsgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG93bmVyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lHcm91cFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidIYXJzaHZhcmRoYW4gS2FyaXdhbGEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFyc2h2YXJkaGFuIEthcml3YWxhXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdvd25lcnMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgIXBvbGljeUZvcm0/LnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3Qgb3duZXJzIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJldmlldyAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIj5cbiAgICAgICAgPGltZyAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIiBzcmM9XCJBU1NFVFMucmV2aWV3ZXJcIiBhbHQ9XCJcIiAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UkVWSUVXPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJldmlld1NlbGVjdGlvbiB2eC1wLTMgdngtcGItMFwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1tYi0xXCI+XG4gICAgICAgICAgICAgIERvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZD9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICBuYW1lPVwicmV2aWV3LXR5cGVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIlxuICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cInR5cGVTZWxlY3RlZCh0cnVlKVwiXG4gICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItM1wiPlxuICAgICAgICAgICAgICAgIFlFU1xuICAgICAgICAgICAgICA8L2Rpdj48L2FwcC1jcy1yYWRpb1xuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICBuYW1lPVwicmV2aWV3LXR5cGVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhcG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCJcbiAgICAgICAgICAgICAgKGNoZWNrZWRFdmVudCk9XCJ0eXBlU2VsZWN0ZWQoZmFsc2UpXCJcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0zXCI+XG4gICAgICAgICAgICAgICAgTk9cbiAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtMlwiPlJFVklFV0VSPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgcmV2aWV3aW5nIHRoaXMgcG9saWN5XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJldmlld2VyIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgcmV2aWV3ZXI/Lm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtM1wiPlJFVklFVyBGUkVRVUVOQ1k8L2xhYmVsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyA9PSAnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJ1dHRvblBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFdoZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkcyB0byBiZSByZXZpZXdlZD9cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNFVCBBIEZSRVFVRU5DWVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgcmV2aWV3IHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTmV3IEFwcHJvdmFsIFdvcmtmbG93IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5hcHByb3ZhbFwiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIiBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5QXBwcm92YWxGbGFnICE9PSAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgICAgPkFQUFJPVkFMIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKTsgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3JlYXRlTmV3QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENSRUFURSBBIE5FVyBBUFBST1ZBTCBXT1JLRkxPV1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICFzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBjbGlja0FwcHJvdmFsV29ya2Zsb3codHJ1ZSk7IGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzZWxlY3RlZFdvcmtmbG93Py5sZW5ndGggPiAwICYmIHNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LW1iLTJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tdC0yIHZ4LW1iLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlV29ya2Zsb3coKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdFdvcmtmbG93KHNlbGVjdGVkV29ya2Zsb3dbMF0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWwgb2Ygc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3c7XG4gICAgICAgICAgICAgICAgbGV0IGFwcHJvdmFsSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZXZlbC1sZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLW5hbWUgdngtZnMtOSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbGgtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYWxpYXNfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFwcHJvdmFsPy5hbGlhc19uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LmxldmVsMVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFsaWFzX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcHByb3ZhbD8uYWxpYXNfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy5sZXZlbDFcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtOSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1saC0zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZSA9PT0gXCJST1VORFJPQklOXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlJPVU5ELVJPQklOXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8udHlwZSA9PT0gXCJBTllPTkVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiQU5ZIE9ORVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMiB2eC1tbC0yXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICA+IC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPCAyXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IDEgPT0gYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoID8gXCJGaW5hbFwiIDogMSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImFwcHJvdmFsPy5hcHByb3ZlcnNbMF0/Lm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgID57eyBhcHByb3ZhbD8uYXBwcm92ZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ3b3JrZmxvd1BvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAre3sgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICN3b3JrZmxvd1BvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGFwcHJvdmFsPy5hcHByb3ZlcnMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZhbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiYXBwcm92ZXI/Lm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09ICdzZXF1ZW50aWFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxJbmRleCArIDEgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiRmluYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWxJbmRleCArIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcHJvdmVyPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRMZXZlbENsaWNrZWQoYXBwcm92YWwsYXBwcm92YWxJbmRleClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRlbGV0ZUxldmVsKGFwcHJvdmFsSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlQnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1tbC00IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5YWU7PC9pPiBERUxFVEVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmFsX3dvcmtmbG93Py5sZW5ndGggJiZcbiAgICAgICAgICAgICAgIXBvbGljeUFwcHJvdmFsRmxhZyAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IG9yIGNyZWF0ZSBhbiBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQb2xpY3kgQWNjZXNzIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidHJ1ZVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwb2xpY3lBY2Nlc3MnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInRydWVcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggJiZcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMubG9ja19zY29wZVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlBPTElDWSBQT1JUQUwgQUNDRVNTPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncG9saWN5QWNjZXNzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFdobyBzaG91bGQgYmUgYWJsZSB0byB2aWV3IHRoaXMgcG9saWN5P1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW10LTIgdngtbWItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9saWN5QWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb2xpY3lBY2Nlc3NQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXNzR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2Nlc3NHcm91cC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBY2Nlc3NQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ1c2VyPy5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3BvbGljeUFjY2VzcycsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5lbXBsb3llZV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNhY2Nlc3NHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYWNjZXNzR3JvdXAnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInZ4LW10LTQgdngtbWItMlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidwb2xpY3lGb3JtQWNjZXNzVHlwZSdcIiBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDBcIiAoY2hlY2tlZEV2ZW50KT1cInNldEFjY2Vzc0ZpZWxkKDApXCJcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dFwiPlxuICAgICAgICAgICAgICAgICAgICBFdmVyeW9uZSB3aG8gaGFzIGFjY2VzcyB0byB0aGlzIFBvbGljeSBDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3BvbGljeUZvcm1BY2Nlc3NUeXBlJ1wiIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiIChjaGVja2VkRXZlbnQpPVwic2V0QWNjZXNzRmllbGQoMSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtbXQtMVwiXG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHVzZXJzL2dyb3Vwc1xuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIlxuICAgICAgICAgICAgICA+VmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyczwvc3BhblxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdCB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICA+QUNDRVBUIFNVR0dFU1RJT05TXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXR0ZXN0YXRpb25zIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJmYWxzZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLmF0dGVzdGF0aW9uc1wiIGFsdD1cIlwiIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QVRURVNUQVRJT05TPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5TYW1hbnRoYSBKb25lczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9saWN5QXR0ZXN0YXRpb25Qb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICArNFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBdHRlc3RhdGlvblBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInSGFyc2h2YXJkaGFuIEthcml3YWxhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICBIYXJzaHZhcmRoYW4gS2FyaXdhbGFcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICA+UkVRVUlSRVMgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ1JlcXVpcmVzIGUtc2lnbmF0dXJlIGZvciBhdHRlc3RhdGlvbiBpbmZvIHRleHQgaGVyZS4uLidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgID4mI3hlOTFmOzwvaVxuICAgICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LW10LTJcIj5XSEVOPzwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBXaGF0IGlzIHRoZSBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpczxiciAvPnBvbGljeT9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2VcIj5cbiAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgRXZlcnkgV2VkbmVzZGF5IGJ5IDExOjU5IHBtXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCJcbiAgICAgICAgICAgID5BU1NFU1NNRU5UIE9GIFVOREVSU1RBTkRJTkc8L2xhYmVsXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPjUgUXVlc3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXBwcm92YWwgV29ya2Zsb3cgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAqbmdJZj1cImZhbHNlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMuYXBwcm92YWxcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycydcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgYXBwcm92YWwtd29ya2Zsb3dcIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lBcHByb3ZhbEZsYWcgIT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgICAgQXBwcm92YWwgd29ya2Zsb3cgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBhZGRNb3JlTGV2ZWxzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1R5cGUgPSAnU0VRVUVOVElBTCdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDcmVhdGUgYSBuZXcgQXBwcm92YWwgV29ya2Zsb3dcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFwcHJvdmVyV29ya0Zsb3dMaXN0Py5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Y3Mtc2VsZWN0XG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQXBwcm92YWxXb3JrZmxvd1wiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkV29ya2Zsb3dDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeSdcIlxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93XCJcbiAgICAgICAgICAgICAgW3NldE1heFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y3Mtb3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgYXBwcm92ZXJXb3JrRmxvd0xpc3RcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGRhdGEud29ya2Zsb3dfbmFtZSB9fVxuICAgICAgICAgICAgICA8L2NzLW9wdGlvbj5cbiAgICAgICAgICAgICAgPGNzLW9wdGlvblxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCItMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBhZGRNb3JlTGV2ZWxzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPkNyZWF0ZSBhIG5ldyBhcHByb3ZhbCB3b3JrZmxvdzwvY3Mtb3B0aW9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvY3Mtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxldmVsIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZVwiPkxldmVsIHt7IGkgKyAxIH19PC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZGVzY3JpcHRpb25cIj57eyBsZXZlbC5uYW1lIH19PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBsZXZlbC5hcHByb3ZlcnMuc2xpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2FwcHJvdmVycycsIGFwcHJvdmVyLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwXCIgKm5nSWY9XCJsZXZlbC5uYW1lID09ICdTRVFVRU5USUFMJ1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaiArIDFcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPnt7IGFwcHJvdmVyLm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGV2ZWwuYXBwcm92ZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxhYmVsTmFtZS5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgK1xuXG4gICAgICAgICAgICAgICAgICAgIHt7IGxldmVsLmFwcHJvdmVycy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNsYWJlbE5hbWUgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBsZXZlbC5hcHByb3ZlcnMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXBwcm92ZXJzJywgYXBwcm92ZXIsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ZXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxldmVsLm5hbWUgPT0gJ1NFUVVFTlRJQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID09IGxldmVsLmFwcHJvdmVycy5zbGljZSgxKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiRmluYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBqICsgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwcm92ZXIubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlLCBsZXZlbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92ZXJzTGlzdEluZGV4ID0gaVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtYnRuXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3dvcmtmbG93TGV2ZWwnLCBsZXZlbCwgaSlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgIXBvbGljeUFwcHJvdmFsRmxhZ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBvciBjcmVhdGUgYW4gYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgID48YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xuICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICArIEFkZCBNb3JlIExldmVsc1xuICAgICAgICAgICAgPC9idXR0b24+PC9sYWJlbFxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gV2hvIC8gbm93IEF0dGVzdGF0aW9uIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcycgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5jYXNlX2Fzc2lnbmVlc1wiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QXR0ZXN0YXRpb248L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LW1iLTJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJiAhZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgcGVyc29ucyByZXNwb25zaWJsZSBmb3IgYXR0ZXN0aW5nIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhZ3JvdXBFbmFibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGFzc2lnbmVlIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5zbGljZSgwLCAxKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgYXNzaWduZWUpXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiYXNzaWduZWUuZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBhc3NpZ25lZS5lbXBsb3llZV9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnbmVlUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cEVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cEVuYWJsZWQgJiYgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICByZW1vdmUoJ2Fzc2lnbmVlcycsIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzWzBdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0/LmVtcGxveWVlX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0/LmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJVc2VyUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAmXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShcbiAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXBBc3NpZ25lZXMnLFxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZVswXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdPy5ncm91cF9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ3JvdXAucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWduZWVzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgICgocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgICAgICAgICAhZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICAgICAgIChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkKSB8fFxuICAgICAgICAgICAgICAgIChpc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgaWQ9XCJ3aG92YWxpZGF0ZW1zZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb25cIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICBjbGFzcz1cIndoby10b2dnbGVcIlxuICAgICAgICAgICAgPlRISVMgUE9MSUNZIFJFUVVJUkVTIEUtU0lHTkFUVVJFIEZPUiBBVFRFU1RBVElPTlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgdGhlIHJlYWRlcnMgd2lsbCBiZSByZXF1aXJlZCB0byBhdHRlc3QgdGhpcyBwb2xpY3kgdXNpbmcgdGhlaXIgZWxlY3Ryb25pYyBzaWduYXR1cmUuJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgPlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjYXNzaWduZWVQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNVc2VyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgYXNzaWduZWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBhc3NpZ25lZS5lbXBsb3llZV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2dyb3VwQXNzaWduZWVzJywgZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGEuZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgLS0+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlclBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIHBvbGljeUZvcm0/LkNDRW1haWwgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIG92ZXJzZWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/LmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2Vlckdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhIG9mIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRW1haWwnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8IS0tIG92ZXJzZWVyIGVuZCAtLT5cblxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZmFpbCBzdGFydCAtLT5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjRmFpbCcsIG92ZXJzZWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/LmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlckZhaWxHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEZhaWxFbWFpbCcsIGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZmFpbCBlbmQgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFdoZW4gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPldoZW4/PC9sYWJlbD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1pbnB1dCBmcmVxdWVuY3ktY3VzdG9tLWlucHV0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZCBidXR0b24tc2VjXCJcbiAgICAgICAgICA+IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZCBidXR0b24tc2VjIHNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnZnJlcXVlbmN5JywgcmMpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiZnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID57eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPCEtLSA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IGZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAgICAgICAgICFncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgICAgKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQpKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBhbiBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+RWZmZWN0aXZlIERhdGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtdGltZS1waWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBkYXRlIGZyb20gd2hpY2ggdGhpcyBwb2xpY3kgZ29lcyBpbnRvIGVmZmVjdC5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSAgfCBkYXRlOiAnZGQgTU1NIHl5eXknXCIgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKCk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRwLWRhdGUtcGlja2VyICNkYXRlUGlja2VyIChvblNlbGVjdCk9XCJkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO2Nsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZGF0ZUNvbmZpZ1wiIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHAtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCIgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGVja3BvaW50cyAvIEFzc2Vzc21lbnQgb2YgVW5kZXJzdGFuZGluZyAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgKm5nSWY9XCJ0cnVlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgICAgQXNzZXNzbWVudCBvZiBVbmRlcnN0YW5kaW5nXG4gICAgICAgICAgICA8IS0tIDxidXR0b24gICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aD09PTBcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsdHJ1ZSlcIj4rIEFkZCBDaGVja3BvaW50czwvYnV0dG9uPiAtLT5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMnLCB0cnVlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZcyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb2xpY3kuXCIgcmVhZG9ubHk+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiPlxuICAgICAgICAgICAgICBTZXQgdXAgYSBxdWVzdGlvbm5haXJlIHRvIGNvbmZpcm0gdGhlIHJlYWRlcuKAmXM8YnIgLz51bmRlcnN0YW5kaW5nXG4gICAgICAgICAgICAgIG9mIHRoZSBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3twb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoICsgKHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPiAxID8nIENoZWNrcG9pbnRzJzonIENoZWNrcG9pbnQnKX19PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVja3BvaW50LXBvaW50LXRleHQgZmlyc3RcIj5UT1RBTCBQT0lOVFM6IDxzcGFuIGNsYXNzPVwibm9cIj57e3BvbGljeUZvcm0/LnRvdGFsUXVlc3Rpb259fTwvc3Bhbj48YnI+PGVtPkVhY2ggcXVlc3Rpb24gY2FycmllcyAxIHBvaW50PC9lbT48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrcG9pbnQtcG9pbnQtdGV4dFwiPlBPSU5UUyBSRVFVSVJFRCBUTyBBVFRFU1QgOiA8c3BhbiBjbGFzcz1cIm5vXCI+e3twb2xpY3lGb3JtPy5wYXNzaW5nTWFya3N9fTwvc3Bhbj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjaGVja3BvaW50cycsIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzKVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIj57e1xuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggK1xuICAgICAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgID8gXCIgUXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIiBRdWVzdGlvblwiKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGFwcC1wb3BvdmVyICNjaGVja3BvaW50UG9wT3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGNoZWNrcG9pbnQgb2YgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHMgfCBzbGljZTogMTsgbGV0IGogPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2hlY2twb2ludHMnLGNoZWNrcG9pbnQsaisxKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGVja3BvaW50Py5xdWVzdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJpc2sgQ2xhc3NpZmljYXRpb24gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAqbmdJZj1cInNob3dSaXNrQ2xhc3NpZmljYXRpb24gJiYgZmFsc2VcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5yaXNrUmF0aW5nXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMucmlza3NcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiIXBvbGljeUZvcm0/LnJpc2tSYXRpbmdcIiAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5yaXNrUmF0aW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmlzayBDbGFzc2lmaWNhdGlvbjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNsYXNzaWZpY2F0aW9uXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJsb3dcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2xhc3Mgb2Ygcmlza0NsYXNzaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW2NsYXNzLmNsYXNzXVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNsYXNzaWZpY2F0aW9uXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY2xhc3MudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnJpc2tSYXRpbmcgPT09IGNsYXNzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucmlza1JhdGluZ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGNsYXNzLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5yZXNwb25zaWJpbGl0eV9jZW50ZXJcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyYydcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJlc3BvbnNpYmlsaXR5IENlbnRlcjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcihzKSB0aGF0IHRoaXMgcG9saWN5IHJlbGF0ZXMgdG8uXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/LnNsaWNlKDAsIDEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyYycsIHJjKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJjLml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyByYy5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJjUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JjUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3MgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByYy5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFZlcnNpb24gLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFZlcnNpb25cIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMuYXNzb2NpYXRlZF9yaXNrc1wiXG4gICAgICAgICAgYWx0PVwibmFtZVwiXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+VkVSU0lPTjwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb25cIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZlcnNpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNwZWNpZnkgdGhlIHBvbGljeSB2ZXJzaW9uLlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCIhaXNWZXJzaW9uVmFsaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdmVyc2lvbkVycm9yTWVzc2FnZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmV2aWV3ZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgJiYgZmFsc2VcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5yZXZpZXdlclwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmV2aWV3ZXIgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciByZXZpZXdpbmcgdGhpcyBwb2xpY3lcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJldmlld2VyIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJldmlld2VyLm1lbWJlcl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHJldmlld2VyLm1lbWJlcl9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IGEgcmV2aWV3ZXIgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5XaGVuPyA8L2xhYmVsPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTZXQgQSBmcmVxdWVuY3lcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQgYnV0dG9uLXNlY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3QgdGhlIHJldmlldyBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGFwcC1mb3JtYXQtYW5kLWV2aWRlbmNlXG4gICAgICAgICAgICAodXBkYXRlRmlsZXMpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXJfYXR0YWNobWVudHMnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICNmb3JtYXRFdmlkZW5jZVxuICAgICAgICAgICAgW21vZGVdPVwiJ3BvbGljeVJldmlld2VyJ1wiXG4gICAgICAgICAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInBvbGljeUZvcm0/LmRvY3VtZW50c0FuZExpbmtzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9hcHAtZm9ybWF0LWFuZC1ldmlkZW5jZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gT3ZlcnNlZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRPdmVyc2VlcnNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCdcbiAgICAgIFwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NFbWFpbCcgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0ZhaWwnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cIlxuICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDAgfHwgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDBcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAocG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwKSB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5vdmVyc2lnaHRcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0VtYWlsJyAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0ZhaWwnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5PdmVyc2lnaHQ8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoaXMgcG9saWN5P1wiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NFbWFpbCBvZiBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIGNjRW1haWwpXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY2NFbWFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjY0VtYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cEVuYWJsZWRcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBFbmFibGVkICYmIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRW1haWxbMF0uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdLmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWwubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXT8uZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHBvbGljeSBpcyBub3QgYXR0ZXN0ZWQgb24gdGltZT9cIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NGYWlsIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgY2NGYWlsKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNjRmFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRmFpbC5lbXBsb3llZV9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNjRmFpbFBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBFbmFibGVkXCIgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXSlcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3ZlcnNlZXJGYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBbMF0/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXT8uZ3JvdXBfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyRmFpbEdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2NFbWFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRW1haWwgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgY2NFbWFpbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2NjRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRmFpbCBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBjY0ZhaWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjY0ZhaWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVsYXRlZCBEb2N1bWVudHMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICBbc3JjXT1cIkFTU0VUUy5mb3JtYXRfZXZpZGVuY2VcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJFTEFURUQgRE9DVU1FTlRTPC9sYWJlbD5cbiAgICAgICAgICA8YXBwLWZvcm1hdC1hbmQtZXZpZGVuY2VcbiAgICAgICAgICAgICh1cGRhdGVGaWxlcyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NvY2lhdGVkRG9jdW1lbnRzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICBbbW9kZV09XCIncG9saWN5J1wiXG4gICAgICAgICAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInBvbGljeUZvcm0/LmFzc29jaWF0ZWREb2N1bWVudHNcIlxuICAgICAgICAgID48L2FwcC1mb3JtYXQtYW5kLWV2aWRlbmNlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBMaW5rIFByb2dyYW1zICYgUmVzcG9uc2liaWxpdGllcyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFkZExpbmtQcm9ncmFtXCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnbGlua1Byb2dyYW0nXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdsaW5rUHJvZ3JhbScgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwiXG4gICAgICAgICAgcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMubGlua19pdGVtc1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxuICAgICAgICAgICAgPkxJTksgUFJPR1JBTVMgJiBSRVNQT05TSUJJTElUSUVTPC9sYWJlbFxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdsaW5rUHJvZ3JhbScsIHRydWUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBQcm9ncmFtcyAmIHJlc3BvbnNpYmlsaXRpZXMgdGhhdCBhcmU8YnIgLz5hc3NvY2lhdGVkIHdpdGhcbiAgICAgICAgICAgICAgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdsaW5rUHJvZ3JhbScsIHBvbGljeUZvcm0/LnByb2dyYW1TZWxlY3RlZFZhbHVlcylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/Lm5hbWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/Lm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJvZ3JhbVJlc3BvbnNpYmlsaXR5UG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgKzRcbiAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLXBvcG92ZXJcbiAgICAgICAgICAgICAgI3Byb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXJcbiAgICAgICAgICAgICAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgWzEsIDEsIDEsIDEsIDEsIDEsIDFdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVwb3J0aW5nIGluZm9ybWF0aW9uIHNlY3VyaXR5IHdlYWtuZXNzZXMnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0aW5nIGluZm9ybWF0aW9uIHNlY3VyaXR5IHdlYWtuZXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdsaW5rUHJvZ3JhbScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBMaW5rIEFzc2Vzc21lbnQgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50XCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnaXNBc3Nlc3NtZW50J1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnaXNBc3Nlc3NtZW50JyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hc3Nlc3NtZW50Py5sZW5ndGhcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiIXBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiXG4gICAgICAgICAgW3NyY109XCJBU1NFVFMuYXNzZXNzbWVudHNcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIEFTU0VTU01FTlRTPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IGFzc2Vzc21lbnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzPGJyIC8+cG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLXBvcG92ZXJcbiAgICAgICAgICAgICAgI3Byb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXJcbiAgICAgICAgICAgICAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFzc2Vzc21lbnQgb2YgcG9saWN5Rm9ybS5hc3Nlc3NtZW50IHwgc2xpY2UgOiAxXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhc3Nlc3NtZW50Py5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExpbmsgUmVsYXRlZCBQb2xpY2VzIC0tPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llc1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdpc0xpbmtlZFBvbGljZXMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiIVNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgW3NyY109XCJMSU5LUy5saW5rZWRQb2xpY3lJbWFnZVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICBbeG1sbnNdPVwiTElOS1MuY2hlY2tlZFwiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIFJFTEFURUQgUE9MSUNJRVM8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0xpbmtlZFBvbGljZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgcG9saWNpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwb2xpY3kgb2YgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShDT05TVEFOVFMuTElOS19QT0xJQ1ksIHBvbGljeT8uY29udHJhY3RfaWQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Py5jb250cmFjdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHBvbGljeT8uY29udHJhY3RfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWxhdGVkUG9saWN5LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09IENPTlNUQU5UUy5MSU5LX1BPTElDWVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcihDT05TVEFOVFMuTElOS19QT0xJQ1ksIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JlbGF0ZWRQb2xpY3kgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbGljeSBvZiBTZWxlY3RlZExpc3RPZlBvbGljaWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCBwb2xpY3k/LmNvbnRyYWN0X2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwb2xpY3k/LmNvbnRyYWN0X25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lGb3JtPy5MaW5rZWRQb2xpY2llcyA9PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2hvLXRvZ2dsZVwiXG4gICAgICAgICAgICA+RElTUExBWSBPTiBUSEUgUE9MSUNZIFBPUlRBTFxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIkNPTlNUQU5UUy5MSU5LX1BPTElDWV9IRUxQX1RFWFRcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8YXBwLWNoZWNrYm94LWxpc3RcbiAgICBbY29uZmlnXT1cImNhdGVnb3J5Q29uZmlnXCJcbiAgICBbdHdvQ29sdW1uXT1cImZhbHNlXCJcbiAgICBbaXRlbXNMaXN0XT1cImNhdGVnb3J5TGlzdFwiXG4gICAgW3NlbGVjdGVkSXRlbXNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFtpZGVudGlmaWVyS2V5XT1cIidfaWQnXCJcbiAgICBbZGlzcGxheUtleV09XCInaXRlbV9uYW1lJ1wiXG4gICAgW3Rvb2x0aXBLZXldPVwiJ2l0ZW1fbmFtZSdcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcIlxuICAgIChzYXZlTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjYXRlZ29yeScsICRldmVudClcIlxuICAgIChjbG9zZUxpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtsb2FkZWRdPVwiIWNhdGVnb3JpZXNMaXN0TG9hZGVkXCJcbiAgPlxuICA8L2FwcC1jaGVja2JveC1saXN0PlxuICA8IS0tIDxhcHAtY2hlY2tib3gtbGlzdCBbY29uZmlnXT1cImFwcHJvdmFsV29ya2Zsb3dDb25maWdcIiBbdHdvQ29sdW1uXT1cInRydWVcIlxuICBbaXRlbXNMaXN0XT1cIlwiXG4gIFtzZWxlY3RlZEl0ZW1zXT1cInBvbGljeUZvcm0uaXNzdWVDQ1VzZXJzXCIgW2lkZW50aWZpZXJLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiIFtkaXNwbGF5S2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiIFt0b29sdGlwS2V5XT1cIidlbXBsb3llZV9lbWFpbCdcIlxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yPT09J0lTU1VFX0NDJ1wiIChzYXZlTGlzdCk9XCJzZWxlY3RvckFjdGlvbigkZXZlbnQsJ0lTU1VFX0NDJylcIlxuICAoY2xvc2VMaXN0KT1cImZpZWxkRGVzZWxlY3RvcignSVNTVUVfQ0MnKVwiPlxuPC9hcHAtY2hlY2tib3gtbGlzdD4gLS0+XG5cbiAgPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJzLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCJcbiAgICBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyY0xpc3RcIlxuICAgIFtzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkUkNzXCJcbiAgICBbcmNJZEtleV09XCInaXRlbV9pZCdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3JjJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlUmNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbbG9hZGVkXT1cInJjTGlzdExvYWRlZFwiXG4gID5cbiAgPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxuXG4gIDxhcHAtbGluay1yZWxhdGVkLXBvbGljaWVzXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFttb2RlXT1cIm1vZGVcIlxuICAgIFtzZWxlY3RlZFBvbGljaWVzXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIlxuICAgIChjbG9zZUxpbmtQb2xpY3lMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICAoc2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCAkZXZlbnQpXCJcbiAgPjwvYXBwLWxpbmstcmVsYXRlZC1wb2xpY2llcz5cblxuICA8YXBwLXVzZXJzLXJhZGlvLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgICBbdXNlcnNMaXN0XT1cImFsbFJldmlld2Vyc1wiXG4gICAgW2hlYWRlclRleHRdPVwiJ1NlbGVjdCBhIFJldmlld2VyJ1wiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vyc1wiXG4gICAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgPlxuICA8L2FwcC11c2Vycy1yYWRpby1saXN0PlxuXG4gIDxhcHAtb3duZXItbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyAmJiAhZ3JvdXBFbmFibGVkXCJcbiAgICBbdXNlcnNMaXN0XT1cIm92ZXJzZWVyc0xpc3RcIlxuICAgIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLkNDRW1haWxcIlxuICAgIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NFbWFpbCcsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID5cbiAgPC9hcHAtb3duZXItbGlzdD5cblxuICA8dXNlci1ncm91cC1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRW1haWwnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NFbWFpbFwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uQ0NHcm91cEVtYWlsXCJcbiAgICAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0VtYWlsJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiXG4gID5cbiAgPC91c2VyLWdyb3VwLWxpc3Q+XG5cbiAgPGFwcC1vd25lci1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCcgJiYgIWdyb3VwRW5hYmxlZFwiXG4gICAgW3VzZXJzTGlzdF09XCJvdmVyc2VlcnNMaXN0XCJcbiAgICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiXG4gICAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbFwiXG4gICAgW3VzZXJJZEtleV09XCInZW1wbG95ZWVfaWQnXCJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0ZhaWwnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLW93bmVyLWxpc3Q+XG5cbiAgPHVzZXItZ3JvdXAtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NGYWlsRW1haWxcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXBcIlxuICAgIChzYXZlKT1cInNhdmVTZWxlY3RlZExpc3QoJ2NjRmFpbCcsICRldmVudClcIlxuICAgIChjYW5jZWwpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtmZWF0dXJlZmxhZ109XCJncm91cEVuYWJsZWRcIlxuICA+XG4gIDwvdXNlci1ncm91cC1saXN0PlxuXG4gIDxhcHAtZ3JvdXAtdXNlcnMtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmICFncm91cEVuYWJsZWRcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYXNzaWduZWVzTGlzdFwiXG4gICAgW2dyb3Vwc0xpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcbiAgICBbdXNlcklkS2V5XT1cIidteV9tZW1iZXJfaWQnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLWdyb3VwLXVzZXJzLWxpc3Q+XG5cbiAgPHVzZXItZ3JvdXAtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3duZXJsaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcbiAgICBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCJcbiAgPlxuICA8L3VzZXItZ3JvdXAtbGlzdD5cblxuICA8YXBwLW93bmVyLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJyAmJiBmYWxzZVwiXG4gICAgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgQXBwcm92ZXJzJ1wiXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICAgIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cIlxuICAgICAgYWRkTW9yZUxldmVsc1xuICAgICAgICA/IFtdXG4gICAgICAgIDogcG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1thcHByb3ZlcnNMaXN0SW5kZXhdLmFwcHJvdmVyc1xuICAgIFwiXG4gICAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gICAgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW21vZGVdPVwibW9kZVwiXG4gICAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gICAgKHJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlKT1cInJldmlld2VyVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbd29ya2Zsb3dMaXN0XT1cIndvcmtmbG93TGlzdFwiXG4gICAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbiAgPlxuICA8L2FwcC1vd25lci1saXN0PlxuXG4gIDxhcHAtZnJlcXVlbmN5LWNvbnRhaW5lclxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCJcbiAgICBbbW9kZV09XCIncG9saWN5J1wiXG4gICAgW2ZyZXF1ZW5jeURldGFpbHNdPVwiZnJlcXVlbmN5RGV0YWlsc1wiXG4gICAgKHNlbGVjdGVkRnJlcXVlbmN5KT1cImZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXG4gICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCJcbiAgICAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cblxuICA8YXBwLWZyZXF1ZW5jeS1jb250YWluZXJcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXCJcbiAgICBbbW9kZV09XCIncmV2aWV3ZXJGcmVxdWVuY3knXCJcbiAgICBbZnJlcXVlbmN5RGV0YWlsc109XCJyZXZpZXdlckZyZXF1ZW5jeURldGFpbHNcIlxuICAgIChzZWxlY3RlZEZyZXF1ZW5jeSk9XCJyZXZpZXdlckZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXG4gICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCJcbiAgICAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cblxuICA8dmMtbGluay1wcm9ncmFtXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2xpbmtQcm9ncmFtJ1wiXG4gICAgKGNsb3NlKT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbcG9saWN5XT1cInBvbGljeUZvcm1cIlxuICAgIFtzZWxlY3RlZFByb2dyYW1dPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzXCJcbiAgICBbbW9kZV09XCJtb2RlXCJcbiAgICBbc2VsZWN0ZWRMaW5rUHJvZ3JhbV09XCJzZWxlY3RlZExpbmtQcm9ncmFtXCJcbiAgICAoY2hhbmdlVGFiKT1cImNoYW5nZVRhYignbGlua2VkUHJvZ3JhbXMnKVwiXG4gICAgKHVwZGF0ZWRQcm9ncmFtRGV0YWlscyk9XCJ1cGRhdGVkUHJvZ3JhbURldGFpbHMoJGV2ZW50KVwiXG4gID5cbiAgPC92Yy1saW5rLXByb2dyYW0+XG5cbiAgPGFwcC1jaGVja3BvaW50cy1wb2xpY3ktY29udGFpbmVyXG4gICAgKGNsb3NlQ2hlY2tQb2ludCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2NoZWNrcG9pbnREYXRhXT1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzXCJcbiAgICBbcmVxdWlyZWRQb2ludF09XCJwb2xpY3lGb3JtPy5wYXNzaW5nTWFya3NcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxuICAgIChzYXZlQ2hlY2tQb2ludCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjaGVja3BvaW50cycsICRldmVudClcIlxuICA+PC9hcHAtY2hlY2twb2ludHMtcG9saWN5LWNvbnRhaW5lcj5cbiAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cblxuICA8YXBwLWFwcHJvdmFsLXdvcmtmbG93XG4gICAgKm5nSWY9XCJlbmFibGVBcHByb3ZhbFdvcmtmbG93XCJcbiAgICBbc2VsZWN0ZWRDYXRlZ29yeV09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFthcHByb3ZlcldvcmtGbG93TGlzdF09XCJhcHByb3ZlcldvcmtGbG93TGlzdFwiXG4gICAgW2FsbEFwcHJvdmVyc109XCJhbGxBcHByb3ZlcnNcIlxuICAgIChsaXN0Q2FuY2VsQ2xpY2tlZCk9XCJsaXN0Q2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRXb3JrZmxvd05leHQpPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KCRldmVudClcIlxuICAgIChzYXZlQXBwcm92YWxXb3JrZmxvdyk9XCJhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbCgkZXZlbnQpXCJcbiAgICBbZWRpdEFwcHJvdmFsV29ya2Zsb3ddPVwiZWRpdEFwcHJvdmFsV29ya2Zsb3dcIlxuICAgIFtjcmVhdGVBcHByb3ZhbENsaWNrXT1cImNyZWF0ZUFwcHJvdmFsQ2xpY2tcIlxuICAgIChjbG9zZUNyZWF0ZUNsaWNrZWQpPVwiY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpXCJcbiAgICBbZWRpdFdvcmtmbG93TGV2ZWxdPVwiZWRpdFdvcmtmbG93TGV2ZWxcIlxuICA+PC9hcHAtYXBwcm92YWwtd29ya2Zsb3c+XG4gIDwhLS0gPGFwcC1zZWxlY3QtYXBwcm92ZXJzPjwvYXBwLXNlbGVjdC1hcHByb3ZlcnM+IC0tPlxuXG4gIDxhcHAtcG9saWN5LWFjY2Vzc1xuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCJcbiAgICBbcG9saWN5QWNjZXNzVHlwZV09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGVcIlxuICAgIChjbG9zZSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW29yZ1VzZXJzTGlzdF09XCJ1c2Vyc0xpc3RcIlxuICAgIFt1c2Vyc0FjY2Vzc0xpc3RdPVwidXNlcnNBY2Nlc3NMaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgW2dyb3Vwc0FjY2Vzc0xpc3RdPVwiZ3JvdXBzQWNjZXNzTGlzdFwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1wiXG4gICAgW2Rpc2FibGVkSWRzXT1cInVzZXJzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Rpc2FibGVkR3JvdXBJZHNdPVwiZ3JvdXBzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Z1dHVyZVVzZXJzV2lsbFNlbGVjdF09XCJwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsICRldmVudClcIlxuICAgIChzZXRQb2xpY3lBY2Nlc3NUeXBlKT1cInBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gJGV2ZW50XCJcbiAgPlxuICA8L2FwcC1wb2xpY3ktYWNjZXNzPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8IS0tIDxhcHAtY3JlYXRlLWRvY3VtZW50cyAqbmdJZj1cInNob3dDcmVhdGVEb2N1bWVudHNcIlxuICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxuICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICBbdXNlckluZm9dPVwidXNlckluZm9cIlxuICAgW3BvbGljeUlkXT1cInBvbGljeUlkXCJcbiAgIFtwb2xpY3lOYW1lXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXG4gICAoZGlzY29ubmVjdFJlZnJlc2gpPVwiZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSlcIlxuICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICA+PC9hcHAtY3JlYXRlLWRvY3VtZW50cz4gLS0+XG4gIDxsaWItZG9jdW1lbnQtc2VjdGlvblxuICAgICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiXG4gICAgW3RlbXBsYXRlVmlld109XCJpc1RlbXBsYXRlQ2xvc2VkXCJcbiAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICAgW3VzZXJJbmZvXT1cInVzZXJJbmZvXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFtmZWF0dXJlXT1cImZlYXR1cmVcIlxuICAgIFt0ZW1wbGF0ZVVybF09XCJ0ZW1wbGF0ZVVybFwiXG4gICAgW2lzVGVtcGxhdGVPcGVuZWRdPVwidGVtcGxhdGVWaWV3XCJcbiAgICBbcG9saWN5TmFtZV09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxuICAgIChkaXNjb25uZWN0UmVmcmVzaCk9XCJkaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKVwiXG4gICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICAgKG9wZW5UZW1wbGF0ZSk9XCJ0ZW1wbGF0ZVZpZXcgPSB0cnVlXCJcbiAgPjwvbGliLWRvY3VtZW50LXNlY3Rpb24+XG48L25nLWNvbnRhaW5lcj5cblxuPGFwcC1hc3Nlc3NtZW50LWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIlxuICBbcHJvZ3JhbV9pZHNdPVwiJydcIlxuICBbaXNFZGl0XT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiXG4gIChjYW5jZWxBc3Nlc3NtZW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVwiXG4gIFtzZWxlY3RlZEFzc2Vzc21lbnRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudFswXVwiXG4gIFttb2RlXT1cIidwb2xpY3knXCJcbiAgKG9uQXNzZXNzbWVudFNlbGVjdCk9XCJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgc2F2ZVNlbGVjdGVkTGlzdCgnaXNBc3Nlc3NtZW50JywgZmFsc2UpXG4gIFwiXG4+PC9hcHAtYXNzZXNzbWVudC1saXN0PlxuXG48YXBwLW93bmVyLWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycycgJiYgZmFsc2VcIlxuICBbbGlzdEhlYWRpbmddPVwiJ1NlbGVjdCBBcHByb3ZlcnMnXCJcbiAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIlxuICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICBbc2VsZWN0ZWRVc2Vyc109XCJcbiAgICBhZGRNb3JlTGV2ZWxzXG4gICAgICA/IFtdXG4gICAgICA6IHBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbYXBwcm92ZXJzTGlzdEluZGV4XS5hcHByb3ZlcnNcbiAgXCJcbiAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gIFtpdGVtRW1haWxLZXldPVwiJ21lbWJlcl9lbWFpbCdcIlxuICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiXG4gIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gIChyZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSk9XCJyZXZpZXdlclR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFt3b3JrZmxvd0xpc3RdPVwid29ya2Zsb3dMaXN0XCJcbiAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbj5cbjwvYXBwLW93bmVyLWxpc3Q+XG5cbjxhcHAtb3duZXItbGlzdFxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiXG4gIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IE93bmVyKHMpJ1wiXG4gIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgW3Nob3dXb3JrZmxvd109XCJmYWxzZVwiXG4gIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxuICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvd25lcnMnLCAkZXZlbnQpXCJcbiAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgW21vZGVdPVwibW9kZVwiXG4gIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgPz8gW11cIlxuPlxuPC9hcHAtb3duZXItbGlzdD5cblxuPGFwcC1zZWxlY3QtdGVtcGxhdGUtbGlzdFxuICAqbmdJZj1cInRlbXBsYXRlVmlld1wiXG4gIFtzZWxlY3RlZENhdGVnb3J5SWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzXCJcbiAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gIChvblRlbXBsYXRlU2VsZWN0KT1cIm9uVGVtcGxhdGVTZWxlY3QoJGV2ZW50KVwiXG4+PC9hcHAtc2VsZWN0LXRlbXBsYXRlLWxpc3Q+XG4iXX0=