UNPKG

ngx-obelisco-example

Version:

Componentes funcionales y reutilizables para Angular.

27 lines 22.4 kB
import { Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/router"; export class ONavVerticalComponent { constructor() { this.navVertItems = []; this.exactRouteActive = false; this.customClasses = ''; } scrollToTop() { window.scrollTo({ top: 0, behavior: 'smooth' }); } } ONavVerticalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ONavVerticalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); ONavVerticalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ONavVerticalComponent, selector: "o-nav-vertical", inputs: { navVertItems: "navVertItems", exactRouteActive: "exactRouteActive", customClasses: "customClasses" }, ngImport: i0, template: "<nav [ngClass]=\"customClasses\">\r\n <ul class=\"nav flex-column nav-pills nav-lg\">\r\n <li class=\"nav-item\" *ngFor=\"let item of navVertItems; index as i\">\r\n <a\r\n *ngIf=\"item.children && item.children?.length !== 0; else templateChild\"\r\n routerLinkActive=\"active-child\"\r\n class=\"nav-link\"\r\n [class.active-child]=\"navLink.isActive\"\r\n #navLink=\"routerLinkActive\"\r\n [class.disabled]=\"item.isDisabled\"\r\n [routerLink]=\"item.route\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"item.icon\">\r\n <i *ngIf=\"item.icon.includes('bx')\" [ngClass]=\"item.icon\"></i>\r\n <span *ngIf=\"!item.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n item.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ item.title }}</span>\r\n </div>\r\n </a>\r\n <ng-template #templateChild>\r\n <a\r\n class=\"nav-link\"\r\n [class.active]=\"navLinkSecondLevel.isActive\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: exactRouteActive ? true : false }\"\r\n #navLinkSecondLevel=\"routerLinkActive\"\r\n [routerLink]=\"item.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"item.icon\">\r\n <i *ngIf=\"item.icon.includes('bx')\" [ngClass]=\"item.icon\"></i>\r\n <span *ngIf=\"!item.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n item.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ item.title }}</span>\r\n </div>\r\n </a>\r\n </ng-template>\r\n <ul *ngFor=\"let secondItem of item.children; index as j\" class=\"nav flex-column nav-pills\">\r\n <li class=\"nav-item\">\r\n <a\r\n *ngIf=\"secondItem.children && secondItem.children?.length !== 0; else templateChild\"\r\n class=\"nav-link\"\r\n [class.active-child]=\"navLinkSecondLevel.isActive\"\r\n routerLinkActive=\"active-child\"\r\n #navLinkSecondLevel=\"routerLinkActive\"\r\n [routerLink]=\"secondItem.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"secondItem.icon\">\r\n <i *ngIf=\"secondItem.icon.includes('bx')\" [ngClass]=\"secondItem.icon\"></i>\r\n <span *ngIf=\"!secondItem.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n secondItem.icon\r\n }}</span>\r\n </ng-container>\r\n <i class=\"bx bxs-info-circle\"></i>\r\n <span>{{ secondItem.title }} </span>\r\n </div>\r\n </a>\r\n <ng-template #templateChild>\r\n <a\r\n class=\"nav-link\"\r\n [class.active]=\"navLinkSecondLevel.isActive\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: exactRouteActive ? true : false }\"\r\n #navLinkSecondLevel=\"routerLinkActive\"\r\n [routerLink]=\"secondItem.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"secondItem.icon\">\r\n <i *ngIf=\"secondItem.icon.includes('bx')\" [ngClass]=\"secondItem.icon\"></i>\r\n <span *ngIf=\"!secondItem.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n secondItem.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ secondItem.title }} </span>\r\n </div>\r\n </a>\r\n </ng-template>\r\n <ul *ngFor=\"let thirdItem of secondItem.children; index as z\" class=\"nav flex-column nav-pills\">\r\n <li class=\"nav-item\">\r\n <a\r\n class=\"nav-link\"\r\n [class.active]=\"navLinkThirdLevel.isActive\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: exactRouteActive ? true : false }\"\r\n #navLinkThirdLevel=\"routerLinkActive\"\r\n [routerLink]=\"thirdItem.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"thirdItem.icon\">\r\n <i *ngIf=\"thirdItem.icon.includes('bx')\" [ngClass]=\"thirdItem.icon\"></i>\r\n <span *ngIf=\"!thirdItem.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n thirdItem.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ thirdItem.title }}</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ONavVerticalComponent, decorators: [{ type: Component, args: [{ selector: 'o-nav-vertical', template: "<nav [ngClass]=\"customClasses\">\r\n <ul class=\"nav flex-column nav-pills nav-lg\">\r\n <li class=\"nav-item\" *ngFor=\"let item of navVertItems; index as i\">\r\n <a\r\n *ngIf=\"item.children && item.children?.length !== 0; else templateChild\"\r\n routerLinkActive=\"active-child\"\r\n class=\"nav-link\"\r\n [class.active-child]=\"navLink.isActive\"\r\n #navLink=\"routerLinkActive\"\r\n [class.disabled]=\"item.isDisabled\"\r\n [routerLink]=\"item.route\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"item.icon\">\r\n <i *ngIf=\"item.icon.includes('bx')\" [ngClass]=\"item.icon\"></i>\r\n <span *ngIf=\"!item.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n item.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ item.title }}</span>\r\n </div>\r\n </a>\r\n <ng-template #templateChild>\r\n <a\r\n class=\"nav-link\"\r\n [class.active]=\"navLinkSecondLevel.isActive\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: exactRouteActive ? true : false }\"\r\n #navLinkSecondLevel=\"routerLinkActive\"\r\n [routerLink]=\"item.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"item.icon\">\r\n <i *ngIf=\"item.icon.includes('bx')\" [ngClass]=\"item.icon\"></i>\r\n <span *ngIf=\"!item.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n item.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ item.title }}</span>\r\n </div>\r\n </a>\r\n </ng-template>\r\n <ul *ngFor=\"let secondItem of item.children; index as j\" class=\"nav flex-column nav-pills\">\r\n <li class=\"nav-item\">\r\n <a\r\n *ngIf=\"secondItem.children && secondItem.children?.length !== 0; else templateChild\"\r\n class=\"nav-link\"\r\n [class.active-child]=\"navLinkSecondLevel.isActive\"\r\n routerLinkActive=\"active-child\"\r\n #navLinkSecondLevel=\"routerLinkActive\"\r\n [routerLink]=\"secondItem.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"secondItem.icon\">\r\n <i *ngIf=\"secondItem.icon.includes('bx')\" [ngClass]=\"secondItem.icon\"></i>\r\n <span *ngIf=\"!secondItem.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n secondItem.icon\r\n }}</span>\r\n </ng-container>\r\n <i class=\"bx bxs-info-circle\"></i>\r\n <span>{{ secondItem.title }} </span>\r\n </div>\r\n </a>\r\n <ng-template #templateChild>\r\n <a\r\n class=\"nav-link\"\r\n [class.active]=\"navLinkSecondLevel.isActive\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: exactRouteActive ? true : false }\"\r\n #navLinkSecondLevel=\"routerLinkActive\"\r\n [routerLink]=\"secondItem.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"secondItem.icon\">\r\n <i *ngIf=\"secondItem.icon.includes('bx')\" [ngClass]=\"secondItem.icon\"></i>\r\n <span *ngIf=\"!secondItem.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n secondItem.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ secondItem.title }} </span>\r\n </div>\r\n </a>\r\n </ng-template>\r\n <ul *ngFor=\"let thirdItem of secondItem.children; index as z\" class=\"nav flex-column nav-pills\">\r\n <li class=\"nav-item\">\r\n <a\r\n class=\"nav-link\"\r\n [class.active]=\"navLinkThirdLevel.isActive\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: exactRouteActive ? true : false }\"\r\n #navLinkThirdLevel=\"routerLinkActive\"\r\n [routerLink]=\"thirdItem.route\"\r\n [class.disabled]=\"item.isDisabled\"\r\n (click)=\"scrollToTop()\"\r\n >\r\n <div class=\"nav-icon\">\r\n <ng-container *ngIf=\"thirdItem.icon\">\r\n <i *ngIf=\"thirdItem.icon.includes('bx')\" [ngClass]=\"thirdItem.icon\"></i>\r\n <span *ngIf=\"!thirdItem.icon.includes('bx')\" class=\"material-icons-round\" aria-hidden=\"true\">{{\r\n thirdItem.icon\r\n }}</span>\r\n </ng-container>\r\n <span>{{ thirdItem.title }}</span>\r\n </div>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n</nav>\r\n" }] }], propDecorators: { navVertItems: [{ type: Input }], exactRouteActive: [{ type: Input }], customClasses: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1uYXYtdmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW9iZWxpc2NvL25hdi9vLW5hdi12ZXJ0aWNhbC9vLW5hdi12ZXJ0aWNhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2JlbGlzY28vbmF2L28tbmF2LXZlcnRpY2FsL28tbmF2LXZlcnRpY2FsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUWpELE1BQU0sT0FBTyxxQkFBcUI7SUFMbEM7UUFNa0IsaUJBQVksR0FBdUIsRUFBRSxDQUFDO1FBQ3RDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxrQkFBYSxHQUFXLEVBQUUsQ0FBQztLQUs1QztJQUhRLFdBQVc7UUFDaEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7a0hBUFUscUJBQXFCO3NHQUFyQixxQkFBcUIsc0tDUmxDLHk0S0F1SEE7MkZEL0dhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxnQkFBZ0I7OEJBS1YsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2VmVydGljYWxJdGVtcyB9IGZyb20gJ25neC1vYmVsaXNjby1leGFtcGxlL2NvcmUvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnby1uYXYtdmVydGljYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vLW5hdi12ZXJ0aWNhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vby1uYXYtdmVydGljYWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgT05hdlZlcnRpY2FsQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBwdWJsaWMgbmF2VmVydEl0ZW1zOiBOYXZWZXJ0aWNhbEl0ZW1zW10gPSBbXTtcclxuICBASW5wdXQoKSBwdWJsaWMgZXhhY3RSb3V0ZUFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIHNjcm9sbFRvVG9wKCk6IHZvaWQge1xyXG4gICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxuYXYgW25nQ2xhc3NdPVwiY3VzdG9tQ2xhc3Nlc1wiPlxyXG4gIDx1bCBjbGFzcz1cIm5hdiBmbGV4LWNvbHVtbiBuYXYtcGlsbHMgbmF2LWxnXCI+XHJcbiAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdlZlcnRJdGVtczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuPy5sZW5ndGggIT09IDA7IGVsc2UgdGVtcGxhdGVDaGlsZFwiXHJcbiAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZS1jaGlsZFwiXHJcbiAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZS1jaGlsZF09XCJuYXZMaW5rLmlzQWN0aXZlXCJcclxuICAgICAgICAjbmF2TGluaz1cInJvdXRlckxpbmtBY3RpdmVcIlxyXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVcIlxyXG4gICAgICAgIChjbGljayk9XCJzY3JvbGxUb1RvcCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaWNvblwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uaWNvblwiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIml0ZW0uaWNvbi5pbmNsdWRlcygnYngnKVwiIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXRlbS5pY29uLmluY2x1ZGVzKCdieCcpXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1yb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7XHJcbiAgICAgICAgICAgICAgaXRlbS5pY29uXHJcbiAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2E+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVDaGlsZD5cclxuICAgICAgICA8YVxyXG4gICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm5hdkxpbmtTZWNvbmRMZXZlbC5pc0FjdGl2ZVwiXHJcbiAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiBleGFjdFJvdXRlQWN0aXZlID8gdHJ1ZSA6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgI25hdkxpbmtTZWNvbmRMZXZlbD1cInJvdXRlckxpbmtBY3RpdmVcIlxyXG4gICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZVwiXHJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXRlbS5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1RvcCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWljb25cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uaWNvblwiPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiaXRlbS5pY29uLmluY2x1ZGVzKCdieCcpXCIgW25nQ2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0uaWNvbi5pbmNsdWRlcygnYngnKVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57e1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pY29uXHJcbiAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8dWwgKm5nRm9yPVwibGV0IHNlY29uZEl0ZW0gb2YgaXRlbS5jaGlsZHJlbjsgaW5kZXggYXMgalwiIGNsYXNzPVwibmF2IGZsZXgtY29sdW1uIG5hdi1waWxsc1wiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAqbmdJZj1cInNlY29uZEl0ZW0uY2hpbGRyZW4gJiYgc2Vjb25kSXRlbS5jaGlsZHJlbj8ubGVuZ3RoICE9PSAwOyBlbHNlIHRlbXBsYXRlQ2hpbGRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rXCJcclxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS1jaGlsZF09XCJuYXZMaW5rU2Vjb25kTGV2ZWwuaXNBY3RpdmVcIlxyXG4gICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlLWNoaWxkXCJcclxuICAgICAgICAgICAgI25hdkxpbmtTZWNvbmRMZXZlbD1cInJvdXRlckxpbmtBY3RpdmVcIlxyXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJzZWNvbmRJdGVtLnJvdXRlXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1RvcCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlY29uZEl0ZW0uaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWNvbmRJdGVtLmljb24uaW5jbHVkZXMoJ2J4JylcIiBbbmdDbGFzc109XCJzZWNvbmRJdGVtLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWNvbmRJdGVtLmljb24uaW5jbHVkZXMoJ2J4JylcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLXJvdW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgc2Vjb25kSXRlbS5pY29uXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImJ4IGJ4cy1pbmZvLWNpcmNsZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBzZWNvbmRJdGVtLnRpdGxlIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlQ2hpbGQ+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJuYXZMaW5rU2Vjb25kTGV2ZWwuaXNBY3RpdmVcIlxyXG4gICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiBleGFjdFJvdXRlQWN0aXZlID8gdHJ1ZSA6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICNuYXZMaW5rU2Vjb25kTGV2ZWw9XCJyb3V0ZXJMaW5rQWN0aXZlXCJcclxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzZWNvbmRJdGVtLnJvdXRlXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXRlbS5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2Nyb2xsVG9Ub3AoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWNvbmRJdGVtLmljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWNvbmRJdGVtLmljb24uaW5jbHVkZXMoJ2J4JylcIiBbbmdDbGFzc109XCJzZWNvbmRJdGVtLmljb25cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNlY29uZEl0ZW0uaWNvbi5pbmNsdWRlcygnYngnKVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZEl0ZW0uaWNvblxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2Vjb25kSXRlbS50aXRsZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8dWwgKm5nRm9yPVwibGV0IHRoaXJkSXRlbSBvZiBzZWNvbmRJdGVtLmNoaWxkcmVuOyBpbmRleCBhcyB6XCIgY2xhc3M9XCJuYXYgZmxleC1jb2x1bW4gbmF2LXBpbGxzXCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJuYXZMaW5rVGhpcmRMZXZlbC5pc0FjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7IGV4YWN0OiBleGFjdFJvdXRlQWN0aXZlID8gdHJ1ZSA6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICAgI25hdkxpbmtUaGlyZExldmVsPVwicm91dGVyTGlua0FjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJ0aGlyZEl0ZW0ucm91dGVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2Nyb2xsVG9Ub3AoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlyZEl0ZW0uaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwidGhpcmRJdGVtLmljb24uaW5jbHVkZXMoJ2J4JylcIiBbbmdDbGFzc109XCJ0aGlyZEl0ZW0uaWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0aGlyZEl0ZW0uaWNvbi5pbmNsdWRlcygnYngnKVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtcm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcmRJdGVtLmljb25cclxuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRoaXJkSXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvbGk+XHJcbiAgPC91bD5cclxuPC9uYXY+XHJcbiJdfQ==