UNPKG

ngx-stimulsoft

Version:
1 lines 32.4 kB
{"version":3,"file":"ngx-stimulsoft.mjs","sources":["../../src/stimulsoft/config.ts","../../src/stimulsoft/stimulsoft-source-name.model.ts","../../src/stimulsoft/stimulsoft.service.ts","../../src/stimulsoft/stimulsoft.provider.ts","../../src/stimulsoft/stimulsoft.module.ts","../../src/stimulsoft/util.ts","../../src/stimulsoft/stimulsoft-designer.component.ts","../../src/stimulsoft/stimulsoft-viewer.component.ts","../../src/ngx-stimulsoft.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface IStimulsoftOption {\n appearance?: {\n backgroundColor?: any;\n pageBorderColor?: any;\n rightToLeft?: boolean;\n fullScreenMode?: boolean;\n scrollbarsMode?: boolean;\n openLinksWindow?: string;\n openExportedReportWindow?: string;\n showTooltips?: boolean;\n showTooltipsHelp?: boolean;\n showDialogsHelp?: boolean;\n pageAlignment?: number;\n showPageShadow?: boolean;\n bookmarksPrint?: boolean;\n bookmarksTreeWidth?: number;\n parametersPanelPosition?: number;\n parametersPanelMaxHeight?: number;\n parametersPanelColumnsCount?: number;\n parametersPanelDateFormat?: string;\n parametersPanelSortDataItems?: boolean;\n interfaceType?: number;\n chartRenderType?: number;\n reportDisplayMode?: number;\n datePickerFirstDayOfWeek?: number;\n datePickerIncludeCurrentDayForRanges?: boolean;\n allowTouchZoom?: boolean;\n allowMobileMode?: boolean;\n combineReportPages?: boolean;\n htmlRenderMode?: number;\n theme?: number;\n };\n exports?: {\n storeExportSettings?: boolean;\n showExportDialog?: boolean;\n showExportToDocument?: boolean;\n showExportToPdf?: boolean;\n showExportToHtml?: boolean;\n showExportToHtml5?: boolean;\n showExportToWord2007?: boolean;\n showExportToExcel2007?: boolean;\n showExportToCsv?: boolean;\n showExportToJson?: boolean;\n showExportToText?: boolean;\n showExportToOpenDocumentWriter?: boolean;\n showExportToOpenDocumentCalc?: boolean;\n showExportToPowerPoint?: boolean;\n showExportToImageSvg?: boolean;\n showExportToXps?: boolean;\n };\n toolbar?: {\n visible?: boolean;\n displayMode?: number;\n backgroundColor?: any;\n borderColor?: any;\n fontColor?: any;\n fontFamily?: string;\n alignment?: number;\n showButtonCaptions?: boolean;\n showPrintButton?: boolean;\n showOpenButton?: boolean;\n showSaveButton?: boolean;\n showSendEmailButton?: boolean;\n showFindButton?: boolean;\n showBookmarksButton?: boolean;\n showParametersButton?: boolean;\n showResourcesButton?: boolean;\n showEditorButton?: boolean;\n showFullScreenButton?: boolean;\n showRefreshButton?: boolean;\n showFirstPageButton?: boolean;\n showPreviousPageButton?: boolean;\n showCurrentPageControl?: boolean;\n showNextPageButton?: boolean;\n showLastPageButton?: boolean;\n showZoomButton?: boolean;\n showViewModeButton?: boolean;\n showDesignButton?: boolean;\n showAboutButton?: boolean;\n showPinToolbarButton?: boolean;\n printDestination?: number;\n viewMode?: number;\n multiPageWidthCount?: number;\n multiPageHeightCount?: number;\n _zoom?: number;\n menuAnimation?: boolean;\n showMenuMode?: number;\n autoHide?: boolean;\n };\n email?: {\n showEmailDialog?: boolean;\n showExportDialog?: boolean;\n defaultEmailAddress?: string;\n defaultEmailSubject?: string;\n defaultEmailMessage?: string;\n };\n width?: string;\n height?: string;\n viewerId?: string;\n reportDesignerMode?: false;\n}\n\nexport type ResourceUrl = string | string[];\n\nexport interface IStimulsoftConfig {\n baseUrl?: string;\n designerCssUrl?: ResourceUrl;\n designerJsUrl: ResourceUrl;\n reportsJsUrl: ResourceUrl;\n viewerCssUrl?: ResourceUrl;\n viewerJsUrl: ResourceUrl;\n localizationPath?: string;\n fonts?: Record<string, string>;\n options?: IStimulsoftOption;\n licenseKey?: string;\n licenseFile?: string;\n}\n\nexport type OptionsConfig = Partial<IStimulsoftConfig>;\nexport const config: InjectionToken<IStimulsoftConfig> = new InjectionToken('config');\nexport const NEW_CONFIG: InjectionToken<IStimulsoftConfig> = new InjectionToken('NEW_CONFIG');\nexport const INITIAL_CONFIG: InjectionToken<IStimulsoftConfig> = new InjectionToken('INITIAL_CONFIG');\n\nexport const initialStimulsoftConfig: IStimulsoftConfig = {\n baseUrl: '',\n designerJsUrl: '/content/js/stimulsoft.designer.js',\n reportsJsUrl: '/content/js/stimulsoft.reports.js',\n viewerJsUrl: '/content/js/stimulsoft.viewer.js',\n};\n","export enum StimulsoftSourceName {\n DESIGNER_SCRIPT = 'DESIGNER_SCRIPT',\n REPORTER_SCRIPT = 'REPORTER_SCRIPT',\n VIEWER_SCRIPT = 'VIEWER_SCRIPT',\n DESIGNER_STYLE = 'DESIGNER_STYLE',\n VIEWER_STYLE = 'VIEWER_STYLE',\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ISource, Source, SourceType } from 'ngx-source';\nimport { config, initialStimulsoftConfig, IStimulsoftConfig, ResourceUrl } from './config';\nimport { StimulsoftSourceName } from './stimulsoft-source-name.model';\n\n@Injectable()\nexport class StimulsoftService {\n public readonly designerCssUrl?: ResourceUrl;\n public readonly viewerCssUrl?: ResourceUrl;\n public readonly designerJsUrl: ResourceUrl;\n public readonly reportsJsUrl: ResourceUrl;\n public readonly viewerJsUrl: ResourceUrl;\n public readonly options: IStimulsoftConfig['options'];\n public readonly fonts: IStimulsoftConfig['fonts'];\n public readonly baseUrl: string | undefined;\n public readonly localizationPath: string | undefined;\n\n constructor(@Inject(config) public readonly stimulsoftConfig: IStimulsoftConfig) {\n const { designerCssUrl, viewerCssUrl, designerJsUrl, reportsJsUrl, viewerJsUrl, options, fonts, baseUrl, localizationPath } =\n stimulsoftConfig;\n\n this.designerCssUrl = designerCssUrl;\n this.viewerCssUrl = viewerCssUrl;\n this.designerJsUrl = designerJsUrl || initialStimulsoftConfig.designerJsUrl;\n this.reportsJsUrl = reportsJsUrl || initialStimulsoftConfig.reportsJsUrl;\n this.viewerJsUrl = viewerJsUrl || initialStimulsoftConfig.viewerJsUrl;\n this.localizationPath = localizationPath;\n this.options = options;\n this.fonts = fonts;\n this.baseUrl = baseUrl;\n }\n\n public get stimulsoftSourceStore(): ISource[] {\n const { STYLE, SCRIPT } = SourceType;\n const sources: Array<[StimulsoftSourceName, ResourceUrl, SourceType]> = [\n [StimulsoftSourceName.DESIGNER_SCRIPT, this.designerJsUrl, SCRIPT],\n [StimulsoftSourceName.REPORTER_SCRIPT, this.reportsJsUrl, SCRIPT],\n [StimulsoftSourceName.VIEWER_SCRIPT, this.viewerJsUrl, SCRIPT],\n ];\n if (this.designerCssUrl) {\n sources.push([StimulsoftSourceName.DESIGNER_STYLE, this.designerCssUrl, STYLE]);\n }\n if (this.viewerCssUrl) {\n sources.push([StimulsoftSourceName.VIEWER_STYLE, this.viewerCssUrl, STYLE]);\n }\n return sources\n .map(([name, url, type]) => (Array.isArray(url) ? url : [url]).map(u => new Source(name, u, type)))\n .reduce((resources, item) => [...resources, ...item], [] as ISource[]);\n }\n}\n","import { config, INITIAL_CONFIG, initialStimulsoftConfig, NEW_CONFIG, OptionsConfig } from './config';\nimport { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { StimulsoftService } from './stimulsoft.service';\nimport { NgxSourceService } from 'ngx-source';\n\nexport function configFactory(initConfig: OptionsConfig, configValue?: OptionsConfig | (() => OptionsConfig)): OptionsConfig {\n return {\n ...initConfig,\n ...(typeof configValue === 'function' ? configValue() : (configValue ?? {})),\n };\n}\n\nexport function provideStimulsoft(configValue?: OptionsConfig | (() => OptionsConfig)): EnvironmentProviders {\n return makeEnvironmentProviders([\n NgxSourceService,\n { provide: NEW_CONFIG, useValue: configValue },\n { provide: INITIAL_CONFIG, useValue: initialStimulsoftConfig },\n {\n provide: config,\n useFactory: configFactory,\n deps: [INITIAL_CONFIG, NEW_CONFIG],\n },\n StimulsoftService,\n ]);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { OptionsConfig } from './config';\nimport { provideStimulsoft } from './stimulsoft.provider';\n\n@NgModule({\n declarations: [],\n exports: [],\n providers: [],\n})\nexport class NgxStimulsoftModule {\n static forRoot(configValue?: OptionsConfig | (() => OptionsConfig)): ModuleWithProviders<NgxStimulsoftModule> {\n return {\n ngModule: NgxStimulsoftModule,\n providers: [provideStimulsoft(configValue)],\n };\n }\n\n static forChild(): ModuleWithProviders<NgxStimulsoftModule> {\n return {\n ngModule: NgxStimulsoftModule,\n };\n }\n}\n","let lastId = 0;\nexport const UniqueComponentId = (prefix = 'stimulsoft_id_'): string => `${prefix}${++lastId}`;\n","import { Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { NgxSourceService } from 'ngx-source';\nimport { StimulsoftSourceName } from './stimulsoft-source-name.model';\nimport { StimulsoftService } from './stimulsoft.service';\nimport { UniqueComponentId } from './util';\n\ndeclare let Stimulsoft: any;\n\n@Component({\n selector: 'ngx-stimulsoft-designer',\n template: ` <div dir=\"ltr\" [id]=\"id()\"></div>`,\n standalone: true,\n})\nexport class StimulsoftDesignerComponent {\n readonly id = input<string>(UniqueComponentId());\n readonly licenseKey = input<string | undefined>();\n readonly licenseFile = input<string | undefined>();\n readonly local = input<string>('en');\n\n readonly onLoadResourceFailed = output<{ source: string; error: any }>();\n readonly loading = output<boolean>();\n\n private readonly sourceService = inject(NgxSourceService);\n private readonly stimulsoftService = inject(StimulsoftService);\n private readonly isLoadedSource = signal(false);\n private failResourcesDownload = signal<boolean>(false);\n\n private readonly resourcesReady = computed(() => this.isLoadedSource() && !this.failResourcesDownload());\n\n constructor() {\n this.sourceService.addSources(...this.stimulsoftService.stimulsoftSourceStore);\n this.loadResources().then();\n effect(() => {\n if (this.resourcesReady()) {\n // eslint-disable-next-line\n const dependencies = [this.id(), this.licenseKey(), this.licenseFile(), this.local()];\n this.initializeDesigner(this.id());\n }\n });\n }\n\n private async loadResources(): Promise<void> {\n this.loading.emit(true);\n\n const sources = [StimulsoftSourceName.REPORTER_SCRIPT, StimulsoftSourceName.VIEWER_SCRIPT, StimulsoftSourceName.DESIGNER_SCRIPT];\n\n if (this.stimulsoftService.viewerCssUrl) {\n sources.push(StimulsoftSourceName.VIEWER_STYLE);\n }\n if (this.stimulsoftService.designerCssUrl) {\n sources.push(StimulsoftSourceName.DESIGNER_STYLE);\n }\n\n try {\n await this.sourceService.loadBySourceNames(...sources);\n this.isLoadedSource.set(true);\n } catch (error) {\n this.failResourcesDownload.set(true);\n this.onLoadResourceFailed.emit({ source: 'stimulsoft', error });\n } finally {\n this.loading.emit(false);\n }\n }\n\n private initializeDesigner(id: string): void {\n const container = document.getElementById(id);\n if (!container) {\n console.warn(`Container with id \"${id}\" not found.`);\n return;\n }\n\n this.applyLicense();\n\n const options = new Stimulsoft.Designer.StiDesignerOptions();\n const designer = new Stimulsoft.Designer.StiDesigner(options, 'StiDesigner', false);\n designer.report = new Stimulsoft.Report.StiReport();\n\n this.applyLocalization();\n\n designer.renderHtml(id);\n }\n\n private applyLocalization(): void {\n if (!this.stimulsoftService.localizationPath) {\n return;\n }\n\n const stiLocalization = Stimulsoft.Base.Localization.StiLocalization;\n const local = this.local();\n\n if (local === 'en') {\n stiLocalization.cultureName = 'English';\n return;\n }\n\n const path = `${this.stimulsoftService.localizationPath.replace(/\\/$/g, '')}/${local}.xml`;\n stiLocalization.cultureName = stiLocalization.loadLocalizationFile(path);\n }\n\n private applyLicense(): void {\n const key = this.licenseKey() ?? this.stimulsoftService.stimulsoftConfig.licenseKey;\n const file = this.licenseFile() ?? this.stimulsoftService.stimulsoftConfig.licenseFile;\n\n if (key) {\n Stimulsoft.Base.StiLicense.Key = key;\n } else if (file) {\n Stimulsoft.Base.StiLicense.loadFromFile(file);\n }\n }\n}\n","import { Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { NgxSourceService } from 'ngx-source';\nimport { IStimulsoftOption } from './config';\nimport { StimulsoftSourceName } from './stimulsoft-source-name.model';\nimport { StimulsoftService } from './stimulsoft.service';\nimport { UniqueComponentId } from './util';\n\ndeclare let Stimulsoft: any;\n\n@Component({\n selector: 'ngx-stimulsoft-viewer',\n template: ` <div dir=\"ltr\" [id]=\"id()\"></div>`,\n standalone: true,\n})\nexport class StimulsoftViewerComponent {\n readonly stimulsoftService = inject(StimulsoftService);\n readonly sourceService = inject(NgxSourceService);\n readonly document = inject(DOCUMENT);\n\n readonly id = input<string>(UniqueComponentId());\n readonly baseUrl = input<string | undefined>(this.stimulsoftService.baseUrl);\n readonly fileName = input.required<string>();\n readonly fonts = input<Record<string, string> | undefined>(this.stimulsoftService.fonts);\n readonly dataSet = input.required<any>();\n readonly options = input<IStimulsoftOption | undefined>(this.stimulsoftService.options);\n readonly licenseKey = input<string | undefined>();\n readonly licenseFile = input<string | undefined>();\n readonly local = input<string>('en');\n readonly dir = input<'ltr' | 'rtl'>('ltr');\n\n readonly ready = output<boolean>();\n readonly loading = output<boolean>();\n readonly onLoadResourceFailed = output<{ source: string; error: any }>();\n\n private viewerOptions: any;\n private viewer: any;\n private report: any;\n\n private readonly isLoadedSource = signal(false);\n private readonly failResourcesDownload = signal<boolean>(false);\n\n private readonly canInitialize = computed(\n () => this.isLoadedSource() && !this.failResourcesDownload() && !!this.fileName() && !!this.dataSet(),\n );\n\n constructor() {\n this.sourceService.addSources(...this.stimulsoftService.stimulsoftSourceStore);\n\n this.loadResources().then();\n\n effect(() => {\n if (this.canInitialize()) {\n // eslint-disable-next-line\n const dependencies = [\n this.options(),\n this.fonts(),\n this.dataSet(),\n this.fileName(),\n this.id(),\n this.licenseKey(),\n this.licenseFile(),\n this.local(),\n this.dir(),\n ];\n this.initializeViewer();\n }\n });\n }\n\n private async loadResources(): Promise<void> {\n this.loading.emit(true);\n const sources = [StimulsoftSourceName.REPORTER_SCRIPT, StimulsoftSourceName.VIEWER_SCRIPT];\n\n if (this.stimulsoftService.viewerCssUrl) {\n sources.push(StimulsoftSourceName.VIEWER_STYLE);\n }\n\n try {\n await this.sourceService.loadBySourceNames(...sources);\n this.isLoadedSource.set(true);\n } catch (error) {\n this.failResourcesDownload.set(true);\n this.onLoadResourceFailed.emit({ source: 'stimulsoft', error });\n } finally {\n this.loading.emit(false);\n }\n }\n\n private initializeViewer(): void {\n if (typeof Stimulsoft === 'undefined') {\n this.onLoadResourceFailed.emit({ error: 'Stimulsoft undefined', source: 'global' });\n return;\n }\n\n this.ready.emit(false);\n\n this.viewerOptions = new Stimulsoft.Viewer.StiViewerOptions();\n this.viewerOptions.appearance.rightToLeft = this.dir() === 'rtl';\n this.viewer = new Stimulsoft.Viewer.StiViewer(this.viewerOptions, 'StiViewer', false);\n this.report = new Stimulsoft.Report.StiReport();\n\n this.applyOptions();\n this.setupReport();\n }\n\n private applyOptions(): void {\n const options = this.options();\n this.deepMerge(this.stimulsoftService.options, options);\n this.deepMerge(options, this.viewerOptions);\n }\n\n private deepMerge(source: any, target: any): void {\n if (!source || !target) {\n return;\n }\n\n for (const [key, value] of Object.entries(source)) {\n if (typeof value === 'object' && value !== null) {\n this.deepMerge(value, (target[key] ??= {}));\n } else {\n target[key] = value;\n }\n }\n }\n\n private setupReport(): void {\n if (!this.viewerOptions || !this.viewer || !this.report) {\n return;\n }\n\n this.applyFonts();\n this.loadReportFile();\n this.registerDataSet();\n this.applyLicense();\n this.setLocale();\n\n const targetElement = this.document.getElementById(this.id());\n if (!targetElement) {\n console.warn(`Element with id \"${this.id()}\" not found.`);\n return;\n }\n\n this.ready.emit(true);\n this.report.renderAsync(() => {\n this.viewer.report = this.report;\n this.viewer.renderHtml(this.id());\n });\n }\n\n private applyFonts(): void {\n const fonts = this.fonts();\n if (!fonts) {\n return;\n }\n for (const [name, url] of Object.entries(fonts)) {\n try {\n Stimulsoft.Base.StiFontCollection.addFontFile(url, name);\n } catch {\n console.error(`Can't load font: ${url}`);\n }\n }\n }\n\n private registerDataSet(): void {\n const json = this.dataSet();\n if (!json) {\n return;\n }\n const dataSet = new Stimulsoft.System.Data.DataSet('DataSet');\n dataSet.readJson(JSON.stringify(json));\n this.report.dictionary.databases.clear();\n this.report.regData('DataSet', 'DataSet', dataSet);\n }\n\n private applyLicense(): void {\n const key = this.licenseKey() ?? this.stimulsoftService.stimulsoftConfig.licenseKey;\n const file = this.licenseFile() ?? this.stimulsoftService.stimulsoftConfig.licenseFile;\n\n if (key) {\n Stimulsoft.Base.StiLicense.Key = key;\n } else if (file) {\n Stimulsoft.Base.StiLicense.loadFromFile(file);\n }\n }\n\n private loadReportFile(): void {\n const name = this.fileName();\n if (!name) {\n return;\n }\n\n const base = this.baseUrl() ?? '';\n this.report.loadFile(base + name);\n }\n\n private setLocale(): void {\n if (!this.stimulsoftService.localizationPath) {\n return;\n }\n const local = this.local();\n const stiLocalization = Stimulsoft.Base.Localization.StiLocalization;\n\n if (local === 'en') {\n stiLocalization.cultureName = 'English';\n } else {\n const path = [this.stimulsoftService.localizationPath.replace(/\\/$/g, ''), `${local}.xml`].join('/');\n stiLocalization.cultureName = stiLocalization.loadLocalizationFile(path);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAyHa,MAAM,GAAsC,IAAI,cAAc,CAAC,QAAQ;MACvE,UAAU,GAAsC,IAAI,cAAc,CAAC,YAAY;MAC/E,cAAc,GAAsC,IAAI,cAAc,CAAC,gBAAgB;AAEvF,MAAA,uBAAuB,GAAsB;AACxD,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,aAAa,EAAE,oCAAoC;AACnD,IAAA,YAAY,EAAE,mCAAmC;AACjD,IAAA,WAAW,EAAE,kCAAkC;;;ICjIrC;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,oBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EANW,oBAAoB,KAApB,oBAAoB,GAM/B,EAAA,CAAA,CAAA;;MCAY,iBAAiB,CAAA;AAWgB,IAAA,gBAAA;AAV5B,IAAA,cAAc;AACd,IAAA,YAAY;AACZ,IAAA,aAAa;AACb,IAAA,YAAY;AACZ,IAAA,WAAW;AACX,IAAA,OAAO;AACP,IAAA,KAAK;AACL,IAAA,OAAO;AACP,IAAA,gBAAgB;AAEhC,IAAA,WAAA,CAA4C,gBAAmC,EAAA;QAAnC,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAC1D,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,GACzH,gBAAgB;AAElB,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;QAChC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,uBAAuB,CAAC,aAAa;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,uBAAuB,CAAC,YAAY;QACxE,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,uBAAuB,CAAC,WAAW;AACrE,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAGxB,IAAA,IAAW,qBAAqB,GAAA;AAC9B,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU;AACpC,QAAA,MAAM,OAAO,GAA2D;YACtE,CAAC,oBAAoB,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;YAClE,CAAC,oBAAoB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;YACjE,CAAC,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;SAC/D;AACD,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;;AAEjF,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;;AAE7E,QAAA,OAAO;aACJ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACjG,aAAA,MAAM,CAAC,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE,EAAe,CAAC;;AAzC/D,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBAWR,MAAM,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAXf,iBAAiB,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;0BAYc,MAAM;2BAAC,MAAM;;;ACZZ,SAAA,aAAa,CAAC,UAAyB,EAAE,WAAmD,EAAA;IAC1G,OAAO;AACL,QAAA,GAAG,UAAU;AACb,QAAA,IAAI,OAAO,WAAW,KAAK,UAAU,GAAG,WAAW,EAAE,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC;KAC7E;AACH;AAEM,SAAU,iBAAiB,CAAC,WAAmD,EAAA;AACnF,IAAA,OAAO,wBAAwB,CAAC;QAC9B,gBAAgB;AAChB,QAAA,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC9C,QAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,uBAAuB,EAAE;AAC9D,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,IAAI,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC;AACnC,SAAA;QACD,iBAAiB;AAClB,KAAA,CAAC;AACJ;;MCfa,mBAAmB,CAAA;IAC9B,OAAO,OAAO,CAAC,WAAmD,EAAA;QAChE,OAAO;AACL,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,SAAS,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;SAC5C;;AAGH,IAAA,OAAO,QAAQ,GAAA;QACb,OAAO;AACL,YAAA,QAAQ,EAAE,mBAAmB;SAC9B;;wGAXQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAnB,mBAAmB,EAAA,CAAA;yGAAnB,mBAAmB,EAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA;;;ACRD,IAAI,MAAM,GAAG,CAAC;AACP,MAAM,iBAAiB,GAAG,CAAC,MAAM,GAAG,gBAAgB,KAAa,CAAG,EAAA,MAAM,GAAG,EAAE,MAAM,EAAE;;MCYjF,2BAA2B,CAAA;AAC7B,IAAA,EAAE,GAAG,KAAK,CAAS,iBAAiB,EAAE,CAAC;IACvC,UAAU,GAAG,KAAK,EAAsB;IACxC,WAAW,GAAG,KAAK,EAAsB;AACzC,IAAA,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC;IAE3B,oBAAoB,GAAG,MAAM,EAAkC;IAC/D,OAAO,GAAG,MAAM,EAAW;AAEnB,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;AACvC,IAAA,qBAAqB,GAAG,MAAM,CAAU,KAAK,CAAC;AAErC,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAExG,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;AAC9E,QAAA,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAC3B,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;;gBAEzB,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;;AAEtC,SAAC,CAAC;;AAGI,IAAA,MAAM,aAAa,GAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAEvB,QAAA,MAAM,OAAO,GAAG,CAAC,oBAAoB,CAAC,eAAe,EAAE,oBAAoB,CAAC,aAAa,EAAE,oBAAoB,CAAC,eAAe,CAAC;AAEhI,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACvC,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;;AAEjD,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE;AACzC,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;;AAGnD,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC;AACtD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;;QAC7B,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;gBACvD;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIpB,IAAA,kBAAkB,CAAC,EAAU,EAAA;QACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAA,YAAA,CAAc,CAAC;YACpD;;QAGF,IAAI,CAAC,YAAY,EAAE;QAEnB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE;AAC5D,QAAA,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC;QACnF,QAAQ,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;QAEnD,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;;IAGjB,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE;YAC5C;;QAGF,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe;AACpE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAE1B,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,eAAe,CAAC,WAAW,GAAG,SAAS;YACvC;;AAGF,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAI,CAAA,EAAA,KAAK,MAAM;QAC1F,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC;;IAGlE,YAAY,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU;AACnF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW;QAEtF,IAAI,GAAG,EAAE;YACP,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG;;aAC/B,IAAI,IAAI,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;;;wGA7FtC,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,sqBAH5B,CAAoC,kCAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAGnC,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,CAAoC,kCAAA,CAAA;AAC9C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MCIY,yBAAyB,CAAA;AAC3B,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE3B,IAAA,EAAE,GAAG,KAAK,CAAS,iBAAiB,EAAE,CAAC;IACvC,OAAO,GAAG,KAAK,CAAqB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;AACnE,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAU;IACnC,KAAK,GAAG,KAAK,CAAqC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/E,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAO;IAC/B,OAAO,GAAG,KAAK,CAAgC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC9E,UAAU,GAAG,KAAK,EAAsB;IACxC,WAAW,GAAG,KAAK,EAAsB;AACzC,IAAA,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC;AAC3B,IAAA,GAAG,GAAG,KAAK,CAAgB,KAAK,CAAC;IAEjC,KAAK,GAAG,MAAM,EAAW;IACzB,OAAO,GAAG,MAAM,EAAW;IAC3B,oBAAoB,GAAG,MAAM,EAAkC;AAEhE,IAAA,aAAa;AACb,IAAA,MAAM;AACN,IAAA,MAAM;AAEG,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,IAAA,qBAAqB,GAAG,MAAM,CAAU,KAAK,CAAC;AAE9C,IAAA,aAAa,GAAG,QAAQ,CACvC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CACtG;AAED,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;AAE9E,QAAA,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAE3B,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;;AAExB,gBAAA,MAAM,YAAY,GAAG;oBACnB,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,EAAE,EAAE;oBACT,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,KAAK,EAAE;oBACZ,IAAI,CAAC,GAAG,EAAE;iBACX;gBACD,IAAI,CAAC,gBAAgB,EAAE;;AAE3B,SAAC,CAAC;;AAGI,IAAA,MAAM,aAAa,GAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,oBAAoB,CAAC,eAAe,EAAE,oBAAoB,CAAC,aAAa,CAAC;AAE1F,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACvC,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;;AAGjD,QAAA,IAAI;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC;AACtD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;;QAC7B,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;gBACvD;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIpB,gBAAgB,GAAA;AACtB,QAAA,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;AACrC,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACnF;;AAGF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAEtB,IAAI,CAAC,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAgB,EAAE;AAC7D,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK;AAChE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC;QACrF,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE;QAE/C,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,WAAW,EAAE;;IAGZ,YAAY,GAAA;AAClB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC;QACvD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;;IAGrC,SAAS,CAAC,MAAW,EAAE,MAAW,EAAA;AACxC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;YACtB;;AAGF,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;;iBACtC;AACL,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;;;;IAKjB,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACvD;;QAGF,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,CAAoB,iBAAA,EAAA,IAAI,CAAC,EAAE,EAAE,CAAc,YAAA,CAAA,CAAC;YACzD;;AAGF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAK;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;YAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AACnC,SAAC,CAAC;;IAGI,UAAU,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,KAAK,EAAE;YACV;;AAEF,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI;gBACF,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;;AACxD,YAAA,MAAM;AACN,gBAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAA,CAAE,CAAC;;;;IAKtC,eAAe,GAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;QAC3B,IAAI,CAAC,IAAI,EAAE;YACT;;AAEF,QAAA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;;IAG5C,YAAY,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU;AACnF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW;QAEtF,IAAI,GAAG,EAAE;YACP,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG;;aAC/B,IAAI,IAAI,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;;;IAIzC,cAAc,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,IAAI,EAAE;YACT;;QAGF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;;IAG3B,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE;YAC5C;;AAEF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe;AAEpE,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,eAAe,CAAC,WAAW,GAAG,SAAS;;aAClC;YACL,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA,EAAG,KAAK,CAAA,IAAA,CAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACpG,eAAe,CAAC,WAAW,GAAG,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC;;;wGAhMjE,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,u5CAH1B,CAAoC,kCAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAGnC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,CAAoC,kCAAA,CAAA;AAC9C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACfD;;AAEG;;;;"}