@bnsights/bbsf-admin-portal 1.0.7 → 1.0.11
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.11.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +9643 -4461
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/ActiveDirectories/active-directory/active-directory.component.js +316 -258
- package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js +367 -222
- package/esm2015/lib/Pages/ActiveDirectories/active-directory.module.js +16 -4
- package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
- package/esm2015/lib/Pages/_layout/components/aside/aside.component.js +12 -8
- package/esm2015/lib/Pages/_layout/components/topbar/topbar.component.js +5 -7
- package/esm2015/lib/Pages/anonymouslayout/activation/activation.component.js +92 -0
- package/esm2015/lib/Pages/anonymouslayout/anonymouslayout-routing.module.js +35 -0
- package/esm2015/lib/Pages/anonymouslayout/anonymouslayout.component.js +50 -0
- package/esm2015/lib/Pages/anonymouslayout/anonymouslayout.module.js +75 -0
- package/esm2015/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.js +55 -0
- package/esm2015/lib/Pages/anonymouslayout/login/login.component.js +26 -0
- package/esm2015/lib/Pages/anonymouslayout/rest-password/rest-password.component.js +90 -0
- package/esm2015/lib/Pages/anonymouslayout/upload-license/upload-license.component.js +71 -0
- package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +32 -15
- package/esm2015/lib/Pages/core/authentication/admin.guard.js +17 -0
- package/esm2015/lib/Pages/core/authentication/auth.guard.js +10 -5
- package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
- package/esm2015/lib/Pages/departments/department/department.component.js +9 -8
- package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +3 -3
- package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +3 -3
- package/esm2015/lib/Pages/home/home.component.js +3 -3
- package/esm2015/lib/Pages/localizations/localizations.component.js +22 -6
- package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +3 -3
- package/esm2015/lib/Pages/notifications/add/add.component.js +1 -3
- package/esm2015/lib/Pages/notifications/edit/edit.component.js +1 -3
- package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +2 -2
- package/esm2015/lib/Pages/notifications/templates/templates.component.js +3 -3
- package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +76 -82
- package/esm2015/lib/Pages/shared/Enums/ADType.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/ADWindowsType.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/ConditionRHSType.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/WFActivityType.js +12 -0
- package/esm2015/lib/Pages/shared/Enums/WFVariableDataType.js +14 -0
- package/esm2015/lib/Pages/shared/Services/AccountService.service.js +26 -1
- package/esm2015/lib/Pages/shared/Services/ActiveDirectoryService.service.js +18 -18
- package/esm2015/lib/Pages/shared/Services/AnonymousLayoutService.service.js +29 -0
- package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +2 -2
- package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +3 -3
- package/esm2015/lib/Pages/shared/Services/GlobalErrorHandler.service.js +1 -14
- package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +2 -2
- package/esm2015/lib/Pages/shared/Services/HttpErrorInterceptor.service.js +1 -1
- package/esm2015/lib/Pages/shared/Services/LookupService.service.js +2 -2
- package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +2 -2
- package/esm2015/lib/Pages/shared/Services/SectorService.service.js +3 -3
- package/esm2015/lib/Pages/shared/Services/WorkFlowVersionService.service.js +24 -0
- package/esm2015/lib/Pages/shared/Services/WorkflowActivityService.service.js +32 -5
- package/esm2015/lib/Pages/shared/Services/WorkflowInstanceService.service.js +24 -0
- package/esm2015/lib/Pages/shared/Services/WorkflowLogVariablesService.service.js +24 -0
- package/esm2015/lib/Pages/shared/Services/WorkflowService.service.js +12 -4
- package/esm2015/lib/Pages/shared/Services/WorkflowVariablesService.service.js +12 -6
- package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +6 -3
- package/esm2015/lib/Pages/shared/Services/provider.service.js +3 -3
- package/esm2015/lib/Pages/shared/Services/userService.service.js +3 -3
- package/esm2015/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +28 -4
- package/esm2015/lib/Pages/shared/models/UserModels/ActivationModel.js +3 -0
- package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.js +8 -0
- package/esm2015/lib/Pages/shared/models/user.registration.js +1 -1
- package/esm2015/lib/Pages/shared/stylesbundle.service.js +3 -3
- package/esm2015/lib/Pages/users/users.component.js +2 -2
- package/esm2015/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.js +535 -0
- package/esm2015/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.js +852 -0
- package/esm2015/lib/Pages/workflows/instance-info/instance-info.component.js +309 -0
- package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +611 -430
- package/esm2015/lib/Pages/workflows/version-info/version-info.component.js +143 -0
- package/esm2015/lib/Pages/workflows/workflow/workflow.component.js +136 -148
- package/esm2015/lib/Pages/workflows/workflows-routing.module.js +9 -1
- package/esm2015/lib/Pages/workflows/workflows.module.js +7 -3
- package/esm2015/lib/masterlayout-routing.module.js +4 -4
- package/esm2015/lib/masterlayout.component.js +2 -2
- package/esm2015/lib/masterlayout.module.js +26 -7
- package/esm2015/public-api.js +4 -5
- package/fesm2015/bnsights-bbsf-admin-portal.js +15248 -10155
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/ActiveDirectories/active-directory/active-directory.component.d.ts +65 -56
- package/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.d.ts +70 -43
- package/lib/Pages/ActiveDirectories/active-directory.module.d.ts +4 -1
- package/lib/Pages/_layout/components/aside/aside.component.d.ts +4 -1
- package/lib/Pages/_layout/components/topbar/topbar.component.d.ts +2 -1
- package/lib/Pages/anonymouslayout/activation/activation.component.d.ts +32 -0
- package/lib/Pages/anonymouslayout/anonymouslayout-routing.module.d.ts +7 -0
- package/lib/Pages/anonymouslayout/anonymouslayout.component.d.ts +21 -0
- package/lib/Pages/anonymouslayout/anonymouslayout.module.d.ts +19 -0
- package/lib/Pages/{account → anonymouslayout}/forgot-password/forgot-password.component.d.ts +4 -1
- package/lib/Pages/{account → anonymouslayout}/login/login.component.d.ts +3 -2
- package/lib/Pages/anonymouslayout/rest-password/rest-password.component.d.ts +32 -0
- package/lib/Pages/anonymouslayout/upload-license/upload-license.component.d.ts +25 -0
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +2 -0
- package/lib/Pages/core/authentication/admin.guard.d.ts +9 -0
- package/lib/Pages/localizations/localizations.component.d.ts +1 -0
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +11 -14
- package/lib/Pages/shared/Enums/ADType.d.ts +4 -0
- package/lib/Pages/shared/Enums/ADWindowsType.d.ts +4 -0
- package/lib/Pages/shared/Enums/ConditionRHSType.d.ts +4 -0
- package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -0
- package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +12 -0
- package/lib/Pages/shared/Services/AccountService.service.d.ts +8 -0
- package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +9 -9
- package/lib/Pages/shared/Services/AnonymousLayoutService.service.d.ts +17 -0
- package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +9 -3
- package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/WorkflowService.service.d.ts +5 -3
- package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +5 -4
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +1 -0
- package/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.d.ts +11 -6
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +1 -0
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +8 -9
- package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -0
- package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -0
- package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -0
- package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +83 -0
- package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -0
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +73 -80
- package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -0
- package/lib/Pages/workflows/workflow/workflow.component.d.ts +26 -29
- package/lib/Pages/workflows/workflows.module.d.ts +19 -15
- package/lib/masterlayout.module.d.ts +2 -2
- package/package.json +5 -3
- package/public-api.d.ts +3 -4
- package/src/lib/assets/css/anonymousBundle-Dark-RTL.css +4 -0
- package/src/lib/assets/css/anonymousBundle-Dark.css +4 -0
- package/src/lib/assets/css/anonymousBundle-light-RTL.css +4 -0
- package/src/lib/assets/css/anonymousBundle-light.css +18 -0
- package/src/lib/assets/css/login.css +74671 -0
- package/src/lib/assets/sass/custom-styles-rtl.scss +13 -3
- package/src/lib/assets/sass/custom-styles.scss +38 -11
- package/bnsights-bbsf-admin-portal-1.0.7.tgz +0 -0
- package/esm2015/lib/Pages/account/account-routing.module.js +0 -28
- package/esm2015/lib/Pages/account/account.component.js +0 -27
- package/esm2015/lib/Pages/account/account.module.js +0 -56
- package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +0 -48
- package/esm2015/lib/Pages/account/login/login.component.js +0 -25
- package/esm2015/lib/Pages/account/register/register.component.js +0 -48
- package/lib/Pages/account/account-routing.module.d.ts +0 -7
- package/lib/Pages/account/account.component.d.ts +0 -12
- package/lib/Pages/account/account.module.d.ts +0 -16
- package/lib/Pages/account/register/register.component.d.ts +0 -21
package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js
CHANGED
|
@@ -1,170 +1,208 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { Component, ViewChild } from '@angular/core';
|
|
3
3
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import { ToggleSlideOptions, ControlLayout, DropdownOptions, InputType, TextBoxOptions, CheckBoxOptions } from '@bnsights/bbsf-controls';
|
|
4
|
+
import { ToggleSlideOptions, ControlLayout, DropdownOptions, InputType, TextBoxOptions, CheckBoxOptions, FormOptions } from '@bnsights/bbsf-controls';
|
|
5
5
|
import { ActiveDirectoryAddEditModel } from '../../shared/models/ADModels/ActiveDirectoryAddEditModel';
|
|
6
6
|
import { ADMappingModel } from '../../shared/models/ADModels/ADMappingModel';
|
|
7
7
|
import { BehaviorSubject } from 'rxjs';
|
|
8
|
+
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
9
|
+
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
10
|
+
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
|
|
11
|
+
import { ADType } from '../../shared/Enums/ADType';
|
|
12
|
+
import { ADWindowsType } from '../../shared/Enums/ADWindowsType';
|
|
8
13
|
import * as i0 from "@angular/core";
|
|
9
14
|
import * as i1 from "../../../_metronic/core/services/page-info.service";
|
|
10
15
|
import * as i2 from "@bnsights/bbsf-utilities";
|
|
11
|
-
import * as i3 from "../../shared/Services/
|
|
12
|
-
import * as i4 from "
|
|
13
|
-
import * as i5 from "@
|
|
14
|
-
import * as i6 from "@
|
|
15
|
-
import * as i7 from "@angular/
|
|
16
|
-
import * as i8 from "@angular/
|
|
16
|
+
import * as i3 from "../../shared/Services/ActiveDirectoryService.service";
|
|
17
|
+
import * as i4 from "@angular/router";
|
|
18
|
+
import * as i5 from "@bnsights/bbsf-controls";
|
|
19
|
+
import * as i6 from "@angular/material/tree";
|
|
20
|
+
import * as i7 from "@angular/material/checkbox";
|
|
21
|
+
import * as i8 from "@angular/common";
|
|
17
22
|
import * as i9 from "ng-inline-svg";
|
|
18
23
|
export class ActiveDirectoryAddComponent {
|
|
19
|
-
constructor(pageInfoService, utilityService, bbsfTranslateService,
|
|
24
|
+
constructor(pageInfoService, utilityService, bbsfTranslateService, ActiveDirectoryService, router, requestHandlerService) {
|
|
20
25
|
this.pageInfoService = pageInfoService;
|
|
21
26
|
this.utilityService = utilityService;
|
|
22
27
|
this.bbsfTranslateService = bbsfTranslateService;
|
|
23
|
-
this.environmentService = environmentService;
|
|
24
|
-
this.dataServices = dataServices;
|
|
25
|
-
this.authService = authService;
|
|
26
28
|
this.ActiveDirectoryService = ActiveDirectoryService;
|
|
27
29
|
this.router = router;
|
|
28
|
-
this.
|
|
29
|
-
this.language = "";
|
|
30
|
-
this.ProductionMode = false;
|
|
30
|
+
this.requestHandlerService = requestHandlerService;
|
|
31
31
|
//wizard
|
|
32
|
-
this.formsCount =
|
|
32
|
+
this.formsCount = 2;
|
|
33
33
|
this.currentStep$ = new BehaviorSubject(1);
|
|
34
34
|
//wizard
|
|
35
|
-
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
35
|
+
//Required Lists
|
|
36
|
+
this.permissionSetList = [];
|
|
37
|
+
this.languagesList = [];
|
|
38
|
+
this.welcomeMsgTempList = [];
|
|
39
|
+
this.adTypesList = [];
|
|
40
|
+
this.fileProviders = [];
|
|
40
41
|
this.mappingPropertiesList = [];
|
|
41
42
|
this.mappingTypesList = [];
|
|
43
|
+
//Windows
|
|
44
|
+
this.adWindowsTypes = [];
|
|
42
45
|
//Add Model Controls
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
//AddDescription: TextAreaOptions;
|
|
49
|
-
//AddOrganizationOptions: DropdownOptions;
|
|
50
|
-
this.submitted = false;
|
|
46
|
+
this.addActiveDirectoryForm = new FormGroup({});
|
|
47
|
+
this.addMappingsOptions = [];
|
|
48
|
+
this.addMappingsCount = 0;
|
|
49
|
+
this.isAddFormLoaded = false;
|
|
50
|
+
this.addShowBuiltInGroupsVisible = false;
|
|
51
51
|
this.errorIsFound = false;
|
|
52
|
+
this.treeDataLoaded = false;
|
|
53
|
+
this.selected = -1;
|
|
54
|
+
this.identifier = "";
|
|
55
|
+
this.identifierName = "";
|
|
56
|
+
//Add Active directory functions
|
|
57
|
+
this.getAddADModel = () => {
|
|
58
|
+
let paramArray = [];
|
|
59
|
+
let ResultModel = this.addActiveDirectoryForm.value;
|
|
60
|
+
//console.log(ResultModel);
|
|
61
|
+
let AddModel = new ActiveDirectoryAddEditModel();
|
|
62
|
+
AddModel.ConnectionName = ResultModel.addName;
|
|
63
|
+
AddModel.ADTypeItemID = ResultModel.addTypeOptions != null ? Number(ResultModel.addTypeOptions) : null;
|
|
64
|
+
AddModel.PermissionSetID = ResultModel.addPermissionSet != null ? Number(ResultModel.addPermissionSet) : null;
|
|
65
|
+
AddModel.LangKey = ResultModel.addLanguage;
|
|
66
|
+
AddModel.WelcomeTemplateID = ResultModel.addWelcomeMsgTemp != null ? Number(ResultModel.addWelcomeMsgTemp) : null;
|
|
67
|
+
AddModel.ImagesFileProviderName = ResultModel.addFileProvider;
|
|
68
|
+
AddModel.MarkAsInactive = ResultModel.addMarkInactive;
|
|
69
|
+
AddModel.AddToDailyJob = ResultModel.addDailyJob;
|
|
70
|
+
if (this.selectedType == Number(ADType.Windows)) {
|
|
71
|
+
AddModel.Identifier = this.identifier;
|
|
72
|
+
AddModel.Domain = ResultModel.addDomain;
|
|
73
|
+
AddModel.SamAccount = ResultModel.addSamAccount;
|
|
74
|
+
AddModel.Password = ResultModel.addPassword;
|
|
75
|
+
AddModel.ShowBuiltInGroups = ResultModel.addShowBuiltInGroups;
|
|
76
|
+
AddModel.ADWindowsTypeItemID = ResultModel.addWindowsTypeOptions != null ? Number(ResultModel.addWindowsTypeOptions) : null;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
AddModel.TenantID = ResultModel.addTenantID;
|
|
80
|
+
AddModel.ClientID = ResultModel.addClientID;
|
|
81
|
+
AddModel.ClientSecret = ResultModel.addClientSecret;
|
|
82
|
+
}
|
|
83
|
+
for (let j = 0; j < this.addMappingsCount; j++) {
|
|
84
|
+
let addMAppingType = ResultModel["ADMappingType" + j];
|
|
85
|
+
if (addMAppingType == undefined)
|
|
86
|
+
continue;
|
|
87
|
+
let editMAppingProperty = ResultModel["ADMappingProperty" + j];
|
|
88
|
+
let editMAppingPropertyName = ResultModel["ADMappingPropertyName" + j];
|
|
89
|
+
let adMAppingObj = new ADMappingModel();
|
|
90
|
+
adMAppingObj.ADMappingTypeItemID = Number(addMAppingType);
|
|
91
|
+
adMAppingObj.BBSFPropertyName = editMAppingProperty;
|
|
92
|
+
adMAppingObj.ADPropertyName = editMAppingPropertyName;
|
|
93
|
+
AddModel.ADMappings.push(adMAppingObj);
|
|
94
|
+
}
|
|
95
|
+
paramArray.push(AddModel);
|
|
96
|
+
return paramArray;
|
|
97
|
+
};
|
|
98
|
+
this.getAddADFunction = (addModel) => {
|
|
99
|
+
return this.ActiveDirectoryService.addActiveDirectory(addModel);
|
|
100
|
+
};
|
|
101
|
+
this.addADOnSuccess = (result) => {
|
|
102
|
+
this.router.navigate(['/Admin/ADConnection']);
|
|
103
|
+
};
|
|
52
104
|
}
|
|
105
|
+
;
|
|
53
106
|
ngOnInit() {
|
|
54
107
|
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
PageInfoService.PageTitle = this.utilityService.getResourceValue("AddActiveDirectory");
|
|
109
|
+
PageInfoService.PageBreadcrumbs = [
|
|
110
|
+
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
111
|
+
{ title: '', path: '', isSeparator: true, isActive: false },
|
|
112
|
+
{ title: this.utilityService.getResourceValue("ADConnection"), path: '/Admin/ADConnection', isSeparator: false, isActive: false },
|
|
113
|
+
{ title: '', path: '', isSeparator: true, isActive: false }
|
|
114
|
+
];
|
|
115
|
+
this.pageInfoService.calculateTitle();
|
|
116
|
+
this.pageInfoService.calculateBreadcrumbs();
|
|
55
117
|
this.bbsfTranslateService.onLangChange.subscribe((event) => {
|
|
56
|
-
this.language = event.lang;
|
|
57
118
|
this.ngOnInit();
|
|
58
119
|
});
|
|
59
|
-
this.language = yield this.utilityService.getCurrentLanguage();
|
|
60
|
-
this.ProductionMode = this.environmentService.getProductionMode();
|
|
61
120
|
this.initializePage();
|
|
62
121
|
});
|
|
63
122
|
}
|
|
123
|
+
//Init page
|
|
64
124
|
initializePage() {
|
|
65
|
-
this.ActiveDirectoryService.
|
|
66
|
-
let
|
|
67
|
-
this.
|
|
68
|
-
this.
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
71
|
-
this.
|
|
72
|
-
this.
|
|
73
|
-
this.mappingPropertiesList =
|
|
74
|
-
this.mappingTypesList =
|
|
75
|
-
this.
|
|
76
|
-
this.
|
|
77
|
-
this.
|
|
78
|
-
this.
|
|
79
|
-
this.
|
|
80
|
-
this.
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
84
|
-
this.
|
|
85
|
-
this.
|
|
86
|
-
this.
|
|
87
|
-
this.
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
93
|
-
this.
|
|
94
|
-
this.
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
98
|
-
this.
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
this.
|
|
103
|
-
this.
|
|
104
|
-
this.
|
|
105
|
-
this.
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
108
|
-
this.
|
|
109
|
-
this.
|
|
110
|
-
this.
|
|
111
|
-
this.
|
|
112
|
-
this.
|
|
113
|
-
this.
|
|
114
|
-
this.
|
|
115
|
-
this.
|
|
116
|
-
this.
|
|
117
|
-
this.
|
|
118
|
-
this.
|
|
119
|
-
this.
|
|
120
|
-
this.
|
|
121
|
-
this.
|
|
122
|
-
this.
|
|
123
|
-
this.
|
|
124
|
-
this.
|
|
125
|
-
this.
|
|
126
|
-
this.
|
|
127
|
-
this.
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
130
|
-
this.
|
|
131
|
-
this.
|
|
132
|
-
this.
|
|
133
|
-
this.
|
|
134
|
-
this.
|
|
135
|
-
this.
|
|
136
|
-
this.AddWelcomeMsgTemp.Name = "AddWelcomeMsgTemp";
|
|
137
|
-
this.AddWelcomeMsgTemp.LabelKey = "WelcomeMsgTemplate";
|
|
138
|
-
this.AddWelcomeMsgTemp.DataSource = this.WelcomeMsgTempList;
|
|
139
|
-
this.AddWelcomeMsgTemp.SingleSelection = true;
|
|
140
|
-
this.AddWelcomeMsgTemp.AllowSearchFilter = true;
|
|
141
|
-
this.AddWelcomeMsgTemp.Placeholder = "WelcomeMsgTemplate";
|
|
142
|
-
this.AddFileProvider = new DropdownOptions();
|
|
143
|
-
this.AddFileProvider.Name = "AddFileProvider";
|
|
144
|
-
this.AddFileProvider.LabelKey = "FileProvider";
|
|
145
|
-
this.AddFileProvider.DataSource = this.FileProviders;
|
|
146
|
-
this.AddFileProvider.SingleSelection = true;
|
|
147
|
-
this.AddFileProvider.AllowSearchFilter = true;
|
|
148
|
-
this.AddFileProvider.Placeholder = "WelcomeMsgTemplate";
|
|
149
|
-
this.AddMarkInactive = new ToggleSlideOptions();
|
|
150
|
-
this.AddMarkInactive.Name = "AddMarkInactive";
|
|
151
|
-
this.AddMarkInactive.LabelKey = "MarkAsInactive";
|
|
152
|
-
this.AddMarkInactive.Value = false;
|
|
153
|
-
this.AddMarkInactive.ViewType = ControlLayout.Horizontal;
|
|
154
|
-
this.AddDailyJob = new ToggleSlideOptions();
|
|
155
|
-
this.AddDailyJob.Name = "AddDailyJob";
|
|
156
|
-
this.AddDailyJob.LabelKey = "AddToDailyJob";
|
|
157
|
-
this.AddDailyJob.Value = false;
|
|
158
|
-
this.AddDailyJob.ViewType = ControlLayout.Horizontal;
|
|
125
|
+
this.ActiveDirectoryService.loaddropdowns().subscribe((result) => {
|
|
126
|
+
let reultObj = result;
|
|
127
|
+
this.permissionSetList = reultObj.permissionSets;
|
|
128
|
+
this.adTypesList = reultObj.adTypes;
|
|
129
|
+
this.adWindowsTypes = reultObj.adWindowsTypes;
|
|
130
|
+
this.languagesList = reultObj.languages;
|
|
131
|
+
this.welcomeMsgTempList = reultObj.templates;
|
|
132
|
+
this.fileProviders = reultObj.fileProviders;
|
|
133
|
+
this.mappingPropertiesList = reultObj.mappingProperties;
|
|
134
|
+
this.mappingTypesList = reultObj.mappingTypes;
|
|
135
|
+
this.addActiveDirectoryForm = new FormGroup({});
|
|
136
|
+
this.addActiveDirectoryFormOptions = new FormOptions();
|
|
137
|
+
this.addActiveDirectoryFormOptions.FormGroup = this.addActiveDirectoryForm;
|
|
138
|
+
this.addActiveDirectoryFormOptions.GetModelFunction = this.getAddADModel;
|
|
139
|
+
this.addActiveDirectoryFormOptions.ServiceSubmitFunction = this.getAddADFunction;
|
|
140
|
+
this.addActiveDirectoryFormOptions.OnSuccessHandler = this.addADOnSuccess;
|
|
141
|
+
this.addTypeOptions = new DropdownOptions();
|
|
142
|
+
this.addTypeOptions.Name = "addTypeOptions";
|
|
143
|
+
this.addTypeOptions.LabelKey = "Type";
|
|
144
|
+
this.addTypeOptions.ViewType = ControlLayout.Horizontal;
|
|
145
|
+
this.addTypeOptions.DataSource = this.adTypesList;
|
|
146
|
+
this.addTypeOptions.SingleSelection = true;
|
|
147
|
+
this.addTypeOptions.AllowSearchFilter = true;
|
|
148
|
+
this.addTypeOptions.Placeholder = "";
|
|
149
|
+
this.addTypeOptions.IsRequired = true;
|
|
150
|
+
this.addName = new TextBoxOptions();
|
|
151
|
+
this.addName.Name = "addName";
|
|
152
|
+
this.addName.LabelKey = "Name";
|
|
153
|
+
this.addName.Type = InputType.Text;
|
|
154
|
+
this.addName.Value = null;
|
|
155
|
+
this.addName.IsRequired = true;
|
|
156
|
+
this.addPermissionSet = new DropdownOptions();
|
|
157
|
+
this.addPermissionSet.Name = "addPermissionSet";
|
|
158
|
+
this.addPermissionSet.LabelKey = "PermissionSet";
|
|
159
|
+
this.addPermissionSet.DataSource = this.permissionSetList;
|
|
160
|
+
this.addPermissionSet.SingleSelection = true;
|
|
161
|
+
this.addPermissionSet.AllowSearchFilter = true;
|
|
162
|
+
this.addPermissionSet.Placeholder = "PermissionSet";
|
|
163
|
+
this.addPermissionSet.IsRequired = true;
|
|
164
|
+
this.addLanguage = new DropdownOptions();
|
|
165
|
+
this.addLanguage.Name = "addLanguage";
|
|
166
|
+
this.addLanguage.LabelKey = "Language";
|
|
167
|
+
this.addLanguage.DataSource = this.languagesList;
|
|
168
|
+
this.addLanguage.SingleSelection = true;
|
|
169
|
+
this.addLanguage.AllowSearchFilter = true;
|
|
170
|
+
this.addLanguage.Placeholder = "";
|
|
171
|
+
this.addLanguage.IsRequired = true;
|
|
172
|
+
this.addWelcomeMsgTemp = new DropdownOptions();
|
|
173
|
+
this.addWelcomeMsgTemp.Name = "addWelcomeMsgTemp";
|
|
174
|
+
this.addWelcomeMsgTemp.LabelKey = "WelcomeMsgTemplate";
|
|
175
|
+
this.addWelcomeMsgTemp.DataSource = this.welcomeMsgTempList;
|
|
176
|
+
this.addWelcomeMsgTemp.SingleSelection = true;
|
|
177
|
+
this.addWelcomeMsgTemp.AllowSearchFilter = true;
|
|
178
|
+
this.addWelcomeMsgTemp.Placeholder = "WelcomeMsgTemplate";
|
|
179
|
+
this.addFileProvider = new DropdownOptions();
|
|
180
|
+
this.addFileProvider.Name = "addFileProvider";
|
|
181
|
+
this.addFileProvider.LabelKey = "FileProvider";
|
|
182
|
+
this.addFileProvider.DataSource = this.fileProviders;
|
|
183
|
+
this.addFileProvider.SingleSelection = true;
|
|
184
|
+
this.addFileProvider.AllowSearchFilter = true;
|
|
185
|
+
this.addFileProvider.Placeholder = "WelcomeMsgTemplate";
|
|
186
|
+
this.addMarkInactive = new ToggleSlideOptions();
|
|
187
|
+
this.addMarkInactive.Name = "addMarkInactive";
|
|
188
|
+
this.addMarkInactive.LabelKey = "MarkAsInactive";
|
|
189
|
+
this.addMarkInactive.Value = false;
|
|
190
|
+
this.addMarkInactive.ViewType = ControlLayout.Horizontal;
|
|
191
|
+
this.addDailyJob = new ToggleSlideOptions();
|
|
192
|
+
this.addDailyJob.Name = "addDailyJob";
|
|
193
|
+
this.addDailyJob.LabelKey = "AddToDailyJob";
|
|
194
|
+
this.addDailyJob.Value = false;
|
|
195
|
+
this.addDailyJob.ViewType = ControlLayout.Horizontal;
|
|
159
196
|
//set AD mapping
|
|
160
|
-
let data = this.getADMappingOptions(
|
|
161
|
-
this.
|
|
162
|
-
this.
|
|
197
|
+
let data = this.getADMappingOptions(reultObj.adMappings);
|
|
198
|
+
this.addMappingsOptions = data[0];
|
|
199
|
+
this.addMappingsCount = data[1];
|
|
163
200
|
setTimeout(() => {
|
|
164
|
-
this.
|
|
201
|
+
this.isAddFormLoaded = true;
|
|
165
202
|
}, 50);
|
|
166
203
|
});
|
|
167
204
|
}
|
|
205
|
+
//Mapping functions
|
|
168
206
|
getADMappingOptions(ADMappings) {
|
|
169
207
|
let ADMappingOptions = [];
|
|
170
208
|
let ADMappingCount = 0;
|
|
@@ -207,73 +245,180 @@ export class ActiveDirectoryAddComponent {
|
|
|
207
245
|
return [ADMappingOptions, ADMappingCount];
|
|
208
246
|
}
|
|
209
247
|
deleteADMapping(deletedADMApping) {
|
|
210
|
-
let deletedMappingIndex = this.
|
|
248
|
+
let deletedMappingIndex = this.addMappingsOptions.indexOf(deletedADMApping);
|
|
211
249
|
if (deletedMappingIndex !== -1) {
|
|
212
|
-
this.
|
|
250
|
+
this.addMappingsOptions.splice(deletedMappingIndex, 1);
|
|
213
251
|
for (var i = 0; i < deletedADMApping.length; i++) {
|
|
214
|
-
this.
|
|
252
|
+
this.addActiveDirectoryForm.removeControl(deletedADMApping[i].Name);
|
|
215
253
|
}
|
|
216
254
|
}
|
|
217
255
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
256
|
+
//AD windows on type change (OU/Group)
|
|
257
|
+
windowsTypeChange(typeValue) {
|
|
258
|
+
if (typeValue == Number(ADWindowsType.Group)) {
|
|
259
|
+
this.addShowBuiltInGroups = new ToggleSlideOptions();
|
|
260
|
+
this.addShowBuiltInGroups.Name = "addShowBuiltInGroups";
|
|
261
|
+
this.addShowBuiltInGroups.LabelValue = "ShowBuiltInGroups";
|
|
262
|
+
this.addShowBuiltInGroups.LabelKey = "ShowBuiltInGroups";
|
|
263
|
+
this.addShowBuiltInGroups.Value = false;
|
|
264
|
+
this.addShowBuiltInGroups.ViewType = ControlLayout.Horizontal;
|
|
265
|
+
this.addShowBuiltInGroupsVisible = true;
|
|
221
266
|
}
|
|
222
267
|
else {
|
|
223
|
-
this.
|
|
268
|
+
this.addActiveDirectoryForm.removeControl("addShowBuiltInGroups");
|
|
269
|
+
this.addShowBuiltInGroupsVisible = false;
|
|
224
270
|
}
|
|
225
271
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
272
|
+
//AD on type changes (Windows/Azure)
|
|
273
|
+
typeChange(typeValue) {
|
|
274
|
+
this.selectedType = typeValue;
|
|
275
|
+
if (typeValue == Number(ADType.Windows)) {
|
|
276
|
+
this.formsCount = 3;
|
|
277
|
+
//Remove Azure controls if found
|
|
278
|
+
this.addActiveDirectoryForm.removeControl("addTenantID");
|
|
279
|
+
this.addActiveDirectoryForm.removeControl("addClientID");
|
|
280
|
+
this.addActiveDirectoryForm.removeControl("addClientSecret");
|
|
281
|
+
//Initialize windows controls
|
|
282
|
+
this.addWindowsTypeOptions = new DropdownOptions();
|
|
283
|
+
this.addWindowsTypeOptions.Name = "addWindowsTypeOptions";
|
|
284
|
+
this.addWindowsTypeOptions.LabelKey = "WindowsType";
|
|
285
|
+
this.addWindowsTypeOptions.ViewType = ControlLayout.Horizontal;
|
|
286
|
+
this.addWindowsTypeOptions.DataSource = this.adWindowsTypes;
|
|
287
|
+
this.addWindowsTypeOptions.SingleSelection = true;
|
|
288
|
+
this.addWindowsTypeOptions.AllowSearchFilter = true;
|
|
289
|
+
this.addWindowsTypeOptions.Placeholder = "";
|
|
290
|
+
this.addWindowsTypeOptions.IsRequired = true;
|
|
291
|
+
this.addDomain = new TextBoxOptions();
|
|
292
|
+
this.addDomain.Name = "addDomain";
|
|
293
|
+
this.addDomain.LabelKey = "Domain";
|
|
294
|
+
this.addDomain.Type = InputType.Text;
|
|
295
|
+
this.addDomain.Value = null;
|
|
296
|
+
this.addDomain.IsRequired = true;
|
|
297
|
+
this.addSamAccount = new TextBoxOptions();
|
|
298
|
+
this.addSamAccount.Name = "addSamAccount";
|
|
299
|
+
this.addSamAccount.LabelKey = "SamAccount";
|
|
300
|
+
this.addSamAccount.Type = InputType.Text;
|
|
301
|
+
this.addSamAccount.Value = null;
|
|
302
|
+
this.addPassword = new TextBoxOptions();
|
|
303
|
+
this.addPassword.Name = "addPassword";
|
|
304
|
+
this.addPassword.LabelKey = "Password";
|
|
305
|
+
this.addPassword.Type = InputType.Password;
|
|
306
|
+
this.addPassword.Value = null;
|
|
307
|
+
this.addPassword.RemoveDefaultPasswordValidation = true;
|
|
308
|
+
this.showAzureControls = false;
|
|
309
|
+
this.showWindowsControls = true;
|
|
230
310
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
311
|
+
else {
|
|
312
|
+
this.formsCount = 2;
|
|
313
|
+
//Remove windows controls if found
|
|
314
|
+
this.addActiveDirectoryForm.removeControl("addDomain");
|
|
315
|
+
this.addActiveDirectoryForm.removeControl("addSamAccount");
|
|
316
|
+
this.addActiveDirectoryForm.removeControl("addPassword");
|
|
317
|
+
this.addActiveDirectoryForm.removeControl("addShowBuiltInGroups");
|
|
318
|
+
this.addActiveDirectoryForm.removeControl("addWindowsTypeOptions");
|
|
319
|
+
this.addTenantID = new TextBoxOptions();
|
|
320
|
+
this.addTenantID.Name = "addTenantID";
|
|
321
|
+
this.addTenantID.LabelKey = "TenantID";
|
|
322
|
+
this.addTenantID.Type = InputType.Text;
|
|
323
|
+
this.addTenantID.Value = null;
|
|
324
|
+
this.addTenantID.IsRequired = true;
|
|
325
|
+
this.addClientID = new TextBoxOptions();
|
|
326
|
+
this.addClientID.Name = "addClientID";
|
|
327
|
+
this.addClientID.LabelKey = "ClientID";
|
|
328
|
+
this.addClientID.Type = InputType.Text;
|
|
329
|
+
this.addClientID.Value = null;
|
|
330
|
+
this.addClientID.IsRequired = true;
|
|
331
|
+
this.addClientSecret = new TextBoxOptions();
|
|
332
|
+
this.addClientSecret.Name = "addClientSecret";
|
|
333
|
+
this.addClientSecret.LabelKey = "ClientSecret";
|
|
334
|
+
this.addClientSecret.Type = InputType.Text;
|
|
335
|
+
this.addClientSecret.Value = null;
|
|
336
|
+
this.addClientSecret.IsRequired = true;
|
|
337
|
+
this.showAzureControls = true;
|
|
338
|
+
this.showWindowsControls = false;
|
|
237
339
|
}
|
|
238
|
-
this.currentStep$.next(prevStep);
|
|
239
340
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
341
|
+
//Wizard functions
|
|
342
|
+
nextStep() {
|
|
343
|
+
const currentStep = this.currentStep$.value;
|
|
344
|
+
const nextStep = currentStep + 1;
|
|
345
|
+
let ResultModel = this.addActiveDirectoryForm.value;
|
|
346
|
+
//Check required fields for next step
|
|
347
|
+
if (currentStep == 1) {
|
|
348
|
+
if (ResultModel.addTypeOptions) {
|
|
349
|
+
if (this.selectedType == Number(ADType.Windows)) {
|
|
350
|
+
if (!ResultModel.addDomain || !ResultModel.addWindowsTypeOptions) {
|
|
351
|
+
this.adDomainControl.IsValid();
|
|
352
|
+
this.adWindowsTypeControl.IsValid();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
if (!ResultModel.addTenantID || !ResultModel.addClientID || !ResultModel.addClientSecret) {
|
|
358
|
+
this.tenantIDControl.IsValid();
|
|
359
|
+
this.clientIDControl.IsValid();
|
|
360
|
+
this.clientSecretControl.IsValid();
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
254
363
|
}
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
this.adTypeControl.IsValid();
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (this.selectedType == Number(ADType.Windows)) {
|
|
371
|
+
if (nextStep === 2 && currentStep === 1) {
|
|
372
|
+
this.treeDataLoaded = false;
|
|
373
|
+
//if (!this.addActiveDirectoryForm.get('addDomain').valid || !this.addActiveDirectoryForm.get('addTypeOptions').valid) {
|
|
374
|
+
// return;
|
|
375
|
+
this.utilityService.startBlockUI();
|
|
376
|
+
console.log(ResultModel);
|
|
255
377
|
let AddModel = new ActiveDirectoryAddEditModel();
|
|
256
|
-
AddModel.ConnectionName = ResultModel.
|
|
257
|
-
AddModel.Domain = ResultModel.
|
|
258
|
-
let ADTypes = ResultModel.
|
|
378
|
+
AddModel.ConnectionName = ResultModel.addName;
|
|
379
|
+
AddModel.Domain = ResultModel.addDomain;
|
|
380
|
+
let ADTypes = ResultModel.addWindowsTypeOptions;
|
|
259
381
|
let typeItemID;
|
|
260
382
|
typeItemID = Number(ADTypes);
|
|
261
|
-
AddModel.
|
|
262
|
-
AddModel.SamAccount = ResultModel.
|
|
263
|
-
AddModel.Password = ResultModel.
|
|
264
|
-
AddModel.ShowBuiltInGroups = ResultModel.
|
|
265
|
-
this.ActiveDirectoryService.
|
|
383
|
+
AddModel.ADWindowsTypeItemID = ADTypes != null ? typeItemID : null;
|
|
384
|
+
AddModel.SamAccount = ResultModel.addSamAccount;
|
|
385
|
+
AddModel.Password = ResultModel.addPassword;
|
|
386
|
+
AddModel.ShowBuiltInGroups = ResultModel.addShowBuiltInGroups;
|
|
387
|
+
this.ActiveDirectoryService.checkValidationandGetData(AddModel).subscribe((result) => {
|
|
388
|
+
this, this.utilityService.stopBlockUI();
|
|
266
389
|
var data = result;
|
|
267
390
|
if (data.val) {
|
|
268
391
|
this.treeNodeData = data.treeData;
|
|
269
392
|
this.errorIsFound = false;
|
|
270
|
-
|
|
393
|
+
/////////////////////
|
|
394
|
+
let _transformer = (node, level) => {
|
|
395
|
+
return {
|
|
396
|
+
expandable: !!node.children && node.children.length > 0,
|
|
397
|
+
name: node.text,
|
|
398
|
+
level: level,
|
|
399
|
+
icon: node.icon,
|
|
400
|
+
selectable: node.selectable,
|
|
401
|
+
Index: node.Index,
|
|
402
|
+
data: node.data
|
|
403
|
+
};
|
|
404
|
+
};
|
|
405
|
+
this.treeControl = new FlatTreeControl(node => node.level, node => node.expandable);
|
|
406
|
+
this.treeFlattener = new MatTreeFlattener(_transformer, node => node.level, node => node.expandable, node => node.children);
|
|
407
|
+
this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
|
|
408
|
+
let jsonData = JSON.parse(this.treeNodeData);
|
|
409
|
+
this.dataSource.data = jsonData;
|
|
410
|
+
this.hasChild = (_, node) => node.expandable;
|
|
411
|
+
this.treeDataLoaded = true;
|
|
412
|
+
/////////////////////
|
|
413
|
+
this.currentStep$.next(nextStep);
|
|
271
414
|
}
|
|
272
415
|
else {
|
|
273
416
|
this.validationError = data.error;
|
|
274
417
|
this.errorIsFound = true;
|
|
275
418
|
}
|
|
276
419
|
}, (error) => {
|
|
420
|
+
this.utilityService.stopBlockUI();
|
|
421
|
+
this.utilityService.notifyErrorMessage();
|
|
277
422
|
return false;
|
|
278
423
|
});
|
|
279
424
|
// https://angular.io/guide/forms
|
|
@@ -281,72 +426,72 @@ export class ActiveDirectoryAddComponent {
|
|
|
281
426
|
// validate the form and use below function to stop the wizard's step
|
|
282
427
|
// wizardObj.stop();
|
|
283
428
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
429
|
+
else {
|
|
430
|
+
if (this.identifier == "" || this.identifier == undefined) {
|
|
431
|
+
this.utilityService.notifyWarningMessage(this.utilityService.getResourceValue("VAL_AtLeastOneIsRequired"));
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
this.addName.Value = this.identifierName + " connection";
|
|
436
|
+
this.currentStep$.next(nextStep);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
this.currentStep$.next(nextStep);
|
|
442
|
+
}
|
|
291
443
|
}
|
|
292
|
-
|
|
293
|
-
|
|
444
|
+
;
|
|
445
|
+
prevStep() {
|
|
446
|
+
let currentStep = this.currentStep$.value;
|
|
447
|
+
let prevStep = this.currentStep$.value - 1;
|
|
448
|
+
if (prevStep === 0) {
|
|
294
449
|
return;
|
|
295
450
|
}
|
|
451
|
+
this.currentStep$.next(prevStep);
|
|
452
|
+
}
|
|
453
|
+
setIdentifier(obj, selectedNode) {
|
|
454
|
+
debugger;
|
|
455
|
+
this.selected = selectedNode.Index;
|
|
456
|
+
if (obj.checked) {
|
|
457
|
+
this.identifier = selectedNode.data;
|
|
458
|
+
this.identifierName = selectedNode.text;
|
|
459
|
+
}
|
|
296
460
|
else {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
let AddModel = new ActiveDirectoryAddEditModel();
|
|
300
|
-
AddModel.ConnectionName = ResultModel.AddName;
|
|
301
|
-
AddModel.Domain = ResultModel.AddDomain;
|
|
302
|
-
AddModel.ADConnectionTypeItemID = ResultModel.AddTypeOptions != null ? Number(ResultModel.AddTypeOptions) : null;
|
|
303
|
-
AddModel.SamAccount = ResultModel.AddSamAccount;
|
|
304
|
-
AddModel.Password = ResultModel.AddPassword;
|
|
305
|
-
AddModel.ShowBuiltInGroups = ResultModel.AddShowBuiltInGroups;
|
|
306
|
-
AddModel.PermissionSetID = ResultModel.AddPermissionSet != null ? Number(ResultModel.AddPermissionSet) : null;
|
|
307
|
-
AddModel.LangKey = ResultModel.AddLanguage;
|
|
308
|
-
AddModel.WelcomeTemplateID = ResultModel.AddWelcomeMsgTemp != null ? Number(ResultModel.AddWelcomeMsgTemp) : null;
|
|
309
|
-
AddModel.ImagesFileProviderName = ResultModel.AddFileProvider;
|
|
310
|
-
AddModel.MarkAsInactive = ResultModel.AddMarkInactive;
|
|
311
|
-
AddModel.AddToDailyJob = ResultModel.AddDailyJob;
|
|
312
|
-
for (let j = 0; j < this.AddMappingsCount; j++) {
|
|
313
|
-
let addMAppingType = ResultModel["ADMappingType" + j];
|
|
314
|
-
if (addMAppingType == undefined)
|
|
315
|
-
continue;
|
|
316
|
-
let editMAppingProperty = ResultModel["ADMappingProperty" + j];
|
|
317
|
-
let editMAppingPropertyName = ResultModel["ADMappingPropertyName" + j];
|
|
318
|
-
let adMAppingObj = new ADMappingModel();
|
|
319
|
-
adMAppingObj.ADMappingTypeItemID = Number(addMAppingType);
|
|
320
|
-
adMAppingObj.BBSFPropertyName = editMAppingProperty;
|
|
321
|
-
adMAppingObj.ADPropertyName = editMAppingPropertyName;
|
|
322
|
-
AddModel.ADMappings.push(adMAppingObj);
|
|
323
|
-
}
|
|
324
|
-
this.ActiveDirectoryService.AddActiveDirectory(AddModel).subscribe((result) => {
|
|
325
|
-
debugger;
|
|
326
|
-
this.AddActiveDirectoryForm.reset();
|
|
327
|
-
this.router.navigate(['/Admin/ADConnection']);
|
|
328
|
-
}, (error) => {
|
|
329
|
-
});
|
|
461
|
+
this.identifier = "";
|
|
462
|
+
this.identifierName = "";
|
|
330
463
|
}
|
|
331
464
|
}
|
|
332
|
-
|
|
333
|
-
this.submitted = true;
|
|
334
|
-
this.addActiveDirectory();
|
|
335
|
-
}
|
|
465
|
+
//On destroy
|
|
336
466
|
ngOnDestroy() {
|
|
337
|
-
|
|
467
|
+
this.requestHandlerService.destroyHandler();
|
|
338
468
|
}
|
|
339
469
|
}
|
|
340
|
-
ActiveDirectoryAddComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ActiveDirectoryAddComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.BBSFTranslateService }, { token:
|
|
341
|
-
ActiveDirectoryAddComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ActiveDirectoryAddComponent, selector: "lib-active-directory-add", viewQueries: [{ propertyName: "el", first: true, predicate: ["wizard"], descendants: true, static: true }], ngImport: i0, template: "\r\n\r\n<div class=\"container-fluid\">\r\n <div class=\"\r\n stepper stepper-pills stepper-column\r\n d-flex\r\n flex-column flex-xl-row flex-row-fluid \"\r\n id=\"kt_create_account_stepper\">\r\n <div class=\"\r\n d-flex\r\n justify-content-center\r\n rounded\r\n justify-content-xl-start\r\n flex-row-auto\r\n \r\n me-9\r\n card\r\n \">\r\n <div class=\"card-body px-6 px-lg-10 px-xxl-15 py-20\">\r\n <div class=\"stepper-nav\">\r\n <div class=\"stepper-item\"\r\n [ngClass]=\"{\r\n current: currentStep$.value === 1 }\">\r\n <div class=\"stepper-line w-40px\"></div>\r\n\r\n <div class=\"stepper-icon w-40px h-40px\">\r\n <i class=\"stepper-check fas fa-check\"></i>\r\n <span class=\"stepper-number\">1</span>\r\n </div>\r\n\r\n <div class=\"stepper-label\">\r\n <h3 class=\"stepper-title\">{{utilityService.getResourceValue(\"ActiveDirectory\")}}</h3>\r\n\r\n <div class=\"stepper-desc fw-bold\">{{utilityService.getResourceValue(\"ActiveDirectory_Tab1Note\")}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"stepper-item\"\r\n [ngClass]=\"{\r\n current: currentStep$.value === 2 }\">\r\n <div class=\"stepper-line w-40px\"></div>\r\n\r\n <div class=\"stepper-icon w-40px h-40px\">\r\n <i class=\"stepper-check fas fa-check\"></i>\r\n <span class=\"stepper-number\">2</span>\r\n </div>\r\n\r\n <div class=\"stepper-label\">\r\n <h3 class=\"stepper-title\">{{utilityService.getResourceValue(\"ActiveDirectory_SelectContainer\")}}</h3>\r\n <div class=\"stepper-desc fw-bold\">{{utilityService.getResourceValue(\"ActiveDirectory_Tab2Note\")}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"stepper-item\"\r\n [ngClass]=\"{\r\n current: currentStep$.value === 3}\">\r\n <div class=\"stepper-line w-40px\"></div>\r\n\r\n <div class=\"stepper-icon w-40px h-40px\">\r\n <i class=\"stepper-check fas fa-check\"></i>\r\n <span class=\"stepper-number\">3</span>\r\n </div>\r\n\r\n <div class=\"stepper-label\">\r\n <h3 class=\"stepper-title\">{{utilityService.getResourceValue(\"Options\")}}</h3>\r\n <div class=\"stepper-desc fw-bold\">{{utilityService.getResourceValue(\"ActiveDirectory_Tab3Note\")}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card d-flex flex-row-fluid flex-center rounded\">\r\n <form class=\"p-20 w-100 card-body\"\r\n id=\"kt_create_account_form\" [formGroup]=\"AddActiveDirectoryForm\">\r\n <div class=\"current\" *ngIf=\"IsAddFormLoaded\">\r\n <ng-container *ngIf=\"currentStep$.value === 1\">\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddActiveDirectoryForm\" (OnChange)=\"typeChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox [options]=\"AddDomain\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox [options]=\"AddPassword\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\" *ngIf=\"AddShowBuiltInGroupsVisible\">\r\n <BBSF-Toggleslide [options]=\"AddShowBuiltInGroups\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"currentStep$.value === 2\">\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox [options]=\"AddSearchTree\" [group]=\"AddActiveDirectoryForm\"></BBSF-TextBox>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentStep$.value === 3\">\r\n <div class=\"form-group\">\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"AddPermissionSet\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"AddLanguage\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"AddWelcomeMsgTemp\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"AddFileProvider\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-Toggleslide [options]=\"AddMarkInactive\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-Toggleslide [options]=\"AddDailyJob\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Type\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Property\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ADProperty\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"IncludeInUpdate\")}}</th>\r\n <th class=\"min-w-50px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of AddMappingsOptions;let i=index;\">\r\n <td>\r\n <BBSF-DropdownList [options]=\"option[0]\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-DropdownList [options]=\"option[1]\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"AddActiveDirectoryForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger\" (click)=\"deleteADMapping(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"d-flex flex-stack pt-10\">\r\n <div class=\"mr-2\">\r\n <ng-container *ngIf=\"currentStep$.value !== 1\">\r\n <button type=\"button\"\r\n class=\"btn btn-lg btn-light-primary me-3\"\r\n (click)=\"prevStep()\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr063.svg'\"\r\n class=\"svg-icon svg-icon-4 me-1\"></span>\r\n {{utilityService.getResourceValue(\"Previous\")}}\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"currentStep$.value !== formsCount\">\r\n <div>\r\n <button type=\"button\"\r\n class=\"btn btn-lg btn-primary me-3\"\r\n (click)=\"nextStep()\">\r\n <span class=\"indicator-label\">\r\n <ng-container *ngIf=\"currentStep$.value < formsCount\">\r\n {{utilityService.getResourceValue(\"Next\")}} {{ \" \" }}\r\n <span [inlineSVG]=\"\r\n './src/assets/images/arr064.svg'\r\n \"\r\n class=\"svg-icon svg-icon-3 ms-2 me-0\"></span>\r\n </ng-container>\r\n \r\n </span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"currentStep$.value === formsCount\" >\r\n <button type=\"button\"\r\n class=\"btn btn-lg btn-primary me-3\"\r\n (click)=\"onSubmit()\">\r\n {{utilityService.getResourceValue(\"Submit\")}}\r\n </button>\r\n \r\n </ng-container>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n</div>\r\n", components: [{ type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i6.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
470
|
+
ActiveDirectoryAddComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ActiveDirectoryAddComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.BBSFTranslateService }, { token: i3.ActiveDirectoryService }, { token: i4.Router }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
471
|
+
ActiveDirectoryAddComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ActiveDirectoryAddComponent, selector: "lib-active-directory-add", viewQueries: [{ propertyName: "adTypeControl", first: true, predicate: ["adTypeControl"], descendants: true }, { propertyName: "adDomainControl", first: true, predicate: ["adDomainControl"], descendants: true }, { propertyName: "adWindowsTypeControl", first: true, predicate: ["adWindowsTypeControl"], descendants: true }, { propertyName: "tenantIDControl", first: true, predicate: ["tenantIDControl"], descendants: true }, { propertyName: "clientIDControl", first: true, predicate: ["clientIDControl"], descendants: true }, { propertyName: "clientSecretControl", first: true, predicate: ["clientSecretControl"], descendants: true }], ngImport: i0, template: "\r\n\r\n<div class=\"container-fluid\">\r\n <div class=\"stepper stepper-pills stepper-column d-flex flex-column flex-xl-row flex-row-fluid \" id=\"kt_create_account_stepper\">\r\n <div class=\"d-flex justify-content-center rounded justify-content-xl-start flex-row-auto me-9 card\">\r\n <div class=\"card-body px-6 px-lg-10 px-xxl-15 py-20\">\r\n <div class=\"stepper-nav\">\r\n <div class=\"stepper-item\" [ngClass]=\"{current: currentStep$.value === 1 }\">\r\n <div class=\"stepper-line w-40px\"></div>\r\n\r\n <div class=\"stepper-icon w-40px h-40px\">\r\n <i class=\"stepper-check fas fa-check\"></i>\r\n <span class=\"stepper-number\">1</span>\r\n </div>\r\n\r\n <div class=\"stepper-label\">\r\n <h3 class=\"stepper-title\">{{utilityService.getResourceValue(\"ActiveDirectory\")}}</h3>\r\n\r\n <div class=\"stepper-desc fw-bold\">{{utilityService.getResourceValue(\"ActiveDirectory_Tab1Note\")}}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showWindowsControls\" class=\"stepper-item\" [ngClass]=\"{current: currentStep$.value === 2 && showWindowsControls}\">\r\n <div class=\"stepper-line w-40px\"></div>\r\n\r\n <div class=\"stepper-icon w-40px h-40px\">\r\n <i class=\"stepper-check fas fa-check\"></i>\r\n <span class=\"stepper-number\">2</span>\r\n </div>\r\n\r\n <div class=\"stepper-label\">\r\n <h3 class=\"stepper-title\">{{utilityService.getResourceValue(\"ActiveDirectory_SelectContainer\")}}</h3>\r\n <div class=\"stepper-desc fw-bold\">{{utilityService.getResourceValue(\"ActiveDirectory_Tab2Note\")}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"stepper-item\" [ngClass]=\"{current: (currentStep$.value === formsCount ) }\">\r\n <div class=\"stepper-line w-40px\"></div>\r\n\r\n <div class=\"stepper-icon w-40px h-40px\">\r\n <i class=\"stepper-check fas fa-check\"></i>\r\n <span class=\"stepper-number\">{{formsCount}}</span>\r\n </div>\r\n\r\n <div class=\"stepper-label\">\r\n <h3 class=\"stepper-title\">{{utilityService.getResourceValue(\"Options\")}}</h3>\r\n <div class=\"stepper-desc fw-bold\">{{utilityService.getResourceValue(\"ActiveDirectory_Tab3Note\")}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card d-flex flex-row-fluid flex-center rounded\">\r\n <div class=\"p-20 w-100 card-body\" *ngIf=\"isAddFormLoaded\">\r\n <BBSF-Form [options]=\"addActiveDirectoryFormOptions\">\r\n <div class=\"current\">\r\n <ng-container *ngIf=\"currentStep$.value === 1\">\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList #adTypeControl [options]=\"addTypeOptions\" [group]=\"addActiveDirectoryForm\" (OnChange)=\"typeChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div *ngIf=\"showWindowsControls\">\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList #adWindowsTypeControl [options]=\"addWindowsTypeOptions\" [group]=\"addActiveDirectoryForm\" (OnChange)=\"windowsTypeChange($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox #adDomainControl [options]=\"addDomain\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n <div *ngIf=\"errorIsFound\" class=\"text-danger\">{{validationError}}</div>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox [options]=\"addSamAccount\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox [options]=\"addPassword\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\" *ngIf=\"addShowBuiltInGroupsVisible\">\r\n <BBSF-Toggleslide [options]=\"addShowBuiltInGroups\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showAzureControls\">\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox #tenantIDControl [options]=\"addTenantID\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox #clientIDControl [options]=\"addClientID\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-TextBox #clientSecretControl [options]=\"addClientSecret\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"currentStep$.value === 2 && showWindowsControls\">\r\n <div id=\"treeDataContainer\" *ngIf=\"treeDataLoaded\">\r\n\r\n\r\n <!--------Helllllllllllllllllllo---------->\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node;\" matTreeNodePadding>\r\n <!-- use a disabled button to provide padding for tree leaf -->\r\n\r\n <mat-checkbox class=\"checklist-leaf-node\" [checked]=\"selected === node.Index\" (change)=\"setIdentifier($event,node)\" [disabled]=\"node.selectable?false:true\">\r\n {{node.name}}\r\n </mat-checkbox>\r\n </mat-tree-node>\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding>\r\n <button type=\"button\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Toggle ' + node.name\" class=\"btn btn-icon btn-bg-light btn-active-color-primary btn-sm me-1 \">\r\n <i *ngIf=\"treeControl.isExpanded(node)\" class=\"fas fa-chevron-down\"></i>\r\n <i *ngIf=\"!treeControl.isExpanded(node)\" class=\"fas fa-chevron-right\"></i>\r\n\r\n </button>\r\n <mat-checkbox [disabled]=\"node.selectable?false:true\">{{node.name}}</mat-checkbox>\r\n\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentStep$.value === formsCount\">\r\n <div class=\"form-group\">\r\n <BBSF-TextBox [options]=\"addName\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"addPermissionSet\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"addLanguage\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"addWelcomeMsgTemp\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-DropdownList [options]=\"addFileProvider\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-Toggleslide [options]=\"addMarkInactive\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n <div class=\"form-group mb-10\">\r\n <BBSF-Toggleslide [options]=\"addDailyJob\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Type\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Property\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ADProperty\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"IncludeInUpdate\")}}</th>\r\n <th class=\"min-w-50px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addMappingsOptions;let i=index;\">\r\n <td>\r\n <BBSF-DropdownList [options]=\"option[0]\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-DropdownList [options]=\"option[1]\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-DropdownList>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addActiveDirectoryForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger\" (click)=\"deleteADMapping(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"d-flex flex-stack pt-10\">\r\n <div class=\"mr-2\">\r\n <ng-container *ngIf=\"currentStep$.value !== 1\">\r\n <button type=\"button\"\r\n class=\"btn btn-lg btn-light-primary me-3\"\r\n (click)=\"prevStep()\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr063.svg'\"\r\n class=\"svg-icon svg-icon-4 me-1\"></span>\r\n {{utilityService.getResourceValue(\"Previous\")}}\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"currentStep$.value !== formsCount\">\r\n <div>\r\n <button type=\"button\"\r\n class=\"btn btn-lg btn-primary me-3\"\r\n (click)=\"nextStep()\">\r\n <span class=\"indicator-label\">\r\n <ng-container *ngIf=\"currentStep$.value < formsCount\">\r\n {{utilityService.getResourceValue(\"Next\")}} {{ \" \" }}\r\n <span [inlineSVG]=\"'./src/assets/images/arr064.svg'\"\r\n class=\"svg-icon svg-icon-3 ms-2 me-0\"></span>\r\n </ng-container>\r\n\r\n </span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"currentStep$.value === formsCount\">\r\n <button type=\"submit\" class=\"btn btn-lg btn-primary me-3\">\r\n {{utilityService.getResourceValue(\"Submit\")}}\r\n </button>\r\n\r\n </ng-container>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n</div>\r\n", components: [{ type: i5.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i5.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i5.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i5.ɵj, selector: "BBSF-Toggleslide", inputs: ["group", "options"] }, { type: i6.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5.ɵg, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { type: i6.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { type: i6.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { type: i6.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
342
472
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ActiveDirectoryAddComponent, decorators: [{
|
|
343
473
|
type: Component,
|
|
344
474
|
args: [{
|
|
345
475
|
selector: 'lib-active-directory-add',
|
|
346
476
|
templateUrl: './active-directory-add.component.html'
|
|
347
477
|
}]
|
|
348
|
-
}], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.BBSFTranslateService }, { type:
|
|
478
|
+
}], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.BBSFTranslateService }, { type: i3.ActiveDirectoryService }, { type: i4.Router }, { type: i2.RequestHandlerService }]; }, propDecorators: { adTypeControl: [{
|
|
479
|
+
type: ViewChild,
|
|
480
|
+
args: ['adTypeControl', { static: false }]
|
|
481
|
+
}], adDomainControl: [{
|
|
482
|
+
type: ViewChild,
|
|
483
|
+
args: ['adDomainControl', { static: false }]
|
|
484
|
+
}], adWindowsTypeControl: [{
|
|
485
|
+
type: ViewChild,
|
|
486
|
+
args: ['adWindowsTypeControl', { static: false }]
|
|
487
|
+
}], tenantIDControl: [{
|
|
488
|
+
type: ViewChild,
|
|
489
|
+
args: ['tenantIDControl', { static: false }]
|
|
490
|
+
}], clientIDControl: [{
|
|
491
|
+
type: ViewChild,
|
|
492
|
+
args: ['clientIDControl', { static: false }]
|
|
493
|
+
}], clientSecretControl: [{
|
|
349
494
|
type: ViewChild,
|
|
350
|
-
args: ['
|
|
495
|
+
args: ['clientSecretControl', { static: false }]
|
|
351
496
|
}] } });
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWRpcmVjdG9yeS1hZGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9BY3RpdmVEaXJlY3Rvcmllcy9hY3RpdmUtZGlyZWN0b3J5LWFkZC9hY3RpdmUtZGlyZWN0b3J5LWFkZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL0FjdGl2ZURpcmVjdG9yaWVzL2FjdGl2ZS1kaXJlY3RvcnktYWRkL2FjdGl2ZS1kaXJlY3RvcnktYWRkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHekksT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdkcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBU3ZDLE1BQU0sT0FBTywyQkFBMkI7SUFvRHRDLFlBQW9CLGVBQWdDLEVBQVMsY0FBOEIsRUFBVSxvQkFBMEMsRUFBVSxrQkFBc0MsRUFBVSxZQUErQixFQUFVLFdBQXdCLEVBQVUsc0JBQThDLEVBQVUsTUFBYztRQUF0VSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBVSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQVUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFuRDFWLFdBQU0sR0FBRywwQkFBMEIsQ0FBQztRQUNwQyxhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLFFBQVE7UUFDUixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsaUJBQVksR0FBNEIsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsUUFBUTtRQUNSLHNCQUFpQixHQUFVLEVBQUUsQ0FBQztRQUM5QixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQix1QkFBa0IsR0FBVSxFQUFFLENBQUM7UUFDL0IsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFHMUIsMEJBQXFCLEdBQVUsRUFBRSxDQUFDO1FBQ2xDLHFCQUFnQixHQUFVLEVBQUUsQ0FBQztRQUc3QixvQkFBb0I7UUFDcEIsMkJBQXNCLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFjM0MsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBQy9CLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUk3QixnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFDN0Msb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsa0NBQWtDO1FBQ2xDLDBDQUEwQztRQUUxQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSWxCLGlCQUFZLEdBQVksS0FBSyxDQUFDO0lBSTlCLENBQUM7SUFFSyxRQUFROztZQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1lBQ2pFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUd4QixDQUFDO0tBQUE7SUFHRCxjQUFjO1FBQ1osSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9ELElBQUksYUFBYSxHQUFHLE1BQWEsQ0FBQTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztZQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQ2xELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztZQUNqRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO1lBRWpFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxhQUFhLENBQUMsaUJBQWlCLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFFbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7WUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUVqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUVoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQztZQUd4RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUE7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFBO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUE7WUFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtZQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUV0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUE7WUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQTtZQUMxRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFBO1lBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUU5RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUVoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQTtZQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtZQUN6RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDO1lBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBRXhDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUE7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO1lBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7WUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQTtZQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFBO1lBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFBO1lBQzNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQztZQUUxRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUE7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFBO1lBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7WUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO1lBRXhELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFBO1lBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFBO1lBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBRXpELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUE7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFFckQsZ0JBQWdCO1lBQ2hCLElBQUksSUFBSSxHQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDOUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsVUFBaUI7UUFDbkMsSUFBSSxnQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDakMsSUFBSSxjQUFjLEdBQVcsQ0FBQyxDQUFDO1FBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBRTFDLElBQUksb0JBQW9CLEdBQVUsRUFBRSxDQUFDO1lBRXJDLElBQUksYUFBYSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDMUMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hKLGFBQWEsQ0FBQyxJQUFJLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN6QyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMvQixhQUFhLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNyQyxhQUFhLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztZQUMzQyxhQUFhLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDbEQsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDakQsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFaEMsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzlDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RKLGlCQUFpQixDQUFDLElBQUksR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDakQsaUJBQWlCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNuQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLGlCQUFpQixDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztZQUNuRCxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUN0RCxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQzFELGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFHcEMsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2pELHFCQUFxQixDQUFDLElBQUksR0FBRyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7WUFDekQscUJBQXFCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN2QyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUM1QyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUMzRCxxQkFBcUIsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQzFELHFCQUFxQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFeEMsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ25ELHNCQUFzQixDQUFDLElBQUksR0FBRyx3QkFBd0IsR0FBRyxDQUFDLENBQUM7WUFDM0Qsc0JBQXNCLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDN0Qsc0JBQXNCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUd6QyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDM0csZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDNUMsY0FBYyxJQUFJLENBQUMsQ0FBQztTQUVyQjtRQUNELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLGdCQUFxQjtRQUNuQyxJQUFJLG1CQUFtQixHQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRTtTQUNGO0lBQ0gsQ0FBQztJQUNELFVBQVUsQ0FBQyxTQUFTO1FBQ2xCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMzQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO2FBQ0k7WUFDSCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM5QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM3QyxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFDbEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELGVBQWU7UUFDYix5QkFBeUI7UUFDekIsNkRBQTZEO1FBQzdELGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsS0FBSztRQUVMLHVDQUF1QztRQUV2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFO2dCQUMvQixTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRWpCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUM7dUJBQ2hGLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO29CQUN4RSxPQUFPO2lCQUNSO2dCQUdELElBQUksUUFBUSxHQUFnQyxJQUFJLDJCQUEyQixFQUFFLENBQUM7Z0JBQzlFLFFBQVEsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztnQkFDOUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO2dCQUN4QyxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDO2dCQUN6QyxJQUFJLFVBQWtCLENBQUM7Z0JBQ3ZCLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pGLFFBQVEsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztnQkFDaEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDO2dCQUc5RCxJQUFJLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ25GLElBQUksSUFBSSxHQUFHLE1BQWEsQ0FBQztvQkFDekIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQzFCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDcEI7eUJBQ0k7d0JBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztxQkFDMUI7Z0JBRUgsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBRVgsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsaUNBQWlDO2dCQUNqQywyQ0FBMkM7Z0JBRTNDLHFFQUFxRTtnQkFDckUsb0JBQW9CO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2Ysa0NBQWtDO1FBQ2xDLHNCQUFzQjtRQUN0Qix5QkFBeUI7UUFDekIsWUFBWTtRQUNaLEtBQUs7SUFDUCxDQUFDO0lBQ0Qsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRTtZQUN2QyxPQUFPO1NBQ1I7YUFDSTtZQUNILElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7WUFDcEQsMkJBQTJCO1lBQzNCLElBQUksUUFBUSxHQUFnQyxJQUFJLDJCQUEyQixFQUFFLENBQUM7WUFDOUUsUUFBUSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQzlDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztZQUN4QyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNoSCxRQUFRLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7WUFDaEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUM7WUFDOUQsUUFBUSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUM3RyxRQUFRLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7WUFDM0MsUUFBUSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1lBQ2pILFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFBO1lBQzdELFFBQVEsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQTtZQUNyRCxRQUFRLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUE7WUFFaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxjQUFjLEdBQUcsV0FBVyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxjQUFjLElBQUksU0FBUztvQkFDN0IsU0FBUztnQkFDWCxJQUFJLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsSUFBSSx1QkFBdUIsR0FBRyxXQUFXLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXZFLElBQUksWUFBWSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUN4RCxZQUFZLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMxRCxZQUFZLENBQUMsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ3BELFlBQVksQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUM7Z0JBQ3RELFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hDO1lBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUM1RSxRQUFRLENBQUM7Z0JBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUVoRCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUViLENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsNEJBQTRCO0lBQzlCLENBQUM7O3lIQXJZVSwyQkFBMkI7NkdBQTNCLDJCQUEyQiw0S0NqQnhDLGswVEFnT0E7NEZEL01hLDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsdUNBQXVDO2lCQUNyRDsyVEFrQndDLEVBQUU7c0JBQXhDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRvZ2dsZVNsaWRlT3B0aW9ucywgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBJbnB1dFR5cGUsIFRleHRCb3hPcHRpb25zLCBDaGVja0JveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IERhdGFTZWNyZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvU2VydmljZXMvQWN0aXZlRGlyZWN0b3J5U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZlRGlyZWN0b3J5QWRkRWRpdE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9BRE1vZGVscy9BY3RpdmVEaXJlY3RvcnlBZGRFZGl0TW9kZWwnO1xyXG5pbXBvcnQgeyBBRE1hcHBpbmdNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvQURNb2RlbHMvQURNYXBwaW5nTW9kZWwnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFjdGl2ZS1kaXJlY3RvcnktYWRkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aXZlLWRpcmVjdG9yeS1hZGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmVEaXJlY3RvcnlBZGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL0FEQ29ubmVjdGlvbi9cIjtcclxuICBsYW5ndWFnZTogc3RyaW5nID0gXCJcIjtcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vd2l6YXJkXHJcbiAgZm9ybXNDb3VudCA9IDM7XHJcbiAgY3VycmVudFN0ZXAkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoMSk7XHJcbiAgLy93aXphcmRcclxuICBQZXJtaXNzaW9uU2V0TGlzdDogYW55W10gPSBbXTtcclxuICBMYW5ndWFnZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFdlbGNvbWVNc2dUZW1wTGlzdDogYW55W10gPSBbXTtcclxuICBBRFR5cGVzTGlzdDogYW55W10gPSBbXTtcclxuICBGaWxlUHJvdmlkZXJzOiBhbnlbXSA9IFtdO1xyXG4gIGNvbm5lY3Rpb25UeXBlR3JvdXBJZDogbnVtYmVyO1xyXG5cclxuICBtYXBwaW5nUHJvcGVydGllc0xpc3Q6IGFueVtdID0gW107XHJcbiAgbWFwcGluZ1R5cGVzTGlzdDogYW55W10gPSBbXTtcclxuICBAVmlld0NoaWxkKCd3aXphcmQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBlbDogRWxlbWVudFJlZjtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRBY3RpdmVEaXJlY3RvcnlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkVHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGREb21haW46IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFNhbUFjY291bnQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFBhc3N3b3JkOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRTZWFyY2hUcmVlOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRTaG93QnVpbHRJbkdyb3VwczogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIEFkZE5hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFBlcm1pc3Npb25TZXQ6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRMYW5ndWFnZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFdlbGNvbWVNc2dUZW1wOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkRmlsZVByb3ZpZGVyOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkTWFya0luYWN0aXZlOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgQWRkRGFpbHlKb2I6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBBZGRNYXBwaW5nc09wdGlvbnM6IGFueVtdID0gW107XHJcbiAgQWRkTWFwcGluZ3NDb3VudDogbnVtYmVyID0gMDtcclxuXHJcblxyXG5cclxuICBBZGRTaG93QnVpbHRJbkdyb3Vwc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0FkZEZvcm1Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy9BZGREZXNjcmlwdGlvbjogVGV4dEFyZWFPcHRpb25zO1xyXG4gIC8vQWRkT3JnYW5pemF0aW9uT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG5cclxuICBzdWJtaXR0ZWQgPSBmYWxzZTtcclxuICB3aXphcmQ6IGFueTtcclxuXHJcbiAgdmFsaWRhdGlvbkVycm9yOiBzdHJpbmc7XHJcbiAgZXJyb3JJc0ZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJlZU5vZGVEYXRhOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIGRhdGFTZXJ2aWNlczogRGF0YVNlY3JldFNlcnZpY2UsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIEFjdGl2ZURpcmVjdG9yeVNlcnZpY2U6IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgdGhpcy5BY3RpdmVEaXJlY3RvcnlTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgRHJvcGRvd25MaXN0cyA9IHJlc3VsdCBhcyBhbnlcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duTGlzdHMucGVybWlzc2lvblNldHM7XHJcbiAgICAgIHRoaXMuQURUeXBlc0xpc3QgPSBEcm9wZG93bkxpc3RzLmFkVHlwZXM7XHJcbiAgICAgIHRoaXMuTGFuZ3VhZ2VzTGlzdCA9IERyb3Bkb3duTGlzdHMubGFuZ3VhZ2VzO1xyXG4gICAgICB0aGlzLldlbGNvbWVNc2dUZW1wTGlzdCA9IERyb3Bkb3duTGlzdHMudGVtcGxhdGVzO1xyXG4gICAgICB0aGlzLkZpbGVQcm92aWRlcnMgPSBEcm9wZG93bkxpc3RzLmZpbGVQcm92aWRlcnM7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvblR5cGVHcm91cElkID0gRHJvcGRvd25MaXN0cy5jb25uZWN0aW9uVHlwZUdyb3VwSWQ7XHJcblxyXG4gICAgICB0aGlzLm1hcHBpbmdQcm9wZXJ0aWVzTGlzdCA9IERyb3Bkb3duTGlzdHMubWFwcGluZ1Byb3BlcnRpZXM7XHJcbiAgICAgIHRoaXMubWFwcGluZ1R5cGVzTGlzdCA9IERyb3Bkb3duTGlzdHMubWFwcGluZ1R5cGVzO1xyXG5cclxuICAgICAgdGhpcy5BZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuQWRkRG9tYWluID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRG9tYWluLk5hbWUgPSBcIkFkZERvbWFpblwiO1xyXG4gICAgICB0aGlzLkFkZERvbWFpbi5MYWJlbEtleSA9IFwiRG9tYWluXCI7XHJcbiAgICAgIHRoaXMuQWRkRG9tYWluLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGREb21haW4uVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZERvbWFpbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQuTmFtZSA9IFwiQWRkU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQuTGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LlZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkUGFzc3dvcmQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRQYXNzd29yZC5OYW1lID0gXCJBZGRQYXNzd29yZFwiO1xyXG4gICAgICB0aGlzLkFkZFBhc3N3b3JkLkxhYmVsS2V5ID0gXCJQYXNzd29yZFwiO1xyXG4gICAgICB0aGlzLkFkZFBhc3N3b3JkLlR5cGUgPSBJbnB1dFR5cGUuUGFzc3dvcmQ7XHJcbiAgICAgIHRoaXMuQWRkUGFzc3dvcmQuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFBhc3N3b3JkLlJlbW92ZURlZmF1bHRQYXNzd29yZFZhbGlkYXRpb24gPSB0cnVlO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuTmFtZSA9IFwiQWRkVHlwZU9wdGlvbnNcIlxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkxhYmVsS2V5ID0gXCJUeXBlXCJcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbFxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLkFEVHlwZXNMaXN0XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRTaG93QnVpbHRJbkdyb3VwcyA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTaG93QnVpbHRJbkdyb3Vwcy5OYW1lID0gXCJBZGRTaG93QnVpbHRJbkdyb3Vwc1wiXHJcbiAgICAgIHRoaXMuQWRkU2hvd0J1aWx0SW5Hcm91cHMuTGFiZWxWYWx1ZSA9IFwiU2hvd0J1aWx0SW5Hcm91cHNcIlxyXG4gICAgICB0aGlzLkFkZFNob3dCdWlsdEluR3JvdXBzLkxhYmVsS2V5ID0gXCJTaG93QnVpbHRJbkdyb3Vwc1wiXHJcbiAgICAgIHRoaXMuQWRkU2hvd0J1aWx0SW5Hcm91cHMuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRTaG93QnVpbHRJbkdyb3Vwcy5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2VhcmNoVHJlZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNlYXJjaFRyZWUuTmFtZSA9IFwiQWRkU2VhcmNoVHJlZVwiO1xyXG4gICAgICB0aGlzLkFkZFNlYXJjaFRyZWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTZWFyY2hUcmVlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRTZWFyY2hUcmVlLlZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuTmFtZSA9IFwiQWRkTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuTGFiZWxLZXkgPSBcIk5hbWVcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGROYW1lLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGROYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXQuTmFtZSA9IFwiQWRkUGVybWlzc2lvblNldFwiXHJcbiAgICAgIHRoaXMuQWRkUGVybWlzc2lvblNldC5MYWJlbEtleSA9IFwiUGVybWlzc2lvblNldFwiXHJcbiAgICAgIHRoaXMuQWRkUGVybWlzc2lvblNldC5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkFkZFBlcm1pc3Npb25TZXQuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRQZXJtaXNzaW9uU2V0LlBsYWNlaG9sZGVyID0gXCJQZXJtaXNzaW9uU2V0XCI7XHJcbiAgICAgIHRoaXMuQWRkUGVybWlzc2lvblNldC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkTGFuZ3VhZ2UgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTGFuZ3VhZ2UuTmFtZSA9IFwiQWRkTGFuZ3VhZ2VcIlxyXG4gICAgICB0aGlzLkFkZExhbmd1YWdlLkxhYmVsS2V5ID0gXCJMYW5ndWFnZVwiXHJcbiAgICAgIHRoaXMuQWRkTGFuZ3VhZ2UuRGF0YVNvdXJjZSA9IHRoaXMuTGFuZ3VhZ2VzTGlzdFxyXG4gICAgICB0aGlzLkFkZExhbmd1YWdlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkTGFuZ3VhZ2UuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZExhbmd1YWdlLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5BZGRMYW5ndWFnZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkV2VsY29tZU1zZ1RlbXAgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV2VsY29tZU1zZ1RlbXAuTmFtZSA9IFwiQWRkV2VsY29tZU1zZ1RlbXBcIlxyXG4gICAgICB0aGlzLkFkZFdlbGNvbWVNc2dUZW1wLkxhYmVsS2V5ID0gXCJXZWxjb21lTXNnVGVtcGxhdGVcIlxyXG4gICAgICB0aGlzLkFkZFdlbGNvbWVNc2dUZW1wLkRhdGFTb3VyY2UgPSB0aGlzLldlbGNvbWVNc2dUZW1wTGlzdFxyXG4gICAgICB0aGlzLkFkZFdlbGNvbWVNc2dUZW1wLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkV2VsY29tZU1zZ1RlbXAuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFdlbGNvbWVNc2dUZW1wLlBsYWNlaG9sZGVyID0gXCJXZWxjb21lTXNnVGVtcGxhdGVcIjtcclxuXHJcbiAgICAgIHRoaXMuQWRkRmlsZVByb3ZpZGVyID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEZpbGVQcm92aWRlci5OYW1lID0gXCJBZGRGaWxlUHJvdmlkZXJcIlxyXG4gICAgICB0aGlzLkFkZEZpbGVQcm92aWRlci5MYWJlbEtleSA9IFwiRmlsZVByb3ZpZGVyXCJcclxuICAgICAgdGhpcy5BZGRGaWxlUHJvdmlkZXIuRGF0YVNvdXJjZSA9IHRoaXMuRmlsZVByb3ZpZGVyc1xyXG4gICAgICB0aGlzLkFkZEZpbGVQcm92aWRlci5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZEZpbGVQcm92aWRlci5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRmlsZVByb3ZpZGVyLlBsYWNlaG9sZGVyID0gXCJXZWxjb21lTXNnVGVtcGxhdGVcIjtcclxuXHJcbiAgICAgIHRoaXMuQWRkTWFya0luYWN0aXZlID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZE1hcmtJbmFjdGl2ZS5OYW1lID0gXCJBZGRNYXJrSW5hY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZE1hcmtJbmFjdGl2ZS5MYWJlbEtleSA9IFwiTWFya0FzSW5hY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZE1hcmtJbmFjdGl2ZS5WYWx1ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkFkZE1hcmtJbmFjdGl2ZS5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkRGFpbHlKb2IgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGFpbHlKb2IuTmFtZSA9IFwiQWRkRGFpbHlKb2JcIlxyXG4gICAgICB0aGlzLkFkZERhaWx5Sm9iLkxhYmVsS2V5ID0gXCJBZGRUb0RhaWx5Sm9iXCJcclxuICAgICAgdGhpcy5BZGREYWlseUpvYi5WYWx1ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkFkZERhaWx5Sm9iLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG5cclxuICAgICAgLy9zZXQgQUQgbWFwcGluZ1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5nZXRBRE1hcHBpbmdPcHRpb25zKERyb3Bkb3duTGlzdHMuYWRNYXBwaW5ncyk7XHJcbiAgICAgIHRoaXMuQWRkTWFwcGluZ3NPcHRpb25zID0gZGF0YVswXTtcclxuICAgICAgdGhpcy5BZGRNYXBwaW5nc0NvdW50ID0gZGF0YVsxXTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuSXNBZGRGb3JtTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSwgNTApO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRBRE1hcHBpbmdPcHRpb25zKEFETWFwcGluZ3M6IGFueVtdKSB7XHJcbiAgICBsZXQgQURNYXBwaW5nT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBBRE1hcHBpbmdDb3VudDogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQURNYXBwaW5ncy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgbGV0IG9iamVjdE1hcHBpbmdPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IEFETWFwcGluZ1R5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIGxldCBzZWxlY3RlZFR5cGUgPSB0aGlzLm1hcHBpbmdUeXBlc0xpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLmtleSA9PSBBRE1hcHBpbmdzW2ldLmFkTWFwcGluZ1R5cGVJdGVtSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICBBRE1hcHBpbmdUeXBlLk5hbWUgPSBcIkFETWFwcGluZ1R5cGVcIiArIGk7XHJcbiAgICAgIEFETWFwcGluZ1R5cGUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgQURNYXBwaW5nVHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICBBRE1hcHBpbmdUeXBlLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFR5cGU7XHJcbiAgICAgIEFETWFwcGluZ1R5cGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgIEFETWFwcGluZ1R5cGUuRGF0YVNvdXJjZSA9IHRoaXMubWFwcGluZ1R5cGVzTGlzdDtcclxuICAgICAgQURNYXBwaW5nVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGxldCBBRE1hcHBpbmdQcm9wZXJ0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgbGV0IHNlbGVjdGVkUHJvcGVydHkgPSB0aGlzLm1hcHBpbmdQcm9wZXJ0aWVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IEFETWFwcGluZ3NbaV0uYmJzZlByb3BlcnR5TmFtZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcbiAgICAgIEFETWFwcGluZ1Byb3BlcnR5Lk5hbWUgPSBcIkFETWFwcGluZ1Byb3BlcnR5XCIgKyBpO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eS5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRQcm9wZXJ0eTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHkuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgIEFETWFwcGluZ1Byb3BlcnR5LkRhdGFTb3VyY2UgPSB0aGlzLm1hcHBpbmdQcm9wZXJ0aWVzTGlzdDtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgbGV0IEFETWFwcGluZ1Byb3BlcnR5TmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eU5hbWUuTmFtZSA9IFwiQURNYXBwaW5nUHJvcGVydHlOYW1lXCIgKyBpO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eU5hbWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLlZhbHVlID0gQURNYXBwaW5nc1tpXS5hZFByb3BlcnR5TmFtZTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLklzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eU5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICBsZXQgQURNYXBwaW5nSW5jbHVkZVVwZGF0ZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgQURNYXBwaW5nSW5jbHVkZVVwZGF0ZS5OYW1lID0gXCJBRE1hcHBpbmdJbmNsdWRlVXBkYXRlXCIgKyBpO1xyXG4gICAgICBBRE1hcHBpbmdJbmNsdWRlVXBkYXRlLlZhbHVlID0gQURNYXBwaW5nc1tpXS5pbmNsdWRlSW5VcGRhdGU7XHJcbiAgICAgIEFETWFwcGluZ0luY2x1ZGVVcGRhdGUuSXNEaXNhYmxlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgb2JqZWN0TWFwcGluZ09wdGlvbnMucHVzaChBRE1hcHBpbmdUeXBlLCBBRE1hcHBpbmdQcm9wZXJ0eSwgQURNYXBwaW5nUHJvcGVydHlOYW1lLCBBRE1hcHBpbmdJbmNsdWRlVXBkYXRlKTtcclxuICAgICAgQURNYXBwaW5nT3B0aW9ucy5wdXNoKG9iamVjdE1hcHBpbmdPcHRpb25zKTtcclxuICAgICAgQURNYXBwaW5nQ291bnQgKz0gMTtcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gW0FETWFwcGluZ09wdGlvbnMsIEFETWFwcGluZ0NvdW50XTtcclxuICB9XHJcbiAgZGVsZXRlQURNYXBwaW5nKGRlbGV0ZWRBRE1BcHBpbmc6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRNYXBwaW5nSW5kZXg6IG51bWJlciA9IHRoaXMuQWRkTWFwcGluZ3NPcHRpb25zLmluZGV4T2YoZGVsZXRlZEFETUFwcGluZyk7XHJcbiAgICBpZiAoZGVsZXRlZE1hcHBpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5BZGRNYXBwaW5nc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRNYXBwaW5nSW5kZXgsIDEpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRBRE1BcHBpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLkFkZEFjdGl2ZURpcmVjdG9yeUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkQURNQXBwaW5nW2ldLk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHR5cGVDaGFuZ2UodHlwZVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZVZhbHVlID09IHRoaXMuY29ubmVjdGlvblR5cGVHcm91cElkKSB7XHJcbiAgICAgIHRoaXMuQWRkU2hvd0J1aWx0SW5Hcm91cHNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLkFkZFNob3dCdWlsdEluR3JvdXBzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dFN0ZXAoKSB7XHJcbiAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuY3VycmVudFN0ZXAkLnZhbHVlICsgMTtcclxuICAgIGlmIChuZXh0U3RlcCA+IHRoaXMuZm9ybXNDb3VudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRTdGVwJC5uZXh0KG5leHRTdGVwKTtcclxuICB9XHJcblxyXG4gIHByZXZTdGVwKCkge1xyXG4gICAgY29uc3QgcHJldlN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwJC52YWx1ZSAtIDE7XHJcbiAgICBpZiAocHJldlN0ZXAgPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50U3RlcCQubmV4dChwcmV2U3RlcCk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIEluaXRpYWxpemUgZm9ybSB3aXphcmRcclxuICAgIC8vdGhpcy53aXphcmQgPW5ldyAoS1RXaXphcmQgYXMgYW55KSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgIC8vICBzdGFydFN0ZXA6IDEsXHJcbiAgICAvLyAgY2xpY2thYmxlU3RlcHM6IHRydWVcclxuICAgIC8vfSk7XHJcblxyXG4gICAgLy8gVmFsaWRhdGlvbiBiZWZvcmUgZ29pbmcgdG8gbmV4dCBwYWdlXHJcblxyXG4gICAgdGhpcy53aXphcmQub24oJ2JlZm9yZU5leHQnLCAod2l6YXJkT2JqKSA9PiB7XHJcbiAgICAgIGlmICh3aXphcmRPYmouY3VycmVudFN0ZXAgPT09IDEpIHtcclxuICAgICAgICB3aXphcmRPYmouc3RvcCgpO1xyXG5cclxuICAgICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZEFjdGl2ZURpcmVjdG9yeUZvcm0udmFsdWU7XHJcbiAgICAgICAgaWYgKChSZXN1bHRNb2RlbC5BZGRUeXBlT3B0aW9ucyA9PSB1bmRlZmluZWQpIHx8IChSZXN1bHRNb2RlbC5BZGREb21haW4gPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgfHwgUmVzdWx0TW9kZWwuQWRkVHlwZU9wdGlvbnMgPT0gbnVsbCB8fCBSZXN1bHRNb2RlbC5BZGREb21haW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGxldCBBZGRNb2RlbDogQWN0aXZlRGlyZWN0b3J5QWRkRWRpdE1vZGVsID0gbmV3IEFjdGl2ZURpcmVjdG9yeUFkZEVkaXRNb2RlbCgpO1xyXG4gICAgICAgIEFkZE1vZGVsLkNvbm5lY3Rpb25OYW1lID0gUmVzdWx0TW9kZWwuQWRkTmFtZTtcclxuICAgICAgICBBZGRNb2RlbC5Eb21haW4gPSBSZXN1bHRNb2RlbC5BZGREb21haW47XHJcbiAgICAgICAgbGV0IEFEVHlwZXMgPSBSZXN1bHRNb2RlbC5BZGRUeXBlT3B0aW9ucztcclxuICAgICAgICBsZXQgdHlwZUl0ZW1JRDogbnVtYmVyO1xyXG4gICAgICAgIHR5cGVJdGVtSUQgPSBOdW1iZXIoQURUeXBlcyk7XHJcbiAgICAgICAgQWRkTW9kZWwuQURDb25uZWN0aW9uVHlwZUl0ZW1JRCA9IFJlc3VsdE1vZGVsLkFkZFR5cGVPcHRpb25zICE9IG51bGwgPyB0eXBlSXRlbUlEIDogbnVsbDtcclxuICAgICAgICBBZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuQWRkU2FtQWNjb3VudDtcclxuICAgICAgICBBZGRNb2RlbC5QYXNzd29yZCA9IFJlc3VsdE1vZGVsLkFkZFBhc3N3b3JkO1xyXG4gICAgICAgIEFkZE1vZGVsLlNob3dCdWlsdEluR3JvdXBzID0gUmVzdWx0TW9kZWwuQWRkU2hvd0J1aWx0SW5Hcm91cHM7XHJcblxyXG5cclxuICAgICAgICB0aGlzLkFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuQ2hlY2tWYWxpZGF0aW9uYW5kR2V0RGF0YShBZGRNb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIHZhciBkYXRhID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLnZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVOb2RlRGF0YSA9IGRhdGEudHJlZURhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JJc0ZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHdpemFyZE9iai5yZXN1bWUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvciA9IGRhdGEuZXJyb3I7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JJc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9mb3Jtc1xyXG4gICAgICAgIC8vIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9mb3JtLXZhbGlkYXRpb25cclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgdGhlIGZvcm0gYW5kIHVzZSBiZWxvdyBmdW5jdGlvbiB0byBzdG9wIHRoZSB3aXphcmQncyBzdGVwXHJcbiAgICAgICAgLy8gd2l6YXJkT2JqLnN0b3AoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2hhbmdlIGV2ZW50XHJcbiAgICAvL3RoaXMud2l6YXJkLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAvLyAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICBLVFV0aWwuc2Nyb2xsVG9wKCk7XHJcbiAgICAvLyAgfSwgNTAwKTtcclxuICAgIC8vfSk7XHJcbiAgfVxyXG4gIGFkZEFjdGl2ZURpcmVjdG9yeSgpIHtcclxuICAgIGlmICh0aGlzLkFkZEFjdGl2ZURpcmVjdG9yeUZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5BZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnZhbHVlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKFJlc3VsdE1vZGVsKTtcclxuICAgICAgbGV0IEFkZE1vZGVsOiBBY3RpdmVEaXJlY3RvcnlBZGRFZGl0TW9kZWwgPSBuZXcgQWN0aXZlRGlyZWN0b3J5QWRkRWRpdE1vZGVsKCk7XHJcbiAgICAgIEFkZE1vZGVsLkNvbm5lY3Rpb25OYW1lID0gUmVzdWx0TW9kZWwuQWRkTmFtZTtcclxuICAgICAgQWRkTW9kZWwuRG9tYWluID0gUmVzdWx0TW9kZWwuQWRkRG9tYWluO1xyXG4gICAgICBBZGRNb2RlbC5BRENvbm5lY3Rpb25UeXBlSXRlbUlEID0gUmVzdWx0TW9kZWwuQWRkVHlwZU9wdGlvbnMgIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5BZGRUeXBlT3B0aW9ucykgOiBudWxsXHJcbiAgICAgIEFkZE1vZGVsLlNhbUFjY291bnQgPSBSZXN1bHRNb2RlbC5BZGRTYW1BY2NvdW50O1xyXG4gICAgICBBZGRNb2RlbC5QYXNzd29yZCA9IFJlc3VsdE1vZGVsLkFkZFBhc3N3b3JkO1xyXG4gICAgICBBZGRNb2RlbC5TaG93QnVpbHRJbkdyb3VwcyA9IFJlc3VsdE1vZGVsLkFkZFNob3dCdWlsdEluR3JvdXBzO1xyXG4gICAgICBBZGRNb2RlbC5QZXJtaXNzaW9uU2V0SUQgPSBSZXN1bHRNb2RlbC5BZGRQZXJtaXNzaW9uU2V0ICE9IG51bGwgPyBOdW1iZXIoUmVzdWx0TW9kZWwuQWRkUGVybWlzc2lvblNldCkgOiBudWxsXHJcbiAgICAgIEFkZE1vZGVsLkxhbmdLZXkgPSBSZXN1bHRNb2RlbC5BZGRMYW5ndWFnZTtcclxuICAgICAgQWRkTW9kZWwuV2VsY29tZVRlbXBsYXRlSUQgPSBSZXN1bHRNb2RlbC5BZGRXZWxjb21lTXNnVGVtcCAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLkFkZFdlbGNvbWVNc2dUZW1wKSA6IG51bGxcclxuICAgICAgQWRkTW9kZWwuSW1hZ2VzRmlsZVByb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLkFkZEZpbGVQcm92aWRlclxyXG4gICAgICBBZGRNb2RlbC5NYXJrQXNJbmFjdGl2ZSA9IFJlc3VsdE1vZGVsLkFkZE1hcmtJbmFjdGl2ZVxyXG4gICAgICBBZGRNb2RlbC5BZGRUb0RhaWx5Sm9iID0gUmVzdWx0TW9kZWwuQWRkRGFpbHlKb2JcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5BZGRNYXBwaW5nc0NvdW50OyBqKyspIHtcclxuICAgICAgICBsZXQgYWRkTUFwcGluZ1R5cGUgPSBSZXN1bHRNb2RlbFtcIkFETWFwcGluZ1R5cGVcIiArIGpdO1xyXG4gICAgICAgIGlmIChhZGRNQXBwaW5nVHlwZSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBsZXQgZWRpdE1BcHBpbmdQcm9wZXJ0eSA9IFJlc3VsdE1vZGVsW1wiQURNYXBwaW5nUHJvcGVydHlcIiArIGpdO1xyXG4gICAgICAgIGxldCBlZGl0TUFwcGluZ1Byb3BlcnR5TmFtZSA9IFJlc3VsdE1vZGVsW1wiQURNYXBwaW5nUHJvcGVydHlOYW1lXCIgKyBqXTtcclxuXHJcbiAgICAgICAgbGV0IGFkTUFwcGluZ09iajogQURNYXBwaW5nTW9kZWwgPSBuZXcgQURNYXBwaW5nTW9kZWwoKTtcclxuICAgICAgICBhZE1BcHBpbmdPYmouQURNYXBwaW5nVHlwZUl0ZW1JRCA9IE51bWJlcihhZGRNQXBwaW5nVHlwZSk7XHJcbiAgICAgICAgYWRNQXBwaW5nT2JqLkJCU0ZQcm9wZXJ0eU5hbWUgPSBlZGl0TUFwcGluZ1Byb3BlcnR5O1xyXG4gICAgICAgIGFkTUFwcGluZ09iai5BRFByb3BlcnR5TmFtZSA9IGVkaXRNQXBwaW5nUHJvcGVydHlOYW1lO1xyXG4gICAgICAgIEFkZE1vZGVsLkFETWFwcGluZ3MucHVzaChhZE1BcHBpbmdPYmopO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLkFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuQWRkQWN0aXZlRGlyZWN0b3J5KEFkZE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL0FkbWluL0FEQ29ubmVjdGlvbiddKTtcclxuXHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnkoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gIHRoaXMud2l6YXJkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG5cclxuIiwiXHJcblxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cIlxyXG4gICAgc3RlcHBlciBzdGVwcGVyLXBpbGxzIHN0ZXBwZXItY29sdW1uXHJcbiAgICBkLWZsZXhcclxuICAgIGZsZXgtY29sdW1uIGZsZXgteGwtcm93IGZsZXgtcm93LWZsdWlkIFwiXHJcbiAgICAgICBpZD1cImt0X2NyZWF0ZV9hY2NvdW50X3N0ZXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJcclxuICAgICAgZC1mbGV4XHJcbiAgICAgIGp1c3RpZnktY29udGVudC1jZW50ZXJcclxuICAgICAgcm91bmRlZFxyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnRcclxuICAgICAgZmxleC1yb3ctYXV0b1xyXG4gICAgIFxyXG4gICAgICBtZS05XHJcbiAgICAgIGNhcmRcclxuICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB4LTYgcHgtbGctMTAgcHgteHhsLTE1IHB5LTIwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbmF2XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1pdGVtXCJcclxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICBjdXJyZW50OiBjdXJyZW50U3RlcCQudmFsdWUgPT09IDEgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1saW5lIHctNDBweFwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaWNvbiB3LTQwcHggaC00MHB4XCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJzdGVwcGVyLWNoZWNrIGZhcyBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXBwZXItbnVtYmVyXCI+MTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cInN0ZXBwZXItdGl0bGVcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmVEaXJlY3RvcnlcIil9fTwvaDM+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWRlc2MgZnctYm9sZFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2ZURpcmVjdG9yeV9UYWIxTm90ZVwiKX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaXRlbVwiXHJcbiAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgY3VycmVudDogY3VycmVudFN0ZXAkLnZhbHVlID09PSAyIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGluZSB3LTQwcHhcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWljb24gdy00MHB4IGgtNDBweFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwic3RlcHBlci1jaGVjayBmYXMgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwcGVyLW51bWJlclwiPjI8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGFiZWxcIj5cclxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJzdGVwcGVyLXRpdGxlXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZlRGlyZWN0b3J5X1NlbGVjdENvbnRhaW5lclwiKX19PC9oMz5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1kZXNjIGZ3LWJvbGRcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmVEaXJlY3RvcnlfVGFiMk5vdGVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgIGN1cnJlbnQ6IGN1cnJlbnRTdGVwJC52YWx1ZSA9PT0gM31cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGluZSB3LTQwcHhcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWljb24gdy00MHB4IGgtNDBweFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwic3RlcHBlci1jaGVjayBmYXMgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwcGVyLW51bWJlclwiPjM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGFiZWxcIj5cclxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJzdGVwcGVyLXRpdGxlXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiT3B0aW9uc1wiKX19PC9oMz5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1kZXNjIGZ3LWJvbGRcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmVEaXJlY3RvcnlfVGFiM05vdGVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGQtZmxleCBmbGV4LXJvdy1mbHVpZCBmbGV4LWNlbnRlciAgcm91bmRlZFwiPlxyXG4gICAgICA8Zm9ybSBjbGFzcz1cInAtMjAgdy0xMDAgY2FyZC1ib2R5XCJcclxuICAgICAgICAgICAgaWQ9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtXCIgW2Zvcm1Hcm91cF09XCJBZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImN1cnJlbnRcIiAqbmdJZj1cIklzQWRkRm9ybUxvYWRlZFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFR5cGVPcHRpb25zXCIgW2dyb3VwXT1cIkFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIiAoT25DaGFuZ2UpPVwidHlwZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZERvbWFpblwiIFtncm91cF09XCJBZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkU2FtQWNjb3VudFwiIFtncm91cF09XCJBZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkUGFzc3dvcmRcIiBbZ3JvdXBdPVwiQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIiAqbmdJZj1cIkFkZFNob3dCdWlsdEluR3JvdXBzVmlzaWJsZVwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkFkZFNob3dCdWlsdEluR3JvdXBzXCIgW2dyb3VwXT1cIkFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICA8L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAkLnZhbHVlID09PSAyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGRTZWFyY2hUcmVlXCIgW2dyb3VwXT1cIkFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAkLnZhbHVlID09PSAzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGROYW1lXCIgW2dyb3VwXT1cIkFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFBlcm1pc3Npb25TZXRcIiBbZ3JvdXBdPVwiQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRMYW5ndWFnZVwiIFtncm91cF09XCJBZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFdlbGNvbWVNc2dUZW1wXCIgW2dyb3VwXT1cIkFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkRmlsZVByb3ZpZGVyXCIgW2dyb3VwXT1cIkFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJBZGRNYXJrSW5hY3RpdmVcIiBbZ3JvdXBdPVwiQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiQWRkRGFpbHlKb2JcIiBbZ3JvdXBdPVwiQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUeXBlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvcGVydHlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBRFByb3BlcnR5XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSW5jbHVkZUluVXBkYXRlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBBZGRNYXBwaW5nc09wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJBZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJBZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiQWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlQURNYXBwaW5nKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIHB0LTEwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItMlwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAkLnZhbHVlICE9PSAxXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2U3RlcCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2My5zdmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tNCBtZS0xXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJldmlvdXNcIil9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSAhPT0gZm9ybXNDb3VudFwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGcgYnRuLXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFN0ZXAoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmRpY2F0b3ItbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSA8IGZvcm1zQ291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOZXh0XCIpfX0ge3sgXCIgXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDY0LnN2ZydcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMyBtcy0yIG1lLTBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSA9PT0gZm9ybXNDb3VudFwiID5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGcgYnRuLXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5cclxuICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWJtaXRcIil9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICBcclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWRpcmVjdG9yeS1hZGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9BY3RpdmVEaXJlY3Rvcmllcy9hY3RpdmUtZGlyZWN0b3J5LWFkZC9hY3RpdmUtZGlyZWN0b3J5LWFkZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL0FjdGl2ZURpcmVjdG9yaWVzL2FjdGl2ZS1kaXJlY3RvcnktYWRkL2FjdGl2ZS1kaXJlY3RvcnktYWRkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXRKLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FB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Q0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUNaLFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs7eUhBdmhCVSwyQkFBMkI7NkdBQTNCLDJCQUEyQiwyckJDdkN4QyxzaVpBd1BBOzRGRGpOYSwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsV0FBVyxFQUFFLHVDQUF1QztpQkFDckQ7b1FBZ0NnRCxhQUFhO3NCQUEzRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBVUksZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ08sb0JBQW9CO3NCQUF6RSxTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFrQkgsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ00sbUJBQW1CO3NCQUF2RSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRvZ2dsZVNsaWRlT3B0aW9ucywgQ29udHJvbExheW91dCwgRHJvcGRvd25PcHRpb25zLCBJbnB1dFR5cGUsIFRleHRCb3hPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIEZvcm1PcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL0FjdGl2ZURpcmVjdG9yeVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeUFkZEVkaXRNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvQURNb2RlbHMvQWN0aXZlRGlyZWN0b3J5QWRkRWRpdE1vZGVsJztcclxuaW1wb3J0IHsgQURNYXBwaW5nTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0FETW9kZWxzL0FETWFwcGluZ01vZGVsJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IEFEVHlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9FbnVtcy9BRFR5cGUnO1xyXG5pbXBvcnQgeyBBRFdpbmRvd3NUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL0VudW1zL0FEV2luZG93c1R5cGUnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvRHJvcGRvd25MaXN0L0Ryb3Bkb3duTGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1RleHRCb3gvVGV4dEJveC5jb21wb25lbnQnO1xyXG5cclxuaW50ZXJmYWNlIEFETm9kZSB7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNoaWxkcmVuPzogQUROb2RlW107XHJcbiAgZGF0YTogc3RyaW5nO1xyXG4gIHNlbGVjdGFibGU6IGJvb2xlYW47XHJcbiAgaWNvbjogc3RyaW5nO1xyXG4gIHN0YXRlOiBhbnk7XHJcbiAgSW5kZXg6IG51bWJlcjtcclxufVxyXG5cclxuLyoqIEZsYXQgbm9kZSB3aXRoIGV4cGFuZGFibGUgYW5kIGxldmVsIGluZm9ybWF0aW9uICovXHJcbmludGVyZmFjZSBGbGF0Tm9kZSB7XHJcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgbGV2ZWw6IG51bWJlcjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWN0aXZlLWRpcmVjdG9yeS1hZGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3RpdmUtZGlyZWN0b3J5LWFkZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGl2ZURpcmVjdG9yeUFkZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvL3dpemFyZFxyXG4gIGZvcm1zQ291bnQgPSAyO1xyXG4gIGN1cnJlbnRTdGVwJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDEpO1xyXG4gIC8vd2l6YXJkXHJcbiAgLy9SZXF1aXJlZCBMaXN0c1xyXG4gIHBlcm1pc3Npb25TZXRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGxhbmd1YWdlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgd2VsY29tZU1zZ1RlbXBMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGFkVHlwZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGZpbGVQcm92aWRlcnM6IGFueVtdID0gW107XHJcbiAgbWFwcGluZ1Byb3BlcnRpZXNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIG1hcHBpbmdUeXBlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgLy9XaW5kb3dzXHJcbiAgYWRXaW5kb3dzVHlwZXM6IGFueVtdID0gW107O1xyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIGFkZEFjdGl2ZURpcmVjdG9yeUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRBY3RpdmVEaXJlY3RvcnlGb3JtT3B0aW9uczogRm9ybU9wdGlvbnM7XHJcbiAgYWRkVHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBhZGROYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBhZGRQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgYWRkTGFuZ3VhZ2U6IERyb3Bkb3duT3B0aW9ucztcclxuICBhZGRXZWxjb21lTXNnVGVtcDogRHJvcGRvd25PcHRpb25zO1xyXG4gIGFkZEZpbGVQcm92aWRlcjogRHJvcGRvd25PcHRpb25zO1xyXG4gIGFkZE1hcmtJbmFjdGl2ZTogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIGFkZERhaWx5Sm9iOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgYWRkTWFwcGluZ3NPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGFkZE1hcHBpbmdzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgc2VsZWN0ZWRUeXBlOiBudW1iZXI7XHJcbiAgaXNBZGRGb3JtTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnYWRUeXBlQ29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBhZFR5cGVDb250cm9sOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcblxyXG4gIC8vLy8vLy8vL1N0YXJ0IFdpbmRvd3MgY29udHJvbHMvLy8vL1xyXG4gIGFkZERvbWFpbjogVGV4dEJveE9wdGlvbnM7XHJcbiAgYWRkU2FtQWNjb3VudDogVGV4dEJveE9wdGlvbnM7XHJcbiAgYWRkUGFzc3dvcmQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIGFkZFdpbmRvd3NUeXBlT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGFkZFNob3dCdWlsdEluR3JvdXBzOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgYWRkU2hvd0J1aWx0SW5Hcm91cHNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1dpbmRvd3NDb250cm9sczogYm9vbGVhbjtcclxuICBAVmlld0NoaWxkKCdhZERvbWFpbkNvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgYWREb21haW5Db250cm9sOiBUZXh0Ym94Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2FkV2luZG93c1R5cGVDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFkV2luZG93c1R5cGVDb250cm9sOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgLy9UcmVlXHJcbiAgdmFsaWRhdGlvbkVycm9yOiBzdHJpbmc7XHJcbiAgZXJyb3JJc0ZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJlZU5vZGVEYXRhOiBhbnk7XHJcbiAgdHJlZUNvbnRyb2w6IGFueTtcclxuICB0cmVlRmxhdHRlbmVyOiBhbnk7XHJcbiAgZGF0YVNvdXJjZTogYW55O1xyXG4gIGhhc0NoaWxkOiBhbnk7XHJcbiAgdHJlZURhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RlZCA9IC0xO1xyXG4gIGlkZW50aWZpZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgaWRlbnRpZmllck5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAvLy8vLy8vLy9FbmQgV2luZG93cyBjb250cm9scy8vLy8vXHJcbiAgLy9BenVyZVxyXG4gIGFkZFRlbmFudElEOiBUZXh0Qm94T3B0aW9ucztcclxuICBhZGRDbGllbnRJRDogVGV4dEJveE9wdGlvbnM7XHJcbiAgYWRkQ2xpZW50U2VjcmV0OiBUZXh0Qm94T3B0aW9ucztcclxuICBAVmlld0NoaWxkKCd0ZW5hbnRJRENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGVuYW50SURDb250cm9sOiBUZXh0Ym94Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2NsaWVudElEQ29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjbGllbnRJRENvbnRyb2w6IFRleHRib3hDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnY2xpZW50U2VjcmV0Q29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjbGllbnRTZWNyZXRDb250cm9sOiBUZXh0Ym94Q29tcG9uZW50O1xyXG5cclxuICBzaG93QXp1cmVDb250cm9sczogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIEFjdGl2ZURpcmVjdG9yeVNlcnZpY2U6IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRBY3RpdmVEaXJlY3RvcnlcIik7XHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQURDb25uZWN0aW9uXCIpLCBwYXRoOiAnL0FkbWluL0FEQ29ubmVjdGlvbicsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLy9Jbml0IHBhZ2VcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIHRoaXMuQWN0aXZlRGlyZWN0b3J5U2VydmljZS5sb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJldWx0T2JqID0gcmVzdWx0IGFzIGFueVxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRMaXN0ID0gcmV1bHRPYmoucGVybWlzc2lvblNldHM7XHJcbiAgICAgIHRoaXMuYWRUeXBlc0xpc3QgPSByZXVsdE9iai5hZFR5cGVzO1xyXG4gICAgICB0aGlzLmFkV2luZG93c1R5cGVzID0gcmV1bHRPYmouYWRXaW5kb3dzVHlwZXM7XHJcbiAgICAgIHRoaXMubGFuZ3VhZ2VzTGlzdCA9IHJldWx0T2JqLmxhbmd1YWdlcztcclxuICAgICAgdGhpcy53ZWxjb21lTXNnVGVtcExpc3QgPSByZXVsdE9iai50ZW1wbGF0ZXM7XHJcbiAgICAgIHRoaXMuZmlsZVByb3ZpZGVycyA9IHJldWx0T2JqLmZpbGVQcm92aWRlcnM7XHJcblxyXG4gICAgICB0aGlzLm1hcHBpbmdQcm9wZXJ0aWVzTGlzdCA9IHJldWx0T2JqLm1hcHBpbmdQcm9wZXJ0aWVzO1xyXG4gICAgICB0aGlzLm1hcHBpbmdUeXBlc0xpc3QgPSByZXVsdE9iai5tYXBwaW5nVHlwZXM7XHJcblxyXG4gICAgICB0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnlGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVxyXG4gICAgICB0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZEFETW9kZWw7XHJcbiAgICAgIHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRBREZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm1PcHRpb25zLk9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLmFkZEFET25TdWNjZXNzO1xyXG5cclxuICAgICAgdGhpcy5hZGRUeXBlT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRUeXBlT3B0aW9ucy5OYW1lID0gXCJhZGRUeXBlT3B0aW9uc1wiXHJcbiAgICAgIHRoaXMuYWRkVHlwZU9wdGlvbnMuTGFiZWxLZXkgPSBcIlR5cGVcIlxyXG4gICAgICB0aGlzLmFkZFR5cGVPcHRpb25zLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsXHJcbiAgICAgIHRoaXMuYWRkVHlwZU9wdGlvbnMuRGF0YVNvdXJjZSA9IHRoaXMuYWRUeXBlc0xpc3RcclxuICAgICAgdGhpcy5hZGRUeXBlT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmFkZFR5cGVPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hZGRUeXBlT3B0aW9ucy5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuYWRkVHlwZU9wdGlvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmFkZE5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGROYW1lLk5hbWUgPSBcImFkZE5hbWVcIjtcclxuICAgICAgdGhpcy5hZGROYW1lLkxhYmVsS2V5ID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuYWRkTmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuYWRkTmFtZS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuYWRkTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuYWRkUGVybWlzc2lvblNldCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRQZXJtaXNzaW9uU2V0Lk5hbWUgPSBcImFkZFBlcm1pc3Npb25TZXRcIlxyXG4gICAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXQuTGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRcIlxyXG4gICAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXQuRGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvblNldExpc3RcclxuICAgICAgdGhpcy5hZGRQZXJtaXNzaW9uU2V0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuYWRkUGVybWlzc2lvblNldC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuYWRkUGVybWlzc2lvblNldC5QbGFjZWhvbGRlciA9IFwiUGVybWlzc2lvblNldFwiO1xyXG4gICAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXQuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmFkZExhbmd1YWdlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZExhbmd1YWdlLk5hbWUgPSBcImFkZExhbmd1YWdlXCJcclxuICAgICAgdGhpcy5hZGRMYW5ndWFnZS5MYWJlbEtleSA9IFwiTGFuZ3VhZ2VcIlxyXG4gICAgICB0aGlzLmFkZExhbmd1YWdlLkRhdGFTb3VyY2UgPSB0aGlzLmxhbmd1YWdlc0xpc3RcclxuICAgICAgdGhpcy5hZGRMYW5ndWFnZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmFkZExhbmd1YWdlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hZGRMYW5ndWFnZS5QbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgICAgIHRoaXMuYWRkTGFuZ3VhZ2UuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmFkZFdlbGNvbWVNc2dUZW1wID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZFdlbGNvbWVNc2dUZW1wLk5hbWUgPSBcImFkZFdlbGNvbWVNc2dUZW1wXCJcclxuICAgICAgdGhpcy5hZGRXZWxjb21lTXNnVGVtcC5MYWJlbEtleSA9IFwiV2VsY29tZU1zZ1RlbXBsYXRlXCJcclxuICAgICAgdGhpcy5hZGRXZWxjb21lTXNnVGVtcC5EYXRhU291cmNlID0gdGhpcy53ZWxjb21lTXNnVGVtcExpc3RcclxuICAgICAgdGhpcy5hZGRXZWxjb21lTXNnVGVtcC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmFkZFdlbGNvbWVNc2dUZW1wLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hZGRXZWxjb21lTXNnVGVtcC5QbGFjZWhvbGRlciA9IFwiV2VsY29tZU1zZ1RlbXBsYXRlXCI7XHJcblxyXG4gICAgICB0aGlzLmFkZEZpbGVQcm92aWRlciA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRGaWxlUHJvdmlkZXIuTmFtZSA9IFwiYWRkRmlsZVByb3ZpZGVyXCJcclxuICAgICAgdGhpcy5hZGRGaWxlUHJvdmlkZXIuTGFiZWxLZXkgPSBcIkZpbGVQcm92aWRlclwiXHJcbiAgICAgIHRoaXMuYWRkRmlsZVByb3ZpZGVyLkRhdGFTb3VyY2UgPSB0aGlzLmZpbGVQcm92aWRlcnNcclxuICAgICAgdGhpcy5hZGRGaWxlUHJvdmlkZXIuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hZGRGaWxlUHJvdmlkZXIuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFkZEZpbGVQcm92aWRlci5QbGFjZWhvbGRlciA9IFwiV2VsY29tZU1zZ1RlbXBsYXRlXCI7XHJcblxyXG4gICAgICB0aGlzLmFkZE1hcmtJbmFjdGl2ZSA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRNYXJrSW5hY3RpdmUuTmFtZSA9IFwiYWRkTWFya0luYWN0aXZlXCJcclxuICAgICAgdGhpcy5hZGRNYXJrSW5hY3RpdmUuTGFiZWxLZXkgPSBcIk1hcmtBc0luYWN0aXZlXCJcclxuICAgICAgdGhpcy5hZGRNYXJrSW5hY3RpdmUuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hZGRNYXJrSW5hY3RpdmUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcblxyXG4gICAgICB0aGlzLmFkZERhaWx5Sm9iID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZERhaWx5Sm9iLk5hbWUgPSBcImFkZERhaWx5Sm9iXCJcclxuICAgICAgdGhpcy5hZGREYWlseUpvYi5MYWJlbEtleSA9IFwiQWRkVG9EYWlseUpvYlwiXHJcbiAgICAgIHRoaXMuYWRkRGFpbHlKb2IuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hZGREYWlseUpvYi5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIC8vc2V0IEFEIG1hcHBpbmdcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IHRoaXMuZ2V0QURNYXBwaW5nT3B0aW9ucyhyZXVsdE9iai5hZE1hcHBpbmdzKTtcclxuICAgICAgdGhpcy5hZGRNYXBwaW5nc09wdGlvbnMgPSBkYXRhWzBdO1xyXG4gICAgICB0aGlzLmFkZE1hcHBpbmdzQ291bnQgPSBkYXRhWzFdO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0FkZEZvcm1Mb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9LCA1MCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL0FkZCBBY3RpdmUgZGlyZWN0b3J5IGZ1bmN0aW9uc1xyXG4gIGdldEFkZEFETW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS52YWx1ZTtcclxuICAgIC8vY29uc29sZS5sb2coUmVzdWx0TW9kZWwpO1xyXG4gICAgbGV0IEFkZE1vZGVsOiBBY3RpdmVEaXJlY3RvcnlBZGRFZGl0TW9kZWwgPSBuZXcgQWN0aXZlRGlyZWN0b3J5QWRkRWRpdE1vZGVsKCk7XHJcbiAgICBBZGRNb2RlbC5Db25uZWN0aW9uTmFtZSA9IFJlc3VsdE1vZGVsLmFkZE5hbWU7XHJcbiAgICBBZGRNb2RlbC5BRFR5cGVJdGVtSUQgPSBSZXN1bHRNb2RlbC5hZGRUeXBlT3B0aW9ucyAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLmFkZFR5cGVPcHRpb25zKSA6IG51bGxcclxuICAgIEFkZE1vZGVsLlBlcm1pc3Npb25TZXRJRCA9IFJlc3VsdE1vZGVsLmFkZFBlcm1pc3Npb25TZXQgIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5hZGRQZXJtaXNzaW9uU2V0KSA6IG51bGxcclxuICAgIEFkZE1vZGVsLkxhbmdLZXkgPSBSZXN1bHRNb2RlbC5hZGRMYW5ndWFnZTtcclxuICAgIEFkZE1vZGVsLldlbGNvbWVUZW1wbGF0ZUlEID0gUmVzdWx0TW9kZWwuYWRkV2VsY29tZU1zZ1RlbXAgIT0gbnVsbCA/IE51bWJlcihSZXN1bHRNb2RlbC5hZGRXZWxjb21lTXNnVGVtcCkgOiBudWxsXHJcbiAgICBBZGRNb2RlbC5JbWFnZXNGaWxlUHJvdmlkZXJOYW1lID0gUmVzdWx0TW9kZWwuYWRkRmlsZVByb3ZpZGVyXHJcbiAgICBBZGRNb2RlbC5NYXJrQXNJbmFjdGl2ZSA9IFJlc3VsdE1vZGVsLmFkZE1hcmtJbmFjdGl2ZVxyXG4gICAgQWRkTW9kZWwuQWRkVG9EYWlseUpvYiA9IFJlc3VsdE1vZGVsLmFkZERhaWx5Sm9iXHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09IE51bWJlcihBRFR5cGUuV2luZG93cykpIHtcclxuICAgICAgQWRkTW9kZWwuSWRlbnRpZmllciA9IHRoaXMuaWRlbnRpZmllcjtcclxuICAgICAgQWRkTW9kZWwuRG9tYWluID0gUmVzdWx0TW9kZWwuYWRkRG9tYWluO1xyXG4gICAgICBBZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuYWRkU2FtQWNjb3VudDtcclxuICAgICAgQWRkTW9kZWwuUGFzc3dvcmQgPSBSZXN1bHRNb2RlbC5hZGRQYXNzd29yZDtcclxuICAgICAgQWRkTW9kZWwuU2hvd0J1aWx0SW5Hcm91cHMgPSBSZXN1bHRNb2RlbC5hZGRTaG93QnVpbHRJbkdyb3VwcztcclxuICAgICAgQWRkTW9kZWwuQURXaW5kb3dzVHlwZUl0ZW1JRCA9IFJlc3VsdE1vZGVsLmFkZFdpbmRvd3NUeXBlT3B0aW9ucyAhPSBudWxsID8gTnVtYmVyKFJlc3VsdE1vZGVsLmFkZFdpbmRvd3NUeXBlT3B0aW9ucykgOiBudWxsXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgQWRkTW9kZWwuVGVuYW50SUQgPSBSZXN1bHRNb2RlbC5hZGRUZW5hbnRJRDtcclxuICAgICAgQWRkTW9kZWwuQ2xpZW50SUQgPSBSZXN1bHRNb2RlbC5hZGRDbGllbnRJRDtcclxuICAgICAgQWRkTW9kZWwuQ2xpZW50U2VjcmV0ID0gUmVzdWx0TW9kZWwuYWRkQ2xpZW50U2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmFkZE1hcHBpbmdzQ291bnQ7IGorKykge1xyXG4gICAgICBsZXQgYWRkTUFwcGluZ1R5cGUgPSBSZXN1bHRNb2RlbFtcIkFETWFwcGluZ1R5cGVcIiArIGpdO1xyXG4gICAgICBpZiAoYWRkTUFwcGluZ1R5cGUgPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBsZXQgZWRpdE1BcHBpbmdQcm9wZXJ0eSA9IFJlc3VsdE1vZGVsW1wiQURNYXBwaW5nUHJvcGVydHlcIiArIGpdO1xyXG4gICAgICBsZXQgZWRpdE1BcHBpbmdQcm9wZXJ0eU5hbWUgPSBSZXN1bHRNb2RlbFtcIkFETWFwcGluZ1Byb3BlcnR5TmFtZVwiICsgal07XHJcblxyXG4gICAgICBsZXQgYWRNQXBwaW5nT2JqOiBBRE1hcHBpbmdNb2RlbCA9IG5ldyBBRE1hcHBpbmdNb2RlbCgpO1xyXG4gICAgICBhZE1BcHBpbmdPYmouQURNYXBwaW5nVHlwZUl0ZW1JRCA9IE51bWJlcihhZGRNQXBwaW5nVHlwZSk7XHJcbiAgICAgIGFkTUFwcGluZ09iai5CQlNGUHJvcGVydHlOYW1lID0gZWRpdE1BcHBpbmdQcm9wZXJ0eTtcclxuICAgICAgYWRNQXBwaW5nT2JqLkFEUHJvcGVydHlOYW1lID0gZWRpdE1BcHBpbmdQcm9wZXJ0eU5hbWU7XHJcbiAgICAgIEFkZE1vZGVsLkFETWFwcGluZ3MucHVzaChhZE1BcHBpbmdPYmopO1xyXG4gICAgfVxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEFkZE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuICBnZXRBZGRBREZ1bmN0aW9uID0gKGFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuYWRkQWN0aXZlRGlyZWN0b3J5KGFkZE1vZGVsKVxyXG4gIH1cclxuICBhZGRBRE9uU3VjY2VzcyA9IChyZXN1bHQpID0+IHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL0FkbWluL0FEQ29ubmVjdGlvbiddKTtcclxuICB9XHJcblxyXG4gIC8vTWFwcGluZyBmdW5jdGlvbnNcclxuICBnZXRBRE1hcHBpbmdPcHRpb25zKEFETWFwcGluZ3M6IGFueVtdKSB7XHJcbiAgICBsZXQgQURNYXBwaW5nT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBBRE1hcHBpbmdDb3VudDogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQURNYXBwaW5ncy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgbGV0IG9iamVjdE1hcHBpbmdPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IEFETWFwcGluZ1R5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIGxldCBzZWxlY3RlZFR5cGUgPSB0aGlzLm1hcHBpbmdUeXBlc0xpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLmtleSA9PSBBRE1hcHBpbmdzW2ldLmFkTWFwcGluZ1R5cGVJdGVtSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdO1xyXG4gICAgICBBRE1hcHBpbmdUeXBlLk5hbWUgPSBcIkFETWFwcGluZ1R5cGVcIiArIGk7XHJcbiAgICAgIEFETWFwcGluZ1R5cGUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgQURNYXBwaW5nVHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICBBRE1hcHBpbmdUeXBlLlNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFR5cGU7XHJcbiAgICAgIEFETWFwcGluZ1R5cGUuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgIEFETWFwcGluZ1R5cGUuRGF0YVNvdXJjZSA9IHRoaXMubWFwcGluZ1R5cGVzTGlzdDtcclxuICAgICAgQURNYXBwaW5nVHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGxldCBBRE1hcHBpbmdQcm9wZXJ0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgbGV0IHNlbGVjdGVkUHJvcGVydHkgPSB0aGlzLm1hcHBpbmdQcm9wZXJ0aWVzTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5ID09IEFETWFwcGluZ3NbaV0uYmJzZlByb3BlcnR5TmFtZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSlbMF07XHJcbiAgICAgIEFETWFwcGluZ1Byb3BlcnR5Lk5hbWUgPSBcIkFETWFwcGluZ1Byb3BlcnR5XCIgKyBpO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eS5TZWxlY3RlZEl0ZW1zID0gc2VsZWN0ZWRQcm9wZXJ0eTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHkuVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgIEFETWFwcGluZ1Byb3BlcnR5LkRhdGFTb3VyY2UgPSB0aGlzLm1hcHBpbmdQcm9wZXJ0aWVzTGlzdDtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgbGV0IEFETWFwcGluZ1Byb3BlcnR5TmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eU5hbWUuTmFtZSA9IFwiQURNYXBwaW5nUHJvcGVydHlOYW1lXCIgKyBpO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eU5hbWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLlZhbHVlID0gQURNYXBwaW5nc1tpXS5hZFByb3BlcnR5TmFtZTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLklzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgQURNYXBwaW5nUHJvcGVydHlOYW1lLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsO1xyXG4gICAgICBBRE1hcHBpbmdQcm9wZXJ0eU5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICBsZXQgQURNYXBwaW5nSW5jbHVkZVVwZGF0ZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgQURNYXBwaW5nSW5jbHVkZVVwZGF0ZS5OYW1lID0gXCJBRE1hcHBpbmdJbmNsdWRlVXBkYXRlXCIgKyBpO1xyXG4gICAgICBBRE1hcHBpbmdJbmNsdWRlVXBkYXRlLlZhbHVlID0gQURNYXBwaW5nc1tpXS5pbmNsdWRlSW5VcGRhdGU7XHJcbiAgICAgIEFETWFwcGluZ0luY2x1ZGVVcGRhdGUuSXNEaXNhYmxlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgb2JqZWN0TWFwcGluZ09wdGlvbnMucHVzaChBRE1hcHBpbmdUeXBlLCBBRE1hcHBpbmdQcm9wZXJ0eSwgQURNYXBwaW5nUHJvcGVydHlOYW1lLCBBRE1hcHBpbmdJbmNsdWRlVXBkYXRlKTtcclxuICAgICAgQURNYXBwaW5nT3B0aW9ucy5wdXNoKG9iamVjdE1hcHBpbmdPcHRpb25zKTtcclxuICAgICAgQURNYXBwaW5nQ291bnQgKz0gMTtcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gW0FETWFwcGluZ09wdGlvbnMsIEFETWFwcGluZ0NvdW50XTtcclxuICB9XHJcbiAgZGVsZXRlQURNYXBwaW5nKGRlbGV0ZWRBRE1BcHBpbmc6IGFueSkge1xyXG4gICAgbGV0IGRlbGV0ZWRNYXBwaW5nSW5kZXg6IG51bWJlciA9IHRoaXMuYWRkTWFwcGluZ3NPcHRpb25zLmluZGV4T2YoZGVsZXRlZEFETUFwcGluZyk7XHJcbiAgICBpZiAoZGVsZXRlZE1hcHBpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5hZGRNYXBwaW5nc09wdGlvbnMuc3BsaWNlKGRlbGV0ZWRNYXBwaW5nSW5kZXgsIDEpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRBRE1BcHBpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkQURNQXBwaW5nW2ldLk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0FEIHdpbmRvd3Mgb24gdHlwZSBjaGFuZ2UgKE9VL0dyb3VwKVxyXG4gIHdpbmRvd3NUeXBlQ2hhbmdlKHR5cGVWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVWYWx1ZSA9PSBOdW1iZXIoQURXaW5kb3dzVHlwZS5Hcm91cCkpIHtcclxuICAgICAgdGhpcy5hZGRTaG93QnVpbHRJbkdyb3VwcyA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRTaG93QnVpbHRJbkdyb3Vwcy5OYW1lID0gXCJhZGRTaG93QnVpbHRJbkdyb3Vwc1wiXHJcbiAgICAgIHRoaXMuYWRkU2hvd0J1aWx0SW5Hcm91cHMuTGFiZWxWYWx1ZSA9IFwiU2hvd0J1aWx0SW5Hcm91cHNcIlxyXG4gICAgICB0aGlzLmFkZFNob3dCdWlsdEluR3JvdXBzLkxhYmVsS2V5ID0gXCJTaG93QnVpbHRJbkdyb3Vwc1wiXHJcbiAgICAgIHRoaXMuYWRkU2hvd0J1aWx0SW5Hcm91cHMuVmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hZGRTaG93QnVpbHRJbkdyb3Vwcy5WaWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIHRoaXMuYWRkU2hvd0J1aWx0SW5Hcm91cHNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm0ucmVtb3ZlQ29udHJvbChcImFkZFNob3dCdWlsdEluR3JvdXBzXCIpO1xyXG4gICAgICB0aGlzLmFkZFNob3dCdWlsdEluR3JvdXBzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9BRCBvbiB0eXBlIGNoYW5nZXMgKFdpbmRvd3MvQXp1cmUpXHJcbiAgdHlwZUNoYW5nZSh0eXBlVmFsdWUpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gdHlwZVZhbHVlO1xyXG4gICAgaWYgKHR5cGVWYWx1ZSA9PSBOdW1iZXIoQURUeXBlLldpbmRvd3MpKSB7XHJcbiAgICAgIHRoaXMuZm9ybXNDb3VudCA9IDM7XHJcbiAgICAgIC8vUmVtb3ZlIEF6dXJlIGNvbnRyb2xzIGlmIGZvdW5kXHJcbiAgICAgIHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS5yZW1vdmVDb250cm9sKFwiYWRkVGVuYW50SURcIik7XHJcbiAgICAgIHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS5yZW1vdmVDb250cm9sKFwiYWRkQ2xpZW50SURcIik7XHJcbiAgICAgIHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS5yZW1vdmVDb250cm9sKFwiYWRkQ2xpZW50U2VjcmV0XCIpO1xyXG5cclxuICAgICAgLy9Jbml0aWFsaXplIHdpbmRvd3MgY29udHJvbHNcclxuICAgICAgdGhpcy5hZGRXaW5kb3dzVHlwZU9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuYWRkV2luZG93c1R5cGVPcHRpb25zLk5hbWUgPSBcImFkZFdpbmRvd3NUeXBlT3B0aW9uc1wiXHJcbiAgICAgIHRoaXMuYWRkV2luZG93c1R5cGVPcHRpb25zLkxhYmVsS2V5ID0gXCJXaW5kb3dzVHlwZVwiXHJcbiAgICAgIHRoaXMuYWRkV2luZG93c1R5cGVPcHRpb25zLlZpZXdUeXBlID0gQ29udHJvbExheW91dC5Ib3Jpem9udGFsXHJcbiAgICAgIHRoaXMuYWRkV2luZG93c1R5cGVPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLmFkV2luZG93c1R5cGVzXHJcbiAgICAgIHRoaXMuYWRkV2luZG93c1R5cGVPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuYWRkV2luZG93c1R5cGVPcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hZGRXaW5kb3dzVHlwZU9wdGlvbnMuUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLmFkZFdpbmRvd3NUeXBlT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuYWRkRG9tYWluID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuYWRkRG9tYWluLk5hbWUgPSBcImFkZERvbWFpblwiO1xyXG4gICAgICB0aGlzLmFkZERvbWFpbi5MYWJlbEtleSA9IFwiRG9tYWluXCI7XHJcbiAgICAgIHRoaXMuYWRkRG9tYWluLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5hZGREb21haW4uVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLmFkZERvbWFpbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuYWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZFNhbUFjY291bnQuTmFtZSA9IFwiYWRkU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLmFkZFNhbUFjY291bnQuTGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5hZGRTYW1BY2NvdW50LlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5hZGRTYW1BY2NvdW50LlZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMuYWRkUGFzc3dvcmQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5hZGRQYXNzd29yZC5OYW1lID0gXCJhZGRQYXNzd29yZFwiO1xyXG4gICAgICB0aGlzLmFkZFBhc3N3b3JkLkxhYmVsS2V5ID0gXCJQYXNzd29yZFwiO1xyXG4gICAgICB0aGlzLmFkZFBhc3N3b3JkLlR5cGUgPSBJbnB1dFR5cGUuUGFzc3dvcmQ7XHJcbiAgICAgIHRoaXMuYWRkUGFzc3dvcmQuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLmFkZFBhc3N3b3JkLlJlbW92ZURlZmF1bHRQYXNzd29yZFZhbGlkYXRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5zaG93QXp1cmVDb250cm9scyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dXaW5kb3dzQ29udHJvbHMgPSB0cnVlO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybXNDb3VudCA9IDI7XHJcbiAgICAgIC8vUmVtb3ZlIHdpbmRvd3MgY29udHJvbHMgaWYgZm91bmRcclxuICAgICAgdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnJlbW92ZUNvbnRyb2woXCJhZGREb21haW5cIik7XHJcbiAgICAgIHRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS5yZW1vdmVDb250cm9sKFwiYWRkU2FtQWNjb3VudFwiKTtcclxuICAgICAgdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnJlbW92ZUNvbnRyb2woXCJhZGRQYXNzd29yZFwiKTtcclxuICAgICAgdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnJlbW92ZUNvbnRyb2woXCJhZGRTaG93QnVpbHRJbkdyb3Vwc1wiKTtcclxuICAgICAgdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnJlbW92ZUNvbnRyb2woXCJhZGRXaW5kb3dzVHlwZU9wdGlvbnNcIik7XHJcblxyXG4gICAgICB0aGlzLmFkZFRlbmFudElEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuYWRkVGVuYW50SUQuTmFtZSA9IFwiYWRkVGVuYW50SURcIjtcclxuICAgICAgdGhpcy5hZGRUZW5hbnRJRC5MYWJlbEtleSA9IFwiVGVuYW50SURcIjtcclxuICAgICAgdGhpcy5hZGRUZW5hbnRJRC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuYWRkVGVuYW50SUQuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLmFkZFRlbmFudElELklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5hZGRDbGllbnRJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZENsaWVudElELk5hbWUgPSBcImFkZENsaWVudElEXCI7XHJcbiAgICAgIHRoaXMuYWRkQ2xpZW50SUQuTGFiZWxLZXkgPSBcIkNsaWVudElEXCI7XHJcbiAgICAgIHRoaXMuYWRkQ2xpZW50SUQuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLmFkZENsaWVudElELlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5hZGRDbGllbnRJRC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuYWRkQ2xpZW50U2VjcmV0ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuYWRkQ2xpZW50U2VjcmV0Lk5hbWUgPSBcImFkZENsaWVudFNlY3JldFwiO1xyXG4gICAgICB0aGlzLmFkZENsaWVudFNlY3JldC5MYWJlbEtleSA9IFwiQ2xpZW50U2VjcmV0XCI7XHJcbiAgICAgIHRoaXMuYWRkQ2xpZW50U2VjcmV0LlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5hZGRDbGllbnRTZWNyZXQuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLmFkZENsaWVudFNlY3JldC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuc2hvd0F6dXJlQ29udHJvbHMgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dXaW5kb3dzQ29udHJvbHMgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vV2l6YXJkIGZ1bmN0aW9uc1xyXG4gIG5leHRTdGVwKCkge1xyXG4gICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwJC52YWx1ZTtcclxuICAgIGNvbnN0IG5leHRTdGVwID0gY3VycmVudFN0ZXAgKyAxO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5hZGRBY3RpdmVEaXJlY3RvcnlGb3JtLnZhbHVlO1xyXG5cclxuICAgIC8vQ2hlY2sgcmVxdWlyZWQgZmllbGRzIGZvciBuZXh0IHN0ZXBcclxuICAgIGlmIChjdXJyZW50U3RlcCA9PSAxKSB7XHJcbiAgICAgIGlmIChSZXN1bHRNb2RlbC5hZGRUeXBlT3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVHlwZSA9PSBOdW1iZXIoQURUeXBlLldpbmRvd3MpKSB7XHJcbiAgICAgICAgICBpZiAoIVJlc3VsdE1vZGVsLmFkZERvbWFpbiB8fCAhUmVzdWx0TW9kZWwuYWRkV2luZG93c1R5cGVPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWREb21haW5Db250cm9sLklzVmFsaWQoKTtcclxuICAgICAgICAgICAgdGhpcy5hZFdpbmRvd3NUeXBlQ29udHJvbC5Jc1ZhbGlkKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIVJlc3VsdE1vZGVsLmFkZFRlbmFudElEIHx8ICFSZXN1bHRNb2RlbC5hZGRDbGllbnRJRCB8fCAhUmVzdWx0TW9kZWwuYWRkQ2xpZW50U2VjcmV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVuYW50SURDb250cm9sLklzVmFsaWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJRENvbnRyb2wuSXNWYWxpZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNsaWVudFNlY3JldENvbnRyb2wuSXNWYWxpZCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWRUeXBlQ29udHJvbC5Jc1ZhbGlkKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUeXBlID09IE51bWJlcihBRFR5cGUuV2luZG93cykpIHtcclxuXHJcbiAgICAgIGlmIChuZXh0U3RlcCA9PT0gMiAmJiBjdXJyZW50U3RlcCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMudHJlZURhdGFMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy9pZiAoIXRoaXMuYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybS5nZXQoJ2FkZERvbWFpbicpLnZhbGlkIHx8ICF0aGlzLmFkZEFjdGl2ZURpcmVjdG9yeUZvcm0uZ2V0KCdhZGRUeXBlT3B0aW9ucycpLnZhbGlkKSB7XHJcbiAgICAgICAgLy8gIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhSZXN1bHRNb2RlbCk7XHJcblxyXG4gICAgICAgIGxldCBBZGRNb2RlbDogQWN0aXZlRGlyZWN0b3J5QWRkRWRpdE1vZGVsID0gbmV3IEFjdGl2ZURpcmVjdG9yeUFkZEVkaXRNb2RlbCgpO1xyXG4gICAgICAgIEFkZE1vZGVsLkNvbm5lY3Rpb25OYW1lID0gUmVzdWx0TW9kZWwuYWRkTmFtZTtcclxuICAgICAgICBBZGRNb2RlbC5Eb21haW4gPSBSZXN1bHRNb2RlbC5hZGREb21haW47XHJcbiAgICAgICAgbGV0IEFEVHlwZXMgPSBSZXN1bHRNb2RlbC5hZGRXaW5kb3dzVHlwZU9wdGlvbnM7XHJcbiAgICAgICAgbGV0IHR5cGVJdGVtSUQ6IG51bWJlcjtcclxuICAgICAgICB0eXBlSXRlbUlEID0gTnVtYmVyKEFEVHlwZXMpO1xyXG4gICAgICAgIEFkZE1vZGVsLkFEV2luZG93c1R5cGVJdGVtSUQgPSBBRFR5cGVzICE9IG51bGwgPyB0eXBlSXRlbUlEIDogbnVsbDtcclxuICAgICAgICBBZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuYWRkU2FtQWNjb3VudDtcclxuICAgICAgICBBZGRNb2RlbC5QYXNzd29yZCA9IFJlc3VsdE1vZGVsLmFkZFBhc3N3b3JkO1xyXG4gICAgICAgIEFkZE1vZGVsLlNob3dCdWlsdEluR3JvdXBzID0gUmVzdWx0TW9kZWwuYWRkU2hvd0J1aWx0SW5Hcm91cHM7XHJcblxyXG5cclxuICAgICAgICB0aGlzLkFjdGl2ZURpcmVjdG9yeVNlcnZpY2UuY2hlY2tWYWxpZGF0aW9uYW5kR2V0RGF0YShBZGRNb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIHRoaXMsIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgICAgICAgIHZhciBkYXRhID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLnZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVOb2RlRGF0YSA9IGRhdGEudHJlZURhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JJc0ZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICBsZXQgX3RyYW5zZm9ybWVyID0gKG5vZGU6IEFETm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiAhIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogbm9kZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsLFxyXG4gICAgICAgICAgICAgICAgaWNvbjogbm9kZS5pY29uLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogbm9kZS5zZWxlY3RhYmxlLFxyXG4gICAgICAgICAgICAgICAgSW5kZXg6IG5vZGUuSW5kZXgsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBub2RlLmRhdGFcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxGbGF0Tm9kZT4oXHJcbiAgICAgICAgICAgICAgbm9kZSA9PiBub2RlLmxldmVsLCBub2RlID0+IG5vZGUuZXhwYW5kYWJsZSk7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgICAgICAgICAgIF90cmFuc2Zvcm1lciwgbm9kZSA9PiBub2RlLmxldmVsLCBub2RlID0+IG5vZGUuZXhwYW5kYWJsZSwgbm9kZSA9PiBub2RlLmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xyXG4gICAgICAgICAgICBsZXQganNvbkRhdGEgPSBKU09OLnBhcnNlKHRoaXMudHJlZU5vZGVEYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBqc29uRGF0YTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBGbGF0Tm9kZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAkLm5leHQobmV4dFN0ZXApO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvciA9IGRhdGEuZXJyb3I7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JJc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICAgICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLm5vdGlmeUVycm9yTWVzc2FnZSgpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9mb3Jtc1xyXG4gICAgICAgIC8vIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9mb3JtLXZhbGlkYXRpb25cclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgdGhlIGZvcm0gYW5kIHVzZSBiZWxvdyBmdW5jdGlvbiB0byBzdG9wIHRoZSB3aXphcmQncyBzdGVwXHJcbiAgICAgICAgLy8gd2l6YXJkT2JqLnN0b3AoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5pZGVudGlmaWVyID09IFwiXCIgfHwgdGhpcy5pZGVudGlmaWVyID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5ub3RpZnlXYXJuaW5nTWVzc2FnZSh0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWQUxfQXRMZWFzdE9uZUlzUmVxdWlyZWRcIikpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWRkTmFtZS5WYWx1ZSA9IHRoaXMuaWRlbnRpZmllck5hbWUgKyBcIiBjb25uZWN0aW9uXCI7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwJC5uZXh0KG5leHRTdGVwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRTdGVwJC5uZXh0KG5leHRTdGVwKTtcclxuICAgIH1cclxuICB9O1xyXG4gIHByZXZTdGVwKCkge1xyXG4gICAgbGV0IGN1cnJlbnRTdGVwID0gdGhpcy5jdXJyZW50U3RlcCQudmFsdWU7XHJcbiAgICBsZXQgcHJldlN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwJC52YWx1ZSAtIDE7XHJcbiAgICBpZiAocHJldlN0ZXAgPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50U3RlcCQubmV4dChwcmV2U3RlcCk7XHJcbiAgfVxyXG5cclxuICBzZXRJZGVudGlmaWVyKG9iajogTWF0Q2hlY2tib3hDaGFuZ2UsIHNlbGVjdGVkTm9kZTogQUROb2RlKSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZE5vZGUuSW5kZXg7XHJcbiAgICBpZiAob2JqLmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5pZGVudGlmaWVyID0gc2VsZWN0ZWROb2RlLmRhdGE7XHJcbiAgICAgIHRoaXMuaWRlbnRpZmllck5hbWUgPSBzZWxlY3RlZE5vZGUudGV4dDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlkZW50aWZpZXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLmlkZW50aWZpZXJOYW1lID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxufVxyXG5cclxuIiwiXHJcblxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cInN0ZXBwZXIgc3RlcHBlci1waWxscyBzdGVwcGVyLWNvbHVtbiBkLWZsZXggZmxleC1jb2x1bW4gZmxleC14bC1yb3cgZmxleC1yb3ctZmx1aWQgXCIgaWQ9XCJrdF9jcmVhdGVfYWNjb3VudF9zdGVwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcm91bmRlZCBqdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnQgZmxleC1yb3ctYXV0byBtZS05IGNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweC02IHB4LWxnLTEwIHB4LXh4bC0xNSBweS0yMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLW5hdlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaXRlbVwiIFtuZ0NsYXNzXT1cIntjdXJyZW50OiBjdXJyZW50U3RlcCQudmFsdWUgPT09IDEgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1saW5lIHctNDBweFwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItaWNvbiB3LTQwcHggaC00MHB4XCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJzdGVwcGVyLWNoZWNrIGZhcyBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXBwZXItbnVtYmVyXCI+MTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cInN0ZXBwZXItdGl0bGVcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmVEaXJlY3RvcnlcIil9fTwvaDM+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWRlc2MgZnctYm9sZFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2ZURpcmVjdG9yeV9UYWIxTm90ZVwiKX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dXaW5kb3dzQ29udHJvbHNcIiBjbGFzcz1cInN0ZXBwZXItaXRlbVwiIFtuZ0NsYXNzXT1cIntjdXJyZW50OiBjdXJyZW50U3RlcCQudmFsdWUgPT09IDIgJiYgc2hvd1dpbmRvd3NDb250cm9sc31cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGluZSB3LTQwcHhcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWljb24gdy00MHB4IGgtNDBweFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwic3RlcHBlci1jaGVjayBmYXMgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwcGVyLW51bWJlclwiPjI8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGFiZWxcIj5cclxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJzdGVwcGVyLXRpdGxlXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZlRGlyZWN0b3J5X1NlbGVjdENvbnRhaW5lclwiKX19PC9oMz5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcHBlci1kZXNjIGZ3LWJvbGRcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmVEaXJlY3RvcnlfVGFiMk5vdGVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWl0ZW1cIiBbbmdDbGFzc109XCJ7Y3VycmVudDogKGN1cnJlbnRTdGVwJC52YWx1ZSA9PT0gZm9ybXNDb3VudCApIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItbGluZSB3LTQwcHhcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWljb24gdy00MHB4IGgtNDBweFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwic3RlcHBlci1jaGVjayBmYXMgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwcGVyLW51bWJlclwiPnt7Zm9ybXNDb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVyLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwic3RlcHBlci10aXRsZVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk9wdGlvbnNcIil9fTwvaDM+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ZXBwZXItZGVzYyBmdy1ib2xkXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZlRGlyZWN0b3J5X1RhYjNOb3RlXCIpfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGQtZmxleCBmbGV4LXJvdy1mbHVpZCBmbGV4LWNlbnRlciByb3VuZGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIwIHctMTAwIGNhcmQtYm9keVwiICpuZ0lmPVwiaXNBZGRGb3JtTG9hZGVkXCI+XHJcbiAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJhZGRBY3RpdmVEaXJlY3RvcnlGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnJlbnRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2FkVHlwZUNvbnRyb2wgW29wdGlvbnNdPVwiYWRkVHlwZU9wdGlvbnNcIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiIChPbkNoYW5nZSk9XCJ0eXBlQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dXaW5kb3dzQ29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjYWRXaW5kb3dzVHlwZUNvbnRyb2wgW29wdGlvbnNdPVwiYWRkV2luZG93c1R5cGVPcHRpb25zXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIiAoT25DaGFuZ2UpPVwid2luZG93c1R5cGVDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94ICNhZERvbWFpbkNvbnRyb2wgW29wdGlvbnNdPVwiYWRkRG9tYWluXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlcnJvcklzRm91bmRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+e3t2YWxpZGF0aW9uRXJyb3J9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImFkZFNhbUFjY291bnRcIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJhZGRQYXNzd29yZFwiIFtncm91cF09XCJhZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiICpuZ0lmPVwiYWRkU2hvd0J1aWx0SW5Hcm91cHNWaXNpYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cImFkZFNob3dCdWlsdEluR3JvdXBzXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBenVyZUNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94ICN0ZW5hbnRJRENvbnRyb2wgW29wdGlvbnNdPVwiYWRkVGVuYW50SURcIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCAjY2xpZW50SURDb250cm9sIFtvcHRpb25zXT1cImFkZENsaWVudElEXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggI2NsaWVudFNlY3JldENvbnRyb2wgW29wdGlvbnNdPVwiYWRkQ2xpZW50U2VjcmV0XCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCQudmFsdWUgPT09IDIgJiYgc2hvd1dpbmRvd3NDb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0cmVlRGF0YUNvbnRhaW5lclwiICpuZ0lmPVwidHJlZURhdGFMb2FkZWRcIj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLUhlbGxsbGxsbGxsbGxsbGxsbGxsbG8tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlO1wiIG1hdFRyZWVOb2RlUGFkZGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIHVzZSBhIGRpc2FibGVkIGJ1dHRvbiB0byBwcm92aWRlIHBhZGRpbmcgZm9yIHRyZWUgbGVhZiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImNoZWNrbGlzdC1sZWFmLW5vZGVcIiBbY2hlY2tlZF09XCJzZWxlY3RlZCA9PT0gbm9kZS5JbmRleFwiIChjaGFuZ2UpPVwic2V0SWRlbnRpZmllcigkZXZlbnQsbm9kZSlcIiBbZGlzYWJsZWRdPVwibm9kZS5zZWxlY3RhYmxlP2ZhbHNlOnRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7bm9kZS5uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7d2hlbjogaGFzQ2hpbGRcIiBtYXRUcmVlTm9kZVBhZGRpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGUgJyArIG5vZGUubmFtZVwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1iZy1saWdodCBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnkgYnRuLXNtIG1lLTEgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcIiBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiF0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpXCIgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1yaWdodFwiPjwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwibm9kZS5zZWxlY3RhYmxlP2ZhbHNlOnRydWVcIj57e25vZGUubmFtZX19PC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC10cmVlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCQudmFsdWUgPT09IGZvcm1zQ291bnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJhZGROYW1lXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiYWRkUGVybWlzc2lvblNldFwiIFtncm91cF09XCJhZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiYWRkTGFuZ3VhZ2VcIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImFkZFdlbGNvbWVNc2dUZW1wXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJhZGRGaWxlUHJvdmlkZXJcIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiYWRkTWFya0luYWN0aXZlXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiYWRkRGFpbHlKb2JcIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVHlwZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHJvcGVydHlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFEUHJvcGVydHlcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkluY2x1ZGVJblVwZGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFkZE1hcHBpbmdzT3B0aW9ucztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJhZGRBY3RpdmVEaXJlY3RvcnlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cImFkZEFjdGl2ZURpcmVjdG9yeUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bM11cIiBbZ3JvdXBdPVwiYWRkQWN0aXZlRGlyZWN0b3J5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LWRhbmdlclwiIChjbGljayk9XCJkZWxldGVBRE1hcHBpbmcob3B0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBwdC0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItMlwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCQudmFsdWUgIT09IDFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZTdGVwKClcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjMuc3ZnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tNCBtZS0xXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcmV2aW91c1wiKX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCQudmFsdWUgIT09IGZvcm1zQ291bnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxnIGJ0bi1wcmltYXJ5IG1lLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFN0ZXAoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZGljYXRvci1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCQudmFsdWUgPCBmb3Jtc0NvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOZXh0XCIpfX0ge3sgXCIgXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDY0LnN2ZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0zIG1zLTIgbWUtMFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwJC52YWx1ZSA9PT0gZm9ybXNDb3VudFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tcHJpbWFyeSBtZS0zXCI+XHJcbiAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdWJtaXRcIil9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L0JCU0YtRm9ybT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbjwvZGl2PlxyXG4iXX0=
|