UNPKG

ad-custom-lib

Version:

This is an UI custom library based on Adminlte library with purpose for personal use, if you need a full template of Primeng please visit https://github.com/mledour/angular-admin-lte

848 lines 68.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, NgZone, QueryList, Renderer2, ViewChild, ViewChildren } from '@angular/core'; import { NavigationEnd, PRIMARY_OUTLET, Router, ActivatedRoute } from '@angular/router'; import { removeListeners, removeSubscriptions } from '../../helpers'; import { RoutingService } from '../../services/routing.service'; import { HeaderService } from '../header/header.service'; import { LayoutStore } from '../layout.store'; import { WrapperService } from '../wrapper/wrapper.service'; import { SidebarLeftToggleDirective } from './sidebar-left.directive'; /** * @record */ export function Item() { } if (false) { /** @type {?} */ Item.prototype.id; /** @type {?} */ Item.prototype.parentId; /** @type {?} */ Item.prototype.label; /** @type {?|undefined} */ Item.prototype.route; /** @type {?|undefined} */ Item.prototype.iconClasses; /** @type {?|undefined} */ Item.prototype.children; /** @type {?|undefined} */ Item.prototype.isActive; /** @type {?|undefined} */ Item.prototype.isCollapsed; /** @type {?|undefined} */ Item.prototype.disableCollapse; } var SidebarLeftComponent = /** @class */ (function () { /** * @method constructor * @param changeDetectorRef [description] * @param layoutStore [description] * @param ngZone [description] * @param renderer2 [description] * @param router [description] * @param routingService [description] * @param wrapperService [description] * @param headerService [description] */ function SidebarLeftComponent(changeDetectorRef, layoutStore, ngZone, renderer2, router, routingService, wrapperService, headerService, activatedRoute) { this.changeDetectorRef = changeDetectorRef; this.layoutStore = layoutStore; this.ngZone = ngZone; this.renderer2 = renderer2; this.router = router; this.routingService = routingService; this.wrapperService = wrapperService; this.headerService = headerService; this.activatedRoute = activatedRoute; this.collapsedItems = []; this.activatedItems = []; this.toggleListeners = []; this.listeners = []; this.itemsByIds = {}; this.runningAnimations = 0; this.subscriptions = []; } /** * @method ngOnInit */ /** * \@method ngOnInit * @return {?} */ SidebarLeftComponent.prototype.ngOnInit = /** * \@method ngOnInit * @return {?} */ function () { var _this = this; this.subscriptions.push(this.layoutStore.sidebarLeftMenu.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.menu = value; _this.monkeyPatchMenu(_this.menu); if (_this.initialized) { _this.setMenuListeners(_this.activeUrl); _this.setSidebarListeners(); _this.setMenuTogglesListeners(); } _this.initialized = true; }))); this.subscriptions.push(this.layoutStore.sidebarLeftMenuActiveUrl.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.activeUrl = value; _this.setMenuListeners(value); }))); this.subscriptions.push(this.routingService.events.subscribe((/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var url; if (event instanceof NavigationEnd) { url = event.url; } else { url = _this.router.url; } _this.activeUrl = url; _this.setMenuListeners(url); // console.log(url) }))); this.setSidebarListeners(); }; /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ SidebarLeftComponent.prototype.ngAfterViewInit = /** * \@method ngAfterViewInit * @return {?} */ function () { this.setMenuTogglesListeners(); this.checkMenuWithoutChildren(); }; /** * @method ngOnDestroy */ /** * \@method ngOnDestroy * @return {?} */ SidebarLeftComponent.prototype.ngOnDestroy = /** * \@method ngOnDestroy * @return {?} */ function () { this.subscriptions = removeSubscriptions(this.subscriptions); this.listeners = removeListeners(this.listeners); this.toggleListeners = removeListeners(this.toggleListeners); }; /** * [setSidebarListeners description] * @method setSidebarListeners */ /** * [setSidebarListeners description] * \@method setSidebarListeners * @return {?} */ SidebarLeftComponent.prototype.setSidebarListeners = /** * [setSidebarListeners description] * \@method setSidebarListeners * @return {?} */ function () { var _this = this; this.subscriptions.push(this.layoutStore.layout.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.layout = value; _this.setSidebarHeight(); }))); this.subscriptions.push(this.layoutStore.windowInnerHeight.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.windowInnerHeight = value; _this.setSidebarHeight(); }))); this.subscriptions.push(this.layoutStore.sidebarLeftMenu.subscribe((/** * @return {?} */ function () { _this.changeDetectorRef.detectChanges(); }))); this.ngZone.runOutsideAngular((/** * @return {?} */ function () { _this.listeners.push(_this.renderer2.listen(_this.sidebarElement.nativeElement, 'mouseenter', (/** * @return {?} */ function () { _this.layoutStore.sidebarLeftMouseOver(true); }))); _this.listeners.push(_this.renderer2.listen(_this.sidebarElement.nativeElement, 'mouseleave', (/** * @return {?} */ function () { _this.layoutStore.sidebarLeftMouseOver(false); }))); })); this.subscriptions.push(this.layoutStore.windowInnerWidth.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.windowInnerWidth = value; if (!_this.isSidebarLeftCollapsed && _this.windowInnerWidth <= 767) { _this.layoutStore.sidebarLeftCollapsed(true); } else if (_this.windowInnerWidth > 767 && _this.isSidebarLeftCollapsed && !_this.isSidebarLeftExpandOnOver) { _this.layoutStore.sidebarLeftCollapsed(false); } }))); this.subscriptions.push(this.layoutStore.isSidebarLeftMouseOver.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.isSidebarLeftMouseOver = value; if (_this.isSidebarLeftExpandOnOver) { _this.layoutStore.sidebarLeftCollapsed(!value); } }))); this.subscriptions.push(this.layoutStore.isSidebarLeftExpandOnOver.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.isSidebarLeftExpandOnOver = value; if (_this.windowInnerWidth > 767 && _this.isSidebarLeftCollapsed !== undefined) { _this.layoutStore.sidebarLeftCollapsed(value); } }))); this.subscriptions.push(this.layoutStore.isSidebarLeftCollapsed.subscribe((/** * @param {?} value * @return {?} */ function (value) { _this.isSidebarLeftCollapsed = value; if (_this.windowInnerWidth <= 767) { if (value) { _this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-open'); } else { _this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-open'); } } else { if (_this.isSidebarLeftExpandOnOver && !_this.isSidebarLeftMouseOver && !value) { _this.layoutStore.sidebarLeftExpandOnOver(false); } if (value) { _this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-collapse'); if (_this.isSidebarLeftExpandOnOver) { _this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-expanded-on-hover'); } } else { _this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-collapse'); if (_this.isSidebarLeftExpandOnOver) { _this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-expanded-on-hover'); } } } }))); this.subscriptions.push(this.layoutStore.isSidebarLeftMini.subscribe((/** * @param {?} value * @return {?} */ function (value) { if (value) { _this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-mini'); } else { _this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-mini'); } }))); }; /** * [setMenuListeners description] * @method setMenuListeners */ /** * [setMenuListeners description] * \@method setMenuListeners * @param {?} url * @return {?} */ SidebarLeftComponent.prototype.setMenuListeners = /** * [setMenuListeners description] * \@method setMenuListeners * @param {?} url * @return {?} */ function (url) { if (url === '/') { this.activeItems(url); this.changeDetectorRef.detectChanges(); } else { /** @type {?} */ var primaryOutlet = this.router.parseUrl(url).root.children[PRIMARY_OUTLET]; if (primaryOutlet) { // console.log(primaryOutlet) // this.activeItems('/' + primaryOutlet.toString()); this.activeItems(primaryOutlet.toString()); this.changeDetectorRef.detectChanges(); } } if (this.windowInnerWidth <= 767 || this.isSidebarLeftExpandOnOver) { this.layoutStore.sidebarLeftCollapsed(true); } }; /** * [getIconClasses description] * @method getIconClasses * @param item [description] * @return [description] */ /** * [getIconClasses description] * \@method getIconClasses * @param {?} item [description] * @return {?} [description] */ SidebarLeftComponent.prototype.getIconClasses = /** * [getIconClasses description] * \@method getIconClasses * @param {?} item [description] * @return {?} [description] */ function (item) { if (item.iconClasses || item.iconClasses === '') { return item.iconClasses; } else { return 'fa fa-dot-circle-o'; } }; /** * [visibilityStateStart description] * @method visibilityStateStart * @param event [description] */ /** * [visibilityStateStart description] * \@method visibilityStateStart * @param {?} event [description] * @return {?} */ SidebarLeftComponent.prototype.visibilityStateStart = /** * [visibilityStateStart description] * \@method visibilityStateStart * @param {?} event [description] * @return {?} */ function (event) { var _this = this; this.runningAnimations++; this.ngZone.runOutsideAngular((/** * @return {?} */ function () { setTimeout((/** * @return {?} */ function () { _this.runningAnimations--; if (!_this.runningAnimations) { _this.layoutStore.setSidebarLeftElementHeight(_this.sidebarElement.nativeElement.offsetHeight); } }), event.totalTime); })); }; /** * [uncollapseItemParents description] * @method uncollapseItemParents * @param item [description] * @param isActive [description] */ /** * [uncollapseItemParents description] * \@method uncollapseItemParents * @private * @param {?} item [description] * @param {?=} isActive [description] * @return {?} */ SidebarLeftComponent.prototype.uncollapseItemParents = /** * [uncollapseItemParents description] * \@method uncollapseItemParents * @private * @param {?} item [description] * @param {?=} isActive [description] * @return {?} */ function (item, isActive) { if (isActive === void 0) { isActive = false; } if (isActive) { item.isActive = true; this.activatedItems.push(item); } // console.log(item) // console.log(isActive) item.isCollapsed = false; this.collapsedItems.push(item); if (item.parentId) { this.uncollapseItemParents(this.itemsByIds[item.parentId], isActive); } }; /** * [findItemsByUrl description] * @method findItemsByUrl * @param url [description] * @param items [description] * @param returnItems [description] * @return [description] */ /** * [findItemsByUrl description] * \@method findItemsByUrl * @private * @param {?} url [description] * @param {?} items [description] * @param {?=} returnItems [description] * @return {?} [description] */ SidebarLeftComponent.prototype.findItemsByUrl = /** * [findItemsByUrl description] * \@method findItemsByUrl * @private * @param {?} url [description] * @param {?} items [description] * @param {?=} returnItems [description] * @return {?} [description] */ function (url, items, returnItems) { var _this = this; if (returnItems === void 0) { returnItems = []; } items.forEach((/** * @param {?} item * @return {?} */ function (item) { if (item.route === url) { returnItems.push(item); } else if (item.children) { _this.findItemsByUrl(url, item.children, returnItems); } else if (url.includes(item.route) && item.route != '/') { returnItems.push(item); } })); return returnItems; }; /** * [activeItems description] * @method activeItems * @param url [description] */ /** * [activeItems description] * \@method activeItems * @private * @param {?} url [description] * @return {?} */ SidebarLeftComponent.prototype.activeItems = /** * [activeItems description] * \@method activeItems * @private * @param {?} url [description] * @return {?} */ function (url) { var _this = this; this.activatedItems.forEach((/** * @param {?} item * @return {?} */ function (item) { item.isActive = false; })); this.activatedItems = []; this.collapsedItems.forEach((/** * @param {?} item * @return {?} */ function (item) { item.isActive = false; item.isCollapsed = true; })); this.collapsedItems = []; // console.log(url) /** @type {?} */ var items = this.findItemsByUrl(url, this.menu); items.forEach((/** * @param {?} item * @return {?} */ function (item) { item.isActive = true; _this.uncollapseItemParents(item, true); _this.activatedItems.push(item); })); }; /** * [monkeyPatchMenu description] * @method monkeyPatchMenu * @param items [description] * @param parentId [description] */ /** * [monkeyPatchMenu description] * \@method monkeyPatchMenu * @private * @param {?} items [description] * @param {?=} parentId [description] * @return {?} */ SidebarLeftComponent.prototype.monkeyPatchMenu = /** * [monkeyPatchMenu description] * \@method monkeyPatchMenu * @private * @param {?} items [description] * @param {?=} parentId [description] * @return {?} */ function (items, parentId) { var _this = this; items.forEach((/** * @param {?} item * @param {?} index * @return {?} */ function (item, index) { item.id = parentId ? Number(parentId + '' + (index + 1)) : index + 1; if (parentId) { item.parentId = parentId; } if (!item.disableCollapse) { item.isCollapsed = true; } item.isActive = false; if (parentId || item.children) { _this.itemsByIds[item.id] = item; } if (item.children) { _this.monkeyPatchMenu(item.children, item.id); } })); }; /** * [setMenuTogglesListeners description] * @method setMenuTogglesListeners */ /** * [setMenuTogglesListeners description] * \@method setMenuTogglesListeners * @private * @return {?} */ SidebarLeftComponent.prototype.setMenuTogglesListeners = /** * [setMenuTogglesListeners description] * \@method setMenuTogglesListeners * @private * @return {?} */ function () { var _this = this; this.toggleListeners = removeListeners(this.toggleListeners); this.ngZone.runOutsideAngular((/** * @return {?} */ function () { _this.sidebarLeftToggleDirectives.forEach((/** * @param {?} menuToggle * @return {?} */ function (menuToggle) { _this.toggleListeners.push(_this.renderer2.listen(menuToggle.elementRef.nativeElement, 'click', (/** * @param {?} event * @return {?} */ function (event) { event.preventDefault(); if (menuToggle.item.isCollapsed) { _this.collapsedItems.forEach((/** * @param {?} item * @return {?} */ function (item) { if (!item.disableCollapse) { item.isCollapsed = true; } })); _this.collapsedItems = []; _this.uncollapseItemParents(menuToggle.item); } else { menuToggle.item.isCollapsed = !menuToggle.item.isCollapsed; } _this.changeDetectorRef.detectChanges(); }))); })); })); }; /** * [checkMenuWithoutChildren description] * @method checkMenuWithoutChildren */ /** * [checkMenuWithoutChildren description] * \@method checkMenuWithoutChildren * @private * @return {?} */ SidebarLeftComponent.prototype.checkMenuWithoutChildren = /** * [checkMenuWithoutChildren description] * \@method checkMenuWithoutChildren * @private * @return {?} */ function () { var _this = this; /** @type {?} */ var menuHaveChildren; this.menu.forEach((/** * @param {?} item * @return {?} */ function (item) { if (item.children) { return menuHaveChildren = true; } })); if (!menuHaveChildren) { this.ngZone.runOutsideAngular((/** * @return {?} */ function () { setTimeout((/** * @return {?} */ function () { _this.layoutStore.setSidebarLeftElementHeight(_this.sidebarElement.nativeElement.offsetHeight); })); })); } }; /** * [setSidebarHeight description] * @method setSidebarHeight */ /** * [setSidebarHeight description] * \@method setSidebarHeight * @private * @return {?} */ SidebarLeftComponent.prototype.setSidebarHeight = /** * [setSidebarHeight description] * \@method setSidebarHeight * @private * @return {?} */ function () { if (this.layout === 'fixed') { /** @type {?} */ var height = this.windowInnerHeight - this.headerService.offsetHeight; if (height && height !== this.sidebarHeight) { this.sidebarHeight = height; this.sidebarOverflow = 'auto'; this.changeDetectorRef.detectChanges(); } } else if (this.sidebarHeight) { this.sidebarOverflow = this.sidebarHeight = null; this.changeDetectorRef.detectChanges(); } }; SidebarLeftComponent.decorators = [ { type: Component, args: [{ selector: 'mk-layout-sidebar-left', template: "<aside class=\"main-sidebar\">\r\n <section class=\"sidebar\" #sidebarElement [style.height.px]=\"sidebarHeight\" [style.overflow]=\"sidebarOverflow\">\r\n <ng-content></ng-content>\r\n <ul class=\"sidebar-menu\">\r\n <ng-container *ngFor=\"let item of menu\">\r\n <ng-container *ngTemplateOutlet=\"sidebarInner; context: {item: item}\"></ng-container>\r\n </ng-container>\r\n </ul>\r\n </section>\r\n</aside>\r\n\r\n<ng-template #sidebarInner let-item=\"item\">\r\n <li [class.active]=\"item.isActive\" [class.header]=\"item.separator\" [class.menu-open]=\"!item.isCollapsed\">\r\n <span *ngIf=\"item.separator\">{{item.label}}</span>\r\n <a *ngIf=\"!item.separator && item.route\" [routerLink]=\"item.route\">\r\n <i [class]=\"getIconClasses(item)\"></i><span>{{item.label}}</span>\r\n <span *ngIf=\"item.children || item.pullRights\" class=\"pull-right-container\">\r\n <span *ngFor=\"let rightItem of item.pullRights\"\r\n class=\"pull-right {{rightItem.classes}}\">{{rightItem.text}}</span>\r\n <i *ngIf=\"!item.pullRights\" class=\"fa fa-angle-left pull-right\"></i>\r\n </span>\r\n </a>\r\n <a *ngIf=\"!item.separator && !item.route\" href=\"#\" [mkMenuToggle]=\"item\">\r\n <i [class]=\"getIconClasses(item)\"></i><span>{{item.label}}</span>\r\n <span *ngIf=\"item.children || item.pullRights\" class=\"pull-right-container\">\r\n <span *ngFor=\"let rightItem of item.pullRights\"\r\n class=\"pull-right {{rightItem.classes}}\">{{rightItem.text}}</span>\r\n <i *ngIf=\"!item.pullRights\" class=\"fa fa-angle-left pull-right\"></i>\r\n </span>\r\n </a>\r\n <ul *ngIf=\"item.children\" [mkCollapseAnimation]=\"item.isCollapsed\"\r\n (mkCollapseAnimation.start)=\"visibilityStateStart($event)\" class=\"treeview-menu\">\r\n <ng-container *ngFor=\"let item of item.children\">\r\n <ng-container *ngTemplateOutlet=\"sidebarInner; context: {item: item}\"></ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n</ng-template>", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".treeview-menu.collapse{display:none}.treeview-menu,.treeview-menu.collapse.in{display:block}"] }] } ]; /** @nocollapse */ SidebarLeftComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: LayoutStore }, { type: NgZone }, { type: Renderer2 }, { type: Router }, { type: RoutingService }, { type: WrapperService }, { type: HeaderService }, { type: ActivatedRoute } ]; }; SidebarLeftComponent.propDecorators = { sidebarElement: [{ type: ViewChild, args: ['sidebarElement', { static: true },] }], sidebarLeftToggleDirectives: [{ type: ViewChildren, args: [SidebarLeftToggleDirective,] }] }; return SidebarLeftComponent; }()); export { SidebarLeftComponent }; if (false) { /** @type {?} */ SidebarLeftComponent.prototype.menu; /** @type {?} */ SidebarLeftComponent.prototype.sidebarHeight; /** @type {?} */ SidebarLeftComponent.prototype.sidebarOverflow; /** * @type {?} * @private */ SidebarLeftComponent.prototype.layout; /** * @type {?} * @private */ SidebarLeftComponent.prototype.isSidebarLeftCollapsed; /** * @type {?} * @private */ SidebarLeftComponent.prototype.isSidebarLeftExpandOnOver; /** * @type {?} * @private */ SidebarLeftComponent.prototype.isSidebarLeftMouseOver; /** * @type {?} * @private */ SidebarLeftComponent.prototype.windowInnerWidth; /** * @type {?} * @private */ SidebarLeftComponent.prototype.windowInnerHeight; /** * @type {?} * @private */ SidebarLeftComponent.prototype.collapsedItems; /** * @type {?} * @private */ SidebarLeftComponent.prototype.activatedItems; /** * @type {?} * @private */ SidebarLeftComponent.prototype.toggleListeners; /** * @type {?} * @private */ SidebarLeftComponent.prototype.listeners; /** * @type {?} * @private */ SidebarLeftComponent.prototype.itemsByIds; /** * @type {?} * @private */ SidebarLeftComponent.prototype.runningAnimations; /** * @type {?} * @private */ SidebarLeftComponent.prototype.subscriptions; /** * @type {?} * @private */ SidebarLeftComponent.prototype.activeUrl; /** * @type {?} * @private */ SidebarLeftComponent.prototype.initialized; /** @type {?} */ SidebarLeftComponent.prototype.sidebarElement; /** @type {?} */ SidebarLeftComponent.prototype.sidebarLeftToggleDirectives; /** * @type {?} * @private */ SidebarLeftComponent.prototype.changeDetectorRef; /** * @type {?} * @private */ SidebarLeftComponent.prototype.layoutStore; /** * @type {?} * @private */ SidebarLeftComponent.prototype.ngZone; /** * @type {?} * @private */ SidebarLeftComponent.prototype.renderer2; /** * @type {?} * @private */ SidebarLeftComponent.prototype.router; /** * @type {?} * @private */ SidebarLeftComponent.prototype.routingService; /** * @type {?} * @private */ SidebarLeftComponent.prototype.wrapperService; /** * @type {?} * @private */ SidebarLeftComponent.prototype.headerService; /** * @type {?} * @private */ SidebarLeftComponent.prototype.activatedRoute; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1sZWZ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FkLWN1c3RvbS1saWIvIiwic291cmNlcyI6WyJsaWIvbGF5b3V0L3NpZGViYXItbGVmdC9zaWRlYmFyLWxlZnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ1ksdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQ3JFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFDbkUsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RyxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUV0RSwwQkFVQzs7O0lBVEcsa0JBQVc7O0lBQ1gsd0JBQWlCOztJQUNqQixxQkFBYzs7SUFDZCxxQkFBZTs7SUFDZiwyQkFBcUI7O0lBQ3JCLHdCQUF1Qjs7SUFDdkIsd0JBQW1COztJQUNuQiwyQkFBc0I7O0lBQ3RCLCtCQUEwQjs7QUFLOUI7SUFnQ0k7Ozs7Ozs7Ozs7TUFVRTtJQUNGLDhCQUNZLGlCQUFvQyxFQUNwQyxXQUF3QixFQUN4QixNQUFjLEVBQ2QsU0FBb0IsRUFDcEIsTUFBYyxFQUNkLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFB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LEFBaFpELElBZ1pDO1NBMVlZLG9CQUFvQjs7O0lBRTdCLG9DQUF3Qjs7SUFDeEIsNkNBQTZCOztJQUM3QiwrQ0FBK0I7Ozs7O0lBRS9CLHNDQUF1Qjs7Ozs7SUFDdkIsc0RBQXdDOzs7OztJQUN4Qyx5REFBMkM7Ozs7O0lBQzNDLHNEQUF3Qzs7Ozs7SUFDeEMsZ0RBQWlDOzs7OztJQUNqQyxpREFBa0M7Ozs7O0lBQ2xDLDhDQUFtQzs7Ozs7SUFDbkMsOENBQW1DOzs7OztJQUNuQywrQ0FBOEM7Ozs7O0lBQzlDLHlDQUF3Qzs7Ozs7SUFDeEMsMENBQXFEOzs7OztJQUNyRCxpREFBOEI7Ozs7O0lBQzlCLDZDQUEyQjs7Ozs7SUFDM0IseUNBQTBCOzs7OztJQUMxQiwyQ0FBNkI7O0lBRTdCLDhDQUFpRjs7SUFFakYsMkRBQW9IOzs7OztJQWNoSCxpREFBNEM7Ozs7O0lBQzVDLDJDQUFnQzs7Ozs7SUFDaEMsc0NBQXNCOzs7OztJQUN0Qix5Q0FBNEI7Ozs7O0lBQzVCLHNDQUFzQjs7Ozs7SUFDdEIsOENBQXNDOzs7OztJQUN0Qyw4Q0FBc0M7Ozs7O0lBQ3RDLDZDQUFvQzs7Ozs7SUFDcEMsOENBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBOZ1pvbmUsXHJcbiAgICBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEV2ZW50IGFzIFJvdXRlckV2ZW50LCBOYXZpZ2F0aW9uRW5kLCBQUklNQVJZX09VVExFVCwgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaGVhZGVyL2hlYWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U3RvcmUgfSBmcm9tICcuLi9sYXlvdXQuc3RvcmUnO1xyXG5pbXBvcnQgeyBXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uL3dyYXBwZXIvd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lkZWJhckxlZnRUb2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuL3NpZGViYXItbGVmdC5kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJdGVtIHtcclxuICAgIGlkOiBudW1iZXI7XHJcbiAgICBwYXJlbnRJZDogbnVtYmVyO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHJvdXRlPzogc3RyaW5nO1xyXG4gICAgaWNvbkNsYXNzZXM/OiBzdHJpbmc7XHJcbiAgICBjaGlsZHJlbj86IEFycmF5PEl0ZW0+O1xyXG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xyXG4gICAgaXNDb2xsYXBzZWQ/OiBib29sZWFuO1xyXG4gICAgZGlzYWJsZUNvbGxhcHNlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSXRlbXMgPSBBcnJheTxJdGVtPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay1sYXlvdXQtc2lkZWJhci1sZWZ0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlYmFyLWxlZnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vc2lkZWJhci1sZWZ0LmNvbXBvbmVudC5jc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyTGVmdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBwdWJsaWMgbWVudTogQXJyYXk8YW55PjtcclxuICAgIHB1YmxpYyBzaWRlYmFySGVpZ2h0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2lkZWJhck92ZXJmbG93OiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNTaWRlYmFyTGVmdENvbGxhcHNlZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNTaWRlYmFyTGVmdEV4cGFuZE9uT3ZlcjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNTaWRlYmFyTGVmdE1vdXNlT3ZlcjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgd2luZG93SW5uZXJXaWR0aDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB3aW5kb3dJbm5lckhlaWdodDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBjb2xsYXBzZWRJdGVtczogSXRlbXMgPSBbXTtcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkSXRlbXM6IEl0ZW1zID0gW107XHJcbiAgICBwcml2YXRlIHRvZ2dsZUxpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW107XHJcbiAgICBwcml2YXRlIGxpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW107XHJcbiAgICBwcml2YXRlIGl0ZW1zQnlJZHM6IHsgW3Byb3BLZXk6IG51bWJlcl06IEl0ZW0gfSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBydW5uaW5nQW5pbWF0aW9ucyA9IDA7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBbXTtcclxuICAgIHByaXZhdGUgYWN0aXZlVXJsOiBTdHJpbmc7XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3NpZGViYXJFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHNpZGViYXJFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oU2lkZWJhckxlZnRUb2dnbGVEaXJlY3RpdmUpIHB1YmxpYyBzaWRlYmFyTGVmdFRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxTaWRlYmFyTGVmdFRvZ2dsZURpcmVjdGl2ZT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBtZXRob2QgY29uc3RydWN0b3JcclxuICAgICogQHBhcmFtICBjaGFuZ2VEZXRlY3RvclJlZiAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgKiBAcGFyYW0gIGxheW91dFN0b3JlICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAqIEBwYXJhbSAgbmdab25lICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICogQHBhcmFtICByZW5kZXJlcjIgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgKiBAcGFyYW0gIHJvdXRlciAgICAgICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAqIEBwYXJhbSAgcm91dGluZ1NlcnZpY2UgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICogQHBhcmFtICB3cmFwcGVyU2VydmljZSAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgKiBAcGFyYW0gIGhlYWRlclNlcnZpY2UgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTdG9yZTogTGF5b3V0U3RvcmUsXHJcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB3cmFwcGVyU2VydmljZTogV3JhcHBlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBoZWFkZXJTZXJ2aWNlOiBIZWFkZXJTZXJ2aWNlL