@spartan-ng/brain 0.0.1-alpha.574 → 0.0.1-alpha.576
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alert-dialog/index.d.ts +9 -9
- package/dialog/index.d.ts +12 -10
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs +20 -32
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-autocomplete.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-command.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-dialog.mjs +21 -23
- package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-hover-card.mjs +9 -15
- package/fesm2022/spartan-ng-brain-hover-card.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-popover.mjs +11 -27
- package/fesm2022/spartan-ng-brain-popover.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-resizable.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-sheet.mjs +19 -30
- package/fesm2022/spartan-ng-brain-sheet.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-switch.mjs +2 -2
- package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tabs.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tooltip.mjs +6 -2
- package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -1
- package/hover-card/index.d.ts +6 -5
- package/package.json +5 -5
- package/popover/index.d.ts +7 -11
- package/resizable/index.d.ts +7 -6
- package/sheet/index.d.ts +8 -7
- package/switch/index.d.ts +2 -2
- package/tabs/index.d.ts +1 -1
- package/tooltip/index.d.ts +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-tooltip.mjs","sources":["../tmp-esm2022/tooltip/lib/brn-tooltip.js","../tmp-esm2022/tooltip/lib/brn-tooltip-content.js","../tmp-esm2022/tooltip/lib/brn-tooltip-content-template.js","../tmp-esm2022/tooltip/lib/brn-tooltip.token.js","../tmp-esm2022/tooltip/lib/brn-tooltip-trigger.js","../tmp-esm2022/tooltip/index.js","../tmp-esm2022/tooltip/spartan-ng-brain-tooltip.js"],"sourcesContent":["import { Directive, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BrnTooltip {\n tooltipTemplate = signal(null);\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.7\", type: BrnTooltip, isStandalone: true, selector: \"[brnTooltip]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltip, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTooltip]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3Rvb2x0aXAvc3JjL2xpYi9icm4tdG9vbHRpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS3BFLE1BQU0sT0FBTyxVQUFVO0lBQ04sZUFBZSxHQUFHLE1BQU0sQ0FBOEIsSUFBSSxDQUFDLENBQUM7MEhBRGhFLFVBQVU7OEdBQVYsVUFBVTs7MkZBQVYsVUFBVTtrQkFIdEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsY0FBYztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIHR5cGUgVGVtcGxhdGVSZWYsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVG9vbHRpcF0nLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwIHtcblx0cHVibGljIHJlYWRvbmx5IHRvb2x0aXBUZW1wbGF0ZSA9IHNpZ25hbDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xufVxuIl19","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tooltip/tooltip.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, PLATFORM_ID, Renderer2, signal, viewChild, } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\nexport class BrnTooltipContent {\n _cdr = inject(ChangeDetectorRef);\n _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n _renderer2 = inject(Renderer2);\n _contentHovered = signal(false);\n tooltipClasses = signal('');\n side = signal('above');\n /** Message to display in the tooltip */\n content = null;\n /** The timeout ID of any current timer set to show the tooltip */\n _showTimeoutId;\n /** The timeout ID of any current timer set to hide the tooltip */\n _hideTimeoutId;\n /** The timeout ID of any current timer set to animate the tooltip */\n _animateTimeoutId;\n /** Element that caused the tooltip to open. */\n triggerElement;\n /** Amount of milliseconds to delay the closing sequence. */\n mouseLeaveHideDelay = 0;\n /** Amount of milliseconds of closing animation. */\n exitAnimationDuration = 0;\n /** Reference to the internal tooltip element. */\n tooltip = viewChild('tooltip', { read: (ElementRef) });\n /** Whether interactions on the page should close the tooltip */\n _closeOnInteraction = false;\n /** Whether the tooltip is currently visible. */\n _isVisible = false;\n /** Subject for notifying that the tooltip has been hidden from the view */\n _onHide = new Subject();\n afterHidden = this._onHide.asObservable();\n /**\n * Shows the tooltip with originating from the provided origin\n * @param delay Amount of milliseconds to the delay showing the tooltip.\n */\n show(delay) {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId !== null) {\n clearTimeout(this._hideTimeoutId);\n }\n if (this._animateTimeoutId !== null) {\n clearTimeout(this._animateTimeoutId);\n }\n this._showTimeoutId = setTimeout(() => {\n this._toggleDataAttributes(true, this.side());\n this._toggleVisibility(true);\n this._showTimeoutId = undefined;\n }, delay);\n }\n /**\n * Begins to hide the tooltip after the provided delay in ms.\n * @param delay Amount of milliseconds to delay hiding the tooltip.\n * @param exitAnimationDuration Time before hiding to finish animation\n * */\n hide(delay, exitAnimationDuration) {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId !== null) {\n clearTimeout(this._showTimeoutId);\n }\n // start out animation at delay minus animation delay or immediately if possible\n this._animateTimeoutId = setTimeout(() => {\n this._animateTimeoutId = undefined;\n if (this._contentHovered())\n return;\n this._toggleDataAttributes(false, this.side());\n }, Math.max(delay, 0));\n this._hideTimeoutId = setTimeout(() => {\n this._hideTimeoutId = undefined;\n if (this._contentHovered())\n return;\n this._toggleVisibility(false);\n }, delay + exitAnimationDuration);\n }\n /** Whether the tooltip is being displayed. */\n isVisible() {\n return this._isVisible;\n }\n ngOnDestroy() {\n this._cancelPendingAnimations();\n this._onHide.complete();\n this.triggerElement = undefined;\n }\n _isTypeOfString(content) {\n return typeof content === 'string';\n }\n /**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.io/design/components/tooltips.html#behavior\n */\n _handleBodyInteraction() {\n if (this._closeOnInteraction) {\n this.hide(0, 0);\n }\n }\n /**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n */\n _markForCheck() {\n this._cdr.markForCheck();\n }\n _handleMouseLeave({ relatedTarget }) {\n if (!relatedTarget || !this.triggerElement?.contains(relatedTarget)) {\n if (this.isVisible()) {\n this.hide(this.mouseLeaveHideDelay, this.exitAnimationDuration);\n }\n else {\n this._finalize(false);\n }\n }\n this._contentHovered.set(false);\n }\n /** Cancels any pending animation sequences. */\n _cancelPendingAnimations() {\n if (this._showTimeoutId !== null) {\n clearTimeout(this._showTimeoutId);\n }\n if (this._hideTimeoutId !== null) {\n clearTimeout(this._hideTimeoutId);\n }\n this._showTimeoutId = this._hideTimeoutId = undefined;\n }\n _finalize(toVisible) {\n if (toVisible) {\n this._closeOnInteraction = true;\n }\n else if (!this.isVisible()) {\n this._onHide.next();\n }\n }\n /** Toggles the visibility of the tooltip element. */\n _toggleVisibility(isVisible) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this.tooltip()?.nativeElement;\n if (!tooltip || !this._isBrowser)\n return;\n this._renderer2.setStyle(tooltip, 'visibility', isVisible ? 'visible' : 'hidden');\n if (isVisible) {\n this._renderer2.removeStyle(tooltip, 'display');\n }\n else {\n this._renderer2.setStyle(tooltip, 'display', 'none');\n }\n this._isVisible = isVisible;\n }\n _toggleDataAttributes(isVisible, side) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this.tooltip()?.nativeElement;\n if (!tooltip || !this._isBrowser)\n return;\n this._renderer2.setAttribute(tooltip, 'data-side', side);\n this._renderer2.setAttribute(tooltip, 'data-state', isVisible ? 'open' : 'closed');\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.7\", type: BrnTooltipContent, isStandalone: true, selector: \"brn-tooltip-content\", host: { attributes: { \"aria-hidden\": \"true\" }, listeners: { \"mouseleave\": \"_handleMouseLeave($event)\" }, properties: { \"style.zoom\": \"isVisible() ? 1 : null\" } }, viewQueries: [{ propertyName: \"tooltip\", first: true, predicate: [\"tooltip\"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `\n\t\t<div\n\t\t\t(mouseenter)=\"_contentHovered.set(true)\"\n\t\t\t(mouseleave)=\"_contentHovered.set(false)\"\n\t\t\t[class]=\"tooltipClasses()\"\n\t\t\t[style.visibility]=\"'hidden'\"\n\t\t\t#tooltip\n\t\t>\n\t\t\t@if (_isTypeOfString(content)) {\n\t\t\t\t{{ content }}\n\t\t\t} @else {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t}\n\t\t</div>\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContent, decorators: [{\n type: Component,\n args: [{\n selector: 'brn-tooltip-content',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\n '[style.zoom]': 'isVisible() ? 1 : null',\n '(mouseleave)': '_handleMouseLeave($event)',\n 'aria-hidden': 'true',\n },\n template: `\n\t\t<div\n\t\t\t(mouseenter)=\"_contentHovered.set(true)\"\n\t\t\t(mouseleave)=\"_contentHovered.set(false)\"\n\t\t\t[class]=\"tooltipClasses()\"\n\t\t\t[style.visibility]=\"'hidden'\"\n\t\t\t#tooltip\n\t\t>\n\t\t\t@if (_isTypeOfString(content)) {\n\t\t\t\t{{ content }}\n\t\t\t} @else {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t}\n\t\t</div>\n\t`,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdG9vbHRpcC9zcmMvbGliL2Jybi10b29sdGlwLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUUvQjs7O0dBR0c7QUE0QkgsTUFBTSxPQUFPLGlCQUFpQjtJQUNaLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3QixlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DLGNBQWMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2Qyx3Q0FBd0M7SUFDakMsT0FBTyxHQUF5QyxJQUFJLENBQUM7SUFFNUQsa0VBQWtFO0lBQzFELGNBQWMsQ0FBNEM7SUFDbEUsa0VBQWtFO0lBQzFELGNBQWMsQ0FBNEM7SUFDbEUscUVBQXFFO0lBQzdELGlCQUFpQixDQUE0QztJQUVyRSwrQ0FBK0M7SUFDeEMsY0FBYyxDQUFlO0lBRXBDLDREQUE0RDtJQUNyRCxtQkFBbUIsR0FBRyxDQUFD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WUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7MEhBaExXLGlCQUFpQjs4R0FBakIsaUJBQWlCLGlVQTRCMEIsVUFBVSw2Q0E1Q3ZEOzs7Ozs7Ozs7Ozs7OztFQWNULDREQXZCUyxnQkFBZ0I7OzJGQXlCZCxpQkFBaUI7a0JBM0I3QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsSUFBSSxFQUFFO3dCQUNMLDBGQUEwRjt3QkFDMUYsMkZBQTJGO3dCQUMzRixjQUFjLEVBQUUsd0JBQXdCO3dCQUN4QyxjQUFjLEVBQUUsMkJBQTJCO3dCQUMzQyxhQUFhLEVBQUUsTUFBTTtxQkFDckI7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7OztFQWNUO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZSBhcmUgYnVpbGRpbmcgb24gc2hvdWxkZXJzIG9mIGdpYW50cyBoZXJlIGFuZCBhZGFwdCB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGluY3JlZGlibGUgQW5ndWxhclxuICogdGVhbTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL3Rvb2x0aXAvdG9vbHRpcC50c1xuICogQ2hlY2sgdGhlbSBvdXQhIEdpdmUgdGhlbSBhIHRyeSEgTGVhdmUgYSBzdGFyISBUaGVpciB3b3JrIGlzIGluY3JlZGlibGUhXG4gKi9cblxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0dHlwZSBPbkRlc3Ryb3ksXG5cdFBMQVRGT1JNX0lELFxuXHRSZW5kZXJlcjIsXG5cdHNpZ25hbCxcblx0dHlwZSBUZW1wbGF0ZVJlZixcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBjb21wb25lbnQgdGhhdCB3cmFwcyB0aGUgdG9vbHRpcCdzIGNvbnRlbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2Jybi10b29sdGlwLWNvbnRlbnQnLFxuXHRpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRob3N0OiB7XG5cdFx0Ly8gRm9yY2VzIHRoZSBlbGVtZW50IHRvIGhhdmUgYSBsYXlvdXQgaW4gSUUgYW5kIEVkZ2UuIFRoaXMgZml4ZXMgaXNzdWVzIHdoZXJlIHRoZSBlbGVtZW50XG5cdFx0Ly8gd29uJ3QgYmUgcmVuZGVyZWQgaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGRpc2FibGVkIG9yIHRoZXJlIGlzIG5vIHdlYiBhbmltYXRpb25zIHBvbHlmaWxsLlxuXHRcdCdbc3R5bGUuem9vbV0nOiAnaXNWaXNpYmxlKCkgPyAxIDogbnVsbCcsXG5cdFx0Jyhtb3VzZWxlYXZlKSc6ICdfaGFuZGxlTW91c2VMZWF2ZSgkZXZlbnQpJyxcblx0XHQnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG5cdH0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdlxuXHRcdFx0KG1vdXNlZW50ZXIpPVwiX2NvbnRlbnRIb3ZlcmVkLnNldCh0cnVlKVwiXG5cdFx0XHQobW91c2VsZWF2ZSk9XCJfY29udGVudEhvdmVyZWQuc2V0KGZhbHNlKVwiXG5cdFx0XHRbY2xhc3NdPVwidG9vbHRpcENsYXNzZXMoKVwiXG5cdFx0XHRbc3R5bGUudmlzaWJpbGl0eV09XCInaGlkZGVuJ1wiXG5cdFx0XHQjdG9vbHRpcFxuXHRcdD5cblx0XHRcdEBpZiAoX2lzVHlwZU9mU3RyaW5nKGNvbnRlbnQpKSB7XG5cdFx0XHRcdHt7IGNvbnRlbnQgfX1cblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIiAvPlxuXHRcdFx0fVxuXHRcdDwvZGl2PlxuXHRgLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwQ29udGVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2lzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKGluamVjdChQTEFURk9STV9JRCkpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbnRlbnRIb3ZlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgdG9vbHRpcENsYXNzZXMgPSBzaWduYWwoJycpO1xuXHRwdWJsaWMgcmVhZG9ubHkgc2lkZSA9IHNpZ25hbCgnYWJvdmUnKTtcblx0LyoqIE1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcCAqL1xuXHRwdWJsaWMgY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIHRpbWVvdXQgSUQgb2YgYW55IGN1cnJlbnQgdGltZXIgc2V0IHRvIHNob3cgdGhlIHRvb2x0aXAgKi9cblx0cHJpdmF0ZSBfc2hvd1RpbWVvdXRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cdC8qKiBUaGUgdGltZW91dCBJRCBvZiBhbnkgY3VycmVudCB0aW1lciBzZXQgdG8gaGlkZSB0aGUgdG9vbHRpcCAqL1xuXHRwcml2YXRlIF9oaWRlVGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcblx0LyoqIFRoZSB0aW1lb3V0IElEIG9mIGFueSBjdXJyZW50IHRpbWVyIHNldCB0byBhbmltYXRlIHRoZSB0b29sdGlwICovXG5cdHByaXZhdGUgX2FuaW1hdGVUaW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG5cdC8qKiBFbGVtZW50IHRoYXQgY2F1c2VkIHRoZSB0b29sdGlwIHRvIG9wZW4uICovXG5cdHB1YmxpYyB0cmlnZ2VyRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXG5cdC8qKiBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IHRoZSBjbG9zaW5nIHNlcXVlbmNlLiAqL1xuXHRwdWJsaWMgbW91c2VMZWF2ZUhpZGVEZWxheSA9IDA7XG5cdC8qKiBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIG9mIGNsb3NpbmcgYW5pbWF0aW9uLiAqL1xuXHRwdWJsaWMgZXhpdEFuaW1hdGlvbkR1cmF0aW9uID0gMDtcblxuXHQvKiogUmVmZXJlbmNlIHRvIHRoZSBpbnRlcm5hbCB0b29sdGlwIGVsZW1lbnQuICovXG5cdHB1YmxpYyByZWFkb25seSB0b29sdGlwID0gdmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB9KTtcblxuXHQvKiogV2hldGhlciBpbnRlcmFjdGlvbnMgb24gdGhlIHBhZ2Ugc2hvdWxkIGNsb3NlIHRoZSB0b29sdGlwICovXG5cdHByaXZhdGUgX2Nsb3NlT25JbnRlcmFjdGlvbiA9IGZhbHNlO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSB0b29sdGlwIGlzIGN1cnJlbnRseSB2aXNpYmxlLiAqL1xuXHRwcml2YXRlIF9pc1Zpc2libGUgPSBmYWxzZTtcblxuXHQvKiogU3ViamVjdCBmb3Igbm90aWZ5aW5nIHRoYXQgdGhlIHRvb2x0aXAgaGFzIGJlZW4gaGlkZGVuIGZyb20gdGhlIHZpZXcgKi9cblx0cHJpdmF0ZSByZWFkb25seSBfb25IaWRlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblx0cHVibGljIHJlYWRvbmx5IGFmdGVySGlkZGVuID0gdGhpcy5fb25IaWRlLmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBTaG93cyB0aGUgdG9vbHRpcCB3aXRoIG9yaWdpbmF0aW5nIGZyb20gdGhlIHByb3ZpZGVkIG9yaWdpblxuXHQgKiBAcGFyYW0gZGVsYXkgQW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZGVsYXkgc2hvd2luZyB0aGUgdG9vbHRpcC5cblx0ICovXG5cdHNob3coZGVsYXk6IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIENhbmNlbCB0aGUgZGVsYXllZCBoaWRlIGlmIGl0IGlzIHNjaGVkdWxlZFxuXHRcdGlmICh0aGlzLl9oaWRlVGltZW91dElkICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9hbmltYXRlVGltZW91dElkICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fYW5pbWF0ZVRpbWVvdXRJZCk7XG5cdFx0fVxuXHRcdHRoaXMuX3Nob3dUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuX3RvZ2dsZURhdGFBdHRyaWJ1dGVzKHRydWUsIHRoaXMuc2lkZSgpKTtcblx0XHRcdHRoaXMuX3RvZ2dsZVZpc2liaWxpdHkodHJ1ZSk7XG5cdFx0XHR0aGlzLl9zaG93VGltZW91dElkID0gdW5kZWZpbmVkO1xuXHRcdH0sIGRlbGF5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCZWdpbnMgdG8gaGlkZSB0aGUgdG9vbHRpcCBhZnRlciB0aGUgcHJvdmlkZWQgZGVsYXkgaW4gbXMuXG5cdCAqIEBwYXJhbSBkZWxheSBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGhpZGluZyB0aGUgdG9vbHRpcC5cblx0ICogQHBhcmFtIGV4aXRBbmltYXRpb25EdXJhdGlvbiBUaW1lIGJlZm9yZSBoaWRpbmcgdG8gZmluaXNoIGFuaW1hdGlvblxuXHQgKiAqL1xuXHRoaWRlKGRlbGF5OiBudW1iZXIsIGV4aXRBbmltYXRpb25EdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gQ2FuY2VsIHRoZSBkZWxheWVkIHNob3cgaWYgaXQgaXMgc2NoZWR1bGVkXG5cdFx0aWYgKHRoaXMuX3Nob3dUaW1lb3V0SWQgIT09IG51bGwpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKTtcblx0XHR9XG5cdFx0Ly8gc3RhcnQgb3V0IGFuaW1hdGlvbiBhdCBkZWxheSBtaW51cyBhbmltYXRpb24gZGVsYXkgb3IgaW1tZWRpYXRlbHkgaWYgcG9zc2libGVcblx0XHR0aGlzLl9hbmltYXRlVGltZW91dElkID0gc2V0VGltZW91dChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZVRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbnRlbnRIb3ZlcmVkKCkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5fdG9nZ2xlRGF0YUF0dHJpYnV0ZXMoZmFsc2UsIHRoaXMuc2lkZSgpKTtcblx0XHRcdH0sXG5cdFx0XHRNYXRoLm1heChkZWxheSwgMCksXG5cdFx0KTtcblx0XHR0aGlzLl9oaWRlVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9oaWRlVGltZW91dElkID0gdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHRoaXMuX2NvbnRlbnRIb3ZlcmVkKCkpIHJldHVybjtcblx0XHRcdHRoaXMuX3RvZ2dsZVZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdH0sIGRlbGF5ICsgZXhpdEFuaW1hdGlvbkR1cmF0aW9uKTtcblx0fVxuXG5cdC8qKiBXaGV0aGVyIHRoZSB0b29sdGlwIGlzIGJlaW5nIGRpc3BsYXllZC4gKi9cblx0aXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc1Zpc2libGU7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO1xuXHRcdHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpO1xuXHRcdHRoaXMudHJpZ2dlckVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRfaXNUeXBlT2ZTdHJpbmcoY29udGVudDogdW5rbm93bik6IGNvbnRlbnQgaXMgc3RyaW5nIHtcblx0XHRyZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVyYWN0aW9ucyBvbiB0aGUgSFRNTCBib2R5IHNob3VsZCBjbG9zZSB0aGUgdG9vbHRpcCBpbW1lZGlhdGVseSBhcyBkZWZpbmVkIGluIHRoZVxuXHQgKiBtYXRlcmlhbCBkZXNpZ24gc3BlYy5cblx0ICogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy90b29sdGlwcy5odG1sI2JlaGF2aW9yXG5cdCAqL1xuXHRfaGFuZGxlQm9keUludGVyYWN0aW9uKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24pIHtcblx0XHRcdHRoaXMuaGlkZSgwLCAwKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFya3MgdGhhdCB0aGUgdG9vbHRpcCBuZWVkcyB0byBiZSBjaGVja2VkIGluIHRoZSBuZXh0IGNoYW5nZSBkZXRlY3Rpb24gcnVuLlxuXHQgKiBNYWlubHkgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBpbml0aWFsIHRleHQgYmVmb3JlIHBvc2l0aW9uaW5nIGEgdG9vbHRpcCwgd2hpY2hcblx0ICogY2FuIGJlIHByb2JsZW1hdGljIGluIGNvbXBvbmVudHMgd2l0aCBPblB1c2ggY2hhbmdlIGRldGVjdGlvbi5cblx0ICovXG5cdF9tYXJrRm9yQ2hlY2soKTogdm9pZCB7XG5cdFx0dGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0X2hhbmRsZU1vdXNlTGVhdmUoeyByZWxhdGVkVGFyZ2V0IH06IE1vdXNlRXZlbnQpIHtcblx0XHRpZiAoIXJlbGF0ZWRUYXJnZXQgfHwgIXRoaXMudHJpZ2dlckVsZW1lbnQ/LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcblx0XHRcdGlmICh0aGlzLmlzVmlzaWJsZSgpKSB7XG5cdFx0XHRcdHRoaXMuaGlkZSh0aGlzLm1vdXNlTGVhdmVIaWRlRGVsYXksIHRoaXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9uKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2ZpbmFsaXplKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5fY29udGVudEhvdmVyZWQuc2V0KGZhbHNlKTtcblx0fVxuXG5cdC8qKiBDYW5jZWxzIGFueSBwZW5kaW5nIGFuaW1hdGlvbiBzZXF1ZW5jZXMuICovXG5cdF9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpIHtcblx0XHRpZiAodGhpcy5fc2hvd1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9oaWRlVGltZW91dElkICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2hvd1RpbWVvdXRJZCA9IHRoaXMuX2hpZGVUaW1lb3V0SWQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRwcml2YXRlIF9maW5hbGl6ZSh0b1Zpc2libGU6IGJvb2xlYW4pIHtcblx0XHRpZiAodG9WaXNpYmxlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcblx0XHRcdHRoaXMuX29uSGlkZS5uZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHRvb2x0aXAgZWxlbWVudC4gKi9cblx0cHJpdmF0ZSBfdG9nZ2xlVmlzaWJpbGl0eShpc1Zpc2libGU6IGJvb2xlYW4pIHtcblx0XHQvLyBXZSBzZXQgdGhlIGNsYXNzZXMgZGlyZWN0bHkgaGVyZSBvdXJzZWx2ZXMgc28gdGhhdCB0b2dnbGluZyB0aGUgdG9vbHRpcCBzdGF0ZVxuXHRcdC8vIGlzbid0IGJvdW5kIGJ5IGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgYWxsb3dzIHVzIHRvIGhpZGUgaXQgZXZlbiBpZiB0aGVcblx0XHQvLyB2aWV3IHJlZiBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBDRCB0cmVlLlxuXHRcdGNvbnN0IHRvb2x0aXAgPSB0aGlzLnRvb2x0aXAoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRpZiAoIXRvb2x0aXAgfHwgIXRoaXMuX2lzQnJvd3NlcikgcmV0dXJuO1xuXHRcdHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0b29sdGlwLCAndmlzaWJpbGl0eScsIGlzVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKTtcblx0XHRpZiAoaXNWaXNpYmxlKSB7XG5cdFx0XHR0aGlzLl9yZW5kZXJlcjIucmVtb3ZlU3R5bGUodG9vbHRpcCwgJ2Rpc3BsYXknKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRvb2x0aXAsICdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHR9XG5cdFx0dGhpcy5faXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuXHR9XG5cblx0cHJpdmF0ZSBfdG9nZ2xlRGF0YUF0dHJpYnV0ZXMoaXNWaXNpYmxlOiBib29sZWFuLCBzaWRlOiBzdHJpbmcpIHtcblx0XHQvLyBXZSBzZXQgdGhlIGNsYXNzZXMgZGlyZWN0bHkgaGVyZSBvdXJzZWx2ZXMgc28gdGhhdCB0b2dnbGluZyB0aGUgdG9vbHRpcCBzdGF0ZVxuXHRcdC8vIGlzbid0IGJvdW5kIGJ5IGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgYWxsb3dzIHVzIHRvIGhpZGUgaXQgZXZlbiBpZiB0aGVcblx0XHQvLyB2aWV3IHJlZiBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBDRCB0cmVlLlxuXHRcdGNvbnN0IHRvb2x0aXAgPSB0aGlzLnRvb2x0aXAoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRpZiAoIXRvb2x0aXAgfHwgIXRoaXMuX2lzQnJvd3NlcikgcmV0dXJuO1xuXHRcdHRoaXMuX3JlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodG9vbHRpcCwgJ2RhdGEtc2lkZScsIHNpZGUpO1xuXHRcdHRoaXMuX3JlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodG9vbHRpcCwgJ2RhdGEtc3RhdGUnLCBpc1Zpc2libGUgPyAnb3BlbicgOiAnY2xvc2VkJyk7XG5cdH1cbn1cbiJdfQ==","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { BrnTooltip } from './brn-tooltip';\nimport * as i0 from \"@angular/core\";\nexport class BrnTooltipContentTemplate {\n _brnTooltipDirective = inject(BrnTooltip, { optional: true });\n _tpl = inject(TemplateRef);\n constructor() {\n if (!this._brnTooltipDirective || !this._tpl)\n return;\n this._brnTooltipDirective.tooltipTemplate.set(this._tpl);\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContentTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.7\", type: BrnTooltipContentTemplate, isStandalone: true, selector: \"[brnTooltipContent]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContentTemplate, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTooltipContent]',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAtY29udGVudC10ZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdG9vbHRpcC9zcmMvbGliL2Jybi10b29sdGlwLWNvbnRlbnQtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEIsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELElBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFNUM7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDOzBIQVBXLHlCQUF5Qjs4R0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCcm5Ub29sdGlwIH0gZnJvbSAnLi9icm4tdG9vbHRpcCc7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5Ub29sdGlwQ29udGVudF0nLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwQ29udGVudFRlbXBsYXRlIHtcblx0cHJpdmF0ZSByZWFkb25seSBfYnJuVG9vbHRpcERpcmVjdGl2ZSA9IGluamVjdChCcm5Ub29sdGlwLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90cGwgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGlmICghdGhpcy5fYnJuVG9vbHRpcERpcmVjdGl2ZSB8fCAhdGhpcy5fdHBsKSByZXR1cm47XG5cdFx0dGhpcy5fYnJuVG9vbHRpcERpcmVjdGl2ZS50b29sdGlwVGVtcGxhdGUuc2V0KHRoaXMuX3RwbCk7XG5cdH1cbn1cbiJdfQ==","import { inject, InjectionToken } from '@angular/core';\nexport const defaultOptions = {\n showDelay: 0,\n hideDelay: 0,\n exitAnimationDuration: 0,\n touchendHideDelay: 1500,\n};\nconst BRN_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken('brn-tooltip-default-options', {\n providedIn: 'root',\n factory: () => defaultOptions,\n});\nexport function provideBrnTooltipDefaultOptions(options) {\n return { provide: BRN_TOOLTIP_DEFAULT_OPTIONS, useValue: { ...defaultOptions, ...options } };\n}\nexport function injectBrnTooltipDefaultOptions() {\n return inject(BRN_TOOLTIP_DEFAULT_OPTIONS, { optional: true }) ?? defaultOptions;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3Rvb2x0aXAvc3JjL2xpYi9icm4tdG9vbHRpcC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUEyQjNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBc0I7SUFDaEQsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsQ0FBQztJQUNaLHFCQUFxQixFQUFFLENBQUM7SUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtDQUN2QixDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsNkJBQTZCLEVBQUU7SUFDeEcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWM7Q0FDN0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxVQUFVLCtCQUErQixDQUFDLE9BQW1DO0lBQ2xGLE9BQU8sRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQzlGLENBQUM7QUFFRCxNQUFNLFVBQVUsOEJBQThCO0lBQzdDLE9BQU8sTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGlvblRva2VuLCB0eXBlIFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgVG9vbHRpcFBvc2l0aW9uLCBUb29sdGlwVG91Y2hHZXN0dXJlcyB9IGZyb20gJy4vYnJuLXRvb2x0aXAtdHJpZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJuVG9vbHRpcE9wdGlvbnMge1xuXHQvKiogRGVmYXVsdCBkZWxheSB3aGVuIHRoZSB0b29sdGlwIGlzIHNob3duLiAqL1xuXHRzaG93RGVsYXk6IG51bWJlcjtcblx0LyoqIERlZmF1bHQgZGVsYXkgd2hlbiB0aGUgdG9vbHRpcCBpcyBoaWRkZW4uICovXG5cdGhpZGVEZWxheTogbnVtYmVyO1xuXHQvKiogRGVmYXVsdCBkZWxheSB3aGVuIGhpZGluZyB0aGUgdG9vbHRpcCBvbiBhIHRvdWNoIGRldmljZS4gKi9cblx0dG91Y2hlbmRIaWRlRGVsYXk6IG51bWJlcjtcblx0LyoqIERlZmF1bHQgZXhpdCBhbmltYXRpb24gZHVyYXRpb24gZm9yIHRoZSB0b29sdGlwLiAqL1xuXHRleGl0QW5pbWF0aW9uRHVyYXRpb246IG51bWJlcjtcblx0LyoqIERlZmF1bHQgdG91Y2ggZ2VzdHVyZSBoYW5kbGluZyBmb3IgdG9vbHRpcHMuICovXG5cdHRvdWNoR2VzdHVyZXM/OiBUb29sdGlwVG91Y2hHZXN0dXJlcztcblx0LyoqIERlZmF1bHQgcG9zaXRpb24gZm9yIHRvb2x0aXBzLiAqL1xuXHRwb3NpdGlvbj86IFRvb2x0aXBQb3NpdGlvbjtcblx0LyoqXG5cdCAqIERlZmF1bHQgdmFsdWUgZm9yIHdoZXRoZXIgdG9vbHRpcHMgc2hvdWxkIGJlIHBvc2l0aW9uZWQgbmVhciB0aGUgY2xpY2sgb3IgdG91Y2ggb3JpZ2luXG5cdCAqIGluc3RlYWQgb2Ygb3V0c2lkZSB0aGUgZWxlbWVudCBib3VuZGluZyBib3guXG5cdCAqL1xuXHRwb3NpdGlvbkF0T3JpZ2luPzogYm9vbGVhbjtcblx0LyoqIERpc2FibGVzIHRoZSBhYmlsaXR5IGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoIHRoZSB0b29sdGlwIGVsZW1lbnQuICovXG5cdGRpc2FibGVUb29sdGlwSW50ZXJhY3Rpdml0eT86IGJvb2xlYW47XG5cdC8qKiBEZWZhdWx0IGNsYXNzZXMgZm9yIHRoZSB0b29sdGlwIGNvbnRlbnQuICovXG5cdHRvb2x0aXBDb250ZW50Q2xhc3Nlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zOiBCcm5Ub29sdGlwT3B0aW9ucyA9IHtcblx0c2hvd0RlbGF5OiAwLFxuXHRoaWRlRGVsYXk6IDAsXG5cdGV4aXRBbmltYXRpb25EdXJhdGlvbjogMCxcblx0dG91Y2hlbmRIaWRlRGVsYXk6IDE1MDAsXG59O1xuXG5jb25zdCBCUk5fVE9PTFRJUF9ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QnJuVG9vbHRpcE9wdGlvbnM+KCdicm4tdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMnLCB7XG5cdHByb3ZpZGVkSW46ICdyb290Jyxcblx0ZmFjdG9yeTogKCkgPT4gZGVmYXVsdE9wdGlvbnMsXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCcm5Ub29sdGlwRGVmYXVsdE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxCcm5Ub29sdGlwT3B0aW9ucz4pOiBWYWx1ZVByb3ZpZGVyIHtcblx0cmV0dXJuIHsgcHJvdmlkZTogQlJOX1RPT0xUSVBfREVGQVVMVF9PUFRJT05TLCB1c2VWYWx1ZTogeyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCcm5Ub29sdGlwRGVmYXVsdE9wdGlvbnMoKTogQnJuVG9vbHRpcE9wdGlvbnMge1xuXHRyZXR1cm4gaW5qZWN0KEJSTl9UT09MVElQX0RFRkFVTFRfT1BUSU9OUywgeyBvcHRpb25hbDogdHJ1ZSB9KSA/PyBkZWZhdWx0T3B0aW9ucztcbn1cbiJdfQ==","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tooltip/tooltip.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { Overlay, ScrollDispatcher, } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions, Platform } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { booleanAttribute, computed, Directive, DOCUMENT, effect, ElementRef, inject, InjectionToken, input, isDevMode, NgZone, numberAttribute, signal, untracked, ViewContainerRef, } from '@angular/core';\nimport { brnDevMode, computedPrevious } from '@spartan-ng/brain/core';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { BrnTooltip } from './brn-tooltip';\nimport { BrnTooltipContent } from './brn-tooltip-content';\nimport { injectBrnTooltipDefaultOptions } from './brn-tooltip.token';\nimport * as i0 from \"@angular/core\";\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\nexport function getBrnTooltipInvalidPositionError(position) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const BRN_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('brn-tooltip-scroll-strategy');\nexport const BRN_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: BRN_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: (overlay) => () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS }),\n};\nconst PANEL_CLASS = 'tooltip-panel';\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });\n/**\n * Time between the user putting the pointer on a tooltip\n * trigger and the long press event being fired.\n */\nconst LONGPRESS_DELAY = 500;\n// These constants were taken from MDC's `numbers` object.\nconst MIN_VIEWPORT_TOOLTIP_THRESHOLD = 8;\nconst UNBOUNDED_ANCHOR_GAP = 8;\nexport class BrnTooltipTrigger {\n _tooltipDirective = inject(BrnTooltip, { optional: true });\n _tooltipComponent = BrnTooltipContent;\n _cssClassPrefix = 'brn';\n _destroyed = new Subject();\n _passiveListeners = [];\n _defaultOptions = injectBrnTooltipDefaultOptions();\n _overlay = inject(Overlay);\n _elementRef = inject((ElementRef));\n _scrollDispatcher = inject(ScrollDispatcher);\n _viewContainerRef = inject(ViewContainerRef);\n _ngZone = inject(NgZone);\n _platform = inject(Platform);\n _ariaDescriber = inject(AriaDescriber);\n _focusMonitor = inject(FocusMonitor);\n _dir = inject(Directionality);\n _scrollStrategy = inject(BRN_TOOLTIP_SCROLL_STRATEGY);\n _document = inject(DOCUMENT);\n _portal;\n _viewInitialized = false;\n _pointerExitEventsInitialized = false;\n _viewportMargin = 8;\n _currentPosition;\n _touchstartTimeout;\n _overlayRef = null;\n _tooltipInstance = null;\n /** Allows the user to define the position of the tooltip relative to the parent element */\n position = input(this._defaultOptions?.position ?? 'above');\n /**\n * Whether tooltip should be relative to the click or touch origin\n * instead of outside the element bounding box.\n */\n positionAtOrigin = input(this._defaultOptions?.positionAtOrigin ?? false, {\n transform: booleanAttribute,\n });\n /** Disables the display of the tooltip. */\n brnTooltipDisabled = input(false, { transform: booleanAttribute });\n /** The default delay in ms before showing the tooltip after show is called */\n showDelay = input(this._defaultOptions?.showDelay ?? 0, { transform: numberAttribute });\n /** The default delay in ms before hiding the tooltip after hide is called */\n hideDelay = input(this._defaultOptions?.hideDelay ?? 0, { transform: numberAttribute });\n /** The default duration in ms that exit animation takes before hiding */\n exitAnimationDuration = input(this._defaultOptions?.exitAnimationDuration ?? 0, {\n transform: numberAttribute,\n });\n /** The default delay in ms before hiding the tooltip after hide is called */\n tooltipContentClasses = input(this._defaultOptions?.tooltipContentClasses ?? '', {\n alias: 'tooltipContentClasses',\n });\n computedTooltipContentClasses = computed(() => signal(this.tooltipContentClasses()));\n /**\n * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n * uses a long press gesture to show and hide, however it can conflict with the native browser\n * gestures. To work around the conflict, Angular Material disables native gestures on the\n * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n * elements). The different values for this option configure the touch event handling as follows:\n * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n * browser gestures on particular elements. In particular, it allows text selection on inputs\n * and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n * - `on` - Enables touch gestures for all elements and disables native\n * browser gestures with no exceptions.\n * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n * showing on touch devices.\n */\n touchGestures = input(this._defaultOptions?.touchGestures ?? 'auto');\n /** The message to be used to describe the aria in the tooltip */\n ariaDescribedBy = input('', { alias: 'aria-describedby' });\n computedAriaDescribedBy = computed(() => signal(this.ariaDescribedBy()));\n ariaDescribedByPrevious = computedPrevious(this.computedAriaDescribedBy);\n /** The content to be displayed in the tooltip */\n brnTooltipTrigger = input(null);\n brnTooltipTriggerState = computed(() => {\n if (this._tooltipDirective) {\n return this._tooltipDirective.tooltipTemplate();\n }\n return this.brnTooltipTrigger();\n });\n constructor() {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n }\n });\n this._viewportMargin = MIN_VIEWPORT_TOOLTIP_THRESHOLD;\n this._initBrnTooltipTriggerEffect();\n this._initAriaDescribedByPreviousEffect();\n this._initTooltipContentClassesEffect();\n this._initPositionEffect();\n this._initPositionAtOriginEffect();\n this._initBrnTooltipDisabledEffect();\n this._initExitAnimationDurationEffect();\n this._initHideDelayEffect();\n }\n setTooltipContentClasses(tooltipContentClasses) {\n this.computedTooltipContentClasses().set(tooltipContentClasses);\n }\n setAriaDescribedBy(ariaDescribedBy) {\n this.computedAriaDescribedBy().set(ariaDescribedBy);\n }\n _initPositionEffect() {\n effect(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n this._tooltipInstance?.show(0);\n this._overlayRef.updatePosition();\n }\n });\n }\n _initBrnTooltipDisabledEffect() {\n effect(() => {\n if (this.brnTooltipDisabled()) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n }\n });\n }\n _initPositionAtOriginEffect() {\n effect(() => {\n // Needed that the effect got triggered\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const _ = this.positionAtOrigin();\n this._detach();\n this._overlayRef = null;\n });\n }\n _initTooltipContentClassesEffect() {\n effect(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClasses.set(this.computedTooltipContentClasses()() ?? '');\n }\n });\n }\n _initAriaDescribedByPreviousEffect() {\n effect(() => {\n const ariaDescribedBy = this.computedAriaDescribedBy()();\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, untracked(() => this.ariaDescribedByPrevious()()), 'tooltip');\n if (ariaDescribedBy && !this._isTooltipVisible()) {\n this._ngZone.runOutsideAngular(() => {\n // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n Promise.resolve().then(() => {\n this._ariaDescriber.describe(this._elementRef.nativeElement, ariaDescribedBy, 'tooltip');\n });\n });\n }\n });\n }\n _initBrnTooltipTriggerEffect() {\n effect(() => {\n const brnTooltipTriggerState = this.brnTooltipTriggerState();\n const isTooltipVisible = this._isTooltipVisible();\n untracked(() => {\n if (!brnTooltipTriggerState && isTooltipVisible) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n this._updateTooltipContent();\n }\n });\n });\n }\n _initExitAnimationDurationEffect() {\n effect(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.exitAnimationDuration = this.exitAnimationDuration();\n }\n });\n }\n _initHideDelayEffect() {\n effect(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.mouseLeaveHideDelay = this.hideDelay();\n }\n });\n }\n ngAfterViewInit() {\n // This needs to happen after view init so the initial values for all inputs have been set.\n this._viewInitialized = true;\n this._setupPointerEnterEventsIfNeeded();\n this._focusMonitor\n .monitor(this._elementRef)\n .pipe(takeUntil(this._destroyed))\n .subscribe((origin) => {\n // Note that the focus monitor runs outside the Angular zone.\n if (!origin) {\n this._ngZone.run(() => this.hide(0));\n }\n else if (origin === 'keyboard') {\n this._ngZone.run(() => this.show());\n }\n });\n if (brnDevMode && !this.computedAriaDescribedBy()) {\n console.warn('BrnTooltip: \"aria-describedby\" attribute is required for accessibility');\n }\n }\n /**\n * Dispose the tooltip when destroyed.\n */\n ngOnDestroy() {\n const nativeElement = this._elementRef.nativeElement;\n clearTimeout(this._touchstartTimeout);\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._tooltipInstance = null;\n }\n // Clean up the event listeners set in the constructor\n this._passiveListeners.forEach(([event, listener]) => nativeElement.removeEventListener(event, listener, passiveListenerOptions));\n this._passiveListeners.length = 0;\n this._destroyed.next();\n this._destroyed.complete();\n this._ariaDescriber.removeDescription(nativeElement, this.computedAriaDescribedBy()(), 'tooltip');\n this._focusMonitor.stopMonitoring(nativeElement);\n }\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n show(delay = this.showDelay(), origin) {\n if (this.brnTooltipDisabled() || this._isTooltipVisible()) {\n this._tooltipInstance?._cancelPendingAnimations();\n return;\n }\n const overlayRef = this._createOverlay(origin);\n this._detach();\n this._portal = this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);\n instance.triggerElement = this._elementRef.nativeElement;\n instance.mouseLeaveHideDelay = this.hideDelay();\n instance.tooltipClasses.set(this.computedTooltipContentClasses()());\n instance.exitAnimationDuration = this.exitAnimationDuration();\n instance.side.set(this._currentPosition ?? 'above');\n instance.afterHidden.pipe(takeUntil(this._destroyed)).subscribe(() => this._detach());\n this._updateTooltipContent();\n instance.show(delay);\n }\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n hide(delay = this.hideDelay(), exitAnimationDuration = this.exitAnimationDuration()) {\n const instance = this._tooltipInstance;\n if (instance) {\n if (instance.isVisible()) {\n instance.hide(delay, exitAnimationDuration);\n }\n else {\n instance._cancelPendingAnimations();\n this._detach();\n }\n }\n }\n toggle(origin) {\n this._isTooltipVisible() ? this.hide() : this.show(undefined, origin);\n }\n _isTooltipVisible() {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n _createOverlay(origin) {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig().positionStrategy;\n if ((!this.positionAtOrigin() || !origin) && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n this._detach();\n }\n const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.positionAtOrigin() ? origin || this._elementRef : this._elementRef)\n .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n .withFlexibleDimensions(false)\n .withViewportMargin(this._viewportMargin)\n .withScrollableContainers(scrollableAncestors);\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe((change) => {\n this._updateCurrentPositionClass(change.connectionPair);\n if (this._tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide(0));\n }\n }\n });\n this._overlayRef = this._overlay.create({\n direction: this._dir,\n positionStrategy: strategy,\n panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,\n scrollStrategy: this._scrollStrategy(),\n });\n this._updatePosition(this._overlayRef);\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n this._overlayRef\n .keydownEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe((event) => {\n if (this._isTooltipVisible() && event.key === 'Escape' && !hasModifierKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n this._ngZone.run(() => this.hide(0));\n }\n });\n if (this._defaultOptions?.disableTooltipInteractivity) {\n this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n }\n return this._overlayRef;\n }\n _detach() {\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef.detach();\n }\n this._tooltipInstance = null;\n }\n _updatePosition(overlayRef) {\n const position = overlayRef.getConfig().positionStrategy;\n const origin = this._getOrigin();\n const overlay = this._getOverlayPosition();\n position.withPositions([\n this._addOffset({ ...origin.main, ...overlay.main }),\n this._addOffset({ ...origin.fallback, ...overlay.fallback }),\n ]);\n }\n /** Adds the configured offset to a position. Used as a hook for child classes. */\n _addOffset(position) {\n const offset = UNBOUNDED_ANCHOR_GAP;\n const isLtr = !this._dir || this._dir.value === 'ltr';\n if (position.originY === 'top') {\n position.offsetY = -offset;\n }\n else if (position.originY === 'bottom') {\n position.offsetY = offset;\n }\n else if (position.originX === 'start') {\n position.offsetX = isLtr ? -offset : offset;\n }\n else if (position.originX === 'end') {\n position.offsetX = isLtr ? offset : -offset;\n }\n return position;\n }\n /**\n * Returns the origin position and a fallback position based on the user's position preference.\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n */\n _getOrigin() {\n const isLtr = !this._dir || this._dir.value === 'ltr';\n const position = this.position();\n let originPosition;\n if (position === 'above' || position === 'below') {\n originPosition = { originX: 'center', originY: position === 'above' ? 'top' : 'bottom' };\n }\n else if (position === 'before' || (position === 'left' && isLtr) || (position === 'right' && !isLtr)) {\n originPosition = { originX: 'start', originY: 'center' };\n }\n else if (position === 'after' || (position === 'right' && isLtr) || (position === 'left' && !isLtr)) {\n originPosition = { originX: 'end', originY: 'center' };\n }\n else if (typeof isDevMode() === 'undefined' || isDevMode()) {\n throw getBrnTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);\n return {\n main: originPosition,\n fallback: { originX: x, originY: y },\n };\n }\n /** Returns the overlay position and a fallback position based on the user's preference */\n _getOverlayPosition() {\n const isLtr = !this._dir || this._dir.value === 'ltr';\n const position = this.position();\n let overlayPosition;\n if (position === 'above') {\n overlayPosition = { overlayX: 'center', overlayY: 'bottom' };\n }\n else if (position === 'below') {\n overlayPosition = { overlayX: 'center', overlayY: 'top' };\n }\n else if (position === 'before' || (position === 'left' && isLtr) || (position === 'right' && !isLtr)) {\n overlayPosition = { overlayX: 'end', overlayY: 'center' };\n }\n else if (position === 'after' || (position === 'right' && isLtr) || (position === 'left' && !isLtr)) {\n overlayPosition = { overlayX: 'start', overlayY: 'center' };\n }\n else if (typeof isDevMode() === 'undefined' || isDevMode()) {\n throw getBrnTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);\n return {\n main: overlayPosition,\n fallback: { overlayX: x, overlayY: y },\n };\n }\n /** Updates the tooltip message and repositions the overlay according to the new message length */\n _updateTooltipContent() {\n // Must wait for the template to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the tek-pate.\n if (this._tooltipInstance) {\n this._tooltipInstance.content = this.brnTooltipTriggerState();\n this._tooltipInstance._markForCheck();\n this._ngZone.onMicrotaskEmpty.pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {\n if (this._tooltipInstance) {\n this._overlayRef?.updatePosition();\n }\n });\n }\n }\n /** Inverts an overlay position. */\n _invertPosition(x, y) {\n if (this.position() === 'above' || this.position() === 'below') {\n if (y === 'top') {\n y = 'bottom';\n }\n else if (y === 'bottom') {\n y = 'top';\n }\n }\n else {\n if (x === 'end') {\n x = 'start';\n }\n else if (x === 'start') {\n x = 'end';\n }\n }\n return { x, y };\n }\n /** Updates the class on the overlay panel based on the current position of the tooltip. */\n _updateCurrentPositionClass(connectionPair) {\n const { overlayY, originX, originY } = connectionPair;\n let newPosition;\n // If the overlay is in the middle along the Y axis,\n // it means that it's either before or after.\n if (overlayY === 'center') {\n // Note that since this information is used for styling, we want to\n // resolve `start` and `end` to their real values, otherwise consumers\n // would have to remember to do it themselves on each consumption.\n if (this._dir && this._dir.value === 'rtl') {\n newPosition = originX === 'end' ? 'left' : 'right';\n }\n else {\n newPosition = originX === 'start' ? 'left' : 'right';\n }\n }\n else {\n newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n }\n if (newPosition !== this._currentPosition) {\n this._tooltipInstance?.side.set(newPosition);\n this._currentPosition = newPosition;\n }\n }\n /** Binds the pointer events to the tooltip trigger. */\n _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no content or the tooltip is disabled.\n if (this.brnTooltipDisabled() ||\n !this.brnTooltipTriggerState() ||\n !this._viewInitialized ||\n this._passiveListeners.length) {\n return;\n }\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (this._platformSupportsMouseEvents()) {\n this._passiveListeners.push([\n 'mouseenter',\n (event) => {\n this._setupPointerExitEventsIfNeeded();\n let point = undefined;\n if (event.x !== undefined && event.y !== undefined) {\n point = event;\n }\n this.show(undefined, point);\n },\n ]);\n }\n else if (this.touchGestures() !== 'off') {\n this._disableNativeGesturesIfNecessary();\n this._passiveListeners.push([\n 'touchstart',\n (event) => {\n const touch = event.targetTouches?.[0];\n const origin = touch ? { x: touch.clientX, y: touch.clientY } : undefined;\n // Note that it's important that we don't `preventDefault` here,\n // because it can prevent click events from firing on the element.\n this._setupPointerExitEventsIfNeeded();\n clearTimeout(this._touchstartTimeout);\n this._touchstartTimeout = setTimeout(() => this.show(undefined, origin), LONGPRESS_DELAY);\n },\n ]);\n }\n this._addListeners(this._passiveListeners);\n }\n _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n const exitListeners = [];\n if (this._platformSupportsMouseEvents()) {\n exitListeners.push([\n 'mouseleave',\n (event) => {\n const newTarget = event.relatedTarget;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n },\n ], ['wheel', (event) => this._wheelListener(event)]);\n }\n else if (this.touchGestures() !== 'off') {\n this._disableNativeGesturesIfNecessary();\n const touchendListener = () => {\n clearTimeout(this._touchstartTimeout);\n this.hide(this._defaultOptions?.touchendHideDelay);\n };\n exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);\n }\n this._addListeners(exitListeners);\n this._passiveListeners.push(...exitListeners);\n }\n _addListeners(listeners) {\n listeners.forEach(([event, listener]) => {\n this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n });\n }\n _platformSupportsMouseEvents() {\n return !this._platform.IOS && !this._platform.ANDROID;\n }\n /** Listener for the `wheel` event on the element. */\n _wheelListener(event) {\n if (this._isTooltipVisible()) {\n const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n const element = this._elementRef.nativeElement;\n // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n // won't fire if the user scrolls away using the wheel without moving their cursor. We\n // work around it by finding the element under the user's cursor and closing the tooltip\n // if it's not the trigger.\n if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n this.hide();\n }\n }\n }\n /** Disables the native browser gestures, based on how the tooltip has been configured. */\n _disableNativeGesturesIfNecessary() {\n const gestures = this.touchGestures();\n if (gestures !== 'off') {\n const element = this._elementRef.nativeElement;\n const style = element.style;\n // If gestures are set to `auto`, we don't disable text selection on inputs and\n // textareas, because it prevents the user from typing into them on iOS Safari.\n if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style.userSelect = style.msUserSelect = style.webkitUserSelect = style.MozUserSelect = 'none';\n }\n // If we have `auto` gestures and the element uses native HTML dragging,\n // we don't set `-webkit-user-drag` because it prevents the native behavior.\n if (gestures === 'on' || !element.draggable) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style.webkitUserDrag = 'none';\n }\n style.touchAction = 'none';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style.webkitTapHighlightColor = 'transparent';\n }\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTooltipTrigger, isStandalone: true, selector: \"[brnTooltipTrigger]\", inputs: { position: { classPropertyName: \"position\", publicName: \"position\", isSignal: true, isRequired: false, transformFunction: null }, positionAtOrigin: { classPropertyName: \"positionAtOrigin\", publicName: \"positionAtOrigin\", isSignal: true, isRequired: false, transformFunction: null }, brnTooltipDisabled: { classPropertyName: \"brnTooltipDisabled\", publicName: \"brnTooltipDisabled\", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: \"showDelay\", publicName: \"showDelay\", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: \"hideDelay\", publicName: \"hideDelay\", isSignal: true, isRequired: false, transformFunction: null }, exitAnimationDuration: { classPropertyName: \"exitAnimationDuration\", publicName: \"exitAnimationDuration\", isSignal: true, isRequired: false, transformFunction: null }, tooltipContentClasses: { classPropertyName: \"tooltipContentClasses\", publicName: \"tooltipContentClasses\", isSignal: true, isRequired: false, transformFunction: null }, touchGestures: { classPropertyName: \"touchGestures\", publicName: \"touchGestures\", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: \"ariaDescribedBy\", publicName: \"aria-describedby\", isSignal: true, isRequired: false, transformFunction: null }, brnTooltipTrigger: { classPropertyName: \"brnTooltipTrigger\", publicName: \"brnTooltipTrigger\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class.brn-tooltip-disabled\": \"brnTooltipDisabled()\" }, classAttribute: \"brn-tooltip-trigger\" }, providers: [BRN_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER], exportAs: [\"brnTooltipTrigger\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTooltipTrigger]',\n exportAs: 'brnTooltipTrigger',\n providers: [BRN_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],\n host: {\n class: 'brn-tooltip-trigger',\n '[class.brn-tooltip-disabled]': 'brnTooltipDisabled()',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdG9vbHRpcC9zcmMvbGliL2Jybi10b29sdGlwLXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVIOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBTU4sT0FBTyxFQUdQLGdCQUFnQixHQUdoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUVOLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sZUFBZSxFQUdmLE1BQU0sRUFFTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFB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O1lBQy9FLCtFQUErRTtZQUMvRSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVGLDhEQUE4RDtnQkFDOUQsS0FBSyxDQUFDLFVBQVUsR0FBSSxLQUFhLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsR0FBSSxLQUFhLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUNqSCxDQUFDO1lBRUQsd0VBQXdFO1lBQ3hFLDRFQUE0RTtZQUM1RSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzdDLDhEQUE4RDtnQkFDN0QsS0FBYSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7WUFDeEMsQ0FBQztZQUVELEtBQUssQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1lBQzNCLDhEQUE4RDtZQUM3RCxLQUFhLENBQUMsdUJBQXVCLEdBQUcsYUFBYSxDQUFDO1FBQ3hELENBQUM7SUFDRixDQUFDOzBIQXRwQlcsaUJBQWlCOzhHQUFqQixpQkFBaUIseXBEQU5sQixDQUFDLDRDQUE0QyxDQUFDOzsyRkFNN0MsaUJBQWlCO2tCQVQ3QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFNBQVMsRUFBRSxDQUFDLDRDQUE0QyxDQUFDO29CQUN6RCxJQUFJLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLHFCQUFxQjt3QkFDNUIsOEJBQThCLEVBQUUsc0JBQXNCO3FCQUN0RDtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2UgYXJlIGJ1aWxkaW5nIG9uIHNob3VsZGVycyBvZiBnaWFudHMgaGVyZSBhbmQgYWRhcHQgdGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBpbmNyZWRpYmxlIEFuZ3VsYXJcbiAqIHRlYW06IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvYmxvYi9tYWluL3NyYy9tYXRlcmlhbC90b29sdGlwL3Rvb2x0aXAudHNcbiAqIENoZWNrIHRoZW0gb3V0ISBHaXZlIHRoZW0gYSB0cnkhIExlYXZlIGEgc3RhciEgVGhlaXIgd29yayBpcyBpbmNyZWRpYmxlIVxuICovXG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgQXJpYURlc2NyaWJlciwgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuXHR0eXBlIENvbm5lY3RlZFBvc2l0aW9uLFxuXHR0eXBlIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG5cdHR5cGUgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuXHR0eXBlIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxuXHR0eXBlIE9yaWdpbkNvbm5lY3Rpb25Qb3NpdGlvbixcblx0T3ZlcmxheSxcblx0dHlwZSBPdmVybGF5Q29ubmVjdGlvblBvc2l0aW9uLFxuXHR0eXBlIE92ZXJsYXlSZWYsXG5cdFNjcm9sbERpc3BhdGNoZXIsXG5cdHR5cGUgU2Nyb2xsU3RyYXRlZ3ksXG5cdHR5cGUgVmVydGljYWxDb25uZWN0aW9uUG9zLFxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zLCBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHtcblx0dHlwZSBBZnRlclZpZXdJbml0LFxuXHRib29sZWFuQXR0cmlidXRlLFxuXHRjb21wdXRlZCxcblx0RGlyZWN0aXZlLFxuXHRET0NVTUVOVCxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRpbnB1dCxcblx0aXNEZXZNb2RlLFxuXHROZ1pvbmUsXG5cdG51bWJlckF0dHJpYnV0ZSxcblx0dHlwZSBPbkRlc3Ryb3ksXG5cdHR5cGUgUHJvdmlkZXIsXG5cdHNpZ25hbCxcblx0dHlwZSBUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJybkRldk1vZGUsIGNvbXB1dGVkUHJldmlvdXMgfSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJyblRvb2x0aXAgfSBmcm9tICcuL2Jybi10b29sdGlwJztcbmltcG9ydCB7IEJyblRvb2x0aXBDb250ZW50IH0gZnJvbSAnLi9icm4tdG9vbHRpcC1jb250ZW50JztcbmltcG9ydCB7IGluamVjdEJyblRvb2x0aXBEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vYnJuLXRvb2x0aXAudG9rZW4nO1xuXG5leHBvcnQgdHlwZSBUb29sdGlwUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2Fib3ZlJyB8ICdiZWxvdycgfCAnYmVmb3JlJyB8ICdhZnRlcic7XG5leHBvcnQgdHlwZSBUb29sdGlwVG91Y2hHZXN0dXJlcyA9ICdhdXRvJyB8ICdvbicgfCAnb2ZmJztcblxuLyoqIFRpbWUgaW4gbXMgdG8gdGhyb3R0bGUgcmVwb3NpdGlvbmluZyBhZnRlciBzY3JvbGwgZXZlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IFNDUk9MTF9USFJPVFRMRV9NUyA9IDIwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJuVG9vbHRpcEludmFsaWRQb3NpdGlvbkVycm9yKHBvc2l0aW9uOiBzdHJpbmcpIHtcblx0cmV0dXJuIEVycm9yKGBUb29sdGlwIHBvc2l0aW9uIFwiJHtwb3NpdGlvbn1cIiBpcyBpbnZhbGlkLmApO1xufVxuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIGhhbmRsaW5nIHdoaWxlIGEgdG9vbHRpcCBpcyB2aXNpYmxlLiAqL1xuZXhwb3J0IGNvbnN0IEJSTl9UT09MVElQX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiBTY3JvbGxTdHJhdGVneT4oJ2Jybi10b29sdGlwLXNjcm9sbC1zdHJhdGVneScpO1xuZXhwb3J0IGNvbnN0IEJSTl9UT09MVElQX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSOiBQcm92aWRlciA9IHtcblx0cHJvdmlkZTogQlJOX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZLFxuXHRkZXBzOiBbT3ZlcmxheV0sXG5cdHVzZUZhY3Rvcnk6XG5cdFx0KG92ZXJsYXk6IE92ZXJsYXkpOiAoKCkgPT4gU2Nyb2xsU3RyYXRlZ3kpID0+XG5cdFx0KCkgPT5cblx0XHRcdG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IFNDUk9MTF9USFJPVFRMRV9NUyB9KSxcbn07XG5cbmNvbnN0IFBBTkVMX0NMQVNTID0gJ3Rvb2x0aXAtcGFuZWwnO1xuXG4vKiogT3B0aW9ucyB1c2VkIHRvIGJpbmQgcGFzc2l2ZSBldmVudCBsaXN0ZW5lcnMuICovXG5jb25zdCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zID0gbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSk7XG5cbi8qKlxuICogVGltZSBiZXR3ZWVuIHRoZSB1c2VyIHB1dHRpbmcgdGhlIHBvaW50ZXIgb24gYSB0b29sdGlwXG4gKiB0cmlnZ2VyIGFuZCB0aGUgbG9uZyBwcmVzcyBldmVudCBiZWluZyBmaXJlZC5cbiAqL1xuY29uc3QgTE9OR1BSRVNTX0RFTEFZID0gNTAwO1xuXG4vLyBUaGVzZSBjb25zdGFudHMgd2VyZSB0YWtlbiBmcm9tIE1EQydzIGBudW1iZXJzYCBvYmplY3QuXG5jb25zdCBNSU5fVklFV1BPUlRfVE9PTFRJUF9USFJFU0hPTEQgPSA4O1xuY29uc3QgVU5CT1VOREVEX0FOQ0hPUl9HQVAgPSA4O1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVG9vbHRpcFRyaWdnZXJdJyxcblx0ZXhwb3J0QXM6ICdicm5Ub29sdGlwVHJpZ2dlcicsXG5cdHByb3ZpZGVyczogW0JSTl9UT09MVElQX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXSxcblx0aG9zdDoge1xuXHRcdGNsYXNzOiAnYnJuLXRvb2x0aXAtdHJpZ2dlcicsXG5cdFx0J1tjbGFzcy5icm4tdG9vbHRpcC1kaXNhYmxlZF0nOiAnYnJuVG9vbHRpcERpc2FibGVkKCknLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwVHJpZ2dlciBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Rvb2x0aXBEaXJlY3RpdmUgPSBpbmplY3QoQnJuVG9vbHRpcCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBfdG9vbHRpcENvbXBvbmVudCA9IEJyblRvb2x0aXBDb250ZW50O1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jc3NDbGFzc1ByZWZpeDogc3RyaW5nID0gJ2Jybic7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Bhc3NpdmVMaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0T3B0aW9ucyA9IGluamVjdEJyblRvb2x0aXBEZWZhdWx0T3B0aW9ucygpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX292ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zY3JvbGxEaXNwYXRjaGVyID0gaW5qZWN0KFNjcm9sbERpc3BhdGNoZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm0gPSBpbmplY3QoUGxhdGZvcm0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9hcmlhRGVzY3JpYmVyID0gaW5qZWN0KEFyaWFEZXNjcmliZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9mb2N1c01vbml0b3IgPSBpbmplY3QoRm9jdXNNb25pdG9yKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZGlyID0gaW5qZWN0KERpcmVjdGlvbmFsaXR5KTtcblx0cHJpdmF0ZSByZWFkb25seSBfc2Nyb2xsU3RyYXRlZ3kgPSBpbmplY3QoQlJOX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG5cdHByaXZhdGUgX3BvcnRhbD86IENvbXBvbmVudFBvcnRhbDxCcm5Ub29sdGlwQ29udGVudD47XG5cdHByaXZhdGUgX3ZpZXdJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRwcml2YXRlIF9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkID0gZmFsc2U7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdwb3J0TWFyZ2luID0gODtcblx0cHJpdmF0ZSBfY3VycmVudFBvc2l0aW9uPzogVG9vbHRpcFBvc2l0aW9uO1xuXHRwcml2YXRlIF90b3VjaHN0YXJ0VGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfdG9vbHRpcEluc3RhbmNlOiBCcm5Ub29sdGlwQ29udGVudCB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGVsZW1lbnQgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb24gPSBpbnB1dDxUb29sdGlwUG9zaXRpb24+KHRoaXMuX2RlZmF1bHRPcHRpb25zPy5wb3NpdGlvbiA/PyAnYWJvdmUnKTtcblxuXHQvKipcblx0ICogV2hldGhlciB0b29sdGlwIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY2xpY2sgb3IgdG91Y2ggb3JpZ2luXG5cdCAqIGluc3RlYWQgb2Ygb3V0c2lkZSB0aGUgZWxlbWVudCBib3VuZGluZyBib3guXG5cdCAqL1xuXG5cdHB1YmxpYyByZWFkb25seSBwb3NpdGlvbkF0T3JpZ2luID0gaW5wdXQodGhpcy5fZGVmYXVsdE9wdGlvbnM/LnBvc2l0aW9uQXRPcmlnaW4gPz8gZmFsc2UsIHtcblx0XHR0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXG5cdH0pO1xuXG5cdC8qKiBEaXNhYmxlcyB0aGUgZGlzcGxheSBvZiB0aGUgdG9vbHRpcC4gKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgYnJuVG9vbHRpcERpc2FibGVkID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG5cdC8qKiBUaGUgZGVmYXVsdCBkZWxheSBpbiBtcyBiZWZvcmUgc2hvd2luZyB0aGUgdG9vbHRpcCBhZnRlciBzaG93IGlzIGNhbGxlZCAqL1xuXG5cdHB1YmxpYyByZWFkb25seSBzaG93RGVsYXkgPSBpbnB1dCh0aGlzLl9kZWZhdWx0T3B0aW9ucz8uc2hvd0RlbGF5ID8/IDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cblx0LyoqIFRoZSBkZWZhdWx0IGRlbGF5IGluIG1zIGJlZm9yZSBoaWRpbmcgdGhlIHRvb2x0aXAgYWZ0ZXIgaGlkZSBpcyBjYWxsZWQgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgaGlkZURlbGF5ID0gaW5wdXQodGhpcy5fZGVmYXVsdE9wdGlvbnM/LmhpZGVEZWxheSA/PyAwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xuXG5cdC8qKiBUaGUgZGVmYXVsdCBkdXJhdGlvbiBpbiBtcyB0aGF0IGV4aXQgYW5pbWF0aW9uIHRha2VzIGJlZm9yZSBoaWRpbmcgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgZXhpdEFuaW1hdGlvbkR1cmF0aW9uID0gaW5wdXQodGhpcy5fZGVmYXVsdE9wdGlvbnM/LmV4aXRBbmltYXRpb25EdXJhdGlvbiA/PyAwLCB7XG5cdFx0dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUsXG5cdH0pO1xuXG5cdC8qKiBUaGUgZGVmYXVsdCBkZWxheSBpbiBtcyBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwIGFmdGVyIGhpZGUgaXMgY2FsbGVkICovXG5cblx0cHVibGljIHJlYWRvbmx5IHRvb2x0aXBDb250ZW50Q2xhc3NlcyA9IGlucHV0PHN0cmluZz4odGhpcy5fZGVmYXVsdE9wdGlvbnM/LnRvb2x0aXBDb250ZW50Q2xhc3NlcyA/PyAnJywge1xuXHRcdGFsaWFzOiAndG9vbHRpcENvbnRlbnRDbGFzc2VzJyxcblx0fSk7XG5cdHB1YmxpYyByZWFkb25seSBjb21wdXRlZFRvb2x0aXBDb250ZW50Q2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IHNpZ25hbCh0aGlzLnRvb2x0aXBDb250ZW50Q2xhc3NlcygpKSk7XG5cblx0LyoqXG5cdCAqIEhvdyB0b3VjaCBnZXN0dXJlcyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgdG9vbHRpcC4gT24gdG91Y2ggZGV2aWNlcyB0aGUgdG9vbHRpcCBkaXJlY3RpdmVcblx0ICogdXNlcyBhIGxvbmcgcHJlc3MgZ2VzdHVyZSB0byBzaG93IGFuZCBoaWRlLCBob3dldmVyIGl0IGNhbiBjb25mbGljdCB3aXRoIHRoZSBuYXRpdmUgYnJvd3NlclxuXHQgKiBnZXN0dXJlcy4gVG8gd29yayBhcm91bmQgdGhlIGNvbmZsaWN0LCBBbmd1bGFyIE1hdGVyaWFsIGRpc2FibGVzIG5hdGl2ZSBnZXN0dXJlcyBvbiB0aGVcblx0ICogdHJpZ2dlciwgYnV0IHRoYXQgbWlnaHQgbm90IGJlIGRlc2lyYWJsZSBvbiBwYXJ0aWN1bGFyIGVsZW1lbnRzIChlLmcuIGlucHV0cyBhbmQgZHJhZ2dhYmxlXG5cdCAqIGVsZW1lbnRzKS4gVGhlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGNvbmZpZ3VyZSB0aGUgdG91Y2ggZXZlbnQgaGFuZGxpbmcgYXMgZm9sbG93czpcblx0ICogLSBgYXV0b2AgLSBFbmFibGVzIHRvdWNoIGdlc3R1cmVzIGZvciBhbGwgZWxlbWVudHMsIGJ1dCB0cmllcyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBuYXRpdmVcblx0ICogICBicm93c2VyIGdlc3R1cmVzIG9uIHBhcnRpY3VsYXIgZWxlbWVudHMuIEluIHBhcnRpY3VsYXIsIGl0IGFsbG93cyB0ZXh0IHNlbGVjdGlvbiBvbiBpbnB1dHNcblx0ICogICBhbmQgdGV4dGFyZWFzLCBhbmQgcHJlc2VydmVzIHRoZSBuYXRpdmUgYnJvd3NlciBkcmFnZ2luZyBvbiBlbGVtZW50cyBtYXJrZWQgYXMgYGRyYWdnYWJsZWAuXG5cdCAqIC0gYG9uYCAtIEVuYWJsZXMgdG91Y2ggZ2VzdHVyZXMgZm9yIGFsbCBlbGVtZW50cyBhbmQgZGlzYWJsZXMgbmF0aXZlXG5cdCAqICAgYnJvd3NlciBnZXN0dXJlcyB3aXRoIG5vIGV4Y2VwdGlvbnMuXG5cdCAqIC0gYG9mZmAgLSBEaXNhYmxlcyB0b3VjaCBnZXN0dXJlcy4gTm90ZSB0aGF0IHRoaXMgd2lsbCBwcmV2ZW50IHRoZSB0b29sdGlwIGZyb21cblx0ICogICBzaG93aW5nIG9uIHRvdWNoIGRldmljZXMuXG5cdCAqL1xuXG5cdHB1YmxpYyByZWFkb25seSB0b3VjaEdlc3R1cmVzID0gaW5wdXQ8VG9vbHRpcFRvdWNoR2VzdHVyZXM+KHRoaXMuX2RlZmF1bHRPcHRpb25zPy50b3VjaEdlc3R1cmVzID8/ICdhdXRvJyk7XG5cblx0LyoqIFRoZSBtZXNzYWdlIHRvIGJlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIGFyaWEgaW4gdGhlIHRvb2x0aXAgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgYXJpYURlc2NyaWJlZEJ5ID0gaW5wdXQoJycsIHsgYWxpYXM6ICdhcmlhLWRlc2NyaWJlZGJ5JyB9KTtcblx0cHVibGljIHJlYWRvbmx5IGNvbXB1dGVkQXJpYURlc2NyaWJlZEJ5ID0gY29tcHV0ZWQoKCkgPT4gc2lnbmFsKHRoaXMuYXJpYURlc2NyaWJlZEJ5KCkpKTtcblx0cHVibGljIHJlYWRvbmx5IGFyaWFEZXNjcmliZWRCeVByZXZpb3VzID0gY29tcHV0ZWRQcmV2aW91cyh0aGlzLmNvbXB1dGVkQXJpYURlc2NyaWJlZEJ5KTtcblxuXHQvKiogVGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwICovXG5cblx0cHVibGljIHJlYWRvbmx5IGJyblRvb2x0aXBUcmlnZ2VyID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcblx0cHVibGljIHJlYWRvbmx5IGJyblRvb2x0aXBUcmlnZ2VyU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0aWYgKHRoaXMuX3Rvb2x0aXBEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLl90b29sdGlwRGlyZWN0aXZlLnRvb2x0aXBUZW1wbGF0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5icm5Ub29sdGlwVHJpZ2dlcigpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9kaXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuX3ZpZXdwb3J0TWFyZ2luID0gTUlOX1ZJRVdQT1JUX1RPT0xUSVBfVEhSRVNIT0xEO1xuXG5cdFx0dGhpcy5faW5pdEJyblRvb2x0aXBUcmlnZ2VyRWZmZWN0KCk7XG5cdFx0dGhpcy5faW5pdEFyaWFEZXNjcmliZWRCeVByZXZpb3VzRWZmZWN0KCk7XG5cdFx0dGhpcy5faW5pdFRvb2x0aXBDb250ZW50Q2xhc3Nlc0VmZmVjdCgpO1xuXHRcdHRoaXMuX2luaXRQb3NpdGlvbkVmZmVjdCgpO1xuXHRcdHRoaXMuX2luaXRQb3NpdGlvbkF0T3JpZ2luRWZmZWN0KCk7XG5cdFx0dGhpcy5faW5pdEJyblRvb2x0aXBEaXNhYmxlZEVmZmVjdCgpO1xuXHRcdHRoaXMuX2luaXRFeGl0QW5pbWF0aW9uRHVyYXRpb25FZmZlY3QoKTtcblx0XHR0aGlzLl9pbml0SGlkZURlbGF5RWZmZWN0KCk7XG5cdH1cblx0c2V0VG9vbHRpcENvbnRlbnRDbGFzc2VzKHRvb2x0aXBDb250ZW50Q2xhc3Nlczogc3RyaW5nKSB7XG5cdFx0dGhpcy5jb21wdXRlZFRvb2x0aXBDb250ZW50Q2xhc3NlcygpLnNldCh0b29sdGlwQ29udGVudENsYXNzZXMpO1xuXHR9XG5cdHNldEFyaWFEZXNjcmliZWRCeShhcmlhRGVzY3JpYmVkQnk6IHN0cmluZykge1xuXHRcdHRoaXMuY29tcHV0ZWRBcmlhRGVzY3JpYmVkQnkoKS5zZXQoYXJpYURlc2NyaWJlZEJ5KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRQb3NpdGlvbkVmZmVjdCgpOiB2b2lkIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZik7XG5cdFx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uc2hvdygwKTtcblx0XHRcdFx0dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfaW5pdEJyblRvb2x0aXBEaXNhYmxlZEVmZmVjdCgpOiB2b2lkIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuYnJuVG9vbHRpcERpc2FibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5oaWRlKDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfaW5pdFBvc2l0aW9uQXRPcmlnaW5FZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdC8vIE5lZWRlZCB0aGF0IHRoZSBlZmZlY3QgZ290IHRyaWdnZXJlZFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRcdFx0Y29uc3QgXyA9IHRoaXMucG9zaXRpb25BdE9yaWdpbigpO1xuXHRcdFx0dGhpcy5fZGV0YWNoKCk7XG5cdFx0XHR0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRUb29sdGlwQ29udGVudENsYXNzZXNFZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcblx0XHRcdFx0dGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzc2VzLnNldCh0aGlzLmNvbXB1dGVkVG9vbHRpcENvbnRlbnRDbGFzc2VzKCkoKSA/PyAnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9pbml0QXJpYURlc2NyaWJlZEJ5UHJldmlvdXNFZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGFyaWFEZXNjcmliZWRCeSA9IHRoaXMuY29tcHV0ZWRBcmlhRGVzY3JpYmVkQnkoKSgpO1xuXHRcdFx0dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihcblx0XHRcdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy5hcmlhRGVzY3JpYmVkQnlQcmV2aW91cygpKCkpLFxuXHRcdFx0XHQndG9vbHRpcCcsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYXJpYURlc2NyaWJlZEJ5ICYmICF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpIHtcblx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBUaGUgYEFyaWFEZXNjcmliZXJgIGhhcyBzb21lIGZ1bmN0aW9uYWxpdHkgdGhhdCBhdm9pZHMgYWRkaW5nIGEgZGVzY3JpcHRpb24gaWYgaXQncyB0aGVcblx0XHRcdFx0XHQvLyBzYW1lIGFzIHRoZSBgYXJpYS1sYWJlbGAgb2YgYW4gZWxlbWVudCwgaG93ZXZlciB3ZSBjYW4ndCBrbm93IHdoZXRoZXIgdGhlIHRvb2x0aXAgdHJpZ2dlclxuXHRcdFx0XHRcdC8vIGhhcyBhIGRhdGEtYm91bmQgYGFyaWEtbGFiZWxgIG9yIHdoZW4gaXQnbGwgYmUgc2V0IGZvciB0aGUgZmlyc3QgdGltZS4gV2UgY2FuIGF2b2lkIHRoZVxuXHRcdFx0XHRcdC8vIGlzc3VlIGJ5IGRlZmVycmluZyB0aGUgZGVzY3JpcHRpb24gYnkgYSB0aWNrIHNvIEFuZ3VsYXIgaGFzIHRpbWUgdG8gc2V0IHRoZSBgYXJpYS1sYWJlbGAuXG5cdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXJpYURlc2NyaWJlZEJ5LCAndG9vbHRpcCcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRCcm5Ub29sdGlwVHJpZ2dlckVmZmVjdCgpOiB2b2lkIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSA9IHRoaXMuYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSgpO1xuXHRcdFx0Y29uc3QgaXNUb29sdGlwVmlzaWJsZSA9IHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKTtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdGlmICghYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSAmJiBpc1Rvb2x0aXBWaXNpYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oaWRlKDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVUb29sdGlwQ29udGVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRFeGl0QW5pbWF0aW9uRHVyYXRpb25FZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcblx0XHRcdFx0dGhpcy5fdG9vbHRpcEluc3RhbmNlLmV4aXRBbmltYXRpb25EdXJhdGlvbiA9IHRoaXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9pbml0SGlkZURlbGF5RWZmZWN0KCk6IHZvaWQge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fdG9vbHRpcEluc3RhbmNlKSB7XG5cdFx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tb3VzZUxlYXZlSGlkZURlbGF5ID0gdGhpcy5oaWRlRGVsYXkoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHQvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2aWV3IGluaXQgc28gdGhlIGluaXRpYWwgdmFsdWVzIGZvciBhbGwgaW5wdXRzIGhhdmUgYmVlbiBzZXQuXG5cdFx0dGhpcy5fdmlld0luaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCk7XG5cblx0XHR0aGlzLl9mb2N1c01vbml0b3Jcblx0XHRcdC5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcblx0XHRcdC5zdWJzY3JpYmUoKG9yaWdpbikgPT4ge1xuXHRcdFx0XHQvLyBOb3RlIHRoYXQgdGhlIGZvY3VzIG1vbml0b3IgcnVucyBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmUuXG5cdFx0XHRcdGlmICghb3JpZ2luKSB7XG5cdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmhpZGUoMCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9yaWdpbiA9PT0gJ2tleWJvYXJkJykge1xuXHRcdFx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5zaG93KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdGlmIChicm5EZXZNb2RlICYmICF0aGlzLmNvbXB1dGVkQXJpYURlc2NyaWJlZEJ5KCkpIHtcblx0XHRcdGNvbnNvbGUud2FybignQnJuVG9vbHRpcDogXCJhcmlhLWRlc2NyaWJlZGJ5XCIgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciBhY2Nlc3NpYmlsaXR5Jyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3Bvc2UgdGhlIHRvb2x0aXAgd2hlbiBkZXN0cm95ZWQuXG5cdCAqL1xuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHRjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KTtcblxuXHRcdGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG5cdFx0XHR0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGxpc3RlbmVycyBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yXG5cdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5mb3JFYWNoKChbZXZlbnQsIGxpc3RlbmVyXSkgPT5cblx0XHRcdG5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHBhc3NpdmVMaXN0ZW5lck9wdGlvbnMpLFxuXHRcdCk7XG5cdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGggPSAwO1xuXG5cdFx0dGhpcy5fZGVzdHJveWVkLm5leHQoKTtcblx0XHR0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcblxuXHRcdHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24obmF0aXZlRWxlbWVudCwgdGhpcy5jb21wdXRlZEFyaWFEZXNjcmliZWRCeSgpKCksICd0b29sdGlwJyk7XG5cdFx0dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKG5hdGl2ZUVsZW1lbnQpO1xuXHR9XG5cblx0LyoqIFNob3dzIHRoZSB0b29sdGlwIGFmdGVyIHRoZSBkZWxheSBpbiBtcywgZGVmYXVsdHMgdG8gdG9vbHRpcC1kZWxheS1zaG93IG9yIDBtcyBpZiBubyBpbnB1dCAqL1xuXHRzaG93KGRlbGF5OiBudW1iZXIgPSB0aGlzLnNob3dEZWxheSgpLCBvcmlnaW4/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5icm5Ub29sdGlwRGlzYWJsZWQoKSB8fCB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpIHtcblx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuX2NyZWF0ZU92ZXJsYXkob3JpZ2luKTtcblx0XHR0aGlzLl9kZXRhY2goKTtcblx0XHR0aGlzLl9wb3J0YWwgPSB0aGlzLl9wb3J0YWwgfHwgbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLl90b29sdGlwQ29tcG9uZW50LCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcblx0XHRjb25zdCBpbnN0YW5jZSA9ICh0aGlzLl90b29sdGlwSW5zdGFuY2UgPSBvdmVybGF5UmVmLmF0dGFjaCh0aGlzLl9wb3J0YWwpLmluc3RhbmNlKTtcblx0XHRpbnN0YW5jZS50cmlnZ2VyRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRpbnN0YW5jZS5tb3VzZUxlYXZlSGlkZURlbGF5ID0gdGhpcy5oaWRlRGVsYXkoKTtcblx0XHRpbnN0YW5jZS50b29sdGlwQ2xhc3Nlcy5zZXQodGhpcy5jb21wdXRlZFRvb2x0aXBDb250ZW50Q2xhc3NlcygpKCkpO1xuXHRcdGluc3RhbmNlLmV4aXRBbmltYXRpb25EdXJhdGlvbiA9IHRoaXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9uKCk7XG5cdFx0aW5zdGFuY2Uuc2lkZS5zZXQodGhpcy5fY3VycmVudFBvc2l0aW9uID8/ICdhYm92ZScpO1xuXHRcdGluc3RhbmNlLmFmdGVySGlkZGVuLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9kZXRhY2goKSk7XG5cdFx0dGhpcy5fdXBkYXRlVG9vbHRpcENvbnRlbnQoKTtcblx0XHRpbnN0YW5jZS5zaG93KGRlbGF5KTtcblx0fVxuXG5cdC8qKiBIaWRlcyB0aGUgdG9vbHRpcCBhZnRlciB0aGUgZGVsYXkgaW4gbXMsIGRlZmF1bHRzIHRvIHRvb2x0aXAtZGVsYXktaGlkZSBvciAwbXMgaWYgbm8gaW5wdXQgKi9cblx0aGlkZShkZWxheTogbnVtYmVyID0gdGhpcy5oaWRlRGVsYXkoKSwgZXhpdEFuaW1hdGlvbkR1cmF0aW9uOiBudW1iZXIgPSB0aGlzLmV4aXRBbmltYXRpb25EdXJhdGlvbigpKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5zdGFuY2UgPSB0aGlzLl90b29sdGlwSW5zdGFuY2U7XG5cdFx0aWYgKGluc3RhbmNlKSB7XG5cdFx0XHRpZiAoaW5zdGFuY2UuaXNWaXNpYmxlKCkpIHtcblx0XHRcdFx0aW5zdGFuY2UuaGlkZShkZWxheSwgZXhpdEFuaW1hdGlvbkR1cmF0aW9uKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGluc3RhbmNlLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO1xuXHRcdFx0XHR0aGlzLl9kZXRhY2goKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b2dnbGUob3JpZ2luPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogdm9pZCB7XG5cdFx0dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3codW5kZWZpbmVkLCBvcmlnaW4pO1xuXHR9XG5cblx0X2lzVG9vbHRpcFZpc2libGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5fdG9vbHRpcEluc3RhbmNlICYmIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKTtcblx0fVxuXG5cdHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkob3JpZ2luPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogT3ZlcmxheVJlZiB7XG5cdFx0aWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcblx0XHRcdGNvbnN0IGV4aXN0aW5nU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xuXG5cdFx0XHRpZiAoKCF0aGlzLnBvc2l0aW9uQXRPcmlnaW4oKSB8fCAhb3JpZ2luKSAmJiBleGlzdGluZ1N0cmF0ZWd5Ll9vcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9kZXRhY2goKTtcblx0XHR9XG5cblx0XHRjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3JzID0gdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5fZWxlbWVudFJlZik7XG5cblx0XHQvLyBDcmVhdGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgbGlzdGVucyBmb3Igc2Nyb2xsIGV2ZW50cyB0byByZXBvc2l0aW9uLlxuXHRcdGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVxuXHRcdFx0LnBvc2l0aW9uKClcblx0XHRcdC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMucG9zaXRpb25BdE9yaWdpbigpID8gb3JpZ2luIHx8IHRoaXMuX2VsZW1lbnRSZWYgOiB0aGlzLl9lbGVtZW50UmVmKVxuXHRcdFx0LndpdGhUcmFuc2Zvcm1PcmlnaW5PbihgLiR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXBgKVxuXHRcdFx0LndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG5cdFx0XHQud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKVxuXHRcdFx0LndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyhzY3JvbGxhYmxlQW5jZXN0b3JzKTtcblxuXHRcdHN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuXHRcdFx0dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3MoY2hhbmdlLmNvbm5lY3Rpb25QYWlyKTtcblxuXHRcdFx0aWYgKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSkge1xuXHRcdFx0XHRpZiAoY2hhbmdlLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkICYmIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKSkge1xuXHRcdFx0XHRcdC8vIEFmdGVyIHBvc2l0aW9uIGNoYW5nZXMgb2NjdXIgYW5kIHRoZSBvdmVybGF5IGlzIGNsaXBwZWQgYnlcblx0XHRcdFx0XHQvLyBhIHBhcmVudCBzY3JvbGxhYmxlIHRoZW4gY2xvc2UgdGhlIHRvb2x0aXAuXG5cdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmhpZGUoMCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xuXHRcdFx0ZGlyZWN0aW9uOiB0aGlzLl9kaXIsXG5cdFx0XHRwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcblx0XHRcdHBhbmVsQ2xhc3M6IGAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke1BBTkVMX0NMQVNTfWAsXG5cdFx0XHRzY3JvbGxTdHJhdGVneTogdGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxcblx0XHR9KTtcblxuXHRcdHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpO1xuXG5cdFx0dGhpcy5fb3ZlcmxheVJlZlxuXHRcdFx0LmRldGFjaG1lbnRzKClcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9kZXRhY2goKSk7XG5cblx0XHR0aGlzLl9vdmVybGF5UmVmXG5cdFx0XHQub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuXHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKTtcblxuXHRcdHRoaXMuX292ZXJsYXlSZWZcblx0XHRcdC5rZXlkb3duRXZlbnRzKClcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5oaWRlKDApKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRpZiAodGhpcy5fZGVmYXVsdE9wdGlvbnM/LmRpc2FibGVUb29sdGlwSW50ZXJhY3Rpdml0eSkge1xuXHRcdFx0dGhpcy5fb3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKGAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZWApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuXHR9XG5cblx0cHJpdmF0ZSBfZGV0YWNoKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSB7XG5cdFx0XHR0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSA9IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIF91cGRhdGVQb3NpdGlvbihvdmVybGF5UmVmOiBPdmVybGF5UmVmKSB7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBvdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xuXHRcdGNvbnN0IG9yaWdpbiA9IHRoaXMuX2dldE9yaWdpbigpO1xuXHRcdGNvbnN0IG92ZXJsYXkgPSB0aGlzLl9nZXRPdmVybGF5UG9zaXRpb24oKTtcblxuXHRcdHBvc2l0aW9uLndpdGhQb3NpdGlvbnMoW1xuXHRcdFx0dGhpcy5fYWRkT2Zmc2V0KHsgLi4ub3JpZ2luLm1haW4sIC4uLm92ZXJsYXkubWFpbiB9KSxcblx0XHRcdHRoaXMuX2FkZE9mZnNldCh7IC4uLm9yaWdpbi5mYWxsYmFjaywgLi4ub3ZlcmxheS5mYWxsYmFjayB9KSxcblx0XHRdKTtcblx0fVxuXG5cdC8qKiBBZGRzIHRoZSBjb25maWd1cmVkIG9mZnNldCB0byBhIHBvc2l0aW9uLiBVc2VkIGFzIGEgaG9vayBmb3IgY2hpbGQgY2xhc3Nlcy4gKi9cblx0cHJvdGVjdGVkIF9hZGRPZmZzZXQocG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uKTogQ29ubmVjdGVkUG9zaXRpb24ge1xuXHRcdGNvbnN0IG9mZnNldCA9IFVOQk9VTkRFRF9BTkNIT1JfR0FQO1xuXHRcdGNvbnN0IGlzTHRyID0gIXRoaXMuX2RpciB8fCB0aGlzLl9kaXIudmFsdWUgPT09ICdsdHInO1xuXG5cdFx0aWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICd0b3AnKSB7XG5cdFx0XHRwb3NpdGlvbi5vZmZzZXRZID0gLW9mZnNldDtcblx0XHR9IGVsc2UgaWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICdib3R0b20nKSB7XG5cdFx0XHRwb3NpdGlvbi5vZmZzZXRZID0gb2Zmc2V0O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24ub3JpZ2luWCA9PT0gJ3N0YXJ0Jykge1xuXHRcdFx0cG9zaXRpb24ub2Zmc2V0WCA9IGlzTHRyID8gLW9mZnNldCA6IG9mZnNldDtcblx0XHR9IGVsc2UgaWYgKHBvc2l0aW9uLm9yaWdpblggPT09ICdlbmQnKSB7XG5cdFx0XHRwb3NpdGlvbi5vZmZzZXRYID0gaXNMdHIgPyBvZmZzZXQgOiAtb2Zmc2V0O1xuXHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBvcmlnaW4gcG9zaXRpb24gYW5kIGEgZmFsbGJhY2sgcG9zaXRpb24gYmFzZWQgb24gdGhlIHVzZXIncyBwb3NpdGlvbiBwcmVmZXJlbmNlLlxuXHQgKiBUaGUgZmFsbGJhY2sgcG9zaXRpb24gaXMgdGhlIGludmVyc2Ugb2YgdGhlIG9yaWdpbiAoZS5nLiBgJ2JlbG93JyAtPiAnYWJvdmUnYCkuXG5cdCAqL1xuXHRfZ2V0T3JpZ2luKCk6IHsgbWFpbjogT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uOyBmYWxsYmFjazogT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uIH0ge1xuXHRcdGNvbnN0IGlzTHRyID0gIXRoaXMuX2RpciB8fCB0aGlzLl9kaXIudmFsdWUgPT09ICdsdHInO1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbigpO1xuXHRcdGxldCBvcmlnaW5Qb3NpdGlvbjogT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uID09PSAnYWJvdmUnIHx8IHBvc2l0aW9uID09PSAnYmVsb3cnKSB7XG5cdFx0XHRvcmlnaW5Qb3NpdGlvbiA9IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6IHBvc2l0aW9uID09PSAnYWJvdmUnID8gJ3RvcCcgOiAnYm90dG9tJyB9O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnIHx8IChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmIGlzTHRyKSB8fCAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgIWlzTHRyKSkge1xuXHRcdFx0b3JpZ2luUG9zaXRpb24gPSB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdjZW50ZXInIH07XG5cdFx0fSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2FmdGVyJyB8fCAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgaXNMdHIpIHx8IChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmICFpc0x0cikpIHtcblx0XHRcdG9yaWdpblBvc2l0aW9uID0geyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBpc0Rldk1vZGUoKSA9PT0gJ3VuZGVmaW5lZCcgfHwgaXNEZXZNb2RlKCkpIHtcblx0XHRcdHRocm93IGdldEJyblRvb2x0aXBJbnZhbGlkUG9zaXRpb25FcnJvcihwb3NpdGlvbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl9pbnZlcnRQb3NpdGlvbihvcmlnaW5Qb3NpdGlvbiEub3JpZ2luWCwgb3JpZ2luUG9zaXRpb24hLm9yaWdpblkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IG9yaWdpblBvc2l0aW9uISxcblx0XHRcdGZhbGxiYWNrOiB7IG9yaWdpblg6IHgsIG9yaWdpblk6IHkgfSxcblx0XHR9O1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIG92ZXJsYXkgcG9zaXRpb24gYW5kIGEgZmFsbGJhY2sgcG9zaXRpb24gYmFzZWQgb24gdGhlIHVzZXIncyBwcmVmZXJlbmNlICovXG5cdF9nZXRPdmVybGF5UG9zaXRpb24oKTogeyBtYWluOiBPdmVybGF5Q29ubmVjdGlvblBvc2l0aW9uOyBmYWxsYmFjazogT3ZlcmxheUNvbm5lY3Rpb25Qb3NpdGlvbiB9IHtcblx0XHRjb25zdCBpc0x0ciA9ICF0aGlzLl9kaXIgfHwgdGhpcy5fZGlyLnZhbHVlID09PSAnbHRyJztcblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24oKTtcblx0XHRsZXQgb3ZlcmxheVBvc2l0aW9uOiBPdmVybGF5Q29ubmVjdGlvblBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uID09PSAnYWJvdmUnKSB7XG5cdFx0XHRvdmVybGF5UG9zaXRpb24gPSB7IG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICdib3R0b20nIH07XG5cdFx0fSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2JlbG93Jykge1xuXHRcdFx0b3ZlcmxheVBvc2l0aW9uID0geyBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAndG9wJyB9O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnIHx8IChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmIGlzTHRyKSB8fCAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgIWlzTHRyKSkge1xuXHRcdFx0b3ZlcmxheVBvc2l0aW9uID0geyBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnY2VudGVyJyB9O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdhZnRlcicgfHwgKHBvc2l0aW9uID09PSAncmlnaHQnICYmIGlzTHRyKSB8fCAocG9zaXRpb24gPT09ICdsZWZ0JyAmJiAhaXNMdHIpKSB7XG5cdFx0XHRvdmVybGF5UG9zaXRpb24gPSB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBpc0Rldk1vZGUoKSA9PT0gJ3VuZGVmaW5lZCcgfHwgaXNEZXZNb2RlKCkpIHtcblx0XHRcdHRocm93IGdldEJyblRvb2x0aXBJbnZhbGlkUG9zaXRpb25FcnJvcihwb3NpdGlvbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl9pbnZlcnRQb3NpdGlvbihvdmVybGF5UG9zaXRpb24hLm92ZXJsYXlYLCBvdmVybGF5UG9zaXRpb24hLm92ZXJsYXlZKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYWluOiBvdmVybGF5UG9zaXRpb24hLFxuXHRcdFx0ZmFsbGJhY2s6IHsgb3ZlcmxheVg6IHgsIG92ZXJsYXlZOiB5IH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKiBVcGRhdGVzIHRoZSB0b29sdGlwIG1lc3NhZ2UgYW5kIHJlcG9zaXRpb25zIHRoZSBvdmVybGF5IGFjY29yZGluZyB0byB0aGUgbmV3IG1lc3NhZ2UgbGVuZ3RoICovXG5cdHByaXZhdGUgX3VwZGF0ZVRvb2x0aXBDb250ZW50KCk6IHZvaWQge1xuXHRcdC8vIE11c3Qgd2FpdCBmb3IgdGhlIHRlbXBsYXRlIHRvIGJlIHBhaW50ZWQgdG8gdGhlIHRvb2x0aXAgc28gdGhhdCB0aGUgb3ZlcmxheSBjYW4gcHJvcGVybHlcblx0XHQvLyBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHRlay1wYXRlLlxuXHRcdGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5jb250ZW50ID0gdGhpcy5icm5Ub29sdGlwVHJpZ2dlclN0YXRlKCk7XG5cdFx0XHR0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpO1xuXG5cdFx0XHR0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fdG9vbHRpcEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEludmVydHMgYW4gb3ZlcmxheSBwb3NpdGlvbi4gKi9cblx0cHJpdmF0ZSBfaW52ZXJ0UG9zaXRpb24oeDogSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3MsIHk6IFZlcnRpY2FsQ29ubmVjdGlvblBvcykge1xuXHRcdGlmICh0aGlzLnBvc2l0aW9uKCkgPT09ICdhYm92ZScgfHwgdGhpcy5wb3NpdGlvbigpID09PSAnYmVsb3cnKSB7XG5cdFx0XHRpZiAoeSA9PT0gJ3RvcCcpIHtcblx0XHRcdFx0eSA9ICdib3R0b20nO1xuXHRcdFx0fSBlbHNlIGlmICh5ID09PSAnYm90dG9tJykge1xuXHRcdFx0XHR5ID0gJ3RvcCc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh4ID09PSAnZW5kJykge1xuXHRcdFx0XHR4ID0gJ3N0YXJ0Jztcblx0XHRcdH0gZWxzZSBpZiAoeCA9PT0gJ3N0YXJ0Jykge1xuXHRcdFx0XHR4ID0gJ2VuZCc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgeCwgeSB9O1xuXHR9XG5cblx0LyoqIFVwZGF0ZXMgdGhlIGNsYXNzIG9uIHRoZSBvdmVybGF5IHBhbmVsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLiAqL1xuXHRwcml2YXRlIF91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhjb25uZWN0aW9uUGFpcjogQ29ubmVjdGlvblBvc2l0aW9uUGFpcik6IHZvaWQge1xuXHRcdGNvbnN0IHsgb3ZlcmxheVksIG9yaWdpblgsIG9yaWdpblkgfSA9IGNvbm5lY3Rpb25QYWlyO1xuXHRcdGxldCBuZXdQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uO1xuXG5cdFx0Ly8gSWYgdGhlIG92ZXJsYXkgaXMgaW4gdGhlIG1pZGRsZSBhbG9uZyB0aGUgWSBheGlzLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgaXQncyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyLlxuXHRcdGlmIChvdmVybGF5WSA9PT0gJ2NlbnRlcicpIHtcblx0XHRcdC8vIE5vdGUgdGhhdCBzaW5jZSB0aGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yIHN0eWxpbmcsIHdlIHdhbnQgdG9cblx0XHRcdC8vIHJlc29sdmUgYHN0YXJ0YCBhbmQgYGVuZGAgdG8gdGhlaXIgcmVhbCB2YWx1ZXMsIG90aGVyd2lzZSBjb25zdW1lcnNcblx0XHRcdC8vIHdvdWxkIGhhdmUgdG8gcmVtZW1iZXIgdG8gZG8gaXQgdGhlbXNlbHZlcyBvbiBlYWNoIGNvbnN1bXB0aW9uLlxuXHRcdFx0aWYgKHRoaXMuX2RpciAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnKSB7XG5cdFx0XHRcdG5ld1Bvc2l0aW9uID0gb3JpZ2luWCA9PT0gJ2VuZCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3UG9zaXRpb24gPSBvcmlnaW5YID09PSAnc3RhcnQnID8gJ2xlZnQnIDogJ3JpZ2h0Jztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3UG9zaXRpb24gPSBvdmVybGF5WSA9PT0gJ2JvdHRvbScgJiYgb3JpZ2luWSA9PT0gJ3RvcCcgPyAnYWJvdmUnIDogJ2JlbG93Jztcblx0XHR9XG5cblx0XHRpZiAobmV3UG9zaXRpb24gIT09IHRoaXMuX2N1cnJlbnRQb3NpdGlvbikge1xuXHRcdFx0dGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaWRlLnNldChuZXdQb3NpdGlvbik7XG5cdFx0XHR0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBuZXdQb3NpdGlvbjtcblx0XHR9XG5cdH1cblxuXHQvKiogQmluZHMgdGhlIHBvaW50ZXIgZXZlbnRzIHRvIHRoZSB0b29sdGlwIHRyaWdnZXIuICovXG5cdHByaXZhdGUgX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKTogdm9pZCB7XG5cdFx0Ly8gT3B0aW1pemF0aW9uOiBEZWZlciBob29raW5nIHVwIGV2ZW50cyBpZiB0aGVyZSdzIG5vIGNvbnRlbnQgb3IgdGhlIHRvb2x0aXAgaXMgZGlzYWJsZWQuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5icm5Ub29sdGlwRGlzYWJsZWQoKSB8fFxuXHRcdFx0IXRoaXMuYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSgpIHx8XG5cdFx0XHQhdGhpcy5fdmlld0luaXRpYWxpemVkIHx8XG5cdFx0XHR0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBtb3VzZSBldmVudHMgc2hvdWxkbid0IGJlIGJvdW5kIG9uIG1vYmlsZSBkZXZpY2VzLCBiZWNhdXNlIHRoZXkgY2FuIHByZXZlbnQgdGhlXG5cdFx0Ly8gZmlyc3QgdGFwIGZyb20gZmlyaW5nIGl0cyBjbGljayBldmVudCBvciBjYW4gY2F1c2UgdGhlIHRvb2x0aXAgdG8gb3BlbiBmb3IgY2xpY2tzLlxuXHRcdGlmICh0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKSkge1xuXHRcdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFtcblx0XHRcdFx0J21vdXNlZW50ZXInLFxuXHRcdFx0XHQoZXZlbnQpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKTtcblx0XHRcdFx0XHRsZXQgcG9pbnQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKChldmVudCBhcyBNb3VzZUV2ZW50KS54ICE9PSB1bmRlZmluZWQgJiYgKGV2ZW50IGFzIE1vdXNlRXZlbnQpLnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cG9pbnQgPSBldmVudCBhcyBNb3VzZUV2ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnNob3codW5kZWZpbmVkLCBwb2ludCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRdKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMudG91Y2hHZXN0dXJlcygpICE9PSAnb2ZmJykge1xuXHRcdFx0dGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtcblxuXHRcdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFtcblx0XHRcdFx0J3RvdWNoc3RhcnQnLFxuXHRcdFx0XHQoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0b3VjaCA9IChldmVudCBhcyBUb3VjaEV2ZW50KS50YXJnZXRUb3VjaGVzPy5bMF07XG5cdFx0XHRcdFx0Y29uc3Qgb3JpZ2luID0gdG91Y2ggPyB7IHg6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFkgfSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHQvLyBOb3RlIHRoYXQgaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBkb24ndCBgcHJldmVudERlZmF1bHRgIGhlcmUsXG5cdFx0XHRcdFx0Ly8gYmVjYXVzZSBpdCBjYW4gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBmaXJpbmcgb24gdGhlIGVsZW1lbnQuXG5cdFx0XHRcdFx0dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCk7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KTtcblx0XHRcdFx0XHR0aGlzLl90b3VjaHN0YXJ0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93KHVuZGVmaW5lZCwgb3JpZ2luKSwgTE9OR1BSRVNTX0RFTEFZKTtcblx0XHRcdFx0fSxcblx0XHRcdF0pO1xuXHRcdH1cblxuXHRcdHRoaXMuX2FkZExpc3RlbmVycyh0aGlzLl9wYXNzaXZlTGlzdGVuZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGV4aXRMaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSA9IFtdO1xuXHRcdGlmICh0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKSkge1xuXHRcdFx0ZXhpdExpc3RlbmVycy5wdXNoKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0J21vdXNlbGVhdmUnLFxuXHRcdFx0XHRcdChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3VGFyZ2V0ID0gKGV2ZW50IGFzIE1vdXNlRXZlbnQpLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSB8IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIW5ld1RhcmdldCB8fCAhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMobmV3VGFyZ2V0KSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbJ3doZWVsJywgKGV2ZW50KSA9PiB0aGlzLl93aGVlbExpc3RlbmVyKGV2ZW50IGFzIFdoZWVsRXZlbnQpXSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnRvdWNoR2VzdHVyZXMoKSAhPT0gJ29mZicpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCk7XG5cdFx0XHRjb25zdCB0b3VjaGVuZExpc3RlbmVyID0gKCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpO1xuXHRcdFx0XHR0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnM/LnRvdWNoZW5kSGlkZURlbGF5KTtcblx0XHRcdH07XG5cblx0XHRcdGV4aXRMaXN0ZW5lcnMucHVzaChbJ3RvdWNoZW5kJywgdG91Y2hlbmRMaXN0ZW5lcl0sIFsndG91Y2hjYW5jZWwnLCB0b3VjaGVuZExpc3RlbmVyXSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYWRkTGlzdGVuZXJzKGV4aXRMaXN0ZW5lcnMpO1xuXHRcdHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaCguLi5leGl0TGlzdGVuZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX2FkZExpc3RlbmVycyhsaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSkge1xuXHRcdGxpc3RlbmVycy5mb3JFYWNoKChbZXZlbnQsIGxpc3RlbmVyXSkgPT4ge1xuXHRcdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuX3BsYXRmb3JtLklPUyAmJiAhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRDtcblx0fVxuXG5cdC8qKiBMaXN0ZW5lciBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgb24gdGhlIGVsZW1lbnQuICovXG5cdHByaXZhdGUgX3doZWVsTGlzdGVuZXIoZXZlbnQ6IFdoZWVsRXZlbnQpIHtcblx0XHRpZiAodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKSB7XG5cdFx0XHRjb25zdCBlbGVtZW50VW5kZXJQb2ludGVyID0gdGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdC8vIE9uIG5vbi10b3VjaCBkZXZpY2VzIHdlIGRlcGVuZCBvbiB0aGUgYG1vdXNlbGVhdmVgIGV2ZW50IHRvIGNsb3NlIHRoZSB0b29sdGlwLCBidXQgaXRcblx0XHRcdC8vIHdvbid0IGZpcmUgaWYgdGhlIHVzZXIgc2Nyb2xscyBhd2F5IHVzaW5nIHRoZSB3aGVlbCB3aXRob3V0IG1vdmluZyB0aGVpciBjdXJzb3IuIFdlXG5cdFx0XHQvLyB3b3JrIGFyb3VuZCBpdCBieSBmaW5kaW5nIHRoZSBlbGVtZW50IHVuZGVyIHRoZSB1c2VyJ3MgY3Vyc29yIGFuZCBjbG9zaW5nIHRoZSB0b29sdGlwXG5cdFx0XHQvLyBpZiBpdCdzIG5vdCB0aGUgdHJpZ2dlci5cblx0XHRcdGlmIChlbGVtZW50VW5kZXJQb2ludGVyICE9PSBlbGVtZW50ICYmICFlbGVtZW50LmNvbnRhaW5zKGVsZW1lbnRVbmRlclBvaW50ZXIpKSB7XG5cdFx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBEaXNhYmxlcyB0aGUgbmF0aXZlIGJyb3dzZXIgZ2VzdHVyZXMsIGJhc2VkIG9uIGhvdyB0aGUgdG9vbHRpcCBoYXMgYmVlbiBjb25maWd1cmVkLiAqL1xuXHRwcml2YXRlIF9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcblx0XHRjb25zdCBnZXN0dXJlcyA9IHRoaXMudG91Y2hHZXN0dXJlcygpO1xuXG5cdFx0aWYgKGdlc3R1cmVzICE9PSAnb2ZmJykge1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IHN0eWxlID0gZWxlbWVudC5zdHlsZTtcblxuXHRcdFx0Ly8gSWYgZ2VzdHVyZXMgYXJlIHNldCB0byBgYXV0b2AsIHdlIGRvbid0IGRpc2FibGUgdGV4dCBzZWxlY3Rpb24gb24gaW5wdXRzIGFuZFxuXHRcdFx0Ly8gdGV4dGFyZWFzLCBiZWNhdXNlIGl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gdHlwaW5nIGludG8gdGhlbSBvbiBpT1MgU2FmYXJpLlxuXHRcdFx0aWYgKGdlc3R1cmVzID09PSAnb24nIHx8IChlbGVtZW50Lm5vZGVOYW1lICE9PSAnSU5QVVQnICYmIGVsZW1lbnQubm9kZU5hbWUgIT09ICdURVhUQVJFQScpKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRcdHN0eWxlLnVzZXJTZWxlY3QgPSAoc3R5bGUgYXMgYW55KS5tc1VzZXJTZWxlY3QgPSBzdHlsZS53ZWJraXRVc2VyU2VsZWN0ID0gKHN0eWxlIGFzIGFueSkuTW96VXNlclNlbGVjdCA9ICdub25lJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBgYXV0b2AgZ2VzdHVyZXMgYW5kIHRoZSBlbGVtZW50IHVzZXMgbmF0aXZlIEhUTUwgZHJhZ2dpbmcsXG5cdFx0XHQvLyB3ZSBkb24ndCBzZXQgYC13ZWJraXQtdXNlci1kcmFnYCBiZWNhdXNlIGl0IHByZXZlbnRzIHRoZSBuYXRpdmUgYmVoYXZpb3IuXG5cdFx0XHRpZiAoZ2VzdHVyZXMgPT09ICdvbicgfHwgIWVsZW1lbnQuZHJhZ2dhYmxlKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRcdChzdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJEcmFnID0gJ25vbmUnO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJztcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHQoc3R5bGUgYXMgYW55KS53ZWJraXRUYXBIaWdobGlnaHRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG5cdFx0fVxuXHR9XG59XG4iXX0=","import { BrnTooltip } from './lib/brn-tooltip';\nimport { BrnTooltipContent } from './lib/brn-tooltip-content';\nimport { BrnTooltipContentTemplate } from './lib/brn-tooltip-content-template';\nimport { BrnTooltipTrigger } from './lib/brn-tooltip-trigger';\nexport * from './lib/brn-tooltip';\nexport * from './lib/brn-tooltip-content';\nexport * from './lib/brn-tooltip-content-template';\nexport * from './lib/brn-tooltip-trigger';\nexport * from './lib/brn-tooltip.token';\nexport const BrnTooltipImports = [BrnTooltip, BrnTooltipContentTemplate, BrnTooltipTrigger, BrnTooltipContent];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3Rvb2x0aXAvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUFVLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyblRvb2x0aXAgfSBmcm9tICcuL2xpYi9icm4tdG9vbHRpcCc7XG5pbXBvcnQgeyBCcm5Ub29sdGlwQ29udGVudCB9IGZyb20gJy4vbGliL2Jybi10b29sdGlwLWNvbnRlbnQnO1xuaW1wb3J0IHsgQnJuVG9vbHRpcENvbnRlbnRUZW1wbGF0ZSB9IGZyb20gJy4vbGliL2Jybi10b29sdGlwLWNvbnRlbnQtdGVtcGxhdGUnO1xuaW1wb3J0IHsgQnJuVG9vbHRpcFRyaWdnZXIgfSBmcm9tICcuL2xpYi9icm4tdG9vbHRpcC10cmlnZ2VyJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRvb2x0aXAnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRvb2x0aXAtY29udGVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdG9vbHRpcC1jb250ZW50LXRlbXBsYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jybi10b29sdGlwLXRyaWdnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRvb2x0aXAudG9rZW4nO1xuXG5leHBvcnQgY29uc3QgQnJuVG9vbHRpcEltcG9ydHMgPSBbQnJuVG9vbHRpcCwgQnJuVG9vbHRpcENvbnRlbnRUZW1wbGF0ZSwgQnJuVG9vbHRpcFRyaWdnZXIsIEJyblRvb2x0aXBDb250ZW50XSBhcyBjb25zdDtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi10b29sdGlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi90b29sdGlwL3NyYy9zcGFydGFuLW5nLWJyYWluLXRvb2x0aXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-tooltip.mjs","sources":["../tmp-esm2022/tooltip/lib/brn-tooltip.js","../tmp-esm2022/tooltip/lib/brn-tooltip-content.js","../tmp-esm2022/tooltip/lib/brn-tooltip-content-template.js","../tmp-esm2022/tooltip/lib/brn-tooltip.token.js","../tmp-esm2022/tooltip/lib/brn-tooltip-trigger.js","../tmp-esm2022/tooltip/index.js","../tmp-esm2022/tooltip/spartan-ng-brain-tooltip.js"],"sourcesContent":["import { Directive, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BrnTooltip {\n tooltipTemplate = signal(null);\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.7\", type: BrnTooltip, isStandalone: true, selector: \"[brnTooltip]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltip, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTooltip]',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3Rvb2x0aXAvc3JjL2xpYi9icm4tdG9vbHRpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS3BFLE1BQU0sT0FBTyxVQUFVO0lBQ04sZUFBZSxHQUFHLE1BQU0sQ0FBOEIsSUFBSSxDQUFDLENBQUM7MEhBRGhFLFVBQVU7OEdBQVYsVUFBVTs7MkZBQVYsVUFBVTtrQkFIdEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsY0FBYztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIHR5cGUgVGVtcGxhdGVSZWYsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVG9vbHRpcF0nLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwIHtcblx0cHVibGljIHJlYWRvbmx5IHRvb2x0aXBUZW1wbGF0ZSA9IHNpZ25hbDxUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw+KG51bGwpO1xufVxuIl19","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tooltip/tooltip.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, PLATFORM_ID, Renderer2, signal, viewChild, } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\nexport class BrnTooltipContent {\n _cdr = inject(ChangeDetectorRef);\n _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n _renderer2 = inject(Renderer2);\n _contentHovered = signal(false);\n tooltipClasses = signal('');\n side = signal('above');\n /** Message to display in the tooltip */\n content = null;\n /** The timeout ID of any current timer set to show the tooltip */\n _showTimeoutId;\n /** The timeout ID of any current timer set to hide the tooltip */\n _hideTimeoutId;\n /** The timeout ID of any current timer set to animate the tooltip */\n _animateTimeoutId;\n /** Element that caused the tooltip to open. */\n triggerElement;\n /** Amount of milliseconds to delay the closing sequence. */\n mouseLeaveHideDelay = 0;\n /** Amount of milliseconds of closing animation. */\n exitAnimationDuration = 0;\n /** Reference to the internal tooltip element. */\n tooltip = viewChild('tooltip', { read: (ElementRef) });\n /** Whether interactions on the page should close the tooltip */\n _closeOnInteraction = false;\n /** Whether the tooltip is currently visible. */\n _isVisible = false;\n /** Subject for notifying that the tooltip has been hidden from the view */\n _onHide = new Subject();\n afterHidden = this._onHide.asObservable();\n /**\n * Shows the tooltip with originating from the provided origin\n * @param delay Amount of milliseconds to the delay showing the tooltip.\n */\n show(delay) {\n // Cancel the delayed hide if it is scheduled\n if (this._hideTimeoutId !== null) {\n clearTimeout(this._hideTimeoutId);\n }\n if (this._animateTimeoutId !== null) {\n clearTimeout(this._animateTimeoutId);\n }\n this._showTimeoutId = setTimeout(() => {\n this._toggleDataAttributes(true, this.side());\n this._toggleVisibility(true);\n this._showTimeoutId = undefined;\n }, delay);\n }\n /**\n * Begins to hide the tooltip after the provided delay in ms.\n * @param delay Amount of milliseconds to delay hiding the tooltip.\n * @param exitAnimationDuration Time before hiding to finish animation\n * */\n hide(delay, exitAnimationDuration) {\n // Cancel the delayed show if it is scheduled\n if (this._showTimeoutId !== null) {\n clearTimeout(this._showTimeoutId);\n }\n // start out animation at delay minus animation delay or immediately if possible\n this._animateTimeoutId = setTimeout(() => {\n this._animateTimeoutId = undefined;\n if (this._contentHovered())\n return;\n this._toggleDataAttributes(false, this.side());\n }, Math.max(delay, 0));\n this._hideTimeoutId = setTimeout(() => {\n this._hideTimeoutId = undefined;\n if (this._contentHovered())\n return;\n this._toggleVisibility(false);\n }, delay + exitAnimationDuration);\n }\n /** Whether the tooltip is being displayed. */\n isVisible() {\n return this._isVisible;\n }\n ngOnDestroy() {\n this._cancelPendingAnimations();\n this._onHide.complete();\n this.triggerElement = undefined;\n }\n _isTypeOfString(content) {\n return typeof content === 'string';\n }\n /**\n * Interactions on the HTML body should close the tooltip immediately as defined in the\n * material design spec.\n * https://material.io/design/components/tooltips.html#behavior\n */\n _handleBodyInteraction() {\n if (this._closeOnInteraction) {\n this.hide(0, 0);\n }\n }\n /**\n * Marks that the tooltip needs to be checked in the next change detection run.\n * Mainly used for rendering the initial text before positioning a tooltip, which\n * can be problematic in components with OnPush change detection.\n */\n _markForCheck() {\n this._cdr.markForCheck();\n }\n _handleMouseLeave({ relatedTarget }) {\n if (!relatedTarget || !this.triggerElement?.contains(relatedTarget)) {\n if (this.isVisible()) {\n this.hide(this.mouseLeaveHideDelay, this.exitAnimationDuration);\n }\n else {\n this._finalize(false);\n }\n }\n this._contentHovered.set(false);\n }\n /** Cancels any pending animation sequences. */\n _cancelPendingAnimations() {\n if (this._showTimeoutId !== null) {\n clearTimeout(this._showTimeoutId);\n }\n if (this._hideTimeoutId !== null) {\n clearTimeout(this._hideTimeoutId);\n }\n this._showTimeoutId = this._hideTimeoutId = undefined;\n }\n _finalize(toVisible) {\n if (toVisible) {\n this._closeOnInteraction = true;\n }\n else if (!this.isVisible()) {\n this._onHide.next();\n }\n }\n /** Toggles the visibility of the tooltip element. */\n _toggleVisibility(isVisible) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this.tooltip()?.nativeElement;\n if (!tooltip || !this._isBrowser)\n return;\n this._renderer2.setStyle(tooltip, 'visibility', isVisible ? 'visible' : 'hidden');\n if (isVisible) {\n this._renderer2.removeStyle(tooltip, 'display');\n }\n else {\n this._renderer2.setStyle(tooltip, 'display', 'none');\n }\n this._isVisible = isVisible;\n }\n _toggleDataAttributes(isVisible, side) {\n // We set the classes directly here ourselves so that toggling the tooltip state\n // isn't bound by change detection. This allows us to hide it even if the\n // view ref has been detached from the CD tree.\n const tooltip = this.tooltip()?.nativeElement;\n if (!tooltip || !this._isBrowser)\n return;\n this._renderer2.setAttribute(tooltip, 'data-side', side);\n this._renderer2.setAttribute(tooltip, 'data-state', isVisible ? 'open' : 'closed');\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.7\", type: BrnTooltipContent, isStandalone: true, selector: \"brn-tooltip-content\", host: { attributes: { \"aria-hidden\": \"true\" }, listeners: { \"mouseleave\": \"_handleMouseLeave($event)\" }, properties: { \"style.zoom\": \"isVisible() ? 1 : null\" } }, viewQueries: [{ propertyName: \"tooltip\", first: true, predicate: [\"tooltip\"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `\n\t\t<div\n\t\t\t(mouseenter)=\"_contentHovered.set(true)\"\n\t\t\t(mouseleave)=\"_contentHovered.set(false)\"\n\t\t\t[class]=\"tooltipClasses()\"\n\t\t\t[style.visibility]=\"'hidden'\"\n\t\t\t#tooltip\n\t\t>\n\t\t\t@if (_isTypeOfString(content)) {\n\t\t\t\t{{ content }}\n\t\t\t} @else {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t}\n\t\t</div>\n\t`, isInline: true, dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContent, decorators: [{\n type: Component,\n args: [{\n selector: 'brn-tooltip-content',\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // Forces the element to have a layout in IE and Edge. This fixes issues where the element\n // won't be rendered if the animations are disabled or there is no web animations polyfill.\n '[style.zoom]': 'isVisible() ? 1 : null',\n '(mouseleave)': '_handleMouseLeave($event)',\n 'aria-hidden': 'true',\n },\n template: `\n\t\t<div\n\t\t\t(mouseenter)=\"_contentHovered.set(true)\"\n\t\t\t(mouseleave)=\"_contentHovered.set(false)\"\n\t\t\t[class]=\"tooltipClasses()\"\n\t\t\t[style.visibility]=\"'hidden'\"\n\t\t\t#tooltip\n\t\t>\n\t\t\t@if (_isTypeOfString(content)) {\n\t\t\t\t{{ content }}\n\t\t\t} @else {\n\t\t\t\t<ng-container [ngTemplateOutlet]=\"content\" />\n\t\t\t}\n\t\t</div>\n\t`,\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdG9vbHRpcC9zcmMvbGliL2Jybi10b29sdGlwLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUUvQjs7O0dBR0c7QUE0QkgsTUFBTSxPQUFPLGlCQUFpQjtJQUNaLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNqQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDcEQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3QixlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DLGNBQWMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2Qyx3Q0FBd0M7SUFDakMsT0FBTyxHQUF5QyxJQUFJLENBQUM7SUFFNUQsa0VBQWtFO0lBQzFELGNBQWMsQ0FBNEM7SUFDbEUsa0VBQWtFO0lBQzFELGNBQWMsQ0FBNEM7SUFDbEUscUVBQXFFO0lBQzdELGlCQUFpQixDQUE0QztJQUVyRSwrQ0FBK0M7SUFDeEMsY0FBYyxDQUFlO0lBRXBDLDREQUE0RDtJQUNyRCxtQkFBbUIsR0FBRyxDQUFD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WUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7MEhBaExXLGlCQUFpQjs4R0FBakIsaUJBQWlCLGlVQTRCMEIsVUFBVSw2Q0E1Q3ZEOzs7Ozs7Ozs7Ozs7OztFQWNULDREQXZCUyxnQkFBZ0I7OzJGQXlCZCxpQkFBaUI7a0JBM0I3QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsSUFBSSxFQUFFO3dCQUNMLDBGQUEwRjt3QkFDMUYsMkZBQTJGO3dCQUMzRixjQUFjLEVBQUUsd0JBQXdCO3dCQUN4QyxjQUFjLEVBQUUsMkJBQTJCO3dCQUMzQyxhQUFhLEVBQUUsTUFBTTtxQkFDckI7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7OztFQWNUO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZSBhcmUgYnVpbGRpbmcgb24gc2hvdWxkZXJzIG9mIGdpYW50cyBoZXJlIGFuZCBhZGFwdCB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGluY3JlZGlibGUgQW5ndWxhclxuICogdGVhbTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL3Rvb2x0aXAvdG9vbHRpcC50c1xuICogQ2hlY2sgdGhlbSBvdXQhIEdpdmUgdGhlbSBhIHRyeSEgTGVhdmUgYSBzdGFyISBUaGVpciB3b3JrIGlzIGluY3JlZGlibGUhXG4gKi9cblxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0dHlwZSBPbkRlc3Ryb3ksXG5cdFBMQVRGT1JNX0lELFxuXHRSZW5kZXJlcjIsXG5cdHNpZ25hbCxcblx0dHlwZSBUZW1wbGF0ZVJlZixcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbnRlcm5hbCBjb21wb25lbnQgdGhhdCB3cmFwcyB0aGUgdG9vbHRpcCdzIGNvbnRlbnQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2Jybi10b29sdGlwLWNvbnRlbnQnLFxuXHRpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldF0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRob3N0OiB7XG5cdFx0Ly8gRm9yY2VzIHRoZSBlbGVtZW50IHRvIGhhdmUgYSBsYXlvdXQgaW4gSUUgYW5kIEVkZ2UuIFRoaXMgZml4ZXMgaXNzdWVzIHdoZXJlIHRoZSBlbGVtZW50XG5cdFx0Ly8gd29uJ3QgYmUgcmVuZGVyZWQgaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGRpc2FibGVkIG9yIHRoZXJlIGlzIG5vIHdlYiBhbmltYXRpb25zIHBvbHlmaWxsLlxuXHRcdCdbc3R5bGUuem9vbV0nOiAnaXNWaXNpYmxlKCkgPyAxIDogbnVsbCcsXG5cdFx0Jyhtb3VzZWxlYXZlKSc6ICdfaGFuZGxlTW91c2VMZWF2ZSgkZXZlbnQpJyxcblx0XHQnYXJpYS1oaWRkZW4nOiAndHJ1ZScsXG5cdH0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdlxuXHRcdFx0KG1vdXNlZW50ZXIpPVwiX2NvbnRlbnRIb3ZlcmVkLnNldCh0cnVlKVwiXG5cdFx0XHQobW91c2VsZWF2ZSk9XCJfY29udGVudEhvdmVyZWQuc2V0KGZhbHNlKVwiXG5cdFx0XHRbY2xhc3NdPVwidG9vbHRpcENsYXNzZXMoKVwiXG5cdFx0XHRbc3R5bGUudmlzaWJpbGl0eV09XCInaGlkZGVuJ1wiXG5cdFx0XHQjdG9vbHRpcFxuXHRcdD5cblx0XHRcdEBpZiAoX2lzVHlwZU9mU3RyaW5nKGNvbnRlbnQpKSB7XG5cdFx0XHRcdHt7IGNvbnRlbnQgfX1cblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIiAvPlxuXHRcdFx0fVxuXHRcdDwvZGl2PlxuXHRgLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwQ29udGVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2lzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKGluamVjdChQTEFURk9STV9JRCkpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbnRlbnRIb3ZlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgdG9vbHRpcENsYXNzZXMgPSBzaWduYWwoJycpO1xuXHRwdWJsaWMgcmVhZG9ubHkgc2lkZSA9IHNpZ25hbCgnYWJvdmUnKTtcblx0LyoqIE1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgdG9vbHRpcCAqL1xuXHRwdWJsaWMgY29udGVudDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsID0gbnVsbDtcblxuXHQvKiogVGhlIHRpbWVvdXQgSUQgb2YgYW55IGN1cnJlbnQgdGltZXIgc2V0IHRvIHNob3cgdGhlIHRvb2x0aXAgKi9cblx0cHJpdmF0ZSBfc2hvd1RpbWVvdXRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG5cdC8qKiBUaGUgdGltZW91dCBJRCBvZiBhbnkgY3VycmVudCB0aW1lciBzZXQgdG8gaGlkZSB0aGUgdG9vbHRpcCAqL1xuXHRwcml2YXRlIF9oaWRlVGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcblx0LyoqIFRoZSB0aW1lb3V0IElEIG9mIGFueSBjdXJyZW50IHRpbWVyIHNldCB0byBhbmltYXRlIHRoZSB0b29sdGlwICovXG5cdHByaXZhdGUgX2FuaW1hdGVUaW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG5cdC8qKiBFbGVtZW50IHRoYXQgY2F1c2VkIHRoZSB0b29sdGlwIHRvIG9wZW4uICovXG5cdHB1YmxpYyB0cmlnZ2VyRWxlbWVudD86IEhUTUxFbGVtZW50O1xuXG5cdC8qKiBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IHRoZSBjbG9zaW5nIHNlcXVlbmNlLiAqL1xuXHRwdWJsaWMgbW91c2VMZWF2ZUhpZGVEZWxheSA9IDA7XG5cdC8qKiBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIG9mIGNsb3NpbmcgYW5pbWF0aW9uLiAqL1xuXHRwdWJsaWMgZXhpdEFuaW1hdGlvbkR1cmF0aW9uID0gMDtcblxuXHQvKiogUmVmZXJlbmNlIHRvIHRoZSBpbnRlcm5hbCB0b29sdGlwIGVsZW1lbnQuICovXG5cdHB1YmxpYyByZWFkb25seSB0b29sdGlwID0gdmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB9KTtcblxuXHQvKiogV2hldGhlciBpbnRlcmFjdGlvbnMgb24gdGhlIHBhZ2Ugc2hvdWxkIGNsb3NlIHRoZSB0b29sdGlwICovXG5cdHByaXZhdGUgX2Nsb3NlT25JbnRlcmFjdGlvbiA9IGZhbHNlO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSB0b29sdGlwIGlzIGN1cnJlbnRseSB2aXNpYmxlLiAqL1xuXHRwcml2YXRlIF9pc1Zpc2libGUgPSBmYWxzZTtcblxuXHQvKiogU3ViamVjdCBmb3Igbm90aWZ5aW5nIHRoYXQgdGhlIHRvb2x0aXAgaGFzIGJlZW4gaGlkZGVuIGZyb20gdGhlIHZpZXcgKi9cblx0cHJpdmF0ZSByZWFkb25seSBfb25IaWRlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblx0cHVibGljIHJlYWRvbmx5IGFmdGVySGlkZGVuID0gdGhpcy5fb25IaWRlLmFzT2JzZXJ2YWJsZSgpO1xuXG5cdC8qKlxuXHQgKiBTaG93cyB0aGUgdG9vbHRpcCB3aXRoIG9yaWdpbmF0aW5nIGZyb20gdGhlIHByb3ZpZGVkIG9yaWdpblxuXHQgKiBAcGFyYW0gZGVsYXkgQW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB0aGUgZGVsYXkgc2hvd2luZyB0aGUgdG9vbHRpcC5cblx0ICovXG5cdHNob3coZGVsYXk6IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIENhbmNlbCB0aGUgZGVsYXllZCBoaWRlIGlmIGl0IGlzIHNjaGVkdWxlZFxuXHRcdGlmICh0aGlzLl9oaWRlVGltZW91dElkICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9hbmltYXRlVGltZW91dElkICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fYW5pbWF0ZVRpbWVvdXRJZCk7XG5cdFx0fVxuXHRcdHRoaXMuX3Nob3dUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuX3RvZ2dsZURhdGFBdHRyaWJ1dGVzKHRydWUsIHRoaXMuc2lkZSgpKTtcblx0XHRcdHRoaXMuX3RvZ2dsZVZpc2liaWxpdHkodHJ1ZSk7XG5cdFx0XHR0aGlzLl9zaG93VGltZW91dElkID0gdW5kZWZpbmVkO1xuXHRcdH0sIGRlbGF5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCZWdpbnMgdG8gaGlkZSB0aGUgdG9vbHRpcCBhZnRlciB0aGUgcHJvdmlkZWQgZGVsYXkgaW4gbXMuXG5cdCAqIEBwYXJhbSBkZWxheSBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGhpZGluZyB0aGUgdG9vbHRpcC5cblx0ICogQHBhcmFtIGV4aXRBbmltYXRpb25EdXJhdGlvbiBUaW1lIGJlZm9yZSBoaWRpbmcgdG8gZmluaXNoIGFuaW1hdGlvblxuXHQgKiAqL1xuXHRoaWRlKGRlbGF5OiBudW1iZXIsIGV4aXRBbmltYXRpb25EdXJhdGlvbjogbnVtYmVyKTogdm9pZCB7XG5cdFx0Ly8gQ2FuY2VsIHRoZSBkZWxheWVkIHNob3cgaWYgaXQgaXMgc2NoZWR1bGVkXG5cdFx0aWYgKHRoaXMuX3Nob3dUaW1lb3V0SWQgIT09IG51bGwpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKTtcblx0XHR9XG5cdFx0Ly8gc3RhcnQgb3V0IGFuaW1hdGlvbiBhdCBkZWxheSBtaW51cyBhbmltYXRpb24gZGVsYXkgb3IgaW1tZWRpYXRlbHkgaWYgcG9zc2libGVcblx0XHR0aGlzLl9hbmltYXRlVGltZW91dElkID0gc2V0VGltZW91dChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5fYW5pbWF0ZVRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHRoaXMuX2NvbnRlbnRIb3ZlcmVkKCkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5fdG9nZ2xlRGF0YUF0dHJpYnV0ZXMoZmFsc2UsIHRoaXMuc2lkZSgpKTtcblx0XHRcdH0sXG5cdFx0XHRNYXRoLm1heChkZWxheSwgMCksXG5cdFx0KTtcblx0XHR0aGlzLl9oaWRlVGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9oaWRlVGltZW91dElkID0gdW5kZWZpbmVkO1xuXHRcdFx0aWYgKHRoaXMuX2NvbnRlbnRIb3ZlcmVkKCkpIHJldHVybjtcblx0XHRcdHRoaXMuX3RvZ2dsZVZpc2liaWxpdHkoZmFsc2UpO1xuXHRcdH0sIGRlbGF5ICsgZXhpdEFuaW1hdGlvbkR1cmF0aW9uKTtcblx0fVxuXG5cdC8qKiBXaGV0aGVyIHRoZSB0b29sdGlwIGlzIGJlaW5nIGRpc3BsYXllZC4gKi9cblx0aXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9pc1Zpc2libGU7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO1xuXHRcdHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpO1xuXHRcdHRoaXMudHJpZ2dlckVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRfaXNUeXBlT2ZTdHJpbmcoY29udGVudDogdW5rbm93bik6IGNvbnRlbnQgaXMgc3RyaW5nIHtcblx0XHRyZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVyYWN0aW9ucyBvbiB0aGUgSFRNTCBib2R5IHNob3VsZCBjbG9zZSB0aGUgdG9vbHRpcCBpbW1lZGlhdGVseSBhcyBkZWZpbmVkIGluIHRoZVxuXHQgKiBtYXRlcmlhbCBkZXNpZ24gc3BlYy5cblx0ICogaHR0cHM6Ly9tYXRlcmlhbC5pby9kZXNpZ24vY29tcG9uZW50cy90b29sdGlwcy5odG1sI2JlaGF2aW9yXG5cdCAqL1xuXHRfaGFuZGxlQm9keUludGVyYWN0aW9uKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24pIHtcblx0XHRcdHRoaXMuaGlkZSgwLCAwKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFya3MgdGhhdCB0aGUgdG9vbHRpcCBuZWVkcyB0byBiZSBjaGVja2VkIGluIHRoZSBuZXh0IGNoYW5nZSBkZXRlY3Rpb24gcnVuLlxuXHQgKiBNYWlubHkgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBpbml0aWFsIHRleHQgYmVmb3JlIHBvc2l0aW9uaW5nIGEgdG9vbHRpcCwgd2hpY2hcblx0ICogY2FuIGJlIHByb2JsZW1hdGljIGluIGNvbXBvbmVudHMgd2l0aCBPblB1c2ggY2hhbmdlIGRldGVjdGlvbi5cblx0ICovXG5cdF9tYXJrRm9yQ2hlY2soKTogdm9pZCB7XG5cdFx0dGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0X2hhbmRsZU1vdXNlTGVhdmUoeyByZWxhdGVkVGFyZ2V0IH06IE1vdXNlRXZlbnQpIHtcblx0XHRpZiAoIXJlbGF0ZWRUYXJnZXQgfHwgIXRoaXMudHJpZ2dlckVsZW1lbnQ/LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcblx0XHRcdGlmICh0aGlzLmlzVmlzaWJsZSgpKSB7XG5cdFx0XHRcdHRoaXMuaGlkZSh0aGlzLm1vdXNlTGVhdmVIaWRlRGVsYXksIHRoaXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9uKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2ZpbmFsaXplKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5fY29udGVudEhvdmVyZWQuc2V0KGZhbHNlKTtcblx0fVxuXG5cdC8qKiBDYW5jZWxzIGFueSBwZW5kaW5nIGFuaW1hdGlvbiBzZXF1ZW5jZXMuICovXG5cdF9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpIHtcblx0XHRpZiAodGhpcy5fc2hvd1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9oaWRlVGltZW91dElkICE9PSBudWxsKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2hvd1RpbWVvdXRJZCA9IHRoaXMuX2hpZGVUaW1lb3V0SWQgPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRwcml2YXRlIF9maW5hbGl6ZSh0b1Zpc2libGU6IGJvb2xlYW4pIHtcblx0XHRpZiAodG9WaXNpYmxlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24gPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcblx0XHRcdHRoaXMuX29uSGlkZS5uZXh0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHRvb2x0aXAgZWxlbWVudC4gKi9cblx0cHJpdmF0ZSBfdG9nZ2xlVmlzaWJpbGl0eShpc1Zpc2libGU6IGJvb2xlYW4pIHtcblx0XHQvLyBXZSBzZXQgdGhlIGNsYXNzZXMgZGlyZWN0bHkgaGVyZSBvdXJzZWx2ZXMgc28gdGhhdCB0b2dnbGluZyB0aGUgdG9vbHRpcCBzdGF0ZVxuXHRcdC8vIGlzbid0IGJvdW5kIGJ5IGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgYWxsb3dzIHVzIHRvIGhpZGUgaXQgZXZlbiBpZiB0aGVcblx0XHQvLyB2aWV3IHJlZiBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBDRCB0cmVlLlxuXHRcdGNvbnN0IHRvb2x0aXAgPSB0aGlzLnRvb2x0aXAoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRpZiAoIXRvb2x0aXAgfHwgIXRoaXMuX2lzQnJvd3NlcikgcmV0dXJuO1xuXHRcdHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0b29sdGlwLCAndmlzaWJpbGl0eScsIGlzVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKTtcblx0XHRpZiAoaXNWaXNpYmxlKSB7XG5cdFx0XHR0aGlzLl9yZW5kZXJlcjIucmVtb3ZlU3R5bGUodG9vbHRpcCwgJ2Rpc3BsYXknKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRvb2x0aXAsICdkaXNwbGF5JywgJ25vbmUnKTtcblx0XHR9XG5cdFx0dGhpcy5faXNWaXNpYmxlID0gaXNWaXNpYmxlO1xuXHR9XG5cblx0cHJpdmF0ZSBfdG9nZ2xlRGF0YUF0dHJpYnV0ZXMoaXNWaXNpYmxlOiBib29sZWFuLCBzaWRlOiBzdHJpbmcpIHtcblx0XHQvLyBXZSBzZXQgdGhlIGNsYXNzZXMgZGlyZWN0bHkgaGVyZSBvdXJzZWx2ZXMgc28gdGhhdCB0b2dnbGluZyB0aGUgdG9vbHRpcCBzdGF0ZVxuXHRcdC8vIGlzbid0IGJvdW5kIGJ5IGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgYWxsb3dzIHVzIHRvIGhpZGUgaXQgZXZlbiBpZiB0aGVcblx0XHQvLyB2aWV3IHJlZiBoYXMgYmVlbiBkZXRhY2hlZCBmcm9tIHRoZSBDRCB0cmVlLlxuXHRcdGNvbnN0IHRvb2x0aXAgPSB0aGlzLnRvb2x0aXAoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRpZiAoIXRvb2x0aXAgfHwgIXRoaXMuX2lzQnJvd3NlcikgcmV0dXJuO1xuXHRcdHRoaXMuX3JlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodG9vbHRpcCwgJ2RhdGEtc2lkZScsIHNpZGUpO1xuXHRcdHRoaXMuX3JlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodG9vbHRpcCwgJ2RhdGEtc3RhdGUnLCBpc1Zpc2libGUgPyAnb3BlbicgOiAnY2xvc2VkJyk7XG5cdH1cbn1cbiJdfQ==","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { BrnTooltip } from './brn-tooltip';\nimport * as i0 from \"@angular/core\";\nexport class BrnTooltipContentTemplate {\n _brnTooltipDirective = inject(BrnTooltip, { optional: true });\n _tpl = inject(TemplateRef);\n constructor() {\n if (!this._brnTooltipDirective || !this._tpl)\n return;\n this._brnTooltipDirective.tooltipTemplate.set(this._tpl);\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContentTemplate, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.7\", type: BrnTooltipContentTemplate, isStandalone: true, selector: \"[brnTooltipContent]\", ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipContentTemplate, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTooltipContent]',\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAtY29udGVudC10ZW1wbGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdG9vbHRpcC9zcmMvbGliL2Jybi10b29sdGlwLWNvbnRlbnQtdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyx5QkFBeUI7SUFDcEIsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELElBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFNUM7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDOzBIQVBXLHlCQUF5Qjs4R0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCcm5Ub29sdGlwIH0gZnJvbSAnLi9icm4tdG9vbHRpcCc7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5Ub29sdGlwQ29udGVudF0nLFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwQ29udGVudFRlbXBsYXRlIHtcblx0cHJpdmF0ZSByZWFkb25seSBfYnJuVG9vbHRpcERpcmVjdGl2ZSA9IGluamVjdChCcm5Ub29sdGlwLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90cGwgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGlmICghdGhpcy5fYnJuVG9vbHRpcERpcmVjdGl2ZSB8fCAhdGhpcy5fdHBsKSByZXR1cm47XG5cdFx0dGhpcy5fYnJuVG9vbHRpcERpcmVjdGl2ZS50b29sdGlwVGVtcGxhdGUuc2V0KHRoaXMuX3RwbCk7XG5cdH1cbn1cbiJdfQ==","import { inject, InjectionToken } from '@angular/core';\nexport const defaultOptions = {\n showDelay: 0,\n hideDelay: 0,\n exitAnimationDuration: 0,\n touchendHideDelay: 1500,\n};\nconst BRN_TOOLTIP_DEFAULT_OPTIONS = new InjectionToken('brn-tooltip-default-options', {\n providedIn: 'root',\n factory: () => defaultOptions,\n});\nexport function provideBrnTooltipDefaultOptions(options) {\n return { provide: BRN_TOOLTIP_DEFAULT_OPTIONS, useValue: { ...defaultOptions, ...options } };\n}\nexport function injectBrnTooltipDefaultOptions() {\n return inject(BRN_TOOLTIP_DEFAULT_OPTIONS, { optional: true }) ?? defaultOptions;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3Rvb2x0aXAvc3JjL2xpYi9icm4tdG9vbHRpcC50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUEyQjNFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBc0I7SUFDaEQsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsQ0FBQztJQUNaLHFCQUFxQixFQUFFLENBQUM7SUFDeEIsaUJBQWlCLEVBQUUsSUFBSTtDQUN2QixDQUFDO0FBRUYsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsNkJBQTZCLEVBQUU7SUFDeEcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWM7Q0FDN0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxVQUFVLCtCQUErQixDQUFDLE9BQW1DO0lBQ2xGLE9BQU8sRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQzlGLENBQUM7QUFFRCxNQUFNLFVBQVUsOEJBQThCO0lBQzdDLE9BQU8sTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGlvblRva2VuLCB0eXBlIFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgVG9vbHRpcFBvc2l0aW9uLCBUb29sdGlwVG91Y2hHZXN0dXJlcyB9IGZyb20gJy4vYnJuLXRvb2x0aXAtdHJpZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJuVG9vbHRpcE9wdGlvbnMge1xuXHQvKiogRGVmYXVsdCBkZWxheSB3aGVuIHRoZSB0b29sdGlwIGlzIHNob3duLiAqL1xuXHRzaG93RGVsYXk6IG51bWJlcjtcblx0LyoqIERlZmF1bHQgZGVsYXkgd2hlbiB0aGUgdG9vbHRpcCBpcyBoaWRkZW4uICovXG5cdGhpZGVEZWxheTogbnVtYmVyO1xuXHQvKiogRGVmYXVsdCBkZWxheSB3aGVuIGhpZGluZyB0aGUgdG9vbHRpcCBvbiBhIHRvdWNoIGRldmljZS4gKi9cblx0dG91Y2hlbmRIaWRlRGVsYXk6IG51bWJlcjtcblx0LyoqIERlZmF1bHQgZXhpdCBhbmltYXRpb24gZHVyYXRpb24gZm9yIHRoZSB0b29sdGlwLiAqL1xuXHRleGl0QW5pbWF0aW9uRHVyYXRpb246IG51bWJlcjtcblx0LyoqIERlZmF1bHQgdG91Y2ggZ2VzdHVyZSBoYW5kbGluZyBmb3IgdG9vbHRpcHMuICovXG5cdHRvdWNoR2VzdHVyZXM/OiBUb29sdGlwVG91Y2hHZXN0dXJlcztcblx0LyoqIERlZmF1bHQgcG9zaXRpb24gZm9yIHRvb2x0aXBzLiAqL1xuXHRwb3NpdGlvbj86IFRvb2x0aXBQb3NpdGlvbjtcblx0LyoqXG5cdCAqIERlZmF1bHQgdmFsdWUgZm9yIHdoZXRoZXIgdG9vbHRpcHMgc2hvdWxkIGJlIHBvc2l0aW9uZWQgbmVhciB0aGUgY2xpY2sgb3IgdG91Y2ggb3JpZ2luXG5cdCAqIGluc3RlYWQgb2Ygb3V0c2lkZSB0aGUgZWxlbWVudCBib3VuZGluZyBib3guXG5cdCAqL1xuXHRwb3NpdGlvbkF0T3JpZ2luPzogYm9vbGVhbjtcblx0LyoqIERpc2FibGVzIHRoZSBhYmlsaXR5IGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoIHRoZSB0b29sdGlwIGVsZW1lbnQuICovXG5cdGRpc2FibGVUb29sdGlwSW50ZXJhY3Rpdml0eT86IGJvb2xlYW47XG5cdC8qKiBEZWZhdWx0IGNsYXNzZXMgZm9yIHRoZSB0b29sdGlwIGNvbnRlbnQuICovXG5cdHRvb2x0aXBDb250ZW50Q2xhc3Nlcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRPcHRpb25zOiBCcm5Ub29sdGlwT3B0aW9ucyA9IHtcblx0c2hvd0RlbGF5OiAwLFxuXHRoaWRlRGVsYXk6IDAsXG5cdGV4aXRBbmltYXRpb25EdXJhdGlvbjogMCxcblx0dG91Y2hlbmRIaWRlRGVsYXk6IDE1MDAsXG59O1xuXG5jb25zdCBCUk5fVE9PTFRJUF9ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QnJuVG9vbHRpcE9wdGlvbnM+KCdicm4tdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMnLCB7XG5cdHByb3ZpZGVkSW46ICdyb290Jyxcblx0ZmFjdG9yeTogKCkgPT4gZGVmYXVsdE9wdGlvbnMsXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCcm5Ub29sdGlwRGVmYXVsdE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxCcm5Ub29sdGlwT3B0aW9ucz4pOiBWYWx1ZVByb3ZpZGVyIHtcblx0cmV0dXJuIHsgcHJvdmlkZTogQlJOX1RPT0xUSVBfREVGQVVMVF9PUFRJT05TLCB1c2VWYWx1ZTogeyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RCcm5Ub29sdGlwRGVmYXVsdE9wdGlvbnMoKTogQnJuVG9vbHRpcE9wdGlvbnMge1xuXHRyZXR1cm4gaW5qZWN0KEJSTl9UT09MVElQX0RFRkFVTFRfT1BUSU9OUywgeyBvcHRpb25hbDogdHJ1ZSB9KSA/PyBkZWZhdWx0T3B0aW9ucztcbn1cbiJdfQ==","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tooltip/tooltip.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { Overlay, ScrollDispatcher, } from '@angular/cdk/overlay';\nimport { normalizePassiveListenerOptions, Platform } from '@angular/cdk/platform';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { booleanAttribute, computed, Directive, DOCUMENT, effect, ElementRef, inject, InjectionToken, input, isDevMode, NgZone, numberAttribute, signal, untracked, ViewContainerRef, } from '@angular/core';\nimport { brnDevMode, computedPrevious } from '@spartan-ng/brain/core';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { BrnTooltip } from './brn-tooltip';\nimport { BrnTooltipContent } from './brn-tooltip-content';\nimport { injectBrnTooltipDefaultOptions } from './brn-tooltip.token';\nimport * as i0 from \"@angular/core\";\n/** Time in ms to throttle repositioning after scroll events. */\nexport const SCROLL_THROTTLE_MS = 20;\nexport function getBrnTooltipInvalidPositionError(position) {\n return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nexport const BRN_TOOLTIP_SCROLL_STRATEGY = new InjectionToken('brn-tooltip-scroll-strategy');\nexport const BRN_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: BRN_TOOLTIP_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: (overlay) => () => overlay.scrollStrategies.reposition({ scrollThrottle: SCROLL_THROTTLE_MS }),\n};\nconst PANEL_CLASS = 'tooltip-panel';\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = normalizePassiveListenerOptions({ passive: true });\n/**\n * Time between the user putting the pointer on a tooltip\n * trigger and the long press event being fired.\n */\nconst LONGPRESS_DELAY = 500;\n// These constants were taken from MDC's `numbers` object.\nconst MIN_VIEWPORT_TOOLTIP_THRESHOLD = 8;\nconst UNBOUNDED_ANCHOR_GAP = 8;\nexport class BrnTooltipTrigger {\n _tooltipDirective = inject(BrnTooltip, { optional: true });\n _tooltipComponent = BrnTooltipContent;\n _cssClassPrefix = 'brn';\n _destroyed = new Subject();\n _passiveListeners = [];\n _defaultOptions = injectBrnTooltipDefaultOptions();\n _overlay = inject(Overlay);\n _elementRef = inject((ElementRef));\n _scrollDispatcher = inject(ScrollDispatcher);\n _viewContainerRef = inject(ViewContainerRef);\n _ngZone = inject(NgZone);\n _platform = inject(Platform);\n _ariaDescriber = inject(AriaDescriber);\n _focusMonitor = inject(FocusMonitor);\n _dir = inject(Directionality);\n _scrollStrategy = inject(BRN_TOOLTIP_SCROLL_STRATEGY);\n _document = inject(DOCUMENT);\n _portal;\n _viewInitialized = false;\n _pointerExitEventsInitialized = false;\n _viewportMargin = 8;\n _currentPosition;\n _touchstartTimeout;\n _overlayRef = null;\n _tooltipInstance = null;\n /** Allows the user to define the position of the tooltip relative to the parent element */\n position = input(this._defaultOptions?.position ?? 'above');\n /**\n * Whether tooltip should be relative to the click or touch origin\n * instead of outside the element bounding box.\n */\n positionAtOrigin = input(this._defaultOptions?.positionAtOrigin ?? false, {\n transform: booleanAttribute,\n });\n /** Disables the display of the tooltip. */\n brnTooltipDisabled = input(false, { transform: booleanAttribute });\n /** The default delay in ms before showing the tooltip after show is called */\n showDelay = input(this._defaultOptions?.showDelay ?? 0, {\n transform: numberAttribute,\n });\n /** The default delay in ms before hiding the tooltip after hide is called */\n hideDelay = input(this._defaultOptions?.hideDelay ?? 0, {\n transform: numberAttribute,\n });\n /** The default duration in ms that exit animation takes before hiding */\n exitAnimationDuration = input(this._defaultOptions?.exitAnimationDuration ?? 0, {\n transform: numberAttribute,\n });\n /** The default delay in ms before hiding the tooltip after hide is called */\n tooltipContentClasses = input(this._defaultOptions?.tooltipContentClasses ?? '', {\n alias: 'tooltipContentClasses',\n });\n computedTooltipContentClasses = computed(() => signal(this.tooltipContentClasses()));\n /**\n * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n * uses a long press gesture to show and hide, however it can conflict with the native browser\n * gestures. To work around the conflict, Angular Material disables native gestures on the\n * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n * elements). The different values for this option configure the touch event handling as follows:\n * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n * browser gestures on particular elements. In particular, it allows text selection on inputs\n * and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n * - `on` - Enables touch gestures for all elements and disables native\n * browser gestures with no exceptions.\n * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n * showing on touch devices.\n */\n touchGestures = input(this._defaultOptions?.touchGestures ?? 'auto');\n /** The message to be used to describe the aria in the tooltip */\n ariaDescribedBy = input('', { alias: 'aria-describedby' });\n computedAriaDescribedBy = computed(() => signal(this.ariaDescribedBy()));\n ariaDescribedByPrevious = computedPrevious(this.computedAriaDescribedBy);\n /** The content to be displayed in the tooltip */\n brnTooltipTrigger = input(null);\n brnTooltipTriggerState = computed(() => {\n if (this._tooltipDirective) {\n return this._tooltipDirective.tooltipTemplate();\n }\n return this.brnTooltipTrigger();\n });\n constructor() {\n this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n }\n });\n this._viewportMargin = MIN_VIEWPORT_TOOLTIP_THRESHOLD;\n this._initBrnTooltipTriggerEffect();\n this._initAriaDescribedByPreviousEffect();\n this._initTooltipContentClassesEffect();\n this._initPositionEffect();\n this._initPositionAtOriginEffect();\n this._initBrnTooltipDisabledEffect();\n this._initExitAnimationDurationEffect();\n this._initHideDelayEffect();\n }\n setTooltipContentClasses(tooltipContentClasses) {\n this.computedTooltipContentClasses().set(tooltipContentClasses);\n }\n setAriaDescribedBy(ariaDescribedBy) {\n this.computedAriaDescribedBy().set(ariaDescribedBy);\n }\n _initPositionEffect() {\n effect(() => {\n if (this._overlayRef) {\n this._updatePosition(this._overlayRef);\n this._tooltipInstance?.show(0);\n this._overlayRef.updatePosition();\n }\n });\n }\n _initBrnTooltipDisabledEffect() {\n effect(() => {\n if (this.brnTooltipDisabled()) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n }\n });\n }\n _initPositionAtOriginEffect() {\n effect(() => {\n // Needed that the effect got triggered\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const _ = this.positionAtOrigin();\n this._detach();\n this._overlayRef = null;\n });\n }\n _initTooltipContentClassesEffect() {\n effect(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.tooltipClasses.set(this.computedTooltipContentClasses()() ?? '');\n }\n });\n }\n _initAriaDescribedByPreviousEffect() {\n effect(() => {\n const ariaDescribedBy = this.computedAriaDescribedBy()();\n this._ariaDescriber.removeDescription(this._elementRef.nativeElement, untracked(() => this.ariaDescribedByPrevious()()), 'tooltip');\n if (ariaDescribedBy && !this._isTooltipVisible()) {\n this._ngZone.runOutsideAngular(() => {\n // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n Promise.resolve().then(() => {\n this._ariaDescriber.describe(this._elementRef.nativeElement, ariaDescribedBy, 'tooltip');\n });\n });\n }\n });\n }\n _initBrnTooltipTriggerEffect() {\n effect(() => {\n const brnTooltipTriggerState = this.brnTooltipTriggerState();\n const isTooltipVisible = this._isTooltipVisible();\n untracked(() => {\n if (!brnTooltipTriggerState && isTooltipVisible) {\n this.hide(0);\n }\n else {\n this._setupPointerEnterEventsIfNeeded();\n this._updateTooltipContent();\n }\n });\n });\n }\n _initExitAnimationDurationEffect() {\n effect(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.exitAnimationDuration = this.exitAnimationDuration();\n }\n });\n }\n _initHideDelayEffect() {\n effect(() => {\n if (this._tooltipInstance) {\n this._tooltipInstance.mouseLeaveHideDelay = this.hideDelay();\n }\n });\n }\n ngAfterViewInit() {\n // This needs to happen after view init so the initial values for all inputs have been set.\n this._viewInitialized = true;\n this._setupPointerEnterEventsIfNeeded();\n this._focusMonitor\n .monitor(this._elementRef)\n .pipe(takeUntil(this._destroyed))\n .subscribe((origin) => {\n // Note that the focus monitor runs outside the Angular zone.\n if (!origin) {\n this._ngZone.run(() => this.hide(0));\n }\n else if (origin === 'keyboard') {\n this._ngZone.run(() => this.show());\n }\n });\n if (brnDevMode && !this.computedAriaDescribedBy()) {\n console.warn('BrnTooltip: \"aria-describedby\" attribute is required for accessibility');\n }\n }\n /**\n * Dispose the tooltip when destroyed.\n */\n ngOnDestroy() {\n const nativeElement = this._elementRef.nativeElement;\n clearTimeout(this._touchstartTimeout);\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._tooltipInstance = null;\n }\n // Clean up the event listeners set in the constructor\n this._passiveListeners.forEach(([event, listener]) => nativeElement.removeEventListener(event, listener, passiveListenerOptions));\n this._passiveListeners.length = 0;\n this._destroyed.next();\n this._destroyed.complete();\n this._ariaDescriber.removeDescription(nativeElement, this.computedAriaDescribedBy()(), 'tooltip');\n this._focusMonitor.stopMonitoring(nativeElement);\n }\n /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n show(delay = this.showDelay(), origin) {\n if (this.brnTooltipDisabled() || this._isTooltipVisible()) {\n this._tooltipInstance?._cancelPendingAnimations();\n return;\n }\n const overlayRef = this._createOverlay(origin);\n this._detach();\n this._portal = this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n const instance = (this._tooltipInstance = overlayRef.attach(this._portal).instance);\n instance.triggerElement = this._elementRef.nativeElement;\n instance.mouseLeaveHideDelay = this.hideDelay();\n instance.tooltipClasses.set(this.computedTooltipContentClasses()());\n instance.exitAnimationDuration = this.exitAnimationDuration();\n instance.side.set(this._currentPosition ?? 'above');\n instance.afterHidden.pipe(takeUntil(this._destroyed)).subscribe(() => this._detach());\n this._updateTooltipContent();\n instance.show(delay);\n }\n /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n hide(delay = this.hideDelay(), exitAnimationDuration = this.exitAnimationDuration()) {\n const instance = this._tooltipInstance;\n if (instance) {\n if (instance.isVisible()) {\n instance.hide(delay, exitAnimationDuration);\n }\n else {\n instance._cancelPendingAnimations();\n this._detach();\n }\n }\n }\n toggle(origin) {\n this._isTooltipVisible() ? this.hide() : this.show(undefined, origin);\n }\n _isTooltipVisible() {\n return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n }\n _createOverlay(origin) {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig().positionStrategy;\n if ((!this.positionAtOrigin() || !origin) && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n this._detach();\n }\n const scrollableAncestors = this._scrollDispatcher.getAncestorScrollContainers(this._elementRef);\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.positionAtOrigin() ? origin || this._elementRef : this._elementRef)\n .withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`)\n .withFlexibleDimensions(false)\n .withViewportMargin(this._viewportMargin)\n .withScrollableContainers(scrollableAncestors);\n strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe((change) => {\n this._updateCurrentPositionClass(change.connectionPair);\n if (this._tooltipInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide(0));\n }\n }\n });\n this._overlayRef = this._overlay.create({\n direction: this._dir,\n positionStrategy: strategy,\n panelClass: `${this._cssClassPrefix}-${PANEL_CLASS}`,\n scrollStrategy: this._scrollStrategy(),\n });\n this._updatePosition(this._overlayRef);\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._detach());\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n this._overlayRef\n .keydownEvents()\n .pipe(takeUntil(this._destroyed))\n .subscribe((event) => {\n if (this._isTooltipVisible() && event.key === 'Escape' && !hasModifierKey(event)) {\n event.preventDefault();\n event.stopPropagation();\n this._ngZone.run(() => this.hide(0));\n }\n });\n if (this._defaultOptions?.disableTooltipInteractivity) {\n this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n }\n return this._overlayRef;\n }\n _detach() {\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef.detach();\n }\n this._tooltipInstance = null;\n }\n _updatePosition(overlayRef) {\n const position = overlayRef.getConfig().positionStrategy;\n const origin = this._getOrigin();\n const overlay = this._getOverlayPosition();\n position.withPositions([\n this._addOffset({ ...origin.main, ...overlay.main }),\n this._addOffset({ ...origin.fallback, ...overlay.fallback }),\n ]);\n }\n /** Adds the configured offset to a position. Used as a hook for child classes. */\n _addOffset(position) {\n const offset = UNBOUNDED_ANCHOR_GAP;\n const isLtr = !this._dir || this._dir.value === 'ltr';\n if (position.originY === 'top') {\n position.offsetY = -offset;\n }\n else if (position.originY === 'bottom') {\n position.offsetY = offset;\n }\n else if (position.originX === 'start') {\n position.offsetX = isLtr ? -offset : offset;\n }\n else if (position.originX === 'end') {\n position.offsetX = isLtr ? offset : -offset;\n }\n return position;\n }\n /**\n * Returns the origin position and a fallback position based on the user's position preference.\n * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n */\n _getOrigin() {\n const isLtr = !this._dir || this._dir.value === 'ltr';\n const position = this.position();\n let originPosition;\n if (position === 'above' || position === 'below') {\n originPosition = { originX: 'center', originY: position === 'above' ? 'top' : 'bottom' };\n }\n else if (position === 'before' || (position === 'left' && isLtr) || (position === 'right' && !isLtr)) {\n originPosition = { originX: 'start', originY: 'center' };\n }\n else if (position === 'after' || (position === 'right' && isLtr) || (position === 'left' && !isLtr)) {\n originPosition = { originX: 'end', originY: 'center' };\n }\n else if (typeof isDevMode() === 'undefined' || isDevMode()) {\n throw getBrnTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(originPosition.originX, originPosition.originY);\n return {\n main: originPosition,\n fallback: { originX: x, originY: y },\n };\n }\n /** Returns the overlay position and a fallback position based on the user's preference */\n _getOverlayPosition() {\n const isLtr = !this._dir || this._dir.value === 'ltr';\n const position = this.position();\n let overlayPosition;\n if (position === 'above') {\n overlayPosition = { overlayX: 'center', overlayY: 'bottom' };\n }\n else if (position === 'below') {\n overlayPosition = { overlayX: 'center', overlayY: 'top' };\n }\n else if (position === 'before' || (position === 'left' && isLtr) || (position === 'right' && !isLtr)) {\n overlayPosition = { overlayX: 'end', overlayY: 'center' };\n }\n else if (position === 'after' || (position === 'right' && isLtr) || (position === 'left' && !isLtr)) {\n overlayPosition = { overlayX: 'start', overlayY: 'center' };\n }\n else if (typeof isDevMode() === 'undefined' || isDevMode()) {\n throw getBrnTooltipInvalidPositionError(position);\n }\n const { x, y } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);\n return {\n main: overlayPosition,\n fallback: { overlayX: x, overlayY: y },\n };\n }\n /** Updates the tooltip message and repositions the overlay according to the new message length */\n _updateTooltipContent() {\n // Must wait for the template to be painted to the tooltip so that the overlay can properly\n // calculate the correct positioning based on the size of the tek-pate.\n if (this._tooltipInstance) {\n this._tooltipInstance.content = this.brnTooltipTriggerState();\n this._tooltipInstance._markForCheck();\n this._ngZone.onMicrotaskEmpty.pipe(take(1), takeUntil(this._destroyed)).subscribe(() => {\n if (this._tooltipInstance) {\n this._overlayRef?.updatePosition();\n }\n });\n }\n }\n /** Inverts an overlay position. */\n _invertPosition(x, y) {\n if (this.position() === 'above' || this.position() === 'below') {\n if (y === 'top') {\n y = 'bottom';\n }\n else if (y === 'bottom') {\n y = 'top';\n }\n }\n else {\n if (x === 'end') {\n x = 'start';\n }\n else if (x === 'start') {\n x = 'end';\n }\n }\n return { x, y };\n }\n /** Updates the class on the overlay panel based on the current position of the tooltip. */\n _updateCurrentPositionClass(connectionPair) {\n const { overlayY, originX, originY } = connectionPair;\n let newPosition;\n // If the overlay is in the middle along the Y axis,\n // it means that it's either before or after.\n if (overlayY === 'center') {\n // Note that since this information is used for styling, we want to\n // resolve `start` and `end` to their real values, otherwise consumers\n // would have to remember to do it themselves on each consumption.\n if (this._dir && this._dir.value === 'rtl') {\n newPosition = originX === 'end' ? 'left' : 'right';\n }\n else {\n newPosition = originX === 'start' ? 'left' : 'right';\n }\n }\n else {\n newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n }\n if (newPosition !== this._currentPosition) {\n this._tooltipInstance?.side.set(newPosition);\n this._currentPosition = newPosition;\n }\n }\n /** Binds the pointer events to the tooltip trigger. */\n _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no content or the tooltip is disabled.\n if (this.brnTooltipDisabled() ||\n !this.brnTooltipTriggerState() ||\n !this._viewInitialized ||\n this._passiveListeners.length) {\n return;\n }\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (this._platformSupportsMouseEvents()) {\n this._passiveListeners.push([\n 'mouseenter',\n (event) => {\n this._setupPointerExitEventsIfNeeded();\n let point = undefined;\n if (event.x !== undefined && event.y !== undefined) {\n point = event;\n }\n this.show(undefined, point);\n },\n ]);\n }\n else if (this.touchGestures() !== 'off') {\n this._disableNativeGesturesIfNecessary();\n this._passiveListeners.push([\n 'touchstart',\n (event) => {\n const touch = event.targetTouches?.[0];\n const origin = touch ? { x: touch.clientX, y: touch.clientY } : undefined;\n // Note that it's important that we don't `preventDefault` here,\n // because it can prevent click events from firing on the element.\n this._setupPointerExitEventsIfNeeded();\n clearTimeout(this._touchstartTimeout);\n this._touchstartTimeout = setTimeout(() => this.show(undefined, origin), LONGPRESS_DELAY);\n },\n ]);\n }\n this._addListeners(this._passiveListeners);\n }\n _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n const exitListeners = [];\n if (this._platformSupportsMouseEvents()) {\n exitListeners.push([\n 'mouseleave',\n (event) => {\n const newTarget = event.relatedTarget;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n },\n ], ['wheel', (event) => this._wheelListener(event)]);\n }\n else if (this.touchGestures() !== 'off') {\n this._disableNativeGesturesIfNecessary();\n const touchendListener = () => {\n clearTimeout(this._touchstartTimeout);\n this.hide(this._defaultOptions?.touchendHideDelay);\n };\n exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);\n }\n this._addListeners(exitListeners);\n this._passiveListeners.push(...exitListeners);\n }\n _addListeners(listeners) {\n listeners.forEach(([event, listener]) => {\n this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n });\n }\n _platformSupportsMouseEvents() {\n return !this._platform.IOS && !this._platform.ANDROID;\n }\n /** Listener for the `wheel` event on the element. */\n _wheelListener(event) {\n if (this._isTooltipVisible()) {\n const elementUnderPointer = this._document.elementFromPoint(event.clientX, event.clientY);\n const element = this._elementRef.nativeElement;\n // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n // won't fire if the user scrolls away using the wheel without moving their cursor. We\n // work around it by finding the element under the user's cursor and closing the tooltip\n // if it's not the trigger.\n if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n this.hide();\n }\n }\n }\n /** Disables the native browser gestures, based on how the tooltip has been configured. */\n _disableNativeGesturesIfNecessary() {\n const gestures = this.touchGestures();\n if (gestures !== 'off') {\n const element = this._elementRef.nativeElement;\n const style = element.style;\n // If gestures are set to `auto`, we don't disable text selection on inputs and\n // textareas, because it prevents the user from typing into them on iOS Safari.\n if (gestures === 'on' || (element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA')) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style.userSelect = style.msUserSelect = style.webkitUserSelect = style.MozUserSelect = 'none';\n }\n // If we have `auto` gestures and the element uses native HTML dragging,\n // we don't set `-webkit-user-drag` because it prevents the native behavior.\n if (gestures === 'on' || !element.draggable) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style.webkitUserDrag = 'none';\n }\n style.touchAction = 'none';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n style.webkitTapHighlightColor = 'transparent';\n }\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTooltipTrigger, isStandalone: true, selector: \"[brnTooltipTrigger]\", inputs: { position: { classPropertyName: \"position\", publicName: \"position\", isSignal: true, isRequired: false, transformFunction: null }, positionAtOrigin: { classPropertyName: \"positionAtOrigin\", publicName: \"positionAtOrigin\", isSignal: true, isRequired: false, transformFunction: null }, brnTooltipDisabled: { classPropertyName: \"brnTooltipDisabled\", publicName: \"brnTooltipDisabled\", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: \"showDelay\", publicName: \"showDelay\", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: \"hideDelay\", publicName: \"hideDelay\", isSignal: true, isRequired: false, transformFunction: null }, exitAnimationDuration: { classPropertyName: \"exitAnimationDuration\", publicName: \"exitAnimationDuration\", isSignal: true, isRequired: false, transformFunction: null }, tooltipContentClasses: { classPropertyName: \"tooltipContentClasses\", publicName: \"tooltipContentClasses\", isSignal: true, isRequired: false, transformFunction: null }, touchGestures: { classPropertyName: \"touchGestures\", publicName: \"touchGestures\", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: \"ariaDescribedBy\", publicName: \"aria-describedby\", isSignal: true, isRequired: false, transformFunction: null }, brnTooltipTrigger: { classPropertyName: \"brnTooltipTrigger\", publicName: \"brnTooltipTrigger\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class.brn-tooltip-disabled\": \"brnTooltipDisabled()\" }, classAttribute: \"brn-tooltip-trigger\" }, providers: [BRN_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER], exportAs: [\"brnTooltipTrigger\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTooltipTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTooltipTrigger]',\n exportAs: 'brnTooltipTrigger',\n providers: [BRN_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],\n host: {\n class: 'brn-tooltip-trigger',\n '[class.brn-tooltip-disabled]': 'brnTooltipDisabled()',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRvb2x0aXAtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdG9vbHRpcC9zcmMvbGliL2Jybi10b29sdGlwLXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVIOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBTU4sT0FBTyxFQUdQLGdCQUFnQixHQUdoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUVOLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sZUFBZSxFQUdmLE1BQU0sRUFFTixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFB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LCtFQUErRTtZQUMvRSwrRUFBK0U7WUFDL0UsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUM1Riw4REFBOEQ7Z0JBQzlELEtBQUssQ0FBQyxVQUFVLEdBQUksS0FBYSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEdBQUksS0FBYSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDakgsQ0FBQztZQUVELHdFQUF3RTtZQUN4RSw0RUFBNEU7WUFDNUUsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM3Qyw4REFBOEQ7Z0JBQzdELEtBQWEsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1lBQ3hDLENBQUM7WUFFRCxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUMzQiw4REFBOEQ7WUFDN0QsS0FBYSxDQUFDLHVCQUF1QixHQUFHLGFBQWEsQ0FBQztRQUN4RCxDQUFDO0lBQ0YsQ0FBQzswSEExcEJXLGlCQUFpQjs4R0FBakIsaUJBQWlCLHlwREFObEIsQ0FBQyw0Q0FBNEMsQ0FBQzs7MkZBTTdDLGlCQUFpQjtrQkFUN0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixTQUFTLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQztvQkFDekQsSUFBSSxFQUFFO3dCQUNMLEtBQUssRUFBRSxxQkFBcUI7d0JBQzVCLDhCQUE4QixFQUFFLHNCQUFzQjtxQkFDdEQ7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlIGFyZSBidWlsZGluZyBvbiBzaG91bGRlcnMgb2YgZ2lhbnRzIGhlcmUgYW5kIGFkYXB0IHRoZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgaW5jcmVkaWJsZSBBbmd1bGFyXG4gKiB0ZWFtOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvdG9vbHRpcC90b29sdGlwLnRzXG4gKiBDaGVjayB0aGVtIG91dCEgR2l2ZSB0aGVtIGEgdHJ5ISBMZWF2ZSBhIHN0YXIhIFRoZWlyIHdvcmsgaXMgaW5jcmVkaWJsZSFcbiAqL1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7IEFyaWFEZXNjcmliZXIsIEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHR5cGUgeyBCb29sZWFuSW5wdXQsIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGhhc01vZGlmaWVyS2V5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG5cdHR5cGUgQ29ubmVjdGVkUG9zaXRpb24sXG5cdHR5cGUgQ29ubmVjdGlvblBvc2l0aW9uUGFpcixcblx0dHlwZSBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG5cdHR5cGUgSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3MsXG5cdHR5cGUgT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uLFxuXHRPdmVybGF5LFxuXHR0eXBlIE92ZXJsYXlDb25uZWN0aW9uUG9zaXRpb24sXG5cdHR5cGUgT3ZlcmxheVJlZixcblx0U2Nyb2xsRGlzcGF0Y2hlcixcblx0dHlwZSBTY3JvbGxTdHJhdGVneSxcblx0dHlwZSBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMsIFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcblx0dHlwZSBBZnRlclZpZXdJbml0LFxuXHRib29sZWFuQXR0cmlidXRlLFxuXHRjb21wdXRlZCxcblx0RGlyZWN0aXZlLFxuXHRET0NVTUVOVCxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdGlvblRva2VuLFxuXHRpbnB1dCxcblx0aXNEZXZNb2RlLFxuXHROZ1pvbmUsXG5cdG51bWJlckF0dHJpYnV0ZSxcblx0dHlwZSBPbkRlc3Ryb3ksXG5cdHR5cGUgUHJvdmlkZXIsXG5cdHNpZ25hbCxcblx0dHlwZSBUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJybkRldk1vZGUsIGNvbXB1dGVkUHJldmlvdXMgfSBmcm9tICdAc3BhcnRhbi1uZy9icmFpbi9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJyblRvb2x0aXAgfSBmcm9tICcuL2Jybi10b29sdGlwJztcbmltcG9ydCB7IEJyblRvb2x0aXBDb250ZW50IH0gZnJvbSAnLi9icm4tdG9vbHRpcC1jb250ZW50JztcbmltcG9ydCB7IGluamVjdEJyblRvb2x0aXBEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vYnJuLXRvb2x0aXAudG9rZW4nO1xuXG5leHBvcnQgdHlwZSBUb29sdGlwUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2Fib3ZlJyB8ICdiZWxvdycgfCAnYmVmb3JlJyB8ICdhZnRlcic7XG5leHBvcnQgdHlwZSBUb29sdGlwVG91Y2hHZXN0dXJlcyA9ICdhdXRvJyB8ICdvbicgfCAnb2ZmJztcblxuLyoqIFRpbWUgaW4gbXMgdG8gdGhyb3R0bGUgcmVwb3NpdGlvbmluZyBhZnRlciBzY3JvbGwgZXZlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IFNDUk9MTF9USFJPVFRMRV9NUyA9IDIwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJuVG9vbHRpcEludmFsaWRQb3NpdGlvbkVycm9yKHBvc2l0aW9uOiBzdHJpbmcpIHtcblx0cmV0dXJuIEVycm9yKGBUb29sdGlwIHBvc2l0aW9uIFwiJHtwb3NpdGlvbn1cIiBpcyBpbnZhbGlkLmApO1xufVxuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIGhhbmRsaW5nIHdoaWxlIGEgdG9vbHRpcCBpcyB2aXNpYmxlLiAqL1xuZXhwb3J0IGNvbnN0IEJSTl9UT09MVElQX1NDUk9MTF9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiBTY3JvbGxTdHJhdGVneT4oJ2Jybi10b29sdGlwLXNjcm9sbC1zdHJhdGVneScpO1xuZXhwb3J0IGNvbnN0IEJSTl9UT09MVElQX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSOiBQcm92aWRlciA9IHtcblx0cHJvdmlkZTogQlJOX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZLFxuXHRkZXBzOiBbT3ZlcmxheV0sXG5cdHVzZUZhY3Rvcnk6XG5cdFx0KG92ZXJsYXk6IE92ZXJsYXkpOiAoKCkgPT4gU2Nyb2xsU3RyYXRlZ3kpID0+XG5cdFx0KCkgPT5cblx0XHRcdG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IFNDUk9MTF9USFJPVFRMRV9NUyB9KSxcbn07XG5cbmNvbnN0IFBBTkVMX0NMQVNTID0gJ3Rvb2x0aXAtcGFuZWwnO1xuXG4vKiogT3B0aW9ucyB1c2VkIHRvIGJpbmQgcGFzc2l2ZSBldmVudCBsaXN0ZW5lcnMuICovXG5jb25zdCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zID0gbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7IHBhc3NpdmU6IHRydWUgfSk7XG5cbi8qKlxuICogVGltZSBiZXR3ZWVuIHRoZSB1c2VyIHB1dHRpbmcgdGhlIHBvaW50ZXIgb24gYSB0b29sdGlwXG4gKiB0cmlnZ2VyIGFuZCB0aGUgbG9uZyBwcmVzcyBldmVudCBiZWluZyBmaXJlZC5cbiAqL1xuY29uc3QgTE9OR1BSRVNTX0RFTEFZID0gNTAwO1xuXG4vLyBUaGVzZSBjb25zdGFudHMgd2VyZSB0YWtlbiBmcm9tIE1EQydzIGBudW1iZXJzYCBvYmplY3QuXG5jb25zdCBNSU5fVklFV1BPUlRfVE9PTFRJUF9USFJFU0hPTEQgPSA4O1xuY29uc3QgVU5CT1VOREVEX0FOQ0hPUl9HQVAgPSA4O1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVG9vbHRpcFRyaWdnZXJdJyxcblx0ZXhwb3J0QXM6ICdicm5Ub29sdGlwVHJpZ2dlcicsXG5cdHByb3ZpZGVyczogW0JSTl9UT09MVElQX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXSxcblx0aG9zdDoge1xuXHRcdGNsYXNzOiAnYnJuLXRvb2x0aXAtdHJpZ2dlcicsXG5cdFx0J1tjbGFzcy5icm4tdG9vbHRpcC1kaXNhYmxlZF0nOiAnYnJuVG9vbHRpcERpc2FibGVkKCknLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBCcm5Ub29sdGlwVHJpZ2dlciBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Rvb2x0aXBEaXJlY3RpdmUgPSBpbmplY3QoQnJuVG9vbHRpcCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblx0cHJpdmF0ZSByZWFkb25seSBfdG9vbHRpcENvbXBvbmVudCA9IEJyblRvb2x0aXBDb250ZW50O1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jc3NDbGFzc1ByZWZpeDogc3RyaW5nID0gJ2Jybic7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Bhc3NpdmVMaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSA9IFtdO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0T3B0aW9ucyA9IGluamVjdEJyblRvb2x0aXBEZWZhdWx0T3B0aW9ucygpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX292ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zY3JvbGxEaXNwYXRjaGVyID0gaW5qZWN0KFNjcm9sbERpc3BhdGNoZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm0gPSBpbmplY3QoUGxhdGZvcm0pO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9hcmlhRGVzY3JpYmVyID0gaW5qZWN0KEFyaWFEZXNjcmliZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9mb2N1c01vbml0b3IgPSBpbmplY3QoRm9jdXNNb25pdG9yKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZGlyID0gaW5qZWN0KERpcmVjdGlvbmFsaXR5KTtcblx0cHJpdmF0ZSByZWFkb25seSBfc2Nyb2xsU3RyYXRlZ3kgPSBpbmplY3QoQlJOX1RPT0xUSVBfU0NST0xMX1NUUkFURUdZKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG5cdHByaXZhdGUgX3BvcnRhbD86IENvbXBvbmVudFBvcnRhbDxCcm5Ub29sdGlwQ29udGVudD47XG5cdHByaXZhdGUgX3ZpZXdJbml0aWFsaXplZCA9IGZhbHNlO1xuXHRwcml2YXRlIF9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkID0gZmFsc2U7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdwb3J0TWFyZ2luID0gODtcblx0cHJpdmF0ZSBfY3VycmVudFBvc2l0aW9uPzogVG9vbHRpcFBvc2l0aW9uO1xuXHRwcml2YXRlIF90b3VjaHN0YXJ0VGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG5cdHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfdG9vbHRpcEluc3RhbmNlOiBCcm5Ub29sdGlwQ29udGVudCB8IG51bGwgPSBudWxsO1xuXG5cdC8qKiBBbGxvd3MgdGhlIHVzZXIgdG8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IGVsZW1lbnQgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb24gPSBpbnB1dDxUb29sdGlwUG9zaXRpb24+KHRoaXMuX2RlZmF1bHRPcHRpb25zPy5wb3NpdGlvbiA/PyAnYWJvdmUnKTtcblxuXHQvKipcblx0ICogV2hldGhlciB0b29sdGlwIHNob3VsZCBiZSByZWxhdGl2ZSB0byB0aGUgY2xpY2sgb3IgdG91Y2ggb3JpZ2luXG5cdCAqIGluc3RlYWQgb2Ygb3V0c2lkZSB0aGUgZWxlbWVudCBib3VuZGluZyBib3guXG5cdCAqL1xuXG5cdHB1YmxpYyByZWFkb25seSBwb3NpdGlvbkF0T3JpZ2luID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0Pih0aGlzLl9kZWZhdWx0T3B0aW9ucz8ucG9zaXRpb25BdE9yaWdpbiA/PyBmYWxzZSwge1xuXHRcdHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcblx0fSk7XG5cblx0LyoqIERpc2FibGVzIHRoZSBkaXNwbGF5IG9mIHRoZSB0b29sdGlwLiAqL1xuXG5cdHB1YmxpYyByZWFkb25seSBicm5Ub29sdGlwRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuXHQvKiogVGhlIGRlZmF1bHQgZGVsYXkgaW4gbXMgYmVmb3JlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWZ0ZXIgc2hvdyBpcyBjYWxsZWQgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgc2hvd0RlbGF5ID0gaW5wdXQ8bnVtYmVyLCBOdW1iZXJJbnB1dD4odGhpcy5fZGVmYXVsdE9wdGlvbnM/LnNob3dEZWxheSA/PyAwLCB7XG5cdFx0dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUsXG5cdH0pO1xuXG5cdC8qKiBUaGUgZGVmYXVsdCBkZWxheSBpbiBtcyBiZWZvcmUgaGlkaW5nIHRoZSB0b29sdGlwIGFmdGVyIGhpZGUgaXMgY2FsbGVkICovXG5cblx0cHVibGljIHJlYWRvbmx5IGhpZGVEZWxheSA9IGlucHV0PG51bWJlciwgTnVtYmVySW5wdXQ+KHRoaXMuX2RlZmF1bHRPcHRpb25zPy5oaWRlRGVsYXkgPz8gMCwge1xuXHRcdHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlLFxuXHR9KTtcblxuXHQvKiogVGhlIGRlZmF1bHQgZHVyYXRpb24gaW4gbXMgdGhhdCBleGl0IGFuaW1hdGlvbiB0YWtlcyBiZWZvcmUgaGlkaW5nICovXG5cblx0cHVibGljIHJlYWRvbmx5IGV4aXRBbmltYXRpb25EdXJhdGlvbiA9IGlucHV0PG51bWJlciwgTnVtYmVySW5wdXQ+KHRoaXMuX2RlZmF1bHRPcHRpb25zPy5leGl0QW5pbWF0aW9uRHVyYXRpb24gPz8gMCwge1xuXHRcdHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlLFxuXHR9KTtcblxuXHQvKiogVGhlIGRlZmF1bHQgZGVsYXkgaW4gbXMgYmVmb3JlIGhpZGluZyB0aGUgdG9vbHRpcCBhZnRlciBoaWRlIGlzIGNhbGxlZCAqL1xuXG5cdHB1YmxpYyByZWFkb25seSB0b29sdGlwQ29udGVudENsYXNzZXMgPSBpbnB1dDxzdHJpbmc+KHRoaXMuX2RlZmF1bHRPcHRpb25zPy50b29sdGlwQ29udGVudENsYXNzZXMgPz8gJycsIHtcblx0XHRhbGlhczogJ3Rvb2x0aXBDb250ZW50Q2xhc3NlcycsXG5cdH0pO1xuXHRwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZWRUb29sdGlwQ29udGVudENsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiBzaWduYWwodGhpcy50b29sdGlwQ29udGVudENsYXNzZXMoKSkpO1xuXG5cdC8qKlxuXHQgKiBIb3cgdG91Y2ggZ2VzdHVyZXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIHRvb2x0aXAuIE9uIHRvdWNoIGRldmljZXMgdGhlIHRvb2x0aXAgZGlyZWN0aXZlXG5cdCAqIHVzZXMgYSBsb25nIHByZXNzIGdlc3R1cmUgdG8gc2hvdyBhbmQgaGlkZSwgaG93ZXZlciBpdCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbmF0aXZlIGJyb3dzZXJcblx0ICogZ2VzdHVyZXMuIFRvIHdvcmsgYXJvdW5kIHRoZSBjb25mbGljdCwgQW5ndWxhciBNYXRlcmlhbCBkaXNhYmxlcyBuYXRpdmUgZ2VzdHVyZXMgb24gdGhlXG5cdCAqIHRyaWdnZXIsIGJ1dCB0aGF0IG1pZ2h0IG5vdCBiZSBkZXNpcmFibGUgb24gcGFydGljdWxhciBlbGVtZW50cyAoZS5nLiBpbnB1dHMgYW5kIGRyYWdnYWJsZVxuXHQgKiBlbGVtZW50cykuIFRoZSBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGlzIG9wdGlvbiBjb25maWd1cmUgdGhlIHRvdWNoIGV2ZW50IGhhbmRsaW5nIGFzIGZvbGxvd3M6XG5cdCAqIC0gYGF1dG9gIC0gRW5hYmxlcyB0b3VjaCBnZXN0dXJlcyBmb3IgYWxsIGVsZW1lbnRzLCBidXQgdHJpZXMgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggbmF0aXZlXG5cdCAqICAgYnJvd3NlciBnZXN0dXJlcyBvbiBwYXJ0aWN1bGFyIGVsZW1lbnRzLiBJbiBwYXJ0aWN1bGFyLCBpdCBhbGxvd3MgdGV4dCBzZWxlY3Rpb24gb24gaW5wdXRzXG5cdCAqICAgYW5kIHRleHRhcmVhcywgYW5kIHByZXNlcnZlcyB0aGUgbmF0aXZlIGJyb3dzZXIgZHJhZ2dpbmcgb24gZWxlbWVudHMgbWFya2VkIGFzIGBkcmFnZ2FibGVgLlxuXHQgKiAtIGBvbmAgLSBFbmFibGVzIHRvdWNoIGdlc3R1cmVzIGZvciBhbGwgZWxlbWVudHMgYW5kIGRpc2FibGVzIG5hdGl2ZVxuXHQgKiAgIGJyb3dzZXIgZ2VzdHVyZXMgd2l0aCBubyBleGNlcHRpb25zLlxuXHQgKiAtIGBvZmZgIC0gRGlzYWJsZXMgdG91Y2ggZ2VzdHVyZXMuIE5vdGUgdGhhdCB0aGlzIHdpbGwgcHJldmVudCB0aGUgdG9vbHRpcCBmcm9tXG5cdCAqICAgc2hvd2luZyBvbiB0b3VjaCBkZXZpY2VzLlxuXHQgKi9cblxuXHRwdWJsaWMgcmVhZG9ubHkgdG91Y2hHZXN0dXJlcyA9IGlucHV0PFRvb2x0aXBUb3VjaEdlc3R1cmVzPih0aGlzLl9kZWZhdWx0T3B0aW9ucz8udG91Y2hHZXN0dXJlcyA/PyAnYXV0bycpO1xuXG5cdC8qKiBUaGUgbWVzc2FnZSB0byBiZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhcmlhIGluIHRoZSB0b29sdGlwICovXG5cblx0cHVibGljIHJlYWRvbmx5IGFyaWFEZXNjcmliZWRCeSA9IGlucHV0PHN0cmluZz4oJycsIHsgYWxpYXM6ICdhcmlhLWRlc2NyaWJlZGJ5JyB9KTtcblx0cHVibGljIHJlYWRvbmx5IGNvbXB1dGVkQXJpYURlc2NyaWJlZEJ5ID0gY29tcHV0ZWQoKCkgPT4gc2lnbmFsKHRoaXMuYXJpYURlc2NyaWJlZEJ5KCkpKTtcblx0cHVibGljIHJlYWRvbmx5IGFyaWFEZXNjcmliZWRCeVByZXZpb3VzID0gY29tcHV0ZWRQcmV2aW91cyh0aGlzLmNvbXB1dGVkQXJpYURlc2NyaWJlZEJ5KTtcblxuXHQvKiogVGhlIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0b29sdGlwICovXG5cblx0cHVibGljIHJlYWRvbmx5IGJyblRvb2x0aXBUcmlnZ2VyID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKTtcblx0cHVibGljIHJlYWRvbmx5IGJyblRvb2x0aXBUcmlnZ2VyU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0aWYgKHRoaXMuX3Rvb2x0aXBEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLl90b29sdGlwRGlyZWN0aXZlLnRvb2x0aXBUZW1wbGF0ZSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5icm5Ub29sdGlwVHJpZ2dlcigpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9kaXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuX3ZpZXdwb3J0TWFyZ2luID0gTUlOX1ZJRVdQT1JUX1RPT0xUSVBfVEhSRVNIT0xEO1xuXG5cdFx0dGhpcy5faW5pdEJyblRvb2x0aXBUcmlnZ2VyRWZmZWN0KCk7XG5cdFx0dGhpcy5faW5pdEFyaWFEZXNjcmliZWRCeVByZXZpb3VzRWZmZWN0KCk7XG5cdFx0dGhpcy5faW5pdFRvb2x0aXBDb250ZW50Q2xhc3Nlc0VmZmVjdCgpO1xuXHRcdHRoaXMuX2luaXRQb3NpdGlvbkVmZmVjdCgpO1xuXHRcdHRoaXMuX2luaXRQb3NpdGlvbkF0T3JpZ2luRWZmZWN0KCk7XG5cdFx0dGhpcy5faW5pdEJyblRvb2x0aXBEaXNhYmxlZEVmZmVjdCgpO1xuXHRcdHRoaXMuX2luaXRFeGl0QW5pbWF0aW9uRHVyYXRpb25FZmZlY3QoKTtcblx0XHR0aGlzLl9pbml0SGlkZURlbGF5RWZmZWN0KCk7XG5cdH1cblx0c2V0VG9vbHRpcENvbnRlbnRDbGFzc2VzKHRvb2x0aXBDb250ZW50Q2xhc3Nlczogc3RyaW5nKSB7XG5cdFx0dGhpcy5jb21wdXRlZFRvb2x0aXBDb250ZW50Q2xhc3NlcygpLnNldCh0b29sdGlwQ29udGVudENsYXNzZXMpO1xuXHR9XG5cdHNldEFyaWFEZXNjcmliZWRCeShhcmlhRGVzY3JpYmVkQnk6IHN0cmluZykge1xuXHRcdHRoaXMuY29tcHV0ZWRBcmlhRGVzY3JpYmVkQnkoKS5zZXQoYXJpYURlc2NyaWJlZEJ5KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRQb3NpdGlvbkVmZmVjdCgpOiB2b2lkIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZik7XG5cdFx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uc2hvdygwKTtcblx0XHRcdFx0dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfaW5pdEJyblRvb2x0aXBEaXNhYmxlZEVmZmVjdCgpOiB2b2lkIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuYnJuVG9vbHRpcERpc2FibGVkKCkpIHtcblx0XHRcdFx0dGhpcy5oaWRlKDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfaW5pdFBvc2l0aW9uQXRPcmlnaW5FZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdC8vIE5lZWRlZCB0aGF0IHRoZSBlZmZlY3QgZ290IHRyaWdnZXJlZFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRcdFx0Y29uc3QgXyA9IHRoaXMucG9zaXRpb25BdE9yaWdpbigpO1xuXHRcdFx0dGhpcy5fZGV0YWNoKCk7XG5cdFx0XHR0aGlzLl9vdmVybGF5UmVmID0gbnVsbDtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRUb29sdGlwQ29udGVudENsYXNzZXNFZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcblx0XHRcdFx0dGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzc2VzLnNldCh0aGlzLmNvbXB1dGVkVG9vbHRpcENvbnRlbnRDbGFzc2VzKCkoKSA/PyAnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9pbml0QXJpYURlc2NyaWJlZEJ5UHJldmlvdXNFZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGFyaWFEZXNjcmliZWRCeSA9IHRoaXMuY29tcHV0ZWRBcmlhRGVzY3JpYmVkQnkoKSgpO1xuXHRcdFx0dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihcblx0XHRcdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy5hcmlhRGVzY3JpYmVkQnlQcmV2aW91cygpKCkpLFxuXHRcdFx0XHQndG9vbHRpcCcsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYXJpYURlc2NyaWJlZEJ5ICYmICF0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpIHtcblx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBUaGUgYEFyaWFEZXNjcmliZXJgIGhhcyBzb21lIGZ1bmN0aW9uYWxpdHkgdGhhdCBhdm9pZHMgYWRkaW5nIGEgZGVzY3JpcHRpb24gaWYgaXQncyB0aGVcblx0XHRcdFx0XHQvLyBzYW1lIGFzIHRoZSBgYXJpYS1sYWJlbGAgb2YgYW4gZWxlbWVudCwgaG93ZXZlciB3ZSBjYW4ndCBrbm93IHdoZXRoZXIgdGhlIHRvb2x0aXAgdHJpZ2dlclxuXHRcdFx0XHRcdC8vIGhhcyBhIGRhdGEtYm91bmQgYGFyaWEtbGFiZWxgIG9yIHdoZW4gaXQnbGwgYmUgc2V0IGZvciB0aGUgZmlyc3QgdGltZS4gV2UgY2FuIGF2b2lkIHRoZVxuXHRcdFx0XHRcdC8vIGlzc3VlIGJ5IGRlZmVycmluZyB0aGUgZGVzY3JpcHRpb24gYnkgYSB0aWNrIHNvIEFuZ3VsYXIgaGFzIHRpbWUgdG8gc2V0IHRoZSBgYXJpYS1sYWJlbGAuXG5cdFx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXJpYURlc2NyaWJlZEJ5LCAndG9vbHRpcCcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRCcm5Ub29sdGlwVHJpZ2dlckVmZmVjdCgpOiB2b2lkIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSA9IHRoaXMuYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSgpO1xuXHRcdFx0Y29uc3QgaXNUb29sdGlwVmlzaWJsZSA9IHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKTtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdGlmICghYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSAmJiBpc1Rvb2x0aXBWaXNpYmxlKSB7XG5cdFx0XHRcdFx0dGhpcy5oaWRlKDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVUb29sdGlwQ29udGVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRFeGl0QW5pbWF0aW9uRHVyYXRpb25FZmZlY3QoKTogdm9pZCB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcblx0XHRcdFx0dGhpcy5fdG9vbHRpcEluc3RhbmNlLmV4aXRBbmltYXRpb25EdXJhdGlvbiA9IHRoaXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9pbml0SGlkZURlbGF5RWZmZWN0KCk6IHZvaWQge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fdG9vbHRpcEluc3RhbmNlKSB7XG5cdFx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tb3VzZUxlYXZlSGlkZURlbGF5ID0gdGhpcy5oaWRlRGVsYXkoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblx0XHQvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2aWV3IGluaXQgc28gdGhlIGluaXRpYWwgdmFsdWVzIGZvciBhbGwgaW5wdXRzIGhhdmUgYmVlbiBzZXQuXG5cdFx0dGhpcy5fdmlld0luaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCk7XG5cblx0XHR0aGlzLl9mb2N1c01vbml0b3Jcblx0XHRcdC5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcblx0XHRcdC5zdWJzY3JpYmUoKG9yaWdpbikgPT4ge1xuXHRcdFx0XHQvLyBOb3RlIHRoYXQgdGhlIGZvY3VzIG1vbml0b3IgcnVucyBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmUuXG5cdFx0XHRcdGlmICghb3JpZ2luKSB7XG5cdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmhpZGUoMCkpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9yaWdpbiA9PT0gJ2tleWJvYXJkJykge1xuXHRcdFx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5zaG93KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdGlmIChicm5EZXZNb2RlICYmICF0aGlzLmNvbXB1dGVkQXJpYURlc2NyaWJlZEJ5KCkpIHtcblx0XHRcdGNvbnNvbGUud2FybignQnJuVG9vbHRpcDogXCJhcmlhLWRlc2NyaWJlZGJ5XCIgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciBhY2Nlc3NpYmlsaXR5Jyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3Bvc2UgdGhlIHRvb2x0aXAgd2hlbiBkZXN0cm95ZWQuXG5cdCAqL1xuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHRjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KTtcblxuXHRcdGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG5cdFx0XHR0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGxpc3RlbmVycyBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yXG5cdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5mb3JFYWNoKChbZXZlbnQsIGxpc3RlbmVyXSkgPT5cblx0XHRcdG5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHBhc3NpdmVMaXN0ZW5lck9wdGlvbnMpLFxuXHRcdCk7XG5cdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGggPSAwO1xuXG5cdFx0dGhpcy5fZGVzdHJveWVkLm5leHQoKTtcblx0XHR0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcblxuXHRcdHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24obmF0aXZlRWxlbWVudCwgdGhpcy5jb21wdXRlZEFyaWFEZXNjcmliZWRCeSgpKCksICd0b29sdGlwJyk7XG5cdFx0dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKG5hdGl2ZUVsZW1lbnQpO1xuXHR9XG5cblx0LyoqIFNob3dzIHRoZSB0b29sdGlwIGFmdGVyIHRoZSBkZWxheSBpbiBtcywgZGVmYXVsdHMgdG8gdG9vbHRpcC1kZWxheS1zaG93IG9yIDBtcyBpZiBubyBpbnB1dCAqL1xuXHRzaG93KGRlbGF5OiBudW1iZXIgPSB0aGlzLnNob3dEZWxheSgpLCBvcmlnaW4/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5icm5Ub29sdGlwRGlzYWJsZWQoKSB8fCB0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpIHtcblx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMuX2NyZWF0ZU92ZXJsYXkob3JpZ2luKTtcblx0XHR0aGlzLl9kZXRhY2goKTtcblx0XHR0aGlzLl9wb3J0YWwgPSB0aGlzLl9wb3J0YWwgfHwgbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLl90b29sdGlwQ29tcG9uZW50LCB0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtcblx0XHRjb25zdCBpbnN0YW5jZSA9ICh0aGlzLl90b29sdGlwSW5zdGFuY2UgPSBvdmVybGF5UmVmLmF0dGFjaCh0aGlzLl9wb3J0YWwpLmluc3RhbmNlKTtcblx0XHRpbnN0YW5jZS50cmlnZ2VyRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRpbnN0YW5jZS5tb3VzZUxlYXZlSGlkZURlbGF5ID0gdGhpcy5oaWRlRGVsYXkoKTtcblx0XHRpbnN0YW5jZS50b29sdGlwQ2xhc3Nlcy5zZXQodGhpcy5jb21wdXRlZFRvb2x0aXBDb250ZW50Q2xhc3NlcygpKCkpO1xuXHRcdGluc3RhbmNlLmV4aXRBbmltYXRpb25EdXJhdGlvbiA9IHRoaXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9uKCk7XG5cdFx0aW5zdGFuY2Uuc2lkZS5zZXQodGhpcy5fY3VycmVudFBvc2l0aW9uID8/ICdhYm92ZScpO1xuXHRcdGluc3RhbmNlLmFmdGVySGlkZGVuLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9kZXRhY2goKSk7XG5cdFx0dGhpcy5fdXBkYXRlVG9vbHRpcENvbnRlbnQoKTtcblx0XHRpbnN0YW5jZS5zaG93KGRlbGF5KTtcblx0fVxuXG5cdC8qKiBIaWRlcyB0aGUgdG9vbHRpcCBhZnRlciB0aGUgZGVsYXkgaW4gbXMsIGRlZmF1bHRzIHRvIHRvb2x0aXAtZGVsYXktaGlkZSBvciAwbXMgaWYgbm8gaW5wdXQgKi9cblx0aGlkZShkZWxheTogbnVtYmVyID0gdGhpcy5oaWRlRGVsYXkoKSwgZXhpdEFuaW1hdGlvbkR1cmF0aW9uOiBudW1iZXIgPSB0aGlzLmV4aXRBbmltYXRpb25EdXJhdGlvbigpKTogdm9pZCB7XG5cdFx0Y29uc3QgaW5zdGFuY2UgPSB0aGlzLl90b29sdGlwSW5zdGFuY2U7XG5cdFx0aWYgKGluc3RhbmNlKSB7XG5cdFx0XHRpZiAoaW5zdGFuY2UuaXNWaXNpYmxlKCkpIHtcblx0XHRcdFx0aW5zdGFuY2UuaGlkZShkZWxheSwgZXhpdEFuaW1hdGlvbkR1cmF0aW9uKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGluc3RhbmNlLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO1xuXHRcdFx0XHR0aGlzLl9kZXRhY2goKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0b2dnbGUob3JpZ2luPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogdm9pZCB7XG5cdFx0dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3codW5kZWZpbmVkLCBvcmlnaW4pO1xuXHR9XG5cblx0X2lzVG9vbHRpcFZpc2libGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5fdG9vbHRpcEluc3RhbmNlICYmIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKTtcblx0fVxuXG5cdHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkob3JpZ2luPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogT3ZlcmxheVJlZiB7XG5cdFx0aWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcblx0XHRcdGNvbnN0IGV4aXN0aW5nU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xuXG5cdFx0XHRpZiAoKCF0aGlzLnBvc2l0aW9uQXRPcmlnaW4oKSB8fCAhb3JpZ2luKSAmJiBleGlzdGluZ1N0cmF0ZWd5Ll9vcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9kZXRhY2goKTtcblx0XHR9XG5cblx0XHRjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3JzID0gdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5fZWxlbWVudFJlZik7XG5cblx0XHQvLyBDcmVhdGUgY29ubmVjdGVkIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgbGlzdGVucyBmb3Igc2Nyb2xsIGV2ZW50cyB0byByZXBvc2l0aW9uLlxuXHRcdGNvbnN0IHN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVxuXHRcdFx0LnBvc2l0aW9uKClcblx0XHRcdC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMucG9zaXRpb25BdE9yaWdpbigpID8gb3JpZ2luIHx8IHRoaXMuX2VsZW1lbnRSZWYgOiB0aGlzLl9lbGVtZW50UmVmKVxuXHRcdFx0LndpdGhUcmFuc2Zvcm1PcmlnaW5PbihgLiR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXBgKVxuXHRcdFx0LndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG5cdFx0XHQud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKVxuXHRcdFx0LndpdGhTY3JvbGxhYmxlQ29udGFpbmVycyhzY3JvbGxhYmxlQW5jZXN0b3JzKTtcblxuXHRcdHN0cmF0ZWd5LnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuXHRcdFx0dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3MoY2hhbmdlLmNvbm5lY3Rpb25QYWlyKTtcblxuXHRcdFx0aWYgKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSkge1xuXHRcdFx0XHRpZiAoY2hhbmdlLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkICYmIHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKSkge1xuXHRcdFx0XHRcdC8vIEFmdGVyIHBvc2l0aW9uIGNoYW5nZXMgb2NjdXIgYW5kIHRoZSBvdmVybGF5IGlzIGNsaXBwZWQgYnlcblx0XHRcdFx0XHQvLyBhIHBhcmVudCBzY3JvbGxhYmxlIHRoZW4gY2xvc2UgdGhlIHRvb2x0aXAuXG5cdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmhpZGUoMCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xuXHRcdFx0ZGlyZWN0aW9uOiB0aGlzLl9kaXIsXG5cdFx0XHRwb3NpdGlvblN0cmF0ZWd5OiBzdHJhdGVneSxcblx0XHRcdHBhbmVsQ2xhc3M6IGAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke1BBTkVMX0NMQVNTfWAsXG5cdFx0XHRzY3JvbGxTdHJhdGVneTogdGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxcblx0XHR9KTtcblxuXHRcdHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpO1xuXG5cdFx0dGhpcy5fb3ZlcmxheVJlZlxuXHRcdFx0LmRldGFjaG1lbnRzKClcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9kZXRhY2goKSk7XG5cblx0XHR0aGlzLl9vdmVybGF5UmVmXG5cdFx0XHQub3V0c2lkZVBvaW50ZXJFdmVudHMoKVxuXHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKTtcblxuXHRcdHRoaXMuX292ZXJsYXlSZWZcblx0XHRcdC5rZXlkb3duRXZlbnRzKClcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5oaWRlKDApKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRpZiAodGhpcy5fZGVmYXVsdE9wdGlvbnM/LmRpc2FibGVUb29sdGlwSW50ZXJhY3Rpdml0eSkge1xuXHRcdFx0dGhpcy5fb3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKGAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZWApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9vdmVybGF5UmVmO1xuXHR9XG5cblx0cHJpdmF0ZSBfZGV0YWNoKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSB7XG5cdFx0XHR0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSA9IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIF91cGRhdGVQb3NpdGlvbihvdmVybGF5UmVmOiBPdmVybGF5UmVmKSB7XG5cdFx0Y29uc3QgcG9zaXRpb24gPSBvdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xuXHRcdGNvbnN0IG9yaWdpbiA9IHRoaXMuX2dldE9yaWdpbigpO1xuXHRcdGNvbnN0IG92ZXJsYXkgPSB0aGlzLl9nZXRPdmVybGF5UG9zaXRpb24oKTtcblxuXHRcdHBvc2l0aW9uLndpdGhQb3NpdGlvbnMoW1xuXHRcdFx0dGhpcy5fYWRkT2Zmc2V0KHsgLi4ub3JpZ2luLm1haW4sIC4uLm92ZXJsYXkubWFpbiB9KSxcblx0XHRcdHRoaXMuX2FkZE9mZnNldCh7IC4uLm9yaWdpbi5mYWxsYmFjaywgLi4ub3ZlcmxheS5mYWxsYmFjayB9KSxcblx0XHRdKTtcblx0fVxuXG5cdC8qKiBBZGRzIHRoZSBjb25maWd1cmVkIG9mZnNldCB0byBhIHBvc2l0aW9uLiBVc2VkIGFzIGEgaG9vayBmb3IgY2hpbGQgY2xhc3Nlcy4gKi9cblx0cHJvdGVjdGVkIF9hZGRPZmZzZXQocG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uKTogQ29ubmVjdGVkUG9zaXRpb24ge1xuXHRcdGNvbnN0IG9mZnNldCA9IFVOQk9VTkRFRF9BTkNIT1JfR0FQO1xuXHRcdGNvbnN0IGlzTHRyID0gIXRoaXMuX2RpciB8fCB0aGlzLl9kaXIudmFsdWUgPT09ICdsdHInO1xuXG5cdFx0aWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICd0b3AnKSB7XG5cdFx0XHRwb3NpdGlvbi5vZmZzZXRZID0gLW9mZnNldDtcblx0XHR9IGVsc2UgaWYgKHBvc2l0aW9uLm9yaWdpblkgPT09ICdib3R0b20nKSB7XG5cdFx0XHRwb3NpdGlvbi5vZmZzZXRZID0gb2Zmc2V0O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24ub3JpZ2luWCA9PT0gJ3N0YXJ0Jykge1xuXHRcdFx0cG9zaXRpb24ub2Zmc2V0WCA9IGlzTHRyID8gLW9mZnNldCA6IG9mZnNldDtcblx0XHR9IGVsc2UgaWYgKHBvc2l0aW9uLm9yaWdpblggPT09ICdlbmQnKSB7XG5cdFx0XHRwb3NpdGlvbi5vZmZzZXRYID0gaXNMdHIgPyBvZmZzZXQgOiAtb2Zmc2V0O1xuXHRcdH1cblxuXHRcdHJldHVybiBwb3NpdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBvcmlnaW4gcG9zaXRpb24gYW5kIGEgZmFsbGJhY2sgcG9zaXRpb24gYmFzZWQgb24gdGhlIHVzZXIncyBwb3NpdGlvbiBwcmVmZXJlbmNlLlxuXHQgKiBUaGUgZmFsbGJhY2sgcG9zaXRpb24gaXMgdGhlIGludmVyc2Ugb2YgdGhlIG9yaWdpbiAoZS5nLiBgJ2JlbG93JyAtPiAnYWJvdmUnYCkuXG5cdCAqL1xuXHRfZ2V0T3JpZ2luKCk6IHsgbWFpbjogT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uOyBmYWxsYmFjazogT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uIH0ge1xuXHRcdGNvbnN0IGlzTHRyID0gIXRoaXMuX2RpciB8fCB0aGlzLl9kaXIudmFsdWUgPT09ICdsdHInO1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbigpO1xuXHRcdGxldCBvcmlnaW5Qb3NpdGlvbjogT3JpZ2luQ29ubmVjdGlvblBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uID09PSAnYWJvdmUnIHx8IHBvc2l0aW9uID09PSAnYmVsb3cnKSB7XG5cdFx0XHRvcmlnaW5Qb3NpdGlvbiA9IHsgb3JpZ2luWDogJ2NlbnRlcicsIG9yaWdpblk6IHBvc2l0aW9uID09PSAnYWJvdmUnID8gJ3RvcCcgOiAnYm90dG9tJyB9O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnIHx8IChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmIGlzTHRyKSB8fCAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgIWlzTHRyKSkge1xuXHRcdFx0b3JpZ2luUG9zaXRpb24gPSB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdjZW50ZXInIH07XG5cdFx0fSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2FmdGVyJyB8fCAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgaXNMdHIpIHx8IChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmICFpc0x0cikpIHtcblx0XHRcdG9yaWdpblBvc2l0aW9uID0geyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBpc0Rldk1vZGUoKSA9PT0gJ3VuZGVmaW5lZCcgfHwgaXNEZXZNb2RlKCkpIHtcblx0XHRcdHRocm93IGdldEJyblRvb2x0aXBJbnZhbGlkUG9zaXRpb25FcnJvcihwb3NpdGlvbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl9pbnZlcnRQb3NpdGlvbihvcmlnaW5Qb3NpdGlvbiEub3JpZ2luWCwgb3JpZ2luUG9zaXRpb24hLm9yaWdpblkpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG1haW46IG9yaWdpblBvc2l0aW9uISxcblx0XHRcdGZhbGxiYWNrOiB7IG9yaWdpblg6IHgsIG9yaWdpblk6IHkgfSxcblx0XHR9O1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIG92ZXJsYXkgcG9zaXRpb24gYW5kIGEgZmFsbGJhY2sgcG9zaXRpb24gYmFzZWQgb24gdGhlIHVzZXIncyBwcmVmZXJlbmNlICovXG5cdF9nZXRPdmVybGF5UG9zaXRpb24oKTogeyBtYWluOiBPdmVybGF5Q29ubmVjdGlvblBvc2l0aW9uOyBmYWxsYmFjazogT3ZlcmxheUNvbm5lY3Rpb25Qb3NpdGlvbiB9IHtcblx0XHRjb25zdCBpc0x0ciA9ICF0aGlzLl9kaXIgfHwgdGhpcy5fZGlyLnZhbHVlID09PSAnbHRyJztcblx0XHRjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24oKTtcblx0XHRsZXQgb3ZlcmxheVBvc2l0aW9uOiBPdmVybGF5Q29ubmVjdGlvblBvc2l0aW9uO1xuXG5cdFx0aWYgKHBvc2l0aW9uID09PSAnYWJvdmUnKSB7XG5cdFx0XHRvdmVybGF5UG9zaXRpb24gPSB7IG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICdib3R0b20nIH07XG5cdFx0fSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2JlbG93Jykge1xuXHRcdFx0b3ZlcmxheVBvc2l0aW9uID0geyBvdmVybGF5WDogJ2NlbnRlcicsIG92ZXJsYXlZOiAndG9wJyB9O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnIHx8IChwb3NpdGlvbiA9PT0gJ2xlZnQnICYmIGlzTHRyKSB8fCAocG9zaXRpb24gPT09ICdyaWdodCcgJiYgIWlzTHRyKSkge1xuXHRcdFx0b3ZlcmxheVBvc2l0aW9uID0geyBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnY2VudGVyJyB9O1xuXHRcdH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdhZnRlcicgfHwgKHBvc2l0aW9uID09PSAncmlnaHQnICYmIGlzTHRyKSB8fCAocG9zaXRpb24gPT09ICdsZWZ0JyAmJiAhaXNMdHIpKSB7XG5cdFx0XHRvdmVybGF5UG9zaXRpb24gPSB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicgfTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBpc0Rldk1vZGUoKSA9PT0gJ3VuZGVmaW5lZCcgfHwgaXNEZXZNb2RlKCkpIHtcblx0XHRcdHRocm93IGdldEJyblRvb2x0aXBJbnZhbGlkUG9zaXRpb25FcnJvcihwb3NpdGlvbik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgeyB4LCB5IH0gPSB0aGlzLl9pbnZlcnRQb3NpdGlvbihvdmVybGF5UG9zaXRpb24hLm92ZXJsYXlYLCBvdmVybGF5UG9zaXRpb24hLm92ZXJsYXlZKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRtYWluOiBvdmVybGF5UG9zaXRpb24hLFxuXHRcdFx0ZmFsbGJhY2s6IHsgb3ZlcmxheVg6IHgsIG92ZXJsYXlZOiB5IH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKiBVcGRhdGVzIHRoZSB0b29sdGlwIG1lc3NhZ2UgYW5kIHJlcG9zaXRpb25zIHRoZSBvdmVybGF5IGFjY29yZGluZyB0byB0aGUgbmV3IG1lc3NhZ2UgbGVuZ3RoICovXG5cdHByaXZhdGUgX3VwZGF0ZVRvb2x0aXBDb250ZW50KCk6IHZvaWQge1xuXHRcdC8vIE11c3Qgd2FpdCBmb3IgdGhlIHRlbXBsYXRlIHRvIGJlIHBhaW50ZWQgdG8gdGhlIHRvb2x0aXAgc28gdGhhdCB0aGUgb3ZlcmxheSBjYW4gcHJvcGVybHlcblx0XHQvLyBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgcG9zaXRpb25pbmcgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIHRlay1wYXRlLlxuXHRcdGlmICh0aGlzLl90b29sdGlwSW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5jb250ZW50ID0gdGhpcy5icm5Ub29sdGlwVHJpZ2dlclN0YXRlKCk7XG5cdFx0XHR0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpO1xuXG5cdFx0XHR0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5fdG9vbHRpcEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIEludmVydHMgYW4gb3ZlcmxheSBwb3NpdGlvbi4gKi9cblx0cHJpdmF0ZSBfaW52ZXJ0UG9zaXRpb24oeDogSG9yaXpvbnRhbENvbm5lY3Rpb25Qb3MsIHk6IFZlcnRpY2FsQ29ubmVjdGlvblBvcykge1xuXHRcdGlmICh0aGlzLnBvc2l0aW9uKCkgPT09ICdhYm92ZScgfHwgdGhpcy5wb3NpdGlvbigpID09PSAnYmVsb3cnKSB7XG5cdFx0XHRpZiAoeSA9PT0gJ3RvcCcpIHtcblx0XHRcdFx0eSA9ICdib3R0b20nO1xuXHRcdFx0fSBlbHNlIGlmICh5ID09PSAnYm90dG9tJykge1xuXHRcdFx0XHR5ID0gJ3RvcCc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh4ID09PSAnZW5kJykge1xuXHRcdFx0XHR4ID0gJ3N0YXJ0Jztcblx0XHRcdH0gZWxzZSBpZiAoeCA9PT0gJ3N0YXJ0Jykge1xuXHRcdFx0XHR4ID0gJ2VuZCc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgeCwgeSB9O1xuXHR9XG5cblx0LyoqIFVwZGF0ZXMgdGhlIGNsYXNzIG9uIHRoZSBvdmVybGF5IHBhbmVsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLiAqL1xuXHRwcml2YXRlIF91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhjb25uZWN0aW9uUGFpcjogQ29ubmVjdGlvblBvc2l0aW9uUGFpcik6IHZvaWQge1xuXHRcdGNvbnN0IHsgb3ZlcmxheVksIG9yaWdpblgsIG9yaWdpblkgfSA9IGNvbm5lY3Rpb25QYWlyO1xuXHRcdGxldCBuZXdQb3NpdGlvbjogVG9vbHRpcFBvc2l0aW9uO1xuXG5cdFx0Ly8gSWYgdGhlIG92ZXJsYXkgaXMgaW4gdGhlIG1pZGRsZSBhbG9uZyB0aGUgWSBheGlzLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgaXQncyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyLlxuXHRcdGlmIChvdmVybGF5WSA9PT0gJ2NlbnRlcicpIHtcblx0XHRcdC8vIE5vdGUgdGhhdCBzaW5jZSB0aGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgZm9yIHN0eWxpbmcsIHdlIHdhbnQgdG9cblx0XHRcdC8vIHJlc29sdmUgYHN0YXJ0YCBhbmQgYGVuZGAgdG8gdGhlaXIgcmVhbCB2YWx1ZXMsIG90aGVyd2lzZSBjb25zdW1lcnNcblx0XHRcdC8vIHdvdWxkIGhhdmUgdG8gcmVtZW1iZXIgdG8gZG8gaXQgdGhlbXNlbHZlcyBvbiBlYWNoIGNvbnN1bXB0aW9uLlxuXHRcdFx0aWYgKHRoaXMuX2RpciAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnKSB7XG5cdFx0XHRcdG5ld1Bvc2l0aW9uID0gb3JpZ2luWCA9PT0gJ2VuZCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3UG9zaXRpb24gPSBvcmlnaW5YID09PSAnc3RhcnQnID8gJ2xlZnQnIDogJ3JpZ2h0Jztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3UG9zaXRpb24gPSBvdmVybGF5WSA9PT0gJ2JvdHRvbScgJiYgb3JpZ2luWSA9PT0gJ3RvcCcgPyAnYWJvdmUnIDogJ2JlbG93Jztcblx0XHR9XG5cblx0XHRpZiAobmV3UG9zaXRpb24gIT09IHRoaXMuX2N1cnJlbnRQb3NpdGlvbikge1xuXHRcdFx0dGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaWRlLnNldChuZXdQb3NpdGlvbik7XG5cdFx0XHR0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBuZXdQb3NpdGlvbjtcblx0XHR9XG5cdH1cblxuXHQvKiogQmluZHMgdGhlIHBvaW50ZXIgZXZlbnRzIHRvIHRoZSB0b29sdGlwIHRyaWdnZXIuICovXG5cdHByaXZhdGUgX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKTogdm9pZCB7XG5cdFx0Ly8gT3B0aW1pemF0aW9uOiBEZWZlciBob29raW5nIHVwIGV2ZW50cyBpZiB0aGVyZSdzIG5vIGNvbnRlbnQgb3IgdGhlIHRvb2x0aXAgaXMgZGlzYWJsZWQuXG5cdFx0aWYgKFxuXHRcdFx0dGhpcy5icm5Ub29sdGlwRGlzYWJsZWQoKSB8fFxuXHRcdFx0IXRoaXMuYnJuVG9vbHRpcFRyaWdnZXJTdGF0ZSgpIHx8XG5cdFx0XHQhdGhpcy5fdmlld0luaXRpYWxpemVkIHx8XG5cdFx0XHR0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBtb3VzZSBldmVudHMgc2hvdWxkbid0IGJlIGJvdW5kIG9uIG1vYmlsZSBkZXZpY2VzLCBiZWNhdXNlIHRoZXkgY2FuIHByZXZlbnQgdGhlXG5cdFx0Ly8gZmlyc3QgdGFwIGZyb20gZmlyaW5nIGl0cyBjbGljayBldmVudCBvciBjYW4gY2F1c2UgdGhlIHRvb2x0aXAgdG8gb3BlbiBmb3IgY2xpY2tzLlxuXHRcdGlmICh0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKSkge1xuXHRcdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFtcblx0XHRcdFx0J21vdXNlZW50ZXInLFxuXHRcdFx0XHQoZXZlbnQpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKTtcblx0XHRcdFx0XHRsZXQgcG9pbnQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKChldmVudCBhcyBNb3VzZUV2ZW50KS54ICE9PSB1bmRlZmluZWQgJiYgKGV2ZW50IGFzIE1vdXNlRXZlbnQpLnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cG9pbnQgPSBldmVudCBhcyBNb3VzZUV2ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnNob3codW5kZWZpbmVkLCBwb2ludCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRdKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMudG91Y2hHZXN0dXJlcygpICE9PSAnb2ZmJykge1xuXHRcdFx0dGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKTtcblxuXHRcdFx0dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFtcblx0XHRcdFx0J3RvdWNoc3RhcnQnLFxuXHRcdFx0XHQoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0b3VjaCA9IChldmVudCBhcyBUb3VjaEV2ZW50KS50YXJnZXRUb3VjaGVzPy5bMF07XG5cdFx0XHRcdFx0Y29uc3Qgb3JpZ2luID0gdG91Y2ggPyB7IHg6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFkgfSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHQvLyBOb3RlIHRoYXQgaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBkb24ndCBgcHJldmVudERlZmF1bHRgIGhlcmUsXG5cdFx0XHRcdFx0Ly8gYmVjYXVzZSBpdCBjYW4gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBmaXJpbmcgb24gdGhlIGVsZW1lbnQuXG5cdFx0XHRcdFx0dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCk7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KTtcblx0XHRcdFx0XHR0aGlzLl90b3VjaHN0YXJ0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93KHVuZGVmaW5lZCwgb3JpZ2luKSwgTE9OR1BSRVNTX0RFTEFZKTtcblx0XHRcdFx0fSxcblx0XHRcdF0pO1xuXHRcdH1cblxuXHRcdHRoaXMuX2FkZExpc3RlbmVycyh0aGlzLl9wYXNzaXZlTGlzdGVuZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fcG9pbnRlckV4aXRFdmVudHNJbml0aWFsaXplZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGV4aXRMaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSA9IFtdO1xuXHRcdGlmICh0aGlzLl9wbGF0Zm9ybVN1cHBvcnRzTW91c2VFdmVudHMoKSkge1xuXHRcdFx0ZXhpdExpc3RlbmVycy5wdXNoKFxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0J21vdXNlbGVhdmUnLFxuXHRcdFx0XHRcdChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3VGFyZ2V0ID0gKGV2ZW50IGFzIE1vdXNlRXZlbnQpLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSB8IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIW5ld1RhcmdldCB8fCAhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMobmV3VGFyZ2V0KSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRbJ3doZWVsJywgKGV2ZW50KSA9PiB0aGlzLl93aGVlbExpc3RlbmVyKGV2ZW50IGFzIFdoZWVsRXZlbnQpXSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnRvdWNoR2VzdHVyZXMoKSAhPT0gJ29mZicpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCk7XG5cdFx0XHRjb25zdCB0b3VjaGVuZExpc3RlbmVyID0gKCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpO1xuXHRcdFx0XHR0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnM/LnRvdWNoZW5kSGlkZURlbGF5KTtcblx0XHRcdH07XG5cblx0XHRcdGV4aXRMaXN0ZW5lcnMucHVzaChbJ3RvdWNoZW5kJywgdG91Y2hlbmRMaXN0ZW5lcl0sIFsndG91Y2hjYW5jZWwnLCB0b3VjaGVuZExpc3RlbmVyXSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYWRkTGlzdGVuZXJzKGV4aXRMaXN0ZW5lcnMpO1xuXHRcdHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaCguLi5leGl0TGlzdGVuZXJzKTtcblx0fVxuXG5cdHByaXZhdGUgX2FkZExpc3RlbmVycyhsaXN0ZW5lcnM6IChyZWFkb25seSBbc3RyaW5nLCBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0XSlbXSkge1xuXHRcdGxpc3RlbmVycy5mb3JFYWNoKChbZXZlbnQsIGxpc3RlbmVyXSkgPT4ge1xuXHRcdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuX3BsYXRmb3JtLklPUyAmJiAhdGhpcy5fcGxhdGZvcm0uQU5EUk9JRDtcblx0fVxuXG5cdC8qKiBMaXN0ZW5lciBmb3IgdGhlIGB3aGVlbGAgZXZlbnQgb24gdGhlIGVsZW1lbnQuICovXG5cdHByaXZhdGUgX3doZWVsTGlzdGVuZXIoZXZlbnQ6IFdoZWVsRXZlbnQpIHtcblx0XHRpZiAodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKSB7XG5cdFx0XHRjb25zdCBlbGVtZW50VW5kZXJQb2ludGVyID0gdGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdC8vIE9uIG5vbi10b3VjaCBkZXZpY2VzIHdlIGRlcGVuZCBvbiB0aGUgYG1vdXNlbGVhdmVgIGV2ZW50IHRvIGNsb3NlIHRoZSB0b29sdGlwLCBidXQgaXRcblx0XHRcdC8vIHdvbid0IGZpcmUgaWYgdGhlIHVzZXIgc2Nyb2xscyBhd2F5IHVzaW5nIHRoZSB3aGVlbCB3aXRob3V0IG1vdmluZyB0aGVpciBjdXJzb3IuIFdlXG5cdFx0XHQvLyB3b3JrIGFyb3VuZCBpdCBieSBmaW5kaW5nIHRoZSBlbGVtZW50IHVuZGVyIHRoZSB1c2VyJ3MgY3Vyc29yIGFuZCBjbG9zaW5nIHRoZSB0b29sdGlwXG5cdFx0XHQvLyBpZiBpdCdzIG5vdCB0aGUgdHJpZ2dlci5cblx0XHRcdGlmIChlbGVtZW50VW5kZXJQb2ludGVyICE9PSBlbGVtZW50ICYmICFlbGVtZW50LmNvbnRhaW5zKGVsZW1lbnRVbmRlclBvaW50ZXIpKSB7XG5cdFx0XHRcdHRoaXMuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBEaXNhYmxlcyB0aGUgbmF0aXZlIGJyb3dzZXIgZ2VzdHVyZXMsIGJhc2VkIG9uIGhvdyB0aGUgdG9vbHRpcCBoYXMgYmVlbiBjb25maWd1cmVkLiAqL1xuXHRwcml2YXRlIF9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcblx0XHRjb25zdCBnZXN0dXJlcyA9IHRoaXMudG91Y2hHZXN0dXJlcygpO1xuXG5cdFx0aWYgKGdlc3R1cmVzICE9PSAnb2ZmJykge1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IHN0eWxlID0gZWxlbWVudC5zdHlsZTtcblxuXHRcdFx0Ly8gSWYgZ2VzdHVyZXMgYXJlIHNldCB0byBgYXV0b2AsIHdlIGRvbid0IGRpc2FibGUgdGV4dCBzZWxlY3Rpb24gb24gaW5wdXRzIGFuZFxuXHRcdFx0Ly8gdGV4dGFyZWFzLCBiZWNhdXNlIGl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gdHlwaW5nIGludG8gdGhlbSBvbiBpT1MgU2FmYXJpLlxuXHRcdFx0aWYgKGdlc3R1cmVzID09PSAnb24nIHx8IChlbGVtZW50Lm5vZGVOYW1lICE9PSAnSU5QVVQnICYmIGVsZW1lbnQubm9kZU5hbWUgIT09ICdURVhUQVJFQScpKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRcdHN0eWxlLnVzZXJTZWxlY3QgPSAoc3R5bGUgYXMgYW55KS5tc1VzZXJTZWxlY3QgPSBzdHlsZS53ZWJraXRVc2VyU2VsZWN0ID0gKHN0eWxlIGFzIGFueSkuTW96VXNlclNlbGVjdCA9ICdub25lJztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBgYXV0b2AgZ2VzdHVyZXMgYW5kIHRoZSBlbGVtZW50IHVzZXMgbmF0aXZlIEhUTUwgZHJhZ2dpbmcsXG5cdFx0XHQvLyB3ZSBkb24ndCBzZXQgYC13ZWJraXQtdXNlci1kcmFnYCBiZWNhdXNlIGl0IHByZXZlbnRzIHRoZSBuYXRpdmUgYmVoYXZpb3IuXG5cdFx0XHRpZiAoZ2VzdHVyZXMgPT09ICdvbicgfHwgIWVsZW1lbnQuZHJhZ2dhYmxlKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHRcdChzdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJEcmFnID0gJ25vbmUnO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZS50b3VjaEFjdGlvbiA9ICdub25lJztcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFx0XHQoc3R5bGUgYXMgYW55KS53ZWJraXRUYXBIaWdobGlnaHRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG5cdFx0fVxuXHR9XG59XG4iXX0=","import { BrnTooltip } from './lib/brn-tooltip';\nimport { BrnTooltipContent } from './lib/brn-tooltip-content';\nimport { BrnTooltipContentTemplate } from './lib/brn-tooltip-content-template';\nimport { BrnTooltipTrigger } from './lib/brn-tooltip-trigger';\nexport * from './lib/brn-tooltip';\nexport * from './lib/brn-tooltip-content';\nexport * from './lib/brn-tooltip-content-template';\nexport * from './lib/brn-tooltip-trigger';\nexport * from './lib/brn-tooltip.token';\nexport const BrnTooltipImports = [BrnTooltip, BrnTooltipContentTemplate, BrnTooltipTrigger, BrnTooltipContent];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3Rvb2x0aXAvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUFVLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyblRvb2x0aXAgfSBmcm9tICcuL2xpYi9icm4tdG9vbHRpcCc7XG5pbXBvcnQgeyBCcm5Ub29sdGlwQ29udGVudCB9IGZyb20gJy4vbGliL2Jybi10b29sdGlwLWNvbnRlbnQnO1xuaW1wb3J0IHsgQnJuVG9vbHRpcENvbnRlbnRUZW1wbGF0ZSB9IGZyb20gJy4vbGliL2Jybi10b29sdGlwLWNvbnRlbnQtdGVtcGxhdGUnO1xuaW1wb3J0IHsgQnJuVG9vbHRpcFRyaWdnZXIgfSBmcm9tICcuL2xpYi9icm4tdG9vbHRpcC10cmlnZ2VyJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRvb2x0aXAnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRvb2x0aXAtY29udGVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdG9vbHRpcC1jb250ZW50LXRlbXBsYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jybi10b29sdGlwLXRyaWdnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRvb2x0aXAudG9rZW4nO1xuXG5leHBvcnQgY29uc3QgQnJuVG9vbHRpcEltcG9ydHMgPSBbQnJuVG9vbHRpcCwgQnJuVG9vbHRpcENvbnRlbnRUZW1wbGF0ZSwgQnJuVG9vbHRpcFRyaWdnZXIsIEJyblRvb2x0aXBDb250ZW50XSBhcyBjb25zdDtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi10b29sdGlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi90b29sdGlwL3NyYy9zcGFydGFuLW5nLWJyYWluLXRvb2x0aXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
|