UNPKG

angular2-cookie-law-banner

Version:

Angular2+ component that provides a banner to inform users about cookie banner

102 lines 18.4 kB
/** * angular2-cookie-law-banner * * Copyright 2016-2018, @jwala-anirudh, All rights reserved. * * @author: @jwala-anirudh <anirudhjwala@gmail.com> */ import { Component, HostBinding, ViewEncapsulation, Input, Output, EventEmitter, } from "@angular/core"; import { closeIcon } from "./icons"; import { translateInOut } from "./animations"; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "@angular/common"; export class CookieBannerComponent { get learnMore() { return this._learnMore; } set learnMore(value) { this._learnMore = value !== null && `${value}` !== "false" ? value : null; } get awsomeCloseIcon() { return this._awsomeCloseIcon; } set awsomeCloseIcon(value) { this._awsomeCloseIcon = value !== null && `${value}` !== "false" ? value : null; } get target() { return this._target; } set target(value) { this._target = value !== null && `${value}` !== "false" && (`${value}` === "_blank" || `${value}` === "_self") ? value : "_blank"; } get position() { return this._position; } set position(value) { this._position = value !== null && `${value}` !== "false" && (`${value}` === "top" || `${value}` === "bottom") ? value : "bottom"; } constructor(domSanitizer) { this.domSanitizer = domSanitizer; this.isSeen = new EventEmitter(); this.transition = "bottomIn"; this._position = "bottom"; this.cookieLawClass = true; } ngOnInit() { this.noopener = this._target === "_blank"; this.transition = this.position === "bottom" ? "bottomIn" : "topIn"; if (this._awsomeCloseIcon) { this.closeSvg = this.domSanitizer.bypassSecurityTrustHtml(`<i class="fab ${this._awsomeCloseIcon}"></i>`); } else { this.closeSvg = this.domSanitizer.bypassSecurityTrustHtml(closeIcon); } this.currentStyles = { top: this.position === "top" ? "0" : null, bottom: this.position === "top" ? "initial" : null, }; } afterDismissAnimation(evt) { if (evt.toState === "topOut" || evt.toState === "bottomOut") { this.isSeen.emit(true); } } dismiss(evt) { if (evt) { evt.preventDefault(); } this.transition = this.position === "top" ? "topOut" : "bottomOut"; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: CookieBannerComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.5", type: CookieBannerComponent, selector: "cookie-banner-component", inputs: { learnMore: "learnMore", awsomeCloseIcon: "awsomeCloseIcon", target: "target", position: "position" }, outputs: { isSeen: "isSeen" }, host: { properties: { "class.cookie-banner": "this.cookieLawClass" } }, ngImport: i0, template: "<div\n class=\"cookie-banner-wrapper\"\n [ngStyle]=\"currentStyles\"\n [@transition]=\"transition\"\n (@transition.done)=\"afterDismissAnimation($event)\"\n>\n <div class=\"copy\">\n <span #ref><ng-content></ng-content></span>\n\n <span *ngIf=\"ref.childNodes.length == 0\">\n By continuing to browse the site, you're agreeing to our use of cookies.\n <span *ngIf=\"learnMore\">\n Learn more in our\n <a\n [href]=\"learnMore\"\n [target]=\"target\"\n [rel]=\"noopener ? 'noopener noreferrer' : null\"\n >privacy policy</a\n >.\n </span>\n </span>\n\n <a\n href=\"#\"\n role=\"button\"\n class=\"dismiss\"\n [innerHTML]=\"closeSvg\"\n (click)=\"dismiss($event)\"\n [attr.aria-label]=\"closeSvg\"\n ></a>\n </div>\n</div>\n", styles: [".cookie-banner-wrapper{background:#333;color:#bbb;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;font-weight:200;line-height:20px;position:fixed;bottom:0;left:0;width:100%;z-index:999999999;font-smooth:always;-webkit-font-smoothing:antialiased}.cookie-banner-wrapper a{color:#bbb;-webkit-transition:color .2s;transition:color .2s}.cookie-banner-wrapper a:hover{color:#fff}.cookie-banner-wrapper a:hover svg{fill:#fff}.cookie-banner-wrapper .dismiss{display:block;box-sizing:border-box;padding:10px;position:absolute;top:0;right:10px;text-decoration:none;line-height:20px}.cookie-banner-wrapper .dismiss svg{display:block;fill:#bbb;width:20px;height:20px;-webkit-transition:fill .2s;transition:fill .2s}.cookie-banner-wrapper .copy{box-sizing:border-box;padding:10px 60px 10px 10px}.cookie-banner-wrapper .copy span{color:#fff;font-weight:400}.cookie-banner-wrapper .copy a{text-decoration:underline}.cookie-banner-wrapper .copy a:active,.copy a:hover{outline:0}@media (min-width: 600px){.cookie-banner-wrapper .copy{padding:20px 60px 20px 20px;font-size:18px;line-height:24px}.cookie-banner-wrapper .dismiss{top:10px;right:15px}.cookie-banner-wrapper .dismiss svg{width:24px;height:24px}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], animations: [translateInOut], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: CookieBannerComponent, decorators: [{ type: Component, args: [{ selector: "cookie-banner-component", animations: [translateInOut], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"cookie-banner-wrapper\"\n [ngStyle]=\"currentStyles\"\n [@transition]=\"transition\"\n (@transition.done)=\"afterDismissAnimation($event)\"\n>\n <div class=\"copy\">\n <span #ref><ng-content></ng-content></span>\n\n <span *ngIf=\"ref.childNodes.length == 0\">\n By continuing to browse the site, you're agreeing to our use of cookies.\n <span *ngIf=\"learnMore\">\n Learn more in our\n <a\n [href]=\"learnMore\"\n [target]=\"target\"\n [rel]=\"noopener ? 'noopener noreferrer' : null\"\n >privacy policy</a\n >.\n </span>\n </span>\n\n <a\n href=\"#\"\n role=\"button\"\n class=\"dismiss\"\n [innerHTML]=\"closeSvg\"\n (click)=\"dismiss($event)\"\n [attr.aria-label]=\"closeSvg\"\n ></a>\n </div>\n</div>\n", styles: [".cookie-banner-wrapper{background:#333;color:#bbb;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:15px;font-weight:200;line-height:20px;position:fixed;bottom:0;left:0;width:100%;z-index:999999999;font-smooth:always;-webkit-font-smoothing:antialiased}.cookie-banner-wrapper a{color:#bbb;-webkit-transition:color .2s;transition:color .2s}.cookie-banner-wrapper a:hover{color:#fff}.cookie-banner-wrapper a:hover svg{fill:#fff}.cookie-banner-wrapper .dismiss{display:block;box-sizing:border-box;padding:10px;position:absolute;top:0;right:10px;text-decoration:none;line-height:20px}.cookie-banner-wrapper .dismiss svg{display:block;fill:#bbb;width:20px;height:20px;-webkit-transition:fill .2s;transition:fill .2s}.cookie-banner-wrapper .copy{box-sizing:border-box;padding:10px 60px 10px 10px}.cookie-banner-wrapper .copy span{color:#fff;font-weight:400}.cookie-banner-wrapper .copy a{text-decoration:underline}.cookie-banner-wrapper .copy a:active,.copy a:hover{outline:0}@media (min-width: 600px){.cookie-banner-wrapper .copy{padding:20px 60px 20px 20px;font-size:18px;line-height:24px}.cookie-banner-wrapper .dismiss{top:10px;right:15px}.cookie-banner-wrapper .dismiss svg{width:24px;height:24px}}\n"] }] }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { cookieLawClass: [{ type: HostBinding, args: ["class.cookie-banner"] }], learnMore: [{ type: Input }], awsomeCloseIcon: [{ type: Input }], target: [{ type: Input }], position: [{ type: Input }], isSeen: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhcjItY29va2llLWxhdy1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhcjItY29va2llLWxhdy1iYW5uZXIvc3JjL2xpYi9hbmd1bGFyMi1jb29raWUtbGF3LWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMi1jb29raWUtbGF3LWJhbm5lci9zcmMvbGliL2FuZ3VsYXIyLWNvb2tpZS1sYXctYmFubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBRVQsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7QUFjOUMsTUFBTSxPQUFPLHFCQUFxQjtJQVFoQyxJQUNJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFDSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0I7WUFDbkIsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxLQUFLLE9BQU8sQ0FBQyxD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cUJBQXFCO2tHQUFyQixxQkFBcUIsc1JDbENsQyw4MEJBZ0NBLCs2Q0REYyxDQUFDLGNBQWMsQ0FBQzs7MkZBR2pCLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSx5QkFBeUIsY0FHdkIsQ0FBQyxjQUFjLENBQUMsaUJBQ2IsaUJBQWlCLENBQUMsSUFBSTtpRkFROUIsY0FBYztzQkFEcEIsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBSTlCLFNBQVM7c0JBRFosS0FBSztnQkFTRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBY0MsTUFBTTtzQkFEWixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhbmd1bGFyMi1jb29raWUtbGF3LWJhbm5lclxuICpcbiAqIENvcHlyaWdodCAyMDE2LTIwMTgsIEBqd2FsYS1hbmlydWRoLCBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEBhdXRob3I6IEBqd2FsYS1hbmlydWRoIDxhbmlydWRoandhbGFAZ21haWwuY29tPlxuICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBIb3N0QmluZGluZyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgY2xvc2VJY29uIH0gZnJvbSBcIi4vaWNvbnNcIjtcbmltcG9ydCB7IHRyYW5zbGF0ZUluT3V0IH0gZnJvbSBcIi4vYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ29va2llQmFubmVyQW5pbWF0aW9uLFxuICBDb29raWVCYW5uZXJUYXJnZXQsXG4gIENvb2tpZUJhbm5lclBvc2l0aW9uLFxufSBmcm9tIFwiLi9kZWZpbml0aW9uc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29va2llLWJhbm5lci1jb21wb25lbnRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9hbmd1bGFyMi1jb29raWUtbGF3LWJhbm5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vYW5ndWxhcjItY29va2llLWxhdy1iYW5uZXIuY29tcG9uZW50LmNzc1wiXSxcbiAgYW5pbWF0aW9uczogW3RyYW5zbGF0ZUluT3V0XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29va2llQmFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGNsb3NlU3ZnOiBTYWZlSHRtbDtcbiAgcHVibGljIGN1cnJlbnRTdHlsZXM6IGFueTtcbiAgcHVibGljIHRyYW5zaXRpb246IENvb2tpZUJhbm5lckFuaW1hdGlvbjtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5jb29raWUtYmFubmVyXCIpXG4gIHB1YmxpYyBjb29raWVMYXdDbGFzczogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBnZXQgbGVhcm5Nb3JlKCkge1xuICAgIHJldHVybiB0aGlzLl9sZWFybk1vcmU7XG4gIH1cbiAgc2V0IGxlYXJuTW9yZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGVhcm5Nb3JlID0gdmFsdWUgIT09IG51bGwgJiYgYCR7dmFsdWV9YCAhPT0gXCJmYWxzZVwiID8gdmFsdWUgOiBudWxsO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGF3c29tZUNsb3NlSWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXdzb21lQ2xvc2VJY29uO1xuICB9XG4gIHNldCBhd3NvbWVDbG9zZUljb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2F3c29tZUNsb3NlSWNvbiA9XG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJiBgJHt2YWx1ZX1gICE9PSBcImZhbHNlXCIgPyB2YWx1ZSA6IG51bGw7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgdGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gIH1cbiAgc2V0IHRhcmdldCh2YWx1ZTogQ29va2llQmFubmVyVGFyZ2V0KSB7XG4gICAgdGhpcy5fdGFyZ2V0ID1cbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICBgJHt2YWx1ZX1gICE9PSBcImZhbHNlXCIgJiZcbiAgICAgIChgJHt2YWx1ZX1gID09PSBcIl9ibGFua1wiIHx8IGAke3ZhbHVlfWAgPT09IFwiX3NlbGZcIilcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6IFwiX2JsYW5rXCI7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICB9XG4gIHNldCBwb3NpdGlvbih2YWx1ZTogQ29va2llQmFubmVyUG9zaXRpb24pIHtcbiAgICB0aGlzLl9wb3NpdGlvbiA9XG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgYCR7dmFsdWV9YCAhPT0gXCJmYWxzZVwiICYmXG4gICAgICAoYCR7dmFsdWV9YCA9PT0gXCJ0b3BcIiB8fCBgJHt2YWx1ZX1gID09PSBcImJvdHRvbVwiKVxuICAgICAgICA/IHZhbHVlXG4gICAgICAgIDogXCJib3R0b21cIjtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgaXNTZWVuID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHB1YmxpYyBub29wZW5lcjogYm9vbGVhbjtcblxuICBwcml2YXRlIF9sZWFybk1vcmU6IHN0cmluZztcbiAgcHJpdmF0ZSBfYXdzb21lQ2xvc2VJY29uOiBzdHJpbmc7XG4gIHByaXZhdGUgX3RhcmdldDogQ29va2llQmFubmVyVGFyZ2V0O1xuICBwcml2YXRlIF9wb3NpdGlvbjogQ29va2llQmFubmVyUG9zaXRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgIHRoaXMudHJhbnNpdGlvbiA9IFwiYm90dG9tSW5cIjtcbiAgICB0aGlzLl9wb3NpdGlvbiA9IFwiYm90dG9tXCI7XG4gICAgdGhpcy5jb29raWVMYXdDbGFzcyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ub29wZW5lciA9IHRoaXMuX3RhcmdldCA9PT0gXCJfYmxhbmtcIjtcbiAgICB0aGlzLnRyYW5zaXRpb24gPSB0aGlzLnBvc2l0aW9uID09PSBcImJvdHRvbVwiID8gXCJib3R0b21JblwiIDogXCJ0b3BJblwiO1xuXG4gICAgaWYgKHRoaXMuX2F3c29tZUNsb3NlSWNvbikge1xuICAgICAgdGhpcy5jbG9zZVN2ZyA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgICBgPGkgY2xhc3M9XCJmYWIgJHt0aGlzLl9hd3NvbWVDbG9zZUljb259XCI+PC9pPmBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VTdmcgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChjbG9zZUljb24pO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFN0eWxlcyA9IHtcbiAgICAgIHRvcDogdGhpcy5wb3NpdGlvbiA9PT0gXCJ0b3BcIiA/IFwiMFwiIDogbnVsbCxcbiAgICAgIGJvdHRvbTogdGhpcy5wb3NpdGlvbiA9PT0gXCJ0b3BcIiA/IFwiaW5pdGlhbFwiIDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFmdGVyRGlzbWlzc0FuaW1hdGlvbihldnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2dC50b1N0YXRlID09PSBcInRvcE91dFwiIHx8IGV2dC50b1N0YXRlID09PSBcImJvdHRvbU91dFwiKSB7XG4gICAgICB0aGlzLmlzU2Vlbi5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNtaXNzKGV2dD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZ0KSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zaXRpb24gPSB0aGlzLnBvc2l0aW9uID09PSBcInRvcFwiID8gXCJ0b3BPdXRcIiA6IFwiYm90dG9tT3V0XCI7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjb29raWUtYmFubmVyLXdyYXBwZXJcIlxuICBbbmdTdHlsZV09XCJjdXJyZW50U3R5bGVzXCJcbiAgW0B0cmFuc2l0aW9uXT1cInRyYW5zaXRpb25cIlxuICAoQHRyYW5zaXRpb24uZG9uZSk9XCJhZnRlckRpc21pc3NBbmltYXRpb24oJGV2ZW50KVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJjb3B5XCI+XG4gICAgPHNwYW4gI3JlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuXG4gICAgPHNwYW4gKm5nSWY9XCJyZWYuY2hpbGROb2Rlcy5sZW5ndGggPT0gMFwiPlxuICAgICAgQnkgY29udGludWluZyB0byBicm93c2UgdGhlIHNpdGUsIHlvdSdyZSBhZ3JlZWluZyB0byBvdXIgdXNlIG9mIGNvb2tpZXMuXG4gICAgICA8c3BhbiAqbmdJZj1cImxlYXJuTW9yZVwiPlxuICAgICAgICBMZWFybiBtb3JlIGluIG91clxuICAgICAgICA8YVxuICAgICAgICAgIFtocmVmXT1cImxlYXJuTW9yZVwiXG4gICAgICAgICAgW3RhcmdldF09XCJ0YXJnZXRcIlxuICAgICAgICAgIFtyZWxdPVwibm9vcGVuZXIgPyAnbm9vcGVuZXIgbm9yZWZlcnJlcicgOiBudWxsXCJcbiAgICAgICAgICA+cHJpdmFjeSBwb2xpY3k8L2FcbiAgICAgICAgPi5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L3NwYW4+XG5cbiAgICA8YVxuICAgICAgaHJlZj1cIiNcIlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImRpc21pc3NcIlxuICAgICAgW2lubmVySFRNTF09XCJjbG9zZVN2Z1wiXG4gICAgICAoY2xpY2spPVwiZGlzbWlzcygkZXZlbnQpXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xvc2VTdmdcIlxuICAgID48L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=