tango-app-ui-manage-settings 3.7.48 → 3.7.49
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/esm2022/lib/components/configurations/configurations.component.mjs +13 -48
- package/esm2022/lib/components/configurations/footfall-configuration/footfall-configuration.component.mjs +3 -3
- package/esm2022/lib/components/configurations/ticket-configuration/ticket-configuration.component.mjs +7 -101
- package/esm2022/lib/components/documents/brand-documents/brand-documents.component.mjs +21 -5
- package/esm2022/lib/services/client-api.service.mjs +1 -11
- package/esm2022/lib/tango-manage-settings.module.mjs +3 -6
- package/fesm2022/tango-app-ui-manage-settings.mjs +49 -301
- package/fesm2022/tango-app-ui-manage-settings.mjs.map +1 -1
- package/lib/components/configurations/configurations.component.d.ts +0 -3
- package/lib/components/configurations/ticket-configuration/ticket-configuration.component.d.ts +2 -28
- package/lib/components/documents/brand-documents/brand-documents.component.d.ts +5 -0
- package/lib/services/client-api.service.d.ts +0 -4
- package/lib/tango-manage-settings.module.d.ts +12 -13
- package/package.json +1 -1
- package/esm2022/lib/components/configurations/trax-configuration/trax-configuration.component.mjs +0 -136
- package/lib/components/configurations/trax-configuration/trax-configuration.component.d.ts +0 -50
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, ViewChild } from '@angular/core';
|
|
2
|
-
import { Subject,
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "../../services/client-api.service";
|
|
5
5
|
import * as i2 from "tango-app-ui-shared";
|
|
@@ -21,7 +21,6 @@ import * as i17 from "./store-time-configuration/store-time-configuration.compon
|
|
|
21
21
|
import * as i18 from "./revop-configuration/revop-configuration.component";
|
|
22
22
|
import * as i19 from "./footfall-configuration/footfall-configuration.component";
|
|
23
23
|
import * as i20 from "./zone-configuration/zone-configuration.component";
|
|
24
|
-
import * as i21 from "./trax-configuration/trax-configuration.component";
|
|
25
24
|
export class ConfigurationsComponent {
|
|
26
25
|
clientApi;
|
|
27
26
|
toaster;
|
|
@@ -35,8 +34,6 @@ export class ConfigurationsComponent {
|
|
|
35
34
|
userConfigPrevValues;
|
|
36
35
|
userRole;
|
|
37
36
|
zoneSubscribed = false;
|
|
38
|
-
/** Trax Configuration section shows only for clients subscribed to Tango Trax. */
|
|
39
|
-
traxSubscribed = false;
|
|
40
37
|
accordion;
|
|
41
38
|
isVMSEnabledUser = false;
|
|
42
39
|
isRevops = false;
|
|
@@ -61,7 +58,6 @@ export class ConfigurationsComponent {
|
|
|
61
58
|
if (this.clientData.planDetails.product.filter((ele) => ele.productName === 'tangoZone').length > 0) {
|
|
62
59
|
this.zoneSubscribed = true;
|
|
63
60
|
}
|
|
64
|
-
this.traxSubscribed = (this.clientData.planDetails?.product || []).some((ele) => ele.productName === 'tangoTrax');
|
|
65
61
|
this.populateTicketConfiguration(e);
|
|
66
62
|
this.populateFeatureConfiguration(e);
|
|
67
63
|
this.populateFootfallConfiguration(e);
|
|
@@ -86,21 +82,13 @@ export class ConfigurationsComponent {
|
|
|
86
82
|
installationReAssign: data?.ticketConfigs?.installationReAssign,
|
|
87
83
|
sendToAdmin: data?.ticketConfigs?.alertSentTo?.admin,
|
|
88
84
|
sendToUser: data?.ticketConfigs?.alertSentTo?.user,
|
|
89
|
-
infraTicketType: data?.ticketConfigs?.infraTicketType,
|
|
90
85
|
downTimeType: data?.ticketConfigs?.downTimeType,
|
|
91
|
-
|
|
92
|
-
// the field the generation cron reads, so it is what the form must show.
|
|
93
|
-
infraDownTime: data?.ticketConfigs?.infraTicketType === 'V2'
|
|
94
|
-
? data?.ticketConfigs?.infraV2DownTime
|
|
95
|
-
: data?.ticketConfigs?.infraDownTime,
|
|
86
|
+
infraDownTime: data?.ticketConfigs?.infraDownTime,
|
|
96
87
|
MinFilesCount: data?.ticketConfigs?.MinFilesCount,
|
|
97
88
|
isRcaTicketAssign: data?.ticketConfigs?.isRcaTicketAssign,
|
|
98
89
|
rcaTicketAssign: data?.ticketConfigs?.rcaTicketAssign,
|
|
99
90
|
isRefreshAlert: data?.ticketConfigs?.isRefreshAlert,
|
|
100
91
|
refreshAlert: data?.ticketConfigs?.refreshAlert,
|
|
101
|
-
downtimeBufferTime: data?.ticketConfigs?.downtimeBufferTime,
|
|
102
|
-
repushTickets: data?.ticketConfigs?.repushTickets,
|
|
103
|
-
repushBufferTime: data?.ticketConfigs?.repushBufferTime,
|
|
104
92
|
isStatusCheckAlert: data?.ticketConfigs?.isStatusCheckAlert,
|
|
105
93
|
statusCheckAlert: data?.ticketConfigs?.statusCheckAlert,
|
|
106
94
|
reTrain: data?.ticketConfigs?.reTrain,
|
|
@@ -198,41 +186,18 @@ export class ConfigurationsComponent {
|
|
|
198
186
|
this.userConfigPrevValues = obj;
|
|
199
187
|
this.clientApi.clientFormData.next({ value: { ...obj }, type: 'input', form: 'user-configuration' });
|
|
200
188
|
}
|
|
201
|
-
// Shared by both branches above so a failed read still saves.
|
|
202
|
-
updateTicketConfiguration(data) {
|
|
203
|
-
this.clientApi.updateTicketConfiguration(this.clientData.clientId, data).pipe(takeUntil(this.destroy$)).subscribe({
|
|
204
|
-
next: (e) => {
|
|
205
|
-
this.toaster.getSuccessToast(e.data?.result);
|
|
206
|
-
this.clientApi.clientFormData.next({ value: null, type: 'submitted', form: 'null' });
|
|
207
|
-
},
|
|
208
|
-
error: (e) => {
|
|
209
|
-
this.toaster.getErrorToast(e.error?.error);
|
|
210
|
-
this.populateTicketConfiguration(this.clientData);
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
}
|
|
214
189
|
submitForm(e) {
|
|
215
190
|
if (e.form === 'ticket-configuration') {
|
|
216
191
|
const data = this.getDifferentEntries(this.ticketConfigPrevValues, e.value);
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.updateTicketConfiguration(data);
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
// V2 only. The diff carries just the changed fields, so infraTicketType is
|
|
225
|
-
// absent and the client reverts to V1 - read the stored value and send it.
|
|
226
|
-
this.clientApi.getBrandDetails(this.clientData.clientId).pipe(take(1), takeUntil(this.destroy$)).subscribe({
|
|
227
|
-
next: (res) => {
|
|
228
|
-
const stored = res?.code == '200' ? res?.data?.ticketConfigs?.infraTicketType : null;
|
|
229
|
-
if (stored) {
|
|
230
|
-
data.infraTicketType = stored;
|
|
231
|
-
}
|
|
232
|
-
this.updateTicketConfiguration(data);
|
|
192
|
+
this.clientApi.updateTicketConfiguration(this.clientData.clientId, data).pipe(takeUntil(this.destroy$)).subscribe({
|
|
193
|
+
next: (e) => {
|
|
194
|
+
this.toaster.getSuccessToast(e.data?.result);
|
|
195
|
+
this.clientApi.clientFormData.next({ value: null, type: 'submitted', form: 'null' });
|
|
233
196
|
},
|
|
234
|
-
|
|
235
|
-
|
|
197
|
+
error: (e) => {
|
|
198
|
+
this.toaster.getErrorToast(e.error?.error);
|
|
199
|
+
this.populateTicketConfiguration(this.clientData);
|
|
200
|
+
}
|
|
236
201
|
});
|
|
237
202
|
}
|
|
238
203
|
else if (e.form === 'feature-configuration') {
|
|
@@ -313,13 +278,13 @@ export class ConfigurationsComponent {
|
|
|
313
278
|
return differentEntries;
|
|
314
279
|
}
|
|
315
280
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigurationsComponent, deps: [{ token: i1.ClientApiService }, { token: i2.ToastService }, { token: i3.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
316
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ConfigurationsComponent, selector: "lib-configurations", viewQueries: [{ propertyName: "accordion", first: true, predicate: ["accordion"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isVMSEnabledUser\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <!-- <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem> -->\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Footfall Directory Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-footfall-configuration></lib-footfall-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <!-- <lib-email-configuration></lib-email-configuration> -->\r\n <lib-email-scheduler></lib-email-scheduler>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Report Configuration is visible to BOTH tango and client logins\r\n (product ruling 2026-09-01); inside, clients see only the\r\n Custom tab -- see report-configuration.component. -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Edge App Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-edge-app-configuration></lib-edge-app-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"userRole !== 'user'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Security Features</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Dashboard Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-dashboard-configuration></lib-dashboard-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"(gs.userAccess | async)?.userType !== 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Control Center Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-control-center-configuration></lib-control-center-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Store Time Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-store-time-configuration></lib-store-time-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isRevops\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >RevOp Tag Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-revop-configuration></lib-revop-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Zone configuaration -->\r\n <div *ngIf=\"zoneSubscribed&&(userRole === 'admin' || userRole === 'superadmin') && \r\n ((gs.userAccess | async)?.TangoEye_ZoneTag_isAdd || (gs.userAccess | async)?.TangoEye_ZoneTag_isEdit)\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Zone Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-zone-configuration></lib-zone-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Trax configuration: audit outcome labels + remark field names -->\r\n <div *ngIf=\"traxSubscribed && (userRole === 'admin' || userRole === 'superadmin')\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Trax Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-trax-configuration></lib-trax-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i5.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i5.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i5.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i5.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i6.EdgeAppConfigurationComponent, selector: "lib-edge-app-configuration" }, { kind: "component", type: i7.AuditConfigurationComponent, selector: "lib-audit-configuration" }, { kind: "component", type: i8.TicketConfigurationComponent, selector: "lib-ticket-configuration" }, { kind: "component", type: i9.ReportConfigurationComponent, selector: "lib-report-configuration" }, { kind: "component", type: i10.UserConfigurationComponent, selector: "lib-user-configuration" }, { kind: "component", type: i11.DomainDetailsComponent, selector: "lib-domain-details" }, { kind: "component", type: i12.FeatureConfigurationComponent, selector: "lib-feature-configuration" }, { kind: "component", type: i13.EmployeeTrainingComponent, selector: "lib-employee-training" }, { kind: "component", type: i14.EmailSchedulerComponent, selector: "lib-email-scheduler" }, { kind: "component", type: i15.DashboardConfigurationComponent, selector: "lib-dashboard-configuration" }, { kind: "component", type: i16.ControlCenterConfigurationComponent, selector: "lib-control-center-configuration" }, { kind: "component", type: i17.StoreTimeConfigurationComponent, selector: "lib-store-time-configuration" }, { kind: "component", type: i18.RevopConfigurationComponent, selector: "lib-revop-configuration" }, { kind: "component", type: i19.FootfallConfigurationComponent, selector: "lib-footfall-configuration" }, { kind: "component", type: i20.ZoneConfigurationComponent, selector: "lib-zone-configuration" }, { kind: "component", type: i21.TraxConfigurationComponent, selector: "lib-trax-configuration" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
|
|
281
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ConfigurationsComponent, selector: "lib-configurations", viewQueries: [{ propertyName: "accordion", first: true, predicate: ["accordion"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isVMSEnabledUser\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <!-- <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem> -->\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Footfall Directory Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-footfall-configuration></lib-footfall-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <!-- <lib-email-configuration></lib-email-configuration> -->\r\n <lib-email-scheduler></lib-email-scheduler>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Report Configuration is visible to BOTH tango and client logins\r\n (product ruling 2026-09-01); inside, clients see only the\r\n Custom tab -- see report-configuration.component. -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Edge App Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-edge-app-configuration></lib-edge-app-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"userRole !== 'user'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Security Features</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Dashboard Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-dashboard-configuration></lib-dashboard-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"(gs.userAccess | async)?.userType !== 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Control Center Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-control-center-configuration></lib-control-center-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Store Time Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-store-time-configuration></lib-store-time-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isRevops\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >RevOp Tag Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-revop-configuration></lib-revop-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Zone configuaration -->\r\n <div *ngIf=\"zoneSubscribed&&(userRole === 'admin' || userRole === 'superadmin') && \r\n ((gs.userAccess | async)?.TangoEye_ZoneTag_isAdd || (gs.userAccess | async)?.TangoEye_ZoneTag_isEdit)\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Zone Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-zone-configuration></lib-zone-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i5.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i5.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i5.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i5.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i6.EdgeAppConfigurationComponent, selector: "lib-edge-app-configuration" }, { kind: "component", type: i7.AuditConfigurationComponent, selector: "lib-audit-configuration" }, { kind: "component", type: i8.TicketConfigurationComponent, selector: "lib-ticket-configuration" }, { kind: "component", type: i9.ReportConfigurationComponent, selector: "lib-report-configuration" }, { kind: "component", type: i10.UserConfigurationComponent, selector: "lib-user-configuration" }, { kind: "component", type: i11.DomainDetailsComponent, selector: "lib-domain-details" }, { kind: "component", type: i12.FeatureConfigurationComponent, selector: "lib-feature-configuration" }, { kind: "component", type: i13.EmployeeTrainingComponent, selector: "lib-employee-training" }, { kind: "component", type: i14.EmailSchedulerComponent, selector: "lib-email-scheduler" }, { kind: "component", type: i15.DashboardConfigurationComponent, selector: "lib-dashboard-configuration" }, { kind: "component", type: i16.ControlCenterConfigurationComponent, selector: "lib-control-center-configuration" }, { kind: "component", type: i17.StoreTimeConfigurationComponent, selector: "lib-store-time-configuration" }, { kind: "component", type: i18.RevopConfigurationComponent, selector: "lib-revop-configuration" }, { kind: "component", type: i19.FootfallConfigurationComponent, selector: "lib-footfall-configuration" }, { kind: "component", type: i20.ZoneConfigurationComponent, selector: "lib-zone-configuration" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] });
|
|
317
282
|
}
|
|
318
283
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigurationsComponent, decorators: [{
|
|
319
284
|
type: Component,
|
|
320
|
-
args: [{ selector: 'lib-configurations', template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isVMSEnabledUser\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <!-- <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem> -->\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Footfall Directory Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-footfall-configuration></lib-footfall-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <!-- <lib-email-configuration></lib-email-configuration> -->\r\n <lib-email-scheduler></lib-email-scheduler>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Report Configuration is visible to BOTH tango and client logins\r\n (product ruling 2026-09-01); inside, clients see only the\r\n Custom tab -- see report-configuration.component. -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Edge App Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-edge-app-configuration></lib-edge-app-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"userRole !== 'user'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Security Features</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Dashboard Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-dashboard-configuration></lib-dashboard-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"(gs.userAccess | async)?.userType !== 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Control Center Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-control-center-configuration></lib-control-center-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Store Time Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-store-time-configuration></lib-store-time-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isRevops\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >RevOp Tag Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-revop-configuration></lib-revop-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Zone configuaration -->\r\n <div *ngIf=\"zoneSubscribed&&(userRole === 'admin' || userRole === 'superadmin') && \r\n ((gs.userAccess | async)?.TangoEye_ZoneTag_isAdd || (gs.userAccess | async)?.TangoEye_ZoneTag_isEdit)\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Zone Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-zone-configuration></lib-zone-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Trax configuration: audit outcome labels + remark field names -->\r\n <div *ngIf=\"traxSubscribed && (userRole === 'admin' || userRole === 'superadmin')\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Trax Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-trax-configuration></lib-trax-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"] }]
|
|
285
|
+
args: [{ selector: 'lib-configurations', template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div ngbAccordion #accordion=\"ngbAccordion\" [closeOthers]=\"true\" [destroyOnHide]=\"true\" (show)=\"openItem()\" >\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6 \" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Audit Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-audit-configuration></lib-audit-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Employee Training</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-employee-training></lib-employee-training>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Ticket Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-ticket-configuration></lib-ticket-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isVMSEnabledUser\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <!-- <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem> -->\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Footfall Directory Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-footfall-configuration></lib-footfall-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Email Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <!-- <lib-email-configuration></lib-email-configuration> -->\r\n <lib-email-scheduler></lib-email-scheduler>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Report Configuration is visible to BOTH tango and client logins\r\n (product ruling 2026-09-01); inside, clients see only the\r\n Custom tab -- see report-configuration.component. -->\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Report Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-report-configuration></lib-report-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >User Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-user-configuration></lib-user-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' \" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Edge App Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-edge-app-configuration></lib-edge-app-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"userRole !== 'user'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Security Features</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-domain-details></lib-domain-details> \r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Feature Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-feature-configuration></lib-feature-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Dashboard Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-dashboard-configuration></lib-dashboard-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"(gs.userAccess | async)?.userType !== 'tango'\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Control Center Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-control-center-configuration></lib-control-center-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Store Time Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-store-time-configuration></lib-store-time-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isRevops\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >RevOp Tag Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-revop-configuration></lib-revop-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Zone configuaration -->\r\n <div *ngIf=\"zoneSubscribed&&(userRole === 'admin' || userRole === 'superadmin') && \r\n ((gs.userAccess | async)?.TangoEye_ZoneTag_isAdd || (gs.userAccess | async)?.TangoEye_ZoneTag_isEdit)\" class=\"settings-accordian-card mb-6\" ngbAccordionItem>\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div class=\"header-row\">\r\n <span >Zone Configuration</span>\r\n <span class=\"divider\"></span>\r\n </div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-zone-configuration></lib-zone-configuration>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".settings-accordian-card{border-radius:10px;background:var(#FFF)}\n"] }]
|
|
321
286
|
}], ctorParameters: () => [{ type: i1.ClientApiService }, { type: i2.ToastService }, { type: i3.GlobalStateService }], propDecorators: { accordion: [{
|
|
322
287
|
type: ViewChild,
|
|
323
288
|
args: ['accordion', { static: true }]
|
|
324
289
|
}] } });
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhELE1BQU0sT0FBTyx1QkFBdUI7SUFrQmQ7SUFBcUM7SUFBOEI7SUFqQnZGLFVBQVUsQ0FBTTtJQUNDLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLHNCQUFzQixDQUFNO0lBQzVCLHVCQUF1QixDQUFNO0lBQzdCLHdCQUF3QixDQUFNO0lBQzlCLHNCQUFzQixDQUFNO0lBQzVCLG9CQUFvQixDQUFNO0lBQzFCLFFBQVEsQ0FBTztJQUNmLGNBQWMsR0FBVyxLQUFLLENBQUE7SUFDOUIsa0ZBQWtGO0lBQ2xGLGNBQWMsR0FBVyxLQUFLLENBQUE7SUFDWSxTQUFTLENBQU07SUFDekQsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFJMUIsWUFBb0IsU0FBMkIsRUFBVSxPQUFxQixFQUFTLEVBQXFCO1FBQXhGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUFTLE9BQUUsR0FB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QyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDckM7YUFDSjtTQUNKO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO3dHQXJUWSx1QkFBdUI7NEZBQXZCLHVCQUF1QixnTENYcEMsbWtkQWdTVTs7NEZEclJHLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxvQkFBb0I7aUpBZ0JZLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2xpZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NsaWVudC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jb25maWd1cmF0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY2xpZW50RGF0YTogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRpY2tldENvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICBmZWF0dXJlQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIGZvb3RmYWxsQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIGRvbWFpbkNvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICB1c2VyQ29uZmlnUHJldlZhbHVlczogYW55O1xyXG4gIHVzZXJSb2xlOnN0cmluZ1xyXG4gIHpvbmVTdWJzY3JpYmVkOmJvb2xlYW4gPSBmYWxzZVxyXG4gIC8qKiBUcmF4IENvbmZpZ3VyYXRpb24gc2VjdGlvbiBzaG93cyBvbmx5IGZvciBjbGllbnRzIHN1YnNjcmliZWQgdG8gVGFuZ28gVHJheC4gKi9cclxuICB0cmF4U3Vic2NyaWJlZDpib29sZWFuID0gZmFsc2VcclxuICBAVmlld0NoaWxkKCdhY2NvcmRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBhY2NvcmRpb246IGFueTtcclxuICBpc1ZNU0VuYWJsZWRVc2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNSZXZvcHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaWVudEFwaTogQ2xpZW50QXBpU2VydmljZSwgcHJpdmF0ZSB0b2FzdGVyOiBUb2FzdFNlcnZpY2UsIHB1YmxpYyBnczpHbG9iYWxTdGF0ZVNlcnZpY2UpIHtcclxuICAgIGNvbnN0IHVzZXI6YW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpXHJcbiAgICB0aGlzLnVzZXJSb2xlICA9IEpTT04ucGFyc2UodXNlcik/LnJvbGVcclxuICAgIFxyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybShlKVxyXG4gICAgICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Rm9ybShlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudERhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50RGF0YSA9IGVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBDb25maWd1cmF0aW9uc0NvbXBvbmVudCB+IGNvbnN0cnVjdG9yIH4gdGhpcy5jbGllbnREYXRhOlwiLCB0aGlzLmNsaWVudERhdGEucGxhbkRldGFpbHMucHJvZHVjdC5maWx0ZXIoKGVsZTphbnkpPT5lbGUucHJvZHVjdE5hbWU9PT0ndGFuZ29ab25lJykpXHJcbiAgICAgICAgaWYodGhpcy5jbGllbnREYXRhLnBsYW5EZXRhaWxzLnByb2R1Y3QuZmlsdGVyKChlbGU6YW55KT0+ZWxlLnByb2R1Y3ROYW1lPT09J3RhbmdvWm9uZScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgIHRoaXMuem9uZVN1YnNjcmliZWQgPSAgdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRyYXhTdWJzY3JpYmVkID0gKHRoaXMuY2xpZW50RGF0YS5wbGFuRGV0YWlscz8ucHJvZHVjdCB8fCBbXSkuc29tZSgoZWxlOmFueSk9PmVsZS5wcm9kdWN0TmFtZT09PSd0YW5nb1RyYXgnKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVUaWNrZXRDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZvb3RmYWxsQ29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9wZW5JdGVtKCkge1xyXG4gICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVGb290ZmFsbENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgdGhpcy5wb3B1bGF0ZURvbWFpbkRldGFpbENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgdGhpcy5wb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGluc3RhbGxhdGlvblJlQXNzaWduOiBkYXRhPy50aWNrZXRDb25maWdzPy5pbnN0YWxsYXRpb25SZUFzc2lnbixcclxuICAgICAgc2VuZFRvQWRtaW46IGRhdGE/LnRpY2tldENvbmZpZ3M/LmFsZXJ0U2VudFRvPy5hZG1pbixcclxuICAgICAgc2VuZFRvVXNlcjogZGF0YT8udGlja2V0Q29uZmlncz8uYWxlcnRTZW50VG8/LnVzZXIsXHJcbiAgICAgIGluZnJhVGlja2V0VHlwZTogZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFUaWNrZXRUeXBlLFxyXG4gICAgICBkb3duVGltZVR5cGU6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmRvd25UaW1lVHlwZSxcclxuICAgICAgLy8gSW5mcmEgVjIgc3RvcmVzIGl0cyBjeWNsZSBsZW5ndGggc2VwYXJhdGVseSBhcyBpbmZyYVYyRG93blRpbWUgLSB0aGF0IGlzXHJcbiAgICAgIC8vIHRoZSBmaWVsZCB0aGUgZ2VuZXJhdGlvbiBjcm9uIHJlYWRzLCBzbyBpdCBpcyB3aGF0IHRoZSBmb3JtIG11c3Qgc2hvdy5cclxuICAgICAgaW5mcmFEb3duVGltZTogZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFUaWNrZXRUeXBlID09PSAnVjInXHJcbiAgICAgICAgPyBkYXRhPy50aWNrZXRDb25maWdzPy5pbmZyYVYyRG93blRpbWVcclxuICAgICAgICA6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmluZnJhRG93blRpbWUsXHJcbiAgICAgIE1pbkZpbGVzQ291bnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/Lk1pbkZpbGVzQ291bnQsXHJcbiAgICAgIGlzUmNhVGlja2V0QXNzaWduOiBkYXRhPy50aWNrZXRDb25maWdzPy5pc1JjYVRpY2tldEFzc2lnbixcclxuICAgICAgcmNhVGlja2V0QXNzaWduOiBkYXRhPy50aWNrZXRDb25maWdzPy5yY2FUaWNrZXRBc3NpZ24sXHJcbiAgICAgIGlzUmVmcmVzaEFsZXJ0OiBkYXRhPy50aWNrZXRDb25maWdzPy5pc1JlZnJlc2hBbGVydCxcclxuICAgICAgcmVmcmVzaEFsZXJ0OiBkYXRhPy50aWNrZXRDb25maWdzPy5yZWZyZXNoQWxlcnQsXHJcbiAgICAgIGRvd250aW1lQnVmZmVyVGltZTogZGF0YT8udGlja2V0Q29uZmlncz8uZG93bnRpbWVCdWZmZXJUaW1lLFxyXG4gICAgICByZXB1c2hUaWNrZXRzOiBkYXRhPy50aWNrZXRDb25maWdzPy5yZXB1c2hUaWNrZXRzLFxyXG4gICAgICByZXB1c2hCdWZmZXJUaW1lOiBkYXRhPy50aWNrZXRDb25maWdzPy5yZXB1c2hCdWZmZXJUaW1lLFxyXG4gICAgICBpc1N0YXR1c0NoZWNrQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzU3RhdHVzQ2hlY2tBbGVydCxcclxuICAgICAgc3RhdHVzQ2hlY2tBbGVydDogZGF0YT8udGlja2V0Q29uZmlncz8uc3RhdHVzQ2hlY2tBbGVydCxcclxuICAgICAgcmVUcmFpbjogZGF0YT8udGlja2V0Q29uZmlncz8ucmVUcmFpbixcclxuICAgICAgYWNjdXJhY3lQZXJjZW50YWdlOiBkYXRhPy50aWNrZXRDb25maWdzPy5hY2N1cmFjeVBlcmNlbnRhZ2UsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aWNrZXRDb25maWdQcmV2VmFsdWVzID0gb2JqXHJcblxyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiB7IC4uLm9iaiB9LCB0eXBlOiAnaW5wdXQnLCBmb3JtOiAndGlja2V0LWNvbmZpZ3VyYXRpb24nIH0pXHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc1ZNUykgdGhpcy5pc1ZNU0VuYWJsZWRVc2VyID0gdHJ1ZTtcclxuICAgIGVsc2UgdGhpcy5pc1ZNU0VuYWJsZWRVc2VyID0gZmFsc2U7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBvcGVuOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8ub3BlbixcclxuICAgICAgY2xvc2U6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5jbG9zZSxcclxuICAgICAgaW5mcmFBbGVydENvbmRpdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmluZnJhQWxlcnQ/LmNvbmRpdGlvbixcclxuICAgICAgaW5mcmFBbGVydFZhbHVlOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaW5mcmFBbGVydD8udmFsdWUsXHJcbiAgICAgIGJvdW5jZWRMaW1pdENvbmRpdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmJvdW5jZWRMaW1pdD8uY29uZGl0aW9uLFxyXG4gICAgICBib3VuY2VkTGltaXRWYWx1ZTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmJvdW5jZWRMaW1pdD8udmFsdWUsXHJcbiAgICAgIGNvbnZlcnNpb25Db25kaXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5jb252ZXJzaW9uPy5jb25kaXRpb24sXHJcbiAgICAgIGNvbnZlcnNpb25WYWx1ZTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmNvbnZlcnNpb24/LnZhbHVlLFxyXG4gICAgICBiaWxsYWJsZUNhbGN1bGF0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uYmlsbGFibGVDYWxjdWxhdGlvbixcclxuICAgICAgbWlzc2VkT3Bwb3J0dW5pdHlDYWxjdWxhdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/Lm1pc3NlZE9wcG9ydHVuaXR5Q2FsY3VsYXRpb24sXHJcbiAgICAgIGNvbnZlcnNpb25DYWxjdWxhdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmNvbnZlcnNpb25DYWxjdWxhdGlvbixcclxuICAgICAgZHdlbGxUaW1lQ2FsY3VsYXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5kd2VsbFRpbWVDYWxjdWxhdGlvbixcclxuICAgICAgaXNOb3JtYWxpemVkOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNOb3JtYWxpemVkLFxyXG4gICAgICBpc1Bhc3NlckJ5RGF0YTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzUGFzc2VyQnlEYXRhLFxyXG4gICAgICBpc0Zvb3RmYWxsRGlyZWN0b3J5OiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNGb290ZmFsbERpcmVjdG9yeSxcclxuICAgICAgaXNGb290ZmFsbERpcmVjdG9yeW9ubHlUYW5nbzogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzRm9vdGZhbGxEaXJlY3Rvcnlvbmx5VGFuZ28sXHJcbiAgICAgIGlzVk1TOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNWTVMsXHJcbiAgICAgIGlzRm9vdGZhbGxEaXJlY3RvcnlBdWRpdCA6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0Zvb3RmYWxsRGlyZWN0b3J5QXVkaXQsXHJcbiAgICAgIGlzRm9vdGZhbGxEaXJlY3RvcnlMaW1pdCA6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0Zvb3RmYWxsRGlyZWN0b3J5TGltaXQsXHJcbiAgICAgIGlzRXhjbHVkZWRBcmVhOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0V4Y2x1ZGVkQXJlYSxcclxuICAgICAgaXNDYW1lcmFEaXNhYmxlZDogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzQ2FtZXJhRGlzYWJsZWQsXHJcbiAgICAgIGlzYmlsbGluZ0Rpc2FibGVkOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc2JpbGxpbmdEaXNhYmxlZCxcclxuICAgICAgaXNOZXdEYXNoYm9hcmQ6ZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzTmV3RGFzaGJvYXJkLFxyXG4gICAgICB1cGRhdGVGZWF0dXJlQ29uZmlnOmRhdGE/LmZlYXR1cmVDb25maWdzPy51cGRhdGVGZWF0dXJlQ29uZmlnLFxyXG4gICAgICBpc0Zvb3RmYWxsQXVkaXRTdG9yZXM6ZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzRm9vdGZhbGxBdWRpdFN0b3JlcyxcclxuICAgICAgaXNOZXdUcmFmZmljOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05ld1RyYWZmaWMsXHJcbiAgICAgIGlzTmV3Wm9uZTpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNOZXdab25lLFxyXG4gICAgICBpc05ld1JlcG9ydHM6ZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzTmV3UmVwb3J0cyxcclxuICAgICAgaXNOZXdab25lVjI6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05ld1pvbmVWMixcclxuICAgICAgaXNSZXZvcHM6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc1Jldm9wcyxcclxuICAgICAgaXNOT0I6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05PQixcclxuICAgICAgaXNab25ld2lzZU5PQiA6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc1pvbmV3aXNlTk9CLFxyXG4gICAgICBpc1RyYXg6ZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzVHJheCxcclxuICAgICAgaXNDb250cm9sQ2VudGVyOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0NvbnRyb2xDZW50ZXIsXHJcbiAgICAgIHN0cmVhbUJ5OmRhdGE/LmZlYXR1cmVDb25maWdzPy5zdHJlYW1CeSxcclxuICAgICAgaXNDYW1lcmFFZGl0OmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0NhbWVyYUVkaXQsXHJcbiAgICAgIGlzQUlNYW5hZ2VyOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0FJTWFuYWdlcixcclxuICAgICAgaXNBSU1hbmFnZXJBY2Nlc3NDb250cm9sOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0FJTWFuYWdlckFjY2Vzc0NvbnRyb2wsXHJcbiAgICAgIGxvZ2luU1NPOmRhdGE/LmZlYXR1cmVDb25maWdzPy5sb2dpblNTT1xyXG4gICAgfSBcclxuICAgIHRoaXMuZmVhdHVyZUNvbmZpZ1ByZXZWYWx1ZXMgPSBvYmpcclxuICAgIHRoaXMuaXNSZXZvcHMgPSBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNSZXZvcHMgPT09IHRydWU7XHJcbiAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IHsgLi4ub2JqIH0sIHR5cGU6ICdpbnB1dCcsIGZvcm06ICdmZWF0dXJlLWNvbmZpZ3VyYXRpb24nIH0pXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImNsaWVudC1kZXRhaWxzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGE/LmZlYXR1cmVDb25maWdzKSk7XHJcbiAgICB0aGlzLmdzLnNlbGVjdGVkQ2xpZW50Lm5leHQoZGF0YT8uZmVhdHVyZUNvbmZpZ3MpO1xyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVGb290ZmFsbENvbmZpZ3VyYXRpb24oZGF0YTogYW55KSB7XHJcbiAgICBpZiAoIWRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncykgcmV0dXJuO1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgYWxsb3dUaWNrZXRDcmVhdGlvbjogZGF0YT8uZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzPy5hbGxvd1RpY2tldENyZWF0aW9uID8/IDMsXHJcbiAgICAgIGlzQXV0b0Nsb3NlRW5hYmxlOiBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/LmlzQXV0b0Nsb3NlRW5hYmxlLFxyXG4gICAgICBhdXRvQ2xvc2VBY2N1cmFjeTogZGF0YT8uZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzPy5hdXRvQ2xvc2VBY2N1cmFjeSA/PyAnOTUlJyxcclxuICAgICAgdGFuZ29SZXZpZXc6IGRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8udGFuZ29SZXZpZXcgPz8gJzg1JScsXHJcbiAgICAgIG92ZXJhbGxMaW1pdGF0aW9uOiBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/Lm92ZXJhbGxMaW1pdGF0aW9uID8/ICcnLFxyXG4gICAgICBhY2N1cmFjeUJyZWFjaDogIGRhdGEuZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzPy5hY2N1cmFjeUJyZWFjaCB8fCB7fSxcclxuICAgICAgcmV2aXNpb246IGRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8ucmV2aXNpb24gPz8gW10sXHJcbiAgICAgIHRhZ2dpbmdMaW1pdGF0aW9uOiBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/LnRhZ2dpbmdMaW1pdGF0aW9uID8/IFtdLFxyXG4gICAgICBzdG9yZUxpc3Q6IGRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8uc3RvcmVMaXN0ID8/IGRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8uYWNjdXJhY3lCcmVhY2g/LnN0b3JlTGlzdCA/PyBbXVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZm9vdGZhbGxDb25maWdQcmV2VmFsdWVzID0gb2JqO1xyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiB7IC4uLm9iaiB9LCB0eXBlOiAnaW5wdXQnLCBmb3JtOiAnZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzJyB9KVxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJmb290ZmFsbC1jb25maWdcIiwgSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZURvbWFpbkRldGFpbENvbmZpZ3VyYXRpb24oZGF0YTogYW55KSB7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBkb21haW5OYW1lOiBkYXRhPy5kb21haW5Db25maWc/LnNzb0xvZ2luPy5kb21haW5OYW1lLFxyXG4gICAgICBpc0VuYWJsZTogZGF0YT8uZG9tYWluQ29uZmlnPy5zc29Mb2dpbj8uaXNFbmFibGUsXHJcbiAgICAgIGVuYWJsZVdoaXRlbGlzdGluZzogZGF0YT8uZG9tYWluQ29uZmlnPy5pcFdoaXRlbGlzdGluZz8uZW5hYmxlV2hpdGVsaXN0aW5nLFxyXG4gICAgICBhbGxvd2VkSXBzOiBkYXRhPy5kb21haW5Db25maWc/LmlwV2hpdGVsaXN0aW5nPy5hbGxvd2VkSXBzLFxyXG4gICAgICBlbmFibGVPdHA6IGRhdGE/LmRvbWFpbkNvbmZpZz8uZW5hYmxlT3RwLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZG9tYWluQ29uZmlnUHJldlZhbHVlcyA9IG9ialxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ2RvbWFpbi1kZXRhaWxzJyB9KVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVVzZXJDb25maWd1cmF0aW9uKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgY3NtOiBkYXRhPy5hc3NpZ25lZFVzZXJzPy5jc20sXHJcbiAgICAgIG9wczogZGF0YT8uYXNzaWduZWRVc2Vycz8ub3BzLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXNlckNvbmZpZ1ByZXZWYWx1ZXMgPSBvYmpcclxuXHJcbiAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IHsgLi4ub2JqIH0sIHR5cGU6ICdpbnB1dCcsIGZvcm06ICd1c2VyLWNvbmZpZ3VyYXRpb24nIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIFNoYXJlZCBieSBib3RoIGJyYW5jaGVzIGFib3ZlIHNvIGEgZmFpbGVkIHJlYWQgc3RpbGwgc2F2ZXMuXHJcbiAgdXBkYXRlVGlja2V0Q29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY2xpZW50QXBpLnVwZGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhLmNsaWVudElkLCBkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGUpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KGUuZGF0YT8ucmVzdWx0KVxyXG4gICAgICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogbnVsbCwgdHlwZTogJ3N1Ym1pdHRlZCcsIGZvcm06ICdudWxsJyB9KVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdChlLmVycm9yPy5lcnJvcilcclxuICAgICAgICB0aGlzLnBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZm9ybSA9PT0gJ3RpY2tldC1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLnRpY2tldENvbmZpZ1ByZXZWYWx1ZXMsIGUudmFsdWUpXHJcblxyXG4gICAgICAvLyBJbmZyYSBWMSBzYXZlcyBleGFjdGx5IGFzIGl0IGFsd2F5cyBoYXM6IG9uZSBQVVQsIGRpZmYgb25seS4gVGhlIHNhbWVcclxuICAgICAgLy8gZ29lcyBmb3IgYSBzYXZlIHRoYXQgYWxyZWFkeSBjYXJyaWVzIGEgdHlwZSB0aGUgdXNlciBqdXN0IHN3aXRjaGVkIC1cclxuICAgICAgLy8gdGhlIGZvcm0ncyB2YWx1ZSBtdXN0IHdpbiwgc28gdGhlIHJlY29yZCdzIGlzIGlycmVsZXZhbnQuXHJcbiAgICAgIGlmIChlLnZhbHVlPy5pbmZyYVRpY2tldFR5cGUgIT09ICdWMicgfHwgJ2luZnJhVGlja2V0VHlwZScgaW4gZGF0YSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGlja2V0Q29uZmlndXJhdGlvbihkYXRhKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBWMiBvbmx5LiBUaGUgZGlmZiBjYXJyaWVzIGp1c3QgdGhlIGNoYW5nZWQgZmllbGRzLCBzbyBpbmZyYVRpY2tldFR5cGUgaXNcclxuICAgICAgLy8gYWJzZW50IGFuZCB0aGUgY2xpZW50IHJldmVydHMgdG8gVjEgLSByZWFkIHRoZSBzdG9yZWQgdmFsdWUgYW5kIHNlbmQgaXQuXHJcbiAgICAgIHRoaXMuY2xpZW50QXBpLmdldEJyYW5kRGV0YWlscyh0aGlzLmNsaWVudERhdGEuY2xpZW50SWQpLnBpcGUodGFrZSgxKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc3RvcmVkID0gcmVzPy5jb2RlID09ICcyMDAnID8gcmVzPy5kYXRhPy50aWNrZXRDb25maWdzPy5pbmZyYVRpY2tldFR5cGUgOiBudWxsXHJcbiAgICAgICAgICBpZiAoc3RvcmVkKSB7IGRhdGEuaW5mcmFUaWNrZXRUeXBlID0gc3RvcmVkIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlVGlja2V0Q29uZmlndXJhdGlvbihkYXRhKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gQSBmYWlsZWQgcmVhZCBtdXN0IG5vdCBsb3NlIHRoZSBzYXZlLlxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLnVwZGF0ZVRpY2tldENvbmZpZ3VyYXRpb24oZGF0YSlcclxuICAgICAgfSlcclxuXHJcbiAgICB9IGVsc2VcclxuICAgICAgaWYgKGUuZm9ybSA9PT0gJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLmZlYXR1cmVDb25maWdQcmV2VmFsdWVzLCBlLnZhbHVlKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpXHJcbiAgICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlRmVhdHVyZUNvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhLmNsaWVudElkLCBkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoZS5kYXRhPy5yZXN1bHQpXHJcbiAgICAgICAgICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogbnVsbCwgdHlwZTogJ3N1Ym1pdHRlZCcsIGZvcm06ICdudWxsJyB9KVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdChlLmVycm9yPy5lcnJvcilcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgaWYgKGUuZm9ybSA9PT0gJ2RvbWFpbi1kZXRhaWxzJykge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9ICB0aGlzLmdldERpZmZlcmVudEVudHJpZXModGhpcy5kb21haW5Db25maWdQcmV2VmFsdWVzLCBlLnZhbHVlKSAgICAgXHJcbiAgICAgICAgICB0aGlzLmNsaWVudEFwaS51cGRhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YS5jbGllbnRJZCwgZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdChlLmRhdGE/LnJlc3VsdClcclxuICAgICAgICAgICAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IG51bGwsIHR5cGU6ICdzdWJtaXR0ZWQnLCBmb3JtOiAnbnVsbCcgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLmdldEVycm9yVG9hc3QoZS5lcnJvcj8uZXJyb3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZURvbWFpbkRldGFpbENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGUuZm9ybSA9PT0gJ2Zvb3RmYWxsRGlyZWN0b3J5Q29uZmlncycpIHtcclxuICAgICAgICAgIC8vIGNvbnN0IGRhdGEgPSB0aGlzLmdldERpZmZlcmVudEVudHJpZXModGhpcy5mb290ZmFsbENvbmZpZ1ByZXZWYWx1ZXMsIGUudmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGUudmFsdWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlIGZvb3RmYWxsIGNvbmZpZyBqc29uID09PicsIGRhdGEpXHJcbiAgICAgICAgICB0aGlzLmNsaWVudEFwaS51cGRhdGVGb290ZmFsbERpcmVjdG9yeUNvbmZpZyh0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoJ0Zvb3RmYWxsIGNvbmZpZ3VyYXRpb24gZGV0YWlscyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4nKVxyXG4gICAgICAgICAgICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogbnVsbCwgdHlwZTogJ3N1Ym1pdHRlZCcsIGZvcm06ICdudWxsJyB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdChlLmVycm9yPy5lcnJvcilcclxuICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9vdGZhbGxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZm9ybSA9PT0gJ3RpY2tldC1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICB0aGlzLnBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICB9IGVsc2VcclxuICAgICAgaWYgKGUuZm9ybSA9PT0gJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlRmVhdHVyZUNvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICB9IGVsc2VcclxuICAgICAgICBpZiAoZS5mb3JtID09PSAnZG9tYWluLWRldGFpbHMnKSB7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpZiAoZS5mb3JtID09PSAndXNlci1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlVXNlckNvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpZiAoZS5mb3JtID09PSAnZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzJykge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9vdGZhbGxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmFjY29yZGlvbi5jb2xsYXBzZUFsbCgpXHJcblxyXG4gIH1cclxuXHJcbiBnZXREaWZmZXJlbnRFbnRyaWVzKG9iajE6IFJlY29yZDxzdHJpbmcsIGFueT4sIG9iajI6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IGRpZmZlcmVudEVudHJpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iajIpIHtcclxuICAgICAgICBpZiAob2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajFba2V5XSkgJiYgQXJyYXkuaXNBcnJheShvYmoyW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2JqMVtrZXldKSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqMltrZXldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudEVudHJpZXNba2V5XSA9IG9iajJba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50RW50cmllc1trZXldID0gb2JqMltrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZlcmVudEVudHJpZXM7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uICNhY2NvcmRpb249XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiIFtkZXN0cm95T25IaWRlXT1cInRydWVcIiAgKHNob3cpPVwib3Blbkl0ZW0oKVwiID5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTYgXCIgIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5BdWRpdCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItYXVkaXQtY29uZmlndXJhdGlvbj48L2xpYi1hdWRpdC1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nIFwiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5FbXBsb3llZSBUcmFpbmluZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wbG95ZWUtdHJhaW5pbmc+PC9saWItZW1wbG95ZWUtdHJhaW5pbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlRpY2tldCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdGlja2V0LWNvbmZpZ3VyYXRpb24+PC9saWItdGlja2V0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1ZNU0VuYWJsZWRVc2VyXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+Rm9vdGZhbGwgRGlyZWN0b3J5IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1mb290ZmFsbC1jb25maWd1cmF0aW9uPjwvbGliLWZvb3RmYWxsLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVtYWlsIENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGliLWVtYWlsLWNvbmZpZ3VyYXRpb24+PC9saWItZW1haWwtY29uZmlndXJhdGlvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbWFpbC1zY2hlZHVsZXI+PC9saWItZW1haWwtc2NoZWR1bGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFJlcG9ydCBDb25maWd1cmF0aW9uIGlzIHZpc2libGUgdG8gQk9USCB0YW5nbyBhbmQgY2xpZW50IGxvZ2luc1xyXG4gICAgICAgICAgICAgICAgIChwcm9kdWN0IHJ1bGluZyAyMDI2LTA5LTAxKTsgaW5zaWRlLCBjbGllbnRzIHNlZSBvbmx5IHRoZVxyXG4gICAgICAgICAgICAgICAgIEN1c3RvbSB0YWIgLS0gc2VlIHJlcG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlJlcG9ydCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVwb3J0LWNvbmZpZ3VyYXRpb24+PC9saWItcmVwb3J0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlVzZXIgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXVzZXItY29uZmlndXJhdGlvbj48L2xpYi11c2VyLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVkZ2UgQXBwIENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lZGdlLWFwcC1jb25maWd1cmF0aW9uPjwvbGliLWVkZ2UtYXBwLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyUm9sZSAhPT0gJ3VzZXInXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5TZWN1cml0eSBGZWF0dXJlczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZG9tYWluLWRldGFpbHM+PC9saWItZG9tYWluLWRldGFpbHM+ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+RmVhdHVyZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZmVhdHVyZS1jb25maWd1cmF0aW9uPjwvbGliLWZlYXR1cmUtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5EYXNoYm9hcmQgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWRhc2hib2FyZC1jb25maWd1cmF0aW9uPjwvbGliLWRhc2hib2FyZC1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgIT09ICd0YW5nbydcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+Q29udHJvbCBDZW50ZXIgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWNvbnRyb2wtY2VudGVyLWNvbmZpZ3VyYXRpb24+PC9saWItY29udHJvbC1jZW50ZXItY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlN0b3JlIFRpbWUgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLXRpbWUtY29uZmlndXJhdGlvbj48L2xpYi1zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1Jldm9wc1wiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5SZXZPcCBUYWcgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZXZvcC1jb25maWd1cmF0aW9uPjwvbGliLXJldm9wLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gWm9uZSBjb25maWd1YXJhdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInpvbmVTdWJzY3JpYmVkJiYodXNlclJvbGUgPT09ICdhZG1pbicgfHwgdXNlclJvbGUgPT09ICdzdXBlcmFkbWluJykgJiYgXHJcbiAgICAgICAgICAgICgoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29FeWVfWm9uZVRhZ19pc0FkZCB8fCAoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29FeWVfWm9uZVRhZ19pc0VkaXQpXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlpvbmUgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi16b25lLWNvbmZpZ3VyYXRpb24+PC9saWItem9uZS1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFRyYXggY29uZmlndXJhdGlvbjogYXVkaXQgb3V0Y29tZSBsYWJlbHMgKyByZW1hcmsgZmllbGQgbmFtZXMgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0cmF4U3Vic2NyaWJlZCAmJiAodXNlclJvbGUgPT09ICdhZG1pbicgfHwgdXNlclJvbGUgPT09ICdzdXBlcmFkbWluJylcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+VHJheCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXRyYXgtY29uZmlndXJhdGlvbj48L2xpYi10cmF4LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+Il19
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sdUJBQXVCO0lBZ0JkO0lBQXFDO0lBQThCO0lBZnZGLFVBQVUsQ0FBTTtJQUNDLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLHNCQUFzQixDQUFNO0lBQzVCLHVCQUF1QixDQUFNO0lBQzdCLHdCQUF3QixDQUFNO0lBQzlCLHNCQUFzQixDQUFNO0lBQzVCLG9CQUFvQixDQUFNO0lBQzFCLFFBQVEsQ0FBTztJQUNmLGNBQWMsR0FBVyxLQUFLLENBQUE7SUFDWSxTQUFTLENBQU07SUFDekQsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFJMUIsWUFBb0IsU0FBMkIsRUFBVSxPQUFxQixFQUFTLEVBQXFCO1FBQXhGLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUFTLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQzFHLE1BQU0sSUFBSSxHQUFPLFlBQVksQ0FBQyxPQUFPLENB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QUVGLG1CQUFtQixDQUFDLElBQXlCLEVBQUUsSUFBeUI7UUFDckUsTUFBTSxnQkFBZ0IsR0FBd0IsRUFBRSxDQUFDO1FBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUN6RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3JDO2lCQUNKO3FCQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDaEMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQzthQUNKO1NBQ0o7UUFDRCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7d0dBbFJZLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGdMQ1hwQyw0bWJBOFFVOzs0RkRuUUcsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLG9CQUFvQjtpSkFjWSxTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENsaWVudEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jbGllbnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY29uZmlndXJhdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIGNsaWVudERhdGE6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICB0aWNrZXRDb25maWdQcmV2VmFsdWVzOiBhbnk7XHJcbiAgZmVhdHVyZUNvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICBmb290ZmFsbENvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICBkb21haW5Db25maWdQcmV2VmFsdWVzOiBhbnk7XHJcbiAgdXNlckNvbmZpZ1ByZXZWYWx1ZXM6IGFueTtcclxuICB1c2VyUm9sZTpzdHJpbmdcclxuICB6b25lU3Vic2NyaWJlZDpib29sZWFuID0gZmFsc2VcclxuICBAVmlld0NoaWxkKCdhY2NvcmRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBhY2NvcmRpb246IGFueTtcclxuICBpc1ZNU0VuYWJsZWRVc2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNSZXZvcHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaWVudEFwaTogQ2xpZW50QXBpU2VydmljZSwgcHJpdmF0ZSB0b2FzdGVyOiBUb2FzdFNlcnZpY2UsIHB1YmxpYyBnczpHbG9iYWxTdGF0ZVNlcnZpY2UpIHtcclxuICAgIGNvbnN0IHVzZXI6YW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpXHJcbiAgICB0aGlzLnVzZXJSb2xlICA9IEpTT04ucGFyc2UodXNlcik/LnJvbGVcclxuICAgIFxyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybShlKVxyXG4gICAgICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gJ2NhbmNlbCcpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Rm9ybShlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudERhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50RGF0YSA9IGVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBDb25maWd1cmF0aW9uc0NvbXBvbmVudCB+IGNvbnN0cnVjdG9yIH4gdGhpcy5jbGllbnREYXRhOlwiLCB0aGlzLmNsaWVudERhdGEucGxhbkRldGFpbHMucHJvZHVjdC5maWx0ZXIoKGVsZTphbnkpPT5lbGUucHJvZHVjdE5hbWU9PT0ndGFuZ29ab25lJykpXHJcbiAgICAgICAgaWYodGhpcy5jbGllbnREYXRhLnBsYW5EZXRhaWxzLnByb2R1Y3QuZmlsdGVyKChlbGU6YW55KT0+ZWxlLnByb2R1Y3ROYW1lPT09J3RhbmdvWm9uZScpLmxlbmd0aD4wKXtcclxuICAgICAgICAgIHRoaXMuem9uZVN1YnNjcmliZWQgPSAgdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGb290ZmFsbENvbmZpZ3VyYXRpb24oZSlcclxuICAgICAgICB0aGlzLnBvcHVsYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbihlKVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbihlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuSXRlbSgpIHtcclxuICAgIHRoaXMucG9wdWxhdGVUaWNrZXRDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICB0aGlzLnBvcHVsYXRlRm9vdGZhbGxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgIHRoaXMucG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgfVxyXG5cclxuICBwb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24oZGF0YTogYW55KSB7XHJcbiAgICBsZXQgb2JqID0ge1xyXG4gICAgICBpbnN0YWxsYXRpb25SZUFzc2lnbjogZGF0YT8udGlja2V0Q29uZmlncz8uaW5zdGFsbGF0aW9uUmVBc3NpZ24sXHJcbiAgICAgIHNlbmRUb0FkbWluOiBkYXRhPy50aWNrZXRDb25maWdzPy5hbGVydFNlbnRUbz8uYWRtaW4sXHJcbiAgICAgIHNlbmRUb1VzZXI6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmFsZXJ0U2VudFRvPy51c2VyLFxyXG4gICAgICBkb3duVGltZVR5cGU6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmRvd25UaW1lVHlwZSxcclxuICAgICAgaW5mcmFEb3duVGltZTogZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFEb3duVGltZSxcclxuICAgICAgTWluRmlsZXNDb3VudDogZGF0YT8udGlja2V0Q29uZmlncz8uTWluRmlsZXNDb3VudCxcclxuICAgICAgaXNSY2FUaWNrZXRBc3NpZ246IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzUmNhVGlja2V0QXNzaWduLFxyXG4gICAgICByY2FUaWNrZXRBc3NpZ246IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJjYVRpY2tldEFzc2lnbixcclxuICAgICAgaXNSZWZyZXNoQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LmlzUmVmcmVzaEFsZXJ0LFxyXG4gICAgICByZWZyZXNoQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJlZnJlc2hBbGVydCxcclxuICAgICAgaXNTdGF0dXNDaGVja0FsZXJ0OiBkYXRhPy50aWNrZXRDb25maWdzPy5pc1N0YXR1c0NoZWNrQWxlcnQsXHJcbiAgICAgIHN0YXR1c0NoZWNrQWxlcnQ6IGRhdGE/LnRpY2tldENvbmZpZ3M/LnN0YXR1c0NoZWNrQWxlcnQsXHJcbiAgICAgIHJlVHJhaW46IGRhdGE/LnRpY2tldENvbmZpZ3M/LnJlVHJhaW4sXHJcbiAgICAgIGFjY3VyYWN5UGVyY2VudGFnZTogZGF0YT8udGlja2V0Q29uZmlncz8uYWNjdXJhY3lQZXJjZW50YWdlLFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGlja2V0Q29uZmlnUHJldlZhbHVlcyA9IG9ialxyXG5cclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ3RpY2tldC1jb25maWd1cmF0aW9uJyB9KVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVGZWF0dXJlQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGlmIChkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNWTVMpIHRoaXMuaXNWTVNFbmFibGVkVXNlciA9IHRydWU7XHJcbiAgICBlbHNlIHRoaXMuaXNWTVNFbmFibGVkVXNlciA9IGZhbHNlO1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgb3BlbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/Lm9wZW4sXHJcbiAgICAgIGNsb3NlOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uY2xvc2UsXHJcbiAgICAgIGluZnJhQWxlcnRDb25kaXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pbmZyYUFsZXJ0Py5jb25kaXRpb24sXHJcbiAgICAgIGluZnJhQWxlcnRWYWx1ZTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmluZnJhQWxlcnQ/LnZhbHVlLFxyXG4gICAgICBib3VuY2VkTGltaXRDb25kaXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5ib3VuY2VkTGltaXQ/LmNvbmRpdGlvbixcclxuICAgICAgYm91bmNlZExpbWl0VmFsdWU6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5ib3VuY2VkTGltaXQ/LnZhbHVlLFxyXG4gICAgICBjb252ZXJzaW9uQ29uZGl0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uY29udmVyc2lvbj8uY29uZGl0aW9uLFxyXG4gICAgICBjb252ZXJzaW9uVmFsdWU6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5jb252ZXJzaW9uPy52YWx1ZSxcclxuICAgICAgYmlsbGFibGVDYWxjdWxhdGlvbjogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmJpbGxhYmxlQ2FsY3VsYXRpb24sXHJcbiAgICAgIG1pc3NlZE9wcG9ydHVuaXR5Q2FsY3VsYXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5taXNzZWRPcHBvcnR1bml0eUNhbGN1bGF0aW9uLFxyXG4gICAgICBjb252ZXJzaW9uQ2FsY3VsYXRpb246IGRhdGE/LmZlYXR1cmVDb25maWdzPy5jb252ZXJzaW9uQ2FsY3VsYXRpb24sXHJcbiAgICAgIGR3ZWxsVGltZUNhbGN1bGF0aW9uOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uZHdlbGxUaW1lQ2FsY3VsYXRpb24sXHJcbiAgICAgIGlzTm9ybWFsaXplZDogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzTm9ybWFsaXplZCxcclxuICAgICAgaXNQYXNzZXJCeURhdGE6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc1Bhc3NlckJ5RGF0YSxcclxuICAgICAgaXNGb290ZmFsbERpcmVjdG9yeTogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzRm9vdGZhbGxEaXJlY3RvcnksXHJcbiAgICAgIGlzRm9vdGZhbGxEaXJlY3Rvcnlvbmx5VGFuZ286IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0Zvb3RmYWxsRGlyZWN0b3J5b25seVRhbmdvLFxyXG4gICAgICBpc1ZNUzogZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzVk1TLFxyXG4gICAgICBpc0Zvb3RmYWxsRGlyZWN0b3J5QXVkaXQgOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNGb290ZmFsbERpcmVjdG9yeUF1ZGl0LFxyXG4gICAgICBpc0Zvb3RmYWxsRGlyZWN0b3J5TGltaXQgOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNGb290ZmFsbERpcmVjdG9yeUxpbWl0LFxyXG4gICAgICBpc0V4Y2x1ZGVkQXJlYTpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNFeGNsdWRlZEFyZWEsXHJcbiAgICAgIGlzQ2FtZXJhRGlzYWJsZWQ6IGRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0NhbWVyYURpc2FibGVkLFxyXG4gICAgICBpc2JpbGxpbmdEaXNhYmxlZDpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNiaWxsaW5nRGlzYWJsZWQsXHJcbiAgICAgIGlzTmV3RGFzaGJvYXJkOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05ld0Rhc2hib2FyZCxcclxuICAgICAgdXBkYXRlRmVhdHVyZUNvbmZpZzpkYXRhPy5mZWF0dXJlQ29uZmlncz8udXBkYXRlRmVhdHVyZUNvbmZpZyxcclxuICAgICAgaXNGb290ZmFsbEF1ZGl0U3RvcmVzOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc0Zvb3RmYWxsQXVkaXRTdG9yZXMsXHJcbiAgICAgIGlzTmV3VHJhZmZpYzpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNOZXdUcmFmZmljLFxyXG4gICAgICBpc05ld1pvbmU6ZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzTmV3Wm9uZSxcclxuICAgICAgaXNOZXdSZXBvcnRzOmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc05ld1JlcG9ydHMsXHJcbiAgICAgIGlzTmV3Wm9uZVYyOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNOZXdab25lVjIsXHJcbiAgICAgIGlzUmV2b3BzOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNSZXZvcHMsXHJcbiAgICAgIGlzTk9COiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNOT0IsXHJcbiAgICAgIGlzWm9uZXdpc2VOT0IgOiBkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNab25ld2lzZU5PQixcclxuICAgICAgaXNUcmF4OmRhdGE/LmZlYXR1cmVDb25maWdzPy5pc1RyYXgsXHJcbiAgICAgIGlzQ29udHJvbENlbnRlcjpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNDb250cm9sQ2VudGVyLFxyXG4gICAgICBzdHJlYW1CeTpkYXRhPy5mZWF0dXJlQ29uZmlncz8uc3RyZWFtQnksXHJcbiAgICAgIGlzQ2FtZXJhRWRpdDpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNDYW1lcmFFZGl0LFxyXG4gICAgICBpc0FJTWFuYWdlcjpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNBSU1hbmFnZXIsXHJcbiAgICAgIGlzQUlNYW5hZ2VyQWNjZXNzQ29udHJvbDpkYXRhPy5mZWF0dXJlQ29uZmlncz8uaXNBSU1hbmFnZXJBY2Nlc3NDb250cm9sLFxyXG4gICAgICBsb2dpblNTTzpkYXRhPy5mZWF0dXJlQ29uZmlncz8ubG9naW5TU09cclxuICAgIH0gXHJcbiAgICB0aGlzLmZlYXR1cmVDb25maWdQcmV2VmFsdWVzID0gb2JqXHJcbiAgICB0aGlzLmlzUmV2b3BzID0gZGF0YT8uZmVhdHVyZUNvbmZpZ3M/LmlzUmV2b3BzID09PSB0cnVlO1xyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiB7IC4uLm9iaiB9LCB0eXBlOiAnaW5wdXQnLCBmb3JtOiAnZmVhdHVyZS1jb25maWd1cmF0aW9uJyB9KVxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhPy5mZWF0dXJlQ29uZmlncykpO1xyXG4gICAgdGhpcy5ncy5zZWxlY3RlZENsaWVudC5uZXh0KGRhdGE/LmZlYXR1cmVDb25maWdzKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlRm9vdGZhbGxDb25maWd1cmF0aW9uKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKCFkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3MpIHJldHVybjtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGFsbG93VGlja2V0Q3JlYXRpb246IGRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8uYWxsb3dUaWNrZXRDcmVhdGlvbiA/PyAzLFxyXG4gICAgICBpc0F1dG9DbG9zZUVuYWJsZTogZGF0YT8uZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzPy5pc0F1dG9DbG9zZUVuYWJsZSxcclxuICAgICAgYXV0b0Nsb3NlQWNjdXJhY3k6IGRhdGE/LmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8uYXV0b0Nsb3NlQWNjdXJhY3kgPz8gJzk1JScsXHJcbiAgICAgIHRhbmdvUmV2aWV3OiBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/LnRhbmdvUmV2aWV3ID8/ICc4NSUnLFxyXG4gICAgICBvdmVyYWxsTGltaXRhdGlvbjogZGF0YT8uZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzPy5vdmVyYWxsTGltaXRhdGlvbiA/PyAnJyxcclxuICAgICAgYWNjdXJhY3lCcmVhY2g6ICBkYXRhLmZvb3RmYWxsRGlyZWN0b3J5Q29uZmlncz8uYWNjdXJhY3lCcmVhY2ggfHwge30sXHJcbiAgICAgIHJldmlzaW9uOiBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/LnJldmlzaW9uID8/IFtdLFxyXG4gICAgICB0YWdnaW5nTGltaXRhdGlvbjogZGF0YT8uZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzPy50YWdnaW5nTGltaXRhdGlvbiA/PyBbXSxcclxuICAgICAgc3RvcmVMaXN0OiBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/LnN0b3JlTGlzdCA/PyBkYXRhPy5mb290ZmFsbERpcmVjdG9yeUNvbmZpZ3M/LmFjY3VyYWN5QnJlYWNoPy5zdG9yZUxpc3QgPz8gW11cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZvb3RmYWxsQ29uZmlnUHJldlZhbHVlcyA9IG9iajtcclxuICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogeyAuLi5vYmogfSwgdHlwZTogJ2lucHV0JywgZm9ybTogJ2Zvb3RmYWxsRGlyZWN0b3J5Q29uZmlncycgfSlcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZm9vdGZhbGwtY29uZmlnXCIsIEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgZG9tYWluTmFtZTogZGF0YT8uZG9tYWluQ29uZmlnPy5zc29Mb2dpbj8uZG9tYWluTmFtZSxcclxuICAgICAgaXNFbmFibGU6IGRhdGE/LmRvbWFpbkNvbmZpZz8uc3NvTG9naW4/LmlzRW5hYmxlLFxyXG4gICAgICBlbmFibGVXaGl0ZWxpc3Rpbmc6IGRhdGE/LmRvbWFpbkNvbmZpZz8uaXBXaGl0ZWxpc3Rpbmc/LmVuYWJsZVdoaXRlbGlzdGluZyxcclxuICAgICAgYWxsb3dlZElwczogZGF0YT8uZG9tYWluQ29uZmlnPy5pcFdoaXRlbGlzdGluZz8uYWxsb3dlZElwcyxcclxuICAgICAgZW5hYmxlT3RwOiBkYXRhPy5kb21haW5Db25maWc/LmVuYWJsZU90cCxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvbWFpbkNvbmZpZ1ByZXZWYWx1ZXMgPSBvYmpcclxuXHJcbiAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IHsgLi4ub2JqIH0sIHR5cGU6ICdpbnB1dCcsIGZvcm06ICdkb21haW4tZGV0YWlscycgfSlcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVVc2VyQ29uZmlndXJhdGlvbihkYXRhOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIGNzbTogZGF0YT8uYXNzaWduZWRVc2Vycz8uY3NtLFxyXG4gICAgICBvcHM6IGRhdGE/LmFzc2lnbmVkVXNlcnM/Lm9wcyxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVzZXJDb25maWdQcmV2VmFsdWVzID0gb2JqXHJcblxyXG4gICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiB7IC4uLm9iaiB9LCB0eXBlOiAnaW5wdXQnLCBmb3JtOiAndXNlci1jb25maWd1cmF0aW9uJyB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzdWJtaXRGb3JtKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZm9ybSA9PT0gJ3RpY2tldC1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLnRpY2tldENvbmZpZ1ByZXZWYWx1ZXMsIGUudmFsdWUpICAgICBcclxuICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlVGlja2V0Q29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KGUuZGF0YT8ucmVzdWx0KVxyXG4gICAgICAgICAgdGhpcy5jbGllbnRBcGkuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnc3VibWl0dGVkJywgZm9ybTogJ251bGwnIH0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVRpY2tldENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB9IGVsc2VcclxuICAgICAgaWYgKGUuZm9ybSA9PT0gJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gIHRoaXMuZ2V0RGlmZmVyZW50RW50cmllcyh0aGlzLmZlYXR1cmVDb25maWdQcmV2VmFsdWVzLCBlLnZhbHVlKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpXHJcbiAgICAgICAgdGhpcy5jbGllbnRBcGkudXBkYXRlRmVhdHVyZUNvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhLmNsaWVudElkLCBkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoZS5kYXRhPy5yZXN1bHQpXHJcbiAgICAgICAgICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogbnVsbCwgdHlwZTogJ3N1Ym1pdHRlZCcsIGZvcm06ICdudWxsJyB9KVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdChlLmVycm9yPy5lcnJvcilcclxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUZlYXR1cmVDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgaWYgKGUuZm9ybSA9PT0gJ2RvbWFpbi1kZXRhaWxzJykge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9ICB0aGlzLmdldERpZmZlcmVudEVudHJpZXModGhpcy5kb21haW5Db25maWdQcmV2VmFsdWVzLCBlLnZhbHVlKSAgICAgXHJcbiAgICAgICAgICB0aGlzLmNsaWVudEFwaS51cGRhdGVEb21haW5EZXRhaWxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YS5jbGllbnRJZCwgZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdChlLmRhdGE/LnJlc3VsdClcclxuICAgICAgICAgICAgICB0aGlzLmNsaWVudEFwaS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IG51bGwsIHR5cGU6ICdzdWJtaXR0ZWQnLCBmb3JtOiAnbnVsbCcgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLmdldEVycm9yVG9hc3QoZS5lcnJvcj8uZXJyb3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZURvbWFpbkRldGFpbENvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKGUuZm9ybSA9PT0gJ2Zvb3RmYWxsRGlyZWN0b3J5Q29uZmlncycpIHtcclxuICAgICAgICAgIC8vIGNvbnN0IGRhdGEgPSB0aGlzLmdldERpZmZlcmVudEVudHJpZXModGhpcy5mb290ZmFsbENvbmZpZ1ByZXZWYWx1ZXMsIGUudmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGUudmFsdWU7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlIGZvb3RmYWxsIGNvbmZpZyBqc29uID09PicsIGRhdGEpXHJcbiAgICAgICAgICB0aGlzLmNsaWVudEFwaS51cGRhdGVGb290ZmFsbERpcmVjdG9yeUNvbmZpZyh0aGlzLmNsaWVudERhdGEuY2xpZW50SWQsIGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoJ0Zvb3RmYWxsIGNvbmZpZ3VyYXRpb24gZGV0YWlscyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4nKVxyXG4gICAgICAgICAgICAgIHRoaXMuY2xpZW50QXBpLmNsaWVudEZvcm1EYXRhLm5leHQoeyB2YWx1ZTogbnVsbCwgdHlwZTogJ3N1Ym1pdHRlZCcsIGZvcm06ICdudWxsJyB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdChlLmVycm9yPy5lcnJvcilcclxuICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9vdGZhbGxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXRGb3JtKGU6IGFueSkge1xyXG4gICAgaWYgKGUuZm9ybSA9PT0gJ3RpY2tldC1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICB0aGlzLnBvcHVsYXRlVGlja2V0Q29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICB9IGVsc2VcclxuICAgICAgaWYgKGUuZm9ybSA9PT0gJ2ZlYXR1cmUtY29uZmlndXJhdGlvbicpIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlRmVhdHVyZUNvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICB9IGVsc2VcclxuICAgICAgICBpZiAoZS5mb3JtID09PSAnZG9tYWluLWRldGFpbHMnKSB7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlRG9tYWluRGV0YWlsQ29uZmlndXJhdGlvbih0aGlzLmNsaWVudERhdGEpXHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpZiAoZS5mb3JtID09PSAndXNlci1jb25maWd1cmF0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlVXNlckNvbmZpZ3VyYXRpb24odGhpcy5jbGllbnREYXRhKVxyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpZiAoZS5mb3JtID09PSAnZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzJykge1xyXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlRm9vdGZhbGxDb25maWd1cmF0aW9uKHRoaXMuY2xpZW50RGF0YSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmFjY29yZGlvbi5jb2xsYXBzZUFsbCgpXHJcblxyXG4gIH1cclxuXHJcbiBnZXREaWZmZXJlbnRFbnRyaWVzKG9iajE6IFJlY29yZDxzdHJpbmcsIGFueT4sIG9iajI6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IGRpZmZlcmVudEVudHJpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iajIpIHtcclxuICAgICAgICBpZiAob2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iajFba2V5XSkgJiYgQXJyYXkuaXNBcnJheShvYmoyW2tleV0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2JqMVtrZXldKSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqMltrZXldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudEVudHJpZXNba2V5XSA9IG9iajJba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50RW50cmllc1trZXldID0gb2JqMltrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpZmZlcmVudEVudHJpZXM7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uICNhY2NvcmRpb249XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiIFtkZXN0cm95T25IaWRlXT1cInRydWVcIiAgKHNob3cpPVwib3Blbkl0ZW0oKVwiID5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyBcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTYgXCIgIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5BdWRpdCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItYXVkaXQtY29uZmlndXJhdGlvbj48L2xpYi1hdWRpdC1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nIFwiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5FbXBsb3llZSBUcmFpbmluZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZW1wbG95ZWUtdHJhaW5pbmc+PC9saWItZW1wbG95ZWUtdHJhaW5pbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlRpY2tldCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdGlja2V0LWNvbmZpZ3VyYXRpb24+PC9saWItdGlja2V0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1ZNU0VuYWJsZWRVc2VyXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+Rm9vdGZhbGwgRGlyZWN0b3J5IENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1mb290ZmFsbC1jb25maWd1cmF0aW9uPjwvbGliLWZvb3RmYWxsLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVtYWlsIENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGliLWVtYWlsLWNvbmZpZ3VyYXRpb24+PC9saWItZW1haWwtY29uZmlndXJhdGlvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbWFpbC1zY2hlZHVsZXI+PC9saWItZW1haWwtc2NoZWR1bGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFJlcG9ydCBDb25maWd1cmF0aW9uIGlzIHZpc2libGUgdG8gQk9USCB0YW5nbyBhbmQgY2xpZW50IGxvZ2luc1xyXG4gICAgICAgICAgICAgICAgIChwcm9kdWN0IHJ1bGluZyAyMDI2LTA5LTAxKTsgaW5zaWRlLCBjbGllbnRzIHNlZSBvbmx5IHRoZVxyXG4gICAgICAgICAgICAgICAgIEN1c3RvbSB0YWIgLS0gc2VlIHJlcG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlJlcG9ydCBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVwb3J0LWNvbmZpZ3VyYXRpb24+PC9saWItcmVwb3J0LWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlVzZXIgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXVzZXItY29uZmlndXJhdGlvbj48L2xpYi11c2VyLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPkVkZ2UgQXBwIENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lZGdlLWFwcC1jb25maWd1cmF0aW9uPjwvbGliLWVkZ2UtYXBwLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyUm9sZSAhPT0gJ3VzZXInXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5TZWN1cml0eSBGZWF0dXJlczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZG9tYWluLWRldGFpbHM+PC9saWItZG9tYWluLWRldGFpbHM+ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+RmVhdHVyZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZmVhdHVyZS1jb25maWd1cmF0aW9uPjwvbGliLWZlYXR1cmUtY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5EYXNoYm9hcmQgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWRhc2hib2FyZC1jb25maWd1cmF0aW9uPjwvbGliLWRhc2hib2FyZC1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgIT09ICd0YW5nbydcIiBjbGFzcz1cInNldHRpbmdzLWFjY29yZGlhbi1jYXJkIG1iLTZcIiBuZ2JBY2NvcmRpb25JdGVtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+Q29udHJvbCBDZW50ZXIgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWNvbnRyb2wtY2VudGVyLWNvbmZpZ3VyYXRpb24+PC9saWItY29udHJvbC1jZW50ZXItY29uZmlndXJhdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlN0b3JlIFRpbWUgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLXRpbWUtY29uZmlndXJhdGlvbj48L2xpYi1zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1Jldm9wc1wiIGNsYXNzPVwic2V0dGluZ3MtYWNjb3JkaWFuLWNhcmQgbWItNlwiIG5nYkFjY29yZGlvbkl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5SZXZPcCBUYWcgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZXZvcC1jb25maWd1cmF0aW9uPjwvbGliLXJldm9wLWNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gWm9uZSBjb25maWd1YXJhdGlvbiAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInpvbmVTdWJzY3JpYmVkJiYodXNlclJvbGUgPT09ICdhZG1pbicgfHwgdXNlclJvbGUgPT09ICdzdXBlcmFkbWluJykgJiYgXHJcbiAgICAgICAgICAgICgoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29FeWVfWm9uZVRhZ19pc0FkZCB8fCAoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29FeWVfWm9uZVRhZ19pc0VkaXQpXCIgY2xhc3M9XCJzZXR0aW5ncy1hY2NvcmRpYW4tY2FyZCBtYi02XCIgbmdiQWNjb3JkaW9uSXRlbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPlpvbmUgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi16b25lLWNvbmZpZ3VyYXRpb24+PC9saWItem9uZS1jb25maWd1cmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiJdfQ==
|