{"version":3,"file":"ng-flex-layout-core.mjs","sources":["../../../../projects/libs/flex-layout/core/browser-provider.ts","../../../../projects/libs/flex-layout/core/module.ts","../../../../projects/libs/flex-layout/core/media-change.ts","../../../../projects/libs/flex-layout/core/stylesheet-map/stylesheet-map.ts","../../../../projects/libs/flex-layout/core/stylesheet-map/index.ts","../../../../projects/libs/flex-layout/core/tokens/library-config.ts","../../../../projects/libs/flex-layout/core/tokens/server-token.ts","../../../../projects/libs/flex-layout/core/tokens/breakpoint-token.ts","../../../../projects/libs/flex-layout/core/tokens/index.ts","../../../../projects/libs/flex-layout/core/add-alias.ts","../../../../projects/libs/flex-layout/core/style-builder/style-builder.ts","../../../../projects/libs/flex-layout/core/style-utils/style-utils.ts","../../../../projects/libs/flex-layout/core/utils/sort.ts","../../../../projects/libs/flex-layout/core/match-media/match-media.ts","../../../../projects/libs/flex-layout/core/breakpoints/data/break-points.ts","../../../../projects/libs/flex-layout/core/breakpoints/data/orientation-break-points.ts","../../../../projects/libs/flex-layout/core/breakpoints/breakpoint-tools.ts","../../../../projects/libs/flex-layout/core/breakpoints/break-points-token.ts","../../../../projects/libs/flex-layout/core/breakpoints/break-point-registry.ts","../../../../projects/libs/flex-layout/core/media-marshaller/print-hook.ts","../../../../projects/libs/flex-layout/core/media-marshaller/media-marshaller.ts","../../../../projects/libs/flex-layout/core/base/base2.ts","../../../../projects/libs/flex-layout/core/base/index.ts","../../../../projects/libs/flex-layout/core/breakpoints/index.ts","../../../../projects/libs/flex-layout/core/match-media/mock/mock-match-media.ts","../../../../projects/libs/flex-layout/core/match-media/index.ts","../../../../projects/libs/flex-layout/core/utils/array.ts","../../../../projects/libs/flex-layout/core/media-observer/media-observer.ts","../../../../projects/libs/flex-layout/core/media-observer/index.ts","../../../../projects/libs/flex-layout/core/media-trigger/media-trigger.ts","../../../../projects/libs/flex-layout/core/media-trigger/index.ts","../../../../projects/libs/flex-layout/core/utils/index.ts","../../../../projects/libs/flex-layout/core/basis-validator/basis-validator.ts","../../../../projects/libs/flex-layout/core/multiply/multiplier.ts","../../../../projects/libs/flex-layout/core/public-api.ts","../../../../projects/libs/flex-layout/core/ng-flex-layout-core.ts"],"sourcesContent":["/**\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 {APP_BOOTSTRAP_LISTENER, PLATFORM_ID, InjectionToken} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\n\n/**\n * Find all of the server-generated stylings, if any, and remove them\n * This will be in the form of inline classes and the style block in the\n * head of the DOM\n */\nexport function removeStyles(_document: Document, platformId: Object) {\n    return () => {\n        if (isPlatformBrowser(platformId)) {\n            const elements = Array.from(_document.querySelectorAll(`[class*=${CLASS_NAME}]`));\n\n            // RegExp constructor should only be used if passing a variable to the constructor.\n            // When using static regular expression it is more performant to use reg exp literal.\n            // This is also needed to provide Safari 9 compatibility, please see\n            // https://stackoverflow.com/questions/37919802 for more discussion.\n            /* eslint-disable @typescript-eslint/no-unused-expressions */\n            const classRegex = /\\bflex-layout-.+?\\b/g;\n            elements.forEach(el => {\n                el.classList.contains(`${CLASS_NAME}ssr`) && el.parentNode ?\n                    el.parentNode.removeChild(el) : el.className.replace(classRegex, '');\n            });\n        }\n    };\n}\n\n/**\n *  Provider to remove SSR styles on the browser\n */\nexport const BROWSER_PROVIDER = {\n    provide: <InjectionToken<(() => void)[]>>APP_BOOTSTRAP_LISTENER,\n    useFactory: removeStyles,\n    deps: [DOCUMENT, PLATFORM_ID],\n    multi: true\n};\n\nexport const CLASS_NAME = 'flex-layout-';\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 {NgModule} from '@angular/core';\n\nimport {BROWSER_PROVIDER} from './browser-provider';\n\n\n/**\n * *****************************************************************\n * Define module for common Angular Layout utilities\n * *****************************************************************\n */\n@NgModule({\n    providers: [BROWSER_PROVIDER]\n})\nexport class CoreModule {\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 */\nexport type MediaQuerySubscriber = (changes: MediaChange) => void;\n\n/**\n * Class instances emitted [to observers] for each mql notification\n */\nexport class MediaChange {\n    property: string = '';\n    value: any;\n\n    /**\n   * @param matches whether the mediaQuery is currently activated\n   * @param mediaQuery e.g. (min-width: 600px) and (max-width: 959px)\n   * @param mqAlias e.g. gt-sm, md, gt-lg\n   * @param suffix e.g. GtSM, Md, GtLg\n   * @param priority the priority of activation for the given breakpoint\n   */\n    constructor(public matches = false,\n        public mediaQuery = 'all',\n        public mqAlias = '',\n        public suffix = '',\n        public priority = 0) {\n    }\n\n    /** Create an exact copy of the MediaChange */\n    clone(): MediaChange {\n        return new MediaChange(this.matches, this.mediaQuery, this.mqAlias, this.suffix);\n    }\n}\n\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 {Injectable} from '@angular/core';\n\n/**\n * Utility to emulate a CSS stylesheet\n *\n * This utility class stores all of the styles for a given HTML element\n * as a readonly `stylesheet` map.\n */\n@Injectable({providedIn: 'root'})\nexport class StylesheetMap {\n\n    readonly stylesheet = new Map<HTMLElement, Map<string, string|number>>();\n\n    /**\n   * Add an individual style to an HTML element\n   */\n    addStyleToElement(element: HTMLElement, style: string, value: string|number) {\n        const stylesheet = this.stylesheet.get(element);\n        if (stylesheet) {\n            stylesheet.set(style, value);\n        } else {\n            this.stylesheet.set(element, new Map([[style, value]]));\n        }\n    }\n\n    /**\n   * Clear the virtual stylesheet\n   */\n    clearStyles() {\n        this.stylesheet.clear();\n    }\n\n    /**\n   * Retrieve a given style for an HTML element\n   */\n    getStyleForElement(el: HTMLElement, styleName: string): string {\n        const styles = this.stylesheet.get(el);\n        let value = '';\n        if (styles) {\n            const style = styles.get(styleName);\n            if (typeof style === 'number' || typeof style === 'string') {\n                value = style + '';\n            }\n        }\n        return value;\n    }\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 */\n\nexport * from './stylesheet-map';\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 {InjectionToken} from '@angular/core';\nimport {Multiplier} from '../multiply/multiplier';\n\n/** a set of configuration options for FlexLayoutModule */\nexport interface LayoutConfigOptions {\n    addFlexToParent?: boolean\n    addOrientationBps?: boolean\n    disableDefaultBps?: boolean\n    disableVendorPrefixes?: boolean\n    serverLoaded?: boolean\n    useColumnBasisZero?: boolean\n    printWithBreakpoints?: string[]\n    mediaTriggerAutoRestore?: boolean\n    ssrObserveBreakpoints?: string[]\n    multiplier?: Multiplier\n    defaultUnit?: string\n    detectLayoutDisplay?: boolean\n}\n\nexport const DEFAULT_CONFIG: Required<LayoutConfigOptions> = {\n    addFlexToParent: true,\n    addOrientationBps: false,\n    disableDefaultBps: false,\n    disableVendorPrefixes: false,\n    serverLoaded: false,\n    useColumnBasisZero: true,\n    printWithBreakpoints: [],\n    mediaTriggerAutoRestore: true,\n    ssrObserveBreakpoints: [],\n    // This is disabled by default because otherwise the multiplier would\n    // run for all users, regardless of whether they're using this feature.\n    // Instead, we disable it by default, which requires this ugly cast.\n    multiplier: undefined as unknown as Multiplier,\n    defaultUnit: 'px',\n    detectLayoutDisplay: false,\n};\n\nexport const LAYOUT_CONFIG = new InjectionToken<LayoutConfigOptions>(\n    'Flex Layout token, config options for the library', {\n        providedIn: 'root',\n        factory: () => DEFAULT_CONFIG\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 {InjectionToken} from '@angular/core';\n\n/**\n * Token that is provided to tell whether the FlexLayoutServerModule\n * has been included in the bundle\n *\n * NOTE: This can be manually provided to disable styles when using SSR\n */\nexport const SERVER_TOKEN = new InjectionToken<boolean>(\n    'FlexLayoutServerLoaded', {\n        providedIn: 'root',\n        factory: () => false\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 {InjectionToken} from '@angular/core';\nimport {BreakPoint} from '../breakpoints/break-point';\n\nexport const BREAKPOINT = new InjectionToken<BreakPoint|BreakPoint[]|null>(\n    'Flex Layout token, collect all breakpoints into one provider', {\n        providedIn: 'root',\n        factory: () => null\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 */\n\nexport * from './library-config';\nexport * from './server-token';\nexport * from './breakpoint-token';\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 {MediaChange} from './media-change';\nimport {OptionalBreakPoint} from './breakpoints';\n\n/**\n * For the specified MediaChange, make sure it contains the breakpoint alias\n * and suffix (if available).\n */\nexport function mergeAlias(dest: MediaChange, source: OptionalBreakPoint): MediaChange {\n    dest = dest?.clone() ?? new MediaChange();\n    if (source) {\n        dest.mqAlias = source.alias;\n        dest.mediaQuery = source.mediaQuery;\n        dest.suffix = source.suffix as string;\n        dest.priority = source.priority as number;\n    }\n    return dest;\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 {StyleDefinition} from '../style-utils/style-utils';\n\n/** A class that encapsulates CSS style generation for common directives */\nexport abstract class StyleBuilder {\n\n    /** Whether to cache the generated output styles */\n    shouldCache = true;\n\n    /** Build the styles given an input string and configuration object from a host */\n    abstract buildStyles(input: string, parent?: Object): StyleDefinition;\n\n    /**\n   * Run a side effect computation given the input string and the computed styles\n   * from the build task and the host configuration object\n   * NOTE: This should be a no-op unless an algorithm is provided in a subclass\n   */\n    sideEffect(_input: string, _styles: StyleDefinition, _parent?: Object) {\n    }\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 { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser, isPlatformServer } from '@angular/common';\n\nimport { applyCssPrefixes } from 'ng-flex-layout/_private-utils';\nimport { StylesheetMap } from '../stylesheet-map/stylesheet-map';\nimport { SERVER_TOKEN } from '../tokens/server-token';\nimport { LAYOUT_CONFIG, LayoutConfigOptions } from '../tokens/library-config';\n\n@Injectable({ providedIn: 'root' })\nexport class StyleUtils {\n\n    constructor(private _serverStylesheet: StylesheetMap,\n        @Inject(SERVER_TOKEN) private _serverModuleLoaded: boolean,\n        @Inject(PLATFORM_ID) private _platformId: Object,\n        @Inject(LAYOUT_CONFIG) private layoutConfig: LayoutConfigOptions) { }\n\n    /**\n   * Applies styles given via string pair or object map to the directive element\n   */\n    applyStyleToElement(element: HTMLElement,\n        style: StyleDefinition | string,\n        value: string | number | null = null) {\n        let styles: StyleDefinition = {};\n        if (typeof style === 'string') {\n            styles[style] = value;\n            style = styles;\n        }\n        styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);\n        this._applyMultiValueStyleToElement(styles, element);\n    }\n\n    /**\n   * Applies styles given via string pair or object map to the directive's element\n   */\n    applyStyleToElements(style: StyleDefinition, elements: HTMLElement[] = []) {\n        const styles = this.layoutConfig.disableVendorPrefixes ? style : applyCssPrefixes(style);\n        elements.forEach(el => {\n            this._applyMultiValueStyleToElement(styles, el);\n        });\n    }\n\n    /**\n   * Determine the DOM element's Flexbox flow (flex-direction)\n   *\n   * Check inline style first then check computed (stylesheet) style\n   */\n    getFlowDirection(target: HTMLElement): [string, string] {\n        const query = 'flex-direction';\n        let value = this.lookupStyle(target, query);\n        const hasInlineValue = this.lookupInlineStyle(target, query) ||\n            (isPlatformServer(this._platformId) && this._serverModuleLoaded) ? value : '';\n\n        return [value || 'row', hasInlineValue];\n    }\n\n    hasWrap(target: HTMLElement): boolean {\n        const query = 'flex-wrap';\n        return this.lookupStyle(target, query) === 'wrap';\n    }\n\n    /**\n   * Find the DOM element's raw attribute value (if any)\n   */\n    lookupAttributeValue(element: HTMLElement, attribute: string): string {\n        return element.getAttribute(attribute) ?? '';\n    }\n\n    /**\n   * Find the DOM element's inline style value (if any)\n   */\n    lookupInlineStyle(element: HTMLElement, styleName: string): string {\n        return isPlatformBrowser(this._platformId) ?\n            element.style.getPropertyValue(styleName) : getServerStyle(element, styleName);\n    }\n\n    /**\n   * Determine the inline or inherited CSS style\n   * NOTE: platform-server has no implementation for getComputedStyle\n   */\n    lookupStyle(element: HTMLElement, styleName: string, inlineOnly = false): string {\n        let value = '';\n        if (element) {\n            let immediateValue = value = this.lookupInlineStyle(element, styleName);\n            if (!immediateValue) {\n                if (isPlatformBrowser(this._platformId)) {\n                    if (!inlineOnly) {\n                        value = getComputedStyle(element).getPropertyValue(styleName);\n                    }\n                } else {\n                    if (this._serverModuleLoaded) {\n                        value = this._serverStylesheet.getStyleForElement(element, styleName);\n                    }\n                }\n            }\n        }\n\n        // Note: 'inline' is the default of all elements, unless UA stylesheet overrides;\n        //       in which case getComputedStyle() should determine a valid value.\n        return value ? value.trim() : '';\n    }\n\n    /**\n   * Applies the styles to the element. The styles object map may contain an array of values\n   * Each value will be added as element style\n   * Keys are sorted to add prefixed styles (like -webkit-x) first, before the standard ones\n   */\n    /* eslint-disable @typescript-eslint/no-unused-expressions */\n    private _applyMultiValueStyleToElement(styles: StyleDefinition,\n        element: HTMLElement) {\n        Object.keys(styles).sort().forEach(key => {\n            const el = styles[key];\n            const values: (string | number | null)[] = Array.isArray(el) ? el : [el];\n            values.sort();\n            for (let value of values) {\n                value = value ? value + '' : '';\n                if (isPlatformBrowser(this._platformId) || !this._serverModuleLoaded) {\n                    isPlatformBrowser(this._platformId) ?\n                        element.style.setProperty(key, value) : setServerStyle(element, key, value);\n                } else {\n                    this._serverStylesheet.addStyleToElement(element, key, value);\n                }\n            }\n        });\n    }\n}\n\nfunction getServerStyle(element: any, styleName: string): string {\n    const styleMap = readStyleAttribute(element);\n    return styleMap[styleName] ?? '';\n}\n\nfunction setServerStyle(element: any, styleName: string, styleValue?: string | null) {\n    styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n    const styleMap = readStyleAttribute(element);\n    styleMap[styleName] = styleValue ?? '';\n    writeStyleAttribute(element, styleMap);\n}\n\nfunction writeStyleAttribute(element: any, styleMap: { [name: string]: string }) {\n    let styleAttrValue = '';\n    for (const key in styleMap) {\n        const newValue = styleMap[key];\n        if (newValue) {\n            styleAttrValue += `${key}:${styleMap[key]};`;\n        }\n    }\n    element.setAttribute('style', styleAttrValue);\n}\n\nfunction readStyleAttribute(element: any): { [name: string]: string } {\n    const styleMap: { [name: string]: string } = {};\n    const styleAttribute = element.getAttribute('style');\n    if (styleAttribute) {\n        const styleList = styleAttribute.split(/;+/g);\n        for (let i = 0; i < styleList.length; i++) {\n            const style = styleList[i].trim();\n            if (style.length > 0) {\n                const colonIndex = style.indexOf(':');\n                if (colonIndex === -1) {\n                    throw new Error(`Invalid CSS style: ${style}`);\n                }\n                const name = style.substr(0, colonIndex).trim();\n                styleMap[name] = style.substr(colonIndex + 1).trim();\n            }\n        }\n    }\n    return styleMap;\n}\n\n/**\n * Definition of a css style. Either a property name (e.g. \"flex-basis\") or an object\n * map of property name and value (e.g. {display: 'none', flex-order: 5})\n */\nexport type StyleDefinition = { [property: string]: string | number | null };\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 */\n\ninterface WithPriority {\n    priority?: number\n}\n\n/** HOF to sort the breakpoints by descending priority */\nexport function sortDescendingPriority<T extends WithPriority>(a: T | null, b: T | null): number {\n    const priorityA = a ? a.priority || 0 : 0;\n    const priorityB = b ? b.priority || 0 : 0;\n    return priorityB - priorityA;\n}\n\n/** HOF to sort the breakpoints by ascending priority */\nexport function sortAscendingPriority<T extends WithPriority>(a: T, b: T): number {\n    const pA = a.priority || 0;\n    const pB = b.priority || 0;\n    return pA - pB;\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 {Inject, Injectable, NgZone, OnDestroy, PLATFORM_ID} from '@angular/core';\nimport {DOCUMENT, isPlatformBrowser} from '@angular/common';\nimport {BehaviorSubject, Observable, merge, Observer} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nimport {MediaChange} from '../media-change';\n\n/**\n * MediaMonitor configures listeners to mediaQuery changes and publishes an Observable facade to\n * convert mediaQuery change callbacks to subscriber notifications. These notifications will be\n * performed within the ng Zone to trigger change detections and component updates.\n *\n * NOTE: both mediaQuery activations and de-activations are announced in notifications\n */\n@Injectable({providedIn: 'root'})\nexport class MatchMedia implements OnDestroy {\n    /** Initialize source with 'all' so all non-responsive APIs trigger style updates */\n    readonly source = new BehaviorSubject<MediaChange>(new MediaChange(true));\n    registry = new Map<string, MediaQueryList>();\n    private readonly pendingRemoveListenerFns: Array<() => void> = [];\n\n    constructor(protected _zone: NgZone,\n        @Inject(PLATFORM_ID) protected _platformId: Object,\n        @Inject(DOCUMENT) protected _document: any) {\n    }\n\n    /**\n   * Publish list of all current activations\n   */\n    get activations(): string[] {\n        const results: string[] = [];\n        this.registry.forEach((mql: MediaQueryList, key: string) => {\n            if (mql.matches) {\n                results.push(key);\n            }\n        });\n        return results;\n    }\n\n    /**\n   * For the specified mediaQuery?\n   */\n    isActive(mediaQuery: string): boolean {\n        const mql = this.registry.get(mediaQuery);\n        return mql?.matches ?? this.registerQuery(mediaQuery).some(m => m.matches);\n    }\n\n    /**\n   * External observers can watch for all (or a specific) mql changes.\n   *\n   * If a mediaQuery is not specified, then ALL mediaQuery activations will\n   * be announced.\n   */\n    observe(): Observable<MediaChange>;\n    observe(mediaQueries: string[]): Observable<MediaChange>;\n    observe(mediaQueries: string[], filterOthers: boolean): Observable<MediaChange>;\n\n    /**\n   * External observers can watch for all (or a specific) mql changes.\n   * Typically used by the MediaQueryAdaptor; optionally available to components\n   * who wish to use the MediaMonitor as mediaMonitor$ observable service.\n   *\n   * Use deferred registration process to register breakpoints only on subscription\n   * This logic also enforces logic to register all mediaQueries BEFORE notify\n   * subscribers of notifications.\n   */\n    observe(mqList?: string[], filterOthers = false): Observable<MediaChange> {\n        if (mqList && mqList.length) {\n            const matchMedia$: Observable<MediaChange> = this._observable$.pipe(\n                filter((change: MediaChange) =>\n                    !filterOthers ? true : (mqList.indexOf(change.mediaQuery) > -1))\n            );\n            const registration$: Observable<MediaChange> = new Observable((observer: Observer<MediaChange>) => {\n                const matches: Array<MediaChange> = this.registerQuery(mqList);\n                if (matches.length) {\n                    const lastChange = matches.pop()!;\n                    matches.forEach((e: MediaChange) => {\n                        observer.next(e);\n                    });\n                    this.source.next(lastChange); // last match is cached\n                }\n                observer.complete();\n            });\n            return merge(registration$, matchMedia$);\n        }\n\n        return this._observable$;\n    }\n\n    /**\n   * Based on the BreakPointRegistry provider, register internal listeners for each unique\n   * mediaQuery. Each listener emits specific MediaChange data to observers\n   */\n    registerQuery(mediaQuery: string | string[]) {\n        const list = Array.isArray(mediaQuery) ? mediaQuery : [mediaQuery];\n        const matches: MediaChange[] = [];\n\n        buildQueryCss(list, this._document);\n\n        list.forEach((query: string) => {\n            const onMQLEvent = (e: MediaQueryListEvent) => {\n                this._zone.run(() => this.source.next(new MediaChange(e.matches, query)));\n            };\n\n            let mql = this.registry.get(query);\n            if (!mql) {\n                mql = this.buildMQL(query);\n                mql.addListener(onMQLEvent);\n                this.pendingRemoveListenerFns.push(() => mql!.removeListener(onMQLEvent));\n                this.registry.set(query, mql);\n            }\n\n            if (mql.matches) {\n                matches.push(new MediaChange(true, query));\n            }\n        });\n\n        return matches;\n    }\n\n    ngOnDestroy(): void {\n        let fn;\n        while (fn = this.pendingRemoveListenerFns.pop()) {\n            fn();\n        }\n    }\n\n    /**\n   * Call window.matchMedia() to build a MediaQueryList; which\n   * supports 0..n listeners for activation/deactivation\n   */\n    protected buildMQL(query: string): MediaQueryList {\n        return constructMql(query, isPlatformBrowser(this._platformId));\n    }\n\n    protected _observable$ = this.source.asObservable();\n}\n\n/**\n * Private global registry for all dynamically-created, injected style tags\n * @see prepare(query)\n */\nconst ALL_STYLES: { [key: string]: any } = {};\n\n/**\n * For Webkit engines that only trigger the MediaQueryList Listener\n * when there is at least one CSS selector for the respective media query.\n *\n * @param mediaQueries\n * @param _document\n */\nfunction buildQueryCss(mediaQueries: string[], _document: Document) {\n    const list = mediaQueries.filter(it => !ALL_STYLES[it]);\n    if (list.length > 0) {\n        const query = list.join(', ');\n\n        try {\n            const styleEl = _document.createElement('style');\n\n            styleEl.setAttribute('type', 'text/css');\n            if (!(styleEl as any).styleSheet) {\n                const cssText = `\n/*\n  ng-flex-layout - workaround for possible browser quirk with mediaQuery listeners\n  see http://bit.ly/2sd4HMP\n*/\n@media ${query} {.fx-query-test{ }}\n`;\n                styleEl.appendChild(_document.createTextNode(cssText));\n            }\n\n            _document.head!.appendChild(styleEl);\n\n            // Store in private global registry\n            list.forEach(mq => ALL_STYLES[mq] = styleEl);\n\n        } catch (e) {\n            console.error(e);\n        }\n    }\n}\n\nfunction buildMockMql(query: string) {\n    const et: any = new EventTarget();\n    et.matches = query === 'all' || query === '';\n    et.media = query;\n    et.addListener = () => {};\n    et.removeListener = () => {};\n    et.addEventListener = () => {};\n    et.dispatchEvent = () => false;\n    et.onchange = null;\n\n    return et as MediaQueryList;\n}\n\nfunction constructMql(query: string, isBrowser: boolean): MediaQueryList {\n    const canListen = isBrowser && !!(<Window>window).matchMedia('all').addListener;\n\n    return canListen ? (<Window>window).matchMedia(query) : buildMockMql(query);\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 {BreakPoint} from '../break-point';\n\n/**\n * NOTE: Smaller ranges have HIGHER priority since the match is more specific\n */\nexport const DEFAULT_BREAKPOINTS: BreakPoint[] = [\n    {\n        alias: 'xs',\n        mediaQuery: 'screen and (min-width: 0px) and (max-width: 599.98px)',\n        priority: 1000,\n    },\n    {\n        alias: 'sm',\n        mediaQuery: 'screen and (min-width: 600px) and (max-width: 959.98px)',\n        priority: 900,\n    },\n    {\n        alias: 'md',\n        mediaQuery: 'screen and (min-width: 960px) and (max-width: 1279.98px)',\n        priority: 800,\n    },\n    {\n        alias: 'lg',\n        mediaQuery: 'screen and (min-width: 1280px) and (max-width: 1919.98px)',\n        priority: 700,\n    },\n    {\n        alias: 'xl',\n        mediaQuery: 'screen and (min-width: 1920px) and (max-width: 4999.98px)',\n        priority: 600,\n    },\n    {\n        alias: 'lt-sm',\n        overlapping: true,\n        mediaQuery: 'screen and (max-width: 599.98px)',\n        priority: 950,\n    },\n    {\n        alias: 'lt-md',\n        overlapping: true,\n        mediaQuery: 'screen and (max-width: 959.98px)',\n        priority: 850,\n    },\n    {\n        alias: 'lt-lg',\n        overlapping: true,\n        mediaQuery: 'screen and (max-width: 1279.98px)',\n        priority: 750,\n    },\n    {\n        alias: 'lt-xl',\n        overlapping: true,\n        priority: 650,\n        mediaQuery: 'screen and (max-width: 1919.98px)',\n    },\n    {\n        alias: 'gt-xs',\n        overlapping: true,\n        mediaQuery: 'screen and (min-width: 600px)',\n        priority: -950,\n    },\n    {\n        alias: 'gt-sm',\n        overlapping: true,\n        mediaQuery: 'screen and (min-width: 960px)',\n        priority: -850,\n    }, {\n        alias: 'gt-md',\n        overlapping: true,\n        mediaQuery: 'screen and (min-width: 1280px)',\n        priority: -750,\n    },\n    {\n        alias: 'gt-lg',\n        overlapping: true,\n        mediaQuery: 'screen and (min-width: 1920px)',\n        priority: -650,\n    }\n];\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 */\n\nimport {BreakPoint} from '../break-point';\n\nconst HANDSET_PORTRAIT  = '(orientation: portrait) and (max-width: 599.98px)';\nconst HANDSET_LANDSCAPE = '(orientation: landscape) and (max-width: 959.98px)';\n\nconst TABLET_PORTRAIT   = '(orientation: portrait) and (min-width: 600px) and (max-width: 839.98px)';\nconst TABLET_LANDSCAPE  = '(orientation: landscape) and (min-width: 960px) and (max-width: 1279.98px)';\n\nconst WEB_PORTRAIT      = '(orientation: portrait) and (min-width: 840px)';\nconst WEB_LANDSCAPE     = '(orientation: landscape) and (min-width: 1280px)';\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const ScreenTypes = {\n    'HANDSET'           : `${HANDSET_PORTRAIT}, ${HANDSET_LANDSCAPE}`,\n    'TABLET'            : `${TABLET_PORTRAIT} , ${TABLET_LANDSCAPE}`,\n    'WEB'               : `${WEB_PORTRAIT}, ${WEB_LANDSCAPE} `,\n\n    'HANDSET_PORTRAIT'  : `${HANDSET_PORTRAIT}`,\n    'TABLET_PORTRAIT'   : `${TABLET_PORTRAIT} `,\n    'WEB_PORTRAIT'      : `${WEB_PORTRAIT}`,\n\n    'HANDSET_LANDSCAPE' : `${HANDSET_LANDSCAPE}`,\n    'TABLET_LANDSCAPE'  : `${TABLET_LANDSCAPE}`,\n    'WEB_LANDSCAPE'     : `${WEB_LANDSCAPE}`\n};\n\n/**\n * Extended Breakpoints for handset/tablets with landscape or portrait orientations\n */\nexport const ORIENTATION_BREAKPOINTS: BreakPoint[] = [\n    {'alias': 'handset',            priority: 2000, 'mediaQuery': ScreenTypes.HANDSET},\n    {'alias': 'handset.landscape',  priority: 2000, 'mediaQuery': ScreenTypes.HANDSET_LANDSCAPE},\n    {'alias': 'handset.portrait',   priority: 2000, 'mediaQuery': ScreenTypes.HANDSET_PORTRAIT},\n\n    {'alias': 'tablet',             priority: 2100, 'mediaQuery': ScreenTypes.TABLET},\n    {'alias': 'tablet.landscape',   priority: 2100, 'mediaQuery': ScreenTypes.TABLET_LANDSCAPE},\n    {'alias': 'tablet.portrait',    priority: 2100, 'mediaQuery': ScreenTypes.TABLET_PORTRAIT},\n\n    {'alias': 'web',                priority: 2200, 'mediaQuery': ScreenTypes.WEB, overlapping : true },\n    {'alias': 'web.landscape',      priority: 2200, 'mediaQuery': ScreenTypes.WEB_LANDSCAPE, overlapping : true },\n    {'alias': 'web.portrait',       priority: 2200, 'mediaQuery': ScreenTypes.WEB_PORTRAIT, overlapping : true }\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 { extendObject } from 'ng-flex-layout/_private-utils';\nimport { BreakPoint } from './break-point';\n\nconst ALIAS_DELIMITERS = /(\\.|-|_)/g;\nfunction firstUpperCase(part: string) {\n    let first = part.length > 0 ? part.charAt(0) : '';\n    let remainder = (part.length > 1) ? part.slice(1) : '';\n    return first.toUpperCase() + remainder;\n}\n\n/**\n * Converts snake-case to SnakeCase.\n * @param name Text to UpperCamelCase\n */\nfunction camelCase(name: string): string {\n    return name\n        .replace(ALIAS_DELIMITERS, '|')\n        .split('|')\n        .map(firstUpperCase)\n        .join('');\n}\n\n/**\n * For each breakpoint, ensure that a Suffix is defined;\n * fallback to UpperCamelCase the unique Alias value\n */\nexport function validateSuffixes(list: BreakPoint[]): BreakPoint[] {\n    list.forEach((bp: BreakPoint) => {\n        if (!bp.suffix) {\n            bp.suffix = camelCase(bp.alias);   // create Suffix value based on alias\n            bp.overlapping = !!bp.overlapping; // ensure default value\n        }\n    });\n    return list;\n}\n\n/**\n * Merge a custom breakpoint list with the default list based on unique alias values\n *  - Items are added if the alias is not in the default list\n *  - Items are merged with the custom override if the alias exists in the default list\n */\nexport function mergeByAlias(defaults: BreakPoint[], custom: BreakPoint[] = []): BreakPoint[] {\n    const dict: {[key: string]: BreakPoint} = {};\n    defaults.forEach(bp => {\n        dict[bp.alias] = bp;\n    });\n    // Merge custom breakpoints\n    custom.forEach((bp: BreakPoint) => {\n        if (dict[bp.alias]) {\n            extendObject(dict[bp.alias], bp);\n        } else {\n            dict[bp.alias] = bp;\n        }\n    });\n\n    return validateSuffixes(Object.keys(dict).map(k => dict[k]));\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 */\n\nimport {inject, InjectionToken} from '@angular/core';\nimport {BreakPoint} from './break-point';\nimport {BREAKPOINT} from '../tokens/breakpoint-token';\nimport {DEFAULT_BREAKPOINTS} from '../breakpoints/data/break-points';\nimport {ORIENTATION_BREAKPOINTS} from '../breakpoints/data/orientation-break-points';\nimport {mergeByAlias} from '../breakpoints/breakpoint-tools';\nimport {LAYOUT_CONFIG} from '../tokens/library-config';\n\n/**\n *  Injection token unique to the flex-layout library.\n *  Use this token when build a custom provider (see below).\n */\nexport const BREAKPOINTS =\n  new InjectionToken<BreakPoint[]>('Token (ng-flex-layout) Breakpoints', {\n      providedIn: 'root',\n      factory: () => {\n          const breakpoints: any = inject(BREAKPOINT);\n          const layoutConfig = inject(LAYOUT_CONFIG);\n          const bpFlattenArray: BreakPoint[] = [].concat.apply([], (breakpoints || [])\n              .map((v: BreakPoint | BreakPoint[]) => Array.isArray(v) ? v : [v]));\n          const builtIns = (layoutConfig.disableDefaultBps ? [] : DEFAULT_BREAKPOINTS)\n              .concat(layoutConfig.addOrientationBps ? ORIENTATION_BREAKPOINTS : []);\n\n          return mergeByAlias(builtIns, bpFlattenArray);\n      }\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 {Injectable, Inject} from '@angular/core';\n\nimport {BreakPoint} from './break-point';\nimport {BREAKPOINTS} from './break-points-token';\nimport {sortAscendingPriority} from '../utils/sort';\n\nexport type OptionalBreakPoint = BreakPoint | null;\n\n/**\n * Registry of 1..n MediaQuery breakpoint ranges\n * This is published as a provider and may be overridden from custom, application-specific ranges\n *\n */\n@Injectable({providedIn: 'root'})\nexport class BreakPointRegistry {\n    readonly items: BreakPoint[];\n\n    constructor(@Inject(BREAKPOINTS) list: BreakPoint[]) {\n        this.items = [...list].sort(sortAscendingPriority);\n    }\n\n    /**\n   * Search breakpoints by alias (e.g. gt-xs)\n   */\n    findByAlias(alias: string): OptionalBreakPoint {\n        return !alias ? null : this.findWithPredicate(alias, (bp) => bp.alias === alias);\n    }\n\n    findByQuery(query: string): OptionalBreakPoint {\n        return this.findWithPredicate(query, (bp) => bp.mediaQuery === query);\n    }\n\n    /**\n   * Get all the breakpoints whose ranges could overlapping `normal` ranges;\n   * e.g. gt-sm overlaps md, lg, and xl\n   */\n    get overlappings(): BreakPoint[] {\n        return this.items.filter(it => it.overlapping);\n    }\n\n    /**\n   * Get list of all registered (non-empty) breakpoint aliases\n   */\n    get aliases(): string[] {\n        return this.items.map(it => it.alias);\n    }\n\n    /**\n   * Aliases are mapped to properties using suffixes\n   * e.g.  'gt-sm' for property 'layout'  uses suffix 'GtSm'\n   * for property layoutGtSM.\n   */\n    get suffixes(): string[] {\n        return this.items.map(it => it?.suffix ?? '');\n    }\n\n    /**\n   * Memoized lookup using custom predicate function\n   */\n    private findWithPredicate(key: string,\n        searchFn: (bp: BreakPoint) => boolean): OptionalBreakPoint {\n        let response = this.findByMap.get(key);\n        if (!response) {\n            response = this.items.find(searchFn) ?? null;\n            this.findByMap.set(key, response);\n        }\n        return response ?? null;\n\n    }\n\n    /**\n   * Memoized BreakPoint Lookups\n   */\n    private readonly findByMap = new Map<String, OptionalBreakPoint>();\n}\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 {Inject, Injectable, OnDestroy} from '@angular/core';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {BreakPoint} from '../breakpoints/break-point';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\nimport {sortDescendingPriority} from '../utils/sort';\nimport { DOCUMENT } from '@angular/common';\n\n\n/**\n * Interface to apply PrintHook to call anonymous `target.updateStyles()`\n */\nexport interface HookTarget {\n    activatedBreakpoints: BreakPoint[]\n    updateStyles(): void\n}\n\nconst PRINT = 'print';\nexport const BREAKPOINT_PRINT = {\n    alias: PRINT,\n    mediaQuery: PRINT,\n    priority: 1000\n};\n\n/**\n * PrintHook - Use to intercept print MediaQuery activations and force\n *             layouts to render with the specified print alias/breakpoint\n *\n * Used in MediaMarshaller and MediaObserver\n */\n@Injectable({providedIn: 'root'})\nexport class PrintHook implements OnDestroy {\n    constructor(\n        protected breakpoints: BreakPointRegistry,\n        @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n        @Inject(DOCUMENT) protected _document: any) {\n    }\n\n    /** Add 'print' mediaQuery: to listen for matchMedia activations */\n    withPrintQuery(queries: string[]): string[] {\n        return [...queries, PRINT];\n    }\n\n    /** Is the MediaChange event for any 'print' @media */\n    isPrintEvent(e: MediaChange): boolean {\n        return e.mediaQuery.startsWith(PRINT);\n    }\n\n    /** What is the desired mqAlias to use while printing? */\n    get printAlias(): string[] {\n        return [...(this.layoutConfig.printWithBreakpoints ?? [])];\n    }\n\n    /** Lookup breakpoints associated with print aliases. */\n    get printBreakPoints(): BreakPoint[] {\n        return this.printAlias\n            .map(alias => this.breakpoints.findByAlias(alias))\n            .filter(bp => bp !== null) as BreakPoint[];\n    }\n\n    /** Lookup breakpoint associated with mediaQuery */\n    getEventBreakpoints({mediaQuery}: MediaChange): BreakPoint[] {\n        const bp = this.breakpoints.findByQuery(mediaQuery);\n        const list = bp ? [...this.printBreakPoints, bp] : this.printBreakPoints;\n\n        return list.sort(sortDescendingPriority);\n    }\n\n    /** Update event with printAlias mediaQuery information */\n    updateEvent(event: MediaChange): MediaChange {\n        let bp: OptionalBreakPoint = this.breakpoints.findByQuery(event.mediaQuery);\n\n        if (this.isPrintEvent(event)) {\n            // Reset from 'print' to first (highest priority) print breakpoint\n            bp = this.getEventBreakpoints(event)[0];\n            event.mediaQuery = bp?.mediaQuery ?? '';\n        }\n\n        return mergeAlias(event, bp);\n    }\n\n\n    // registeredBeforeAfterPrintHooks tracks if we registered the `beforeprint`\n    //  and `afterprint` event listeners.\n    private registeredBeforeAfterPrintHooks = false;\n\n    // isPrintingBeforeAfterEvent is used to track if we are printing from within\n    // a `beforeprint` event handler. This prevents the typical `stopPrinting`\n    // form `interceptEvents` so that printing is not stopped while the dialog\n    // is still open. This is an extension of the `isPrinting` property on\n    // browsers which support `beforeprint` and `afterprint` events.\n    private isPrintingBeforeAfterEvent = false;\n\n    private beforePrintEventListeners: Function[] = [];\n    private afterPrintEventListeners: Function[] = [];\n\n    private formerActivations: Array<BreakPoint> | null = null;\n\n    // registerBeforeAfterPrintHooks registers a `beforeprint` event hook so we can\n    // trigger print styles synchronously and apply proper layout styles.\n    // It is a noop if the hooks have already been registered or if the document's\n    // `defaultView` is not available.\n    registerBeforeAfterPrintHooks(target: HookTarget) {\n    // `defaultView` may be null when rendering on the server or in other contexts.\n        if (!this._document.defaultView || this.registeredBeforeAfterPrintHooks) {\n            return;\n        }\n\n        this.registeredBeforeAfterPrintHooks = true;\n\n        const beforePrintListener = () => {\n            // If we aren't already printing, start printing and update the styles as\n            // if there was a regular print `MediaChange`(from matchMedia).\n            if (!this.isPrinting) {\n                this.isPrintingBeforeAfterEvent = true;\n                this.startPrinting(target, this.getEventBreakpoints(new MediaChange(true, PRINT)));\n                target.updateStyles();\n            }\n        };\n\n        const afterPrintListener = () => {\n            // If we aren't already printing, start printing and update the styles as\n            // if there was a regular print `MediaChange`(from matchMedia).\n            this.isPrintingBeforeAfterEvent = false;\n            if (this.isPrinting) {\n                this.stopPrinting(target);\n                target.updateStyles();\n            }\n        };\n\n        // Could we have teardown logic to remove if there are no print listeners being used?\n        this._document.defaultView.addEventListener('beforeprint', beforePrintListener);\n        this._document.defaultView.addEventListener('afterprint', afterPrintListener);\n\n        this.beforePrintEventListeners.push(beforePrintListener);\n        this.afterPrintEventListeners.push(afterPrintListener);\n    }\n\n    /**\n   * Prepare RxJS tap operator with partial application\n   * @return pipeable tap predicate\n   */\n    interceptEvents(target: HookTarget) {\n        return (event: MediaChange) => {\n            if (this.isPrintEvent(event)) {\n                if (event.matches && !this.isPrinting) {\n                    this.startPrinting(target, this.getEventBreakpoints(event));\n                    target.updateStyles();\n                } else if (!event.matches && this.isPrinting && !this.isPrintingBeforeAfterEvent) {\n                    this.stopPrinting(target);\n                    target.updateStyles();\n                }\n\n                return;\n            }\n\n            this.collectActivations(target, event);\n        };\n    }\n\n    /** Stop mediaChange event propagation in event streams */\n    blockPropagation() {\n        return (event: MediaChange): boolean => {\n            return !(this.isPrinting || this.isPrintEvent(event));\n        };\n    }\n\n    /**\n   * Save current activateBreakpoints (for later restore)\n   * and substitute only the printAlias breakpoint\n   */\n    protected startPrinting(target: HookTarget, bpList: OptionalBreakPoint[]) {\n        this.isPrinting = true;\n        this.formerActivations = target.activatedBreakpoints;\n        target.activatedBreakpoints = this.queue.addPrintBreakpoints(bpList);\n    }\n\n    /** For any print de-activations, reset the entire print queue */\n    protected stopPrinting(target: HookTarget) {\n        target.activatedBreakpoints = this.deactivations;\n        this.deactivations = [];\n        this.formerActivations = null;\n        this.queue.clear();\n        this.isPrinting = false;\n    }\n\n    /**\n   * To restore pre-Print Activations, we must capture the proper\n   * list of breakpoint activations BEFORE print starts. OnBeforePrint()\n   * is supported; so 'print' mediaQuery activations are used as a fallback\n   * in browsers without `beforeprint` support.\n   *\n   * >  But activated breakpoints are deactivated BEFORE 'print' activation.\n   *\n   * Let's capture all de-activations using the following logic:\n   *\n   *  When not printing:\n   *    - clear cache when activating non-print breakpoint\n   *    - update cache (and sort) when deactivating\n   *\n   *  When printing:\n   *    - sort and save when starting print\n   *    - restore as activatedTargets and clear when stop printing\n   */\n    collectActivations(target: HookTarget, event: MediaChange) {\n        if (!this.isPrinting || this.isPrintingBeforeAfterEvent) {\n            if (!this.isPrintingBeforeAfterEvent) {\n                // Only clear deactivations if we aren't printing from a `beforeprint` event.\n                // Otherwise, this will clear before `stopPrinting()` is called to restore\n                // the pre-Print Activations.\n                this.deactivations = [];\n\n                return;\n            }\n\n            if (!event.matches) {\n                const bp = this.breakpoints.findByQuery(event.mediaQuery);\n                // Deactivating a breakpoint\n                if (bp) {\n                    const hasFormerBp = this.formerActivations && this.formerActivations.includes(bp);\n                    const wasActivated = !this.formerActivations && target.activatedBreakpoints.includes(bp);\n                    const shouldDeactivate = hasFormerBp || wasActivated;\n                    if (shouldDeactivate) {\n                        this.deactivations.push(bp);\n                        this.deactivations.sort(sortDescendingPriority);\n                    }\n                }\n            }\n        }\n    }\n\n    /** Teardown logic for the service. */\n    ngOnDestroy() {\n        if (this._document.defaultView) {\n            this.beforePrintEventListeners.forEach(l => this._document.defaultView.removeEventListener('beforeprint', l));\n            this.afterPrintEventListeners.forEach(l => this._document.defaultView.removeEventListener('afterprint', l));\n        }\n    }\n\n    // Is this service currently in print mode\n    private isPrinting = false;\n    private queue = new PrintQueue();\n    private deactivations: BreakPoint[] = [];\n}\n\n// ************************************************************************\n// Internal Utility class 'PrintQueue'\n// ************************************************************************\n\n/**\n * Utility class to manage print breakpoints + activatedBreakpoints\n * with correct sorting WHILE printing\n */\nclass PrintQueue {\n    /** Sorted queue with prioritized print breakpoints */\n    printBreakpoints: BreakPoint[] = [];\n\n    addPrintBreakpoints(bpList: OptionalBreakPoint[]): BreakPoint[] {\n        bpList.push(BREAKPOINT_PRINT);\n        bpList.sort(sortDescendingPriority);\n        bpList.forEach(bp => this.addBreakpoint(bp));\n\n        return this.printBreakpoints;\n    }\n\n    /** Add Print breakpoint to queue */\n    addBreakpoint(bp: OptionalBreakPoint) {\n        if (!!bp) {\n            const bpInList = this.printBreakpoints.find(it => it.mediaQuery === bp.mediaQuery);\n\n            if (bpInList === undefined) {\n                // If this is a `printAlias` breakpoint, then append. If a true 'print' breakpoint,\n                // register as highest priority in the queue\n                this.printBreakpoints = isPrintBreakPoint(bp) ? [bp, ...this.printBreakpoints]\n                    : [...this.printBreakpoints, bp];\n            }\n        }\n    }\n\n    /** Restore original activated breakpoints and clear internal caches */\n    clear() {\n        this.printBreakpoints = [];\n    }\n}\n\n// ************************************************************************\n// Internal Utility methods\n// ************************************************************************\n\n/** Only support intercept queueing if the Breakpoint is a print @media query */\nfunction isPrintBreakPoint(bp: OptionalBreakPoint): boolean {\n    return bp?.mediaQuery.startsWith(PRINT) ?? false;\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 {Injectable} from '@angular/core';\n\nimport {merge, Observable, Subject, Subscription} from 'rxjs';\nimport {filter, tap} from 'rxjs/operators';\n\nimport {BreakPoint} from '../breakpoints/break-point';\nimport {sortDescendingPriority} from '../utils/sort';\nimport {BreakPointRegistry} from '../breakpoints/break-point-registry';\nimport {MatchMedia} from '../match-media/match-media';\nimport {MediaChange} from '../media-change';\n\nimport {PrintHook, HookTarget} from './print-hook';\nimport {mergeAlias} from '../add-alias';\n\ntype ClearCallback = () => void;\ntype UpdateCallback = (val: any) => void;\ntype Builder = UpdateCallback | ClearCallback;\n\ntype ValueMap = Map<string, string>;\ntype BreakpointMap = Map<string, ValueMap>;\ntype ElementMap = Map<HTMLElement, BreakpointMap>;\ntype ElementKeyMap = WeakMap<HTMLElement, Set<string>>;\ntype SubscriptionMap = Map<string, Subscription>;\ntype WatcherMap = WeakMap<HTMLElement, SubscriptionMap>;\ntype BuilderMap = WeakMap<HTMLElement, Map<string, Builder>>;\n\nexport interface ElementMatcher {\n    element: HTMLElement\n    key: string\n    value: any\n}\n\n/**\n * MediaMarshaller - register responsive values from directives and\n *                   trigger them based on media query events\n */\n@Injectable({providedIn: 'root'})\nexport class MediaMarshaller {\n    private _useFallbacks = true;\n    private _activatedBreakpoints: BreakPoint[] = [];\n    private elementMap: ElementMap = new Map();\n    private elementKeyMap: ElementKeyMap = new WeakMap();\n    private watcherMap: WatcherMap = new WeakMap();     // special triggers to update elements\n    private updateMap: BuilderMap = new WeakMap();      // callback functions to update styles\n    private clearMap: BuilderMap = new WeakMap();       // callback functions to clear styles\n\n    private subject: Subject<ElementMatcher> = new Subject();\n\n    get activatedAlias(): string {\n        return this.activatedBreakpoints[0]?.alias ?? '';\n    }\n\n    set activatedBreakpoints(bps: BreakPoint[]) {\n        this._activatedBreakpoints = [...bps];\n    }\n\n    get activatedBreakpoints(): BreakPoint[] {\n        return [...this._activatedBreakpoints];\n    }\n\n    set useFallbacks(value: boolean) {\n        this._useFallbacks = value;\n    }\n\n    constructor(protected matchMedia: MatchMedia,\n        protected breakpoints: BreakPointRegistry,\n        protected hook: PrintHook) {\n        this.observeActivations();\n    }\n\n    /**\n   * Update styles on breakpoint activates or deactivates\n   * @param mc\n   */\n    onMediaChange(mc: MediaChange) {\n        const bp: BreakPoint | null = this.findByQuery(mc.mediaQuery);\n\n        if (bp) {\n            mc = mergeAlias(mc, bp);\n\n            const bpIndex = this.activatedBreakpoints.indexOf(bp);\n\n            if (mc.matches && bpIndex === -1) {\n                this._activatedBreakpoints.push(bp);\n                this._activatedBreakpoints.sort(sortDescendingPriority);\n\n                this.updateStyles();\n            } else if (!mc.matches && bpIndex !== -1) {\n                // Remove the breakpoint when it's deactivated\n                this._activatedBreakpoints.splice(bpIndex, 1);\n                this._activatedBreakpoints.sort(sortDescendingPriority);\n\n                this.updateStyles();\n            }\n        }\n    }\n\n    /**\n   * initialize the marshaller with necessary elements for delegation on an element\n   * @param element\n   * @param key\n   * @param updateFn optional callback so that custom bp directives don't have to re-provide this\n   * @param clearFn optional callback so that custom bp directives don't have to re-provide this\n   * @param extraTriggers other triggers to force style updates (e.g. layout, directionality, etc)\n   */\n    init(element: HTMLElement,\n        key: string,\n        updateFn?: UpdateCallback,\n        clearFn?: ClearCallback,\n        extraTriggers: Observable<any>[] = []): void {\n\n        initBuilderMap(this.updateMap, element, key, updateFn);\n        initBuilderMap(this.clearMap, element, key, clearFn);\n\n        this.buildElementKeyMap(element, key);\n        this.watchExtraTriggers(element, key, extraTriggers);\n    }\n\n    /**\n   * get the value for an element and key and optionally a given breakpoint\n   * @param element\n   * @param key\n   * @param bp\n   */\n    getValue(element: HTMLElement, key: string, bp?: string): any {\n        const bpMap = this.elementMap.get(element);\n        if (bpMap) {\n            const values = bp !== undefined ? bpMap.get(bp) : this.getActivatedValues(bpMap, key);\n            if (values) {\n                return values.get(key);\n            }\n        }\n        return undefined;\n    }\n\n    /**\n   * whether the element has values for a given key\n   * @param element\n   * @param key\n   */\n    hasValue(element: HTMLElement, key: string): boolean {\n        const bpMap = this.elementMap.get(element);\n        if (bpMap) {\n            const values = this.getActivatedValues(bpMap, key);\n            if (values) {\n                return values.get(key) !== undefined || false;\n            }\n        }\n        return false;\n    }\n\n    /**\n   * Set the value for an input on a directive\n   * @param element the element in question\n   * @param key the type of the directive (e.g. flex, layout-gap, etc)\n   * @param bp the breakpoint suffix (empty string = default)\n   * @param val the value for the breakpoint\n   */\n    setValue(element: HTMLElement, key: string, val: any, bp: string): void {\n        let bpMap: BreakpointMap | undefined = this.elementMap.get(element);\n        if (!bpMap) {\n            bpMap = new Map().set(bp, new Map().set(key, val));\n            this.elementMap.set(element, bpMap);\n        } else {\n            const values = (bpMap.get(bp) ?? new Map()).set(key, val);\n            bpMap.set(bp, values);\n            this.elementMap.set(element, bpMap);\n        }\n        const value = this.getValue(element, key);\n        if (value !== undefined) {\n            this.updateElement(element, key, value);\n        }\n    }\n\n    /** Track element value changes for a specific key */\n    trackValue(element: HTMLElement, key: string): Observable<ElementMatcher> {\n        return this.subject\n            .asObservable()\n            .pipe(filter(v => v.element === element && v.key === key));\n    }\n\n    /** update all styles for all elements on the current breakpoint */\n    updateStyles(): void {\n        this.elementMap.forEach((bpMap, el) => {\n            const keyMap = new Set(this.elementKeyMap.get(el)!);\n            let valueMap = this.getActivatedValues(bpMap);\n\n            if (valueMap) {\n                valueMap.forEach((v, k) => {\n                    this.updateElement(el, k, v);\n                    keyMap.delete(k);\n                });\n            }\n\n            keyMap.forEach(k => {\n                valueMap = this.getActivatedValues(bpMap, k);\n                if (valueMap) {\n                    const value = valueMap.get(k);\n                    this.updateElement(el, k, value);\n                } else {\n                    this.clearElement(el, k);\n                }\n            });\n        });\n    }\n\n    /**\n   * clear the styles for a given element\n   * @param element\n   * @param key\n   */\n    clearElement(element: HTMLElement, key: string): void {\n        const builders = this.clearMap.get(element);\n\n        if (builders) {\n            const clearFn: ClearCallback = builders.get(key) as ClearCallback;\n            if (!!clearFn) {\n                clearFn();\n                this.subject.next({element, key, value: ''});\n            }\n        }\n    }\n\n    /**\n   * update a given element with the activated values for a given key\n   * @param element\n   * @param key\n   * @param value\n   */\n    updateElement(element: HTMLElement, key: string, value: any): void {\n        const builders = this.updateMap.get(element);\n        if (builders) {\n            const updateFn: UpdateCallback = builders.get(key) as UpdateCallback;\n            if (!!updateFn) {\n                updateFn(value);\n                this.subject.next({element, key, value});\n            }\n        }\n    }\n\n    /**\n   * release all references to a given element\n   * @param element\n   */\n    releaseElement(element: HTMLElement): void {\n        const watcherMap = this.watcherMap.get(element);\n        if (watcherMap) {\n            watcherMap.forEach(s => s.unsubscribe());\n            this.watcherMap.delete(element);\n        }\n        const elementMap = this.elementMap.get(element);\n        if (elementMap) {\n            elementMap.forEach((_, s) => elementMap.delete(s));\n            this.elementMap.delete(element);\n        }\n    }\n\n    /**\n   * trigger an update for a given element and key (e.g. layout)\n   * @param element\n   * @param key\n   */\n    triggerUpdate(element: HTMLElement, key?: string): void {\n        const bpMap = this.elementMap.get(element);\n        if (bpMap) {\n            const valueMap = this.getActivatedValues(bpMap, key);\n            if (valueMap) {\n                if (key) {\n                    this.updateElement(element, key, valueMap.get(key));\n                } else {\n                    valueMap.forEach((v, k) => this.updateElement(element, k, v));\n                }\n            }\n        }\n    }\n\n    /** Cross-reference for HTMLElement with directive key */\n    private buildElementKeyMap(element: HTMLElement, key: string) {\n        let keyMap = this.elementKeyMap.get(element);\n        if (!keyMap) {\n            keyMap = new Set();\n            this.elementKeyMap.set(element, keyMap);\n        }\n        keyMap.add(key);\n    }\n\n    /**\n   * Other triggers that should force style updates:\n   * - directionality\n   * - layout changes\n   * - mutationobserver updates\n   */\n    private watchExtraTriggers(element: HTMLElement,\n        key: string,\n        triggers: Observable<any>[]) {\n        if (triggers && triggers.length) {\n            let watchers = this.watcherMap.get(element);\n            if (!watchers) {\n                watchers = new Map();\n                this.watcherMap.set(element, watchers);\n            }\n            const subscription = watchers.get(key);\n            if (!subscription) {\n                const newSubscription = merge(...triggers).subscribe(() => {\n                    const currentValue = this.getValue(element, key);\n                    this.updateElement(element, key, currentValue);\n                });\n                watchers.set(key, newSubscription);\n            }\n        }\n    }\n\n    /** Breakpoint locator by mediaQuery */\n    private findByQuery(query: string) {\n        return this.breakpoints.findByQuery(query);\n    }\n\n    /**\n   * get the fallback breakpoint for a given element, starting with the current breakpoint\n   * @param bpMap\n   * @param key\n   */\n    private getActivatedValues(bpMap: BreakpointMap, key?: string): ValueMap | undefined {\n        for (let i = 0; i < this.activatedBreakpoints.length; i++) {\n            const activatedBp = this.activatedBreakpoints[i];\n            const valueMap = bpMap.get(activatedBp.alias);\n\n            if (valueMap) {\n                if (key === undefined || (valueMap.has(key) && valueMap.get(key) != null)) {\n                    return valueMap;\n                }\n            }\n        }\n\n        // On the server, we explicitly have an \"all\" section filled in to begin with.\n        // So we don't need to aggressively find a fallback if no explicit value exists.\n        if (!this._useFallbacks) {\n            return undefined;\n        }\n\n        const lastHope = bpMap.get('');\n        return (key === undefined || lastHope && lastHope.has(key)) ? lastHope : undefined;\n    }\n\n    /**\n   * Watch for mediaQuery breakpoint activations\n   */\n    private observeActivations() {\n        const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n\n        this.hook.registerBeforeAfterPrintHooks(this);\n        this.matchMedia\n            .observe(this.hook.withPrintQuery(queries))\n            .pipe(\n                tap(this.hook.interceptEvents(this)),\n                filter(this.hook.blockPropagation())\n            )\n            .subscribe(this.onMediaChange.bind(this));\n    }\n\n}\n\nfunction initBuilderMap(map: BuilderMap,\n    element: HTMLElement,\n    key: string,\n    input?: Builder): void {\n    if (input !== undefined) {\n        const oldMap = map.get(element) ?? new Map();\n        oldMap.set(key, input);\n        map.set(element, oldMap);\n    }\n}\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 {Directive, ElementRef, OnChanges, OnDestroy, SimpleChanges} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\nimport {StyleDefinition, StyleUtils} from '../style-utils/style-utils';\nimport {StyleBuilder} from '../style-builder/style-builder';\nimport {MediaMarshaller} from '../media-marshaller/media-marshaller';\nimport {buildLayoutCSS} from 'ng-flex-layout/_private-utils';\n\n@Directive()\nexport abstract class BaseDirective2 implements OnChanges, OnDestroy {\n\n    protected DIRECTIVE_KEY = '';\n    protected inputs: string[] = [];\n    /** The most recently used styles for the builder */\n    protected mru: StyleDefinition = {};\n    protected destroySubject: Subject<void> = new Subject();\n    protected currentValue: any;\n\n    /** Access to host element's parent DOM node */\n    protected get parentElement(): HTMLElement | null {\n        return this.elementRef.nativeElement.parentElement;\n    }\n\n    /** Access to the HTMLElement for the directive */\n    protected get nativeElement(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    /** Access to the activated value for the directive */\n    get activatedValue(): string {\n        return this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY);\n    }\n    set activatedValue(value: string) {\n        this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, value,\n            this.marshal.activatedAlias);\n    }\n\n    /** Cache map for style computation */\n    protected styleCache: Map<string, StyleDefinition> = new Map();\n\n    protected constructor(protected elementRef: ElementRef,\n        protected styleBuilder: StyleBuilder,\n        protected styler: StyleUtils,\n        protected marshal: MediaMarshaller) {\n    }\n\n    /** For @Input changes */\n    ngOnChanges(changes: SimpleChanges) {\n        Object.keys(changes).forEach(key => {\n            if (this.inputs.indexOf(key) !== -1) {\n                const bp = key.split('.').slice(1).join('.');\n                const val = changes[key].currentValue;\n                this.setValue(val, bp);\n            }\n        });\n    }\n\n    ngOnDestroy(): void {\n        this.destroySubject.next();\n        this.destroySubject.complete();\n        this.marshal.releaseElement(this.nativeElement);\n    }\n\n    /** Register with central marshaller service */\n    protected init(extraTriggers: Observable<any>[] = []): void {\n        this.marshal.init(\n            this.elementRef.nativeElement,\n            this.DIRECTIVE_KEY,\n            this.updateWithValue.bind(this),\n            this.clearStyles.bind(this),\n            extraTriggers\n        );\n    }\n\n    /** Add styles to the element using predefined style builder */\n    protected addStyles(input: string, parent?: Object) {\n        const builder = this.styleBuilder;\n        const useCache = builder.shouldCache;\n\n        let genStyles: StyleDefinition | undefined = this.styleCache.get(input);\n\n        if (!genStyles || !useCache) {\n            genStyles = builder.buildStyles(input, parent);\n            if (useCache) {\n                this.styleCache.set(input, genStyles);\n            }\n        }\n\n        this.mru = {...genStyles};\n        this.applyStyleToElement(genStyles);\n        builder.sideEffect(input, genStyles, parent);\n    }\n\n    /** Remove generated styles from an element using predefined style builder */\n    protected clearStyles() {\n        Object.keys(this.mru).forEach(k => {\n            this.mru[k] = '';\n        });\n        this.applyStyleToElement(this.mru);\n        this.mru = {};\n        this.currentValue = undefined;\n    }\n\n    /** Force trigger style updates on DOM element */\n    protected triggerUpdate() {\n        this.marshal.triggerUpdate(this.nativeElement, this.DIRECTIVE_KEY);\n    }\n\n    /**\n   * Determine the DOM element's Flexbox flow (flex-direction).\n   *\n   * Check inline style first then check computed (stylesheet) style.\n   * And optionally add the flow value to element's inline style.\n   */\n    protected getFlexFlowDirection(target: HTMLElement, addIfMissing = false): string {\n        if (target) {\n            const [value, hasInlineValue] = this.styler.getFlowDirection(target);\n\n            if (!hasInlineValue && addIfMissing) {\n                const style = buildLayoutCSS(value);\n                const elements = [target];\n                this.styler.applyStyleToElements(style, elements);\n            }\n\n            return value.trim();\n        }\n\n        return 'row';\n    }\n\n    protected hasWrap(target: HTMLElement): boolean {\n        return this.styler.hasWrap(target);\n    }\n\n    /** Applies styles given via string pair or object map to the directive element */\n    protected applyStyleToElement(style: StyleDefinition,\n        value?: string | number,\n        element: HTMLElement = this.nativeElement) {\n        this.styler.applyStyleToElement(element, style, value);\n    }\n\n    protected setValue(val: any, bp: string): void {\n        this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, val, bp);\n    }\n\n    protected updateWithValue(input: string) {\n        if (this.currentValue !== input) {\n            this.addStyles(input);\n            this.currentValue = input;\n        }\n    }\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 */\n\nexport * from './base2';\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 */\n\nexport * from './data/break-points';\nexport * from './data/orientation-break-points';\n\nexport * from './break-point';\nexport * from './break-point-registry';\nexport * from './break-points-token';\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 {Inject, Injectable, NgZone, PLATFORM_ID} from '@angular/core';\n\n\nimport {MatchMedia} from '../match-media';\nimport {BreakPointRegistry} from '../../breakpoints/break-point-registry';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * MockMatchMedia mocks calls to the Window API matchMedia with a build of a simulated\n * MockMediaQueryListener. Methods are available to simulate an activation of a mediaQuery\n * range and to clearAll mediaQuery listeners.\n */\n@Injectable()\nexport class MockMatchMedia extends MatchMedia {\n\n\n    autoRegisterQueries = true;   // Used for testing BreakPoint registrations\n    useOverlaps = false;          // Allow fallback to overlapping mediaQueries\n\n    constructor(_zone: NgZone,\n        @Inject(PLATFORM_ID) _platformId: Object,\n        @Inject(DOCUMENT) _document: any,\n        private _breakpoints: BreakPointRegistry) {\n        super(_zone, _platformId, _document);\n    }\n\n    /** Easy method to clear all listeners for all mediaQueries */\n    clearAll() {\n        this.registry.forEach((mql: MediaQueryList) => {\n            (mql as MockMediaQueryList).destroy();\n        });\n        this.registry.clear();\n        this.useOverlaps = false;\n    }\n\n    /** Feature to support manual, simulated activation of a mediaQuery. */\n    activate(mediaQuery: string, useOverlaps = this.useOverlaps): boolean {\n        mediaQuery = this._validateQuery(mediaQuery);\n\n        if (useOverlaps || !this.isActive(mediaQuery)) {\n            this._deactivateAll();\n\n            this._registerMediaQuery(mediaQuery);\n            this._activateWithOverlaps(mediaQuery, useOverlaps);\n        }\n\n        return this.hasActivated;\n    }\n\n    /** Converts an optional mediaQuery alias to a specific, valid mediaQuery */\n    _validateQuery(queryOrAlias: string): string {\n        const bp = this._breakpoints.findByAlias(queryOrAlias);\n        return bp?.mediaQuery ?? queryOrAlias;\n    }\n\n    /**\n   * Manually onMediaChange any overlapping mediaQueries to simulate\n   * similar functionality in the window.matchMedia()\n   */\n    private _activateWithOverlaps(mediaQuery: string, useOverlaps: boolean): boolean {\n        if (useOverlaps) {\n            const bp = this._breakpoints.findByQuery(mediaQuery);\n            const alias = bp?.alias ?? 'unknown';\n\n            // Simulate activation of overlapping lt-<XXX> ranges\n            switch (alias) {\n                case 'lg':\n                    this._activateByAlias(['lt-xl']);\n                    break;\n                case 'md':\n                    this._activateByAlias(['lt-xl', 'lt-lg']);\n                    break;\n                case 'sm':\n                    this._activateByAlias(['lt-xl', 'lt-lg', 'lt-md']);\n                    break;\n                case 'xs':\n                    this._activateByAlias(['lt-xl', 'lt-lg', 'lt-md', 'lt-sm']);\n                    break;\n            }\n\n            // Simulate activation of overlapping gt-<xxxx> mediaQuery ranges\n            switch (alias) {\n                case 'xl':\n                    this._activateByAlias(['gt-lg', 'gt-md', 'gt-sm', 'gt-xs']);\n                    break;\n                case 'lg':\n                    this._activateByAlias(['gt-md', 'gt-sm', 'gt-xs']);\n                    break;\n                case 'md':\n                    this._activateByAlias(['gt-sm', 'gt-xs']);\n                    break;\n                case 'sm':\n                    this._activateByAlias(['gt-xs']);\n                    break;\n            }\n        }\n\n        // Activate last since the responsiveActivation is watching *this* mediaQuery\n        return this._activateByQuery(mediaQuery);\n    }\n\n    /**\n   *\n   */\n    private _activateByAlias(aliases: string[]) {\n        const activate = (alias: string) => {\n            const bp = this._breakpoints.findByAlias(alias);\n            this._activateByQuery(bp?.mediaQuery ?? alias);\n        };\n        aliases.forEach(activate);\n    }\n\n    /**\n   *\n   */\n    private _activateByQuery(mediaQuery: string) {\n        if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n            this._registerMediaQuery(mediaQuery);\n        }\n        const mql: MockMediaQueryList = this.registry.get(mediaQuery) as MockMediaQueryList;\n\n        if (mql && !this.isActive(mediaQuery)) {\n            this.registry.set(mediaQuery, mql.activate());\n        }\n        return this.hasActivated;\n    }\n\n    /** Deactivate all current MQLs and reset the buffer */\n    private _deactivateAll() {\n        this.registry.forEach((it: MediaQueryList) => {\n            (it as MockMediaQueryList).deactivate();\n        });\n        return this;\n    }\n\n    /** Insure the mediaQuery is registered with MatchMedia */\n    private _registerMediaQuery(mediaQuery: string) {\n        if (!this.registry.has(mediaQuery) && this.autoRegisterQueries) {\n            this.registerQuery(mediaQuery);\n        }\n    }\n\n    /**\n   * Call window.matchMedia() to build a MediaQueryList; which\n   * supports 0..n listeners for activation/deactivation\n   */\n    protected override buildMQL(query: string): MediaQueryList {\n        return new MockMediaQueryList(query);\n    }\n\n    protected get hasActivated() {\n        return this.activations.length > 0;\n    }\n\n}\n\n/**\n * Special internal class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nexport class MockMediaQueryList extends EventTarget implements MediaQueryList {\n    private _isActive = false;\n    private _listeners: MediaQueryListListener[] = [];\n\n    get matches(): boolean {\n        return this._isActive;\n    }\n\n    get media(): string {\n        return this._mediaQuery;\n    }\n\n    constructor(private _mediaQuery: string) {\n        super();\n    }\n\n    /**\n   * Destroy the current list by deactivating the\n   * listeners and clearing the internal list\n   */\n    destroy() {\n        this.deactivate();\n        this._listeners = [];\n    }\n\n    /** Notify all listeners that 'matches === TRUE' */\n    activate(): MockMediaQueryList {\n        if (!this._isActive) {\n            this._isActive = true;\n            this._listeners.forEach((callback) => {\n                const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n                cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n            });\n        }\n        return this;\n    }\n\n    /** Notify all listeners that 'matches === false' */\n    deactivate(): MockMediaQueryList {\n        if (this._isActive) {\n            this._isActive = false;\n            this._listeners.forEach((callback) => {\n                const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n                cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n            });\n        }\n        return this;\n    }\n\n    /** Add a listener to our internal list to activate later */\n    addListener(listener: MediaQueryListListener) {\n        if (this._listeners.indexOf(listener) === -1) {\n            this._listeners.push(listener);\n        }\n        if (this._isActive) {\n            const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = listener!;\n            cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n        }\n    }\n\n    /** Don't need to remove listeners in the testing environment */\n    removeListener(_: MediaQueryListListener | null) {\n    }\n\n    override dispatchEvent(_: Event): boolean {\n        return false;\n    }\n\n    onchange: MediaQueryListListener = null;\n}\n\n/**\n * Pre-configured provider for MockMatchMedia\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const MockMatchMediaProvider = {\n    provide: MatchMedia,\n    useClass: MockMatchMedia\n};\n\ntype MediaQueryListListener = ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;\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 */\n\nexport * from './match-media';\nexport * from './mock/mock-match-media';\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 */\n\n/** Wraps the provided value in an array, unless the provided value is an array. */\nexport function coerceArray<T>(value: T | T[]): T[] {\n    return Array.isArray(value) ? value : [value];\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 {Injectable, OnDestroy} from '@angular/core';\nimport {Subject, asapScheduler, Observable, of} from 'rxjs';\nimport {\n    debounceTime,\n    distinctUntilChanged,\n    filter,\n    map,\n    switchMap,\n    takeUntil,\n} from 'rxjs/operators';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {MatchMedia} from '../match-media/match-media';\nimport {PrintHook} from '../media-marshaller/print-hook';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\n\nimport {sortDescendingPriority} from '../utils/sort';\nimport {coerceArray} from '../utils/array';\n\n\n/**\n * MediaObserver enables applications to listen for 1..n mediaQuery activations and to determine\n * if a mediaQuery is currently activated.\n *\n * Since a breakpoint change will first deactivate 1...n mediaQueries and then possibly activate\n * 1..n mediaQueries, the MediaObserver will debounce notifications and report ALL *activations*\n * in 1 event notification. The reported activations will be sorted in descending priority order.\n *\n * This class uses the BreakPoint Registry to inject alias information into the raw MediaChange\n * notification. For custom mediaQuery notifications, alias information will not be injected and\n * those fields will be ''.\n *\n * Note: Developers should note that only mediaChange activations (not de-activations)\n *       are announced by the MediaObserver.\n *\n *  @usage\n *\n *  // RxJS\n *  import { filter } from 'rxjs/operators';\n *  import { MediaObserver } from 'ng-flex-layout';\n *\n *  @Component({ ... })\n *  export class AppComponent {\n *    status: string = '';\n *\n *    constructor(mediaObserver: MediaObserver) {\n *      const media$ = mediaObserver.asObservable().pipe(\n *        filter((changes: MediaChange[]) => true)   // silly noop filter\n *      );\n *\n *      media$.subscribe((changes: MediaChange[]) => {\n *        let status = '';\n *        changes.forEach( change => {\n *          status += `'${change.mqAlias}' = (${change.mediaQuery}) <br/>` ;\n *        });\n *        this.status = status;\n *     });\n *\n *    }\n *  }\n */\n@Injectable({providedIn: 'root'})\nexport class MediaObserver implements OnDestroy {\n    /** Filter MediaChange notifications for overlapping breakpoints */\n    filterOverlaps = false;\n\n    constructor(protected breakpoints: BreakPointRegistry,\n        protected matchMedia: MatchMedia,\n        protected hook: PrintHook) {\n        this._media$ = this.watchActivations();\n    }\n\n    /**\n   * Completes the active subject, signalling to all complete for all\n   * MediaObserver subscribers\n   */\n    ngOnDestroy(): void {\n        this.destroyed$.next();\n        this.destroyed$.complete();\n    }\n\n    // ************************************************\n    // Public Methods\n    // ************************************************\n\n    /**\n   * Observe changes to current activation 'list'\n   */\n    asObservable(): Observable<MediaChange[]> {\n        return this._media$;\n    }\n\n    /**\n   * Allow programmatic query to determine if one or more media query/alias match\n   * the current viewport size.\n   * @param value One or more media queries (or aliases) to check.\n   * @returns Whether any of the media queries match.\n   */\n    isActive(value: string | string[]): boolean {\n        const aliases = splitQueries(coerceArray(value));\n        return aliases.some(alias => {\n            const query = toMediaQuery(alias, this.breakpoints);\n            return query !== null && this.matchMedia.isActive(query);\n        });\n    }\n\n    // ************************************************\n    // Internal Methods\n    // ************************************************\n\n    /**\n   * Register all the mediaQueries registered in the BreakPointRegistry\n   * This is needed so subscribers can be auto-notified of all standard, registered\n   * mediaQuery activations\n   */\n    private watchActivations() {\n        const queries = this.breakpoints.items.map(bp => bp.mediaQuery);\n        return this.buildObservable(queries);\n    }\n\n    /**\n   * Only pass/announce activations (not de-activations)\n   *\n   * Since multiple-mediaQueries can be activation in a cycle,\n   * gather all current activations into a single list of changes to observers\n   *\n   * Inject associated (if any) alias information into the MediaChange event\n   * - Exclude mediaQuery activations for overlapping mQs. List bounded mQ ranges only\n   * - Exclude print activations that do not have an associated mediaQuery\n   *\n   * NOTE: the raw MediaChange events [from MatchMedia] do not\n   *       contain important alias information; as such this info\n   *       must be injected into the MediaChange\n   */\n    private buildObservable(mqList: string[]): Observable<MediaChange[]> {\n        const hasChanges = (changes: MediaChange[]) => {\n            const isValidQuery = (change: MediaChange) => (change.mediaQuery.length > 0);\n            return (changes.filter(isValidQuery).length > 0);\n        };\n        const excludeOverlaps = (changes: MediaChange[]) => {\n            return !this.filterOverlaps ? changes : changes.filter(change => {\n                const bp = this.breakpoints.findByQuery(change.mediaQuery);\n                return bp?.overlapping ?? true;\n            });\n        };\n        const ignoreDuplicates = (previous: MediaChange[], current: MediaChange[]): boolean => {\n            if (previous.length !== current.length) {\n                return false;\n            }\n\n            const previousMqs = previous.map(mc => mc.mediaQuery);\n            const currentMqs = new Set(current.map(mc => mc.mediaQuery));\n            const difference = new Set(previousMqs.filter(mq => !currentMqs.has(mq)));\n\n            return difference.size === 0;\n        };\n\n        /**\n     */\n        return this.matchMedia\n            .observe(this.hook.withPrintQuery(mqList))\n            .pipe(\n                filter((change: MediaChange) => change.matches),\n                debounceTime(0, asapScheduler),\n                switchMap(_ => of(this.findAllActivations())),\n                map(excludeOverlaps),\n                filter(hasChanges),\n                distinctUntilChanged(ignoreDuplicates),\n                takeUntil(this.destroyed$)\n            );\n    }\n\n    /**\n   * Find all current activations and prepare single list of activations\n   * sorted by descending priority.\n   */\n    private findAllActivations(): MediaChange[] {\n        const mergeMQAlias = (change: MediaChange) => {\n            const bp: OptionalBreakPoint = this.breakpoints.findByQuery(change.mediaQuery);\n            return mergeAlias(change, bp);\n        };\n        const replaceWithPrintAlias = (change: MediaChange) =>\n            this.hook.isPrintEvent(change) ? this.hook.updateEvent(change) : change;\n\n        return this.matchMedia\n            .activations\n            .map(query => new MediaChange(true, query))\n            .map(replaceWithPrintAlias)\n            .map(mergeMQAlias)\n            .sort(sortDescendingPriority);\n    }\n\n    private readonly _media$: Observable<MediaChange[]>;\n    private readonly destroyed$ = new Subject<void>();\n}\n\n/**\n * Find associated breakpoint (if any)\n */\nfunction toMediaQuery(query: string, locator: BreakPointRegistry): string | null {\n    const bp = locator.findByAlias(query) ?? locator.findByQuery(query);\n    return bp?.mediaQuery ?? null;\n}\n\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries: string[]): string[] {\n    return queries.flatMap(query => query.split(','))\n        .map(query => query.trim());\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 */\n\nexport * from './media-observer';\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 {Inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {isPlatformBrowser, DOCUMENT} from '@angular/common';\n\nimport {fromEvent, Subscription} from 'rxjs';\nimport {take} from 'rxjs/operators';\n\nimport {mergeAlias} from '../add-alias';\nimport {MediaChange} from '../media-change';\nimport {MatchMedia} from '../match-media/match-media';\nimport {BreakPointRegistry, OptionalBreakPoint} from '../breakpoints/break-point-registry';\nimport {sortDescendingPriority} from '../utils/sort';\nimport {LAYOUT_CONFIG, LayoutConfigOptions} from '../tokens/library-config';\n\n/**\n * Class\n */\n@Injectable({providedIn: 'root'})\nexport class MediaTrigger {\n\n    constructor(\n        protected breakpoints: BreakPointRegistry,\n        protected matchMedia: MatchMedia,\n        @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions,\n        @Inject(PLATFORM_ID) protected _platformId: Object,\n        @Inject(DOCUMENT) protected _document: any) {\n    }\n\n    /**\n   * Manually activate range of breakpoints\n   * @param list array of mediaQuery or alias strings\n   */\n    activate(list: string[]) {\n        list = list.map(it => it.trim()); // trim queries\n\n        this.saveActivations();\n        this.deactivateAll();\n        this.setActivations(list);\n\n        this.prepareAutoRestore();\n    }\n\n    /**\n   * Restore original, 'real' breakpoints and emit events\n   * to trigger stream notification\n   */\n    restore() {\n        if (this.hasCachedRegistryMatches) {\n            const extractQuery = (change: MediaChange) => change.mediaQuery;\n            const list = this.originalActivations.map(extractQuery);\n            try {\n                this.deactivateAll();\n                this.restoreRegistryMatches();\n                this.setActivations(list);\n            } finally {\n                this.originalActivations = [];\n                if (this.resizeSubscription) {\n                    this.resizeSubscription.unsubscribe();\n                }\n            }\n        }\n    }\n\n    // ************************************************\n    // Internal Methods\n    // ************************************************\n\n    /**\n   * Whenever window resizes, immediately auto-restore original\n   * activations (if we are simulating activations)\n   */\n    private prepareAutoRestore() {\n        const isBrowser = isPlatformBrowser(this._platformId) && this._document;\n        const enableAutoRestore = isBrowser && this.layoutConfig.mediaTriggerAutoRestore;\n\n        if (enableAutoRestore) {\n            const resize$ = fromEvent(window, 'resize').pipe(take(1));\n            this.resizeSubscription = resize$.subscribe(this.restore.bind(this));\n        }\n    }\n\n    /**\n   * Notify all matchMedia subscribers of de-activations\n   *\n   * Note: we must force 'matches' updates for\n   *       future matchMedia::activation lookups\n   */\n    private deactivateAll() {\n        const list = this.currentActivations;\n\n        this.forceRegistryMatches(list, false);\n        this.simulateMediaChanges(list, false);\n    }\n\n    /**\n   * Cache current activations as sorted, prioritized list of MediaChanges\n   */\n    private saveActivations() {\n        if (!this.hasCachedRegistryMatches) {\n            const toMediaChange = (query: string) => new MediaChange(true, query);\n            const mergeMQAlias = (change: MediaChange) => {\n                const bp: OptionalBreakPoint = this.breakpoints.findByQuery(change.mediaQuery);\n                return mergeAlias(change, bp);\n            };\n\n            this.originalActivations = this.currentActivations\n                .map(toMediaChange)\n                .map(mergeMQAlias)\n                .sort(sortDescendingPriority);\n\n            this.cacheRegistryMatches();\n        }\n    }\n\n    /**\n   * Force set manual activations for specified mediaQuery list\n   */\n    private setActivations(list: string[]) {\n        if (!!this.originalRegistry) {\n            this.forceRegistryMatches(list, true);\n        }\n        this.simulateMediaChanges(list);\n    }\n\n    /**\n   * For specified mediaQuery list manually simulate activations or deactivations\n   */\n    private simulateMediaChanges(queries: string[], matches = true) {\n        const toMediaQuery = (query: string) => {\n            const locator = this.breakpoints;\n            const bp = locator.findByAlias(query) || locator.findByQuery(query);\n            return bp ? bp.mediaQuery : query;\n        };\n        const emitChangeEvent = (query: string) => this.emitChangeEvent(matches, query);\n\n        queries.map(toMediaQuery).forEach(emitChangeEvent);\n    }\n\n    /**\n   * Replace current registry with simulated registry...\n   * Note: this is required since MediaQueryList::matches is 'readOnly'\n   */\n    private forceRegistryMatches(queries: string[], matches: boolean) {\n        const registry = new Map<string, MediaQueryList>();\n        queries.forEach(query => {\n            registry.set(query, {matches} as MediaQueryList);\n        });\n\n        this.matchMedia.registry = registry;\n    }\n\n    /**\n   * Save current MatchMedia::registry items.\n   */\n    private cacheRegistryMatches() {\n        const target = this.originalRegistry;\n\n        target.clear();\n        this.matchMedia.registry.forEach((value: MediaQueryList, key: string) => {\n            target.set(key, value);\n        });\n        this.hasCachedRegistryMatches = true;\n    }\n\n    /**\n   * Restore original, 'true' registry\n   */\n    private restoreRegistryMatches() {\n        const target = this.matchMedia.registry;\n\n        target.clear();\n        this.originalRegistry.forEach((value: MediaQueryList, key: string) => {\n            target.set(key, value);\n        });\n\n        this.originalRegistry.clear();\n        this.hasCachedRegistryMatches = false;\n    }\n\n    /**\n   * Manually emit a MediaChange event via the MatchMedia to MediaMarshaller and MediaObserver\n   */\n    private emitChangeEvent(matches: boolean, query: string) {\n        this.matchMedia.source.next(new MediaChange(matches, query));\n    }\n\n    private get currentActivations(): string[] {\n        return this.matchMedia.activations;\n    }\n\n    private hasCachedRegistryMatches = false;\n    private originalActivations: MediaChange[] = [];\n    private originalRegistry: Map<string, MediaQueryList> = new Map<string, MediaQueryList>();\n\n    private resizeSubscription!: Subscription;\n}\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 */\n\nexport * from './media-trigger';\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 */\nexport * from './sort';\nexport * from './array';\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 */\n\n/**\n * The flex API permits 3 or 1 parts of the value:\n *    - `flex-grow flex-shrink flex-basis`, or\n *    - `flex-basis`\n */\nexport function validateBasis(basis: string, grow = '1', shrink = '1'): string[] {\n    let parts = [grow, shrink, basis];\n\n    let j = basis.indexOf('calc');\n    if (j > 0) {\n        parts[2] = _validateCalcValue(basis.substring(j).trim());\n        let matches = basis.substr(0, j).trim().split(' ');\n        if (matches.length == 2) {\n            parts[0] = matches[0];\n            parts[1] = matches[1];\n        }\n    } else if (j == 0) {\n        parts[2] = _validateCalcValue(basis.trim());\n    } else {\n        let matches = basis.split(' ');\n        parts = (matches.length === 3) ? matches : [\n            grow, shrink, basis\n        ];\n    }\n\n    return parts;\n}\n\n\n/**\n * Calc expressions require whitespace before & after any expression operators\n * This is a simple, crude whitespace padding solution.\n *   - '3 3 calc(15em + 20px)'\n *   - calc(100% / 7 * 2)\n *   - 'calc(15em + 20px)'\n *   - 'calc(15em+20px)'\n *   - '37px'\n *   = '43%'\n */\nfunction _validateCalcValue(calc: string): string {\n    return calc.replace(/[\\s]/g, '').replace(/[\\/\\*\\+\\-]/g, ' $& ');\n}\n","export interface Multiplier {\n    readonly unit: string\n    readonly value: number\n}\n\nconst MULTIPLIER_SUFFIX = 'x';\n\nexport function multiply(value: string, multiplier?: Multiplier): string {\n    if (multiplier === undefined) {\n        return value;\n    }\n\n    const transformValue = (possibleValue: string) => {\n        const numberValue = +(possibleValue.slice(0, -MULTIPLIER_SUFFIX.length));\n\n        if (value.endsWith(MULTIPLIER_SUFFIX) && !isNaN(numberValue)) {\n            return `${numberValue * multiplier.value}${multiplier.unit}`;\n        }\n\n        return value;\n    };\n\n    return value.includes(' ') ?\n        value.split(' ').map(transformValue).join(' ') : transformValue(value);\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 */\n\nexport * from './module';\nexport * from './browser-provider';\nexport * from './media-change';\nexport * from './stylesheet-map/index';\nexport * from './tokens/index';\nexport * from './add-alias';\n\nexport * from './base/index';\nexport * from './breakpoints/index';\nexport {\n    MatchMedia as ɵMatchMedia,\n    MockMatchMedia as ɵMockMatchMedia,\n    MockMatchMediaProvider as ɵMockMatchMediaProvider,\n} from './match-media/index';\nexport * from './media-observer/index';\nexport * from './media-trigger/index';\nexport * from './utils/index';\n\nexport * from './style-utils/style-utils';\nexport * from './style-builder/style-builder';\nexport * from './basis-validator/basis-validator';\nexport * from './media-marshaller/media-marshaller';\nexport * from './media-marshaller/print-hook';\nexport {Multiplier, multiply as ɵmultiply} from './multiply/multiplier';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StylesheetMap","i1.BreakPointRegistry","i1.MatchMedia","i2.BreakPointRegistry","i3.PrintHook","i1.StyleBuilder","i2.StyleUtils","i3.MediaMarshaller","i2.MatchMedia"],"mappings":";;;;;;;AAAA;;;;;;AAMG;AAIH;;;;AAIG;AACa,SAAA,YAAY,CAAC,SAAmB,EAAE,UAAkB,EAAA;AAChE,IAAA,OAAO,MAAK;AACR,QAAA,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE;AAC/B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAW,QAAA,EAAA,UAAU,CAAG,CAAA,CAAA,CAAC,CAAC;;;;;;YAOjF,MAAM,UAAU,GAAG,sBAAsB;AACzC,YAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAG;AAClB,gBAAA,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAG,EAAA,UAAU,CAAK,GAAA,CAAA,CAAC,IAAI,EAAE,CAAC,UAAU;oBACtD,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AAC5E,aAAC,CAAC;;AAEV,KAAC;AACL;AAEA;;AAEG;AACU,MAAA,gBAAgB,GAAG;AAC5B,IAAA,OAAO,EAAkC,sBAAsB;AAC/D,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;AAC7B,IAAA,KAAK,EAAE;;AAGJ,MAAM,UAAU,GAAG;;AC5C1B;;;;;;AAMG;AAMH;;;;AAIG;MAIU,UAAU,CAAA;8GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAV,UAAU,EAAA,CAAA,CAAA;+GAAV,UAAU,EAAA,SAAA,EAFR,CAAC,gBAAgB,CAAC,EAAA,CAAA,CAAA;;2FAEpB,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,SAAS,EAAE,CAAC,gBAAgB;AAC/B,iBAAA;;;ACVD;;AAEG;MACU,WAAW,CAAA;AAIpB;;;;;;AAMC;AACD,IAAA,WAAA,CAAmB,OAAU,GAAA,KAAK,EACvB,UAAA,GAAa,KAAK,EAClB,OAAU,GAAA,EAAE,EACZ,MAAA,GAAS,EAAE,EACX,WAAW,CAAC,EAAA;QAJJ,IAAO,CAAA,OAAA,GAAP,OAAO;QACf,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAdnB,IAAQ,CAAA,QAAA,GAAW,EAAE;;;IAkBrB,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;;AAEvF;;AClCD;;;;;;AAMG;AAGH;;;;;AAKG;MAEU,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAGa,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAA2C;AAmC3E;AAjCG;;AAEC;AACD,IAAA,iBAAiB,CAAC,OAAoB,EAAE,KAAa,EAAE,KAAoB,EAAA;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/C,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;;aACzB;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;;;AAI/D;;AAEC;IACD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;AAG3B;;AAEC;IACD,kBAAkB,CAAC,EAAe,EAAE,SAAiB,EAAA;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,KAAK,GAAG,EAAE;QACd,IAAI,MAAM,EAAE;YACR,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACxD,gBAAA,KAAK,GAAG,KAAK,GAAG,EAAE;;;AAG1B,QAAA,OAAO,KAAK;;8GAnCP,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADD,MAAM,EAAA,CAAA,CAAA;;2FAClB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;ACfhC;;;;;;AAMG;;ACNH;;;;;;AAMG;AAoBU,MAAA,cAAc,GAAkC;AACzD,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,oBAAoB,EAAE,EAAE;AACxB,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,qBAAqB,EAAE,EAAE;;;;AAIzB,IAAA,UAAU,EAAE,SAAkC;AAC9C,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,mBAAmB,EAAE,KAAK;;MAGjB,aAAa,GAAG,IAAI,cAAc,CAC3C,mDAAmD,EAAE;AACjD,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA;;AChDL;;;;;;AAMG;AAGH;;;;;AAKG;MACU,YAAY,GAAG,IAAI,cAAc,CAC1C,wBAAwB,EAAE;AACtB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA;;ACnBL;;;;;;AAMG;MAIU,UAAU,GAAG,IAAI,cAAc,CACxC,8DAA8D,EAAE;AAC5D,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,MAAM;AAClB,CAAA;;ACdL;;;;;;AAMG;;ACNH;;;;;;AAMG;AAIH;;;AAGG;AACa,SAAA,UAAU,CAAC,IAAiB,EAAE,MAA0B,EAAA;IACpE,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,WAAW,EAAE;IACzC,IAAI,MAAM,EAAE;AACR,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAgB;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAkB;;AAE7C,IAAA,OAAO,IAAI;AACf;;ACdA;MACsB,YAAY,CAAA;AAAlC,IAAA,WAAA,GAAA;;QAGI,IAAW,CAAA,WAAA,GAAG,IAAI;;AAKlB;;;;AAIC;AACD,IAAA,UAAU,CAAC,MAAc,EAAE,OAAwB,EAAE,OAAgB,EAAA;;AAExE;;ACzBD;;;;;;AAMG;MAUU,UAAU,CAAA;AAEnB,IAAA,WAAA,CAAoB,iBAAgC,EAClB,mBAA4B,EAC7B,WAAmB,EACjB,YAAiC,EAAA;QAHhD,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACH,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACpB,IAAW,CAAA,WAAA,GAAX,WAAW;QACT,IAAY,CAAA,YAAA,GAAZ,YAAY;;AAE/C;;AAEC;AACD,IAAA,mBAAmB,CAAC,OAAoB,EACpC,KAA+B,EAC/B,QAAgC,IAAI,EAAA;QACpC,IAAI,MAAM,GAAoB,EAAE;AAChC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;YACrB,KAAK,GAAG,MAAM;;AAElB,QAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,GAAG,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAClF,QAAA,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC;;AAGxD;;AAEC;AACD,IAAA,oBAAoB,CAAC,KAAsB,EAAE,QAAA,GAA0B,EAAE,EAAA;AACrE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,GAAG,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACxF,QAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAG;AAClB,YAAA,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,EAAE,CAAC;AACnD,SAAC,CAAC;;AAGN;;;;AAIC;AACD,IAAA,gBAAgB,CAAC,MAAmB,EAAA;QAChC,MAAM,KAAK,GAAG,gBAAgB;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC;AACxD,aAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,KAAK,GAAG,EAAE;AAEjF,QAAA,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,cAAc,CAAC;;AAG3C,IAAA,OAAO,CAAC,MAAmB,EAAA;QACvB,MAAM,KAAK,GAAG,WAAW;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,MAAM;;AAGrD;;AAEC;IACD,oBAAoB,CAAC,OAAoB,EAAE,SAAiB,EAAA;QACxD,OAAO,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;;AAGhD;;AAEC;IACD,iBAAiB,CAAC,OAAoB,EAAE,SAAiB,EAAA;AACrD,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACtC,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;;AAGtF;;;AAGC;AACD,IAAA,WAAW,CAAC,OAAoB,EAAE,SAAiB,EAAE,UAAU,GAAG,KAAK,EAAA;QACnE,IAAI,KAAK,GAAG,EAAE;QACd,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC;YACvE,IAAI,CAAC,cAAc,EAAE;AACjB,gBAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;oBACrC,IAAI,CAAC,UAAU,EAAE;wBACb,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC;;;qBAE9D;AACH,oBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;wBAC1B,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC;;;;;;;AAQrF,QAAA,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE;;AAGpC;;;;AAIC;;IAEO,8BAA8B,CAAC,MAAuB,EAC1D,OAAoB,EAAA;AACpB,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,IAAG;AACrC,YAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;AACtB,YAAA,MAAM,MAAM,GAA+B,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,EAAE;AACb,YAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;AACtB,gBAAA,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE;AAC/B,gBAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAClE,oBAAA,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;wBAC/B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;;qBAC5E;oBACH,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;;;AAGzE,SAAC,CAAC;;AAjHG,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,EAGP,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,YAAY,EACZ,EAAA,EAAA,KAAA,EAAA,WAAW,aACX,aAAa,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AALhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA,CAAA;;2FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;0BAIzB,MAAM;2BAAC,YAAY;;0BACnB,MAAM;2BAAC,WAAW;;0BAClB,MAAM;2BAAC,aAAa;;AAgH7B,SAAS,cAAc,CAAC,OAAY,EAAE,SAAiB,EAAA;AACnD,IAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;AAC5C,IAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;AACpC;AAEA,SAAS,cAAc,CAAC,OAAY,EAAE,SAAiB,EAAE,UAA0B,EAAA;AAC/E,IAAA,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE;AACvE,IAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;AAC5C,IAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,IAAI,EAAE;AACtC,IAAA,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC1C;AAEA,SAAS,mBAAmB,CAAC,OAAY,EAAE,QAAoC,EAAA;IAC3E,IAAI,cAAc,GAAG,EAAE;AACvB,IAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACxB,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC9B,IAAI,QAAQ,EAAE;YACV,cAAc,IAAI,GAAG,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;;;AAGpD,IAAA,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC;AACjD;AAEA,SAAS,kBAAkB,CAAC,OAAY,EAAA;IACpC,MAAM,QAAQ,GAA+B,EAAE;IAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;IACpD,IAAI,cAAc,EAAE;QAChB,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACjC,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACrC,gBAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAA,CAAE,CAAC;;AAElD,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE;AAC/C,gBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;;;;AAIhE,IAAA,OAAO,QAAQ;AACnB;;AC9KA;;;;;;AAMG;AAMH;AACgB,SAAA,sBAAsB,CAAyB,CAAW,EAAE,CAAW,EAAA;AACnF,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC;AACzC,IAAA,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC;IACzC,OAAO,SAAS,GAAG,SAAS;AAChC;AAEA;AACgB,SAAA,qBAAqB,CAAyB,CAAI,EAAE,CAAI,EAAA;AACpE,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;AAC1B,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC;IAC1B,OAAO,EAAE,GAAG,EAAE;AAClB;;ACxBA;;;;;;AAMG;AAQH;;;;;;AAMG;MAEU,UAAU,CAAA;AAMnB,IAAA,WAAA,CAAsB,KAAa,EACA,WAAmB,EACtB,SAAc,EAAA;QAFxB,IAAK,CAAA,KAAA,GAAL,KAAK;QACQ,IAAW,CAAA,WAAA,GAAX,WAAW;QACd,IAAS,CAAA,SAAA,GAAT,SAAS;;QANhC,IAAM,CAAA,MAAA,GAAG,IAAI,eAAe,CAAc,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AACzE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA0B;QAC3B,IAAwB,CAAA,wBAAA,GAAsB,EAAE;AAoHvD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;;AA7GnD;;AAEC;AACD,IAAA,IAAI,WAAW,GAAA;QACX,MAAM,OAAO,GAAa,EAAE;QAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAmB,EAAE,GAAW,KAAI;AACvD,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;;AAEzB,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGlB;;AAEC;AACD,IAAA,QAAQ,CAAC,UAAkB,EAAA;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QACzC,OAAO,GAAG,EAAE,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;;AAa9E;;;;;;;;AAQC;AACD,IAAA,OAAO,CAAC,MAAiB,EAAE,YAAY,GAAG,KAAK,EAAA;AAC3C,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,WAAW,GAA4B,IAAI,CAAC,YAAY,CAAC,IAAI,CAC/D,MAAM,CAAC,CAAC,MAAmB,KACvB,CAAC,YAAY,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACvE;YACD,MAAM,aAAa,GAA4B,IAAI,UAAU,CAAC,CAAC,QAA+B,KAAI;gBAC9F,MAAM,OAAO,GAAuB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9D,gBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAChB,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAG;AACjC,oBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAc,KAAI;AAC/B,wBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,qBAAC,CAAC;oBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;gBAEjC,QAAQ,CAAC,QAAQ,EAAE;AACvB,aAAC,CAAC;AACF,YAAA,OAAO,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC;;QAG5C,OAAO,IAAI,CAAC,YAAY;;AAG5B;;;AAGC;AACD,IAAA,aAAa,CAAC,UAA6B,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC;QAClE,MAAM,OAAO,GAAkB,EAAE;AAEjC,QAAA,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAEnC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAa,KAAI;AAC3B,YAAA,MAAM,UAAU,GAAG,CAAC,CAAsB,KAAI;gBAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7E,aAAC;YAED,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,GAAG,EAAE;AACN,gBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1B,gBAAA,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;AAC3B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,GAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACzE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;;AAGjC,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;AAElD,SAAC,CAAC;AAEF,QAAA,OAAO,OAAO;;IAGlB,WAAW,GAAA;AACP,QAAA,IAAI,EAAE;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,EAAE;AAC7C,YAAA,EAAE,EAAE;;;AAIZ;;;AAGC;AACS,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC5B,OAAO,YAAY,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;8GArH1D,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAOP,WAAW,EAAA,EAAA,EAAA,KAAA,EACX,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADE,MAAM,EAAA,CAAA,CAAA;;2FAClB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAQvB,MAAM;2BAAC,WAAW;;0BAClB,MAAM;2BAAC,QAAQ;;AAmHxB;;;AAGG;AACH,MAAM,UAAU,GAA2B,EAAE;AAE7C;;;;;;AAMG;AACH,SAAS,aAAa,CAAC,YAAsB,EAAE,SAAmB,EAAA;AAC9D,IAAA,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACvD,IAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAE7B,QAAA,IAAI;YACA,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;AAEhD,YAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC;AACxC,YAAA,IAAI,CAAE,OAAe,CAAC,UAAU,EAAE;AAC9B,gBAAA,MAAM,OAAO,GAAG;;;;;SAKvB,KAAK,CAAA;CACb;gBACe,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;;AAG1D,YAAA,SAAS,CAAC,IAAK,CAAC,WAAW,CAAC,OAAO,CAAC;;AAGpC,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;;QAE9C,OAAO,CAAC,EAAE;AACR,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;;AAG5B;AAEA,SAAS,YAAY,CAAC,KAAa,EAAA;AAC/B,IAAA,MAAM,EAAE,GAAQ,IAAI,WAAW,EAAE;IACjC,EAAE,CAAC,OAAO,GAAG,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE;AAC5C,IAAA,EAAE,CAAC,KAAK,GAAG,KAAK;AAChB,IAAA,EAAE,CAAC,WAAW,GAAG,MAAK,GAAG;AACzB,IAAA,EAAE,CAAC,cAAc,GAAG,MAAK,GAAG;AAC5B,IAAA,EAAE,CAAC,gBAAgB,GAAG,MAAK,GAAG;AAC9B,IAAA,EAAE,CAAC,aAAa,GAAG,MAAM,KAAK;AAC9B,IAAA,EAAE,CAAC,QAAQ,GAAG,IAAI;AAElB,IAAA,OAAO,EAAoB;AAC/B;AAEA,SAAS,YAAY,CAAC,KAAa,EAAE,SAAkB,EAAA;AACnD,IAAA,MAAM,SAAS,GAAG,SAAS,IAAI,CAAC,CAAU,MAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW;AAE/E,IAAA,OAAO,SAAS,GAAY,MAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;AAC/E;;ACrMA;;AAEG;AACU,MAAA,mBAAmB,GAAiB;AAC7C,IAAA;AACI,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,uDAAuD;AACnE,QAAA,QAAQ,EAAE,IAAI;AACjB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,yDAAyD;AACrE,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,0DAA0D;AACtE,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,2DAA2D;AACvE,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,UAAU,EAAE,2DAA2D;AACvE,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,kCAAkC;AAC9C,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,kCAAkC;AAC9C,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,mCAAmC;AAC/C,QAAA,QAAQ,EAAE,GAAG;AAChB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,UAAU,EAAE,mCAAmC;AAClD,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,+BAA+B;QAC3C,QAAQ,EAAE,CAAC,GAAG;AACjB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,+BAA+B;QAC3C,QAAQ,EAAE,CAAC,GAAG;KACjB,EAAE;AACC,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,gCAAgC;QAC5C,QAAQ,EAAE,CAAC,GAAG;AACjB,KAAA;AACD,IAAA;AACI,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,gCAAgC;QAC5C,QAAQ,EAAE,CAAC,GAAG;AACjB;;;ACpFL;;;;;;AAMG;AAIH,MAAM,gBAAgB,GAAI,mDAAmD;AAC7E,MAAM,iBAAiB,GAAG,oDAAoD;AAE9E,MAAM,eAAe,GAAK,0EAA0E;AACpG,MAAM,gBAAgB,GAAI,4EAA4E;AAEtG,MAAM,YAAY,GAAQ,gDAAgD;AAC1E,MAAM,aAAa,GAAO,kDAAkD;AAE5E;AACa,MAAA,WAAW,GAAG;AACvB,IAAA,SAAS,EAAa,CAAA,EAAG,gBAAgB,CAAA,EAAA,EAAK,iBAAiB,CAAE,CAAA;AACjE,IAAA,QAAQ,EAAc,CAAA,EAAG,eAAe,CAAA,GAAA,EAAM,gBAAgB,CAAE,CAAA;AAChE,IAAA,KAAK,EAAiB,CAAA,EAAG,YAAY,CAAA,EAAA,EAAK,aAAa,CAAG,CAAA,CAAA;IAE1D,kBAAkB,EAAI,CAAG,EAAA,gBAAgB,CAAE,CAAA;IAC3C,iBAAiB,EAAK,CAAG,EAAA,eAAe,CAAG,CAAA,CAAA;IAC3C,cAAc,EAAQ,CAAG,EAAA,YAAY,CAAE,CAAA;IAEvC,mBAAmB,EAAG,CAAG,EAAA,iBAAiB,CAAE,CAAA;IAC5C,kBAAkB,EAAI,CAAG,EAAA,gBAAgB,CAAE,CAAA;IAC3C,eAAe,EAAO,CAAG,EAAA,aAAa,CAAE;;AAG5C;;AAEG;AACU,MAAA,uBAAuB,GAAiB;AACjD,IAAA,EAAC,OAAO,EAAE,SAAS,EAAa,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,OAAO,EAAC;AAClF,IAAA,EAAC,OAAO,EAAE,mBAAmB,EAAG,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,iBAAiB,EAAC;AAC5F,IAAA,EAAC,OAAO,EAAE,kBAAkB,EAAI,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,gBAAgB,EAAC;AAE3F,IAAA,EAAC,OAAO,EAAE,QAAQ,EAAc,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,MAAM,EAAC;AACjF,IAAA,EAAC,OAAO,EAAE,kBAAkB,EAAI,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,gBAAgB,EAAC;AAC3F,IAAA,EAAC,OAAO,EAAE,iBAAiB,EAAK,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,eAAe,EAAC;AAE1F,IAAA,EAAC,OAAO,EAAE,KAAK,EAAiB,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,GAAG,EAAE,WAAW,EAAG,IAAI,EAAE;AACnG,IAAA,EAAC,OAAO,EAAE,eAAe,EAAO,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,aAAa,EAAE,WAAW,EAAG,IAAI,EAAE;AAC7G,IAAA,EAAC,OAAO,EAAE,cAAc,EAAQ,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,EAAG,IAAI;;;AChD9G;;;;;;AAMG;AAIH,MAAM,gBAAgB,GAAG,WAAW;AACpC,SAAS,cAAc,CAAC,IAAY,EAAA;IAChC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;IACjD,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;AACtD,IAAA,OAAO,KAAK,CAAC,WAAW,EAAE,GAAG,SAAS;AAC1C;AAEA;;;AAGG;AACH,SAAS,SAAS,CAAC,IAAY,EAAA;AAC3B,IAAA,OAAO;AACF,SAAA,OAAO,CAAC,gBAAgB,EAAE,GAAG;SAC7B,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,cAAc;SAClB,IAAI,CAAC,EAAE,CAAC;AACjB;AAEA;;;AAGG;AACG,SAAU,gBAAgB,CAAC,IAAkB,EAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAc,KAAI;AAC5B,QAAA,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YACZ,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAChC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;;AAE1C,KAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACf;AAEA;;;;AAIG;SACa,YAAY,CAAC,QAAsB,EAAE,SAAuB,EAAE,EAAA;IAC1E,MAAM,IAAI,GAAgC,EAAE;AAC5C,IAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAG;AAClB,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;AACvB,KAAC,CAAC;;AAEF,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAc,KAAI;AAC9B,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YAChB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;;aAC7B;AACH,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;;AAE3B,KAAC,CAAC;IAEF,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE;;AC/DA;;;;;;AAMG;AAUH;;;AAGG;MACU,WAAW,GACtB,IAAI,cAAc,CAAe,oCAAoC,EAAE;AACnE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACV,QAAA,MAAM,WAAW,GAAQ,MAAM,CAAC,UAAU,CAAC;AAC3C,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;AAC1C,QAAA,MAAM,cAAc,GAAiB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;aACtE,GAAG,CAAC,CAAC,CAA4B,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,QAAA,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,iBAAiB,GAAG,EAAE,GAAG,mBAAmB;AACtE,aAAA,MAAM,CAAC,YAAY,CAAC,iBAAiB,GAAG,uBAAuB,GAAG,EAAE,CAAC;AAE1E,QAAA,OAAO,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC;;AAEpD,CAAA;;ACjCH;;;;;;AAMG;AASH;;;;AAIG;MAEU,kBAAkB,CAAA;AAG3B,IAAA,WAAA,CAAiC,IAAkB,EAAA;AAqDnD;;AAEC;AACgB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAA8B;AAvD9D,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;;AAGtD;;AAEC;AACD,IAAA,WAAW,CAAC,KAAa,EAAA;QACrB,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC;;AAGpF,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,KAAK,KAAK,CAAC;;AAGzE;;;AAGC;AACD,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC;;AAGlD;;AAEC;AACD,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC;;AAGzC;;;;AAIC;AACD,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC;;AAGjD;;AAEC;IACO,iBAAiB,CAAC,GAAW,EACjC,QAAqC,EAAA;QACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE;YACX,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;;QAErC,OAAO,QAAQ,IAAI,IAAI;;AApDlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAGP,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAHtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADN,MAAM,EAAA,CAAA,CAAA;;2FAClB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIf,MAAM;2BAAC,WAAW;;;ACxBnC;;;;;;AAMG;AAoBH,MAAM,KAAK,GAAG,OAAO;AACR,MAAA,gBAAgB,GAAG;AAC5B,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,QAAQ,EAAE;;AAGd;;;;;AAKG;MAEU,SAAS,CAAA;AAClB,IAAA,WAAA,CACc,WAA+B,EACR,YAAiC,EACtC,SAAc,EAAA;QAFhC,IAAW,CAAA,WAAA,GAAX,WAAW;QACY,IAAY,CAAA,YAAA,GAAZ,YAAY;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS;;;QAiDjC,IAA+B,CAAA,+BAAA,GAAG,KAAK;;;;;;QAOvC,IAA0B,CAAA,0BAAA,GAAG,KAAK;QAElC,IAAyB,CAAA,yBAAA,GAAe,EAAE;QAC1C,IAAwB,CAAA,wBAAA,GAAe,EAAE;QAEzC,IAAiB,CAAA,iBAAA,GAA6B,IAAI;;QAgJlD,IAAU,CAAA,UAAA,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,UAAU,EAAE;QACxB,IAAa,CAAA,aAAA,GAAiB,EAAE;;;AA3MxC,IAAA,cAAc,CAAC,OAAiB,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC;;;AAI9B,IAAA,YAAY,CAAC,CAAc,EAAA;QACvB,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;;;AAIzC,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;;;AAI9D,IAAA,IAAI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC;AACP,aAAA,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;aAChD,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAiB;;;IAIlD,mBAAmB,CAAC,EAAC,UAAU,EAAc,EAAA;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC;QACnD,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB;AAExE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;;;AAI5C,IAAA,WAAW,CAAC,KAAkB,EAAA;AAC1B,QAAA,IAAI,EAAE,GAAuB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC;AAE3E,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;;YAE1B,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,UAAU,GAAG,EAAE,EAAE,UAAU,IAAI,EAAE;;AAG3C,QAAA,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;;;;;;AAwBhC,IAAA,6BAA6B,CAAC,MAAkB,EAAA;;QAE5C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,+BAA+B,EAAE;YACrE;;AAGJ,QAAA,IAAI,CAAC,+BAA+B,GAAG,IAAI;QAE3C,MAAM,mBAAmB,GAAG,MAAK;;;AAG7B,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,gBAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClF,MAAM,CAAC,YAAY,EAAE;;AAE7B,SAAC;QAED,MAAM,kBAAkB,GAAG,MAAK;;;AAG5B,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBACzB,MAAM,CAAC,YAAY,EAAE;;AAE7B,SAAC;;QAGD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,CAAC;QAC/E,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,CAAC;AAE7E,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACxD,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAG1D;;;AAGC;AACD,IAAA,eAAe,CAAC,MAAkB,EAAA;QAC9B,OAAO,CAAC,KAAkB,KAAI;AAC1B,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACnC,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;oBAC3D,MAAM,CAAC,YAAY,EAAE;;AAClB,qBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAC9E,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBACzB,MAAM,CAAC,YAAY,EAAE;;gBAGzB;;AAGJ,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC;AAC1C,SAAC;;;IAIL,gBAAgB,GAAA;QACZ,OAAO,CAAC,KAAkB,KAAa;AACnC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACzD,SAAC;;AAGL;;;AAGC;IACS,aAAa,CAAC,MAAkB,EAAE,MAA4B,EAAA;AACpE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,oBAAoB;QACpD,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC;;;AAI9D,IAAA,YAAY,CAAC,MAAkB,EAAA;AACrC,QAAA,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa;AAChD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAG3B;;;;;;;;;;;;;;;;;AAiBC;IACD,kBAAkB,CAAC,MAAkB,EAAE,KAAkB,EAAA;QACrD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACrD,YAAA,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;;;;AAIlC,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;gBAEvB;;AAGJ,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAChB,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC;;gBAEzD,IAAI,EAAE,EAAE;AACJ,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjF,oBAAA,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACxF,oBAAA,MAAM,gBAAgB,GAAG,WAAW,IAAI,YAAY;oBACpD,IAAI,gBAAgB,EAAE;AAClB,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC;;;;;;;IAQnE,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAC5B,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAC7G,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;;;8GA5M1G,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAGN,aAAa,EAAA,EAAA,EAAA,KAAA,EACb,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cADG,MAAM,EAAA,CAAA,CAAA;;2FAClB,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIvB,MAAM;2BAAC,aAAa;;0BACpB,MAAM;2BAAC,QAAQ;;AAkNxB;AACA;AACA;AAEA;;;AAGG;AACH,MAAM,UAAU,CAAA;AAAhB,IAAA,WAAA,GAAA;;QAEI,IAAgB,CAAA,gBAAA,GAAiB,EAAE;;AAEnC,IAAA,mBAAmB,CAAC,MAA4B,EAAA;AAC5C,QAAA,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC7B,QAAA,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC;AACnC,QAAA,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC,gBAAgB;;;AAIhC,IAAA,aAAa,CAAC,EAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,CAAC,EAAE,EAAE;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU,CAAC;AAElF,YAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;;;AAGxB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB;sBACvE,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;;;;;IAMhD,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAEjC;AAED;AACA;AACA;AAEA;AACA,SAAS,iBAAiB,CAAC,EAAsB,EAAA;IAC7C,OAAO,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK;AACpD;;AC7SA;;;;;;AAMG;AAiCH;;;AAGG;MAEU,eAAe,CAAA;AAWxB,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;;IAGpD,IAAI,oBAAoB,CAAC,GAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,GAAG,GAAG,CAAC;;AAGzC,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC;;IAG1C,IAAI,YAAY,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAG9B,IAAA,WAAA,CAAsB,UAAsB,EAC9B,WAA+B,EAC/B,IAAe,EAAA;QAFP,IAAU,CAAA,UAAA,GAAV,UAAU;QAClB,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAI,CAAA,IAAA,GAAJ,IAAI;QA5BV,IAAa,CAAA,aAAA,GAAG,IAAI;QACpB,IAAqB,CAAA,qBAAA,GAAiB,EAAE;AACxC,QAAA,IAAA,CAAA,UAAU,GAAe,IAAI,GAAG,EAAE;AAClC,QAAA,IAAA,CAAA,aAAa,GAAkB,IAAI,OAAO,EAAE;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAe,IAAI,OAAO,EAAE,CAAC;AACvC,QAAA,IAAA,CAAA,SAAS,GAAe,IAAI,OAAO,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,QAAQ,GAAe,IAAI,OAAO,EAAE,CAAC;AAErC,QAAA,IAAA,CAAA,OAAO,GAA4B,IAAI,OAAO,EAAE;QAqBpD,IAAI,CAAC,kBAAkB,EAAE;;AAG7B;;;AAGC;AACD,IAAA,aAAa,CAAC,EAAe,EAAA;QACzB,MAAM,EAAE,GAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC;QAE7D,IAAI,EAAE,EAAE;AACJ,YAAA,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;YAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;YAErD,IAAI,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;AACnC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBAEvD,IAAI,CAAC,YAAY,EAAE;;iBAChB,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE;;gBAEtC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBAEvD,IAAI,CAAC,YAAY,EAAE;;;;AAK/B;;;;;;;AAOC;IACD,IAAI,CAAC,OAAoB,EACrB,GAAW,EACX,QAAyB,EACzB,OAAuB,EACvB,aAAA,GAAmC,EAAE,EAAA;QAErC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC;QACtD,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC;AAEpD,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC;QACrC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC;;AAGxD;;;;;AAKC;AACD,IAAA,QAAQ,CAAC,OAAoB,EAAE,GAAW,EAAE,EAAW,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,KAAK,EAAE;YACP,MAAM,MAAM,GAAG,EAAE,KAAK,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC;YACrF,IAAI,MAAM,EAAE;AACR,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;;;AAG9B,QAAA,OAAO,SAAS;;AAGpB;;;;AAIC;IACD,QAAQ,CAAC,OAAoB,EAAE,GAAW,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,KAAK,EAAE;YACP,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC;YAClD,IAAI,MAAM,EAAE;gBACR,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,KAAK;;;AAGrD,QAAA,OAAO,KAAK;;AAGhB;;;;;;AAMC;AACD,IAAA,QAAQ,CAAC,OAAoB,EAAE,GAAW,EAAE,GAAQ,EAAE,EAAU,EAAA;QAC5D,IAAI,KAAK,GAA8B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACnE,IAAI,CAAC,KAAK,EAAE;YACR,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;;aAChC;YACH,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;AACzD,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;AACzC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;;;;IAK/C,UAAU,CAAC,OAAoB,EAAE,GAAW,EAAA;QACxC,OAAO,IAAI,CAAC;AACP,aAAA,YAAY;aACZ,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;;;IAIlE,YAAY,GAAA;QACR,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,KAAI;AAClC,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACnD,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAE7C,IAAI,QAAQ,EAAE;gBACV,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBACtB,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B,oBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACpB,iBAAC,CAAC;;AAGN,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;gBACf,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC5C,IAAI,QAAQ,EAAE;oBACV,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;;qBAC7B;AACH,oBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;;AAEhC,aAAC,CAAC;AACN,SAAC,CAAC;;AAGN;;;;AAIC;IACD,YAAY,CAAC,OAAoB,EAAE,GAAW,EAAA;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QAE3C,IAAI,QAAQ,EAAE;YACV,MAAM,OAAO,GAAkB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAkB;AACjE,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE;AACX,gBAAA,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAC,CAAC;;;;AAKxD;;;;;AAKC;AACD,IAAA,aAAa,CAAC,OAAoB,EAAE,GAAW,EAAE,KAAU,EAAA;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACV,MAAM,QAAQ,GAAmB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAmB;AACpE,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACZ,QAAQ,CAAC,KAAK,CAAC;AACf,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC;;;;AAKpD;;;AAGC;AACD,IAAA,cAAc,CAAC,OAAoB,EAAA;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/C,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;;QAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAC/C,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;;;AAIvC;;;;AAIC;IACD,aAAa,CAAC,OAAoB,EAAE,GAAY,EAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,KAAK,EAAE;YACP,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC;YACpD,IAAI,QAAQ,EAAE;gBACV,IAAI,GAAG,EAAE;AACL,oBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;qBAChD;oBACH,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;;;;;IAOrE,kBAAkB,CAAC,OAAoB,EAAE,GAAW,EAAA;QACxD,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,MAAM,GAAG,IAAI,GAAG,EAAE;YAClB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;;AAE3C,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;;AAGnB;;;;;AAKC;AACO,IAAA,kBAAkB,CAAC,OAAoB,EAC3C,GAAW,EACX,QAA2B,EAAA;AAC3B,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,QAAQ,GAAG,IAAI,GAAG,EAAE;gBACpB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;;YAE1C,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC,YAAY,EAAE;gBACf,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAK;oBACtD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;oBAChD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC;AAClD,iBAAC,CAAC;AACF,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC;;;;;AAMtC,IAAA,WAAW,CAAC,KAAa,EAAA;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;;AAG9C;;;;AAIC;IACO,kBAAkB,CAAC,KAAoB,EAAE,GAAY,EAAA;AACzD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;YAE7C,IAAI,QAAQ,EAAE;gBACV,IAAI,GAAG,KAAK,SAAS,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE;AACvE,oBAAA,OAAO,QAAQ;;;;;;AAO3B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,YAAA,OAAO,SAAS;;QAGpB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,SAAS;;AAGtF;;AAEC;IACO,kBAAkB,GAAA;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC;AAE/D,QAAA,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;AAC7C,QAAA,IAAI,CAAC;aACA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;aACzC,IAAI,CACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAEvC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;8GAhUxC,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADH,MAAM,EAAA,CAAA,CAAA;;2FAClB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;AAsUhC,SAAS,cAAc,CAAC,GAAe,EACnC,OAAoB,EACpB,GAAW,EACX,KAAe,EAAA;AACf,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE;AAC5C,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACtB,QAAA,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;;AAEhC;;AC1XA;;;;;;AAMG;MAUmB,cAAc,CAAA;;AAUhC,IAAA,IAAc,aAAa,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa;;;AAItD,IAAA,IAAc,aAAa,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;;;AAIxC,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;;IAExE,IAAI,cAAc,CAAC,KAAa,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,EAC/D,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;;AAMpC,IAAA,WAAA,CAAgC,UAAsB,EACxC,YAA0B,EAC1B,MAAkB,EAClB,OAAwB,EAAA;QAHN,IAAU,CAAA,UAAA,GAAV,UAAU;QAC5B,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAO,CAAA,OAAA,GAAP,OAAO;QAhCX,IAAa,CAAA,aAAA,GAAG,EAAE;QAClB,IAAM,CAAA,MAAA,GAAa,EAAE;;QAErB,IAAG,CAAA,GAAA,GAAoB,EAAE;AACzB,QAAA,IAAA,CAAA,cAAc,GAAkB,IAAI,OAAO,EAAE;;AAuB7C,QAAA,IAAA,CAAA,UAAU,GAAiC,IAAI,GAAG,EAAE;;;AAS9D,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAC/B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AACjC,gBAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;;AAE9B,SAAC,CAAC;;IAGN,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC9B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;;;IAIzC,IAAI,CAAC,gBAAmC,EAAE,EAAA;AAChD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CACb,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3B,aAAa,CAChB;;;IAIK,SAAS,CAAC,KAAa,EAAE,MAAe,EAAA;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;AACjC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW;QAEpC,IAAI,SAAS,GAAgC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAEvE,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;YACzB,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;YAC9C,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;;;AAI7C,QAAA,IAAI,CAAC,GAAG,GAAG,EAAC,GAAG,SAAS,EAAC;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;QACnC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;;;IAItC,WAAW,GAAA;AACjB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;AACpB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;;IAIvB,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;;AAGtE;;;;;AAKC;AACS,IAAA,oBAAoB,CAAC,MAAmB,EAAE,YAAY,GAAG,KAAK,EAAA;QACpE,IAAI,MAAM,EAAE;AACR,YAAA,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAEpE,YAAA,IAAI,CAAC,cAAc,IAAI,YAAY,EAAE;AACjC,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;AACnC,gBAAA,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC;;AAGrD,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE;;AAGvB,QAAA,OAAO,KAAK;;AAGN,IAAA,OAAO,CAAC,MAAmB,EAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;;;IAI5B,mBAAmB,CAAC,KAAsB,EAChD,KAAuB,EACvB,OAAuB,GAAA,IAAI,CAAC,aAAa,EAAA;QACzC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC;;IAGhD,QAAQ,CAAC,GAAQ,EAAE,EAAU,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;;AAGhE,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;;8GA3If,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACfD;;;;;;AAMG;;ACNH;;;;;;AAMG;;ACNH;;;;;;AAMG;AAQH;;;;AAIG;AAEG,MAAO,cAAe,SAAQ,UAAU,CAAA;AAM1C,IAAA,WAAA,CAAY,KAAa,EACA,WAAmB,EACtB,SAAc,EACxB,YAAgC,EAAA;AACxC,QAAA,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;QAD5B,IAAY,CAAA,YAAA,GAAZ,YAAY;AANxB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC;;;IAUpB,QAAQ,GAAA;QACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAmB,KAAI;YACzC,GAA0B,CAAC,OAAO,EAAE;AACzC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;;AAI5B,IAAA,QAAQ,CAAC,UAAkB,EAAE,WAAW,GAAG,IAAI,CAAC,WAAW,EAAA;AACvD,QAAA,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;QAE5C,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC3C,IAAI,CAAC,cAAc,EAAE;AAErB,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC;;QAGvD,OAAO,IAAI,CAAC,YAAY;;;AAI5B,IAAA,cAAc,CAAC,YAAoB,EAAA;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC;AACtD,QAAA,OAAO,EAAE,EAAE,UAAU,IAAI,YAAY;;AAGzC;;;AAGC;IACO,qBAAqB,CAAC,UAAkB,EAAE,WAAoB,EAAA;QAClE,IAAI,WAAW,EAAE;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC;AACpD,YAAA,MAAM,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,SAAS;;YAGpC,QAAQ,KAAK;AACT,gBAAA,KAAK,IAAI;AACL,oBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;oBAChC;AACJ,gBAAA,KAAK,IAAI;oBACL,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACzC;AACJ,gBAAA,KAAK,IAAI;oBACL,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAClD;AACJ,gBAAA,KAAK,IAAI;AACL,oBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC3D;;;YAIR,QAAQ,KAAK;AACT,gBAAA,KAAK,IAAI;AACL,oBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC3D;AACJ,gBAAA,KAAK,IAAI;oBACL,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAClD;AACJ,gBAAA,KAAK,IAAI;oBACL,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBACzC;AACJ,gBAAA,KAAK,IAAI;AACL,oBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;oBAChC;;;;AAKZ,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;;AAG5C;;AAEC;AACO,IAAA,gBAAgB,CAAC,OAAiB,EAAA;AACtC,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAa,KAAI;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;YAC/C,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,IAAI,KAAK,CAAC;AAClD,SAAC;AACD,QAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAG7B;;AAEC;AACO,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5D,YAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;;QAExC,MAAM,GAAG,GAAuB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAuB;QAEnF,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;;QAEjD,OAAO,IAAI,CAAC,YAAY;;;IAIpB,cAAc,GAAA;QAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAkB,KAAI;YACxC,EAAyB,CAAC,UAAU,EAAE;AAC3C,SAAC,CAAC;AACF,QAAA,OAAO,IAAI;;;AAIP,IAAA,mBAAmB,CAAC,UAAkB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5D,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;;AAItC;;;AAGC;AACkB,IAAA,QAAQ,CAAC,KAAa,EAAA;AACrC,QAAA,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC;;AAGxC,IAAA,IAAc,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;;8GA1I7B,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAOX,WAAW,EAAA,EAAA,EAAA,KAAA,EACX,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAAN,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHARX,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;0BAQQ,MAAM;2BAAC,WAAW;;0BAClB,MAAM;2BAAC,QAAQ;;AAuIxB;;;;AAIG;AACG,MAAO,kBAAmB,SAAQ,WAAW,CAAA;AAI/C,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,SAAS;;AAGzB,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,WAAW;;AAG3B,IAAA,WAAA,CAAoB,WAAmB,EAAA;AACnC,QAAA,KAAK,EAAE;QADS,IAAW,CAAA,WAAA,GAAX,WAAW;QAXvB,IAAS,CAAA,SAAA,GAAG,KAAK;QACjB,IAAU,CAAA,UAAA,GAA6B,EAAE;QAkEjD,IAAQ,CAAA,QAAA,GAA2B,IAAI;;AApDvC;;;AAGC;IACD,OAAO,GAAA;QACH,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;;IAIxB,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBACjC,MAAM,EAAE,GAA6D,QAAS;AAC9E,gBAAA,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAwB,CAAC;AACpF,aAAC,CAAC;;AAEN,QAAA,OAAO,IAAI;;;IAIf,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBACjC,MAAM,EAAE,GAA6D,QAAS;AAC9E,gBAAA,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAwB,CAAC;AACpF,aAAC,CAAC;;AAEN,QAAA,OAAO,IAAI;;;AAIf,IAAA,WAAW,CAAC,QAAgC,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAElC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,MAAM,EAAE,GAA6D,QAAS;AAC9E,YAAA,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAwB,CAAC;;;;AAKxF,IAAA,cAAc,CAAC,CAAgC,EAAA;;AAGtC,IAAA,aAAa,CAAC,CAAQ,EAAA;AAC3B,QAAA,OAAO,KAAK;;AAInB;AAED;;AAEG;AACH;AACa,MAAA,sBAAsB,GAAG;AAClC,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,QAAQ,EAAE;;;ACrPd;;;;;;AAMG;;ACNH;;;;;;AAMG;AAEH;AACM,SAAU,WAAW,CAAI,KAAc,EAAA;AACzC,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AACjD;;ACXA;;;;;;AAMG;AAsBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCG;MAEU,aAAa,CAAA;AAItB,IAAA,WAAA,CAAsB,WAA+B,EACvC,UAAsB,EACtB,IAAe,EAAA;QAFP,IAAW,CAAA,WAAA,GAAX,WAAW;QACnB,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAI,CAAA,IAAA,GAAJ,IAAI;;QAJlB,IAAc,CAAA,cAAA,GAAG,KAAK;AAiIL,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;AA5H7C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE;;AAG1C;;;AAGC;IACD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;;;;AAO9B;;AAEC;IACD,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;;AAGvB;;;;;AAKC;AACD,IAAA,QAAQ,CAAC,KAAwB,EAAA;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,IAAG;YACxB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AACnD,YAAA,OAAO,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5D,SAAC,CAAC;;;;;AAON;;;;AAIC;IACO,gBAAgB,GAAA;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC;AAC/D,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;;AAGxC;;;;;;;;;;;;;AAaC;AACO,IAAA,eAAe,CAAC,MAAgB,EAAA;AACpC,QAAA,MAAM,UAAU,GAAG,CAAC,OAAsB,KAAI;AAC1C,YAAA,MAAM,YAAY,GAAG,CAAC,MAAmB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E,YAAA,QAAQ,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;AACnD,SAAC;AACD,QAAA,MAAM,eAAe,GAAG,CAAC,OAAsB,KAAI;AAC/C,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;AAC5D,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;AAC1D,gBAAA,OAAO,EAAE,EAAE,WAAW,IAAI,IAAI;AAClC,aAAC,CAAC;AACN,SAAC;AACD,QAAA,MAAM,gBAAgB,GAAG,CAAC,QAAuB,EAAE,OAAsB,KAAa;YAClF,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AACpC,gBAAA,OAAO,KAAK;;AAGhB,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC;AACrD,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzE,YAAA,OAAO,UAAU,CAAC,IAAI,KAAK,CAAC;AAChC,SAAC;AAED;AACD;QACC,OAAO,IAAI,CAAC;aACP,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;aACxC,IAAI,CACD,MAAM,CAAC,CAAC,MAAmB,KAAK,MAAM,CAAC,OAAO,CAAC,EAC/C,YAAY,CAAC,CAAC,EAAE,aAAa,CAAC,EAC9B,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAC7C,GAAG,CAAC,eAAe,CAAC,EACpB,MAAM,CAAC,UAAU,CAAC,EAClB,oBAAoB,CAAC,gBAAgB,CAAC,EACtC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC7B;;AAGT;;;AAGC;IACO,kBAAkB,GAAA;AACtB,QAAA,MAAM,YAAY,GAAG,CAAC,MAAmB,KAAI;AACzC,YAAA,MAAM,EAAE,GAAuB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9E,YAAA,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;AACjC,SAAC;AACD,QAAA,MAAM,qBAAqB,GAAG,CAAC,MAAmB,KAC9C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM;QAE3E,OAAO,IAAI,CAAC;aACP;AACA,aAAA,GAAG,CAAC,KAAK,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;aACzC,GAAG,CAAC,qBAAqB;aACzB,GAAG,CAAC,YAAY;aAChB,IAAI,CAAC,sBAAsB,CAAC;;8GA/H5B,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAJ,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADD,MAAM,EAAA,CAAA,CAAA;;2FAClB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;AAuIhC;;AAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,OAA2B,EAAA;AAC5D,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;AACnE,IAAA,OAAO,EAAE,EAAE,UAAU,IAAI,IAAI;AACjC;AAEA;;;AAGG;AACH,SAAS,YAAY,CAAC,OAAiB,EAAA;AACnC,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;SAC3C,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AACnC;;AC3NA;;;;;;AAMG;;ACNH;;;;;;AAMG;AAcH;;AAEG;MAEU,YAAY,CAAA;IAErB,WACc,CAAA,WAA+B,EAC/B,UAAsB,EACC,YAAiC,EACnC,WAAmB,EACtB,SAAc,EAAA;QAJhC,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAU,CAAA,UAAA,GAAV,UAAU;QACa,IAAY,CAAA,YAAA,GAAZ,YAAY;QACd,IAAW,CAAA,WAAA,GAAX,WAAW;QACd,IAAS,CAAA,SAAA,GAAT,SAAS;QAqKjC,IAAwB,CAAA,wBAAA,GAAG,KAAK;QAChC,IAAmB,CAAA,mBAAA,GAAkB,EAAE;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAgC,IAAI,GAAG,EAA0B;;AApKzF;;;AAGC;AACD,IAAA,QAAQ,CAAC,IAAc,EAAA;AACnB,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjC,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAEzB,IAAI,CAAC,kBAAkB,EAAE;;AAG7B;;;AAGC;IACD,OAAO,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,MAAM,YAAY,GAAG,CAAC,MAAmB,KAAK,MAAM,CAAC,UAAU;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC;AACvD,YAAA,IAAI;gBACA,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;oBACnB;AACN,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;;;;;;;;AAUrD;;;AAGC;IACO,kBAAkB,GAAA;AACtB,QAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS;QACvE,MAAM,iBAAiB,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,uBAAuB;QAEhF,IAAI,iBAAiB,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;AAI5E;;;;;AAKC;IACO,aAAa,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB;AAEpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC;;AAG1C;;AAEC;IACO,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAChC,YAAA,MAAM,aAAa,GAAG,CAAC,KAAa,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;AACrE,YAAA,MAAM,YAAY,GAAG,CAAC,MAAmB,KAAI;AACzC,gBAAA,MAAM,EAAE,GAAuB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9E,gBAAA,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;AACjC,aAAC;AAED,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;iBAC3B,GAAG,CAAC,aAAa;iBACjB,GAAG,CAAC,YAAY;iBAChB,IAAI,CAAC,sBAAsB,CAAC;YAEjC,IAAI,CAAC,oBAAoB,EAAE;;;AAInC;;AAEC;AACO,IAAA,cAAc,CAAC,IAAc,EAAA;AACjC,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC;;AAEzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;;AAGnC;;AAEC;AACO,IAAA,oBAAoB,CAAC,OAAiB,EAAE,OAAO,GAAG,IAAI,EAAA;AAC1D,QAAA,MAAM,YAAY,GAAG,CAAC,KAAa,KAAI;AACnC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,YAAA,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;YACnE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,GAAG,KAAK;AACrC,SAAC;AACD,QAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC;QAE/E,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;;AAGtD;;;AAGC;IACO,oBAAoB,CAAC,OAAiB,EAAE,OAAgB,EAAA;AAC5D,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B;AAClD,QAAA,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;YACpB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,OAAO,EAAmB,CAAC;AACpD,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ;;AAGvC;;AAEC;IACO,oBAAoB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB;QAEpC,MAAM,CAAC,KAAK,EAAE;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAqB,EAAE,GAAW,KAAI;AACpE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAC1B,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;;AAGxC;;AAEC;IACO,sBAAsB,GAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ;QAEvC,MAAM,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAqB,EAAE,GAAW,KAAI;AACjE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAC1B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;;AAGzC;;AAEC;IACO,eAAe,CAAC,OAAgB,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;;AAGhE,IAAA,IAAY,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW;;AAzK7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,EAKT,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAO,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EACb,EAAA,EAAA,KAAA,EAAA,WAAW,aACX,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAPX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADA,MAAM,EAAA,CAAA,CAAA;;2FAClB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAMvB,MAAM;2BAAC,aAAa;;0BACpB,MAAM;2BAAC,WAAW;;0BAClB,MAAM;2BAAC,QAAQ;;;AC/BxB;;;;;;AAMG;;ACNH;;;;;;AAMG;;ACNH;;;;;;AAMG;AAEH;;;;AAIG;AACG,SAAU,aAAa,CAAC,KAAa,EAAE,IAAI,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAA;IACjE,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;IAEjC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAC7B,IAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AAClD,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;YACrB,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YACrB,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;;;AAEtB,SAAA,IAAI,CAAC,IAAI,CAAC,EAAE;QACf,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;SACxC;QACH,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,GAAG;YACvC,IAAI,EAAE,MAAM,EAAE;SACjB;;AAGL,IAAA,OAAO,KAAK;AAChB;AAGA;;;;;;;;;AASG;AACH,SAAS,kBAAkB,CAAC,IAAY,EAAA;AACpC,IAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC;AACnE;;AC5CA,MAAM,iBAAiB,GAAG,GAAG;AAEb,SAAA,QAAQ,CAAC,KAAa,EAAE,UAAuB,EAAA;AAC3D,IAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC1B,QAAA,OAAO,KAAK;;AAGhB,IAAA,MAAM,cAAc,GAAG,CAAC,aAAqB,KAAI;AAC7C,QAAA,MAAM,WAAW,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAExE,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;YAC1D,OAAO,CAAA,EAAG,WAAW,GAAG,UAAU,CAAC,KAAK,CAAA,EAAG,UAAU,CAAC,IAAI,CAAA,CAAE;;AAGhE,QAAA,OAAO,KAAK;AAChB,KAAC;AAED,IAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC;AAC9E;;ACxBA;;;;;;AAMG;;ACNH;;AAEG;;;;"}