UNPKG

@ngneat/overview

Version:

The Template for Success in Template Management

1 lines 34.8 kB
{"version":3,"file":"ngneat-overview.mjs","sources":["../../../../projects/ngneat/overview/src/lib/teleport/teleport.service.ts","../../../../projects/ngneat/overview/src/lib/teleport/teleport.directive.ts","../../../../projects/ngneat/overview/src/lib/teleport/teleport-outlet.directive.ts","../../../../projects/ngneat/overview/src/lib/views/comp-ref.ts","../../../../projects/ngneat/overview/src/lib/views/types.ts","../../../../projects/ngneat/overview/src/lib/views/template-ref.ts","../../../../projects/ngneat/overview/src/lib/views/string-ref.ts","../../../../projects/ngneat/overview/src/lib/views/view.ts","../../../../projects/ngneat/overview/src/lib/dynamic-view/dynamic-view.component.ts","../../../../projects/ngneat/overview/src/lib/dynamic-view/dynamic-view.directive.ts","../../../../projects/ngneat/overview/src/ngneat-overview.ts"],"sourcesContent":["import { Injectable, ViewContainerRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, startWith } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TeleportService {\n private outlets = new BehaviorSubject<string>('');\n\n outlet$(name: string) {\n return this.outlets.pipe(\n // Immediately check current ports on subscription so that a teleportTo\n // registered after its outlet doesn't miss the already-emitted newOutlet event.\n // Without this, BehaviorSubject only replays one name, so only the last\n // registered outlet is visible to new subscribers.\n startWith(name),\n filter((current) => current === name),\n map((name) => this.ports.get(name)),\n distinctUntilChanged()\n );\n }\n\n ports = new Map<string, ViewContainerRef>();\n\n newOutlet(name: string) {\n this.outlets.next(name);\n }\n}\n","import { Directive, type EmbeddedViewRef, TemplateRef, effect, inject, model, untracked } from '@angular/core';\n\nimport { TeleportService } from './teleport.service';\n\n@Directive({\n selector: '[teleportTo]',\n})\nexport class TeleportDirective {\n readonly teleportTo = model<string | null | undefined>();\n\n private viewRef: EmbeddedViewRef<any> | null = null;\n\n private tpl = inject(TemplateRef);\n private service = inject(TeleportService);\n\n constructor() {\n effect((onCleanup) => {\n const teleportTo = this.teleportTo();\n if (!teleportTo) return;\n\n // outlet$() emits immediately if the outlet is already registered, or\n // waits for it to appear — covering both sync and async outlet creation.\n const subscription = this.service.outlet$(teleportTo).subscribe((outlet) => {\n if (!outlet) return;\n\n // untracked() prevents signals read during view creation (e.g. in the\n // teleported template's directives) from being tracked as dependencies\n // of this effect, which would cause spurious re-runs and view recreation.\n this.viewRef = untracked(() => {\n return outlet.createEmbeddedView(this.tpl);\n });\n });\n\n // onCleanup runs before the next effect execution and on directive destroy,\n // ensuring the subscription and the remote view are always released together.\n onCleanup(() => {\n subscription.unsubscribe();\n this.viewRef?.destroy();\n this.viewRef = null;\n });\n });\n }\n}\n","import { DestroyRef, Directive, ViewContainerRef, effect, inject, input } from '@angular/core';\nimport { TeleportService } from './teleport.service';\n\n@Directive({\n selector: '[teleportOutlet]',\n})\nexport class TeleportOutletDirective {\n readonly teleportOutlet = input<string | null | undefined>();\n private vcr = inject(ViewContainerRef);\n private service = inject(TeleportService);\n\n constructor() {\n effect(() => {\n const teleportOutlet = this.teleportOutlet();\n if (teleportOutlet) {\n this.service.ports.set(teleportOutlet, this.vcr);\n this.service.newOutlet(teleportOutlet);\n }\n });\n\n inject(DestroyRef).onDestroy(() => {\n this.service.ports.delete(this.teleportOutlet());\n });\n }\n}\n","import {\n ApplicationRef,\n type Binding,\n ComponentRef,\n createComponent,\n type DirectiveWithBindings,\n EnvironmentInjector,\n Injector,\n Type,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { ExcludeFunctions, ExtractInputTypes, InferInputSignalType, ViewRef } from './types';\n\ninterface Options<Comp, Context> {\n component: Type<Comp>;\n injector: Injector;\n environmentInjector: EnvironmentInjector;\n vcr: ViewContainerRef | undefined;\n appRef: ApplicationRef | undefined;\n contextSignal?: WritableSignal<Context>;\n bindings?: Binding[];\n directives?: (Type<unknown> | DirectiveWithBindings<unknown>)[];\n}\n\nexport class CompRef<Comp, Context = any> implements ViewRef {\n ref: ComponentRef<Comp>;\n\n constructor(private options: Options<Comp, Context>) {\n if (options.vcr) {\n // Creating through a ViewContainerRef inserts the component into the existing\n // Angular view tree, so it participates in the host's change detection naturally.\n this.ref = options.vcr.createComponent(options.component, {\n index: options.vcr.length,\n injector: options.injector || options.vcr.injector,\n bindings: options.bindings,\n directives: options.directives,\n });\n } else {\n // Without a ViewContainerRef the component is created detached from any view tree.\n // Attaching to ApplicationRef keeps it inside Angular's change detection cycle so\n // it still updates — otherwise the view would be permanently stale.\n this.ref = createComponent<Comp>(options.component, {\n elementInjector: options.injector,\n environmentInjector: options.environmentInjector,\n bindings: options.bindings,\n directives: options.directives,\n });\n options.appRef.attachView(this.ref.hostView);\n }\n }\n\n setInput<K extends keyof ExcludeFunctions<Comp>>(input: K, value: InferInputSignalType<Comp[K]>) {\n this.ref.setInput(input as string, value);\n\n return this;\n }\n\n setInputs(inputs: Partial<ExtractInputTypes<ExcludeFunctions<Comp>>>) {\n Object.keys(inputs).forEach((input) => {\n this.ref.setInput(input, inputs[input]);\n });\n\n return this;\n }\n\n detectChanges() {\n this.ref.hostView.detectChanges();\n\n return this;\n }\n\n updateContext(context: Context) {\n // Context is held in a signal so the component can react to updates reactively\n // without requiring an explicit change detection call from the outside.\n this.options.contextSignal?.set(context);\n\n return this;\n }\n\n appendTo(container: Element) {\n container.appendChild(this.getElement());\n\n return this;\n }\n\n removeFrom(container: Element) {\n container.removeChild(this.getElement());\n\n return this;\n }\n\n getRawContent() {\n return this.getElement().outerHTML;\n }\n\n getElement<T extends Element>(): T {\n return this.ref.location.nativeElement;\n }\n\n destroy() {\n this.ref.destroy();\n // When there's no ViewContainerRef we manually attached to ApplicationRef,\n // so we must also manually detach — otherwise Angular keeps running change\n // detection on a destroyed view, causing errors.\n !this.options.vcr && this.options.appRef.detachView(this.ref.hostView);\n this.ref = null;\n }\n}\n","import { InputSignal, InputSignalWithTransform, TemplateRef, Type } from '@angular/core';\nimport { CompRef } from './comp-ref';\nimport { StringRef } from './string-ref';\nimport { TplRef } from './template-ref';\n\n// A common interface so callers can hold any kind of rendered content — component,\n// template, or plain string — and interact with it uniformly without branching on the type.\nexport interface ViewRef {\n getElement(): Element | string;\n\n detectChanges(): ViewRef;\n\n updateContext(context: any): ViewRef;\n\n destroy(): void;\n}\n\n// Angular signal inputs are technically functions at runtime, but they represent data\n// properties — not methods. Without this carve-out they'd be filtered out alongside\n// real methods, making typed input setting impossible for modern signal-based components.\ntype ExcludeFunctionPropertyNames<T> = {\n [Key in keyof T]: T[Key] extends InputSignal<any> ? Key : T[Key] extends Function ? never : Key;\n}[keyof T];\n\n// Signal inputs distinguish between the value type and the transform type (what you\n// pass in vs. what the component reads out). We want the transform type so callers\n// provide values that satisfy the input's acceptance contract, not just its output type.\nexport type InferInputSignalType<T> = T extends InputSignalWithTransform<unknown, infer R> ? R : T extends InputSignal<infer R> ? R : T;\nexport type ExtractInputTypes<T> = {\n [Key in keyof T]: InferInputSignalType<T[Key]>;\n}\n\nexport type ExcludeFunctions<T> = Pick<T, ExcludeFunctionPropertyNames<T>>;\nexport type Content = string | number | TemplateRef<any> | Type<any>;\n\n// Narrows the return type of createView so callers get a fully-typed ref\n// (e.g. CompRef<MyComp>) instead of the base ViewRef, enabling typed input setting\n// without casting.\nexport type ResolveViewRef<T> = T extends Type<infer Instance>\n ? CompRef<Instance>\n : T extends TemplateRef<infer Context>\n ? TplRef<Context>\n : StringRef;\n\n// Runtime type guards are needed because Content is a union that TypeScript can't\n// narrow automatically at runtime — TemplateRef, component classes, and strings are\n// structurally indistinguishable without these checks.\nexport function isTemplateRef(value: any): value is TemplateRef<any> {\n return value instanceof TemplateRef;\n}\n\nexport function isComponent(value: any): value is Type<any> {\n return typeof value === 'function';\n}\n\nexport function isString(value: any): value is string {\n return typeof value === 'string';\n}\n\n// CompRef and TplRef store their inner Angular view refs differently, so this\n// normalises access when the raw Angular view (e.g. for change detection) is needed.\nexport function getViewRef<T>(value: CompRef<T> | TplRef<T>) {\n return value instanceof CompRef ? value.ref.hostView : value.ref;\n}\n","import { ApplicationRef, EmbeddedViewRef, Injector, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { ViewRef } from './types';\n\ninterface Args<C> {\n tpl: TemplateRef<C>;\n context: C;\n vcr: ViewContainerRef | undefined;\n appRef: ApplicationRef | undefined;\n injector: Injector | undefined;\n}\n\nexport class TplRef<C> implements ViewRef {\n ref: EmbeddedViewRef<{}>;\n private element: Element;\n\n constructor(private args: Args<C>) {\n if (this.args.vcr) {\n // Creating through a ViewContainerRef inserts the view into the Angular view tree,\n // giving it automatic change detection via its host component's cycle.\n this.ref = this.args.vcr.createEmbeddedView(this.args.tpl, this.args.context || {}, { injector: args.injector });\n this.ref.detectChanges();\n } else {\n // Without a ViewContainerRef the view sits outside the component tree, so we attach\n // it to ApplicationRef to keep it inside Angular's change detection — then trigger\n // an initial check since no parent cycle will do it for us.\n this.ref = this.args.tpl.createEmbeddedView(this.args.context || ({} as C), args.injector);\n this.ref.detectChanges();\n this.args.appRef.attachView(this.ref);\n }\n }\n\n detectChanges() {\n this.ref.detectChanges();\n\n return this;\n }\n\n getElement(): Element {\n const rootNodes = this.ref.rootNodes;\n if (rootNodes.length === 1 && rootNodes[0] === Node.ELEMENT_NODE) {\n this.element = rootNodes[0];\n } else {\n // Templates can project multiple root nodes (e.g. siblings or ng-container contents).\n // Wrapping them ensures callers always receive a single element they can append,\n // remove, or measure without handling multi-root edge cases themselves.\n this.element = document.createElement('div');\n this.element.append(...rootNodes);\n }\n\n return this.element;\n }\n\n destroy() {\n if (this.ref.rootNodes[0] !== 1) {\n // Only remove the wrapper element from the DOM if it was actually inserted there.\n // Skipping this for VCR-managed views avoids double-removal, since Angular tears\n // those down through the view tree itself.\n this.element?.parentNode.removeChild(this.element);\n this.element = null;\n }\n\n if (!this.args.vcr) {\n // Mirror the manual attachView from construction — Angular won't clean this up\n // on its own for views that live outside the component tree.\n this.args.appRef.detachView(this.ref);\n }\n\n this.ref.destroy();\n this.ref = null;\n }\n\n updateContext(context: C) {\n // Mutating the existing context object (rather than replacing it) preserves\n // any template variable bindings that already hold a reference to the context.\n Object.assign(this.ref.context, context);\n\n return this;\n }\n}\n","import { ViewRef } from './types';\n\n// Plain strings have no Angular lifecycle, so this adapter exists purely to satisfy\n// the ViewRef contract — letting callers treat all content types uniformly without\n// special-casing strings throughout the codebase.\nexport class StringRef implements ViewRef {\n constructor(private value: string) {}\n\n getElement(): string {\n return this.value;\n }\n\n detectChanges() {\n return this;\n }\n\n updateContext() {\n return this;\n }\n\n destroy() {}\n}\n","import {\n ApplicationRef,\n type Binding,\n type DirectiveWithBindings,\n EnvironmentInjector,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n Signal,\n signal,\n TemplateRef,\n Type,\n untracked,\n ViewContainerRef,\n WritableSignal,\n} from '@angular/core';\nimport { Content, isComponent, isString, isTemplateRef, ViewRef } from './types';\nimport { TplRef } from './template-ref';\nimport { StringRef } from './string-ref';\nimport { CompRef } from './comp-ref';\n\ninterface _ViewOptions {\n vcr?: ViewContainerRef | undefined;\n injector?: Injector | undefined;\n}\n\ninterface TemplateViewOptions extends _ViewOptions {\n context?: Record<string, any> | undefined;\n}\n\ninterface CompViewOptions<Context = any> extends _ViewOptions {\n environmentInjector?: EnvironmentInjector | undefined;\n context?: Context | undefined;\n bindings?: Binding[];\n directives?: (Type<unknown> | DirectiveWithBindings<unknown>)[];\n}\n\nexport type ViewOptions<Context = any> = _ViewOptions & CompViewOptions<Context> & TemplateViewOptions;\n\nexport class ViewUnsupportedContentTypeError extends Error {\n constructor() {\n super(typeof ngDevMode !== 'undefined' && ngDevMode ? 'Type of content is not supported' : '');\n }\n}\n\n// Components rendered dynamically often need external data but can't receive it via\n// @Input() because they're instantiated programmatically, not by a template. An\n// injection token lets the component pull context from its injector without coupling\n// to the caller's API or requiring a shared base class.\nexport const VIEW_CONTEXT = new InjectionToken<Signal<unknown>>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'Component context' : '',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class ViewService {\n private injector = inject(Injector);\n private appRef = inject(ApplicationRef);\n private environmentInjector = inject(EnvironmentInjector);\n\n createComponent<Comp, Context>(component: Type<Comp>, options: CompViewOptions<Context> = {}) {\n return untracked(() => {\n let injector = options.injector ?? this.injector;\n let contextSignal: WritableSignal<Context> | undefined;\n\n if (options.context) {\n contextSignal = signal(options.context);\n // Wrap the context in a child injector so the VIEW_CONTEXT token is only visible\n // to this component and its descendants — not leaked into the broader injector tree.\n injector = Injector.create({\n providers: [\n {\n provide: VIEW_CONTEXT,\n useValue: contextSignal.asReadonly(),\n },\n ],\n parent: injector,\n });\n }\n\n return new CompRef<Comp, Context>({\n component,\n vcr: options.vcr,\n injector,\n appRef: this.appRef,\n environmentInjector: options.environmentInjector || this.environmentInjector,\n contextSignal,\n bindings: options.bindings,\n directives: options.directives,\n });\n });\n }\n\n createTemplate<Context>(tpl: TemplateRef<Context>, options: TemplateViewOptions = {}) {\n return untracked(() => {\n return new TplRef({\n vcr: options.vcr,\n appRef: this.appRef,\n tpl,\n context: options.context,\n injector: options.injector,\n });\n });\n }\n\n // Overloads exist to preserve the specific return type based on the content passed in,\n // so callers get CompRef<MyComp> or TplRef<Context> rather than just ViewRef — enabling\n // typed input setting and context updates without casting.\n createView<Comp, Context>(content: Type<Comp>, viewOptions: CompViewOptions<Context>): CompRef<Comp, Context>;\n createView<T>(content: TemplateRef<T>, viewOptions: TemplateViewOptions): TplRef<T>;\n createView(content: string): StringRef;\n createView(content: Content, viewOptions?: ViewOptions): ViewRef;\n createView<T extends Content, Context>(content: T, viewOptions: ViewOptions<Context> = {}): ViewRef {\n return untracked(() => {\n if (isTemplateRef(content)) {\n return this.createTemplate(content, viewOptions);\n } else if (isComponent(content)) {\n return this.createComponent(content, viewOptions);\n } else if (isString(content)) {\n return new StringRef(content);\n } else {\n throw new ViewUnsupportedContentTypeError();\n }\n });\n }\n}\n\n// Convenience wrapper so dynamically-rendered components don't need to know about\n// the internal VIEW_CONTEXT token — they just call injectViewContext<MyContext>().\nexport function injectViewContext<T>() {\n return inject(VIEW_CONTEXT) as Signal<T>;\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'dynamic-view',\n template: ` <div [innerHTML]=\"content()\"></div> `,\n})\nexport class DynamicViewComponent {\n readonly content = input<string>();\n}\n","import {\n DestroyRef,\n Directive,\n Injector,\n OnChanges,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n inject,\n input,\n} from '@angular/core';\nimport { Content, isComponent, isString, ViewRef } from '../views/types';\nimport { ViewService } from '../views/view';\nimport { CompRef } from '../views/comp-ref';\nimport { DynamicViewComponent } from './dynamic-view.component';\n\n@Directive({\n selector: '[dynamicView]',\n})\nexport class DynamicViewDirective implements OnInit, OnChanges {\n readonly view = input<Content>(undefined, { alias: 'dynamicView' });\n readonly injector = input<Injector>(undefined, { alias: 'dynamicViewInjector' });\n readonly context = input<any>(undefined, { alias: 'dynamicViewContext' });\n readonly inputs = input<Record<any, any>>(undefined, { alias: 'dynamicViewInputs' });\n\n private viewRef: ViewRef;\n private defaultTpl: TemplateRef<any> = inject(TemplateRef);\n private vcr = inject(ViewContainerRef);\n private viewService = inject(ViewService);\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.viewRef?.destroy();\n });\n }\n\n ngOnInit() {\n this.resolveContentType();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n const viewChanged = changes.view && !changes.view.isFirstChange();\n const contextChanged = changes.context && !changes.context.isFirstChange();\n const inputsChanged = changes.inputs && !changes.inputs.isFirstChange();\n\n if (viewChanged) {\n this.resolveContentType();\n } else if (contextChanged) {\n this.viewRef.updateContext(this.context());\n } else if (isComponent(this.view()) && inputsChanged) {\n (this.viewRef as CompRef<any>).setInputs(this.inputs() || {});\n }\n }\n\n resolveContentType() {\n this.viewRef?.destroy();\n\n const view = this.view();\n const injector = this.injector();\n const context = this.context();\n\n if (isString(view)) {\n const viewRef = (this.viewRef = this.viewService.createComponent(DynamicViewComponent, {\n vcr: this.vcr,\n injector,\n }));\n\n viewRef.setInput('content', view).detectChanges();\n } else if (isComponent(view)) {\n this.viewRef = this.viewService.createComponent(view, {\n vcr: this.vcr,\n injector: injector ?? this.vcr.injector,\n context,\n });\n\n const inputs = this.inputs();\n if (inputs) {\n (this.viewRef as CompRef<any>).setInputs(inputs);\n }\n } else {\n this.viewRef = this.viewService.createView(view || this.defaultTpl, {\n vcr: this.vcr,\n injector: injector ?? this.vcr.injector,\n context,\n });\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAOa,eAAe,CAAA;AAH5B,IAAA,WAAA,GAAA;AAIU,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAejD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA4B;AAK5C,IAAA;AAlBC,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;;;;;AAKtB,QAAA,SAAS,CAAC,IAAI,CAAC,EACf,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,KAAK,IAAI,CAAC,EACrC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACnC,oBAAoB,EAAE,CACvB;IACH;AAIA,IAAA,SAAS,CAAC,IAAY,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;8GApBW,eAAe,EAAA,IAAA,EAAA,EAAA,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,cAFd,MAAM,EAAA,CAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,iBAAiB,CAAA;AAQ5B,IAAA,WAAA,GAAA;QAPS,IAAA,CAAA,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA6B;QAEhD,IAAA,CAAA,OAAO,GAAgC,IAAI;AAE3C,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;AAGvC,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,IAAI,CAAC,UAAU;gBAAE;;;AAIjB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzE,gBAAA,IAAI,CAAC,MAAM;oBAAE;;;;AAKb,gBAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,MAAK;oBAC5B,OAAO,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;;;YAIF,SAAS,CAAC,MAAK;gBACb,YAAY,CAAC,WAAW,EAAE;AAC1B,gBAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;8GAlCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA;;;MCAY,uBAAuB,CAAA;AAKlC,IAAA,WAAA,GAAA;QAJS,IAAA,CAAA,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA6B;AACpD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;QAGvC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,IAAI,cAAc,EAAE;AAClB,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC;AAChD,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAClD,QAAA,CAAC,CAAC;IACJ;8GAjBW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;;MCoBY,OAAO,CAAA;AAGlB,IAAA,WAAA,CAAoB,OAA+B,EAAA;QAA/B,IAAA,CAAA,OAAO,GAAP,OAAO;AACzB,QAAA,IAAI,OAAO,CAAC,GAAG,EAAE;;;AAGf,YAAA,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE;AACxD,gBAAA,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;gBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;gBAClD,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;AAC/B,aAAA,CAAC;QACJ;aAAO;;;;YAIL,IAAI,CAAC,GAAG,GAAG,eAAe,CAAO,OAAO,CAAC,SAAS,EAAE;gBAClD,eAAe,EAAE,OAAO,CAAC,QAAQ;gBACjC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;gBAChD,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;AAC/B,aAAA,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9C;IACF;IAEA,QAAQ,CAAyC,KAAQ,EAAE,KAAoC,EAAA;QAC7F,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAe,EAAE,KAAK,CAAC;AAEzC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,SAAS,CAAC,MAA0D,EAAA;QAClE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACpC,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;AAEjC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,aAAa,CAAC,OAAgB,EAAA;;;QAG5B,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC;AAExC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QAAQ,CAAC,SAAkB,EAAA;QACzB,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAExC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,UAAU,CAAC,SAAkB,EAAA;QAC3B,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAExC,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS;IACpC;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa;IACxC;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;;;;QAIlB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACtE,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;IACjB;AACD;;AChED;AACA;AACA;AACM,SAAU,aAAa,CAAC,KAAU,EAAA;IACtC,OAAO,KAAK,YAAY,WAAW;AACrC;AAEM,SAAU,WAAW,CAAC,KAAU,EAAA;AACpC,IAAA,OAAO,OAAO,KAAK,KAAK,UAAU;AACpC;AAEM,SAAU,QAAQ,CAAC,KAAU,EAAA;AACjC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ;AAClC;AAEA;AACA;AACM,SAAU,UAAU,CAAI,KAA6B,EAAA;AACzD,IAAA,OAAO,KAAK,YAAY,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG;AAClE;;MCpDa,MAAM,CAAA;AAIjB,IAAA,WAAA,CAAoB,IAAa,EAAA;QAAb,IAAA,CAAA,IAAI,GAAJ,IAAI;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;;AAGjB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChH,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC1B;aAAO;;;;YAIL,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAK,EAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC1F,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC;IACF;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAExB,QAAA,OAAO,IAAI;IACb;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS;AACpC,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,EAAE;AAChE,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;QAC7B;aAAO;;;;YAIL,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QACnC;QAEA,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;;;;YAI/B,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAClD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;;YAGlB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;IACjB;AAEA,IAAA,aAAa,CAAC,OAAU,EAAA;;;QAGtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAExC,QAAA,OAAO,IAAI;IACb;AACD;;AC5ED;AACA;AACA;MACa,SAAS,CAAA;AACpB,IAAA,WAAA,CAAoB,KAAa,EAAA;QAAb,IAAA,CAAA,KAAK,GAAL,KAAK;IAAW;IAEpC,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI;IACb;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,KAAI;AACZ;;ACmBK,MAAO,+BAAgC,SAAQ,KAAK,CAAA;AACxD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,kCAAkC,GAAG,EAAE,CAAC;IAChG;AACD;AAED;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,IAAI,cAAc,CAC5C,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,mBAAmB,GAAG,EAAE,CACzE;MAGY,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAmE1D,IAAA;AAjEC,IAAA,eAAe,CAAgB,SAAqB,EAAE,OAAA,GAAoC,EAAE,EAAA;QAC1F,OAAO,SAAS,CAAC,MAAK;YACpB,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;AAChD,YAAA,IAAI,aAAkD;AAEtD,YAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,gBAAA,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;;;AAGvC,gBAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,YAAY;AACrB,4BAAA,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE;AACrC,yBAAA;AACF,qBAAA;AACD,oBAAA,MAAM,EAAE,QAAQ;AACjB,iBAAA,CAAC;YACJ;YAEA,OAAO,IAAI,OAAO,CAAgB;gBAChC,SAAS;gBACT,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ;gBACR,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB;gBAC5E,aAAa;gBACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;AAC/B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAU,GAAyB,EAAE,OAAA,GAA+B,EAAE,EAAA;QAClF,OAAO,SAAS,CAAC,MAAK;YACpB,OAAO,IAAI,MAAM,CAAC;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG;gBACH,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC3B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AASA,IAAA,UAAU,CAA6B,OAAU,EAAE,WAAA,GAAoC,EAAE,EAAA;QACvF,OAAO,SAAS,CAAC,MAAK;AACpB,YAAA,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;gBAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC;YAClD;AAAO,iBAAA,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;gBAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC;YACnD;AAAO,iBAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC5B,gBAAA,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;YAC/B;iBAAO;gBACL,MAAM,IAAI,+BAA+B,EAAE;YAC7C;AACF,QAAA,CAAC,CAAC;IACJ;8GArEW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,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,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAyElC;AACA;SACgB,iBAAiB,GAAA;AAC/B,IAAA,OAAO,MAAM,CAAC,YAAY,CAAc;AAC1C;;MC7Ha,oBAAoB,CAAA;AAJjC,IAAA,WAAA,GAAA;QAKW,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AACnC,IAAA;8GAFY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,kNAFrB,CAAA,qCAAA,CAAuC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAEtC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,CAAA,qCAAA,CAAuC;AAClD,iBAAA;;;MCeY,oBAAoB,CAAA;AAW/B,IAAA,WAAA,GAAA;QAVS,IAAA,CAAA,IAAI,GAAG,KAAK,CAAU,SAAS,4EAAI,KAAK,EAAE,aAAa,EAAA,CAAG;QAC1D,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAW,SAAS,gFAAI,KAAK,EAAE,qBAAqB,EAAA,CAAG;QACvE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAM,SAAS,+EAAI,KAAK,EAAE,oBAAoB,EAAA,CAAG;QAChE,IAAA,CAAA,MAAM,GAAG,KAAK,CAAmB,SAAS,8EAAI,KAAK,EAAE,mBAAmB,EAAA,CAAG;AAG5E,QAAA,IAAA,CAAA,UAAU,GAAqB,MAAM,CAAC,WAAW,CAAC;AAClD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAGvC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACzB,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE;AACjE,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;AAC1E,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE;QAEvE,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,kBAAkB,EAAE;QAC3B;aAAO,IAAI,cAAc,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C;aAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,aAAa,EAAE;AACnD,YAAA,IAAI,CAAC,OAAwB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAC/D;IACF;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAE9B,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClB,YAAA,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,oBAAoB,EAAE;gBACrF,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ;AACT,aAAA,CAAC,CAAC;YAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE;QACnD;AAAO,aAAA,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE;gBACpD,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,gBAAA,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;gBACvC,OAAO;AACR,aAAA,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,MAAM,EAAE;AACT,gBAAA,IAAI,CAAC,OAAwB,CAAC,SAAS,CAAC,MAAM,CAAC;YAClD;QACF;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;gBAClE,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,gBAAA,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;gBACvC,OAAO;AACR,aAAA,CAAC;QACJ;IACF;8GAnEW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AAC1B,iBAAA;;;ACnBD;;AAEG;;;;"}