@bnsights/bbsf-admin-portal 1.0.0 → 1.0.5
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.
- package/bnsights-bbsf-admin-portal-1.0.5.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +19694 -20386
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
- package/esm2015/lib/Pages/account/account-routing.module.js +3 -1
- package/esm2015/lib/Pages/account/account.component.js +15 -6
- package/esm2015/lib/Pages/account/account.module.js +16 -8
- package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +48 -0
- package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +392 -387
- package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
- package/esm2015/lib/Pages/departments/department/department.component.js +59 -98
- package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
- package/esm2015/lib/Pages/departments/departments.module.js +4 -1
- package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
- package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
- package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
- package/esm2015/lib/Pages/home/home.component.js +32 -26
- package/esm2015/lib/Pages/home/home.module.js +5 -10
- package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
- package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
- package/esm2015/lib/Pages/license/license/license.component.js +68 -99
- package/esm2015/lib/Pages/localizations/localizations.component.js +378 -341
- package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
- package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
- package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
- package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
- package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
- package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
- package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
- package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
- package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
- package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
- package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
- package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
- package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
- package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
- package/esm2015/lib/Pages/providers/provider/provider.component.js +54 -52
- package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
- package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
- package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
- package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +219 -254
- package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
- package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
- package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
- package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
- package/esm2015/lib/Pages/shared/Services/AccountService.service.js +21 -0
- package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
- package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +5 -8
- package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
- package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
- package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
- package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
- package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
- package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
- package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
- package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
- package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
- package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
- package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
- package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
- package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
- package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
- package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
- package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
- package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
- package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
- package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
- package/esm2015/lib/Pages/users/users.component.js +398 -409
- package/esm2015/lib/masterlayout-routing.module.js +5 -4
- package/esm2015/lib/masterlayout.component.js +22 -32
- package/esm2015/lib/masterlayout.module.js +25 -19
- package/fesm2015/bnsights-bbsf-admin-portal.js +17295 -17401
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/account/account.component.d.ts +5 -1
- package/lib/Pages/account/account.module.d.ts +8 -6
- package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +20 -0
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +39 -31
- package/lib/Pages/departments/department/department.component.d.ts +19 -15
- package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
- package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
- package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
- package/lib/Pages/home/home.component.d.ts +4 -4
- package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
- package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
- package/lib/Pages/license/license/license.component.d.ts +25 -23
- package/lib/Pages/localizations/localizations.component.d.ts +77 -65
- package/lib/Pages/logs/log/log.component.d.ts +7 -11
- package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
- package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
- package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
- package/lib/Pages/notifications/add/add.component.d.ts +13 -11
- package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
- package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
- package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
- package/lib/Pages/notifications/notifications.module.d.ts +15 -16
- package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
- package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
- package/lib/Pages/providers/provider/provider.component.d.ts +13 -12
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
- package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
- package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
- package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
- package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
- package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
- package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
- package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
- package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
- package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
- package/lib/Pages/shared/Services/AccountService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
- package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
- package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
- package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
- package/lib/Pages/shared/Services/provider.service.d.ts +1 -1
- package/lib/Pages/shared/Services/userService.service.d.ts +2 -0
- package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
- package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
- package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
- package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
- package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
- package/lib/Pages/users/users.component.d.ts +54 -68
- package/lib/masterlayout.component.d.ts +4 -5
- package/lib/masterlayout.module.d.ts +8 -9
- package/package.json +5 -3
- package/src/lib/assets/sass/core/components/_variables.scss +1 -1
- package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
- package/src/lib/assets/sass/custom-styles.scss +153 -0
- package/src/lib/assets/sass/style-rtl.scss +2 -0
- package/src/lib/assets/sass/style.scss +2 -2
- package/bnsights-bbsf-admin-portal-0.0.1.tgz +0 -0
- package/bnsights-bbsf-admin-portal-1.0.0.tgz +0 -0
- package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
- package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { Component, ViewChild } from '@angular/core';
|
|
3
3
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import { ControlLayout, FilterItem, FilterType, InputType, PagingOptions, TextBoxOptions, DropdownOptions, ToggleSlideOptions } from '@bnsights/bbsf-controls';
|
|
5
|
-
import { UsersIDRequestModel } from '../../shared/models/UserModels/UsersIDRequestModel';
|
|
4
|
+
import { ControlLayout, FilterItem, FilterType, InputType, PagingOptions, TextBoxOptions, DropdownOptions, ToggleSlideOptions, FormOptions, ConfirmationModalOptions, PagingActionMode } from '@bnsights/bbsf-controls';
|
|
6
5
|
import { ConfigurationModel } from '../../shared/models/ConfigurationModels/ConfigurationModel';
|
|
7
6
|
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
7
|
+
import { ConfigurationTypes } from '../../shared/Enums/ConfigurationType';
|
|
8
|
+
import { ConfigurationScope } from '../../shared/Enums/ConfigurationScope';
|
|
9
|
+
import { ConfigurationValueSource } from '../../shared/Enums/ConfigurationValueSource';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
import * as i1 from "@bnsights/bbsf-utilities";
|
|
10
12
|
import * as i2 from "../../../_metronic/core/services/page-info.service";
|
|
@@ -18,7 +20,7 @@ import * as i9 from "@angular/common";
|
|
|
18
20
|
import * as i10 from "@angular/forms";
|
|
19
21
|
import * as i11 from "ng-inline-svg";
|
|
20
22
|
export class ConfigurationComponent {
|
|
21
|
-
constructor(authService, pageInfoService, utilityService, bbsfTranslateService, environmentService, ConfigurationsService, modalService) {
|
|
23
|
+
constructor(authService, pageInfoService, utilityService, bbsfTranslateService, environmentService, ConfigurationsService, modalService, requestHandlerService) {
|
|
22
24
|
this.authService = authService;
|
|
23
25
|
this.pageInfoService = pageInfoService;
|
|
24
26
|
this.utilityService = utilityService;
|
|
@@ -26,11 +28,16 @@ export class ConfigurationComponent {
|
|
|
26
28
|
this.environmentService = environmentService;
|
|
27
29
|
this.ConfigurationsService = ConfigurationsService;
|
|
28
30
|
this.modalService = modalService;
|
|
31
|
+
this.requestHandlerService = requestHandlerService;
|
|
32
|
+
//Page requirements
|
|
33
|
+
this.ShowPageContent = false;
|
|
29
34
|
this.ApiUrl = "/api/admin/Configuration/";
|
|
35
|
+
//Filter and paging components
|
|
30
36
|
this.ConfigurationForm = new FormGroup({});
|
|
31
|
-
this.showFilter = false;
|
|
32
37
|
this.ConfigurationPagingResult = [];
|
|
38
|
+
this.clientSidePagingResult = [];
|
|
33
39
|
this.IsFilterLoaded = false;
|
|
40
|
+
//Required lists
|
|
34
41
|
this.ScopesList = [];
|
|
35
42
|
this.PermissionList = [];
|
|
36
43
|
this.UsersList = [];
|
|
@@ -38,16 +45,18 @@ export class ConfigurationComponent {
|
|
|
38
45
|
this.LookupItemsList = [];
|
|
39
46
|
this.ValueTypeList = [];
|
|
40
47
|
this.ValueSourceList = [];
|
|
48
|
+
//Add,Edit required flags
|
|
41
49
|
this.ShowPermissionList = false;
|
|
42
50
|
this.ShowUsersList = false;
|
|
43
51
|
this.ShowLookupList = false;
|
|
44
52
|
this.ShowValueAndDefaultValue = false;
|
|
45
53
|
this.ShowValueToggleAndDefaultValue = false;
|
|
46
|
-
this.ShowSourcePath = false;
|
|
47
54
|
this.ShowSourceFunctionPath = false;
|
|
48
55
|
this.ShowDropDownSource = false;
|
|
49
56
|
this.ShowLookupItemsList = false;
|
|
50
57
|
this.ShowSourceFunctionData = false;
|
|
58
|
+
this.showFunctionNotFoundError = false;
|
|
59
|
+
this.sourceFunctionDataNotLoaded = false;
|
|
51
60
|
//Add Model Controls
|
|
52
61
|
this.AddConfigurationForm = new FormGroup({});
|
|
53
62
|
this.SourceFuncValue = new DropdownOptions();
|
|
@@ -71,14 +80,90 @@ export class ConfigurationComponent {
|
|
|
71
80
|
this.EditLookupDefaultValue = new DropdownOptions();
|
|
72
81
|
this.EditSourceFuncValue = new DropdownOptions();
|
|
73
82
|
this.EditSourceFuncDefaultValue = new DropdownOptions();
|
|
74
|
-
|
|
75
|
-
this.
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
this.deleteControlLoaded = false;
|
|
84
|
+
this.getAddConfigurationModel = () => {
|
|
85
|
+
let paramArray = [];
|
|
86
|
+
let ResultModel = this.AddConfigurationForm.value;
|
|
87
|
+
let AddModel = new ConfigurationModel();
|
|
88
|
+
AddModel.Key = ResultModel.Key;
|
|
89
|
+
AddModel.ScopeId = Number(ResultModel.Scope);
|
|
90
|
+
AddModel.ValueType = Number(ResultModel.Type);
|
|
91
|
+
AddModel.TextValue = ResultModel.Value;
|
|
92
|
+
AddModel.DefaultTextValue = ResultModel.DefaultValue;
|
|
93
|
+
AddModel.BoolValue = ResultModel.ValueToggel;
|
|
94
|
+
AddModel.DefaultBoolValue = ResultModel.DefaultValueToggel;
|
|
95
|
+
AddModel.SourceFunctionName = ResultModel.FunctionSourcePath;
|
|
96
|
+
AddModel.UserID = Number(ResultModel.User);
|
|
97
|
+
AddModel.SelectedLookupID = Number(ResultModel.Lookup);
|
|
98
|
+
AddModel.Value = ResultModel.LookupValue;
|
|
99
|
+
AddModel.DefaultValue = ResultModel.LookupDefaultValue;
|
|
100
|
+
AddModel.PermissionSetID = Number(ResultModel.PermissionSet);
|
|
101
|
+
AddModel.ValueSource = Number(ResultModel.Source);
|
|
102
|
+
let sourceItem = this.ValueSourceList.filter((item) => { return parseInt(item.key) == AddModel.ValueSource; }).map((item) => item)[0];
|
|
103
|
+
if (sourceItem != undefined) {
|
|
104
|
+
let ConfigurationDDLSourceName = sourceItem.value;
|
|
105
|
+
if (ConfigurationDDLSourceName == "Function") {
|
|
106
|
+
AddModel.Value = ResultModel.SourceFuncValue;
|
|
107
|
+
AddModel.DefaultValue = ResultModel.SourceFuncDefaultValue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
paramArray.push(AddModel);
|
|
111
|
+
return paramArray;
|
|
112
|
+
};
|
|
113
|
+
this.getAddConfigurationFunction = (AddModel) => {
|
|
114
|
+
return this.ConfigurationsService.addConfiguration(AddModel);
|
|
115
|
+
};
|
|
116
|
+
this.getEditConfigurationModel = () => {
|
|
117
|
+
let paramArray = [];
|
|
118
|
+
let ResultModel = this.EditConfigurationForm.value;
|
|
119
|
+
console.log(ResultModel);
|
|
120
|
+
let EditModel = new ConfigurationModel();
|
|
121
|
+
EditModel.ID = this.ConfigurationId;
|
|
122
|
+
EditModel.ValueType = this.ConfigurationValueType;
|
|
123
|
+
EditModel.ScopeId = this.EditConfigurationScopeID;
|
|
124
|
+
EditModel.Key = ResultModel.EditKey;
|
|
125
|
+
switch (this.EditConfigurationTypeID) {
|
|
126
|
+
case ConfigurationTypes.Text:
|
|
127
|
+
EditModel.TextValue = ResultModel.EditTextValue;
|
|
128
|
+
EditModel.DefaultTextValue = ResultModel.EditTextDefaultValue;
|
|
129
|
+
break;
|
|
130
|
+
case ConfigurationTypes.Toggle:
|
|
131
|
+
EditModel.BoolValue = ResultModel.EditValueToggele;
|
|
132
|
+
EditModel.DefaultBoolValue = ResultModel.EditDefaultValueToggele;
|
|
133
|
+
break;
|
|
134
|
+
case ConfigurationTypes.DDL:
|
|
135
|
+
if (this.EditConfigurationDDLSourceID == ConfigurationValueSource.Lookup) {
|
|
136
|
+
EditModel.SelectedLookupID = Number(ResultModel.EditLookup);
|
|
137
|
+
EditModel.Value = ResultModel.EditLookupValue;
|
|
138
|
+
EditModel.DefaultValue = ResultModel.EditLookupDefaultValue;
|
|
139
|
+
}
|
|
140
|
+
else if (this.EditConfigurationDDLSourceID == ConfigurationValueSource.Function) {
|
|
141
|
+
EditModel.SourceFunctionName = ResultModel.EditFunctionSourcePath;
|
|
142
|
+
EditModel.Value = ResultModel.EditSourceFuncValue;
|
|
143
|
+
EditModel.DefaultValue = ResultModel.EditSourceFuncDefaultValue;
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
if (this.EditConfigurationScopeID == ConfigurationScope.User) {
|
|
148
|
+
console.log(Number(ResultModel.EditUser));
|
|
149
|
+
EditModel.UserID = Number(ResultModel.EditUser);
|
|
150
|
+
}
|
|
151
|
+
else if (this.EditConfigurationScopeID == ConfigurationScope.PermissionSet)
|
|
152
|
+
EditModel.PermissionSetID = Number(ResultModel.EditPermissionSet);
|
|
153
|
+
paramArray.push(EditModel);
|
|
154
|
+
return paramArray;
|
|
155
|
+
};
|
|
156
|
+
this.getEditConfigurationFunction = (EditModel) => {
|
|
157
|
+
return this.ConfigurationsService.editConfiguration(EditModel);
|
|
158
|
+
};
|
|
159
|
+
this.deleteConfiguration = (id) => {
|
|
160
|
+
return this.ConfigurationsService.deleteConfiguration(id);
|
|
161
|
+
};
|
|
78
162
|
}
|
|
79
163
|
ngOnInit() {
|
|
80
164
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
165
|
this.ShowPageContent = true;
|
|
166
|
+
//Page header (breadcrumb and title)
|
|
82
167
|
PageInfoService.PageTitle = this.utilityService.getResourceValue("Configuration");
|
|
83
168
|
PageInfoService.PageBreadcrumbs = [
|
|
84
169
|
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
@@ -86,123 +171,156 @@ export class ConfigurationComponent {
|
|
|
86
171
|
];
|
|
87
172
|
this.pageInfoService.calculateTitle();
|
|
88
173
|
this.pageInfoService.calculateBreadcrumbs();
|
|
174
|
+
//on lang changed
|
|
89
175
|
this.bbsfTranslateService.onLangChange.subscribe((event) => {
|
|
90
176
|
this.ShowPageContent = false;
|
|
91
|
-
this.language = event.lang;
|
|
92
177
|
this.ngOnInit();
|
|
93
178
|
});
|
|
94
|
-
this.language = yield this.utilityService.getCurrentLanguage();
|
|
95
179
|
this.ProductionMode = this.environmentService.getProductionMode();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
LoadDropdownLists() {
|
|
100
|
-
this.ConfigurationsService.Loaddropdowns().subscribe((result) => {
|
|
101
|
-
let DropdownLists = result;
|
|
102
|
-
//console.log("DropdownLists:",DropdownLists)
|
|
103
|
-
this.ScopesList = DropdownLists.scopes;
|
|
104
|
-
this.PermissionList = DropdownLists.permissionList;
|
|
105
|
-
this.UsersList = DropdownLists.users;
|
|
106
|
-
this.LookupsList = DropdownLists.lookups;
|
|
107
|
-
this.ValueTypeList = DropdownLists.valueType;
|
|
108
|
-
this.ValueSourceList = DropdownLists.valueSource;
|
|
109
|
-
// TextBox inti
|
|
110
|
-
this.searchTextBox = new TextBoxOptions();
|
|
111
|
-
this.searchTextBox.Name = "searchTextBox";
|
|
112
|
-
this.searchTextBox.Type = InputType.Text;
|
|
113
|
-
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
114
|
-
this.searchTextBox.HideLabel = true;
|
|
115
|
-
this.TextInputFilter = new FilterItem();
|
|
116
|
-
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
117
|
-
this.TextInputFilter.ActionParameterName = "searchText";
|
|
118
|
-
this.TextInputFilter.IsFormControl = true;
|
|
119
|
-
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
120
|
-
this.ConfigurationPaging = new PagingOptions();
|
|
121
|
-
this.ConfigurationPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ApiUrl + 'GetConfigurationsByFilter';
|
|
122
|
-
this.ConfigurationPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
|
|
123
|
-
this.ConfigurationPaging.Filters = [this.TextInputFilter];
|
|
124
|
-
this.ConfigurationPaging.ValidationToken = this.authService.authorizationHeaderValue();
|
|
125
|
-
this.IsFilterLoaded = true;
|
|
180
|
+
//initialize page
|
|
181
|
+
this.initializePage();
|
|
126
182
|
});
|
|
127
183
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
184
|
+
initializePage() {
|
|
185
|
+
// TextBox init
|
|
186
|
+
this.searchTextBox = new TextBoxOptions();
|
|
187
|
+
this.searchTextBox.Name = "searchTextBox";
|
|
188
|
+
this.searchTextBox.Type = InputType.Text;
|
|
189
|
+
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
190
|
+
this.searchTextBox.HideLabel = true;
|
|
191
|
+
this.TextInputFilter = new FilterItem();
|
|
192
|
+
this.TextInputFilter.FormControlName = "searchTextBox";
|
|
193
|
+
this.TextInputFilter.ActionParameterName = "searchText";
|
|
194
|
+
this.TextInputFilter.IsFormControl = true;
|
|
195
|
+
this.TextInputFilter.FilterType = FilterType.TextBox;
|
|
196
|
+
this.ConfigurationPaging = new PagingOptions();
|
|
197
|
+
this.ConfigurationPaging.ActionPostURL = this.ApiUrl + 'GetConfigurationsByFilter';
|
|
198
|
+
this.ConfigurationPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
|
|
199
|
+
this.ConfigurationPaging.Filters = [this.TextInputFilter];
|
|
200
|
+
this.ConfigurationPaging.ValidationToken = this.authService.authorizationHeaderValue();
|
|
201
|
+
this.IsFilterLoaded = true;
|
|
135
202
|
}
|
|
203
|
+
//Paging functions
|
|
136
204
|
setConfigurationListResult(result) {
|
|
137
205
|
this.ConfigurationPagingResult = result;
|
|
206
|
+
this.clientSidePagingResult = result;
|
|
138
207
|
this.ShowPageContent = true;
|
|
139
208
|
this.utilityService.stopBlockUI();
|
|
140
209
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
210
|
+
searchClientSide(searchValue) {
|
|
211
|
+
if (searchValue)
|
|
212
|
+
this.clientSidePagingResult = this.clientSidePagingResult.filter(function (item) {
|
|
213
|
+
return item.key.toLowerCase().includes(searchValue.toLowerCase());
|
|
214
|
+
});
|
|
215
|
+
else
|
|
216
|
+
this.clientSidePagingResult = this.ConfigurationPagingResult;
|
|
145
217
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
218
|
+
//Add configuration
|
|
219
|
+
showAddConfigurationModal(AddConfigurationModal) {
|
|
220
|
+
this.utilityService.startBlockUI();
|
|
221
|
+
this.resetConfigurationFlags();
|
|
222
|
+
this.ConfigurationsService.loadAddDropdowns().subscribe((result) => {
|
|
223
|
+
//Lists loading
|
|
224
|
+
let resultObj = result;
|
|
225
|
+
this.ScopesList = resultObj.scopes;
|
|
226
|
+
this.PermissionList = resultObj.permissionList;
|
|
227
|
+
this.UsersList = resultObj.users;
|
|
228
|
+
this.LookupsList = resultObj.lookups;
|
|
229
|
+
this.ValueTypeList = resultObj.valueType;
|
|
230
|
+
this.ValueSourceList = resultObj.valueSource;
|
|
231
|
+
//Form and controls reinitialize
|
|
232
|
+
this.AddConfigurationForm = new FormGroup({});
|
|
233
|
+
this.AddConfigurationFormOptions = new FormOptions();
|
|
234
|
+
this.AddConfigurationFormOptions.FormGroup = this.AddConfigurationForm;
|
|
235
|
+
this.AddConfigurationFormOptions.GetModelFunction = this.getAddConfigurationModel;
|
|
236
|
+
this.AddConfigurationFormOptions.ServiceSubmitFunction = this.getAddConfigurationFunction;
|
|
237
|
+
this.AddConfigurationFormOptions.PagingReference = this.pagingElement;
|
|
238
|
+
//Static controls
|
|
239
|
+
this.Key = new TextBoxOptions();
|
|
240
|
+
this.Key.Name = "Key";
|
|
241
|
+
this.Key.LabelKey = "Key";
|
|
242
|
+
this.Key.Type = InputType.Text;
|
|
243
|
+
this.Key.IsRequired = true;
|
|
244
|
+
this.Key.Value = null;
|
|
245
|
+
this.Scope = new DropdownOptions();
|
|
246
|
+
this.Scope.Name = "Scope";
|
|
247
|
+
this.Scope.LabelKey = "Scope";
|
|
248
|
+
this.Scope.SelectedItems = null;
|
|
249
|
+
this.Scope.DataSource = this.ScopesList;
|
|
250
|
+
this.Scope.SingleSelection = true;
|
|
251
|
+
this.Scope.AllowSearchFilter = true;
|
|
252
|
+
this.Scope.IsRequired = true;
|
|
253
|
+
this.Type = new DropdownOptions();
|
|
254
|
+
this.Type.Name = "Type";
|
|
255
|
+
this.Type.LabelKey = "Type";
|
|
256
|
+
this.Type.SelectedItems = null;
|
|
257
|
+
this.Type.DataSource = this.ValueTypeList;
|
|
258
|
+
this.Type.SingleSelection = true;
|
|
259
|
+
this.Type.AllowSearchFilter = true;
|
|
260
|
+
this.Type.IsRequired = true;
|
|
261
|
+
this.PermissionSet = new DropdownOptions();
|
|
262
|
+
this.PermissionSet.Name = "PermissionSet";
|
|
263
|
+
this.PermissionSet.LabelKey = "PermissionSet";
|
|
264
|
+
this.PermissionSet.SelectedItems = null;
|
|
265
|
+
this.PermissionSet.DataSource = this.PermissionList;
|
|
266
|
+
this.PermissionSet.SingleSelection = true;
|
|
267
|
+
this.PermissionSet.AllowSearchFilter = true;
|
|
268
|
+
this.PermissionSet.IsRequired = true;
|
|
269
|
+
this.User = new DropdownOptions();
|
|
270
|
+
this.User.Name = "User";
|
|
271
|
+
this.User.LabelKey = "User";
|
|
272
|
+
this.User.SelectedItems = null;
|
|
273
|
+
this.User.DataSource = this.UsersList;
|
|
274
|
+
this.User.SingleSelection = true;
|
|
275
|
+
this.User.AllowSearchFilter = true;
|
|
276
|
+
this.User.IsRequired = true;
|
|
277
|
+
this.modalService.open(AddConfigurationModal);
|
|
278
|
+
this.utilityService.stopBlockUI();
|
|
279
|
+
});
|
|
169
280
|
}
|
|
281
|
+
//Required Functions for Add
|
|
170
282
|
ChangeTypeValue(key) {
|
|
171
283
|
let typeItem = this.ValueTypeList.filter((item) => { return parseInt(item.key) == key; }).map((item) => item)[0];
|
|
172
|
-
|
|
284
|
+
this.resetConfigurationFlags();
|
|
285
|
+
this.removeFormControls();
|
|
173
286
|
switch (typeItem.value) {
|
|
174
287
|
case "Text":
|
|
288
|
+
this.Value = new TextBoxOptions();
|
|
289
|
+
this.Value.Name = "Value";
|
|
290
|
+
this.Value.LabelKey = "Value";
|
|
291
|
+
this.Value.Type = InputType.Text;
|
|
292
|
+
this.Value.Value = null;
|
|
293
|
+
this.Value.IsRequired = true;
|
|
294
|
+
this.DefaultValue = new TextBoxOptions();
|
|
295
|
+
this.DefaultValue.Name = "DefaultValue";
|
|
296
|
+
this.DefaultValue.LabelKey = "DefaultValue";
|
|
297
|
+
this.DefaultValue.Type = InputType.Text;
|
|
298
|
+
this.DefaultValue.Value = null;
|
|
299
|
+
this.DefaultValue.IsRequired = true;
|
|
175
300
|
this.ShowValueAndDefaultValue = true;
|
|
176
|
-
this.ShowValueToggleAndDefaultValue = false;
|
|
177
|
-
this.ShowSourcePath = false;
|
|
178
|
-
this.ShowDropDownSource = false;
|
|
179
|
-
this.ShowLookupList = false;
|
|
180
|
-
this.ShowLookupItemsList = false;
|
|
181
|
-
this.AddConfigurationForm.removeControl("Source");
|
|
182
301
|
break;
|
|
183
302
|
case "Toggle":
|
|
184
|
-
this.
|
|
303
|
+
this.ValueToggel = new ToggleSlideOptions();
|
|
304
|
+
this.ValueToggel.Name = "ValueToggel";
|
|
305
|
+
this.ValueToggel.LabelKey = "Value";
|
|
306
|
+
this.ValueToggel.Value = false;
|
|
307
|
+
this.ValueToggel.ViewType = ControlLayout.Horizontal;
|
|
308
|
+
this.DefaultValueToggel = new ToggleSlideOptions();
|
|
309
|
+
this.DefaultValueToggel.Name = "DefaultValueToggel";
|
|
310
|
+
this.DefaultValueToggel.LabelKey = "DefaultValue";
|
|
311
|
+
this.DefaultValueToggel.Value = false;
|
|
312
|
+
this.DefaultValueToggel.ViewType = ControlLayout.Horizontal;
|
|
185
313
|
this.ShowValueToggleAndDefaultValue = true;
|
|
186
|
-
this.ShowSourcePath = false;
|
|
187
|
-
this.ShowDropDownSource = false;
|
|
188
|
-
this.ShowLookupList = false;
|
|
189
|
-
this.ShowLookupItemsList = false;
|
|
190
|
-
this.AddConfigurationForm.removeControl("Source");
|
|
191
|
-
break;
|
|
192
|
-
case "Partial View":
|
|
193
|
-
this.ShowValueAndDefaultValue = false;
|
|
194
|
-
this.ShowValueToggleAndDefaultValue = false;
|
|
195
|
-
this.ShowSourcePath = true;
|
|
196
|
-
this.ShowDropDownSource = false;
|
|
197
|
-
this.ShowLookupList = false;
|
|
198
|
-
this.ShowLookupItemsList = false;
|
|
199
|
-
this.AddConfigurationForm.removeControl("Source");
|
|
200
314
|
break;
|
|
201
315
|
case "Dropdown List":
|
|
202
|
-
this.
|
|
203
|
-
this.
|
|
204
|
-
this.
|
|
205
|
-
this.
|
|
316
|
+
this.Source = new DropdownOptions();
|
|
317
|
+
this.Source.Name = "Source";
|
|
318
|
+
this.Source.LabelKey = "Source";
|
|
319
|
+
this.Source.SelectedItems = null;
|
|
320
|
+
this.Source.DataSource = this.ValueSourceList;
|
|
321
|
+
this.Source.SingleSelection = true;
|
|
322
|
+
this.Source.AllowSearchFilter = true;
|
|
323
|
+
this.Source.IsRequired = true;
|
|
206
324
|
this.ShowDropDownSource = true;
|
|
207
325
|
break;
|
|
208
326
|
default:
|
|
@@ -210,15 +328,37 @@ export class ConfigurationComponent {
|
|
|
210
328
|
}
|
|
211
329
|
}
|
|
212
330
|
ChangeSource(key) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
331
|
+
switch (key) {
|
|
332
|
+
case ConfigurationValueSource.Lookup:
|
|
333
|
+
this.AddConfigurationForm.removeControl("FunctionSourcePath");
|
|
334
|
+
this.AddConfigurationForm.removeControl("SourceFuncValue");
|
|
335
|
+
this.AddConfigurationForm.removeControl("SourceFuncDefaultValue");
|
|
336
|
+
this.Lookup = new DropdownOptions();
|
|
337
|
+
this.Lookup.Name = "Lookup";
|
|
338
|
+
this.Lookup.LabelKey = "Lookup";
|
|
339
|
+
this.Lookup.SelectedItems = null;
|
|
340
|
+
this.Lookup.DataSource = this.LookupsList;
|
|
341
|
+
this.Lookup.SingleSelection = true;
|
|
342
|
+
this.Lookup.AllowSearchFilter = true;
|
|
343
|
+
this.Lookup.IsRequired = true;
|
|
217
344
|
this.ShowLookupList = true;
|
|
218
345
|
this.ShowSourceFunctionPath = false;
|
|
346
|
+
this.ShowSourceFunctionData = false;
|
|
347
|
+
this.sourceFunctionDataNotLoaded = false;
|
|
219
348
|
break;
|
|
220
|
-
case
|
|
349
|
+
case ConfigurationValueSource.Function:
|
|
350
|
+
this.AddConfigurationForm.removeControl("Lookup");
|
|
351
|
+
this.AddConfigurationForm.removeControl("LookupValue");
|
|
352
|
+
this.AddConfigurationForm.removeControl("LookupDefaultValue");
|
|
353
|
+
this.FunctionSourcePath = new TextBoxOptions();
|
|
354
|
+
this.FunctionSourcePath.Name = "FunctionSourcePath";
|
|
355
|
+
this.FunctionSourcePath.LabelValue = "SourcePath";
|
|
356
|
+
this.FunctionSourcePath.LabelKey = "SourcePath";
|
|
357
|
+
this.FunctionSourcePath.Type = InputType.Text;
|
|
358
|
+
this.FunctionSourcePath.Value = null;
|
|
359
|
+
this.FunctionSourcePath.IsRequired = true;
|
|
221
360
|
this.ShowSourceFunctionPath = true;
|
|
361
|
+
this.sourceFunctionDataNotLoaded = true;
|
|
222
362
|
this.ShowLookupList = false;
|
|
223
363
|
this.ShowLookupItemsList = false;
|
|
224
364
|
break;
|
|
@@ -226,8 +366,21 @@ export class ConfigurationComponent {
|
|
|
226
366
|
break;
|
|
227
367
|
}
|
|
228
368
|
}
|
|
369
|
+
removeFormControls() {
|
|
370
|
+
this.AddConfigurationForm.removeControl("Value");
|
|
371
|
+
this.AddConfigurationForm.removeControl("DefaultValue");
|
|
372
|
+
this.AddConfigurationForm.removeControl("ValueToggel");
|
|
373
|
+
this.AddConfigurationForm.removeControl("DefaultValueToggel");
|
|
374
|
+
this.AddConfigurationForm.removeControl("Source");
|
|
375
|
+
this.AddConfigurationForm.removeControl("Lookup");
|
|
376
|
+
this.AddConfigurationForm.removeControl("LookupValue");
|
|
377
|
+
this.AddConfigurationForm.removeControl("LookupDefaultValue");
|
|
378
|
+
this.AddConfigurationForm.removeControl("FunctionSourcePath");
|
|
379
|
+
this.AddConfigurationForm.removeControl("SourceFuncValue");
|
|
380
|
+
this.AddConfigurationForm.removeControl("SourceFuncDefaultValue");
|
|
381
|
+
}
|
|
229
382
|
ChangeLookup(key) {
|
|
230
|
-
this.ConfigurationsService.
|
|
383
|
+
this.ConfigurationsService.loadLookupItems(key).subscribe((result) => {
|
|
231
384
|
let Result = result;
|
|
232
385
|
this.LookupItemsList = Result.lookupItems;
|
|
233
386
|
this.LookupValue = new DropdownOptions();
|
|
@@ -251,194 +404,39 @@ export class ConfigurationComponent {
|
|
|
251
404
|
}, (error) => {
|
|
252
405
|
});
|
|
253
406
|
}
|
|
254
|
-
|
|
255
|
-
this.ShowLookupItemsList = false;
|
|
256
|
-
this.ConfigurationsService.LoadLookupItems(key).subscribe((result) => {
|
|
257
|
-
let Result = result;
|
|
258
|
-
let LookupItemsListEdit = Result.lookupItems;
|
|
259
|
-
//Resinitialize lookup values and default values
|
|
260
|
-
this.EditLookupValue = new DropdownOptions();
|
|
261
|
-
this.EditLookupValue.Name = "EditLookupValue";
|
|
262
|
-
this.EditLookupValue.LabelKey = "Value";
|
|
263
|
-
this.EditLookupValue.SelectedItems = null;
|
|
264
|
-
this.EditLookupValue.DataSource = LookupItemsListEdit;
|
|
265
|
-
this.EditLookupValue.SingleSelection = true;
|
|
266
|
-
this.EditLookupValue.AllowSearchFilter = true;
|
|
267
|
-
this.EditLookupValue.IsRequired = true;
|
|
268
|
-
this.EditLookupDefaultValue = new DropdownOptions();
|
|
269
|
-
this.EditLookupDefaultValue.Name = "EditLookupDefaultValue";
|
|
270
|
-
this.EditLookupDefaultValue.LabelKey = "DefaultValue";
|
|
271
|
-
this.EditLookupDefaultValue.SelectedItems = null;
|
|
272
|
-
this.EditLookupDefaultValue.DataSource = LookupItemsListEdit;
|
|
273
|
-
this.EditLookupDefaultValue.SingleSelection = true;
|
|
274
|
-
this.EditLookupDefaultValue.AllowSearchFilter = true;
|
|
275
|
-
this.EditLookupDefaultValue.IsRequired = true;
|
|
276
|
-
this.ShowLookupItemsList = true;
|
|
277
|
-
}, (error) => {
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
showAddConfigurationModal(AddConfigurationModal) {
|
|
281
|
-
this.AddConfigurationForm = new FormGroup({});
|
|
282
|
-
this.ShowPermissionList = false;
|
|
283
|
-
this.ShowUsersList = false;
|
|
284
|
-
this.ShowValueAndDefaultValue = false;
|
|
285
|
-
this.ShowValueToggleAndDefaultValue = false;
|
|
286
|
-
this.ShowSourcePath = false;
|
|
287
|
-
this.ShowDropDownSource = false;
|
|
288
|
-
this.ShowLookupList = false;
|
|
289
|
-
this.ShowLookupItemsList = false;
|
|
290
|
-
this.ShowSourceFunctionPath = false;
|
|
291
|
-
this.ShowLookupList = false;
|
|
292
|
-
this.ShowLookupItemsList = false;
|
|
293
|
-
this.utilityService.startBlockUI();
|
|
294
|
-
this.Key = new TextBoxOptions();
|
|
295
|
-
this.Key.Name = "Key";
|
|
296
|
-
this.Key.LabelKey = "Key";
|
|
297
|
-
this.Key.Type = InputType.Text;
|
|
298
|
-
this.Key.IsRequired = true;
|
|
299
|
-
this.Key.Value = null;
|
|
300
|
-
this.Value = new TextBoxOptions();
|
|
301
|
-
this.Value.Name = "Value";
|
|
302
|
-
this.Value.LabelKey = "Value";
|
|
303
|
-
this.Value.Type = InputType.Text;
|
|
304
|
-
this.Value.Value = null;
|
|
305
|
-
this.Value.IsRequired = true;
|
|
306
|
-
this.DefaultValue = new TextBoxOptions();
|
|
307
|
-
this.DefaultValue.Name = "DefaultValue";
|
|
308
|
-
this.DefaultValue.LabelKey = "DefaultValue";
|
|
309
|
-
this.DefaultValue.Type = InputType.Text;
|
|
310
|
-
this.DefaultValue.Value = null;
|
|
311
|
-
this.DefaultValue.IsRequired = true;
|
|
312
|
-
this.SourcePath = new TextBoxOptions();
|
|
313
|
-
this.SourcePath.Name = "SourcePath";
|
|
314
|
-
this.SourcePath.LabelValue = "SourcePath";
|
|
315
|
-
this.SourcePath.LabelKey = "SourcePath";
|
|
316
|
-
this.SourcePath.Type = InputType.Text;
|
|
317
|
-
this.SourcePath.Value = null;
|
|
318
|
-
this.FunctionSourcePath = new TextBoxOptions();
|
|
319
|
-
this.FunctionSourcePath.Name = "FunctionSourcePath";
|
|
320
|
-
this.FunctionSourcePath.LabelValue = "SourcePath";
|
|
321
|
-
this.FunctionSourcePath.LabelKey = "SourcePath";
|
|
322
|
-
this.FunctionSourcePath.Type = InputType.Text;
|
|
323
|
-
this.FunctionSourcePath.Value = null;
|
|
324
|
-
this.ValueToggel = new ToggleSlideOptions();
|
|
325
|
-
this.ValueToggel.Name = "ValueToggel";
|
|
326
|
-
this.ValueToggel.LabelKey = "Value";
|
|
327
|
-
this.ValueToggel.Value = false;
|
|
328
|
-
this.ValueToggel.ViewType = ControlLayout.Horizontal;
|
|
329
|
-
this.DefaultValueToggel = new ToggleSlideOptions();
|
|
330
|
-
this.DefaultValueToggel.Name = "DefaultValueToggel";
|
|
331
|
-
this.DefaultValueToggel.LabelKey = "DefaultValue";
|
|
332
|
-
this.DefaultValueToggel.Value = false;
|
|
333
|
-
this.DefaultValueToggel.ViewType = ControlLayout.Horizontal;
|
|
334
|
-
this.Scope = new DropdownOptions();
|
|
335
|
-
this.Scope.Name = "Scope";
|
|
336
|
-
this.Scope.LabelKey = "Scope";
|
|
337
|
-
this.Scope.SelectedItems = null;
|
|
338
|
-
this.Scope.DataSource = this.ScopesList;
|
|
339
|
-
this.Scope.SingleSelection = true;
|
|
340
|
-
this.Scope.AllowSearchFilter = true;
|
|
341
|
-
this.Scope.IsRequired = true;
|
|
342
|
-
this.Type = new DropdownOptions();
|
|
343
|
-
this.Type.Name = "Type";
|
|
344
|
-
this.Type.LabelKey = "Type";
|
|
345
|
-
this.Type.SelectedItems = null;
|
|
346
|
-
this.Type.DataSource = this.ValueTypeList;
|
|
347
|
-
this.Type.SingleSelection = true;
|
|
348
|
-
this.Type.AllowSearchFilter = true;
|
|
349
|
-
this.Type.IsRequired = true;
|
|
350
|
-
this.PermissionSet = new DropdownOptions();
|
|
351
|
-
this.PermissionSet.Name = "PermissionSet";
|
|
352
|
-
this.PermissionSet.LabelKey = "PermissionSet";
|
|
353
|
-
this.PermissionSet.SelectedItems = null;
|
|
354
|
-
this.PermissionSet.DataSource = this.PermissionList;
|
|
355
|
-
this.PermissionSet.SingleSelection = true;
|
|
356
|
-
this.PermissionSet.AllowSearchFilter = true;
|
|
357
|
-
this.PermissionSet.IsRequired = true;
|
|
358
|
-
this.User = new DropdownOptions();
|
|
359
|
-
this.User.Name = "User";
|
|
360
|
-
this.User.LabelKey = "User";
|
|
361
|
-
this.User.SelectedItems = null;
|
|
362
|
-
this.User.DataSource = this.UsersList;
|
|
363
|
-
this.User.SingleSelection = true;
|
|
364
|
-
this.User.AllowSearchFilter = true;
|
|
365
|
-
this.User.IsRequired = true;
|
|
366
|
-
this.Source = new DropdownOptions();
|
|
367
|
-
this.Source.Name = "Source";
|
|
368
|
-
this.Source.LabelKey = "Source";
|
|
369
|
-
this.Source.SelectedItems = null;
|
|
370
|
-
this.Source.DataSource = this.ValueSourceList;
|
|
371
|
-
this.Source.SingleSelection = true;
|
|
372
|
-
this.Source.AllowSearchFilter = true;
|
|
373
|
-
this.Source.IsRequired = true;
|
|
374
|
-
this.Lookup = new DropdownOptions();
|
|
375
|
-
this.Lookup.Name = "Lookup";
|
|
376
|
-
this.Lookup.LabelKey = "Lookup";
|
|
377
|
-
this.Lookup.SelectedItems = null;
|
|
378
|
-
this.Lookup.DataSource = this.LookupsList;
|
|
379
|
-
this.Lookup.SingleSelection = true;
|
|
380
|
-
this.Lookup.AllowSearchFilter = true;
|
|
381
|
-
this.Lookup.IsRequired = true;
|
|
382
|
-
this.modalService.open(AddConfigurationModal);
|
|
383
|
-
this.utilityService.stopBlockUI();
|
|
384
|
-
}
|
|
385
|
-
addConfiguration() {
|
|
386
|
-
if (this.AddConfigurationForm.invalid) {
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
let ResultModel = this.AddConfigurationForm.value;
|
|
391
|
-
let AddModel = new ConfigurationModel();
|
|
392
|
-
AddModel.Key = ResultModel.Key;
|
|
393
|
-
AddModel.ScopeId = Number(ResultModel.Scope);
|
|
394
|
-
AddModel.ValueType = Number(ResultModel.Type);
|
|
395
|
-
AddModel.TextValue = ResultModel.Value;
|
|
396
|
-
AddModel.DefaultTextValue = ResultModel.DefaultValue;
|
|
397
|
-
AddModel.BoolValue = ResultModel.ValueToggel;
|
|
398
|
-
AddModel.DefaultBoolValue = ResultModel.DefaultValueToggel;
|
|
399
|
-
AddModel.SourcePartialViewActionName = ResultModel.SourcePath;
|
|
400
|
-
AddModel.SourceFunctionName = ResultModel.FunctionSourcePath;
|
|
401
|
-
AddModel.UserID = Number(ResultModel.User);
|
|
402
|
-
AddModel.SelectedLookupID = Number(ResultModel.Lookup);
|
|
403
|
-
AddModel.Value = ResultModel.LookupValue;
|
|
404
|
-
AddModel.DefaultValue = ResultModel.LookupDefaultValue;
|
|
405
|
-
AddModel.PermissionSetID = Number(ResultModel.PermissionSet);
|
|
406
|
-
AddModel.ValueSource = Number(ResultModel.Source);
|
|
407
|
-
let sourceItem = this.ValueSourceList.filter((item) => { return parseInt(item.key) == AddModel.ValueSource; }).map((item) => item)[0];
|
|
408
|
-
if (sourceItem != undefined) {
|
|
409
|
-
let ConfigurationDDLSourceName = sourceItem.value;
|
|
410
|
-
if (ConfigurationDDLSourceName == "Function") {
|
|
411
|
-
AddModel.Value = ResultModel.SourceFuncValue;
|
|
412
|
-
AddModel.DefaultValue = ResultModel.SourceFuncDefaultValue;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
this.ConfigurationsService.AddConfiguration(AddModel).subscribe((result) => {
|
|
416
|
-
this.modalService.dismissAll();
|
|
417
|
-
let element = this.input;
|
|
418
|
-
element.ReinitializePaging();
|
|
419
|
-
}, (error) => {
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
}
|
|
407
|
+
//Edit configuration
|
|
423
408
|
showEditConfigurationModal(configurationId, configurationIDEnc, EditConfigurationModal) {
|
|
424
|
-
this.
|
|
409
|
+
this.ConfigurationId = configurationId;
|
|
425
410
|
this.resetConfigurationFlags();
|
|
426
|
-
this.ConfigurationsService.
|
|
427
|
-
let
|
|
428
|
-
|
|
411
|
+
this.ConfigurationsService.getEditConfigurationData(configurationIDEnc).subscribe((result) => {
|
|
412
|
+
let resultObj = result;
|
|
413
|
+
//Edit model
|
|
414
|
+
let configuration = resultObj.model;
|
|
415
|
+
//Load lookups list
|
|
416
|
+
this.LookupsList = resultObj.lookups;
|
|
417
|
+
//Load lookupItems list
|
|
418
|
+
let lookupItems = resultObj.lookupItemsSource;
|
|
419
|
+
//Form and controls reinitialize
|
|
420
|
+
this.EditConfigurationForm = new FormGroup({});
|
|
421
|
+
this.EditConfigurationFormOptions = new FormOptions();
|
|
422
|
+
this.EditConfigurationFormOptions.FormGroup = this.EditConfigurationForm;
|
|
423
|
+
this.EditConfigurationFormOptions.GetModelFunction = this.getEditConfigurationModel;
|
|
424
|
+
this.EditConfigurationFormOptions.ServiceSubmitFunction = this.getEditConfigurationFunction;
|
|
425
|
+
this.EditConfigurationFormOptions.PagingReference = this.pagingElement;
|
|
426
|
+
this.EditConfigurationFormOptions.PagingActionMode = PagingActionMode.Update;
|
|
429
427
|
this.ConfigurationValueType = configuration.valueType;
|
|
428
|
+
this.EditConfigurationScopeID = configuration.scopeId;
|
|
430
429
|
this.EditKey = new TextBoxOptions();
|
|
431
430
|
this.EditKey.Name = "EditKey";
|
|
432
431
|
this.EditKey.LabelKey = "Key";
|
|
433
432
|
this.EditKey.Type = InputType.Text;
|
|
434
|
-
this.EditKey.IsRequired =
|
|
433
|
+
this.EditKey.IsRequired = !this.ProductionMode;
|
|
435
434
|
this.EditKey.Value = configuration.key;
|
|
436
435
|
this.EditKey.MaxLength = 256;
|
|
437
|
-
this.EditKey.IsDisabled = this.ProductionMode
|
|
438
|
-
|
|
439
|
-
this.
|
|
440
|
-
|
|
441
|
-
case "Text":
|
|
436
|
+
this.EditKey.IsDisabled = this.ProductionMode;
|
|
437
|
+
this.EditConfigurationTypeID = configuration.valueType;
|
|
438
|
+
switch (this.EditConfigurationTypeID) {
|
|
439
|
+
case ConfigurationTypes.Text:
|
|
442
440
|
this.ShowValueAndDefaultValue = true;
|
|
443
441
|
this.EditTextValue = new TextBoxOptions();
|
|
444
442
|
this.EditTextValue.Name = "EditTextValue";
|
|
@@ -453,7 +451,7 @@ export class ConfigurationComponent {
|
|
|
453
451
|
this.EditTextDefaultValue.Value = configuration.defaultTextValue;
|
|
454
452
|
this.EditTextDefaultValue.IsRequired = true;
|
|
455
453
|
break;
|
|
456
|
-
case
|
|
454
|
+
case ConfigurationTypes.Toggle:
|
|
457
455
|
this.ShowValueToggleAndDefaultValue = true;
|
|
458
456
|
this.EditValueToggele = new ToggleSlideOptions();
|
|
459
457
|
this.EditValueToggele.Name = "EditValueToggele";
|
|
@@ -466,11 +464,10 @@ export class ConfigurationComponent {
|
|
|
466
464
|
this.EditDefaultValueToggele.Value = configuration.defaultBoolValue;
|
|
467
465
|
this.EditDefaultValueToggele.ViewType = ControlLayout.Horizontal;
|
|
468
466
|
break;
|
|
469
|
-
case
|
|
470
|
-
|
|
471
|
-
this.
|
|
472
|
-
|
|
473
|
-
case "Lookup":
|
|
467
|
+
case ConfigurationTypes.DDL:
|
|
468
|
+
this.EditConfigurationDDLSourceID = configuration.valueSource;
|
|
469
|
+
switch (this.EditConfigurationDDLSourceID) {
|
|
470
|
+
case ConfigurationValueSource.Lookup:
|
|
474
471
|
this.ShowLookupList = true;
|
|
475
472
|
this.ShowLookupItemsList = true;
|
|
476
473
|
let selectedLookup = this.LookupsList.filter((item) => { return item.key == configuration.selectedLookupID; }).map((item) => item.key)[0];
|
|
@@ -483,33 +480,33 @@ export class ConfigurationComponent {
|
|
|
483
480
|
this.EditLookup.AllowSearchFilter = true;
|
|
484
481
|
this.EditLookup.IsRequired = true;
|
|
485
482
|
this.EditLookup.SelectedItems = selectedLookup;
|
|
486
|
-
let selectedLookupValue =
|
|
483
|
+
let selectedLookupValue = lookupItems.filter((item) => { return item.key == configuration.value; }).map((item) => item.key)[0];
|
|
487
484
|
this.EditLookupValue = new DropdownOptions();
|
|
488
485
|
this.EditLookupValue.Name = "EditLookupValue";
|
|
489
486
|
this.EditLookupValue.LabelKey = "Value";
|
|
490
|
-
this.EditLookupValue.DataSource =
|
|
487
|
+
this.EditLookupValue.DataSource = lookupItems;
|
|
491
488
|
this.EditLookupValue.SingleSelection = true;
|
|
492
489
|
this.EditLookupValue.AllowSearchFilter = true;
|
|
493
490
|
this.EditLookupValue.IsRequired = true;
|
|
494
491
|
this.EditLookupValue.SelectedItems = selectedLookupValue;
|
|
495
|
-
let selectedLookupDefaultValue =
|
|
492
|
+
let selectedLookupDefaultValue = lookupItems.filter((item) => { return item.key == configuration.defaultValue; }).map((item) => item.key)[0];
|
|
496
493
|
this.EditLookupDefaultValue = new DropdownOptions();
|
|
497
494
|
this.EditLookupDefaultValue.Name = "EditLookupDefaultValue";
|
|
498
495
|
this.EditLookupDefaultValue.LabelKey = "DefaultValue";
|
|
499
|
-
this.EditLookupDefaultValue.DataSource =
|
|
496
|
+
this.EditLookupDefaultValue.DataSource = lookupItems;
|
|
500
497
|
this.EditLookupDefaultValue.SingleSelection = true;
|
|
501
498
|
this.EditLookupDefaultValue.AllowSearchFilter = true;
|
|
502
499
|
this.EditLookupDefaultValue.IsRequired = true;
|
|
503
500
|
this.EditLookupDefaultValue.SelectedItems = selectedLookupDefaultValue;
|
|
504
501
|
break;
|
|
505
|
-
case
|
|
502
|
+
case ConfigurationValueSource.Function:
|
|
506
503
|
this.EditFunctionSourcePath = new TextBoxOptions();
|
|
507
504
|
this.EditFunctionSourcePath.Name = "EditFunctionSourcePath";
|
|
508
505
|
this.EditFunctionSourcePath.LabelKey = "SourcePath";
|
|
509
506
|
this.EditFunctionSourcePath.Type = InputType.Text;
|
|
510
507
|
this.EditFunctionSourcePath.Value = configuration.sourceFunctionName;
|
|
511
508
|
this.EditFunctionSourcePath.IsRequired = true;
|
|
512
|
-
this.ConfigurationsService.
|
|
509
|
+
this.ConfigurationsService.loadSourceFunctionDropDownItems(configuration.sourceFunctionName).subscribe((result) => {
|
|
513
510
|
let selectedSourceFuncValue = result.filter((item) => { return item.key == configuration.value; }).map((item) => item.key)[0];
|
|
514
511
|
this.EditSourceFuncValue = new DropdownOptions();
|
|
515
512
|
this.EditSourceFuncValue.Name = "EditSourceFuncValue";
|
|
@@ -529,6 +526,7 @@ export class ConfigurationComponent {
|
|
|
529
526
|
this.EditSourceFuncDefaultValue.IsRequired = true;
|
|
530
527
|
this.EditSourceFuncDefaultValue.SelectedItems = selectedSourceFuncDefaultValue;
|
|
531
528
|
this.ShowSourceFunctionPath = true;
|
|
529
|
+
this.ShowSourceFunctionData = true;
|
|
532
530
|
}, (error) => {
|
|
533
531
|
});
|
|
534
532
|
break;
|
|
@@ -539,11 +537,10 @@ export class ConfigurationComponent {
|
|
|
539
537
|
default:
|
|
540
538
|
break;
|
|
541
539
|
}
|
|
542
|
-
|
|
543
|
-
this.EditConfigurationScopeName = scopItem.value;
|
|
540
|
+
this.EditConfigurationScopeID = configuration.scopeId;
|
|
544
541
|
//console.log(scopItem);
|
|
545
|
-
switch (this.
|
|
546
|
-
case
|
|
542
|
+
switch (this.EditConfigurationScopeID) {
|
|
543
|
+
case ConfigurationScope.PermissionSet:
|
|
547
544
|
this.ShowPermissionList = true;
|
|
548
545
|
let selectedPermissionSet = this.PermissionList.filter((item) => { return item.key == configuration.permissionSetID; }).map((item) => item.key)[0];
|
|
549
546
|
this.EditPermissionSet = new DropdownOptions();
|
|
@@ -556,7 +553,7 @@ export class ConfigurationComponent {
|
|
|
556
553
|
this.EditPermissionSet.IsRequired = true;
|
|
557
554
|
this.EditPermissionSet.SelectedItems = selectedPermissionSet;
|
|
558
555
|
break;
|
|
559
|
-
case
|
|
556
|
+
case ConfigurationScope.User:
|
|
560
557
|
this.ShowUsersList = true;
|
|
561
558
|
let selectedUser = this.UsersList.filter((item) => { return item.key == configuration.userID; }).map((item) => item.key)[0];
|
|
562
559
|
this.EditUser = new DropdownOptions();
|
|
@@ -573,26 +570,80 @@ export class ConfigurationComponent {
|
|
|
573
570
|
break;
|
|
574
571
|
}
|
|
575
572
|
this.modalService.open(EditConfigurationModal);
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
ChangeEditLookup(key) {
|
|
576
|
+
this.ShowLookupItemsList = false;
|
|
577
|
+
this.ConfigurationsService.loadLookupItems(key).subscribe((result) => {
|
|
578
|
+
let Result = result;
|
|
579
|
+
let LookupItemsListEdit = Result.lookupItems;
|
|
580
|
+
//Resinitialize lookup values and default values
|
|
581
|
+
this.EditLookupValue = new DropdownOptions();
|
|
582
|
+
this.EditLookupValue.Name = "EditLookupValue";
|
|
583
|
+
this.EditLookupValue.LabelKey = "Value";
|
|
584
|
+
this.EditLookupValue.SelectedItems = null;
|
|
585
|
+
this.EditLookupValue.DataSource = LookupItemsListEdit;
|
|
586
|
+
this.EditLookupValue.SingleSelection = true;
|
|
587
|
+
this.EditLookupValue.AllowSearchFilter = true;
|
|
588
|
+
this.EditLookupValue.IsRequired = true;
|
|
589
|
+
this.EditLookupDefaultValue = new DropdownOptions();
|
|
590
|
+
this.EditLookupDefaultValue.Name = "EditLookupDefaultValue";
|
|
591
|
+
this.EditLookupDefaultValue.LabelKey = "DefaultValue";
|
|
592
|
+
this.EditLookupDefaultValue.SelectedItems = null;
|
|
593
|
+
this.EditLookupDefaultValue.DataSource = LookupItemsListEdit;
|
|
594
|
+
this.EditLookupDefaultValue.SingleSelection = true;
|
|
595
|
+
this.EditLookupDefaultValue.AllowSearchFilter = true;
|
|
596
|
+
this.EditLookupDefaultValue.IsRequired = true;
|
|
597
|
+
this.ShowLookupItemsList = true;
|
|
576
598
|
}, (error) => {
|
|
577
599
|
});
|
|
578
600
|
}
|
|
601
|
+
//Add,Edit required functions
|
|
602
|
+
ChangeScopeValue(key) {
|
|
603
|
+
let scopItem = this.ScopesList.filter((item) => { return parseInt(item.key) == key; }).map((item) => item)[0];
|
|
604
|
+
switch (scopItem.value) {
|
|
605
|
+
case "App":
|
|
606
|
+
this.ShowPermissionList = false;
|
|
607
|
+
this.ShowUsersList = false;
|
|
608
|
+
this.AddConfigurationForm.removeControl("User");
|
|
609
|
+
this.AddConfigurationForm.removeControl("PermissionSet");
|
|
610
|
+
break;
|
|
611
|
+
case "Permission set":
|
|
612
|
+
this.ShowPermissionList = true;
|
|
613
|
+
this.ShowUsersList = false;
|
|
614
|
+
this.AddConfigurationForm.removeControl("User");
|
|
615
|
+
break;
|
|
616
|
+
case "User":
|
|
617
|
+
this.ShowPermissionList = false;
|
|
618
|
+
this.ShowUsersList = true;
|
|
619
|
+
this.AddConfigurationForm.removeControl("PermissionSet");
|
|
620
|
+
break;
|
|
621
|
+
default:
|
|
622
|
+
break;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
579
625
|
resetConfigurationFlags() {
|
|
580
626
|
this.ShowPermissionList = false;
|
|
581
627
|
this.ShowUsersList = false;
|
|
582
628
|
this.ShowLookupList = false;
|
|
583
629
|
this.ShowValueAndDefaultValue = false;
|
|
584
630
|
this.ShowValueToggleAndDefaultValue = false;
|
|
585
|
-
this.ShowSourcePath = false;
|
|
586
631
|
this.ShowSourceFunctionPath = false;
|
|
632
|
+
this.showFunctionNotFoundError = false;
|
|
587
633
|
this.ShowDropDownSource = false;
|
|
588
634
|
this.ShowLookupItemsList = false;
|
|
589
635
|
this.ShowSourceFunctionData = false;
|
|
636
|
+
this.sourceFunctionDataNotLoaded = false;
|
|
590
637
|
}
|
|
591
638
|
SearchForFunction(isAdd = true) {
|
|
592
639
|
let ResultModel = isAdd ? this.AddConfigurationForm.value : this.EditConfigurationForm.value;
|
|
593
640
|
let functionName = isAdd ? ResultModel.FunctionSourcePath : ResultModel.EditFunctionSourcePath;
|
|
594
|
-
this.ConfigurationsService.
|
|
641
|
+
this.ConfigurationsService.loadSourceFunctionDropDownItems(functionName).subscribe((result) => {
|
|
642
|
+
this.showFunctionNotFoundError = false;
|
|
643
|
+
this.ShowSourceFunctionData = false;
|
|
595
644
|
if (isAdd) {
|
|
645
|
+
this.AddConfigurationForm.removeControl("SourceFuncValue");
|
|
646
|
+
this.AddConfigurationForm.removeControl("SourceFuncDefaultValue");
|
|
596
647
|
this.SourceFuncValue = new DropdownOptions();
|
|
597
648
|
this.SourceFuncValue.Name = "SourceFuncValue";
|
|
598
649
|
this.SourceFuncValue.LabelKey = "Value";
|
|
@@ -607,9 +658,10 @@ export class ConfigurationComponent {
|
|
|
607
658
|
this.SourceFuncDefaultValue.SingleSelection = true;
|
|
608
659
|
this.SourceFuncDefaultValue.AllowSearchFilter = true;
|
|
609
660
|
this.SourceFuncDefaultValue.IsRequired = true;
|
|
610
|
-
this.ShowSourceFunctionData = true;
|
|
611
661
|
}
|
|
612
662
|
else {
|
|
663
|
+
this.EditConfigurationForm.removeControl("EditSourceFuncValue");
|
|
664
|
+
this.EditConfigurationForm.removeControl("EditSourceFuncDefaultValue");
|
|
613
665
|
this.EditSourceFuncValue = new DropdownOptions();
|
|
614
666
|
this.EditSourceFuncValue.Name = "EditSourceFuncValue";
|
|
615
667
|
this.EditSourceFuncValue.LabelKey = "Value";
|
|
@@ -625,101 +677,54 @@ export class ConfigurationComponent {
|
|
|
625
677
|
this.EditSourceFuncDefaultValue.AllowSearchFilter = true;
|
|
626
678
|
this.EditSourceFuncDefaultValue.IsRequired = true;
|
|
627
679
|
}
|
|
680
|
+
this.sourceFunctionDataNotLoaded = false;
|
|
681
|
+
this.ShowSourceFunctionData = true;
|
|
628
682
|
}, (error) => {
|
|
683
|
+
if (error.status == 404) {
|
|
684
|
+
this.utilityService.stopBlockUI();
|
|
685
|
+
this.showFunctionNotFoundError = true;
|
|
686
|
+
this.ShowSourceFunctionData = false;
|
|
687
|
+
this.sourceFunctionDataNotLoaded = true;
|
|
688
|
+
}
|
|
629
689
|
});
|
|
630
690
|
}
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
}
|
|
635
|
-
else {
|
|
636
|
-
let ResultModel = this.EditConfigurationForm.value;
|
|
637
|
-
console.log(ResultModel);
|
|
638
|
-
let EditModel = new ConfigurationModel();
|
|
639
|
-
EditModel.ID = this.ConfigurationId;
|
|
640
|
-
EditModel.ValueType = this.ConfigurationValueType;
|
|
641
|
-
if (this.ProductionMode == false)
|
|
642
|
-
EditModel.Key = ResultModel.EditKey;
|
|
643
|
-
console.log(this.EditConfigurationTypeName);
|
|
644
|
-
switch (this.EditConfigurationTypeName) {
|
|
645
|
-
case "Text":
|
|
646
|
-
EditModel.TextValue = ResultModel.EditTextValue;
|
|
647
|
-
EditModel.DefaultTextValue = ResultModel.EditTextDefaultValue;
|
|
648
|
-
break;
|
|
649
|
-
case "Toggle":
|
|
650
|
-
EditModel.BoolValue = ResultModel.EditValueToggele;
|
|
651
|
-
EditModel.DefaultBoolValue = ResultModel.EditDefaultValueToggele;
|
|
652
|
-
break;
|
|
653
|
-
case "Dropdown List":
|
|
654
|
-
if (this.EditConfigurationDDLSourceName == "Lookup") {
|
|
655
|
-
EditModel.SelectedLookupID = Number(ResultModel.EditLookup);
|
|
656
|
-
EditModel.Value = ResultModel.EditLookupValue;
|
|
657
|
-
EditModel.DefaultValue = ResultModel.EditLookupDefaultValue;
|
|
658
|
-
}
|
|
659
|
-
else if (this.EditConfigurationDDLSourceName == "Function") {
|
|
660
|
-
EditModel.SourceFunctionName = ResultModel.EditFunctionSourcePath;
|
|
661
|
-
EditModel.Value = ResultModel.EditSourceFuncValue;
|
|
662
|
-
EditModel.DefaultValue = ResultModel.EditSourceFuncDefaultValue;
|
|
663
|
-
}
|
|
664
|
-
break;
|
|
665
|
-
}
|
|
666
|
-
if (this.EditConfigurationScopeName == "User") {
|
|
667
|
-
console.log(Number(ResultModel.EditUser));
|
|
668
|
-
EditModel.UserID = Number(ResultModel.EditUser);
|
|
669
|
-
}
|
|
670
|
-
else if (this.EditConfigurationScopeName == "Permission set")
|
|
671
|
-
EditModel.PermissionSetID = Number(ResultModel.EditPermissionSet);
|
|
672
|
-
//EditModel.SourcePartialViewActionName = ResultModel.SourcePath;
|
|
673
|
-
this.ConfigurationsService.EditConfiguration(EditModel).subscribe((result) => {
|
|
674
|
-
this.modalService.dismissAll();
|
|
675
|
-
this.resetConfigurationFlags();
|
|
676
|
-
let element = this.input;
|
|
677
|
-
element.UpdatePaging();
|
|
678
|
-
}, (error) => {
|
|
679
|
-
});
|
|
680
|
-
}
|
|
691
|
+
changeSourceFunction() {
|
|
692
|
+
this.ShowSourceFunctionData = false;
|
|
693
|
+
this.sourceFunctionDataNotLoaded = true;
|
|
681
694
|
}
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
this.
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
this.
|
|
695
|
+
//Delete configuration
|
|
696
|
+
showDeleteConfigurationModal(configurationID) {
|
|
697
|
+
this.deleteConfigurationId = configurationID;
|
|
698
|
+
//array sent to service function
|
|
699
|
+
let paramArray = [];
|
|
700
|
+
paramArray.push(this.deleteConfigurationId);
|
|
701
|
+
this.DeleteConfirmationOptions = new ConfirmationModalOptions();
|
|
702
|
+
this.DeleteConfirmationOptions.ServiceSubmitFunction = this.deleteConfiguration;
|
|
703
|
+
this.DeleteConfirmationOptions.ServiceSubmitModel = paramArray;
|
|
704
|
+
this.DeleteConfirmationOptions.PagingReference = this.pagingElement;
|
|
705
|
+
this.deleteControlLoaded = true;
|
|
706
|
+
setTimeout(() => {
|
|
707
|
+
this.ConfirmationModalControl.showModal();
|
|
708
|
+
}, 200);
|
|
688
709
|
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
const element = this.deleteConfigurationList[index];
|
|
693
|
-
UsersIDModel.UsersIDs.push(element.id);
|
|
694
|
-
}
|
|
695
|
-
this.ConfigurationsService.DeleteConfiguration(UsersIDModel).subscribe((result) => {
|
|
696
|
-
this.deleteConfigurationList = [];
|
|
697
|
-
this.modalService.dismissAll();
|
|
698
|
-
let element = this.input;
|
|
699
|
-
element.ReinitializePaging();
|
|
700
|
-
}, (error) => {
|
|
701
|
-
});
|
|
710
|
+
//On destroy
|
|
711
|
+
ngOnDestroy() {
|
|
712
|
+
this.requestHandlerService.destroyHandler();
|
|
702
713
|
}
|
|
703
714
|
}
|
|
704
|
-
ConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ConfigurationComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.ConfigurationsService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
705
|
-
ConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ConfigurationComponent, selector: "lib-configuration", viewQueries: [{ propertyName: "input", first: true, predicate: ["ConfigurationPagingViewElement"], descendants: true }, { propertyName: "CloseConfigurationModal", first: true, predicate: ["CloseConfigurationModal"], descendants: true }, { propertyName: "CloseEditConfigurationModal", first: true, predicate: ["CloseEditConfigurationModal"], descendants: true }, { propertyName: "CloseDeleteConfigurationModal", first: true, predicate: ["CloseDeleteConfigurationModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n\r\n <div *ngIf=\"ShowPageContent\">\r\n <!-- begin::Header -->\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ConfigurationForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ConfigurationForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddConfigurationModal(AddConfigurationModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\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\">\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(\"Key\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Type\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Scope\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"UserPermissionSet\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Configuration of ConfigurationPagingResult\">\r\n\r\n <td class=\"text-dark\">{{Configuration.key}}</td>\r\n <td>{{Configuration.value}}</td>\r\n <td *ngIf=\"language=='ar'\"> {{Configuration.valueTypeName.arabic}}</td>\r\n <td *ngIf=\"language=='en'\"> {{Configuration.valueTypeName.english}}</td>\r\n <td>{{Configuration.scopeName}}</td>\r\n <td>{{Configuration.permissionSetName}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"config\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #config=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditConfigurationModal(Configuration.id,Configuration.idEncrypted, EditConfigurationModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteConfigurationModal(Configuration, deleteConfigurationModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ConfigurationPagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n\r\n </div>\r\n <!-- begin paging-->\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setConfigurationListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ConfigurationPaging\" [group]=\"ConfigurationForm\" #ConfigurationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddConfigurationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddConfiguration\")}}</h1>\r\n </div>\r\n\r\n <form [formGroup]=\"AddConfigurationForm\"\r\n (ngSubmit)=\"addConfiguration()\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"Key\" [group]=\"AddConfigurationForm\">\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]=\"Scope\" (OnChange)=\"ChangeScopeValue($event)\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Type\" (OnChange)=\"ChangeTypeValue($event)\" [group]=\"AddConfigurationForm\">\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-TextBox [options]=\"Value\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"AddConfigurationForm\">\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-TextBox [options]=\"DefaultValue\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"AddConfigurationForm\">\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-Toggleslide [options]=\"ValueToggel\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"AddConfigurationForm\">\r\n </BBSF-Toggleslide>\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]=\"DefaultValueToggel\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"AddConfigurationForm\">\r\n </BBSF-Toggleslide>\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]=\"Source\" *ngIf=\"ShowDropDownSource\" (OnChange)=\"ChangeSource($event)\" [group]=\"AddConfigurationForm\">\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-TextBox [options]=\"SourcePath\" *ngIf=\"ShowSourcePath\" [group]=\"AddConfigurationForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"ShowSourceFunctionPath\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"FunctionSourcePath\" [group]=\"AddConfigurationForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <button type=\"button\" (click)=\"SearchForFunction(true)\">\r\n <span class=\"float-right\"><i class=\"fa fa-search\"></i></span>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"SourceFuncValue\" *ngIf=\"ShowSourceFunctionData\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"SourceFuncDefaultValue\" *ngIf=\"ShowSourceFunctionData\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Lookup\" *ngIf=\"ShowLookupList\" (OnChange)=\"ChangeLookup($event)\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"LookupValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"LookupDefaultValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"PermissionSet\" *ngIf=\"ShowPermissionList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"User\" *ngIf=\"ShowUsersList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfigurationModal id=\"CloseConfigurationModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\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 </form>\r\n </div>\r\n </ng-template>\r\n <!--Edit Modal-->\r\n <ng-template #EditConfigurationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Configuration\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"EditConfigurationForm\" (ngSubmit)=\"editConfiguration()\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditKey\" [group]=\"EditConfigurationForm\">\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-TextBox [options]=\"EditTextValue\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"EditConfigurationForm\">\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-TextBox [options]=\"EditTextDefaultValue\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"EditConfigurationForm\">\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-Toggleslide [options]=\"EditValueToggele\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"EditConfigurationForm\">\r\n </BBSF-Toggleslide>\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]=\"EditDefaultValueToggele\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"EditConfigurationForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"ShowSourceFunctionPath\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditFunctionSourcePath\" [group]=\"EditConfigurationForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <button type=\"button\" (click)=\"SearchForFunction(false)\">\r\n <span class=\"float-right\"><i class=\"fa fa-search\"></i></span>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceFuncValue\" *ngIf=\"ShowSourceFunctionPath\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceFuncDefaultValue\" *ngIf=\"ShowSourceFunctionPath\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLookup\" *ngIf=\"ShowLookupList\" (OnChange)=\"ChangeEditLookup($event)\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLookupValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLookupDefaultValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditPermissionSet\" *ngIf=\"ShowPermissionList\" [group]=\"EditConfigurationForm\">\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-DropdownList [options]=\"EditUser\" *ngIf=\"ShowUsersList\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditConfigurationModal id=\"CloseEditConfigurationModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\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 </form>\r\n </div>\r\n </ng-template>\r\n\r\n <!--deleted Modal-->\r\n <ng-template #deleteConfigurationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Delete\")}} {{utilityService.getResourceValue(\"Configuration\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-danger rounded border-danger border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-danger me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n \r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"Delete_Question\")}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDeleteConfigurationModal id=\"CloseDeleteConfigurationModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"deleteConfiguration()\"\r\n class=\"btn btn-light-danger btn-sm \">\r\n {{utilityService.getResourceValue(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
715
|
+
ConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ConfigurationComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.ConfigurationsService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
716
|
+
ConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ConfigurationComponent, selector: "lib-configuration", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ConfigurationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n\r\n <div *ngIf=\"ShowPageContent\">\r\n <!-- begin::Header -->\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ConfigurationForm\">\r\n <BBSF-TextBox (OnChange)=\"searchClientSide($event)\" [options]=\"searchTextBox\" [group]=\"ConfigurationForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddConfigurationModal(AddConfigurationModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <!-- begin::Table container -->\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\">\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(\"Key\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Type\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Scope\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"UserPermissionSet\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let Configuration of clientSidePagingResult\">\r\n\r\n <td class=\"text-dark\">{{Configuration.key}}</td>\r\n <td>{{Configuration.value}}</td>\r\n <td> {{Configuration.valueTypeNameStr}}</td>\r\n <td>{{Configuration.scopeName}}</td>\r\n <td>{{Configuration.permissionSetName}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"config\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #config=\"matMenu\">\r\n <button class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditConfigurationModal(Configuration.id,Configuration.idEncrypted, EditConfigurationModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteConfigurationModal(Configuration.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n\r\n </div>\r\n <!-- begin paging-->\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setConfigurationListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ConfigurationPaging\" [group]=\"ConfigurationForm\" #ConfigurationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddConfigurationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddConfiguration\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddConfigurationFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"Key\" [group]=\"AddConfigurationForm\">\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]=\"Scope\" (OnChange)=\"ChangeScopeValue($event)\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"PermissionSet\" *ngIf=\"ShowPermissionList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"User\" *ngIf=\"ShowUsersList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Type\" (OnChange)=\"ChangeTypeValue($event)\" [group]=\"AddConfigurationForm\">\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-TextBox [options]=\"Value\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"AddConfigurationForm\">\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-TextBox [options]=\"DefaultValue\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"AddConfigurationForm\">\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-Toggleslide [options]=\"ValueToggel\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"AddConfigurationForm\">\r\n </BBSF-Toggleslide>\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]=\"DefaultValueToggel\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"AddConfigurationForm\">\r\n </BBSF-Toggleslide>\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]=\"Source\" *ngIf=\"ShowDropDownSource\" (OnChange)=\"ChangeSource($event)\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"ShowSourceFunctionPath\">\r\n <div class=\"row\">\r\n <div class=\"col-md-9\">\r\n <BBSF-TextBox [options]=\"FunctionSourcePath\" [group]=\"AddConfigurationForm\" (OnChange)=\"changeSourceFunction()\">\r\n </BBSF-TextBox>\r\n <div *ngIf=\"showFunctionNotFoundError\" class=\"text-danger\">{{utilityService.getResourceValue(\"SourceFunctionNotFound\")}}</div>\r\n </div>\r\n <div class=\"col-md-3 d-flex justify-content-end align-items-center mb-4\">\r\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" (click)=\"SearchForFunction(true)\">\r\n <span class=\"float-right\"><i class=\"fas fa-search\"></i>{{utilityService.getResourceValue(\"Search\")}}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"SourceFuncValue\" *ngIf=\"ShowSourceFunctionData\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"SourceFuncDefaultValue\" *ngIf=\"ShowSourceFunctionData\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"ShowLookupList\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Lookup\" (OnChange)=\"ChangeLookup($event)\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"LookupValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"LookupDefaultValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"AddConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfigurationModal id=\"CloseConfigurationModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\" [disabled]=\"sourceFunctionDataNotLoaded\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n<!--Edit Modal-->\r\n<ng-template #EditConfigurationModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Configuration\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditConfigurationFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditKey\" [group]=\"EditConfigurationForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditPermissionSet\" *ngIf=\"ShowPermissionList\" [group]=\"EditConfigurationForm\">\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-DropdownList [options]=\"EditUser\" *ngIf=\"ShowUsersList\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditTextValue\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"EditConfigurationForm\">\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-TextBox [options]=\"EditTextDefaultValue\" *ngIf=\"ShowValueAndDefaultValue\" [group]=\"EditConfigurationForm\">\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-Toggleslide [options]=\"EditValueToggele\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"EditConfigurationForm\">\r\n </BBSF-Toggleslide>\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]=\"EditDefaultValueToggele\" *ngIf=\"ShowValueToggleAndDefaultValue\" [group]=\"EditConfigurationForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"ShowSourceFunctionPath\">\r\n <div class=\"col-md-9\">\r\n <BBSF-TextBox [options]=\"EditFunctionSourcePath\" [group]=\"EditConfigurationForm\" (OnChange)=\"changeSourceFunction()\">\r\n </BBSF-TextBox>\r\n <div *ngIf=\"showFunctionNotFoundError\" class=\"text-danger\">{{utilityService.getResourceValue(\"SourceFunctionNotFound\")}}</div>\r\n </div>\r\n <div class=\"col-md-3 d-flex justify-content-end align-items-center mb-4\">\r\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" (click)=\"SearchForFunction(false)\">\r\n <span class=\"float-right\"><i class=\"fas fa-search\"></i>{{utilityService.getResourceValue(\"Search\")}}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceFuncValue\" *ngIf=\"ShowSourceFunctionData\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceFuncDefaultValue\" *ngIf=\"ShowSourceFunctionData\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLookup\" *ngIf=\"ShowLookupList\" (OnChange)=\"ChangeEditLookup($event)\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLookupValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditLookupDefaultValue\" *ngIf=\"ShowLookupItemsList\" [group]=\"EditConfigurationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditConfigurationModal id=\"CloseEditConfigurationModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\" [disabled]=\"sourceFunctionDataNotLoaded\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--deleted Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i6.ɵw, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
706
717
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ConfigurationComponent, decorators: [{
|
|
707
718
|
type: Component,
|
|
708
719
|
args: [{
|
|
709
720
|
selector: 'lib-configuration',
|
|
710
721
|
templateUrl: './configuration.component.html'
|
|
711
722
|
}]
|
|
712
|
-
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.PageInfoService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i3.ConfigurationsService }, { type: i4.NgbModal }]; }, propDecorators: {
|
|
723
|
+
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.PageInfoService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i3.ConfigurationsService }, { type: i4.NgbModal }, { type: i1.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
|
|
713
724
|
type: ViewChild,
|
|
714
725
|
args: ['ConfigurationPagingViewElement', { static: false }]
|
|
715
|
-
}],
|
|
716
|
-
type: ViewChild,
|
|
717
|
-
args: ['CloseConfigurationModal', { static: false }]
|
|
718
|
-
}], CloseEditConfigurationModal: [{
|
|
719
|
-
type: ViewChild,
|
|
720
|
-
args: ['CloseEditConfigurationModal', { static: false }]
|
|
721
|
-
}], CloseDeleteConfigurationModal: [{
|
|
726
|
+
}], ConfirmationModalControl: [{
|
|
722
727
|
type: ViewChild,
|
|
723
|
-
args: ['
|
|
728
|
+
args: ['ConfirmationModalControl', { static: false }]
|
|
724
729
|
}] } });
|
|
725
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0osT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFaEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7Ozs7O0FBT3JGLE1BQU0sT0FBTyxzQkFBc0I7SUE0RmpDLFlBQW9CLFdBQXVCLEVBQVMsZUFBK0IsRUFBUyxjQUE2QixFQUFTLG9CQUF5QyxFQUFTLGtCQUFxQyxFQUFVLHFCQUE0QyxFQUFVLFlBQXNCO1FBQTNSLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFBUyx5QkFBb0Is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SW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbExheW91dCwgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBUb2dnbGVTbGlkZU9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFVzZXJzSURSZXF1ZXN0TW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvVXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Db25maWd1cmF0aW9uc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvQ29uZmlndXJhdGlvbk1vZGVscy9Db25maWd1cmF0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY29uZmlndXJhdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vQ29uZmlndXJhdGlvbi9cIlxyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIENvbmZpZ3VyYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIENvbmZpZ3VyYXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgQ29uZmlndXJhdGlvblBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbjtcclxuICBTY29wZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFBlcm1pc3Npb25MaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFVzZXJzTGlzdDogYW55W10gPSBbXTtcclxuICBMb29rdXBzTGlzdDogYW55W10gPSBbXTtcclxuICBMb29rdXBJdGVtc0xpc3Q6IGFueVtdID0gW107XHJcbiAgVmFsdWVUeXBlTGlzdDogYW55W10gPSBbXTtcclxuICBWYWx1ZVNvdXJjZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIFNob3dQZXJtaXNzaW9uTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3dVc2Vyc0xpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG93TG9va3VwTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd1ZhbHVlVG9nZ2xlQW5kRGVmYXVsdFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd1NvdXJjZVBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG93U291cmNlRnVuY3Rpb25QYXRoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd0Ryb3BEb3duU291cmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd0xvb2t1cEl0ZW1zTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3dTb3VyY2VGdW5jdGlvbkRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlndXJhdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xyXG5cclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRDb25maWd1cmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEtleTogVGV4dEJveE9wdGlvbnM7XHJcbiAgVmFsdWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIERlZmF1bHRWYWx1ZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgU291cmNlUGF0aDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRnVuY3Rpb25Tb3VyY2VQYXRoOiBUZXh0Qm94T3B0aW9ucztcclxuICBTb3VyY2VGdW5jVmFsdWU6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBTb3VyY2VGdW5jRGVmYXVsdFZhbHVlOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgVmFsdWVUb2dnZWw6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBEZWZhdWx0VmFsdWVUb2dnZWw6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBTY29wZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIFR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgVXNlcjogRHJvcGRvd25PcHRpb25zO1xyXG4gIFNvdXJjZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIExvb2t1cDogRHJvcGRvd25PcHRpb25zO1xyXG4gIExvb2t1cFZhbHVlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgTG9va3VwRGVmYXVsdFZhbHVlOiBEcm9wZG93bk9wdGlvbnM7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3NlQ29uZmlndXJhdGlvbk1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlQ29uZmlndXJhdGlvbk1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0Q29uZmlndXJhdGlvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0S2V5OiBUZXh0Qm94T3B0aW9ucyA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gIEVkaXRUZXh0VmFsdWU6IFRleHRCb3hPcHRpb25zID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgRWRpdFRleHREZWZhdWx0VmFsdWU6IFRleHRCb3hPcHRpb25zID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgRWRpdFNvdXJjZVBhdGg6IFRleHRCb3hPcHRpb25zID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgRWRpdEZ1bmN0aW9uU291cmNlUGF0aDogVGV4dEJveE9wdGlvbnMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICBFZGl0VmFsdWVUb2dnZWxlOiBUb2dnbGVTbGlkZU9wdGlvbnMgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGU6IFRvZ2dsZVNsaWRlT3B0aW9ucyA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICBFZGl0U2NvcGU6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBFZGl0VHlwZTogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIEVkaXRQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgRWRpdFVzZXI6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBFZGl0U291cmNlOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgRWRpdExvb2t1cDogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIEVkaXRMb29rdXBWYWx1ZTogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIEVkaXRMb29rdXBEZWZhdWx0VmFsdWU6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBFZGl0U291cmNlRnVuY1ZhbHVlOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWU6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBDb25maWd1cmF0aW9uSWQ6IG51bWJlcjtcclxuICBDb25maWd1cmF0aW9uVmFsdWVUeXBlOiBudW1iZXI7XHJcbiAgRWRpdENvbmZpZ3VyYXRpb25UeXBlTmFtZTogc3RyaW5nO1xyXG4gIEVkaXRDb25maWd1cmF0aW9uU2NvcGVOYW1lOiBzdHJpbmc7XHJcbiAgRWRpdENvbmZpZ3VyYXRpb25ERExTb3VyY2VOYW1lOiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VFZGl0Q29uZmlndXJhdGlvbk1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlRWRpdENvbmZpZ3VyYXRpb25Nb2RhbDogRWxlbWVudFJlZjtcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlQ29uZmlndXJhdGlvbkxpc3Q6IGFueVtdID0gW11cclxuICBAVmlld0NoaWxkKCdDbG9zZURlbGV0ZUNvbmZpZ3VyYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZURlbGV0ZUNvbmZpZ3VyYXRpb25Nb2RhbDogRWxlbWVudFJlZjtcclxuICBsYW5ndWFnZTogc3RyaW5nID0gXCJcIlxyXG5cclxuICBTaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlLHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOlBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6QkJTRlRyYW5zbGF0ZVNlcnZpY2UscHJpdmF0ZSBlbnZpcm9ubWVudFNlcnZpY2U6RW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIENvbmZpZ3VyYXRpb25zU2VydmljZTogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9dHJ1ZTsgIFxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZT10aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDb25maWd1cmF0aW9uXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzPVtcclxuICAgICAgIHt0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSAsIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlfSxcclxuICAgICAgIHt0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlfVxyXG5cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PWZhbHNlO1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSAgYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpXHJcbiAgICB0aGlzLkxvYWREcm9wZG93bkxpc3RzKCk7XHJcbiAgfVxyXG5cclxuICBMb2FkRHJvcGRvd25MaXN0cygpIHtcclxuICAgIHRoaXMuQ29uZmlndXJhdGlvbnNTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgbGV0IERyb3Bkb3duTGlzdHMgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJEcm9wZG93bkxpc3RzOlwiLERyb3Bkb3duTGlzdHMpXHJcbiAgICAgIHRoaXMuU2NvcGVzTGlzdCA9IERyb3Bkb3duTGlzdHMuc2NvcGVzXHJcbiAgICAgIHRoaXMuUGVybWlzc2lvbkxpc3QgPSBEcm9wZG93bkxpc3RzLnBlcm1pc3Npb25MaXN0XHJcbiAgICAgIHRoaXMuVXNlcnNMaXN0ID0gRHJvcGRvd25MaXN0cy51c2Vyc1xyXG4gICAgICB0aGlzLkxvb2t1cHNMaXN0ID0gRHJvcGRvd25MaXN0cy5sb29rdXBzXHJcbiAgICAgIHRoaXMuVmFsdWVUeXBlTGlzdCA9IERyb3Bkb3duTGlzdHMudmFsdWVUeXBlXHJcbiAgICAgIHRoaXMuVmFsdWVTb3VyY2VMaXN0ID0gRHJvcGRvd25MaXN0cy52YWx1ZVNvdXJjZVxyXG5cclxuXHJcbiAgICAgIC8vIFRleHRCb3ggaW50aVxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94Lk5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guVHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgICAgdGhpcy5Db25maWd1cmF0aW9uUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgICAgdGhpcy5Db25maWd1cmF0aW9uUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIHRoaXMuQXBpVXJsICsgJ0dldENvbmZpZ3VyYXRpb25zQnlGaWx0ZXInO1xyXG4gICAgICB0aGlzLkNvbmZpZ3VyYXRpb25QYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICAgIHRoaXMuQ29uZmlndXJhdGlvblBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyXVxyXG4gICAgICB0aGlzLkNvbmZpZ3VyYXRpb25QYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBSZWluaXRpYWxpemVDb25maWd1cmF0aW9uUGFnaW5nKCkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuICBVcGRhdGVDb25maWd1cmF0aW9uUGFnaW5nKCkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuICBzZXRDb25maWd1cmF0aW9uTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuQ29uZmlndXJhdGlvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5Db25maWd1cmF0aW9uRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIENoYW5nZVNjb3BlVmFsdWUoa2V5KSB7XHJcbiAgICBsZXQgc2NvcEl0ZW0gPSB0aGlzLlNjb3Blc0xpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0ga2V5OyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0pWzBdO1xyXG4gICAgLy9jb25zb2xlLmxvZyhzY29wSXRlbSk7XHJcbiAgICBzd2l0Y2ggKHNjb3BJdGVtLnZhbHVlKSB7XHJcbiAgICAgIGNhc2UgXCJBcHBcIjpcclxuICAgICAgICB0aGlzLlNob3dQZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd1VzZXJzTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlVzZXJcIilcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJQZXJtaXNzaW9uU2V0XCIpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUGVybWlzc2lvbiBzZXRcIjpcclxuICAgICAgICB0aGlzLlNob3dQZXJtaXNzaW9uTGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93VXNlcnNMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiVXNlclwiKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlVzZXJcIjpcclxuICAgICAgICB0aGlzLlNob3dQZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd1VzZXJzTGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiUGVybWlzc2lvblNldFwiKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgQ2hhbmdlVHlwZVZhbHVlKGtleSkge1xyXG4gICAgbGV0IHR5cGVJdGVtID0gdGhpcy5WYWx1ZVR5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGtleTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgIC8vY29uc29sZS5sb2codHlwZUl0ZW0pO1xyXG4gICAgc3dpdGNoICh0eXBlSXRlbS52YWx1ZSkge1xyXG4gICAgICBjYXNlIFwiVGV4dFwiOlxyXG4gICAgICAgIHRoaXMuU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd1NvdXJjZVBhdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dEcm9wRG93blNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJTb3VyY2VcIilcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlRvZ2dsZVwiOlxyXG4gICAgICAgIHRoaXMuU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd1NvdXJjZVBhdGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dEcm9wRG93blNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJTb3VyY2VcIilcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQYXJ0aWFsIFZpZXdcIjpcclxuICAgICAgICB0aGlzLlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd1ZhbHVlVG9nZ2xlQW5kRGVmYXVsdFZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93U291cmNlUGF0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RHJvcERvd25Tb3VyY2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dMb29rdXBMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93TG9va3VwSXRlbXNMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiU291cmNlXCIpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiRHJvcGRvd24gTGlzdFwiOlxyXG4gICAgICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd1ZhbHVlVG9nZ2xlQW5kRGVmYXVsdFZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93U291cmNlUGF0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2hvd0Ryb3BEb3duU291cmNlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgQ2hhbmdlU291cmNlKGtleSkge1xyXG4gICAgbGV0IHNvdXJjZUl0ZW0gPSB0aGlzLlZhbHVlU291cmNlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBrZXk7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbSlbMF07XHJcbiAgICAvL2NvbnNvbGUubG9nKHNvdXJjZUl0ZW0pO1xyXG4gICAgc3dpdGNoIChzb3VyY2VJdGVtLnZhbHVlKSB7XHJcbiAgICAgIGNhc2UgXCJMb29rdXBcIjpcclxuICAgICAgICB0aGlzLlNob3dMb29rdXBMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dTb3VyY2VGdW5jdGlvblBhdGggPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkZ1bmN0aW9uXCI6XHJcbiAgICAgICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25QYXRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dMb29rdXBMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93TG9va3VwSXRlbXNMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIENoYW5nZUxvb2t1cChrZXkpIHtcclxuICAgIHRoaXMuQ29uZmlndXJhdGlvbnNTZXJ2aWNlLkxvYWRMb29rdXBJdGVtcyhrZXkpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBSZXN1bHQgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLkxvb2t1cEl0ZW1zTGlzdCA9IFJlc3VsdC5sb29rdXBJdGVtcztcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5OYW1lID0gXCJMb29rdXBWYWx1ZVwiO1xyXG4gICAgICB0aGlzLkxvb2t1cFZhbHVlLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICB0aGlzLkxvb2t1cFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkxvb2t1cFZhbHVlLkRhdGFTb3VyY2UgPSB0aGlzLkxvb2t1cEl0ZW1zTGlzdDtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkxvb2t1cFZhbHVlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5TaG93QXN0ZXJpc2sgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5Mb29rdXBEZWZhdWx0VmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuTG9va3VwRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkxvb2t1cERlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICB0aGlzLkxvb2t1cERlZmF1bHRWYWx1ZS5MYWJlbEtleSA9IFwiRGVmYXVsdFZhbHVlXCI7XHJcbiAgICAgIHRoaXMuTG9va3VwRGVmYXVsdFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkxvb2t1cERlZmF1bHRWYWx1ZS5EYXRhU291cmNlID0gdGhpcy5Mb29rdXBJdGVtc0xpc3Q7XHJcbiAgICAgIHRoaXMuTG9va3VwRGVmYXVsdFZhbHVlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuTG9va3VwRGVmYXVsdFZhbHVlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5Mb29rdXBEZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuU2hvd0xvb2t1cEl0ZW1zTGlzdCA9IHRydWU7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgIH0pO1xyXG4gIH1cclxuICBDaGFuZ2VFZGl0TG9va3VwKGtleSkge1xyXG4gICAgdGhpcy5TaG93TG9va3VwSXRlbXNMaXN0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5Db25maWd1cmF0aW9uc1NlcnZpY2UuTG9hZExvb2t1cEl0ZW1zKGtleSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IFJlc3VsdCA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCBMb29rdXBJdGVtc0xpc3RFZGl0ID0gUmVzdWx0Lmxvb2t1cEl0ZW1zO1xyXG4gICAgICAvL1Jlc2luaXRpYWxpemUgbG9va3VwIHZhbHVlcyBhbmQgZGVmYXVsdCB2YWx1ZXNcclxuXHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5OYW1lID0gXCJFZGl0TG9va3VwVmFsdWVcIjtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuTGFiZWxLZXkgPSBcIlZhbHVlXCI7XHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5EYXRhU291cmNlID0gTG9va3VwSXRlbXNMaXN0RWRpdDtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkVkaXRMb29rdXBEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuRGF0YVNvdXJjZSA9IExvb2t1cEl0ZW1zTGlzdEVkaXQ7XHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSB0cnVlO1xyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHNob3dBZGRDb25maWd1cmF0aW9uTW9kYWwoQWRkQ29uZmlndXJhdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLlNob3dQZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93VXNlcnNMaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1NvdXJjZVBhdGggPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd0Ryb3BEb3duU291cmNlID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dMb29rdXBMaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uUGF0aCA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93TG9va3VwTGlzdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93TG9va3VwSXRlbXNMaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHRoaXMuS2V5ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLktleS5OYW1lID0gXCJLZXlcIjtcclxuICAgIHRoaXMuS2V5LkxhYmVsS2V5ID0gXCJLZXlcIjtcclxuICAgIHRoaXMuS2V5LlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuS2V5LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5LZXkuVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuVmFsdWUuTmFtZSA9IFwiVmFsdWVcIjtcclxuICAgIHRoaXMuVmFsdWUuTGFiZWxLZXkgPSBcIlZhbHVlXCI7XHJcbiAgICB0aGlzLlZhbHVlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuVmFsdWUuVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5WYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWUuVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5Tb3VyY2VQYXRoID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlNvdXJjZVBhdGguTmFtZSA9IFwiU291cmNlUGF0aFwiO1xyXG4gICAgdGhpcy5Tb3VyY2VQYXRoLkxhYmVsVmFsdWUgPSBcIlNvdXJjZVBhdGhcIjtcclxuICAgIHRoaXMuU291cmNlUGF0aC5MYWJlbEtleSA9IFwiU291cmNlUGF0aFwiO1xyXG4gICAgdGhpcy5Tb3VyY2VQYXRoLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuU291cmNlUGF0aC5WYWx1ZSA9IG51bGw7XHJcblxyXG5cclxuICAgIHRoaXMuRnVuY3Rpb25Tb3VyY2VQYXRoID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLkZ1bmN0aW9uU291cmNlUGF0aC5OYW1lID0gXCJGdW5jdGlvblNvdXJjZVBhdGhcIjtcclxuICAgIHRoaXMuRnVuY3Rpb25Tb3VyY2VQYXRoLkxhYmVsVmFsdWUgPSBcIlNvdXJjZVBhdGhcIjtcclxuICAgIHRoaXMuRnVuY3Rpb25Tb3VyY2VQYXRoLkxhYmVsS2V5ID0gXCJTb3VyY2VQYXRoXCI7XHJcbiAgICB0aGlzLkZ1bmN0aW9uU291cmNlUGF0aC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLkZ1bmN0aW9uU291cmNlUGF0aC5WYWx1ZSA9IG51bGw7XHJcblxyXG5cclxuICAgIHRoaXMuVmFsdWVUb2dnZWwgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICB0aGlzLlZhbHVlVG9nZ2VsLk5hbWUgPSBcIlZhbHVlVG9nZ2VsXCI7XHJcbiAgICB0aGlzLlZhbHVlVG9nZ2VsLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgdGhpcy5WYWx1ZVRvZ2dlbC5WYWx1ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5WYWx1ZVRvZ2dlbC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICB0aGlzLkRlZmF1bHRWYWx1ZVRvZ2dlbCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgIHRoaXMuRGVmYXVsdFZhbHVlVG9nZ2VsLk5hbWUgPSBcIkRlZmF1bHRWYWx1ZVRvZ2dlbFwiO1xyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWVUb2dnZWwuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgdGhpcy5EZWZhdWx0VmFsdWVUb2dnZWwuVmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMuRGVmYXVsdFZhbHVlVG9nZ2VsLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG5cclxuICAgIHRoaXMuU2NvcGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLlNjb3BlLk5hbWUgPSBcIlNjb3BlXCI7XHJcbiAgICB0aGlzLlNjb3BlLkxhYmVsS2V5ID0gXCJTY29wZVwiO1xyXG4gICAgdGhpcy5TY29wZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgIHRoaXMuU2NvcGUuRGF0YVNvdXJjZSA9IHRoaXMuU2NvcGVzTGlzdDtcclxuICAgIHRoaXMuU2NvcGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuU2NvcGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5TY29wZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLlR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLlR5cGUuTmFtZSA9IFwiVHlwZVwiO1xyXG4gICAgdGhpcy5UeXBlLkxhYmVsS2V5ID0gXCJUeXBlXCI7XHJcbiAgICB0aGlzLlR5cGUuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICB0aGlzLlR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuVmFsdWVUeXBlTGlzdDtcclxuICAgIHRoaXMuVHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5UeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXQuTmFtZSA9IFwiUGVybWlzc2lvblNldFwiO1xyXG4gICAgdGhpcy5QZXJtaXNzaW9uU2V0LkxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0XCI7XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXQuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMuUGVybWlzc2lvbkxpc3Q7XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXQuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuUGVybWlzc2lvblNldC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLlBlcm1pc3Npb25TZXQuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5Vc2VyID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Vc2VyLk5hbWUgPSBcIlVzZXJcIjtcclxuICAgIHRoaXMuVXNlci5MYWJlbEtleSA9IFwiVXNlclwiO1xyXG4gICAgdGhpcy5Vc2VyLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5Vc2VyLkRhdGFTb3VyY2UgPSB0aGlzLlVzZXJzTGlzdDtcclxuICAgIHRoaXMuVXNlci5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5Vc2VyLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuVXNlci5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLlNvdXJjZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuU291cmNlLk5hbWUgPSBcIlNvdXJjZVwiO1xyXG4gICAgdGhpcy5Tb3VyY2UuTGFiZWxLZXkgPSBcIlNvdXJjZVwiO1xyXG4gICAgdGhpcy5Tb3VyY2UuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICB0aGlzLlNvdXJjZS5EYXRhU291cmNlID0gdGhpcy5WYWx1ZVNvdXJjZUxpc3Q7XHJcbiAgICB0aGlzLlNvdXJjZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5Tb3VyY2UuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5Tb3VyY2UuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5Mb29rdXAgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLkxvb2t1cC5OYW1lID0gXCJMb29rdXBcIjtcclxuICAgIHRoaXMuTG9va3VwLkxhYmVsS2V5ID0gXCJMb29rdXBcIjtcclxuICAgIHRoaXMuTG9va3VwLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5Mb29rdXAuRGF0YVNvdXJjZSA9IHRoaXMuTG9va3Vwc0xpc3Q7XHJcbiAgICB0aGlzLkxvb2t1cC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5Mb29rdXAuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5Mb29rdXAuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRDb25maWd1cmF0aW9uTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ29uZmlndXJhdGlvbigpIHtcclxuICAgIGlmICh0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBBZGRNb2RlbDogQ29uZmlndXJhdGlvbk1vZGVsID0gbmV3IENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gICAgICBBZGRNb2RlbC5LZXkgPSBSZXN1bHRNb2RlbC5LZXk7XHJcbiAgICAgIEFkZE1vZGVsLlNjb3BlSWQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuU2NvcGUpO1xyXG4gICAgICBBZGRNb2RlbC5WYWx1ZVR5cGUgPSBOdW1iZXIoUmVzdWx0TW9kZWwuVHlwZSk7XHJcbiAgICAgIEFkZE1vZGVsLlRleHRWYWx1ZSA9IFJlc3VsdE1vZGVsLlZhbHVlO1xyXG4gICAgICBBZGRNb2RlbC5EZWZhdWx0VGV4dFZhbHVlID0gUmVzdWx0TW9kZWwuRGVmYXVsdFZhbHVlO1xyXG4gICAgICBBZGRNb2RlbC5Cb29sVmFsdWUgPSBSZXN1bHRNb2RlbC5WYWx1ZVRvZ2dlbDtcclxuICAgICAgQWRkTW9kZWwuRGVmYXVsdEJvb2xWYWx1ZSA9IFJlc3VsdE1vZGVsLkRlZmF1bHRWYWx1ZVRvZ2dlbDtcclxuICAgICAgQWRkTW9kZWwuU291cmNlUGFydGlhbFZpZXdBY3Rpb25OYW1lID0gUmVzdWx0TW9kZWwuU291cmNlUGF0aDtcclxuICAgICAgQWRkTW9kZWwuU291cmNlRnVuY3Rpb25OYW1lID0gUmVzdWx0TW9kZWwuRnVuY3Rpb25Tb3VyY2VQYXRoO1xyXG4gICAgICBBZGRNb2RlbC5Vc2VySUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuVXNlcik7XHJcbiAgICAgIEFkZE1vZGVsLlNlbGVjdGVkTG9va3VwSUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuTG9va3VwKTtcclxuICAgICAgQWRkTW9kZWwuVmFsdWUgPSBSZXN1bHRNb2RlbC5Mb29rdXBWYWx1ZTtcclxuICAgICAgQWRkTW9kZWwuRGVmYXVsdFZhbHVlID0gUmVzdWx0TW9kZWwuTG9va3VwRGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgQWRkTW9kZWwuUGVybWlzc2lvblNldElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLlBlcm1pc3Npb25TZXQpO1xyXG4gICAgICBBZGRNb2RlbC5WYWx1ZVNvdXJjZSA9IE51bWJlcihSZXN1bHRNb2RlbC5Tb3VyY2UpO1xyXG5cclxuICAgICAgbGV0IHNvdXJjZUl0ZW0gPSB0aGlzLlZhbHVlU291cmNlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBBZGRNb2RlbC5WYWx1ZVNvdXJjZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgICAgaWYgKHNvdXJjZUl0ZW0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgbGV0IENvbmZpZ3VyYXRpb25ERExTb3VyY2VOYW1lID0gc291cmNlSXRlbS52YWx1ZTtcclxuICAgICAgICBpZiAoQ29uZmlndXJhdGlvbkRETFNvdXJjZU5hbWUgPT0gXCJGdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBBZGRNb2RlbC5WYWx1ZSA9IFJlc3VsdE1vZGVsLlNvdXJjZUZ1bmNWYWx1ZTtcclxuICAgICAgICAgIEFkZE1vZGVsLkRlZmF1bHRWYWx1ZSA9IFJlc3VsdE1vZGVsLlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuQ29uZmlndXJhdGlvbnNTZXJ2aWNlLkFkZENvbmZpZ3VyYXRpb24oQWRkTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd0VkaXRDb25maWd1cmF0aW9uTW9kYWwoY29uZmlndXJhdGlvbklkOiBudW1iZXIsIGNvbmZpZ3VyYXRpb25JREVuYzogc3RyaW5nLCBFZGl0Q29uZmlndXJhdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLkVkaXRDb25maWd1cmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcbiAgICB0aGlzLnJlc2V0Q29uZmlndXJhdGlvbkZsYWdzKCk7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5HZXRFZGl0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uSURFbmMpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSByZXN1bHQubW9kZWwgYXMgYW55O1xyXG4gICAgICB0aGlzLkNvbmZpZ3VyYXRpb25JZCA9IGNvbmZpZ3VyYXRpb25JZDtcclxuICAgICAgdGhpcy5Db25maWd1cmF0aW9uVmFsdWVUeXBlID0gY29uZmlndXJhdGlvbi52YWx1ZVR5cGU7XHJcbiAgICAgIHRoaXMuRWRpdEtleSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuTmFtZSA9IFwiRWRpdEtleVwiO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuTGFiZWxLZXkgPSBcIktleVwiO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRLZXkuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdEtleS5WYWx1ZSA9IGNvbmZpZ3VyYXRpb24ua2V5O1xyXG4gICAgICB0aGlzLkVkaXRLZXkuTWF4TGVuZ3RoID0gMjU2O1xyXG4gICAgICB0aGlzLkVkaXRLZXkuSXNEaXNhYmxlZCA9IHRoaXMuUHJvZHVjdGlvbk1vZGUgPT0gdHJ1ZTtcclxuXHJcbiAgICAgIGxldCB0eXBlSXRlbSA9IHRoaXMuVmFsdWVUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBjb25maWd1cmF0aW9uLnZhbHVlVHlwZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgICAgdGhpcy5FZGl0Q29uZmlndXJhdGlvblR5cGVOYW1lID0gdHlwZUl0ZW0udmFsdWU7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5FZGl0Q29uZmlndXJhdGlvblR5cGVOYW1lKSB7XHJcbiAgICAgICAgY2FzZSBcIlRleHRcIjpcclxuICAgICAgICAgIHRoaXMuU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHRWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dFZhbHVlLk5hbWUgPSBcIkVkaXRUZXh0VmFsdWVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHRWYWx1ZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHRWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0VmFsdWUuVmFsdWUgPSBjb25maWd1cmF0aW9uLnRleHRWYWx1ZTtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHRWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dERlZmF1bHRWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dERlZmF1bHRWYWx1ZS5OYW1lID0gXCJFZGl0VGV4dERlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dERlZmF1bHRWYWx1ZS5MYWJlbEtleSA9IFwiRGVmYXVsdFZhbHVlXCI7XHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0RGVmYXVsdFZhbHVlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHREZWZhdWx0VmFsdWUuVmFsdWUgPSBjb25maWd1cmF0aW9uLmRlZmF1bHRUZXh0VmFsdWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0RGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIlRvZ2dsZVwiOlxyXG4gICAgICAgICAgdGhpcy5TaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VmFsdWVUb2dnZWxlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VmFsdWVUb2dnZWxlLk5hbWUgPSBcIkVkaXRWYWx1ZVRvZ2dlbGVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFZhbHVlVG9nZ2VsZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFZhbHVlVG9nZ2VsZS5WYWx1ZSA9IGNvbmZpZ3VyYXRpb24uYm9vbFZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VmFsdWVUb2dnZWxlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG5cclxuICAgICAgICAgIHRoaXMuRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGUgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLkVkaXREZWZhdWx0VmFsdWVUb2dnZWxlLk5hbWUgPSBcIkVkaXREZWZhdWx0VmFsdWVUb2dnZWxlXCI7XHJcbiAgICAgICAgICB0aGlzLkVkaXREZWZhdWx0VmFsdWVUb2dnZWxlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGUuVmFsdWUgPSBjb25maWd1cmF0aW9uLmRlZmF1bHRCb29sVmFsdWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXREZWZhdWx0VmFsdWVUb2dnZWxlLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIkRyb3Bkb3duIExpc3RcIjpcclxuICAgICAgICAgIGxldCBzb3VyY2VJdGVtID0gdGhpcy5WYWx1ZVNvdXJjZUxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0gY29uZmlndXJhdGlvbi52YWx1ZVNvdXJjZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgICAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25ERExTb3VyY2VOYW1lID0gc291cmNlSXRlbS52YWx1ZTtcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5FZGl0Q29uZmlndXJhdGlvbkRETFNvdXJjZU5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIkxvb2t1cFwiOlxyXG4gICAgICAgICAgICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuU2hvd0xvb2t1cEl0ZW1zTGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTG9va3VwID0gdGhpcy5Mb29rdXBzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRMb29rdXBJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuTmFtZSA9IFwiRWRpdExvb2t1cFwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cC5MYWJlbEtleSA9IFwiTG9va3VwXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cC5EYXRhU291cmNlID0gdGhpcy5Mb29rdXBzTGlzdDtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuU2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkTG9va3VwO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRMb29rdXBWYWx1ZSA9IHJlc3VsdC5sb29rdXBJdGVtc1NvdXJjZS5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24udmFsdWU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLk5hbWUgPSBcIkVkaXRMb29rdXBWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLkRhdGFTb3VyY2UgPSByZXN1bHQubG9va3VwSXRlbXNTb3VyY2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuU2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkTG9va3VwVmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBzZWxlY3RlZExvb2t1cERlZmF1bHRWYWx1ZSA9IHJlc3VsdC5sb29rdXBJdGVtc1NvdXJjZS5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24uZGVmYXVsdFZhbHVlOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkVkaXRMb29rdXBEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0Lmxvb2t1cEl0ZW1zU291cmNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRMb29rdXBEZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJGdW5jdGlvblwiOlxyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdEZ1bmN0aW9uU291cmNlUGF0aCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdEZ1bmN0aW9uU291cmNlUGF0aC5OYW1lID0gXCJFZGl0RnVuY3Rpb25Tb3VyY2VQYXRoXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0RnVuY3Rpb25Tb3VyY2VQYXRoLkxhYmVsS2V5ID0gXCJTb3VyY2VQYXRoXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0RnVuY3Rpb25Tb3VyY2VQYXRoLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRGdW5jdGlvblNvdXJjZVBhdGguVmFsdWUgPSBjb25maWd1cmF0aW9uLnNvdXJjZUZ1bmN0aW9uTmFtZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRGdW5jdGlvblNvdXJjZVBhdGguSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgICAgICAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5Mb2FkU291cmNlRnVuY3Rpb25Ecm9wRG93bkl0ZW1zKGNvbmZpZ3VyYXRpb24uc291cmNlRnVuY3Rpb25OYW1lKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRTb3VyY2VGdW5jVmFsdWUgPSByZXN1bHQuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLmtleSA9PSBjb25maWd1cmF0aW9uLnZhbHVlOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5OYW1lID0gXCJFZGl0U291cmNlRnVuY1ZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jVmFsdWUuTGFiZWxLZXkgPSBcIlZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jVmFsdWUuRGF0YVNvdXJjZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRTb3VyY2VGdW5jVmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkU291cmNlRnVuY0RlZmF1bHRWYWx1ZSA9IHJlc3VsdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24uZGVmYXVsdFZhbHVlOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuRGF0YVNvdXJjZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuU2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkU291cmNlRnVuY0RlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uUGF0aCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzY29wSXRlbSA9IHRoaXMuU2NvcGVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBjb25maWd1cmF0aW9uLnNjb3BlSWQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbSlbMF07XHJcbiAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25TY29wZU5hbWUgPSBzY29wSXRlbS52YWx1ZTtcclxuXHJcbiAgICAgIC8vY29uc29sZS5sb2coc2NvcEl0ZW0pO1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuRWRpdENvbmZpZ3VyYXRpb25TY29wZU5hbWUpIHtcclxuICAgICAgICBjYXNlIFwiUGVybWlzc2lvbiBzZXRcIjpcclxuICAgICAgICAgIHRoaXMuU2hvd1Blcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZFBlcm1pc3Npb25TZXQgPSB0aGlzLlBlcm1pc3Npb25MaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5rZXkgPT0gY29uZmlndXJhdGlvbi5wZXJtaXNzaW9uU2V0SUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXQuTmFtZSA9IFwiRWRpdFBlcm1pc3Npb25TZXRcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXQuTGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXQuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25MaXN0O1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldC5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRQZXJtaXNzaW9uU2V0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIlVzZXJcIjpcclxuICAgICAgICAgIHRoaXMuU2hvd1VzZXJzTGlzdCA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRVc2VyID0gdGhpcy5Vc2Vyc0xpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLmtleSA9PSBjb25maWd1cmF0aW9uLnVzZXJJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5OYW1lID0gXCJFZGl0VXNlclwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5MYWJlbEtleSA9IFwiVXNlclwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuRWRpdFVzZXIuRGF0YVNvdXJjZSA9IHRoaXMuVXNlcnNMaXN0O1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRVc2VyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdENvbmZpZ3VyYXRpb25Nb2RhbCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgXHJcbiAgICB9KVxyXG4gIH1cclxuICByZXNldENvbmZpZ3VyYXRpb25GbGFncygpIHtcclxuICAgIHRoaXMuU2hvd1Blcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dVc2Vyc0xpc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1NvdXJjZVBhdGggPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uUGF0aCA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93RHJvcERvd25Tb3VyY2UgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd0xvb2t1cEl0ZW1zTGlzdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25EYXRhID0gZmFsc2U7XHJcbiAgfVxyXG4gIFNlYXJjaEZvckZ1bmN0aW9uKGlzQWRkOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gaXNBZGQgPyB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnZhbHVlIDogdGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm0udmFsdWU7XHJcbiAgICBsZXQgZnVuY3Rpb25OYW1lID0gaXNBZGQgPyBSZXN1bHRNb2RlbC5GdW5jdGlvblNvdXJjZVBhdGg6IFJlc3VsdE1vZGVsLkVkaXRGdW5jdGlvblNvdXJjZVBhdGg7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5Mb2FkU291cmNlRnVuY3Rpb25Ecm9wRG93bkl0ZW1zKGZ1bmN0aW9uTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNBZGQpIHtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZS5OYW1lID0gXCJTb3VyY2VGdW5jVmFsdWVcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY1ZhbHVlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGdW5jVmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY1ZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGdW5jRGVmYXVsdFZhbHVlLk5hbWUgPSBcIlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY0RlZmF1bHRWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY0RlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY0RlZmF1bHRWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGdW5jRGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5OYW1lID0gXCJFZGl0U291cmNlRnVuY1ZhbHVlXCI7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuTmFtZSA9IFwiRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLkRhdGFTb3VyY2UgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgIFxyXG4gICAgfSlcclxuICB9XHJcbiAgZWRpdENvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm0udmFsdWU7XHJcbiAgICAgIGNvbnNvbGUubG9nKFJlc3VsdE1vZGVsKTtcclxuICAgICAgbGV0IEVkaXRNb2RlbDogQ29uZmlndXJhdGlvbk1vZGVsID0gbmV3IENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gICAgICBFZGl0TW9kZWwuSUQgPSB0aGlzLkNvbmZpZ3VyYXRpb25JZDtcclxuICAgICAgRWRpdE1vZGVsLlZhbHVlVHlwZSA9IHRoaXMuQ29uZmlndXJhdGlvblZhbHVlVHlwZTtcclxuICAgICAgaWYgKHRoaXMuUHJvZHVjdGlvbk1vZGUgPT0gZmFsc2UpXHJcbiAgICAgICAgRWRpdE1vZGVsLktleSA9IFJlc3VsdE1vZGVsLkVkaXRLZXk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuRWRpdENvbmZpZ3VyYXRpb25UeXBlTmFtZSk7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5FZGl0Q29uZmlndXJhdGlvblR5cGVOYW1lKSB7XHJcbiAgICAgICAgY2FzZSBcIlRleHRcIjpcclxuICAgICAgICAgIEVkaXRNb2RlbC5UZXh0VmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0VGV4dFZhbHVlO1xyXG4gICAgICAgICAgRWRpdE1vZGVsLkRlZmF1bHRUZXh0VmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0VGV4dERlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJUb2dnbGVcIjpcclxuICAgICAgICAgIEVkaXRNb2RlbC5Cb29sVmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0VmFsdWVUb2dnZWxlO1xyXG4gICAgICAgICAgRWRpdE1vZGVsLkRlZmF1bHRCb29sVmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0RGVmYXVsdFZhbHVlVG9nZ2VsZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJEcm9wZG93biBMaXN0XCI6XHJcbiAgICAgICAgICBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvbkRETFNvdXJjZU5hbWUgPT0gXCJMb29rdXBcIikge1xyXG4gICAgICAgICAgICBFZGl0TW9kZWwuU2VsZWN0ZWRMb29rdXBJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5FZGl0TG9va3VwKTtcclxuICAgICAgICAgICAgRWRpdE1vZGVsLlZhbHVlID0gUmVzdWx0TW9kZWwuRWRpdExvb2t1cFZhbHVlIGFzIHN0cmluZztcclxuICAgICAgICAgICAgRWRpdE1vZGVsLkRlZmF1bHRWYWx1ZSA9IFJlc3VsdE1vZGVsLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvbkRETFNvdXJjZU5hbWUgPT0gXCJGdW5jdGlvblwiKVxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBFZGl0TW9kZWwuU291cmNlRnVuY3Rpb25OYW1lID0gUmVzdWx0TW9kZWwuRWRpdEZ1bmN0aW9uU291cmNlUGF0aDtcclxuICAgICAgICAgICAgRWRpdE1vZGVsLlZhbHVlID0gUmVzdWx0TW9kZWwuRWRpdFNvdXJjZUZ1bmNWYWx1ZTtcclxuICAgICAgICAgICAgRWRpdE1vZGVsLkRlZmF1bHRWYWx1ZSA9IFJlc3VsdE1vZGVsLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuRWRpdENvbmZpZ3VyYXRpb25TY29wZU5hbWUgPT0gXCJVc2VyXCIpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdFVzZXIpKTtcclxuICAgICAgICBFZGl0TW9kZWwuVXNlcklEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRVc2VyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLkVkaXRDb25maWd1cmF0aW9uU2NvcGVOYW1lID09IFwiUGVybWlzc2lvbiBzZXRcIilcclxuICAgICAgICBFZGl0TW9kZWwuUGVybWlzc2lvblNldElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRQZXJtaXNzaW9uU2V0KTtcclxuXHJcbiAgICAgIC8vRWRpdE1vZGVsLlNvdXJjZVBhcnRpYWxWaWV3QWN0aW9uTmFtZSA9IFJlc3VsdE1vZGVsLlNvdXJjZVBhdGg7XHJcblxyXG5cclxuICAgICAgdGhpcy5Db25maWd1cmF0aW9uc1NlcnZpY2UuRWRpdENvbmZpZ3VyYXRpb24oRWRpdE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICB0aGlzLnJlc2V0Q29uZmlndXJhdGlvbkZsYWdzKCk7XHJcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgICAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dEZWxldGVDb25maWd1cmF0aW9uTW9kYWwoQ29uZmlndXJhdGlvbjogYW55LCBkZWxldGVDb25maWd1cmF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKClcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlndXJhdGlvbkxpc3QgPSBbXVxyXG4gICAgdGhpcy5kZWxldGVDb25maWd1cmF0aW9uTGlzdC5wdXNoKENvbmZpZ3VyYXRpb24pO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihkZWxldGVDb25maWd1cmF0aW9uTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIGxldCBVc2Vyc0lETW9kZWw6IFVzZXJzSURSZXF1ZXN0TW9kZWwgPSBuZXcgVXNlcnNJRFJlcXVlc3RNb2RlbCgpO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZGVsZXRlQ29uZmlndXJhdGlvbkxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRlbGV0ZUNvbmZpZ3VyYXRpb25MaXN0W2luZGV4XTtcclxuICAgICAgVXNlcnNJRE1vZGVsLlVzZXJzSURzLnB1c2goZWxlbWVudC5pZClcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5EZWxldGVDb25maWd1cmF0aW9uKCBVc2Vyc0lETW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZGVsZXRlQ29uZmlndXJhdGlvbkxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICBcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG4gIDwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiU2hvd1BhZ2VDb250ZW50XCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OkhlYWRlciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJDb25maWd1cmF0aW9uRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIiAoY2xpY2spPVwic2hvd0FkZENvbmZpZ3VyYXRpb25Nb2RhbChBZGRDb25maWd1cmF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6Qm9keSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTNcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiS2V5XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlR5cGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2NvcGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVXNlclBlcm1pc3Npb25TZXRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IENvbmZpZ3VyYXRpb24gb2YgQ29uZmlndXJhdGlvblBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tDb25maWd1cmF0aW9uLmtleX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkPnt7Q29uZmlndXJhdGlvbi52YWx1ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibGFuZ3VhZ2U9PSdhcidcIj4ge3tDb25maWd1cmF0aW9uLnZhbHVlVHlwZU5hbWUuYXJhYmljfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiPiB7e0NvbmZpZ3VyYXRpb24udmFsdWVUeXBlTmFtZS5lbmdsaXNofX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQ+e3tDb25maWd1cmF0aW9uLnNjb3BlTmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkPnt7Q29uZmlndXJhdGlvbi5wZXJtaXNzaW9uU2V0TmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbmZpZ1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNjb25maWc9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdENvbmZpZ3VyYXRpb25Nb2RhbChDb25maWd1cmF0aW9uLmlkLENvbmZpZ3VyYXRpb24uaWRFbmNyeXB0ZWQsIEVkaXRDb25maWd1cmF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVDb25maWd1cmF0aW9uTW9kYWwoQ29uZmlndXJhdGlvbiwgZGVsZXRlQ29uZmlndXJhdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkNvbmZpZ3VyYXRpb25QYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwhLS0gZW5kOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBlbmQ6OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBiZWdpbiBwYWdpbmctLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0Q29uZmlndXJhdGlvbkxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIkNvbmZpZ3VyYXRpb25QYWdpbmdcIiBbZ3JvdXBdPVwiQ29uZmlndXJhdGlvbkZvcm1cIiAjQ29uZmlndXJhdGlvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEVuZCBwYWdpbmctLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIDwhLS0gQWRkIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjQWRkQ29uZmlndXJhdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkQ29uZmlndXJhdGlvblwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCJcclxuICAgICAgICAgICAgKG5nU3VibWl0KT1cImFkZENvbmZpZ3VyYXRpb24oKVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiS2V5XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlNjb3BlXCIgKE9uQ2hhbmdlKT1cIkNoYW5nZVNjb3BlVmFsdWUoJGV2ZW50KVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiVHlwZVwiIChPbkNoYW5nZSk9XCJDaGFuZ2VUeXBlVmFsdWUoJGV2ZW50KVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJWYWx1ZVwiICpuZ0lmPVwiU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJEZWZhdWx0VmFsdWVcIiAqbmdJZj1cIlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIlZhbHVlVG9nZ2VsXCIgKm5nSWY9XCJTaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWVcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiRGVmYXVsdFZhbHVlVG9nZ2VsXCIgKm5nSWY9XCJTaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWVcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlNvdXJjZVwiICpuZ0lmPVwiU2hvd0Ryb3BEb3duU291cmNlXCIgKE9uQ2hhbmdlKT1cIkNoYW5nZVNvdXJjZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlNvdXJjZVBhdGhcIiAqbmdJZj1cIlNob3dTb3VyY2VQYXRoXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiU2hvd1NvdXJjZUZ1bmN0aW9uUGF0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkZ1bmN0aW9uU291cmNlUGF0aFwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiU2VhcmNoRm9yRnVuY3Rpb24odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlNvdXJjZUZ1bmNWYWx1ZVwiICpuZ0lmPVwiU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiU291cmNlRnVuY0RlZmF1bHRWYWx1ZVwiICpuZ0lmPVwiU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiTG9va3VwXCIgKm5nSWY9XCJTaG93TG9va3VwTGlzdFwiIChPbkNoYW5nZSk9XCJDaGFuZ2VMb29rdXAoJGV2ZW50KVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiTG9va3VwVmFsdWVcIiAqbmdJZj1cIlNob3dMb29rdXBJdGVtc0xpc3RcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkxvb2t1cERlZmF1bHRWYWx1ZVwiICpuZ0lmPVwiU2hvd0xvb2t1cEl0ZW1zTGlzdFwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiUGVybWlzc2lvblNldFwiICpuZ0lmPVwiU2hvd1Blcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJVc2VyXCIgKm5nSWY9XCJTaG93VXNlcnNMaXN0XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VDb25maWd1cmF0aW9uTW9kYWwgaWQ9XCJDbG9zZUNvbmZpZ3VyYXRpb25Nb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tRWRpdCBNb2RhbC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjRWRpdENvbmZpZ3VyYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDb25maWd1cmF0aW9uXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIiAobmdTdWJtaXQpPVwiZWRpdENvbmZpZ3VyYXRpb24oKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0S2V5XCIgW2dyb3VwXT1cIkVkaXRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFRleHRWYWx1ZVwiICpuZ0lmPVwiU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlXCIgW2dyb3VwXT1cIkVkaXRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFRleHREZWZhdWx0VmFsdWVcIiAqbmdJZj1cIlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZVwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJFZGl0VmFsdWVUb2dnZWxlXCIgKm5nSWY9XCJTaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWVcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkVkaXREZWZhdWx0VmFsdWVUb2dnZWxlXCIgKm5nSWY9XCJTaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWVcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIlNob3dTb3VyY2VGdW5jdGlvblBhdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0RnVuY3Rpb25Tb3VyY2VQYXRoXCIgW2dyb3VwXT1cIkVkaXRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiU2VhcmNoRm9yRnVuY3Rpb24oZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbG9hdC1yaWdodFwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0U291cmNlRnVuY1ZhbHVlXCIgKm5nSWY9XCJTaG93U291cmNlRnVuY3Rpb25QYXRoXCIgW2dyb3VwXT1cIkVkaXRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIiAqbmdJZj1cIlNob3dTb3VyY2VGdW5jdGlvblBhdGhcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0TG9va3VwXCIgKm5nSWY9XCJTaG93TG9va3VwTGlzdFwiIChPbkNoYW5nZSk9XCJDaGFuZ2VFZGl0TG9va3VwKCRldmVudClcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0TG9va3VwVmFsdWVcIiAqbmdJZj1cIlNob3dMb29rdXBJdGVtc0xpc3RcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0TG9va3VwRGVmYXVsdFZhbHVlXCIgKm5nSWY9XCJTaG93TG9va3VwSXRlbXNMaXN0XCIgW2dyb3VwXT1cIkVkaXRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFBlcm1pc3Npb25TZXRcIiAqbmdJZj1cIlNob3dQZXJtaXNzaW9uTGlzdFwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlclwiICpuZ0lmPVwiU2hvd1VzZXJzTGlzdFwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRDb25maWd1cmF0aW9uTW9kYWwgaWQ9XCJDbG9zZUVkaXRDb25maWd1cmF0aW9uTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDwhLS1kZWxldGVkIE1vZGFsLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNkZWxldGVDb25maWd1cmF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDb25maWd1cmF0aW9uXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtZGFuZ2VyIHJvdW5kZWQgYm9yZGVyLWRhbmdlciBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi1kYW5nZXIgbWUtNFwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZV9RdWVzdGlvblwiKX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRGVsZXRlQ29uZmlndXJhdGlvbk1vZGFsIGlkPVwiQ2xvc2VEZWxldGVDb25maWd1cmF0aW9uTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBtZS0zIFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVDb25maWd1cmF0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4tc20gXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=
|
|
730
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeE4sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFaEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBS3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBTXZGLE1BQU0sT0FBTyxzQkFBc0I7SUEwRmpDLFlBQW9CLFdBQXdCLEVBQVUsZUFBZ0MsRUFDN0UsY0FBOEIsRUFBVSxvQkFBMEMsRUFD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QUFVLEdBQVUsRUFBRSxDQUFDO1FBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMseUJBQXlCLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2hGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7UUFDL0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBTUQsWUFBWTtJQUNaLFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7b0hBaHlCVSxzQkFBc0I7d0dBQXRCLHNCQUFzQixpVENuQm5DLGs5ZkFnV0E7NEZEN1VhLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixXQUFXLEVBQUUsZ0NBQWdDO2lCQUM5QztnVUFlaUUsYUFBYTtzQkFBNUUsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBMEVKLHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbExheW91dCwgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBUb2dnbGVTbGlkZU9wdGlvbnMsIEZvcm1PcHRpb25zLCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIFBhZ2luZ0FjdGlvbk1vZGUgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Db25maWd1cmF0aW9uc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvQ29uZmlndXJhdGlvbk1vZGVscy9Db25maWd1cmF0aW9uTW9kZWwnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IFBhZ2luZ0NvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblR5cGVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL0VudW1zL0NvbmZpZ3VyYXRpb25UeXBlJztcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNjb3BlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL0VudW1zL0NvbmZpZ3VyYXRpb25TY29wZSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25WYWx1ZVNvdXJjZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9FbnVtcy9Db25maWd1cmF0aW9uVmFsdWVTb3VyY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY29uZmlndXJhdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL0NvbmZpZ3VyYXRpb24vXCI7XHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIENvbmZpZ3VyYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIENvbmZpZ3VyYXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBDb25maWd1cmF0aW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlndXJhdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDtcclxuXHJcbiAgLy9SZXF1aXJlZCBsaXN0c1xyXG4gIFNjb3Blc0xpc3Q6IGFueVtdID0gW107XHJcbiAgUGVybWlzc2lvbkxpc3Q6IGFueVtdID0gW107XHJcbiAgVXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIExvb2t1cHNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIExvb2t1cEl0ZW1zTGlzdDogYW55W10gPSBbXTtcclxuICBWYWx1ZVR5cGVMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFZhbHVlU291cmNlTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgLy9BZGQsRWRpdCByZXF1aXJlZCBmbGFnc1xyXG4gIFNob3dQZXJtaXNzaW9uTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3dVc2Vyc0xpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG93TG9va3VwTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFNob3dTb3VyY2VGdW5jdGlvblBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG93RHJvcERvd25Tb3VyY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG93TG9va3VwSXRlbXNMaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dGdW5jdGlvbk5vdEZvdW5kRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzb3VyY2VGdW5jdGlvbkRhdGFOb3RMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRDb25maWd1cmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZENvbmZpZ3VyYXRpb25Gb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICBLZXk6IFRleHRCb3hPcHRpb25zO1xyXG4gIFZhbHVlOiBUZXh0Qm94T3B0aW9ucztcclxuICBEZWZhdWx0VmFsdWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEZ1bmN0aW9uU291cmNlUGF0aDogVGV4dEJveE9wdGlvbnM7XHJcbiAgU291cmNlRnVuY1ZhbHVlOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgU291cmNlRnVuY0RlZmF1bHRWYWx1ZTogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIFZhbHVlVG9nZ2VsOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgRGVmYXVsdFZhbHVlVG9nZ2VsOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgU2NvcGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgUGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG4gIFVzZXI6IERyb3Bkb3duT3B0aW9ucztcclxuICBTb3VyY2U6IERyb3Bkb3duT3B0aW9ucztcclxuICBMb29rdXA6IERyb3Bkb3duT3B0aW9ucztcclxuICBMb29rdXBWYWx1ZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIExvb2t1cERlZmF1bHRWYWx1ZTogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0Q29uZmlndXJhdGlvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0Q29uZmlndXJhdGlvbkZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIEVkaXRLZXk6IFRleHRCb3hPcHRpb25zID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgRWRpdFRleHRWYWx1ZTogVGV4dEJveE9wdGlvbnMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICBFZGl0VGV4dERlZmF1bHRWYWx1ZTogVGV4dEJveE9wdGlvbnMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICBFZGl0U291cmNlUGF0aDogVGV4dEJveE9wdGlvbnMgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICBFZGl0RnVuY3Rpb25Tb3VyY2VQYXRoOiBUZXh0Qm94T3B0aW9ucyA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gIEVkaXRWYWx1ZVRvZ2dlbGU6IFRvZ2dsZVNsaWRlT3B0aW9ucyA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICBFZGl0RGVmYXVsdFZhbHVlVG9nZ2VsZTogVG9nZ2xlU2xpZGVPcHRpb25zID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gIEVkaXRTY29wZTogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIEVkaXRUeXBlOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgRWRpdFBlcm1pc3Npb25TZXQ6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBFZGl0VXNlcjogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIEVkaXRTb3VyY2U6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBFZGl0TG9va3VwOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgRWRpdExvb2t1cFZhbHVlOiBEcm9wZG93bk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgRWRpdExvb2t1cERlZmF1bHRWYWx1ZTogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIEVkaXRTb3VyY2VGdW5jVmFsdWU6IERyb3Bkb3duT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICBFZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZTogRHJvcGRvd25PcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gIENvbmZpZ3VyYXRpb25JZDogbnVtYmVyO1xyXG4gIENvbmZpZ3VyYXRpb25WYWx1ZVR5cGU6IG51bWJlcjtcclxuICBFZGl0Q29uZmlndXJhdGlvblNjb3BlSUQ6IG51bWJlcjtcclxuICBFZGl0Q29uZmlndXJhdGlvblR5cGVJRDogbnVtYmVyO1xyXG4gIEVkaXRDb25maWd1cmF0aW9uRERMU291cmNlSUQ6IG51bWJlcjtcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlQ29uZmlndXJhdGlvbklkOiBzdHJpbmc7XHJcbiAgRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgQ29uZmlndXJhdGlvbnNTZXJ2aWNlOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgLy9QYWdlIGhlYWRlciAoYnJlYWRjcnVtYiBhbmQgdGl0bGUpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlPXRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvbmZpZ3VyYXRpb25cIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnM9W1xyXG4gICAgICAge3RpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpICwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAge3RpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2V9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG5cclxuICAgIC8vb24gbGFuZyBjaGFuZ2VkXHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KT0+e1xyXG4gICAgICB0aGlzLlNob3dQYWdlQ29udGVudD1mYWxzZTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpO1xyXG5cclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgLy8gVGV4dEJveCBpbml0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgIHRoaXMuQ29uZmlndXJhdGlvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25QYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldENvbmZpZ3VyYXRpb25zQnlGaWx0ZXInO1xyXG4gICAgdGhpcy5Db25maWd1cmF0aW9uUGFnaW5nLk9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiXVxyXG4gICAgdGhpcy5Db25maWd1cmF0aW9uUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25QYWdpbmcuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRDb25maWd1cmF0aW9uTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuQ29uZmlndXJhdGlvblBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcbiAgc2VhcmNoQ2xpZW50U2lkZShzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQuZmlsdGVyKFxyXG4gICAgICAgIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbS5rZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9KVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLkNvbmZpZ3VyYXRpb25QYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvL0FkZCBjb25maWd1cmF0aW9uXHJcbiAgc2hvd0FkZENvbmZpZ3VyYXRpb25Nb2RhbChBZGRDb25maWd1cmF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnJlc2V0Q29uZmlndXJhdGlvbkZsYWdzKCk7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5sb2FkQWRkRHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgLy9MaXN0cyBsb2FkaW5nXHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLlNjb3Blc0xpc3QgPSByZXN1bHRPYmouc2NvcGVzO1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25MaXN0ID0gcmVzdWx0T2JqLnBlcm1pc3Npb25MaXN0O1xyXG4gICAgICB0aGlzLlVzZXJzTGlzdCA9IHJlc3VsdE9iai51c2VycztcclxuICAgICAgdGhpcy5Mb29rdXBzTGlzdCA9IHJlc3VsdE9iai5sb29rdXBzO1xyXG4gICAgICB0aGlzLlZhbHVlVHlwZUxpc3QgPSByZXN1bHRPYmoudmFsdWVUeXBlO1xyXG4gICAgICB0aGlzLlZhbHVlU291cmNlTGlzdCA9IHJlc3VsdE9iai52YWx1ZVNvdXJjZTtcclxuXHJcbiAgICAgIC8vRm9ybSBhbmQgY29udHJvbHMgcmVpbml0aWFsaXplXHJcbiAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm1cclxuICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkQ29uZmlndXJhdGlvbk1vZGVsO1xyXG4gICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZENvbmZpZ3VyYXRpb25GdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICAvL1N0YXRpYyBjb250cm9sc1xyXG4gICAgICB0aGlzLktleSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLktleS5OYW1lID0gXCJLZXlcIjtcclxuICAgICAgdGhpcy5LZXkuTGFiZWxLZXkgPSBcIktleVwiO1xyXG4gICAgICB0aGlzLktleS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuS2V5LklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLktleS5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLlNjb3BlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlNjb3BlLk5hbWUgPSBcIlNjb3BlXCI7XHJcbiAgICAgIHRoaXMuU2NvcGUuTGFiZWxLZXkgPSBcIlNjb3BlXCI7XHJcbiAgICAgIHRoaXMuU2NvcGUuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuU2NvcGUuRGF0YVNvdXJjZSA9IHRoaXMuU2NvcGVzTGlzdDtcclxuICAgICAgdGhpcy5TY29wZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLlNjb3BlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5TY29wZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5UeXBlLk5hbWUgPSBcIlR5cGVcIjtcclxuICAgICAgdGhpcy5UeXBlLkxhYmVsS2V5ID0gXCJUeXBlXCI7XHJcbiAgICAgIHRoaXMuVHlwZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5UeXBlLkRhdGFTb3VyY2UgPSB0aGlzLlZhbHVlVHlwZUxpc3Q7XHJcbiAgICAgIHRoaXMuVHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLlR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLlR5cGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldC5OYW1lID0gXCJQZXJtaXNzaW9uU2V0XCI7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiO1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXQuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldC5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uTGlzdDtcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuVXNlciA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5Vc2VyLk5hbWUgPSBcIlVzZXJcIjtcclxuICAgICAgdGhpcy5Vc2VyLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuVXNlci5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5Vc2VyLkRhdGFTb3VyY2UgPSB0aGlzLlVzZXJzTGlzdDtcclxuICAgICAgdGhpcy5Vc2VyLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuVXNlci5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuVXNlci5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkQ29uZmlndXJhdGlvbk1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9SZXF1aXJlZCBGdW5jdGlvbnMgZm9yIEFkZFxyXG4gIENoYW5nZVR5cGVWYWx1ZShrZXkpIHtcclxuICAgIGxldCB0eXBlSXRlbSA9IHRoaXMuVmFsdWVUeXBlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBrZXk7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbSlbMF07XHJcbiAgICB0aGlzLnJlc2V0Q29uZmlndXJhdGlvbkZsYWdzKCk7XHJcbiAgICB0aGlzLnJlbW92ZUZvcm1Db250cm9scygpO1xyXG4gICAgc3dpdGNoICh0eXBlSXRlbS52YWx1ZSkge1xyXG4gICAgICBjYXNlIFwiVGV4dFwiOlxyXG4gICAgICAgIHRoaXMuVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLlZhbHVlLk5hbWUgPSBcIlZhbHVlXCI7XHJcbiAgICAgICAgdGhpcy5WYWx1ZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgICB0aGlzLlZhbHVlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLlZhbHVlLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLlZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgdGhpcy5EZWZhdWx0VmFsdWUuVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJUb2dnbGVcIjpcclxuICAgICAgICB0aGlzLlZhbHVlVG9nZ2VsID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuVmFsdWVUb2dnZWwuTmFtZSA9IFwiVmFsdWVUb2dnZWxcIjtcclxuICAgICAgICB0aGlzLlZhbHVlVG9nZ2VsLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgIHRoaXMuVmFsdWVUb2dnZWwuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlZhbHVlVG9nZ2VsLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG5cclxuICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZVRvZ2dlbCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZVRvZ2dlbC5OYW1lID0gXCJEZWZhdWx0VmFsdWVUb2dnZWxcIjtcclxuICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZVRvZ2dlbC5MYWJlbEtleSA9IFwiRGVmYXVsdFZhbHVlXCI7XHJcbiAgICAgICAgdGhpcy5EZWZhdWx0VmFsdWVUb2dnZWwuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkRlZmF1bHRWYWx1ZVRvZ2dlbC5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgICAgdGhpcy5TaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWUgPSB0cnVlO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkRyb3Bkb3duIExpc3RcIjpcclxuICAgICAgICB0aGlzLlNvdXJjZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLlNvdXJjZS5OYW1lID0gXCJTb3VyY2VcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZS5MYWJlbEtleSA9IFwiU291cmNlXCI7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2UuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2UuRGF0YVNvdXJjZSA9IHRoaXMuVmFsdWVTb3VyY2VMaXN0O1xyXG4gICAgICAgIHRoaXMuU291cmNlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2UuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU291cmNlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLlNob3dEcm9wRG93blNvdXJjZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBDaGFuZ2VTb3VyY2Uoa2V5KSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlIENvbmZpZ3VyYXRpb25WYWx1ZVNvdXJjZS5Mb29rdXA6XHJcbiAgICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiRnVuY3Rpb25Tb3VyY2VQYXRoXCIpO1xyXG4gICAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlNvdXJjZUZ1bmNWYWx1ZVwiKTtcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJTb3VyY2VGdW5jRGVmYXVsdFZhbHVlXCIpO1xyXG4gICAgICAgIHRoaXMuTG9va3VwID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuTG9va3VwLk5hbWUgPSBcIkxvb2t1cFwiO1xyXG4gICAgICAgIHRoaXMuTG9va3VwLkxhYmVsS2V5ID0gXCJMb29rdXBcIjtcclxuICAgICAgICB0aGlzLkxvb2t1cC5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICB0aGlzLkxvb2t1cC5EYXRhU291cmNlID0gdGhpcy5Mb29rdXBzTGlzdDtcclxuICAgICAgICB0aGlzLkxvb2t1cC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuTG9va3VwLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkxvb2t1cC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5TaG93TG9va3VwTGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25QYXRoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VGdW5jdGlvbkRhdGFOb3RMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25maWd1cmF0aW9uVmFsdWVTb3VyY2UuRnVuY3Rpb246XHJcbiAgICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiTG9va3VwXCIpO1xyXG4gICAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIkxvb2t1cFZhbHVlXCIpO1xyXG4gICAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIkxvb2t1cERlZmF1bHRWYWx1ZVwiKTtcclxuICAgICAgICB0aGlzLkZ1bmN0aW9uU291cmNlUGF0aCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRnVuY3Rpb25Tb3VyY2VQYXRoLk5hbWUgPSBcIkZ1bmN0aW9uU291cmNlUGF0aFwiO1xyXG4gICAgICAgIHRoaXMuRnVuY3Rpb25Tb3VyY2VQYXRoLkxhYmVsVmFsdWUgPSBcIlNvdXJjZVBhdGhcIjtcclxuICAgICAgICB0aGlzLkZ1bmN0aW9uU291cmNlUGF0aC5MYWJlbEtleSA9IFwiU291cmNlUGF0aFwiO1xyXG4gICAgICAgIHRoaXMuRnVuY3Rpb25Tb3VyY2VQYXRoLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICB0aGlzLkZ1bmN0aW9uU291cmNlUGF0aC5WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5GdW5jdGlvblNvdXJjZVBhdGguSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uUGF0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VGdW5jdGlvbkRhdGFOb3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUZvcm1Db250cm9scygpIHtcclxuICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlZhbHVlXCIpO1xyXG4gICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiRGVmYXVsdFZhbHVlXCIpO1xyXG4gICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiVmFsdWVUb2dnZWxcIik7XHJcbiAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJEZWZhdWx0VmFsdWVUb2dnZWxcIik7XHJcbiAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJTb3VyY2VcIik7XHJcbiAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJMb29rdXBcIik7XHJcbiAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJMb29rdXBWYWx1ZVwiKTtcclxuICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIkxvb2t1cERlZmF1bHRWYWx1ZVwiKTtcclxuICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIkZ1bmN0aW9uU291cmNlUGF0aFwiKTtcclxuICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlNvdXJjZUZ1bmNWYWx1ZVwiKTtcclxuICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIik7XHJcbiAgfVxyXG5cclxuICBDaGFuZ2VMb29rdXAoa2V5KSB7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5sb2FkTG9va3VwSXRlbXMoa2V5KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgUmVzdWx0ID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5Mb29rdXBJdGVtc0xpc3QgPSBSZXN1bHQubG9va3VwSXRlbXM7XHJcbiAgICAgIHRoaXMuTG9va3VwVmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuTG9va3VwVmFsdWUuTmFtZSA9IFwiTG9va3VwVmFsdWVcIjtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5EYXRhU291cmNlID0gdGhpcy5Mb29rdXBJdGVtc0xpc3Q7XHJcbiAgICAgIHRoaXMuTG9va3VwVmFsdWUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5Mb29rdXBWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuTG9va3VwVmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuTG9va3VwVmFsdWUuU2hvd0FzdGVyaXNrID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuTG9va3VwRGVmYXVsdFZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkxvb2t1cERlZmF1bHRWYWx1ZS5OYW1lID0gXCJMb29rdXBEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgdGhpcy5Mb29rdXBEZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICB0aGlzLkxvb2t1cERlZmF1bHRWYWx1ZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5Mb29rdXBEZWZhdWx0VmFsdWUuRGF0YVNvdXJjZSA9IHRoaXMuTG9va3VwSXRlbXNMaXN0O1xyXG4gICAgICB0aGlzLkxvb2t1cERlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkxvb2t1cERlZmF1bHRWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuTG9va3VwRGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSB0cnVlO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFkZENvbmZpZ3VyYXRpb25Nb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS52YWx1ZTtcclxuICAgIGxldCBBZGRNb2RlbDogQ29uZmlndXJhdGlvbk1vZGVsID0gbmV3IENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gICAgQWRkTW9kZWwuS2V5ID0gUmVzdWx0TW9kZWwuS2V5O1xyXG4gICAgQWRkTW9kZWwuU2NvcGVJZCA9IE51bWJlcihSZXN1bHRNb2RlbC5TY29wZSk7XHJcbiAgICBBZGRNb2RlbC5WYWx1ZVR5cGUgPSBOdW1iZXIoUmVzdWx0TW9kZWwuVHlwZSk7XHJcbiAgICBBZGRNb2RlbC5UZXh0VmFsdWUgPSBSZXN1bHRNb2RlbC5WYWx1ZTtcclxuICAgIEFkZE1vZGVsLkRlZmF1bHRUZXh0VmFsdWUgPSBSZXN1bHRNb2RlbC5EZWZhdWx0VmFsdWU7XHJcbiAgICBBZGRNb2RlbC5Cb29sVmFsdWUgPSBSZXN1bHRNb2RlbC5WYWx1ZVRvZ2dlbDtcclxuICAgIEFkZE1vZGVsLkRlZmF1bHRCb29sVmFsdWUgPSBSZXN1bHRNb2RlbC5EZWZhdWx0VmFsdWVUb2dnZWw7XHJcbiAgICBBZGRNb2RlbC5Tb3VyY2VGdW5jdGlvbk5hbWUgPSBSZXN1bHRNb2RlbC5GdW5jdGlvblNvdXJjZVBhdGg7XHJcbiAgICBBZGRNb2RlbC5Vc2VySUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuVXNlcik7XHJcbiAgICBBZGRNb2RlbC5TZWxlY3RlZExvb2t1cElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkxvb2t1cCk7XHJcbiAgICBBZGRNb2RlbC5WYWx1ZSA9IFJlc3VsdE1vZGVsLkxvb2t1cFZhbHVlO1xyXG4gICAgQWRkTW9kZWwuRGVmYXVsdFZhbHVlID0gUmVzdWx0TW9kZWwuTG9va3VwRGVmYXVsdFZhbHVlO1xyXG5cclxuICAgIEFkZE1vZGVsLlBlcm1pc3Npb25TZXRJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5QZXJtaXNzaW9uU2V0KTtcclxuICAgIEFkZE1vZGVsLlZhbHVlU291cmNlID0gTnVtYmVyKFJlc3VsdE1vZGVsLlNvdXJjZSk7XHJcblxyXG4gICAgbGV0IHNvdXJjZUl0ZW0gPSB0aGlzLlZhbHVlU291cmNlTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBBZGRNb2RlbC5WYWx1ZVNvdXJjZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgIGlmIChzb3VyY2VJdGVtICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgQ29uZmlndXJhdGlvbkRETFNvdXJjZU5hbWUgPSBzb3VyY2VJdGVtLnZhbHVlO1xyXG4gICAgICBpZiAoQ29uZmlndXJhdGlvbkRETFNvdXJjZU5hbWUgPT0gXCJGdW5jdGlvblwiKSB7XHJcbiAgICAgICAgQWRkTW9kZWwuVmFsdWUgPSBSZXN1bHRNb2RlbC5Tb3VyY2VGdW5jVmFsdWU7XHJcbiAgICAgICAgQWRkTW9kZWwuRGVmYXVsdFZhbHVlID0gUmVzdWx0TW9kZWwuU291cmNlRnVuY0RlZmF1bHRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZENvbmZpZ3VyYXRpb25GdW5jdGlvbiA9IChBZGRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Db25maWd1cmF0aW9uc1NlcnZpY2UuYWRkQ29uZmlndXJhdGlvbihBZGRNb2RlbClcclxuICB9XHJcblxyXG4gIC8vRWRpdCBjb25maWd1cmF0aW9uXHJcbiAgc2hvd0VkaXRDb25maWd1cmF0aW9uTW9kYWwoY29uZmlndXJhdGlvbklkOiBudW1iZXIsIGNvbmZpZ3VyYXRpb25JREVuYzogc3RyaW5nLCBFZGl0Q29uZmlndXJhdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25JZCA9IGNvbmZpZ3VyYXRpb25JZDtcclxuICAgIHRoaXMucmVzZXRDb25maWd1cmF0aW9uRmxhZ3MoKTtcclxuICAgIHRoaXMuQ29uZmlndXJhdGlvbnNTZXJ2aWNlLmdldEVkaXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uSURFbmMpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIC8vRWRpdCBtb2RlbFxyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgLy9Mb2FkIGxvb2t1cHMgbGlzdFxyXG4gICAgICB0aGlzLkxvb2t1cHNMaXN0ID0gcmVzdWx0T2JqLmxvb2t1cHM7XHJcbiAgICAgIC8vTG9hZCBsb29rdXBJdGVtcyBsaXN0XHJcbiAgICAgIGxldCBsb29rdXBJdGVtcyA9IHJlc3VsdE9iai5sb29rdXBJdGVtc1NvdXJjZTtcclxuXHJcbiAgICAgIC8vRm9ybSBhbmQgY29udHJvbHMgcmVpbml0aWFsaXplXHJcbiAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25Gb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkVkaXRDb25maWd1cmF0aW9uRm9ybVxyXG4gICAgICB0aGlzLkVkaXRDb25maWd1cmF0aW9uRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdENvbmZpZ3VyYXRpb25Nb2RlbDtcclxuICAgICAgdGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdENvbmZpZ3VyYXRpb25GdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG4gICAgICB0aGlzLkVkaXRDb25maWd1cmF0aW9uRm9ybU9wdGlvbnMuUGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlXHJcblxyXG4gICAgICB0aGlzLkNvbmZpZ3VyYXRpb25WYWx1ZVR5cGUgPSBjb25maWd1cmF0aW9uLnZhbHVlVHlwZTtcclxuICAgICAgdGhpcy5FZGl0Q29uZmlndXJhdGlvblNjb3BlSUQgPSBjb25maWd1cmF0aW9uLnNjb3BlSWQ7XHJcbiAgICAgIHRoaXMuRWRpdEtleSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuTmFtZSA9IFwiRWRpdEtleVwiO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuTGFiZWxLZXkgPSBcIktleVwiO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRLZXkuSXNSZXF1aXJlZCA9ICF0aGlzLlByb2R1Y3Rpb25Nb2RlO1xyXG4gICAgICB0aGlzLkVkaXRLZXkuVmFsdWUgPSBjb25maWd1cmF0aW9uLmtleTtcclxuICAgICAgdGhpcy5FZGl0S2V5Lk1heExlbmd0aCA9IDI1NjtcclxuICAgICAgdGhpcy5FZGl0S2V5LklzRGlzYWJsZWQgPSB0aGlzLlByb2R1Y3Rpb25Nb2RlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0Q29uZmlndXJhdGlvblR5cGVJRCA9IGNvbmZpZ3VyYXRpb24udmFsdWVUeXBlO1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuRWRpdENvbmZpZ3VyYXRpb25UeXBlSUQpIHtcclxuICAgICAgICBjYXNlIENvbmZpZ3VyYXRpb25UeXBlcy5UZXh0OlxyXG4gICAgICAgICAgdGhpcy5TaG93VmFsdWVBbmREZWZhdWx0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0VmFsdWUuTmFtZSA9IFwiRWRpdFRleHRWYWx1ZVwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dFZhbHVlLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dFZhbHVlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHRWYWx1ZS5WYWx1ZSA9IGNvbmZpZ3VyYXRpb24udGV4dFZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0RGVmYXVsdFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0RGVmYXVsdFZhbHVlLk5hbWUgPSBcIkVkaXRUZXh0RGVmYXVsdFZhbHVlXCI7XHJcbiAgICAgICAgICB0aGlzLkVkaXRUZXh0RGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHREZWZhdWx0VmFsdWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgdGhpcy5FZGl0VGV4dERlZmF1bHRWYWx1ZS5WYWx1ZSA9IGNvbmZpZ3VyYXRpb24uZGVmYXVsdFRleHRWYWx1ZTtcclxuICAgICAgICAgIHRoaXMuRWRpdFRleHREZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbmZpZ3VyYXRpb25UeXBlcy5Ub2dnbGU6XHJcbiAgICAgICAgICB0aGlzLlNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRWYWx1ZVRvZ2dlbGUgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLkVkaXRWYWx1ZVRvZ2dlbGUuTmFtZSA9IFwiRWRpdFZhbHVlVG9nZ2VsZVwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VmFsdWVUb2dnZWxlLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VmFsdWVUb2dnZWxlLlZhbHVlID0gY29uZmlndXJhdGlvbi5ib29sVmFsdWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRWYWx1ZVRvZ2dlbGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcblxyXG4gICAgICAgICAgdGhpcy5FZGl0RGVmYXVsdFZhbHVlVG9nZ2VsZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgICAgIHRoaXMuRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGUuTmFtZSA9IFwiRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGVcIjtcclxuICAgICAgICAgIHRoaXMuRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0RGVmYXVsdFZhbHVlVG9nZ2VsZS5WYWx1ZSA9IGNvbmZpZ3VyYXRpb24uZGVmYXVsdEJvb2xWYWx1ZTtcclxuICAgICAgICAgIHRoaXMuRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbmZpZ3VyYXRpb25UeXBlcy5EREw6XHJcbiAgICAgICAgICB0aGlzLkVkaXRDb25maWd1cmF0aW9uRERMU291cmNlSUQgPSBjb25maWd1cmF0aW9uLnZhbHVlU291cmNlO1xyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLkVkaXRDb25maWd1cmF0aW9uRERMU291cmNlSUQpIHtcclxuICAgICAgICAgICAgY2FzZSBDb25maWd1cmF0aW9uVmFsdWVTb3VyY2UuTG9va3VwOlxyXG4gICAgICAgICAgICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuU2hvd0xvb2t1cEl0ZW1zTGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTG9va3VwID0gdGhpcy5Mb29rdXBzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24uc2VsZWN0ZWRMb29rdXBJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuTmFtZSA9IFwiRWRpdExvb2t1cFwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cC5MYWJlbEtleSA9IFwiTG9va3VwXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cC5EYXRhU291cmNlID0gdGhpcy5Mb29rdXBzTGlzdDtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXAuU2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkTG9va3VwO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRMb29rdXBWYWx1ZSA9IGxvb2t1cEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5rZXkgPT0gY29uZmlndXJhdGlvbi52YWx1ZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuTmFtZSA9IFwiRWRpdExvb2t1cFZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuTGFiZWxLZXkgPSBcIlZhbHVlXCI7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuRGF0YVNvdXJjZSA9IGxvb2t1cEl0ZW1zO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZExvb2t1cFZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRMb29rdXBEZWZhdWx0VmFsdWUgPSBsb29rdXBJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24uZGVmYXVsdFZhbHVlOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkVkaXRMb29rdXBEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5EYXRhU291cmNlID0gbG9va3VwSXRlbXM7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZExvb2t1cERlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb25maWd1cmF0aW9uVmFsdWVTb3VyY2UuRnVuY3Rpb246XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0RnVuY3Rpb25Tb3VyY2VQYXRoID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5FZGl0RnVuY3Rpb25Tb3VyY2VQYXRoLk5hbWUgPSBcIkVkaXRGdW5jdGlvblNvdXJjZVBhdGhcIjtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRGdW5jdGlvblNvdXJjZVBhdGguTGFiZWxLZXkgPSBcIlNvdXJjZVBhdGhcIjtcclxuICAgICAgICAgICAgICB0aGlzLkVkaXRGdW5jdGlvblNvdXJjZVBhdGguVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdEZ1bmN0aW9uU291cmNlUGF0aC5WYWx1ZSA9IGNvbmZpZ3VyYXRpb24uc291cmNlRnVuY3Rpb25OYW1lO1xyXG4gICAgICAgICAgICAgIHRoaXMuRWRpdEZ1bmN0aW9uU291cmNlUGF0aC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuQ29uZmlndXJhdGlvbnNTZXJ2aWNlLmxvYWRTb3VyY2VGdW5jdGlvbkRyb3BEb3duSXRlbXMoY29uZmlndXJhdGlvbi5zb3VyY2VGdW5jdGlvbk5hbWUpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZFNvdXJjZUZ1bmNWYWx1ZSA9IHJlc3VsdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24udmFsdWU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLk5hbWUgPSBcIkVkaXRTb3VyY2VGdW5jVmFsdWVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jVmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFNvdXJjZUZ1bmNWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlID0gcmVzdWx0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5rZXkgPT0gY29uZmlndXJhdGlvbi5kZWZhdWx0VmFsdWU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuTmFtZSA9IFwiRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25QYXRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25TY29wZUlEID0gY29uZmlndXJhdGlvbi5zY29wZUlkO1xyXG5cclxuICAgICAgLy9jb25zb2xlLmxvZyhzY29wSXRlbSk7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5FZGl0Q29uZmlndXJhdGlvblNjb3BlSUQpIHtcclxuICAgICAgICBjYXNlIENvbmZpZ3VyYXRpb25TY29wZS5QZXJtaXNzaW9uU2V0OlxyXG4gICAgICAgICAgdGhpcy5TaG93UGVybWlzc2lvbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkUGVybWlzc2lvblNldCA9IHRoaXMuUGVybWlzc2lvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLmtleSA9PSBjb25maWd1cmF0aW9uLnBlcm1pc3Npb25TZXRJRDsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcbiAgICAgICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldC5OYW1lID0gXCJFZGl0UGVybWlzc2lvblNldFwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiO1xyXG4gICAgICAgICAgdGhpcy5FZGl0UGVybWlzc2lvblNldC5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMuUGVybWlzc2lvbkxpc3Q7XHJcbiAgICAgICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25TZXQuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRQZXJtaXNzaW9uU2V0LlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFBlcm1pc3Npb25TZXQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbmZpZ3VyYXRpb25TY29wZS5Vc2VyOlxyXG4gICAgICAgICAgdGhpcy5TaG93VXNlcnNMaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBzZWxlY3RlZFVzZXIgPSB0aGlzLlVzZXJzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IGNvbmZpZ3VyYXRpb24udXNlcklEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgICAgIHRoaXMuRWRpdFVzZXIgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLk5hbWUgPSBcIkVkaXRVc2VyXCI7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5FZGl0VXNlci5EYXRhU291cmNlID0gdGhpcy5Vc2Vyc0xpc3Q7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuRWRpdFVzZXIuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkVkaXRVc2VyLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFVzZXI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0Q29uZmlndXJhdGlvbk1vZGFsKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0Q29uZmlndXJhdGlvbk1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRDb25maWd1cmF0aW9uRm9ybS52YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKFJlc3VsdE1vZGVsKTtcclxuICAgIGxldCBFZGl0TW9kZWw6IENvbmZpZ3VyYXRpb25Nb2RlbCA9IG5ldyBDb25maWd1cmF0aW9uTW9kZWwoKTtcclxuICAgIEVkaXRNb2RlbC5JRCA9IHRoaXMuQ29uZmlndXJhdGlvbklkO1xyXG4gICAgRWRpdE1vZGVsLlZhbHVlVHlwZSA9IHRoaXMuQ29uZmlndXJhdGlvblZhbHVlVHlwZTtcclxuICAgIEVkaXRNb2RlbC5TY29wZUlkID0gdGhpcy5FZGl0Q29uZmlndXJhdGlvblNjb3BlSUQ7XHJcbiAgICBFZGl0TW9kZWwuS2V5ID0gUmVzdWx0TW9kZWwuRWRpdEtleTtcclxuICAgIFxyXG4gICAgc3dpdGNoICh0aGlzLkVkaXRDb25maWd1cmF0aW9uVHlwZUlEKSB7XHJcbiAgICAgIGNhc2UgQ29uZmlndXJhdGlvblR5cGVzLlRleHQ6XHJcbiAgICAgICAgRWRpdE1vZGVsLlRleHRWYWx1ZSA9IFJlc3VsdE1vZGVsLkVkaXRUZXh0VmFsdWU7XHJcbiAgICAgICAgRWRpdE1vZGVsLkRlZmF1bHRUZXh0VmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0VGV4dERlZmF1bHRWYWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25maWd1cmF0aW9uVHlwZXMuVG9nZ2xlOlxyXG4gICAgICAgIEVkaXRNb2RlbC5Cb29sVmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0VmFsdWVUb2dnZWxlO1xyXG4gICAgICAgIEVkaXRNb2RlbC5EZWZhdWx0Qm9vbFZhbHVlID0gUmVzdWx0TW9kZWwuRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uZmlndXJhdGlvblR5cGVzLkRETDpcclxuICAgICAgICBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvbkRETFNvdXJjZUlEID09IENvbmZpZ3VyYXRpb25WYWx1ZVNvdXJjZS5Mb29rdXApIHtcclxuICAgICAgICAgIEVkaXRNb2RlbC5TZWxlY3RlZExvb2t1cElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRMb29rdXApO1xyXG4gICAgICAgICAgRWRpdE1vZGVsLlZhbHVlID0gUmVzdWx0TW9kZWwuRWRpdExvb2t1cFZhbHVlIGFzIHN0cmluZztcclxuICAgICAgICAgIEVkaXRNb2RlbC5EZWZhdWx0VmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0TG9va3VwRGVmYXVsdFZhbHVlIGFzIHN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvbkRETFNvdXJjZUlEID09IENvbmZpZ3VyYXRpb25WYWx1ZVNvdXJjZS5GdW5jdGlvbikge1xyXG4gICAgICAgICAgRWRpdE1vZGVsLlNvdXJjZUZ1bmN0aW9uTmFtZSA9IFJlc3VsdE1vZGVsLkVkaXRGdW5jdGlvblNvdXJjZVBhdGg7XHJcbiAgICAgICAgICBFZGl0TW9kZWwuVmFsdWUgPSBSZXN1bHRNb2RlbC5FZGl0U291cmNlRnVuY1ZhbHVlO1xyXG4gICAgICAgICAgRWRpdE1vZGVsLkRlZmF1bHRWYWx1ZSA9IFJlc3VsdE1vZGVsLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvblNjb3BlSUQgPT0gQ29uZmlndXJhdGlvblNjb3BlLlVzZXIpIHtcclxuICAgICAgY29uc29sZS5sb2coTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRVc2VyKSk7XHJcbiAgICAgIEVkaXRNb2RlbC5Vc2VySUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdFVzZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5FZGl0Q29uZmlndXJhdGlvblNjb3BlSUQgPT0gQ29uZmlndXJhdGlvblNjb3BlLlBlcm1pc3Npb25TZXQpXHJcbiAgICAgIEVkaXRNb2RlbC5QZXJtaXNzaW9uU2V0SUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdFBlcm1pc3Npb25TZXQpO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRDb25maWd1cmF0aW9uRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5lZGl0Q29uZmlndXJhdGlvbihFZGl0TW9kZWwpXHJcbiAgfVxyXG5cclxuICBDaGFuZ2VFZGl0TG9va3VwKGtleSkge1xyXG4gICAgdGhpcy5TaG93TG9va3VwSXRlbXNMaXN0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5Db25maWd1cmF0aW9uc1NlcnZpY2UubG9hZExvb2t1cEl0ZW1zKGtleSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IFJlc3VsdCA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCBMb29rdXBJdGVtc0xpc3RFZGl0ID0gUmVzdWx0Lmxvb2t1cEl0ZW1zO1xyXG4gICAgICAvL1Jlc2luaXRpYWxpemUgbG9va3VwIHZhbHVlcyBhbmQgZGVmYXVsdCB2YWx1ZXNcclxuXHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5OYW1lID0gXCJFZGl0TG9va3VwVmFsdWVcIjtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuTGFiZWxLZXkgPSBcIlZhbHVlXCI7XHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5EYXRhU291cmNlID0gTG9va3VwSXRlbXNMaXN0RWRpdDtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwVmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBWYWx1ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLk5hbWUgPSBcIkVkaXRMb29rdXBEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgdGhpcy5FZGl0TG9va3VwRGVmYXVsdFZhbHVlLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuRGF0YVNvdXJjZSA9IExvb2t1cEl0ZW1zTGlzdEVkaXQ7XHJcbiAgICAgIHRoaXMuRWRpdExvb2t1cERlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRMb29rdXBEZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLlNob3dMb29rdXBJdGVtc0xpc3QgPSB0cnVlO1xyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9BZGQsRWRpdCByZXF1aXJlZCBmdW5jdGlvbnNcclxuICBDaGFuZ2VTY29wZVZhbHVlKGtleSkge1xyXG4gICAgbGV0IHNjb3BJdGVtID0gdGhpcy5TY29wZXNMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGtleTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgIHN3aXRjaCAoc2NvcEl0ZW0udmFsdWUpIHtcclxuICAgICAgY2FzZSBcIkFwcFwiOlxyXG4gICAgICAgIHRoaXMuU2hvd1Blcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93VXNlcnNMaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BZGRDb25maWd1cmF0aW9uRm9ybS5yZW1vdmVDb250cm9sKFwiVXNlclwiKVxyXG4gICAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlBlcm1pc3Npb25TZXRcIilcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQZXJtaXNzaW9uIHNldFwiOlxyXG4gICAgICAgIHRoaXMuU2hvd1Blcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dVc2Vyc0xpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJVc2VyXCIpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVXNlclwiOlxyXG4gICAgICAgIHRoaXMuU2hvd1Blcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TaG93VXNlcnNMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJQZXJtaXNzaW9uU2V0XCIpXHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXNldENvbmZpZ3VyYXRpb25GbGFncygpIHtcclxuICAgIHRoaXMuU2hvd1Blcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dVc2Vyc0xpc3QgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd0xvb2t1cExpc3QgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLlNob3dWYWx1ZUFuZERlZmF1bHRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93VmFsdWVUb2dnbGVBbmREZWZhdWx0VmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uUGF0aCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93RnVuY3Rpb25Ob3RGb3VuZEVycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dEcm9wRG93blNvdXJjZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5TaG93TG9va3VwSXRlbXNMaXN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLlNob3dTb3VyY2VGdW5jdGlvbkRhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMuc291cmNlRnVuY3Rpb25EYXRhTm90TG9hZGVkID0gZmFsc2U7XHJcbiAgfVxyXG4gIFNlYXJjaEZvckZ1bmN0aW9uKGlzQWRkOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gaXNBZGQgPyB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnZhbHVlIDogdGhpcy5FZGl0Q29uZmlndXJhdGlvbkZvcm0udmFsdWU7XHJcbiAgICBsZXQgZnVuY3Rpb25OYW1lID0gaXNBZGQgPyBSZXN1bHRNb2RlbC5GdW5jdGlvblNvdXJjZVBhdGg6IFJlc3VsdE1vZGVsLkVkaXRGdW5jdGlvblNvdXJjZVBhdGg7XHJcbiAgICB0aGlzLkNvbmZpZ3VyYXRpb25zU2VydmljZS5sb2FkU291cmNlRnVuY3Rpb25Ecm9wRG93bkl0ZW1zKGZ1bmN0aW9uTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25EYXRhID0gZmFsc2U7XHJcbiAgICAgIGlmIChpc0FkZCkge1xyXG4gICAgICAgIHRoaXMuQWRkQ29uZmlndXJhdGlvbkZvcm0ucmVtb3ZlQ29udHJvbChcIlNvdXJjZUZ1bmNWYWx1ZVwiKTtcclxuICAgICAgICB0aGlzLkFkZENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJTb3VyY2VGdW5jRGVmYXVsdFZhbHVlXCIpO1xyXG5cclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZS5OYW1lID0gXCJTb3VyY2VGdW5jVmFsdWVcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZS5MYWJlbEtleSA9IFwiVmFsdWVcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY1ZhbHVlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGdW5jVmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY1ZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGdW5jRGVmYXVsdFZhbHVlLk5hbWUgPSBcIlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLlNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuTGFiZWxLZXkgPSBcIkRlZmF1bHRWYWx1ZVwiO1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY0RlZmF1bHRWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY0RlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU291cmNlRnVuY0RlZmF1bHRWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5Tb3VyY2VGdW5jRGVmYXVsdFZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0U291cmNlRnVuY1ZhbHVlXCIpO1xyXG4gICAgICAgIHRoaXMuRWRpdENvbmZpZ3VyYXRpb25Gb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5OYW1lID0gXCJFZGl0U291cmNlRnVuY1ZhbHVlXCI7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLkxhYmVsS2V5ID0gXCJWYWx1ZVwiO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5EYXRhU291cmNlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNWYWx1ZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY1ZhbHVlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuTmFtZSA9IFwiRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLkxhYmVsS2V5ID0gXCJEZWZhdWx0VmFsdWVcIjtcclxuICAgICAgICB0aGlzLkVkaXRTb3VyY2VGdW5jRGVmYXVsdFZhbHVlLkRhdGFTb3VyY2UgPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5FZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNvdXJjZUZ1bmNEZWZhdWx0VmFsdWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zb3VyY2VGdW5jdGlvbkRhdGFOb3RMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5TaG93U291cmNlRnVuY3Rpb25EYXRhID0gdHJ1ZTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgICB0aGlzLnNob3dGdW5jdGlvbk5vdEZvdW5kRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc291cmNlRnVuY3Rpb25EYXRhTm90TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgXHJcbiAgICB9KVxyXG4gIH1cclxuICBjaGFuZ2VTb3VyY2VGdW5jdGlvbigpIHtcclxuICAgIHRoaXMuU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zb3VyY2VGdW5jdGlvbkRhdGFOb3RMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuICAvL0RlbGV0ZSBjb25maWd1cmF0aW9uXHJcbiAgc2hvd0RlbGV0ZUNvbmZpZ3VyYXRpb25Nb2RhbChjb25maWd1cmF0aW9uSUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVDb25maWd1cmF0aW9uSWQgPSBjb25maWd1cmF0aW9uSUQ7XHJcblxyXG4gICAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKHRoaXMuZGVsZXRlQ29uZmlndXJhdGlvbklkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVDb25maWd1cmF0aW9uO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVDb25maWd1cmF0aW9uID0gKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQ29uZmlndXJhdGlvbnNTZXJ2aWNlLmRlbGV0ZUNvbmZpZ3VyYXRpb24oaWQpO1xyXG4gIH1cclxuXHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcbjwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIj5cclxuICAgIDwhLS0gYmVnaW46OkhlYWRlciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCAoT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJDb25maWd1cmF0aW9uRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIkFkZFwiIChjbGljayk9XCJzaG93QWRkQ29uZmlndXJhdGlvbk1vZGFsKEFkZENvbmZpZ3VyYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICAgIDwhLS0gYmVnaW46OkJvZHkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiS2V5XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2NvcGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJQZXJtaXNzaW9uU2V0XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IENvbmZpZ3VyYXRpb24gb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7Q29uZmlndXJhdGlvbi5rZXl9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3tDb25maWd1cmF0aW9uLnZhbHVlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPiB7e0NvbmZpZ3VyYXRpb24udmFsdWVUeXBlTmFtZVN0cn19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD57e0NvbmZpZ3VyYXRpb24uc2NvcGVOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7Q29uZmlndXJhdGlvbi5wZXJtaXNzaW9uU2V0TmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbmZpZ1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNjb25maWc9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0Q29uZmlndXJhdGlvbk1vZGFsKENvbmZpZ3VyYXRpb24uaWQsQ29uZmlndXJhdGlvbi5pZEVuY3J5cHRlZCwgRWRpdENvbmZpZ3VyYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVDb25maWd1cmF0aW9uTW9kYWwoQ29uZmlndXJhdGlvbi5pZEVuY3J5cHRlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwhLS0gZW5kOjpUYWJsZSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIGVuZDo6VGFibGUgY29udGFpbmVyIC0tPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gYmVnaW4gcGFnaW5nLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0Q29uZmlndXJhdGlvbkxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJDb25maWd1cmF0aW9uUGFnaW5nXCIgW2dyb3VwXT1cIkNvbmZpZ3VyYXRpb25Gb3JtXCIgI0NvbmZpZ3VyYXRpb25QYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBFbmQgcGFnaW5nLS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSBBZGQgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQWRkQ29uZmlndXJhdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRDb25maWd1cmF0aW9uXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRDb25maWd1cmF0aW9uRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiS2V5XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIlNjb3BlXCIgKE9uQ2hhbmdlKT1cIkNoYW5nZVNjb3BlVmFsdWUoJGV2ZW50KVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiUGVybWlzc2lvblNldFwiICpuZ0lmPVwiU2hvd1Blcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJVc2VyXCIgKm5nSWY9XCJTaG93VXNlcnNMaXN0XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJUeXBlXCIgKE9uQ2hhbmdlKT1cIkNoYW5nZVR5cGVWYWx1ZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlZhbHVlXCIgKm5nSWY9XCJTaG93VmFsdWVBbmREZWZhdWx0VmFsdWVcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkRlZmF1bHRWYWx1ZVwiICpuZ0lmPVwiU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiVmFsdWVUb2dnZWxcIiAqbmdJZj1cIlNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJEZWZhdWx0VmFsdWVUb2dnZWxcIiAqbmdJZj1cIlNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZVwiIFtncm91cF09XCJBZGRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiU291cmNlXCIgKm5nSWY9XCJTaG93RHJvcERvd25Tb3VyY2VcIiAoT25DaGFuZ2UpPVwiQ2hhbmdlU291cmNlKCRldmVudClcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIlNob3dTb3VyY2VGdW5jdGlvblBhdGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJGdW5jdGlvblNvdXJjZVBhdGhcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIiAoT25DaGFuZ2UpPVwiY2hhbmdlU291cmNlRnVuY3Rpb24oKVwiPlxyXG4gICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGdW5jdGlvbk5vdEZvdW5kRXJyb3JcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU291cmNlRnVuY3Rpb25Ob3RGb3VuZFwiKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJTZWFyY2hGb3JGdW5jdGlvbih0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxvYXQtcmlnaHRcIj48aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiU291cmNlRnVuY1ZhbHVlXCIgKm5nSWY9XCJTaG93U291cmNlRnVuY3Rpb25EYXRhXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJTb3VyY2VGdW5jRGVmYXVsdFZhbHVlXCIgKm5nSWY9XCJTaG93U291cmNlRnVuY3Rpb25EYXRhXCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiU2hvd0xvb2t1cExpc3RcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJMb29rdXBcIiAoT25DaGFuZ2UpPVwiQ2hhbmdlTG9va3VwKCRldmVudClcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkxvb2t1cFZhbHVlXCIgKm5nSWY9XCJTaG93TG9va3VwSXRlbXNMaXN0XCIgW2dyb3VwXT1cIkFkZENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJMb29rdXBEZWZhdWx0VmFsdWVcIiAqbmdJZj1cIlNob3dMb29rdXBJdGVtc0xpc3RcIiBbZ3JvdXBdPVwiQWRkQ29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlQ29uZmlndXJhdGlvbk1vZGFsIGlkPVwiQ2xvc2VDb25maWd1cmF0aW9uTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBbZGlzYWJsZWRdPVwic291cmNlRnVuY3Rpb25EYXRhTm90TG9hZGVkXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLUVkaXQgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNFZGl0Q29uZmlndXJhdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ29uZmlndXJhdGlvblwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRLZXlcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFBlcm1pc3Npb25TZXRcIiAqbmdJZj1cIlNob3dQZXJtaXNzaW9uTGlzdFwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlclwiICpuZ0lmPVwiU2hvd1VzZXJzTGlzdFwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VGV4dFZhbHVlXCIgKm5nSWY9XCJTaG93VmFsdWVBbmREZWZhdWx0VmFsdWVcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VGV4dERlZmF1bHRWYWx1ZVwiICpuZ0lmPVwiU2hvd1ZhbHVlQW5kRGVmYXVsdFZhbHVlXCIgW2dyb3VwXT1cIkVkaXRDb25maWd1cmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkVkaXRWYWx1ZVRvZ2dlbGVcIiAqbmdJZj1cIlNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZVwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiRWRpdERlZmF1bHRWYWx1ZVRvZ2dlbGVcIiAqbmdJZj1cIlNob3dWYWx1ZVRvZ2dsZUFuZERlZmF1bHRWYWx1ZVwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIlNob3dTb3VyY2VGdW5jdGlvblBhdGhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdEZ1bmN0aW9uU291cmNlUGF0aFwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIiAoT25DaGFuZ2UpPVwiY2hhbmdlU291cmNlRnVuY3Rpb24oKVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0Z1bmN0aW9uTm90Rm91bmRFcnJvclwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTb3VyY2VGdW5jdGlvbk5vdEZvdW5kXCIpfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIG1iLTRcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIlNlYXJjaEZvckZ1bmN0aW9uKGZhbHNlKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRTb3VyY2VGdW5jVmFsdWVcIiAqbmdJZj1cIlNob3dTb3VyY2VGdW5jdGlvbkRhdGFcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0U291cmNlRnVuY0RlZmF1bHRWYWx1ZVwiICpuZ0lmPVwiU2hvd1NvdXJjZUZ1bmN0aW9uRGF0YVwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRMb29rdXBcIiAqbmdJZj1cIlNob3dMb29rdXBMaXN0XCIgKE9uQ2hhbmdlKT1cIkNoYW5nZUVkaXRMb29rdXAoJGV2ZW50KVwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRMb29rdXBWYWx1ZVwiICpuZ0lmPVwiU2hvd0xvb2t1cEl0ZW1zTGlzdFwiIFtncm91cF09XCJFZGl0Q29uZmlndXJhdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRMb29rdXBEZWZhdWx0VmFsdWVcIiAqbmdJZj1cIlNob3dMb29rdXBJdGVtc0xpc3RcIiBbZ3JvdXBdPVwiRWRpdENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VFZGl0Q29uZmlndXJhdGlvbk1vZGFsIGlkPVwiQ2xvc2VFZGl0Q29uZmlndXJhdGlvbk1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtICBtZS0zXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgW2Rpc2FibGVkXT1cInNvdXJjZUZ1bmN0aW9uRGF0YU5vdExvYWRlZFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tZGVsZXRlZCBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJEZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIiAjQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcbiJdfQ==
|