ng-materialgrammi
Version:
An Angular framework which follows
74 lines • 18.2 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/router";
export class NavbarComponent {
constructor() {
this.searchedText = new EventEmitter();
this.spaceAround = true;
this.theme = "primary";
this.onSmallMenuButton = "=";
this.isFixed = false;
this.partitionType = "2:1";
this.navData = {};
this.onSmallActive = false;
this.searchQuery = "";
}
ngOnInit() {
}
onSmallClass() {
return this.onSmallActive ? 'active' : '';
}
toggleNav() {
this.onSmallActive = !this.onSmallActive;
}
mainNavClasses() {
let classes = this.onSmallClass();
if (this.isFixed) {
classes += ` fixed`;
}
classes += this.spaceAround ? " space-around" : "";
if (this.partitionType == "2:1") {
classes += ` position-2-1`;
}
else if (this.partitionType == "1:2") {
classes += ` position-1-2`;
}
else if (this.partitionType == "1:1") {
classes += ` position-1-1`;
}
return classes;
}
onEnterSearchQuery(event) {
if (event.key == "Enter") {
this.sendSearch();
}
else {
this.searchQuery = event.target.value;
}
}
sendSearch() {
this.searchedText.emit(this.searchQuery);
}
}
NavbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
NavbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: NavbarComponent, selector: "mg-navbar", inputs: { spaceAround: "spaceAround", theme: "theme", onSmallMenuButton: "onSmallMenuButton", isFixed: "isFixed", partitionType: "partitionType", navData: "navData" }, outputs: { searchedText: "searchedText" }, ngImport: i0, template: "<div class=\"navbar-wrapper\">\n <div class=\"navbar {{theme}}\" [ngClass]=\"mainNavClasses()\">\n <div class=\"section brand\">\n <ng-container *ngIf=\"navData && navData.brand\">\n <a [innerHtml]=\"navData.brand.name\" [routerLink]=\"navData.brand.link\"></a>\n <a (click)=\"toggleNav()\" class=\"small-only-open-nav\" [innerHtml]=\"onSmallMenuButton\"></a>\n </ng-container>\n <ng-container *ngIf=\"!navData.brand\">\n <ng-content select=\"[slot=brand]\"></ng-content>\n </ng-container>\n </div>\n <div class=\"section left-nav\">\n <ng-container *ngIf=\"navData.left\">\n <ng-container *ngIf=\"navData && navData.left && navData.left.navType == 'input'\">\n <input type=\"text\" (keyup) = \"onEnterSearchQuery($event)\" class=\"input\" [placeholder]=\"navData.left.data.placeholder\" />\n <a class=\"input-button\" *ngIf=\"navData.left.data.btn\" [innerHtml]=\"navData.left.data.name\"></a>\n </ng-container>\n <ng-container *ngIf=\"navData && navData.left && navData.left.navType == 'links'\">\n <ng-container *ngFor=\"let ndata of navData.left.data\">\n <!-- dropdown -->\n <ng-container *ngIf=\"ndata.type && ndata.type == 'dropdown'\">\n <div class=\"dropdown\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\" class=\"trigger-dropdown\"></a>\n <div class=\"drop-menu\">\n <a *ngFor=\"let droplink of ndata.links\" [innerHtml]=\"droplink.name\"></a>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!ndata.type\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\"></a>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!navData.left\">\n <ng-content select=\"[slot=left-nav]\"></ng-content>\n </ng-container>\n </div>\n <div class=\"section right-nav\">\n <ng-container *ngIf=\"navData.right\">\n <ng-container *ngIf=\"navData && navData.right && navData.right.navType == 'links'\">\n <ng-container *ngFor=\"let ndata of navData.right.data\">\n <!-- dropdown -->\n <ng-container *ngIf=\"ndata.type && ndata.type == 'dropdown'\">\n <div class=\"dropdown\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\" class=\"trigger-dropdown\"></a>\n <div class=\"drop-menu\">\n <a *ngFor=\"let droplink of ndata.links\" [innerHtml]=\"droplink.name\"></a>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!ndata.type\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\"></a>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!navData.right\">\n <ng-content select=\"[slot=right-nav]\"></ng-content>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: [""], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: NavbarComponent, decorators: [{
type: Component,
args: [{ selector: 'mg-navbar', template: "<div class=\"navbar-wrapper\">\n <div class=\"navbar {{theme}}\" [ngClass]=\"mainNavClasses()\">\n <div class=\"section brand\">\n <ng-container *ngIf=\"navData && navData.brand\">\n <a [innerHtml]=\"navData.brand.name\" [routerLink]=\"navData.brand.link\"></a>\n <a (click)=\"toggleNav()\" class=\"small-only-open-nav\" [innerHtml]=\"onSmallMenuButton\"></a>\n </ng-container>\n <ng-container *ngIf=\"!navData.brand\">\n <ng-content select=\"[slot=brand]\"></ng-content>\n </ng-container>\n </div>\n <div class=\"section left-nav\">\n <ng-container *ngIf=\"navData.left\">\n <ng-container *ngIf=\"navData && navData.left && navData.left.navType == 'input'\">\n <input type=\"text\" (keyup) = \"onEnterSearchQuery($event)\" class=\"input\" [placeholder]=\"navData.left.data.placeholder\" />\n <a class=\"input-button\" *ngIf=\"navData.left.data.btn\" [innerHtml]=\"navData.left.data.name\"></a>\n </ng-container>\n <ng-container *ngIf=\"navData && navData.left && navData.left.navType == 'links'\">\n <ng-container *ngFor=\"let ndata of navData.left.data\">\n <!-- dropdown -->\n <ng-container *ngIf=\"ndata.type && ndata.type == 'dropdown'\">\n <div class=\"dropdown\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\" class=\"trigger-dropdown\"></a>\n <div class=\"drop-menu\">\n <a *ngFor=\"let droplink of ndata.links\" [innerHtml]=\"droplink.name\"></a>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!ndata.type\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\"></a>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!navData.left\">\n <ng-content select=\"[slot=left-nav]\"></ng-content>\n </ng-container>\n </div>\n <div class=\"section right-nav\">\n <ng-container *ngIf=\"navData.right\">\n <ng-container *ngIf=\"navData && navData.right && navData.right.navType == 'links'\">\n <ng-container *ngFor=\"let ndata of navData.right.data\">\n <!-- dropdown -->\n <ng-container *ngIf=\"ndata.type && ndata.type == 'dropdown'\">\n <div class=\"dropdown\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\" class=\"trigger-dropdown\"></a>\n <div class=\"drop-menu\">\n <a *ngFor=\"let droplink of ndata.links\" [innerHtml]=\"droplink.name\"></a>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!ndata.type\">\n <a [innerHtml]=\"ndata.name\" [routerLink]=\"ndata.link\"></a>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!navData.right\">\n <ng-content select=\"[slot=right-nav]\"></ng-content>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: [""] }]
}], ctorParameters: function () { return []; }, propDecorators: { searchedText: [{
type: Output
}], spaceAround: [{
type: Input
}], theme: [{
type: Input
}], onSmallMenuButton: [{
type: Input
}], isFixed: [{
type: Input
}], partitionType: [{
type: Input
}], navData: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsZ3JhbW1pL3NyYy9saWIvY29tcG9uZW50cy9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsZ3JhbW1pL3NyYy9saWIvY29tcG9uZW50cy9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRL0UsTUFBTSxPQUFPLGVBQWU7SUFhMUI7UUFaVSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsVUFBSyxHQUFVLFNBQVMsQ0FBQztRQUN6QixzQkFBaUIsR0FBVSxHQUFHLENBQUM7UUFDL0IsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixrQkFBYSxHQUFpQixLQUFLLENBQUM7UUFDcEMsWUFBTyxHQUFPLEVBQUUsQ0FBQztRQUUxQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztJQUVELENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLElBQUksUUFBUSxDQUFDO1NBQ3JCO1FBRUQsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRW5ELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUU7WUFDL0IsT0FBTyxJQUFJLGVBQWUsQ0FBQztTQUM1QjthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUU7WUFDdEMsT0FBTyxJQUFJLGVBQWUsQ0FBQztTQUM1QjthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUU7WUFDdEMsT0FBTyxJQUFJLGVBQWUsQ0FBQztTQUM1QjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFVO1FBQzNCLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7NEdBeERVLGVBQWU7Z0dBQWYsZUFBZSxvUUNSNUIsa2pHQStEQTsyRkR2RGEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXOzBFQUtYLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0UsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdlBhcnRpdGlvbiwgVGhlbWUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21nLW5hdmJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXZiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXZiYXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBzZWFyY2hlZFRleHQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNwYWNlQXJvdW5kID0gdHJ1ZTtcbiAgQElucHV0KCkgdGhlbWU6IFRoZW1lID0gXCJwcmltYXJ5XCI7XG4gIEBJbnB1dCgpIG9uU21hbGxNZW51QnV0dG9uOnN0cmluZyA9IFwiPVwiO1xuICBASW5wdXQoKSBpc0ZpeGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhcnRpdGlvblR5cGU6IE5hdlBhcnRpdGlvbiA9IFwiMjoxXCI7XG4gIEBJbnB1dCgpIG5hdkRhdGE6YW55ID0ge307XG5cbiAgb25TbWFsbEFjdGl2ZSA9IGZhbHNlO1xuXG4gIHNlYXJjaFF1ZXJ5ID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgb25TbWFsbENsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLm9uU21hbGxBY3RpdmUgPyAnYWN0aXZlJyA6ICcnO1xuICB9XG5cbiAgdG9nZ2xlTmF2KCkge1xuICAgIHRoaXMub25TbWFsbEFjdGl2ZSA9ICF0aGlzLm9uU21hbGxBY3RpdmU7XG4gIH1cblxuICBtYWluTmF2Q2xhc3NlcygpIHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMub25TbWFsbENsYXNzKCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpeGVkKSB7XG4gICAgICBjbGFzc2VzICs9IGAgZml4ZWRgO1xuICAgIH1cblxuICAgIGNsYXNzZXMgKz0gdGhpcy5zcGFjZUFyb3VuZCA/IFwiIHNwYWNlLWFyb3VuZFwiIDogXCJcIjtcblxuICAgIGlmICh0aGlzLnBhcnRpdGlvblR5cGUgPT0gXCIyOjFcIikge1xuICAgICAgY2xhc3NlcyArPSBgIHBvc2l0aW9uLTItMWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhcnRpdGlvblR5cGUgPT0gXCIxOjJcIikge1xuICAgICAgY2xhc3NlcyArPSBgIHBvc2l0aW9uLTEtMmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhcnRpdGlvblR5cGUgPT0gXCIxOjFcIikge1xuICAgICAgY2xhc3NlcyArPSBgIHBvc2l0aW9uLTEtMWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBvbkVudGVyU2VhcmNoUXVlcnkoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT0gXCJFbnRlclwiKSB7XG4gICAgICB0aGlzLnNlbmRTZWFyY2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBzZW5kU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoZWRUZXh0LmVtaXQodGhpcy5zZWFyY2hRdWVyeSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm5hdmJhci13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJuYXZiYXIge3t0aGVtZX19XCIgW25nQ2xhc3NdPVwibWFpbk5hdkNsYXNzZXMoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIGJyYW5kXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2RGF0YSAmJiBuYXZEYXRhLmJyYW5kXCI+XG4gICAgICAgIDxhIFtpbm5lckh0bWxdPVwibmF2RGF0YS5icmFuZC5uYW1lXCIgW3JvdXRlckxpbmtdPVwibmF2RGF0YS5icmFuZC5saW5rXCI+PC9hPlxuICAgICAgICA8YSAoY2xpY2spPVwidG9nZ2xlTmF2KClcIiBjbGFzcz1cInNtYWxsLW9ubHktb3Blbi1uYXZcIiBbaW5uZXJIdG1sXT1cIm9uU21hbGxNZW51QnV0dG9uXCI+PC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5hdkRhdGEuYnJhbmRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9YnJhbmRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gbGVmdC1uYXZcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuYXZEYXRhLmxlZnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdkRhdGEgJiYgbmF2RGF0YS5sZWZ0ICYmIG5hdkRhdGEubGVmdC5uYXZUeXBlID09ICdpbnB1dCdcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoa2V5dXApID0gXCJvbkVudGVyU2VhcmNoUXVlcnkoJGV2ZW50KVwiIGNsYXNzPVwiaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwibmF2RGF0YS5sZWZ0LmRhdGEucGxhY2Vob2xkZXJcIiAvPlxuICAgICAgICAgIDxhIGNsYXNzPVwiaW5wdXQtYnV0dG9uXCIgKm5nSWY9XCJuYXZEYXRhLmxlZnQuZGF0YS5idG5cIiBbaW5uZXJIdG1sXT1cIm5hdkRhdGEubGVmdC5kYXRhLm5hbWVcIj48L2E+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibmF2RGF0YSAmJiBuYXZEYXRhLmxlZnQgJiYgbmF2RGF0YS5sZWZ0Lm5hdlR5cGUgPT0gJ2xpbmtzJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5kYXRhIG9mIG5hdkRhdGEubGVmdC5kYXRhXCI+XG4gICAgICAgICAgICA8IS0tIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5kYXRhLnR5cGUgJiYgbmRhdGEudHlwZSA9PSAnZHJvcGRvd24nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgIDxhIFtpbm5lckh0bWxdPVwibmRhdGEubmFtZVwiIFtyb3V0ZXJMaW5rXT1cIm5kYXRhLmxpbmtcIiBjbGFzcz1cInRyaWdnZXItZHJvcGRvd25cIj48L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgPGEgKm5nRm9yPVwibGV0IGRyb3BsaW5rIG9mIG5kYXRhLmxpbmtzXCIgW2lubmVySHRtbF09XCJkcm9wbGluay5uYW1lXCI+PC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFuZGF0YS50eXBlXCI+XG4gICAgICAgICAgICAgIDxhIFtpbm5lckh0bWxdPVwibmRhdGEubmFtZVwiIFtyb3V0ZXJMaW5rXT1cIm5kYXRhLmxpbmtcIj48L2E+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbmF2RGF0YS5sZWZ0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWxlZnQtbmF2XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHJpZ2h0LW5hdlwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdkRhdGEucmlnaHRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5hdkRhdGEgJiYgbmF2RGF0YS5yaWdodCAmJiBuYXZEYXRhLnJpZ2h0Lm5hdlR5cGUgPT0gJ2xpbmtzJ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5kYXRhIG9mIG5hdkRhdGEucmlnaHQuZGF0YVwiPlxuICAgICAgICAgICAgPCEtLSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJuZGF0YS50eXBlICYmIG5kYXRhLnR5cGUgPT0gJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8YSBbaW5uZXJIdG1sXT1cIm5kYXRhLm5hbWVcIiBbcm91dGVyTGlua109XCJuZGF0YS5saW5rXCIgY2xhc3M9XCJ0cmlnZ2VyLWRyb3Bkb3duXCI+PC9hPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wLW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgIDxhICpuZ0Zvcj1cImxldCBkcm9wbGluayBvZiBuZGF0YS5saW5rc1wiIFtpbm5lckh0bWxdPVwiZHJvcGxpbmsubmFtZVwiPjwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbmRhdGEudHlwZVwiPlxuICAgICAgICAgICAgICA8YSBbaW5uZXJIdG1sXT1cIm5kYXRhLm5hbWVcIiBbcm91dGVyTGlua109XCJuZGF0YS5saW5rXCI+PC9hPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5hdkRhdGEucmlnaHRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9cmlnaHQtbmF2XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19