UNPKG

@netcreaties/ngx-smart-banner

Version:

Angular service for the imlementation of a smart banner to notify your users about your available app.

120 lines 19.9 kB
import { Component, EventEmitter, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/platform"; import * as i2 from "./utils/cookie-service"; import * as i3 from "./star/star.component"; import * as i4 from "@angular/common"; export class NgxSmartBannerComponent { constructor(platform, cookieService) { this.platform = platform; this.cookieService = cookieService; this.onClose = new EventEmitter(); if (this.platform.ANDROID) { this.modifier = 'android'; } if (this.platform.IOS) { this.modifier = 'ios'; } } /** * Gets icon */ get icon() { var _a, _b, _c, _d; if (this.platform.ANDROID) { return (_b = (_a = this.settings) === null || _a === void 0 ? void 0 : _a.icon) === null || _b === void 0 ? void 0 : _b.android; } if (this.platform.IOS) { return (_d = (_c = this.settings) === null || _c === void 0 ? void 0 : _c.icon) === null || _d === void 0 ? void 0 : _d.ios; } return null; } /** * Gets button url */ get buttonUrl() { var _a, _b, _c, _d; if (this.platform.ANDROID) { return (_b = (_a = this.settings) === null || _a === void 0 ? void 0 : _a.buttonUrl) === null || _b === void 0 ? void 0 : _b.android; } if (this.platform.IOS) { return (_d = (_c = this.settings) === null || _c === void 0 ? void 0 : _c.buttonUrl) === null || _d === void 0 ? void 0 : _d.ios; } return '#'; } /** * Gets price suffix */ get priceSuffix() { var _a, _b; if (this.platform.ANDROID) { return (_a = this.settings.priceSuffix) === null || _a === void 0 ? void 0 : _a.android; } if (this.platform.IOS) { return (_b = this.settings.priceSuffix) === null || _b === void 0 ? void 0 : _b.ios; } return ''; } /** * Set cookie to reminder value and destroy component */ exit() { this.cookieService.set('smartbanner_closed', '1', this.endDate('exit')); this.onClose.emit(); this.componentRef.destroy(); } /** * Set cookie to hidden value and destroy component * * @author Roy Freij <roy@bsbip.com> */ view() { this.cookieService.set('smartbanner_closed', '1', this.endDate('view')); this.onClose.emit(); this.componentRef.destroy(); } /** * Gets end date */ endDate(type) { const date = new Date(); if (!this.settings.daysReminder) { return null; } const timeToLive = type === 'exit' ? this.settings.daysHidden : this.settings.daysReminder; date.setDate(date.getDate() + (timeToLive || 0)); return date; } /** * Gets review rating * * @author Harry Apperloo <harry@bsbip.com> */ get reviewAverage() { var _a, _b, _c, _d; if (this.platform.ANDROID) { return (_b = (_a = this.settings) === null || _a === void 0 ? void 0 : _a.rating) === null || _b === void 0 ? void 0 : _b.android; } if (this.platform.IOS) { return (_d = (_c = this.settings) === null || _c === void 0 ? void 0 : _c.rating) === null || _d === void 0 ? void 0 : _d.ios; } return 5; } } NgxSmartBannerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.2", ngImport: i0, type: NgxSmartBannerComponent, deps: [{ token: i1.Platform }, { token: i2.CookieService }], target: i0.ɵɵFactoryTarget.Component }); NgxSmartBannerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.2", type: NgxSmartBannerComponent, selector: "nc-ngx-smart-banner", inputs: { settings: "settings", componentRef: "componentRef" }, ngImport: i0, template: "<div class=\"smartbanner smartbanner--{{ modifier }}\">\r\n <button\r\n (click)=\"exit()\"\r\n class=\"smartbanner__exit\"\r\n [attr.aria-label]=\"settings.closeLabel\"\r\n ></button>\r\n <div\r\n class=\"smartbanner__icon\"\r\n [ngStyle]=\"{ 'background-image': 'url(' + icon + ')' }\"\r\n ></div>\r\n <div class=\"smartbanner__info\">\r\n <div class=\"smartbanner__info--title\">\r\n {{ settings.title }}\r\n </div>\r\n <div class=\"smartbanner__info--author\">\r\n {{ settings.author }}\r\n </div>\r\n <div class=\"smartbanner__info--rating\" *ngIf=\"!settings.hideRating && reviewAverage\">\r\n <app-star\r\n *ngFor=\"let in of [0, 1, 2, 3, 4]; let i = index\"\r\n [solid]=\"reviewAverage <= i\"\r\n ></app-star>\r\n </div>\r\n <div class=\"smartbanner__info--price\">\r\n {{ settings.price }}{{ priceSuffix }}\r\n </div>\r\n </div>\r\n <a\r\n href=\"{{ buttonUrl }}\"\r\n target=\"_blank\"\r\n (click)=\"view()\"\r\n class=\"smartbanner__button\"\r\n rel=\"noopener\"\r\n [attr.aria-label]=\"settings.buttonLabel\"\r\n >\r\n {{ settings.buttonLabel }}\r\n </a>\r\n</div>\r\n", styles: [".smartbanner{box-sizing:border-box;text-shadow:none;position:absolute;top:0;left:0;z-index:99999;padding:0 10px;width:100%;height:84px;display:flex;justify-content:space-between;align-items:center;background:#f3f3f3;font-family:Helvetica,sans,sans-serif}.smartbanner__exit{position:relative;display:block;margin-right:14px;background-color:#f3f3f3;width:12px;height:12px;border:0;text-align:center}.smartbanner__exit:after,.smartbanner__exit:before{position:absolute;top:0;width:1px;height:12px;background:#767676;content:\"\"}.smartbanner__exit:before{transform:rotate(45deg)}.smartbanner__exit:after{transform:rotate(-45deg)}.smartbanner__icon{width:64px;height:64px;border-radius:15px;background-size:64px 64px}.smartbanner__info{margin-left:8px;display:flex;flex-direction:column;justify-content:space-between;width:45%;height:64px;color:#767676}.smartbanner__info--title{font-size:14px;color:#000}.smartbanner__info--rating{display:flex;margin:3px 0}.smartbanner__info--author,.smartbanner__info--price{font-size:12px}.smartbanner__button{display:block;padding:0 10px;min-width:10%;background:#f3f3f3;color:#1474fc;font-size:14px;font-weight:700;text-align:center;text-decoration:none}.smartbanner__button__label{text-align:center}.smartbanner.smartbanner--android{background:#3d3d3d url(\"data:image/gif;base64,R0lGODlhCAAIAIABAFVVVf///yH5BAEHAAEALAAAAAAIAAgAAAINRG4XudroGJBRsYcxKAA7\")}.smartbanner.smartbanner--android .smartbanner__exit{margin-right:0;width:18px;height:17px;border-radius:14px;background:#1c1e21;box-shadow:inset 0 1px 2px rgba(0,0,0,.8),0 1px 1px hsla(0,0%,100%,.3);color:#b1b1b3;font-family:ArialRoundedMTBold,Arial;font-size:20px;line-height:17px;text-shadow:0 1px 1px #000}.smartbanner.smartbanner--android .smartbanner__exit:after,.smartbanner.smartbanner--android .smartbanner__exit:before{top:3px;left:8px;width:2px;height:11px;background:#b1b1b3}.smartbanner.smartbanner--android .smartbanner__exit:active,.smartbanner.smartbanner--android .smartbanner__exit:hover{color:#eee}.smartbanner.smartbanner--android .smartbanner__icon{background-color:transparent;box-shadow:none}.smartbanner.smartbanner--android .smartbanner__info{color:#ccc}.smartbanner.smartbanner--android .smartbanner__info--title{color:#fff;font-weight:700}.smartbanner.smartbanner--android .smartbanner__button{color:#fff;background:#3eacc3;padding:5px 10px;border:2px solid #fff;min-width:12%;font-size:14px;font-weight:700}.smartbanner.smartbanner--android .smartbanner__button:active,.smartbanner.smartbanner--android .smartbanner__button:hover{background:none}.smartbanner.smartbanner--android .smartbanner__button__label{display:block;padding:0 10px;background:#42b6c9;background:linear-gradient(180deg,#42b6c9,#39a9bb);box-shadow:none;line-height:24px;text-align:center;text-transform:none}.smartbanner.smartbanner--android .smartbanner__button__label:active,.smartbanner.smartbanner--android .smartbanner__button__label:hover{background:#2ac7e1}.star-rating{font-size:12px;color:#e19620;margin-right:2px}"], components: [{ type: i3.StarComponent, selector: "app-star", inputs: ["solid"] }], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.2", ngImport: i0, type: NgxSmartBannerComponent, decorators: [{ type: Component, args: [{ selector: 'nc-ngx-smart-banner', templateUrl: './ngx-smart-banner.component.html', styleUrls: ['./ngx-smart-banner.component.scss'], }] }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i2.CookieService }]; }, propDecorators: { settings: [{ type: Input }], componentRef: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXNtYXJ0LWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnQtYmFubmVyL3NyYy9saWIvbmd4LXNtYXJ0LWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnQtYmFubmVyL3NyYy9saWIvbmd4LXNtYXJ0LWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFTN0UsTUFBTSxPQUFPLHVCQUF1QjtJQVFoQyxZQUNxQixRQUFrQixFQUNsQixhQUE0QjtRQUQ1QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRTdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFDRDs7T0FFRztJQUNILElBQVcsSUFBSTs7UUFDWCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLE9BQU8sTUFBQSxNQUFBLElBQUksQ0FBQyxRQUFRLDBDQUFFLElBQUksMENBQUUsT0FBTyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixPQUFPLE1BQUEsTUFBQSxJQUFJLENBQUMsUUFBUSwwQ0FBRSxJQUFJLDBDQUFFLEdBQUcsQ0FBQztTQUNuQztR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bUNBQW1DLENBQUM7aUJBQ25EOzJIQUVtQixRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neFNtYXJ0QmFubmVyU2V0dGluZ3MgfSBmcm9tICcuL3NldHRpbmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL2Nvb2tpZS1zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICduYy1uZ3gtc21hcnQtYmFubmVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3gtc21hcnQtYmFubmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL25neC1zbWFydC1iYW5uZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFNtYXJ0QmFubmVyQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZXR0aW5ncyE6IE5neFNtYXJ0QmFubmVyU2V0dGluZ3M7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY29tcG9uZW50UmVmITogQ29tcG9uZW50UmVmPE5neFNtYXJ0QmFubmVyQ29tcG9uZW50PjtcclxuXHJcbiAgICBwdWJsaWMgbW9kaWZpZXIhOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtOiBQbGF0Zm9ybSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLm9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLkFORFJPSUQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RpZmllciA9ICdhbmRyb2lkJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLklPUykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGlmaWVyID0gJ2lvcyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGljb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpY29uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLkFORFJPSUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/Lmljb24/LmFuZHJvaWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/Lmljb24/LmlvcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBidXR0b24gdXJsXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYnV0dG9uVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uQU5EUk9JRCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncz8uYnV0dG9uVXJsPy5hbmRyb2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uSU9TKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzPy5idXR0b25Vcmw/LmlvcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnIyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHByaWNlIHN1ZmZpeFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHByaWNlU3VmZml4KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uQU5EUk9JRCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5wcmljZVN1ZmZpeD8uYW5kcm9pZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLklPUykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5wcmljZVN1ZmZpeD8uaW9zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvb2tpZSB0byByZW1pbmRlciB2YWx1ZSBhbmQgZGVzdHJveSBjb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgnc21hcnRiYW5uZXJfY2xvc2VkJywgJzEnLCB0aGlzLmVuZERhdGUoJ2V4aXQnKSk7XHJcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29va2llIHRvIGhpZGRlbiB2YWx1ZSBhbmQgZGVzdHJveSBjb21wb25lbnRcclxuICAgICAqXHJcbiAgICAgKiBAYXV0aG9yIFJveSBGcmVpaiA8cm95QGJzYmlwLmNvbT5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgnc21hcnRiYW5uZXJfY2xvc2VkJywgJzEnLCB0aGlzLmVuZERhdGUoJ3ZpZXcnKSk7XHJcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGVuZCBkYXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZW5kRGF0ZSh0eXBlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5kYXlzUmVtaW5kZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0aW1lVG9MaXZlID1cclxuICAgICAgICAgICAgdHlwZSA9PT0gJ2V4aXQnXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2V0dGluZ3MuZGF5c0hpZGRlblxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldHRpbmdzLmRheXNSZW1pbmRlcjtcclxuXHJcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKHRpbWVUb0xpdmUgfHwgMCkpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyByZXZpZXcgcmF0aW5nXHJcbiAgICAgKlxyXG4gICAgICogQGF1dGhvciBIYXJyeSBBcHBlcmxvbyA8aGFycnlAYnNiaXAuY29tPlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHJldmlld0F2ZXJhZ2UoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5BTkRST0lEKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzPy5yYXRpbmc/LmFuZHJvaWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/LnJhdGluZz8uaW9zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDU7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNtYXJ0YmFubmVyIHNtYXJ0YmFubmVyLS17eyBtb2RpZmllciB9fVwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJleGl0KClcIlxyXG4gICAgICAgIGNsYXNzPVwic21hcnRiYW5uZXJfX2V4aXRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2V0dGluZ3MuY2xvc2VMYWJlbFwiXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJzbWFydGJhbm5lcl9faWNvblwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGljb24gKyAnKScgfVwiXHJcbiAgICA+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21hcnRiYW5uZXJfX2luZm9cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hcnRiYW5uZXJfX2luZm8tLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IHNldHRpbmdzLnRpdGxlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0YmFubmVyX19pbmZvLS1hdXRob3JcIj5cclxuICAgICAgICAgICAge3sgc2V0dGluZ3MuYXV0aG9yIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0YmFubmVyX19pbmZvLS1yYXRpbmdcIiAqbmdJZj1cIiFzZXR0aW5ncy5oaWRlUmF0aW5nICYmIHJldmlld0F2ZXJhZ2VcIj5cclxuICAgICAgICAgICAgPGFwcC1zdGFyXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaW4gb2YgWzAsIDEsIDIsIDMsIDRdOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgIFtzb2xpZF09XCJyZXZpZXdBdmVyYWdlIDw9IGlcIlxyXG4gICAgICAgICAgICA+PC9hcHAtc3Rhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hcnRiYW5uZXJfX2luZm8tLXByaWNlXCI+XHJcbiAgICAgICAgICAgIHt7IHNldHRpbmdzLnByaWNlIH19e3sgcHJpY2VTdWZmaXggfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGFcclxuICAgICAgICBocmVmPVwie3sgYnV0dG9uVXJsIH19XCJcclxuICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgIChjbGljayk9XCJ2aWV3KClcIlxyXG4gICAgICAgIGNsYXNzPVwic21hcnRiYW5uZXJfX2J1dHRvblwiXHJcbiAgICAgICAgcmVsPVwibm9vcGVuZXJcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2V0dGluZ3MuYnV0dG9uTGFiZWxcIlxyXG4gICAgPlxyXG4gICAgICAgIHt7IHNldHRpbmdzLmJ1dHRvbkxhYmVsIH19XHJcbiAgICA8L2E+XHJcbjwvZGl2PlxyXG4iXX0=