UNPKG

@spartacus/cart

Version:

`@spartacus/cart` is a package that you can include in your application, which allows you to use various cart features.

87 lines 17.8 kB
import { Component, ViewChild, } from '@angular/core'; import { ICON_TYPE, } from '@spartacus/storefront'; import { Subscription } from 'rxjs'; import { filter, map, take } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "../saved-cart-details.service"; import * as i2 from "@spartacus/core"; import * as i3 from "@spartacus/storefront"; import * as i4 from "@angular/common"; export class SavedCartDetailsOverviewComponent { constructor(savedCartDetailsService, translation, vcr, launchDialogService) { this.savedCartDetailsService = savedCartDetailsService; this.translation = translation; this.vcr = vcr; this.launchDialogService = launchDialogService; this.subscription = new Subscription(); this.iconTypes = ICON_TYPE; this.savedCart$ = this.savedCartDetailsService.getCartDetails(); } getCartName(cartName) { return this.translation.translate('savedCartDetails.cartName').pipe(filter(() => Boolean(cartName)), map((textTitle) => ({ title: textTitle, text: [cartName], }))); } getCartDescription(cartDescription) { return this.translation.translate('savedCartDetails.cartDescription').pipe(filter(() => Boolean(cartDescription)), map((textTitle) => ({ title: textTitle, text: [cartDescription], }))); } getCartId(cartId) { return this.translation.translate('savedCartDetails.cartId').pipe(filter(() => Boolean(cartId)), map((textTitle) => ({ title: textTitle, text: [cartId], }))); } getDateSaved(saveTime) { return this.translation.translate('savedCartDetails.dateSaved').pipe(filter(() => Boolean(saveTime)), map((textTitle) => { return { title: textTitle, text: [saveTime !== null && saveTime !== void 0 ? saveTime : ''], }; })); } getCartItems(totalItems) { return this.translation.translate('savedCartDetails.items').pipe(filter(() => Boolean(totalItems)), map((textTitle) => ({ title: textTitle, text: [totalItems.toString()], }))); } getCartQuantity(totalUnitCount) { return this.translation.translate('savedCartDetails.quantity').pipe(filter(() => Boolean(totalUnitCount)), map((textTitle) => ({ title: textTitle, text: [totalUnitCount.toString()], }))); } getCartTotal(totalPriceWithTax) { return this.translation.translate('savedCartDetails.total').pipe(filter(() => Boolean(totalPriceWithTax)), map((textTitle) => ({ title: textTitle, text: [totalPriceWithTax], }))); } openDialog(cart) { const dialog = this.launchDialogService.openDialog("SAVED_CART" /* SAVED_CART */, this.element, this.vcr, { cart, layoutOption: 'edit' }); if (dialog) { this.subscription.add(dialog.pipe(take(1)).subscribe()); } } ngOnDestroy() { var _a; (_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe(); } } SavedCartDetailsOverviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartDetailsOverviewComponent, deps: [{ token: i1.SavedCartDetailsService }, { token: i2.TranslationService }, { token: i0.ViewContainerRef }, { token: i3.LaunchDialogService }], target: i0.ɵɵFactoryTarget.Component }); SavedCartDetailsOverviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: SavedCartDetailsOverviewComponent, selector: "cx-saved-cart-details-overview", viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"savedCart$ | async as cart\">\n <div class=\"cx-cart-summary\">\n <div class=\"container\">\n <div class=\"cx-summary-card\">\n <div class=\"cx-edit-container\">\n <cx-card [content]=\"getCartName(cart?.name) | async\"></cx-card>\n <button class=\"cx-edit-cart\" #element (click)=\"openDialog(cart)\">\n <cx-icon [type]=\"iconTypes.PENCIL\"></cx-icon>\n </button>\n </div>\n <div class=\"cx-card-description\">\n <cx-card\n [content]=\"getCartDescription(cart?.description) | async\"\n [truncateText]=\"true\"\n [charactersLimit]=\"30\"\n ></cx-card>\n </div>\n </div>\n <div class=\"cx-summary-card\">\n <cx-card [content]=\"getCartId(cart?.code) | async\"></cx-card>\n </div>\n <div class=\"cx-summary-card\">\n <cx-card\n [content]=\"getDateSaved(cart?.saveTime | cxDate) | async\"\n ></cx-card>\n <cx-card [content]=\"getCartItems(cart?.totalItems) | async\"></cx-card>\n </div>\n <div class=\"cx-summary-card\">\n <cx-card\n [content]=\"getCartQuantity(cart?.totalUnitCount) | async\"\n ></cx-card>\n <cx-card\n [content]=\"\n getCartTotal(cart?.totalPriceWithTax?.formattedValue) | async\n \"\n ></cx-card>\n </div>\n </div>\n </div>\n</ng-container>\n", components: [{ type: i3.CardComponent, selector: "cx-card", inputs: ["border", "editMode", "isDefault", "content", "fitToContainer", "truncateText", "charactersLimit"], outputs: ["deleteCard", "setDefaultCard", "sendCard", "editCard", "cancelCard"] }, { type: i3.IconComponent, selector: "cx-icon,[cxIcon]", inputs: ["cxIcon", "type"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4.AsyncPipe, "cxDate": i2.CxDatePipe } }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartDetailsOverviewComponent, decorators: [{ type: Component, args: [{ selector: 'cx-saved-cart-details-overview', templateUrl: './saved-cart-details-overview.component.html', }] }], ctorParameters: function () { return [{ type: i1.SavedCartDetailsService }, { type: i2.TranslationService }, { type: i0.ViewContainerRef }, { type: i3.LaunchDialogService }]; }, propDecorators: { element: [{ type: ViewChild, args: ['element'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2FydC1kZXRhaWxzLW92ZXJ2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2ZlYXR1cmUtbGlicy9jYXJ0L3NhdmVkLWNhcnQvY29tcG9uZW50cy9kZXRhaWxzL3NhdmVkLWNhcnQtZGV0YWlscy1vdmVydmlldy9zYXZlZC1jYXJ0LWRldGFpbHMtb3ZlcnZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL2NhcnQvc2F2ZWQtY2FydC9jb21wb25lbnRzL2RldGFpbHMvc2F2ZWQtY2FydC1kZXRhaWxzLW92ZXJ2aWV3L3NhdmVkLWNhcnQtZGV0YWlscy1vdmVydmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBT25ELE1BQU0sT0FBTyxpQ0FBaUM7SUFTNUMsWUFDWSx1QkFBZ0QsRUFDaEQsV0FBK0IsRUFDL0IsR0FBcUIsRUFDckIsbUJBQXdDO1FBSHhDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQ3JCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFaNUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTFDLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsZUFBVSxHQUNSLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFj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LHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUM5RCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFDeEMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDO1NBQzFCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVU7UUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsZ0NBRWhELElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLEdBQUcsRUFDUixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQy9CLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFRCxXQUFXOztRQUNULE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OEhBdkdVLGlDQUFpQztrSEFBakMsaUNBQWlDLDBLQ3RCOUMsMDZDQXdDQTsyRkRsQmEsaUNBQWlDO2tCQUo3QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFdBQVcsRUFBRSw4Q0FBOEM7aUJBQzVEO2dOQUl1QixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcnQsIFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XG5pbXBvcnQge1xuICBDYXJkLFxuICBJQ09OX1RZUEUsXG4gIExhdW5jaERpYWxvZ1NlcnZpY2UsXG4gIExBVU5DSF9DQUxMRVIsXG59IGZyb20gJ0BzcGFydGFjdXMvc3RvcmVmcm9udCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2F2ZWRDYXJ0RGV0YWlsc1NlcnZpY2UgfSBmcm9tICcuLi9zYXZlZC1jYXJ0LWRldGFpbHMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2N4LXNhdmVkLWNhcnQtZGV0YWlscy1vdmVydmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXZlZC1jYXJ0LWRldGFpbHMtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBTYXZlZENhcnREZXRhaWxzT3ZlcnZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBAVmlld0NoaWxkKCdlbGVtZW50JykgZWxlbWVudDogRWxlbWVudFJlZjtcblxuICBpY29uVHlwZXMgPSBJQ09OX1RZUEU7XG4gIHNhdmVkQ2FydCQ6IE9ic2VydmFibGU8Q2FydCB8IHVuZGVmaW5lZD4gPVxuICAgIHRoaXMuc2F2ZWRDYXJ0RGV0YWlsc1NlcnZpY2UuZ2V0Q2FydERldGFpbHMoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2F2ZWRDYXJ0RGV0YWlsc1NlcnZpY2U6IFNhdmVkQ2FydERldGFpbHNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJvdGVjdGVkIGxhdW5jaERpYWxvZ1NlcnZpY2U6IExhdW5jaERpYWxvZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIGdldENhcnROYW1lKGNhcnROYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENhcmQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ3NhdmVkQ2FydERldGFpbHMuY2FydE5hbWUnKS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IEJvb2xlYW4oY2FydE5hbWUpKSxcbiAgICAgIG1hcCgodGV4dFRpdGxlKSA9PiAoe1xuICAgICAgICB0aXRsZTogdGV4dFRpdGxlLFxuICAgICAgICB0ZXh0OiBbY2FydE5hbWVdLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldENhcnREZXNjcmlwdGlvbihjYXJ0RGVzY3JpcHRpb246IHN0cmluZyk6IE9ic2VydmFibGU8Q2FyZD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnc2F2ZWRDYXJ0RGV0YWlscy5jYXJ0RGVzY3JpcHRpb24nKS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IEJvb2xlYW4oY2FydERlc2NyaXB0aW9uKSksXG4gICAgICBtYXAoKHRleHRUaXRsZSkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHRleHRUaXRsZSxcbiAgICAgICAgdGV4dDogW2NhcnREZXNjcmlwdGlvbl0sXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Q2FydElkKGNhcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXJkPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdzYXZlZENhcnREZXRhaWxzLmNhcnRJZCcpLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gQm9vbGVhbihjYXJ0SWQpKSxcbiAgICAgIG1hcCgodGV4dFRpdGxlKSA9PiAoe1xuICAgICAgICB0aXRsZTogdGV4dFRpdGxlLFxuICAgICAgICB0ZXh0OiBbY2FydElkXSxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBnZXREYXRlU2F2ZWQoc2F2ZVRpbWU6IHN0cmluZyB8IG51bGwpOiBPYnNlcnZhYmxlPENhcmQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ3NhdmVkQ2FydERldGFpbHMuZGF0ZVNhdmVkJykucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiBCb29sZWFuKHNhdmVUaW1lKSksXG4gICAgICBtYXAoKHRleHRUaXRsZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRpdGxlOiB0ZXh0VGl0bGUsXG4gICAgICAgICAgdGV4dDogW3NhdmVUaW1lID8/ICcnXSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldENhcnRJdGVtcyh0b3RhbEl0ZW1zOiBudW1iZXIpOiBPYnNlcnZhYmxlPENhcmQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ3NhdmVkQ2FydERldGFpbHMuaXRlbXMnKS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IEJvb2xlYW4odG90YWxJdGVtcykpLFxuICAgICAgbWFwKCh0ZXh0VGl0bGUpID0+ICh7XG4gICAgICAgIHRpdGxlOiB0ZXh0VGl0bGUsXG4gICAgICAgIHRleHQ6IFt0b3RhbEl0ZW1zLnRvU3RyaW5nKCldLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldENhcnRRdWFudGl0eSh0b3RhbFVuaXRDb3VudDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDYXJkPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdzYXZlZENhcnREZXRhaWxzLnF1YW50aXR5JykucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiBCb29sZWFuKHRvdGFsVW5pdENvdW50KSksXG4gICAgICBtYXAoKHRleHRUaXRsZSkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHRleHRUaXRsZSxcbiAgICAgICAgdGV4dDogW3RvdGFsVW5pdENvdW50LnRvU3RyaW5nKCldLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldENhcnRUb3RhbCh0b3RhbFByaWNlV2l0aFRheDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXJkPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdzYXZlZENhcnREZXRhaWxzLnRvdGFsJykucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiBCb29sZWFuKHRvdGFsUHJpY2VXaXRoVGF4KSksXG4gICAgICBtYXAoKHRleHRUaXRsZSkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHRleHRUaXRsZSxcbiAgICAgICAgdGV4dDogW3RvdGFsUHJpY2VXaXRoVGF4XSxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBvcGVuRGlhbG9nKGNhcnQ6IENhcnQpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2cgPSB0aGlzLmxhdW5jaERpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIExBVU5DSF9DQUxMRVIuU0FWRURfQ0FSVCxcbiAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgIHRoaXMudmNyLFxuICAgICAgeyBjYXJ0LCBsYXlvdXRPcHRpb246ICdlZGl0JyB9XG4gICAgKTtcblxuICAgIGlmIChkaWFsb2cpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChkaWFsb2cucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzYXZlZENhcnQkIHwgYXN5bmMgYXMgY2FydFwiPlxuICA8ZGl2IGNsYXNzPVwiY3gtY2FydC1zdW1tYXJ5XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImN4LXN1bW1hcnktY2FyZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtZWRpdC1jb250YWluZXJcIj5cbiAgICAgICAgICA8Y3gtY2FyZCBbY29udGVudF09XCJnZXRDYXJ0TmFtZShjYXJ0Py5uYW1lKSB8IGFzeW5jXCI+PC9jeC1jYXJkPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjeC1lZGl0LWNhcnRcIiAjZWxlbWVudCAoY2xpY2spPVwib3BlbkRpYWxvZyhjYXJ0KVwiPlxuICAgICAgICAgICAgPGN4LWljb24gW3R5cGVdPVwiaWNvblR5cGVzLlBFTkNJTFwiPjwvY3gtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjeC1jYXJkLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgPGN4LWNhcmRcbiAgICAgICAgICAgIFtjb250ZW50XT1cImdldENhcnREZXNjcmlwdGlvbihjYXJ0Py5kZXNjcmlwdGlvbikgfCBhc3luY1wiXG4gICAgICAgICAgICBbdHJ1bmNhdGVUZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgW2NoYXJhY3RlcnNMaW1pdF09XCIzMFwiXG4gICAgICAgICAgPjwvY3gtY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjeC1zdW1tYXJ5LWNhcmRcIj5cbiAgICAgICAgPGN4LWNhcmQgW2NvbnRlbnRdPVwiZ2V0Q2FydElkKGNhcnQ/LmNvZGUpIHwgYXN5bmNcIj48L2N4LWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjeC1zdW1tYXJ5LWNhcmRcIj5cbiAgICAgICAgPGN4LWNhcmRcbiAgICAgICAgICBbY29udGVudF09XCJnZXREYXRlU2F2ZWQoY2FydD8uc2F2ZVRpbWUgfCBjeERhdGUpIHwgYXN5bmNcIlxuICAgICAgICA+PC9jeC1jYXJkPlxuICAgICAgICA8Y3gtY2FyZCBbY29udGVudF09XCJnZXRDYXJ0SXRlbXMoY2FydD8udG90YWxJdGVtcykgfCBhc3luY1wiPjwvY3gtY2FyZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImN4LXN1bW1hcnktY2FyZFwiPlxuICAgICAgICA8Y3gtY2FyZFxuICAgICAgICAgIFtjb250ZW50XT1cImdldENhcnRRdWFudGl0eShjYXJ0Py50b3RhbFVuaXRDb3VudCkgfCBhc3luY1wiXG4gICAgICAgID48L2N4LWNhcmQ+XG4gICAgICAgIDxjeC1jYXJkXG4gICAgICAgICAgW2NvbnRlbnRdPVwiXG4gICAgICAgICAgICBnZXRDYXJ0VG90YWwoY2FydD8udG90YWxQcmljZVdpdGhUYXg/LmZvcm1hdHRlZFZhbHVlKSB8IGFzeW5jXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvY3gtY2FyZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19