lamb-web-lib
Version:
LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).
229 lines • 25 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
/**
* @license
* Copyright Lamb Team. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { EventEmitter, Component, Input, Output, ViewChildren, ElementRef, QueryList, } from '@angular/core';
import { LambMenuItem } from './menu-item';
import { LambMenuService } from './menu.service';
import { takeWhile } from 'rxjs/operators';
import { getElementHeight } from './helpers';
/**
* @param {?} item
* @return {?}
*/
function sumSubmenuHeight(item) {
return item.expanded ?
(item.subMenuHeight || 0) + item.children.filter(function (c) { return c.children; }).reduce(function (acc, c) { return acc + sumSubmenuHeight(c); }, 0)
: 0;
}
var LambMenuItemComponent = /** @class */ (function () {
function LambMenuItemComponent(lambMenuService) {
this.lambMenuService = lambMenuService;
this.lambMenuItem = (/** @type {?} */ (null));
this.hoverItem = new EventEmitter();
this.toggleSubMenu = new EventEmitter();
this.selectItem = new EventEmitter();
this.itemClick = new EventEmitter();
this.alive = true;
this.maxHeight = 0;
}
Object.defineProperty(LambMenuItemComponent.prototype, "lambMenuItemm", {
// @Input() lambMenuItemm = <LambMenuItem>null;
set:
// @Input() lambMenuItemm = <LambMenuItem>null;
/**
* @param {?} lambMenuItem
* @return {?}
*/
function (lambMenuItem) {
if (lambMenuItem) {
lambMenuItem.icon = (lambMenuItem.icon &&
(lambMenuItem.icon !== 'icmn-books') &&
(lambMenuItem.icon !== 'icmb-books') &&
lambMenuItem.icon)
|| this.randonIcon();
lambMenuItem.link = (lambMenuItem.link && !lambMenuItem.url
&& !(lambMenuItem.children && lambMenuItem.children.length)
&& !lambMenuItem.group && !lambMenuItem.hidden) && '/' + lambMenuItem.link;
// setTimeout(() => {
this.lambMenuItem = lambMenuItem;
// }, 0)
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
LambMenuItemComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
// this.lambMenuItem.children.length
this.subMenu.changes
.pipe(takeWhile(function () { return _this.alive; }))
.subscribe(function () {
_this.updateSubmenuHeight();
_this.updateMaxHeight();
});
this.lambMenuService.onSubmenuToggle$()
.pipe(takeWhile(function () { return _this.alive; }))
.subscribe(function () {
_this.updateMaxHeight();
});
this.updateSubmenuHeight();
this.updateMaxHeight();
};
/**
* @return {?}
*/
LambMenuItemComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.alive = false;
};
Object.defineProperty(LambMenuItemComponent.prototype, "icons", {
get: /**
* @return {?}
*/
function () {
return [
'fa fa-adn',
'fa fa-code',
'fa fa-bullhorn',
'fa fa-ambulance',
'fa fa-android',
'fa fa-angellist',
'fa fa-apple',
'fa fa-at',
'fa fa-chrome',
'fa fa-child',
];
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
LambMenuItemComponent.prototype.randonIcon = /**
* @return {?}
*/
function () {
return this.icons[Math.floor(Math.random() * this.icons.length)];
};
/**
* @return {?}
*/
LambMenuItemComponent.prototype.updateSubmenuHeight = /**
* @return {?}
*/
function () {
this.lambMenuItem.subMenuHeight = this.subMenu.reduce(function (acc, c) { return acc + getElementHeight(c.nativeElement); }, 0);
};
/**
* @return {?}
*/
LambMenuItemComponent.prototype.updateMaxHeight = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout(function () {
_this.maxHeight = sumSubmenuHeight(_this.lambMenuItem);
}, 0);
};
/**
* @param {?} item
* @return {?}
*/
LambMenuItemComponent.prototype.onHoverItem = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.hoverItem.emit(item);
};
/**
* @param {?} item
* @return {?}
*/
LambMenuItemComponent.prototype.onToggleSubMenu = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.toggleSubMenu.emit(item);
};
/**
* @param {?} item
* @return {?}
*/
LambMenuItemComponent.prototype.onItemClick = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.itemClick.emit(item);
};
/**
* @param {?} item
* @return {?}
*/
LambMenuItemComponent.prototype.onSelectItem = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.selectItem.emit(item);
};
LambMenuItemComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line:component-selector
selector: '[lambMenuItem]',
template: "<span *ngIf=\"lambMenuItem.group && !lambMenuItem.hidden\">\n <i class=\"lamb-menu-icon {{ lambMenuItem.icon }}\" *ngIf=\"lambMenuItem.icon\"></i>\n {{ lambMenuItem.title }} 1\n</span>\n<a *ngIf=\"lambMenuItem.link && !lambMenuItem.url\n && !(lambMenuItem.children && lambMenuItem.children.length) && !lambMenuItem.group && !lambMenuItem.hidden\" [routerLink]=\"lambMenuItem.link\"\n [fragment]=\"lambMenuItem.fragment\" [attr.target]=\"lambMenuItem.target\" [attr.title]=\"lambMenuItem.title\" [class.active]=\"lambMenuItem.selected\"\n (mouseenter)=\"onHoverItem(lambMenuItem)\">\n <i class=\"lamb-menu-icon {{ lambMenuItem.icon }}\" *ngIf=\"lambMenuItem.icon\"></i>\n <span class=\"lamb-menu-title\">{{ lambMenuItem.title }}</span>\n</a>\n<a *ngIf=\"lambMenuItem.url && !(lambMenuItem.children && lambMenuItem.children.length)\n && !lambMenuItem.link && !lambMenuItem.group && !lambMenuItem.hidden\" [attr.href]=\"lambMenuItem.url\" [attr.target]=\"lambMenuItem.target\"\n [attr.title]=\"lambMenuItem.title\" [class.active]=\"lambMenuItem.selected\" (mouseenter)=\"onHoverItem(lambMenuItem)\" (click)=\"onSelectItem(lambMenuItem)\">\n <i class=\"lamb-menu-icon {{ lambMenuItem.icon }}\" *ngIf=\"lambMenuItem.icon\"></i>\n <span class=\"lamb-menu-title\">{{ lambMenuItem.title }}</span>\n</a>\n<a *ngIf=\"!(lambMenuItem.children && lambMenuItem.children.length) && !lambMenuItem.link\n && !lambMenuItem.url && !lambMenuItem.group && !lambMenuItem.hidden\" [attr.target]=\"lambMenuItem.target\" [attr.title]=\"lambMenuItem.title\"\n [class.active]=\"lambMenuItem.selected\" (mouseenter)=\"onHoverItem(lambMenuItem)\" (click)=\"$event.preventDefault(); onItemClick(lambMenuItem);\">\n <i class=\"lamb-menu-icon {{ lambMenuItem.icon }}\" *ngIf=\"lambMenuItem.icon\"></i>\n <span class=\"lamb-menu-title\">{{ lambMenuItem.title }}</span>\n</a>\n<a *ngIf=\"(lambMenuItem.children && lambMenuItem.children.length) && !lambMenuItem.hidden\" (click)=\"$event.preventDefault(); onToggleSubMenu(lambMenuItem);\"\n [attr.target]=\"lambMenuItem.target\" [attr.title]=\"lambMenuItem.title\" [class.active]=\"lambMenuItem.selected\" (mouseenter)=\"onHoverItem(lambMenuItem)\"\n href=\"#\">\n <i class=\"lamb-menu-icon {{ lambMenuItem.icon }}\" *ngIf=\"lambMenuItem.icon\"></i>\n <span class=\"lamb-menu-title\">{{ lambMenuItem.title }}</span>\n <!-- <i class=\"ion chevron\" [class.ion-chevron-up]=\"!lambMenuItem.expanded\" [class.ion-chevron-down]=\"lambMenuItem.expanded\"></i> -->\n <i class=\"fa chevron\" [class.fa-chevron-up]=\"!lambMenuItem.expanded\" [class.fa-chevron-down]=\"lambMenuItem.expanded\"></i>\n</a>\n<ul *ngIf=\"(lambMenuItem.children && lambMenuItem.children.length) && !lambMenuItem.hidden\" [class.collapsed]=\"!(lambMenuItem.children && lambMenuItem.expanded)\"\n [class.expanded]=\"lambMenuItem.expanded\" class=\"lamb-menu-items\" [style.max-height.px]=\"maxHeight\">\n <li lambMenuItem *ngFor=\"let item of lambMenuItem.children\" [lambMenuItemm]=\"item\" [class.lamb-menu-group]=\"item.group\" (hoverItem)=\"onHoverItem($event)\"\n (toggleSubMenu)=\"onToggleSubMenu($event)\" (selectItem)=\"onSelectItem($event)\" (itemClick)=\"onItemClick($event)\" class=\"lamb-menu-item\"></li>\n</ul>",
},] },
];
LambMenuItemComponent.ctorParameters = function () { return [
{ type: LambMenuService }
]; };
LambMenuItemComponent.propDecorators = {
lambMenuItemm: [{ type: Input }],
hoverItem: [{ type: Output }],
toggleSubMenu: [{ type: Output }],
selectItem: [{ type: Output }],
itemClick: [{ type: Output }],
subMenu: [{ type: ViewChildren, args: [LambMenuItemComponent, { read: ElementRef },] }]
};
return LambMenuItemComponent;
}());
export { LambMenuItemComponent };
if (false) {
/** @type {?} */
LambMenuItemComponent.prototype.lambMenuItem;
/** @type {?} */
LambMenuItemComponent.prototype.hoverItem;
/** @type {?} */
LambMenuItemComponent.prototype.toggleSubMenu;
/** @type {?} */
LambMenuItemComponent.prototype.selectItem;
/** @type {?} */
LambMenuItemComponent.prototype.itemClick;
/** @type {?} */
LambMenuItemComponent.prototype.alive;
/** @type {?} */
LambMenuItemComponent.prototype.subMenu;
/** @type {?} */
LambMenuItemComponent.prototype.maxHeight;
/** @type {?} */
LambMenuItemComponent.prototype.lambMenuService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2xhbWItd2ViLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL21lbnUvbWVudS1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFPQSxPQUFPLEVBQ0wsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixZQUFZLEVBQ25FLFVBQVUsRUFBRSxTQUFTLEdBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7O0FBRzdDLDBCQUEwQixJQUFrQjtJQUMxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxRQUFRLEVBQVYsQ0FBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBRyxFQUFFLENBQUMsSUFBSyxPQUFBLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBekIsQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFDbEgsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRDtJQXVFRSwrQkFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBOUI3QyxpQkFBWSxHQUFHLG1CQUFjLElBQUksRUFBQSxDQUFDO1FBb0IvQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztR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OEM7O0lBQzlDLDhDQUFrRDs7SUFDbEQsMkNBQStDOztJQUMvQywwQ0FBOEM7O0lBRTlDLHNDQUFxQjs7SUFFckIsd0NBQTBGOztJQUMxRiwwQ0FBYzs7SUFFRixnREFBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBMYW1iIFRlYW0uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsIFF1ZXJ5TGlzdCwgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMYW1iTWVudUl0ZW0gfSBmcm9tICcuL21lbnUtaXRlbSc7XHJcbmltcG9ydCB7IExhbWJNZW51U2VydmljZSB9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBnZXRFbGVtZW50SGVpZ2h0IH0gZnJvbSAnLi9oZWxwZXJzJztcclxuXHJcblxyXG5mdW5jdGlvbiBzdW1TdWJtZW51SGVpZ2h0KGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gIHJldHVybiBpdGVtLmV4cGFuZGVkID9cclxuICAgIChpdGVtLnN1Yk1lbnVIZWlnaHQgfHwgMCkgKyBpdGVtLmNoaWxkcmVuLmZpbHRlcihjID0+IGMuY2hpbGRyZW4pLnJlZHVjZSgoYWNjLCBjKSA9PiBhY2MgKyBzdW1TdWJtZW51SGVpZ2h0KGMpLCAwKVxyXG4gICAgOiAwO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdbbGFtYk1lbnVJdGVtXScsXHJcbiAgdGVtcGxhdGU6IGA8c3BhbiAqbmdJZj1cImxhbWJNZW51SXRlbS5ncm91cCAmJiAhbGFtYk1lbnVJdGVtLmhpZGRlblwiPlxyXG4gICAgPGkgY2xhc3M9XCJsYW1iLW1lbnUtaWNvbiB7eyBsYW1iTWVudUl0ZW0uaWNvbiB9fVwiICpuZ0lmPVwibGFtYk1lbnVJdGVtLmljb25cIj48L2k+XHJcbiAgICB7eyBsYW1iTWVudUl0ZW0udGl0bGUgfX0gMVxyXG48L3NwYW4+XHJcbjxhICpuZ0lmPVwibGFtYk1lbnVJdGVtLmxpbmsgJiYgIWxhbWJNZW51SXRlbS51cmxcclxuICAmJiAhKGxhbWJNZW51SXRlbS5jaGlsZHJlbiAmJiBsYW1iTWVudUl0ZW0uY2hpbGRyZW4ubGVuZ3RoKSAmJiAhbGFtYk1lbnVJdGVtLmdyb3VwICYmICFsYW1iTWVudUl0ZW0uaGlkZGVuXCIgW3JvdXRlckxpbmtdPVwibGFtYk1lbnVJdGVtLmxpbmtcIlxyXG4gICAgW2ZyYWdtZW50XT1cImxhbWJNZW51SXRlbS5mcmFnbWVudFwiIFthdHRyLnRhcmdldF09XCJsYW1iTWVudUl0ZW0udGFyZ2V0XCIgW2F0dHIudGl0bGVdPVwibGFtYk1lbnVJdGVtLnRpdGxlXCIgW2NsYXNzLmFjdGl2ZV09XCJsYW1iTWVudUl0ZW0uc2VsZWN0ZWRcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwib25Ib3Zlckl0ZW0obGFtYk1lbnVJdGVtKVwiPlxyXG4gICAgPGkgY2xhc3M9XCJsYW1iLW1lbnUtaWNvbiB7eyBsYW1iTWVudUl0ZW0uaWNvbiB9fVwiICpuZ0lmPVwibGFtYk1lbnVJdGVtLmljb25cIj48L2k+XHJcbiAgICA8c3BhbiBjbGFzcz1cImxhbWItbWVudS10aXRsZVwiPnt7IGxhbWJNZW51SXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuPC9hPlxyXG48YSAqbmdJZj1cImxhbWJNZW51SXRlbS51cmwgJiYgIShsYW1iTWVudUl0ZW0uY2hpbGRyZW4gJiYgbGFtYk1lbnVJdGVtLmNoaWxkcmVuLmxlbmd0aClcclxuICAmJiAhbGFtYk1lbnVJdGVtLmxpbmsgJiYgIWxhbWJNZW51SXRlbS5ncm91cCAmJiAhbGFtYk1lbnVJdGVtLmhpZGRlblwiIFthdHRyLmhyZWZdPVwibGFtYk1lbnVJdGVtLnVybFwiIFthdHRyLnRhcmdldF09XCJsYW1iTWVudUl0ZW0udGFyZ2V0XCJcclxuICAgIFthdHRyLnRpdGxlXT1cImxhbWJNZW51SXRlbS50aXRsZVwiIFtjbGFzcy5hY3RpdmVdPVwibGFtYk1lbnVJdGVtLnNlbGVjdGVkXCIgKG1vdXNlZW50ZXIpPVwib25Ib3Zlckl0ZW0obGFtYk1lbnVJdGVtKVwiIChjbGljayk9XCJvblNlbGVjdEl0ZW0obGFtYk1lbnVJdGVtKVwiPlxyXG4gICAgPGkgY2xhc3M9XCJsYW1iLW1lbnUtaWNvbiB7eyBsYW1iTWVudUl0ZW0uaWNvbiB9fVwiICpuZ0lmPVwibGFtYk1lbnVJdGVtLmljb25cIj48L2k+XHJcbiAgICA8c3BhbiBjbGFzcz1cImxhbWItbWVudS10aXRsZVwiPnt7IGxhbWJNZW51SXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuPC9hPlxyXG48YSAqbmdJZj1cIiEobGFtYk1lbnVJdGVtLmNoaWxkcmVuICYmIGxhbWJNZW51SXRlbS5jaGlsZHJlbi5sZW5ndGgpICYmICFsYW1iTWVudUl0ZW0ubGlua1xyXG4gICYmICFsYW1iTWVudUl0ZW0udXJsICYmICFsYW1iTWVudUl0ZW0uZ3JvdXAgJiYgIWxhbWJNZW51SXRlbS5oaWRkZW5cIiBbYXR0ci50YXJnZXRdPVwibGFtYk1lbnVJdGVtLnRhcmdldFwiIFthdHRyLnRpdGxlXT1cImxhbWJNZW51SXRlbS50aXRsZVwiXHJcbiAgICBbY2xhc3MuYWN0aXZlXT1cImxhbWJNZW51SXRlbS5zZWxlY3RlZFwiIChtb3VzZWVudGVyKT1cIm9uSG92ZXJJdGVtKGxhbWJNZW51SXRlbSlcIiAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG9uSXRlbUNsaWNrKGxhbWJNZW51SXRlbSk7XCI+XHJcbiAgICA8aSBjbGFzcz1cImxhbWItbWVudS1pY29uIHt7IGxhbWJNZW51SXRlbS5pY29uIH19XCIgKm5nSWY9XCJsYW1iTWVudUl0ZW0uaWNvblwiPjwvaT5cclxuICAgIDxzcGFuIGNsYXNzPVwibGFtYi1tZW51LXRpdGxlXCI+e3sgbGFtYk1lbnVJdGVtLnRpdGxlIH19PC9zcGFuPlxyXG48L2E+XHJcbjxhICpuZ0lmPVwiKGxhbWJNZW51SXRlbS5jaGlsZHJlbiAmJiBsYW1iTWVudUl0ZW0uY2hpbGRyZW4ubGVuZ3RoKSAmJiAhbGFtYk1lbnVJdGVtLmhpZGRlblwiIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgb25Ub2dnbGVTdWJNZW51KGxhbWJNZW51SXRlbSk7XCJcclxuICAgIFthdHRyLnRhcmdldF09XCJsYW1iTWVudUl0ZW0udGFyZ2V0XCIgW2F0dHIudGl0bGVdPVwibGFtYk1lbnVJdGVtLnRpdGxlXCIgW2NsYXNzLmFjdGl2ZV09XCJsYW1iTWVudUl0ZW0uc2VsZWN0ZWRcIiAobW91c2VlbnRlcik9XCJvbkhvdmVySXRlbShsYW1iTWVudUl0ZW0pXCJcclxuICAgIGhyZWY9XCIjXCI+XHJcbiAgICA8aSBjbGFzcz1cImxhbWItbWVudS1pY29uIHt7IGxhbWJNZW51SXRlbS5pY29uIH19XCIgKm5nSWY9XCJsYW1iTWVudUl0ZW0uaWNvblwiPjwvaT5cclxuICAgIDxzcGFuIGNsYXNzPVwibGFtYi1tZW51LXRpdGxlXCI+e3sgbGFtYk1lbnVJdGVtLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgPCEtLSA8aSBjbGFzcz1cImlvbiBjaGV2cm9uXCIgW2NsYXNzLmlvbi1jaGV2cm9uLXVwXT1cIiFsYW1iTWVudUl0ZW0uZXhwYW5kZWRcIiBbY2xhc3MuaW9uLWNoZXZyb24tZG93bl09XCJsYW1iTWVudUl0ZW0uZXhwYW5kZWRcIj48L2k+IC0tPlxyXG4gICAgPGkgY2xhc3M9XCJmYSBjaGV2cm9uXCIgW2NsYXNzLmZhLWNoZXZyb24tdXBdPVwiIWxhbWJNZW51SXRlbS5leHBhbmRlZFwiIFtjbGFzcy5mYS1jaGV2cm9uLWRvd25dPVwibGFtYk1lbnVJdGVtLmV4cGFuZGVkXCI+PC9pPlxyXG48L2E+XHJcbjx1bCAqbmdJZj1cIihsYW1iTWVudUl0ZW0uY2hpbGRyZW4gJiYgbGFtYk1lbnVJdGVtLmNoaWxkcmVuLmxlbmd0aCkgJiYgIWxhbWJNZW51SXRlbS5oaWRkZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEobGFtYk1lbnVJdGVtLmNoaWxkcmVuICYmIGxhbWJNZW51SXRlbS5leHBhbmRlZClcIlxyXG4gICAgW2NsYXNzLmV4cGFuZGVkXT1cImxhbWJNZW51SXRlbS5leHBhbmRlZFwiIGNsYXNzPVwibGFtYi1tZW51LWl0ZW1zXCIgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwibWF4SGVpZ2h0XCI+XHJcbiAgICA8bGkgbGFtYk1lbnVJdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxhbWJNZW51SXRlbS5jaGlsZHJlblwiIFtsYW1iTWVudUl0ZW1tXT1cIml0ZW1cIiBbY2xhc3MubGFtYi1tZW51LWdyb3VwXT1cIml0ZW0uZ3JvdXBcIiAoaG92ZXJJdGVtKT1cIm9uSG92ZXJJdGVtKCRldmVudClcIlxyXG4gICAgICAgICh0b2dnbGVTdWJNZW51KT1cIm9uVG9nZ2xlU3ViTWVudSgkZXZlbnQpXCIgKHNlbGVjdEl0ZW0pPVwib25TZWxlY3RJdGVtKCRldmVudClcIiAoaXRlbUNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudClcIiBjbGFzcz1cImxhbWItbWVudS1pdGVtXCI+PC9saT5cclxuPC91bD5gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGFtYk1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgbGFtYk1lbnVJdGVtID0gPExhbWJNZW51SXRlbT5udWxsO1xyXG4gIC8vIEBJbnB1dCgpIGxhbWJNZW51SXRlbW0gPSA8TGFtYk1lbnVJdGVtPm51bGw7XHJcbiAgQElucHV0KClcclxuICBzZXQgbGFtYk1lbnVJdGVtbShsYW1iTWVudUl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgaWYgKGxhbWJNZW51SXRlbSkge1xyXG4gICAgICBsYW1iTWVudUl0ZW0uaWNvbiA9IChsYW1iTWVudUl0ZW0uaWNvbiAmJlxyXG4gICAgICAgIChsYW1iTWVudUl0ZW0uaWNvbiAhPT0gJ2ljbW4tYm9va3MnKSAmJlxyXG4gICAgICAgIChsYW1iTWVudUl0ZW0uaWNvbiAhPT0gJ2ljbWItYm9va3MnKSAmJlxyXG4gICAgICAgIGxhbWJNZW51SXRlbS5pY29uKVxyXG4gICAgICAgIHx8IHRoaXMucmFuZG9uSWNvbigpO1xyXG4gICAgICBsYW1iTWVudUl0ZW0ubGluayA9IChsYW1iTWVudUl0ZW0ubGluayAmJiAhbGFtYk1lbnVJdGVtLnVybFxyXG4gICAgICAgICYmICEobGFtYk1lbnVJdGVtLmNoaWxkcmVuICYmIGxhbWJNZW51SXRlbS5jaGlsZHJlbi5sZW5ndGgpXHJcbiAgICAgICAgJiYgIWxhbWJNZW51SXRlbS5ncm91cCAmJiAhbGFtYk1lbnVJdGVtLmhpZGRlbikgJiYgJy8nICsgbGFtYk1lbnVJdGVtLmxpbms7XHJcblxyXG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5sYW1iTWVudUl0ZW0gPSBsYW1iTWVudUl0ZW07XHJcbiAgICAgIC8vIH0sIDApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgaG92ZXJJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHRvZ2dsZVN1Yk1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0SXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBhbGl2ZSA9IHRydWU7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oTGFtYk1lbnVJdGVtQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc3ViTWVudTogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gIG1heEhlaWdodCA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFtYk1lbnVTZXJ2aWNlOiBMYW1iTWVudVNlcnZpY2UpIHsgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gdGhpcy5sYW1iTWVudUl0ZW0uY2hpbGRyZW4ubGVuZ3RoXHJcbiAgICB0aGlzLnN1Yk1lbnUuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU3VibWVudUhlaWdodCgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF4SGVpZ2h0KCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGFtYk1lbnVTZXJ2aWNlLm9uU3VibWVudVRvZ2dsZSQoKVxyXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF4SGVpZ2h0KCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlU3VibWVudUhlaWdodCgpO1xyXG4gICAgdGhpcy51cGRhdGVNYXhIZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuYWxpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBpY29ucygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdmYSBmYS1hZG4nLFxyXG4gICAgICAnZmEgZmEtY29kZScsXHJcbiAgICAgICdmYSBmYS1idWxsaG9ybicsXHJcbiAgICAgICdmYSBmYS1hbWJ1bGFuY2UnLFxyXG4gICAgICAnZmEgZmEtYW5kcm9pZCcsXHJcbiAgICAgICdmYSBmYS1hbmdlbGxpc3QnLFxyXG4gICAgICAnZmEgZmEtYXBwbGUnLFxyXG4gICAgICAnZmEgZmEtYXQnLFxyXG4gICAgICAnZmEgZmEtY2hyb21lJyxcclxuICAgICAgJ2ZhIGZhLWNoaWxkJyxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJhbmRvbkljb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pY29uc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLmljb25zLmxlbmd0aCldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdWJtZW51SGVpZ2h0KCkge1xyXG4gICAgdGhpcy5sYW1iTWVudUl0ZW0uc3ViTWVudUhlaWdodCA9IHRoaXMuc3ViTWVudS5yZWR1Y2UoKGFjYywgYykgPT4gYWNjICsgZ2V0RWxlbWVudEhlaWdodChjLm5hdGl2ZUVsZW1lbnQpLCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTWF4SGVpZ2h0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubWF4SGVpZ2h0ID0gc3VtU3VibWVudUhlaWdodCh0aGlzLmxhbWJNZW51SXRlbSk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkhvdmVySXRlbShpdGVtOiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIHRoaXMuaG92ZXJJdGVtLmVtaXQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Ub2dnbGVTdWJNZW51KGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgdGhpcy50b2dnbGVTdWJNZW51LmVtaXQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtQ2xpY2soaXRlbTogTGFtYk1lbnVJdGVtKSB7XHJcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU2VsZWN0SXRlbShpdGVtOiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIHRoaXMuc2VsZWN0SXRlbS5lbWl0KGl0ZW0pO1xyXG4gIH1cclxufVxyXG4iXX0=