UNPKG

cfc-ds

Version:

Design System do Conselho Federal de Contabilidade baseado no govbr-ds

118 lines 18.8 kB
import { Component, Input } from '@angular/core'; import { NavigationEnd } from '@angular/router'; import { filter } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; export class BreadcrumbComponent { router; activatedRoute; /** Lista de breadcrumbs gerados */ links = []; homeUrl; /** Inscrição para monitorar mudanças na rota */ routeSubscription; constructor(router, activatedRoute) { this.router = router; this.activatedRoute = activatedRoute; } /** Inicializa o componente e observa mudanças de rota */ ngOnInit() { this.updateBreadcrumbs(); this.routeSubscription = this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => { this.updateBreadcrumbs(); }); } getHomeUrl() { if (!this.homeUrl) { return '/'; } return this.homeUrl; } /** Atualiza os breadcrumbs com base na rota ativa */ updateBreadcrumbs() { const breadcrumbs = this.buildBreadcrumbs(this.router.routerState.root); this.removeLastBreadcrumbUrl(breadcrumbs); this.links = breadcrumbs; } /** * Constrói os breadcrumbs recursivamente com base nas rotas ativadas. * @param route Rota ativa. * @param breadcrumbs Lista de breadcrumbs acumulada. * @returns Lista de BreadcrumbLink atualizada. */ buildBreadcrumbs(route, breadcrumbs = []) { route.children.forEach((child) => { const routeSegment = this.getRouteURL(child); const label = this.getBreadcrumbLabel(child.snapshot.data); const fullPath = this.buildFullPath(routeSegment, breadcrumbs); if (label && !this.isDuplicateBreadcrumb(breadcrumbs, label)) { breadcrumbs.push({ label, url: fullPath, target: '_self' }); } this.buildBreadcrumbs(child, breadcrumbs); }); return breadcrumbs; } /** * Obtém o segmento da URL da rota atual. * @param route Rota atual. * @returns Segmento da URL ou string vazia. */ getRouteURL(route) { return route.snapshot.url.length > 0 ? route.snapshot.url.map(segment => segment.path).join('/') : ''; } /** * Constrói o caminho completo concatenando segmentos anteriores. * @param routeSegment Segmento atual da rota. * @param breadcrumbs Lista de breadcrumbs acumulada. * @returns Caminho completo da URL. */ buildFullPath(routeSegment, breadcrumbs) { if (!routeSegment) return ''; const previousPath = breadcrumbs.length > 0 ? breadcrumbs[breadcrumbs.length - 1].url : ''; return previousPath ? `${previousPath}/${routeSegment}` : `/${routeSegment}`; } /** * Obtém o rótulo do breadcrumb a partir dos dados da rota. * @param data Dados da rota. * @returns Rótulo do breadcrumb ou null. */ getBreadcrumbLabel(data) { const label = data['breadcrumb']; return label && typeof label === 'string' && label.trim() ? label.trim() : null; } /** * Remove a URL do último breadcrumb para evitar que seja clicável. * @param breadcrumbs Lista de breadcrumbs. */ removeLastBreadcrumbUrl(breadcrumbs) { if (breadcrumbs.length > 0) { breadcrumbs[breadcrumbs.length - 1].url = undefined; } } /** * Verifica se um breadcrumb já existe na lista para evitar duplicatas. * @param breadcrumbs Lista de breadcrumbs acumulada. * @param label Nome do breadcrumb a verificar. * @returns Verdadeiro se o breadcrumb já existir, falso caso contrário. */ isDuplicateBreadcrumb(breadcrumbs, label) { return breadcrumbs.some(bc => bc.label === label); } /** Cancela a inscrição ao destruir o componente */ ngOnDestroy() { this.routeSubscription?.unsubscribe(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BreadcrumbComponent, selector: "cfc-breadcrumb", inputs: { homeUrl: "homeUrl" }, ngImport: i0, template: "<nav\r\n class=\"br-breadcrumb\"\r\n aria-label=\"Breadcrumbs\">\r\n <ul\r\n class=\"crumb-list\"\r\n style=\"padding-left: 0;\"\r\n role=\"list\">\r\n <li\r\n class=\"crumb\">\r\n <a\r\n class=\"br-button circle\"\r\n [href]=\"getHomeUrl()\"\r\n target=\"_self\">\r\n <i class=\"fas fa-home\"></i>\r\n </a>\r\n </li>\r\n\r\n <li\r\n class=\"crumb\"\r\n *ngFor=\"let link of links; let last = last\">\r\n <i\r\n class=\"icon fas fa-chevron-right\">\r\n </i>\r\n\r\n <a\r\n *ngIf=\"!last\"\r\n [href]=\"link.url\"\r\n [target]=\"link.target\">\r\n <span>\r\n {{ link.label | titlecase }}\r\n </span>\r\n </a>\r\n\r\n\r\n <span\r\n *ngIf=\"last\"\r\n tabindex=\"0\"\r\n aria-current=\"page\">\r\n {{ link.label | titlecase }}\r\n </span>\r\n\r\n </li>\r\n </ul>\r\n</nav>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BreadcrumbComponent, decorators: [{ type: Component, args: [{ selector: 'cfc-breadcrumb', template: "<nav\r\n class=\"br-breadcrumb\"\r\n aria-label=\"Breadcrumbs\">\r\n <ul\r\n class=\"crumb-list\"\r\n style=\"padding-left: 0;\"\r\n role=\"list\">\r\n <li\r\n class=\"crumb\">\r\n <a\r\n class=\"br-button circle\"\r\n [href]=\"getHomeUrl()\"\r\n target=\"_self\">\r\n <i class=\"fas fa-home\"></i>\r\n </a>\r\n </li>\r\n\r\n <li\r\n class=\"crumb\"\r\n *ngFor=\"let link of links; let last = last\">\r\n <i\r\n class=\"icon fas fa-chevron-right\">\r\n </i>\r\n\r\n <a\r\n *ngIf=\"!last\"\r\n [href]=\"link.url\"\r\n [target]=\"link.target\">\r\n <span>\r\n {{ link.label | titlecase }}\r\n </span>\r\n </a>\r\n\r\n\r\n <span\r\n *ngIf=\"last\"\r\n tabindex=\"0\"\r\n aria-current=\"page\">\r\n {{ link.label | titlecase }}\r\n </span>\r\n\r\n </li>\r\n </ul>\r\n</nav>\r\n" }] }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }], propDecorators: { homeUrl: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUEwQixhQUFhLEVBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7OztBQVE1QyxNQUFNLE9BQU8sbUJBQW1CO0lBVXBCO0lBQ0E7SUFWVixtQ0FBbUM7SUFDbkMsS0FBSyxHQUFxQixFQUFFLENBQUM7SUFFcEIsT0FBTyxDQUFVO0lBRTFCLGdEQUFnRDtJQUN4QyxpQkFBaUIsQ0FBZ0I7SUFFekMsWUFDVSxNQUFjLEVBQ2QsY0FBOEI7UUFEOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUNyQyxDQUFDO0lBRUoseURBQXlEO0lBQ3pELFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM5QyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLENBQ2hELENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJ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Q0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHFCQUFxQixDQUFDLFdBQTZCLEVBQUUsS0FBYTtRQUN4RSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO3dHQXRIVSxtQkFBbUI7NEZBQW5CLG1CQUFtQixzRkNWaEMsazhCQTRDQTs7NEZEbENhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxnQkFBZ0I7d0dBUWpCLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIERhdGEgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1iTGluayB9IGZyb20gJy4uLy4uL21vZGVscy9icmVhZGNydW1iLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2ZjLWJyZWFkY3J1bWInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9icmVhZGNydW1iLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqIExpc3RhIGRlIGJyZWFkY3J1bWJzIGdlcmFkb3MgKi9cclxuICBsaW5rczogQnJlYWRjcnVtYkxpbmtbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBob21lVXJsPzogc3RyaW5nO1xyXG5cclxuICAvKiogSW5zY3Jpw6fDo28gcGFyYSBtb25pdG9yYXIgbXVkYW7Dp2FzIG5hIHJvdGEgKi9cclxuICBwcml2YXRlIHJvdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkge31cclxuXHJcbiAgLyoqIEluaWNpYWxpemEgbyBjb21wb25lbnRlIGUgb2JzZXJ2YSBtdWRhbsOnYXMgZGUgcm90YSAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpO1xyXG5cclxuICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVCcmVhZGNydW1icygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRIb21lVXJsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuaG9tZVVybCkge1xyXG4gICAgICByZXR1cm4gJy8nO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmhvbWVVcmw7XHJcbiAgfVxyXG5cclxuICAvKiogQXR1YWxpemEgb3MgYnJlYWRjcnVtYnMgY29tIGJhc2UgbmEgcm90YSBhdGl2YSAqL1xyXG4gIHByaXZhdGUgdXBkYXRlQnJlYWRjcnVtYnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuYnVpbGRCcmVhZGNydW1icyh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5yb290KTtcclxuICAgIHRoaXMucmVtb3ZlTGFzdEJyZWFkY3J1bWJVcmwoYnJlYWRjcnVtYnMpO1xyXG4gICAgdGhpcy5saW5rcyA9IGJyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3Ryw7NpIG9zIGJyZWFkY3J1bWJzIHJlY3Vyc2l2YW1lbnRlIGNvbSBiYXNlIG5hcyByb3RhcyBhdGl2YWRhcy5cclxuICAgKiBAcGFyYW0gcm91dGUgUm90YSBhdGl2YS5cclxuICAgKiBAcGFyYW0gYnJlYWRjcnVtYnMgTGlzdGEgZGUgYnJlYWRjcnVtYnMgYWN1bXVsYWRhLlxyXG4gICAqIEByZXR1cm5zIExpc3RhIGRlIEJyZWFkY3J1bWJMaW5rIGF0dWFsaXphZGEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZEJyZWFkY3J1bWJzKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgYnJlYWRjcnVtYnM6IEJyZWFkY3J1bWJMaW5rW10gPSBbXSk6IEJyZWFkY3J1bWJMaW5rW10ge1xyXG4gICAgcm91dGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gdGhpcy5nZXRSb3V0ZVVSTChjaGlsZCk7XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5nZXRCcmVhZGNydW1iTGFiZWwoY2hpbGQuc25hcHNob3QuZGF0YSk7XHJcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gdGhpcy5idWlsZEZ1bGxQYXRoKHJvdXRlU2VnbWVudCwgYnJlYWRjcnVtYnMpO1xyXG5cclxuICAgICAgaWYgKGxhYmVsICYmICF0aGlzLmlzRHVwbGljYXRlQnJlYWRjcnVtYihicmVhZGNydW1icywgbGFiZWwpKSB7XHJcbiAgICAgICAgYnJlYWRjcnVtYnMucHVzaCh7IGxhYmVsLCB1cmw6IGZ1bGxQYXRoLCB0YXJnZXQ6ICdfc2VsZicgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuYnVpbGRCcmVhZGNydW1icyhjaGlsZCwgYnJlYWRjcnVtYnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0w6ltIG8gc2VnbWVudG8gZGEgVVJMIGRhIHJvdGEgYXR1YWwuXHJcbiAgICogQHBhcmFtIHJvdXRlIFJvdGEgYXR1YWwuXHJcbiAgICogQHJldHVybnMgU2VnbWVudG8gZGEgVVJMIG91IHN0cmluZyB2YXppYS5cclxuICAgKi9cclxuICBwcml2YXRlIGdldFJvdXRlVVJMKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcm91dGUuc25hcHNob3QudXJsLmxlbmd0aCA+IDBcclxuICAgICAgPyByb3V0ZS5zbmFwc2hvdC51cmwubWFwKHNlZ21lbnQgPT4gc2VnbWVudC5wYXRoKS5qb2luKCcvJylcclxuICAgICAgOiAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0csOzaSBvIGNhbWluaG8gY29tcGxldG8gY29uY2F0ZW5hbmRvIHNlZ21lbnRvcyBhbnRlcmlvcmVzLlxyXG4gICAqIEBwYXJhbSByb3V0ZVNlZ21lbnQgU2VnbWVudG8gYXR1YWwgZGEgcm90YS5cclxuICAgKiBAcGFyYW0gYnJlYWRjcnVtYnMgTGlzdGEgZGUgYnJlYWRjcnVtYnMgYWN1bXVsYWRhLlxyXG4gICAqIEByZXR1cm5zIENhbWluaG8gY29tcGxldG8gZGEgVVJMLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRGdWxsUGF0aChyb3V0ZVNlZ21lbnQ6IHN0cmluZywgYnJlYWRjcnVtYnM6IEJyZWFkY3J1bWJMaW5rW10pOiBzdHJpbmcge1xyXG4gICAgaWYgKCFyb3V0ZVNlZ21lbnQpIHJldHVybiAnJztcclxuICAgIGNvbnN0IHByZXZpb3VzUGF0aCA9IGJyZWFkY3J1bWJzLmxlbmd0aCA+IDAgPyBicmVhZGNydW1ic1ticmVhZGNydW1icy5sZW5ndGggLSAxXS51cmwgOiAnJztcclxuICAgIHJldHVybiBwcmV2aW91c1BhdGggPyBgJHtwcmV2aW91c1BhdGh9LyR7cm91dGVTZWdtZW50fWAgOiBgLyR7cm91dGVTZWdtZW50fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnTDqW0gbyByw7N0dWxvIGRvIGJyZWFkY3J1bWIgYSBwYXJ0aXIgZG9zIGRhZG9zIGRhIHJvdGEuXHJcbiAgICogQHBhcmFtIGRhdGEgRGFkb3MgZGEgcm90YS5cclxuICAgKiBAcmV0dXJucyBSw7N0dWxvIGRvIGJyZWFkY3J1bWIgb3UgbnVsbC5cclxuICAgKi9cclxuICBwcml2YXRlIGdldEJyZWFkY3J1bWJMYWJlbChkYXRhOiBEYXRhKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBsYWJlbCA9IGRhdGFbJ2JyZWFkY3J1bWInXTtcclxuICAgIHJldHVybiBsYWJlbCAmJiB0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLnRyaW0oKSA/IGxhYmVsLnRyaW0oKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYSBVUkwgZG8gw7psdGltbyBicmVhZGNydW1iIHBhcmEgZXZpdGFyIHF1ZSBzZWphIGNsaWPDoXZlbC5cclxuICAgKiBAcGFyYW0gYnJlYWRjcnVtYnMgTGlzdGEgZGUgYnJlYWRjcnVtYnMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVMYXN0QnJlYWRjcnVtYlVybChicmVhZGNydW1iczogQnJlYWRjcnVtYkxpbmtbXSk6IHZvaWQge1xyXG4gICAgaWYgKGJyZWFkY3J1bWJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYnJlYWRjcnVtYnNbYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV0udXJsID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpY2Egc2UgdW0gYnJlYWRjcnVtYiBqw6EgZXhpc3RlIG5hIGxpc3RhIHBhcmEgZXZpdGFyIGR1cGxpY2F0YXMuXHJcbiAgICogQHBhcmFtIGJyZWFkY3J1bWJzIExpc3RhIGRlIGJyZWFkY3J1bWJzIGFjdW11bGFkYS5cclxuICAgKiBAcGFyYW0gbGFiZWwgTm9tZSBkbyBicmVhZGNydW1iIGEgdmVyaWZpY2FyLlxyXG4gICAqIEByZXR1cm5zIFZlcmRhZGVpcm8gc2UgbyBicmVhZGNydW1iIGrDoSBleGlzdGlyLCBmYWxzbyBjYXNvIGNvbnRyw6FyaW8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc0R1cGxpY2F0ZUJyZWFkY3J1bWIoYnJlYWRjcnVtYnM6IEJyZWFkY3J1bWJMaW5rW10sIGxhYmVsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBicmVhZGNydW1icy5zb21lKGJjID0+IGJjLmxhYmVsID09PSBsYWJlbCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2FuY2VsYSBhIGluc2NyacOnw6NvIGFvIGRlc3RydWlyIG8gY29tcG9uZW50ZSAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPG5hdlxyXG4gIGNsYXNzPVwiYnItYnJlYWRjcnVtYlwiXHJcbiAgYXJpYS1sYWJlbD1cIkJyZWFkY3J1bWJzXCI+XHJcbiAgPHVsXHJcbiAgICBjbGFzcz1cImNydW1iLWxpc3RcIlxyXG4gICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDA7XCJcclxuICAgIHJvbGU9XCJsaXN0XCI+XHJcbiAgICA8bGlcclxuICAgICAgY2xhc3M9XCJjcnVtYlwiPlxyXG4gICAgICA8YVxyXG4gICAgICAgIGNsYXNzPVwiYnItYnV0dG9uIGNpcmNsZVwiXHJcbiAgICAgICAgW2hyZWZdPVwiZ2V0SG9tZVVybCgpXCJcclxuICAgICAgICB0YXJnZXQ9XCJfc2VsZlwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWhvbWVcIj48L2k+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbGk+XHJcblxyXG4gICAgPGxpXHJcbiAgICAgIGNsYXNzPVwiY3J1bWJcIlxyXG4gICAgICAqbmdGb3I9XCJsZXQgbGluayBvZiBsaW5rczsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgIDxpXHJcbiAgICAgICAgY2xhc3M9XCJpY29uIGZhcyBmYS1jaGV2cm9uLXJpZ2h0XCI+XHJcbiAgICAgIDwvaT5cclxuXHJcbiAgICAgIDxhXHJcbiAgICAgICAgKm5nSWY9XCIhbGFzdFwiXHJcbiAgICAgICAgW2hyZWZdPVwibGluay51cmxcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwibGluay50YXJnZXRcIj5cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgIHt7IGxpbmsubGFiZWwgfCB0aXRsZWNhc2UgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYT5cclxuXHJcblxyXG4gICAgICA8c3BhblxyXG4gICAgICAgICpuZ0lmPVwibGFzdFwiXHJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgICBhcmlhLWN1cnJlbnQ9XCJwYWdlXCI+XHJcbiAgICAgICAge3sgbGluay5sYWJlbCB8IHRpdGxlY2FzZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcblxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L25hdj5cclxuIl19