@bnsights/bbsf-admin-portal 1.0.4 → 1.0.8

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 (150) hide show
  1. package/bnsights-bbsf-admin-portal-1.0.8.tgz +0 -0
  2. package/bundles/bnsights-bbsf-admin-portal.umd.js +8335 -3660
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  4. package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js +2 -2
  5. package/esm2015/lib/Pages/account/account-routing.module.js +9 -1
  6. package/esm2015/lib/Pages/account/account.component.js +15 -6
  7. package/esm2015/lib/Pages/account/account.module.js +19 -8
  8. package/esm2015/lib/Pages/account/activation/activation.component.js +91 -0
  9. package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +54 -0
  10. package/esm2015/lib/Pages/account/rest-password/rest-password.component.js +89 -0
  11. package/esm2015/lib/Pages/account/upload-license/upload-license.component.js +70 -0
  12. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +203 -184
  13. package/esm2015/lib/Pages/core/authentication/auth.guard.js +10 -4
  14. package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
  15. package/esm2015/lib/Pages/departments/department/department.component.js +12 -9
  16. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +1 -1
  17. package/esm2015/lib/Pages/departments/departments.module.js +6 -4
  18. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +9 -9
  19. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +9 -9
  20. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +9 -9
  21. package/esm2015/lib/Pages/home/home.component.js +2 -2
  22. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +1 -1
  23. package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +1 -1
  24. package/esm2015/lib/Pages/localizations/localizations.component.js +10 -11
  25. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +10 -10
  26. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +5 -5
  27. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +5 -5
  28. package/esm2015/lib/Pages/notifications/add/add.component.js +11 -13
  29. package/esm2015/lib/Pages/notifications/edit/edit.component.js +11 -13
  30. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +1 -1
  31. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +5 -5
  32. package/esm2015/lib/Pages/notifications/templates/templates.component.js +9 -9
  33. package/esm2015/lib/Pages/providers/provider/provider.component.js +2 -1
  34. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +78 -84
  35. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +1 -1
  36. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +5 -5
  37. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +5 -5
  38. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +1 -1
  39. package/esm2015/lib/Pages/sectors/sector/sector.component.js +5 -5
  40. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +1 -1
  41. package/esm2015/lib/Pages/shared/Enums/ConditionRHSType.js +6 -0
  42. package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
  43. package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
  44. package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
  45. package/esm2015/lib/Pages/shared/Enums/WFActivityType.js +12 -0
  46. package/esm2015/lib/Pages/shared/Enums/WFVariableDataType.js +14 -0
  47. package/esm2015/lib/Pages/shared/Services/AccountService.service.js +41 -0
  48. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +1 -1
  49. package/esm2015/lib/Pages/shared/Services/WorkFlowVersionService.service.js +24 -0
  50. package/esm2015/lib/Pages/shared/Services/WorkflowActivityService.service.js +32 -5
  51. package/esm2015/lib/Pages/shared/Services/WorkflowInstanceService.service.js +24 -0
  52. package/esm2015/lib/Pages/shared/Services/WorkflowLogVariablesService.service.js +24 -0
  53. package/esm2015/lib/Pages/shared/Services/WorkflowService.service.js +12 -4
  54. package/esm2015/lib/Pages/shared/Services/WorkflowVariablesService.service.js +12 -6
  55. package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
  56. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +3 -2
  57. package/esm2015/lib/Pages/shared/models/UserModels/ActivationModel.js +3 -0
  58. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.js +8 -0
  59. package/esm2015/lib/Pages/users/users.component.js +7 -6
  60. package/esm2015/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.js +535 -0
  61. package/esm2015/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.js +852 -0
  62. package/esm2015/lib/Pages/workflows/instance-info/instance-info.component.js +309 -0
  63. package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +611 -430
  64. package/esm2015/lib/Pages/workflows/version-info/version-info.component.js +143 -0
  65. package/esm2015/lib/Pages/workflows/workflow/workflow.component.js +136 -148
  66. package/esm2015/lib/Pages/workflows/workflows-routing.module.js +9 -1
  67. package/esm2015/lib/Pages/workflows/workflows.module.js +7 -3
  68. package/esm2015/lib/masterlayout.component.js +1 -2
  69. package/esm2015/lib/masterlayout.module.js +2 -4
  70. package/esm2015/public-api.js +2 -1
  71. package/fesm2015/bnsights-bbsf-admin-portal.js +7678 -3098
  72. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  73. package/lib/Pages/account/account.component.d.ts +5 -1
  74. package/lib/Pages/account/account.module.d.ts +11 -6
  75. package/lib/Pages/account/activation/activation.component.d.ts +32 -0
  76. package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +23 -0
  77. package/lib/Pages/account/rest-password/rest-password.component.d.ts +32 -0
  78. package/lib/Pages/account/upload-license/upload-license.component.d.ts +25 -0
  79. package/lib/Pages/configurations/configuration/configuration.component.d.ts +12 -8
  80. package/lib/Pages/core/authentication/auth.guard.d.ts +1 -0
  81. package/lib/Pages/departments/department/department.component.d.ts +3 -2
  82. package/lib/Pages/departments/department-info/department-info.component.d.ts +1 -1
  83. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +1 -1
  84. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +1 -1
  85. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +1 -1
  86. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +1 -1
  87. package/lib/Pages/jobs/jobs/jobs.component.d.ts +6 -6
  88. package/lib/Pages/localizations/localizations.component.d.ts +1 -1
  89. package/lib/Pages/lookups/lookup/lookup.component.d.ts +1 -1
  90. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +1 -1
  91. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +1 -1
  92. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +1 -1
  93. package/lib/Pages/notifications/templates/templates.component.d.ts +1 -1
  94. package/lib/Pages/providers/provider/provider.component.d.ts +1 -1
  95. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +12 -15
  96. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +1 -1
  97. package/lib/Pages/roles/permissions/permissions.component.d.ts +1 -1
  98. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +1 -1
  99. package/lib/Pages/sectors/department-info/department-info.component.d.ts +1 -1
  100. package/lib/Pages/sectors/sector/sector.component.d.ts +1 -1
  101. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +1 -1
  102. package/lib/Pages/shared/Enums/ConditionRHSType.d.ts +4 -0
  103. package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
  104. package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
  105. package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
  106. package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -0
  107. package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +12 -0
  108. package/lib/Pages/shared/Services/AccountService.service.d.ts +17 -0
  109. package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +8 -8
  110. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -7
  111. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +7 -7
  112. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
  113. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +8 -8
  114. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
  115. package/lib/Pages/shared/Services/JobsService.service.d.ts +1 -1
  116. package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
  117. package/lib/Pages/shared/Services/LogsService.d.ts +1 -1
  118. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
  119. package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -14
  120. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -8
  121. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -5
  122. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +6 -6
  123. package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
  124. package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -20
  125. package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -0
  126. package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +9 -3
  127. package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -0
  128. package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -0
  129. package/lib/Pages/shared/Services/WorkflowService.service.d.ts +5 -3
  130. package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +5 -4
  131. package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -12
  132. package/lib/Pages/shared/Services/provider.service.d.ts +10 -10
  133. package/lib/Pages/shared/Services/userService.service.d.ts +14 -14
  134. package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
  135. package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +9 -8
  136. package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -0
  137. package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -0
  138. package/lib/Pages/users/users.component.d.ts +1 -1
  139. package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -0
  140. package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +83 -0
  141. package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -0
  142. package/lib/Pages/workflows/tabs/tabs.component.d.ts +73 -80
  143. package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -0
  144. package/lib/Pages/workflows/workflow/workflow.component.d.ts +26 -29
  145. package/lib/Pages/workflows/workflows.module.d.ts +19 -15
  146. package/package.json +5 -3
  147. package/public-api.d.ts +1 -0
  148. package/src/lib/assets/sass/core/components/_variables.scss +1 -1
  149. package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
  150. package/src/lib/assets/sass/custom-styles.scss +38 -0
@@ -0,0 +1,852 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component } from '@angular/core';
3
+ import { FormGroup } from '@angular/forms';
4
+ import { CheckBoxOptions, ControlLayout, DropdownOptions, EnglishArabicDTO, FormOptions, InputType, MultiLingualTextAreaOptions, MultiLingualTextBoxOptions, TextBoxOptions, ToggleSlideOptions } from '@bnsights/bbsf-controls';
5
+ import { PageInfoService } from '../../../../../public-api';
6
+ import { ConditionRHSType } from '../../../shared/Enums/ConditionRHSType';
7
+ import { ParticipantType } from '../../../shared/Enums/ParticipantType';
8
+ import { WFActivityType } from '../../../shared/Enums/WFActivityType';
9
+ import { ParticipantModel } from '../../../shared/models/ImpersonationRuleModels/ParticipantModel';
10
+ import { WFActivityModel } from '../../../shared/models/WorkflowModels/WFActivityModel';
11
+ import { WFActivityOutcomeModel } from '../../../shared/models/WorkflowModels/WFActivityOutcomeModel';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../../shared/Services/WorkflowActivityService.service";
14
+ import * as i2 from "../../../../../public-api";
15
+ import * as i3 from "@bnsights/bbsf-utilities";
16
+ import * as i4 from "@angular/router";
17
+ import * as i5 from "@bnsights/bbsf-controls";
18
+ import * as i6 from "@angular/common";
19
+ export class WorkflowActivityEditComponent {
20
+ constructor(workflowActivityService, pageInfoService, utilityService, activatedRoute, router, requestHandlerService, bbsfTranslateService) {
21
+ this.workflowActivityService = workflowActivityService;
22
+ this.pageInfoService = pageInfoService;
23
+ this.utilityService = utilityService;
24
+ this.activatedRoute = activatedRoute;
25
+ this.router = router;
26
+ this.requestHandlerService = requestHandlerService;
27
+ this.bbsfTranslateService = bbsfTranslateService;
28
+ //Page requirements
29
+ this.isEditFormLoaded = false;
30
+ //Edit Activity shared controls
31
+ this.editworkflowActivityForm = new FormGroup({});
32
+ this.editworkflowActivityFormOptions = new FormOptions;
33
+ this.showActivityType = false;
34
+ //Shared Participant type and data (Non Published only)
35
+ this.showParticipantContainer = false;
36
+ this.showParticipantPermssionSet = false;
37
+ //Dynamic Types Controls //(Approval,Action,Percentage)
38
+ this.showDynamicControls = false;
39
+ //Static types controls (Email,Sleep) (Non published only)
40
+ //Email Type Controls //+ initialize participant
41
+ this.showStaticControls = false;
42
+ //Condition type controls
43
+ this.showConditionControls = false;
44
+ this.showConditionRHSWFVariable = false;
45
+ //Shared required lists
46
+ this.ActivityTypeList = [];
47
+ //Outcomes (dynamic,condition)
48
+ this.outcomesOptions = [];
49
+ this.outcomesCount = 0;
50
+ this.showOutcomesContainer = false;
51
+ //RequiredLists
52
+ this.taskTypeList = [];
53
+ this.participantTypeList = [];
54
+ this.participantDataList = [];
55
+ this.nextActivityList = [];
56
+ //ConditionTypeRequiredLists
57
+ this.conditionLHSWFVariableList = [];
58
+ this.conditionRHSWFVariableList = [];
59
+ this.conditionRHSTypeList = [];
60
+ this.conditionList = [];
61
+ //Edit functions
62
+ this.getEditWFActivityModel = () => {
63
+ let paramArray = [];
64
+ let ResultModel = this.editworkflowActivityForm.value;
65
+ let editModel = new WFActivityModel();
66
+ editModel.ID = this.activityModel.id;
67
+ editModel.Name.English = ResultModel.name.English;
68
+ editModel.Name.Arabic = ResultModel.name.Arabic;
69
+ editModel.VersionID = Number(this.versionID);
70
+ editModel.ActivityTypeItemID = this.activityTypeID;
71
+ editModel.SysName = ResultModel.sysName;
72
+ //If participant exists
73
+ if (ResultModel.participantTypes != undefined) {
74
+ editModel.ParticipantDTO = new ParticipantModel();
75
+ editModel.ParticipantDTO = new ParticipantModel();
76
+ editModel.ParticipantDTO.ParticipantTypeItemIDsString = ResultModel.participantTypes.toString();
77
+ if (ResultModel.participantTypes.includes(ParticipantType.PermissionSet)) {
78
+ editModel.ParticipantDTO.PermissionSetIDsString = ResultModel.participantPermissionSet.toString();
79
+ }
80
+ }
81
+ switch (Number(this.activityTypeID)) {
82
+ case WFActivityType.Approval:
83
+ case WFActivityType.Action:
84
+ case WFActivityType.PercentageTask:
85
+ editModel.TaskName.English = ResultModel.dynamicTaskName.English;
86
+ editModel.TaskName.Arabic = ResultModel.dynamicTaskName.Arabic;
87
+ editModel.TaskDescription.English = ResultModel.dynamicTaskDescription.English;
88
+ editModel.TaskDescription.Arabic = ResultModel.dynamicTaskDescription.Arabic;
89
+ editModel.TaskURL = ResultModel.dynamicTaskURL;
90
+ editModel.TaskCorrlTypeID = ResultModel.dynamicTaskType != null ? Number(ResultModel.dynamicTaskType) : null;
91
+ editModel.CanCompleteFromTME = ResultModel.dynamicCanComplete;
92
+ break;
93
+ case WFActivityType.Start:
94
+ case WFActivityType.Email:
95
+ case WFActivityType.Sleep:
96
+ if (!this.isPublished) {
97
+ editModel.NormalOutcomeName.English = ResultModel.staticOutcomeName.English;
98
+ editModel.NormalOutcomeName.Arabic = ResultModel.staticOutcomeName.Arabic;
99
+ editModel.OutcomeSysName = ResultModel.staticOutcomeSysName;
100
+ editModel.NextActivityID = ResultModel.staticOutcomeNextActivity != null ? Number(ResultModel.staticOutcomeNextActivity) : null;
101
+ editModel.CanAddComment = ResultModel.staticOutcomeCanAddComment;
102
+ }
103
+ break;
104
+ case WFActivityType.Condition:
105
+ editModel.LHSVariableID = ResultModel.conditionLHSDropDown != null ? Number(ResultModel.conditionLHSDropDown) : null;
106
+ editModel.RHSVariableID = ResultModel.conditionRHSDropDown != null ? Number(ResultModel.conditionRHSDropDown) : null;
107
+ editModel.RHSTypeItemID = ResultModel.conditionRHSTypeDropDown != null ? Number(ResultModel.conditionRHSTypeDropDown) : null;
108
+ editModel.OperatorTypeItemID = ResultModel.conditionsDropDown != null ? Number(ResultModel.conditionsDropDown) : null;
109
+ editModel.RHSValue = ResultModel.conditionRHSValue != undefined ? ResultModel.conditionRHSValue : null;
110
+ break;
111
+ }
112
+ //Set Outcomes (dynamic,condition types)
113
+ for (let j = 0; j < this.outcomesCount; j++) {
114
+ let outcomeID = ResultModel["outcomeID" + j];
115
+ if (outcomeID == undefined)
116
+ continue;
117
+ let outcomeName = ResultModel["outcomeName" + j];
118
+ let outcomeSysName;
119
+ let outComeCanEditSysName = ResultModel["outcomeCanEditSysName" + j];
120
+ if (outComeCanEditSysName)
121
+ outcomeSysName = ResultModel["outcomeDecisionSysName" + j];
122
+ else
123
+ outcomeSysName = ResultModel["outcomeHiddeneSysName" + j];
124
+ let outcomeActivity = ResultModel["outcomeNextActivityTypes" + j];
125
+ let outcomeCanAddComment = ResultModel["outcomeCanAddComment" + j];
126
+ let activityOutcome = new WFActivityOutcomeModel();
127
+ activityOutcome.Id = outcomeID;
128
+ activityOutcome.NameEN = outcomeName.English;
129
+ activityOutcome.NameAR = outcomeName.Arabic;
130
+ activityOutcome.OutcomeSysName = outcomeSysName;
131
+ activityOutcome.NextActivityID = outcomeActivity != null ? Number(outcomeActivity) : null;
132
+ activityOutcome.CanAddComment = outcomeCanAddComment;
133
+ editModel.Outcomes.push(activityOutcome);
134
+ }
135
+ paramArray.push(editModel);
136
+ return paramArray;
137
+ };
138
+ this.getEditWFActivityFunction = (editModel) => {
139
+ if (this.isPublished)
140
+ return this.workflowActivityService.editPublishedActivity(editModel);
141
+ else
142
+ return this.workflowActivityService.editActivity(editModel);
143
+ };
144
+ this.onEditSuccess = (result) => {
145
+ this.cancelEdit();
146
+ };
147
+ this.activatedRoute.params.subscribe(params => {
148
+ this.activityIDEnc = params['activityid'];
149
+ });
150
+ }
151
+ ngOnInit() {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ this.bbsfTranslateService.onLangChange.subscribe((event) => {
154
+ this.ngOnInit();
155
+ });
156
+ PageInfoService.PageTitle = this.utilityService.getResourceValue("EditWorkflowActivity");
157
+ PageInfoService.PageBreadcrumbs = [
158
+ { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
159
+ { title: '', path: '', isSeparator: true, isActive: false },
160
+ { title: this.utilityService.getResourceValue("WorkFlows"), path: '/Admin/Workflows/workflow', isSeparator: false, isActive: false },
161
+ { title: '', path: '', isSeparator: true, isActive: false }
162
+ ];
163
+ this.pageInfoService.calculateTitle();
164
+ this.pageInfoService.calculateBreadcrumbs();
165
+ this.initializePage();
166
+ });
167
+ }
168
+ //Initialize edit model and required DDLs
169
+ initializePage() {
170
+ this.workflowActivityService.getEditWorkFlowActivityData(this.activityIDEnc).subscribe((result) => {
171
+ let resultObj = result;
172
+ this.activityModel = resultObj.model;
173
+ var list = resultObj.list;
174
+ this.ActivityTypeList = resultObj.activityList;
175
+ this.nextActivityList = list.activities;
176
+ this.activityTypeID = this.activityModel.activityTypeItemID;
177
+ this.isPublished = this.activityModel.isPublished;
178
+ this.versionID = this.activityModel.versionID;
179
+ this.editworkflowActivityForm = new FormGroup({});
180
+ this.editworkflowActivityFormOptions = new FormOptions();
181
+ this.editworkflowActivityFormOptions.FormGroup = this.editworkflowActivityForm;
182
+ this.editworkflowActivityFormOptions.GetModelFunction = this.getEditWFActivityModel;
183
+ this.editworkflowActivityFormOptions.ServiceSubmitFunction = this.getEditWFActivityFunction;
184
+ this.editworkflowActivityFormOptions.OnSuccessHandler = this.onEditSuccess;
185
+ let name = new EnglishArabicDTO();
186
+ name.English = this.activityModel.name.english;
187
+ name.Arabic = this.activityModel.name.arabic;
188
+ this.name = new MultiLingualTextBoxOptions();
189
+ this.name.Name = "name";
190
+ this.name.ArabicLabelKey = "NameInArabic";
191
+ this.name.EnglishLabelKey = "NameInEnglish";
192
+ this.name.IsRequired = true;
193
+ this.name.Value = name;
194
+ let outcomesResult = this.getActivityOutcomesOptions(this.activityModel.outcomes, this.isPublished);
195
+ this.outcomesOptions = outcomesResult[0];
196
+ this.outcomesCount = outcomesResult[1];
197
+ this.showActivityType = false;
198
+ if (this.isPublished) {
199
+ switch (Number(this.activityTypeID)) {
200
+ case WFActivityType.Approval:
201
+ case WFActivityType.Action:
202
+ case WFActivityType.PercentageTask:
203
+ this.taskTypeList = list.tasks;
204
+ let taskName = new EnglishArabicDTO();
205
+ taskName.English = this.activityModel.taskName.english;
206
+ taskName.Arabic = this.activityModel.taskName.arabic;
207
+ let taskDescription = new EnglishArabicDTO();
208
+ taskDescription.English = this.activityModel.taskDescription.english;
209
+ taskDescription.Arabic = this.activityModel.taskDescription.arabic;
210
+ this.dynamicTaskName = new MultiLingualTextBoxOptions();
211
+ this.dynamicTaskName.Name = "dynamicTaskName";
212
+ this.dynamicTaskName.ArabicLabelKey = "TaskNameInArabic";
213
+ this.dynamicTaskName.EnglishLabelKey = "TaskNameInEnglish";
214
+ this.dynamicTaskName.Value = taskName;
215
+ this.dynamicTaskDescription = new MultiLingualTextAreaOptions();
216
+ this.dynamicTaskDescription.Name = "dynamicTaskDescription";
217
+ this.dynamicTaskDescription.ArabicLabelKey = "TaskDescriptionInArabic";
218
+ this.dynamicTaskDescription.EnglishLabelKey = "TaskDescriptionInEnglish";
219
+ this.dynamicTaskDescription.Value = taskDescription;
220
+ this.dynamicTaskURL = new TextBoxOptions();
221
+ this.dynamicTaskURL.Name = "dynamicTaskURL";
222
+ this.dynamicTaskURL.LabelKey = "TaskURL";
223
+ this.dynamicTaskURL.Type = InputType.Text;
224
+ this.dynamicTaskURL.Value = this.activityModel.taskURL;
225
+ this.dynamicTaskType = new DropdownOptions();
226
+ this.dynamicTaskType.Name = "dynamicTaskType";
227
+ this.dynamicTaskType.LabelKey = "TaskType";
228
+ this.dynamicTaskType.DataSource = this.taskTypeList;
229
+ this.dynamicTaskType.SingleSelection = true;
230
+ this.dynamicTaskType.AllowSearchFilter = true;
231
+ this.dynamicTaskType.IsRequired = true;
232
+ this.dynamicTaskType.SelectedItems = this.taskTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.taskCorrlTypeID; }).map((item) => item.key)[0];
233
+ ;
234
+ this.dynamicCanComplete = new ToggleSlideOptions();
235
+ this.dynamicCanComplete.Name = "dynamicCanComplete";
236
+ this.dynamicCanComplete.LabelKey = "CanCompleteFromTME";
237
+ this.dynamicCanComplete.ViewType = ControlLayout.Horizontal;
238
+ this.dynamicCanComplete.Value = this.activityModel.canCompleteFromTME;
239
+ this.showDynamicControls = true;
240
+ break;
241
+ case WFActivityType.Condition:
242
+ this.conditionLHSWFVariableList = list.wfVariables;
243
+ this.conditionRHSWFVariableList = list.wfVariables;
244
+ this.conditionRHSTypeList = list.rhsTypes;
245
+ this.conditionList = list.conditions;
246
+ this.conditionLHSDropDown = new DropdownOptions();
247
+ this.conditionLHSDropDown.Name = "conditionLHSDropDown";
248
+ this.conditionLHSDropDown.HideLabel = true;
249
+ this.conditionLHSDropDown.Placeholder = "WorkflowVariables";
250
+ this.conditionLHSDropDown.DataSource = this.conditionLHSWFVariableList;
251
+ this.conditionLHSDropDown.SingleSelection = true;
252
+ this.conditionLHSDropDown.AllowSearchFilter = true;
253
+ this.conditionLHSDropDown.IsRequired = true;
254
+ this.conditionLHSDropDown.SelectedItems = this.conditionLHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.lhsVariableID; }).map((item) => item.key)[0];
255
+ ;
256
+ this.conditionsDropDown = new DropdownOptions();
257
+ this.conditionsDropDown.Name = "conditionsDropDown";
258
+ this.conditionsDropDown.HideLabel = true;
259
+ this.conditionsDropDown.Placeholder = "Condition";
260
+ this.conditionsDropDown.DataSource = this.conditionList;
261
+ this.conditionsDropDown.SingleSelection = true;
262
+ this.conditionsDropDown.IsRequired = true;
263
+ this.conditionsDropDown.SelectedItems = this.conditionList.filter((item) => { return parseInt(item.key) == this.activityModel.operatorTypeItemID; }).map((item) => item.key)[0];
264
+ ;
265
+ this.conditionRHSTypeDropDown = new DropdownOptions();
266
+ this.conditionRHSTypeDropDown.Name = "conditionRHSTypeDropDown";
267
+ this.conditionRHSTypeDropDown.HideLabel = true;
268
+ this.conditionRHSTypeDropDown.DataSource = this.conditionRHSTypeList;
269
+ this.conditionRHSTypeDropDown.SingleSelection = true;
270
+ this.conditionRHSTypeDropDown.IsRequired = true;
271
+ this.conditionRHSTypeDropDown.SelectedItems = this.conditionRHSTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsTypeItemID; }).map((item) => item.key)[0];
272
+ ;
273
+ if (this.activityModel.rhsTypeItemID == ConditionRHSType.Variable) {
274
+ this.conditionRHSDropDown = new DropdownOptions();
275
+ this.conditionRHSDropDown.Name = "conditionRHSDropDown";
276
+ this.conditionRHSDropDown.HideLabel = true;
277
+ this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
278
+ this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
279
+ this.conditionRHSDropDown.SingleSelection = true;
280
+ this.conditionRHSDropDown.IsRequired = true;
281
+ this.conditionRHSDropDown.SelectedItems = this.conditionRHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsVariableID; }).map((item) => item.key)[0];
282
+ ;
283
+ this.showConditionRHSWFVariable = true;
284
+ }
285
+ else {
286
+ this.conditionRHSValue = new TextBoxOptions();
287
+ this.conditionRHSValue.Name = "conditionRHSValue";
288
+ this.conditionRHSValue.HideLabel = true;
289
+ this.conditionRHSValue.Placeholder = "Value";
290
+ this.conditionRHSValue.Type = InputType.Text;
291
+ this.conditionRHSValue.IsRequired = true;
292
+ this.conditionRHSValue.Value = this.activityModel.rhsValue;
293
+ this.showConditionRHSWFVariable = false;
294
+ }
295
+ this.showConditionControls = true;
296
+ break;
297
+ }
298
+ this.showOutcomesContainer = true;
299
+ }
300
+ else {
301
+ this.sysName = new TextBoxOptions();
302
+ this.sysName.Name = "sysName";
303
+ this.sysName.LabelKey = "SysName";
304
+ this.sysName.Type = InputType.Text;
305
+ this.sysName.IsRequired = true;
306
+ this.sysName.Value = this.activityModel.sysName;
307
+ if (this.activityModel.activityTypeItemID != WFActivityType.Start) {
308
+ this.showActivityType = true;
309
+ this.activityType = new DropdownOptions();
310
+ this.activityType.Name = "activityType";
311
+ this.activityType.LabelKey = "ActivityType";
312
+ this.activityType.DataSource = this.ActivityTypeList;
313
+ this.activityType.SingleSelection = true;
314
+ this.activityType.AllowSearchFilter = true;
315
+ this.activityType.IsRequired = true;
316
+ this.activityType.SelectedItems = this.ActivityTypeList.filter((item) => { return parseInt(item.key) == this.activityTypeID; }).map((item) => item.key)[0];
317
+ ;
318
+ }
319
+ switch (Number(this.activityModel.activityTypeItemID)) {
320
+ case WFActivityType.Approval:
321
+ case WFActivityType.Action:
322
+ case WFActivityType.PercentageTask:
323
+ this.taskTypeList = list.tasks;
324
+ this.participantTypeList = list.participants.participantTypes;
325
+ this.participantDataList = list.participants.participantData;
326
+ let taskName = new EnglishArabicDTO();
327
+ taskName.English = this.activityModel.taskName.english;
328
+ taskName.Arabic = this.activityModel.taskName.arabic;
329
+ let taskDescription = new EnglishArabicDTO();
330
+ taskDescription.English = this.activityModel.taskDescription.english;
331
+ taskDescription.Arabic = this.activityModel.taskDescription.arabic;
332
+ //Initialize required controls for approval
333
+ let selectedParticipantTypes = this.activityModel.participantTypeItemIDsStringList.map((i) => Number(i));
334
+ this.participantTypes = new DropdownOptions();
335
+ this.participantTypes.Name = "participantTypes";
336
+ this.participantTypes.LabelKey = "ParticipantTypes";
337
+ this.participantTypes.DataSource = this.participantTypeList;
338
+ this.participantTypes.SingleSelection = false;
339
+ this.participantTypes.AllowSearchFilter = true;
340
+ this.participantTypes.IsRequired = true;
341
+ this.participantTypes.SelectedItems = this.participantTypeList.filter(function (tag) {
342
+ return selectedParticipantTypes.indexOf(parseInt(tag.key)) >= 0;
343
+ }).map((item) => item.key);
344
+ if (selectedParticipantTypes.includes(Number(ParticipantType.PermissionSet))) {
345
+ let selectedPermissionSets = this.activityModel.participantPermsetsIDsString.map((i) => Number(i));
346
+ this.participantPermissionSet = new DropdownOptions();
347
+ this.participantPermissionSet.Name = "participantPermissionSet";
348
+ this.participantPermissionSet.LabelKey = "PermissionSet";
349
+ this.participantPermissionSet.DataSource = this.participantDataList;
350
+ this.participantPermissionSet.SingleSelection = false;
351
+ this.participantPermissionSet.AllowSearchFilter = true;
352
+ this.participantPermissionSet.SelectedItems = this.participantDataList.filter(function (tag) {
353
+ return selectedPermissionSets.indexOf(parseInt(tag.key)) >= 0;
354
+ }).map((item) => item.key);
355
+ this.showParticipantPermssionSet = true;
356
+ }
357
+ this.dynamicTaskName = new MultiLingualTextBoxOptions();
358
+ this.dynamicTaskName.Name = "dynamicTaskName";
359
+ this.dynamicTaskName.ArabicLabelKey = "TaskNameInArabic";
360
+ this.dynamicTaskName.EnglishLabelKey = "TaskNameInEnglish";
361
+ this.dynamicTaskName.Value = taskName;
362
+ this.dynamicTaskDescription = new MultiLingualTextAreaOptions();
363
+ this.dynamicTaskDescription.Name = "dynamicTaskDescription";
364
+ this.dynamicTaskDescription.ArabicLabelKey = "TaskDescriptionInArabic";
365
+ this.dynamicTaskDescription.EnglishLabelKey = "TaskDescriptionInEnglish";
366
+ this.dynamicTaskDescription.Value = taskDescription;
367
+ this.dynamicTaskURL = new TextBoxOptions();
368
+ this.dynamicTaskURL.Name = "dynamicTaskURL";
369
+ this.dynamicTaskURL.LabelKey = "TaskURL";
370
+ this.dynamicTaskURL.Type = InputType.Text;
371
+ this.dynamicTaskURL.Value = this.activityModel.taskURL;
372
+ this.dynamicTaskType = new DropdownOptions();
373
+ this.dynamicTaskType.Name = "dynamicTaskType";
374
+ this.dynamicTaskType.LabelKey = "TaskType";
375
+ this.dynamicTaskType.DataSource = this.taskTypeList;
376
+ this.dynamicTaskType.SingleSelection = true;
377
+ this.dynamicTaskType.AllowSearchFilter = true;
378
+ this.dynamicTaskType.IsRequired = true;
379
+ this.dynamicTaskType.SelectedItems = this.taskTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.taskCorrlTypeID; }).map((item) => item.key)[0];
380
+ ;
381
+ this.dynamicCanComplete = new ToggleSlideOptions();
382
+ this.dynamicCanComplete.Name = "dynamicCanComplete";
383
+ this.dynamicCanComplete.LabelKey = "CanCompleteFromTME";
384
+ this.dynamicCanComplete.ViewType = ControlLayout.Horizontal;
385
+ this.dynamicCanComplete.Value = this.activityModel.canCompleteFromTME;
386
+ this.showDynamicControls = true;
387
+ this.showParticipantContainer = true;
388
+ this.showOutcomesContainer = true;
389
+ break;
390
+ case WFActivityType.Start:
391
+ case WFActivityType.Email:
392
+ case WFActivityType.Sleep:
393
+ if (Number(this.activityModel.activityTypeItemID) == WFActivityType.Email) {
394
+ this.participantTypeList = list.participants.participantTypes;
395
+ this.participantDataList = list.participants.participantData;
396
+ let selectedParticipantTypes = this.activityModel.participantTypeItemIDsStringList.map((i) => Number(i));
397
+ this.participantTypes = new DropdownOptions();
398
+ this.participantTypes.Name = "participantTypes";
399
+ this.participantTypes.LabelKey = "ParticipantTypes";
400
+ this.participantTypes.DataSource = this.participantTypeList;
401
+ this.participantTypes.SingleSelection = false;
402
+ this.participantTypes.AllowSearchFilter = true;
403
+ this.participantTypes.IsRequired = true;
404
+ this.participantTypes.SelectedItems = this.participantTypeList.filter(function (tag) {
405
+ return selectedParticipantTypes.indexOf(parseInt(tag.key)) >= 0;
406
+ }).map((item) => item.key);
407
+ if (selectedParticipantTypes.includes(Number(ParticipantType.PermissionSet))) {
408
+ let selectedPermissionSets = this.activityModel.participantPermsetsIDsString.map((i) => Number(i));
409
+ this.participantPermissionSet = new DropdownOptions();
410
+ this.participantPermissionSet.Name = "participantPermissionSet";
411
+ this.participantPermissionSet.LabelKey = "PermissionSet";
412
+ this.participantPermissionSet.DataSource = this.participantDataList;
413
+ this.participantPermissionSet.SingleSelection = false;
414
+ this.participantPermissionSet.AllowSearchFilter = true;
415
+ this.participantPermissionSet.SelectedItems = this.participantDataList.filter(function (tag) {
416
+ return selectedPermissionSets.indexOf(parseInt(tag.key)) >= 0;
417
+ }).map((item) => item.key);
418
+ this.showParticipantPermssionSet = true;
419
+ }
420
+ this.showParticipantContainer = true;
421
+ }
422
+ let name = new EnglishArabicDTO();
423
+ name.Arabic = this.activityModel.normalOutcomeName.arabic;
424
+ name.English = this.activityModel.normalOutcomeName.english;
425
+ this.staticOutcomeName = new MultiLingualTextBoxOptions();
426
+ this.staticOutcomeName.Name = "staticOutcomeName";
427
+ this.staticOutcomeName.ArabicLabelKey = "OutcomeNameInArabic";
428
+ this.staticOutcomeName.EnglishLabelKey = "OutcomeNameInEnglish";
429
+ this.staticOutcomeName.IsRequired = true;
430
+ this.staticOutcomeName.Value = name;
431
+ this.staticOutcomeSysName = new TextBoxOptions();
432
+ this.staticOutcomeSysName.Name = "staticOutcomeSysName";
433
+ this.staticOutcomeSysName.LabelKey = "DecisionSysName";
434
+ this.staticOutcomeSysName.Type = InputType.Text;
435
+ this.staticOutcomeSysName.IsRequired = true;
436
+ this.staticOutcomeSysName.Value = this.activityModel.outcomeSysName;
437
+ this.staticOutcomeNextActivity = new DropdownOptions();
438
+ this.staticOutcomeNextActivity.Name = "staticOutcomeNextActivity";
439
+ this.staticOutcomeNextActivity.LabelKey = "NextActivity";
440
+ this.staticOutcomeNextActivity.DataSource = this.nextActivityList;
441
+ this.staticOutcomeNextActivity.SingleSelection = true;
442
+ this.staticOutcomeNextActivity.AllowSearchFilter = true;
443
+ this.staticOutcomeNextActivity.IsRequired = true;
444
+ this.staticOutcomeNextActivity.SelectedItems = this.nextActivityList.filter((item) => { return parseInt(item.key) == this.activityModel.nextActivityID; }).map((item) => item.key)[0];
445
+ ;
446
+ this.staticOutcomeCanAddComment = new ToggleSlideOptions();
447
+ this.staticOutcomeCanAddComment.Name = "staticOutcomeCanAddComment";
448
+ this.staticOutcomeCanAddComment.LabelKey = "CanAddComment";
449
+ this.staticOutcomeCanAddComment.ViewType = ControlLayout.Horizontal;
450
+ this.staticOutcomeCanAddComment.Value = this.activityModel.canAddComment;
451
+ this.showStaticControls = true;
452
+ break;
453
+ case WFActivityType.Condition:
454
+ this.conditionLHSWFVariableList = list.wfVariables;
455
+ this.conditionRHSWFVariableList = list.wfVariables;
456
+ this.conditionRHSTypeList = list.rhsTypes;
457
+ this.conditionList = list.conditions;
458
+ this.conditionLHSDropDown = new DropdownOptions();
459
+ this.conditionLHSDropDown.Name = "conditionLHSDropDown";
460
+ this.conditionLHSDropDown.HideLabel = true;
461
+ this.conditionLHSDropDown.Placeholder = "WorkflowVariables";
462
+ this.conditionLHSDropDown.DataSource = this.conditionLHSWFVariableList;
463
+ this.conditionLHSDropDown.SingleSelection = true;
464
+ this.conditionLHSDropDown.AllowSearchFilter = true;
465
+ this.conditionLHSDropDown.IsRequired = true;
466
+ this.conditionLHSDropDown.SelectedItems = this.conditionLHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.lhsVariableID; }).map((item) => item.key)[0];
467
+ ;
468
+ this.conditionsDropDown = new DropdownOptions();
469
+ this.conditionsDropDown.Name = "conditionsDropDown";
470
+ this.conditionsDropDown.HideLabel = true;
471
+ this.conditionsDropDown.Placeholder = "Condition";
472
+ this.conditionsDropDown.DataSource = this.conditionList;
473
+ this.conditionsDropDown.SingleSelection = true;
474
+ this.conditionsDropDown.IsRequired = true;
475
+ this.conditionsDropDown.SelectedItems = this.conditionList.filter((item) => { return parseInt(item.key) == this.activityModel.operatorTypeItemID; }).map((item) => item.key)[0];
476
+ ;
477
+ this.conditionRHSTypeDropDown = new DropdownOptions();
478
+ this.conditionRHSTypeDropDown.Name = "conditionRHSTypeDropDown";
479
+ this.conditionRHSTypeDropDown.HideLabel = true;
480
+ this.conditionRHSTypeDropDown.DataSource = this.conditionRHSTypeList;
481
+ this.conditionRHSTypeDropDown.SingleSelection = true;
482
+ this.conditionRHSTypeDropDown.IsRequired = true;
483
+ this.conditionRHSTypeDropDown.SelectedItems = this.conditionRHSTypeList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsTypeItemID; }).map((item) => item.key)[0];
484
+ ;
485
+ if (this.activityModel.rhsTypeItemID == ConditionRHSType.Variable) {
486
+ this.conditionRHSDropDown = new DropdownOptions();
487
+ this.conditionRHSDropDown.Name = "conditionRHSDropDown";
488
+ this.conditionRHSDropDown.HideLabel = true;
489
+ this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
490
+ this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
491
+ this.conditionRHSDropDown.SingleSelection = true;
492
+ this.conditionRHSDropDown.IsRequired = true;
493
+ this.conditionRHSDropDown.SelectedItems = this.conditionRHSWFVariableList.filter((item) => { return parseInt(item.key) == this.activityModel.rhsVariableID; }).map((item) => item.key)[0];
494
+ ;
495
+ this.showConditionRHSWFVariable = true;
496
+ }
497
+ else {
498
+ this.conditionRHSValue = new TextBoxOptions();
499
+ this.conditionRHSValue.Name = "conditionRHSValue";
500
+ this.conditionRHSValue.HideLabel = true;
501
+ this.conditionRHSValue.Placeholder = "Value";
502
+ this.conditionRHSValue.Type = InputType.Text;
503
+ this.conditionRHSValue.IsRequired = true;
504
+ this.conditionRHSValue.Value = this.activityModel.rhsValue;
505
+ this.showConditionRHSWFVariable = false;
506
+ }
507
+ this.showConditionControls = true;
508
+ this.showOutcomesContainer = true;
509
+ break;
510
+ }
511
+ }
512
+ this.isEditFormLoaded = true;
513
+ });
514
+ }
515
+ //Outcome functions
516
+ getActivityOutcomesOptions(outComes, isPublished) {
517
+ let outcomesOptions = [];
518
+ let outcomesCount = 0;
519
+ for (let i = 0; i < outComes.length; i++) {
520
+ let currentOutcome = outComes[i];
521
+ let objectOutcomeOptions = [];
522
+ let outcomeID = new TextBoxOptions();
523
+ outcomeID.Name = "outcomeID" + i;
524
+ outcomeID.HideLabel = true;
525
+ outcomeID.Type = InputType.Text;
526
+ outcomeID.Value = currentOutcome.id;
527
+ let name = new EnglishArabicDTO();
528
+ name.English = currentOutcome.nameEN;
529
+ name.Arabic = currentOutcome.nameAR;
530
+ let outcomeName = new MultiLingualTextBoxOptions();
531
+ outcomeName.Name = "outcomeName" + i;
532
+ outcomeName.ArabicLabelKey = "NameInArabic";
533
+ outcomeName.EnglishLabelKey = "NameInEnglish";
534
+ outcomeName.Value = name;
535
+ outcomeName.IsRequired = true;
536
+ let outcomeNextActivityTypes = new DropdownOptions();
537
+ outcomeNextActivityTypes.Name = "outcomeNextActivityTypes" + i;
538
+ outcomeNextActivityTypes.LabelKey = "Activity";
539
+ outcomeNextActivityTypes.DataSource = this.nextActivityList;
540
+ outcomeNextActivityTypes.SingleSelection = true;
541
+ outcomeNextActivityTypes.AllowSearchFilter = true;
542
+ outcomeNextActivityTypes.SelectedItems = this.nextActivityList.filter((item) => { return parseInt(item.key) == currentOutcome.nextActivityID; }).map((item) => item.key)[0];
543
+ ;
544
+ let outcomeCanEdit;
545
+ outcomeCanEdit = currentOutcome.canEdit;
546
+ let outcomeHiddeneSysName = new TextBoxOptions();
547
+ outcomeHiddeneSysName.Name = "outcomeHiddeneSysName" + i;
548
+ outcomeHiddeneSysName.Type = InputType.Text;
549
+ outcomeHiddeneSysName.Value = currentOutcome.outcomeSysName;
550
+ let outcomeCanEditSysName = new CheckBoxOptions();
551
+ outcomeCanEditSysName.Name = "outcomeCanEditSysName" + i;
552
+ outcomeCanEditSysName.Value = currentOutcome.canEditSysName;
553
+ if (!isPublished) {
554
+ let outcomeDecisionSysName = new TextBoxOptions();
555
+ outcomeDecisionSysName.Name = "outcomeDecisionSysName" + i;
556
+ outcomeDecisionSysName.LabelKey = "DecisionSysName";
557
+ outcomeDecisionSysName.Type = InputType.Text;
558
+ outcomeDecisionSysName.Value = currentOutcome.outcomeSysName;
559
+ outcomeDecisionSysName.IsDisabled = !currentOutcome.canEditSysName;
560
+ outcomeDecisionSysName.IsRequired = true;
561
+ let outcomeCanAddComment = new CheckBoxOptions();
562
+ outcomeCanAddComment.Name = "outcomeCanAddComment" + i;
563
+ outcomeCanAddComment.Value = currentOutcome.canAddComment;
564
+ outcomeCanAddComment.LabelKey = "CanAddComment";
565
+ objectOutcomeOptions.push(outcomeID, outcomeName, outcomeDecisionSysName, outcomeNextActivityTypes, outcomeCanAddComment, outcomeCanEdit, outcomeHiddeneSysName, outcomeCanEditSysName);
566
+ }
567
+ else
568
+ objectOutcomeOptions.push(outcomeID, outcomeName, outcomeNextActivityTypes, outcomeCanEdit, outcomeHiddeneSysName, outcomeCanEditSysName);
569
+ outcomesOptions.push(objectOutcomeOptions);
570
+ outcomesCount += 1;
571
+ }
572
+ return [outcomesOptions, outcomesCount];
573
+ }
574
+ addWFActivityOutcome() {
575
+ let index = this.outcomesCount;
576
+ let objectOutcomeOptions = [];
577
+ let outcomeID = new TextBoxOptions();
578
+ outcomeID.Name = "outcomeID" + index;
579
+ outcomeID.HideLabel = true;
580
+ outcomeID.Type = InputType.Text;
581
+ outcomeID.Value = 0;
582
+ let outcomeName = new MultiLingualTextBoxOptions();
583
+ outcomeName.Name = "outcomeName" + index;
584
+ outcomeName.ArabicLabelKey = "NameInArabic";
585
+ outcomeName.EnglishLabelKey = "NameInEnglish";
586
+ outcomeName.IsRequired = true;
587
+ let outcomeDecisionSysName = new TextBoxOptions();
588
+ outcomeDecisionSysName.Name = "outcomeDecisionSysName" + index;
589
+ outcomeDecisionSysName.LabelKey = "DecisionSysName";
590
+ outcomeDecisionSysName.Type = InputType.Text;
591
+ outcomeDecisionSysName.IsRequired = true;
592
+ let outcomeNextActivityTypes = new DropdownOptions();
593
+ outcomeNextActivityTypes.Name = "outcomeNextActivityTypes" + index;
594
+ outcomeNextActivityTypes.LabelKey = "Activity";
595
+ outcomeNextActivityTypes.DataSource = this.nextActivityList;
596
+ outcomeNextActivityTypes.SingleSelection = true;
597
+ outcomeNextActivityTypes.AllowSearchFilter = true;
598
+ let outcomeCanAddComment = new CheckBoxOptions();
599
+ outcomeCanAddComment.Name = "outcomeCanAddComment" + index;
600
+ outcomeCanAddComment.LabelKey = "CanAddComment";
601
+ let outcomeCanEdit;
602
+ outcomeCanEdit = true;
603
+ let outcomeHiddeneSysName = new TextBoxOptions();
604
+ outcomeHiddeneSysName.Name = "outcomeHiddeneSysName" + index;
605
+ outcomeHiddeneSysName.Type = InputType.Text;
606
+ let outcomeCanEditSysName = new CheckBoxOptions();
607
+ outcomeCanEditSysName.Name = "outcomeCanEditSysName" + index;
608
+ outcomeCanEditSysName.Value = true;
609
+ objectOutcomeOptions.push(outcomeID, outcomeName, outcomeDecisionSysName, outcomeNextActivityTypes, outcomeCanAddComment, outcomeCanEdit, outcomeHiddeneSysName, outcomeCanEditSysName);
610
+ this.outcomesOptions.push(objectOutcomeOptions);
611
+ this.outcomesCount += 1;
612
+ }
613
+ deleteOutcome(deletedOutcome) {
614
+ debugger;
615
+ let deletedOutcomeIndex = this.outcomesOptions.indexOf(deletedOutcome);
616
+ if (deletedOutcomeIndex !== -1) {
617
+ this.outcomesOptions.splice(deletedOutcomeIndex, 1);
618
+ for (var i = 0; i < deletedOutcome.length; i++) {
619
+ this.editworkflowActivityForm.removeControl(deletedOutcome[i].Name);
620
+ }
621
+ }
622
+ }
623
+ //On changes events
624
+ activityTypeOnChange(activityType) {
625
+ //Reset controls, outcomes and flags
626
+ this.resetAllActivityTypeControls();
627
+ this.outcomesOptions = [];
628
+ this.outcomesCount = 0;
629
+ this.showParticipantContainer = false;
630
+ this.showDynamicControls = false;
631
+ this.showStaticControls = false;
632
+ this.showConditionControls = false;
633
+ this.showConditionRHSWFVariable = false;
634
+ this.showOutcomesContainer = false;
635
+ this.activityTypeID = activityType;
636
+ this.workflowActivityService.getActivityOutcomes(this.versionID, activityType).subscribe((result) => {
637
+ var resultObj = result;
638
+ var model = resultObj.model;
639
+ var list = resultObj.list;
640
+ this.nextActivityList = list.activities;
641
+ switch (Number(activityType)) {
642
+ case WFActivityType.Approval:
643
+ case WFActivityType.Action:
644
+ case WFActivityType.PercentageTask:
645
+ this.taskTypeList = list.tasks;
646
+ this.participantTypeList = list.participants.participantTypes;
647
+ this.participantDataList = list.participants.participantData;
648
+ //Initialize required controls for approval
649
+ this.participantTypes = new DropdownOptions();
650
+ this.participantTypes.Name = "participantTypes";
651
+ this.participantTypes.LabelKey = "ParticipantTypes";
652
+ this.participantTypes.DataSource = this.participantTypeList;
653
+ this.participantTypes.SingleSelection = false;
654
+ this.participantTypes.AllowSearchFilter = true;
655
+ this.participantTypes.IsRequired = true;
656
+ this.dynamicTaskName = new MultiLingualTextBoxOptions();
657
+ this.dynamicTaskName.Name = "dynamicTaskName";
658
+ this.dynamicTaskName.ArabicLabelKey = "TaskNameInArabic";
659
+ this.dynamicTaskName.EnglishLabelKey = "TaskNameInEnglish";
660
+ this.dynamicTaskDescription = new MultiLingualTextAreaOptions();
661
+ this.dynamicTaskDescription.Name = "dynamicTaskDescription";
662
+ this.dynamicTaskDescription.ArabicLabelKey = "TaskDescriptionInArabic";
663
+ this.dynamicTaskDescription.EnglishLabelKey = "TaskDescriptionInEnglish";
664
+ this.dynamicTaskURL = new TextBoxOptions();
665
+ this.dynamicTaskURL.Name = "dynamicTaskURL";
666
+ this.dynamicTaskURL.LabelKey = "TaskURL";
667
+ this.dynamicTaskURL.Type = InputType.Text;
668
+ this.dynamicTaskType = new DropdownOptions();
669
+ this.dynamicTaskType.Name = "dynamicTaskType";
670
+ this.dynamicTaskType.LabelKey = "TaskType";
671
+ this.dynamicTaskType.DataSource = this.taskTypeList;
672
+ this.dynamicTaskType.SingleSelection = true;
673
+ this.dynamicTaskType.AllowSearchFilter = true;
674
+ this.dynamicTaskType.IsRequired = true;
675
+ this.dynamicCanComplete = new ToggleSlideOptions();
676
+ this.dynamicCanComplete.Name = "dynamicCanComplete";
677
+ this.dynamicCanComplete.LabelKey = "CanCompleteFromTME";
678
+ this.dynamicCanComplete.ViewType = ControlLayout.Horizontal;
679
+ this.dynamicCanComplete.Value = model.canCompleteFromTME;
680
+ let outcomesResult = this.getActivityOutcomesOptions(model.outcomes, false);
681
+ this.outcomesOptions = outcomesResult[0];
682
+ this.outcomesCount = outcomesResult[1];
683
+ this.showDynamicControls = true;
684
+ this.showParticipantContainer = true;
685
+ this.showOutcomesContainer = true;
686
+ break;
687
+ case WFActivityType.Email:
688
+ case WFActivityType.Sleep:
689
+ let name = new EnglishArabicDTO();
690
+ name.Arabic = model.normalOutcomeName.arabic;
691
+ name.English = model.normalOutcomeName.english;
692
+ this.staticOutcomeName = new MultiLingualTextBoxOptions();
693
+ this.staticOutcomeName.Name = "staticOutcomeName";
694
+ this.staticOutcomeName.ArabicLabelKey = "OutcomeNameInArabic";
695
+ this.staticOutcomeName.EnglishLabelKey = "OutcomeNameInEnglish";
696
+ this.staticOutcomeName.IsRequired = true;
697
+ this.staticOutcomeName.Value = name;
698
+ this.staticOutcomeSysName = new TextBoxOptions();
699
+ this.staticOutcomeSysName.Name = "staticOutcomeSysName";
700
+ this.staticOutcomeSysName.LabelKey = "DecisionSysName";
701
+ this.staticOutcomeSysName.Type = InputType.Text;
702
+ this.staticOutcomeSysName.IsRequired = true;
703
+ this.staticOutcomeNextActivity = new DropdownOptions();
704
+ this.staticOutcomeNextActivity.Name = "staticOutcomeNextActivity";
705
+ this.staticOutcomeNextActivity.LabelKey = "NextActivity";
706
+ this.staticOutcomeNextActivity.DataSource = this.nextActivityList;
707
+ this.staticOutcomeNextActivity.SingleSelection = true;
708
+ this.staticOutcomeNextActivity.AllowSearchFilter = true;
709
+ this.staticOutcomeNextActivity.IsRequired = true;
710
+ this.staticOutcomeCanAddComment = new ToggleSlideOptions();
711
+ this.staticOutcomeCanAddComment.Name = "staticOutcomeCanAddComment";
712
+ this.staticOutcomeCanAddComment.LabelKey = "CanAddComment";
713
+ this.staticOutcomeCanAddComment.ViewType = ControlLayout.Horizontal;
714
+ this.staticOutcomeCanAddComment.Value = model.canAddComment;
715
+ this.showStaticControls = true;
716
+ break;
717
+ case WFActivityType.Condition:
718
+ this.conditionLHSWFVariableList = list.wfVariables;
719
+ this.conditionRHSWFVariableList = list.wfVariables;
720
+ this.conditionRHSTypeList = list.rhsTypes;
721
+ this.conditionList = list.conditions;
722
+ this.conditionLHSDropDown = new DropdownOptions();
723
+ this.conditionLHSDropDown.Name = "conditionLHSDropDown";
724
+ this.conditionLHSDropDown.HideLabel = true;
725
+ this.conditionLHSDropDown.Placeholder = "WorkflowVariables";
726
+ this.conditionLHSDropDown.DataSource = this.conditionLHSWFVariableList;
727
+ this.conditionLHSDropDown.SingleSelection = true;
728
+ this.conditionLHSDropDown.AllowSearchFilter = true;
729
+ this.conditionLHSDropDown.IsRequired = true;
730
+ this.conditionsDropDown = new DropdownOptions();
731
+ this.conditionsDropDown.Name = "conditionsDropDown";
732
+ this.conditionsDropDown.HideLabel = true;
733
+ this.conditionsDropDown.Placeholder = "Condition";
734
+ this.conditionsDropDown.DataSource = this.conditionList;
735
+ this.conditionsDropDown.SingleSelection = true;
736
+ this.conditionsDropDown.IsRequired = true;
737
+ let selectedRHSType = this.conditionRHSTypeList.filter((item) => { return item.key == ConditionRHSType.Variable; }).map((item) => item.key)[0];
738
+ this.conditionRHSTypeDropDown = new DropdownOptions();
739
+ this.conditionRHSTypeDropDown.Name = "conditionRHSTypeDropDown";
740
+ this.conditionRHSTypeDropDown.HideLabel = true;
741
+ this.conditionRHSTypeDropDown.DataSource = this.conditionRHSTypeList;
742
+ this.conditionRHSTypeDropDown.SingleSelection = true;
743
+ this.conditionRHSTypeDropDown.IsRequired = true;
744
+ this.conditionRHSTypeDropDown.SelectedItems = selectedRHSType;
745
+ this.conditionRHSDropDown = new DropdownOptions();
746
+ this.conditionRHSDropDown.Name = "conditionRHSDropDown";
747
+ this.conditionRHSDropDown.HideLabel = true;
748
+ this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
749
+ this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
750
+ this.conditionRHSDropDown.SingleSelection = true;
751
+ this.conditionRHSDropDown.IsRequired = true;
752
+ let conditionOutcomesResult = this.getActivityOutcomesOptions(model.outcomes, false);
753
+ this.outcomesOptions = conditionOutcomesResult[0];
754
+ this.outcomesCount = conditionOutcomesResult[1];
755
+ this.showConditionControls = true;
756
+ this.showConditionRHSWFVariable = true;
757
+ this.showOutcomesContainer = true;
758
+ break;
759
+ }
760
+ this.canAddOutcome = this.showOutcomesContainer ? model.canAddOutcome : false;
761
+ });
762
+ }
763
+ conditionRHSTypeOnChange(type) {
764
+ if (type == ConditionRHSType.Variable) {
765
+ this.editworkflowActivityForm.removeControl("conditionRHSValue");
766
+ this.conditionRHSDropDown = new DropdownOptions();
767
+ this.conditionRHSDropDown.Name = "conditionRHSDropDown";
768
+ this.conditionRHSDropDown.HideLabel = true;
769
+ this.conditionRHSDropDown.Placeholder = "WorkflowVariables";
770
+ this.conditionRHSDropDown.DataSource = this.conditionRHSWFVariableList;
771
+ this.conditionRHSDropDown.SingleSelection = true;
772
+ this.conditionRHSDropDown.IsRequired = true;
773
+ this.showConditionRHSWFVariable = true;
774
+ }
775
+ else {
776
+ this.editworkflowActivityForm.removeControl("conditionRHSDropDown");
777
+ this.conditionRHSValue = new TextBoxOptions();
778
+ this.conditionRHSValue.Name = "conditionRHSValue";
779
+ this.conditionRHSValue.HideLabel = true;
780
+ this.conditionRHSValue.Placeholder = "Value";
781
+ this.conditionRHSValue.Type = InputType.Text;
782
+ this.conditionRHSValue.IsRequired = true;
783
+ this.showConditionRHSWFVariable = false;
784
+ }
785
+ }
786
+ participantTypeOnChange(participantType) {
787
+ if (participantType == ParticipantType.PermissionSet) {
788
+ this.participantPermissionSet = new DropdownOptions();
789
+ this.participantPermissionSet.Name = "participantPermissionSet";
790
+ this.participantPermissionSet.LabelKey = "PermissionSet";
791
+ this.participantPermissionSet.DataSource = this.participantDataList;
792
+ this.participantPermissionSet.SingleSelection = false;
793
+ this.participantPermissionSet.AllowSearchFilter = true;
794
+ this.showParticipantPermssionSet = true;
795
+ }
796
+ else {
797
+ this.editworkflowActivityForm.removeControl("participantPermissionSet");
798
+ this.showParticipantPermssionSet = false;
799
+ }
800
+ }
801
+ //Reset type
802
+ resetAllActivityTypeControls() {
803
+ this.editworkflowActivityForm.removeControl("participantTypes");
804
+ this.editworkflowActivityForm.removeControl("participantPermissionSet");
805
+ this.editworkflowActivityForm.removeControl("participantPermissionSet");
806
+ this.editworkflowActivityForm.removeControl("dynamicTaskName");
807
+ this.editworkflowActivityForm.removeControl("dynamicTaskDescription");
808
+ this.editworkflowActivityForm.removeControl("dynamicTaskURL");
809
+ this.editworkflowActivityForm.removeControl("dynamicTaskType");
810
+ this.editworkflowActivityForm.removeControl("dynamicCanComplete");
811
+ this.editworkflowActivityForm.removeControl("staticOutcomeName");
812
+ this.editworkflowActivityForm.removeControl("staticOutcomeSysName");
813
+ this.editworkflowActivityForm.removeControl("staticOutcomeNextActivity");
814
+ this.editworkflowActivityForm.removeControl("staticOutcomeCanAddComment");
815
+ this.editworkflowActivityForm.removeControl("conditionLHSDropDown");
816
+ this.editworkflowActivityForm.removeControl("conditionsDropDown");
817
+ this.editworkflowActivityForm.removeControl("conditionRHSTypeDropDown");
818
+ this.editworkflowActivityForm.removeControl("conditionRHSDropDown");
819
+ this.editworkflowActivityForm.removeControl("conditionRHSValue");
820
+ //Remove outcomes controls
821
+ let ResultModel = this.editworkflowActivityForm.value;
822
+ for (let i = 0; i < this.outcomesCount; i++) {
823
+ let outcomeID = ResultModel["outcomeID" + i];
824
+ if (outcomeID == undefined)
825
+ continue;
826
+ this.editworkflowActivityForm.removeControl("outcomeID" + i);
827
+ this.editworkflowActivityForm.removeControl("outcomeName" + i);
828
+ this.editworkflowActivityForm.removeControl("outcomeDecisionSysName" + i);
829
+ this.editworkflowActivityForm.removeControl("outcomeHiddeneSysName" + i);
830
+ this.editworkflowActivityForm.removeControl("outcomeNextActivityTypes" + i);
831
+ this.editworkflowActivityForm.removeControl("outcomeCanAddComment" + i);
832
+ }
833
+ }
834
+ //Cancel
835
+ cancelEdit() {
836
+ this.router.navigate(['/Admin/Workflows/workflow/']);
837
+ }
838
+ //On destroy
839
+ ngOnDestroy() {
840
+ this.requestHandlerService.destroyHandler();
841
+ }
842
+ }
843
+ WorkflowActivityEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WorkflowActivityEditComponent, deps: [{ token: i1.WorkflowActivityService }, { token: i2.PageInfoService }, { token: i3.UtilityService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i3.RequestHandlerService }, { token: i3.BBSFTranslateService }], target: i0.ɵɵFactoryTarget.Component });
844
+ WorkflowActivityEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: WorkflowActivityEditComponent, selector: "lib-workflow-activity-edit", ngImport: i0, template: "<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\" *ngIf=\"isEditFormLoaded\">\r\n <div class=\"card-body py-3\">\r\n <BBSF-Form [options]=\"editworkflowActivityFormOptions\">\r\n <!--Start shared controls container-->\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"name\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"!isPublished\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"sysName\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"showActivityType\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"activityType\" [group]=\"editworkflowActivityForm\" (OnChange)=\"activityTypeOnChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <!--End shared controls container-->\r\n <!--Start participant container-->\r\n <div id=\"participantContainer\" *ngIf=\"showParticipantContainer\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"participantTypes\" [group]=\"editworkflowActivityForm\" (OnChange)=\"participantTypeOnChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showParticipantPermssionSet\" class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"participantPermissionSet\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <!--End participant container-->\r\n <!--Start static controls-->\r\n <div *ngIf=\"showStaticControls\" id=\"staticContainer\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"staticOutcomeName\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"staticOutcomeSysName\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"staticOutcomeNextActivity\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"staticOutcomeCanAddComment\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n </div>\r\n <!--End static controls-->\r\n <!--Start dynamic controls-->\r\n <div *ngIf=\"showDynamicControls\" id=\"dynamicContainer\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"dynamicTaskName\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextArea [options]=\"dynamicTaskDescription\" [group]=\"editworkflowActivityForm\"></BBSF-MultiLingualTextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"dynamicTaskURL\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"dynamicTaskType\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"dynamicCanComplete\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n </div>\r\n <!--End dynamic controls-->\r\n <!--Start condition controls-->\r\n <div *ngIf=\"showConditionControls\" id=\"conditionContainer\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"LeftHandSide\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Condition\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"RightHandSideType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"RightHandSide\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr>\r\n <td>\r\n <BBSF-DropdownList [options]=\"conditionLHSDropDown\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-DropdownList [options]=\"conditionsDropDown\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-DropdownList [options]=\"conditionRHSTypeDropDown\" [group]=\"editworkflowActivityForm\" (OnChange)=\"conditionRHSTypeOnChange($event)\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td *ngIf=\"showConditionRHSWFVariable; else conditionTxtValue\">\r\n <BBSF-DropdownList [options]=\"conditionRHSDropDown\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <ng-template #conditionTxtValue>\r\n <td>\r\n <BBSF-TextBox [options]=\"conditionRHSValue\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n </ng-template>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <!--End condition controls-->\r\n <!--Start outcomes container-->\r\n <div *ngIf=\"showOutcomesContainer\" id=\"outcomesContainer\" class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Decision\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n <th *ngIf=\"!isPublished\" class=\"min-w-150px\"></th>\r\n <th *ngIf=\"!isPublished\" class=\"min-w-150px\"></th>\r\n <th *ngIf=\"!isPublished\" class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\" *ngIf=\"isPublished;else notPublishedOutcomes\">\r\n <tr *ngFor=\"let option of outcomesOptions;let i=index;\">\r\n <td>\r\n <!--ID-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--Name-->\r\n <BBSF-MultiLingualTextBox [options]=\"option[1]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </td>\r\n <td>\r\n <!--NextActivity-->\r\n <BBSF-DropdownList [options]=\"option[2]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n </tr>\r\n </tbody>\r\n\r\n <ng-template #notPublishedOutcomes>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of outcomesOptions;let i=index;\">\r\n\r\n <td>\r\n <!--ID-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--Name-->\r\n <BBSF-MultiLingualTextBox [options]=\"option[1]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </td>\r\n <td>\r\n <!--SysName-->\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden SysName-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-TextBox>\r\n <!--can edit SysName-->\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[7]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--NextActivity-->\r\n <BBSF-DropdownList [options]=\"option[3]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <!--CanAddComment-->\r\n <BBSF-CheckBox [options]=\"option[4]\" [group]=\"editworkflowActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <!--if outcome Can Edit-->\r\n <a *ngIf=\"option[5]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteOutcome(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"canAddOutcome\">\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFActivityOutcome()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </ng-template>\r\n\r\n </table>\r\n </div>\r\n\r\n </div>\r\n <!--End outcomes container-->\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light me-3 btn-sm\" (click)=\"cancelEdit()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", components: [{ type: i5.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i5.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i5.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i5.ɵf, selector: "BBSF-MultiLingualTextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
845
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: WorkflowActivityEditComponent, decorators: [{
846
+ type: Component,
847
+ args: [{
848
+ selector: 'lib-workflow-activity-edit',
849
+ templateUrl: './workflow-activity-edit.component.html'
850
+ }]
851
+ }], ctorParameters: function () { return [{ type: i1.WorkflowActivityService }, { type: i2.PageInfoService }, { type: i3.UtilityService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i3.RequestHandlerService }, { type: i3.BBSFTranslateService }]; } });
852
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctYWN0aXZpdHktZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy9hY3Rpdml0eS93b3JrZmxvdy1hY3Rpdml0eS1lZGl0L3dvcmtmbG93LWFjdGl2aXR5LWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvYWN0aXZpdHkvd29ya2Zsb3ctYWN0aXZpdHktZWRpdC93b3JrZmxvdy1hY3Rpdml0eS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdqTyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEYsT0FBTyxF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Q0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FFekU7SUFDSCxDQUFDO0lBRUQsUUFBUTtJQUNSLFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBWTtJQUNaLFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7MkhBajlCVSw2QkFBNkI7K0dBQTdCLDZCQUE2QixrRUNuQjFDLDgxWEEyUEE7NEZEeE9hLDZCQUE2QjtrQkFKekMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUseUNBQXlDO2lCQUN2RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENoZWNrQm94T3B0aW9ucywgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IENvbmRpdGlvblJIU1R5cGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvRW51bXMvQ29uZGl0aW9uUkhTVHlwZSc7XHJcbmltcG9ydCB7IFBhcnRpY2lwYW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9FbnVtcy9QYXJ0aWNpcGFudFR5cGUnO1xyXG5pbXBvcnQgeyBXRkFjdGl2aXR5VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9FbnVtcy9XRkFjdGl2aXR5VHlwZSc7XHJcbmltcG9ydCB7IFBhcnRpY2lwYW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWxzL1BhcnRpY2lwYW50TW9kZWwnO1xyXG5pbXBvcnQgeyBXRkFjdGl2aXR5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGQWN0aXZpdHlNb2RlbCc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlPdXRjb21lTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGQWN0aXZpdHlPdXRjb21lTW9kZWwnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd0FjdGl2aXR5U2VydmljZS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXdvcmtmbG93LWFjdGl2aXR5LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1hY3Rpdml0eS1lZGl0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dBY3Rpdml0eUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBpc0VkaXRGb3JtTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmVyc2lvbklEOiBudW1iZXI7XHJcbiAgYWN0aXZpdHlJRDogbnVtYmVyO1xyXG4gIGFjdGl2aXR5SURFbmM6IHN0cmluZztcclxuICBhY3Rpdml0eU1vZGVsOiBhbnk7XHJcbiAgaXNQdWJsaXNoZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8vRWRpdCBBY3Rpdml0eSBzaGFyZWQgY29udHJvbHNcclxuICBlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIG5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIGNhbkFkZE91dGNvbWU6IGJvb2xlYW47XHJcbiAgYWN0aXZpdHlUeXBlSUQ6IG51bWJlcjtcclxuICBzaG93QWN0aXZpdHlUeXBlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vTm9uIHB1Ymxpc2hlZCBBY3Rpdml0eSBjb250cm9sc1xyXG4gIHN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIGFjdGl2aXR5VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICAvL1NoYXJlZCBQYXJ0aWNpcGFudCB0eXBlIGFuZCBkYXRhIChOb24gUHVibGlzaGVkIG9ubHkpXHJcbiAgc2hvd1BhcnRpY2lwYW50Q29udGFpbmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1BhcnRpY2lwYW50UGVybXNzaW9uU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFydGljaXBhbnRUeXBlczogRHJvcGRvd25PcHRpb25zO1xyXG4gIHBhcnRpY2lwYW50UGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICAvL0R5bmFtaWMgVHlwZXMgQ29udHJvbHMgLy8oQXBwcm92YWwsQWN0aW9uLFBlcmNlbnRhZ2UpXHJcbiAgc2hvd0R5bmFtaWNDb250cm9sczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGR5bmFtaWNUYXNrTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgZHluYW1pY1Rhc2tEZXNjcmlwdGlvbjogTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zO1xyXG4gIGR5bmFtaWNUYXNrVVJMOiBUZXh0Qm94T3B0aW9ucztcclxuICBkeW5hbWljVGFza1R5cGU6IERyb3Bkb3duT3B0aW9uczsgXHJcbiAgZHluYW1pY0NhbkNvbXBsZXRlOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcblxyXG4gIC8vU3RhdGljIHR5cGVzIGNvbnRyb2xzIChFbWFpbCxTbGVlcCkgKE5vbiBwdWJsaXNoZWQgb25seSlcclxuICAvL0VtYWlsIFR5cGUgQ29udHJvbHMgLy8rIGluaXRpYWxpemUgcGFydGljaXBhbnRcclxuICBzaG93U3RhdGljQ29udHJvbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0aWNPdXRjb21lTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgc3RhdGljT3V0Y29tZVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIHN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHk6IERyb3Bkb3duT3B0aW9ucztcclxuICBzdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG5cclxuICAvL0NvbmRpdGlvbiB0eXBlIGNvbnRyb2xzXHJcbiAgc2hvd0NvbmRpdGlvbkNvbnRyb2xzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY29uZGl0aW9uTEhTRHJvcERvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBjb25kaXRpb25zRHJvcERvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBjb25kaXRpb25SSFNUeXBlRHJvcERvd246IERyb3Bkb3duT3B0aW9ucztcclxuICBjb25kaXRpb25SSFNEcm9wRG93bjogRHJvcGRvd25PcHRpb25zO1xyXG4gIGNvbmRpdGlvblJIU1ZhbHVlOiBUZXh0Qm94T3B0aW9ucztcclxuICBzaG93Q29uZGl0aW9uUkhTV0ZWYXJpYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvL1NoYXJlZCByZXF1aXJlZCBsaXN0c1xyXG4gIEFjdGl2aXR5VHlwZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIC8vT3V0Y29tZXMgKGR5bmFtaWMsY29uZGl0aW9uKVxyXG4gIG91dGNvbWVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICBvdXRjb21lc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dPdXRjb21lc0NvbnRhaW5lciA9IGZhbHNlO1xyXG5cclxuICAvL1JlcXVpcmVkTGlzdHNcclxuICB0YXNrVHlwZUxpc3QgPSBbXTtcclxuICBwYXJ0aWNpcGFudFR5cGVMaXN0ID0gW107XHJcbiAgcGFydGljaXBhbnREYXRhTGlzdCA9IFtdO1xyXG4gIG5leHRBY3Rpdml0eUxpc3QgPSBbXTtcclxuXHJcbiAgLy9Db25kaXRpb25UeXBlUmVxdWlyZWRMaXN0c1xyXG4gIGNvbmRpdGlvbkxIU1dGVmFyaWFibGVMaXN0ID0gW107XHJcbiAgY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3QgPSBbXTtcclxuICBjb25kaXRpb25SSFNUeXBlTGlzdCA9IFtdO1xyXG4gIGNvbmRpdGlvbkxpc3QgPSBbXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlOiBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSwgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2aXR5SURFbmMgPSBwYXJhbXNbJ2FjdGl2aXR5aWQnXTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG5cclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0V29ya2Zsb3dBY3Rpdml0eVwiKTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrRmxvd3NcIiksIHBhdGg6ICcvQWRtaW4vV29ya2Zsb3dzL3dvcmtmbG93JywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG4gIC8vSW5pdGlhbGl6ZSBlZGl0IG1vZGVsIGFuZCByZXF1aXJlZCBERExzXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmdldEVkaXRXb3JrRmxvd0FjdGl2aXR5RGF0YSh0aGlzLmFjdGl2aXR5SURFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLmFjdGl2aXR5TW9kZWwgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIHZhciBsaXN0ID0gcmVzdWx0T2JqLmxpc3Q7XHJcbiAgICAgIHRoaXMuQWN0aXZpdHlUeXBlTGlzdCA9IHJlc3VsdE9iai5hY3Rpdml0eUxpc3Q7XHJcbiAgICAgIHRoaXMubmV4dEFjdGl2aXR5TGlzdCA9IGxpc3QuYWN0aXZpdGllcztcclxuICAgICAgdGhpcy5hY3Rpdml0eVR5cGVJRCA9IHRoaXMuYWN0aXZpdHlNb2RlbC5hY3Rpdml0eVR5cGVJdGVtSUQ7XHJcbiAgICAgIHRoaXMuaXNQdWJsaXNoZWQgPSB0aGlzLmFjdGl2aXR5TW9kZWwuaXNQdWJsaXNoZWQ7XHJcbiAgICAgIHRoaXMudmVyc2lvbklEID0gdGhpcy5hY3Rpdml0eU1vZGVsLnZlcnNpb25JRDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVxyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGQWN0aXZpdHlNb2RlbDtcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFdGQWN0aXZpdHlGdW5jdGlvbjtcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1PcHRpb25zLk9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLm9uRWRpdFN1Y2Nlc3M7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuRW5nbGlzaCA9IHRoaXMuYWN0aXZpdHlNb2RlbC5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgIG5hbWUuQXJhYmljID0gdGhpcy5hY3Rpdml0eU1vZGVsLm5hbWUuYXJhYmljO1xyXG4gICAgICB0aGlzLm5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5uYW1lLk5hbWUgPSBcIm5hbWVcIjtcclxuICAgICAgdGhpcy5uYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5uYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLm5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubmFtZS5WYWx1ZSA9IG5hbWU7XHJcblxyXG4gICAgICBsZXQgb3V0Y29tZXNSZXN1bHQ6IGFueSA9IHRoaXMuZ2V0QWN0aXZpdHlPdXRjb21lc09wdGlvbnModGhpcy5hY3Rpdml0eU1vZGVsLm91dGNvbWVzLCB0aGlzLmlzUHVibGlzaGVkKTtcclxuICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMgPSBvdXRjb21lc1Jlc3VsdFswXTtcclxuICAgICAgdGhpcy5vdXRjb21lc0NvdW50ID0gb3V0Y29tZXNSZXN1bHRbMV07XHJcblxyXG4gICAgICB0aGlzLnNob3dBY3Rpdml0eVR5cGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzUHVibGlzaGVkKSB7XHJcbiAgICAgICAgc3dpdGNoIChOdW1iZXIodGhpcy5hY3Rpdml0eVR5cGVJRCkpIHtcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuQXBwcm92YWw6XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkFjdGlvbjpcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuUGVyY2VudGFnZVRhc2s6XHJcbiAgICAgICAgICAgIHRoaXMudGFza1R5cGVMaXN0ID0gbGlzdC50YXNrcztcclxuXHJcbiAgICAgICAgICAgIGxldCB0YXNrTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgICAgICAgIHRhc2tOYW1lLkVuZ2xpc2ggPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza05hbWUuZW5nbGlzaDtcclxuICAgICAgICAgICAgdGFza05hbWUuQXJhYmljID0gdGhpcy5hY3Rpdml0eU1vZGVsLnRhc2tOYW1lLmFyYWJpYztcclxuXHJcbiAgICAgICAgICAgIGxldCB0YXNrRGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgICB0YXNrRGVzY3JpcHRpb24uRW5nbGlzaCA9IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrRGVzY3JpcHRpb24uZW5nbGlzaDtcclxuICAgICAgICAgICAgdGFza0Rlc2NyaXB0aW9uLkFyYWJpYyA9IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrRGVzY3JpcHRpb24uYXJhYmljO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza05hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza05hbWUuTmFtZSA9IFwiZHluYW1pY1Rhc2tOYW1lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJUYXNrTmFtZUluQXJhYmljXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiVGFza05hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza05hbWUuVmFsdWUgPSB0YXNrTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbiA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLk5hbWUgPSBcImR5bmFtaWNUYXNrRGVzY3JpcHRpb25cIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkFyYWJpY0xhYmVsS2V5ID0gXCJUYXNrRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrRGVzY3JpcHRpb24uRW5nbGlzaExhYmVsS2V5ID0gXCJUYXNrRGVzY3JpcHRpb25JbkVuZ2xpc2hcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLlZhbHVlID0gdGFza0Rlc2NyaXB0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1VSTCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVVJMLk5hbWUgPSBcImR5bmFtaWNUYXNrVVJMXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuTGFiZWxLZXkgPSBcIlRhc2tVUkxcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1VSTC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuVmFsdWUgPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza1VSTDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5OYW1lID0gXCJkeW5hbWljVGFza1R5cGVcIlxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5MYWJlbEtleSA9IFwiVGFza1R5cGVcIlxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5EYXRhU291cmNlID0gdGhpcy50YXNrVHlwZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuU2VsZWN0ZWRJdGVtcyA9IHRoaXMudGFza1R5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrQ29ycmxUeXBlSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZS5OYW1lID0gXCJkeW5hbWljQ2FuQ29tcGxldGVcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuTGFiZWxLZXkgPSBcIkNhbkNvbXBsZXRlRnJvbVRNRVwiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuVmFsdWUgPSB0aGlzLmFjdGl2aXR5TW9kZWwuY2FuQ29tcGxldGVGcm9tVE1FO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zaG93RHluYW1pY0NvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdCA9IGxpc3Qud2ZWYXJpYWJsZXM7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3QgPSBsaXN0LndmVmFyaWFibGVzO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0ID0gbGlzdC5yaHNUeXBlcztcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MaXN0ID0gbGlzdC5jb25kaXRpb25zO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25MSFNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLlBsYWNlaG9sZGVyID0gXCJXb3JrZmxvd1ZhcmlhYmxlc1wiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwubGhzVmFyaWFibGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvbnNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIkNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvbkxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5hY3Rpdml0eU1vZGVsLm9wZXJhdG9yVHlwZUl0ZW1JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvblJIU1R5cGVEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTVHlwZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNUeXBlSXRlbUlEID09IENvbmRpdGlvblJIU1R5cGUuVmFyaWFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uTmFtZSA9IFwiY29uZGl0aW9uUkhTRHJvcERvd25cIlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIldvcmtmbG93VmFyaWFibGVzXCJcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5jb25kaXRpb25SSFNXRlZhcmlhYmxlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwucmhzVmFyaWFibGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5OYW1lID0gXCJjb25kaXRpb25SSFNWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLlBsYWNlaG9sZGVyID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5WYWx1ZSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93Q29uZGl0aW9uUkhTV0ZWYXJpYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dDb25kaXRpb25Db250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuc3lzTmFtZS5OYW1lID0gXCJzeXNOYW1lXCI7XHJcbiAgICAgICAgdGhpcy5zeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgICAgdGhpcy5zeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLnN5c05hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zeXNOYW1lLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLnN5c05hbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2aXR5TW9kZWwuYWN0aXZpdHlUeXBlSXRlbUlEICE9IFdGQWN0aXZpdHlUeXBlLlN0YXJ0KSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBY3Rpdml0eVR5cGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuTmFtZSA9IFwiYWN0aXZpdHlUeXBlXCJcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlLkxhYmVsS2V5ID0gXCJBY3Rpdml0eVR5cGVcIlxyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuQWN0aXZpdHlUeXBlTGlzdFxyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlUeXBlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hY3Rpdml0eVR5cGUuU2VsZWN0ZWRJdGVtcyA9IHRoaXMuQWN0aXZpdHlUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5VHlwZUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKE51bWJlcih0aGlzLmFjdGl2aXR5TW9kZWwuYWN0aXZpdHlUeXBlSXRlbUlEKSkge1xyXG4gICAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BcHByb3ZhbDpcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuQWN0aW9uOlxyXG4gICAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5QZXJjZW50YWdlVGFzazpcclxuICAgICAgICAgICAgdGhpcy50YXNrVHlwZUxpc3QgPSBsaXN0LnRhc2tzO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZUxpc3QgPSBsaXN0LnBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudFR5cGVzO1xyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50RGF0YUxpc3QgPSBsaXN0LnBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudERhdGE7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFza05hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgICB0YXNrTmFtZS5FbmdsaXNoID0gdGhpcy5hY3Rpdml0eU1vZGVsLnRhc2tOYW1lLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIHRhc2tOYW1lLkFyYWJpYyA9IHRoaXMuYWN0aXZpdHlNb2RlbC50YXNrTmFtZS5hcmFiaWM7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFza0Rlc2NyaXB0aW9uID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgICAgICAgdGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2ggPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza0Rlc2NyaXB0aW9uLmVuZ2xpc2g7XHJcbiAgICAgICAgICAgIHRhc2tEZXNjcmlwdGlvbi5BcmFiaWMgPSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza0Rlc2NyaXB0aW9uLmFyYWJpYztcclxuICAgICAgICAgICAgLy9Jbml0aWFsaXplIHJlcXVpcmVkIGNvbnRyb2xzIGZvciBhcHByb3ZhbFxyXG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFR5cGVJdGVtSURzU3RyaW5nTGlzdC5tYXAoKGkpID0+IE51bWJlcihpKSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLk5hbWUgPSBcInBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuTGFiZWxLZXkgPSBcIlBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuRGF0YVNvdXJjZSA9IHRoaXMucGFydGljaXBhbnRUeXBlTGlzdFxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLlNlbGVjdGVkSXRlbXMgPSB0aGlzLnBhcnRpY2lwYW50VHlwZUxpc3QuZmlsdGVyKGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzLmluZGV4T2YocGFyc2VJbnQodGFnLmtleSkpID49IDA7XHJcbiAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUGFydGljaXBhbnRUeXBlcy5pbmNsdWRlcyhOdW1iZXIoUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQpKSkge1xyXG4gICAgICAgICAgICAgIGxldCBzZWxlY3RlZFBlcm1pc3Npb25TZXRzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFBlcm1zZXRzSURzU3RyaW5nLm1hcCgoaSkgPT4gTnVtYmVyKGkpKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuTmFtZSA9IFwicGFydGljaXBhbnRQZXJtaXNzaW9uU2V0XCJcclxuICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiXHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMucGFydGljaXBhbnREYXRhTGlzdFxyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5TZWxlY3RlZEl0ZW1zID0gdGhpcy5wYXJ0aWNpcGFudERhdGFMaXN0LmZpbHRlcihmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQZXJtaXNzaW9uU2V0cy5pbmRleE9mKHBhcnNlSW50KHRhZy5rZXkpKSA+PSAwO1xyXG4gICAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dQYXJ0aWNpcGFudFBlcm1zc2lvblNldCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLk5hbWUgPSBcImR5bmFtaWNUYXNrTmFtZVwiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiVGFza05hbWVJbkFyYWJpY1wiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRhc2tOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLlZhbHVlID0gdGFza05hbWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrRGVzY3JpcHRpb24gPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5OYW1lID0gXCJkeW5hbWljVGFza0Rlc2NyaXB0aW9uXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9IFwiVGFza0Rlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2hMYWJlbEtleSA9IFwiVGFza0Rlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5WYWx1ZSA9IHRhc2tEZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1VSTC5OYW1lID0gXCJkeW5hbWljVGFza1VSTFwiO1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVVJMLkxhYmVsS2V5ID0gXCJUYXNrVVJMXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVVJMLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLnRhc2tVUkw7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuTmFtZSA9IFwiZHluYW1pY1Rhc2tUeXBlXCJcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuTGFiZWxLZXkgPSBcIlRhc2tUeXBlXCJcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuRGF0YVNvdXJjZSA9IHRoaXMudGFza1R5cGVMaXN0XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLlNlbGVjdGVkSXRlbXMgPSB0aGlzLnRhc2tUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwudGFza0NvcnJsVHlwZUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuTmFtZSA9IFwiZHluYW1pY0NhbkNvbXBsZXRlXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlLkxhYmVsS2V5ID0gXCJDYW5Db21wbGV0ZUZyb21UTUVcIjtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLmNhbkNvbXBsZXRlRnJvbVRNRTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0R5bmFtaWNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1BhcnRpY2lwYW50Q29udGFpbmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuU3RhcnQ6XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkVtYWlsOlxyXG4gICAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5TbGVlcDpcclxuICAgICAgICAgICAgaWYgKE51bWJlcih0aGlzLmFjdGl2aXR5TW9kZWwuYWN0aXZpdHlUeXBlSXRlbUlEKSA9PSBXRkFjdGl2aXR5VHlwZS5FbWFpbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3QucGFydGljaXBhbnRzLnBhcnRpY2lwYW50VHlwZXM7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudERhdGFMaXN0ID0gbGlzdC5wYXJ0aWNpcGFudHMucGFydGljaXBhbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFR5cGVJdGVtSURzU3RyaW5nTGlzdC5tYXAoKGkpID0+IE51bWJlcihpKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5OYW1lID0gXCJwYXJ0aWNpcGFudFR5cGVzXCJcclxuICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuTGFiZWxLZXkgPSBcIlBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5EYXRhU291cmNlID0gdGhpcy5wYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLlNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5TZWxlY3RlZEl0ZW1zID0gdGhpcy5wYXJ0aWNpcGFudFR5cGVMaXN0LmZpbHRlcihmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRQYXJ0aWNpcGFudFR5cGVzLmluZGV4T2YocGFyc2VJbnQodGFnLmtleSkpID49IDA7XHJcbiAgICAgICAgICAgICAgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZFBhcnRpY2lwYW50VHlwZXMuaW5jbHVkZXMoTnVtYmVyKFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0KSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZFBlcm1pc3Npb25TZXRzOiBudW1iZXJbXSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5wYXJ0aWNpcGFudFBlcm1zZXRzSURzU3RyaW5nLm1hcCgoaSkgPT4gTnVtYmVyKGkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0Lk5hbWUgPSBcInBhcnRpY2lwYW50UGVybWlzc2lvblNldFwiXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5EYXRhU291cmNlID0gdGhpcy5wYXJ0aWNpcGFudERhdGFMaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LlNlbGVjdGVkSXRlbXMgPSB0aGlzLnBhcnRpY2lwYW50RGF0YUxpc3QuZmlsdGVyKGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkUGVybWlzc2lvblNldHMuaW5kZXhPZihwYXJzZUludCh0YWcua2V5KSkgPj0gMDtcclxuICAgICAgICAgICAgICAgIH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UGFydGljaXBhbnRQZXJtc3Npb25TZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNob3dQYXJ0aWNpcGFudENvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IG5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgICBuYW1lLkFyYWJpYyA9IHRoaXMuYWN0aXZpdHlNb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5hcmFiaWM7XHJcbiAgICAgICAgICAgIG5hbWUuRW5nbGlzaCA9IHRoaXMuYWN0aXZpdHlNb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOYW1lLk5hbWUgPSBcInN0YXRpY091dGNvbWVOYW1lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk91dGNvbWVOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk91dGNvbWVOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuVmFsdWUgPSBuYW1lO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVTeXNOYW1lLk5hbWUgPSBcInN0YXRpY091dGNvbWVTeXNOYW1lXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUuTGFiZWxLZXkgPSBcIkRlY2lzaW9uU3lzTmFtZVwiO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZS5WYWx1ZSA9IHRoaXMuYWN0aXZpdHlNb2RlbC5vdXRjb21lU3lzTmFtZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmV4dEFjdGl2aXR5Lk5hbWUgPSBcInN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHlcIlxyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuTGFiZWxLZXkgPSBcIk5leHRBY3Rpdml0eVwiXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5EYXRhU291cmNlID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5TZWxlY3RlZEl0ZW1zID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5uZXh0QWN0aXZpdHlJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudC5OYW1lID0gXCJzdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudFwiO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVDYW5BZGRDb21tZW50LkxhYmVsS2V5ID0gXCJDYW5BZGRDb21tZW50XCI7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuVmFsdWUgPSB0aGlzLmFjdGl2aXR5TW9kZWwuY2FuQWRkQ29tbWVudDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1N0YXRpY0NvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdCA9IGxpc3Qud2ZWYXJpYWJsZXM7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3QgPSBsaXN0LndmVmFyaWFibGVzO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0ID0gbGlzdC5yaHNUeXBlcztcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MaXN0ID0gbGlzdC5jb25kaXRpb25zO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25MSFNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLlBsYWNlaG9sZGVyID0gXCJXb3JrZmxvd1ZhcmlhYmxlc1wiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5TZWxlY3RlZEl0ZW1zID0gdGhpcy5jb25kaXRpb25MSFNXRlZhcmlhYmxlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSB0aGlzLmFjdGl2aXR5TW9kZWwubGhzVmFyaWFibGVJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvbnNEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIkNvbmRpdGlvblwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvbkxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25zRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gdGhpcy5hY3Rpdml0eU1vZGVsLm9wZXJhdG9yVHlwZUl0ZW1JRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvblJIU1R5cGVEcm9wRG93blwiXHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTVHlwZUxpc3RcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpdml0eU1vZGVsLnJoc1R5cGVJdGVtSUQgPT0gQ29uZGl0aW9uUkhTVHlwZS5WYXJpYWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25SSFNEcm9wRG93blwiXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5QbGFjZWhvbGRlciA9IFwiV29ya2Zsb3dWYXJpYWJsZXNcIlxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlNlbGVjdGVkSXRlbXMgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IHRoaXMuYWN0aXZpdHlNb2RlbC5yaHNWYXJpYWJsZUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTs7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0NvbmRpdGlvblJIU1dGVmFyaWFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLk5hbWUgPSBcImNvbmRpdGlvblJIU1ZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuUGxhY2Vob2xkZXIgPSBcIlZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLlZhbHVlID0gdGhpcy5hY3Rpdml0eU1vZGVsLnJoc1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93Q29uZGl0aW9uQ29udHJvbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dPdXRjb21lc0NvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzRWRpdEZvcm1Mb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL0VkaXQgZnVuY3Rpb25zXHJcbiAgZ2V0RWRpdFdGQWN0aXZpdHlNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0udmFsdWU7XHJcbiAgICBsZXQgZWRpdE1vZGVsID0gbmV3IFdGQWN0aXZpdHlNb2RlbCgpO1xyXG4gICAgZWRpdE1vZGVsLklEID0gdGhpcy5hY3Rpdml0eU1vZGVsLmlkO1xyXG4gICAgZWRpdE1vZGVsLk5hbWUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLm5hbWUuRW5nbGlzaDtcclxuICAgIGVkaXRNb2RlbC5OYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLm5hbWUuQXJhYmljO1xyXG4gICAgZWRpdE1vZGVsLlZlcnNpb25JRCA9IE51bWJlcih0aGlzLnZlcnNpb25JRCk7XHJcbiAgICBlZGl0TW9kZWwuQWN0aXZpdHlUeXBlSXRlbUlEID0gdGhpcy5hY3Rpdml0eVR5cGVJRDtcclxuXHJcbiAgICBlZGl0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLnN5c05hbWVcclxuXHJcblxyXG4gICAgLy9JZiBwYXJ0aWNpcGFudCBleGlzdHNcclxuICAgIGlmIChSZXN1bHRNb2RlbC5wYXJ0aWNpcGFudFR5cGVzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBlZGl0TW9kZWwuUGFydGljaXBhbnREVE8gPSBuZXcgUGFydGljaXBhbnRNb2RlbCgpO1xyXG4gICAgICBlZGl0TW9kZWwuUGFydGljaXBhbnREVE8gPSBuZXcgUGFydGljaXBhbnRNb2RlbCgpO1xyXG4gICAgICBlZGl0TW9kZWwuUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEc1N0cmluZyA9IFJlc3VsdE1vZGVsLnBhcnRpY2lwYW50VHlwZXMudG9TdHJpbmcoKTtcclxuICAgICAgaWYgKFJlc3VsdE1vZGVsLnBhcnRpY2lwYW50VHlwZXMuaW5jbHVkZXMoUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQpKSB7XHJcbiAgICAgICAgZWRpdE1vZGVsLlBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRHNTdHJpbmcgPSBSZXN1bHRNb2RlbC5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3dpdGNoIChOdW1iZXIodGhpcy5hY3Rpdml0eVR5cGVJRCkpIHtcclxuICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BcHByb3ZhbDpcclxuICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BY3Rpb246XHJcbiAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuUGVyY2VudGFnZVRhc2s6XHJcbiAgICAgICAgZWRpdE1vZGVsLlRhc2tOYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza05hbWUuRW5nbGlzaDtcclxuICAgICAgICBlZGl0TW9kZWwuVGFza05hbWUuQXJhYmljID0gUmVzdWx0TW9kZWwuZHluYW1pY1Rhc2tOYW1lLkFyYWJpYztcclxuICAgICAgICBlZGl0TW9kZWwuVGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkVuZ2xpc2g7XHJcbiAgICAgICAgZWRpdE1vZGVsLlRhc2tEZXNjcmlwdGlvbi5BcmFiaWMgPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza0Rlc2NyaXB0aW9uLkFyYWJpYztcclxuICAgICAgICBlZGl0TW9kZWwuVGFza1VSTCA9IFJlc3VsdE1vZGVsLmR5bmFtaWNUYXNrVVJMO1xyXG4gICAgICAgIGVkaXRNb2RlbC5UYXNrQ29ycmxUeXBlSUQgPSBSZXN1bHRNb2RlbC5keW5hbWljVGFza1R5cGUgIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5keW5hbWljVGFza1R5cGUpIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuQ2FuQ29tcGxldGVGcm9tVE1FID0gUmVzdWx0TW9kZWwuZHluYW1pY0NhbkNvbXBsZXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLlN0YXJ0OlxyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkVtYWlsOlxyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLlNsZWVwOlxyXG4gICAgICAgIGlmICghdGhpcy5pc1B1Ymxpc2hlZCkge1xyXG4gICAgICAgICAgZWRpdE1vZGVsLk5vcm1hbE91dGNvbWVOYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5zdGF0aWNPdXRjb21lTmFtZS5FbmdsaXNoO1xyXG4gICAgICAgICAgZWRpdE1vZGVsLk5vcm1hbE91dGNvbWVOYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLnN0YXRpY091dGNvbWVOYW1lLkFyYWJpYztcclxuICAgICAgICAgIGVkaXRNb2RlbC5PdXRjb21lU3lzTmFtZSA9IFJlc3VsdE1vZGVsLnN0YXRpY091dGNvbWVTeXNOYW1lO1xyXG4gICAgICAgICAgZWRpdE1vZGVsLk5leHRBY3Rpdml0eUlEID0gUmVzdWx0TW9kZWwuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eSAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkpIDogbnVsbDtcclxuICAgICAgICAgIGVkaXRNb2RlbC5DYW5BZGRDb21tZW50ID0gUmVzdWx0TW9kZWwuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICBlZGl0TW9kZWwuTEhTVmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsLmNvbmRpdGlvbkxIU0Ryb3BEb3duICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuY29uZGl0aW9uTEhTRHJvcERvd24pIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuUkhTVmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsLmNvbmRpdGlvblJIU0Ryb3BEb3duICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuY29uZGl0aW9uUkhTRHJvcERvd24pIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuUkhTVHlwZUl0ZW1JRCA9IFJlc3VsdE1vZGVsLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93biAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93bikgOiBudWxsO1xyXG4gICAgICAgIGVkaXRNb2RlbC5PcGVyYXRvclR5cGVJdGVtSUQgPSBSZXN1bHRNb2RlbC5jb25kaXRpb25zRHJvcERvd24gIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5jb25kaXRpb25zRHJvcERvd24pIDogbnVsbDtcclxuICAgICAgICBlZGl0TW9kZWwuUkhTVmFsdWUgPSBSZXN1bHRNb2RlbC5jb25kaXRpb25SSFNWYWx1ZSAhPSB1bmRlZmluZWQgPyBSZXN1bHRNb2RlbC5jb25kaXRpb25SSFNWYWx1ZSA6IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gICAgLy9TZXQgT3V0Y29tZXMgKGR5bmFtaWMsY29uZGl0aW9uIHR5cGVzKVxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLm91dGNvbWVzQ291bnQ7IGorKykge1xyXG4gICAgICBsZXQgb3V0Y29tZUlEID0gUmVzdWx0TW9kZWxbXCJvdXRjb21lSURcIiArIGpdO1xyXG4gICAgICBpZiAob3V0Y29tZUlEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBvdXRjb21lTmFtZSA9IFJlc3VsdE1vZGVsW1wib3V0Y29tZU5hbWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVTeXNOYW1lOiBzdHJpbmc7XHJcbiAgICAgIGxldCBvdXRDb21lQ2FuRWRpdFN5c05hbWUgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVDYW5FZGl0U3lzTmFtZVwiICsgal07XHJcbiAgICAgIGlmIChvdXRDb21lQ2FuRWRpdFN5c05hbWUpXHJcbiAgICAgICAgb3V0Y29tZVN5c05hbWUgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVEZWNpc2lvblN5c05hbWVcIiArIGpdO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgb3V0Y29tZVN5c05hbWUgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVIaWRkZW5lU3lzTmFtZVwiICsgal07XHJcblxyXG4gICAgICBsZXQgb3V0Y29tZUFjdGl2aXR5ID0gUmVzdWx0TW9kZWxbXCJvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXNcIiArIGpdO1xyXG4gICAgICBsZXQgb3V0Y29tZUNhbkFkZENvbW1lbnQgPSBSZXN1bHRNb2RlbFtcIm91dGNvbWVDYW5BZGRDb21tZW50XCIgKyBqXTtcclxuXHJcbiAgICAgIGxldCBhY3Rpdml0eU91dGNvbWU6IFdGQWN0aXZpdHlPdXRjb21lTW9kZWwgPSBuZXcgV0ZBY3Rpdml0eU91dGNvbWVNb2RlbCgpO1xyXG4gICAgICBhY3Rpdml0eU91dGNvbWUuSWQgPSBvdXRjb21lSUQ7XHJcbiAgICAgIGFjdGl2aXR5T3V0Y29tZS5OYW1lRU4gPSBvdXRjb21lTmFtZS5FbmdsaXNoO1xyXG4gICAgICBhY3Rpdml0eU91dGNvbWUuTmFtZUFSID0gb3V0Y29tZU5hbWUuQXJhYmljO1xyXG4gICAgICBhY3Rpdml0eU91dGNvbWUuT3V0Y29tZVN5c05hbWUgPSBvdXRjb21lU3lzTmFtZTtcclxuICAgICAgYWN0aXZpdHlPdXRjb21lLk5leHRBY3Rpdml0eUlEID0gb3V0Y29tZUFjdGl2aXR5ICE9IG51bGwgPyBOdW1iZXIob3V0Y29tZUFjdGl2aXR5KSA6IG51bGw7XHJcbiAgICAgIGFjdGl2aXR5T3V0Y29tZS5DYW5BZGRDb21tZW50ID0gb3V0Y29tZUNhbkFkZENvbW1lbnQ7XHJcblxyXG4gICAgICBlZGl0TW9kZWwuT3V0Y29tZXMucHVzaChhY3Rpdml0eU91dGNvbWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goZWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuICBnZXRFZGl0V0ZBY3Rpdml0eUZ1bmN0aW9uID0gKGVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICBpZiAodGhpcy5pc1B1Ymxpc2hlZClcclxuICAgICAgcmV0dXJuIHRoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuZWRpdFB1Ymxpc2hlZEFjdGl2aXR5KGVkaXRNb2RlbCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmVkaXRBY3Rpdml0eShlZGl0TW9kZWwpO1xyXG4gIH1cclxuICBvbkVkaXRTdWNjZXNzID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgdGhpcy5jYW5jZWxFZGl0KCk7XHJcbiAgfVxyXG5cclxuICAvL091dGNvbWUgZnVuY3Rpb25zXHJcbiAgZ2V0QWN0aXZpdHlPdXRjb21lc09wdGlvbnMob3V0Q29tZXM6IGFueVtdLCBpc1B1Ymxpc2hlZDogYm9vbGVhbikge1xyXG4gICAgbGV0IG91dGNvbWVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBvdXRjb21lc0NvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0Q29tZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGN1cnJlbnRPdXRjb21lID0gb3V0Q29tZXNbaV07XHJcbiAgICAgIGxldCBvYmplY3RPdXRjb21lT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBvdXRjb21lSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgb3V0Y29tZUlELk5hbWUgPSBcIm91dGNvbWVJRFwiICsgaTtcclxuICAgICAgb3V0Y29tZUlELkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIG91dGNvbWVJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIG91dGNvbWVJRC5WYWx1ZSA9IGN1cnJlbnRPdXRjb21lLmlkO1xyXG5cclxuICAgICAgbGV0IG5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBuYW1lLkVuZ2xpc2ggPSBjdXJyZW50T3V0Y29tZS5uYW1lRU47XHJcbiAgICAgIG5hbWUuQXJhYmljID0gY3VycmVudE91dGNvbWUubmFtZUFSO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIG91dGNvbWVOYW1lLk5hbWUgPSBcIm91dGNvbWVOYW1lXCIgKyBpO1xyXG4gICAgICBvdXRjb21lTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIG91dGNvbWVOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICBvdXRjb21lTmFtZS5WYWx1ZSA9IG5hbWU7XHJcbiAgICAgIG91dGNvbWVOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLk5hbWUgPSBcIm91dGNvbWVOZXh0QWN0aXZpdHlUeXBlc1wiICsgaTtcclxuICAgICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLkxhYmVsS2V5ID0gXCJBY3Rpdml0eVwiXHJcbiAgICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5EYXRhU291cmNlID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0XHJcbiAgICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMuU2VsZWN0ZWRJdGVtcyA9IHRoaXMubmV4dEFjdGl2aXR5TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBjdXJyZW50T3V0Y29tZS5uZXh0QWN0aXZpdHlJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07O1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVDYW5FZGl0OiBib29sZWFuO1xyXG4gICAgICBvdXRjb21lQ2FuRWRpdCA9IGN1cnJlbnRPdXRjb21lLmNhbkVkaXQ7XHJcblxyXG4gICAgICBsZXQgb3V0Y29tZUhpZGRlbmVTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5OYW1lID0gXCJvdXRjb21lSGlkZGVuZVN5c05hbWVcIiArIGk7XHJcbiAgICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5WYWx1ZSA9IGN1cnJlbnRPdXRjb21lLm91dGNvbWVTeXNOYW1lO1xyXG5cclxuICAgICAgbGV0IG91dGNvbWVDYW5FZGl0U3lzTmFtZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgb3V0Y29tZUNhbkVkaXRTeXNOYW1lLk5hbWUgPSBcIm91dGNvbWVDYW5FZGl0U3lzTmFtZVwiICsgaTtcclxuICAgICAgb3V0Y29tZUNhbkVkaXRTeXNOYW1lLlZhbHVlID0gY3VycmVudE91dGNvbWUuY2FuRWRpdFN5c05hbWU7XHJcblxyXG4gICAgICBpZiAoIWlzUHVibGlzaGVkKSB7XHJcbiAgICAgICAgbGV0IG91dGNvbWVEZWNpc2lvblN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICBvdXRjb21lRGVjaXNpb25TeXNOYW1lLk5hbWUgPSBcIm91dGNvbWVEZWNpc2lvblN5c05hbWVcIiArIGk7XHJcbiAgICAgICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5MYWJlbEtleSA9IFwiRGVjaXNpb25TeXNOYW1lXCI7XHJcbiAgICAgICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5WYWx1ZSA9IGN1cnJlbnRPdXRjb21lLm91dGNvbWVTeXNOYW1lO1xyXG4gICAgICAgIG91dGNvbWVEZWNpc2lvblN5c05hbWUuSXNEaXNhYmxlZCA9ICFjdXJyZW50T3V0Y29tZS5jYW5FZGl0U3lzTmFtZTtcclxuICAgICAgICBvdXRjb21lRGVjaXNpb25TeXNOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgb3V0Y29tZUNhbkFkZENvbW1lbnQgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgb3V0Y29tZUNhbkFkZENvbW1lbnQuTmFtZSA9IFwib3V0Y29tZUNhbkFkZENvbW1lbnRcIiArIGk7XHJcbiAgICAgICAgb3V0Y29tZUNhbkFkZENvbW1lbnQuVmFsdWUgPSBjdXJyZW50T3V0Y29tZS5jYW5BZGRDb21tZW50O1xyXG4gICAgICAgIG91dGNvbWVDYW5BZGRDb21tZW50LkxhYmVsS2V5ID0gXCJDYW5BZGRDb21tZW50XCI7XHJcblxyXG4gICAgICAgIG9iamVjdE91dGNvbWVPcHRpb25zLnB1c2gob3V0Y29tZUlELCBvdXRjb21lTmFtZSwgb3V0Y29tZURlY2lzaW9uU3lzTmFtZSwgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLFxyXG4gICAgICAgICAgb3V0Y29tZUNhbkFkZENvbW1lbnQsIG91dGNvbWVDYW5FZGl0LCBvdXRjb21lSGlkZGVuZVN5c05hbWUsIG91dGNvbWVDYW5FZGl0U3lzTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIG9iamVjdE91dGNvbWVPcHRpb25zLnB1c2gob3V0Y29tZUlELCBvdXRjb21lTmFtZSwgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLCBvdXRjb21lQ2FuRWRpdCwgb3V0Y29tZUhpZGRlbmVTeXNOYW1lLCBvdXRjb21lQ2FuRWRpdFN5c05hbWUpO1xyXG5cclxuICAgICAgb3V0Y29tZXNPcHRpb25zLnB1c2gob2JqZWN0T3V0Y29tZU9wdGlvbnMpO1xyXG4gICAgICBvdXRjb21lc0NvdW50ICs9IDE7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtvdXRjb21lc09wdGlvbnMsIG91dGNvbWVzQ291bnRdO1xyXG4gIH1cclxuICBhZGRXRkFjdGl2aXR5T3V0Y29tZSgpIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMub3V0Y29tZXNDb3VudDtcclxuXHJcbiAgICBsZXQgb2JqZWN0T3V0Y29tZU9wdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gICAgbGV0IG91dGNvbWVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgb3V0Y29tZUlELk5hbWUgPSBcIm91dGNvbWVJRFwiICsgaW5kZXg7XHJcbiAgICBvdXRjb21lSUQuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIG91dGNvbWVJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBvdXRjb21lSUQuVmFsdWUgPSAwO1xyXG5cclxuICAgIGxldCBvdXRjb21lTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgb3V0Y29tZU5hbWUuTmFtZSA9IFwib3V0Y29tZU5hbWVcIiArIGluZGV4O1xyXG4gICAgb3V0Y29tZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgb3V0Y29tZU5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICBvdXRjb21lTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3V0Y29tZURlY2lzaW9uU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5OYW1lID0gXCJvdXRjb21lRGVjaXNpb25TeXNOYW1lXCIgKyBpbmRleDtcclxuICAgIG91dGNvbWVEZWNpc2lvblN5c05hbWUuTGFiZWxLZXkgPSBcIkRlY2lzaW9uU3lzTmFtZVwiO1xyXG4gICAgb3V0Y29tZURlY2lzaW9uU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBvdXRjb21lRGVjaXNpb25TeXNOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIGxldCBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICBvdXRjb21lTmV4dEFjdGl2aXR5VHlwZXMuTmFtZSA9IFwib3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzXCIgKyBpbmRleDtcclxuICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5MYWJlbEtleSA9IFwiQWN0aXZpdHlcIlxyXG4gICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLkRhdGFTb3VyY2UgPSB0aGlzLm5leHRBY3Rpdml0eUxpc3RcclxuICAgIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgb3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3V0Y29tZUNhbkFkZENvbW1lbnQgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICBvdXRjb21lQ2FuQWRkQ29tbWVudC5OYW1lID0gXCJvdXRjb21lQ2FuQWRkQ29tbWVudFwiICsgaW5kZXg7XHJcbiAgICBvdXRjb21lQ2FuQWRkQ29tbWVudC5MYWJlbEtleSA9IFwiQ2FuQWRkQ29tbWVudFwiO1xyXG5cclxuICAgIGxldCBvdXRjb21lQ2FuRWRpdDogYm9vbGVhbjtcclxuICAgIG91dGNvbWVDYW5FZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3V0Y29tZUhpZGRlbmVTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBvdXRjb21lSGlkZGVuZVN5c05hbWUuTmFtZSA9IFwib3V0Y29tZUhpZGRlbmVTeXNOYW1lXCIgKyBpbmRleDtcclxuICAgIG91dGNvbWVIaWRkZW5lU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgbGV0IG91dGNvbWVDYW5FZGl0U3lzTmFtZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIG91dGNvbWVDYW5FZGl0U3lzTmFtZS5OYW1lID0gXCJvdXRjb21lQ2FuRWRpdFN5c05hbWVcIiArIGluZGV4O1xyXG4gICAgb3V0Y29tZUNhbkVkaXRTeXNOYW1lLlZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICBvYmplY3RPdXRjb21lT3B0aW9ucy5wdXNoKG91dGNvbWVJRCwgb3V0Y29tZU5hbWUsIG91dGNvbWVEZWNpc2lvblN5c05hbWUsIG91dGNvbWVOZXh0QWN0aXZpdHlUeXBlcywgb3V0Y29tZUNhbkFkZENvbW1lbnQsXHJcbiAgICAgIG91dGNvbWVDYW5FZGl0LCBvdXRjb21lSGlkZGVuZVN5c05hbWUsIG91dGNvbWVDYW5FZGl0U3lzTmFtZSk7XHJcblxyXG4gICAgdGhpcy5vdXRjb21lc09wdGlvbnMucHVzaChvYmplY3RPdXRjb21lT3B0aW9ucyk7XHJcbiAgICB0aGlzLm91dGNvbWVzQ291bnQgKz0gMTtcclxuXHJcbiAgfVxyXG4gIGRlbGV0ZU91dGNvbWUoZGVsZXRlZE91dGNvbWU6IGFueSkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBsZXQgZGVsZXRlZE91dGNvbWVJbmRleDogbnVtYmVyID0gdGhpcy5vdXRjb21lc09wdGlvbnMuaW5kZXhPZihkZWxldGVkT3V0Y29tZSk7XHJcbiAgICBpZiAoZGVsZXRlZE91dGNvbWVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRPdXRjb21lSW5kZXgsIDEpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRPdXRjb21lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkT3V0Y29tZVtpXS5OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9PbiBjaGFuZ2VzIGV2ZW50c1xyXG4gIGFjdGl2aXR5VHlwZU9uQ2hhbmdlKGFjdGl2aXR5VHlwZSkge1xyXG4gICAgLy9SZXNldCBjb250cm9scywgb3V0Y29tZXMgYW5kIGZsYWdzXHJcbiAgICB0aGlzLnJlc2V0QWxsQWN0aXZpdHlUeXBlQ29udHJvbHMoKTtcclxuICAgIHRoaXMub3V0Y29tZXNPcHRpb25zID0gW107XHJcbiAgICB0aGlzLm91dGNvbWVzQ291bnQgPSAwO1xyXG4gICAgdGhpcy5zaG93UGFydGljaXBhbnRDb250YWluZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0R5bmFtaWNDb250cm9scyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U3RhdGljQ29udHJvbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbmRpdGlvbkNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dPdXRjb21lc0NvbnRhaW5lciA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYWN0aXZpdHlUeXBlSUQgPSBhY3Rpdml0eVR5cGU7XHJcbiAgICB0aGlzLndvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLmdldEFjdGl2aXR5T3V0Y29tZXModGhpcy52ZXJzaW9uSUQsIGFjdGl2aXR5VHlwZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHZhciBtb2RlbCA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdmFyIGxpc3QgPSByZXN1bHRPYmoubGlzdDtcclxuICAgICAgdGhpcy5uZXh0QWN0aXZpdHlMaXN0ID0gbGlzdC5hY3Rpdml0aWVzO1xyXG5cclxuICAgICAgc3dpdGNoIChOdW1iZXIoYWN0aXZpdHlUeXBlKSkge1xyXG4gICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuQXBwcm92YWw6XHJcbiAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5BY3Rpb246XHJcbiAgICAgICAgY2FzZSBXRkFjdGl2aXR5VHlwZS5QZXJjZW50YWdlVGFzazpcclxuICAgICAgICAgIHRoaXMudGFza1R5cGVMaXN0ID0gbGlzdC50YXNrcztcclxuICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3QucGFydGljaXBhbnRzLnBhcnRpY2lwYW50VHlwZXM7XHJcbiAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50RGF0YUxpc3QgPSBsaXN0LnBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudERhdGE7XHJcblxyXG4gICAgICAgICAgLy9Jbml0aWFsaXplIHJlcXVpcmVkIGNvbnRyb2xzIGZvciBhcHByb3ZhbFxyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLk5hbWUgPSBcInBhcnRpY2lwYW50VHlwZXNcIlxyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLkxhYmVsS2V5ID0gXCJQYXJ0aWNpcGFudFR5cGVzXCJcclxuICAgICAgICAgIHRoaXMucGFydGljaXBhbnRUeXBlcy5EYXRhU291cmNlID0gdGhpcy5wYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhcnRpY2lwYW50VHlwZXMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFR5cGVzLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5OYW1lID0gXCJkeW5hbWljVGFza05hbWVcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJUYXNrTmFtZUluQXJhYmljXCI7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIlRhc2tOYW1lSW5FbmdsaXNoXCI7XHJcblxyXG4gICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uID0gbmV3IE11bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljVGFza0Rlc2NyaXB0aW9uLk5hbWUgPSBcImR5bmFtaWNUYXNrRGVzY3JpcHRpb25cIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5BcmFiaWNMYWJlbEtleSA9IFwiVGFza0Rlc2NyaXB0aW9uSW5BcmFiaWNcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tEZXNjcmlwdGlvbi5FbmdsaXNoTGFiZWxLZXkgPSBcIlRhc2tEZXNjcmlwdGlvbkluRW5nbGlzaFwiO1xyXG5cclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuTmFtZSA9IFwiZHluYW1pY1Rhc2tVUkxcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuTGFiZWxLZXkgPSBcIlRhc2tVUkxcIjtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tVUkwuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljVGFza1R5cGUuTmFtZSA9IFwiZHluYW1pY1Rhc2tUeXBlXCJcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLkxhYmVsS2V5ID0gXCJUYXNrVHlwZVwiXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5EYXRhU291cmNlID0gdGhpcy50YXNrVHlwZUxpc3RcclxuICAgICAgICAgIHRoaXMuZHluYW1pY1Rhc2tUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNUYXNrVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuZHluYW1pY0NhbkNvbXBsZXRlLk5hbWUgPSBcImR5bmFtaWNDYW5Db21wbGV0ZVwiO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuTGFiZWxLZXkgPSBcIkNhbkNvbXBsZXRlRnJvbVRNRVwiO1xyXG4gICAgICAgICAgdGhpcy5keW5hbWljQ2FuQ29tcGxldGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICB0aGlzLmR5bmFtaWNDYW5Db21wbGV0ZS5WYWx1ZSA9IG1vZGVsLmNhbkNvbXBsZXRlRnJvbVRNRTtcclxuXHJcbiAgICAgICAgICBsZXQgb3V0Y29tZXNSZXN1bHQ6IGFueSA9IHRoaXMuZ2V0QWN0aXZpdHlPdXRjb21lc09wdGlvbnMobW9kZWwub3V0Y29tZXMsZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMgPSBvdXRjb21lc1Jlc3VsdFswXTtcclxuICAgICAgICAgIHRoaXMub3V0Y29tZXNDb3VudCA9IG91dGNvbWVzUmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2hvd0R5bmFtaWNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dQYXJ0aWNpcGFudENvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNob3dPdXRjb21lc0NvbnRhaW5lciA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkVtYWlsOlxyXG4gICAgICAgIGNhc2UgV0ZBY3Rpdml0eVR5cGUuU2xlZXA6XHJcblxyXG4gICAgICAgICAgbGV0IG5hbWUgPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICAgICAgbmFtZS5BcmFiaWMgPSBtb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5hcmFiaWM7XHJcbiAgICAgICAgICBuYW1lLkVuZ2xpc2ggPSBtb2RlbC5ub3JtYWxPdXRjb21lTmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuTmFtZSA9IFwic3RhdGljT3V0Y29tZU5hbWVcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk91dGNvbWVOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJPdXRjb21lTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5hbWUuVmFsdWUgPSBuYW1lO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUuTmFtZSA9IFwic3RhdGljT3V0Y29tZVN5c05hbWVcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZVN5c05hbWUuTGFiZWxLZXkgPSBcIkRlY2lzaW9uU3lzTmFtZVwiO1xyXG4gICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lU3lzTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVTeXNOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5OYW1lID0gXCJzdGF0aWNPdXRjb21lTmV4dEFjdGl2aXR5XCJcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5MYWJlbEtleSA9IFwiTmV4dEFjdGl2aXR5XCJcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5EYXRhU291cmNlID0gdGhpcy5uZXh0QWN0aXZpdHlMaXN0XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZU5leHRBY3Rpdml0eS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuTmFtZSA9IFwic3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnRcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuTGFiZWxLZXkgPSBcIkNhbkFkZENvbW1lbnRcIjtcclxuICAgICAgICAgIHRoaXMuc3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnQuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICB0aGlzLnN0YXRpY091dGNvbWVDYW5BZGRDb21tZW50LlZhbHVlID0gbW9kZWwuY2FuQWRkQ29tbWVudDtcclxuXHJcbiAgICAgICAgICB0aGlzLnNob3dTdGF0aWNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFdGQWN0aXZpdHlUeXBlLkNvbmRpdGlvbjpcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3QgPSBsaXN0LndmVmFyaWFibGVzO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNXRlZhcmlhYmxlTGlzdCA9IGxpc3Qud2ZWYXJpYWJsZXM7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVMaXN0ID0gbGlzdC5yaHNUeXBlcztcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTGlzdCA9IGxpc3QuY29uZGl0aW9ucztcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25MSFNEcm9wRG93blwiXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbkxIU0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uUGxhY2Vob2xkZXIgPSBcIldvcmtmbG93VmFyaWFibGVzXCJcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uTEhTV0ZWYXJpYWJsZUxpc3RcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uTEhTRHJvcERvd24uQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25MSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLk5hbWUgPSBcImNvbmRpdGlvbnNEcm9wRG93blwiXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93bi5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93bi5QbGFjZWhvbGRlciA9IFwiQ29uZGl0aW9uXCJcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvbkxpc3RcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uc0Ryb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvbnNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRSSFNUeXBlID0gdGhpcy5jb25kaXRpb25SSFNUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IENvbmRpdGlvblJIU1R5cGUuVmFyaWFibGU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93bi5OYW1lID0gXCJjb25kaXRpb25SSFNUeXBlRHJvcERvd25cIlxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNUeXBlRHJvcERvd24uRGF0YVNvdXJjZSA9IHRoaXMuY29uZGl0aW9uUkhTVHlwZUxpc3RcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU1R5cGVEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTVHlwZURyb3BEb3duLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFJIU1R5cGU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93biA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uTmFtZSA9IFwiY29uZGl0aW9uUkhTRHJvcERvd25cIlxyXG4gICAgICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5IaWRlTGFiZWwgPSB0cnVlXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlBsYWNlaG9sZGVyID0gXCJXb3JrZmxvd1ZhcmlhYmxlc1wiXHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGxldCBjb25kaXRpb25PdXRjb21lc1Jlc3VsdDogYW55ID0gdGhpcy5nZXRBY3Rpdml0eU91dGNvbWVzT3B0aW9ucyhtb2RlbC5vdXRjb21lcywgZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5vdXRjb21lc09wdGlvbnMgPSBjb25kaXRpb25PdXRjb21lc1Jlc3VsdFswXTtcclxuICAgICAgICAgIHRoaXMub3V0Y29tZXNDb3VudCA9IGNvbmRpdGlvbk91dGNvbWVzUmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2hvd0NvbmRpdGlvbkNvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd0NvbmRpdGlvblJIU1dGVmFyaWFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYW5BZGRPdXRjb21lID0gdGhpcy5zaG93T3V0Y29tZXNDb250YWluZXIgPyBtb2RlbC5jYW5BZGRPdXRjb21lIDogZmFsc2U7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBjb25kaXRpb25SSFNUeXBlT25DaGFuZ2UodHlwZSkge1xyXG4gICAgaWYgKHR5cGUgPT0gQ29uZGl0aW9uUkhTVHlwZS5WYXJpYWJsZSkge1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwiY29uZGl0aW9uUkhTVmFsdWVcIilcclxuXHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uTmFtZSA9IFwiY29uZGl0aW9uUkhTRHJvcERvd25cIlxyXG4gICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5QbGFjZWhvbGRlciA9IFwiV29ya2Zsb3dWYXJpYWJsZXNcIlxyXG4gICAgICB0aGlzLmNvbmRpdGlvblJIU0Ryb3BEb3duLkRhdGFTb3VyY2UgPSB0aGlzLmNvbmRpdGlvblJIU1dGVmFyaWFibGVMaXN0XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTRHJvcERvd24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNEcm9wRG93bi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd0NvbmRpdGlvblJIU1dGVmFyaWFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJjb25kaXRpb25SSFNEcm9wRG93blwiKVxyXG5cclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmNvbmRpdGlvblJIU1ZhbHVlLk5hbWUgPSBcImNvbmRpdGlvblJIU1ZhbHVlXCI7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5QbGFjZWhvbGRlciA9IFwiVmFsdWVcIjtcclxuICAgICAgdGhpcy5jb25kaXRpb25SSFNWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuY29uZGl0aW9uUkhTVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBwYXJ0aWNpcGFudFR5cGVPbkNoYW5nZShwYXJ0aWNpcGFudFR5cGUpIHtcclxuICAgIGlmIChwYXJ0aWNpcGFudFR5cGUgPT0gUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQpIHtcclxuICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0Lk5hbWUgPSBcInBhcnRpY2lwYW50UGVybWlzc2lvblNldFwiXHJcbiAgICAgIHRoaXMucGFydGljaXBhbnRQZXJtaXNzaW9uU2V0LkxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0XCJcclxuICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMucGFydGljaXBhbnREYXRhTGlzdFxyXG4gICAgICB0aGlzLnBhcnRpY2lwYW50UGVybWlzc2lvblNldC5TaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYXJ0aWNpcGFudFBlcm1pc3Npb25TZXQuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5zaG93UGFydGljaXBhbnRQZXJtc3Npb25TZXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJwYXJ0aWNpcGFudFBlcm1pc3Npb25TZXRcIik7XHJcbiAgICAgIHRoaXMuc2hvd1BhcnRpY2lwYW50UGVybXNzaW9uU2V0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vUmVzZXQgdHlwZVxyXG4gIHJlc2V0QWxsQWN0aXZpdHlUeXBlQ29udHJvbHMoKSB7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwicGFydGljaXBhbnRUeXBlc1wiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJwYXJ0aWNpcGFudFBlcm1pc3Npb25TZXRcIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwicGFydGljaXBhbnRQZXJtaXNzaW9uU2V0XCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImR5bmFtaWNUYXNrTmFtZVwiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJkeW5hbWljVGFza0Rlc2NyaXB0aW9uXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImR5bmFtaWNUYXNrVVJMXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImR5bmFtaWNUYXNrVHlwZVwiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJkeW5hbWljQ2FuQ29tcGxldGVcIik7XHJcblxyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcInN0YXRpY091dGNvbWVOYW1lXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcInN0YXRpY091dGNvbWVTeXNOYW1lXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcInN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHlcIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwic3RhdGljT3V0Y29tZUNhbkFkZENvbW1lbnRcIik7XHJcblxyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImNvbmRpdGlvbkxIU0Ryb3BEb3duXCIpO1xyXG4gICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcImNvbmRpdGlvbnNEcm9wRG93blwiKTtcclxuICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJjb25kaXRpb25SSFNUeXBlRHJvcERvd25cIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwiY29uZGl0aW9uUkhTRHJvcERvd25cIik7XHJcbiAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwiY29uZGl0aW9uUkhTVmFsdWVcIik7XHJcblxyXG4gICAgLy9SZW1vdmUgb3V0Y29tZXMgY29udHJvbHNcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnZhbHVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm91dGNvbWVzQ291bnQ7IGkrKykge1xyXG4gICAgICBsZXQgb3V0Y29tZUlEID0gUmVzdWx0TW9kZWxbXCJvdXRjb21lSURcIiArIGldO1xyXG4gICAgICBpZiAob3V0Y29tZUlEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJvdXRjb21lSURcIiArIGkpO1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwib3V0Y29tZU5hbWVcIiArIGkpO1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwib3V0Y29tZURlY2lzaW9uU3lzTmFtZVwiICsgaSk7XHJcbiAgICAgIHRoaXMuZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtLnJlbW92ZUNvbnRyb2woXCJvdXRjb21lSGlkZGVuZVN5c05hbWVcIiArIGkpO1xyXG4gICAgICB0aGlzLmVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybS5yZW1vdmVDb250cm9sKFwib3V0Y29tZU5leHRBY3Rpdml0eVR5cGVzXCIgKyBpKTtcclxuICAgICAgdGhpcy5lZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChcIm91dGNvbWVDYW5BZGRDb21tZW50XCIgKyBpKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0NhbmNlbFxyXG4gIGNhbmNlbEVkaXQoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cvJ10pO1xyXG4gIH1cclxuXHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiICpuZ0lmPVwiaXNFZGl0Rm9ybUxvYWRlZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgIDwhLS1TdGFydCBzaGFyZWQgY29udHJvbHMgY29udGFpbmVyLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIm5hbWVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFpc1B1Ymxpc2hlZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInN5c05hbWVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInNob3dBY3Rpdml0eVR5cGVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImFjdGl2aXR5VHlwZVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIiAoT25DaGFuZ2UpPVwiYWN0aXZpdHlUeXBlT25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLUVuZCBzaGFyZWQgY29udHJvbHMgY29udGFpbmVyLS0+XHJcbiAgICAgICAgPCEtLVN0YXJ0IHBhcnRpY2lwYW50IGNvbnRhaW5lci0tPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwYXJ0aWNpcGFudENvbnRhaW5lclwiICpuZ0lmPVwic2hvd1BhcnRpY2lwYW50Q29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwicGFydGljaXBhbnRUeXBlc1wiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIiAoT25DaGFuZ2UpPVwicGFydGljaXBhbnRUeXBlT25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQYXJ0aWNpcGFudFBlcm1zc2lvblNldFwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwicGFydGljaXBhbnRQZXJtaXNzaW9uU2V0XCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLUVuZCBwYXJ0aWNpcGFudCBjb250YWluZXItLT5cclxuICAgICAgICA8IS0tU3RhcnQgc3RhdGljIGNvbnRyb2xzLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTdGF0aWNDb250cm9sc1wiIGlkPVwic3RhdGljQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cInN0YXRpY091dGNvbWVOYW1lXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic3RhdGljT3V0Y29tZVN5c05hbWVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cInN0YXRpY091dGNvbWVOZXh0QWN0aXZpdHlcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJzdGF0aWNPdXRjb21lQ2FuQWRkQ29tbWVudFwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICA8L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLUVuZCBzdGF0aWMgY29udHJvbHMtLT5cclxuICAgICAgICA8IS0tU3RhcnQgZHluYW1pYyBjb250cm9scy0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RHluYW1pY0NvbnRyb2xzXCIgaWQ9XCJkeW5hbWljQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cImR5bmFtaWNUYXNrTmFtZVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYSBbb3B0aW9uc109XCJkeW5hbWljVGFza0Rlc2NyaXB0aW9uXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0QXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImR5bmFtaWNUYXNrVVJMXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJkeW5hbWljVGFza1R5cGVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJkeW5hbWljQ2FuQ29tcGxldGVcIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1FbmQgZHluYW1pYyBjb250cm9scy0tPlxyXG4gICAgICAgIDwhLS1TdGFydCBjb25kaXRpb24gY29udHJvbHMtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbmRpdGlvbkNvbnRyb2xzXCIgaWQ9XCJjb25kaXRpb25Db250YWluZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTGVmdEhhbmRTaWRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvbmRpdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSaWdodEhhbmRTaWRlVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSaWdodEhhbmRTaWRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImNvbmRpdGlvbkxIU0Ryb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiY29uZGl0aW9uc0Ryb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiY29uZGl0aW9uUkhTVHlwZURyb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiIChPbkNoYW5nZSk9XCJjb25kaXRpb25SSFNUeXBlT25DaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dDb25kaXRpb25SSFNXRlZhcmlhYmxlOyBlbHNlIGNvbmRpdGlvblR4dFZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImNvbmRpdGlvblJIU0Ryb3BEb3duXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29uZGl0aW9uVHh0VmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJjb25kaXRpb25SSFNWYWx1ZVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tRW5kIGNvbmRpdGlvbiBjb250cm9scy0tPlxyXG4gICAgICAgIDwhLS1TdGFydCBvdXRjb21lcyBjb250YWluZXItLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd091dGNvbWVzQ29udGFpbmVyXCIgaWQ9XCJvdXRjb21lc0NvbnRhaW5lclwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWNpc2lvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhaXNQdWJsaXNoZWRcIiBjbGFzcz1cIm1pbi13LTE1MHB4XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWlzUHVibGlzaGVkXCIgY2xhc3M9XCJtaW4tdy0xNTBweFwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc1B1Ymxpc2hlZFwiIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiICpuZ0lmPVwiaXNQdWJsaXNoZWQ7ZWxzZSBub3RQdWJsaXNoZWRPdXRjb21lc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3V0Y29tZXNPcHRpb25zO2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1JRC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bMF1cIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1OYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLU5leHRBY3Rpdml0eS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90UHVibGlzaGVkT3V0Y29tZXM+XHJcbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG91dGNvbWVzT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1JRC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJlZGl0d29ya2Zsb3dBY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1OYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TeXNOYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWhpZGRlbiBTeXNOYW1lLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzZdXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWNhbiBlZGl0IFN5c05hbWUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzddXCIgW2dyb3VwXT1cImVkaXR3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tTmV4dEFjdGl2aXR5LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tQ2FuQWRkQ29tbWVudC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bNF1cIiBbZ3JvdXBdPVwiZWRpdHdvcmtmbG93QWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0taWYgb3V0Y29tZSBDYW4gRWRpdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIm9wdGlvbls1XVwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZU91dGNvbWUob3B0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cImNhbkFkZE91dGNvbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGRXRkFjdGl2aXR5T3V0Y29tZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tRW5kIG91dGNvbWVzIGNvbnRhaW5lci0tPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuIl19