@almatar/smart-booking-dashboard 0.0.2-alpha.3 → 0.0.2-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +47 -28
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +20 -28
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary-skeleton/almatar-hotel-auto-cancellation-refund-summary-skeleton.component.mjs +16 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.mjs +207 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +3 -3
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +3 -3
- package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +12 -5
- package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +23 -21
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +1 -30
- package/esm2022/lib/models/booking.types.mjs +8 -1
- package/fesm2022/almatar-smart-booking-dashboard.mjs +316 -112
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
- package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +1 -1
- package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +4 -3
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +3 -4
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary-skeleton/almatar-hotel-auto-cancellation-refund-summary-skeleton.component.d.ts +7 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component.d.ts +46 -0
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +2 -1
- package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +1 -1
- package/lib/components/result-panel/result-panel.component.d.ts +1 -1
- package/lib/models/booking.types.d.ts +2 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +1 -1
- package/package.json +1 -1
- package/esm2022/lib/shared/store/selectors/currency.selectors.mjs +0 -9
- package/lib/shared/store/selectors/currency.selectors.d.ts +0 -2
|
@@ -13,10 +13,8 @@ import { AlmatarHotelAutoCancellationSelectRoomsComponent } from './components/a
|
|
|
13
13
|
import { AlmatarHotelAutoCancellationRefundSummaryComponent } from './components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component';
|
|
14
14
|
import { AlmatarHotelAutoCancellationRefundMethodComponent } from './components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component';
|
|
15
15
|
import { ResultOverlayComponent } from './components/result-overlay/result-overlay.component';
|
|
16
|
+
import { AlmatarHotelAutoCancellationResultOverlayComponent } from './components/almatar-hotel-auto-cancellation-result-overlay/almatar-hotel-auto-cancellation-result-overlay.component';
|
|
16
17
|
import { HotelManageBookingAsideTabEnum } from '../shared/enums/hotel-manage-booking-aside-tab.enum';
|
|
17
|
-
import { Store } from '@ngrx/store';
|
|
18
|
-
import { filter } from 'rxjs/operators';
|
|
19
|
-
import { getCurrentCurrency } from '../../shared/store/selectors/currency.selectors';
|
|
20
18
|
import { environments } from '../../shared/environments/environment';
|
|
21
19
|
import { AlmatarIconModule } from '../../shared/modules/almatar-icon/almatar-icon.module';
|
|
22
20
|
import { SharedService } from '../../shared/services/shared.service';
|
|
@@ -30,7 +28,6 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
30
28
|
this.autoCancellationEndpointsService = inject(AlmatarHotelAutoCancellationEndpointsService);
|
|
31
29
|
this.activatedRoute = inject(ActivatedRoute);
|
|
32
30
|
this.destroyRef = inject(DestroyRef);
|
|
33
|
-
this.store = inject(Store);
|
|
34
31
|
this.sharedService = inject(SharedService);
|
|
35
32
|
this.selectedHotelBooking = input(null);
|
|
36
33
|
this.closed = output();
|
|
@@ -46,6 +43,8 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
46
43
|
this.isNusk = signal(false);
|
|
47
44
|
this.showResultOverlay = signal(false);
|
|
48
45
|
this.resultOverlayData = signal(null);
|
|
46
|
+
this.showDetailedResultOverlay = signal(false);
|
|
47
|
+
this.cancellationApiResponse = signal(null);
|
|
49
48
|
this.rooms = signal([]);
|
|
50
49
|
this.packages = signal([]);
|
|
51
50
|
this.hotelInfo = signal(null);
|
|
@@ -120,9 +119,36 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
120
119
|
});
|
|
121
120
|
effect(() => {
|
|
122
121
|
this.HotelManageBookingService.selectedHotelBooking.next(this.selectedHotelBooking());
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
});
|
|
122
|
+
console.log('selectedHotelBooking', this.selectedHotelBooking());
|
|
123
|
+
console.log('refundDetailsData', this.refundDetailsData());
|
|
124
|
+
}, { allowSignalWrites: true });
|
|
125
|
+
// Set currency from selected hotel booking
|
|
126
|
+
effect(() => {
|
|
127
|
+
const booking = this.selectedHotelBooking();
|
|
128
|
+
if (booking) {
|
|
129
|
+
// Try multiple sources for currency
|
|
130
|
+
let currency = booking.currency;
|
|
131
|
+
// Fallback: try to extract from raw data
|
|
132
|
+
if (!currency && booking.data) {
|
|
133
|
+
const rawData = booking.data.data || booking.data;
|
|
134
|
+
if (rawData?.sCurrency) {
|
|
135
|
+
currency = {
|
|
136
|
+
code: rawData.sCurrency,
|
|
137
|
+
name: '',
|
|
138
|
+
symbol: '',
|
|
139
|
+
rate: rawData.sCurrencyROE || 1
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (currency) {
|
|
144
|
+
this.currentCurrency.set(currency);
|
|
145
|
+
console.log('Currency set to:', this.currentCurrency());
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log('No currency found on booking');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}, { allowSignalWrites: true });
|
|
126
152
|
}
|
|
127
153
|
get closeIconName() {
|
|
128
154
|
const lang = this.sharedService.getAppLanguage();
|
|
@@ -131,15 +157,6 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
131
157
|
ngOnInit() {
|
|
132
158
|
this.initializeQueryParams();
|
|
133
159
|
this.loadBookingDataFromPackages();
|
|
134
|
-
this.initCurrency();
|
|
135
|
-
}
|
|
136
|
-
initCurrency() {
|
|
137
|
-
this.store
|
|
138
|
-
.select(getCurrentCurrency)
|
|
139
|
-
.pipe(filter((currency) => !!currency), takeUntilDestroyed(this.destroyRef))
|
|
140
|
-
.subscribe((currency) => {
|
|
141
|
-
this.currentCurrency.set(currency);
|
|
142
|
-
});
|
|
143
160
|
}
|
|
144
161
|
ngOnDestroy() {
|
|
145
162
|
this.autoCancellationService.reset();
|
|
@@ -344,6 +361,7 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
344
361
|
totalLoyaltyPoints: loyaltyPointsValue,
|
|
345
362
|
bookingId: this.selectedHotelBooking()?.bookingId
|
|
346
363
|
});
|
|
364
|
+
console.log('Refund details data set:', this.refundDetailsData());
|
|
347
365
|
// Default to wallet if allowed, otherwise originalPaymentMethod
|
|
348
366
|
if (isFullWalletAllowed && walletRefund > 0) {
|
|
349
367
|
this.refundMethod.set('wallet');
|
|
@@ -443,14 +461,9 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
443
461
|
this.hotelManageBookingService.setActiveAsideTab(HotelManageBookingAsideTabEnum.whatsAppAgent);
|
|
444
462
|
return;
|
|
445
463
|
}
|
|
446
|
-
//
|
|
447
|
-
this.
|
|
448
|
-
|
|
449
|
-
title: 'Cancellation Successful!',
|
|
450
|
-
message: 'Your booking has been cancelled successfully. The refund will be processed according to your selected method.',
|
|
451
|
-
confirmText: 'Done'
|
|
452
|
-
});
|
|
453
|
-
this.showResultOverlay.set(true);
|
|
464
|
+
// Store API response and show detailed result overlay
|
|
465
|
+
this.cancellationApiResponse.set(response);
|
|
466
|
+
this.showDetailedResultOverlay.set(true);
|
|
454
467
|
// Also emit for parent component if needed
|
|
455
468
|
this.cancellationSuccess.emit(response);
|
|
456
469
|
},
|
|
@@ -518,11 +531,16 @@ export class AlmatarHotelAutoCancellationComponent {
|
|
|
518
531
|
this.showResultOverlay.set(false);
|
|
519
532
|
this.resultOverlayData.set(null);
|
|
520
533
|
}
|
|
534
|
+
onDetailedResultOverlayDone() {
|
|
535
|
+
this.showDetailedResultOverlay.set(false);
|
|
536
|
+
this.cancellationApiResponse.set(null);
|
|
537
|
+
this.closed.emit();
|
|
538
|
+
}
|
|
521
539
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
522
540
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlmatarHotelAutoCancellationComponent, isStandalone: true, selector: "almatar-hotel-auto-cancellation", inputs: { selectedHotelBooking: { classPropertyName: "selectedHotelBooking", publicName: "selectedHotelBooking", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", cancellationSuccess: "cancellationSuccess", nonRefundableSubmitSuccess: "nonRefundableSubmitSuccess", chatWithAgent: "chatWithAgent" }, providers: [
|
|
523
541
|
AlmatarHotelAutoCancellationService,
|
|
524
542
|
AlmatarHotelAutoCancellationEndpointsService
|
|
525
|
-
], ngImport: i0, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "component", type: i1.LoaderComponent, selector: "app-loader", inputs: ["loading", "message"] }, { kind: "component", type: AsideComponent, selector: "almatar-aside", inputs: ["asideTitle", "showHeader", "headerTemplate", "whiteHeader", "showAside", "width", "modal", "closable", "transitionOptions", "interceptClose"], outputs: ["onClose", "closeRequested"] }, { kind: "component", type: AlmatarHotelAutoCancellationSelectRoomsComponent, selector: "almatar-hotel-auto-cancellation-select-rooms", inputs: ["packages", "hotelInfo", "bookingId", "hotelId", "currencyCode"], outputs: ["continueToCancel", "closeModal", "nonRefundableSubmitSuccess", "chatWithAgent"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundSummaryComponent, selector: "almatar-hotel-auto-cancellation-refund-summary", inputs: ["selectedRooms", "bookingId", "hotelId", "hotelInfo", "selectionSkipped"], outputs: ["keepRoom", "selectRefundOption", "closeModal"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundMethodComponent, selector: "almatar-hotel-auto-cancellation-refund-method", inputs: ["refundDetailsData", "currencyObj", "refundMethod", "bookingId", "isCancelling", "showBack"], outputs: ["methodSelected", "backRequested", "confirmRequested", "closeModal"] }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: ResultOverlayComponent, selector: "app-result-overlay", inputs: ["data", "show"], outputs: ["confirm", "cancel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
543
|
+
], ngImport: i0, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n [currency]=\"currentCurrency()\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n\n@if (showDetailedResultOverlay() && cancellationApiResponse()) {\n <almatar-hotel-auto-cancellation-result-overlay\n [visible]=\"showDetailedResultOverlay()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [apiResponse]=\"cancellationApiResponse()\"\n (done)=\"onDetailedResultOverlayDone()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "component", type: i1.LoaderComponent, selector: "app-loader", inputs: ["loading", "message"] }, { kind: "component", type: AsideComponent, selector: "almatar-aside", inputs: ["asideTitle", "showHeader", "headerTemplate", "whiteHeader", "showAside", "width", "modal", "closable", "transitionOptions", "interceptClose"], outputs: ["onClose", "closeRequested"] }, { kind: "component", type: AlmatarHotelAutoCancellationSelectRoomsComponent, selector: "almatar-hotel-auto-cancellation-select-rooms", inputs: ["packages", "hotelInfo", "bookingId", "hotelId", "currencyCode"], outputs: ["continueToCancel", "closeModal", "nonRefundableSubmitSuccess", "chatWithAgent"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundSummaryComponent, selector: "almatar-hotel-auto-cancellation-refund-summary", inputs: ["selectedRooms", "bookingId", "hotelId", "hotelInfo", "selectionSkipped", "currency"], outputs: ["keepRoom", "selectRefundOption", "closeModal"] }, { kind: "component", type: AlmatarHotelAutoCancellationRefundMethodComponent, selector: "almatar-hotel-auto-cancellation-refund-method", inputs: ["refundDetailsData", "currencyObj", "refundMethod", "bookingId", "isCancelling", "showBack"], outputs: ["methodSelected", "backRequested", "confirmRequested", "closeModal"] }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: ResultOverlayComponent, selector: "app-result-overlay", inputs: ["data", "show"], outputs: ["confirm", "cancel"] }, { kind: "component", type: AlmatarHotelAutoCancellationResultOverlayComponent, selector: "almatar-hotel-auto-cancellation-result-overlay", inputs: ["visible", "currencyObj", "refundMethod", "apiResponse"], outputs: ["done"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
526
544
|
}
|
|
527
545
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationComponent, decorators: [{
|
|
528
546
|
type: Component,
|
|
@@ -535,10 +553,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
535
553
|
AlmatarHotelAutoCancellationRefundSummaryComponent,
|
|
536
554
|
AlmatarHotelAutoCancellationRefundMethodComponent,
|
|
537
555
|
AlmatarIconModule,
|
|
538
|
-
ResultOverlayComponent
|
|
556
|
+
ResultOverlayComponent,
|
|
557
|
+
AlmatarHotelAutoCancellationResultOverlayComponent
|
|
539
558
|
], providers: [
|
|
540
559
|
AlmatarHotelAutoCancellationService,
|
|
541
560
|
AlmatarHotelAutoCancellationEndpointsService
|
|
542
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"] }]
|
|
561
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showAside()) {\n <almatar-aside\n\n class=\"auto_cancellation_wrapper\"\n [asideTitle]=\"asideTitle()\"\n [showAside]=\"showAside()\"\n [whiteHeader]=\"true\"\n [showHeader]=\"false\"\n (onClose)=\"onCloseModal()\"\n >\n <!-- Custom Header with 60px height -->\n <div class=\"auto_cancellation__header\">\n @if (canGoBack()) {\n <button class=\"auto_cancellation__header-back\" (click)=\"onGoBack()\" type=\"button\">\n <i class=\"pi pi-arrow-left\"></i>\n </button>\n }\n <div class=\"auto_cancellation__header-content\">\n @if (currentStep() === stepEnum.selectRooms) {\n <h2 class=\"auto_cancellation__header-title\">\n @if (isSinglePackage()) {\n Cancel Rooms\n } @else {\n Select Rooms\n }\n </h2>\n <p class=\"auto_cancellation__header-subtitle\">\n @if (isSinglePackage()) {\n Review and confirm your cancellation\n } @else {\n Choose which room(s) you'd like to cancel\n }\n </p>\n } @else if (currentStep() === stepEnum.refundSummary) {\n <h2 class=\"auto_cancellation__header-title\">Cancel Booking Request</h2>\n <p class=\"auto_cancellation__header-subtitle\">Review your refund summary and proceed</p>\n } @else if (currentStep() === stepEnum.refundMethod) {\n <h2 class=\"auto_cancellation__header-title\">Select Refund Method</h2>\n <p class=\"auto_cancellation__header-subtitle\">Choose how you'd like to receive your refund</p>\n } @else {\n <h2 class=\"auto_cancellation__header-title\">{{ asideTitle() }}</h2>\n <p class=\"auto_cancellation__header-subtitle\">Complete your booking cancellation</p>\n }\n </div>\n <button class=\"auto_cancellation__header-close\" (click)=\"onCloseModal()\" type=\"button\">\n <i class=\"pi pi-times\"></i>\n </button>\n </div>\n\n <div class=\"auto_cancellation__component\" [class.isNusk]=\"isNusk()\">\n @if (isLoading()) {\n <div class=\"auto_cancellation__loading\">\n <app-loader></app-loader>\n </div>\n }\n\n @if (currentStep() === stepEnum.selectRooms && !isLoading()) {\n <almatar-hotel-auto-cancellation-select-rooms\n [packages]=\"packages()\"\n [hotelInfo]=\"hotelInfo()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.hotelId\"\n [currencyCode]=\"selectedHotelBooking()?.currencyCode || 'SAR'\"\n (continueToCancel)=\"onContinueToCancel($event)\"\n (closeModal)=\"onCloseModal()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n (chatWithAgent)=\"onChatWithAgent()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundSummary && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary\n [selectedRooms]=\"autoCancellationService.selectedRooms()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n [hotelId]=\"selectedHotelBooking()?.id || selectedHotelBooking()?.hpk\"\n [hotelInfo]=\"hotelInfo()\"\n [selectionSkipped]=\"packages().length <= 1\"\n [currency]=\"currentCurrency()\"\n (keepRoom)=\"onKeepRoom()\"\n (selectRefundOption)=\"onSelectRefundOption($event)\"\n (closeModal)=\"onCloseModal()\"\n />\n }\n\n @if (currentStep() === stepEnum.refundMethod && !isLoading()) {\n <almatar-hotel-auto-cancellation-refund-method\n [refundDetailsData]=\"refundDetailsData()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [isCancelling]=\"isCancelling()\"\n (methodSelected)=\"onMethodSelected($event)\"\n (backRequested)=\"onBackFromRefundMethod()\"\n (confirmRequested)=\"confirmCancellation()\"\n (closeModal)=\"onCloseModal()\"\n [bookingId]=\"selectedHotelBooking()?.bookingId\"\n />\n }\n </div>\n </almatar-aside>\n}\n\n@if (showErrorModal()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n@if (showResultOverlay() && resultOverlayData()) {\n <app-result-overlay\n [data]=\"resultOverlayData()!\"\n [show]=\"showResultOverlay()\"\n (confirm)=\"onResultOverlayConfirm()\"\n (cancel)=\"onResultOverlayCancel()\"\n />\n}\n\n@if (showDetailedResultOverlay() && cancellationApiResponse()) {\n <almatar-hotel-auto-cancellation-result-overlay\n [visible]=\"showDetailedResultOverlay()\"\n [currencyObj]=\"currentCurrency()\"\n [refundMethod]=\"refundMethod()\"\n [apiResponse]=\"cancellationApiResponse()\"\n (done)=\"onDetailedResultOverlayDone()\"\n />\n}\n", styles: [".auto_cancellation__header{height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;background:#fff;border-bottom:1px solid #e2e8f0;flex-shrink:0;gap:16px}.auto_cancellation__header-content{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.auto_cancellation__header-title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:700;color:#1e293b;margin:0;line-height:1.3}.auto_cancellation__header-subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;color:#64748b;margin:0;line-height:1.4}.auto_cancellation__header-back{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease;margin-right:8px}.auto_cancellation__header-back i{font-size:18px;color:#64748b}.auto_cancellation__header-back:hover{background:#f1f5f9}.auto_cancellation__header-back:hover i{color:#1e293b}.auto_cancellation__header-back:active{background:#e2e8f0}.auto_cancellation__header-close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:6px;cursor:pointer;flex-shrink:0;transition:all .2s ease}.auto_cancellation__header-close i{font-size:18px;color:#64748b}.auto_cancellation__header-close:hover{background:#f1f5f9}.auto_cancellation__header-close:hover i{color:#1e293b}.auto_cancellation__header-close:active{background:#e2e8f0}.auto_cancellation__component{height:calc(100% - 60px)}.auto_cancellation__loading{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.auto_cancellation_wrapper ::ng-deep almatar-hotel-auto-cancellation{display:block;height:100%}.auto_cancellation_wrapper ::ng-deep .p-sidebar-header{display:none!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-content{padding-top:0!important}.auto_cancellation_wrapper ::ng-deep .p-sidebar-close{display:none!important}.auto_cancellation_wrapper ::ng-deep .almatar_aside .p-dialog-content{background:var(--almatar-neutral-surface-screen-bg)}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn{min-height:48px;padding:12px 24px;border-radius:10px;font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;overflow:hidden}.auto_cancellation_wrapper ::ng-deep .main_btn:disabled,.auto_cancellation_wrapper ::ng-deep .btn:disabled{opacity:.5;cursor:not-allowed}.auto_cancellation_wrapper ::ng-deep .main_btn,.auto_cancellation_wrapper ::ng-deep .btn--primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;box-shadow:0 2px 8px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .main_btn:hover:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);box-shadow:0 4px 12px #3b82f666;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .main_btn:active:not(:disabled),.auto_cancellation_wrapper ::ng-deep .btn--primary:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.auto_cancellation_wrapper ::ng-deep .btn--secondary{background:#f1f5f9;color:#1e293b;border:1px solid #e2e8f0}.auto_cancellation_wrapper ::ng-deep .btn--secondary:hover:not(:disabled){background:#e2e8f0;border-color:#cbd5e1;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--secondary:active:not(:disabled){background:#cbd5e1;transform:translateY(0)}.auto_cancellation_wrapper ::ng-deep .btn--danger{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;box-shadow:0 2px 8px #ef44444d}.auto_cancellation_wrapper ::ng-deep .btn--danger:hover:not(:disabled){background:linear-gradient(135deg,#dc2626,#b91c1c);box-shadow:0 4px 12px #ef444466;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn--danger:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #ef44444d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us{background:linear-gradient(135deg,#10b981,#059669);box-shadow:0 2px 8px #10b9814d}.auto_cancellation_wrapper ::ng-deep .main_btn--chat-with-us:hover:not(:disabled){background:linear-gradient(135deg,#059669,#047857);box-shadow:0 4px 12px #10b98166;transform:translateY(-1px)}.auto_cancellation_wrapper ::ng-deep .btn__spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.auto_cancellation_wrapper ::ng-deep .isNusk .main_btn,.auto_cancellation_wrapper ::ng-deep .isNusk .btn--primary{background:linear-gradient(135deg,var(--almatar-nusuk-primary),var(--almatar-nusuk-primary))!important;border-radius:33px!important}\n"] }]
|
|
543
562
|
}], ctorParameters: () => [] });
|
|
544
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBR1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQzNJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekcsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7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QkFDakMsZ0RBQWdEO3dCQUNoRCxrREFBa0Q7d0JBQ2xELGlEQUFpRDt3QkFDakQsaUJBQWlCO3dCQUNqQixzQkFBc0I7cUJBQ3ZCLGFBQ1U7d0JBQ1QsbUNBQW1DO3dCQUNuQyw0Q0FBNEM7cUJBQzdDLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNpZGVDb21wb25lbnQgfSBmcm9tICcuLi9hbG1hdGFyLWFzaWRlL2FzaWRlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBEZXN0cm95UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBvdXRwdXQsXG4gIGlucHV0LFxuICBlZmZlY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWFuYWdlQm9va2luZ0ZhaWxlZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsL21hbmFnZS1ib29raW5nLWZhaWxlZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGVyTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZHVsZXMvbG9hZGVyL2xvYWRlci5tb2R1bGUnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9ob3RlbC1tYW5hZ2UtYm9va2luZy9ob3RlbC1tYW5hZ2UtYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSB9IGZyb20gJy4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgSUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2Vcbn0gZnJvbSAnLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUJvb2tpbmdQYWNrYWdlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElSZWZ1bmREZXRhaWxzRGF0YSBhcyBJRmxpZ2h0UmVmdW5kRGV0YWlsc0RhdGEsXG4gIFJlZnVuZFByZWZlcnJlZE1ldGhvZCxcbiAgTG95YWx0eVBheW1lbnRUeXBlXG59IGZyb20gJy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ktZmxpZ2h0LXJlZnVuZC1kZXRhaWxzJztcbmltcG9ydCB7IElIb3RlbEJvb2tpbmdEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jvb2tpbmcudHlwZXMnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5L2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50JztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtbWV0aG9kL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLW1ldGhvZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzdWx0T3ZlcmxheUNvbXBvbmVudCwgUmVzdWx0T3ZlcmxheURhdGEgfSBmcm9tICcuL2NvbXBvbmVudHMvcmVzdWx0LW92ZXJsYXkvcmVzdWx0LW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdGVsTWFuYWdlQm9va2luZ0FzaWRlVGFiRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9ob3RlbC1tYW5hZ2UtYm9va2luZy1hc2lkZS10YWIuZW51bSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldEN1cnJlbnRDdXJyZW5jeSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zdG9yZS9zZWxlY3RvcnMvY3VycmVuY3kuc2VsZWN0b3JzJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQWxtYXRhckljb25Nb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kdWxlcy9hbG1hdGFyLWljb24vYWxtYXRhci1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IGxveWFsdHlQb2ludHNNZXRob2RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZSxcbiAgICBBc2lkZUNvbXBvbmVudCxcbiAgICBNYW5hZ2VCb29raW5nRmFpbGVkTW9kYWxDb21wb25lbnQsXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5Q29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQsXG4gICAgQWxtYXRhckljb25Nb2R1bGUsXG4gICAgUmVzdWx0T3ZlcmxheUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VydmljZSxcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2VcbiAgKTtcblxuICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KEhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KFNoYXJlZFNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSG90ZWxCb29raW5nID0gaW5wdXQ8SUhvdGVsQm9va2luZ0RhdGEgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgY2FuY2VsbGF0aW9uU3VjY2VzcyA9IG91dHB1dDxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjaGF0V2l0aEFnZW50ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgc2hvd0NvbmZpcm1Nb2RhbCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dFcnJvck1vZGFsID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0FzaWRlID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBpc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBpc0NhbmNlbGxpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBob3RlbE1hbmFnZUVycm9yID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSBpc051c2sgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBzaG93UmVzdWx0T3ZlcmxheSA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHJlc3VsdE92ZXJsYXlEYXRhID0gc2lnbmFsPFJlc3VsdE92ZXJsYXlEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IHBhY2thZ2VzID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50Q3VycmVuY3kgPSBzaWduYWw8YW55PihudWxsKTtcbiAgcmVhZG9ubHkgcmVmdW5kRGV0YWlsc0RhdGEgPSBzaWduYWw8SUZsaWdodFJlZnVuZERldGFpbHNEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUGFja2FnZUlkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICByZWFkb25seSByZWZ1bmRNZXRob2QgPSBzaWduYWw8UmVmdW5kUHJlZmVycmVkTWV0aG9kPignd2FsbGV0Jyk7XG4gIHJlYWRvbmx5IHJlZnVuZFJlc3BvbnNlRGF0YSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHN0ZXBFbnVtID0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtO1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5jdXJyZW50U3RlcCgpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNTaW5nbGVSb29tID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb29tcygpLmxlbmd0aCA9PT0gMSk7XG4gIHJlYWRvbmx5IGlzU2luZ2xlUGFja2FnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFja2FnZXMoKS5sZW5ndGggPT09IDEpO1xuXG4gIC8vIEdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgb3IgZmlyc3QgcGFja2FnZVxuICByZWFkb25seSBib29raW5nU3VwcGxpZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gVHJ5IHRvIGdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgbGV2ZWwgZmlyc3RcbiAgICBpZiAoKGJvb2tpbmcgYXMgYW55KS5zdXBwbGllcikge1xuICAgICAgcmV0dXJuIChib29raW5nIGFzIGFueSkuc3VwcGxpZXI7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGdldCBmcm9tIGZpcnN0IHBhY2thZ2VcbiAgICBjb25zdCBwYWNrYWdlcyA9IHRoaXMucGFja2FnZXMoKTtcbiAgICByZXR1cm4gcGFja2FnZXMubGVuZ3RoID4gMCA/IHBhY2thZ2VzWzBdLnN1cHBsaWVyIDogdW5kZWZpbmVkO1xuICB9KTtcblxuICAvLyBDb21wdXRlZCB0b3RhbHMgZm9yIGFkdWx0cywgY2hpbGRyZW4sIGluZmFudHMgZnJvbSBib29raW5nIHBhY2thZ2VzXG4gIHJlYWRvbmx5IHRvdGFsQWR1bHRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nPy5wYWNrYWdlcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBib29raW5nLnBhY2thZ2VzLnJlZHVjZSgodG90YWw6IG51bWJlciwgcGtnOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdG90YWwgK1xuICAgICAgICByb29tcy5yZWR1Y2UoKHN1bTogbnVtYmVyLCByb29tOiBhbnkpID0+IHN1bSArIChyb29tLmFkdWx0c051bSB8fCAwKSwgMClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsQ2hpbGRyZW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uY2hpbGRyZW5OdW0gfHwgMCksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEluZmFudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uaW5mYW50c051bSB8fCAwKSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFzaWRlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICBzd2l0Y2ggKHN0ZXApIHtcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zOlxuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZVBhY2thZ2UoKSA/ICdDb25maXJtIENhbmNlbGxhdGlvbicgOiAnU2VsZWN0IFJvb21zJztcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnk6XG4gICAgICAgIHJldHVybiAnQ2FuY2VsIEJvb2tpbmcgUmVxdWVzdCc7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHJldHVybiAnU2VsZWN0IFJlZnVuZCBNZXRob2QnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdDYW5jZWwgQm9va2luZyc7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5Ib3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLm5leHQoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKVxuICAgICAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdzZWxlY3RlZEhvdGVsQm9va2luZycsIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKSk7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVmdW5kRGV0YWlsc0RhdGEnLCB0aGlzLnJlZnVuZERldGFpbHNEYXRhKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGNsb3NlSWNvbk5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFwcExhbmd1YWdlKCk7XG4gICAgcmV0dXJuIGxhbmcgPT09ICdhcicgPyAnYXJyb3ctbGVmdCcgOiAnYXJyb3ctcmlnaHQnO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplUXVlcnlQYXJhbXMoKTtcbiAgICB0aGlzLmxvYWRCb29raW5nRGF0YUZyb21QYWNrYWdlcygpO1xuICAgIHRoaXMuaW5pdEN1cnJlbmN5KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRDdXJyZW5jeSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KGdldEN1cnJlbnRDdXJyZW5jeSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGN1cnJlbmN5KSA9PiAhIWN1cnJlbmN5KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbmN5KSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnJlbmN5LnNldChjdXJyZW5jeSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlLmNsZWFyU2VsZWN0ZWRQYWNrYWdlSWRzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVRdWVyeVBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgICBpZiAocGFyYW1zWydza2lwQ2hlY2snXSkge1xuICAgICAgICAgIHRoaXMuaXNOdXNrLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRCb29raW5nRGF0YUZyb21QYWNrYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcblxuICAgIGlmIChib29raW5nKSB7XG4gICAgICB0aGlzLnByb2Nlc3NCb29raW5nRGF0YShib29raW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAuc3Vic2NyaWJlKChzZXJ2aWNlQm9va2luZykgPT4ge1xuICAgICAgICAgIGlmIChzZXJ2aWNlQm9va2luZykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQm9va2luZ0RhdGEoc2VydmljZUJvb2tpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NCb29raW5nRGF0YShib29raW5nOiBJSG90ZWxCb29raW5nRGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IGhvdGVsSW5mb0RhdGE6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvID0ge1xuICAgICAgaG90ZWxOYW1lOiBib29raW5nLmhvdGVsTmFtZSB8fCAnJyxcbiAgICAgIGhvdGVsSW1hZ2U6IGJvb2tpbmcuY292ZXJJbWFnZSB8fCAnJyxcbiAgICAgIGNoZWNrSW46IGJvb2tpbmcuZGF0ZUZyb20gfHwgYm9va2luZz8uZnJvbT8uX2ksXG4gICAgICBjaGVja091dDogYm9va2luZy5kYXRlVG8gfHwgYm9va2luZz8udG8/Ll9pLFxuICAgICAgdG90YWxSb29tczogYm9va2luZy5wYWNrYWdlcz8ubGVuZ3RoIHx8IGJvb2tpbmcucm9vbXMgfHwgMSxcbiAgICAgIG5pZ2h0czpcbiAgICAgICAgYm9va2luZy5udW1iZXJPZk5pZ2h0cyB8fFxuICAgICAgICBib29raW5nLm5pZ2h0TnVtYmVyIHx8XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTmlnaHRzKGJvb2tpbmcuZGF0ZUZyb20sIGJvb2tpbmcuZGF0ZVRvKSxcbiAgICAgIGNoZWNrSW5UaW1lOiBib29raW5nLmNoZWNrSW5UaW1lPy5zcGxpdCgnICcpWzBdLFxuICAgICAgY2hlY2tPdXRUaW1lOiBib29raW5nLmNoZWNrT3V0VGltZT8uc3BsaXQoJyAnKVswXVxuICAgIH07XG4gICAgdGhpcy5ob3RlbEluZm8uc2V0KGhvdGVsSW5mb0RhdGEpO1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0SG90ZWxJbmZvKGhvdGVsSW5mb0RhdGEpO1xuXG4gICAgLy8gTWFwIHRvIGJvdGggcm9vbXMgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSBhbmQgcGFja2FnZXMgKG5ldyBzdHJ1Y3R1cmUpXG4gICAgY29uc3QgbWFwcGVkUm9vbXMgPSB0aGlzLm1hcFBhY2thZ2VzVG9Sb29tcyhib29raW5nKTtcbiAgICB0aGlzLnJvb21zLnNldChtYXBwZWRSb29tcyk7XG5cbiAgICBjb25zdCBtYXBwZWRQYWNrYWdlcyA9IHRoaXMubWFwQm9va2luZ1RvUGFja2FnZXMoYm9va2luZyk7XG4gICAgdGhpcy5wYWNrYWdlcy5zZXQobWFwcGVkUGFja2FnZXMpO1xuXG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRTZWxlY3RlZFJvb21zKG1hcHBlZFJvb21zKTtcblxuICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIG1hcFBhY2thZ2VzVG9Sb29tcyhcbiAgICBib29raW5nOiBhbnlcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10ge1xuICAgIGNvbnN0IG5pZ2h0cyA9XG4gICAgICBib29raW5nLm51bWJlck9mTmlnaHRzIHx8XG4gICAgICBib29raW5nLm5pZ2h0TnVtYmVyIHx8XG4gICAgICB0aGlzLmNhbGN1bGF0ZU5pZ2h0cyhib29raW5nLmZyb20sIGJvb2tpbmcudG8pO1xuICAgIGNvbnN0IHBhY2thZ2VzOiBJQm9va2luZ1BhY2thZ2VbXSA9IGJvb2tpbmcucGFja2FnZXMgfHwgW107XG5cbiAgICByZXR1cm4gcGFja2FnZXMuZmxhdE1hcCgocGtnOiBJQm9va2luZ1BhY2thZ2UsIHBrZ0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIHJvb21zLm1hcCgocm9vbTogYW55LCByb29tSW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgcGFja2FnZUlkOiBwa2cuaWQgfHwgU3RyaW5nKHBrZ0luZGV4ICsgMSksXG4gICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkIHx8IGAke3BrZy5pZH0tJHtyb29tSW5kZXh9YCxcbiAgICAgICAgcm9vbU5hbWU6IHJvb20/LnJvb21OYW1lIHx8IGBSb29tICR7cm9vbUluZGV4ICsgMX1gLFxuICAgICAgICByb29tVHlwZTogcm9vbT8ucm9vbVR5cGUgfHwgJ1N0YW5kYXJkIFJvb20nLFxuICAgICAgICBtZWFsUGxhbjogcm9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUgIT09IGZhbHNlLFxuICAgICAgICBpc0NhbmNlbGxlZDogcGtnLmlzQ2FuY2VsbGVkLFxuICAgICAgICBtYW51YWxSZWZ1bmRSZXF1ZXN0OiAhcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIG5pZ2h0czogdGhpcy5ob3RlbEluZm8oKT8ubmlnaHRzIHx8IG5pZ2h0cyxcbiAgICAgICAgcm9vbUFtb3VudDogMCxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICByZWZ1bmRBbW91bnQ6IDAsXG4gICAgICAgIGJlZFR5cGU6IHJvb20/LmJlZFR5cGUgfHwgJycsXG4gICAgICAgIHJvb21WaWV3OiByb29tPy5yb29tVmlldyB8fCAnJyxcbiAgICAgICAgcm9vbUJhc2lzOiByb29tPy5yb29tQmFzaXMgfHwgJycsXG4gICAgICAgIHJlZnVuZGFiaWxpdHk6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgIHJlZnVuZGFibGVVbnRpbDogcGtnLnJlZnVuZGFibGVVbnRpbCB8fCAnJyxcbiAgICAgICAgYWR1bHRzTnVtOiByb29tPy5hZHVsdHNOdW0gfHwgMCxcbiAgICAgICAgY2hpbGRyZW5OdW06IHJvb20/LmNoaWxkcmVuTnVtIHx8IDAsXG4gICAgICAgIHBhc3Nlbmdlck5hbWU6IHJvb20/LnBhc3NlbmdlcnM/Lm5hbWUgfHwgJydcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQm9va2luZ1RvUGFja2FnZXMoXG4gICAgYm9va2luZzogYW55XG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdIHtcbiAgICBjb25zdCBib29raW5nUGFja2FnZXM6IElCb29raW5nUGFja2FnZVtdID0gYm9va2luZy5wYWNrYWdlcyB8fCBbXTtcblxuICAgIHJldHVybiBib29raW5nUGFja2FnZXMubWFwKChwa2c6IElCb29raW5nUGFja2FnZSwgcGtnSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICBjb25zdCBmaXJzdFJvb20gPSByb29tc1swXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFja2FnZUlkOiBwa2cuaWQgfHwgU3RyaW5nKHBrZ0luZGV4ICsgMSksXG4gICAgICAgIHBhY2thZ2VOYW1lOiBmaXJzdFJvb20/LnJvb21OYW1lIHx8IGBQYWNrYWdlICR7cGtnSW5kZXggKyAxfWAsXG4gICAgICAgIGJvYXJkQmFzaXM6IGZpcnN0Um9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUgIT09IGZhbHNlLFxuICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgcmVmdW5kYWJpbGl0eTogcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgcmVmdW5kYWJsZVVudGlsOiBwa2cucmVmdW5kYWJsZVVudGlsIHx8ICcnLFxuICAgICAgICByb29tczogcm9vbXMubWFwKChyb29tOiBhbnksIHJvb21JbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkIHx8IGAke3BrZy5pZH0tJHtyb29tSW5kZXh9YCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbT8ucm9vbU5hbWUgfHwgYFJvb20gJHtyb29tSW5kZXggKyAxfWAsXG4gICAgICAgICAgcm9vbVR5cGU6IHJvb20/LnJvb21UeXBlIHx8ICdTdGFuZGFyZCBSb29tJyxcbiAgICAgICAgICBiZWRUeXBlOiByb29tPy5iZWRUeXBlIHx8ICcnLFxuICAgICAgICAgIHJvb21CYXNpczogcm9vbT8ucm9vbUJhc2lzIHx8ICcnXG4gICAgICAgIH0pKSxcbiAgICAgICAgcm9vbUFtb3VudDogMCxcbiAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgICByZWZ1bmRBbW91bnQ6IDAsXG4gICAgICAgIG1hbnVhbFJlZnVuZFJlcXVlc3Q6ICFwa2cuaXNSZWZ1bmRhYmxlLFxuICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICBjYW5jZWxsYXRpb25Qb2xpY2llczogcGtnLmNhbmNlbGxhdGlvblBvbGljaWVzIHx8IFtdLFxuICAgICAgICBDYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M6IHBrZy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MsXG4gICAgICAgIHN1cHBsaWVyOiBwa2cuc3VwcGxpZXJcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU5pZ2h0cyhmcm9tOiBhbnksIHRvOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICghZnJvbSB8fCAhdG8pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoZnJvbS5kaWZmICYmIHR5cGVvZiBmcm9tLmRpZmYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0by5kaWZmKGZyb20sICdkYXlzJykgfHwgMTtcbiAgICB9XG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tKTtcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0byk7XG4gICAgY29uc3QgZGlmZlRpbWUgPSBNYXRoLmFicyh0b0RhdGUuZ2V0VGltZSgpIC0gZnJvbURhdGUuZ2V0VGltZSgpKTtcbiAgICBjb25zdCBkaWZmRGF5cyA9IE1hdGguY2VpbChkaWZmVGltZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG4gICAgcmV0dXJuIGRpZmZEYXlzIHx8IDE7XG4gIH1cblxuICBvbkNvbnRpbnVlVG9DYW5jZWwoXG4gICAgc2VsZWN0ZWRQYWNrYWdlczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlW11cbiAgKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBwYWNrYWdlcyB0byByb29tcyBmb3JtYXQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgc2VydmljZVxuICAgIGNvbnN0IHNlbGVjdGVkUm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdID1cbiAgICAgIHNlbGVjdGVkUGFja2FnZXMuZmxhdE1hcCgocGtnKSA9PlxuICAgICAgICBwa2cucm9vbXMubWFwKChyb29tKSA9PiAoe1xuICAgICAgICAgIHBhY2thZ2VJZDogcGtnLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgIHJvb21UeXBlOiByb29tLnJvb21UeXBlLFxuICAgICAgICAgIG1lYWxQbGFuOiByb29tLnJvb21CYXNpcyxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBwa2cuaXNTZWxlY3RlZCxcbiAgICAgICAgICBuaWdodHM6IDAsXG4gICAgICAgICAgcm9vbUFtb3VudDogcGtnLnJvb21BbW91bnQsXG4gICAgICAgICAgY2FuY2VsbGF0aW9uRmVlOiBwa2cuY2FuY2VsbGF0aW9uRmVlLFxuICAgICAgICAgIHJlZnVuZEFtb3VudDogcGtnLnJlZnVuZEFtb3VudCxcbiAgICAgICAgICBiZWRUeXBlOiByb29tLmJlZFR5cGUsXG4gICAgICAgICAgcm9vbUJhc2lzOiByb29tLnJvb21CYXNpcyxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5OiBwa2cucmVmdW5kYWJpbGl0eSxcbiAgICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBwa2cuY2FuY2VsbGVkQmVmb3JlLFxuICAgICAgICAgIG1hbnVhbFJlZnVuZFJlcXVlc3Q6IHBrZy5tYW51YWxSZWZ1bmRSZXF1ZXN0XG4gICAgICAgIH0pKVxuICAgICAgKTtcblxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0U2VsZWN0ZWRSb29tcyhzZWxlY3RlZFJvb21zKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICApO1xuICB9XG5cbiAgb25LZWVwUm9vbSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0UmVmdW5kT3B0aW9uKGRhdGE6IHtcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgICBwYXlvdXQ6IGFueTtcbiAgICB0b3RhbFJlZnVuZDogbnVtYmVyO1xuICAgIHJlc3BvbnNlRGF0YTogYW55O1xuICB9KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGVuYW50IC0gcmVkaXJlY3QgdG8gV2hhdHNBcHAgZm9yIHRlbmFudCBib29raW5nc1xuICAgIGlmIChlbnZpcm9ubWVudHMuaXNUZW5hbnQpIHtcbiAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZXRBY3RpdmVBc2lkZVRhYihcbiAgICAgICAgSG90ZWxNYW5hZ2VCb29raW5nQXNpZGVUYWJFbnVtLndoYXRzQXBwQWdlbnRcbiAgICAgICk7XG4gICAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdSZWZ1bmQgb3B0aW9uIHNlbGVjdGVkOicsIGRhdGEpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMuc2V0KGRhdGEucGFja2FnZUlkcyk7XG4gICAgdGhpcy5yZWZ1bmRSZXNwb25zZURhdGEuc2V0KGRhdGEucmVzcG9uc2VEYXRhKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gZGF0YT8ucmVzcG9uc2VEYXRhO1xuICAgIGNvbnN0IHBheW91dCA9IHJlc3BvbnNlPy5wYXlvdXQgfHwgZGF0YS5wYXlvdXQ7XG4gICAgY29uc3QgdG90YWxzID0gcmVzcG9uc2U/LnRvdGFscztcblxuICAgIC8vIGNvbnN0IHdhbGxldFJlZnVuZCA9IHBheW91dD8ud2FsbGV0IHx8IHBheW91dD8ubG95YWx0eVRvV2FsbGV0O1xuICAgIGNvbnN0IHdhbGxldFJlZnVuZCA9IHBheW91dD8ud2FsbGV0O1xuXG4gICAgY29uc3QgY2FyZFJlZnVuZCA9IHBheW91dD8uY2FyZCA/PyAwO1xuICAgIGNvbnN0IHRhYmJ5UmVmdW5kID0gcGF5b3V0Py50YWJieSA/PyBwYXlvdXQ/LnRhYmJ5ID8/IDA7XG4gICAgY29uc3QgdGFtYXJhUmVmdW5kID0gcGF5b3V0Py50YW1hcmEgPz8gcGF5b3V0Py50YW1hcmEgPz8gMDtcblxuICAgIC8vIENoZWNrIGlmIGZ1bGwgd2FsbGV0IHJlZnVuZCBpcyBhbGxvd2VkIGJhc2VkIG9uIHBheW91dCBicmVha2Rvd25cbiAgICAvLyBXYWxsZXQgcmVmdW5kIGlzIGFsbG93ZWQgaWYgdGhlcmUncyBubyBjYXJkL3RhYmJ5L3RhbWFyYSBwb3J0aW9uXG4gICAgY29uc3QgaGFzTm9uV2FsbGV0UmVmdW5kID0gdGFiYnlSZWZ1bmQgPiAwIHx8IHRhbWFyYVJlZnVuZCA+IDA7XG4gICAgY29uc3QgdG90YWxSZWZ1bmRBbW91bnQgPSBwYXlvdXQ/LmN1cnJlbnQgPz8gZGF0YS50b3RhbFJlZnVuZDtcbiAgICBjb25zdCBpc0Z1bGxXYWxsZXRBbGxvd2VkID1cbiAgICAgICghaGFzTm9uV2FsbGV0UmVmdW5kICYmIHdhbGxldFJlZnVuZCA+IDApIHx8IGNhcmRSZWZ1bmQgPiAwO1xuXG4gICAgY29uc3QgbG95YWx0eVBvaW50c1ZhbHVlID1cbiAgICAgIHBheW91dD8ubG95YWx0eVRvV2FsbGV0IHx8XG4gICAgICB0b3RhbHM/LndhbGEgfHxcbiAgICAgIHRvdGFscz8ucWl0YWYgfHxcbiAgICAgIHRvdGFscz8ubW9rYWZhIHx8XG4gICAgICB0b3RhbHM/Lmhhc3NhZCB8fFxuICAgICAgdG90YWxzPy55Z2c7XG5cbiAgICAvLyBCdWlsZCByZWZ1bmQgZGV0YWlscyBkYXRhIGZvciB0aGUgbWV0aG9kIHNlbGVjdG9yXG4gICAgdGhpcy5yZWZ1bmREZXRhaWxzRGF0YS5zZXQoe1xuICAgICAgdG90YWxSZWZ1bmRBbW91bnQsXG4gICAgICB3YWxsZXRSZWZ1bmRBbW91bnQ6IHBheW91dD8ud2FsbGV0LFxuICAgICAgdG90YWxDYXJkUmVmdW5kQW1vdW50OiBjYXJkUmVmdW5kICsgdGFiYnlSZWZ1bmQgKyB0YW1hcmFSZWZ1bmQsXG4gICAgICBpc0Z1bGxXYWxsZXRSZWZ1bmRBbGxvd2VkOiBpc0Z1bGxXYWxsZXRBbGxvd2VkLFxuICAgICAgY3VycmVuY3k6IHJlc3BvbnNlPy5jdXJyZW5jeSxcbiAgICAgIGlzUmVmdW5kYWJsZTogcmVzcG9uc2U/LmZsYWdzPy5yZWZ1bmRhYmxlLFxuICAgICAgdG90YWxMb3lhbHR5UG9pbnRzUmVmdW5kQW1vdW50OiBsb3lhbHR5UG9pbnRzVmFsdWUsXG4gICAgICAvLyBQYXNzIHBheW1lbnQgbWV0aG9kIGluZm8gZm9yIHByb3BlciBsYWJlbGluZ1xuICAgICAgcGF5bWVudE1ldGhvZEN1c3RvbWVyVXNlZDogdGhpcy5kZXRlcm1pbmVQYXltZW50TWV0aG9kKHRvdGFscywgcGF5b3V0KSxcbiAgICAgIC8vIEFkZGl0aW9uYWwgZmllbGRzIGZvciBwcm9wZXIgbG95YWx0eSBwcm9ncmFtIGxhYmVsaW5nIGFuZCBzcGxpdCByZWZ1bmQgZGlzcGxheVxuICAgICAgbG95YWx0eVBheW1lbnRUeXBlOiB0aGlzLmRldGVybWluZUxveWFsdHlUeXBlKHRvdGFscywgcGF5b3V0KSxcbiAgICAgIHRvdGFsTG95YWx0eVBvaW50czogbG95YWx0eVBvaW50c1ZhbHVlLFxuICAgICAgYm9va2luZ0lkOiB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFxuICAgIH0pO1xuXG4gICAgLy8gRGVmYXVsdCB0byB3YWxsZXQgaWYgYWxsb3dlZCwgb3RoZXJ3aXNlIG9yaWdpbmFsUGF5bWVudE1ldGhvZFxuICAgIGlmIChpc0Z1bGxXYWxsZXRBbGxvd2VkICYmIHdhbGxldFJlZnVuZCA+IDApIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnd2FsbGV0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnb3JpZ2luYWxQYXltZW50TWV0aG9kJyk7XG4gICAgfVxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kTWV0aG9kXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBwYXltZW50IG1ldGhvZCBsYWJlbCBiYXNlZCBvbiB0b3RhbHMvcGF5b3V0IGJyZWFrZG93bi5cbiAgICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZ2F0ZXdheSBjb2RlIGZvciBwcm9wZXIgbGFiZWxpbmcuXG4gICAqL1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2FyZC9pbnN0YWxsbWVudCBwYXltZW50IG1ldGhvZCBmb3IgdGhlIGNhcmQgcm93IGxhYmVsLlxuICAgKiBMb3lhbHR5IHByb2dyYW1zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgZGV0ZXJtaW5lTG95YWx0eVR5cGUoKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHM6IGFueSwgcGF5b3V0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICgocGF5b3V0Py50YWJieSA/PyB0b3RhbHM/LnRhYmJ5ID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdUQic7IC8vIFRhYmJ5XG4gICAgfVxuICAgIGlmICgocGF5b3V0Py50YW1hcmEgPz8gdG90YWxzPy50YW1hcmEgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gJ1RNJzsgLy8gVGFtYXJhXG4gICAgfVxuICAgIGlmICgocGF5b3V0Py5jYXJkID8/IHRvdGFscz8uY2FyZCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnQ0gnOyAvLyBDYXJkXG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBsb3lhbHR5IHBheW1lbnQgdHlwZSBmb3IgcHJvcGVyIGxhYmVsaW5nIGluIHNwbGl0IHJlZnVuZCByb3dzLlxuICAgKiBSZXR1cm5zIHRoZSBsb3lhbHR5IHByb2dyYW0gY29kZSAoZS5nLiwgJ1FJVEFGJywgJ1JBSkhJJykgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lTG95YWx0eVR5cGUoXG4gICAgdG90YWxzOiBhbnksXG4gICAgcGF5b3V0OiBhbnlcbiAgKTogTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoKHRvdGFscz8ubW9rYWZhID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdBbFJhamhpTW9rYWZhYSc7XG4gICAgfVxuICAgIGlmICgodG90YWxzPy5xaXRhZiA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnUWl0YWYnO1xuICAgIH1cbiAgICBpZiAoKHRvdGFscz8ud2FsYSA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnV2FsYSc7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlUb1dhbGxldCA/PyAwKSA+IDAgfHxcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlQb2ludHMgPz8gMCkgPiAwXG4gICAgKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgbG95YWx0eSB0eXBlIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCBsb3lhbHR5VHlwZSA9IHRvdGFscz8ubG95YWx0eVR5cGUgYXMgTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBsb3lhbHR5VHlwZSAmJlxuICAgICAgICBbXG4gICAgICAgICAgJ0FsUmFqaGlNb2thZmFhJyxcbiAgICAgICAgICAnUWl0YWYnLFxuICAgICAgICAgICdXYWxhJyxcbiAgICAgICAgICAnQUxGVVJTQU4nLFxuICAgICAgICAgICdBTE1BVEFSX1BPSU5UUydcbiAgICAgICAgXS5pbmNsdWRlcyhsb3lhbHR5VHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbG95YWx0eVR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBvbk1ldGhvZFNlbGVjdGVkKG1ldGhvZDogUmVmdW5kUHJlZmVycmVkTWV0aG9kKTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRNZXRob2Quc2V0KG1ldGhvZCk7XG4gIH1cblxuICBvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeVxuICAgICk7XG4gIH1cblxuICBvbkdvQmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuICAgIHN3aXRjaCAoc3RlcCkge1xuICAgICAgY2FzZSBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeTpcbiAgICAgICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3Igc2VsZWN0Um9vbXMgb3Igb3RoZXIgc3RlcHMsIGRvIG5vdGhpbmcgKGNsb3NlIG1vZGFsKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYW5Hb0JhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICByZXR1cm4gKFxuICAgICAgc3RlcCA9PT0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgfHxcbiAgICAgIHN0ZXAgPT09IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2RcbiAgICApO1xuICB9XG5cbiAgY29uZmlybUNhbmNlbGxhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24odGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMoKSwgdGhpcy5yZWZ1bmRNZXRob2QoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDYW5jZWxsaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zaG93QXNpZGUuc2V0KGZhbHNlKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRlbmFudCAtIHJlZGlyZWN0IHRvIFdoYXRzQXBwXG4gICAgICAgICAgaWYgKGVudmlyb25tZW50cy5pc1RlbmFudCB8fCByZXNwb25zZT8uZGF0YT8uaXNXaGF0c0FwcCkge1xuICAgICAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNldEFjdGl2ZUFzaWRlVGFiKFxuICAgICAgICAgICAgICBIb3RlbE1hbmFnZUJvb2tpbmdBc2lkZVRhYkVudW0ud2hhdHNBcHBBZ2VudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheVxuICAgICAgICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQ2FuY2VsbGF0aW9uIFN1Y2Nlc3NmdWwhJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICdZb3VyIGJvb2tpbmcgaGFzIGJlZW4gY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseS4gVGhlIHJlZnVuZCB3aWxsIGJlIHByb2Nlc3NlZCBhY2NvcmRpbmcgdG8geW91ciBzZWxlY3RlZCBtZXRob2QuJyxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgICAgICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICAgICAgICB0aGlzLmNhbmNlbGxhdGlvblN1Y2Nlc3MuZW1pdChyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIHBvc3NpYmxlIHN0cnVjdHVyZXNcbiAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1dlIGVuY291bnRlcmVkIGFuIGlzc3VlIHByb2Nlc3NpbmcgeW91ciBjYW5jZWxsYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0Lic7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5jZWxsYXRpb24gZXJyb3I6JywgZXJyb3IpO1xuXG4gICAgICAgICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uZXJyb3JzICYmIEFycmF5LmlzQXJyYXkoZXJyb3IuZXJyb3IuZXJyb3JzKSAmJiBlcnJvci5lcnJvci5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IuZXJyb3JzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IGVycm9yIG92ZXJsYXlcbiAgICAgICAgICB0aGlzLnJlc3VsdE92ZXJsYXlEYXRhLnNldCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdDYW5jZWxsYXRpb24gRmFpbGVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnQ2xvc2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25DbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MocGFja2FnZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheSBmb3Igbm9uLXJlZnVuZGFibGUgcmVxdWVzdFxuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWJtaXR0ZWQhJyxcbiAgICAgIG1lc3NhZ2U6IGBZb3VyIGNhbmNlbGxhdGlvbiByZXF1ZXN0IGZvciAke3BhY2thZ2VOYW1lfSBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LiBPdXIgdGVhbSB3aWxsIHJldmlldyB5b3VyIHJlcXVlc3QgYW5kIGNvbnRhY3QgeW91IHNob3J0bHkuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgb25DaGF0V2l0aEFnZW50KCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG4gICAgdGhpcy5jaGF0V2l0aEFnZW50LmVtaXQoKTtcbiAgfVxuXG4gIGNsb3NlQWxsTW9kYWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0Vycm9yTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNvbmZpcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldChmYWxzZSk7XG4gICAgdGhpcy5yZXN1bHRPdmVybGF5RGF0YS5zZXQobnVsbCk7XG4gIH1cbn1cbiIsIkBpZiAoc2hvd0FzaWRlKCkpIHtcbiAgPGFsbWF0YXItYXNpZGVcblxuICAgIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fd3JhcHBlclwiXG4gICAgW2FzaWRlVGl0bGVdPVwiYXNpZGVUaXRsZSgpXCJcbiAgICBbc2hvd0FzaWRlXT1cInNob3dBc2lkZSgpXCJcbiAgICBbd2hpdGVIZWFkZXJdPVwidHJ1ZVwiXG4gICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIlxuICAgIChvbkNsb3NlKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgPlxuICAgIDwhLS0gQ3VzdG9tIEhlYWRlciB3aXRoIDYwcHggaGVpZ2h0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyXCI+XG4gICAgICBAaWYgKGNhbkdvQmFjaygpKSB7XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLWJhY2tcIiAoY2xpY2spPVwib25Hb0JhY2soKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWFycm93LWxlZnRcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGRpdiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItY29udGVudFwiPlxuICAgICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnNlbGVjdFJvb21zKSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgQGlmIChpc1NpbmdsZVBhY2thZ2UoKSkge1xuICAgICAgICAgICAgICBDYW5jZWwgUm9vbXNcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBTZWxlY3QgUm9vbXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgQGlmIChpc1NpbmdsZVBhY2thZ2UoKSkge1xuICAgICAgICAgICAgICBSZXZpZXcgYW5kIGNvbmZpcm0geW91ciBjYW5jZWxsYXRpb25cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBDaG9vc2Ugd2hpY2ggcm9vbShzKSB5b3UnZCBsaWtlIHRvIGNhbmNlbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0ucmVmdW5kU3VtbWFyeSkge1xuICAgICAgICAgIDxoMiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItdGl0bGVcIj5DYW5jZWwgQm9va2luZyBSZXF1ZXN0PC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5SZXZpZXcgeW91ciByZWZ1bmQgc3VtbWFyeSBhbmQgcHJvY2VlZDwvcD5cbiAgICAgICAgfSBAZWxzZSBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0ucmVmdW5kTWV0aG9kKSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPlNlbGVjdCBSZWZ1bmQgTWV0aG9kPC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5DaG9vc2UgaG93IHlvdSdkIGxpa2UgdG8gcmVjZWl2ZSB5b3VyIHJlZnVuZDwvcD5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci10aXRsZVwiPnt7IGFzaWRlVGl0bGUoKSB9fTwvaDI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLXN1YnRpdGxlXCI+Q29tcGxldGUgeW91ciBib29raW5nIGNhbmNlbGxhdGlvbjwvcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1jbG9zZVwiIChjbGljayk9XCJvbkNsb3NlTW9kYWwoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS10aW1lc1wiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19jb21wb25lbnRcIiBbY2xhc3MuaXNOdXNrXT1cImlzTnVzaygpXCI+XG4gICAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9fbG9hZGluZ1wiPlxuICAgICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoY3VycmVudFN0ZXAoKSA9PT0gc3RlcEVudW0uc2VsZWN0Um9vbXMgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tc1xuICAgICAgICAgIFtwYWNrYWdlc109XCJwYWNrYWdlcygpXCJcbiAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICBbYm9va2luZ0lkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFwiXG4gICAgICAgICAgW2hvdGVsSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaG90ZWxJZFwiXG4gICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJzZWxlY3RlZEhvdGVsQm9va2luZygpPy5jdXJyZW5jeUNvZGUgfHwgJ1NBUidcIlxuICAgICAgICAgIChjb250aW51ZVRvQ2FuY2VsKT1cIm9uQ29udGludWVUb0NhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJvbkNsb3NlTW9kYWwoKVwiXG4gICAgICAgICAgKG5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzKT1cIm9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MoJGV2ZW50KVwiXG4gICAgICAgICAgKGNoYXRXaXRoQWdlbnQpPVwib25DaGF0V2l0aEFnZW50KClcIlxuICAgICAgICAvPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5XG4gICAgICAgICAgW3NlbGVjdGVkUm9vbXNdPVwiYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2VsZWN0ZWRSb29tcygpXCJcbiAgICAgICAgICBbYm9va2luZ0lkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmJvb2tpbmdJZFwiXG4gICAgICAgICAgW2hvdGVsSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaWQgfHwgc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uaHBrXCJcbiAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICBbc2VsZWN0aW9uU2tpcHBlZF09XCJwYWNrYWdlcygpLmxlbmd0aCA8PSAxXCJcbiAgICAgICAgICAoa2VlcFJvb20pPVwib25LZWVwUm9vbSgpXCJcbiAgICAgICAgICAoc2VsZWN0UmVmdW5kT3B0aW9uKT1cIm9uU2VsZWN0UmVmdW5kT3B0aW9uKCRldmVudClcIlxuICAgICAgICAgIChjbG9zZU1vZGFsKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChjdXJyZW50U3RlcCgpID09PSBzdGVwRW51bS5yZWZ1bmRNZXRob2QgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1tZXRob2RcbiAgICAgICAgICBbcmVmdW5kRGV0YWlsc0RhdGFdPVwicmVmdW5kRGV0YWlsc0RhdGEoKVwiXG4gICAgICAgICAgW2N1cnJlbmN5T2JqXT1cImN1cnJlbnRDdXJyZW5jeSgpXCJcbiAgICAgICAgICBbcmVmdW5kTWV0aG9kXT1cInJlZnVuZE1ldGhvZCgpXCJcbiAgICAgICAgICBbaXNDYW5jZWxsaW5nXT1cImlzQ2FuY2VsbGluZygpXCJcbiAgICAgICAgICAobWV0aG9kU2VsZWN0ZWQpPVwib25NZXRob2RTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoYmFja1JlcXVlc3RlZCk9XCJvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKClcIlxuICAgICAgICAgIChjb25maXJtUmVxdWVzdGVkKT1cImNvbmZpcm1DYW5jZWxsYXRpb24oKVwiXG4gICAgICAgICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZU1vZGFsKClcIlxuICAgICAgICAgIFtib29raW5nSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uYm9va2luZ0lkXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9hbG1hdGFyLWFzaWRlPlxufVxuXG5AaWYgKHNob3dFcnJvck1vZGFsKCkpIHtcbiAgPGRpdlxuICAgIGFsbWF0YXItbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsXG4gICAgW2Vycm9yTWVzc2FnZV09XCJob3RlbE1hbmFnZUVycm9yKClcIlxuICAgIChjYW5jZWxFdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICA+PC9kaXY+XG59XG5cbkBpZiAoc2hvd1Jlc3VsdE92ZXJsYXkoKSAmJiByZXN1bHRPdmVybGF5RGF0YSgpKSB7XG4gIDxhcHAtcmVzdWx0LW92ZXJsYXlcbiAgICBbZGF0YV09XCJyZXN1bHRPdmVybGF5RGF0YSgpIVwiXG4gICAgW3Nob3ddPVwic2hvd1Jlc3VsdE92ZXJsYXkoKVwiXG4gICAgKGNvbmZpcm0pPVwib25SZXN1bHRPdmVybGF5Q29uZmlybSgpXCJcbiAgICAoY2FuY2VsKT1cIm9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpXCJcbiAgLz5cbn1cbiJdfQ==
|
|
563
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBR1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdGQUF3RixDQUFDO0FBQzNJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekcsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0RBQW9ELENBQUM7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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNpZGVDb21wb25lbnQgfSBmcm9tICcuLi9hbG1hdGFyLWFzaWRlL2FzaWRlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBEZXN0cm95UmVmLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBvdXRwdXQsXG4gIGlucHV0LFxuICBlZmZlY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWFuYWdlQm9va2luZ0ZhaWxlZE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsL21hbmFnZS1ib29raW5nLWZhaWxlZC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGVyTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZHVsZXMvbG9hZGVyL2xvYWRlci5tb2R1bGUnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9ob3RlbC1tYW5hZ2UtYm9va2luZy9ob3RlbC1tYW5hZ2UtYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSB9IGZyb20gJy4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgSUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2Vcbn0gZnJvbSAnLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUJvb2tpbmdQYWNrYWdlXG59IGZyb20gJy4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElSZWZ1bmREZXRhaWxzRGF0YSBhcyBJRmxpZ2h0UmVmdW5kRGV0YWlsc0RhdGEsXG4gIFJlZnVuZFByZWZlcnJlZE1ldGhvZCxcbiAgTG95YWx0eVBheW1lbnRUeXBlXG59IGZyb20gJy4uL3NoYXJlZC9pbnRlcmZhY2VzL2ktZmxpZ2h0LXJlZnVuZC1kZXRhaWxzJztcbmltcG9ydCB7IElIb3RlbEJvb2tpbmdEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jvb2tpbmcudHlwZXMnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5L2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50JztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtbWV0aG9kL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLW1ldGhvZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzdWx0T3ZlcmxheUNvbXBvbmVudCwgUmVzdWx0T3ZlcmxheURhdGEgfSBmcm9tICcuL2NvbXBvbmVudHMvcmVzdWx0LW92ZXJsYXkvcmVzdWx0LW92ZXJsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZXN1bHRPdmVybGF5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVzdWx0LW92ZXJsYXkvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZXN1bHQtb3ZlcmxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nQXNpZGVUYWJFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL2hvdGVsLW1hbmFnZS1ib29raW5nLWFzaWRlLXRhYi5lbnVtJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQWxtYXRhckljb25Nb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kdWxlcy9hbG1hdGFyLWljb24vYWxtYXRhci1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbmltcG9ydCB7IGxveWFsdHlQb2ludHNNZXRob2RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZSxcbiAgICBBc2lkZUNvbXBvbmVudCxcbiAgICBNYW5hZ2VCb29raW5nRmFpbGVkTW9kYWxDb21wb25lbnQsXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlbGVjdFJvb21zQ29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5Q29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRNZXRob2RDb21wb25lbnQsXG4gICAgQWxtYXRhckljb25Nb2R1bGUsXG4gICAgUmVzdWx0T3ZlcmxheUNvbXBvbmVudCxcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVzdWx0T3ZlcmxheUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VydmljZSxcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlXG4gICk7XG5cbiAgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2VcbiAgKTtcblxuICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KEhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNoYXJlZFNlcnZpY2UgPSBpbmplY3QoU2hhcmVkU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRIb3RlbEJvb2tpbmcgPSBpbnB1dDxJSG90ZWxCb29raW5nRGF0YSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGNsb3NlZCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBjYW5jZWxsYXRpb25TdWNjZXNzID0gb3V0cHV0PElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPigpO1xuICByZWFkb25seSBub25SZWZ1bmRhYmxlU3VibWl0U3VjY2VzcyA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNoYXRXaXRoQWdlbnQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBzaG93Q29uZmlybU1vZGFsID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0Vycm9yTW9kYWwgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBzaG93QXNpZGUgPSBzaWduYWwodHJ1ZSk7XG4gIHJlYWRvbmx5IGlzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGlzQ2FuY2VsbGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhvdGVsTWFuYWdlRXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGlzTnVzayA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dSZXN1bHRPdmVybGF5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgcmVzdWx0T3ZlcmxheURhdGEgPSBzaWduYWw8UmVzdWx0T3ZlcmxheURhdGEgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc2hvd0RldGFpbGVkUmVzdWx0T3ZlcmxheSA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNhbmNlbGxhdGlvbkFwaVJlc3BvbnNlID0gc2lnbmFsPElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IHBhY2thZ2VzID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGxcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50Q3VycmVuY3kgPSBzaWduYWw8YW55PihudWxsKTtcbiAgcmVhZG9ubHkgcmVmdW5kRGV0YWlsc0RhdGEgPSBzaWduYWw8SUZsaWdodFJlZnVuZERldGFpbHNEYXRhIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUGFja2FnZUlkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICByZWFkb25seSByZWZ1bmRNZXRob2QgPSBzaWduYWw8UmVmdW5kUHJlZmVycmVkTWV0aG9kPignd2FsbGV0Jyk7XG4gIHJlYWRvbmx5IHJlZnVuZFJlc3BvbnNlRGF0YSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHN0ZXBFbnVtID0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtO1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5jdXJyZW50U3RlcCgpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNTaW5nbGVSb29tID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb29tcygpLmxlbmd0aCA9PT0gMSk7XG4gIHJlYWRvbmx5IGlzU2luZ2xlUGFja2FnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFja2FnZXMoKS5sZW5ndGggPT09IDEpO1xuXG4gIC8vIEdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgb3IgZmlyc3QgcGFja2FnZVxuICByZWFkb25seSBib29raW5nU3VwcGxpZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gVHJ5IHRvIGdldCBzdXBwbGllciBmcm9tIGJvb2tpbmcgbGV2ZWwgZmlyc3RcbiAgICBpZiAoKGJvb2tpbmcgYXMgYW55KS5zdXBwbGllcikge1xuICAgICAgcmV0dXJuIChib29raW5nIGFzIGFueSkuc3VwcGxpZXI7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGdldCBmcm9tIGZpcnN0IHBhY2thZ2VcbiAgICBjb25zdCBwYWNrYWdlcyA9IHRoaXMucGFja2FnZXMoKTtcbiAgICByZXR1cm4gcGFja2FnZXMubGVuZ3RoID4gMCA/IHBhY2thZ2VzWzBdLnN1cHBsaWVyIDogdW5kZWZpbmVkO1xuICB9KTtcblxuICAvLyBDb21wdXRlZCB0b3RhbHMgZm9yIGFkdWx0cywgY2hpbGRyZW4sIGluZmFudHMgZnJvbSBib29raW5nIHBhY2thZ2VzXG4gIHJlYWRvbmx5IHRvdGFsQWR1bHRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgaWYgKCFib29raW5nPy5wYWNrYWdlcykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBib29raW5nLnBhY2thZ2VzLnJlZHVjZSgodG90YWw6IG51bWJlciwgcGtnOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdG90YWwgK1xuICAgICAgICByb29tcy5yZWR1Y2UoKHN1bTogbnVtYmVyLCByb29tOiBhbnkpID0+IHN1bSArIChyb29tLmFkdWx0c051bSB8fCAwKSwgMClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsQ2hpbGRyZW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uY2hpbGRyZW5OdW0gfHwgMCksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEluZmFudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYm9va2luZyA9IHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKTtcbiAgICBpZiAoIWJvb2tpbmc/LnBhY2thZ2VzKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmcucGFja2FnZXMucmVkdWNlKCh0b3RhbDogbnVtYmVyLCBwa2c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qgcm9vbXMgPSBwa2cucm9vbXMgfHwgW107XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0b3RhbCArXG4gICAgICAgIHJvb21zLnJlZHVjZShcbiAgICAgICAgICAoc3VtOiBudW1iZXIsIHJvb206IGFueSkgPT4gc3VtICsgKHJvb20uaW5mYW50c051bSB8fCAwKSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFzaWRlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICBzd2l0Y2ggKHN0ZXApIHtcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnNlbGVjdFJvb21zOlxuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZVBhY2thZ2UoKSA/ICdDb25maXJtIENhbmNlbGxhdGlvbicgOiAnU2VsZWN0IFJvb21zJztcbiAgICAgIGNhc2UgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnk6XG4gICAgICAgIHJldHVybiAnQ2FuY2VsIEJvb2tpbmcgUmVxdWVzdCc7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHJldHVybiAnU2VsZWN0IFJlZnVuZCBNZXRob2QnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdDYW5jZWwgQm9va2luZyc7XG4gICAgfVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5Ib3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNlbGVjdGVkSG90ZWxCb29raW5nLm5leHQoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKVxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZEhvdGVsQm9va2luZycsIHRoaXMuc2VsZWN0ZWRIb3RlbEJvb2tpbmcoKSk7XG4gICAgICBjb25zb2xlLmxvZygncmVmdW5kRGV0YWlsc0RhdGEnLCB0aGlzLnJlZnVuZERldGFpbHNEYXRhKCkpO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG5cbiAgICAvLyBTZXQgY3VycmVuY3kgZnJvbSBzZWxlY3RlZCBob3RlbCBib29raW5nXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG4gICAgICBpZiAoYm9va2luZykge1xuICAgICAgICAvLyBUcnkgbXVsdGlwbGUgc291cmNlcyBmb3IgY3VycmVuY3lcbiAgICAgICAgbGV0IGN1cnJlbmN5ID0gYm9va2luZy5jdXJyZW5jeTtcblxuICAgICAgICAvLyBGYWxsYmFjazogdHJ5IHRvIGV4dHJhY3QgZnJvbSByYXcgZGF0YVxuICAgICAgICBpZiAoIWN1cnJlbmN5ICYmIGJvb2tpbmcuZGF0YSkge1xuICAgICAgICAgIGNvbnN0IHJhd0RhdGEgPSBib29raW5nLmRhdGEuZGF0YSB8fCBib29raW5nLmRhdGE7XG4gICAgICAgICAgaWYgKHJhd0RhdGE/LnNDdXJyZW5jeSkge1xuICAgICAgICAgICAgY3VycmVuY3kgPSB7XG4gICAgICAgICAgICAgIGNvZGU6IHJhd0RhdGEuc0N1cnJlbmN5LFxuICAgICAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICAgICAgc3ltYm9sOiAnJyxcbiAgICAgICAgICAgICAgcmF0ZTogcmF3RGF0YS5zQ3VycmVuY3lST0UgfHwgMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVuY3kpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDdXJyZW5jeS5zZXQoY3VycmVuY3kpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdDdXJyZW5jeSBzZXQgdG86JywgdGhpcy5jdXJyZW50Q3VycmVuY3koKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ05vIGN1cnJlbmN5IGZvdW5kIG9uIGJvb2tpbmcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBnZXQgY2xvc2VJY29uTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0QXBwTGFuZ3VhZ2UoKTtcbiAgICByZXR1cm4gbGFuZyA9PT0gJ2FyJyA/ICdhcnJvdy1sZWZ0JyA6ICdhcnJvdy1yaWdodCc7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVRdWVyeVBhcmFtcygpO1xuICAgIHRoaXMubG9hZEJvb2tpbmdEYXRhRnJvbVBhY2thZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZS5jbGVhclNlbGVjdGVkUGFja2FnZUlkcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUXVlcnlQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHBhcmFtc1snc2tpcENoZWNrJ10pIHtcbiAgICAgICAgICB0aGlzLmlzTnVzay5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQm9va2luZ0RhdGFGcm9tUGFja2FnZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIGNvbnN0IGJvb2tpbmcgPSB0aGlzLnNlbGVjdGVkSG90ZWxCb29raW5nKCk7XG5cbiAgICBpZiAoYm9va2luZykge1xuICAgICAgdGhpcy5wcm9jZXNzQm9va2luZ0RhdGEoYm9va2luZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZ1xuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgLnN1YnNjcmliZSgoc2VydmljZUJvb2tpbmcpID0+IHtcbiAgICAgICAgICBpZiAoc2VydmljZUJvb2tpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0Jvb2tpbmdEYXRhKHNlcnZpY2VCb29raW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQm9va2luZ0RhdGEoYm9va2luZzogSUhvdGVsQm9va2luZ0RhdGEpOiB2b2lkIHtcbiAgICBjb25zdCBob3RlbEluZm9EYXRhOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyA9IHtcbiAgICAgIGhvdGVsTmFtZTogYm9va2luZy5ob3RlbE5hbWUgfHwgJycsXG4gICAgICBob3RlbEltYWdlOiBib29raW5nLmNvdmVySW1hZ2UgfHwgJycsXG4gICAgICBjaGVja0luOiBib29raW5nLmRhdGVGcm9tIHx8IGJvb2tpbmc/LmZyb20/Ll9pLFxuICAgICAgY2hlY2tPdXQ6IGJvb2tpbmcuZGF0ZVRvIHx8IGJvb2tpbmc/LnRvPy5faSxcbiAgICAgIHRvdGFsUm9vbXM6IGJvb2tpbmcucGFja2FnZXM/Lmxlbmd0aCB8fCBib29raW5nLnJvb21zIHx8IDEsXG4gICAgICBuaWdodHM6XG4gICAgICAgIGJvb2tpbmcubnVtYmVyT2ZOaWdodHMgfHxcbiAgICAgICAgYm9va2luZy5uaWdodE51bWJlciB8fFxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5pZ2h0cyhib29raW5nLmRhdGVGcm9tLCBib29raW5nLmRhdGVUbyksXG4gICAgICBjaGVja0luVGltZTogYm9va2luZy5jaGVja0luVGltZT8uc3BsaXQoJyAnKVswXSxcbiAgICAgIGNoZWNrT3V0VGltZTogYm9va2luZy5jaGVja091dFRpbWU/LnNwbGl0KCcgJylbMF1cbiAgICB9O1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChob3RlbEluZm9EYXRhKTtcbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldEhvdGVsSW5mbyhob3RlbEluZm9EYXRhKTtcblxuICAgIC8vIE1hcCB0byBib3RoIHJvb21zIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgYW5kIHBhY2thZ2VzIChuZXcgc3RydWN0dXJlKVxuICAgIGNvbnN0IG1hcHBlZFJvb21zID0gdGhpcy5tYXBQYWNrYWdlc1RvUm9vbXMoYm9va2luZyk7XG4gICAgdGhpcy5yb29tcy5zZXQobWFwcGVkUm9vbXMpO1xuXG4gICAgY29uc3QgbWFwcGVkUGFja2FnZXMgPSB0aGlzLm1hcEJvb2tpbmdUb1BhY2thZ2VzKGJvb2tpbmcpO1xuICAgIHRoaXMucGFja2FnZXMuc2V0KG1hcHBlZFBhY2thZ2VzKTtcblxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0U2VsZWN0ZWRSb29tcyhtYXBwZWRSb29tcyk7XG5cbiAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBQYWNrYWdlc1RvUm9vbXMoXG4gICAgYm9va2luZzogYW55XG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdIHtcbiAgICBjb25zdCBuaWdodHMgPVxuICAgICAgYm9va2luZy5udW1iZXJPZk5pZ2h0cyB8fFxuICAgICAgYm9va2luZy5uaWdodE51bWJlciB8fFxuICAgICAgdGhpcy5jYWxjdWxhdGVOaWdodHMoYm9va2luZy5mcm9tLCBib29raW5nLnRvKTtcbiAgICBjb25zdCBwYWNrYWdlczogSUJvb2tpbmdQYWNrYWdlW10gPSBib29raW5nLnBhY2thZ2VzIHx8IFtdO1xuXG4gICAgcmV0dXJuIHBhY2thZ2VzLmZsYXRNYXAoKHBrZzogSUJvb2tpbmdQYWNrYWdlLCBwa2dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCByb29tcyA9IHBrZy5yb29tcyB8fCBbXTtcbiAgICAgIHJldHVybiByb29tcy5tYXAoKHJvb206IGFueSwgcm9vbUluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgIHBhY2thZ2VJZDogcGtnLmlkIHx8IFN0cmluZyhwa2dJbmRleCArIDEpLFxuICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCB8fCBgJHtwa2cuaWR9LSR7cm9vbUluZGV4fWAsXG4gICAgICAgIHJvb21OYW1lOiByb29tPy5yb29tTmFtZSB8fCBgUm9vbSAke3Jvb21JbmRleCArIDF9YCxcbiAgICAgICAgcm9vbVR5cGU6IHJvb20/LnJvb21UeXBlIHx8ICdTdGFuZGFyZCBSb29tJyxcbiAgICAgICAgbWVhbFBsYW46IHJvb20/LnJvb21CYXNpcyB8fCAnJyxcbiAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlICE9PSBmYWxzZSxcbiAgICAgICAgaXNDYW5jZWxsZWQ6IHBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICAgbWFudWFsUmVmdW5kUmVxdWVzdDogIXBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBuaWdodHM6IHRoaXMuaG90ZWxJbmZvKCk/Lm5pZ2h0cyB8fCBuaWdodHMsXG4gICAgICAgIHJvb21BbW91bnQ6IDAsXG4gICAgICAgIGNhbmNlbGxhdGlvbkZlZTogMCxcbiAgICAgICAgcmVmdW5kQW1vdW50OiAwLFxuICAgICAgICBiZWRUeXBlOiByb29tPy5iZWRUeXBlIHx8ICcnLFxuICAgICAgICByb29tVmlldzogcm9vbT8ucm9vbVZpZXcgfHwgJycsXG4gICAgICAgIHJvb21CYXNpczogcm9vbT8ucm9vbUJhc2lzIHx8ICcnLFxuICAgICAgICByZWZ1bmRhYmlsaXR5OiBwa2cuaXNSZWZ1bmRhYmxlLFxuICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwgfHwgJycsXG4gICAgICAgIGFkdWx0c051bTogcm9vbT8uYWR1bHRzTnVtIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuTnVtOiByb29tPy5jaGlsZHJlbk51bSB8fCAwLFxuICAgICAgICBwYXNzZW5nZXJOYW1lOiByb29tPy5wYXNzZW5nZXJzPy5uYW1lIHx8ICcnXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1hcEJvb2tpbmdUb1BhY2thZ2VzKFxuICAgIGJvb2tpbmc6IGFueVxuICApOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2VbXSB7XG4gICAgY29uc3QgYm9va2luZ1BhY2thZ2VzOiBJQm9va2luZ1BhY2thZ2VbXSA9IGJvb2tpbmcucGFja2FnZXMgfHwgW107XG5cbiAgICByZXR1cm4gYm9va2luZ1BhY2thZ2VzLm1hcCgocGtnOiBJQm9va2luZ1BhY2thZ2UsIHBrZ0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJvb21zID0gcGtnLnJvb21zIHx8IFtdO1xuICAgICAgY29uc3QgZmlyc3RSb29tID0gcm9vbXNbMF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhY2thZ2VJZDogcGtnLmlkIHx8IFN0cmluZyhwa2dJbmRleCArIDEpLFxuICAgICAgICBwYWNrYWdlTmFtZTogZmlyc3RSb29tPy5yb29tTmFtZSB8fCBgUGFja2FnZSAke3BrZ0luZGV4ICsgMX1gLFxuICAgICAgICBib2FyZEJhc2lzOiBmaXJzdFJvb20/LnJvb21CYXNpcyB8fCAnJyxcbiAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlICE9PSBmYWxzZSxcbiAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIGlzQ2FuY2VsbGVkOiBwa2cuaXNDYW5jZWxsZWQsXG4gICAgICAgIHJlZnVuZGFiaWxpdHk6IHBrZy5pc1JlZnVuZGFibGUsXG4gICAgICAgIHJlZnVuZGFibGVVbnRpbDogcGtnLnJlZnVuZGFibGVVbnRpbCB8fCAnJyxcbiAgICAgICAgcm9vbXM6IHJvb21zLm1hcCgocm9vbTogYW55LCByb29tSW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCB8fCBgJHtwa2cuaWR9LSR7cm9vbUluZGV4fWAsXG4gICAgICAgICAgcm9vbU5hbWU6IHJvb20/LnJvb21OYW1lIHx8IGBSb29tICR7cm9vbUluZGV4ICsgMX1gLFxuICAgICAgICAgIHJvb21UeXBlOiByb29tPy5yb29tVHlwZSB8fCAnU3RhbmRhcmQgUm9vbScsXG4gICAgICAgICAgYmVkVHlwZTogcm9vbT8uYmVkVHlwZSB8fCAnJyxcbiAgICAgICAgICByb29tQmFzaXM6IHJvb20/LnJvb21CYXNpcyB8fCAnJ1xuICAgICAgICB9KSksXG4gICAgICAgIHJvb21BbW91bnQ6IDAsXG4gICAgICAgIGNhbmNlbGxhdGlvbkZlZTogMCxcbiAgICAgICAgcmVmdW5kQW1vdW50OiAwLFxuICAgICAgICBtYW51YWxSZWZ1bmRSZXF1ZXN0OiAhcGtnLmlzUmVmdW5kYWJsZSxcbiAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiBmYWxzZSxcbiAgICAgICAgY2FuY2VsbGF0aW9uUG9saWNpZXM6IHBrZy5jYW5jZWxsYXRpb25Qb2xpY2llcyB8fCBbXSxcbiAgICAgICAgQ2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzOiBwa2cuY2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzLFxuICAgICAgICBzdXBwbGllcjogcGtnLnN1cHBsaWVyXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVOaWdodHMoZnJvbTogYW55LCB0bzogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoIWZyb20gfHwgIXRvKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgaWYgKGZyb20uZGlmZiAmJiB0eXBlb2YgZnJvbS5kaWZmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdG8uZGlmZihmcm9tLCAnZGF5cycpIHx8IDE7XG4gICAgfVxuICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZnJvbSk7XG4gICAgY29uc3QgdG9EYXRlID0gbmV3IERhdGUodG8pO1xuICAgIGNvbnN0IGRpZmZUaW1lID0gTWF0aC5hYnModG9EYXRlLmdldFRpbWUoKSAtIGZyb21EYXRlLmdldFRpbWUoKSk7XG4gICAgY29uc3QgZGlmZkRheXMgPSBNYXRoLmNlaWwoZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICAgIHJldHVybiBkaWZmRGF5cyB8fCAxO1xuICB9XG5cbiAgb25Db250aW51ZVRvQ2FuY2VsKFxuICAgIHNlbGVjdGVkUGFja2FnZXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdXG4gICk6IHZvaWQge1xuICAgIC8vIENvbnZlcnQgcGFja2FnZXMgdG8gcm9vbXMgZm9ybWF0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHNlcnZpY2VcbiAgICBjb25zdCBzZWxlY3RlZFJvb21zOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSA9XG4gICAgICBzZWxlY3RlZFBhY2thZ2VzLmZsYXRNYXAoKHBrZykgPT5cbiAgICAgICAgcGtnLnJvb21zLm1hcCgocm9vbSkgPT4gKHtcbiAgICAgICAgICBwYWNrYWdlSWQ6IHBrZy5wYWNrYWdlSWQsXG4gICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICByb29tVHlwZTogcm9vbS5yb29tVHlwZSxcbiAgICAgICAgICBtZWFsUGxhbjogcm9vbS5yb29tQmFzaXMsXG4gICAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlLFxuICAgICAgICAgIGlzQ2FuY2VsbGVkOiBwa2cuaXNDYW5jZWxsZWQsXG4gICAgICAgICAgaXNTZWxlY3RlZDogcGtnLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgbmlnaHRzOiAwLFxuICAgICAgICAgIHJvb21BbW91bnQ6IHBrZy5yb29tQW1vdW50LFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkZlZTogcGtnLmNhbmNlbGxhdGlvbkZlZSxcbiAgICAgICAgICByZWZ1bmRBbW91bnQ6IHBrZy5yZWZ1bmRBbW91bnQsXG4gICAgICAgICAgYmVkVHlwZTogcm9vbS5iZWRUeXBlLFxuICAgICAgICAgIHJvb21CYXNpczogcm9vbS5yb29tQmFzaXMsXG4gICAgICAgICAgcmVmdW5kYWJpbGl0eTogcGtnLnJlZnVuZGFiaWxpdHksXG4gICAgICAgICAgcmVmdW5kYWJsZVVudGlsOiBwa2cucmVmdW5kYWJsZVVudGlsLFxuICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogcGtnLmNhbmNlbGxlZEJlZm9yZSxcbiAgICAgICAgICBtYW51YWxSZWZ1bmRSZXF1ZXN0OiBwa2cubWFudWFsUmVmdW5kUmVxdWVzdFxuICAgICAgICB9KSlcbiAgICAgICk7XG5cbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNldFNlbGVjdGVkUm9vbXMoc2VsZWN0ZWRSb29tcyk7XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRTdW1tYXJ5XG4gICAgKTtcbiAgfVxuXG4gIG9uS2VlcFJvb20oKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5zZWxlY3RSb29tc1xuICAgICk7XG4gIH1cblxuICBvblNlbGVjdFJlZnVuZE9wdGlvbihkYXRhOiB7XG4gICAgcGFja2FnZUlkczogc3RyaW5nW107XG4gICAgcGF5b3V0OiBhbnk7XG4gICAgdG90YWxSZWZ1bmQ6IG51bWJlcjtcbiAgICByZXNwb25zZURhdGE6IGFueTtcbiAgfSk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRlbmFudCAtIHJlZGlyZWN0IHRvIFdoYXRzQXBwIGZvciB0ZW5hbnQgYm9va2luZ3NcbiAgICBpZiAoZW52aXJvbm1lbnRzLmlzVGVuYW50KSB7XG4gICAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2V0QWN0aXZlQXNpZGVUYWIoXG4gICAgICAgIEhvdGVsTWFuYWdlQm9va2luZ0FzaWRlVGFiRW51bS53aGF0c0FwcEFnZW50XG4gICAgICApO1xuICAgICAgdGhpcy5zaG93QXNpZGUuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygnUmVmdW5kIG9wdGlvbiBzZWxlY3RlZDonLCBkYXRhKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRQYWNrYWdlSWRzLnNldChkYXRhLnBhY2thZ2VJZHMpO1xuICAgIHRoaXMucmVmdW5kUmVzcG9uc2VEYXRhLnNldChkYXRhLnJlc3BvbnNlRGF0YSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGRhdGE/LnJlc3BvbnNlRGF0YTtcbiAgICBjb25zdCBwYXlvdXQgPSByZXNwb25zZT8ucGF5b3V0IHx8IGRhdGEucGF5b3V0O1xuICAgIGNvbnN0IHRvdGFscyA9IHJlc3BvbnNlPy50b3RhbHM7XG5cbiAgICAvLyBjb25zdCB3YWxsZXRSZWZ1bmQgPSBwYXlvdXQ/LndhbGxldCB8fCBwYXlvdXQ/LmxveWFsdHlUb1dhbGxldDtcbiAgICBjb25zdCB3YWxsZXRSZWZ1bmQgPSBwYXlvdXQ/LndhbGxldDtcblxuICAgIGNvbnN0IGNhcmRSZWZ1bmQgPSBwYXlvdXQ/LmNhcmQgPz8gMDtcbiAgICBjb25zdCB0YWJieVJlZnVuZCA9IHBheW91dD8udGFiYnkgPz8gcGF5b3V0Py50YWJieSA/PyAwO1xuICAgIGNvbnN0IHRhbWFyYVJlZnVuZCA9IHBheW91dD8udGFtYXJhID8/IHBheW91dD8udGFtYXJhID8/IDA7XG5cbiAgICAvLyBDaGVjayBpZiBmdWxsIHdhbGxldCByZWZ1bmQgaXMgYWxsb3dlZCBiYXNlZCBvbiBwYXlvdXQgYnJlYWtkb3duXG4gICAgLy8gV2FsbGV0IHJlZnVuZCBpcyBhbGxvd2VkIGlmIHRoZXJlJ3Mgbm8gY2FyZC90YWJieS90YW1hcmEgcG9ydGlvblxuICAgIGNvbnN0IGhhc05vbldhbGxldFJlZnVuZCA9IHRhYmJ5UmVmdW5kID4gMCB8fCB0YW1hcmFSZWZ1bmQgPiAwO1xuICAgIGNvbnN0IHRvdGFsUmVmdW5kQW1vdW50ID0gcGF5b3V0Py5jdXJyZW50ID8/IGRhdGEudG90YWxSZWZ1bmQ7XG4gICAgY29uc3QgaXNGdWxsV2FsbGV0QWxsb3dlZCA9XG4gICAgICAoIWhhc05vbldhbGxldFJlZnVuZCAmJiB3YWxsZXRSZWZ1bmQgPiAwKSB8fCBjYXJkUmVmdW5kID4gMDtcblxuICAgIGNvbnN0IGxveWFsdHlQb2ludHNWYWx1ZSA9XG4gICAgICBwYXlvdXQ/LmxveWFsdHlUb1dhbGxldCB8fFxuICAgICAgdG90YWxzPy53YWxhIHx8XG4gICAgICB0b3RhbHM/LnFpdGFmIHx8XG4gICAgICB0b3RhbHM/Lm1va2FmYSB8fFxuICAgICAgdG90YWxzPy5oYXNzYWQgfHxcbiAgICAgIHRvdGFscz8ueWdnO1xuXG4gICAgLy8gQnVpbGQgcmVmdW5kIGRldGFpbHMgZGF0YSBmb3IgdGhlIG1ldGhvZCBzZWxlY3RvclxuICAgIHRoaXMucmVmdW5kRGV0YWlsc0RhdGEuc2V0KHtcbiAgICAgIHRvdGFsUmVmdW5kQW1vdW50LFxuICAgICAgd2FsbGV0UmVmdW5kQW1vdW50OiBwYXlvdXQ/LndhbGxldCxcbiAgICAgIHRvdGFsQ2FyZFJlZnVuZEFtb3VudDogY2FyZFJlZnVuZCArIHRhYmJ5UmVmdW5kICsgdGFtYXJhUmVmdW5kLFxuICAgICAgaXNGdWxsV2FsbGV0UmVmdW5kQWxsb3dlZDogaXNGdWxsV2FsbGV0QWxsb3dlZCxcbiAgICAgIGN1cnJlbmN5OiByZXNwb25zZT8uY3VycmVuY3ksXG4gICAgICBpc1JlZnVuZGFibGU6IHJlc3BvbnNlPy5mbGFncz8ucmVmdW5kYWJsZSxcbiAgICAgIHRvdGFsTG95YWx0eVBvaW50c1JlZnVuZEFtb3VudDogbG95YWx0eVBvaW50c1ZhbHVlLFxuICAgICAgLy8gUGFzcyBwYXltZW50IG1ldGhvZCBpbmZvIGZvciBwcm9wZXIgbGFiZWxpbmdcbiAgICAgIHBheW1lbnRNZXRob2RDdXN0b21lclVzZWQ6IHRoaXMuZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHMsIHBheW91dCksXG4gICAgICAvLyBBZGRpdGlvbmFsIGZpZWxkcyBmb3IgcHJvcGVyIGxveWFsdHkgcHJvZ3JhbSBsYWJlbGluZyBhbmQgc3BsaXQgcmVmdW5kIGRpc3BsYXlcbiAgICAgIGxveWFsdHlQYXltZW50VHlwZTogdGhpcy5kZXRlcm1pbmVMb3lhbHR5VHlwZSh0b3RhbHMsIHBheW91dCksXG4gICAgICB0b3RhbExveWFsdHlQb2ludHM6IGxveWFsdHlQb2ludHNWYWx1ZSxcbiAgICAgIGJvb2tpbmdJZDogdGhpcy5zZWxlY3RlZEhvdGVsQm9va2luZygpPy5ib29raW5nSWRcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdSZWZ1bmQgZGV0YWlscyBkYXRhIHNldDonLCB0aGlzLnJlZnVuZERldGFpbHNEYXRhKCkpO1xuXG4gICAgLy8gRGVmYXVsdCB0byB3YWxsZXQgaWYgYWxsb3dlZCwgb3RoZXJ3aXNlIG9yaWdpbmFsUGF5bWVudE1ldGhvZFxuICAgIGlmIChpc0Z1bGxXYWxsZXRBbGxvd2VkICYmIHdhbGxldFJlZnVuZCA+IDApIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnd2FsbGV0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVmdW5kTWV0aG9kLnNldCgnb3JpZ2luYWxQYXltZW50TWV0aG9kJyk7XG4gICAgfVxuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kTWV0aG9kXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBwYXltZW50IG1ldGhvZCBsYWJlbCBiYXNlZCBvbiB0b3RhbHMvcGF5b3V0IGJyZWFrZG93bi5cbiAgICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgZ2F0ZXdheSBjb2RlIGZvciBwcm9wZXIgbGFiZWxpbmcuXG4gICAqL1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2FyZC9pbnN0YWxsbWVudCBwYXltZW50IG1ldGhvZCBmb3IgdGhlIGNhcmQgcm93IGxhYmVsLlxuICAgKiBMb3lhbHR5IHByb2dyYW1zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYnkgZGV0ZXJtaW5lTG95YWx0eVR5cGUoKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHM6IGFueSwgcGF5b3V0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICgocGF5b3V0Py50YWJieSA/PyB0b3RhbHM/LnRhYmJ5ID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdUQic7IC8vIFRhYmJ5XG4gICAgfVxuICAgIGlmICgocGF5b3V0Py50YW1hcmEgPz8gdG90YWxzPy50YW1hcmEgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gJ1RNJzsgLy8gVGFtYXJhXG4gICAgfVxuICAgIGlmICgocGF5b3V0Py5jYXJkID8/IHRvdGFscz8uY2FyZCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnQ0gnOyAvLyBDYXJkXG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBsb3lhbHR5IHBheW1lbnQgdHlwZSBmb3IgcHJvcGVyIGxhYmVsaW5nIGluIHNwbGl0IHJlZnVuZCByb3dzLlxuICAgKiBSZXR1cm5zIHRoZSBsb3lhbHR5IHByb2dyYW0gY29kZSAoZS5nLiwgJ1FJVEFGJywgJ1JBSkhJJykgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lTG95YWx0eVR5cGUoXG4gICAgdG90YWxzOiBhbnksXG4gICAgcGF5b3V0OiBhbnlcbiAgKTogTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoKHRvdGFscz8ubW9rYWZhID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdBbFJhamhpTW9rYWZhYSc7XG4gICAgfVxuICAgIGlmICgodG90YWxzPy5xaXRhZiA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnUWl0YWYnO1xuICAgIH1cbiAgICBpZiAoKHRvdGFscz8ud2FsYSA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnV2FsYSc7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlUb1dhbGxldCA/PyAwKSA+IDAgfHxcbiAgICAgIChwYXlvdXQ/LmxveWFsdHlQb2ludHMgPz8gMCkgPiAwXG4gICAgKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgc3BlY2lmaWMgbG95YWx0eSB0eXBlIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCBsb3lhbHR5VHlwZSA9IHRvdGFscz8ubG95YWx0eVR5cGUgYXMgTG95YWx0eVBheW1lbnRUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBsb3lhbHR5VHlwZSAmJlxuICAgICAgICBbXG4gICAgICAgICAgJ0FsUmFqaGlNb2thZmFhJyxcbiAgICAgICAgICAnUWl0YWYnLFxuICAgICAgICAgICdXYWxhJyxcbiAgICAgICAgICAnQUxGVVJTQU4nLFxuICAgICAgICAgICdBTE1BVEFSX1BPSU5UUydcbiAgICAgICAgXS5pbmNsdWRlcyhsb3lhbHR5VHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbG95YWx0eVR5cGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBvbk1ldGhvZFNlbGVjdGVkKG1ldGhvZDogUmVmdW5kUHJlZmVycmVkTWV0aG9kKTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRNZXRob2Quc2V0KG1ldGhvZCk7XG4gIH1cblxuICBvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeVxuICAgICk7XG4gIH1cblxuICBvbkdvQmFjaygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuICAgIHN3aXRjaCAoc3RlcCkge1xuICAgICAgY2FzZSBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0ucmVmdW5kU3VtbWFyeTpcbiAgICAgICAgdGhpcy5hdXRvQ2FuY2VsbGF0aW9uU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXNcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2Q6XG4gICAgICAgIHRoaXMuYXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnlcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3Igc2VsZWN0Um9vbXMgb3Igb3RoZXIgc3RlcHMsIGRvIG5vdGhpbmcgKGNsb3NlIG1vZGFsKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYW5Hb0JhY2soKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuY3VycmVudFN0ZXAoKTtcbiAgICByZXR1cm4gKFxuICAgICAgc3RlcCA9PT0gQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkgfHxcbiAgICAgIHN0ZXAgPT09IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5yZWZ1bmRNZXRob2RcbiAgICApO1xuICB9XG5cbiAgY29uZmlybUNhbmNlbGxhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLmF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb24odGhpcy5zZWxlY3RlZFBhY2thZ2VJZHMoKSwgdGhpcy5yZWZ1bmRNZXRob2QoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDYW5jZWxsaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zaG93QXNpZGUuc2V0KGZhbHNlKTtcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHRlbmFudCAtIHJlZGlyZWN0IHRvIFdoYXRzQXBwXG4gICAgICAgICAgaWYgKGVudmlyb25tZW50cy5pc1RlbmFudCB8fCByZXNwb25zZT8uZGF0YT8uaXNXaGF0c0FwcCkge1xuICAgICAgICAgICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLnNldEFjdGl2ZUFzaWRlVGFiKFxuICAgICAgICAgICAgICBIb3RlbE1hbmFnZUJvb2tpbmdBc2lkZVRhYkVudW0ud2hhdHNBcHBBZ2VudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9yZSBBUEkgcmVzcG9uc2UgYW5kIHNob3cgZGV0YWlsZWQgcmVzdWx0IG92ZXJsYXlcbiAgICAgICAgICB0aGlzLmNhbmNlbGxhdGlvbkFwaVJlc3BvbnNlLnNldChyZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy5zaG93RGV0YWlsZWRSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgICAgICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICAgICAgICB0aGlzLmNhbmNlbGxhdGlvblN1Y2Nlc3MuZW1pdChyZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsbGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIHBvc3NpYmxlIHN0cnVjdHVyZXNcbiAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1dlIGVuY291bnRlcmVkIGFuIGlzc3VlIHByb2Nlc3NpbmcgeW91ciBjYW5jZWxsYXRpb24uIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0Lic7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5jZWxsYXRpb24gZXJyb3I6JywgZXJyb3IpO1xuXG4gICAgICAgICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uZXJyb3JzICYmIEFycmF5LmlzQXJyYXkoZXJyb3IuZXJyb3IuZXJyb3JzKSAmJiBlcnJvci5lcnJvci5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IuZXJyb3JzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTaG93IGVycm9yIG92ZXJsYXlcbiAgICAgICAgICB0aGlzLnJlc3VsdE92ZXJsYXlEYXRhLnNldCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdDYW5jZWxsYXRpb24gRmFpbGVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiAnQ2xvc2UnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25DbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MocGFja2FnZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG5cbiAgICAvLyBTaG93IHN1Y2Nlc3Mgb3ZlcmxheSBmb3Igbm9uLXJlZnVuZGFibGUgcmVxdWVzdFxuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KHtcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWJtaXR0ZWQhJyxcbiAgICAgIG1lc3NhZ2U6IGBZb3VyIGNhbmNlbGxhdGlvbiByZXF1ZXN0IGZvciAke3BhY2thZ2VOYW1lfSBoYXMgYmVlbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5LiBPdXIgdGVhbSB3aWxsIHJldmlldyB5b3VyIHJlcXVlc3QgYW5kIGNvbnRhY3QgeW91IHNob3J0bHkuYCxcbiAgICAgIGNvbmZpcm1UZXh0OiAnRG9uZSdcbiAgICB9KTtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldCh0cnVlKTtcblxuICAgIC8vIEFsc28gZW1pdCBmb3IgcGFyZW50IGNvbXBvbmVudCBpZiBuZWVkZWRcbiAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgb25DaGF0V2l0aEFnZW50KCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FzaWRlLnNldChmYWxzZSk7XG4gICAgdGhpcy5jaGF0V2l0aEFnZW50LmVtaXQoKTtcbiAgfVxuXG4gIGNsb3NlQWxsTW9kYWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0Vycm9yTW9kYWwuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dBc2lkZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNvbmZpcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVzdWx0T3ZlcmxheS5zZXQoZmFsc2UpO1xuICAgIHRoaXMucmVzdWx0T3ZlcmxheURhdGEuc2V0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXN1bHRPdmVybGF5LnNldChmYWxzZSk7XG4gICAgdGhpcy5yZXN1bHRPdmVybGF5RGF0YS5zZXQobnVsbCk7XG4gIH1cblxuICBvbkRldGFpbGVkUmVzdWx0T3ZlcmxheURvbmUoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RGV0YWlsZWRSZXN1bHRPdmVybGF5LnNldChmYWxzZSk7XG4gICAgdGhpcy5jYW5jZWxsYXRpb25BcGlSZXNwb25zZS5zZXQobnVsbCk7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG59XG4iLCJAaWYgKHNob3dBc2lkZSgpKSB7XG4gIDxhbG1hdGFyLWFzaWRlXG5cbiAgICBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX3dyYXBwZXJcIlxuICAgIFthc2lkZVRpdGxlXT1cImFzaWRlVGl0bGUoKVwiXG4gICAgW3Nob3dBc2lkZV09XCJzaG93QXNpZGUoKVwiXG4gICAgW3doaXRlSGVhZGVyXT1cInRydWVcIlxuICAgIFtzaG93SGVhZGVyXT1cImZhbHNlXCJcbiAgICAob25DbG9zZSk9XCJvbkNsb3NlTW9kYWwoKVwiXG4gID5cbiAgICA8IS0tIEN1c3RvbSBIZWFkZXIgd2l0aCA2MHB4IGhlaWdodCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlclwiPlxuICAgICAgQGlmIChjYW5Hb0JhY2soKSkge1xuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1iYWNrXCIgKGNsaWNrKT1cIm9uR29CYWNrKClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1hcnJvdy1sZWZ0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgQGlmIChjdXJyZW50U3RlcCgpID09PSBzdGVwRW51bS5zZWxlY3RSb29tcykge1xuICAgICAgICAgIDxoMiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgIEBpZiAoaXNTaW5nbGVQYWNrYWdlKCkpIHtcbiAgICAgICAgICAgICAgQ2FuY2VsIFJvb21zXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgU2VsZWN0IFJvb21zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItc3VidGl0bGVcIj5cbiAgICAgICAgICAgIEBpZiAoaXNTaW5nbGVQYWNrYWdlKCkpIHtcbiAgICAgICAgICAgICAgUmV2aWV3IGFuZCBjb25maXJtIHlvdXIgY2FuY2VsbGF0aW9uXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQ2hvb3NlIHdoaWNoIHJvb20ocykgeW91J2QgbGlrZSB0byBjYW5jZWxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIH0gQGVsc2UgaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnJlZnVuZFN1bW1hcnkpIHtcbiAgICAgICAgICA8aDIgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLXRpdGxlXCI+Q2FuY2VsIEJvb2tpbmcgUmVxdWVzdDwvaDI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLXN1YnRpdGxlXCI+UmV2aWV3IHlvdXIgcmVmdW5kIHN1bW1hcnkgYW5kIHByb2NlZWQ8L3A+XG4gICAgICAgIH0gQGVsc2UgaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnJlZnVuZE1ldGhvZCkge1xuICAgICAgICAgIDxoMiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItdGl0bGVcIj5TZWxlY3QgUmVmdW5kIE1ldGhvZDwvaDI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9faGVhZGVyLXN1YnRpdGxlXCI+Q2hvb3NlIGhvdyB5b3UnZCBsaWtlIHRvIHJlY2VpdmUgeW91ciByZWZ1bmQ8L3A+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxoMiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItdGl0bGVcIj57eyBhc2lkZVRpdGxlKCkgfX08L2gyPlxuICAgICAgICAgIDxwIGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2hlYWRlci1zdWJ0aXRsZVwiPkNvbXBsZXRlIHlvdXIgYm9va2luZyBjYW5jZWxsYXRpb248L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImF1dG9fY2FuY2VsbGF0aW9uX19oZWFkZXItY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZU1vZGFsKClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktdGltZXNcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJhdXRvX2NhbmNlbGxhdGlvbl9fY29tcG9uZW50XCIgW2NsYXNzLmlzTnVza109XCJpc051c2soKVwiPlxuICAgICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0b19jYW5jZWxsYXRpb25fX2xvYWRpbmdcIj5cbiAgICAgICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKGN1cnJlbnRTdGVwKCkgPT09IHN0ZXBFbnVtLnNlbGVjdFJvb21zICYmICFpc0xvYWRpbmcoKSkge1xuICAgICAgICA8YWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zZWxlY3Qtcm9vbXNcbiAgICAgICAgICBbcGFja2FnZXNdPVwicGFja2FnZXMoKVwiXG4gICAgICAgICAgW2hvdGVsSW5mb109XCJob3RlbEluZm8oKVwiXG4gICAgICAgICAgW2Jvb2tpbmdJZF09XCJzZWxlY3RlZEhvdGVsQm9va2luZygpPy5ib29raW5nSWRcIlxuICAgICAgICAgIFtob3RlbElkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmhvdGVsSWRcIlxuICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uY3VycmVuY3lDb2RlIHx8ICdTQVInXCJcbiAgICAgICAgICAoY29udGludWVUb0NhbmNlbCk9XCJvbkNvbnRpbnVlVG9DYW5jZWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZU1vZGFsKClcIlxuICAgICAgICAgIChub25SZWZ1bmRhYmxlU3VibWl0U3VjY2Vzcyk9XCJvbk5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzKCRldmVudClcIlxuICAgICAgICAgIChjaGF0V2l0aEFnZW50KT1cIm9uQ2hhdFdpdGhBZ2VudCgpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChjdXJyZW50U3RlcCgpID09PSBzdGVwRW51bS5yZWZ1bmRTdW1tYXJ5ICYmICFpc0xvYWRpbmcoKSkge1xuICAgICAgICA8YWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeVxuICAgICAgICAgIFtzZWxlY3RlZFJvb21zXT1cImF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLnNlbGVjdGVkUm9vbXMoKVwiXG4gICAgICAgICAgW2Jvb2tpbmdJZF09XCJzZWxlY3RlZEhvdGVsQm9va2luZygpPy5ib29raW5nSWRcIlxuICAgICAgICAgIFtob3RlbElkXT1cInNlbGVjdGVkSG90ZWxCb29raW5nKCk/LmlkIHx8IHNlbGVjdGVkSG90ZWxCb29raW5nKCk/Lmhwa1wiXG4gICAgICAgICAgW2hvdGVsSW5mb109XCJob3RlbEluZm8oKVwiXG4gICAgICAgICAgW3NlbGVjdGlvblNraXBwZWRdPVwicGFja2FnZXMoKS5sZW5ndGggPD0gMVwiXG4gICAgICAgICAgW2N1cnJlbmN5XT1cImN1cnJlbnRDdXJyZW5jeSgpXCJcbiAgICAgICAgICAoa2VlcFJvb20pPVwib25LZWVwUm9vbSgpXCJcbiAgICAgICAgICAoc2VsZWN0UmVmdW5kT3B0aW9uKT1cIm9uU2VsZWN0UmVmdW5kT3B0aW9uKCRldmVudClcIlxuICAgICAgICAgIChjbG9zZU1vZGFsKT1cIm9uQ2xvc2VNb2RhbCgpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChjdXJyZW50U3RlcCgpID09PSBzdGVwRW51bS5yZWZ1bmRNZXRob2QgJiYgIWlzTG9hZGluZygpKSB7XG4gICAgICAgIDxhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1tZXRob2RcbiAgICAgICAgICBbcmVmdW5kRGV0YWlsc0RhdGFdPVwicmVmdW5kRGV0YWlsc0RhdGEoKVwiXG4gICAgICAgICAgW2N1cnJlbmN5T2JqXT1cImN1cnJlbnRDdXJyZW5jeSgpXCJcbiAgICAgICAgICBbcmVmdW5kTWV0aG9kXT1cInJlZnVuZE1ldGhvZCgpXCJcbiAgICAgICAgICBbaXNDYW5jZWxsaW5nXT1cImlzQ2FuY2VsbGluZygpXCJcbiAgICAgICAgICAobWV0aG9kU2VsZWN0ZWQpPVwib25NZXRob2RTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoYmFja1JlcXVlc3RlZCk9XCJvbkJhY2tGcm9tUmVmdW5kTWV0aG9kKClcIlxuICAgICAgICAgIChjb25maXJtUmVxdWVzdGVkKT1cImNvbmZpcm1DYW5jZWxsYXRpb24oKVwiXG4gICAgICAgICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZU1vZGFsKClcIlxuICAgICAgICAgIFtib29raW5nSWRdPVwic2VsZWN0ZWRIb3RlbEJvb2tpbmcoKT8uYm9va2luZ0lkXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9hbG1hdGFyLWFzaWRlPlxufVxuXG5AaWYgKHNob3dFcnJvck1vZGFsKCkpIHtcbiAgPGRpdlxuICAgIGFsbWF0YXItbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsXG4gICAgW2Vycm9yTWVzc2FnZV09XCJob3RlbE1hbmFnZUVycm9yKClcIlxuICAgIChjYW5jZWxFdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICA+PC9kaXY+XG59XG5cbkBpZiAoc2hvd1Jlc3VsdE92ZXJsYXkoKSAmJiByZXN1bHRPdmVybGF5RGF0YSgpKSB7XG4gIDxhcHAtcmVzdWx0LW92ZXJsYXlcbiAgICBbZGF0YV09XCJyZXN1bHRPdmVybGF5RGF0YSgpIVwiXG4gICAgW3Nob3ddPVwic2hvd1Jlc3VsdE92ZXJsYXkoKVwiXG4gICAgKGNvbmZpcm0pPVwib25SZXN1bHRPdmVybGF5Q29uZmlybSgpXCJcbiAgICAoY2FuY2VsKT1cIm9uUmVzdWx0T3ZlcmxheUNhbmNlbCgpXCJcbiAgLz5cbn1cblxuQGlmIChzaG93RGV0YWlsZWRSZXN1bHRPdmVybGF5KCkgJiYgY2FuY2VsbGF0aW9uQXBpUmVzcG9uc2UoKSkge1xuICA8YWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZXN1bHQtb3ZlcmxheVxuICAgIFt2aXNpYmxlXT1cInNob3dEZXRhaWxlZFJlc3VsdE92ZXJsYXkoKVwiXG4gICAgW2N1cnJlbmN5T2JqXT1cImN1cnJlbnRDdXJyZW5jeSgpXCJcbiAgICBbcmVmdW5kTWV0aG9kXT1cInJlZnVuZE1ldGhvZCgpXCJcbiAgICBbYXBpUmVzcG9uc2VdPVwiY2FuY2VsbGF0aW9uQXBpUmVzcG9uc2UoKVwiXG4gICAgKGRvbmUpPVwib25EZXRhaWxlZFJlc3VsdE92ZXJsYXlEb25lKClcIlxuICAvPlxufVxuIl19
|