@bnsights/bbsf-admin-portal 1.0.0 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bnsights-bbsf-admin-portal-1.0.5.tgz +0 -0
- package/bundles/bnsights-bbsf-admin-portal.umd.js +19694 -20386
- package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
- package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
- package/esm2015/lib/Pages/account/account-routing.module.js +3 -1
- package/esm2015/lib/Pages/account/account.component.js +15 -6
- package/esm2015/lib/Pages/account/account.module.js +16 -8
- package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +48 -0
- package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +392 -387
- package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
- package/esm2015/lib/Pages/departments/department/department.component.js +59 -98
- package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
- package/esm2015/lib/Pages/departments/departments.module.js +4 -1
- package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
- package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
- package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
- package/esm2015/lib/Pages/home/home.component.js +32 -26
- package/esm2015/lib/Pages/home/home.module.js +5 -10
- package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
- package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
- package/esm2015/lib/Pages/license/license/license.component.js +68 -99
- package/esm2015/lib/Pages/localizations/localizations.component.js +378 -341
- package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
- package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
- package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
- package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
- package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
- package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
- package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
- package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
- package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
- package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
- package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
- package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
- package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
- package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
- package/esm2015/lib/Pages/providers/provider/provider.component.js +54 -52
- package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
- package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
- package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
- package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +219 -254
- package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
- package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
- package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
- package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
- package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
- package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
- package/esm2015/lib/Pages/shared/Services/AccountService.service.js +21 -0
- package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
- package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +5 -8
- package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
- package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
- package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
- package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
- package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
- package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
- package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
- package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
- package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
- package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
- package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
- package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
- package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
- package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
- package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
- package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
- package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
- package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
- package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
- package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
- package/esm2015/lib/Pages/users/users.component.js +398 -409
- package/esm2015/lib/masterlayout-routing.module.js +5 -4
- package/esm2015/lib/masterlayout.component.js +22 -32
- package/esm2015/lib/masterlayout.module.js +25 -19
- package/fesm2015/bnsights-bbsf-admin-portal.js +17295 -17401
- package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
- package/lib/Pages/account/account.component.d.ts +5 -1
- package/lib/Pages/account/account.module.d.ts +8 -6
- package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +20 -0
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +39 -31
- package/lib/Pages/departments/department/department.component.d.ts +19 -15
- package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
- package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
- package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
- package/lib/Pages/home/home.component.d.ts +4 -4
- package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
- package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
- package/lib/Pages/license/license/license.component.d.ts +25 -23
- package/lib/Pages/localizations/localizations.component.d.ts +77 -65
- package/lib/Pages/logs/log/log.component.d.ts +7 -11
- package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
- package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
- package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
- package/lib/Pages/notifications/add/add.component.d.ts +13 -11
- package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
- package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
- package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
- package/lib/Pages/notifications/notifications.module.d.ts +15 -16
- package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
- package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
- package/lib/Pages/providers/provider/provider.component.d.ts +13 -12
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
- package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
- package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
- package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
- package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
- package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
- package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
- package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
- package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
- package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
- package/lib/Pages/shared/Services/AccountService.service.d.ts +10 -0
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
- package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
- package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
- package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +2 -2
- package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
- package/lib/Pages/shared/Services/provider.service.d.ts +1 -1
- package/lib/Pages/shared/Services/userService.service.d.ts +2 -0
- package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
- package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
- package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
- package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
- package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
- package/lib/Pages/users/users.component.d.ts +54 -68
- package/lib/masterlayout.component.d.ts +4 -5
- package/lib/masterlayout.module.d.ts +8 -9
- package/package.json +5 -3
- package/src/lib/assets/sass/core/components/_variables.scss +1 -1
- package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
- package/src/lib/assets/sass/custom-styles.scss +153 -0
- package/src/lib/assets/sass/style-rtl.scss +2 -0
- package/src/lib/assets/sass/style.scss +2 -2
- package/bnsights-bbsf-admin-portal-0.0.1.tgz +0 -0
- package/bnsights-bbsf-admin-portal-1.0.0.tgz +0 -0
- package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
- package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
|
@@ -1,270 +1,234 @@
|
|
|
1
|
-
import { __awaiter, __decorate } from "tslib";
|
|
2
1
|
import { Component, ViewChild } from '@angular/core';
|
|
3
2
|
import { FormGroup } from '@angular/forms';
|
|
4
|
-
import { DropdownOptions, EnglishArabicDTO, FilterItem, FilterType, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
|
|
5
|
-
import { BlockUI } from 'ng-block-ui';
|
|
3
|
+
import { ConfirmationModalOptions, DropdownOptions, EnglishArabicDTO, FilterItem, FilterType, FormOptions, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
|
|
6
4
|
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
7
5
|
import { PermissionModel } from '../../shared/models/PermissionsModels/PermissionModel';
|
|
8
|
-
import { UsersIDRequestModel } from '../../shared/models/UserModels/UsersIDRequestModel';
|
|
9
6
|
import * as i0 from "@angular/core";
|
|
10
7
|
import * as i1 from "../../../_metronic/core/services/page-info.service";
|
|
11
8
|
import * as i2 from "@bnsights/bbsf-utilities";
|
|
12
|
-
import * as i3 from "
|
|
9
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
13
10
|
import * as i4 from "./../../shared/Services/PermissionsService.service";
|
|
14
11
|
import * as i5 from "ng-block-ui";
|
|
15
|
-
import * as i6 from "
|
|
16
|
-
import * as i7 from "@
|
|
12
|
+
import * as i6 from "@bnsights/bbsf-controls";
|
|
13
|
+
import * as i7 from "@angular/material/menu";
|
|
17
14
|
import * as i8 from "../../empty-data/empty-data.component";
|
|
18
15
|
import * as i9 from "@angular/common";
|
|
19
|
-
import * as i10 from "
|
|
16
|
+
import * as i10 from "ng-inline-svg";
|
|
20
17
|
export class PermissionsComponent {
|
|
21
|
-
constructor(pageInfoService, utilityService,
|
|
18
|
+
constructor(pageInfoService, utilityService, environmentService, modalService, permissionsService, requestHandlerService) {
|
|
22
19
|
this.pageInfoService = pageInfoService;
|
|
23
20
|
this.utilityService = utilityService;
|
|
24
|
-
this.bbsfTranslateService = bbsfTranslateService;
|
|
25
21
|
this.environmentService = environmentService;
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
|
|
30
|
-
this.
|
|
31
|
-
this.
|
|
32
|
-
this.ShowbreadCrumb = false;
|
|
33
|
-
this.OrganizationList = [];
|
|
22
|
+
this.modalService = modalService;
|
|
23
|
+
this.permissionsService = permissionsService;
|
|
24
|
+
this.requestHandlerService = requestHandlerService;
|
|
25
|
+
//Page requirements
|
|
26
|
+
this.ApiUrl = this.permissionsService.ApiUrl;
|
|
27
|
+
this.organizationList = [];
|
|
34
28
|
this.filterForm = new FormGroup({});
|
|
35
|
-
this.
|
|
29
|
+
this.permissionsForm = new FormGroup({});
|
|
36
30
|
this.showFilter = false;
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
31
|
+
this.permissionsPagingResult = [];
|
|
32
|
+
this.filteredPermissionsPagingResult = [];
|
|
33
|
+
this.isFilterLoaded = false;
|
|
39
34
|
//Add Model Controls
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
35
|
+
this.addPermissionForm = new FormGroup({});
|
|
36
|
+
this.isAddPermissionFormLoaded = false;
|
|
42
37
|
//Edit Model Controls
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
this.editPermissionForm = new FormGroup({});
|
|
39
|
+
this.deleteControlLoaded = false;
|
|
40
|
+
this.getAddPermissionModel = () => {
|
|
41
|
+
let paramArray = [];
|
|
42
|
+
let ResultModel = this.addPermissionForm.value;
|
|
43
|
+
let AddPermissionModel = new PermissionModel();
|
|
44
|
+
if (this.ProductionMode == false)
|
|
45
|
+
AddPermissionModel.SysName = ResultModel.SysName;
|
|
46
|
+
AddPermissionModel.Name.Arabic = ResultModel.Name.ArabicValue;
|
|
47
|
+
AddPermissionModel.Name.English = ResultModel.Name.EnglishValue;
|
|
48
|
+
AddPermissionModel.OrganizationID = Number(ResultModel.Organization);
|
|
49
|
+
paramArray.push(AddPermissionModel);
|
|
50
|
+
return paramArray;
|
|
51
|
+
};
|
|
52
|
+
this.getAddPermissionFunction = (AddPermissionModel) => {
|
|
53
|
+
return this.permissionsService.addPermission(AddPermissionModel);
|
|
54
|
+
};
|
|
55
|
+
this.getEditPermissionModel = () => {
|
|
56
|
+
let paramArray = [];
|
|
57
|
+
let ResultModel = this.editPermissionForm.value;
|
|
58
|
+
let EditPermissionModel = new PermissionModel();
|
|
59
|
+
EditPermissionModel.Id = this.editPermissionId;
|
|
60
|
+
EditPermissionModel.Name.Arabic = ResultModel.Name.ArabicValue;
|
|
61
|
+
EditPermissionModel.Name.English = ResultModel.Name.EnglishValue;
|
|
62
|
+
if (this.ProductionMode == false)
|
|
63
|
+
EditPermissionModel.SysName = ResultModel.SysName;
|
|
64
|
+
EditPermissionModel.OrganizationID = Number(ResultModel.Organization);
|
|
65
|
+
paramArray.push(EditPermissionModel);
|
|
66
|
+
return paramArray;
|
|
67
|
+
};
|
|
68
|
+
this.getEditPermissionFunction = (EditPermissionModel) => {
|
|
69
|
+
return this.permissionsService.editPermission(EditPermissionModel);
|
|
70
|
+
};
|
|
71
|
+
this.deletePermissionFunction = (id) => {
|
|
72
|
+
return this.permissionsService.deletePermission(id);
|
|
73
|
+
};
|
|
51
74
|
}
|
|
52
75
|
ngOnInit() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
this.language = event.lang;
|
|
65
|
-
this.ngOnInit();
|
|
66
|
-
});
|
|
67
|
-
this.language = yield this.utilityService.getCurrentLanguage();
|
|
68
|
-
this.ProductionMode = this.environmentService.getProductionMode();
|
|
69
|
-
this.LoadDropdownLists();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
ReinitializePermissionsPaging() {
|
|
73
|
-
let element = this.input;
|
|
74
|
-
element.ReinitializePaging();
|
|
75
|
-
}
|
|
76
|
-
UpdatePermissionsPaging() {
|
|
77
|
-
let element = this.input;
|
|
78
|
-
element.UpdatePaging();
|
|
76
|
+
//Page header (breadcrumb and title)
|
|
77
|
+
PageInfoService.PageTitle = this.utilityService.getResourceValue("Permissions");
|
|
78
|
+
PageInfoService.PageBreadcrumbs = [
|
|
79
|
+
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
80
|
+
{ title: '', path: '', isSeparator: true, isActive: false }
|
|
81
|
+
];
|
|
82
|
+
this.pageInfoService.calculateTitle();
|
|
83
|
+
this.pageInfoService.calculateBreadcrumbs();
|
|
84
|
+
this.ProductionMode = this.environmentService.getProductionMode();
|
|
85
|
+
//initialize page
|
|
86
|
+
this.initializePage();
|
|
79
87
|
}
|
|
88
|
+
//Paging functions
|
|
80
89
|
setPermissionsListResult(result) {
|
|
81
|
-
this.
|
|
82
|
-
this.
|
|
83
|
-
this.utilityService.stopBlockUI();
|
|
90
|
+
this.permissionsPagingResult = result;
|
|
91
|
+
this.filteredPermissionsPagingResult = this.permissionsPagingResult;
|
|
84
92
|
}
|
|
93
|
+
//Filter functions
|
|
85
94
|
resetFilters() {
|
|
86
|
-
this.
|
|
87
|
-
let element = this.
|
|
95
|
+
this.permissionsForm.controls["searchTextBox"].setValue(null);
|
|
96
|
+
let element = this.pagingElement;
|
|
88
97
|
element.ReinitializePaging();
|
|
89
98
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
//initialize page
|
|
100
|
+
initializePage() {
|
|
101
|
+
this.permissionsService.loadDropdown().subscribe((result) => {
|
|
102
|
+
let dropdownResponseModel = result;
|
|
103
|
+
this.organizationList = dropdownResponseModel;
|
|
94
104
|
// TextBox inti
|
|
95
105
|
this.searchTextBox = new TextBoxOptions();
|
|
96
106
|
this.searchTextBox.Name = "searchTextBox";
|
|
97
107
|
this.searchTextBox.HideLabel = true;
|
|
98
108
|
this.searchTextBox.Type = InputType.Text;
|
|
99
109
|
this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
this.
|
|
103
|
-
this.
|
|
104
|
-
this.
|
|
105
|
-
this.
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
108
|
-
this.
|
|
109
|
-
this.
|
|
110
|
-
this.IsFilterLoaded = true;
|
|
110
|
+
this.textInputFilter = new FilterItem();
|
|
111
|
+
this.textInputFilter.FormControlName = "searchTextBox";
|
|
112
|
+
this.textInputFilter.ActionParameterName = "searchText";
|
|
113
|
+
this.textInputFilter.IsFormControl = true;
|
|
114
|
+
this.textInputFilter.FilterType = FilterType.TextBox;
|
|
115
|
+
this.permissionsPaging = new PagingOptions();
|
|
116
|
+
this.permissionsPaging.ActionPostURL = this.ApiUrl + 'GetPermissionsByFilter';
|
|
117
|
+
this.permissionsPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
|
|
118
|
+
this.permissionsPaging.Filters = [this.textInputFilter];
|
|
119
|
+
this.isFilterLoaded = true;
|
|
111
120
|
});
|
|
112
121
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
this.IsAddPermissionFormLoaded = false;
|
|
122
|
+
///////////// Start add Permission Part//////////////////////
|
|
123
|
+
showAddPermissionModal(addPermissionModal) {
|
|
116
124
|
this.utilityService.startBlockUI();
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
125
|
+
this.addPermissionForm = new FormGroup({});
|
|
126
|
+
this.addPermissionFormOptions = new FormOptions();
|
|
127
|
+
this.addPermissionFormOptions.FormGroup = this.addPermissionForm;
|
|
128
|
+
this.addPermissionFormOptions.GetModelFunction = this.getAddPermissionModel;
|
|
129
|
+
this.addPermissionFormOptions.ServiceSubmitFunction = this.getAddPermissionFunction;
|
|
130
|
+
this.addPermissionFormOptions.PagingReference = this.pagingElement;
|
|
131
|
+
this.multiLingualName = new MultiLingualTextBoxOptions();
|
|
132
|
+
this.multiLingualName.Name = "Name";
|
|
133
|
+
this.multiLingualName.ArabicLabelKey = "NameInArabic";
|
|
134
|
+
this.multiLingualName.EnglishLabelKey = "NameInEnglish";
|
|
135
|
+
this.multiLingualName.IsRequired = true;
|
|
136
|
+
this.multiLingualName.Value = null;
|
|
137
|
+
this.sysName = new TextBoxOptions();
|
|
138
|
+
this.sysName.Name = "SysName";
|
|
139
|
+
this.sysName.LabelKey = "SysName";
|
|
140
|
+
this.sysName.Type = InputType.Text;
|
|
141
|
+
this.sysName.Value = null;
|
|
142
|
+
this.organization = new DropdownOptions();
|
|
143
|
+
this.organization.Name = "Organization";
|
|
144
|
+
this.organization.LabelKey = "Organization";
|
|
145
|
+
this.organization.SelectedItems = null;
|
|
146
|
+
this.organization.DataSource = this.organizationList;
|
|
147
|
+
this.organization.SingleSelection = true;
|
|
148
|
+
this.organization.AllowSearchFilter = true;
|
|
149
|
+
this.organization.IsRequired = true;
|
|
150
|
+
this.modalService.open(addPermissionModal);
|
|
151
|
+
this.utilityService.stopBlockUI();
|
|
140
152
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
//////////// End of add Permission part///////////////////////
|
|
154
|
+
///////////Start of edit Permission part//////////////////////
|
|
155
|
+
showEditPermissionModal(permissionID, editPermissionModal) {
|
|
156
|
+
this.editPermissionForm = new FormGroup({});
|
|
157
|
+
this.editPermissionFormOptions = new FormOptions();
|
|
158
|
+
this.editPermissionFormOptions.FormGroup = this.editPermissionForm;
|
|
159
|
+
this.editPermissionFormOptions.GetModelFunction = this.getEditPermissionModel;
|
|
160
|
+
this.editPermissionFormOptions.ServiceSubmitFunction = this.getEditPermissionFunction;
|
|
161
|
+
this.editPermissionFormOptions.PagingReference = this.pagingElement;
|
|
162
|
+
this.permissionsService.getPermission(permissionID).subscribe((result) => {
|
|
163
|
+
let Permission = result.model;
|
|
164
|
+
let Name = new EnglishArabicDTO();
|
|
165
|
+
Name.Arabic = Permission.name.arabic;
|
|
166
|
+
Name.English = Permission.name.english;
|
|
167
|
+
this.editMultiLingualName = new MultiLingualTextBoxOptions();
|
|
168
|
+
this.editMultiLingualName.Name = "Name";
|
|
169
|
+
this.editMultiLingualName.ArabicLabelKey = "NameInArabic";
|
|
170
|
+
this.editMultiLingualName.EnglishLabelKey = "NameInEnglish";
|
|
171
|
+
this.editMultiLingualName.IsRequired = true;
|
|
172
|
+
this.editMultiLingualName.Value = Name;
|
|
173
|
+
this.editPermissionId = Permission.id;
|
|
174
|
+
this.editSysName = new TextBoxOptions();
|
|
175
|
+
this.editSysName.Name = "SysName";
|
|
176
|
+
this.editSysName.LabelKey = "SysName";
|
|
177
|
+
this.editSysName.Type = InputType.Text;
|
|
178
|
+
this.editSysName.Value = Permission.sysName;
|
|
179
|
+
this.editOrganization = new DropdownOptions();
|
|
180
|
+
this.editOrganization.Name = "Organization";
|
|
181
|
+
this.editOrganization.LabelKey = "Organization";
|
|
182
|
+
this.editOrganization.SelectedItems = this.organizationList.filter((item) => { return parseInt(item.key) == Permission.organizationID; }).map((item) => item.key)[0];
|
|
183
|
+
this.editOrganization.DataSource = this.organizationList;
|
|
184
|
+
this.editOrganization.SingleSelection = true;
|
|
185
|
+
this.editOrganization.AllowSearchFilter = true;
|
|
186
|
+
this.editOrganization.IsRequired = true;
|
|
187
|
+
this.modalService.open(editPermissionModal);
|
|
188
|
+
});
|
|
161
189
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
this.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.
|
|
170
|
-
this.
|
|
171
|
-
this.
|
|
172
|
-
this.
|
|
173
|
-
this.
|
|
174
|
-
this.
|
|
175
|
-
this.PermissionId = Permission.id;
|
|
176
|
-
this.EditSysName = new TextBoxOptions();
|
|
177
|
-
this.EditSysName.Name = "SysName";
|
|
178
|
-
this.EditSysName.LabelKey = "SysName";
|
|
179
|
-
this.EditSysName.Type = InputType.Text;
|
|
180
|
-
this.EditSysName.Value = Permission.sysName;
|
|
181
|
-
this.EditOrganization = new DropdownOptions();
|
|
182
|
-
this.EditOrganization.Name = "Organization";
|
|
183
|
-
this.EditOrganization.LabelKey = "Organization";
|
|
184
|
-
this.EditOrganization.SelectedItems = this.OrganizationList.filter((item) => { return parseInt(item.key) == Permission.organizationID; }).map((item) => item.key)[0];
|
|
185
|
-
this.EditOrganization.DataSource = this.OrganizationList;
|
|
186
|
-
this.EditOrganization.SingleSelection = true;
|
|
187
|
-
this.EditOrganization.AllowSearchFilter = true;
|
|
188
|
-
this.EditOrganization.IsRequired = true;
|
|
190
|
+
///////////End of edit Permission part//////////////////////
|
|
191
|
+
///////////Start of delete Permission part//////////////////////
|
|
192
|
+
showDeletePermissionModal(PermissionId) {
|
|
193
|
+
this.deleteControlLoaded = false;
|
|
194
|
+
this.deletedPermissionId = PermissionId;
|
|
195
|
+
//array sent to service function
|
|
196
|
+
let paramArray = [];
|
|
197
|
+
paramArray.push(this.deletedPermissionId);
|
|
198
|
+
this.deleteConfirmationOptions = new ConfirmationModalOptions();
|
|
199
|
+
this.deleteConfirmationOptions.ServiceSubmitFunction = this.deletePermissionFunction;
|
|
200
|
+
this.deleteConfirmationOptions.ServiceSubmitModel = paramArray;
|
|
201
|
+
this.deleteConfirmationOptions.PagingReference = this.pagingElement;
|
|
202
|
+
this.deleteControlLoaded = true;
|
|
189
203
|
setTimeout(() => {
|
|
190
|
-
this.
|
|
191
|
-
|
|
192
|
-
}, 100);
|
|
204
|
+
this.ConfirmationModalControl.showModal();
|
|
205
|
+
}, 200);
|
|
193
206
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
else
|
|
199
|
-
this.
|
|
200
|
-
let ResultModel = this.EditPermissionForm.value;
|
|
201
|
-
let EditPermissionModel = new PermissionModel();
|
|
202
|
-
EditPermissionModel.Id = this.PermissionId;
|
|
203
|
-
EditPermissionModel.Name.Arabic = ResultModel.Name.Arabic;
|
|
204
|
-
EditPermissionModel.Name.English = ResultModel.Name.English;
|
|
205
|
-
if (this.ProductionMode == false)
|
|
206
|
-
EditPermissionModel.SysName = ResultModel.SydName;
|
|
207
|
-
EditPermissionModel.OrganizationID = Number(ResultModel.Organization);
|
|
208
|
-
this.PermissionsService.EditPermission(EditPermissionModel).subscribe((result) => {
|
|
209
|
-
;
|
|
210
|
-
document.getElementById('CloseEditPermissionsModal').click();
|
|
211
|
-
this.EditPermissionForm.reset();
|
|
212
|
-
let element = this.input;
|
|
213
|
-
element.UpdatePaging();
|
|
214
|
-
}, (error) => {
|
|
215
|
-
});
|
|
216
|
-
}
|
|
207
|
+
///////////End of delete Permission part//////////////////////
|
|
208
|
+
filterPermissionList(searchValue) {
|
|
209
|
+
if (searchValue)
|
|
210
|
+
this.filteredPermissionsPagingResult = this.permissionsPagingResult.filter(item => item.permissionName.toLowerCase().includes(searchValue.toLowerCase()));
|
|
211
|
+
else
|
|
212
|
+
this.filteredPermissionsPagingResult = this.permissionsPagingResult;
|
|
217
213
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
this.
|
|
221
|
-
this.IsOpenDeletePermissionsModal = false;
|
|
222
|
-
this.utilityService.startBlockUI();
|
|
223
|
-
setTimeout(() => {
|
|
224
|
-
this.IsOpenDeletePermissionsModal = true;
|
|
225
|
-
this.utilityService.stopBlockUI();
|
|
226
|
-
}, 100);
|
|
227
|
-
}
|
|
228
|
-
deletePermission() {
|
|
229
|
-
let UsersIDModel = new UsersIDRequestModel();
|
|
230
|
-
for (let index = 0; index < this.deletePermissionsList.length; index++) {
|
|
231
|
-
const element = this.deletePermissionsList[index];
|
|
232
|
-
UsersIDModel.UsersIDs.push(element.id);
|
|
233
|
-
}
|
|
234
|
-
this.PermissionsService.DeletePermission(UsersIDModel).subscribe((result) => {
|
|
235
|
-
this.deletePermissionsList = [];
|
|
236
|
-
document.getElementById('CloseDeletePermissionsModal').click();
|
|
237
|
-
let element = this.input;
|
|
238
|
-
element.ReinitializePaging();
|
|
239
|
-
}, (error) => {
|
|
240
|
-
});
|
|
214
|
+
///////////Destroy Observable //////////////////////
|
|
215
|
+
ngOnDestroy() {
|
|
216
|
+
this.requestHandlerService.destroyHandler();
|
|
241
217
|
}
|
|
242
218
|
}
|
|
243
|
-
PermissionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionsComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.
|
|
244
|
-
PermissionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PermissionsComponent, selector: "lib-permissions", viewQueries: [{ propertyName: "input", first: true, predicate: ["PermissionPagingViewElement"], descendants: true }, { propertyName: "ClosePermissionModal", first: true, predicate: ["ClosePermissionModal"], descendants: true }, { propertyName: "CloseEditPermissionsModal", first: true, predicate: ["CloseEditPermissionsModal"], descendants: true }, { propertyName: "CloseDeletePermissionsModal", first: true, predicate: ["CloseDeletePermissionsModal"], descendants: true }, { propertyName: "CloseConfirmationModal", first: true, predicate: ["CloseConfirmationModal"], descendants: true }], ngImport: i0, template: "<block-ui>\r\n\r\n <app-subheader [SubheaderTitle]=\"SubheaderTitle\" [ShowbreadCrumb]=\"ShowbreadCrumb\" [ShowToolbar]=\"ShowToolbar\">\r\n <div class=\"subheadertoolbar\">\r\n\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-success btn-sm btn-icon mr-2\" data-toggle=\"modal\"\r\n data-target=\"#AddPermissionModal\" (click)=\"showAddPermissionModal()\">\r\n <i class=\"kt-nav__link-icon fa fa-plus\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"filter-container \" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\"\r\n *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"PermissionsForm\">\r\n <div class=\"container-fluidposition-relative\">\r\n\r\n <div class=\" row\" id=\"filtersContainer\" data-isloaded=\"true\">\r\n\r\n <div class=\"col-md-6\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"PermissionsForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6 d-flex justify-content-end align-items-end\">\r\n <a class=\"btn btn-danger btn-bold btn-sm pv-reset text-white mt-4\" id=\"applyFiltersBtn\"\r\n (click)=\"resetFilters()\">{{utilityService.getResourceValue(\"Reset\")}}</a>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </form>\r\n </div>\r\n\r\n\r\n </app-subheader>\r\n <!-- Page Content -->\r\n <div [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\" class=\"container-fluid\">\r\n\r\n <div class=\"table-responsive-x\">\r\n <!--begin::Permission list-->\r\n <table class=\"table amsx-table-users\">\r\n <thead>\r\n <tr>\r\n\r\n <th>{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th *ngIf=\"!ProductionMode\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"text-center\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\">\r\n\r\n <tr *ngFor=\"let Permission of PermissionsPagingResult\">\r\n\r\n <td class=\"align-middle\">\r\n <div class=\"kt-user-card-v2\">\r\n <div class=\"kt-user-card-v2__details\">\r\n <a href=\"javascript:void(0)\" *ngIf=\"language=='en'\" class=\"kt-user-card-v2__name\">{{Permission.name.english}}</a>\r\n <a href=\"javascript:void(0)\" *ngIf=\"language=='ar'\" class=\"kt-user-card-v2__name\">{{Permission.name.arabic}}</a>\r\n\r\n\r\n </div>\r\n </div>\r\n </td>\r\n <td *ngIf=\"!ProductionMode\" class=\"align-middle\">{{Permission.sysName}}</td>\r\n\r\n <td class=\"text-center align-middle\">\r\n <div class=\"dropdown dropdown-inline ams-dropdown\">\r\n <button type=\"button\" class=\"btn btn-clean btn-icon btn-sm\" data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\" aria-expanded=\"true\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <div class=\"dropdown-menu dropdown-menu-right p-0\">\r\n\r\n <ul class=\"kt-nav\">\r\n <li class=\"kt-nav__item\">\r\n <a class=\"kt-nav__link\" data-toggle=\"modal\" data-target=\"#EditPermissionModal\"\r\n (click)=\"showEditPermissionModal(Permission)\">\r\n <i class=\"kt-nav__link-icon fa fa-edit\" aria-hidden=\"true\"></i>\r\n <span class=\"kt-nav__link-text\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n </li>\r\n\r\n <li class=\"kt-nav__item\">\r\n <a h class=\"kt-nav__link\" id=\"btnResetPass\" data-toggle=\"modal\"\r\n data-target=\"#deletePermissionModal\" (click)=\"showDeletePermissionModal(Permission)\">\r\n <i class=\"kt-nav__link-icon fa fa-cog\"></i>\r\n <span class=\"kt-nav__link-text\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </li>\r\n\r\n\r\n </ul>\r\n\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"PermissionsPagingResult.length == 0\">\r\n <td colspan=\"3\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <BBSF-Paging (Items)=\"setPermissionsListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"PermissionsPaging\"\r\n [group]=\"PermissionsForm\" #PermissionPagingViewElement>\r\n </BBSF-Paging>\r\n <!--end::Permission list-->\r\n </div>\r\n \r\n </div>\r\n <!-- Add Modal -->\r\n <div class=\"modal fade\" id=\"AddPermissionModal\" tabindex=\"-1\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <form [formGroup]=\"AddPermissionForm\" *ngIf=\"IsAddPermissionFormLoaded\" (ngSubmit)=\"addPermission()\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"> {{utilityService.getResourceValue(\"AddPermissions\")}}</h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-icon\">\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n \r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"MultiLingualName\" [group]=\"AddPermissionForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"!ProductionMode\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\" [group]=\"AddPermissionForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"Organization\" [group]=\"AddPermissionForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button #ClosePermissionModal id=\"ClosePermissionModal\" type=\"button\" class=\"btn btn-secondary\"\r\n data-dismiss=\"modal\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Edit Modal -->\r\n <div class=\"modal fade\" id=\"EditPermissionModal\" tabindex=\"-1\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <form [formGroup]=\"EditPermissionForm\" *ngIf=\"IsEditPermissionModelLoaded\" (ngSubmit)=\"editPermission()\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"> {{utilityService.getResourceValue(\"EditPermission\")}} </h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-icon\">\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditMultiLingualName\" [group]=\"EditPermissionForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n \r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"EditSysName\" [group]=\"EditPermissionForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditOrganization\" [group]=\"EditPermissionForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button #CloseEditPermissionsModal id=\"CloseEditPermissionsModal\" type=\"button\" class=\"btn btn-secondary\"\r\n data-dismiss=\"modal\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Delete Modal -->\r\n <div class=\"modal fade\" id=\"deletePermissionModal\" tabindex=\"-1\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <form *ngIf=\"IsOpenDeletePermissionsModal\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"> {{utilityService.getResourceValue(\"DeletePermission\")}}</h5>\r\n\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-icon\">\r\n <i class=\"fa fa-times\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"note note-warning text-center\">\r\n <h3 *ngIf=\"language=='en'\">\r\n Are you sure that you want to delete this Permission ?\r\n </h3>\r\n <h3 *ngIf=\"language=='ar'\">\r\n \u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0623\u0646\u0643 \u062A\u0631\u064A\u062F \u062D\u0630\u0641 \u0647\u0630\u0627 \u0627\u0644\u0625\u0630\u0646\u061F\r\n </h3>\r\n </div>\r\n\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive-x\">\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button #CloseDeletePermissionsModal id=\"CloseDeletePermissionsModal\" type=\"button\" class=\"btn btn-secondary\"\r\n data-dismiss=\"modal\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"deletePermission()\"\r\n class=\"btn btn-danger\">\r\n {{utilityService.getResourceValue(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.SubheaderComponent, selector: "app-subheader", inputs: ["SubheaderTitle", "BreadcrumbTitle", "BreadcrumbTitleSecond", "Url", "SecondUrl", "ShowbreadCrumb", "ShowToolbar", "ShowBreadcrumbSecond"] }, { type: i7.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i7.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i7.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
|
|
245
|
-
__decorate([
|
|
246
|
-
BlockUI()
|
|
247
|
-
], PermissionsComponent.prototype, "blockUI", void 0);
|
|
219
|
+
PermissionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionsComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.EnvironmentService }, { token: i3.NgbModal }, { token: i4.PermissionsService }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
220
|
+
PermissionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: PermissionsComponent, selector: "lib-permissions", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["PermissionPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "\r\n<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n \r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"permissionsForm\" (OnChange)=\"filterPermissionList($event)\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n \r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddPermissionModal(AddPermissionModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::Permission list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\"*ngIf=\"!ProductionMode\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let Permission of filteredPermissionsPagingResult\">\r\n\r\n <td>\r\n {{Permission.permissionName}}\r\n </td>\r\n <td *ngIf=\"!ProductionMode\" class=\"align-middle\">{{Permission.sysName}}</td>\r\n\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditPermissionModal(Permission.permIdEnc,EditPermissionModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeletePermissionModal(Permission.permIdEnc)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"filteredPermissionsPagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '3' : '4'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--end::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setPermissionsListResult($event)\" *ngIf=\"isFilterLoaded\" [options]=\"permissionsPaging\"\r\n [group]=\"permissionsForm\" #PermissionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddPermissionModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddPermissions\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addPermissionFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"multiLingualName\" [group]=\"addPermissionForm\"></BBSF-MultiLingualTextBox> \r\n <div *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"sysName\" [group]=\"addPermissionForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <BBSF-DropdownList [options]=\"organization\" [group]=\"addPermissionForm\"></BBSF-DropdownList> \r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #ClosePermissionModal id=\"ClosePermissionModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n \r\n <!-- Edit Modal -->\r\n <ng-template #EditPermissionModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\"> {{utilityService.getResourceValue(\"EditPermission\")}} </h1>\r\n </div>\r\n <BBSF-Form [options]=\"editPermissionFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"editMultiLingualName\" [group]=\"editPermissionForm\"></BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\" *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"editSysName\" [group]=\"editPermissionForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <BBSF-DropdownList [options]=\"editOrganization\" [group]=\"editPermissionForm\"></BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditPermissionModal id=\"CloseEditPermissionModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl>\r\n</BBSF-ConfirmationModal>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵh, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.ɵw, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i3.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
|
|
248
221
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: PermissionsComponent, decorators: [{
|
|
249
222
|
type: Component,
|
|
250
223
|
args: [{
|
|
251
224
|
selector: 'lib-permissions',
|
|
252
225
|
templateUrl: './permissions.component.html'
|
|
253
226
|
}]
|
|
254
|
-
}], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.
|
|
227
|
+
}], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.EnvironmentService }, { type: i3.NgbModal }, { type: i4.PermissionsService }, { type: i2.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
|
|
255
228
|
type: ViewChild,
|
|
256
229
|
args: ['PermissionPagingViewElement', { static: false }]
|
|
257
|
-
}],
|
|
258
|
-
type: ViewChild,
|
|
259
|
-
args: ['ClosePermissionModal', { static: false }]
|
|
260
|
-
}], CloseEditPermissionsModal: [{
|
|
261
|
-
type: ViewChild,
|
|
262
|
-
args: ['CloseEditPermissionsModal', { static: false }]
|
|
263
|
-
}], CloseDeletePermissionsModal: [{
|
|
264
|
-
type: ViewChild,
|
|
265
|
-
args: ['CloseDeletePermissionsModal', { static: false }]
|
|
266
|
-
}], CloseConfirmationModal: [{
|
|
230
|
+
}], ConfirmationModalControl: [{
|
|
267
231
|
type: ViewChild,
|
|
268
|
-
args: ['
|
|
269
|
-
}]
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9yb2xlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFLLE9BQU8sRUFBRSxPQUFPLEVBQWEsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBU3pGLE1BQU0sT0FBTyxvQkFBb0I7SUFzRC9CLFlBQW9CLGVBQStCLEVBQVMsY0FBNkIsRUFBUyxvQkFBeUMsRUFBUyxrQkFBcUMsRUFBVSxZQUErQixFQUFVLFdBQXdCLEVBQVUsa0JBQXNDO1FBQWhTLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQVMseUJBQW9CLEdBQXBCLG9CQUFvQixD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LHlCQUF5QjtzQkFBbkYsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBS0ksMkJBQTJCO3NCQUF2RixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFRSCxzQkFBc0I7c0JBQTdFLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUczQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucywgRW5nbGlzaEFyYWJpY0RUTywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEJsb2NrVUksIE5nQmxvY2tVSSB9IGZyb20gJ25nLWJsb2NrLXVpJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1Blcm1pc3Npb25zTW9kZWxzL1Blcm1pc3Npb25Nb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJzSURSZXF1ZXN0TW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvVXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IERhdGFTZWNyZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25zU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbnMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL1Blcm1pc3Npb25zL1wiXHJcbiAgU3ViaGVhZGVyVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Blcm1pc3Npb25zJyk7XHJcbiAgXHJcblxyXG4gIFNob3dUb29sYmFyID0gdHJ1ZTsgU2hvd2JyZWFkQ3J1bWIgPSBmYWxzZTtcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBPcmdhbml6YXRpb25MaXN0ID0gW107XHJcbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFBlcm1pc3Npb25zRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBQZXJtaXNzaW9uc1BhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBQZXJtaXNzaW9uc1BhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbjtcclxuICBAVmlld0NoaWxkKCdQZXJtaXNzaW9uUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICAgQWRkUGVybWlzc2lvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgTXVsdGlMaW5ndWFsTmFtZTpNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG4gICBTeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICAgT3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgIElzQWRkUGVybWlzc2lvbkZvcm1Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgQFZpZXdDaGlsZCgnQ2xvc2VQZXJtaXNzaW9uTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VQZXJtaXNzaW9uTW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFBlcm1pc3Npb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdE11bHRpTGluZ3VhbE5hbWU6TXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBFZGl0U3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdE9yZ2FuaXphdGlvbjogRHJvcGRvd25PcHRpb25zO1xyXG4gIElzRWRpdFBlcm1pc3Npb25Nb2RlbExvYWRlZDogYm9vbGVhbjtcclxuICBQZXJtaXNzaW9uSWQ6IG51bWJlcjtcclxuICBAVmlld0NoaWxkKCdDbG9zZUVkaXRQZXJtaXNzaW9uc01vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlRWRpdFBlcm1pc3Npb25zTW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8vZGVsZXRlICBNb2RlbCBDb250cm9sc1xyXG4gIGRlbGV0ZVBlcm1pc3Npb25zTGlzdDogYW55W10gPSBbXVxyXG4gIElzT3BlbkRlbGV0ZVBlcm1pc3Npb25zTW9kYWw6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3NlRGVsZXRlUGVybWlzc2lvbnNNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZURlbGV0ZVBlcm1pc3Npb25zTW9kYWw6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgSXNPcGVuQ29uZmlybWF0aW9uTW9kYWw6IGJvb2xlYW47XHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VDb25maXJtYXRpb25Nb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZUNvbmZpcm1hdGlvbk1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvLyBEZWNvcmF0b3Igd2lyZXMgdXAgYmxvY2tVSSBpbnN0YW5jZVxyXG4gIEBCbG9ja1VJKCkgYmxvY2tVSTogTmdCbG9ja1VJO1xyXG4gIFNob3dQYWdlQ29udGVudDpib29sZWFuPWZhbHNlO1xyXG4gIGxhbmd1YWdlOnN0cmluZz1cIlwiXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6UGFnZUluZm9TZXJ2aWNlLCBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6VXRpbGl0eVNlcnZpY2UscHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTpCQlNGVHJhbnNsYXRlU2VydmljZSxwcml2YXRlIGVudmlyb25tZW50U2VydmljZTpFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgZGF0YVNlcnZpY2VzOiBEYXRhU2VjcmV0U2VydmljZSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgUGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UpIFxyXG4gIHsgXHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50PXRydWU7XHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlPXRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25cIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnM9W1xyXG4gICAgICAge3RpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpICwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2V9LFxyXG4gICAgICAge3RpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2V9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCk9PntcclxuICAgICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9ZmFsc2U7XHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UgPSBldmVudC5sYW5nO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5sYW5ndWFnZSA9ICBhd2FpdCB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIHRoaXMuTG9hZERyb3Bkb3duTGlzdHMoKTtcclxuICB9XHJcblxyXG4gIFxyXG4gIFJlaW5pdGlhbGl6ZVBlcm1pc3Npb25zUGFnaW5nKCkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgfVxyXG5cclxuICBVcGRhdGVQZXJtaXNzaW9uc1BhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlVwZGF0ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGVybWlzc2lvbnNMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5QZXJtaXNzaW9uc1BhZ2luZ1Jlc3VsdCA9IHJlc3VsdFxyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9dHJ1ZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXJzKCkge1xyXG4gICB0aGlzLlBlcm1pc3Npb25zRm9ybS5jb250cm9sc1tcInNlYXJjaFRleHRCb3hcIl0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIExvYWREcm9wZG93bkxpc3RzKCkge1xyXG5cclxuICAgIHRoaXMuUGVybWlzc2lvbnNTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgRHJvcGRvd25zUmVzcG9uc2VNb2RlbCA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHRoaXMuT3JnYW5pemF0aW9uTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuICAgIFxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG5cclxuICAgICAgdGhpcy5QZXJtaXNzaW9uc1BhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvbnNQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyAnR2V0UGVybWlzc2lvbnNCeUZpbHRlcic7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvbnNQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICAgIHRoaXMuUGVybWlzc2lvbnNQYWdpbmcuRmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlcl1cclxuICAgICAgdGhpcy5QZXJtaXNzaW9uc1BhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2hvd0FkZFBlcm1pc3Npb25Nb2RhbCgpIHtcclxuICAgIHRoaXMuQWRkUGVybWlzc2lvbkZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMuSXNBZGRQZXJtaXNzaW9uRm9ybUxvYWRlZCA9IGZhbHNlXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxOYW1lLk5hbWUgPSBcIk5hbWVcIjtcclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIFxyXG4gICAgdGhpcy5TeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLlN5c05hbWUuTmFtZSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgdGhpcy5TeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICB0aGlzLlN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5TeXNOYW1lLlZhbHVlID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLk9yZ2FuaXphdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuT3JnYW5pemF0aW9uLk5hbWUgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICB0aGlzLk9yZ2FuaXphdGlvbi5MYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uXCJcclxuICAgIHRoaXMuT3JnYW5pemF0aW9uLlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5Pcmdhbml6YXRpb24uRGF0YVNvdXJjZSA9IHRoaXMuT3JnYW5pemF0aW9uTGlzdFxyXG4gICAgdGhpcy5Pcmdhbml6YXRpb24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuT3JnYW5pemF0aW9uLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuT3JnYW5pemF0aW9uLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLklzQWRkUGVybWlzc2lvbkZvcm1Mb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgYWRkUGVybWlzc2lvbigpIHtcclxuICAgIGlmICh0aGlzLkFkZFBlcm1pc3Npb25Gb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkUGVybWlzc2lvbkZvcm0udmFsdWU7XHJcbiAgICAgIGxldCBBZGRQZXJtaXNzaW9uTW9kZWw6UGVybWlzc2lvbk1vZGVsPSBuZXcgUGVybWlzc2lvbk1vZGVsKCkgO1xyXG4gICAgICBpZih0aGlzLlByb2R1Y3Rpb25Nb2RlPT1mYWxzZSlcclxuICAgICAgQWRkUGVybWlzc2lvbk1vZGVsLlN5c05hbWUgPSBSZXN1bHRNb2RlbC5TeXNOYW1lO1xyXG4gICAgICBBZGRQZXJtaXNzaW9uTW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5OYW1lLkFyYWJpYztcclxuICAgICAgQWRkUGVybWlzc2lvbk1vZGVsLk5hbWUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLk5hbWUuRW5nbGlzaDtcclxuICAgICAgQWRkUGVybWlzc2lvbk1vZGVsLk9yZ2FuaXphdGlvbklEID0gTnVtYmVyKFJlc3VsdE1vZGVsLk9yZ2FuaXphdGlvbik7XHJcbiAgICAgdGhpcy5QZXJtaXNzaW9uc1NlcnZpY2UuQWRkUGVybWlzc2lvbihBZGRQZXJtaXNzaW9uTW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0Nsb3NlUGVybWlzc2lvbk1vZGFsJykuY2xpY2soKVxyXG4gICAgICAgIHRoaXMuQWRkUGVybWlzc2lvbkZvcm0ucmVzZXQoKVxyXG4gICAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd0VkaXRQZXJtaXNzaW9uTW9kYWwoUGVybWlzc2lvbjogYW55KSB7XHJcblxyXG4gICAgdGhpcy5Jc0VkaXRQZXJtaXNzaW9uTW9kZWxMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkVkaXRQZXJtaXNzaW9uRm9ybS5yZXNldCgpO1xyXG5cclxuICAgIGxldCBOYW1lPW5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICBOYW1lLkFyYWJpYz1QZXJtaXNzaW9uLm5hbWUuYXJhYmljO1xyXG4gICAgTmFtZS5FbmdsaXNoPVBlcm1pc3Npb24ubmFtZS5lbmdsaXNoO1xyXG5cclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuTmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuVmFsdWUgPSBOYW1lO1xyXG4gICAgXHJcblxyXG4gICAgdGhpcy5QZXJtaXNzaW9uSWQgPSBQZXJtaXNzaW9uLmlkXHJcblxyXG4gICAgdGhpcy5FZGl0U3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0U3lzTmFtZS5OYW1lID0gXCJTeXNOYW1lXCI7XHJcbiAgICB0aGlzLkVkaXRTeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICB0aGlzLkVkaXRTeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuRWRpdFN5c05hbWUuVmFsdWUgPSBQZXJtaXNzaW9uLnN5c05hbWU7XHJcbiAgIFxyXG4gICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdGhpcy5FZGl0T3JnYW5pemF0aW9uLk5hbWUgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uTGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uU2VsZWN0ZWRJdGVtcyA9IHRoaXMuT3JnYW5pemF0aW9uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBQZXJtaXNzaW9uLm9yZ2FuaXphdGlvbklEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5EYXRhU291cmNlID0gdGhpcy5Pcmdhbml6YXRpb25MaXN0XHJcbiAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuRWRpdE9yZ2FuaXphdGlvbi5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXRPcmdhbml6YXRpb24uSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuSXNFZGl0UGVybWlzc2lvbk1vZGVsTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSwgMTAwKTtcclxuXHJcbiAgfVxyXG5cclxuICBlZGl0UGVybWlzc2lvbigpIHtcclxuICAgIGlmICh0aGlzLkVkaXRQZXJtaXNzaW9uRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRQZXJtaXNzaW9uRm9ybS52YWx1ZTtcclxuICAgICAgbGV0IEVkaXRQZXJtaXNzaW9uTW9kZWwgPSBuZXcgUGVybWlzc2lvbk1vZGVsKCk7XHJcbiAgICAgIEVkaXRQZXJtaXNzaW9uTW9kZWwuSWQgPSB0aGlzLlBlcm1pc3Npb25JZDtcclxuICAgIFxyXG4gICAgICBFZGl0UGVybWlzc2lvbk1vZGVsLk5hbWUuQXJhYmljID0gUmVzdWx0TW9kZWwuTmFtZS5BcmFiaWM7XHJcbiAgICAgIEVkaXRQZXJtaXNzaW9uTW9kZWwuTmFtZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuTmFtZS5FbmdsaXNoO1xyXG5cclxuICAgICAgaWYodGhpcy5Qcm9kdWN0aW9uTW9kZT09ZmFsc2UpXHJcbiAgICAgIEVkaXRQZXJtaXNzaW9uTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5ZE5hbWU7XHJcbiAgICAgIEVkaXRQZXJtaXNzaW9uTW9kZWwuT3JnYW5pemF0aW9uSUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuT3JnYW5pemF0aW9uKTtcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uc1NlcnZpY2UuRWRpdFBlcm1pc3Npb24oRWRpdFBlcm1pc3Npb25Nb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDbG9zZUVkaXRQZXJtaXNzaW9uc01vZGFsJykuY2xpY2soKVxyXG4gICAgICAgIHRoaXMuRWRpdFBlcm1pc3Npb25Gb3JtLnJlc2V0KClcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzaG93RGVsZXRlUGVybWlzc2lvbk1vZGFsKFJlc291cmNlOiBhbnkpIHtcclxuICAgIHRoaXMuZGVsZXRlUGVybWlzc2lvbnNMaXN0ID0gW11cclxuICAgIHRoaXMuZGVsZXRlUGVybWlzc2lvbnNMaXN0LnB1c2goUmVzb3VyY2UpO1xyXG4gICAgdGhpcy5Jc09wZW5EZWxldGVQZXJtaXNzaW9uc01vZGFsID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuSXNPcGVuRGVsZXRlUGVybWlzc2lvbnNNb2RhbCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0sIDEwMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlUGVybWlzc2lvbigpIHtcclxuICAgIGxldCAgVXNlcnNJRE1vZGVsOlVzZXJzSURSZXF1ZXN0TW9kZWw9IG5ldyBVc2Vyc0lEUmVxdWVzdE1vZGVsKCkgO1xyXG4gICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmRlbGV0ZVBlcm1pc3Npb25zTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRlbGV0ZVBlcm1pc3Npb25zTGlzdFtpbmRleF07XHJcbiAgICAgICBVc2Vyc0lETW9kZWwuVXNlcnNJRHMucHVzaChlbGVtZW50LmlkKVxyXG4gICAgICAgXHJcbiAgICAgfVxyXG4gICAgdGhpcy5QZXJtaXNzaW9uc1NlcnZpY2UuRGVsZXRlUGVybWlzc2lvbihVc2Vyc0lETW9kZWwpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuZGVsZXRlUGVybWlzc2lvbnNMaXN0ID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDbG9zZURlbGV0ZVBlcm1pc3Npb25zTW9kYWwnKS5jbGljaygpXHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPlxyXG5cclxuICA8YXBwLXN1YmhlYWRlciBbU3ViaGVhZGVyVGl0bGVdPVwiU3ViaGVhZGVyVGl0bGVcIiAgW1Nob3dicmVhZENydW1iXT1cIlNob3dicmVhZENydW1iXCIgW1Nob3dUb29sYmFyXT1cIlNob3dUb29sYmFyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3ViaGVhZGVydG9vbGJhclwiPlxyXG5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGl0bGU9XCJBZGRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBidG4tc20gYnRuLWljb24gbXItMlwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgIGRhdGEtdGFyZ2V0PVwiI0FkZFBlcm1pc3Npb25Nb2RhbFwiIChjbGljayk9XCJzaG93QWRkUGVybWlzc2lvbk1vZGFsKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImt0LW5hdl9fbGluay1pY29uIGZhIGZhLXBsdXNcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXIgXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogU2hvd1BhZ2VDb250ZW50PT10cnVlPydibG9jayc6J25vbmUnfVwiXHJcbiAgICAgICAgICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJQZXJtaXNzaW9uc0Zvcm1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiIHJvd1wiIGlkPVwiZmlsdGVyc0NvbnRhaW5lclwiIGRhdGEtaXNsb2FkZWQ9XCJ0cnVlXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiUGVybWlzc2lvbnNGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tYm9sZCBidG4tc20gcHYtcmVzZXQgdGV4dC13aGl0ZSBtdC00XCIgaWQ9XCJhcHBseUZpbHRlcnNCdG5cIlxyXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcnMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0XCIpfX08L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgPC9hcHAtc3ViaGVhZGVyPlxyXG4gIDwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG4gIDxkaXYgW25nU3R5bGVdPVwieydkaXNwbGF5JzogU2hvd1BhZ2VDb250ZW50PT10cnVlPydibG9jayc6J25vbmUnfVwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZS14XCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbXN4LXRhYmxlLXVzZXJzXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0cj5cclxuXHJcbiAgICAgICAgICAgICAgPHRoPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU3lzTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IFBlcm1pc3Npb24gb2YgUGVybWlzc2lvbnNQYWdpbmdSZXN1bHRcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3QtdXNlci1jYXJkLXYyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrdC11c2VyLWNhcmQtdjJfX2RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiIGNsYXNzPVwia3QtdXNlci1jYXJkLXYyX19uYW1lXCI+e3tQZXJtaXNzaW9uLm5hbWUuZW5nbGlzaH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAqbmdJZj1cImxhbmd1YWdlPT0nYXInXCIgY2xhc3M9XCJrdC11c2VyLWNhcmQtdjJfX25hbWVcIj57e1Blcm1pc3Npb24ubmFtZS5hcmFiaWN9fTwvYT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCIgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj57e1Blcm1pc3Npb24uc3lzTmFtZX19PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXIgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gZHJvcGRvd24taW5saW5lIGFtcy1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tY2xlYW4gYnRuLWljb24gYnRuLXNtXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHQgcC0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImt0LW5hdlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwia3QtbmF2X19pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwia3QtbmF2X19saW5rXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI0VkaXRQZXJtaXNzaW9uTW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRQZXJtaXNzaW9uTW9kYWwoUGVybWlzc2lvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImt0LW5hdl9fbGluay1pY29uIGZhIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrdC1uYXZfX2xpbmstdGV4dFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJrdC1uYXZfX2l0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaCBjbGFzcz1cImt0LW5hdl9fbGlua1wiIGlkPVwiYnRuUmVzZXRQYXNzXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGFyZ2V0PVwiI2RlbGV0ZVBlcm1pc3Npb25Nb2RhbFwiIChjbGljayk9XCJzaG93RGVsZXRlUGVybWlzc2lvbk1vZGFsKFBlcm1pc3Npb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJrdC1uYXZfX2xpbmstaWNvbiBmYSBmYS1jb2dcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrdC1uYXZfX2xpbmstdGV4dFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwiUGVybWlzc2lvbnNQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRQZXJtaXNzaW9uc0xpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJQZXJtaXNzaW9uc1BhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJQZXJtaXNzaW9uc0Zvcm1cIiAjUGVybWlzc2lvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICBcclxuICA8L2Rpdj5cclxuICA8IS0tIEFkZCBNb2RhbCAtLT5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiQWRkUGVybWlzc2lvbk1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cImV4YW1wbGVNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCI+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiQWRkUGVybWlzc2lvbkZvcm1cIiAqbmdJZj1cIklzQWRkUGVybWlzc2lvbkZvcm1Mb2FkZWRcIiAobmdTdWJtaXQpPVwiYWRkUGVybWlzc2lvbigpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+ICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRQZXJtaXNzaW9uc1wiKX19PC9oNT5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIk11bHRpTGluZ3VhbE5hbWVcIiBbZ3JvdXBdPVwiQWRkUGVybWlzc2lvbkZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiU3lzTmFtZVwiIFtncm91cF09XCJBZGRQZXJtaXNzaW9uRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIk9yZ2FuaXphdGlvblwiIFtncm91cF09XCJBZGRQZXJtaXNzaW9uRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VQZXJtaXNzaW9uTW9kYWwgaWQ9XCJDbG9zZVBlcm1pc3Npb25Nb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBFZGl0IE1vZGFsIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbCBmYWRlXCIgaWQ9XCJFZGl0UGVybWlzc2lvbk1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cImV4YW1wbGVNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCI+XHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiRWRpdFBlcm1pc3Npb25Gb3JtXCIgKm5nSWY9XCJJc0VkaXRQZXJtaXNzaW9uTW9kZWxMb2FkZWRcIiAobmdTdWJtaXQpPVwiZWRpdFBlcm1pc3Npb24oKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0UGVybWlzc2lvblwiKX19IDwvaDU+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWljb25cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRNdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cIkVkaXRQZXJtaXNzaW9uRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTeXNOYW1lXCIgW2dyb3VwXT1cIkVkaXRQZXJtaXNzaW9uRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRPcmdhbml6YXRpb25cIiBbZ3JvdXBdPVwiRWRpdFBlcm1pc3Npb25Gb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRQZXJtaXNzaW9uc01vZGFsIGlkPVwiQ2xvc2VFZGl0UGVybWlzc2lvbnNNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gRGVsZXRlICBNb2RhbCAtLT5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiZGVsZXRlUGVybWlzc2lvbk1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cImV4YW1wbGVNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCI+XHJcbiAgICAgIDxmb3JtICpuZ0lmPVwiSXNPcGVuRGVsZXRlUGVybWlzc2lvbnNNb2RhbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVQZXJtaXNzaW9uXCIpfX08L2g1PlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZSBub3RlLXdhcm5pbmcgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJsYW5ndWFnZT09J2VuJ1wiPlxyXG4gICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgUGVybWlzc2lvbiA/XHJcbiAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJsYW5ndWFnZT09J2FyJ1wiPlxyXG4gICAgICAgICAgICAgICAg2YfZhCDYo9mG2Kog2YXYqtij2YPYryDYo9mG2YMg2KrYsdmK2K8g2K3YsNmBINmH2LDYpyDYp9mE2KXYsNmG2J9cclxuICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlLXhcIj5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VEZWxldGVQZXJtaXNzaW9uc01vZGFsIGlkPVwiQ2xvc2VEZWxldGVQZXJtaXNzaW9uc01vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVBlcm1pc3Npb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4iXX0=
|
|
232
|
+
args: ['ConfirmationModalControl', { static: false }]
|
|
233
|
+
}] } });
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9yb2xlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpOLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7Ozs7OztBQWN4RixNQUFNLE9BQU8sb0JBQW9CO0lBMkMvQixZQUNVLGVBQWdDLEVBQ2pDLGNBQThCLEVBQzdCLGtCQUFzQyxFQUN0QyxZQUFzQixFQUN0QixrQkFBc0MsRUFDdEMscUJBQTJDO1FBTDNDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RD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QUFvRDtJQUNwRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7O2tIQWpSVSxvQkFBb0I7c0dBQXBCLG9CQUFvQiw0U0NuQmpDLDZyT0FpSkE7NEZEOUhhLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixXQUFXLEVBQUUsOEJBQThCO2lCQUM1QztnUUFpQjhELGFBQWE7c0JBQXpFLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQXdCRCx3QkFBd0I7c0JBQWpGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEJsb2NrVUksIE5nQmxvY2tVSSB9IGZyb20gJ25nLWJsb2NrLXVpJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1Blcm1pc3Npb25zTW9kZWxzL1Blcm1pc3Npb25Nb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJzSURSZXF1ZXN0TW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvVXNlcnNJRFJlcXVlc3RNb2RlbCc7XHJcbmltcG9ydCB7IERhdGFTZWNyZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25zU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBQYWdpbmdDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvUGFnaW5nL1BhZ2luZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcGVybWlzc2lvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wZXJtaXNzaW9ucy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgQXBpVXJsID0gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuQXBpVXJsXHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIG9yZ2FuaXphdGlvbkxpc3QgPSBbXTtcclxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgcGVybWlzc2lvbnNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHBlcm1pc3Npb25zUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkUGVybWlzc2lvbnNQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgcGVybWlzc2lvbnNQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgdGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIGlzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnUGVybWlzc2lvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDtcclxuXHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgYWRkUGVybWlzc2lvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRQZXJtaXNzaW9uRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgbXVsdGlMaW5ndWFsTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBzeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBvcmdhbml6YXRpb246IERyb3Bkb3duT3B0aW9ucztcclxuICBpc0FkZFBlcm1pc3Npb25Gb3JtTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vRWRpdCBNb2RlbCBDb250cm9sc1xyXG4gIGVkaXRQZXJtaXNzaW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGVkaXRQZXJtaXNzaW9uRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgZWRpdE11bHRpTGluZ3VhbE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zXHJcbiAgZWRpdFN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIGVkaXRPcmdhbml6YXRpb246IERyb3Bkb3duT3B0aW9ucztcclxuICBpc0VkaXRQZXJtaXNzaW9uTW9kZWxMb2FkZWQ6IGJvb2xlYW47XHJcbiAgZWRpdFBlcm1pc3Npb25JZDogbnVtYmVyO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVkUGVybWlzc2lvbklkOiBzdHJpbmc7XHJcbiAgZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOlJlcXVlc3RIYW5kbGVyU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvL1BhZ2UgaGVhZGVyIChicmVhZGNydW1iIGFuZCB0aXRsZSlcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQZXJtaXNzaW9uc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLlByb2R1Y3Rpb25Nb2RlID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0UHJvZHVjdGlvbk1vZGUoKVxyXG4gICAgLy9pbml0aWFsaXplIHBhZ2VcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRQZXJtaXNzaW9uc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zUGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcbiAgICB0aGlzLmZpbHRlcmVkUGVybWlzc2lvbnNQYWdpbmdSZXN1bHQgPSB0aGlzLnBlcm1pc3Npb25zUGFnaW5nUmVzdWx0XHJcblxyXG4gIH1cclxuXHJcbiAgLy9GaWx0ZXIgZnVuY3Rpb25zXHJcbiAgcmVzZXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uc0Zvcm0uY29udHJvbHNbXCJzZWFyY2hUZXh0Qm94XCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5sb2FkRHJvcGRvd24oKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgZHJvcGRvd25SZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gZHJvcGRvd25SZXNwb25zZU1vZGVsO1xyXG4gICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5OYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3guUGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIilcclxuXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuQWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcblxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uc1BhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0UGVybWlzc2lvbnNCeUZpbHRlcic7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnNQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnNQYWdpbmcuRmlsdGVycyA9IFt0aGlzLnRleHRJbnB1dEZpbHRlcl1cclxuICAgICAgdGhpcy5pc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICAvLy8vLy8vLy8vLy8vIFN0YXJ0IGFkZCBQZXJtaXNzaW9uIFBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgc2hvd0FkZFBlcm1pc3Npb25Nb2RhbChhZGRQZXJtaXNzaW9uTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy5hZGRQZXJtaXNzaW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWRkUGVybWlzc2lvbkZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuYWRkUGVybWlzc2lvbkZvcm1cclxuICAgIHRoaXMuYWRkUGVybWlzc2lvbkZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFBlcm1pc3Npb25Nb2RlbDtcclxuICAgIHRoaXMuYWRkUGVybWlzc2lvbkZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkUGVybWlzc2lvbkZ1bmN0aW9uO1xyXG4gICAgdGhpcy5hZGRQZXJtaXNzaW9uRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuTmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lLkFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZS5WYWx1ZSA9IG51bGw7XHJcblxyXG5cclxuICAgIHRoaXMuc3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zeXNOYW1lLk5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMuc3lzTmFtZS5MYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgdGhpcy5zeXNOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuc3lzTmFtZS5WYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5vcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5OYW1lID0gXCJPcmdhbml6YXRpb25cIlxyXG4gICAgdGhpcy5vcmdhbml6YXRpb24uTGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uLkRhdGFTb3VyY2UgPSB0aGlzLm9yZ2FuaXphdGlvbkxpc3RcclxuICAgIHRoaXMub3JnYW5pemF0aW9uLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGFkZFBlcm1pc3Npb25Nb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWRkUGVybWlzc2lvbk1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZFBlcm1pc3Npb25Gb3JtLnZhbHVlO1xyXG4gICAgbGV0IEFkZFBlcm1pc3Npb25Nb2RlbDogUGVybWlzc2lvbk1vZGVsID0gbmV3IFBlcm1pc3Npb25Nb2RlbCgpO1xyXG4gICAgaWYgKHRoaXMuUHJvZHVjdGlvbk1vZGUgPT0gZmFsc2UpXHJcbiAgICBBZGRQZXJtaXNzaW9uTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWU7XHJcbiAgIFxyXG4gICAgQWRkUGVybWlzc2lvbk1vZGVsLk5hbWUuQXJhYmljID0gUmVzdWx0TW9kZWwuTmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgIEFkZFBlcm1pc3Npb25Nb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5OYW1lLkVuZ2xpc2hWYWx1ZTtcclxuICAgIEFkZFBlcm1pc3Npb25Nb2RlbC5Pcmdhbml6YXRpb25JRCA9IE51bWJlcihSZXN1bHRNb2RlbC5Pcmdhbml6YXRpb24pO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKEFkZFBlcm1pc3Npb25Nb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZFBlcm1pc3Npb25GdW5jdGlvbiA9IChBZGRQZXJtaXNzaW9uTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmFkZFBlcm1pc3Npb24oQWRkUGVybWlzc2lvbk1vZGVsKTtcclxuICB9XHJcbiAgLy8vLy8vLy8vLy8vIEVuZCBvZiBhZGQgUGVybWlzc2lvbiBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5cclxuICAvLy8vLy8vLy8vL1N0YXJ0IG9mIGVkaXQgUGVybWlzc2lvbiBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dFZGl0UGVybWlzc2lvbk1vZGFsKHBlcm1pc3Npb25JRDogc3RyaW5nLCBlZGl0UGVybWlzc2lvbk1vZGFsKSB7XHJcblxyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuZWRpdFBlcm1pc3Npb25Gb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLmVkaXRQZXJtaXNzaW9uRm9ybVxyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvbkZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRQZXJtaXNzaW9uTW9kZWw7XHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0UGVybWlzc2lvbkZ1bmN0aW9uO1xyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvbkZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuXHJcbiAgICB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5nZXRQZXJtaXNzaW9uKHBlcm1pc3Npb25JRCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgUGVybWlzc2lvbiA9IHJlc3VsdC5tb2RlbCBhcyBhbnk7XHJcbiAgICAgIGxldCBOYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgTmFtZS5BcmFiaWMgPSBQZXJtaXNzaW9uLm5hbWUuYXJhYmljO1xyXG4gICAgICBOYW1lLkVuZ2xpc2ggPSBQZXJtaXNzaW9uLm5hbWUuZW5nbGlzaDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS5OYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLlZhbHVlID0gTmFtZTtcclxuXHJcblxyXG4gICAgICB0aGlzLmVkaXRQZXJtaXNzaW9uSWQgPSBQZXJtaXNzaW9uLmlkXHJcblxyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUuTmFtZSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lLkxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lLlZhbHVlID0gUGVybWlzc2lvbi5zeXNOYW1lO1xyXG5cclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmVkaXRPcmdhbml6YXRpb24uTmFtZSA9IFwiT3JnYW5pemF0aW9uXCJcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLkxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIlxyXG4gICAgICB0aGlzLmVkaXRPcmdhbml6YXRpb24uU2VsZWN0ZWRJdGVtcyA9IHRoaXMub3JnYW5pemF0aW9uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBQZXJtaXNzaW9uLm9yZ2FuaXphdGlvbklEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLkRhdGFTb3VyY2UgPSB0aGlzLm9yZ2FuaXphdGlvbkxpc3RcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oZWRpdFBlcm1pc3Npb25Nb2RhbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0UGVybWlzc2lvbk1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmVkaXRQZXJtaXNzaW9uRm9ybS52YWx1ZTtcclxuICAgIGxldCBFZGl0UGVybWlzc2lvbk1vZGVsID0gbmV3IFBlcm1pc3Npb25Nb2RlbCgpO1xyXG4gICAgRWRpdFBlcm1pc3Npb25Nb2RlbC5JZCA9IHRoaXMuZWRpdFBlcm1pc3Npb25JZDtcclxuICAgIEVkaXRQZXJtaXNzaW9uTW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5OYW1lLkFyYWJpY1ZhbHVlO1xyXG4gICAgRWRpdFBlcm1pc3Npb25Nb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5OYW1lLkVuZ2xpc2hWYWx1ZTtcclxuICAgIGlmICh0aGlzLlByb2R1Y3Rpb25Nb2RlID09IGZhbHNlKVxyXG4gICAgICBFZGl0UGVybWlzc2lvbk1vZGVsLlN5c05hbWUgPSBSZXN1bHRNb2RlbC5TeXNOYW1lO1xyXG4gICAgRWRpdFBlcm1pc3Npb25Nb2RlbC5Pcmdhbml6YXRpb25JRCA9IE51bWJlcihSZXN1bHRNb2RlbC5Pcmdhbml6YXRpb24pO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRQZXJtaXNzaW9uTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0UGVybWlzc2lvbkZ1bmN0aW9uID0gKEVkaXRQZXJtaXNzaW9uTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmVkaXRQZXJtaXNzaW9uKEVkaXRQZXJtaXNzaW9uTW9kZWwpXHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vRW5kIG9mIGVkaXQgUGVybWlzc2lvbiBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbiAgIC8vLy8vLy8vLy8vU3RhcnQgb2YgZGVsZXRlIFBlcm1pc3Npb24gcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgc2hvd0RlbGV0ZVBlcm1pc3Npb25Nb2RhbChQZXJtaXNzaW9uSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlbGV0ZWRQZXJtaXNzaW9uSWQgPSBQZXJtaXNzaW9uSWQ7XHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVkUGVybWlzc2lvbklkKTtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVQZXJtaXNzaW9uRnVuY3Rpb247XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdE1vZGVsID0gcGFyYW1BcnJheTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQZXJtaXNzaW9uRnVuY3Rpb24gPSAoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuZGVsZXRlUGVybWlzc2lvbihpZClcclxuICB9XHJcbiAgIC8vLy8vLy8vLy8vRW5kIG9mIGRlbGV0ZSBQZXJtaXNzaW9uIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgIGZpbHRlclBlcm1pc3Npb25MaXN0KHNlYXJjaFZhbHVlKXtcclxuICAgIGlmKHNlYXJjaFZhbHVlKVxyXG4gICAgdGhpcy5maWx0ZXJlZFBlcm1pc3Npb25zUGFnaW5nUmVzdWx0PSB0aGlzLnBlcm1pc3Npb25zUGFnaW5nUmVzdWx0LmZpbHRlcihpdGVtID0+IGl0ZW0ucGVybWlzc2lvbk5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICBlbHNlXHJcbiAgICB0aGlzLmZpbHRlcmVkUGVybWlzc2lvbnNQYWdpbmdSZXN1bHQ9IHRoaXMucGVybWlzc2lvbnNQYWdpbmdSZXN1bHRcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vLy8vRGVzdHJveSBPYnNlcnZhYmxlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiXHJcbjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuPGRpdiAgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWN1c3RvbS1oXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiaXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICBcclxuICAgICAgICA8QkJTRi1UZXh0Qm94ICBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cInBlcm1pc3Npb25zRm9ybVwiICAoT25DaGFuZ2UpPVwiZmlsdGVyUGVybWlzc2lvbkxpc3QoJGV2ZW50KVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgXHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIiAoY2xpY2spPVwic2hvd0FkZFBlcm1pc3Npb25Nb2RhbChBZGRQZXJtaXNzaW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoICBjbGFzcz1cIm1pbi13LTE1MHB4XCIqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN5c05hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuXHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IFBlcm1pc3Npb24gb2YgZmlsdGVyZWRQZXJtaXNzaW9uc1BhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICB7e1Blcm1pc3Npb24ucGVybWlzc2lvbk5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCIgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj57e1Blcm1pc3Npb24uc3lzTmFtZX19PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFBlcm1pc3Npb25Nb2RhbChQZXJtaXNzaW9uLnBlcm1JZEVuYyxFZGl0UGVybWlzc2lvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlUGVybWlzc2lvbk1vZGFsKFBlcm1pc3Npb24ucGVybUlkRW5jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmVkUGVybWlzc2lvbnNQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJQcm9kdWN0aW9uTW9kZSA/ICczJyA6ICc0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8IS0tZW5kOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRQZXJtaXNzaW9uc0xpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJwZXJtaXNzaW9uc1BhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJwZXJtaXNzaW9uc0Zvcm1cIiAjUGVybWlzc2lvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcbiAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNBZGRQZXJtaXNzaW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRQZXJtaXNzaW9uc1wiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiYWRkUGVybWlzc2lvbkZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJtdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cImFkZFBlcm1pc3Npb25Gb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+IFxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic3lzTmFtZVwiIFtncm91cF09XCJhZGRQZXJtaXNzaW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIm9yZ2FuaXphdGlvblwiIFtncm91cF09XCJhZGRQZXJtaXNzaW9uRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+ICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlUGVybWlzc2lvbk1vZGFsIGlkPVwiQ2xvc2VQZXJtaXNzaW9uTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICBcclxuICA8IS0tIEVkaXQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNFZGl0UGVybWlzc2lvbk1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRQZXJtaXNzaW9uXCIpfX0gPC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiZWRpdFBlcm1pc3Npb25Gb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiZWRpdE11bHRpTGluZ3VhbE5hbWVcIiBbZ3JvdXBdPVwiZWRpdFBlcm1pc3Npb25Gb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImVkaXRTeXNOYW1lXCIgW2dyb3VwXT1cImVkaXRQZXJtaXNzaW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cImVkaXRPcmdhbml6YXRpb25cIiBbZ3JvdXBdPVwiZWRpdFBlcm1pc3Npb25Gb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjQ2xvc2VFZGl0UGVybWlzc2lvbk1vZGFsIGlkPVwiQ2xvc2VFZGl0UGVybWlzc2lvbk1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPCEtLWRlbGV0ZSBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJkZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIiAjQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPlxyXG48L0JCU0YtQ29uZmlybWF0aW9uTW9kYWw+XHJcblxyXG4iXX0=
|