@almatar/smart-booking-dashboard 0.0.2-alpha.7 → 0.0.2-alpha.8
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/booking-input/booking-input.component.mjs +16 -4
- package/esm2022/lib/components/flight-itinerary-card/flight-itinerary-card.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 +4 -3
- package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +3 -3
- package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +2 -2
- package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +3 -3
- package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +2 -2
- package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +3 -3
- package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +2 -2
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +3 -3
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +3 -5
- package/esm2022/lib/config/dashboard.config.mjs +6 -1
- package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +8 -3
- package/esm2022/lib/services/booking.service.mjs +3 -3
- package/esm2022/lib/services/brand.service.mjs +29 -0
- package/esm2022/lib/services/reissue.service.mjs +3 -3
- package/esm2022/lib/shared/services/api.service.mjs +3 -3
- package/esm2022/lib/shared/services/sbd-http.mjs +27 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/almatar-smart-booking-dashboard.mjs +100 -31
- 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/booking-input/booking-input.component.d.ts +7 -1
- package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +4 -4
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +1 -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/config/dashboard.config.d.ts +12 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +3 -1
- package/lib/services/brand.service.d.ts +14 -0
- package/lib/shared/services/sbd-http.d.ts +8 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Component, input, output, model } from '@angular/core';
|
|
1
|
+
import { Component, inject, input, output, model } from '@angular/core';
|
|
2
2
|
import { FormsModule } from '@angular/forms';
|
|
3
3
|
import { SelectButtonModule } from 'primeng/selectbutton';
|
|
4
4
|
import { InputTextModule } from 'primeng/inputtext';
|
|
5
5
|
import { ButtonModule } from 'primeng/button';
|
|
6
6
|
import { TooltipModule } from 'primeng/tooltip';
|
|
7
|
+
import { SbdBrandService } from '../../services/brand.service';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/forms";
|
|
9
10
|
import * as i2 from "primeng/selectbutton";
|
|
@@ -16,6 +17,11 @@ export class SbdBookingInputComponent {
|
|
|
16
17
|
this.product = model('flight');
|
|
17
18
|
this.bookingId = model('');
|
|
18
19
|
this.lookup = output();
|
|
20
|
+
/** The agent picked another brand: the booking on screen belongs to the previous one. */
|
|
21
|
+
this.brandChanged = output();
|
|
22
|
+
this.brandService = inject(SbdBrandService);
|
|
23
|
+
this.brands = this.brandService.brands;
|
|
24
|
+
this.brand = this.brandService.brand;
|
|
19
25
|
this.productOptions = [
|
|
20
26
|
{ label: '✈ Flight', value: 'flight' },
|
|
21
27
|
{ label: '🏨 Hotel', value: 'hotel' },
|
|
@@ -25,6 +31,12 @@ export class SbdBookingInputComponent {
|
|
|
25
31
|
{ label: 'Demo Hotel: ALM-HTL-9921', value: 'ALM-HTL-9921' },
|
|
26
32
|
];
|
|
27
33
|
}
|
|
34
|
+
onBrand(value) {
|
|
35
|
+
if (value === this.brand())
|
|
36
|
+
return;
|
|
37
|
+
this.brandService.setBrand(value);
|
|
38
|
+
this.brandChanged.emit(value);
|
|
39
|
+
}
|
|
28
40
|
fillDemo(id) {
|
|
29
41
|
const product = id.includes('HTL') ? 'hotel' : 'flight';
|
|
30
42
|
this.product.set(product);
|
|
@@ -35,10 +47,10 @@ export class SbdBookingInputComponent {
|
|
|
35
47
|
this.lookup.emit();
|
|
36
48
|
}
|
|
37
49
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdBookingInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdBookingInputComponent, isStandalone: true, selector: "app-sbd-booking-input", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: false, transformFunction: null }, bookingId: { classPropertyName: "bookingId", publicName: "bookingId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { product: "productChange", bookingId: "bookingIdChange", lookup: "lookup", brandChanged: "brandChanged" }, ngImport: i0, template: "<div class=\"sbd-booking-input\">\n <div class=\"sbd-booking-input__top\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <!-- Brand: one radio per configured brand, between the Booking ID field and the Lookup button. -->\n <div class=\"sbd-booking-input__brands\" role=\"radiogroup\" aria-label=\"Brand\">\n @for (b of brands; track b.value) {\n <label class=\"sbd-booking-input__brand-option\">\n <input type=\"radio\" name=\"sbd-brand\" [value]=\"b.value\" [checked]=\"brand() === b.value\"\n (change)=\"onBrand(b.value)\" />\n <span>{{ b.label }}</span>\n </label>\n }\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.sbd-booking-input__brands{display:flex;flex-direction:column;align-items:flex-start;gap:6px;flex-shrink:0}.sbd-booking-input__brand-option{display:inline-flex;align-items:center;gap:6px;margin:0;cursor:pointer;font-size:13.5px;font-weight:500;color:#1e2e4a}.sbd-booking-input__brand-option input{accent-color:var(--sbd-primary, #007ad9);width:16px;height:16px;margin:0;cursor:pointer}.sbd-booking-input__row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.sbd-booking-input__field-wrap{flex:1 1 220px;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i2.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3.InputText, selector: "[pInputText]" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
|
|
39
51
|
}
|
|
40
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdBookingInputComponent, decorators: [{
|
|
41
53
|
type: Component,
|
|
42
|
-
args: [{ selector: 'app-sbd-booking-input', standalone: true, imports: [FormsModule, SelectButtonModule, InputTextModule, ButtonModule, TooltipModule], template: "<div class=\"sbd-booking-input\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__row{display:flex;gap:10px;align-items:center}.sbd-booking-input__field-wrap{flex:1;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"] }]
|
|
54
|
+
args: [{ selector: 'app-sbd-booking-input', standalone: true, imports: [FormsModule, SelectButtonModule, InputTextModule, ButtonModule, TooltipModule], template: "<div class=\"sbd-booking-input\">\n <div class=\"sbd-booking-input__top\">\n <p-selectButton\n [(ngModel)]=\"product\"\n [options]=\"productOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n optionDisabled=\"disabled\">\n <ng-template pTemplate=\"item\" let-item>\n <span\n [pTooltip]=\"item.disabled ? 'Coming soon' : null\"\n tooltipPosition=\"bottom\"\n style=\"pointer-events: auto; display: inline-block;\">\n {{ item.label }}\n </span>\n </ng-template>\n </p-selectButton>\n </div>\n <div class=\"sbd-booking-input__row\">\n <div class=\"sbd-booking-input__field-wrap\">\n <i class=\"pi pi-search sbd-booking-input__icon\"></i>\n <input pInputText class=\"sbd-booking-input__field\" placeholder=\"Enter Booking ID\"\n [(ngModel)]=\"bookingId\" (keydown)=\"onKeydown($event)\" autocomplete=\"off\" spellcheck=\"false\" />\n </div>\n <!-- Brand: one radio per configured brand, between the Booking ID field and the Lookup button. -->\n <div class=\"sbd-booking-input__brands\" role=\"radiogroup\" aria-label=\"Brand\">\n @for (b of brands; track b.value) {\n <label class=\"sbd-booking-input__brand-option\">\n <input type=\"radio\" name=\"sbd-brand\" [value]=\"b.value\" [checked]=\"brand() === b.value\"\n (change)=\"onBrand(b.value)\" />\n <span>{{ b.label }}</span>\n </label>\n }\n </div>\n <button pButton label=\"Lookup \u2192\" [disabled]=\"!bookingId().trim()\" (click)=\"lookup.emit()\" class=\"sbd-booking-input__btn\"></button>\n </div>\n</div>\n", styles: [".sbd-booking-input{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;display:flex;flex-direction:column;gap:14px}.sbd-booking-input__top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.sbd-booking-input__brands{display:flex;flex-direction:column;align-items:flex-start;gap:6px;flex-shrink:0}.sbd-booking-input__brand-option{display:inline-flex;align-items:center;gap:6px;margin:0;cursor:pointer;font-size:13.5px;font-weight:500;color:#1e2e4a}.sbd-booking-input__brand-option input{accent-color:var(--sbd-primary, #007ad9);width:16px;height:16px;margin:0;cursor:pointer}.sbd-booking-input__row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.sbd-booking-input__field-wrap{flex:1 1 220px;position:relative;display:flex;align-items:center}.sbd-booking-input__icon{position:absolute;left:12px;color:#94a3b8;font-size:14px;pointer-events:none;z-index:1}.sbd-booking-input__field{width:100%!important;padding-left:36px!important;height:44px;font-size:14px!important}.sbd-booking-input__field:enabled:focus{border-color:var(--sbd-primary, #007ad9);box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__btn{height:44px;white-space:nowrap;background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}.sbd-booking-input__btn:enabled:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}.sbd-booking-input__btn:enabled:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}.sbd-booking-input__demos{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sbd-booking-input__demos-label{font-size:11.5px;color:#94a3b8}.sbd-booking-input__chip{padding:4px 10px;border-radius:20px;border:1px solid #e2e8f0;background:#f8fafc;color:#1e2e4a;font-size:11.5px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s}.sbd-booking-input__chip:hover{border-color:var(--sbd-primary, #3b82f6);background:var(--sbd-primary-soft, #eff6ff);color:var(--sbd-primary, #3b82f6)}:host ::ng-deep .p-selectbutton .p-button.p-highlight{background:var(--sbd-primary, #007ad9);border-color:var(--sbd-primary, #007ad9)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:hover{background:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000);border-color:color-mix(in srgb,var(--sbd-primary, #007ad9) 88%,#000)}:host ::ng-deep .p-selectbutton .p-button.p-highlight:focus{box-shadow:0 0 0 .2em color-mix(in srgb,var(--sbd-primary, #007ad9) 45%,#fff)}\n"] }]
|
|
43
55
|
}] });
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvYm9va2luZy1pbnB1dC9ib29raW5nLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ib29raW5nLWlucHV0L2Jvb2tpbmctaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQVkvRCxNQUFNLE9BQU8sd0JBQXdCO0lBUHJDO1FBUUUsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixZQUFPLEdBQUcsS0FBSyxDQUFjLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsV0FBTSxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBQ3hCLHlGQUF5RjtRQUN6RixpQkFBWSxHQUFHLE1BQU0sRUFBVSxDQUFDO1FBRWYsaUJBQVksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0MsV0FBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ2xDLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQVFoQyxtQkFBYyxHQUFvQjtZQUN6QyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUN0QyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtTQUN0QyxDQUFDO1FBRU8sWUFBTyxHQUFHO1lBQ2pCLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDdkQsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtTQUM3RCxDQUFDO0tBV0g7SUF6QkMsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtZQUFFLE9BQU87UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVlELFFBQVEsQ0FBQyxFQUFVO1FBQ2pCLE1BQU0sT0FBTyxHQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDOytHQXBDVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixrbEJDbEJyQywwbERBcUNBLHdsRkR2QlksV0FBVyw4bUJBQUUsa0JBQWtCLDZTQUFFLGVBQWUsbUdBQUUsWUFBWSxzS0FBRSxhQUFhOzs0RkFJNUUsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgbW9kZWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2VsZWN0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3RidXR0b24nO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBTYmRCcmFuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9icmFuZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jvb2tpbmcudHlwZXMnO1xuXG5pbnRlcmZhY2UgUHJvZHVjdE9wdGlvbiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBQcm9kdWN0VHlwZTsgZGlzYWJsZWQ/OiBib29sZWFuOyB9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtYm9va2luZy1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgU2VsZWN0QnV0dG9uTW9kdWxlLCBJbnB1dFRleHRNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgVG9vbHRpcE1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ib29raW5nLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Jvb2tpbmctaW5wdXQuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBTYmRCb29raW5nSW5wdXRDb21wb25lbnQge1xuICBsb2FkaW5nID0gaW5wdXQoZmFsc2UpO1xuICBwcm9kdWN0ID0gbW9kZWw8UHJvZHVjdFR5cGU+KCdmbGlnaHQnKTtcbiAgYm9va2luZ0lkID0gbW9kZWwoJycpO1xuICBsb29rdXAgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgLyoqIFRoZSBhZ2VudCBwaWNrZWQgYW5vdGhlciBicmFuZDogdGhlIGJvb2tpbmcgb24gc2NyZWVuIGJlbG9uZ3MgdG8gdGhlIHByZXZpb3VzIG9uZS4gKi9cbiAgYnJhbmRDaGFuZ2VkID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5kU2VydmljZSA9IGluamVjdChTYmRCcmFuZFNlcnZpY2UpO1xuICByZWFkb25seSBicmFuZHMgPSB0aGlzLmJyYW5kU2VydmljZS5icmFuZHM7XG4gIHJlYWRvbmx5IGJyYW5kID0gdGhpcy5icmFuZFNlcnZpY2UuYnJhbmQ7XG5cbiAgb25CcmFuZCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLmJyYW5kKCkpIHJldHVybjtcbiAgICB0aGlzLmJyYW5kU2VydmljZS5zZXRCcmFuZCh2YWx1ZSk7XG4gICAgdGhpcy5icmFuZENoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICByZWFkb25seSBwcm9kdWN0T3B0aW9uczogUHJvZHVjdE9wdGlvbltdID0gW1xuICAgIHsgbGFiZWw6ICfinIggRmxpZ2h0JywgdmFsdWU6ICdmbGlnaHQnIH0sXG4gICAgeyBsYWJlbDogJ/Cfj6ggSG90ZWwnLCB2YWx1ZTogJ2hvdGVsJyB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IGRlbW9JZHMgPSBbXG4gICAgeyBsYWJlbDogJ0RlbW8gRmxpZ2h0OiBBTE0tMjA0ODEnLCB2YWx1ZTogJ0FMTS0yMDQ4MScgfSxcbiAgICB7IGxhYmVsOiAnRGVtbyBIb3RlbDogQUxNLUhUTC05OTIxJywgdmFsdWU6ICdBTE0tSFRMLTk5MjEnIH0sXG4gIF07XG5cbiAgZmlsbERlbW8oaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHByb2R1Y3Q6IFByb2R1Y3RUeXBlID0gaWQuaW5jbHVkZXMoJ0hUTCcpID8gJ2hvdGVsJyA6ICdmbGlnaHQnO1xuICAgIHRoaXMucHJvZHVjdC5zZXQocHJvZHVjdCk7XG4gICAgdGhpcy5ib29raW5nSWQuc2V0KGlkKTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHRoaXMubG9va3VwLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0XCI+XG4gIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fdG9wXCI+XG4gIDxwLXNlbGVjdEJ1dHRvblxuICAgIFsobmdNb2RlbCldPVwicHJvZHVjdFwiXG4gICAgW29wdGlvbnNdPVwicHJvZHVjdE9wdGlvbnNcIlxuICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgIG9wdGlvbkRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1pdGVtPlxuICAgICAgPHNwYW5cbiAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0uZGlzYWJsZWQgPyAnQ29taW5nIHNvb24nIDogbnVsbFwiXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IGF1dG87IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIj5cbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1zZWxlY3RCdXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic2JkLWJvb2tpbmctaW5wdXRfX3Jvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fZmllbGQtd3JhcFwiPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2ggc2JkLWJvb2tpbmctaW5wdXRfX2ljb25cIj48L2k+XG4gICAgICA8aW5wdXQgcElucHV0VGV4dCBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19maWVsZFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgQm9va2luZyBJRFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiYm9va2luZ0lkXCIgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiAvPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQnJhbmQ6IG9uZSByYWRpbyBwZXIgY29uZmlndXJlZCBicmFuZCwgYmV0d2VlbiB0aGUgQm9va2luZyBJRCBmaWVsZCBhbmQgdGhlIExvb2t1cCBidXR0b24uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzYmQtYm9va2luZy1pbnB1dF9fYnJhbmRzXCIgcm9sZT1cInJhZGlvZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQnJhbmRcIj5cbiAgICAgIEBmb3IgKGIgb2YgYnJhbmRzOyB0cmFjayBiLnZhbHVlKSB7XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19icmFuZC1vcHRpb25cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNiZC1icmFuZFwiIFt2YWx1ZV09XCJiLnZhbHVlXCIgW2NoZWNrZWRdPVwiYnJhbmQoKSA9PT0gYi52YWx1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQnJhbmQoYi52YWx1ZSlcIiAvPlxuICAgICAgICAgIDxzcGFuPnt7IGIubGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwiTG9va3VwIOKGklwiIFtkaXNhYmxlZF09XCIhYm9va2luZ0lkKCkudHJpbSgpXCIgKGNsaWNrKT1cImxvb2t1cC5lbWl0KClcIiBjbGFzcz1cInNiZC1ib29raW5nLWlucHV0X19idG5cIj48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -64,10 +64,10 @@ export class SbdFlightItineraryCardComponent {
|
|
|
64
64
|
return `${Math.floor(mins / 60)}h ${mins % 60}m`;
|
|
65
65
|
}
|
|
66
66
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdFlightItineraryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
67
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdFlightItineraryCardComponent, isStandalone: true, selector: "app-sbd-flight-itinerary-card", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, verified: { classPropertyName: "verified", publicName: "verified", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n <span class=\"fic__stop-sep\">\u00B7</span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:0 8px 1px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-sep{font-size:11px;color:#cbd5e1}.fic__stop-dur{font-size:11px;font-weight:600;color:#f59e0b}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "pipe", type: LowerCasePipe, name: "lowercase" }] }); }
|
|
67
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SbdFlightItineraryCardComponent, isStandalone: true, selector: "app-sbd-flight-itinerary-card", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, product: { classPropertyName: "product", publicName: "product", isSignal: true, isRequired: true, transformFunction: null }, verified: { classPropertyName: "verified", publicName: "verified", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-head\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n </span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;padding:0 6px}.fic__stop-head{display:inline-flex;align-items:center;gap:4px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-dur{font-size:10.5px;font-weight:600;color:#f59e0b;white-space:nowrap}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "pipe", type: LowerCasePipe, name: "lowercase" }] }); }
|
|
68
68
|
}
|
|
69
69
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SbdFlightItineraryCardComponent, decorators: [{
|
|
70
70
|
type: Component,
|
|
71
|
-
args: [{ selector: 'app-sbd-flight-itinerary-card', standalone: true, imports: [TagModule, UpperCasePipe, LowerCasePipe], template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n <span class=\"fic__stop-sep\">\u00B7</span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex-shrink:0;display:inline-flex;align-items:center;gap:4px;padding:0 8px 1px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-sep{font-size:11px;color:#cbd5e1}.fic__stop-dur{font-size:11px;font-weight:600;color:#f59e0b}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"] }]
|
|
71
|
+
args: [{ selector: 'app-sbd-flight-itinerary-card', standalone: true, imports: [TagModule, UpperCasePipe, LowerCasePipe], template: "<div class=\"fic\">\n @if (product() === 'flight') {\n\n <!-- \u2500\u2500 Verified pill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (verified()) {\n <div class=\"fic__verified-bar\">\n <span class=\"fic__verified-pill\">\n <i class=\"pi pi-verified\"></i> Verified with Airlines\n </span>\n </div>\n }\n\n <!-- \u2500\u2500 Legs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @for (leg of legs(); track leg.direction + $index; let li = $index) {\n <div class=\"fic__leg\" [class.fic__leg--return]=\"leg.direction === 'Return'\">\n\n <!-- Leg header -->\n <div class=\"fic__leg-header\">\n <div class=\"fic__leg-direction\">\n <i class=\"pi\" [class.pi-arrow-right]=\"leg.direction !== 'Return'\" [class.pi-arrow-left]=\"leg.direction === 'Return'\"></i>\n <span>{{ leg.direction }}</span>\n </div>\n <div class=\"fic__leg-chips\">\n @if (leg.cabin) {\n <span class=\"fic__chip fic__chip--cabin\">{{ leg.cabin }}</span>\n }\n @if (leg.fareBrand) {\n <span class=\"fic__chip fic__chip--fare\">{{ leg.fareBrand }}</span>\n }\n </div>\n </div>\n\n <!-- Airline row -->\n @if (leg.airlineName) {\n <div class=\"fic__airline\">\n <i class=\"pi pi-send\"></i>\n <span>{{ leg.airlineName }}</span>\n </div>\n }\n\n <!-- Route timeline -->\n <div class=\"fic__route\">\n\n <!-- Origin -->\n <div class=\"fic__airport\">\n <div class=\"fic__airport-code\">{{ leg.from }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.depTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.depTime) }}</div>\n </div>\n\n <!-- Segments + stops -->\n <div class=\"fic__timeline\">\n\n <!-- Top row: all labels -->\n <div class=\"fic__tl-top\">\n @for (seg of leg.durationSegments; track seg.DepartureAirportCode; let si = $index) {\n <div class=\"fic__tl-seg\">\n <span class=\"fic__tl-flt\">{{ leg.segments[si]?.AirlineCode }}{{ leg.segments[si]?.FlightNumber }}</span>\n <span class=\"fic__tl-dur\">{{ fmtMins(seg.SegmentElapsedTimeMinutes) }}</span>\n </div>\n @if (si < leg.stops.length) {\n <div class=\"fic__tl-stop\">\n <span class=\"fic__stop-head\">\n <span class=\"fic__stop-dot\"></span>\n <span class=\"fic__stop-code\">{{ leg.stops[si].StopAirport }}</span>\n </span>\n <span class=\"fic__stop-dur\">{{ fmtMins(leg.stops[si].LayoverDuration) }}</span>\n </div>\n }\n }\n </div>\n\n <!-- Bottom row: single continuous line + one arrow -->\n <div class=\"fic__tl-track\">\n <div class=\"fic__tl-line\"></div>\n <i class=\"pi pi-send fic__tl-plane\"></i>\n </div>\n\n </div>\n\n <!-- Destination -->\n <div class=\"fic__airport fic__airport--right\">\n <div class=\"fic__airport-code\">{{ leg.to }}</div>\n <div class=\"fic__airport-time\">{{ fmtTime(leg.arrTime) }}</div>\n <div class=\"fic__airport-date\">{{ fmtShortDate(leg.arrTime) }}</div>\n </div>\n\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Passengers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (passengers().length > 0) {\n <div class=\"fic__section\">\n <div class=\"fic__section-label\">\n <i class=\"pi pi-users\"></i> Passengers\n <span class=\"fic__section-count\">{{ passengers().length }}</span>\n </div>\n <div class=\"fic__pax-list\">\n @for (p of passengers(); track p.passengerId) {\n <div class=\"fic__pax\">\n <div class=\"fic__pax-top\">\n <span class=\"fic__pax-badge fic__pax-badge--{{ p.type | lowercase }}\">{{ typeLabel[p.type] ?? p.type }}</span>\n <span class=\"fic__pax-name\">{{ p.name?.prefix }} {{ p.name?.givenName }} {{ p.name?.surName }}</span>\n </div>\n <div class=\"fic__pax-bottom\">\n @if (p.identity?.number) {\n <span class=\"fic__pax-doc\"><i class=\"pi pi-id-card\"></i> {{ p.identity?.number }}</span>\n }\n @if (p.email) {\n <span class=\"fic__pax-email\">{{ p.email }}</span>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- \u2500\u2500 Payment \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (payment()) {\n <div class=\"fic__payment\">\n <div class=\"fic__payment-main\">\n <i class=\"pi pi-credit-card fic__payment-icon\"></i>\n <span class=\"fic__payment-amount\">{{ payment()?.amount }} {{ payment()?.currency }}</span>\n <span class=\"fic__payment-status\" [class.fic__payment-status--ok]=\"payment()?.status?.key === 'SUCCESS'\">\n <i class=\"pi\" [class.pi-check-circle]=\"payment()?.status?.key === 'SUCCESS'\" [class.pi-clock]=\"payment()?.status?.key !== 'SUCCESS'\"></i>\n {{ payment()?.status?.name }}\n </span>\n </div>\n @if (payment()?.method || payment()?.date) {\n <div class=\"fic__payment-sub\">\n @if (payment()?.method) { <span>{{ payment()?.method }}</span> }\n @if (payment()?.method && payment()?.date) { <span class=\"fic__dot\">\u00B7</span> }\n @if (payment()?.date) { <span>{{ payment()?.date }}</span> }\n </div>\n }\n </div>\n }\n\n\n }\n</div>\n", styles: [".fic{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;font-family:inherit}.fic__leg{padding:16px 16px 18px;border-bottom:1px solid #e2e8f0}.fic__leg--return{background:#fafbff}.fic__leg-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.fic__leg-direction{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#1e2e4a}.fic__leg-direction .pi{font-size:10px;color:#475569}.fic__leg-chips{display:flex;gap:5px}.fic__chip{font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:12px;letter-spacing:.02em}.fic__chip--cabin{background:#eff6ff;color:#1d4ed8}.fic__chip--fare{background:#fef9c3;color:#854d0e}.fic__airline{display:flex;align-items:center;gap:5px;font-size:12px;color:#64748b;margin-bottom:14px}.fic__airline .pi{font-size:11px;color:#94a3b8;transform:rotate(45deg)}.fic__route{display:flex;align-items:flex-start;gap:0}.fic__airport{display:flex;flex-direction:column;align-items:flex-start;flex-shrink:0}.fic__airport--right{align-items:flex-end}.fic__airport-code{font-size:26px;font-weight:800;color:#1e2e4a;line-height:1}.fic__airport-time{font-size:13px;font-weight:600;color:#334155;margin-top:3px}.fic__airport-date{font-size:10.5px;color:#94a3b8;margin-top:1px}.fic__timeline{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;margin:0 4px}.fic__tl-top{display:flex;align-items:flex-end;gap:0}.fic__tl-seg{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px}.fic__tl-flt{font-size:10px;font-weight:700;color:#1e2e4a;background:#f1f5f9;padding:1px 5px;border-radius:4px;white-space:nowrap}.fic__tl-dur{font-size:9.5px;color:#94a3b8;white-space:nowrap}.fic__tl-stop{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:1px;padding:0 6px}.fic__stop-head{display:inline-flex;align-items:center;gap:4px}.fic__tl-track{display:flex;align-items:center;height:22px}.fic__tl-line{flex:1;height:2px;background:#cbd5e1}.fic__tl-plane{font-size:13px;color:#475569;transform:rotate(45deg);flex-shrink:0;margin-left:-2px}.fic__stop-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8;flex-shrink:0}.fic__stop-code{font-size:11px;font-weight:700;color:#334155}.fic__stop-dur{font-size:10.5px;font-weight:600;color:#f59e0b;white-space:nowrap}.fic__section{padding:14px 16px;border-bottom:1px solid #e2e8f0}.fic__section-label{display:flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:#64748b;margin-bottom:10px}.fic__section-label .pi{font-size:11px}.fic__section-count{margin-left:auto;background:#f1f5f9;color:#475569;font-size:10px;font-weight:700;padding:1px 6px;border-radius:10px}.fic__pax-list{display:flex;flex-direction:column;gap:8px}.fic__pax{background:#f8fafc;border-radius:8px;padding:8px 10px;display:flex;flex-direction:column;gap:5px}.fic__pax-top{display:flex;align-items:center;gap:7px}.fic__pax-badge{font-size:9.5px;font-weight:700;letter-spacing:.04em;padding:2px 7px;border-radius:10px;flex-shrink:0;text-transform:uppercase}.fic__pax-badge--adt{background:#dbeafe;color:#1d4ed8}.fic__pax-badge--cnn{background:#dcfce7;color:#15803d}.fic__pax-badge--inf{background:#fce7f3;color:#9d174d}.fic__pax-name{font-size:12.5px;font-weight:600;color:#1e2e4a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fic__pax-bottom{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fic__pax-doc{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-family:monospace;color:#475569;background:#f1f5f9;padding:1px 6px;border-radius:4px}.fic__pax-doc .pi{font-size:10px}.fic__pax-email{font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}.fic__payment{padding:12px 16px;background:#f8fafc;display:flex;flex-direction:column;gap:4px}.fic__payment-main{display:flex;align-items:center;gap:8px}.fic__payment-icon{font-size:14px;color:#64748b}.fic__payment-amount{font-size:14px;font-weight:700;color:#1e2e4a}.fic__payment-status{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:#64748b;margin-left:auto}.fic__payment-status .pi{font-size:12px}.fic__payment-status--ok{color:#16a34a}.fic__payment-sub{display:flex;align-items:center;gap:6px;font-size:11.5px;color:#94a3b8;padding-left:22px}.fic__dot{color:#cbd5e1}.fic__verified-bar{display:flex;align-items:center;padding:8px 12px;background:#f0fdf4;border-bottom:1px solid #bbf7d0}.fic__verified-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px 3px 7px;background:#16a34a;color:#fff;font-size:11px;font-weight:700;border-radius:20px;letter-spacing:.02em}.fic__verified-pill .pi{font-size:12px}\n"] }]
|
|
72
72
|
}] });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBVXhDLE1BQU0sT0FBTywrQkFBK0I7SUFQNUM7UUFRRSw4REFBOEQ7UUFDOUQsU0FBSSxHQUFNLEtBQUssQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsOERBQThEO1FBQ3RELE9BQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU3RCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUM7Z0JBQUUs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QXZEVSwrQkFBK0I7bUdBQS9CLCtCQUErQix3ZENaNUMsODBNQThJQSw0bkpEdElZLFNBQVMsMEJBQWlCLGFBQWE7OzRGQUl0QywrQkFBK0I7a0JBUDNDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVwcGVyQ2FzZVBpcGUsIExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWcnO1xuaW1wb3J0IHsgUHJvZHVjdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYm9va2luZy50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtZmxpZ2h0LWl0aW5lcmFyeS1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RhZ01vZHVsZSwgVXBwZXJDYXNlUGlwZSwgTG93ZXJDYXNlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JkRmxpZ2h0SXRpbmVyYXJ5Q2FyZENvbXBvbmVudCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGRhdGEgICAgPSBpbnB1dDxhbnk+KG51bGwpO1xuICBwcm9kdWN0ID0gaW5wdXQucmVxdWlyZWQ8UHJvZHVjdFR5cGU+KCk7XG4gIHZlcmlmaWVkID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgYmkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvKTtcblxuICBsZWdzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLmJpKCk7XG4gICAgaWYgKCFkKSByZXR1cm4gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gKGQubGVnX2luZm8gPz8gW10pLm1hcCgobGVnOiBhbnksIGk6IG51bWJlcikgPT4gKHtcbiAgICAgIGRpcmVjdGlvbjogbGVnLkxlZ0RpcmVjdGlvbmFsaXR5IGFzIHN0cmluZyxcbiAgICAgIGFpcmxpbmVOYW1lOiAobGVnLkxlZ0FpcmxpbmVzTmFtZXMgPz8gW10pLmpvaW4oJywgJyksXG4gICAgICBjYWJpbjogbGVnLkxlZ0NhYmlucz8uWzBdPy5OYW1lID8/ICcnLFxuICAgICAgZmFyZUJyYW5kOiBsZWcuZmFyZUJyYW5kPy5uYW1lID8/ICcnLFxuICAgICAgZnJvbTogbGVnLkxlZ0RlcGFydHVyZUFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIHRvOiBsZWcuTGVnQXJyaXZhbEFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIGRlcFRpbWU6IGxlZy5MZWdEZXBhcnR1cmVEYXRlVGltZSBhcyBzdHJpbmcsXG4gICAgICBhcnJUaW1lOiBsZWcuTGVnQXJyaXZhbERhdGVUaW1lIGFzIHN0cmluZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzdG9wczogKGxlZy5TdG9wcyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgc2VnbWVudHM6IChkLmFpcmxpbmVfaW5mbz8uW2ldPy5TZWdtZW50cyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgZHVyYXRpb25TZWdtZW50czogKGQuZHVyYXRpb24/LmxlZ3M/LltpXT8uU2VnbWVudHMgPz8gW10pIGFzIGFueVtdLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcGFzc2VuZ2VycyA9IGNvbXB1dGVkKCgpID0+XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAodGhpcy5iaSgpPy5wYXNzZW5nZXJfaW5mbz8ucGFzc2VuZ2VycyA/PyBbXSkgYXMgYW55W11cbiAgKTtcblxuICBwYXltZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5iaSgpPy5wYXltZW50X3N0YXR1cyk7XG5cbiAgcmVhZG9ubHkgdHlwZUxhYmVsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBBRFQ6ICdBZHVsdCcsIENOTjogJ0NoaWxkJywgSU5GOiAnSW5mYW50JyB9O1xuXG4gIGZtdFRpbWUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1HQicsIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIGR0OyB9XG4gIH1cblxuICBmbXRTaG9ydERhdGUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1HQicsIHsgZGF5OiAnMi1kaWdpdCcsIG1vbnRoOiAnc2hvcnQnIH0pOyB9XG4gICAgY2F0Y2ggeyByZXR1cm4gZHQ7IH1cbiAgfVxuXG4gIGZtdE1pbnMobWluczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobWlucyA9PSBudWxsKSByZXR1cm4gJ+KAlCc7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmljXCI+XG4gIEBpZiAocHJvZHVjdCgpID09PSAnZmxpZ2h0Jykge1xuXG4gICAgPCEtLSDilIDilIAgVmVyaWZpZWQgcGlsbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+XG4gICAgQGlmICh2ZXJpZmllZCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmljX192ZXJpZmllZC1iYXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3ZlcmlmaWVkLXBpbGxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXZlcmlmaWVkXCI+PC9pPiBWZXJpZmllZCB3aXRoIEFpcmxpbmVzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pSA4pSAIExlZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPlxuICAgIEBmb3IgKGxlZyBvZiBsZWdzKCk7IHRyYWNrIGxlZy5kaXJlY3Rpb24gKyAkaW5kZXg7IGxldCBsaSA9ICRpbmRleCkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpY19fbGVnXCIgW2NsYXNzLmZpY19fbGVnLS1yZXR1cm5dPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj5cblxuICAgICAgICA8IS0tIExlZyBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19sZWctZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW2NsYXNzLnBpLWFycm93LXJpZ2h0XT1cImxlZy5kaXJlY3Rpb24gIT09ICdSZXR1cm4nXCIgW2NsYXNzLnBpLWFycm93LWxlZnRdPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj57eyBsZWcuZGlyZWN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1jaGlwc1wiPlxuICAgICAgICAgICAgQGlmIChsZWcuY2FiaW4pIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX2NoaXAgZmljX19jaGlwLS1jYWJpblwiPnt7IGxlZy5jYWJpbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobGVnLmZhcmVCcmFuZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fY2hpcCBmaWNfX2NoaXAtLWZhcmVcIj57eyBsZWcuZmFyZUJyYW5kIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFpcmxpbmUgcm93IC0tPlxuICAgICAgICBAaWYgKGxlZy5haXJsaW5lTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcmxpbmVcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VuZFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IGxlZy5haXJsaW5lTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gUm91dGUgdGltZWxpbmUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3JvdXRlXCI+XG5cbiAgICAgICAgICA8IS0tIE9yaWdpbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWNvZGVcIj57eyBsZWcuZnJvbSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydC10aW1lXCI+e3sgZm10VGltZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtZGF0ZVwiPnt7IGZtdFNob3J0RGF0ZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU2VnbWVudHMgKyBzdG9wcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190aW1lbGluZVwiPlxuXG4gICAgICAgICAgICA8IS0tIFRvcCByb3c6IGFsbCBsYWJlbHMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC10b3BcIj5cbiAgICAgICAgICAgICAgQGZvciAoc2VnIG9mIGxlZy5kdXJhdGlvblNlZ21lbnRzOyB0cmFjayBzZWcuRGVwYXJ0dXJlQWlycG9ydENvZGU7IGxldCBzaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLXNlZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWZsdFwiPnt7IGxlZy5zZWdtZW50c1tzaV0/LkFpcmxpbmVDb2RlIH19e3sgbGVnLnNlZ21lbnRzW3NpXT8uRmxpZ2h0TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWR1clwiPnt7IGZtdE1pbnMoc2VnLlNlZ21lbnRFbGFwc2VkVGltZU1pbnV0ZXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoc2kgPCBsZWcuc3RvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC1zdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19zdG9wLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3N0b3AtY29kZVwiPnt7IGxlZy5zdG9wc1tzaV0uU3RvcEFpcnBvcnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19zdG9wLXNlcFwiPsK3PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fc3RvcC1kdXJcIj57eyBmbXRNaW5zKGxlZy5zdG9wc1tzaV0uTGF5b3ZlckR1cmF0aW9uKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQm90dG9tIHJvdzogc2luZ2xlIGNvbnRpbnVvdXMgbGluZSArIG9uZSBhcnJvdyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLXRyYWNrXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLWxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZW5kIGZpY19fdGwtcGxhbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEZXN0aW5hdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0IGZpY19fYWlycG9ydC0tcmlnaHRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtY29kZVwiPnt7IGxlZy50byB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydC10aW1lXCI+e3sgZm10VGltZShsZWcuYXJyVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtZGF0ZVwiPnt7IGZtdFNob3J0RGF0ZShsZWcuYXJyVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pSA4pSAIFBhc3NlbmdlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPlxuICAgIEBpZiAocGFzc2VuZ2VycygpLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3NlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fc2VjdGlvbi1sYWJlbFwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlcnNcIj48L2k+IFBhc3NlbmdlcnNcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fc2VjdGlvbi1jb3VudFwiPnt7IHBhc3NlbmdlcnMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXgtbGlzdFwiPlxuICAgICAgICAgIEBmb3IgKHAgb2YgcGFzc2VuZ2VycygpOyB0cmFjayBwLnBhc3NlbmdlcklkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4LXRvcFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXgtYmFkZ2UgZmljX19wYXgtYmFkZ2UtLXt7IHAudHlwZSB8IGxvd2VyY2FzZSB9fVwiPnt7IHR5cGVMYWJlbFtwLnR5cGVdID8/IHAudHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF4LW5hbWVcIj57eyBwLm5hbWU/LnByZWZpeCB9fSB7eyBwLm5hbWU/LmdpdmVuTmFtZSB9fSB7eyBwLm5hbWU/LnN1ck5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXgtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgQGlmIChwLmlkZW50aXR5Py5udW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXgtZG9jXCI+PGkgY2xhc3M9XCJwaSBwaS1pZC1jYXJkXCI+PC9pPiB7eyBwLmlkZW50aXR5Py5udW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAocC5lbWFpbCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3BheC1lbWFpbFwiPnt7IHAuZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIOKUgOKUgCBQYXltZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAtLT5cbiAgICBAaWYgKHBheW1lbnQoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF5bWVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXltZW50LW1haW5cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNyZWRpdC1jYXJkIGZpY19fcGF5bWVudC1pY29uXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXltZW50LWFtb3VudFwiPnt7IHBheW1lbnQoKT8uYW1vdW50IH19IHt7IHBheW1lbnQoKT8uY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3BheW1lbnQtc3RhdHVzXCIgW2NsYXNzLmZpY19fcGF5bWVudC1zdGF0dXMtLW9rXT1cInBheW1lbnQoKT8uc3RhdHVzPy5rZXkgPT09ICdTVUNDRVNTJ1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaVwiIFtjbGFzcy5waS1jaGVjay1jaXJjbGVdPVwicGF5bWVudCgpPy5zdGF0dXM/LmtleSA9PT0gJ1NVQ0NFU1MnXCIgW2NsYXNzLnBpLWNsb2NrXT1cInBheW1lbnQoKT8uc3RhdHVzPy5rZXkgIT09ICdTVUNDRVNTJ1wiPjwvaT5cbiAgICAgICAgICAgIHt7IHBheW1lbnQoKT8uc3RhdHVzPy5uYW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChwYXltZW50KCk/Lm1ldGhvZCB8fCBwYXltZW50KCk/LmRhdGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19wYXltZW50LXN1YlwiPlxuICAgICAgICAgICAgQGlmIChwYXltZW50KCk/Lm1ldGhvZCkgeyA8c3Bhbj57eyBwYXltZW50KCk/Lm1ldGhvZCB9fTwvc3Bhbj4gfVxuICAgICAgICAgICAgQGlmIChwYXltZW50KCk/Lm1ldGhvZCAmJiBwYXltZW50KCk/LmRhdGUpIHsgPHNwYW4gY2xhc3M9XCJmaWNfX2RvdFwiPsK3PC9zcGFuPiB9XG4gICAgICAgICAgICBAaWYgKHBheW1lbnQoKT8uZGF0ZSkgeyA8c3Bhbj57eyBwYXltZW50KCk/LmRhdGUgfX08L3NwYW4+IH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQvZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBVXhDLE1BQU0sT0FBTywrQkFBK0I7SUFQNUM7UUFRRSw4REFBOEQ7UUFDOUQsU0FBSSxHQUFNLEtBQUssQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUMzQixZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBZSxDQUFDO1FBQ3hDLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsOERBQThEO1FBQ3RELE9BQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU3RCxTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUM7Z0JBQUUs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QXZEVSwrQkFBK0I7bUdBQS9CLCtCQUErQix3ZENaNUMsbTJNQStJQSwyc0pEdklZLFNBQVMsMEJBQWlCLGFBQWE7OzRGQUl0QywrQkFBK0I7a0JBUDNDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUCxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVwcGVyQ2FzZVBpcGUsIExvd2VyQ2FzZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGFnTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWcnO1xuaW1wb3J0IHsgUHJvZHVjdFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYm9va2luZy50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1zYmQtZmxpZ2h0LWl0aW5lcmFyeS1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RhZ01vZHVsZSwgVXBwZXJDYXNlUGlwZSwgTG93ZXJDYXNlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mbGlnaHQtaXRpbmVyYXJ5LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZmxpZ2h0LWl0aW5lcmFyeS1jYXJkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU2JkRmxpZ2h0SXRpbmVyYXJ5Q2FyZENvbXBvbmVudCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGRhdGEgICAgPSBpbnB1dDxhbnk+KG51bGwpO1xuICBwcm9kdWN0ID0gaW5wdXQucmVxdWlyZWQ8UHJvZHVjdFR5cGU+KCk7XG4gIHZlcmlmaWVkID0gaW5wdXQoZmFsc2UpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgYmkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEoKT8uZGF0YT8uYm9va2luZ19pbmZvKTtcblxuICBsZWdzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGQgPSB0aGlzLmJpKCk7XG4gICAgaWYgKCFkKSByZXR1cm4gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gKGQubGVnX2luZm8gPz8gW10pLm1hcCgobGVnOiBhbnksIGk6IG51bWJlcikgPT4gKHtcbiAgICAgIGRpcmVjdGlvbjogbGVnLkxlZ0RpcmVjdGlvbmFsaXR5IGFzIHN0cmluZyxcbiAgICAgIGFpcmxpbmVOYW1lOiAobGVnLkxlZ0FpcmxpbmVzTmFtZXMgPz8gW10pLmpvaW4oJywgJyksXG4gICAgICBjYWJpbjogbGVnLkxlZ0NhYmlucz8uWzBdPy5OYW1lID8/ICcnLFxuICAgICAgZmFyZUJyYW5kOiBsZWcuZmFyZUJyYW5kPy5uYW1lID8/ICcnLFxuICAgICAgZnJvbTogbGVnLkxlZ0RlcGFydHVyZUFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIHRvOiBsZWcuTGVnQXJyaXZhbEFpcnBvcnRDb2RlIGFzIHN0cmluZyxcbiAgICAgIGRlcFRpbWU6IGxlZy5MZWdEZXBhcnR1cmVEYXRlVGltZSBhcyBzdHJpbmcsXG4gICAgICBhcnJUaW1lOiBsZWcuTGVnQXJyaXZhbERhdGVUaW1lIGFzIHN0cmluZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBzdG9wczogKGxlZy5TdG9wcyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgc2VnbWVudHM6IChkLmFpcmxpbmVfaW5mbz8uW2ldPy5TZWdtZW50cyA/PyBbXSkgYXMgYW55W10sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgZHVyYXRpb25TZWdtZW50czogKGQuZHVyYXRpb24/LmxlZ3M/LltpXT8uU2VnbWVudHMgPz8gW10pIGFzIGFueVtdLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcGFzc2VuZ2VycyA9IGNvbXB1dGVkKCgpID0+XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAodGhpcy5iaSgpPy5wYXNzZW5nZXJfaW5mbz8ucGFzc2VuZ2VycyA/PyBbXSkgYXMgYW55W11cbiAgKTtcblxuICBwYXltZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5iaSgpPy5wYXltZW50X3N0YXR1cyk7XG5cbiAgcmVhZG9ubHkgdHlwZUxhYmVsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBBRFQ6ICdBZHVsdCcsIENOTjogJ0NoaWxkJywgSU5GOiAnSW5mYW50JyB9O1xuXG4gIGZtdFRpbWUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1HQicsIHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIGR0OyB9XG4gIH1cblxuICBmbXRTaG9ydERhdGUoZHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkdCkgcmV0dXJuICfigJQnO1xuICAgIHRyeSB7IHJldHVybiBuZXcgRGF0ZShkdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1HQicsIHsgZGF5OiAnMi1kaWdpdCcsIG1vbnRoOiAnc2hvcnQnIH0pOyB9XG4gICAgY2F0Y2ggeyByZXR1cm4gZHQ7IH1cbiAgfVxuXG4gIGZtdE1pbnMobWluczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAobWlucyA9PSBudWxsKSByZXR1cm4gJ+KAlCc7XG4gICAgcmV0dXJuIGAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmljXCI+XG4gIEBpZiAocHJvZHVjdCgpID09PSAnZmxpZ2h0Jykge1xuXG4gICAgPCEtLSDilIDilIAgVmVyaWZpZWQgcGlsbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+XG4gICAgQGlmICh2ZXJpZmllZCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmljX192ZXJpZmllZC1iYXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3ZlcmlmaWVkLXBpbGxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXZlcmlmaWVkXCI+PC9pPiBWZXJpZmllZCB3aXRoIEFpcmxpbmVzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g4pSA4pSAIExlZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIC0tPlxuICAgIEBmb3IgKGxlZyBvZiBsZWdzKCk7IHRyYWNrIGxlZy5kaXJlY3Rpb24gKyAkaW5kZXg7IGxldCBsaSA9ICRpbmRleCkge1xuICAgICAgPGRpdiBjbGFzcz1cImZpY19fbGVnXCIgW2NsYXNzLmZpY19fbGVnLS1yZXR1cm5dPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj5cblxuICAgICAgICA8IS0tIExlZyBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19sZWctZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpXCIgW2NsYXNzLnBpLWFycm93LXJpZ2h0XT1cImxlZy5kaXJlY3Rpb24gIT09ICdSZXR1cm4nXCIgW2NsYXNzLnBpLWFycm93LWxlZnRdPVwibGVnLmRpcmVjdGlvbiA9PT0gJ1JldHVybidcIj48L2k+XG4gICAgICAgICAgICA8c3Bhbj57eyBsZWcuZGlyZWN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2xlZy1jaGlwc1wiPlxuICAgICAgICAgICAgQGlmIChsZWcuY2FiaW4pIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX2NoaXAgZmljX19jaGlwLS1jYWJpblwiPnt7IGxlZy5jYWJpbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobGVnLmZhcmVCcmFuZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fY2hpcCBmaWNfX2NoaXAtLWZhcmVcIj57eyBsZWcuZmFyZUJyYW5kIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFpcmxpbmUgcm93IC0tPlxuICAgICAgICBAaWYgKGxlZy5haXJsaW5lTmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcmxpbmVcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VuZFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IGxlZy5haXJsaW5lTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gUm91dGUgdGltZWxpbmUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3JvdXRlXCI+XG5cbiAgICAgICAgICA8IS0tIE9yaWdpbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWNvZGVcIj57eyBsZWcuZnJvbSB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydC10aW1lXCI+e3sgZm10VGltZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtZGF0ZVwiPnt7IGZtdFNob3J0RGF0ZShsZWcuZGVwVGltZSkgfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU2VnbWVudHMgKyBzdG9wcyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190aW1lbGluZVwiPlxuXG4gICAgICAgICAgICA8IS0tIFRvcCByb3c6IGFsbCBsYWJlbHMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC10b3BcIj5cbiAgICAgICAgICAgICAgQGZvciAoc2VnIG9mIGxlZy5kdXJhdGlvblNlZ21lbnRzOyB0cmFjayBzZWcuRGVwYXJ0dXJlQWlycG9ydENvZGU7IGxldCBzaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3RsLXNlZ1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWZsdFwiPnt7IGxlZy5zZWdtZW50c1tzaV0/LkFpcmxpbmVDb2RlIH19e3sgbGVnLnNlZ21lbnRzW3NpXT8uRmxpZ2h0TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3RsLWR1clwiPnt7IGZtdE1pbnMoc2VnLlNlZ21lbnRFbGFwc2VkVGltZU1pbnV0ZXMpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoc2kgPCBsZWcuc3RvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC1zdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19zdG9wLWhlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fc3RvcC1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3N0b3AtY29kZVwiPnt7IGxlZy5zdG9wc1tzaV0uU3RvcEFpcnBvcnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3N0b3AtZHVyXCI+e3sgZm10TWlucyhsZWcuc3RvcHNbc2ldLkxheW92ZXJEdXJhdGlvbikgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEJvdHRvbSByb3c6IHNpbmdsZSBjb250aW51b3VzIGxpbmUgKyBvbmUgYXJyb3cgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC10cmFja1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX190bC1saW5lXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VuZCBmaWNfX3RsLXBsYW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRGVzdGluYXRpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fYWlycG9ydCBmaWNfX2FpcnBvcnQtLXJpZ2h0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWNvZGVcIj57eyBsZWcudG8gfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX2FpcnBvcnQtdGltZVwiPnt7IGZtdFRpbWUobGVnLmFyclRpbWUpIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmljX19haXJwb3J0LWRhdGVcIj57eyBmbXRTaG9ydERhdGUobGVnLmFyclRpbWUpIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIOKUgOKUgCBQYXNzZW5nZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAtLT5cbiAgICBAaWYgKHBhc3NlbmdlcnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmljX19zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3NlY3Rpb24tbGFiZWxcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXVzZXJzXCI+PC9pPiBQYXNzZW5nZXJzXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3NlY3Rpb24tY291bnRcIj57eyBwYXNzZW5nZXJzKCkubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4LWxpc3RcIj5cbiAgICAgICAgICBAZm9yIChwIG9mIHBhc3NlbmdlcnMoKTsgdHJhY2sgcC5wYXNzZW5nZXJJZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3BheC10b3BcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF4LWJhZGdlIGZpY19fcGF4LWJhZGdlLS17eyBwLnR5cGUgfCBsb3dlcmNhc2UgfX1cIj57eyB0eXBlTGFiZWxbcC50eXBlXSA/PyBwLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWNfX3BheC1uYW1lXCI+e3sgcC5uYW1lPy5wcmVmaXggfX0ge3sgcC5uYW1lPy5naXZlbk5hbWUgfX0ge3sgcC5uYW1lPy5zdXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF4LWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgIEBpZiAocC5pZGVudGl0eT8ubnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF4LWRvY1wiPjxpIGNsYXNzPVwicGkgcGktaWQtY2FyZFwiPjwvaT4ge3sgcC5pZGVudGl0eT8ubnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKHAuZW1haWwpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXgtZW1haWxcIj57eyBwLmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSDilIDilIAgUGF5bWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgLS0+XG4gICAgQGlmIChwYXltZW50KCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWNfX3BheW1lbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF5bWVudC1tYWluXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jcmVkaXQtY2FyZCBmaWNfX3BheW1lbnQtaWNvblwiPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpY19fcGF5bWVudC1hbW91bnRcIj57eyBwYXltZW50KCk/LmFtb3VudCB9fSB7eyBwYXltZW50KCk/LmN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmljX19wYXltZW50LXN0YXR1c1wiIFtjbGFzcy5maWNfX3BheW1lbnQtc3RhdHVzLS1va109XCJwYXltZW50KCk/LnN0YXR1cz8ua2V5ID09PSAnU1VDQ0VTUydcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicGlcIiBbY2xhc3MucGktY2hlY2stY2lyY2xlXT1cInBheW1lbnQoKT8uc3RhdHVzPy5rZXkgPT09ICdTVUNDRVNTJ1wiIFtjbGFzcy5waS1jbG9ja109XCJwYXltZW50KCk/LnN0YXR1cz8ua2V5ICE9PSAnU1VDQ0VTUydcIj48L2k+XG4gICAgICAgICAgICB7eyBwYXltZW50KCk/LnN0YXR1cz8ubmFtZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAocGF5bWVudCgpPy5tZXRob2QgfHwgcGF5bWVudCgpPy5kYXRlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpY19fcGF5bWVudC1zdWJcIj5cbiAgICAgICAgICAgIEBpZiAocGF5bWVudCgpPy5tZXRob2QpIHsgPHNwYW4+e3sgcGF5bWVudCgpPy5tZXRob2QgfX08L3NwYW4+IH1cbiAgICAgICAgICAgIEBpZiAocGF5bWVudCgpPy5tZXRob2QgJiYgcGF5bWVudCgpPy5kYXRlKSB7IDxzcGFuIGNsYXNzPVwiZmljX19kb3RcIj7Ctzwvc3Bhbj4gfVxuICAgICAgICAgICAgQGlmIChwYXltZW50KCk/LmRhdGUpIHsgPHNwYW4+e3sgcGF5bWVudCgpPy5kYXRlIH19PC9zcGFuPiB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuXG4gIH1cbjwvZGl2PlxuIl19
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { Component, ChangeDetectionStrategy, input, output, signal, inject, DestroyRef, computed, } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { TranslationService } from '../../../../../../shared/services/translation.service';
|
|
4
|
-
import {
|
|
4
|
+
import { HttpEventType, HttpRequest } from '@angular/common/http';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { AlmatarIconModule } from '../../../../../../shared/modules/almatar-icon/almatar-icon.module';
|
|
7
7
|
import { AlmatarHotelAutoCancellationEndpointsEnum } from '../../../../enums/almatar-hotel-auto-cancellation-endpoints.enum';
|
|
8
8
|
import { AlmatarHotelAutoCancellationEndpointsService } from '../../../../services/almatar-hotel-auto-cancellation-endpoints.service';
|
|
9
9
|
import { DialogService } from 'primeng/dynamicdialog';
|
|
10
|
+
import { SBD_HTTP } from '../../../../../../shared/services/sbd-http';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
import * as i1 from "../../../../../../shared/modules/almatar-icon/almatar-icon.module";
|
|
12
13
|
export class AlmatarHotelAutoCancellationNonRefundableRoomComponent {
|
|
13
14
|
constructor() {
|
|
14
|
-
this.http = inject(
|
|
15
|
+
this.http = inject(SBD_HTTP);
|
|
15
16
|
this.destroyRef = inject(DestroyRef);
|
|
16
17
|
this.endpointsService = inject(AlmatarHotelAutoCancellationEndpointsService);
|
|
17
18
|
this.translateService = inject(TranslationService);
|
|
@@ -239,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
239
240
|
type: Component,
|
|
240
241
|
args: [{ selector: 'almatar-hotel-auto-cancellation-non-refundable-room', standalone: true, imports: [CommonModule, AlmatarIconModule], providers: [DialogService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"package-item package-item--non-refundable\"\n>\n <div class=\"package-item__header\">\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n @if (package()?.isCancelled) {\n <span\n class=\"package-item__refund-badge package-item__refund-badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n } @else {\n <span\n class=\"package-item__refund-badge package-item__refund-badge--non-refundable\"\n >\n NON-REFUNDABLE\n </span>\n }\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">\u2022</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{\n group.roomBasis\n }}</span>\n }\n </div>\n }\n </div>\n }\n\n @if (!package()?.isCancelled && !allPackagesNonRefundable()) {\n <div class=\"package-item__non-refundable-content\">\n <div class=\"info-message\">\n <almatar-icon [name]=\"'exclamation-circle'\"> </almatar-icon>\n <p\n class=\"info-message__text\"\n (click)=\"$event.preventDefault(); onOpenCancellationPolicy()\"\n [innerHTML]=\"\n 'We can\\'t process automatic cancellation with this room. Check the <a class="info-message__link">cancellation policy</a> for details'\n \"\n ></p>\n </div>\n\n @if (uploadSuccess()) {\n <div class=\"upload-success\">\n <span class=\"upload-success__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.4697 8.20112C13.7626 7.90822 14.2373 7.90822 14.5302 8.20112C14.8231 8.49401 14.8231 8.96877 14.5302 9.26166L7.53022 16.2617C7.23732 16.5546 6.76256 16.5546 6.46967 16.2617L3.46967 13.2617C3.17678 12.9688 3.17678 12.494 3.46967 12.2011C3.74427 11.9265 4.17899 11.909 4.47358 12.1494L4.53022 12.2011L6.99994 14.6708L13.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n <path\n d=\"M19.4697 8.20112C19.7626 7.90822 20.2373 7.90822 20.5302 8.20112C20.8231 8.49401 20.8231 8.96877 20.5302 9.26166L13.5302 16.2617C13.2639 16.5279 12.8415 16.5556 12.5429 16.3261L11.5429 15.5576L11.4843 15.5078C11.2079 15.2468 11.1686 14.8137 11.4052 14.5058C11.6418 14.198 12.0703 14.1245 12.3935 14.3242L12.457 14.3681L12.9345 14.7353L19.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n </svg>\n </span>\n <div class=\"upload-success__info\">\n <p class=\"upload-success__filename\">{{ filePicked()?.name }}</p>\n <p class=\"upload-success__meta\">\n {{ formatFileSize(filePicked()?.size) }} \u2022\n Uploaded\n </p>\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-success__change-btn\"\n (click)=\"fileInput.click()\"\n >\n Change\n </button>\n </div>\n } @else {\n <div class=\"upload-section\">\n <almatar-icon [name]=\"'arrow-up-on-square'\"></almatar-icon>\n <div style=\"flex: 1\">\n <h5 class=\"upload-section__title\">\n Upload a document to support your request\n </h5>\n <p class=\"upload-section__subtitle\">\n Required to submit and track your request\n </p>\n @if (filePicked() && !uploadSuccess()) {\n <p class=\"upload-section__filename\">\n {{ filePicked()?.name }}\n </p>\n }\n @if (isUploading()) {\n <div class=\"upload-progress\">\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n [style.width.%]=\"uploadProgress()\"\n ></div>\n </div>\n <span class=\"upload-progress__text\"\n >{{ uploadProgress() }}%</span\n >\n </div>\n }\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-section__button\"\n [disabled]=\"isUploading()\"\n (click)=\"fileInput.click()\"\n >\n Upload file\n </button>\n </div>\n }\n\n @if (submitError()) {\n <div class=\"submit-result submit-result--error\">\n <almatar-icon [name]=\"'exclamation-circle'\"></almatar-icon>\n <p class=\"submit-result__text\">{{ submitError() }}</p>\n <button\n type=\"button\"\n class=\"submit-result__retry-btn\"\n (click)=\"onRetry()\"\n >\n Try Again\n </button>\n </div>\n } @else if (!submitSuccess()) {\n <button\n type=\"button\"\n class=\"submit-request-btn\"\n [disabled]=\"!uploadSuccess() || isSubmitting()\"\n (click)=\"onSubmitRequest()\"\n >\n @if (isSubmitting()) {\n Submitting...\n } @else {\n Submit my request\n }\n </button>\n }\n </div>\n }\n</div>\n", styles: [".package-item{display:flex;flex-direction:column;gap:12px;padding:12px;background:#fff;border:1px solid rgb(217,217,222);border-radius:16px;transition:border-color .2s ease,background-color .2s ease}.package-item--non-refundable{cursor:default}.package-item__header{display:flex;align-items:flex-start;gap:8px;width:100%}.package-item__content{flex:1;display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.package-item__info{display:flex;flex-direction:column;gap:4px}.package-item__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;margin:0}.package-item__board-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__refund-badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);text-transform:uppercase;padding:6px 8px;flex-shrink:0;border-radius:999px}.package-item__refund-badge--refundable{color:#15803c;background:#f0fdf5}.package-item__refund-badge--non-refundable{color:#6b7280;background:#f3f4f6}.package-item__refund-badge--cancelled{color:#6b7280;background:#f3f4f6;border:1px solid #d1d5db}.package-item__rooms{display:flex;flex-direction:column;gap:8px}.package-item__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222)}.package-item__room-name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center;gap:0;margin:0}.package-item__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-item__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__non-refundable-content{display:flex;flex-direction:column;gap:8px;width:100%}.info-message{display:flex;gap:8px;padding:12px;background:#f7f7f8;border:1px solid rgb(217,217,222);border-radius:12px;align-items:center}.info-message__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.info-message__text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;line-height:15.6px;margin:0;cursor:pointer}.info-message__text ::ng-deep a{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__text ::ng-deep a:focus,.info-message__text ::ng-deep a:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline!important;cursor:pointer}.info-message__link{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__link:focus,.info-message__link:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.upload-success{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-success__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.upload-success__info{flex:1;min-width:0}.upload-success__filename{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upload-success__meta{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0}.upload-success__change-btn{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-success__change-btn:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-success__change-btn:disabled{opacity:.5;cursor:not-allowed}.upload-section{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-section__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.upload-section__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px}.upload-section__subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0;line-height:1.4}.upload-section__button{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-section__button:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-section__button:disabled{opacity:.5;cursor:not-allowed}.upload-section__filename{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:8px 0 0;font-weight:var(--almatar-font-weight-medium)}.upload-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.upload-progress__bar{flex:1;height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.upload-progress__fill{height:100%;background:#7c3aed;border-radius:3px;transition:width .2s ease}.upload-progress__text{font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#7c3aed;min-width:36px;text-align:right}.submit-request-btn{width:100%;padding:8px 0;background:#f7f7f8;border:none;border-radius:12px;color:#7c3aed;cursor:pointer;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);transition:all .2s ease;letter-spacing:.2px}.submit-request-btn:disabled{background:#f7f7f8;color:#b8b9c1;cursor:not-allowed}.submit-request-btn:disabled:hover{background:#f7f7f8;color:#b8b9c1}.submit-request-btn:hover{background:#f7f7f8;color:#7c3aed}.submit-result{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px}.submit-result--error{background:#fef2f2;border:1px solid rgba(220,38,38,.2);flex-wrap:wrap}.submit-result--error almatar-icon{color:#dc2626}.submit-result__text{flex:1;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;line-height:1.4;color:#dc2626}.submit-result__retry-btn{width:100%;margin-top:8px;padding:8px 16px;background:#dc2626;border:none;border-radius:8px;color:#fff;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease}.submit-result__retry-btn:hover{background:#b91c1c}\n"] }]
|
|
241
242
|
}] });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENB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QUFDLEtBQXlCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDOytHQTNRVSxzREFBc0Q7bUdBQXRELHNEQUFzRCxzaENBUnRELENBQUMsYUFBYSxDQUFDLDBCQ3JDNUIsdzZOQThMQSwyaU5EMUpZLFlBQVksOEJBQUUsaUJBQWlCOzs0RkFTOUIsc0RBQXNEO2tCQVpsRSxTQUFTOytCQUNFLHFEQUFxRCxjQUNuRCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsYUFDL0IsQ0FBQyxhQUFhLENBQUMsbUJBTVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgaW5qZWN0LFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGNvbXB1dGVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVJvb20sXG59IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaS1hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbG1hdGFySWNvbk1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2FsbWF0YXItaWNvbi9hbG1hdGFyLWljb24ubW9kdWxlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuZW51bSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tZW5kcG9pbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5cbmludGVyZmFjZSBJR3JvdXBlZFBhY2thZ2VSb29tIHtcbiAga2V5OiBzdHJpbmc7XG4gIGJlZFR5cGVPclJvb21UeXBlOiBzdHJpbmc7XG4gIHJvb21CYXNpczogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICByb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlUm9vbVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbG1hdGFySWNvbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW0RpYWxvZ1NlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDpcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnNjc3MnLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbk5vblJlZnVuZGFibGVSb29tQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzU2VydmljZSA9IGluamVjdChcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHBhY2thZ2UgPSBpbnB1dC5yZXF1aXJlZDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2U+KCk7XG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzID0gaW5wdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlW10+KFtdKTtcbiAgcmVhZG9ubHkgaG90ZWxJbmZvID0gaW5wdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8gfCBudWxsPihcbiAgICBudWxsLFxuICApO1xuXG4gIC8vIGNvbnN0cnVjdG9yKCl7ZWZmZWN0KCgpID0+IHtcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLnBhY2thZ2UoKSlcbiAgLy8gfSl9XG5cbiAgcmVhZG9ubHkgaG90ZWxJZCA9IGlucHV0PHN0cmluZyB8IG51bWJlcj4oJycpO1xuICByZWFkb25seSBjdXJyZW5jeUNvZGUgPSBpbnB1dDxzdHJpbmc+KCdTQVInKTtcbiAgcmVhZG9ubHkgYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlTG9jYWxDYW5jZWxsYXRpb25Qb2xpY2llcyA9IHRydWU7XG5cbiAgcmVhZG9ubHkgY2xvc2VNb2RhbCA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBub25SZWZ1bmRhYmxlU3VibWl0U3VjY2VzcyA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgcmVhZG9ubHkgdXBsb2FkZWRGaWxlID0gc2lnbmFsPEZpbGUgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgdXBsb2FkZWRGaWxlVXJsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBmaWxlUGlja2VkID0gc2lnbmFsPEZpbGUgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgdXBsb2FkU3VjY2VzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHVwbG9hZFByb2dyZXNzID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IGlzVXBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNTdWJtaXR0aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc3VibWl0U3VjY2VzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN1Ym1pdEVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGdyb3VwZWRSb29tcyA9IGNvbXB1dGVkPElHcm91cGVkUGFja2FnZVJvb21bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJvb21zID0gdGhpcy5wYWNrYWdlKCk/LnJvb21zIHx8IFtdO1xuICAgIGNvbnN0IGdyb3VwTWFwID0gbmV3IE1hcDxzdHJpbmcsIElHcm91cGVkUGFja2FnZVJvb20+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJvb20gb2Ygcm9vbXMpIHtcbiAgICAgIC8vIGNvbnN0IGJlZFR5cGVPclJvb21UeXBlID0gcm9vbS5iZWRUeXBlIHx8IHJvb20ucm9vbVR5cGUgfHwgJyc7XG4gICAgICBjb25zdCBiZWRUeXBlT3JSb29tVHlwZSA9IHJvb20/LnJvb21OYW1lO1xuICAgICAgY29uc3Qgcm9vbUJhc2lzID0gcm9vbS5yb29tQmFzaXMgfHwgJyc7XG4gICAgICBjb25zdCBrZXkgPSBgJHtiZWRUeXBlT3JSb29tVHlwZX18fHwke3Jvb21CYXNpc31gO1xuXG4gICAgICBpZiAoZ3JvdXBNYXAuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cE1hcC5nZXQoa2V5KSE7XG4gICAgICAgIGdyb3VwLmNvdW50Kys7XG4gICAgICAgIGdyb3VwLnJvb21zLnB1c2gocm9vbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cE1hcC5zZXQoa2V5LCB7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGJlZFR5cGVPclJvb21UeXBlLFxuICAgICAgICAgIHJvb21CYXNpcyxcbiAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICByb29tczogW3Jvb21dLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cE1hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcbiAgICAgIHRoaXMuZmlsZVBpY2tlZC5zZXQoZmlsZSk7XG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGxvYWRGaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLmlzVXBsb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgwKTtcbiAgICB0aGlzLnVwbG9hZFN1Y2Nlc3Muc2V0KGZhbHNlKTtcbiAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQobnVsbCk7XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuXG4gICAgY29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KFxuICAgICAgJ1BPU1QnLFxuICAgICAgdGhpcy5lbmRwb2ludHNTZXJ2aWNlLnJlc29sdmVFbmRwb2ludChcbiAgICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0udXBsb2FkQXR0YWNobWVudCxcbiAgICAgICksXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHtcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAucmVxdWVzdDx7IGRhdGE6IHsgdXJsOiBzdHJpbmcgfSB9PihyZXEpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcyAmJiBldmVudC50b3RhbCkge1xuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCgxMDAgKiBldmVudC5sb2FkZWQpIC8gZXZlbnQudG90YWwpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQocHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMTAwKTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkU3VjY2Vzcy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZS5zZXQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQoZXZlbnQuYm9keT8uZGF0YT8udXJsID8/IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5maWxlUGlja2VkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3VibWl0UmVxdWVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVwbG9hZGVkRmlsZVVybCgpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuc3VibWl0RXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc3VibWl0U3VjY2Vzcy5zZXQoZmFsc2UpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAnZW4nO1xuXG4gICAgdGhpcy5lbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24odGhpcy5wYWNrYWdlKCkucGFja2FnZUlkLCB1cmwsIGxhbmd1YWdlKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXRTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQodGhpcy5wYWNrYWdlKCkucGFja2FnZU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdEVycm9yLnNldChlcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCByZXF1ZXN0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uUmV0cnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5vblN1Ym1pdFJlcXVlc3QoKTtcbiAgfVxuXG4gIG9uT3BlbkNhbmNlbGxhdGlvblBvbGljeSgpOiB2b2lkIHtcbiAgICBjb25zdCBob3RlbEluZm9EYXRhID0gdGhpcy5ob3RlbEluZm8oKTtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSB0aGlzLmN1cnJlbmN5Q29kZSgpO1xuXG4gICAgLy8gVXNlIGFsbCBwYWNrYWdlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3VycmVudCBwYWNrYWdlXG4gICAgY29uc3QgcGFja2FnZXNUb1Nob3cgPVxuICAgICAgdGhpcy5hbGxQYWNrYWdlcygpLmxlbmd0aCA+IDAgPyB0aGlzLmFsbFBhY2thZ2VzKCkgOiBbdGhpcy5wYWNrYWdlKCldO1xuXG4gICAgLy8gVHJhbnNmb3JtIGFsbCBwYWNrYWdlcyB3aXRoIHRoZWlyIGNhbmNlbGxhdGlvbiBwb2xpY2llc1xuICAgIGNvbnN0IHBhY2thZ2VzRm9yUG9wdXAgPSBwYWNrYWdlc1RvU2hvdy5tYXAoKHBrZykgPT4ge1xuICAgICAgLy8gVHJhbnNmb3JtIGNhbmNlbGxhdGlvbiBwb2xpY2llcyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IG1hcENhbmNlbGxhdGlvblBvbGljaWVzXG4gICAgICBjb25zdCByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyA9IChwa2cuY2FuY2VsbGF0aW9uUG9saWNpZXMgfHwgW10pLm1hcChcbiAgICAgICAgKHBvbGljeSkgPT4gKHtcbiAgICAgICAgICBkYXRlRnJvbTogcG9saWN5LmZyb21EYXRlLFxuICAgICAgICAgIGRhdGVUbzogcG9saWN5LnRvRGF0ZSxcbiAgICAgICAgICBjdXJyZW5jeUlzb0NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBmaW5hbFByaWNlOiBwb2xpY3kucGVuYWx0eVZhbHVlLFxuICAgICAgICAgIHJlZnVuZGFiaWxpdHlUeXBlOlxuICAgICAgICAgICAgcG9saWN5LnBlbmFsdHlUeXBlID09PSAnRnVsbFJlZnVuZGVkJ1xuICAgICAgICAgICAgICA/ICdGdWxsUmVmdW5kZWQnXG4gICAgICAgICAgICAgIDogcG9saWN5LnBlbmFsdHlUeXBlID09PSAnUGVyY2VudGFnZScgfHxcbiAgICAgICAgICAgICAgICAgIHBvbGljeS5wZW5hbHR5VHlwZSA9PT0gJ0Ftb3VudCdcbiAgICAgICAgICAgICAgICA/ICdQYXJ0aWFsUmVmdW5kZWQnXG4gICAgICAgICAgICAgICAgOiAnTm9uUmVmdW5kZWQnLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBvbmUgcG9saWN5IGV4aXN0c1xuICAgICAgaWYgKHJhd0NhbmNlbGxhdGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYXdDYW5jZWxsYXRpb25Qb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICBkYXRlRnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgICAgICBkYXRlVG86IGhvdGVsSW5mb0RhdGE/LmNoZWNrT3V0LFxuICAgICAgICAgIGN1cnJlbmN5SXNvQ29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIGZpbmFsUHJpY2U6IHBrZy5jYW5jZWxsYXRpb25GZWUgfHwgMCxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5VHlwZTogcGtnLmlzUmVmdW5kYWJsZSA/ICdSZWZ1bmRhYmxlJyA6ICdOb25SZWZ1bmRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBwYWNrYWdlIGRhdGEgd2l0aCBhbGwgcmVxdWlyZWQgZmllbGRzXG4gICAgICBjb25zdCByZW1hcmtzID1cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MgPz9cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5DYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wa2csXG4gICAgICAgIGNhbmNlbGxhdGlvblBvbGljaWVzOiByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyxcbiAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlID8/IHBrZy5yZWZ1bmRhYmlsaXR5ID8/IGZhbHNlLFxuICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIGZpbmFsUHJpY2U6IHBrZy5yb29tQW1vdW50LFxuICAgICAgICBib29raW5nUmVtYXJrczogcmVtYXJrcyxcbiAgICAgICAgY2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzOiByZW1hcmtzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhcnRJbmZvID0ge1xuICAgICAgcGFja2FnZXM6IHBhY2thZ2VzRm9yUG9wdXAsXG4gICAgICBmcm9tRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIGRhdGVfZnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIHRvRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tPdXQsXG4gICAgICBkYXRlX3RvOiBob3RlbEluZm9EYXRhPy5jaGVja091dCxcbiAgICAgIGFsbXRhYXJIb3RlbElkOiB0aGlzLmhvdGVsSWQoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbGFuZyA9ICdlbic7XG4gICAgY29uc3QgZm9ybWF0RGF0ZSA9XG4gICAgICBsYW5nID09PSAnZW4nXG4gICAgICAgID8gJ2RkZGQgRG8gb2YgTU1NTSBZWVlZIC0gaGg6bW0gQSBbR01UXSdcbiAgICAgICAgOiAnZGRkZCAsIEREIE1NTU0gWVlZWSAtIGhoOm1tIEEgW0dNVF0nO1xuXG4gICAgLy8gVE9ETzogRml4IGltcG9ydCBwYXRoIGZvciBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudFxuICAgIC8vIGltcG9ydCgnbGlicy9mZWF0dXJlcy9zcmMvbGliL2ZlYXR1cmVzL2hvdGVscy9zaGFyZWQvbW9kdWxlcy9ob3RlbC1ib29raW5nLWluZm9ybWF0aW9uL2NvbXBvbmVudHMvYm9va2luZy1zdW1tYXJ5L2NvbXBvbmVudHMvY2FuY2VsbGF0aW9uLXBvbGljeS1wb3B1cC9jYW5jZWxsYXRpb24tcG9saWN5LnBvcHVwLmNvbXBvbmVudCcpLnRoZW4oXG4gICAgLy8gICAoeyBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdIT1RFTC5jYW5jZWxsYXRpb24tcG9saWN5JyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCBub3QgYXZhaWxhYmxlIC0gaW1wb3J0IHBhdGggbmVlZHMgdG8gYmUgZml4ZWQnKTtcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgLy8gICBoZWFkZXIsXG4gICAgICAgIC8vICAgZGF0YToge1xuICAgICAgICAvLyAgICAgY2FydEluZm8sXG4gICAgICAgIC8vICAgICBjdXJyZW50Q3VycmVuY3lPYmo6IHtcbiAgICAgICAgLy8gICAgICAgY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgICBjdXJyZW5jeTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIGZvcm1hdERhdGUsXG4gICAgICAgIC8vICAgICBob3RlbERldGFpbHM6IHtcbiAgICAgICAgLy8gICAgICAgaG90ZWxOYW1lOiBob3RlbEluZm9EYXRhPy5ob3RlbE5hbWUsXG4gICAgICAgIC8vICAgICAgIHBheW1lbnRPcHRpb246IG51bGwsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgc3R5bGVDbGFzczogJ2NhbmNlbGxhdGlvbi1wb2xpY3ktZGlhbG9nJyxcbiAgICAgICAgLy8gICBjb250ZW50U3R5bGU6IHsgb3ZlcmZsb3c6ICdhdXRvJyB9LFxuICAgICAgICAvLyAgIGJhc2VaSW5kZXg6IDEwMDAwLFxuICAgICAgICAvLyAgIG1heGltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICBzdHlsZTogeyB3aWR0aDogJzYwMHB4JywgbWF4V2lkdGg6ICc5MCUnIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgLy99LFxuICAgIC8vKTtcbiAgfVxuXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkge1xuICAgICAgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGJ5dGVzIC8gMTAyNCl9IEtCYDtcbiAgICB9XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9IE1CYDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInBhY2thZ2UtaXRlbSBwYWNrYWdlLWl0ZW0tLW5vbi1yZWZ1bmRhYmxlXCJcbj5cbiAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9faW5mb1wiPlxuICAgICAgICA8aDQgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX25hbWVcIj57eyBwYWNrYWdlKCkucGFja2FnZU5hbWUgfX08L2g0PlxuICAgICAgICBAaWYgKHBhY2thZ2UoKS5ib2FyZEJhc2lzKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2JvYXJkLWJhc2lzXCI+e3tcbiAgICAgICAgICAgIHBhY2thZ2UoKS5ib2FyZEJhc2lzXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHBhY2thZ2UoKT8uaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcmVmdW5kLWJhZGdlIHBhY2thZ2UtaXRlbV9fcmVmdW5kLWJhZGdlLS1jYW5jZWxsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgUFJFVklPVVMgQ0FOQ0VMTEFUSU9OXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UgcGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UtLW5vbi1yZWZ1bmRhYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIE5PTi1SRUZVTkRBQkxFXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgICBAaWYgKGdyb3VwZWRSb29tcygpLmxlbmd0aCkge1xuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcm9vbXNcIj5cbiAgICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBlZFJvb21zKCk7IHRyYWNrIGk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcm9vbVwiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tLW5hbWVcIj5cbiAgICAgICAgICAgICAgQGlmIChncm91cC5jb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICB7eyBncm91cC5jb3VudCB9fXhcbiAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmJlZFR5cGVPclJvb21UeXBlKSB7XG4gICAgICAgICAgICAgICAgICB7eyBncm91cC5iZWRUeXBlT3JSb29tVHlwZSB9fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgUm9vbVxuICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgQGlmIChncm91cC5iZWRUeXBlT3JSb29tVHlwZSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3NlcGFyYXRvclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmJlZFR5cGVPclJvb21UeXBlIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgQGlmIChncm91cC5yb29tQmFzaXMpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3Jvb20tYmFzaXNcIj57e1xuICAgICAgICAgICAgICAgIGdyb3VwLnJvb21CYXNpc1xuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICghcGFja2FnZSgpPy5pc0NhbmNlbGxlZCAmJiAhYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX25vbi1yZWZ1bmRhYmxlLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tbWVzc2FnZVwiPlxuICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2V4Y2xhbWF0aW9uLWNpcmNsZSdcIj4gPC9hbG1hdGFyLWljb24+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGNsYXNzPVwiaW5mby1tZXNzYWdlX190ZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgb25PcGVuQ2FuY2VsbGF0aW9uUG9saWN5KClcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgJ1dlIGNhblxcJ3QgcHJvY2VzcyBhdXRvbWF0aWMgY2FuY2VsbGF0aW9uIHdpdGggdGhpcyByb29tLiBDaGVjayB0aGUgPGEgY2xhc3M9JnF1b3Q7aW5mby1tZXNzYWdlX19saW5rJnF1b3Q7PmNhbmNlbGxhdGlvbiBwb2xpY3k8L2E+IGZvciBkZXRhaWxzJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHVwbG9hZFN1Y2Nlc3MoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19faWNvblwiPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwiTTEzLjQ2OTcgOC4yMDExMkMxMy43NjI2IDcuOTA4MjIgMTQuMjM3MyA3LjkwODIyIDE0LjUzMDIgOC4yMDExMkMxNC44MjMxIDguNDk0MDEgMTQuODIzMSA4Ljk2ODc3IDE0LjUzMDIgOS4yNjE2Nkw3LjUzMDIyIDE2LjI2MTdDNy4yMzczMiAxNi41NTQ2IDYuNzYyNTYgMTYuNTU0NiA2LjQ2OTY3IDE2LjI2MTdMMy40Njk2NyAxMy4yNjE3QzMuMTc2NzggMTIuOTY4OCAzLjE3Njc4IDEyLjQ5NCAzLjQ2OTY3IDEyLjIwMTFDMy43NDQyNyAxMS45MjY1IDQuMTc4OTkgMTEuOTA5IDQuNDczNTggMTIuMTQ5NEw0LjUzMDIyIDEyLjIwMTFMNi45OTk5NCAxNC42NzA4TDEzLjQ2OTcgOC4yMDExMlpcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxQjFBMUZcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNDY5NyA4LjIwMTEyQzE5Ljc2MjYgNy45MDgyMiAyMC4yMzczIDcuOTA4MjIgMjAuNTMwMiA4LjIwMTEyQzIwLjgyMzEgOC40OTQwMSAyMC44MjMxIDguOTY4NzcgMjAuNTMwMiA5LjI2MTY2TDEzLjUzMDIgMTYuMjYxN0MxMy4yNjM5IDE2LjUyNzkgMTIuODQxNSAxNi41NTU2IDEyLjU0MjkgMTYuMzI2MUwxMS41NDI5IDE1LjU1NzZMMTEuNDg0MyAxNS41MDc4QzExLjIwNzkgMTUuMjQ2OCAxMS4xNjg2IDE0LjgxMzcgMTEuNDA1MiAxNC41MDU4QzExLjY0MTggMTQuMTk4IDEyLjA3MDMgMTQuMTI0NSAxMi4zOTM1IDE0LjMyNDJMMTIuNDU3IDE0LjM2ODFMMTIuOTM0NSAxNC43MzUzTDE5LjQ2OTcgOC4yMDExMlpcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxQjFBMUZcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19pbmZvXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX2ZpbGVuYW1lXCI+e3sgZmlsZVBpY2tlZCgpPy5uYW1lIH19PC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19tZXRhXCI+XG4gICAgICAgICAgICAgICAge3sgZm9ybWF0RmlsZVNpemUoZmlsZVBpY2tlZCgpPy5zaXplKSB9fSDigKJcbiAgICAgICAgICAgICAgICBVcGxvYWRlZFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwuanBnLC5qcGVnLC5wbmcsLmRvYywuZG9jeFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19fY2hhbmdlLWJ0blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENoYW5nZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvblwiPlxuICAgICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInYXJyb3ctdXAtb24tc3F1YXJlJ1wiPjwvYWxtYXRhci1pY29uPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDFcIj5cbiAgICAgICAgICAgICAgPGg1IGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgVXBsb2FkIGEgZG9jdW1lbnQgdG8gc3VwcG9ydCB5b3VyIHJlcXVlc3RcbiAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbl9fc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICBSZXF1aXJlZCB0byBzdWJtaXQgYW5kIHRyYWNrIHlvdXIgcmVxdWVzdFxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIEBpZiAoZmlsZVBpY2tlZCgpICYmICF1cGxvYWRTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1zZWN0aW9uX19maWxlbmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgZmlsZVBpY2tlZCgpPy5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtcHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtcHJvZ3Jlc3NfX2JhclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtcHJvZ3Jlc3NfX2ZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInVwbG9hZFByb2dyZXNzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkLXByb2dyZXNzX190ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHVwbG9hZFByb2dyZXNzKCkgfX0lPC9zcGFuXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5qcGcsLmpwZWcsLnBuZywuZG9jLC5kb2N4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1zZWN0aW9uX19idXR0b25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNVcGxvYWRpbmcoKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVwbG9hZCBmaWxlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoc3VibWl0RXJyb3IoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJtaXQtcmVzdWx0IHN1Ym1pdC1yZXN1bHQtLWVycm9yXCI+XG4gICAgICAgICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIidleGNsYW1hdGlvbi1jaXJjbGUnXCI+PC9hbG1hdGFyLWljb24+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInN1Ym1pdC1yZXN1bHRfX3RleHRcIj57eyBzdWJtaXRFcnJvcigpIH19PC9wPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdWJtaXQtcmVzdWx0X19yZXRyeS1idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25SZXRyeSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVHJ5IEFnYWluXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSBpZiAoIXN1Ym1pdFN1Y2Nlc3MoKSkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzdWJtaXQtcmVxdWVzdC1idG5cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF1cGxvYWRTdWNjZXNzKCkgfHwgaXNTdWJtaXR0aW5nKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0UmVxdWVzdCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzU3VibWl0dGluZygpKSB7XG4gICAgICAgICAgICAgIFN1Ym1pdHRpbmcuLi5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBTdWJtaXQgbXkgcmVxdWVzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cbiJdfQ==
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENB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STtRQUNOLElBQUk7SUFDTixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXlCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDOytHQTNRVSxzREFBc0Q7bUdBQXRELHNEQUFzRCxzaENBUnRELENBQUMsYUFBYSxDQUFDLDBCQ3RDNUIsdzZOQThMQSwyaU5EekpZLFlBQVksOEJBQUUsaUJBQWlCOzs0RkFTOUIsc0RBQXNEO2tCQVpsRSxTQUFTOytCQUNFLHFEQUFxRCxjQUNuRCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsYUFDL0IsQ0FBQyxhQUFhLENBQUMsbUJBTVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgaW5qZWN0LFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGNvbXB1dGVkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwRXZlbnRUeXBlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVJvb20sXG59IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaS1hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbG1hdGFySWNvbk1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2FsbWF0YXItaWNvbi9hbG1hdGFyLWljb24ubW9kdWxlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuZW51bSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tZW5kcG9pbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBTQkRfSFRUUCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zYmQtaHR0cCc7XG5cbmludGVyZmFjZSBJR3JvdXBlZFBhY2thZ2VSb29tIHtcbiAga2V5OiBzdHJpbmc7XG4gIGJlZFR5cGVPclJvb21UeXBlOiBzdHJpbmc7XG4gIHJvb21CYXNpczogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICByb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlUm9vbVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbG1hdGFySWNvbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW0RpYWxvZ1NlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDpcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnNjc3MnLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbk5vblJlZnVuZGFibGVSb29tQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KFNCRF9IVFRQKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UsXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcblxuICByZWFkb25seSBwYWNrYWdlID0gaW5wdXQucmVxdWlyZWQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlPigpO1xuICByZWFkb25seSBhbGxQYWNrYWdlcyA9IGlucHV0PElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IGlucHV0PElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvIHwgbnVsbD4oXG4gICAgbnVsbCxcbiAgKTtcblxuICAvLyBjb25zdHJ1Y3Rvcigpe2VmZmVjdCgoKSA9PiB7XG4gIC8vICAgY29uc29sZS5sb2codGhpcy5wYWNrYWdlKCkpXG4gIC8vIH0pfVxuXG4gIHJlYWRvbmx5IGhvdGVsSWQgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcbiAgcmVhZG9ubHkgY3VycmVuY3lDb2RlID0gaW5wdXQ8c3RyaW5nPignU0FSJyk7XG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzTm9uUmVmdW5kYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVzZUxvY2FsQ2FuY2VsbGF0aW9uUG9saWNpZXMgPSB0cnVlO1xuXG4gIHJlYWRvbmx5IGNsb3NlTW9kYWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IHVwbG9hZGVkRmlsZSA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHVwbG9hZGVkRmlsZVVybCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgZmlsZVBpY2tlZCA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHVwbG9hZFN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBpc1VwbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN1Ym1pdFN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzdWJtaXRFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBncm91cGVkUm9vbXMgPSBjb21wdXRlZDxJR3JvdXBlZFBhY2thZ2VSb29tW10+KCgpID0+IHtcbiAgICBjb25zdCByb29tcyA9IHRoaXMucGFja2FnZSgpPy5yb29tcyB8fCBbXTtcbiAgICBjb25zdCBncm91cE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJR3JvdXBlZFBhY2thZ2VSb29tPigpO1xuXG4gICAgZm9yIChjb25zdCByb29tIG9mIHJvb21zKSB7XG4gICAgICAvLyBjb25zdCBiZWRUeXBlT3JSb29tVHlwZSA9IHJvb20uYmVkVHlwZSB8fCByb29tLnJvb21UeXBlIHx8ICcnO1xuICAgICAgY29uc3QgYmVkVHlwZU9yUm9vbVR5cGUgPSByb29tPy5yb29tTmFtZTtcbiAgICAgIGNvbnN0IHJvb21CYXNpcyA9IHJvb20ucm9vbUJhc2lzIHx8ICcnO1xuICAgICAgY29uc3Qga2V5ID0gYCR7YmVkVHlwZU9yUm9vbVR5cGV9fHx8JHtyb29tQmFzaXN9YDtcblxuICAgICAgaWYgKGdyb3VwTWFwLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBNYXAuZ2V0KGtleSkhO1xuICAgICAgICBncm91cC5jb3VudCsrO1xuICAgICAgICBncm91cC5yb29tcy5wdXNoKHJvb20pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBNYXAuc2V0KGtleSwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBiZWRUeXBlT3JSb29tVHlwZSxcbiAgICAgICAgICByb29tQmFzaXMsXG4gICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgcm9vbXM6IFtyb29tXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBNYXAudmFsdWVzKCkpO1xuICB9KTtcblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbMF07XG4gICAgICB0aGlzLmZpbGVQaWNrZWQuc2V0KGZpbGUpO1xuICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5pc1VwbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRlZEZpbGVVcmwuc2V0KG51bGwpO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChcbiAgICAgICdQT1NUJyxcbiAgICAgIHRoaXMuZW5kcG9pbnRzU2VydmljZS5yZXNvbHZlRW5kcG9pbnQoXG4gICAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLnVwbG9hZEF0dGFjaG1lbnQsXG4gICAgICApLFxuICAgICAgZm9ybURhdGEsXG4gICAgICB7XG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuaHR0cFxuICAgICAgLnJlcXVlc3Q8eyBkYXRhOiB7IHVybDogc3RyaW5nIH0gfT4ocmVxKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MgJiYgZXZlbnQudG90YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KHByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDEwMCk7XG4gICAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFN1Y2Nlc3Muc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGUuc2V0KGZpbGUpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVVcmwuc2V0KGV2ZW50LmJvZHk/LmRhdGE/LnVybCA/PyBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1VwbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDApO1xuICAgICAgICAgIHRoaXMudXBsb2FkU3VjY2Vzcy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZmlsZVBpY2tlZC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVVcmwuc2V0KG51bGwpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBvblN1Ym1pdFJlcXVlc3QoKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdGhpcy51cGxvYWRlZEZpbGVVcmwoKTtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLnN1Ym1pdEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLnN1Ym1pdFN1Y2Nlc3Muc2V0KGZhbHNlKTtcblxuICAgIGNvbnN0IGxhbmd1YWdlID0gJ2VuJztcblxuICAgIHRoaXMuZW5kcG9pbnRzU2VydmljZVxuICAgICAgLnByb2Nlc3NOb25SZWZ1bmRhYmxlQ2FuY2VsbGF0aW9uKHRoaXMucGFja2FnZSgpLnBhY2thZ2VJZCwgdXJsLCBsYW5ndWFnZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuc3VibWl0U3VjY2Vzcy5zZXQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5ub25SZWZ1bmRhYmxlU3VibWl0U3VjY2Vzcy5lbWl0KHRoaXMucGFja2FnZSgpLnBhY2thZ2VOYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXRFcnJvci5zZXQoZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzdWJtaXQgcmVxdWVzdCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBvblJldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuc3VibWl0RXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMub25TdWJtaXRSZXF1ZXN0KCk7XG4gIH1cblxuICBvbk9wZW5DYW5jZWxsYXRpb25Qb2xpY3koKTogdm9pZCB7XG4gICAgY29uc3QgaG90ZWxJbmZvRGF0YSA9IHRoaXMuaG90ZWxJbmZvKCk7XG4gICAgY29uc3QgY3VycmVuY3lDb2RlID0gdGhpcy5jdXJyZW5jeUNvZGUoKTtcblxuICAgIC8vIFVzZSBhbGwgcGFja2FnZXMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGN1cnJlbnQgcGFja2FnZVxuICAgIGNvbnN0IHBhY2thZ2VzVG9TaG93ID1cbiAgICAgIHRoaXMuYWxsUGFja2FnZXMoKS5sZW5ndGggPiAwID8gdGhpcy5hbGxQYWNrYWdlcygpIDogW3RoaXMucGFja2FnZSgpXTtcblxuICAgIC8vIFRyYW5zZm9ybSBhbGwgcGFja2FnZXMgd2l0aCB0aGVpciBjYW5jZWxsYXRpb24gcG9saWNpZXNcbiAgICBjb25zdCBwYWNrYWdlc0ZvclBvcHVwID0gcGFja2FnZXNUb1Nob3cubWFwKChwa2cpID0+IHtcbiAgICAgIC8vIFRyYW5zZm9ybSBjYW5jZWxsYXRpb24gcG9saWNpZXMgdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBieSBtYXBDYW5jZWxsYXRpb25Qb2xpY2llc1xuICAgICAgY29uc3QgcmF3Q2FuY2VsbGF0aW9uUG9saWNpZXMgPSAocGtnLmNhbmNlbGxhdGlvblBvbGljaWVzIHx8IFtdKS5tYXAoXG4gICAgICAgIChwb2xpY3kpID0+ICh7XG4gICAgICAgICAgZGF0ZUZyb206IHBvbGljeS5mcm9tRGF0ZSxcbiAgICAgICAgICBkYXRlVG86IHBvbGljeS50b0RhdGUsXG4gICAgICAgICAgY3VycmVuY3lJc29Db2RlOiBjdXJyZW5jeUNvZGUsXG4gICAgICAgICAgZmluYWxQcmljZTogcG9saWN5LnBlbmFsdHlWYWx1ZSxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5VHlwZTpcbiAgICAgICAgICAgIHBvbGljeS5wZW5hbHR5VHlwZSA9PT0gJ0Z1bGxSZWZ1bmRlZCdcbiAgICAgICAgICAgICAgPyAnRnVsbFJlZnVuZGVkJ1xuICAgICAgICAgICAgICA6IHBvbGljeS5wZW5hbHR5VHlwZSA9PT0gJ1BlcmNlbnRhZ2UnIHx8XG4gICAgICAgICAgICAgICAgICBwb2xpY3kucGVuYWx0eVR5cGUgPT09ICdBbW91bnQnXG4gICAgICAgICAgICAgICAgPyAnUGFydGlhbFJlZnVuZGVkJ1xuICAgICAgICAgICAgICAgIDogJ05vblJlZnVuZGVkJyxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICAvLyBFbnN1cmUgYXQgbGVhc3Qgb25lIHBvbGljeSBleGlzdHNcbiAgICAgIGlmIChyYXdDYW5jZWxsYXRpb25Qb2xpY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmF3Q2FuY2VsbGF0aW9uUG9saWNpZXMucHVzaCh7XG4gICAgICAgICAgZGF0ZUZyb206IGhvdGVsSW5mb0RhdGE/LmNoZWNrSW4sXG4gICAgICAgICAgZGF0ZVRvOiBob3RlbEluZm9EYXRhPy5jaGVja091dCxcbiAgICAgICAgICBjdXJyZW5jeUlzb0NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBmaW5hbFByaWNlOiBwa2cuY2FuY2VsbGF0aW9uRmVlIHx8IDAsXG4gICAgICAgICAgcmVmdW5kYWJpbGl0eVR5cGU6IHBrZy5pc1JlZnVuZGFibGUgPyAnUmVmdW5kYWJsZScgOiAnTm9uUmVmdW5kZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgcGFja2FnZSBkYXRhIHdpdGggYWxsIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgY29uc3QgcmVtYXJrcyA9XG4gICAgICAgIChwa2cgYXMgYW55KT8uY2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzID8/XG4gICAgICAgIChwa2cgYXMgYW55KT8uQ2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGtnLFxuICAgICAgICBjYW5jZWxsYXRpb25Qb2xpY2llczogcmF3Q2FuY2VsbGF0aW9uUG9saWNpZXMsXG4gICAgICAgIGlzUmVmdW5kYWJsZTogcGtnLmlzUmVmdW5kYWJsZSA/PyBwa2cucmVmdW5kYWJpbGl0eSA/PyBmYWxzZSxcbiAgICAgICAgcmVmdW5kYWJsZVVudGlsOiBwa2cucmVmdW5kYWJsZVVudGlsLFxuICAgICAgICBjdXJyZW5jeTogY3VycmVuY3lDb2RlLFxuICAgICAgICBmaW5hbFByaWNlOiBwa2cucm9vbUFtb3VudCxcbiAgICAgICAgYm9va2luZ1JlbWFya3M6IHJlbWFya3MsXG4gICAgICAgIGNhbmNlbGxhdGlvblBvbGljaWVzUmVtYXJrczogcmVtYXJrcyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBjYXJ0SW5mbyA9IHtcbiAgICAgIHBhY2thZ2VzOiBwYWNrYWdlc0ZvclBvcHVwLFxuICAgICAgZnJvbURhdGU6IGhvdGVsSW5mb0RhdGE/LmNoZWNrSW4sXG4gICAgICBkYXRlX2Zyb206IGhvdGVsSW5mb0RhdGE/LmNoZWNrSW4sXG4gICAgICB0b0RhdGU6IGhvdGVsSW5mb0RhdGE/LmNoZWNrT3V0LFxuICAgICAgZGF0ZV90bzogaG90ZWxJbmZvRGF0YT8uY2hlY2tPdXQsXG4gICAgICBhbG10YWFySG90ZWxJZDogdGhpcy5ob3RlbElkKCksXG4gICAgfTtcblxuICAgIGNvbnN0IGxhbmcgPSAnZW4nO1xuICAgIGNvbnN0IGZvcm1hdERhdGUgPVxuICAgICAgbGFuZyA9PT0gJ2VuJ1xuICAgICAgICA/ICdkZGRkIERvIG9mIE1NTU0gWVlZWSAtIGhoOm1tIEEgW0dNVF0nXG4gICAgICAgIDogJ2RkZGQgLCBERCBNTU1NIFlZWVkgLSBoaDptbSBBIFtHTVRdJztcblxuICAgIC8vIFRPRE86IEZpeCBpbXBvcnQgcGF0aCBmb3IgQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnRcbiAgICAvLyBpbXBvcnQoJ2xpYnMvZmVhdHVyZXMvc3JjL2xpYi9mZWF0dXJlcy9ob3RlbHMvc2hhcmVkL21vZHVsZXMvaG90ZWwtYm9va2luZy1pbmZvcm1hdGlvbi9jb21wb25lbnRzL2Jvb2tpbmctc3VtbWFyeS9jb21wb25lbnRzL2NhbmNlbGxhdGlvbi1wb2xpY3ktcG9wdXAvY2FuY2VsbGF0aW9uLXBvbGljeS5wb3B1cC5jb21wb25lbnQnKS50aGVuKFxuICAgIC8vICAgKHsgQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnQgfSkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAnSE9URUwuY2FuY2VsbGF0aW9uLXBvbGljeScsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUud2FybignQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnQgbm90IGF2YWlsYWJsZSAtIGltcG9ydCBwYXRoIG5lZWRzIHRvIGJlIGZpeGVkJyk7XG4gICAgICAgIC8vIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENhbmNlbGxhdGlvblBvbGljeVBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIC8vICAgaGVhZGVyLFxuICAgICAgICAvLyAgIGRhdGE6IHtcbiAgICAgICAgLy8gICAgIGNhcnRJbmZvLFxuICAgICAgICAvLyAgICAgY3VycmVudEN1cnJlbmN5T2JqOiB7XG4gICAgICAgIC8vICAgICAgIGNvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgLy8gICAgICAgY3VycmVuY3k6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICBmb3JtYXREYXRlLFxuICAgICAgICAvLyAgICAgaG90ZWxEZXRhaWxzOiB7XG4gICAgICAgIC8vICAgICAgIGhvdGVsTmFtZTogaG90ZWxJbmZvRGF0YT8uaG90ZWxOYW1lLFxuICAgICAgICAvLyAgICAgICBwYXltZW50T3B0aW9uOiBudWxsLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICB9LFxuICAgICAgICAvLyAgIHN0eWxlQ2xhc3M6ICdjYW5jZWxsYXRpb24tcG9saWN5LWRpYWxvZycsXG4gICAgICAgIC8vICAgY29udGVudFN0eWxlOiB7IG92ZXJmbG93OiAnYXV0bycgfSxcbiAgICAgICAgLy8gICBiYXNlWkluZGV4OiAxMDAwMCxcbiAgICAgICAgLy8gICBtYXhpbWl6YWJsZTogZmFsc2UsXG4gICAgICAgIC8vICAgc3R5bGU6IHsgd2lkdGg6ICc2MDBweCcsIG1heFdpZHRoOiAnOTAlJyB9LFxuICAgICAgICAvLyB9KTtcbiAgICAgIC8vfSxcbiAgICAvLyk7XG4gIH1cblxuICBmb3JtYXRGaWxlU2l6ZShieXRlczogbnVtYmVyIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWJ5dGVzKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChieXRlcyA8IDEwMjQpIHtcbiAgICAgIHJldHVybiBgJHtieXRlc30gQmA7XG4gICAgfVxuICAgIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSB7XG4gICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChieXRlcyAvIDEwMjQpfSBLQmA7XG4gICAgfVxuICAgIHJldHVybiBgJHsoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDEpfSBNQmA7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJwYWNrYWdlLWl0ZW0gcGFja2FnZS1pdGVtLS1ub24tcmVmdW5kYWJsZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2NvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2luZm9cIj5cbiAgICAgICAgPGg0IGNsYXNzPVwicGFja2FnZS1pdGVtX19uYW1lXCI+e3sgcGFja2FnZSgpLnBhY2thZ2VOYW1lIH19PC9oND5cbiAgICAgICAgQGlmIChwYWNrYWdlKCkuYm9hcmRCYXNpcykge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1pdGVtX19ib2FyZC1iYXNpc1wiPnt7XG4gICAgICAgICAgICBwYWNrYWdlKCkuYm9hcmRCYXNpc1xuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChwYWNrYWdlKCk/LmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3JlZnVuZC1iYWRnZSBwYWNrYWdlLWl0ZW1fX3JlZnVuZC1iYWRnZS0tY2FuY2VsbGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIFBSRVZJT1VTIENBTkNFTExBVElPTlxuICAgICAgICA8L3NwYW4+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcmVmdW5kLWJhZGdlIHBhY2thZ2UtaXRlbV9fcmVmdW5kLWJhZGdlLS1ub24tcmVmdW5kYWJsZVwiXG4gICAgICAgID5cbiAgICAgICAgICBOT04tUkVGVU5EQUJMRVxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gICAgQGlmIChncm91cGVkUm9vbXMoKS5sZW5ndGgpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3Jvb21zXCI+XG4gICAgICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwZWRSb29tcygpOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3Jvb21cIj5cbiAgICAgICAgICAgIDxoNSBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcm9vbS1uYW1lXCI+XG4gICAgICAgICAgICAgIEBpZiAoZ3JvdXAuY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAge3sgZ3JvdXAuY291bnQgfX14XG4gICAgICAgICAgICAgICAgQGlmIChncm91cC5iZWRUeXBlT3JSb29tVHlwZSkge1xuICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIFJvb21cbiAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1pdGVtX19zZXBhcmF0b3JcIj7igKI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICB7eyBncm91cC5iZWRUeXBlT3JSb29tVHlwZSB9fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgIEBpZiAoZ3JvdXAucm9vbUJhc2lzKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tLWJhc2lzXCI+e3tcbiAgICAgICAgICAgICAgICBncm91cC5yb29tQmFzaXNcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoIXBhY2thZ2UoKT8uaXNDYW5jZWxsZWQgJiYgIWFsbFBhY2thZ2VzTm9uUmVmdW5kYWJsZSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19ub24tcmVmdW5kYWJsZS1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIidleGNsYW1hdGlvbi1jaXJjbGUnXCI+IDwvYWxtYXRhci1pY29uPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICBjbGFzcz1cImluZm8tbWVzc2FnZV9fdGV4dFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG9uT3BlbkNhbmNlbGxhdGlvblBvbGljeSgpXCJcbiAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICdXZSBjYW5cXCd0IHByb2Nlc3MgYXV0b21hdGljIGNhbmNlbGxhdGlvbiB3aXRoIHRoaXMgcm9vbS4gQ2hlY2sgdGhlIDxhIGNsYXNzPSZxdW90O2luZm8tbWVzc2FnZV9fbGluayZxdW90Oz5jYW5jZWxsYXRpb24gcG9saWN5PC9hPiBmb3IgZGV0YWlscydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmICh1cGxvYWRTdWNjZXNzKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX2ljb25cIj5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xMy40Njk3IDguMjAxMTJDMTMuNzYyNiA3LjkwODIyIDE0LjIzNzMgNy45MDgyMiAxNC41MzAyIDguMjAxMTJDMTQuODIzMSA4LjQ5NDAxIDE0LjgyMzEgOC45Njg3NyAxNC41MzAyIDkuMjYxNjZMNy41MzAyMiAxNi4yNjE3QzcuMjM3MzIgMTYuNTU0NiA2Ljc2MjU2IDE2LjU1NDYgNi40Njk2NyAxNi4yNjE3TDMuNDY5NjcgMTMuMjYxN0MzLjE3Njc4IDEyLjk2ODggMy4xNzY3OCAxMi40OTQgMy40Njk2NyAxMi4yMDExQzMuNzQ0MjcgMTEuOTI2NSA0LjE3ODk5IDExLjkwOSA0LjQ3MzU4IDEyLjE0OTRMNC41MzAyMiAxMi4yMDExTDYuOTk5OTQgMTQuNjcwOEwxMy40Njk3IDguMjAxMTJaXCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUIxQTFGXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwiTTE5LjQ2OTcgOC4yMDExMkMxOS43NjI2IDcuOTA4MjIgMjAuMjM3MyA3LjkwODIyIDIwLjUzMDIgOC4yMDExMkMyMC44MjMxIDguNDk0MDEgMjAuODIzMSA4Ljk2ODc3IDIwLjUzMDIgOS4yNjE2NkwxMy41MzAyIDE2LjI2MTdDMTMuMjYzOSAxNi41Mjc5IDEyLjg0MTUgMTYuNTU1NiAxMi41NDI5IDE2LjMyNjFMMTEuNTQyOSAxNS41NTc2TDExLjQ4NDMgMTUuNTA3OEMxMS4yMDc5IDE1LjI0NjggMTEuMTY4NiAxNC44MTM3IDExLjQwNTIgMTQuNTA1OEMxMS42NDE4IDE0LjE5OCAxMi4wNzAzIDE0LjEyNDUgMTIuMzkzNSAxNC4zMjQyTDEyLjQ1NyAxNC4zNjgxTDEyLjkzNDUgMTQuNzM1M0wxOS40Njk3IDguMjAxMTJaXCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUIxQTFGXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19faW5mb1wiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19maWxlbmFtZVwiPnt7IGZpbGVQaWNrZWQoKT8ubmFtZSB9fTwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19fbWV0YVwiPlxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdEZpbGVTaXplKGZpbGVQaWNrZWQoKT8uc2l6ZSkgfX0g4oCiXG4gICAgICAgICAgICAgICAgVXBsb2FkZWRcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmpwZywuanBlZywucG5nLC5kb2MsLmRvY3hcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX2NoYW5nZS1idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDaGFuZ2VcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2Fycm93LXVwLW9uLXNxdWFyZSdcIj48L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxXCI+XG4gICAgICAgICAgICAgIDxoNSBjbGFzcz1cInVwbG9hZC1zZWN0aW9uX190aXRsZVwiPlxuICAgICAgICAgICAgICAgIFVwbG9hZCBhIGRvY3VtZW50IHRvIHN1cHBvcnQgeW91ciByZXF1ZXN0XG4gICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX3N1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgUmVxdWlyZWQgdG8gc3VibWl0IGFuZCB0cmFjayB5b3VyIHJlcXVlc3RcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICBAaWYgKGZpbGVQaWNrZWQoKSAmJiAhdXBsb2FkU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbl9fZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGZpbGVQaWNrZWQoKT8ubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXByb2dyZXNzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXByb2dyZXNzX19iYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLXByb2dyZXNzX19maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJ1cGxvYWRQcm9ncmVzcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgID57eyB1cGxvYWRQcm9ncmVzcygpIH19JTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwuanBnLC5qcGVnLC5wbmcsLmRvYywuZG9jeFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbl9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzVXBsb2FkaW5nKClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBVcGxvYWQgZmlsZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHN1Ym1pdEVycm9yKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VibWl0LXJlc3VsdCBzdWJtaXQtcmVzdWx0LS1lcnJvclwiPlxuICAgICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInZXhjbGFtYXRpb24tY2lyY2xlJ1wiPjwvYWxtYXRhci1pY29uPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJzdWJtaXQtcmVzdWx0X190ZXh0XCI+e3sgc3VibWl0RXJyb3IoKSB9fTwvcD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LXJlc3VsdF9fcmV0cnktYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmV0cnkoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFRyeSBBZ2FpblxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2UgaWYgKCFzdWJtaXRTdWNjZXNzKCkpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LXJlcXVlc3QtYnRuXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXBsb2FkU3VjY2VzcygpIHx8IGlzU3VibWl0dGluZygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdFJlcXVlc3QoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpc1N1Ym1pdHRpbmcoKSkge1xuICAgICAgICAgICAgICBTdWJtaXR0aW5nLi4uXG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgU3VibWl0IG15IHJlcXVlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=
|