@valtimo/components 12.0.0 → 12.1.1
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/assets/css/carbon.scss +3 -0
- package/assets/css/compatibility.scss +22 -0
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +2 -2
- package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +11 -2
- package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +132 -39
- package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +7 -3
- package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +37 -5
- package/esm2022/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.mjs +165 -0
- package/esm2022/lib/components/carbon-list/services/index.mjs +17 -0
- package/esm2022/lib/components/date-picker/date-picker.component.mjs +1 -1
- package/esm2022/lib/components/form-io/form-io-builder.component.mjs +2 -2
- package/esm2022/lib/components/input/input.component.mjs +1 -1
- package/esm2022/lib/components/input-label/input-label.component.mjs +6 -3
- package/esm2022/lib/components/list/list.module.mjs +22 -4
- package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +1 -1
- package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +3 -3
- package/esm2022/lib/components/page-header/page-header.component.mjs +2 -2
- package/esm2022/lib/components/radio/radio.component.mjs +1 -1
- package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +92 -75
- package/esm2022/lib/components/search-fields/search-fields.component.mjs +23 -13
- package/esm2022/lib/components/select/select.component.mjs +1 -1
- package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +4 -4
- package/esm2022/lib/components/stepper/stepper.module.mjs +5 -4
- package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +13 -17
- package/esm2022/lib/components/view-content/type-converters/currencyTypeConverter.mjs +37 -0
- package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +31 -0
- package/esm2022/lib/components/view-content/type-converters/dateTypeConverter.mjs +5 -3
- package/esm2022/lib/components/view-content/type-converters/enumTypeConverter.mjs +2 -2
- package/esm2022/lib/components/view-content/type-converters/numberTypeConverter.mjs +37 -0
- package/esm2022/lib/components/view-content/type-converters/percentTypeConverter.mjs +37 -0
- package/esm2022/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +1 -1
- package/esm2022/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +1 -1
- package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +1 -1
- package/esm2022/lib/components/view-content/type-converters/type-converters.model.mjs +60 -17
- package/esm2022/lib/components/view-content/view-content.module.mjs +33 -0
- package/esm2022/lib/components/view-content/view-content.service.mjs +11 -22
- package/esm2022/lib/components/widget/widget.component.mjs +2 -2
- package/esm2022/lib/constants/carbon.constants.mjs +2 -1
- package/esm2022/lib/directives/fit-page/fit-page.directive.mjs +2 -2
- package/esm2022/lib/models/carbon-list.model.mjs +5 -2
- package/esm2022/lib/models/carbon-tag.model.mjs +2 -2
- package/esm2022/lib/models/modal.model.mjs +1 -1
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/services/key-generator.service.mjs +50 -0
- package/esm2022/lib/services/key-state.service.mjs +33 -0
- package/fesm2022/valtimo-components.mjs +816 -195
- package/fesm2022/valtimo-components.mjs.map +1 -1
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts +3 -0
- package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.component.d.ts +28 -9
- package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts +2 -1
- package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
- package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts +13 -3
- package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts.map +1 -1
- package/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.d.ts +40 -0
- package/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.d.ts.map +1 -0
- package/lib/components/carbon-list/services/index.d.ts +2 -0
- package/lib/components/carbon-list/services/index.d.ts.map +1 -0
- package/lib/components/form-io/form-io-builder.component.d.ts.map +1 -1
- package/lib/components/input-label/input-label.component.d.ts +2 -1
- package/lib/components/input-label/input-label.component.d.ts.map +1 -1
- package/lib/components/list/list.module.d.ts +2 -1
- package/lib/components/list/list.module.d.ts.map +1 -1
- package/lib/components/right-sidebar/right-sidebar.component.d.ts +17 -20
- package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
- package/lib/components/search-fields/search-fields.component.d.ts +4 -4
- package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
- package/lib/components/stepper/stepper.module.d.ts +2 -1
- package/lib/components/stepper/stepper.module.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts +6 -0
- package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts +6 -0
- package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/dateTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/enumTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/numberTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/numberTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/percentTypeConverter.d.ts +7 -0
- package/lib/components/view-content/type-converters/percentTypeConverter.d.ts.map +1 -0
- package/lib/components/view-content/type-converters/relatedFilesTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/stringTypeConverter.d.ts.map +1 -1
- package/lib/components/view-content/type-converters/type-converters.model.d.ts +13 -1
- package/lib/components/view-content/type-converters/type-converters.model.d.ts.map +1 -1
- package/lib/components/view-content/view-content.module.d.ts +8 -0
- package/lib/components/view-content/view-content.module.d.ts.map +1 -0
- package/lib/components/view-content/view-content.service.d.ts +1 -5
- package/lib/components/view-content/view-content.service.d.ts.map +1 -1
- package/lib/constants/carbon.constants.d.ts +1 -0
- package/lib/constants/carbon.constants.d.ts.map +1 -1
- package/lib/models/carbon-list.model.d.ts +15 -3
- package/lib/models/carbon-list.model.d.ts.map +1 -1
- package/lib/models/carbon-tag.model.d.ts +2 -0
- package/lib/models/carbon-tag.model.d.ts.map +1 -1
- package/lib/models/modal.model.d.ts +2 -1
- package/lib/models/modal.model.d.ts.map +1 -1
- package/lib/services/index.d.ts +1 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/key-generator.service.d.ts +8 -0
- package/lib/services/key-generator.service.d.ts.map +1 -0
- package/lib/services/key-state.service.d.ts +12 -0
- package/lib/services/key-state.service.d.ts.map +1 -0
- package/package.json +4 -2
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2015-2024 Ritense BV, the Netherlands.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under EUPL, Version 1.2 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" basis,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
1
16
|
import { Component, HostListener, ViewEncapsulation, } from '@angular/core';
|
|
2
17
|
import { FormControl } from '@angular/forms';
|
|
3
18
|
import { SelectableCarbonTheme } from '../../models';
|
|
@@ -9,12 +24,10 @@ import * as i1 from "@ngx-translate/core";
|
|
|
9
24
|
import * as i2 from "@valtimo/security";
|
|
10
25
|
import * as i3 from "@angular/forms";
|
|
11
26
|
import * as i4 from "../version/version.service";
|
|
12
|
-
import * as i5 from "
|
|
13
|
-
import * as i6 from "
|
|
14
|
-
import * as i7 from "
|
|
15
|
-
import * as i8 from "
|
|
16
|
-
import * as i9 from "@angular/common";
|
|
17
|
-
import * as i10 from "carbon-components-angular";
|
|
27
|
+
import * as i5 from "../../services";
|
|
28
|
+
import * as i6 from "@valtimo/config";
|
|
29
|
+
import * as i7 from "@angular/common";
|
|
30
|
+
import * as i8 from "carbon-components-angular";
|
|
18
31
|
export class RightSidebarComponent {
|
|
19
32
|
onPageClick(targetElement) {
|
|
20
33
|
combineLatest([this.shellService.panelExpanded$, this.shellService.mouseOnTopBar$])
|
|
@@ -26,28 +39,17 @@ export class RightSidebarComponent {
|
|
|
26
39
|
}
|
|
27
40
|
});
|
|
28
41
|
}
|
|
29
|
-
constructor(
|
|
30
|
-
this.
|
|
42
|
+
constructor(translateService, userProviderService, formBuilder, versionService, shellService, elementRef, configService, userSettingsService, pageHeaderService, cdsThemeService) {
|
|
43
|
+
this.translateService = translateService;
|
|
31
44
|
this.userProviderService = userProviderService;
|
|
32
45
|
this.formBuilder = formBuilder;
|
|
33
46
|
this.versionService = versionService;
|
|
34
|
-
this.http = http;
|
|
35
|
-
this.logger = logger;
|
|
36
47
|
this.shellService = shellService;
|
|
37
48
|
this.elementRef = elementRef;
|
|
38
49
|
this.configService = configService;
|
|
39
50
|
this.userSettingsService = userSettingsService;
|
|
40
51
|
this.pageHeaderService = pageHeaderService;
|
|
41
52
|
this.cdsThemeService = cdsThemeService;
|
|
42
|
-
this.frequencies = [
|
|
43
|
-
'emailNotificationOnMonday',
|
|
44
|
-
'emailNotificationOnTuesday',
|
|
45
|
-
'emailNotificationOnWednesday',
|
|
46
|
-
'emailNotificationOnThursday',
|
|
47
|
-
'emailNotificationOnFriday',
|
|
48
|
-
'emailNotificationOnSaturday',
|
|
49
|
-
'emailNotificationOnSunday',
|
|
50
|
-
];
|
|
51
53
|
this.settingsForm = this.formBuilder.group({
|
|
52
54
|
taskNotifications: new FormControl(false),
|
|
53
55
|
emailNotifications: new FormControl(false),
|
|
@@ -60,14 +62,14 @@ export class RightSidebarComponent {
|
|
|
60
62
|
emailNotificationOnSunday: new FormControl(false),
|
|
61
63
|
});
|
|
62
64
|
this.panelExpanded$ = this.shellService.panelExpanded$;
|
|
63
|
-
this.
|
|
64
|
-
this.
|
|
65
|
+
this._selectedLanguage$ = new BehaviorSubject('');
|
|
66
|
+
this._languageOptions$ = new BehaviorSubject([]);
|
|
65
67
|
this.languageListItems$ = combineLatest([
|
|
66
|
-
this.
|
|
67
|
-
this.
|
|
68
|
-
this.
|
|
68
|
+
this._languageOptions$,
|
|
69
|
+
this._selectedLanguage$,
|
|
70
|
+
this.translateService.stream('key'),
|
|
69
71
|
]).pipe(map(([languageOptions, selectedLanguage]) => languageOptions.map(languageKey => ({
|
|
70
|
-
content: this.
|
|
72
|
+
content: this.translateService.instant('settings.language.options.' + languageKey),
|
|
71
73
|
key: languageKey,
|
|
72
74
|
selected: selectedLanguage === languageKey,
|
|
73
75
|
}))));
|
|
@@ -75,82 +77,70 @@ export class RightSidebarComponent {
|
|
|
75
77
|
this.userSubject$ = this.userProviderService.getUserSubject();
|
|
76
78
|
this.updatingSettings$ = new BehaviorSubject(true);
|
|
77
79
|
this.updatingUserSettings$ = new BehaviorSubject(true);
|
|
78
|
-
this.
|
|
79
|
-
this.emailNotificationSettingsWithSideEffects$ = this.
|
|
80
|
+
this._emailNotificationSettings$ = new BehaviorSubject(undefined);
|
|
81
|
+
this.emailNotificationSettingsWithSideEffects$ = this._emailNotificationSettings$.pipe(tap(results => {
|
|
80
82
|
if (results) {
|
|
81
83
|
this.settingsForm.setValue(results);
|
|
82
84
|
this.updatingSettings$.next(false);
|
|
83
85
|
}
|
|
84
86
|
}));
|
|
85
87
|
this.collapsibleWidescreenMenu$ = this.shellService.collapsibleWidescreenMenu$;
|
|
86
|
-
this.preferredTheme$ = this.cdsThemeService.preferredTheme$;
|
|
87
88
|
this.compactMode$ = this.pageHeaderService.compactMode$;
|
|
88
89
|
this.showUserNameInTopBar$ = this.pageHeaderService.showUserNameInTopBar$;
|
|
89
|
-
this.
|
|
90
|
-
this.isAdmin$ = this.userProviderService
|
|
91
|
-
.getUserSubject()
|
|
92
|
-
.pipe(map(userIdentity => userIdentity?.roles.includes('ROLE_ADMIN')));
|
|
90
|
+
this._preferredTheme$ = this.cdsThemeService.preferredTheme$;
|
|
93
91
|
this.showValtimoVersions = true;
|
|
94
92
|
this.themeOptions$ = combineLatest([
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
93
|
+
this._preferredTheme$,
|
|
94
|
+
this.translateService.stream('key'),
|
|
97
95
|
]).pipe(map(([preferredTheme]) => [
|
|
98
96
|
{
|
|
99
|
-
content: this.
|
|
97
|
+
content: this.translateService.instant('settings.interface.themes.light'),
|
|
100
98
|
key: SelectableCarbonTheme.G10,
|
|
101
99
|
selected: preferredTheme === SelectableCarbonTheme.G10,
|
|
102
100
|
},
|
|
103
101
|
{
|
|
104
|
-
content: this.
|
|
102
|
+
content: this.translateService.instant('settings.interface.themes.dark'),
|
|
105
103
|
key: SelectableCarbonTheme.G90,
|
|
106
104
|
selected: preferredTheme === SelectableCarbonTheme.G90,
|
|
107
105
|
},
|
|
108
106
|
{
|
|
109
|
-
content: this.
|
|
107
|
+
content: this.translateService.instant('settings.interface.themes.system'),
|
|
110
108
|
key: SelectableCarbonTheme.SYSTEM,
|
|
111
109
|
selected: preferredTheme === SelectableCarbonTheme.SYSTEM,
|
|
112
110
|
},
|
|
113
111
|
]));
|
|
114
|
-
this.
|
|
115
|
-
this.enableCompactModeToggle =
|
|
112
|
+
this.allowUserThemeSwitching = true;
|
|
113
|
+
this.enableCompactModeToggle = true;
|
|
116
114
|
this.enableShowUserNameToggle = false;
|
|
117
|
-
this.
|
|
118
|
-
this.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this.allowUserThemeSwitching =
|
|
124
|
-
!!this.configService?.config?.featureToggles?.allowUserThemeSwitching ?? true;
|
|
125
|
-
this.enableCompactModeToggle =
|
|
126
|
-
!!this.configService?.config?.featureToggles.enableCompactModeToggle;
|
|
127
|
-
this.enableShowUserNameToggle =
|
|
128
|
-
!!this.configService?.config?.featureToggles.enableUserNameInTopBarToggle;
|
|
115
|
+
this.showPlantATreeButton = false;
|
|
116
|
+
this._hideValtimoVersionsForNonAdmins = false;
|
|
117
|
+
this._isAdmin$ = this.userProviderService
|
|
118
|
+
.getUserSubject()
|
|
119
|
+
.pipe(map(userIdentity => userIdentity?.roles.includes('ROLE_ADMIN')));
|
|
120
|
+
this._subscriptions = new Subscription();
|
|
129
121
|
}
|
|
130
122
|
ngOnInit() {
|
|
123
|
+
this.initSettings();
|
|
124
|
+
this.initFrontendVersion();
|
|
125
|
+
this.openShowVersionsSubscription();
|
|
131
126
|
this.setLanguage();
|
|
132
127
|
this.loadEmailNotificationSettings();
|
|
133
128
|
this.openFormSubscription();
|
|
134
|
-
this.showPlantATreeButton = this.configService.config.featureToggles?.showPlantATreeButton;
|
|
135
|
-
this.resetUrl = this.configService.config.changePasswordUrl?.endpointUri;
|
|
136
|
-
this.overrideFeedbackMenuItemToMailTo =
|
|
137
|
-
this.configService.config?.overrideFeedbackMenuItemToMailTo;
|
|
138
129
|
this.getUserSettings();
|
|
139
130
|
}
|
|
140
131
|
ngOnDestroy() {
|
|
141
|
-
this.formSubscription?.unsubscribe();
|
|
142
132
|
this._subscriptions.unsubscribe();
|
|
143
133
|
}
|
|
144
134
|
updateUserLanguage(langKey, saveSettings = true) {
|
|
145
135
|
const langKeyToUse = langKey?.item?.key
|
|
146
136
|
? langKey?.item.key
|
|
147
137
|
: langKey;
|
|
148
|
-
this.
|
|
138
|
+
this.translateService
|
|
149
139
|
.use(langKeyToUse)
|
|
150
140
|
.pipe(take(1))
|
|
151
141
|
.subscribe(() => {
|
|
152
142
|
localStorage.setItem('langKey', langKeyToUse);
|
|
153
|
-
this.
|
|
143
|
+
this._selectedLanguage$.next(langKeyToUse);
|
|
154
144
|
if (saveSettings) {
|
|
155
145
|
this.saveUserSettings();
|
|
156
146
|
}
|
|
@@ -190,9 +180,29 @@ export class RightSidebarComponent {
|
|
|
190
180
|
logout() {
|
|
191
181
|
this.userProviderService.logout();
|
|
192
182
|
}
|
|
183
|
+
initSettings() {
|
|
184
|
+
const config = this.configService?.config;
|
|
185
|
+
const featureToggles = config?.featureToggles || {};
|
|
186
|
+
this.resetUrl = config?.changePasswordUrl?.endpointUri;
|
|
187
|
+
this.overrideFeedbackMenuItemToMailTo = config?.overrideFeedbackMenuItemToMailTo;
|
|
188
|
+
this.enableShowUserNameToggle = !!featureToggles.enableUserNameInTopBarToggle;
|
|
189
|
+
this.showPlantATreeButton = !!featureToggles.showPlantATreeButton;
|
|
190
|
+
if (featureToggles.hasOwnProperty('allowUserThemeSwitching')) {
|
|
191
|
+
this.allowUserThemeSwitching = !!featureToggles.allowUserThemeSwitching;
|
|
192
|
+
}
|
|
193
|
+
if (featureToggles.hasOwnProperty('enableCompactModeToggle')) {
|
|
194
|
+
this.enableCompactModeToggle = !!featureToggles.enableCompactModeToggle;
|
|
195
|
+
}
|
|
196
|
+
if (featureToggles.hasOwnProperty('hideValtimoVersionsForNonAdmins')) {
|
|
197
|
+
this._hideValtimoVersionsForNonAdmins = !!featureToggles.hideValtimoVersionsForNonAdmins;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
initFrontendVersion() {
|
|
201
|
+
this.frontendVersion = VERSIONS?.frontendLibraries;
|
|
202
|
+
}
|
|
193
203
|
openFormSubscription() {
|
|
194
|
-
this.
|
|
195
|
-
this.
|
|
204
|
+
this._subscriptions.add(combineLatest([
|
|
205
|
+
this._emailNotificationSettings$,
|
|
196
206
|
this.settingsForm.valueChanges,
|
|
197
207
|
this.updatingSettings$,
|
|
198
208
|
])
|
|
@@ -203,30 +213,30 @@ export class RightSidebarComponent {
|
|
|
203
213
|
if (settingsStringified !== formStringified && !updatingSettings) {
|
|
204
214
|
this.updatingSettings$.next(true);
|
|
205
215
|
this.userProviderService.updateEmailNotificationSettings(formValue).subscribe(results => {
|
|
206
|
-
this.
|
|
216
|
+
this._emailNotificationSettings$.next(results);
|
|
207
217
|
this.updatingSettings$.next(false);
|
|
208
218
|
}, () => {
|
|
209
|
-
this.
|
|
219
|
+
this._emailNotificationSettings$.next(settings);
|
|
210
220
|
this.updatingSettings$.next(false);
|
|
211
221
|
});
|
|
212
222
|
}
|
|
213
223
|
}
|
|
214
224
|
}))
|
|
215
|
-
.subscribe();
|
|
225
|
+
.subscribe());
|
|
216
226
|
}
|
|
217
227
|
loadEmailNotificationSettings() {
|
|
218
228
|
this.userProviderService.getEmailNotificationSettings().subscribe(results => {
|
|
219
229
|
if (results) {
|
|
220
|
-
this.
|
|
230
|
+
this._emailNotificationSettings$.next(results);
|
|
221
231
|
}
|
|
222
232
|
else {
|
|
223
|
-
this.
|
|
233
|
+
this._emailNotificationSettings$.next(this.settingsForm.value);
|
|
224
234
|
}
|
|
225
235
|
});
|
|
226
236
|
}
|
|
227
237
|
setLanguage() {
|
|
228
|
-
this.
|
|
229
|
-
this.
|
|
238
|
+
this._selectedLanguage$.next(this.translateService.currentLang);
|
|
239
|
+
this._languageOptions$.next(this.translateService.langs);
|
|
230
240
|
}
|
|
231
241
|
sortObjectAlphabetically(jsObject) {
|
|
232
242
|
return Object.keys(jsObject)
|
|
@@ -250,11 +260,11 @@ export class RightSidebarComponent {
|
|
|
250
260
|
saveUserSettings() {
|
|
251
261
|
this.updatingUserSettings$.next(true);
|
|
252
262
|
combineLatest([
|
|
253
|
-
this.
|
|
263
|
+
this._selectedLanguage$,
|
|
254
264
|
this.collapsibleWidescreenMenu$,
|
|
255
265
|
this.compactMode$,
|
|
256
266
|
this.showUserNameInTopBar$,
|
|
257
|
-
this.
|
|
267
|
+
this._preferredTheme$,
|
|
258
268
|
])
|
|
259
269
|
.pipe(take(1), switchMap(([languageCode, collapsibleWidescreenMenu, compactMode, showUserNameInTopBar, preferredTheme,]) => this.userSettingsService.saveUserSettings({
|
|
260
270
|
collapsibleWidescreenMenu,
|
|
@@ -268,7 +278,7 @@ export class RightSidebarComponent {
|
|
|
268
278
|
});
|
|
269
279
|
}
|
|
270
280
|
setUserSettings(settings) {
|
|
271
|
-
this.
|
|
281
|
+
this._selectedLanguage$.next(settings.languageCode);
|
|
272
282
|
this.updateUserLanguage(settings.languageCode, false);
|
|
273
283
|
this.setCollapsibleWidescreenMenu(settings.collapsibleWidescreenMenu, false);
|
|
274
284
|
if (this.enableCompactModeToggle)
|
|
@@ -279,14 +289,21 @@ export class RightSidebarComponent {
|
|
|
279
289
|
this.setPreferredTheme(settings.preferredTheme, false);
|
|
280
290
|
}
|
|
281
291
|
}
|
|
282
|
-
|
|
283
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: RightSidebarComponent, selector: "valtimo-right-sidebar", host: { listeners: { "document:click": "onPageClick($event.target)" } }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"right-sidebar-menu\">\n <cds-panel [expanded]=\"panelExpanded$ | async\">\n <div cdsGrid [condensed]=\"true\">\n <div cdsRow>\n <div cdsCol [columnNumbers]=\"{lg: 16}\" class=\"menu-tabs\" cdsLayer>\n <cds-tabs class=\"cds--tab--list--full-width\">\n <cds-tab [heading]=\"'account.title' | translate\">\n <ng-container *ngTemplateOutlet=\"accountTabTemplate\"></ng-container>\n </cds-tab>\n <cds-tab [heading]=\"'settings.title' | translate\">\n <ng-container *ngTemplateOutlet=\"settingsTabTemplate\"></ng-container>\n </cds-tab>\n </cds-tabs>\n </div>\n </div>\n </div>\n </cds-panel>\n</div>\n\n<ng-template #accountTabTemplate>\n <ng-container *ngTemplateOutlet=\"accountInformationTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"linksTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #settingsTabTemplate>\n <ng-container *ngTemplateOutlet=\"languageSettingsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"interfaceSettingsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"notificationSettingsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"versionTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #accountInformationTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.informationTitle' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"accountInformationTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #accountInformationTableTemplate>\n <div class=\"information-table account-information\">\n <cds-structured-list *ngIf=\"userSubject$ | async as userSubject\">\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.email' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.email }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.username' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.username }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.name' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.firstName + ' ' + userSubject.lastName }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #linksTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.quickLinks' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"linksTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #linksTableTemplate>\n <div class=\"information-table\">\n <cds-structured-list>\n <cds-list-row>\n <cds-list-column>\n <a href=\"https://docs.valtimo.nl\" target=\"_blank\" cdsLink>{{\n 'account.links.help' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column *ngIf=\"!overrideFeedbackMenuItemToMailTo; else feedbackMailTo\">\n <a href=\"https://www.valtimo.nl/feedback\" target=\"_blank\" cdsLink>{{\n 'account.links.feedback' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row *ngIf=\"resetUrl\">\n <cds-list-column>\n <a [href]=\"resetUrl\" cdsLink>{{ 'account.links.resetPassword' | translate }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column>\n <a href=\"javascript:void(0)\" cdsLink (click)=\"logout()\">{{\n 'account.links.signOut' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row *ngIf=\"showPlantATreeButton\">\n <cds-list-column>\n <a\n class=\"text-success\"\n href=\"mailto:valtimo@ritense.com?subject=Plant een boom voor Valtimo&body=Hallo Valtimo gebruiker,%0D%0DMet het versturen van deze e-mail gaan we gelijk aan de slag om een boom te planten. Hiermee compenseren we voor een deel de CO2 uitstoot van je Valtimo gebruik.%0D%0DMet Groene Groet,%0D%0DHet Valtimo team%0D%0D*Deze bomenplantactie kan 1 keer ingezet worden door elke geregistreerde Valtimo gebruiker.%0D%0D** Ritense plant ook jaarlijks bomen voor alle Valtimo installaties die in gebruik zijn.\"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.plantATree' | translate }}\n </a>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #languageSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.language.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <cds-dropdown\n [id]=\"'language-dropdown'\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"updateUserLanguage($event)\"\n >\n <cds-dropdown-list [items]=\"(languageListItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #notificationSettingsTemplate>\n <cds-structured-list *ngIf=\"emailNotificationSettingsWithSideEffects$ | async\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.notification.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.taskNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"taskNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.emailNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.emailNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"emailNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.taskNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #interfaceSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.interface.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.collapsibleMenu' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"collapsibleWidescreenMenu$ | async\"\n (ngModelChange)=\"setCollapsibleWidescreenMenu($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"allowUserThemeSwitching\">\n <cds-list-column>\n <cds-dropdown\n [label]=\"'settings.interface.themePreference' | translate\"\n [appendInline]=\"true\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"setPreferredTheme($event)\"\n [dropUp]=\"false\"\n >\n <cds-dropdown-list [items]=\"(themeOptions$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableCompactModeToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.compactMode' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"compactMode$ | async\"\n (ngModelChange)=\"setCompactMode($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableShowUserNameToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.showUserName' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"showUserNameInTopBar$ | async\"\n (ngModelChange)=\"setShowUserName($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #versionTemplate>\n <ng-container *ngIf=\"{backendVersion: backendVersion$ | async} as obs\">\n <cds-structured-list *ngIf=\"obs.backendVersion || frontendVersion\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.version.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row *ngIf=\"obs.backendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.' + obs.backendVersion.title | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ obs.backendVersion.version }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row *ngIf=\"frontendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.valtimo-frontend-libraries' | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ frontendVersion }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </ng-container>\n</ng-template>\n\n<ng-template #feedbackMailTo>\n <cds-list-column>\n <a\n [href]=\"\n 'mailto:' +\n overrideFeedbackMenuItemToMailTo.email +\n '?subject=' +\n (overrideFeedbackMenuItemToMailTo.subjectTranslationKey | translate) +\n '&body=' +\n (overrideFeedbackMenuItemToMailTo.bodyTranslationKey | translate)\n \"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.feedback' | translate }}\n </a>\n </cds-list-column>\n</ng-template>\n", styles: [".be-scroller-settings{padding-bottom:150px!important}.version-holder{position:fixed;bottom:0;width:259px;background-color:#f8f9fa}.info-text{line-height:1em!important;padding-right:70px;margin-bottom:15px}.right-sidebar-menu .cds--tab--list{width:100%}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item{width:12rem}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item button{width:100%}.right-sidebar-menu .menu-tabs .cds--tab--overflow-nav-button{display:none}.right-sidebar-menu .cds--header-panel{width:20rem;height:calc(100% - 3rem);transition:transform .11s cubic-bezier(.2,0,1,.9);transform:translate(100%)}.right-sidebar-menu .cds--header-panel--expanded{transform:translate(0)}.right-sidebar-menu .cds--panel--overlay{padding-top:0}.right-sidebar-menu .cds--tab-content{padding:0;outline:0}.right-sidebar-menu .cds--structured-list-td{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .toggle-group{display:flex;flex-direction:column}.right-sidebar-menu .toggle-group .description{margin-top:1rem}.right-sidebar-menu cds-structured-list:last-child .cds--structured-list-row:last-child{border-bottom:0}.right-sidebar-menu .cds--grid,.right-sidebar-menu .cds--row,.right-sidebar-menu .menu-tabs{height:100%}.right-sidebar-menu .cds--grid--condensed{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .cds--tab--list--full-width{display:flex;flex-direction:column;height:100%}.right-sidebar-menu cds-tab{overflow:auto}.right-sidebar-menu .build-information{display:inline-flex;flex-direction:column}.right-sidebar-menu .build-information:not(:last-child){margin-bottom:1rem}.right-sidebar-menu .build-information .tag-container .cds--tag{margin-left:0;margin-right:0;margin-bottom:0}.right-sidebar-menu .information-table cds-list-row:first-child{border-top:0}.right-sidebar-menu .information-table cds-list-row:first-child cds-list-column{border-top:0;padding-top:0}.right-sidebar-menu .information-table cds-list-row:last-child cds-list-column{padding-bottom:0}.right-sidebar-menu .information-table cds-list-row cds-list-column:first-child{padding-left:0!important}.account-information .cds--structured-list-td{display:inline-flex;flex-direction:column;border:none;min-width:100%}.account-information .cds--structured-list-td .cds--tag{margin:0;margin-top:.25rem;width:fit-content}.cds--select-input{background-color:var(--cds-field-02)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i10.Panel, selector: "cds-panel, ibm-panel", inputs: ["expanded", "ariaLabel"] }, { kind: "directive", type: i10.ColumnDirective, selector: "[cdsCol], [ibmCol]", inputs: ["class", "columnNumbers", "offsets", "columnHang"] }, { kind: "directive", type: i10.GridDirective, selector: "[cdsGrid], [ibmGrid]", inputs: ["condensed", "narrow", "fullWidth", "useCssGrid"] }, { kind: "directive", type: i10.RowDirective, selector: "[cdsRow], [ibmRow]", inputs: ["condensed", "narrow"] }, { kind: "component", type: i10.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i10.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive"], outputs: ["selected"] }, { kind: "component", type: i10.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i10.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i10.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i10.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "component", type: i10.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "component", type: i10.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "directive", type: i10.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "component", type: i10.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i10.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i10.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
292
|
+
openShowVersionsSubscription() {
|
|
293
|
+
this._subscriptions.add(this._isAdmin$.subscribe(isAdmin => {
|
|
294
|
+
if (this._hideValtimoVersionsForNonAdmins && !isAdmin) {
|
|
295
|
+
this.showValtimoVersions = false;
|
|
296
|
+
}
|
|
297
|
+
}));
|
|
298
|
+
}
|
|
299
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: RightSidebarComponent, deps: [{ token: i1.TranslateService }, { token: i2.UserProviderService }, { token: i3.FormBuilder }, { token: i4.VersionService }, { token: i5.ShellService }, { token: i0.ElementRef }, { token: i6.ConfigService }, { token: i6.UserSettingsService }, { token: i5.PageHeaderService }, { token: i5.CdsThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
300
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.3", type: RightSidebarComponent, selector: "valtimo-right-sidebar", host: { listeners: { "document:click": "onPageClick($event.target)" } }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"right-sidebar-menu\">\n <cds-panel [expanded]=\"panelExpanded$ | async\">\n <div cdsGrid [condensed]=\"true\">\n <div cdsRow>\n <div cdsCol [columnNumbers]=\"{lg: 16}\" class=\"menu-tabs\" cdsLayer>\n <cds-tabs class=\"cds--tab--list--full-width\">\n <cds-tab [heading]=\"'account.title' | translate\">\n <ng-container *ngTemplateOutlet=\"accountTabTemplate\"></ng-container>\n </cds-tab>\n\n <cds-tab [heading]=\"'settings.title' | translate\">\n <ng-container *ngTemplateOutlet=\"settingsTabTemplate\"></ng-container>\n </cds-tab>\n </cds-tabs>\n </div>\n </div>\n </div>\n </cds-panel>\n</div>\n\n<ng-template #accountTabTemplate>\n <ng-container *ngTemplateOutlet=\"accountInformationTemplate\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"linksTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #settingsTabTemplate>\n <ng-container *ngTemplateOutlet=\"languageSettingsTemplate\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"interfaceSettingsTemplate\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"notificationSettingsTemplate\"></ng-container>\n\n @if (showValtimoVersions) {\n <ng-container *ngTemplateOutlet=\"versionTemplate\"></ng-container>\n }\n</ng-template>\n\n<ng-template #accountInformationTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.informationTitle' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"accountInformationTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #accountInformationTableTemplate>\n <div class=\"information-table account-information\">\n <cds-structured-list *ngIf=\"userSubject$ | async as userSubject\">\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.email' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.email }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.username' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.username }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.name' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.firstName + ' ' + userSubject.lastName }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #linksTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.quickLinks' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"linksTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #linksTableTemplate>\n <div class=\"information-table\">\n <cds-structured-list>\n <cds-list-row>\n <cds-list-column>\n <a href=\"https://docs.valtimo.nl\" target=\"_blank\" cdsLink>{{\n 'account.links.help' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column *ngIf=\"!overrideFeedbackMenuItemToMailTo; else feedbackMailTo\">\n <a href=\"https://www.valtimo.nl/feedback\" target=\"_blank\" cdsLink>{{\n 'account.links.feedback' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"resetUrl\">\n <cds-list-column>\n <a [href]=\"resetUrl\" cdsLink>{{ 'account.links.resetPassword' | translate }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>\n <a href=\"javascript:void(0)\" cdsLink (click)=\"logout()\">{{\n 'account.links.signOut' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"showPlantATreeButton\">\n <cds-list-column>\n <a\n class=\"text-success\"\n href=\"mailto:valtimo@ritense.com?subject=Plant een boom voor Valtimo&body=Hallo Valtimo gebruiker,%0D%0DMet het versturen van deze e-mail gaan we gelijk aan de slag om een boom te planten. Hiermee compenseren we voor een deel de CO2 uitstoot van je Valtimo gebruik.%0D%0DMet Groene Groet,%0D%0DHet Valtimo team%0D%0D*Deze bomenplantactie kan 1 keer ingezet worden door elke geregistreerde Valtimo gebruiker.%0D%0D** Ritense plant ook jaarlijks bomen voor alle Valtimo installaties die in gebruik zijn.\"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.plantATree' | translate }}\n </a>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #languageSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.language.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <cds-dropdown\n [id]=\"'language-dropdown'\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"updateUserLanguage($event)\"\n >\n <cds-dropdown-list [items]=\"(languageListItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #notificationSettingsTemplate>\n <cds-structured-list *ngIf=\"emailNotificationSettingsWithSideEffects$ | async\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.notification.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.taskNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"taskNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.emailNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.emailNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"emailNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.taskNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #interfaceSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.interface.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.collapsibleMenu' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"collapsibleWidescreenMenu$ | async\"\n (ngModelChange)=\"setCollapsibleWidescreenMenu($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"allowUserThemeSwitching\">\n <cds-list-column>\n <cds-dropdown\n [label]=\"'settings.interface.themePreference' | translate\"\n [appendInline]=\"true\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"setPreferredTheme($event)\"\n [dropUp]=\"false\"\n >\n <cds-dropdown-list [items]=\"(themeOptions$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableCompactModeToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.compactMode' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"compactMode$ | async\"\n (ngModelChange)=\"setCompactMode($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableShowUserNameToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.showUserName' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"showUserNameInTopBar$ | async\"\n (ngModelChange)=\"setShowUserName($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #versionTemplate>\n <ng-container *ngIf=\"{backendVersion: backendVersion$ | async} as obs\">\n <cds-structured-list *ngIf=\"obs.backendVersion || frontendVersion\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.version.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row *ngIf=\"obs.backendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.' + obs.backendVersion.title | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ obs.backendVersion.version }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"frontendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.valtimo-frontend-libraries' | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ frontendVersion }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </ng-container>\n</ng-template>\n\n<ng-template #feedbackMailTo>\n <cds-list-column>\n <a\n [href]=\"\n 'mailto:' +\n overrideFeedbackMenuItemToMailTo.email +\n '?subject=' +\n (overrideFeedbackMenuItemToMailTo.subjectTranslationKey | translate) +\n '&body=' +\n (overrideFeedbackMenuItemToMailTo.bodyTranslationKey | translate)\n \"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.feedback' | translate }}\n </a>\n </cds-list-column>\n</ng-template>\n", styles: [".be-scroller-settings{padding-bottom:150px!important}.version-holder{position:fixed;bottom:0;width:259px;background-color:#f8f9fa}.info-text{line-height:1em!important;padding-right:70px;margin-bottom:15px}.right-sidebar-menu .cds--tab--list{width:100%}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item{width:12rem}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item button{width:100%}.right-sidebar-menu .menu-tabs .cds--tab--overflow-nav-button{display:none}.right-sidebar-menu .cds--header-panel{width:20rem;height:calc(100% - 3rem);transition:transform .11s cubic-bezier(.2,0,1,.9);transform:translate(100%)}.right-sidebar-menu .cds--header-panel--expanded{transform:translate(0)}.right-sidebar-menu .cds--panel--overlay{padding-top:0}.right-sidebar-menu .cds--tab-content{padding:0;outline:0}.right-sidebar-menu .cds--structured-list-td{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .toggle-group{display:flex;flex-direction:column}.right-sidebar-menu .toggle-group .description{margin-top:1rem}.right-sidebar-menu cds-structured-list:last-child .cds--structured-list-row:last-child{border-bottom:0}.right-sidebar-menu .cds--grid,.right-sidebar-menu .cds--row,.right-sidebar-menu .menu-tabs{height:100%}.right-sidebar-menu .cds--grid--condensed{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .cds--tab--list--full-width{display:flex;flex-direction:column;height:100%}.right-sidebar-menu cds-tab{overflow:auto}.right-sidebar-menu .build-information{display:inline-flex;flex-direction:column}.right-sidebar-menu .build-information:not(:last-child){margin-bottom:1rem}.right-sidebar-menu .build-information .tag-container .cds--tag{margin-left:0;margin-right:0;margin-bottom:0}.right-sidebar-menu .information-table cds-list-row:first-child{border-top:0}.right-sidebar-menu .information-table cds-list-row:first-child cds-list-column{border-top:0;padding-top:0}.right-sidebar-menu .information-table cds-list-row:last-child cds-list-column{padding-bottom:0}.right-sidebar-menu .information-table cds-list-row cds-list-column:first-child{padding-left:0!important}.account-information .cds--structured-list-td{display:inline-flex;flex-direction:column;border:none;min-width:100%}.account-information .cds--structured-list-td .cds--tag{margin:0;margin-top:.25rem;width:fit-content}.cds--select-input{background-color:var(--cds-field-02)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.Panel, selector: "cds-panel, ibm-panel", inputs: ["expanded", "ariaLabel"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[cdsCol], [ibmCol]", inputs: ["class", "columnNumbers", "offsets", "columnHang"] }, { kind: "directive", type: i8.GridDirective, selector: "[cdsGrid], [ibmGrid]", inputs: ["condensed", "narrow", "fullWidth", "useCssGrid"] }, { kind: "directive", type: i8.RowDirective, selector: "[cdsRow], [ibmRow]", inputs: ["condensed", "narrow"] }, { kind: "component", type: i8.Tabs, selector: "cds-tabs, ibm-tabs", inputs: ["position", "cacheActive", "followFocus", "isNavigation", "ariaLabel", "ariaLabelledby", "type", "theme", "skeleton"] }, { kind: "component", type: i8.Tab, selector: "cds-tab, ibm-tab", inputs: ["heading", "title", "context", "active", "disabled", "tabIndex", "id", "cacheActive"], outputs: ["selected"] }, { kind: "component", type: i8.StructuredList, selector: "cds-structured-list, ibm-structured-list", inputs: ["selection", "flushed", "condensed", "name", "skeleton"], outputs: ["selected"] }, { kind: "component", type: i8.ListRow, selector: "cds-list-row, ibm-list-row", inputs: ["selected", "label", "value"], outputs: ["change"] }, { kind: "component", type: i8.ListHeader, selector: "cds-list-header, ibm-list-header", inputs: ["skeleton"] }, { kind: "component", type: i8.ListColumn, selector: "cds-list-column, ibm-list-column", inputs: ["skeleton", "nowrap"] }, { kind: "component", type: i8.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "component", type: i8.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "directive", type: i8.Link, selector: "[cdsLink], [ibmLink]", inputs: ["inline", "disabled"] }, { kind: "component", type: i8.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i8.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i8.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
284
301
|
}
|
|
285
302
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: RightSidebarComponent, decorators: [{
|
|
286
303
|
type: Component,
|
|
287
|
-
args: [{ selector: 'valtimo-right-sidebar', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"right-sidebar-menu\">\n <cds-panel [expanded]=\"panelExpanded$ | async\">\n <div cdsGrid [condensed]=\"true\">\n <div cdsRow>\n <div cdsCol [columnNumbers]=\"{lg: 16}\" class=\"menu-tabs\" cdsLayer>\n <cds-tabs class=\"cds--tab--list--full-width\">\n <cds-tab [heading]=\"'account.title' | translate\">\n <ng-container *ngTemplateOutlet=\"accountTabTemplate\"></ng-container>\n </cds-tab>\n <cds-tab [heading]=\"'settings.title' | translate\">\n <ng-container *ngTemplateOutlet=\"settingsTabTemplate\"></ng-container>\n </cds-tab>\n </cds-tabs>\n </div>\n </div>\n </div>\n </cds-panel>\n</div>\n\n<ng-template #accountTabTemplate>\n <ng-container *ngTemplateOutlet=\"accountInformationTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"linksTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #settingsTabTemplate>\n <ng-container *ngTemplateOutlet=\"languageSettingsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"interfaceSettingsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"notificationSettingsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"versionTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #accountInformationTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.informationTitle' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"accountInformationTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #accountInformationTableTemplate>\n <div class=\"information-table account-information\">\n <cds-structured-list *ngIf=\"userSubject$ | async as userSubject\">\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.email' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.email }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.username' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.username }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.name' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.firstName + ' ' + userSubject.lastName }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #linksTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.quickLinks' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"linksTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #linksTableTemplate>\n <div class=\"information-table\">\n <cds-structured-list>\n <cds-list-row>\n <cds-list-column>\n <a href=\"https://docs.valtimo.nl\" target=\"_blank\" cdsLink>{{\n 'account.links.help' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column *ngIf=\"!overrideFeedbackMenuItemToMailTo; else feedbackMailTo\">\n <a href=\"https://www.valtimo.nl/feedback\" target=\"_blank\" cdsLink>{{\n 'account.links.feedback' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row *ngIf=\"resetUrl\">\n <cds-list-column>\n <a [href]=\"resetUrl\" cdsLink>{{ 'account.links.resetPassword' | translate }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column>\n <a href=\"javascript:void(0)\" cdsLink (click)=\"logout()\">{{\n 'account.links.signOut' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row *ngIf=\"showPlantATreeButton\">\n <cds-list-column>\n <a\n class=\"text-success\"\n href=\"mailto:valtimo@ritense.com?subject=Plant een boom voor Valtimo&body=Hallo Valtimo gebruiker,%0D%0DMet het versturen van deze e-mail gaan we gelijk aan de slag om een boom te planten. Hiermee compenseren we voor een deel de CO2 uitstoot van je Valtimo gebruik.%0D%0DMet Groene Groet,%0D%0DHet Valtimo team%0D%0D*Deze bomenplantactie kan 1 keer ingezet worden door elke geregistreerde Valtimo gebruiker.%0D%0D** Ritense plant ook jaarlijks bomen voor alle Valtimo installaties die in gebruik zijn.\"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.plantATree' | translate }}\n </a>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #languageSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.language.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <cds-dropdown\n [id]=\"'language-dropdown'\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"updateUserLanguage($event)\"\n >\n <cds-dropdown-list [items]=\"(languageListItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #notificationSettingsTemplate>\n <cds-structured-list *ngIf=\"emailNotificationSettingsWithSideEffects$ | async\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.notification.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.taskNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"taskNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.emailNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.emailNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"emailNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.taskNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #interfaceSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.interface.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row>\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.collapsibleMenu' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"collapsibleWidescreenMenu$ | async\"\n (ngModelChange)=\"setCollapsibleWidescreenMenu($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"allowUserThemeSwitching\">\n <cds-list-column>\n <cds-dropdown\n [label]=\"'settings.interface.themePreference' | translate\"\n [appendInline]=\"true\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"setPreferredTheme($event)\"\n [dropUp]=\"false\"\n >\n <cds-dropdown-list [items]=\"(themeOptions$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableCompactModeToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.compactMode' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"compactMode$ | async\"\n (ngModelChange)=\"setCompactMode($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableShowUserNameToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.showUserName' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"showUserNameInTopBar$ | async\"\n (ngModelChange)=\"setShowUserName($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #versionTemplate>\n <ng-container *ngIf=\"{backendVersion: backendVersion$ | async} as obs\">\n <cds-structured-list *ngIf=\"obs.backendVersion || frontendVersion\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.version.title' | translate }}</cds-list-column>\n </cds-list-header>\n <cds-list-row *ngIf=\"obs.backendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.' + obs.backendVersion.title | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ obs.backendVersion.version }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n <cds-list-row *ngIf=\"frontendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.valtimo-frontend-libraries' | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ frontendVersion }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </ng-container>\n</ng-template>\n\n<ng-template #feedbackMailTo>\n <cds-list-column>\n <a\n [href]=\"\n 'mailto:' +\n overrideFeedbackMenuItemToMailTo.email +\n '?subject=' +\n (overrideFeedbackMenuItemToMailTo.subjectTranslationKey | translate) +\n '&body=' +\n (overrideFeedbackMenuItemToMailTo.bodyTranslationKey | translate)\n \"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.feedback' | translate }}\n </a>\n </cds-list-column>\n</ng-template>\n", styles: [".be-scroller-settings{padding-bottom:150px!important}.version-holder{position:fixed;bottom:0;width:259px;background-color:#f8f9fa}.info-text{line-height:1em!important;padding-right:70px;margin-bottom:15px}.right-sidebar-menu .cds--tab--list{width:100%}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item{width:12rem}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item button{width:100%}.right-sidebar-menu .menu-tabs .cds--tab--overflow-nav-button{display:none}.right-sidebar-menu .cds--header-panel{width:20rem;height:calc(100% - 3rem);transition:transform .11s cubic-bezier(.2,0,1,.9);transform:translate(100%)}.right-sidebar-menu .cds--header-panel--expanded{transform:translate(0)}.right-sidebar-menu .cds--panel--overlay{padding-top:0}.right-sidebar-menu .cds--tab-content{padding:0;outline:0}.right-sidebar-menu .cds--structured-list-td{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .toggle-group{display:flex;flex-direction:column}.right-sidebar-menu .toggle-group .description{margin-top:1rem}.right-sidebar-menu cds-structured-list:last-child .cds--structured-list-row:last-child{border-bottom:0}.right-sidebar-menu .cds--grid,.right-sidebar-menu .cds--row,.right-sidebar-menu .menu-tabs{height:100%}.right-sidebar-menu .cds--grid--condensed{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .cds--tab--list--full-width{display:flex;flex-direction:column;height:100%}.right-sidebar-menu cds-tab{overflow:auto}.right-sidebar-menu .build-information{display:inline-flex;flex-direction:column}.right-sidebar-menu .build-information:not(:last-child){margin-bottom:1rem}.right-sidebar-menu .build-information .tag-container .cds--tag{margin-left:0;margin-right:0;margin-bottom:0}.right-sidebar-menu .information-table cds-list-row:first-child{border-top:0}.right-sidebar-menu .information-table cds-list-row:first-child cds-list-column{border-top:0;padding-top:0}.right-sidebar-menu .information-table cds-list-row:last-child cds-list-column{padding-bottom:0}.right-sidebar-menu .information-table cds-list-row cds-list-column:first-child{padding-left:0!important}.account-information .cds--structured-list-td{display:inline-flex;flex-direction:column;border:none;min-width:100%}.account-information .cds--structured-list-td .cds--tag{margin:0;margin-top:.25rem;width:fit-content}.cds--select-input{background-color:var(--cds-field-02)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
288
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.UserProviderService }, { type: i3.FormBuilder }, { type: i4.VersionService }, { type: i5.
|
|
304
|
+
args: [{ selector: 'valtimo-right-sidebar', encapsulation: ViewEncapsulation.None, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"right-sidebar-menu\">\n <cds-panel [expanded]=\"panelExpanded$ | async\">\n <div cdsGrid [condensed]=\"true\">\n <div cdsRow>\n <div cdsCol [columnNumbers]=\"{lg: 16}\" class=\"menu-tabs\" cdsLayer>\n <cds-tabs class=\"cds--tab--list--full-width\">\n <cds-tab [heading]=\"'account.title' | translate\">\n <ng-container *ngTemplateOutlet=\"accountTabTemplate\"></ng-container>\n </cds-tab>\n\n <cds-tab [heading]=\"'settings.title' | translate\">\n <ng-container *ngTemplateOutlet=\"settingsTabTemplate\"></ng-container>\n </cds-tab>\n </cds-tabs>\n </div>\n </div>\n </div>\n </cds-panel>\n</div>\n\n<ng-template #accountTabTemplate>\n <ng-container *ngTemplateOutlet=\"accountInformationTemplate\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"linksTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #settingsTabTemplate>\n <ng-container *ngTemplateOutlet=\"languageSettingsTemplate\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"interfaceSettingsTemplate\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"notificationSettingsTemplate\"></ng-container>\n\n @if (showValtimoVersions) {\n <ng-container *ngTemplateOutlet=\"versionTemplate\"></ng-container>\n }\n</ng-template>\n\n<ng-template #accountInformationTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.informationTitle' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"accountInformationTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #accountInformationTableTemplate>\n <div class=\"information-table account-information\">\n <cds-structured-list *ngIf=\"userSubject$ | async as userSubject\">\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.email' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.email }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.username' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.username }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column\n >{{ 'interface.name' | translate }}\n <cds-tag type=\"blue\">{{ userSubject.firstName + ' ' + userSubject.lastName }}</cds-tag>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #linksTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'account.quickLinks' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <ng-container *ngTemplateOutlet=\"linksTableTemplate\"></ng-container>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #linksTableTemplate>\n <div class=\"information-table\">\n <cds-structured-list>\n <cds-list-row>\n <cds-list-column>\n <a href=\"https://docs.valtimo.nl\" target=\"_blank\" cdsLink>{{\n 'account.links.help' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column *ngIf=\"!overrideFeedbackMenuItemToMailTo; else feedbackMailTo\">\n <a href=\"https://www.valtimo.nl/feedback\" target=\"_blank\" cdsLink>{{\n 'account.links.feedback' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"resetUrl\">\n <cds-list-column>\n <a [href]=\"resetUrl\" cdsLink>{{ 'account.links.resetPassword' | translate }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>\n <a href=\"javascript:void(0)\" cdsLink (click)=\"logout()\">{{\n 'account.links.signOut' | translate\n }}</a>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"showPlantATreeButton\">\n <cds-list-column>\n <a\n class=\"text-success\"\n href=\"mailto:valtimo@ritense.com?subject=Plant een boom voor Valtimo&body=Hallo Valtimo gebruiker,%0D%0DMet het versturen van deze e-mail gaan we gelijk aan de slag om een boom te planten. Hiermee compenseren we voor een deel de CO2 uitstoot van je Valtimo gebruik.%0D%0DMet Groene Groet,%0D%0DHet Valtimo team%0D%0D*Deze bomenplantactie kan 1 keer ingezet worden door elke geregistreerde Valtimo gebruiker.%0D%0D** Ritense plant ook jaarlijks bomen voor alle Valtimo installaties die in gebruik zijn.\"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.plantATree' | translate }}\n </a>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </div>\n</ng-template>\n\n<ng-template #languageSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.language.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <cds-dropdown\n [id]=\"'language-dropdown'\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"updateUserLanguage($event)\"\n >\n <cds-dropdown-list [items]=\"(languageListItems$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #notificationSettingsTemplate>\n <cds-structured-list *ngIf=\"emailNotificationSettingsWithSideEffects$ | async\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.notification.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.taskNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"taskNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.emailNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row>\n <cds-list-column>\n <form [formGroup]=\"settingsForm\" class=\"toggle-group\">\n <cds-toggle\n [label]=\"'settings.notification.emailNotifications' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n formControlName=\"emailNotifications\"\n [disabled]=\"updatingSettings$ | async\"\n >\n </cds-toggle>\n <span class=\"description\">{{\n 'settings.notification.taskNotificationsIntro' | translate\n }}</span>\n </form>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #interfaceSettingsTemplate>\n <cds-structured-list>\n <cds-list-header>\n <cds-list-column>{{ 'settings.interface.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row>\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.collapsibleMenu' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"collapsibleWidescreenMenu$ | async\"\n (ngModelChange)=\"setCollapsibleWidescreenMenu($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"allowUserThemeSwitching\">\n <cds-list-column>\n <cds-dropdown\n [label]=\"'settings.interface.themePreference' | translate\"\n [appendInline]=\"true\"\n (click)=\"$event.stopPropagation()\"\n (selected)=\"setPreferredTheme($event)\"\n [dropUp]=\"false\"\n >\n <cds-dropdown-list [items]=\"(themeOptions$ | async) || []\"></cds-dropdown-list>\n </cds-dropdown>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableCompactModeToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.compactMode' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"compactMode$ | async\"\n (ngModelChange)=\"setCompactMode($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"enableShowUserNameToggle\">\n <cds-list-column>\n <cds-toggle\n [label]=\"'settings.interface.showUserName' | translate\"\n [onText]=\"'interface.on' | translate\"\n [offText]=\"'interface.off' | translate\"\n [disabled]=\"updatingUserSettings$ | async\"\n [ngModel]=\"showUserNameInTopBar$ | async\"\n (ngModelChange)=\"setShowUserName($event)\"\n >\n </cds-toggle>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n</ng-template>\n\n<ng-template #versionTemplate>\n <ng-container *ngIf=\"{backendVersion: backendVersion$ | async} as obs\">\n <cds-structured-list *ngIf=\"obs.backendVersion || frontendVersion\">\n <cds-list-header>\n <cds-list-column>{{ 'settings.version.title' | translate }}</cds-list-column>\n </cds-list-header>\n\n <cds-list-row *ngIf=\"obs.backendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.' + obs.backendVersion.title | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ obs.backendVersion.version }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n\n <cds-list-row *ngIf=\"frontendVersion\">\n <cds-list-column>\n <div class=\"build-information\">\n <span class=\"build-title\">{{\n 'interface.builds.valtimo-frontend-libraries' | translate\n }}</span>\n <div class=\"tag-container\">\n <cds-tag type=\"blue\">{{ frontendVersion }}</cds-tag>\n </div>\n </div>\n </cds-list-column>\n </cds-list-row>\n </cds-structured-list>\n </ng-container>\n</ng-template>\n\n<ng-template #feedbackMailTo>\n <cds-list-column>\n <a\n [href]=\"\n 'mailto:' +\n overrideFeedbackMenuItemToMailTo.email +\n '?subject=' +\n (overrideFeedbackMenuItemToMailTo.subjectTranslationKey | translate) +\n '&body=' +\n (overrideFeedbackMenuItemToMailTo.bodyTranslationKey | translate)\n \"\n target=\"_blank\"\n cdsLink\n >\n {{ 'account.links.feedback' | translate }}\n </a>\n </cds-list-column>\n</ng-template>\n", styles: [".be-scroller-settings{padding-bottom:150px!important}.version-holder{position:fixed;bottom:0;width:259px;background-color:#f8f9fa}.info-text{line-height:1em!important;padding-right:70px;margin-bottom:15px}.right-sidebar-menu .cds--tab--list{width:100%}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item{width:12rem}.right-sidebar-menu .menu-tabs .cds--tabs--scrollable__nav-item button{width:100%}.right-sidebar-menu .menu-tabs .cds--tab--overflow-nav-button{display:none}.right-sidebar-menu .cds--header-panel{width:20rem;height:calc(100% - 3rem);transition:transform .11s cubic-bezier(.2,0,1,.9);transform:translate(100%)}.right-sidebar-menu .cds--header-panel--expanded{transform:translate(0)}.right-sidebar-menu .cds--panel--overlay{padding-top:0}.right-sidebar-menu .cds--tab-content{padding:0;outline:0}.right-sidebar-menu .cds--structured-list-td{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .toggle-group{display:flex;flex-direction:column}.right-sidebar-menu .toggle-group .description{margin-top:1rem}.right-sidebar-menu cds-structured-list:last-child .cds--structured-list-row:last-child{border-bottom:0}.right-sidebar-menu .cds--grid,.right-sidebar-menu .cds--row,.right-sidebar-menu .menu-tabs{height:100%}.right-sidebar-menu .cds--grid--condensed{padding-left:1rem;padding-right:1rem}.right-sidebar-menu .cds--tab--list--full-width{display:flex;flex-direction:column;height:100%}.right-sidebar-menu cds-tab{overflow:auto}.right-sidebar-menu .build-information{display:inline-flex;flex-direction:column}.right-sidebar-menu .build-information:not(:last-child){margin-bottom:1rem}.right-sidebar-menu .build-information .tag-container .cds--tag{margin-left:0;margin-right:0;margin-bottom:0}.right-sidebar-menu .information-table cds-list-row:first-child{border-top:0}.right-sidebar-menu .information-table cds-list-row:first-child cds-list-column{border-top:0;padding-top:0}.right-sidebar-menu .information-table cds-list-row:last-child cds-list-column{padding-bottom:0}.right-sidebar-menu .information-table cds-list-row cds-list-column:first-child{padding-left:0!important}.account-information .cds--structured-list-td{display:inline-flex;flex-direction:column;border:none;min-width:100%}.account-information .cds--structured-list-td .cds--tag{margin:0;margin-top:.25rem;width:fit-content}.cds--select-input{background-color:var(--cds-field-02)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
305
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.UserProviderService }, { type: i3.FormBuilder }, { type: i4.VersionService }, { type: i5.ShellService }, { type: i0.ElementRef }, { type: i6.ConfigService }, { type: i6.UserSettingsService }, { type: i5.PageHeaderService }, { type: i5.CdsThemeService }], propDecorators: { onPageClick: [{
|
|
289
306
|
type: HostListener,
|
|
290
307
|
args: ['document:click', ['$event.target']]
|
|
291
308
|
}] } });
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaHQtc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3JpZ2h0LXNpZGViYXIvcmlnaHQtc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3JpZ2h0LXNpZGViYXIvcmlnaHQtc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBR1osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRSxPQUFPLEVBQUMscUJBQXFCLEVBQWlCLE1BQU0sY0FBYyxDQUFDO0FBQ25FLE9BQU8sRUFPTCxRQUFRLEdBQ1QsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUcvRixPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFTeEMsTUFBTSxPQUFPLHFCQUFxQjtJQUV6QixXQUFXLENBQUMsYUFBYTtRQUM5QixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQzVDLE1BQU0s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QUMsQ0FBQztRQUM5RixJQUFJLFFBQVEsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7OEdBaFdVLHFCQUFxQjtrR0FBckIscUJBQXFCLHNJQ25EbEMsMDVYQWlVQTs7MkZEOVFhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSx1QkFBdUIsaUJBR2xCLGlCQUFpQixDQUFDLElBQUk7K1lBSTlCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U2VsZWN0YWJsZUNhcmJvblRoZW1lLCBWYWx0aW1vVmVyc2lvbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIENvbmZpZ1NlcnZpY2UsXG4gIEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MsXG4gIEZlZWRiYWNrTWFpbFRvLFxuICBVc2VySWRlbnRpdHksXG4gIFVzZXJTZXR0aW5ncyxcbiAgVXNlclNldHRpbmdzU2VydmljZSxcbiAgVkVSU0lPTlMsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1ZlcnNpb25TZXJ2aWNlfSBmcm9tICcuLi92ZXJzaW9uL3ZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQge0Nkc1RoZW1lU2VydmljZSwgUGFnZUhlYWRlclNlcnZpY2UsIFNoZWxsU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHttYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMaXN0SXRlbX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tcmlnaHQtc2lkZWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yaWdodC1zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmlnaHQtc2lkZWJhci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBSaWdodFNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIHB1YmxpYyBvblBhZ2VDbGljayh0YXJnZXRFbGVtZW50KSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5zaGVsbFNlcnZpY2UucGFuZWxFeHBhbmRlZCQsIHRoaXMuc2hlbGxTZXJ2aWNlLm1vdXNlT25Ub3BCYXIkXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChbcGFuZWxFeHBhbmRlZCwgbW91c2VPblRvcEJhcl0pID0+IHtcbiAgICAgICAgY29uc3QgY2xpY2tlZEluc2lkZSA9XG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkgfHwgbW91c2VPblRvcEJhcjtcblxuICAgICAgICBpZiAoIWNsaWNrZWRJbnNpZGUgJiYgcGFuZWxFeHBhbmRlZCkge1xuICAgICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLnNldFBhbmVsRXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmcmVxdWVuY2llczogQXJyYXk8YW55PiA9IFtcbiAgICAnZW1haWxOb3RpZmljYXRpb25Pbk1vbmRheScsXG4gICAgJ2VtYWlsTm90aWZpY2F0aW9uT25UdWVzZGF5JyxcbiAgICAnZW1haWxOb3RpZmljYXRpb25PbldlZG5lc2RheScsXG4gICAgJ2VtYWlsTm90aWZpY2F0aW9uT25UaHVyc2RheScsXG4gICAgJ2VtYWlsTm90aWZpY2F0aW9uT25GcmlkYXknLFxuICAgICdlbWFpbE5vdGlmaWNhdGlvbk9uU2F0dXJkYXknLFxuICAgICdlbWFpbE5vdGlmaWNhdGlvbk9uU3VuZGF5JyxcbiAgXTtcbiAgcHVibGljIHNldHRpbmdzRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgdGFza05vdGlmaWNhdGlvbnM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgZW1haWxOb3RpZmljYXRpb25zOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGVtYWlsTm90aWZpY2F0aW9uT25Nb25kYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgZW1haWxOb3RpZmljYXRpb25PblR1ZXNkYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgZW1haWxOb3RpZmljYXRpb25PbldlZG5lc2RheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbk9uVGh1cnNkYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgZW1haWxOb3RpZmljYXRpb25PbkZyaWRheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbk9uU2F0dXJkYXk6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgZW1haWxOb3RpZmljYXRpb25PblN1bmRheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgfSk7XG4gIHB1YmxpYyBvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUbzogRmVlZGJhY2tNYWlsVG87XG4gIHJlYWRvbmx5IHBhbmVsRXhwYW5kZWQkID0gdGhpcy5zaGVsbFNlcnZpY2UucGFuZWxFeHBhbmRlZCQ7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRMYW5ndWFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBsYW5ndWFnZU9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmc+PihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGxhbmd1YWdlTGlzdEl0ZW1zJDogT2JzZXJ2YWJsZTxMaXN0SXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubGFuZ3VhZ2VPcHRpb25zJCxcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UkLFxuICAgIHRoaXMudHJhbnNsYXRlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbGFuZ3VhZ2VPcHRpb25zLCBzZWxlY3RlZExhbmd1YWdlXSkgPT5cbiAgICAgIGxhbmd1YWdlT3B0aW9ucy5tYXAobGFuZ3VhZ2VLZXkgPT4gKHtcbiAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc2V0dGluZ3MubGFuZ3VhZ2Uub3B0aW9ucy4nICsgbGFuZ3VhZ2VLZXkpLFxuICAgICAgICBrZXk6IGxhbmd1YWdlS2V5LFxuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRMYW5ndWFnZSA9PT0gbGFuZ3VhZ2VLZXksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgYmFja2VuZFZlcnNpb24kOiBPYnNlcnZhYmxlPFZhbHRpbW9WZXJzaW9uPiA9IHRoaXMudmVyc2lvblNlcnZpY2UuZ2V0VmVyc2lvbigpO1xuXG4gIHJlYWRvbmx5IHVzZXJTdWJqZWN0JDogT2JzZXJ2YWJsZTxVc2VySWRlbnRpdHk+ID0gdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldFVzZXJTdWJqZWN0KCk7XG5cbiAgcmVhZG9ubHkgdXBkYXRpbmdTZXR0aW5ncyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHJlYWRvbmx5IHVwZGF0aW5nVXNlclNldHRpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RW1haWxOb3RpZmljYXRpb25TZXR0aW5ncz4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgcmVhZG9ubHkgZW1haWxOb3RpZmljYXRpb25TZXR0aW5nc1dpdGhTaWRlRWZmZWN0cyQ6IE9ic2VydmFibGU8RW1haWxOb3RpZmljYXRpb25TZXR0aW5ncz4gPVxuICAgIHRoaXMuZW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyQucGlwZShcbiAgICAgIHRhcChyZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzRm9ybS5zZXRWYWx1ZShyZXN1bHRzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0aW5nU2V0dGluZ3MkLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgcmVhZG9ubHkgY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSQgPSB0aGlzLnNoZWxsU2VydmljZS5jb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51JDtcblxuICByZWFkb25seSBwcmVmZXJyZWRUaGVtZSQgPSB0aGlzLmNkc1RoZW1lU2VydmljZS5wcmVmZXJyZWRUaGVtZSQ7XG5cbiAgcmVhZG9ubHkgY29tcGFjdE1vZGUkID0gdGhpcy5wYWdlSGVhZGVyU2VydmljZS5jb21wYWN0TW9kZSQ7XG5cbiAgcmVhZG9ubHkgc2hvd1VzZXJOYW1lSW5Ub3BCYXIkID0gdGhpcy5wYWdlSGVhZGVyU2VydmljZS5zaG93VXNlck5hbWVJblRvcEJhciQ7XG5cbiAgcmVhZG9ubHkgZnJvbnRlbmRWZXJzaW9uITogc3RyaW5nO1xuXG4gIHByaXZhdGUgZm9ybVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGhpZGVWYWx0aW1vVmVyc2lvbnNGb3JOb25BZG1pbnMgPVxuICAgIHRoaXMuY29uZmlnU2VydmljZT8uY29uZmlnPy5mZWF0dXJlVG9nZ2xlcz8uaGlkZVZhbHRpbW9WZXJzaW9uc0Zvck5vbkFkbWlucyB8fCBmYWxzZTtcblxuICByZWFkb25seSBpc0FkbWluJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMudXNlclByb3ZpZGVyU2VydmljZVxuICAgIC5nZXRVc2VyU3ViamVjdCgpXG4gICAgLnBpcGUobWFwKHVzZXJJZGVudGl0eSA9PiB1c2VySWRlbnRpdHk/LnJvbGVzLmluY2x1ZGVzKCdST0xFX0FETUlOJykpKTtcblxuICBwdWJsaWMgc2hvd1ZhbHRpbW9WZXJzaW9ucyA9IHRydWU7XG5cbiAgcHVibGljIGFsbG93VXNlclRoZW1lU3dpdGNoaW5nITogYm9vbGVhbjtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGhlbWVPcHRpb25zJDogT2JzZXJ2YWJsZTxMaXN0SXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMucHJlZmVycmVkVGhlbWUkLFxuICAgIHRoaXMudHJhbnNsYXRlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbcHJlZmVycmVkVGhlbWVdKSA9PiBbXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3NldHRpbmdzLmludGVyZmFjZS50aGVtZXMubGlnaHQnKSxcbiAgICAgICAga2V5OiBTZWxlY3RhYmxlQ2FyYm9uVGhlbWUuRzEwLFxuICAgICAgICBzZWxlY3RlZDogcHJlZmVycmVkVGhlbWUgPT09IFNlbGVjdGFibGVDYXJib25UaGVtZS5HMTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzZXR0aW5ncy5pbnRlcmZhY2UudGhlbWVzLmRhcmsnKSxcbiAgICAgICAga2V5OiBTZWxlY3RhYmxlQ2FyYm9uVGhlbWUuRzkwLFxuICAgICAgICBzZWxlY3RlZDogcHJlZmVycmVkVGhlbWUgPT09IFNlbGVjdGFibGVDYXJib25UaGVtZS5HOTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdzZXR0aW5ncy5pbnRlcmZhY2UudGhlbWVzLnN5c3RlbScpLFxuICAgICAgICBrZXk6IFNlbGVjdGFibGVDYXJib25UaGVtZS5TWVNURU0sXG4gICAgICAgIHNlbGVjdGVkOiBwcmVmZXJyZWRUaGVtZSA9PT0gU2VsZWN0YWJsZUNhcmJvblRoZW1lLlNZU1RFTSxcbiAgICAgIH0sXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBlbmFibGVDb21wYWN0TW9kZVRvZ2dsZSA9IGZhbHNlO1xuICBwdWJsaWMgZW5hYmxlU2hvd1VzZXJOYW1lVG9nZ2xlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlclNlcnZpY2U6IFVzZXJQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uU2VydmljZTogVmVyc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzaGVsbFNlcnZpY2U6IFNoZWxsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclNldHRpbmdzU2VydmljZTogVXNlclNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VIZWFkZXJTZXJ2aWNlOiBQYWdlSGVhZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkc1RoZW1lU2VydmljZTogQ2RzVGhlbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZnJvbnRlbmRWZXJzaW9uID0gVkVSU0lPTlM/LmZyb250ZW5kTGlicmFyaWVzO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5pc0FkbWluJC5zdWJzY3JpYmUoaXNBZG1pbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhpZGVWYWx0aW1vVmVyc2lvbnNGb3JOb25BZG1pbnMgJiYgIWlzQWRtaW4pIHtcbiAgICAgICAgICB0aGlzLnNob3dWYWx0aW1vVmVyc2lvbnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmcgPVxuICAgICAgISF0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZz8uZmVhdHVyZVRvZ2dsZXM/LmFsbG93VXNlclRoZW1lU3dpdGNoaW5nID8/IHRydWU7XG4gICAgdGhpcy5lbmFibGVDb21wYWN0TW9kZVRvZ2dsZSA9XG4gICAgICAhIXRoaXMuY29uZmlnU2VydmljZT8uY29uZmlnPy5mZWF0dXJlVG9nZ2xlcy5lbmFibGVDb21wYWN0TW9kZVRvZ2dsZTtcbiAgICB0aGlzLmVuYWJsZVNob3dVc2VyTmFtZVRvZ2dsZSA9XG4gICAgICAhIXRoaXMuY29uZmlnU2VydmljZT8uY29uZmlnPy5mZWF0dXJlVG9nZ2xlcy5lbmFibGVVc2VyTmFtZUluVG9wQmFyVG9nZ2xlO1xuICB9XG5cbiAgc2hvd1BsYW50QVRyZWVCdXR0b246IGJvb2xlYW47XG4gIHJlc2V0VXJsOiBzdHJpbmc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRMYW5ndWFnZSgpO1xuICAgIHRoaXMubG9hZEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MoKTtcbiAgICB0aGlzLm9wZW5Gb3JtU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5zaG93UGxhbnRBVHJlZUJ1dHRvbiA9IHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuZmVhdHVyZVRvZ2dsZXM/LnNob3dQbGFudEFUcmVlQnV0dG9uO1xuICAgIHRoaXMucmVzZXRVcmwgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLmNoYW5nZVBhc3N3b3JkVXJsPy5lbmRwb2ludFVyaTtcbiAgICB0aGlzLm92ZXJyaWRlRmVlZGJhY2tNZW51SXRlbVRvTWFpbFRvID1cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWc/Lm92ZXJyaWRlRmVlZGJhY2tNZW51SXRlbVRvTWFpbFRvO1xuICAgIHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdXBkYXRlVXNlckxhbmd1YWdlKGxhbmdLZXk6IHN0cmluZyB8IHtpdGVtPzoge2tleT86IHN0cmluZ319LCBzYXZlU2V0dGluZ3MgPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ0tleVRvVXNlID0gKGxhbmdLZXkgYXMgYW55KT8uaXRlbT8ua2V5XG4gICAgICA/IChsYW5nS2V5IGFzIGFueSk/Lml0ZW0ua2V5XG4gICAgICA6IChsYW5nS2V5IGFzIHN0cmluZyk7XG5cbiAgICB0aGlzLnRyYW5zbGF0ZVxuICAgICAgLnVzZShsYW5nS2V5VG9Vc2UpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsYW5nS2V5JywgbGFuZ0tleVRvVXNlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlJC5uZXh0KGxhbmdLZXlUb1VzZSk7XG5cbiAgICAgICAgaWYgKHNhdmVTZXR0aW5ncykge1xuICAgICAgICAgIHRoaXMuc2F2ZVVzZXJTZXR0aW5ncygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldENvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUoY29sbGFwc2libGU6IGJvb2xlYW4sIHNhdmVTZXR0aW5ncyA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnNoZWxsU2VydmljZS5zZXRDb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51KGNvbGxhcHNpYmxlKTtcblxuICAgIGlmIChzYXZlU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2F2ZVVzZXJTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIHNldENvbXBhY3RNb2RlKGNvbXBhY3RNb2RlOiBib29sZWFuLCBzYXZlU2V0dGluZ3MgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSGVhZGVyU2VydmljZS5zZXRDb21wYWN0TW9kZShjb21wYWN0TW9kZSk7XG5cbiAgICBpZiAoc2F2ZVNldHRpbmdzKSB7XG4gICAgICB0aGlzLnNhdmVVc2VyU2V0dGluZ3MoKTtcbiAgICB9XG4gIH1cblxuICBzZXRTaG93VXNlck5hbWUoc2hvd1VzZXJOYW1lOiBib29sZWFuLCBzYXZlU2V0dGluZ3MgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSGVhZGVyU2VydmljZS5zZXRTaG93VXNlck5hbWVJblRvcEJhcihzaG93VXNlck5hbWUpO1xuXG4gICAgaWYgKHNhdmVTZXR0aW5ncykge1xuICAgICAgdGhpcy5zYXZlVXNlclNldHRpbmdzKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UHJlZmVycmVkVGhlbWUoc2VsZWN0ZWRUaGVtZTogc3RyaW5nIHwge2l0ZW0/OiB7a2V5Pzogc3RyaW5nfX0sIHNhdmVTZXR0aW5ncyA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxvd1VzZXJUaGVtZVN3aXRjaGluZykge1xuICAgICAgaWYgKChzZWxlY3RlZFRoZW1lIGFzIGFueSk/Lml0ZW0/LmtleSkge1xuICAgICAgICB0aGlzLmNkc1RoZW1lU2VydmljZS5zZXRQcmVmZXJyZWRUaGVtZShcbiAgICAgICAgICAoc2VsZWN0ZWRUaGVtZSBhcyBhbnkpLml0ZW0/LmtleSBhcyBTZWxlY3RhYmxlQ2FyYm9uVGhlbWVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2RzVGhlbWVTZXJ2aWNlLnNldFByZWZlcnJlZFRoZW1lKHNlbGVjdGVkVGhlbWUgYXMgU2VsZWN0YWJsZUNhcmJvblRoZW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNhdmVTZXR0aW5ncykge1xuICAgICAgICB0aGlzLnNhdmVVc2VyU2V0dGluZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2dvdXQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmxvZ291dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRm9ybVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1TdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyQsXG4gICAgICB0aGlzLnNldHRpbmdzRm9ybS52YWx1ZUNoYW5nZXMsXG4gICAgICB0aGlzLnVwZGF0aW5nU2V0dGluZ3MkLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChbc2V0dGluZ3MsIGZvcm1WYWx1ZSwgdXBkYXRpbmdTZXR0aW5nc10pID0+IHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MgJiYgZm9ybVZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nc1N0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5zb3J0T2JqZWN0QWxwaGFiZXRpY2FsbHkoc2V0dGluZ3MpKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1TdHJpbmdpZmllZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc29ydE9iamVjdEFscGhhYmV0aWNhbGx5KGZvcm1WYWx1ZSkpO1xuXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NTdHJpbmdpZmllZCAhPT0gZm9ybVN0cmluZ2lmaWVkICYmICF1cGRhdGluZ1NldHRpbmdzKSB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdTZXR0aW5ncyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLnVwZGF0ZUVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MoZm9ybVZhbHVlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MkLm5leHQocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nU2V0dGluZ3MkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzJC5uZXh0KHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdTZXR0aW5ncyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MoKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICB0aGlzLmVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MkLm5leHQocmVzdWx0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MkLm5leHQodGhpcy5zZXR0aW5nc0Zvcm0udmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UkLm5leHQodGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpO1xuICAgIHRoaXMubGFuZ3VhZ2VPcHRpb25zJC5uZXh0KHRoaXMudHJhbnNsYXRlLmxhbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydE9iamVjdEFscGhhYmV0aWNhbGx5KGpzT2JqZWN0OiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhqc09iamVjdClcbiAgICAgIC5zb3J0KClcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2tleV06IGpzT2JqZWN0W2tleV0sXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXNlclNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclNldHRpbmdzU2VydmljZS5nZXRVc2VyU2V0dGluZ3MoKS5zdWJzY3JpYmUoc2V0dGluZ3MgPT4ge1xuICAgICAgdGhpcy51cGRhdGluZ1VzZXJTZXR0aW5ncyQubmV4dChmYWxzZSk7XG5cbiAgICAgIGlmICghc2V0dGluZ3M/Lmxhbmd1YWdlQ29kZSkge1xuICAgICAgICB0aGlzLnNhdmVVc2VyU2V0dGluZ3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0VXNlclNldHRpbmdzKHNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVVzZXJTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0aW5nVXNlclNldHRpbmdzJC5uZXh0KHRydWUpO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UkLFxuICAgICAgdGhpcy5jb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51JCxcbiAgICAgIHRoaXMuY29tcGFjdE1vZGUkLFxuICAgICAgdGhpcy5zaG93VXNlck5hbWVJblRvcEJhciQsXG4gICAgICB0aGlzLnByZWZlcnJlZFRoZW1lJCxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAoW1xuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSxcbiAgICAgICAgICAgIGNvbXBhY3RNb2RlLFxuICAgICAgICAgICAgc2hvd1VzZXJOYW1lSW5Ub3BCYXIsXG4gICAgICAgICAgICBwcmVmZXJyZWRUaGVtZSxcbiAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgdGhpcy51c2VyU2V0dGluZ3NTZXJ2aWNlLnNhdmVVc2VyU2V0dGluZ3Moe1xuICAgICAgICAgICAgICBjb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51LFxuICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICAgIC4uLih0aGlzLmVuYWJsZUNvbXBhY3RNb2RlVG9nZ2xlICYmIHtjb21wYWN0TW9kZX0pLFxuICAgICAgICAgICAgICAuLi4odGhpcy5lbmFibGVTaG93VXNlck5hbWVUb2dnbGUgJiYge3Nob3dVc2VyTmFtZUluVG9wQmFyfSksXG4gICAgICAgICAgICAgIC4uLih0aGlzLmFsbG93VXNlclRoZW1lU3dpdGNoaW5nICYmIHtwcmVmZXJyZWRUaGVtZX0pLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRpbmdVc2VyU2V0dGluZ3MkLm5leHQoZmFsc2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJTZXR0aW5ncyhzZXR0aW5nczogVXNlclNldHRpbmdzKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlJC5uZXh0KHNldHRpbmdzLmxhbmd1YWdlQ29kZSk7XG4gICAgdGhpcy51cGRhdGVVc2VyTGFuZ3VhZ2Uoc2V0dGluZ3MubGFuZ3VhZ2VDb2RlLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRDb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51KHNldHRpbmdzLmNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUsIGZhbHNlKTtcbiAgICBpZiAodGhpcy5lbmFibGVDb21wYWN0TW9kZVRvZ2dsZSkgdGhpcy5zZXRDb21wYWN0TW9kZShzZXR0aW5ncy5jb21wYWN0TW9kZSwgZmFsc2UpO1xuICAgIGlmICh0aGlzLmVuYWJsZVNob3dVc2VyTmFtZVRvZ2dsZSkgdGhpcy5zZXRTaG93VXNlck5hbWUoc2V0dGluZ3Muc2hvd1VzZXJOYW1lSW5Ub3BCYXIsIGZhbHNlKTtcbiAgICBpZiAoc2V0dGluZ3MucHJlZmVycmVkVGhlbWUgJiYgdGhpcy5hbGxvd1VzZXJUaGVtZVN3aXRjaGluZykge1xuICAgICAgdGhpcy5zZXRQcmVmZXJyZWRUaGVtZShzZXR0aW5ncy5wcmVmZXJyZWRUaGVtZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwicmlnaHQtc2lkZWJhci1tZW51XCI+XG4gIDxjZHMtcGFuZWwgW2V4cGFuZGVkXT1cInBhbmVsRXhwYW5kZWQkIHwgYXN5bmNcIj5cbiAgICA8ZGl2IGNkc0dyaWQgW2NvbmRlbnNlZF09XCJ0cnVlXCI+XG4gICAgICA8ZGl2IGNkc1Jvdz5cbiAgICAgICAgPGRpdiBjZHNDb2wgW2NvbHVtbk51bWJlcnNdPVwie2xnOiAxNn1cIiBjbGFzcz1cIm1lbnUtdGFic1wiIGNkc0xheWVyPlxuICAgICAgICAgIDxjZHMtdGFicyBjbGFzcz1cImNkcy0tdGFiLS1saXN0LS1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICA8Y2RzLXRhYiBbaGVhZGluZ109XCInYWNjb3VudC50aXRsZScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjY291bnRUYWJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9jZHMtdGFiPlxuICAgICAgICAgICAgPGNkcy10YWIgW2hlYWRpbmddPVwiJ3NldHRpbmdzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2V0dGluZ3NUYWJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9jZHMtdGFiPlxuICAgICAgICAgIDwvY2RzLXRhYnM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvY2RzLXBhbmVsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYWNjb3VudFRhYlRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWNjb3VudEluZm9ybWF0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2V0dGluZ3NUYWJUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhbmd1YWdlU2V0dGluZ3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW50ZXJmYWNlU2V0dGluZ3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm90aWZpY2F0aW9uU2V0dGluZ3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmVyc2lvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjY291bnRJbmZvcm1hdGlvblRlbXBsYXRlPlxuICA8Y2RzLXN0cnVjdHVyZWQtbGlzdD5cbiAgICA8Y2RzLWxpc3QtaGVhZGVyPlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj57eyAnYWNjb3VudC5pbmZvcm1hdGlvblRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3QtaGVhZGVyPlxuICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWNjb3VudEluZm9ybWF0aW9uVGFibGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG4gIDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWNjb3VudEluZm9ybWF0aW9uVGFibGVUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImluZm9ybWF0aW9uLXRhYmxlIGFjY291bnQtaW5mb3JtYXRpb25cIj5cbiAgICA8Y2RzLXN0cnVjdHVyZWQtbGlzdCAqbmdJZj1cInVzZXJTdWJqZWN0JCB8IGFzeW5jIGFzIHVzZXJTdWJqZWN0XCI+XG4gICAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgICA8Y2RzLWxpc3QtY29sdW1uXG4gICAgICAgICAgPnt7ICdpbnRlcmZhY2UuZW1haWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10YWcgdHlwZT1cImJsdWVcIj57eyB1c2VyU3ViamVjdC5lbWFpbCB9fTwvY2RzLXRhZz5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cbiAgICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW5cbiAgICAgICAgICA+e3sgJ2ludGVyZmFjZS51c2VybmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8Y2RzLXRhZyB0eXBlPVwiYmx1ZVwiPnt7IHVzZXJTdWJqZWN0LnVzZXJuYW1lIH19PC9jZHMtdGFnPlxuICAgICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICAgIDwvY2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LXJvdz5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtblxuICAgICAgICAgID57eyAnaW50ZXJmYWNlLm5hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGNkcy10YWcgdHlwZT1cImJsdWVcIj57eyB1c2VyU3ViamVjdC5maXJzdE5hbWUgKyAnICcgKyB1c2VyU3ViamVjdC5sYXN0TmFtZSB9fTwvY2RzLXRhZz5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cbiAgICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaW5rc1RlbXBsYXRlPlxuICA8Y2RzLXN0cnVjdHVyZWQtbGlzdD5cbiAgICA8Y2RzLWxpc3QtaGVhZGVyPlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj57eyAnYWNjb3VudC5xdWlja0xpbmtzJyB8IHRyYW5zbGF0ZSB9fTwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3QtaGVhZGVyPlxuICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua3NUYWJsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LXJvdz5cbiAgPC9jZHMtc3RydWN0dXJlZC1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsaW5rc1RhYmxlVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJpbmZvcm1hdGlvbi10YWJsZVwiPlxuICAgIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgICAgPGNkcy1saXN0LXJvdz5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9kb2NzLnZhbHRpbW8ubmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjZHNMaW5rPnt7XG4gICAgICAgICAgICAnYWNjb3VudC5saW5rcy5oZWxwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9hPlxuICAgICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICAgIDwvY2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LXJvdz5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtbiAqbmdJZj1cIiFvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUbzsgZWxzZSBmZWVkYmFja01haWxUb1wiPlxuICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy52YWx0aW1vLm5sL2ZlZWRiYWNrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2RzTGluaz57e1xuICAgICAgICAgICAgJ2FjY291bnQubGlua3MuZmVlZGJhY2snIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3Qtcm93ICpuZ0lmPVwicmVzZXRVcmxcIj5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8YSBbaHJlZl09XCJyZXNldFVybFwiIGNkc0xpbms+e3sgJ2FjY291bnQubGlua3MucmVzZXRQYXNzd29yZCcgfCB0cmFuc2xhdGUgfX08L2E+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjZHNMaW5rIChjbGljayk9XCJsb2dvdXQoKVwiPnt7XG4gICAgICAgICAgICAnYWNjb3VudC5saW5rcy5zaWduT3V0JyB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9hPlxuICAgICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICAgIDwvY2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LXJvdyAqbmdJZj1cInNob3dQbGFudEFUcmVlQnV0dG9uXCI+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zdWNjZXNzXCJcbiAgICAgICAgICAgIGhyZWY9XCJtYWlsdG86dmFsdGltb0ByaXRlbnNlLmNvbT9zdWJqZWN0PVBsYW50IGVlbiBib29tIHZvb3IgVmFsdGltbyZib2R5PUhhbGxvIFZhbHRpbW8gZ2VicnVpa2VyLCUwRCUwRE1ldCBoZXQgdmVyc3R1cmVuIHZhbiBkZXplIGUtbWFpbCBnYWFuIHdlIGdlbGlqayBhYW4gZGUgc2xhZyBvbSBlZW4gYm9vbSB0ZSBwbGFudGVuLiBIaWVybWVlIGNvbXBlbnNlcmVuIHdlIHZvb3IgZWVuIGRlZWwgZGUgQ08yIHVpdHN0b290IHZhbiBqZSBWYWx0aW1vIGdlYnJ1aWsuJTBEJTBETWV0IEdyb2VuZSBHcm9ldCwlMEQlMERIZXQgVmFsdGltbyB0ZWFtJTBEJTBEKkRlemUgYm9tZW5wbGFudGFjdGllIGthbiAxIGtlZXIgaW5nZXpldCB3b3JkZW4gZG9vciBlbGtlIGdlcmVnaXN0cmVlcmRlIFZhbHRpbW8gZ2VicnVpa2VyLiUwRCUwRCoqIFJpdGVuc2UgcGxhbnQgb29rIGphYXJsaWprcyBib21lbiB2b29yIGFsbGUgVmFsdGltbyBpbnN0YWxsYXRpZXMgZGllIGluIGdlYnJ1aWsgemlqbi5cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIGNkc0xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnYWNjb3VudC5saW5rcy5wbGFudEFUcmVlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cbiAgICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsYW5ndWFnZVNldHRpbmdzVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdzZXR0aW5ncy5sYW5ndWFnZS50aXRsZScgfCB0cmFuc2xhdGUgfX08L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LWhlYWRlcj5cbiAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgIFtpZF09XCInbGFuZ3VhZ2UtZHJvcGRvd24nXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIChzZWxlY3RlZCk9XCJ1cGRhdGVVc2VyTGFuZ3VhZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIihsYW5ndWFnZUxpc3RJdGVtcyQgfCBhc3luYykgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vdGlmaWNhdGlvblNldHRpbmdzVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0ICpuZ0lmPVwiZW1haWxOb3RpZmljYXRpb25TZXR0aW5nc1dpdGhTaWRlRWZmZWN0cyQgfCBhc3luY1wiPlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdzZXR0aW5ncy5ub3RpZmljYXRpb24udGl0bGUnIHwgdHJhbnNsYXRlIH19PC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1oZWFkZXI+XG4gICAgPGNkcy1saXN0LXJvdz5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dGluZ3NGb3JtXCIgY2xhc3M9XCJ0b2dnbGUtZ3JvdXBcIj5cbiAgICAgICAgICA8Y2RzLXRvZ2dsZVxuICAgICAgICAgICAgW2xhYmVsXT1cIidzZXR0aW5ncy5ub3RpZmljYXRpb24udGFza05vdGlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtvblRleHRdPVwiJ2ludGVyZmFjZS5vbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW29mZlRleHRdPVwiJ2ludGVyZmFjZS5vZmYnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRhc2tOb3RpZmljYXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGRhdGluZ1NldHRpbmdzJCB8IGFzeW5jXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9jZHMtdG9nZ2xlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e1xuICAgICAgICAgICAgJ3NldHRpbmdzLm5vdGlmaWNhdGlvbi5lbWFpbE5vdGlmaWNhdGlvbnNJbnRybycgfCB0cmFuc2xhdGVcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG4gICAgPGNkcy1saXN0LXJvdz5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dGluZ3NGb3JtXCIgY2xhc3M9XCJ0b2dnbGUtZ3JvdXBcIj5cbiAgICAgICAgICA8Y2RzLXRvZ2dsZVxuICAgICAgICAgICAgW2xhYmVsXT1cIidzZXR0aW5ncy5ub3RpZmljYXRpb24uZW1haWxOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbb25UZXh0XT1cIidpbnRlcmZhY2Uub24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtvZmZUZXh0XT1cIidpbnRlcmZhY2Uub2ZmJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbE5vdGlmaWNhdGlvbnNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwZGF0aW5nU2V0dGluZ3MkIHwgYXN5bmNcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2Nkcy10b2dnbGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7XG4gICAgICAgICAgICAnc2V0dGluZ3Mubm90aWZpY2F0aW9uLnRhc2tOb3RpZmljYXRpb25zSW50cm8nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ludGVyZmFjZVNldHRpbmdzVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdzZXR0aW5ncy5pbnRlcmZhY2UudGl0bGUnIHwgdHJhbnNsYXRlIH19PC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1oZWFkZXI+XG4gICAgPGNkcy1saXN0LXJvdz5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxjZHMtdG9nZ2xlXG4gICAgICAgICAgW2xhYmVsXT1cIidzZXR0aW5ncy5pbnRlcmZhY2UuY29sbGFwc2libGVNZW51JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW29uVGV4dF09XCInaW50ZXJmYWNlLm9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW29mZlRleHRdPVwiJ2ludGVyZmFjZS5vZmYnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdVc2VyU2V0dGluZ3MkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cImNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUkIHwgYXN5bmNcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldENvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9jZHMtdG9nZ2xlPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG5cbiAgICA8Y2RzLWxpc3Qtcm93ICpuZ0lmPVwiYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmdcIj5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICBbbGFiZWxdPVwiJ3NldHRpbmdzLmludGVyZmFjZS50aGVtZVByZWZlcmVuY2UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIChzZWxlY3RlZCk9XCJzZXRQcmVmZXJyZWRUaGVtZSgkZXZlbnQpXCJcbiAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwiKHRoZW1lT3B0aW9ucyQgfCBhc3luYykgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuXG4gICAgPGNkcy1saXN0LXJvdyAqbmdJZj1cImVuYWJsZUNvbXBhY3RNb2RlVG9nZ2xlXCI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICA8Y2RzLXRvZ2dsZVxuICAgICAgICAgIFtsYWJlbF09XCInc2V0dGluZ3MuaW50ZXJmYWNlLmNvbXBhY3RNb2RlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW29uVGV4dF09XCInaW50ZXJmYWNlLm9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW29mZlRleHRdPVwiJ2ludGVyZmFjZS5vZmYnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdVc2VyU2V0dGluZ3MkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cImNvbXBhY3RNb2RlJCB8IGFzeW5jXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRDb21wYWN0TW9kZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Nkcy10b2dnbGU+XG4gICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LXJvdz5cblxuICAgIDxjZHMtbGlzdC1yb3cgKm5nSWY9XCJlbmFibGVTaG93VXNlck5hbWVUb2dnbGVcIj5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxjZHMtdG9nZ2xlXG4gICAgICAgICAgW2xhYmVsXT1cIidzZXR0aW5ncy5pbnRlcmZhY2Uuc2hvd1VzZXJOYW1lJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW29uVGV4dF09XCInaW50ZXJmYWNlLm9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW29mZlRleHRdPVwiJ2ludGVyZmFjZS5vZmYnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdVc2VyU2V0dGluZ3MkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNob3dVc2VyTmFtZUluVG9wQmFyJCB8IGFzeW5jXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRTaG93VXNlck5hbWUoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9jZHMtdG9nZ2xlPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG4gIDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdmVyc2lvblRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwie2JhY2tlbmRWZXJzaW9uOiBiYWNrZW5kVmVyc2lvbiQgfCBhc3luY30gYXMgb2JzXCI+XG4gICAgPGNkcy1zdHJ1Y3R1cmVkLWxpc3QgKm5nSWY9XCJvYnMuYmFja2VuZFZlcnNpb24gfHwgZnJvbnRlbmRWZXJzaW9uXCI+XG4gICAgICA8Y2RzLWxpc3QtaGVhZGVyPlxuICAgICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdzZXR0aW5ncy52ZXJzaW9uLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3Qtcm93ICpuZ0lmPVwib2JzLmJhY2tlbmRWZXJzaW9uXCI+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1aWxkLWluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1aWxkLXRpdGxlXCI+e3tcbiAgICAgICAgICAgICAgJ2ludGVyZmFjZS5idWlsZHMuJyArIG9icy5iYWNrZW5kVmVyc2lvbi50aXRsZSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8Y2RzLXRhZyB0eXBlPVwiYmx1ZVwiPnt7IG9icy5iYWNrZW5kVmVyc2lvbi52ZXJzaW9uIH19PC9jZHMtdGFnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3Qtcm93ICpuZ0lmPVwiZnJvbnRlbmRWZXJzaW9uXCI+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1aWxkLWluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1aWxkLXRpdGxlXCI+e3tcbiAgICAgICAgICAgICAgJ2ludGVyZmFjZS5idWlsZHMudmFsdGltby1mcm9udGVuZC1saWJyYXJpZXMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWctY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxjZHMtdGFnIHR5cGU9XCJibHVlXCI+e3sgZnJvbnRlbmRWZXJzaW9uIH19PC9jZHMtdGFnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG4gICAgPC9jZHMtc3RydWN0dXJlZC1saXN0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tNYWlsVG8+XG4gIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgPGFcbiAgICAgIFtocmVmXT1cIlxuICAgICAgICAnbWFpbHRvOicgK1xuICAgICAgICBvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUby5lbWFpbCArXG4gICAgICAgICc/c3ViamVjdD0nICtcbiAgICAgICAgKG92ZXJyaWRlRmVlZGJhY2tNZW51SXRlbVRvTWFpbFRvLnN1YmplY3RUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAnJmJvZHk9JyArXG4gICAgICAgIChvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUby5ib2R5VHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIGNkc0xpbmtcbiAgICA+XG4gICAgICB7eyAnYWNjb3VudC5saW5rcy5mZWVkYmFjaycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2E+XG4gIDwvY2RzLWxpc3QtY29sdW1uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlnaHQtc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3JpZ2h0LXNpZGViYXIvcmlnaHQtc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3JpZ2h0LXNpZGViYXIvcmlnaHQtc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUdaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsV0FBVyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFDLHFCQUFxQixFQUFpQixNQUFNLGNBQWMsQ0FBQztBQUNuRSxPQUFPLEVBUUwsUUFBUSxHQUNULE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQWMsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHL0YsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQVN4QyxNQUFNLE9BQU8scUJBQXFCO0lBRXpCLFdBQVcsQ0FBQyxhQUFhO1FBQzlCLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUM7WUFFekUsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBcUdELFlBQ21CLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDeEMsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLGlCQUFvQyxFQUNwQyxlQUFnQztRQVRoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQTdHbkMsaUJBQVksR0FBYyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMvRCxpQkFBaUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDekMsa0JBQWtCLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFDLHlCQUF5QixFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqRCwwQkFBMEIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDbEQsNEJBQTRCLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3BELDJCQUEyQixFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNuRCx5QkFBeUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakQsMkJBQTJCLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ25ELHlCQUF5QixFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztTQUNsRCxDQUFDLENBQUM7UUFFYSxtQkFBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO1FBRWpELHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUU1RCx1QkFBa0IsR0FBMkIsYUFBYSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNwQyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUMxQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxXQUFXLENBQUM7WUFDbEYsR0FBRyxFQUFFLFdBQVc7WUFDaEIsUUFBUSxFQUFFLGdCQUFnQixLQUFLLFdBQVc7U0FDM0MsQ0FBQyxDQUFDLENBQ0osQ0FDRixDQUFDO1FBRWMsb0JBQWUsR0FBK0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvRSxpQkFBWSxHQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDdkQsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFFMUQsZ0NBQTJCLEdBQUcsSUFBSSxlQUFlLENBQ2hFLFNBQVMsQ0FDVixDQUFDO1FBRWMsOENBQXlDLEdBQ3ZELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNaLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFWSwrQkFBMEIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDO1FBQzFFLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQztRQUNuRCwwQkFBcUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFFcEUscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7UUFJbEUsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRWxCLGtCQUFhLEdBQTJCLGFBQWEsQ0FBQztZQUNwRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEI7Z0JBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7Z0JBQ3pFLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHO2dCQUM5QixRQUFRLEVBQUUsY0FBYyxLQUFLLHFCQUFxQixDQUFDLEdBQUc7YUFDdkQ7WUFDRDtnQkFDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQztnQkFDeEUsR0FBRyxFQUFFLHFCQUFxQixDQUFDLEdBQUc7Z0JBQzlCLFFBQVEsRUFBRSxjQUFjLEtBQUsscUJBQXFCLENBQUMsR0FBRzthQUN2RDtZQUNEO2dCQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFDO2dCQUMxRSxHQUFHLEVBQUUscUJBQXFCLENBQUMsTUFBTTtnQkFDakMsUUFBUSxFQUFFLGNBQWMsS0FBSyxxQkFBcUIsQ0FBQyxNQUFNO2FBQzFEO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFHSyw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFDL0IsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFHNUIscUNBQWdDLEdBQUcsS0FBSyxDQUFDO1FBRWhDLGNBQVMsR0FBd0IsSUFBSSxDQUFDLG1CQUFtQjthQUN2RSxjQUFjLEVBQUU7YUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFhbEQsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxPQUF5QyxFQUFFLFlBQVksR0FBRyxJQUFJO1FBQ3RGLE1BQU0sWUFBWSxHQUFJLE9BQWUsRUFBRSxJQUFJLEVBQUUsR0FBRztZQUM5QyxDQUFDLENBQUUsT0FBZSxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQzVCLENBQUMsQ0FBRSxPQUFrQixDQUFDO1FBRXhCLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsR0FBRyxDQUFDLFlBQVksQ0FBQzthQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFM0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLDRCQUE0QixDQUFDLFdBQW9CLEVBQUUsWUFBWSxHQUFHLElBQUk7UUFDM0UsSUFBSSxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1RCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU0sY0FBYyxDQUFDLFdBQW9CLEVBQUUsWUFBWSxHQUFHLElBQUk7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU0sZUFBZSxDQUFDLFlBQXFCLEVBQUUsWUFBWSxHQUFHLElBQUk7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTdELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FDdEIsYUFBK0MsRUFDL0MsWUFBWSxHQUFHLElBQUk7UUFFbkIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxJQUFLLGFBQXFCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUNuQyxhQUFxQixDQUFDLElBQUksRUFBRSxHQUE0QixDQUMxRCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsYUFBc0MsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7WUFFRCxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sTUFBTSxHQUFrQixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztRQUN6RCxNQUFNLGNBQWMsR0FBRyxNQUFNLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUVwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLENBQUM7UUFDdkQsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FBQztRQUVqRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQztRQUM5RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztRQUVsRSxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLGNBQWMsQ0FBQyxjQUFjLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDO1lBQ3JFLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLCtCQUErQixDQUFDO1FBQzNGLENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxFQUFFLGlCQUFpQixDQUFDO0lBQ3JELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ3JCLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQywyQkFBMkI7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZO1lBQzlCLElBQUksQ0FBQyxpQkFBaUI7U0FDdkIsQ0FBQzthQUNDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFO1lBQzlDLElBQUksUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBRWpGLElBQUksbUJBQW1CLEtBQUssZUFBZSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDakUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLCtCQUErQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FDM0UsT0FBTyxDQUFDLEVBQUU7d0JBQ1IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxFQUNELEdBQUcsRUFBRTt3QkFDSCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQyxDQUFDLENBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxFQUFFLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFTyw2QkFBNkI7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDRCQUE0QixFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzFFLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxRQUFnQjtRQUMvQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3pCLElBQUksRUFBRTthQUNOLE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDYixHQUFHLEdBQUc7WUFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDckIsQ0FBQyxFQUNGLEVBQUUsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5RCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QyxhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQywwQkFBMEI7WUFDL0IsSUFBSSxDQUFDLFlBQVk7WUFDakIsSUFBSSxDQUFDLHFCQUFxQjtZQUMxQixJQUFJLENBQUMsZ0JBQWdCO1NBQ3RCLENBQUM7YUFDQyxJQUFJLENBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FDUCxDQUFDLENBQ0MsWUFBWSxFQUNaLHlCQUF5QixFQUN6QixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZixFQUFFLEVBQUUsQ0FDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMseUJBQXlCO1lBQ3pCLFlBQVk7WUFDWixHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLEVBQUMsV0FBVyxFQUFDLENBQUM7WUFDbEQsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxFQUFDLG9CQUFvQixFQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxFQUFDLGNBQWMsRUFBQyxDQUFDO1NBQ3RELENBQUMsQ0FDTCxDQUNGO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQXNCO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0UsSUFBSSxJQUFJLENBQUMsdUJBQXVCO1lBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25GLElBQUksSUFBSSxDQUFDLHdCQUF3QjtZQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlGLElBQUksUUFBUSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QjtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNuQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OEdBdFdVLHFCQUFxQjtrR0FBckIscUJBQXFCLHNJQ2xEbEMscytYQXNWQTs7MkZEcFNhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSx1QkFBdUIsaUJBR2xCLGlCQUFpQixDQUFDLElBQUk7OFZBSTlCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1NlbGVjdGFibGVDYXJib25UaGVtZSwgVmFsdGltb1ZlcnNpb259IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBDb25maWdTZXJ2aWNlLFxuICBFbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzLFxuICBGZWVkYmFja01haWxUbyxcbiAgVXNlcklkZW50aXR5LFxuICBVc2VyU2V0dGluZ3MsXG4gIFVzZXJTZXR0aW5nc1NlcnZpY2UsXG4gIFZhbHRpbW9Db25maWcsXG4gIFZFUlNJT05TLFxufSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtVc2VyUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXAsIHRha2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtWZXJzaW9uU2VydmljZX0gZnJvbSAnLi4vdmVyc2lvbi92ZXJzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtDZHNUaGVtZVNlcnZpY2UsIFBhZ2VIZWFkZXJTZXJ2aWNlLCBTaGVsbFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7bWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TGlzdEl0ZW19IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXJpZ2h0LXNpZGViYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcmlnaHQtc2lkZWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JpZ2h0LXNpZGViYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgUmlnaHRTaWRlYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBwdWJsaWMgb25QYWdlQ2xpY2sodGFyZ2V0RWxlbWVudCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc2hlbGxTZXJ2aWNlLnBhbmVsRXhwYW5kZWQkLCB0aGlzLnNoZWxsU2VydmljZS5tb3VzZU9uVG9wQmFyJF0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoW3BhbmVsRXhwYW5kZWQsIG1vdXNlT25Ub3BCYXJdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPVxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpIHx8IG1vdXNlT25Ub3BCYXI7XG5cbiAgICAgICAgaWYgKCFjbGlja2VkSW5zaWRlICYmIHBhbmVsRXhwYW5kZWQpIHtcbiAgICAgICAgICB0aGlzLnNoZWxsU2VydmljZS5zZXRQYW5lbEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgc2V0dGluZ3NGb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICB0YXNrTm90aWZpY2F0aW9uczogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbnM6IG5ldyBGb3JtQ29udHJvbChmYWxzZSksXG4gICAgZW1haWxOb3RpZmljYXRpb25Pbk1vbmRheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbk9uVHVlc2RheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbk9uV2VkbmVzZGF5OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGVtYWlsTm90aWZpY2F0aW9uT25UaHVyc2RheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbk9uRnJpZGF5OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIGVtYWlsTm90aWZpY2F0aW9uT25TYXR1cmRheTogbmV3IEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICBlbWFpbE5vdGlmaWNhdGlvbk9uU3VuZGF5OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGFuZWxFeHBhbmRlZCQgPSB0aGlzLnNoZWxsU2VydmljZS5wYW5lbEV4cGFuZGVkJDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RlZExhbmd1YWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlT3B0aW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PHN0cmluZz4+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbGFuZ3VhZ2VMaXN0SXRlbXMkOiBPYnNlcnZhYmxlPExpc3RJdGVtW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fbGFuZ3VhZ2VPcHRpb25zJCxcbiAgICB0aGlzLl9zZWxlY3RlZExhbmd1YWdlJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtsYW5ndWFnZU9wdGlvbnMsIHNlbGVjdGVkTGFuZ3VhZ2VdKSA9PlxuICAgICAgbGFuZ3VhZ2VPcHRpb25zLm1hcChsYW5ndWFnZUtleSA9PiAoe1xuICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2V0dGluZ3MubGFuZ3VhZ2Uub3B0aW9ucy4nICsgbGFuZ3VhZ2VLZXkpLFxuICAgICAgICBrZXk6IGxhbmd1YWdlS2V5LFxuICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRMYW5ndWFnZSA9PT0gbGFuZ3VhZ2VLZXksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGJhY2tlbmRWZXJzaW9uJDogT2JzZXJ2YWJsZTxWYWx0aW1vVmVyc2lvbj4gPSB0aGlzLnZlcnNpb25TZXJ2aWNlLmdldFZlcnNpb24oKTtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJTdWJqZWN0JDogT2JzZXJ2YWJsZTxVc2VySWRlbnRpdHk+ID1cbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UuZ2V0VXNlclN1YmplY3QoKTtcbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0aW5nU2V0dGluZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0aW5nVXNlclNldHRpbmdzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3M+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzV2l0aFNpZGVFZmZlY3RzJDogT2JzZXJ2YWJsZTxFbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzPiA9XG4gICAgdGhpcy5fZW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyQucGlwZShcbiAgICAgIHRhcChyZXN1bHRzID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzRm9ybS5zZXRWYWx1ZShyZXN1bHRzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0aW5nU2V0dGluZ3MkLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUkID0gdGhpcy5zaGVsbFNlcnZpY2UuY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSQ7XG4gIHB1YmxpYyByZWFkb25seSBjb21wYWN0TW9kZSQgPSB0aGlzLnBhZ2VIZWFkZXJTZXJ2aWNlLmNvbXBhY3RNb2RlJDtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dVc2VyTmFtZUluVG9wQmFyJCA9IHRoaXMucGFnZUhlYWRlclNlcnZpY2Uuc2hvd1VzZXJOYW1lSW5Ub3BCYXIkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZlcnJlZFRoZW1lJCA9IHRoaXMuY2RzVGhlbWVTZXJ2aWNlLnByZWZlcnJlZFRoZW1lJDtcblxuICBwdWJsaWMgZnJvbnRlbmRWZXJzaW9uITogc3RyaW5nO1xuXG4gIHB1YmxpYyBzaG93VmFsdGltb1ZlcnNpb25zID0gdHJ1ZTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdGhlbWVPcHRpb25zJDogT2JzZXJ2YWJsZTxMaXN0SXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3ByZWZlcnJlZFRoZW1lJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtwcmVmZXJyZWRUaGVtZV0pID0+IFtcbiAgICAgIHtcbiAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NldHRpbmdzLmludGVyZmFjZS50aGVtZXMubGlnaHQnKSxcbiAgICAgICAga2V5OiBTZWxlY3RhYmxlQ2FyYm9uVGhlbWUuRzEwLFxuICAgICAgICBzZWxlY3RlZDogcHJlZmVycmVkVGhlbWUgPT09IFNlbGVjdGFibGVDYXJib25UaGVtZS5HMTAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2V0dGluZ3MuaW50ZXJmYWNlLnRoZW1lcy5kYXJrJyksXG4gICAgICAgIGtleTogU2VsZWN0YWJsZUNhcmJvblRoZW1lLkc5MCxcbiAgICAgICAgc2VsZWN0ZWQ6IHByZWZlcnJlZFRoZW1lID09PSBTZWxlY3RhYmxlQ2FyYm9uVGhlbWUuRzkwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3NldHRpbmdzLmludGVyZmFjZS50aGVtZXMuc3lzdGVtJyksXG4gICAgICAgIGtleTogU2VsZWN0YWJsZUNhcmJvblRoZW1lLlNZU1RFTSxcbiAgICAgICAgc2VsZWN0ZWQ6IHByZWZlcnJlZFRoZW1lID09PSBTZWxlY3RhYmxlQ2FyYm9uVGhlbWUuU1lTVEVNLFxuICAgICAgfSxcbiAgICBdKVxuICApO1xuXG4gIHB1YmxpYyBvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUbyE6IEZlZWRiYWNrTWFpbFRvO1xuICBwdWJsaWMgYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmcgPSB0cnVlO1xuICBwdWJsaWMgZW5hYmxlQ29tcGFjdE1vZGVUb2dnbGUgPSB0cnVlO1xuICBwdWJsaWMgZW5hYmxlU2hvd1VzZXJOYW1lVG9nZ2xlID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93UGxhbnRBVHJlZUJ1dHRvbiA9IGZhbHNlO1xuICBwdWJsaWMgcmVzZXRVcmwhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfaGlkZVZhbHRpbW9WZXJzaW9uc0Zvck5vbkFkbWlucyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQWRtaW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlXG4gICAgLmdldFVzZXJTdWJqZWN0KClcbiAgICAucGlwZShtYXAodXNlcklkZW50aXR5ID0+IHVzZXJJZGVudGl0eT8ucm9sZXMuaW5jbHVkZXMoJ1JPTEVfQURNSU4nKSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclByb3ZpZGVyU2VydmljZTogVXNlclByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZlcnNpb25TZXJ2aWNlOiBWZXJzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNoZWxsU2VydmljZTogU2hlbGxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyU2V0dGluZ3NTZXJ2aWNlOiBVc2VyU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnZUhlYWRlclNlcnZpY2U6IFBhZ2VIZWFkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RzVGhlbWVTZXJ2aWNlOiBDZHNUaGVtZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRTZXR0aW5ncygpO1xuICAgIHRoaXMuaW5pdEZyb250ZW5kVmVyc2lvbigpO1xuICAgIHRoaXMub3BlblNob3dWZXJzaW9uc1N1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuc2V0TGFuZ3VhZ2UoKTtcbiAgICB0aGlzLmxvYWRFbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzKCk7XG4gICAgdGhpcy5vcGVuRm9ybVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVVzZXJMYW5ndWFnZShsYW5nS2V5OiBzdHJpbmcgfCB7aXRlbT86IHtrZXk/OiBzdHJpbmd9fSwgc2F2ZVNldHRpbmdzID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxhbmdLZXlUb1VzZSA9IChsYW5nS2V5IGFzIGFueSk/Lml0ZW0/LmtleVxuICAgICAgPyAobGFuZ0tleSBhcyBhbnkpPy5pdGVtLmtleVxuICAgICAgOiAobGFuZ0tleSBhcyBzdHJpbmcpO1xuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAudXNlKGxhbmdLZXlUb1VzZSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhbmdLZXknLCBsYW5nS2V5VG9Vc2UpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZExhbmd1YWdlJC5uZXh0KGxhbmdLZXlUb1VzZSk7XG5cbiAgICAgICAgaWYgKHNhdmVTZXR0aW5ncykge1xuICAgICAgICAgIHRoaXMuc2F2ZVVzZXJTZXR0aW5ncygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51KGNvbGxhcHNpYmxlOiBib29sZWFuLCBzYXZlU2V0dGluZ3MgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5zaGVsbFNlcnZpY2Uuc2V0Q29sbGFwc2libGVXaWRlc2NyZWVuTWVudShjb2xsYXBzaWJsZSk7XG5cbiAgICBpZiAoc2F2ZVNldHRpbmdzKSB7XG4gICAgICB0aGlzLnNhdmVVc2VyU2V0dGluZ3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tcGFjdE1vZGUoY29tcGFjdE1vZGU6IGJvb2xlYW4sIHNhdmVTZXR0aW5ncyA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VIZWFkZXJTZXJ2aWNlLnNldENvbXBhY3RNb2RlKGNvbXBhY3RNb2RlKTtcblxuICAgIGlmIChzYXZlU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuc2F2ZVVzZXJTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93VXNlck5hbWUoc2hvd1VzZXJOYW1lOiBib29sZWFuLCBzYXZlU2V0dGluZ3MgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSGVhZGVyU2VydmljZS5zZXRTaG93VXNlck5hbWVJblRvcEJhcihzaG93VXNlck5hbWUpO1xuXG4gICAgaWYgKHNhdmVTZXR0aW5ncykge1xuICAgICAgdGhpcy5zYXZlVXNlclNldHRpbmdzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFByZWZlcnJlZFRoZW1lKFxuICAgIHNlbGVjdGVkVGhlbWU6IHN0cmluZyB8IHtpdGVtPzoge2tleT86IHN0cmluZ319LFxuICAgIHNhdmVTZXR0aW5ncyA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmcpIHtcbiAgICAgIGlmICgoc2VsZWN0ZWRUaGVtZSBhcyBhbnkpPy5pdGVtPy5rZXkpIHtcbiAgICAgICAgdGhpcy5jZHNUaGVtZVNlcnZpY2Uuc2V0UHJlZmVycmVkVGhlbWUoXG4gICAgICAgICAgKHNlbGVjdGVkVGhlbWUgYXMgYW55KS5pdGVtPy5rZXkgYXMgU2VsZWN0YWJsZUNhcmJvblRoZW1lXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNkc1RoZW1lU2VydmljZS5zZXRQcmVmZXJyZWRUaGVtZShzZWxlY3RlZFRoZW1lIGFzIFNlbGVjdGFibGVDYXJib25UaGVtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzYXZlU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5zYXZlVXNlclNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UubG9nb3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTZXR0aW5ncygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWc6IFZhbHRpbW9Db25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LmNvbmZpZztcbiAgICBjb25zdCBmZWF0dXJlVG9nZ2xlcyA9IGNvbmZpZz8uZmVhdHVyZVRvZ2dsZXMgfHwge307XG5cbiAgICB0aGlzLnJlc2V0VXJsID0gY29uZmlnPy5jaGFuZ2VQYXNzd29yZFVybD8uZW5kcG9pbnRVcmk7XG4gICAgdGhpcy5vdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUbyA9IGNvbmZpZz8ub3ZlcnJpZGVGZWVkYmFja01lbnVJdGVtVG9NYWlsVG87XG5cbiAgICB0aGlzLmVuYWJsZVNob3dVc2VyTmFtZVRvZ2dsZSA9ICEhZmVhdHVyZVRvZ2dsZXMuZW5hYmxlVXNlck5hbWVJblRvcEJhclRvZ2dsZTtcbiAgICB0aGlzLnNob3dQbGFudEFUcmVlQnV0dG9uID0gISFmZWF0dXJlVG9nZ2xlcy5zaG93UGxhbnRBVHJlZUJ1dHRvbjtcblxuICAgIGlmIChmZWF0dXJlVG9nZ2xlcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmcnKSkge1xuICAgICAgdGhpcy5hbGxvd1VzZXJUaGVtZVN3aXRjaGluZyA9ICEhZmVhdHVyZVRvZ2dsZXMuYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmc7XG4gICAgfVxuXG4gICAgaWYgKGZlYXR1cmVUb2dnbGVzLmhhc093blByb3BlcnR5KCdlbmFibGVDb21wYWN0TW9kZVRvZ2dsZScpKSB7XG4gICAgICB0aGlzLmVuYWJsZUNvbXBhY3RNb2RlVG9nZ2xlID0gISFmZWF0dXJlVG9nZ2xlcy5lbmFibGVDb21wYWN0TW9kZVRvZ2dsZTtcbiAgICB9XG5cbiAgICBpZiAoZmVhdHVyZVRvZ2dsZXMuaGFzT3duUHJvcGVydHkoJ2hpZGVWYWx0aW1vVmVyc2lvbnNGb3JOb25BZG1pbnMnKSkge1xuICAgICAgdGhpcy5faGlkZVZhbHRpbW9WZXJzaW9uc0Zvck5vbkFkbWlucyA9ICEhZmVhdHVyZVRvZ2dsZXMuaGlkZVZhbHRpbW9WZXJzaW9uc0Zvck5vbkFkbWlucztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRGcm9udGVuZFZlcnNpb24oKTogdm9pZCB7XG4gICAgdGhpcy5mcm9udGVuZFZlcnNpb24gPSBWRVJTSU9OUz8uZnJvbnRlbmRMaWJyYXJpZXM7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Gb3JtU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuX2VtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MkLFxuICAgICAgICB0aGlzLnNldHRpbmdzRm9ybS52YWx1ZUNoYW5nZXMsXG4gICAgICAgIHRoaXMudXBkYXRpbmdTZXR0aW5ncyQsXG4gICAgICBdKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKFtzZXR0aW5ncywgZm9ybVZhbHVlLCB1cGRhdGluZ1NldHRpbmdzXSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzICYmIGZvcm1WYWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nc1N0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5zb3J0T2JqZWN0QWxwaGFiZXRpY2FsbHkoc2V0dGluZ3MpKTtcbiAgICAgICAgICAgICAgY29uc3QgZm9ybVN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodGhpcy5zb3J0T2JqZWN0QWxwaGFiZXRpY2FsbHkoZm9ybVZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgaWYgKHNldHRpbmdzU3RyaW5naWZpZWQgIT09IGZvcm1TdHJpbmdpZmllZCAmJiAhdXBkYXRpbmdTZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdTZXR0aW5ncyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJQcm92aWRlclNlcnZpY2UudXBkYXRlRW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyhmb3JtVmFsdWUpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzJC5uZXh0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nU2V0dGluZ3MkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyQubmV4dChzZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdTZXR0aW5ncyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyUHJvdmlkZXJTZXJ2aWNlLmdldEVtYWlsTm90aWZpY2F0aW9uU2V0dGluZ3MoKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICB0aGlzLl9lbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzJC5uZXh0KHJlc3VsdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZW1haWxOb3RpZmljYXRpb25TZXR0aW5ncyQubmV4dCh0aGlzLnNldHRpbmdzRm9ybS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldExhbmd1YWdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3NlbGVjdGVkTGFuZ3VhZ2UkLm5leHQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKTtcbiAgICB0aGlzLl9sYW5ndWFnZU9wdGlvbnMkLm5leHQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxhbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydE9iamVjdEFscGhhYmV0aWNhbGx5KGpzT2JqZWN0OiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhqc09iamVjdClcbiAgICAgIC5zb3J0KClcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2tleV06IGpzT2JqZWN0W2tleV0sXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXNlclNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMudXNlclNldHRpbmdzU2VydmljZS5nZXRVc2VyU2V0dGluZ3MoKS5zdWJzY3JpYmUoc2V0dGluZ3MgPT4ge1xuICAgICAgdGhpcy51cGRhdGluZ1VzZXJTZXR0aW5ncyQubmV4dChmYWxzZSk7XG5cbiAgICAgIGlmICghc2V0dGluZ3M/Lmxhbmd1YWdlQ29kZSkge1xuICAgICAgICB0aGlzLnNhdmVVc2VyU2V0dGluZ3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0VXNlclNldHRpbmdzKHNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVVzZXJTZXR0aW5ncygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0aW5nVXNlclNldHRpbmdzJC5uZXh0KHRydWUpO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9zZWxlY3RlZExhbmd1YWdlJCxcbiAgICAgIHRoaXMuY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSQsXG4gICAgICB0aGlzLmNvbXBhY3RNb2RlJCxcbiAgICAgIHRoaXMuc2hvd1VzZXJOYW1lSW5Ub3BCYXIkLFxuICAgICAgdGhpcy5fcHJlZmVycmVkVGhlbWUkLFxuICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgIChbXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICBjb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51LFxuICAgICAgICAgICAgY29tcGFjdE1vZGUsXG4gICAgICAgICAgICBzaG93VXNlck5hbWVJblRvcEJhcixcbiAgICAgICAgICAgIHByZWZlcnJlZFRoZW1lLFxuICAgICAgICAgIF0pID0+XG4gICAgICAgICAgICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2Uuc2F2ZVVzZXJTZXR0aW5ncyh7XG4gICAgICAgICAgICAgIGNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUsXG4gICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgLi4uKHRoaXMuZW5hYmxlQ29tcGFjdE1vZGVUb2dnbGUgJiYge2NvbXBhY3RNb2RlfSksXG4gICAgICAgICAgICAgIC4uLih0aGlzLmVuYWJsZVNob3dVc2VyTmFtZVRvZ2dsZSAmJiB7c2hvd1VzZXJOYW1lSW5Ub3BCYXJ9KSxcbiAgICAgICAgICAgICAgLi4uKHRoaXMuYWxsb3dVc2VyVGhlbWVTd2l0Y2hpbmcgJiYge3ByZWZlcnJlZFRoZW1lfSksXG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGluZ1VzZXJTZXR0aW5ncyQubmV4dChmYWxzZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlclNldHRpbmdzKHNldHRpbmdzOiBVc2VyU2V0dGluZ3MpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3RlZExhbmd1YWdlJC5uZXh0KHNldHRpbmdzLmxhbmd1YWdlQ29kZSk7XG4gICAgdGhpcy51cGRhdGVVc2VyTGFuZ3VhZ2Uoc2V0dGluZ3MubGFuZ3VhZ2VDb2RlLCBmYWxzZSk7XG4gICAgdGhpcy5zZXRDb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51KHNldHRpbmdzLmNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUsIGZhbHNlKTtcbiAgICBpZiAodGhpcy5lbmFibGVDb21wYWN0TW9kZVRvZ2dsZSkgdGhpcy5zZXRDb21wYWN0TW9kZShzZXR0aW5ncy5jb21wYWN0TW9kZSwgZmFsc2UpO1xuICAgIGlmICh0aGlzLmVuYWJsZVNob3dVc2VyTmFtZVRvZ2dsZSkgdGhpcy5zZXRTaG93VXNlck5hbWUoc2V0dGluZ3Muc2hvd1VzZXJOYW1lSW5Ub3BCYXIsIGZhbHNlKTtcbiAgICBpZiAoc2V0dGluZ3MucHJlZmVycmVkVGhlbWUgJiYgdGhpcy5hbGxvd1VzZXJUaGVtZVN3aXRjaGluZykge1xuICAgICAgdGhpcy5zZXRQcmVmZXJyZWRUaGVtZShzZXR0aW5ncy5wcmVmZXJyZWRUaGVtZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblNob3dWZXJzaW9uc1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuX2lzQWRtaW4kLnN1YnNjcmliZShpc0FkbWluID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGVWYWx0aW1vVmVyc2lvbnNGb3JOb25BZG1pbnMgJiYgIWlzQWRtaW4pIHtcbiAgICAgICAgICB0aGlzLnNob3dWYWx0aW1vVmVyc2lvbnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJyaWdodC1zaWRlYmFyLW1lbnVcIj5cbiAgPGNkcy1wYW5lbCBbZXhwYW5kZWRdPVwicGFuZWxFeHBhbmRlZCQgfCBhc3luY1wiPlxuICAgIDxkaXYgY2RzR3JpZCBbY29uZGVuc2VkXT1cInRydWVcIj5cbiAgICAgIDxkaXYgY2RzUm93PlxuICAgICAgICA8ZGl2IGNkc0NvbCBbY29sdW1uTnVtYmVyc109XCJ7bGc6IDE2fVwiIGNsYXNzPVwibWVudS10YWJzXCIgY2RzTGF5ZXI+XG4gICAgICAgICAgPGNkcy10YWJzIGNsYXNzPVwiY2RzLS10YWItLWxpc3QtLWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgIDxjZHMtdGFiIFtoZWFkaW5nXT1cIidhY2NvdW50LnRpdGxlJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWNjb3VudFRhYlRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Nkcy10YWI+XG5cbiAgICAgICAgICAgIDxjZHMtdGFiIFtoZWFkaW5nXT1cIidzZXR0aW5ncy50aXRsZScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNldHRpbmdzVGFiVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvY2RzLXRhYj5cbiAgICAgICAgICA8L2Nkcy10YWJzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Nkcy1wYW5lbD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2FjY291bnRUYWJUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjY291bnRJbmZvcm1hdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2V0dGluZ3NUYWJUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhbmd1YWdlU2V0dGluZ3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcmZhY2VTZXR0aW5nc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vdGlmaWNhdGlvblNldHRpbmdzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cblxuICBAaWYgKHNob3dWYWx0aW1vVmVyc2lvbnMpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmVyc2lvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWNjb3VudEluZm9ybWF0aW9uVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdhY2NvdW50LmluZm9ybWF0aW9uVGl0bGUnIHwgdHJhbnNsYXRlIH19PC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1oZWFkZXI+XG5cbiAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjY291bnRJbmZvcm1hdGlvblRhYmxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjY291bnRJbmZvcm1hdGlvblRhYmxlVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJpbmZvcm1hdGlvbi10YWJsZSBhY2NvdW50LWluZm9ybWF0aW9uXCI+XG4gICAgPGNkcy1zdHJ1Y3R1cmVkLWxpc3QgKm5nSWY9XCJ1c2VyU3ViamVjdCQgfCBhc3luYyBhcyB1c2VyU3ViamVjdFwiPlxuICAgICAgPGNkcy1saXN0LXJvdz5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtblxuICAgICAgICAgID57eyAnaW50ZXJmYWNlLmVtYWlsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxjZHMtdGFnIHR5cGU9XCJibHVlXCI+e3sgdXNlclN1YmplY3QuZW1haWwgfX08L2Nkcy10YWc+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG5cbiAgICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW5cbiAgICAgICAgICA+e3sgJ2ludGVyZmFjZS51c2VybmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8Y2RzLXRhZyB0eXBlPVwiYmx1ZVwiPnt7IHVzZXJTdWJqZWN0LnVzZXJuYW1lIH19PC9jZHMtdGFnPlxuICAgICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICAgIDwvY2RzLWxpc3Qtcm93PlxuXG4gICAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgICA8Y2RzLWxpc3QtY29sdW1uXG4gICAgICAgICAgPnt7ICdpbnRlcmZhY2UubmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8Y2RzLXRhZyB0eXBlPVwiYmx1ZVwiPnt7IHVzZXJTdWJqZWN0LmZpcnN0TmFtZSArICcgJyArIHVzZXJTdWJqZWN0Lmxhc3ROYW1lIH19PC9jZHMtdGFnPlxuICAgICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICAgIDwvY2RzLWxpc3Qtcm93PlxuICAgIDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpbmtzVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdhY2NvdW50LnF1aWNrTGlua3MnIHwgdHJhbnNsYXRlIH19PC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1oZWFkZXI+XG5cbiAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtzVGFibGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG4gIDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlua3NUYWJsZVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiaW5mb3JtYXRpb24tdGFibGVcIj5cbiAgICA8Y2RzLXN0cnVjdHVyZWQtbGlzdD5cbiAgICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vZG9jcy52YWx0aW1vLm5sXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2RzTGluaz57e1xuICAgICAgICAgICAgJ2FjY291bnQubGlua3MuaGVscCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICB9fTwvYT5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cblxuICAgICAgPGNkcy1saXN0LXJvdz5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtbiAqbmdJZj1cIiFvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUbzsgZWxzZSBmZWVkYmFja01haWxUb1wiPlxuICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy52YWx0aW1vLm5sL2ZlZWRiYWNrXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2RzTGluaz57e1xuICAgICAgICAgICAgJ2FjY291bnQubGlua3MuZmVlZGJhY2snIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG5cbiAgICAgIDxjZHMtbGlzdC1yb3cgKm5nSWY9XCJyZXNldFVybFwiPlxuICAgICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDxhIFtocmVmXT1cInJlc2V0VXJsXCIgY2RzTGluaz57eyAnYWNjb3VudC5saW5rcy5yZXNldFBhc3N3b3JkJyB8IHRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cblxuICAgICAgPGNkcy1saXN0LXJvdz5cbiAgICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2RzTGluayAoY2xpY2spPVwibG9nb3V0KClcIj57e1xuICAgICAgICAgICAgJ2FjY291bnQubGlua3Muc2lnbk91dCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICB9fTwvYT5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cblxuICAgICAgPGNkcy1saXN0LXJvdyAqbmdJZj1cInNob3dQbGFudEFUcmVlQnV0dG9uXCI+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zdWNjZXNzXCJcbiAgICAgICAgICAgIGhyZWY9XCJtYWlsdG86dmFsdGltb0ByaXRlbnNlLmNvbT9zdWJqZWN0PVBsYW50IGVlbiBib29tIHZvb3IgVmFsdGltbyZib2R5PUhhbGxvIFZhbHRpbW8gZ2VicnVpa2VyLCUwRCUwRE1ldCBoZXQgdmVyc3R1cmVuIHZhbiBkZXplIGUtbWFpbCBnYWFuIHdlIGdlbGlqayBhYW4gZGUgc2xhZyBvbSBlZW4gYm9vbSB0ZSBwbGFudGVuLiBIaWVybWVlIGNvbXBlbnNlcmVuIHdlIHZvb3IgZWVuIGRlZWwgZGUgQ08yIHVpdHN0b290IHZhbiBqZSBWYWx0aW1vIGdlYnJ1aWsuJTBEJTBETWV0IEdyb2VuZSBHcm9ldCwlMEQlMERIZXQgVmFsdGltbyB0ZWFtJTBEJTBEKkRlemUgYm9tZW5wbGFudGFjdGllIGthbiAxIGtlZXIgaW5nZXpldCB3b3JkZW4gZG9vciBlbGtlIGdlcmVnaXN0cmVlcmRlIFZhbHRpbW8gZ2VicnVpa2VyLiUwRCUwRCoqIFJpdGVuc2UgcGxhbnQgb29rIGphYXJsaWprcyBib21lbiB2b29yIGFsbGUgVmFsdGltbyBpbnN0YWxsYXRpZXMgZGllIGluIGdlYnJ1aWsgemlqbi5cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIGNkc0xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnYWNjb3VudC5saW5rcy5wbGFudEFUcmVlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LXJvdz5cbiAgICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsYW5ndWFnZVNldHRpbmdzVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdzZXR0aW5ncy5sYW5ndWFnZS50aXRsZScgfCB0cmFuc2xhdGUgfX08L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LWhlYWRlcj5cblxuICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgW2lkXT1cIidsYW5ndWFnZS1kcm9wZG93bidcIlxuICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgKHNlbGVjdGVkKT1cInVwZGF0ZVVzZXJMYW5ndWFnZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwiKGxhbmd1YWdlTGlzdEl0ZW1zJCB8IGFzeW5jKSB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG4gIDwvY2RzLXN0cnVjdHVyZWQtbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm90aWZpY2F0aW9uU2V0dGluZ3NUZW1wbGF0ZT5cbiAgPGNkcy1zdHJ1Y3R1cmVkLWxpc3QgKm5nSWY9XCJlbWFpbE5vdGlmaWNhdGlvblNldHRpbmdzV2l0aFNpZGVFZmZlY3RzJCB8IGFzeW5jXCI+XG4gICAgPGNkcy1saXN0LWhlYWRlcj5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+e3sgJ3NldHRpbmdzLm5vdGlmaWNhdGlvbi50aXRsZScgfCB0cmFuc2xhdGUgfX08L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LWhlYWRlcj5cblxuICAgIDxjZHMtbGlzdC1yb3c+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNldHRpbmdzRm9ybVwiIGNsYXNzPVwidG9nZ2xlLWdyb3VwXCI+XG4gICAgICAgICAgPGNkcy10b2dnbGVcbiAgICAgICAgICAgIFtsYWJlbF09XCInc2V0dGluZ3Mubm90aWZpY2F0aW9uLnRhc2tOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbb25UZXh0XT1cIidpbnRlcmZhY2Uub24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtvZmZUZXh0XT1cIidpbnRlcmZhY2Uub2ZmJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0YXNrTm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdTZXR0aW5ncyQgfCBhc3luY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvY2RzLXRvZ2dsZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3tcbiAgICAgICAgICAgICdzZXR0aW5ncy5ub3RpZmljYXRpb24uZW1haWxOb3RpZmljYXRpb25zSW50cm8nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuXG4gICAgPGNkcy1saXN0LXJvdz5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2V0dGluZ3NGb3JtXCIgY2xhc3M9XCJ0b2dnbGUtZ3JvdXBcIj5cbiAgICAgICAgICA8Y2RzLXRvZ2dsZVxuICAgICAgICAgICAgW2xhYmVsXT1cIidzZXR0aW5ncy5ub3RpZmljYXRpb24uZW1haWxOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbb25UZXh0XT1cIidpbnRlcmZhY2Uub24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtvZmZUZXh0XT1cIidpbnRlcmZhY2Uub2ZmJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbE5vdGlmaWNhdGlvbnNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwZGF0aW5nU2V0dGluZ3MkIHwgYXN5bmNcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2Nkcy10b2dnbGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7XG4gICAgICAgICAgICAnc2V0dGluZ3Mubm90aWZpY2F0aW9uLnRhc2tOb3RpZmljYXRpb25zSW50cm8nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuICA8L2Nkcy1zdHJ1Y3R1cmVkLWxpc3Q+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ludGVyZmFjZVNldHRpbmdzVGVtcGxhdGU+XG4gIDxjZHMtc3RydWN0dXJlZC1saXN0PlxuICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICA8Y2RzLWxpc3QtY29sdW1uPnt7ICdzZXR0aW5ncy5pbnRlcmZhY2UudGl0bGUnIHwgdHJhbnNsYXRlIH19PC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1oZWFkZXI+XG5cbiAgICA8Y2RzLWxpc3Qtcm93PlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPGNkcy10b2dnbGVcbiAgICAgICAgICBbbGFiZWxdPVwiJ3NldHRpbmdzLmludGVyZmFjZS5jb2xsYXBzaWJsZU1lbnUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbb25UZXh0XT1cIidpbnRlcmZhY2Uub24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbb2ZmVGV4dF09XCInaW50ZXJmYWNlLm9mZicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGRhdGluZ1VzZXJTZXR0aW5ncyQgfCBhc3luY1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwiY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSQgfCBhc3luY1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0Q29sbGFwc2libGVXaWRlc2NyZWVuTWVudSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Nkcy10b2dnbGU+XG4gICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LXJvdz5cblxuICAgIDxjZHMtbGlzdC1yb3cgKm5nSWY9XCJhbGxvd1VzZXJUaGVtZVN3aXRjaGluZ1wiPlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgIFtsYWJlbF09XCInc2V0dGluZ3MuaW50ZXJmYWNlLnRoZW1lUHJlZmVyZW5jZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgKHNlbGVjdGVkKT1cInNldFByZWZlcnJlZFRoZW1lKCRldmVudClcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCIodGhlbWVPcHRpb25zJCB8IGFzeW5jKSB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgICAgPC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgPC9jZHMtbGlzdC1yb3c+XG5cbiAgICA8Y2RzLWxpc3Qtcm93ICpuZ0lmPVwiZW5hYmxlQ29tcGFjdE1vZGVUb2dnbGVcIj5cbiAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgIDxjZHMtdG9nZ2xlXG4gICAgICAgICAgW2xhYmVsXT1cIidzZXR0aW5ncy5pbnRlcmZhY2UuY29tcGFjdE1vZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbb25UZXh0XT1cIidpbnRlcmZhY2Uub24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbb2ZmVGV4dF09XCInaW50ZXJmYWNlLm9mZicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGRhdGluZ1VzZXJTZXR0aW5ncyQgfCBhc3luY1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwiY29tcGFjdE1vZGUkIHwgYXN5bmNcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldENvbXBhY3RNb2RlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvY2RzLXRvZ2dsZT5cbiAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgIDwvY2RzLWxpc3Qtcm93PlxuXG4gICAgPGNkcy1saXN0LXJvdyAqbmdJZj1cImVuYWJsZVNob3dVc2VyTmFtZVRvZ2dsZVwiPlxuICAgICAgPGNkcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPGNkcy10b2dnbGVcbiAgICAgICAgICBbbGFiZWxdPVwiJ3NldHRpbmdzLmludGVyZmFjZS5zaG93VXNlck5hbWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbb25UZXh0XT1cIidpbnRlcmZhY2Uub24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbb2ZmVGV4dF09XCInaW50ZXJmYWNlLm9mZicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGRhdGluZ1VzZXJTZXR0aW5ncyQgfCBhc3luY1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2hvd1VzZXJOYW1lSW5Ub3BCYXIkIHwgYXN5bmNcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldFNob3dVc2VyTmFtZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2Nkcy10b2dnbGU+XG4gICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICA8L2Nkcy1saXN0LXJvdz5cbiAgPC9jZHMtc3RydWN0dXJlZC1saXN0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN2ZXJzaW9uVGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ7YmFja2VuZFZlcnNpb246IGJhY2tlbmRWZXJzaW9uJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICA8Y2RzLXN0cnVjdHVyZWQtbGlzdCAqbmdJZj1cIm9icy5iYWNrZW5kVmVyc2lvbiB8fCBmcm9udGVuZFZlcnNpb25cIj5cbiAgICAgIDxjZHMtbGlzdC1oZWFkZXI+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+e3sgJ3NldHRpbmdzLnZlcnNpb24udGl0bGUnIHwgdHJhbnNsYXRlIH19PC9jZHMtbGlzdC1jb2x1bW4+XG4gICAgICA8L2Nkcy1saXN0LWhlYWRlcj5cblxuICAgICAgPGNkcy1saXN0LXJvdyAqbmdJZj1cIm9icy5iYWNrZW5kVmVyc2lvblwiPlxuICAgICAgICA8Y2RzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWlsZC1pbmZvcm1hdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidWlsZC10aXRsZVwiPnt7XG4gICAgICAgICAgICAgICdpbnRlcmZhY2UuYnVpbGRzLicgKyBvYnMuYmFja2VuZFZlcnNpb24udGl0bGUgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPGNkcy10YWcgdHlwZT1cImJsdWVcIj57eyBvYnMuYmFja2VuZFZlcnNpb24udmVyc2lvbiB9fTwvY2RzLXRhZz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkcy1saXN0LWNvbHVtbj5cbiAgICAgIDwvY2RzLWxpc3Qtcm93PlxuXG4gICAgICA8Y2RzLWxpc3Qtcm93ICpuZ0lmPVwiZnJvbnRlbmRWZXJzaW9uXCI+XG4gICAgICAgIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1aWxkLWluZm9ybWF0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1aWxkLXRpdGxlXCI+e3tcbiAgICAgICAgICAgICAgJ2ludGVyZmFjZS5idWlsZHMudmFsdGltby1mcm9udGVuZC1saWJyYXJpZXMnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWctY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxjZHMtdGFnIHR5cGU9XCJibHVlXCI+e3sgZnJvbnRlbmRWZXJzaW9uIH19PC9jZHMtdGFnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RzLWxpc3QtY29sdW1uPlxuICAgICAgPC9jZHMtbGlzdC1yb3c+XG4gICAgPC9jZHMtc3RydWN0dXJlZC1saXN0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tNYWlsVG8+XG4gIDxjZHMtbGlzdC1jb2x1bW4+XG4gICAgPGFcbiAgICAgIFtocmVmXT1cIlxuICAgICAgICAnbWFpbHRvOicgK1xuICAgICAgICBvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUby5lbWFpbCArXG4gICAgICAgICc/c3ViamVjdD0nICtcbiAgICAgICAgKG92ZXJyaWRlRmVlZGJhY2tNZW51SXRlbVRvTWFpbFRvLnN1YmplY3RUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAnJmJvZHk9JyArXG4gICAgICAgIChvdmVycmlkZUZlZWRiYWNrTWVudUl0ZW1Ub01haWxUby5ib2R5VHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgIGNkc0xpbmtcbiAgICA+XG4gICAgICB7eyAnYWNjb3VudC5saW5rcy5mZWVkYmFjaycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2E+XG4gIDwvY2RzLWxpc3QtY29sdW1uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|