{"version":3,"file":"paddls-ngx-repository.mjs","sources":["../../../projects/ngx-repository/src/lib/core/model/page.ts","../../../projects/ngx-repository/src/lib/core/decorator/column.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/id.decorator.ts","../../../projects/ngx-repository/src/lib/ngx-repository.module.di.ts","../../../projects/ngx-repository/src/lib/core/registry/token.registry.ts","../../../projects/ngx-repository/src/lib/core/common/utils/get.ts","../../../projects/ngx-repository/src/lib/core/manager/request.manager.ts","../../../projects/ngx-repository/src/lib/normalizer/repository-denormalizer.ts","../../../projects/ngx-repository/src/lib/core/event-stream/publisher.service.ts","../../../projects/ngx-repository/src/lib/normalizer/event/before-denormalize.event.ts","../../../projects/ngx-repository/src/lib/normalizer/event/after-denormalize.event.ts","../../../projects/ngx-repository/src/lib/core/response/processor/denormalize-response.processor.ts","../../../projects/ngx-repository/src/lib/core/response/processor/body.response-processor.ts","../../../projects/ngx-repository/src/lib/core/decorator/path-column.decorator.ts","../../../projects/ngx-repository/src/lib/core/common/utils/is-object.ts","../../../projects/ngx-repository/src/lib/core/common/utils/is-undefined.ts","../../../projects/ngx-repository/src/lib/core/response/processor/path-column-response.processor.ts","../../../projects/ngx-repository/src/lib/core/response/processor/original-query-response.processor.ts","../../../projects/ngx-repository/src/lib/core/common/utils/is-function.ts","../../../projects/ngx-repository/src/lib/core/response/response.builder.ts","../../../projects/ngx-repository/src/lib/core/response/processor/page-response.processor.ts","../../../projects/ngx-repository/src/lib/core/response/processor/id-response.processor.ts","../../../projects/ngx-repository/src/lib/core/response/processor/void-response.processor.ts","../../../projects/ngx-repository/src/lib/ngx-repository.module.ts","../../../projects/ngx-repository/src/lib/ngx-repository.service.ts","../../../projects/ngx-repository/src/lib/core/decorator/inject-repository.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/soft-cache.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/hard-cache.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/join-column.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/path-param.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/repository.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/resource-type-supports.decorator.ts","../../../projects/ngx-repository/src/lib/core/decorator/sub-collection.decorator.ts","../../../projects/ngx-repository/src/lib/core/common/utils/is-string.ts","../../../projects/ngx-repository/src/lib/core/common/utils/flatten-deep.ts","../../../projects/ngx-repository/src/lib/core/decorator/sub-query.decorator.ts","../../../projects/ngx-repository/src/lib/core/query/id.query.ts","../../../projects/ngx-repository/src/lib/core/configuration/configuration.provider.ts","../../../projects/ngx-repository/src/lib/core/configuration/configuration-context.provider.ts","../../../projects/ngx-repository/src/lib/core/event-stream/decorator/event-listener.decorator.ts","../../../projects/ngx-repository/src/lib/core/repository/abstract-repository.ts","../../../projects/ngx-repository/src/lib/core/repository/abstract-repository.builder.ts","../../../projects/ngx-repository/src/lib/core/common/functions.ts","../../../projects/ngx-repository/src/lib/core/request/id.ts","../../../projects/ngx-repository/src/lib/core/request/path.ts","../../../projects/ngx-repository/src/lib/normalizer/event/after-normalize.event.ts","../../../projects/ngx-repository/src/lib/normalizer/event/before-normalize.event.ts","../../../projects/ngx-repository/src/testing/mock.repository.ts","../../../projects/ngx-repository/src/testing/test-repository.builder.ts","../../../projects/ngx-repository/src/testing/ngx-repository-testing.service.ts","../../../projects/ngx-repository/src/testing/ngx-repository-testing.module.ts","../../../projects/ngx-repository/src/lib/core/common/utils/flatten.ts","../../../projects/ngx-repository/src/lib/operator/fetch-all-page.operator.ts","../../../projects/ngx-repository/src/lib/core/function/inject-repository.ts","../../../projects/ngx-repository/src/paddls-ngx-repository.ts"],"sourcesContent":["export class Page<T = any> extends Array<T> {\n\n  public currentPage: number;\n\n  public itemsPerPage: number;\n\n  public totalItems: number;\n\n  public constructor(args?: any) {\n    if (Array.isArray(args)) {\n      super(...args);\n    } else {\n      super(args);\n    }\n\n    Object.setPrototypeOf(this, Page.prototype);\n  }\n\n  public static build<U>(items: U[] = [], currentPage: number = null, itemsPerPage: number = null, totalItems: number = null): Page<U> {\n    const page: Page<U> = new Page<U>(items);\n\n    page.currentPage = currentPage != null ? currentPage : 0;\n    page.itemsPerPage = itemsPerPage != null ? itemsPerPage : items.length;\n    page.totalItems = totalItems != null ? totalItems : items.length;\n\n    return page;\n  }\n\n  public map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): Page<U> {\n    const newPage: Page<U> = new Page(super.map<U>(callbackfn, thisArg));\n\n    newPage.currentPage = this.currentPage;\n    newPage.itemsPerPage = this.itemsPerPage;\n    newPage.totalItems = this.totalItems;\n\n    return newPage;\n  }\n}\n","import { JSON_PROPERTY_METADATA_KEY, JsonProperty } from '@paddls/ts-serializer';\nimport { ColumnContext } from '../configuration/context/column-context.configuration';\nimport { SerializeType } from '@paddls/ts-serializer/dist/common';\n\n/**\n * @ignore\n */\nexport const COLUMNS_METADATA_KEY: string = JSON_PROPERTY_METADATA_KEY;\n\n/**\n * Column decorator allow you to configure the serialization/deserialization process.\n *\n * ```typescript\n * @Column() // define a column\n * public firstName: string;\n *\n * @Column('lastname')  // define a column with special mapping\n * public lastName: string;\n *\n * @Column(() => Address) // define a column with a child model\n * public address: Address;\n *\n * @Column({ type: () => Job, field: 'job' }) // combine model and special mapping\n * public myJob: Job;\n *\n * @Column({field: 'createdAt', customConverter: () => DateConverter}) // use custom converter for special type\n * public createdAt: Date;\n * ```\n *\n * @typeParam T Type of attribute\n *\n * @param columnContext Decorator configuration\n */\nexport function Column<T = any, R = any>(columnContext?: ColumnContext<T, R> | string | (() => SerializeType<T> | SerializeType<any>[])): any {\n  return (target: any, propertyKey: string) => {\n    JsonProperty(columnContext)(target, propertyKey);\n  };\n}\n","import { Column } from './column.decorator';\nimport { IdContext } from '../configuration/context/id-context.configuration';\n\n/**\n * @ignore\n */\nexport const ID_METADATA_KEY: string = 'id';\n\nexport function Id(idContext?: IdContext | string): any {\n  return (target: any, propertyKey: string) => {\n    Column(idContext)(target, propertyKey);\n    Reflect.defineMetadata(ID_METADATA_KEY, propertyKey, target);\n  };\n}\n","import { InjectionToken } from '@angular/core';\nimport { RepositoryBuilder } from './core/repository/repository.builder';\n\n/**\n * @ignore\n */\nexport const REPOSITORY_BUILDER_TOKEN: InjectionToken<RepositoryBuilder> = new InjectionToken<RepositoryBuilder>('REPOSITORY_BUILDER');\n","import { InjectionToken, Type } from '@angular/core';\nimport { AbstractRepository } from '../repository/abstract-repository';\n\n/**\n * @ignore\n */\nexport class TokenRegistry {\n\n  public static readonly tokenRegistry: Map<Type<AbstractRepository<any>>, Map<Type<any>, InjectionToken<any>>> = new Map();\n\n  public static addTokenToRegistry<T>(resourceType: Type<T>, repository: Type<AbstractRepository<T>>): InjectionToken<T> {\n    if (!TokenRegistry.tokenRegistry.has(repository)) {\n      TokenRegistry.tokenRegistry.set(repository, new Map<any, InjectionToken<any>>());\n    }\n\n    const token: InjectionToken<T> = new InjectionToken<T>(resourceType.name);\n    TokenRegistry.tokenRegistry.get(repository).set(resourceType, token);\n\n    return token;\n  }\n\n  public static findToken<T>(resourceType: Type<T>, repository: Type<AbstractRepository<T>>): InjectionToken<T> {\n    if (!TokenRegistry.tokenRegistry.has(repository)) {\n      return null;\n    }\n\n    return TokenRegistry.tokenRegistry.get(repository).get(resourceType);\n  }\n\n  public static clear(): void {\n    TokenRegistry.tokenRegistry.clear();\n  }\n}\n","export const get = (obj: unknown, path: string, defValue?: any) => {\n  if (!path) return undefined;\n  const pathArray: any = Array.isArray(path) ? path : path.match(/([^[.\\]])+/g);\n  const result: any = pathArray.reduce(\n    (prevObj: any, key: any) => prevObj && prevObj[key],\n    obj as any\n  );\n\n  return result === undefined ? defValue : result;\n};\n","import { RequestManagerContext } from './request-manager.context';\nimport { Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { RepositoryRequest } from '../request/repository.request';\nimport { RepositoryResponse } from '../response/repository.response';\nimport { RequestBuilder } from '../request/request.builder';\nimport { inject, Injectable, Injector, Type } from '@angular/core';\nimport { ResponseBuilder } from '../response/response.builder';\nimport { BuilderParam } from '../configuration/resource-param.configuration';\nimport { ConfigurationContextProvider } from '../configuration/configuration-context.provider';\nimport { RepositoryDriver } from '../driver/repository.driver';\nimport { get } from '../common/utils/get';\n\n@Injectable()\nexport class RequestManager {\n\n  protected readonly injector: Injector = inject(Injector);\n\n  public execute(context: RequestManagerContext): Observable<any> {\n    const driver: RepositoryDriver = context.driver;\n    const configuration: ConfigurationContextProvider = context.configuration;\n    const requestBuilderParam: BuilderParam<RequestBuilder> = configuration.getConfiguration('requestBuilder');\n    const requestBuilder: RequestBuilder = this.injector.get(get(requestBuilderParam, 'builder', requestBuilderParam));\n    const responseBuilder: ResponseBuilder = this.injector.get(this.getResponseBuilderType(configuration));\n\n    return requestBuilder.build(context).pipe(\n      switchMap((request: RepositoryRequest) => driver.execute(request)),\n      switchMap((response: RepositoryResponse) => responseBuilder.build(response, context))\n    );\n  }\n\n  protected getResponseBuilderType(configuration: ConfigurationContextProvider): Type<ResponseBuilder> {\n    const responseBuilderParam: BuilderParam<ResponseBuilder> = configuration.getConfiguration('responseBuilder');\n\n    return get(responseBuilderParam, 'builder', responseBuilderParam);\n  }\n}\n","import { inject, Injectable, Type } from '@angular/core';\nimport { Denormalizer, Normalizer, NormalizerConfiguration } from '@paddls/ts-serializer';\nimport { NORMALIZER_CONFIGURATION_TOKEN } from '@paddls/ngx-serializer';\n\n@Injectable()\nexport class RepositoryNormalizer {\n\n  protected readonly normalizer: Normalizer;\n\n  protected readonly denormalizer: Denormalizer;\n\n  public constructor() {\n    const configuration: NormalizerConfiguration = inject<NormalizerConfiguration>(NORMALIZER_CONFIGURATION_TOKEN);\n\n    this.normalizer = new Normalizer(configuration);\n    this.denormalizer = new Denormalizer(configuration);\n  }\n\n  public denormalize(type: Type<any>, body: any, configuration?: NormalizerConfiguration): any {\n    const denormalizer: Denormalizer = configuration ? new Denormalizer(configuration) : this.denormalizer;\n\n    if (Array.isArray(body)) {\n      return body.map((item: any) => denormalizer.deserialize(type, item));\n    } else {\n      return denormalizer.deserialize(type, body);\n    }\n  }\n\n  public normalize(body: any, configuration?: NormalizerConfiguration): any {\n    const normalizer: Normalizer = configuration ? new Normalizer(configuration) : this.normalizer;\n\n    return normalizer.serialize(body);\n  }\n\n  public getNormalizer(): Normalizer {\n    return this.normalizer;\n  }\n}\n","import { inject, Injectable, Injector, Predicate, Type } from '@angular/core';\nimport { Listener } from './listener';\nimport { Observable, Subject } from 'rxjs';\nimport { NgxRepositoryModule } from '../../ngx-repository.module';\n\ninterface RegistryItem {\n\n  predicate: Predicate<any> | Predicate<any>[];\n\n  listener: Type<Listener<any>>;\n}\n\n// @dynamic\n@Injectable()\nexport class PublisherService {\n\n  private static publisher$: Subject<any> = new Subject<any>();\n\n  private static registryItems: RegistryItem[] = [];\n\n  private readonly injector: Injector = inject(Injector);\n\n  public static getInstance: () => PublisherService = () => NgxRepositoryModule.injector?.get(PublisherService);\n\n  public static addListenerToRegistry(predicate: Predicate<any> | Predicate<any>[], listener: Type<Listener<any>>): void {\n    PublisherService.registryItems.push({ predicate, listener });\n  }\n\n  public static getPublisher(): Observable<any> {\n    return PublisherService.publisher$.asObservable();\n  }\n\n  public publish<E>(event: E): void {\n    PublisherService.registryItems\n      .filter((item: RegistryItem) => Array.isArray(item.predicate) ? item.predicate.some((p: Predicate<E>) => p(event)) : item.predicate(event))\n      .map((item: RegistryItem) => this.injector.get(item.listener as Type<any>, null))\n      .filter((service: Listener<any>) => !!service)\n      .forEach((service: Listener<any>) => service.on(event));\n\n    PublisherService.publisher$.next(event);\n  }\n}\n","import { Type } from '@angular/core';\nimport { NormalizerConfiguration } from '@paddls/ts-serializer';\n\nexport class BeforeDenormalizeEvent {\n\n  public type: Type<any>;\n\n  public body: any;\n\n  public configuration: NormalizerConfiguration;\n\n  public constructor(data: Partial<BeforeDenormalizeEvent> = {}) {\n    Object.assign(this, data);\n  }\n}\n","import { Type } from '@angular/core';\nimport { NormalizerConfiguration } from '@paddls/ts-serializer';\n\nexport class AfterDenormalizeEvent {\n\n  public type: Type<any>;\n\n  public body: any;\n\n  public configuration: NormalizerConfiguration;\n\n  public data: any;\n\n  public constructor(data: Partial<AfterDenormalizeEvent> = {}) {\n    Object.assign(this, data);\n  }\n}\n","import { inject, Injectable, Type } from '@angular/core';\nimport { RepositoryNormalizer } from '../../../normalizer/repository-denormalizer';\nimport { RepositoryResponse } from '../repository.response';\nimport { RequestManagerContext } from '../../manager/request-manager.context';\nimport { NormalizerConfiguration } from '@paddls/ts-serializer';\nimport { ResponseProcessor } from './response.processor';\nimport { PublisherService } from '../../event-stream/publisher.service';\nimport { BeforeDenormalizeEvent } from '../../../normalizer/event/before-denormalize.event';\nimport { AfterDenormalizeEvent } from '../../../normalizer/event/after-denormalize.event';\n\n@Injectable()\nexport class DenormalizeResponseProcessor implements ResponseProcessor {\n\n  private readonly normalizer: RepositoryNormalizer = inject(RepositoryNormalizer);\n\n  public transform(response: any, origin: RepositoryResponse, { configuration }: RequestManagerContext): any {\n    const responseType: Type<any> = configuration.getConfiguration('responseType')();\n    const normalizerConfiguration: NormalizerConfiguration = configuration.findConfiguration('normalizerConfiguration');\n\n    PublisherService.getInstance()?.publish(new BeforeDenormalizeEvent({\n      type: responseType,\n      body: response,\n      configuration: normalizerConfiguration\n    }));\n    const data: any = this.normalizer.denormalize(responseType, response, normalizerConfiguration);\n    PublisherService.getInstance()?.publish(new AfterDenormalizeEvent({\n      type: responseType,\n      body: response,\n      configuration: normalizerConfiguration,\n      data\n    }));\n\n    return data;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { RepositoryResponse } from '../repository.response';\nimport { ResponseProcessor } from './response.processor';\n\n@Injectable()\nexport class BodyResponseProcessor implements ResponseProcessor {\n\n  public transform(response: any, origin: RepositoryResponse): any {\n    return origin.getBody();\n  }\n}\n","import {\n  PathColumnContext,\n  PathColumnContextConfiguration\n} from '../configuration/context/path-column-context.configuration';\n\n/**\n * @ignore\n */\nexport const PATH_COLUMN_METADATA_KEY: string = 'pathColumns';\n\nexport function PathColumn(params?: PathColumnContext | string): any {\n  return (target: any, propertyKey: string) => {\n    let pathColumnContextConfiguration: PathColumnContextConfiguration = {\n      propertyKey,\n      name: propertyKey\n    };\n\n    if (typeof params === 'object') {\n      pathColumnContextConfiguration = {\n        ...pathColumnContextConfiguration,\n        ...params\n      };\n    } else if (typeof params === 'string') {\n      pathColumnContextConfiguration.name = params;\n    }\n\n    let metas: PathColumnContextConfiguration[] = [];\n    if (Reflect.hasMetadata(PATH_COLUMN_METADATA_KEY, target)) {\n      metas = Reflect.getMetadata(PATH_COLUMN_METADATA_KEY, target);\n    }\n    Reflect.defineMetadata(PATH_COLUMN_METADATA_KEY, metas.concat(pathColumnContextConfiguration), target);\n  };\n}\n","export const isObject = (a: any): a is object => a instanceof Object;\n","export const isUndefined = (val: any): val is undefined => val === undefined;\n","import { Injectable } from '@angular/core';\nimport { RepositoryResponse } from '../repository.response';\nimport { PATH_COLUMN_METADATA_KEY } from '../../decorator/path-column.decorator';\nimport { Path } from '../../request/path';\nimport { ResponseProcessor } from './response.processor';\nimport { PathColumnContextConfiguration } from '../../configuration/context/path-column-context.configuration';\nimport { PathRequest } from '../../request/path.request';\nimport { isObject } from '../../common/utils/is-object';\nimport { isUndefined } from '../../common/utils/is-undefined';\n\n@Injectable()\nexport class PathColumnResponseProcessor implements ResponseProcessor {\n\n  public transform(response: any, origin: RepositoryResponse): any {\n    if (isObject(response)) {\n      const pathColumns: PathColumnContextConfiguration[] = Reflect.getMetadata(PATH_COLUMN_METADATA_KEY, response?.[0] as any || response);\n      const pathRequest: PathRequest = origin.getRequest() as PathRequest;\n      const path: Path = pathRequest.getPath ? pathRequest.getPath() : null;\n\n      if (pathColumns && Array.isArray(response)) {\n        response.forEach((item: any) => this.mapPathColumn(pathColumns, item, path));\n      } else if (pathColumns) {\n        this.mapPathColumn(pathColumns, response, path);\n      }\n\n      return response;\n    }\n\n    return response;\n  }\n\n  protected mapPathColumn(pathColumns: PathColumnContextConfiguration[], item: any, path: Path): void {\n    pathColumns\n      .filter((pc: PathColumnContextConfiguration) => !isUndefined(path.pathParams[`:${pc.name}`]))\n      .forEach((pc: PathColumnContextConfiguration) => {\n        item[pc.propertyKey] = path.pathParams[`:${pc.name}`];\n      });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { RepositoryResponse } from '../repository.response';\nimport { RequestManagerContext } from '../../manager/request-manager.context';\nimport { ResponseProcessor } from './response.processor';\nimport { isObject } from '../../common/utils/is-object';\n\n/**\n * @ignore\n */\nexport const ORIGINAL_QUERY_METADATA_KEY: string = 'originalQuery';\n\n@Injectable()\nexport class OriginalQueryResponseProcessor implements ResponseProcessor {\n\n  public transform(response: any, origin: RepositoryResponse, { query }: RequestManagerContext): any {\n    if (query) {\n      if (Array.isArray(response)) {\n        response.forEach((item: any) => Reflect.defineMetadata(ORIGINAL_QUERY_METADATA_KEY, query, item));\n      } else if (isObject(response)) {\n        Reflect.defineMetadata(ORIGINAL_QUERY_METADATA_KEY, query, response);\n      }\n    }\n\n    return response;\n  }\n}\n","export const isFunction = (val: any): val is Function => typeof val === 'function';\n","import { RepositoryResponse } from './repository.response';\nimport { Observable, of } from 'rxjs';\nimport { RequestManagerContext } from '../manager/request-manager.context';\nimport { ConfigurationContextProvider } from '../configuration/configuration-context.provider';\nimport { inject, Injectable, Injector, Type } from '@angular/core';\nimport { ResponseProcessor } from './processor/response.processor';\nimport { BuilderParam } from '../configuration/resource-param.configuration';\nimport { BodyResponseProcessor } from './processor/body.response-processor';\nimport { DenormalizeResponseProcessor } from './processor/denormalize-response.processor';\nimport { PathColumnResponseProcessor } from './processor/path-column-response.processor';\nimport { OriginalQueryResponseProcessor } from './processor/original-query-response.processor';\nimport { ResponseBuilderParam } from './response-builder.param';\nimport { ResponseProcessorWithParams } from './response-processor-with.params';\nimport { ResponseProcessorToken } from './response-processor.token';\nimport { isFunction } from '../common/utils/is-function';\nimport { isObject } from '../common/utils/is-object';\nimport { get } from '../common/utils/get';\n\n@Injectable()\nexport class ResponseBuilder {\n\n  protected readonly injector: Injector = inject(Injector);\n\n  public static withParams(params: ResponseBuilderParam = {}): BuilderParam<ResponseBuilder> {\n    const responseProcessors: ResponseProcessorToken[] = [\n      ...(params.preResponseProcessors || []),\n      ...(params.bodyResponseProcessors || [BodyResponseProcessor]),\n      DenormalizeResponseProcessor,\n      PathColumnResponseProcessor,\n      OriginalQueryResponseProcessor,\n      ...(params.postResponseProcessors || [])\n    ];\n\n    return {\n      builder: ResponseBuilder,\n      params: {\n        responseProcessors\n      }\n    };\n  }\n\n  public build(response: RepositoryResponse, context: RequestManagerContext): Observable<any> {\n    const responseProcessors: ResponseProcessor[] = this.getProcessors(context.configuration);\n\n    let transformedResponse: any = null;\n\n    responseProcessors.forEach((transformer: ResponseProcessor) => {\n      transformedResponse = transformer.transform(transformedResponse, response, context);\n    });\n\n    return of(transformedResponse);\n  }\n\n  protected getProcessors(configuration: ConfigurationContextProvider): ResponseProcessor[] {\n    const responseProcessorTokens: ResponseProcessorToken[] = [\n      ...this.getParams(configuration)\n    ];\n\n    return responseProcessorTokens.map((token: ResponseProcessorToken) => this.getProcessor(token));\n  }\n\n  protected getProcessor(responseProcessorToken: ResponseProcessorToken): ResponseProcessor {\n    if (isFunction(responseProcessorToken)) {\n      return this.injector.get(responseProcessorToken as Type<ResponseProcessor>);\n    } else {\n      return this.injector.get((responseProcessorToken as ResponseProcessorWithParams).type);\n    }\n  }\n\n  protected getParams(configuration: ConfigurationContextProvider): any {\n    const builderParam: BuilderParam<ResponseBuilder> = configuration.findConfiguration('responseBuilder');\n\n    if (isObject(builderParam)) {\n      return get(builderParam, `params.responseProcessors`, null);\n    } else {\n      return null;\n    }\n  }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { Page } from '../../model/page';\nimport { ResponseProcessor } from './response.processor';\nimport { ResponseBuilder } from '../response.builder';\nimport { BuilderParam } from '../../configuration/resource-param.configuration';\nimport { BodyResponseProcessor } from './body.response-processor';\n\n@Injectable()\nexport class PageResponseProcessor implements ResponseProcessor {\n\n  public static withParams(pageResponseProcessor: Type<ResponseProcessor> = PageResponseProcessor): BuilderParam<ResponseBuilder> {\n    return ResponseBuilder.withParams({\n      bodyResponseProcessors: [\n        BodyResponseProcessor,\n        pageResponseProcessor\n      ]\n    });\n  }\n\n  public transform(response: any): any {\n    return Array.isArray(response) ? Page.build(response) : response;\n  }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { RepositoryResponse } from '../repository.response';\nimport { RequestManagerContext } from '../../manager/request-manager.context';\nimport { ResponseProcessor } from './response.processor';\nimport { ID_METADATA_KEY } from '../../decorator/id.decorator';\n\n@Injectable()\nexport class IdResponseProcessor implements ResponseProcessor {\n\n  public transform(response: any, origin: RepositoryResponse, { configuration }: RequestManagerContext): any {\n    const resourceType: Type<any> = configuration.getConfiguration('responseType')();\n    const idField: string = Reflect.getMetadata(ID_METADATA_KEY, resourceType.prototype);\n\n    if (idField && response) {\n      return response[idField];\n    }\n\n    return null;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ResponseProcessor } from './response.processor';\n\n@Injectable()\nexport class VoidResponseProcessor implements ResponseProcessor {\n\n  public transform(): any {\n    return void 0;\n  }\n}\n","import 'reflect-metadata';\n\nimport {\n  EnvironmentProviders,\n  importProvidersFrom,\n  inject,\n  Injector,\n  makeEnvironmentProviders,\n  ModuleWithProviders,\n  NgModule,\n  provideAppInitializer\n} from '@angular/core';\nimport { NgxRepositoryService } from './ngx-repository.service';\nimport { DEFAULT_NORMALIZER_CONFIGURATION, NormalizerConfiguration } from '@paddls/ts-serializer';\nimport { RequestManager } from './core/manager/request.manager';\nimport { RepositoryNormalizer } from './normalizer/repository-denormalizer';\nimport { DenormalizeResponseProcessor } from './core/response/processor/denormalize-response.processor';\nimport { PageResponseProcessor } from './core/response/processor/page-response.processor';\nimport { IdResponseProcessor } from './core/response/processor/id-response.processor';\nimport { PathColumnResponseProcessor } from './core/response/processor/path-column-response.processor';\nimport { OriginalQueryResponseProcessor } from './core/response/processor/original-query-response.processor';\nimport { PublisherService } from './core/event-stream/publisher.service';\nimport { NgxSerializerModule, NORMALIZER_CONFIGURATION_TOKEN } from '@paddls/ngx-serializer';\nimport {VoidResponseProcessor} from './core/response/processor/void-response.processor';\nimport {ResponseBuilder} from './core/response/response.builder';\nimport {TokenRegistry} from './core/registry/token.registry';\nimport {BodyResponseProcessor} from './core/response/processor/body.response-processor';\n\n/**\n * @ignore\n */\nexport interface Config {\n  normalizerConfiguration?: NormalizerConfiguration;\n}\n\nexport function provideNgxRepository(config?: Config): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    provideAppInitializer(() => ((injector: Injector) => (): void => {\n      TokenRegistry.clear();\n      NgxRepositoryModule.injector = injector;\n    })(inject(Injector))()),\n    importProvidersFrom(\n      NgxSerializerModule.forRoot(config && config.normalizerConfiguration ? config : {normalizerConfiguration: DEFAULT_NORMALIZER_CONFIGURATION})\n    ),\n    {\n      provide: NORMALIZER_CONFIGURATION_TOKEN,\n      useValue: config && config.normalizerConfiguration ? config.normalizerConfiguration : DEFAULT_NORMALIZER_CONFIGURATION\n    },\n    RepositoryNormalizer,\n    NgxRepositoryService,\n    RequestManager,\n    ResponseBuilder,\n    DenormalizeResponseProcessor,\n    PageResponseProcessor,\n    IdResponseProcessor,\n    BodyResponseProcessor,\n    VoidResponseProcessor,\n    OriginalQueryResponseProcessor,\n    PathColumnResponseProcessor,\n    PublisherService\n  ]);\n}\n\n/**\n * @ignore\n */\n@NgModule()\nexport class NgxRepositoryModule {\n\n  public static injector: Injector = null;\n\n  /**\n   * @deprecated use provideNgxRepository() instead\n   */\n  public static forRoot(config?: Config): ModuleWithProviders<NgxRepositoryModule> {\n    return {\n      ngModule: NgxRepositoryModule,\n      providers: [\n        provideNgxRepository(config)\n      ]\n    };\n  }\n}\n","import { inject, Injectable, InjectionToken, Injector, Type } from '@angular/core';\nimport { RepositoryBuilder } from './core/repository/repository.builder';\nimport { REPOSITORY_BUILDER_TOKEN } from './ngx-repository.module.di';\nimport { TokenRegistry } from './core/registry/token.registry';\nimport { AbstractRepository } from './core/repository/abstract-repository';\nimport { RepositoryService } from './repository-service';\nimport { NgxRepositoryModule } from './ngx-repository.module';\n\n@Injectable()\nexport class NgxRepositoryService implements RepositoryService {\n\n  private readonly repositoryBuilders: RepositoryBuilder[] = inject<RepositoryBuilder[]>(REPOSITORY_BUILDER_TOKEN);\n\n  public static getInstance: () => RepositoryService = () => NgxRepositoryModule.injector.get(NgxRepositoryService);\n\n  protected injector: Injector;\n\n  public constructor(parentInjector: Injector) {\n    this.injector = Injector.create({\n      providers: [],\n      parent: parentInjector\n    });\n  }\n\n  public getRepository<T>(resourceType: Type<T>, repositoryType: Type<AbstractRepository<T>>): AbstractRepository<T> {\n    let finalRepository: AbstractRepository<T> = this.searchForExistingService(repositoryType);\n    if (finalRepository) {\n      return finalRepository;\n    }\n\n    finalRepository = this.searchForExistingToken(resourceType, repositoryType);\n    if (finalRepository) {\n      return finalRepository;\n    }\n\n    return this.createNewRepository(resourceType, repositoryType);\n  }\n\n  private searchForExistingService<T>(repositoryType?: Type<AbstractRepository<T>>): AbstractRepository<T> {\n    if (!repositoryType) {\n      return null;\n    }\n\n    return this.injector.get(repositoryType, null);\n  }\n\n  private searchForExistingToken<T>(resourceType: Type<T>, repositoryType?: Type<AbstractRepository<T>>): AbstractRepository<T> {\n    const token: InjectionToken<any> = TokenRegistry.findToken(resourceType, repositoryType);\n\n    if (!token) {\n      return null;\n    }\n\n    const repositories: AbstractRepository<T> | AbstractRepository<T>[] = this.injector.get(token, null);\n\n    if (repositories && Array.isArray(repositories)) {\n      if (!repositoryType) {\n        throw new Error(\n          `With multiple connection types, you must provide the repository argument in JoinColumn, SubCollection and InjectRepository decorator of your ${resourceType.name} resource.`\n        );\n      }\n\n      return repositories.find((rep: AbstractRepository<T>) => rep instanceof repositoryType);\n    } else {\n      return repositories as AbstractRepository<T>;\n    }\n  }\n\n  private createNewRepository<T>(resourceType: Type<T>, repositoryType?: Type<AbstractRepository<T>>): AbstractRepository<T> {\n    if (this.repositoryBuilders.length === 0) {\n      throw new Error('There is no connection configured.');\n    }\n\n    let repository: AbstractRepository<T>;\n    if (this.repositoryBuilders.length === 1) {\n      repository = this.repositoryBuilders[0].getRepository(resourceType, repositoryType);\n    } else if (this.repositoryBuilders.length > 1) {\n      if (!repositoryType) {\n        throw new Error(\n          `With multiple connection types, you must provide the repository argument in JoinColumn, SubCollection and InjectRepository decorators of your ${resourceType.name} resource.`\n        );\n      }\n      const connection: RepositoryBuilder = this.repositoryBuilders.find((c: RepositoryBuilder) => c.supports(resourceType, repositoryType));\n      if (!connection) {\n        throw new Error(`There is no RepositoryBuilder to support ${repositoryType.name} repository type`);\n      }\n\n      repository = connection.getRepository(resourceType, repositoryType);\n    }\n\n    const token: InjectionToken<AbstractRepository<T>> = TokenRegistry.addTokenToRegistry(resourceType, repositoryType);\n\n    this.injector = Injector.create({\n      providers: [\n        {\n          provide: token,\n          useValue: repository\n        }\n      ],\n      parent: this.injector\n    });\n\n    return repository;\n  }\n}\n","import { AbstractRepository } from '../repository/abstract-repository';\nimport {\n  InjectRepositoryContext,\n  InjectRepositoryContextConfiguration\n} from '../configuration/context/inject-repository-context.configuration';\nimport { NgxRepositoryService } from '../../ngx-repository.service';\n\n/**\n * @ignore\n */\nexport const INJECT_REPOSITORY_METADATA_KEY: string = 'injectRepositories';\n\n/**\n * @ignore\n */\nexport const INJECT_REPOSITORY_INSTANCE_METADATA_KEY: string = 'injectRepositorieInstance';\n\n/**\n * @Deprecated Please use injectRepository function instead.\n */\nexport function InjectRepository<T>(params: InjectRepositoryContext<T>): any {\n  return (target: any, propertyKey: string) => {\n    const injectRepositoryContextConfiguration: InjectRepositoryContextConfiguration = {\n      propertyKey,\n      ...params\n    };\n\n    let metas: InjectRepositoryContextConfiguration[] = [];\n    if (Reflect.hasMetadata(INJECT_REPOSITORY_METADATA_KEY, target)) {\n      metas = Reflect.getMetadata(INJECT_REPOSITORY_METADATA_KEY, target);\n    }\n    Reflect.defineMetadata(INJECT_REPOSITORY_METADATA_KEY, metas.concat(injectRepositoryContextConfiguration), target);\n\n    Object.defineProperty(target.constructor.prototype, propertyKey, {\n      get(): AbstractRepository<T> {\n        if (Reflect.hasOwnMetadata(`${INJECT_REPOSITORY_INSTANCE_METADATA_KEY}:${propertyKey}`, this)) {\n          return Reflect.getOwnMetadata(`${INJECT_REPOSITORY_INSTANCE_METADATA_KEY}:${propertyKey}`, this);\n        }\n\n        const repository: AbstractRepository<T> = NgxRepositoryService.getInstance().getRepository(\n          injectRepositoryContextConfiguration.resourceType(),\n          injectRepositoryContextConfiguration.repository ? injectRepositoryContextConfiguration.repository() : null\n        );\n\n        Reflect.defineMetadata(`${INJECT_REPOSITORY_INSTANCE_METADATA_KEY}:${propertyKey}`, repository, this);\n\n        return repository;\n      },\n      set: () => void 0,\n      enumerable: true,\n      configurable: true\n    });\n  };\n}\n\n","import { Observable, timer } from 'rxjs';\nimport { softCache } from '@paddls/rxjs-common';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n  SoftCacheContext,\n  SoftCacheContextConfiguration\n} from '../configuration/context/soft-cache-context.configuration';\nimport { isObject } from '../common/utils/is-object';\n\n/**\n * @ignore\n */\nexport const SOFT_CACHE_METADATA_KEY: string = 'softCache';\n\nexport function SoftCache(softCacheContext?: SoftCacheContext | number): any {\n  return (target: object, propertyKey: string) => {\n    let softCacheContextConfiguration: SoftCacheContextConfiguration = {\n      propertyKey,\n      expires: null\n    };\n\n    if (!!softCacheContext) {\n      if (isObject(softCacheContext)) {\n        softCacheContextConfiguration = {\n          ...softCacheContextConfiguration,\n          ...(softCacheContext as SoftCacheContext)\n        };\n      } else {\n        softCacheContextConfiguration.expires = softCacheContext as number;\n      }\n    }\n\n    Reflect.defineMetadata(SOFT_CACHE_METADATA_KEY, softCacheContextConfiguration, target, propertyKey);\n  };\n}\n\nexport function setSoftCache<T>(obs$: Observable<T>, target: any, propertyKey: string): Observable<T> {\n  if (!hasSoftCache(target, propertyKey)) {\n    return obs$;\n  }\n\n  const softCacheContextConfiguration: SoftCacheContextConfiguration = Reflect.getMetadata(SOFT_CACHE_METADATA_KEY, target, propertyKey);\n\n  if (softCacheContextConfiguration.expires != null) {\n    obs$.pipe(\n      takeUntil(timer(softCacheContextConfiguration.expires))\n    );\n  }\n\n  return obs$.pipe(\n    softCache()\n  );\n}\n\nexport function hasSoftCache(target: any, propertyKey: string): boolean {\n  return Reflect.hasMetadata(SOFT_CACHE_METADATA_KEY, target, propertyKey);\n}\n","import { Observable, timer } from 'rxjs';\nimport { hardCache } from '@paddls/rxjs-common';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n  HardCacheContext,\n  HardCacheContextConfiguration\n} from '../configuration/context/hard-cache-context.configuration';\nimport { isObject } from '../common/utils/is-object';\n\n/**\n * @ignore\n */\nexport const HARD_CACHE_METADATA_KEY: string = 'hardCache';\n\nexport function HardCache(hardCacheContext?: HardCacheContext | number): any {\n  return (target: object, propertyKey: string) => {\n    let hardCacheContextConfiguration: HardCacheContextConfiguration = {\n      propertyKey,\n      expires: null\n    };\n\n    if (!!hardCacheContext) {\n      if (isObject(hardCacheContext)) {\n        hardCacheContextConfiguration = {\n          ...hardCacheContextConfiguration,\n          ...(hardCacheContext as HardCacheContext)\n        };\n      } else {\n        hardCacheContextConfiguration.expires = hardCacheContext as number;\n      }\n    }\n\n    Reflect.defineMetadata(HARD_CACHE_METADATA_KEY, hardCacheContextConfiguration, target, propertyKey);\n  };\n}\n\nexport function setHardCache<T>(obs$: Observable<T>, target: any, propertyKey: string): Observable<T> {\n  if (!hasHardCache(target, propertyKey)) {\n    return obs$;\n  }\n\n  const hardCacheContextConfiguration: HardCacheContextConfiguration = Reflect.getMetadata(HARD_CACHE_METADATA_KEY, target, propertyKey);\n\n  if (hardCacheContextConfiguration.expires != null) {\n    obs$.pipe(\n      takeUntil(timer(hardCacheContextConfiguration.expires))\n    );\n  }\n\n  return obs$.pipe(\n    hardCache()\n  );\n}\n\nexport function hasHardCache(target: any, propertyKey: string): boolean {\n  return Reflect.hasMetadata(HARD_CACHE_METADATA_KEY, target, propertyKey);\n}\n","import { Observable } from 'rxjs';\nimport { hasSoftCache, setSoftCache } from './soft-cache.decorator';\nimport { hasHardCache, setHardCache } from './hard-cache.decorator';\nimport { FindByIdRepository } from '../repository/find-by-id.repository';\nimport {\n  JoinColumnContext,\n  JoinColumnContextConfiguration\n} from '../configuration/context/join-column-context.configuration';\nimport { NgxRepositoryService } from '../../ngx-repository.service';\nimport { get } from '../common/utils/get';\n\n/**\n * @ignore\n */\nexport const JOIN_COLUMN_METADATA_KEY: string = 'joinColumns';\n\n/**\n * @ignore\n */\nexport const JOIN_COLUMN_OBS_METADATA_KEY: string = 'joinColumnObs';\n\nexport function JoinColumn<T>(joinColumnContext: JoinColumnContext<T>): any {\n  return (target: object, propertyKey: string) => {\n    const joinColumnContextConfiguration: JoinColumnContextConfiguration = { propertyKey, ...joinColumnContext };\n    Reflect.defineMetadata(JOIN_COLUMN_METADATA_KEY, joinColumnContextConfiguration, target, propertyKey);\n\n    Object.defineProperty(target.constructor.prototype, propertyKey, {\n      get(): Observable<any> {\n        if (Reflect.hasOwnMetadata(JOIN_COLUMN_OBS_METADATA_KEY, this, propertyKey)) {\n          return Reflect.getOwnMetadata(JOIN_COLUMN_OBS_METADATA_KEY, this, propertyKey);\n        }\n\n        const obs$: Observable<any> = makeJoinColumnSoftCached<T>(this, propertyKey, joinColumnContext)\n          || makeJoinColumnHardCached<T>(this, propertyKey, joinColumnContext)\n          || makeJoinColumn<T>(this, joinColumnContext);\n\n        Reflect.defineMetadata(JOIN_COLUMN_OBS_METADATA_KEY, obs$, this, propertyKey);\n\n        return obs$;\n      },\n      set: () => void 0,\n      enumerable: true,\n      configurable: true\n    });\n  };\n}\n\nfunction makeJoinColumnSoftCached<T>(target: any, propertyKey: string, joinColumnContext: JoinColumnContext<T>): Observable<any> {\n  if (!hasSoftCache(target, propertyKey)) {\n    return null;\n  }\n\n  return setSoftCache(makeJoinColumn(target, joinColumnContext), target, propertyKey);\n}\n\nfunction makeJoinColumnHardCached<T>(target: any, propertyKey: string, joinColumnContext: JoinColumnContext<T>): Observable<any> {\n  if (!hasHardCache(target, propertyKey)) {\n    return null;\n  }\n\n  return setHardCache(makeJoinColumn(target, joinColumnContext), target, propertyKey);\n}\n\nfunction makeJoinColumn<T>(target: any, joinColumnContext: JoinColumnContext<T>): Observable<any> {\n  const repository: FindByIdRepository = NgxRepositoryService.getInstance()\n    .getRepository(joinColumnContext.resourceType(), joinColumnContext.repository ? joinColumnContext.repository() : null) as any;\n\n  return repository.findById(get(target, joinColumnContext.attribute, null));\n}\n","import {\n  PathParamContext,\n  PathParamContextConfiguration\n} from '../configuration/context/path-param-context.configuration';\n\n/**\n * @ignore\n */\nexport const PATH_PARAM_METADATA_KEY: string = 'pathParams';\n\nexport function PathParam(params?: PathParamContext | string): any {\n  return (target: any, propertyKey: string) => {\n    let paramContextConfiguration: PathParamContextConfiguration = {\n      propertyKey,\n      name: propertyKey\n    };\n\n    if (typeof params === 'object') {\n      paramContextConfiguration = {\n        ...paramContextConfiguration,\n        ...params\n      };\n    } else if (typeof params === 'string') {\n      paramContextConfiguration.name = params;\n    }\n\n    let metas: PathParamContextConfiguration[] = [];\n    if (Reflect.hasMetadata(PATH_PARAM_METADATA_KEY, target)) {\n      metas = Reflect.getMetadata(PATH_PARAM_METADATA_KEY, target);\n    }\n    Reflect.defineMetadata(PATH_PARAM_METADATA_KEY, metas.concat(paramContextConfiguration), target);\n  };\n}\n","import { Type } from '@angular/core';\nimport { ResourceConfiguration } from '../configuration/resource.configuration';\nimport { RepositoryContextConfiguration } from '../configuration/context/repository-context.configuration';\n\n/**\n * @ignore\n */\nexport const REPOSITORY_METADATA_KEY: string = 'repository';\n\n/**\n * @ignore\n */\nexport const RESOURCE_CONFIGURATION_METADATA_KEY: string = 'resourceConfiguration';\n\n// @dynamic\nexport function Repository<RC extends ResourceConfiguration, T = any>(resourceType: () => Type<T>, configuration: RC = null): any {\n  return (target: any): void => {\n    const defaultRepositoryConfiguration: RepositoryContextConfiguration<T> = Reflect.getMetadata(REPOSITORY_METADATA_KEY, Object.getPrototypeOf(target));\n    const defaultConfiguration: ResourceConfiguration = defaultRepositoryConfiguration ? defaultRepositoryConfiguration.defaultConfiguration : null;\n    const params: RepositoryContextConfiguration<T> = {\n      resourceType,\n      defaultConfiguration: Object.assign({}, defaultConfiguration, configuration)\n    };\n\n    Reflect.defineMetadata(REPOSITORY_METADATA_KEY, params, target);\n  };\n}\n\nexport function getRepositoryContextConfiguration<T>(target: any): RepositoryContextConfiguration<T> {\n  return Reflect.getMetadata(REPOSITORY_METADATA_KEY, target);\n}\n","import { JsonTypeSupports } from '@paddls/ts-serializer';\nimport { JSON_TYPE_SUPPORTS_METADATA_KEY } from '@paddls/ts-serializer/dist/decorator/json-type-supports.decorator';\n\n/**\n * @ignore\n */\nexport const RESOURCE_TYPE_SUPPORTS_METADATA_KEY: string = JSON_TYPE_SUPPORTS_METADATA_KEY;\n\nexport function ResourceTypeSupports(resourceTypeSupportsContext?: (data: any) => boolean): any {\n  return (target: any) => {\n    JsonTypeSupports(resourceTypeSupportsContext)(target);\n  };\n}\n","import { Observable } from 'rxjs';\nimport { hasSoftCache, setSoftCache } from './soft-cache.decorator';\nimport { hasHardCache, setHardCache } from './hard-cache.decorator';\nimport { FindAllRepository } from '../repository/find-all.repository';\nimport { ORIGINAL_QUERY_METADATA_KEY } from '../response/processor/original-query-response.processor';\nimport {\n  SubCollectionContext,\n  SubCollectionContextConfiguration\n} from '../configuration/context/sub-collection-context.configuration';\nimport { NgxRepositoryService } from '../../ngx-repository.service';\n\n/**\n * @ignore\n */\nexport const SUB_COLLECTION_METADATA_KEY: string = 'subCollections';\n\n/**\n * @ignore\n */\nexport const SUB_COLLECTION_OBS_METADATA_KEY: string = 'subCollectionObs';\n\nexport function SubCollection<T>(subCollectionContext: SubCollectionContext<T>): any {\n  return (target: object, propertyKey: string) => {\n    const subCollectionContextConfiguration: SubCollectionContextConfiguration = { propertyKey, ...subCollectionContext };\n    Reflect.defineMetadata(SUB_COLLECTION_METADATA_KEY, subCollectionContextConfiguration, target, propertyKey);\n\n    Object.defineProperty(target.constructor.prototype, propertyKey, {\n      get(): Observable<any> {\n        if (Reflect.hasOwnMetadata(SUB_COLLECTION_OBS_METADATA_KEY, this, propertyKey)) {\n          return Reflect.getOwnMetadata(SUB_COLLECTION_OBS_METADATA_KEY, this, propertyKey);\n        }\n\n        const obs$: Observable<any> = makeSubCollectionSoftCached<T>(this, propertyKey, subCollectionContext)\n          || makeSubCollectionHardCached<T>(this, propertyKey, subCollectionContext)\n          || makeSubCollection<T>(this, subCollectionContext);\n\n        Reflect.defineMetadata(SUB_COLLECTION_OBS_METADATA_KEY, obs$, this, propertyKey);\n\n        return obs$;\n      },\n      set: () => void 0,\n      enumerable: true,\n      configurable: true\n    });\n  };\n}\n\nfunction makeSubCollectionSoftCached<T>(target: any, propertyKey: string, subCollectionContext: SubCollectionContext<T>): Observable<any> {\n  if (!hasSoftCache(target, propertyKey)) {\n    return null;\n  }\n\n  return setSoftCache(makeSubCollection(target, subCollectionContext), target, propertyKey);\n}\n\nfunction makeSubCollectionHardCached<T>(target: any, propertyKey: string, subCollectionContext: SubCollectionContext<T>): Observable<any> {\n  if (!hasHardCache(target, propertyKey)) {\n    return null;\n  }\n\n  return setHardCache(makeSubCollection(target, subCollectionContext), target, propertyKey);\n}\n\nfunction makeSubCollection<T>(target: any, subCollectionContext: SubCollectionContext<T>): Observable<any> {\n  const repository: FindAllRepository = NgxRepositoryService.getInstance()\n    .getRepository(subCollectionContext.resourceType(), subCollectionContext.repository ? subCollectionContext.repository() : null) as any;\n\n  return repository.findAll(subCollectionContext.params ? subCollectionContext.params(target, Reflect.getOwnMetadata(ORIGINAL_QUERY_METADATA_KEY, target)) : null);\n}\n","export const isString = (a: any): a is string => typeof a === 'string';\n","export const flattenDeep = (arr: any[]) => Array.isArray(arr)\n  ? arr.reduce((a: any, b: any) => a.concat(flattenDeep(b)), [])\n  : [arr];\n","import { PropertyKeyConfiguration } from '../common/decorator/property-key-configuration';\nimport { isString } from '../common/utils/is-string';\nimport { flattenDeep } from '../common/utils/flatten-deep';\n\n/**\n * @ignore\n */\nexport const SUB_QUERY_METADATA_KEY: string = 'SUB_QUERY';\n\nexport function SubQuery(): any {\n  return (target: any, propertyKey: string) => {\n    Reflect.defineMetadata(SUB_QUERY_METADATA_KEY, propertyKey, target);\n  };\n}\n\nexport function getDeepQueryMetadataValues<T extends PropertyKeyConfiguration>(metadataKey: string, query: any, parent: string = ''): T[] {\n  if (query) {\n    let subQueries: any = Reflect.getMetadata(SUB_QUERY_METADATA_KEY, query) || [];\n\n    if (isString(subQueries)) {\n      subQueries = [subQueries];\n    }\n\n    const childMetadata: T[] = subQueries.map((subQuery: string) => getDeepQueryMetadataValues<T>(metadataKey, query[subQuery], parent ? `${parent}.${subQuery}` : subQuery));\n\n    let metadata: T[] | T = Reflect.getMetadata(metadataKey, query) || [];\n\n    if (!Array.isArray(metadata)) {\n      metadata = [metadata];\n    }\n\n    const modifiedMetadata: T[] = metadata\n      .map((property: PropertyKeyConfiguration) => ({\n        ...property,\n        propertyKey: parent ? `${parent}.${property.propertyKey}` : property.propertyKey\n      })) as T[];\n\n    return flattenDeep([\n      childMetadata,\n      modifiedMetadata\n    ]);\n  }\n\n  return [];\n}\n\nexport function getDeepQueryMetadataValue(metadataKey: string, query: any): any {\n  return getDeepQueryMetadataValues(metadataKey, query)?.[0];\n}\n","import { Id } from '../decorator/id.decorator';\nimport { SubQuery } from '../decorator/sub-query.decorator';\n\nexport class IdQuery {\n\n  @Id()\n  public id: any;\n\n  @SubQuery()\n  public readonly parent?: any;\n\n  public constructor(id: any, parent?: any) {\n    this.id = id;\n    this.parent = parent;\n  }\n}\n","import { ResourceConfiguration } from './resource.configuration';\nimport { get } from '../common/utils/get';\n\nexport class ConfigurationProvider {\n\n  public constructor(private readonly params: ResourceConfiguration) {\n  }\n\n  public getConfiguration(property: string, paths: string[]): any {\n    const configuration: any = this.findConfiguration(property, paths);\n\n    if (configuration != null) {\n      return configuration;\n    }\n\n    console.error(`Unable to find configuration '${property}' (${JSON.stringify(paths)})`, this.params);\n\n    throw new Error(`Unable to find configuration '${property}' (${JSON.stringify(paths)})`);\n  }\n\n  public findConfiguration(property: string, paths: string[]): any {\n    for (const path of paths) {\n      const value: any = get(this.params, `${path}.${property}`);\n      if (value != null) {\n        return value;\n      }\n    }\n\n    if (get(this.params, property) != null) {\n      return get(this.params, property);\n    }\n\n    return null;\n  }\n}\n","import { ConfigurationProvider } from './configuration.provider';\nimport { ResourceConfiguration } from './resource.configuration';\n\nexport class ConfigurationContextProvider {\n\n  public constructor(private readonly configurationProvider: ConfigurationProvider,\n                     private readonly paths: string[] = []) {\n  }\n\n  public getOperation(): string {\n    return this.paths?.[0];\n  }\n\n  public getConfiguration<T extends ResourceConfiguration = ResourceConfiguration>(property: keyof T): any {\n    return this.configurationProvider.getConfiguration(property as string, this.paths);\n  }\n\n  public findConfiguration<T extends ResourceConfiguration = ResourceConfiguration>(property: keyof T): any {\n    return this.configurationProvider.findConfiguration(property as string, this.paths);\n  }\n}\n","import { Predicate } from '@angular/core';\nimport { PublisherService } from '../publisher.service';\nimport { asyncScheduler, Observable } from 'rxjs';\nimport { filter, observeOn } from 'rxjs/operators';\nimport { softCache } from '@paddls/rxjs-common';\n\nconst EVENT_LISTENER_OBS_METADATA_KEY: string = 'ngx-repository:event-listener-observable';\n\nexport function EventListener<E>(predicate?: Predicate<E> | (Predicate<E>[])): any {\n  return (target: any, propertyKey?: string) => {\n    let finalPredicate: Predicate<E> | Predicate<E>[] = predicate;\n\n    if (!finalPredicate) {\n      finalPredicate = () => true;\n    }\n\n    if (!propertyKey) {\n      PublisherService.addListenerToRegistry(finalPredicate, target);\n\n      return;\n    }\n\n    Object.defineProperty(target.constructor.prototype, propertyKey, {\n      get(): any {\n        if (Reflect.hasOwnMetadata(`${EVENT_LISTENER_OBS_METADATA_KEY}:${propertyKey}`, this)) {\n          return Reflect.getOwnMetadata(`${EVENT_LISTENER_OBS_METADATA_KEY}:${propertyKey}`, this);\n        }\n\n        let source$: Observable<any>;\n        if (Array.isArray(finalPredicate)) {\n          source$ = PublisherService.getPublisher().pipe(\n            filter((event: any) => (finalPredicate as Predicate<E>[]).some((p: Predicate<E>) => p(event)))\n          );\n        } else {\n          source$ = PublisherService.getPublisher().pipe(\n            filter((event: any) => (finalPredicate as Predicate<E>)(event))\n          );\n        }\n\n        source$ = source$.pipe(\n          observeOn(asyncScheduler),\n          softCache()\n        );\n        Reflect.defineMetadata(`${EVENT_LISTENER_OBS_METADATA_KEY}:${propertyKey}`, source$, this);\n\n        return source$;\n      },\n      set: () => void 0,\n      enumerable: true,\n      configurable: true\n    });\n\n  };\n}\n","import { Observable } from 'rxjs';\nimport { RepositoryDriver } from '../driver/repository.driver';\nimport { ConfigurationProvider } from '../configuration/configuration.provider';\nimport { RequestManager } from '../manager/request.manager';\nimport { ResourceConfiguration } from '../configuration/resource.configuration';\nimport { ConfigurationContextProvider } from '../configuration/configuration-context.provider';\nimport { Type } from '@angular/core';\nimport { REPOSITORY_METADATA_KEY } from '../decorator/repository.decorator';\nimport { RepositoryContextConfiguration } from '../configuration/context/repository-context.configuration';\n\nexport abstract class AbstractRepository<T> {\n\n  public readonly configurationProvider: ConfigurationProvider;\n\n  public readonly resourceType: Type<T>;\n\n  protected constructor(protected readonly requestManager: RequestManager,\n                        protected readonly driver: RepositoryDriver,\n                        moduleConfiguration: ResourceConfiguration) {\n    const repositoryConfiguration: RepositoryContextConfiguration<any> = Reflect.getMetadata(REPOSITORY_METADATA_KEY, Object.getPrototypeOf(this).constructor);\n    if (!repositoryConfiguration) {\n      throw new Error('There is no Resource type configuration for this repository.');\n    }\n\n    const configuration: ResourceConfiguration = Object.assign({\n      responseType: repositoryConfiguration.resourceType\n    }, repositoryConfiguration.defaultConfiguration, moduleConfiguration);\n\n    this.resourceType = repositoryConfiguration.resourceType();\n    this.configurationProvider = new ConfigurationProvider(this.getResourceConfiguration(this.resourceType, configuration));\n  }\n\n  protected abstract getResourceConfiguration(resourceType: Type<any>, configuration: ResourceConfiguration): ResourceConfiguration;\n\n  protected execute(body: any, query: any, configurationPaths: string[]): Observable<any> {\n    return this.requestManager.execute({\n      body,\n      query,\n      configuration: new ConfigurationContextProvider(this.configurationProvider, configurationPaths),\n      driver: this.driver\n    });\n  }\n}\n\n\n","import {\n  Repository,\n  REPOSITORY_METADATA_KEY,\n  RESOURCE_CONFIGURATION_METADATA_KEY\n} from '../decorator/repository.decorator';\nimport { Type } from '@angular/core';\nimport { AbstractRepository } from './abstract-repository';\nimport { ConfigurationProvider } from '../configuration/configuration.provider';\nimport { ResourceConfiguration } from '../configuration/resource.configuration';\nimport { RepositoryContextConfiguration } from '../configuration/context/repository-context.configuration';\nimport { RepositoryBuilder } from './repository.builder';\n\n/**\n * @ignore\n */\nexport abstract class AbstractRepositoryBuilder implements RepositoryBuilder {\n\n  protected constructor(protected resourceContextKey: string) {\n  }\n\n  public abstract supports<T>(resourceType: Type<T>, repositoryType: Type<AbstractRepository<T>>): boolean;\n\n  public getRepository<T>(resourceType: Type<T>): AbstractRepository<T> {\n    if (!Reflect.hasMetadata(this.resourceContextKey, resourceType)) {\n      throw new Error(`${resourceType.name} is not a valid resource.`);\n    }\n\n    const repository: AbstractRepository<T> = this.getRepositoryInstance<T>(resourceType);\n\n    const resourceContextConfiguration: ConfigurationProvider = Reflect.getMetadata(this.resourceContextKey, resourceType);\n    Reflect.defineMetadata(RESOURCE_CONFIGURATION_METADATA_KEY, resourceContextConfiguration, repository);\n\n    // TODO @TNI/@RMA : Do we need defaultConfiguration with responseType like in createRepositoryClass\n    const resourceTypeContextConfiguration: RepositoryContextConfiguration<T> = {\n      resourceType: () => resourceType\n    };\n    Reflect.defineMetadata(REPOSITORY_METADATA_KEY, resourceTypeContextConfiguration, repository);\n\n    return repository;\n  }\n\n  protected abstract getRepositoryInstance<T>(resourceType: Type<T>, repositoryType?: Type<AbstractRepository<T>>): AbstractRepository<T>;\n\n  protected createRepositoryClass<T>(repositoryType: Type<any>, resourceType: Type<T>): Type<any> {\n    const defaultConfiguration: ResourceConfiguration = {\n      responseType: () => resourceType\n    };\n\n    @Repository(() => resourceType, defaultConfiguration)\n    class RepositoryImpl extends repositoryType {\n\n    }\n\n    return RepositoryImpl;\n  }\n}\n","import { ID_METADATA_KEY } from '../decorator/id.decorator';\n\nexport function getIdFromObject(object: any): any {\n  if (object != null) {\n    const idKey: string = Reflect.getMetadata(ID_METADATA_KEY, object);\n    const id: string = object[idKey];\n\n    return id || null;\n  }\n\n  return null;\n}\n","import { getIdFromObject } from '../common/functions';\n\nexport class Id {\n\n  public readonly value: any;\n\n  public constructor(private readonly body: any,\n                     private readonly query: any) {\n    this.value = this.getId();\n  }\n\n  private getId(): any {\n    return getIdFromObject(this.query) || getIdFromObject(this.body) || null;\n  }\n}\n","import { PATH_PARAM_METADATA_KEY } from '../decorator/path-param.decorator';\nimport { PATH_COLUMN_METADATA_KEY } from '../decorator/path-column.decorator';\nimport { PathParamContextConfiguration } from '../configuration/context/path-param-context.configuration';\nimport { Id } from './id';\nimport { getDeepQueryMetadataValues } from '../decorator/sub-query.decorator';\nimport { ISerializer } from '@paddls/ts-serializer';\nimport { get } from '../common/utils/get';\n\nexport class Path {\n\n  public readonly value: string;\n  public readonly pathParams: any;\n  public readonly id: Id;\n\n  public constructor(private readonly body: any,\n                     private readonly query: any,\n                     private readonly template: string,\n                     private readonly serializer: ISerializer) {\n    this.pathParams = this.getPathParams();\n    this.id = new Id(body, query);\n    this.value = this.getPath();\n  }\n\n  private getPathParams(): any {\n    const params: any = {};\n\n    if (this.body) {\n      const bodyPathParams: PathParamContextConfiguration[] = Reflect.getMetadata(PATH_COLUMN_METADATA_KEY, this.body) || [];\n\n      Object.assign(params, this.getParams(this.body, bodyPathParams));\n    }\n\n    if (this.query != null) {\n      const queryPathParams: PathParamContextConfiguration[] = getDeepQueryMetadataValues(PATH_PARAM_METADATA_KEY, this.query);\n\n      Object.assign(params, this.getParams(this.query, queryPathParams));\n    }\n\n    return params;\n  }\n\n  private getParams(data: any, pathParams: PathParamContextConfiguration[]): any {\n    const params: any = {};\n\n    pathParams.forEach((pathParam: PathParamContextConfiguration) => {\n      const property: any = get(data, pathParam.propertyKey);\n\n      if (property == null) {\n        return;\n      }\n\n      if (pathParam.customConverter) {\n        params[`:${pathParam.name}`] = new (pathParam.customConverter())().toJson(property, this.serializer);\n      } else {\n        params[`:${pathParam.name}`] = property;\n      }\n    });\n\n    return params;\n  }\n\n  private getPath(): string {\n    const pathParams: any = this.getPathParams();\n    let path: string = this.template;\n\n    Object.keys(pathParams).forEach((key: string) => path = path.replace(key, pathParams[key]));\n\n    if (this.id.value != null) {\n      path += `/${this.id.value}`;\n    }\n\n    return path;\n  }\n}\n","export class AfterNormalizeEvent {\n\n  public body: any;\n\n  public data: any;\n\n  public constructor(data: Partial<AfterNormalizeEvent> = {}) {\n    Object.assign(this, data);\n  }\n}\n","export class BeforeNormalizeEvent {\n\n  public body: any;\n\n  public constructor(data: Partial<BeforeNormalizeEvent> = {}) {\n    Object.assign(this, data);\n  }\n}\n","import { FindByIdRepository } from '../lib/core/repository/find-by-id.repository';\nimport { FindAllRepository } from '../lib/core/repository/find-all.repository';\nimport { FindOneRepository } from '../lib/core/repository/find-one.repository';\nimport { CreateRepository } from '../lib/core/repository/create.repository';\nimport { UpdateRepository } from '../lib/core/repository/update.repository';\nimport { PatchRepository } from '../lib/core/repository/patch.repository';\nimport { DeleteRepository } from '../lib/core/repository/delete.repository';\nimport { Observable, Subject } from 'rxjs';\nimport { Injectable, Predicate, Type } from '@angular/core';\nimport { AbstractRepository } from '../lib/core/repository/abstract-repository';\n\n\nexport interface AllRepository extends FindByIdRepository,\n  FindAllRepository,\n  FindOneRepository,\n  CreateRepository,\n  UpdateRepository,\n  PatchRepository,\n  DeleteRepository {\n\n}\n\n// @dynamic\n@Injectable()\nexport class MockRepository<T> implements AllRepository {\n\n  private readonly values: { [key: string]: Subject<any> };\n\n  public constructor(public readonly resourceType: Type<any>,\n                     public readonly repositoryType: Type<AbstractRepository<T>>) {\n    this.values = {\n      create: new Subject<any>(),\n      update: new Subject<any>(),\n      patch: new Subject<any>(),\n      delete: new Subject<any>(),\n      findAll: new Subject<any>(),\n      findOne: new Subject<any>(),\n      findById: new Subject<any>()\n    };\n  }\n\n  public static filter<T>(resourceType: Type<T>, repositoryType: Type<AbstractRepository<T>>): Predicate<MockRepository<T>> {\n    return (repository: MockRepository<T>) => repository.resourceType === resourceType && repository.repositoryType === repositoryType;\n  }\n\n  public create<R>(): Observable<R> {\n    return this.values.create;\n  }\n\n  public delete<R>(): Observable<R> {\n    return this.values.delete;\n  }\n\n  public findAll<R>(): Observable<R> {\n    return this.values.findAll;\n  }\n\n  public findById<R>(): Observable<R> {\n    return this.values.findById;\n  }\n\n  public findOne<R>(): Observable<R> {\n    return this.values.findOne;\n  }\n\n  public patch<R>(): Observable<R> {\n    return this.values.patch;\n  }\n\n  public update<R>(): Observable<R> {\n    return this.values.update;\n  }\n\n  public emit(operation: keyof AllRepository, value: any, complete: boolean = false): void {\n    this.values[operation].next(value);\n    if (complete) {\n      this.complete(operation);\n    }\n  }\n\n  public complete(operation: keyof AllRepository): void {\n    this.values[operation].complete();\n  }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { RepositoryBuilder } from '../lib/core/repository/repository.builder';\nimport { AbstractRepository } from '../lib/core/repository/abstract-repository';\nimport { MockRepository } from './mock.repository';\n\n@Injectable()\nexport class TestRepositoryBuilder implements RepositoryBuilder {\n\n  private readonly repositories: MockRepository<any>[] = [];\n\n  public supports(): boolean {\n    return true;\n  }\n\n  public getRepository<T>(resourceType: Type<T>, repositoryType: Type<AbstractRepository<T>>): AbstractRepository<T> {\n    let repository: MockRepository<T> = this.repositories.find(MockRepository.filter<T>(resourceType, repositoryType));\n\n    if (repository == null) {\n      repository = new MockRepository(resourceType, repositoryType);\n      this.repositories.push(repository);\n    }\n\n    return repository as any;\n  }\n}\n\n","import { Injectable, Type } from '@angular/core';\nimport { TestRepositoryBuilder } from './test-repository.builder';\nimport { AbstractRepository } from '../lib/core/repository/abstract-repository';\nimport { RepositoryService } from '../lib/repository-service';\n\n/**\n * @ignore\n */\n@Injectable()\nexport class NgxRepositoryTestingService implements RepositoryService {\n\n  public constructor(private readonly repositoryBuilder: TestRepositoryBuilder) {\n  }\n\n  public getRepository<T>(resourceType: Type<T>, repositoryType: Type<AbstractRepository<T>>): AbstractRepository<T> {\n    return this.repositoryBuilder.getRepository(resourceType, repositoryType);\n  }\n}\n","import 'reflect-metadata';\n\nimport { ModuleWithProviders, NgModule, Provider, Type } from '@angular/core';\nimport { NgxRepositoryService } from '../lib/ngx-repository.service';\nimport { TestRepositoryBuilder } from './test-repository.builder';\nimport { AbstractRepository } from '../lib/core/repository/abstract-repository';\nimport { MockRepository } from './mock.repository';\nimport { NgxRepositoryTestingService } from './ngx-repository-testing.service';\n\n/**\n * @ignore\n */\nconst MODULE_PROVIDERS: Provider[] = [];\n\n/**\n * @ignore\n */\n// @dynamic\n@NgModule({\n  providers: MODULE_PROVIDERS\n})\nexport class NgxRepositoryTestingModule {\n\n  private static testRepositoryBuilder: TestRepositoryBuilder;\n\n  public static forTest(): ModuleWithProviders<NgxRepositoryTestingModule> {\n    this.testRepositoryBuilder = new TestRepositoryBuilder();\n    const repositoryService: NgxRepositoryService = new NgxRepositoryTestingService(this.testRepositoryBuilder) as any;\n    NgxRepositoryService.getInstance = () => repositoryService;\n\n    return {\n      ngModule: NgxRepositoryTestingModule,\n      providers: []\n    };\n  }\n\n  public static getRepository<T>(resourceType: Type<T>, repositoryType: Type<AbstractRepository<T>>): MockRepository<T> {\n    return NgxRepositoryTestingModule.testRepositoryBuilder.getRepository(resourceType, repositoryType) as any;\n  }\n}\n","export const flatten = (array: any[]) => array.reduce((acc: any, val: any) => acc.concat(val), []);\n","import { EMPTY, Observable, of, OperatorFunction } from 'rxjs';\nimport { expand, first, map, switchMap, toArray } from 'rxjs/operators';\nimport { Page } from '../core/model/page';\nimport { flatten } from '../core/common/utils/flatten';\n\nexport function fetchAllPage<T>(fetch: (page: number) => Observable<Page>): OperatorFunction<Page<T>, T[]> {\n  return (source: Observable<Page<T>>): Observable<T[]> => {\n    return source.pipe(\n      switchMap((firstPage: Page<T>) => of(firstPage).pipe(\n        expand((page: Page<T>) => {\n          if (page.totalItems > page.itemsPerPage * (page.currentPage + 1) && page.itemsPerPage > 0) {\n            return fetch(page.currentPage + 1).pipe(\n              first()\n            );\n          }\n\n          return EMPTY;\n        }),\n        toArray(),\n        map((arr: Page[]) => flatten(arr)),\n      ))\n    );\n  };\n}\n","import { NgxRepositoryService } from '../../ngx-repository.service';\nimport { inject } from '@angular/core';\nimport { InjectRepositoryContext } from '../configuration/context/inject-repository-context.configuration';\n\nexport function injectRepository<T>(params: InjectRepositoryContext<T>): any {\n  return inject(NgxRepositoryService).getRepository(params.resourceType(), params.repository());\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Id","i1.TestRepositoryBuilder"],"mappings":";;;;;;;;;;;;;AAAM,MAAO,IAAc,SAAQ,KAAQ,CAAA;AAQzC,IAAA,WAAA,CAAmB,IAAU,EAAA;AAC3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,KAAK,CAAC,GAAG,IAAI,CAAC;;aACT;YACL,KAAK,CAAC,IAAI,CAAC;;QAGb,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;;AAGtC,IAAA,OAAO,KAAK,CAAI,KAAA,GAAa,EAAE,EAAE,WAAsB,GAAA,IAAI,EAAE,YAAA,GAAuB,IAAI,EAAE,aAAqB,IAAI,EAAA;AACxH,QAAA,MAAM,IAAI,GAAY,IAAI,IAAI,CAAI,KAAK,CAAC;AAExC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,GAAG,WAAW,GAAG,CAAC;AACxD,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,IAAI,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM;AACtE,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM;AAEhE,QAAA,OAAO,IAAI;;IAGN,GAAG,CAAI,UAAsD,EAAE,OAAa,EAAA;AACjF,QAAA,MAAM,OAAO,GAAY,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,UAAU,EAAE,OAAO,CAAC,CAAC;AAEpE,QAAA,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACtC,QAAA,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AACxC,QAAA,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AAEpC,QAAA,OAAO,OAAO;;AAEjB;;ACjCD;;AAEG;AACI,MAAM,oBAAoB,GAAW;AAE5C;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACG,SAAU,MAAM,CAAmB,aAA8F,EAAA;AACrI,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAI;QAC1C,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC;AAClD,KAAC;AACH;;AClCA;;AAEG;AACI,MAAM,eAAe,GAAW,IAAI;AAErC,SAAUA,IAAE,CAAC,SAA8B,EAAA;AAC/C,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAI;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC;QACtC,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC;AAC9D,KAAC;AACH;;ACVA;;AAEG;MACU,wBAAwB,GAAsC,IAAI,cAAc,CAAoB,oBAAoB;;ACHrI;;AAEG;MACU,aAAa,CAAA;AAED,IAAA,SAAA,IAAA,CAAA,aAAa,GAA4E,IAAI,GAAG,EAAE,CAAC;AAEnH,IAAA,OAAO,kBAAkB,CAAI,YAAqB,EAAE,UAAuC,EAAA;QAChG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAChD,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAA4B,CAAC;;QAGlF,MAAM,KAAK,GAAsB,IAAI,cAAc,CAAI,YAAY,CAAC,IAAI,CAAC;AACzE,QAAA,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;AAEpE,QAAA,OAAO,KAAK;;AAGP,IAAA,OAAO,SAAS,CAAI,YAAqB,EAAE,UAAuC,EAAA;QACvF,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAChD,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;;AAG/D,IAAA,OAAO,KAAK,GAAA;AACjB,QAAA,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE;;;;AC9BhC,MAAM,GAAG,GAAG,CAAC,GAAY,EAAE,IAAY,EAAE,QAAc,KAAI;AAChE,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,SAAS;IAC3B,MAAM,SAAS,GAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAC7E,MAAM,MAAM,GAAQ,SAAS,CAAC,MAAM,CAClC,CAAC,OAAY,EAAE,GAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,EACnD,GAAU,CACX;IAED,OAAO,MAAM,KAAK,SAAS,GAAG,QAAQ,GAAG,MAAM;AACjD,CAAC;;MCKY,cAAc,CAAA;AAD3B,IAAA,WAAA,GAAA;AAGqB,QAAA,IAAA,CAAA,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC;AAoBzD;AAlBQ,IAAA,OAAO,CAAC,OAA8B,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAqB,OAAO,CAAC,MAAM;AAC/C,QAAA,MAAM,aAAa,GAAiC,OAAO,CAAC,aAAa;QACzE,MAAM,mBAAmB,GAAiC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AAC1G,QAAA,MAAM,cAAc,GAAmB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAClH,QAAA,MAAM,eAAe,GAAoB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;AAEtG,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,OAA0B,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAClE,SAAS,CAAC,CAAC,QAA4B,KAAK,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CACtF;;AAGO,IAAA,sBAAsB,CAAC,aAA2C,EAAA;QAC1E,MAAM,oBAAoB,GAAkC,aAAa,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;QAE7G,OAAO,GAAG,CAAC,oBAAoB,EAAE,SAAS,EAAE,oBAAoB,CAAC;;8GApBxD,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAd,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;MCRY,oBAAoB,CAAA;AAM/B,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,aAAa,GAA4B,MAAM,CAA0B,8BAA8B,CAAC;QAE9G,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC;;AAG9C,IAAA,WAAW,CAAC,IAAe,EAAE,IAAS,EAAE,aAAuC,EAAA;AACpF,QAAA,MAAM,YAAY,GAAiB,aAAa,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,YAAY;AAEtG,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;aAC/D;YACL,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;;;IAIxC,SAAS,CAAC,IAAS,EAAE,aAAuC,EAAA;AACjE,QAAA,MAAM,UAAU,GAAe,aAAa,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,UAAU;AAE9F,QAAA,OAAO,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;;IAG5B,aAAa,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;;8GA9Bb,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACQD;MAEa,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAOmB,QAAA,IAAA,CAAA,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC;AAqBvD;AAzBgB,IAAA,SAAA,IAAA,CAAA,UAAU,GAAiB,IAAI,OAAO,EAAO,CAAC;aAE9C,IAAa,CAAA,aAAA,GAAmB,EAAnB,CAAsB;AAIpC,IAAA,SAAA,IAAA,CAAA,WAAW,GAA2B,MAAM,mBAAmB,CAAC,QAAQ,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAEvG,IAAA,OAAO,qBAAqB,CAAC,SAA4C,EAAE,QAA6B,EAAA;QAC7G,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;;AAGvD,IAAA,OAAO,YAAY,GAAA;AACxB,QAAA,OAAO,gBAAgB,CAAC,UAAU,CAAC,YAAY,EAAE;;AAG5C,IAAA,OAAO,CAAI,KAAQ,EAAA;AACxB,QAAA,gBAAgB,CAAC;AACd,aAAA,MAAM,CAAC,CAAC,IAAkB,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAe,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACzI,aAAA,GAAG,CAAC,CAAC,IAAkB,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAqB,EAAE,IAAI,CAAC;aAC/E,MAAM,CAAC,CAAC,OAAsB,KAAK,CAAC,CAAC,OAAO;AAC5C,aAAA,OAAO,CAAC,CAAC,OAAsB,KAAK,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,QAAA,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;8GAzB9B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCVY,sBAAsB,CAAA;AAQjC,IAAA,WAAA,CAAmB,OAAwC,EAAE,EAAA;AAC3D,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;;AAE5B;;MCXY,qBAAqB,CAAA;AAUhC,IAAA,WAAA,CAAmB,OAAuC,EAAE,EAAA;AAC1D,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;;AAE5B;;MCLY,4BAA4B,CAAA;AADzC,IAAA,WAAA,GAAA;AAGmB,QAAA,IAAA,CAAA,UAAU,GAAyB,MAAM,CAAC,oBAAoB,CAAC;AAqBjF;AAnBQ,IAAA,SAAS,CAAC,QAAa,EAAE,MAA0B,EAAE,EAAE,aAAa,EAAyB,EAAA;QAClG,MAAM,YAAY,GAAc,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE;QAChF,MAAM,uBAAuB,GAA4B,aAAa,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;QAEnH,gBAAgB,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,IAAI,sBAAsB,CAAC;AACjE,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,QAAQ,EAAE,uBAAuB,CAAC;QAC9F,gBAAgB,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,IAAI,qBAAqB,CAAC;AAChE,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,uBAAuB;YACtC;AACD,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI;;8GArBF,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5B,4BAA4B,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;;MCLY,qBAAqB,CAAA;IAEzB,SAAS,CAAC,QAAa,EAAE,MAA0B,EAAA;AACxD,QAAA,OAAO,MAAM,CAAC,OAAO,EAAE;;8GAHd,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACCD;;AAEG;AACI,MAAM,wBAAwB,GAAW,aAAa;AAEvD,SAAU,UAAU,CAAC,MAAmC,EAAA;AAC5D,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAI;AAC1C,QAAA,IAAI,8BAA8B,GAAmC;YACnE,WAAW;AACX,YAAA,IAAI,EAAE;SACP;AAED,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,8BAA8B,GAAG;AAC/B,gBAAA,GAAG,8BAA8B;AACjC,gBAAA,GAAG;aACJ;;AACI,aAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACrC,YAAA,8BAA8B,CAAC,IAAI,GAAG,MAAM;;QAG9C,IAAI,KAAK,GAAqC,EAAE;QAChD,IAAI,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE,MAAM,CAAC,EAAE;YACzD,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE,MAAM,CAAC;;AAE/D,QAAA,OAAO,CAAC,cAAc,CAAC,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC;AACxG,KAAC;AACH;;AChCO,MAAM,QAAQ,GAAG,CAAC,CAAM,KAAkB,CAAC,YAAY,MAAM;;ACA7D,MAAM,WAAW,GAAG,CAAC,GAAQ,KAAuB,GAAG,KAAK,SAAS;;MCW/D,2BAA2B,CAAA;IAE/B,SAAS,CAAC,QAAa,EAAE,MAA0B,EAAA;AACxD,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACtB,YAAA,MAAM,WAAW,GAAqC,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE,QAAQ,GAAG,CAAC,CAAQ,IAAI,QAAQ,CAAC;AACrI,YAAA,MAAM,WAAW,GAAgB,MAAM,CAAC,UAAU,EAAiB;AACnE,YAAA,MAAM,IAAI,GAAS,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI;YAErE,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC1C,gBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;iBACvE,IAAI,WAAW,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;;AAGjD,YAAA,OAAO,QAAQ;;AAGjB,QAAA,OAAO,QAAQ;;AAGP,IAAA,aAAa,CAAC,WAA6C,EAAE,IAAS,EAAE,IAAU,EAAA;QAC1F;aACG,MAAM,CAAC,CAAC,EAAkC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC;AAC3F,aAAA,OAAO,CAAC,CAAC,EAAkC,KAAI;AAC9C,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,CAAA,CAAE,CAAC;AACvD,SAAC,CAAC;;8GAzBK,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACJD;;AAEG;AACI,MAAM,2BAA2B,GAAW,eAAe;MAGrD,8BAA8B,CAAA;AAElC,IAAA,SAAS,CAAC,QAAa,EAAE,MAA0B,EAAE,EAAE,KAAK,EAAyB,EAAA;QAC1F,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAS,KAAK,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;AAC5F,iBAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC7B,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,KAAK,EAAE,QAAQ,CAAC;;;AAIxE,QAAA,OAAO,QAAQ;;8GAXN,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA9B,8BAA8B,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C;;;ACXM,MAAM,UAAU,GAAG,CAAC,GAAQ,KAAsB,OAAO,GAAG,KAAK,UAAU;;MCmBrE,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAGqB,QAAA,IAAA,CAAA,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC;AAyDzD;AAvDQ,IAAA,OAAO,UAAU,CAAC,MAAA,GAA+B,EAAE,EAAA;AACxD,QAAA,MAAM,kBAAkB,GAA6B;AACnD,YAAA,IAAI,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,sBAAsB,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC7D,4BAA4B;YAC5B,2BAA2B;YAC3B,8BAA8B;AAC9B,YAAA,IAAI,MAAM,CAAC,sBAAsB,IAAI,EAAE;SACxC;QAED,OAAO;AACL,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,MAAM,EAAE;gBACN;AACD;SACF;;IAGI,KAAK,CAAC,QAA4B,EAAE,OAA8B,EAAA;QACvE,MAAM,kBAAkB,GAAwB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC;QAEzF,IAAI,mBAAmB,GAAQ,IAAI;AAEnC,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAA8B,KAAI;YAC5D,mBAAmB,GAAG,WAAW,CAAC,SAAS,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC;AACrF,SAAC,CAAC;AAEF,QAAA,OAAO,EAAE,CAAC,mBAAmB,CAAC;;AAGtB,IAAA,aAAa,CAAC,aAA2C,EAAA;AACjE,QAAA,MAAM,uBAAuB,GAA6B;AACxD,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;SAChC;AAED,QAAA,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAA6B,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAGvF,IAAA,YAAY,CAAC,sBAA8C,EAAA;AACnE,QAAA,IAAI,UAAU,CAAC,sBAAsB,CAAC,EAAE;YACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,sBAAiD,CAAC;;aACtE;YACL,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAE,sBAAsD,CAAC,IAAI,CAAC;;;AAIhF,IAAA,SAAS,CAAC,aAA2C,EAAA;QAC7D,MAAM,YAAY,GAAkC,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;AAEtG,QAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC1B,OAAO,GAAG,CAAC,YAAY,EAAE,2BAA2B,EAAE,IAAI,CAAC;;aACtD;AACL,YAAA,OAAO,IAAI;;;8GAxDJ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCVY,qBAAqB,CAAA;AAEzB,IAAA,OAAO,UAAU,CAAC,qBAAA,GAAiD,qBAAqB,EAAA;QAC7F,OAAO,eAAe,CAAC,UAAU,CAAC;AAChC,YAAA,sBAAsB,EAAE;gBACtB,qBAAqB;gBACrB;AACD;AACF,SAAA,CAAC;;AAGG,IAAA,SAAS,CAAC,QAAa,EAAA;AAC5B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ;;8GAZvD,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;MCAY,mBAAmB,CAAA;AAEvB,IAAA,SAAS,CAAC,QAAa,EAAE,MAA0B,EAAE,EAAE,aAAa,EAAyB,EAAA;QAClG,MAAM,YAAY,GAAc,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE;AAChF,QAAA,MAAM,OAAO,GAAW,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC;AAEpF,QAAA,IAAI,OAAO,IAAI,QAAQ,EAAE;AACvB,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC;;AAG1B,QAAA,OAAO,IAAI;;8GAVF,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCFY,qBAAqB,CAAA;IAEzB,SAAS,GAAA;QACd,OAAO,KAAK,CAAC;;8GAHJ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACgCK,SAAU,oBAAoB,CAAC,MAAe,EAAA;AAClD,IAAA,OAAO,wBAAwB,CAAC;QAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC,QAAkB,KAAK,MAAW;YAC9D,aAAa,CAAC,KAAK,EAAE;AACrB,YAAA,mBAAmB,CAAC,QAAQ,GAAG,QAAQ;SACxC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACvB,mBAAmB,CACjB,mBAAmB,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,uBAAuB,GAAG,MAAM,GAAG,EAAC,uBAAuB,EAAE,gCAAgC,EAAC,CAAC,CAC7I;AACD,QAAA;AACE,YAAA,OAAO,EAAE,8BAA8B;AACvC,YAAA,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,GAAG;AACvF,SAAA;QACD,oBAAoB;QACpB,oBAAoB;QACpB,cAAc;QACd,eAAe;QACf,4BAA4B;QAC5B,qBAAqB;QACrB,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,8BAA8B;QAC9B,2BAA2B;QAC3B;AACD,KAAA,CAAC;AACJ;AAEA;;AAEG;MAEU,mBAAmB,CAAA;aAEhB,IAAQ,CAAA,QAAA,GAAa,IAAb,CAAkB;AAExC;;AAEG;IACI,OAAO,OAAO,CAAC,MAAe,EAAA;QACnC,OAAO;AACL,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,SAAS,EAAE;gBACT,oBAAoB,CAAC,MAAM;AAC5B;SACF;;8GAbQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAnB,mBAAmB,EAAA,CAAA,CAAA;+GAAnB,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCzDY,oBAAoB,CAAA;AAIjB,IAAA,SAAA,IAAA,CAAA,WAAW,GAA4B,MAAM,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAIlH,IAAA,WAAA,CAAmB,cAAwB,EAAA;AAN1B,QAAA,IAAA,CAAA,kBAAkB,GAAwB,MAAM,CAAsB,wBAAwB,CAAC;AAO9G,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC9B,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,MAAM,EAAE;AACT,SAAA,CAAC;;IAGG,aAAa,CAAI,YAAqB,EAAE,cAA2C,EAAA;QACxF,IAAI,eAAe,GAA0B,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC;QAC1F,IAAI,eAAe,EAAE;AACnB,YAAA,OAAO,eAAe;;QAGxB,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,cAAc,CAAC;QAC3E,IAAI,eAAe,EAAE;AACnB,YAAA,OAAO,eAAe;;QAGxB,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,cAAc,CAAC;;AAGvD,IAAA,wBAAwB,CAAI,cAA4C,EAAA;QAC9E,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;;QAGb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;;IAGxC,sBAAsB,CAAI,YAAqB,EAAE,cAA4C,EAAA;QACnG,MAAM,KAAK,GAAwB,aAAa,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC;QAExF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,YAAY,GAAoD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC;QAEpG,IAAI,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YAC/C,IAAI,CAAC,cAAc,EAAE;gBACnB,MAAM,IAAI,KAAK,CACb,CAAA,6IAAA,EAAgJ,YAAY,CAAC,IAAI,CAAY,UAAA,CAAA,CAC9K;;AAGH,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,GAA0B,KAAK,GAAG,YAAY,cAAc,CAAC;;aAClF;AACL,YAAA,OAAO,YAAqC;;;IAIxC,mBAAmB,CAAI,YAAqB,EAAE,cAA4C,EAAA;QAChG,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;;AAGvD,QAAA,IAAI,UAAiC;QACrC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC;;aAC9E,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,IAAI,CAAC,cAAc,EAAE;gBACnB,MAAM,IAAI,KAAK,CACb,CAAA,8IAAA,EAAiJ,YAAY,CAAC,IAAI,CAAY,UAAA,CAAA,CAC/K;;YAEH,MAAM,UAAU,GAAsB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAoB,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACtI,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,IAAI,KAAK,CAAC,CAAA,yCAAA,EAA4C,cAAc,CAAC,IAAI,CAAkB,gBAAA,CAAA,CAAC;;YAGpG,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC;;QAGrE,MAAM,KAAK,GAA0C,aAAa,CAAC,kBAAkB,CAAC,YAAY,EAAE,cAAc,CAAC;AAEnH,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC9B,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE;AACX;AACF,aAAA;YACD,MAAM,EAAE,IAAI,CAAC;AACd,SAAA,CAAC;AAEF,QAAA,OAAO,UAAU;;8GA7FR,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACDD;;AAEG;AACI,MAAM,8BAA8B,GAAW,oBAAoB;AAE1E;;AAEG;AACI,MAAM,uCAAuC,GAAW,2BAA2B;AAE1F;;AAEG;AACG,SAAU,gBAAgB,CAAI,MAAkC,EAAA;AACpE,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAI;AAC1C,QAAA,MAAM,oCAAoC,GAAyC;YACjF,WAAW;AACX,YAAA,GAAG;SACJ;QAED,IAAI,KAAK,GAA2C,EAAE;QACtD,IAAI,OAAO,CAAC,WAAW,CAAC,8BAA8B,EAAE,MAAM,CAAC,EAAE;YAC/D,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,8BAA8B,EAAE,MAAM,CAAC;;AAErE,QAAA,OAAO,CAAC,cAAc,CAAC,8BAA8B,EAAE,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,EAAE,MAAM,CAAC;QAElH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;YAC/D,GAAG,GAAA;AACD,gBAAA,IAAI,OAAO,CAAC,cAAc,CAAC,CAAG,EAAA,uCAAuC,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,EAAE,IAAI,CAAC,EAAE;AAC7F,oBAAA,OAAO,OAAO,CAAC,cAAc,CAAC,CAAG,EAAA,uCAAuC,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,EAAE,IAAI,CAAC;;AAGlG,gBAAA,MAAM,UAAU,GAA0B,oBAAoB,CAAC,WAAW,EAAE,CAAC,aAAa,CACxF,oCAAoC,CAAC,YAAY,EAAE,EACnD,oCAAoC,CAAC,UAAU,GAAG,oCAAoC,CAAC,UAAU,EAAE,GAAG,IAAI,CAC3G;AAED,gBAAA,OAAO,CAAC,cAAc,CAAC,CAAA,EAAG,uCAAuC,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,EAAE,UAAU,EAAE,IAAI,CAAC;AAErG,gBAAA,OAAO,UAAU;aAClB;AACD,YAAA,GAAG,EAAE,MAAM,KAAK,CAAC;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AACJ,KAAC;AACH;;AC5CA;;AAEG;AACI,MAAM,uBAAuB,GAAW,WAAW;AAEpD,SAAU,SAAS,CAAC,gBAA4C,EAAA;AACpE,IAAA,OAAO,CAAC,MAAc,EAAE,WAAmB,KAAI;AAC7C,QAAA,IAAI,6BAA6B,GAAkC;YACjE,WAAW;AACX,YAAA,OAAO,EAAE;SACV;AAED,QAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;AACtB,YAAA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AAC9B,gBAAA,6BAA6B,GAAG;AAC9B,oBAAA,GAAG,6BAA6B;AAChC,oBAAA,GAAI;iBACL;;iBACI;AACL,gBAAA,6BAA6B,CAAC,OAAO,GAAG,gBAA0B;;;QAItE,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,EAAE,WAAW,CAAC;AACrG,KAAC;AACH;SAEgB,YAAY,CAAI,IAAmB,EAAE,MAAW,EAAE,WAAmB,EAAA;IACnF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,6BAA6B,GAAkC,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,EAAE,WAAW,CAAC;AAEtI,IAAA,IAAI,6BAA6B,CAAC,OAAO,IAAI,IAAI,EAAE;AACjD,QAAA,IAAI,CAAC,IAAI,CACP,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CACxD;;AAGH,IAAA,OAAO,IAAI,CAAC,IAAI,CACd,SAAS,EAAE,CACZ;AACH;AAEgB,SAAA,YAAY,CAAC,MAAW,EAAE,WAAmB,EAAA;IAC3D,OAAO,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,EAAE,WAAW,CAAC;AAC1E;;AC/CA;;AAEG;AACI,MAAM,uBAAuB,GAAW,WAAW;AAEpD,SAAU,SAAS,CAAC,gBAA4C,EAAA;AACpE,IAAA,OAAO,CAAC,MAAc,EAAE,WAAmB,KAAI;AAC7C,QAAA,IAAI,6BAA6B,GAAkC;YACjE,WAAW;AACX,YAAA,OAAO,EAAE;SACV;AAED,QAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;AACtB,YAAA,IAAI,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AAC9B,gBAAA,6BAA6B,GAAG;AAC9B,oBAAA,GAAG,6BAA6B;AAChC,oBAAA,GAAI;iBACL;;iBACI;AACL,gBAAA,6BAA6B,CAAC,OAAO,GAAG,gBAA0B;;;QAItE,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,EAAE,WAAW,CAAC;AACrG,KAAC;AACH;SAEgB,YAAY,CAAI,IAAmB,EAAE,MAAW,EAAE,WAAmB,EAAA;IACnF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,6BAA6B,GAAkC,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,EAAE,WAAW,CAAC;AAEtI,IAAA,IAAI,6BAA6B,CAAC,OAAO,IAAI,IAAI,EAAE;AACjD,QAAA,IAAI,CAAC,IAAI,CACP,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CACxD;;AAGH,IAAA,OAAO,IAAI,CAAC,IAAI,CACd,SAAS,EAAE,CACZ;AACH;AAEgB,SAAA,YAAY,CAAC,MAAW,EAAE,WAAmB,EAAA;IAC3D,OAAO,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,EAAE,WAAW,CAAC;AAC1E;;AC7CA;;AAEG;AACI,MAAM,wBAAwB,GAAW,aAAa;AAE7D;;AAEG;AACI,MAAM,4BAA4B,GAAW,eAAe;AAE7D,SAAU,UAAU,CAAI,iBAAuC,EAAA;AACnE,IAAA,OAAO,CAAC,MAAc,EAAE,WAAmB,KAAI;QAC7C,MAAM,8BAA8B,GAAmC,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE;QAC5G,OAAO,CAAC,cAAc,CAAC,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,EAAE,WAAW,CAAC;QAErG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;YAC/D,GAAG,GAAA;gBACD,IAAI,OAAO,CAAC,cAAc,CAAC,4BAA4B,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;oBAC3E,OAAO,OAAO,CAAC,cAAc,CAAC,4BAA4B,EAAE,IAAI,EAAE,WAAW,CAAC;;gBAGhF,MAAM,IAAI,GAAoB,wBAAwB,CAAI,IAAI,EAAE,WAAW,EAAE,iBAAiB;AACzF,uBAAA,wBAAwB,CAAI,IAAI,EAAE,WAAW,EAAE,iBAAiB;AAChE,uBAAA,cAAc,CAAI,IAAI,EAAE,iBAAiB,CAAC;gBAE/C,OAAO,CAAC,cAAc,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;AAE7E,gBAAA,OAAO,IAAI;aACZ;AACD,YAAA,GAAG,EAAE,MAAM,KAAK,CAAC;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AACJ,KAAC;AACH;AAEA,SAAS,wBAAwB,CAAI,MAAW,EAAE,WAAmB,EAAE,iBAAuC,EAAA;IAC5G,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;AACrF;AAEA,SAAS,wBAAwB,CAAI,MAAW,EAAE,WAAmB,EAAE,iBAAuC,EAAA;IAC5G,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;AACrF;AAEA,SAAS,cAAc,CAAI,MAAW,EAAE,iBAAuC,EAAA;AAC7E,IAAA,MAAM,UAAU,GAAuB,oBAAoB,CAAC,WAAW;SACpE,aAAa,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,iBAAiB,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,EAAE,GAAG,IAAI,CAAQ;AAE/H,IAAA,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC5E;;AC/DA;;AAEG;AACI,MAAM,uBAAuB,GAAW,YAAY;AAErD,SAAU,SAAS,CAAC,MAAkC,EAAA;AAC1D,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAI;AAC1C,QAAA,IAAI,yBAAyB,GAAkC;YAC7D,WAAW;AACX,YAAA,IAAI,EAAE;SACP;AAED,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,yBAAyB,GAAG;AAC1B,gBAAA,GAAG,yBAAyB;AAC5B,gBAAA,GAAG;aACJ;;AACI,aAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACrC,YAAA,yBAAyB,CAAC,IAAI,GAAG,MAAM;;QAGzC,IAAI,KAAK,GAAoC,EAAE;QAC/C,IAAI,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE;YACxD,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC;;AAE9D,QAAA,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;AAClG,KAAC;AACH;;AC5BA;;AAEG;AACI,MAAM,uBAAuB,GAAW,YAAY;AAE3D;;AAEG;AACI,MAAM,mCAAmC,GAAW,uBAAuB;AAElF;SACgB,UAAU,CAA4C,YAA2B,EAAE,gBAAoB,IAAI,EAAA;IACzH,OAAO,CAAC,MAAW,KAAU;AAC3B,QAAA,MAAM,8BAA8B,GAAsC,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACrJ,QAAA,MAAM,oBAAoB,GAA0B,8BAA8B,GAAG,8BAA8B,CAAC,oBAAoB,GAAG,IAAI;AAC/I,QAAA,MAAM,MAAM,GAAsC;YAChD,YAAY;YACZ,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,oBAAoB,EAAE,aAAa;SAC5E;QAED,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,MAAM,EAAE,MAAM,CAAC;AACjE,KAAC;AACH;AAEM,SAAU,iCAAiC,CAAI,MAAW,EAAA;IAC9D,OAAO,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC;AAC7D;;AC3BA;;AAEG;AACI,MAAM,mCAAmC,GAAW;AAErD,SAAU,oBAAoB,CAAC,2BAAoD,EAAA;IACvF,OAAO,CAAC,MAAW,KAAI;AACrB,QAAA,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC;AACvD,KAAC;AACH;;ACDA;;AAEG;AACI,MAAM,2BAA2B,GAAW,gBAAgB;AAEnE;;AAEG;AACI,MAAM,+BAA+B,GAAW,kBAAkB;AAEnE,SAAU,aAAa,CAAI,oBAA6C,EAAA;AAC5E,IAAA,OAAO,CAAC,MAAc,EAAE,WAAmB,KAAI;QAC7C,MAAM,iCAAiC,GAAsC,EAAE,WAAW,EAAE,GAAG,oBAAoB,EAAE;QACrH,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,iCAAiC,EAAE,MAAM,EAAE,WAAW,CAAC;QAE3G,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;YAC/D,GAAG,GAAA;gBACD,IAAI,OAAO,CAAC,cAAc,CAAC,+BAA+B,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;oBAC9E,OAAO,OAAO,CAAC,cAAc,CAAC,+BAA+B,EAAE,IAAI,EAAE,WAAW,CAAC;;gBAGnF,MAAM,IAAI,GAAoB,2BAA2B,CAAI,IAAI,EAAE,WAAW,EAAE,oBAAoB;AAC/F,uBAAA,2BAA2B,CAAI,IAAI,EAAE,WAAW,EAAE,oBAAoB;AACtE,uBAAA,iBAAiB,CAAI,IAAI,EAAE,oBAAoB,CAAC;gBAErD,OAAO,CAAC,cAAc,CAAC,+BAA+B,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC;AAEhF,gBAAA,OAAO,IAAI;aACZ;AACD,YAAA,GAAG,EAAE,MAAM,KAAK,CAAC;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AACJ,KAAC;AACH;AAEA,SAAS,2BAA2B,CAAI,MAAW,EAAE,WAAmB,EAAE,oBAA6C,EAAA;IACrH,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;AAC3F;AAEA,SAAS,2BAA2B,CAAI,MAAW,EAAE,WAAmB,EAAE,oBAA6C,EAAA;IACrH,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,YAAY,CAAC,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC;AAC3F;AAEA,SAAS,iBAAiB,CAAI,MAAW,EAAE,oBAA6C,EAAA;AACtF,IAAA,MAAM,UAAU,GAAsB,oBAAoB,CAAC,WAAW;SACnE,aAAa,CAAC,oBAAoB,CAAC,YAAY,EAAE,EAAE,oBAAoB,CAAC,UAAU,GAAG,oBAAoB,CAAC,UAAU,EAAE,GAAG,IAAI,CAAQ;AAExI,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;AAClK;;ACpEO,MAAM,QAAQ,GAAG,CAAC,CAAM,KAAkB,OAAO,CAAC,KAAK,QAAQ;;ACA/D,MAAM,WAAW,GAAG,CAAC,GAAU,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG;MACxD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC7D,MAAE,CAAC,GAAG,CAAC;;ACET;;AAEG;AACI,MAAM,sBAAsB,GAAW,WAAW;SAEzC,QAAQ,GAAA;AACtB,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAI;QAC1C,OAAO,CAAC,cAAc,CAAC,sBAAsB,EAAE,WAAW,EAAE,MAAM,CAAC;AACrE,KAAC;AACH;AAEM,SAAU,0BAA0B,CAAqC,WAAmB,EAAE,KAAU,EAAE,SAAiB,EAAE,EAAA;IACjI,IAAI,KAAK,EAAE;AACT,QAAA,IAAI,UAAU,GAAQ,OAAO,CAAC,WAAW,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,EAAE;AAE9E,QAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;AACxB,YAAA,UAAU,GAAG,CAAC,UAAU,CAAC;;AAG3B,QAAA,MAAM,aAAa,GAAQ,UAAU,CAAC,GAAG,CAAC,CAAC,QAAgB,KAAK,0BAA0B,CAAI,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,GAAG,QAAQ,CAAC,CAAC;AAEzK,QAAA,IAAI,QAAQ,GAAY,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE;QAErE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC5B,YAAA,QAAQ,GAAG,CAAC,QAAQ,CAAC;;QAGvB,MAAM,gBAAgB,GAAQ;AAC3B,aAAA,GAAG,CAAC,CAAC,QAAkC,MAAM;AAC5C,YAAA,GAAG,QAAQ;AACX,YAAA,WAAW,EAAE,MAAM,GAAG,GAAG,MAAM,CAAA,CAAA,EAAI,QAAQ,CAAC,WAAW,CAAE,CAAA,GAAG,QAAQ,CAAC;AACtE,SAAA,CAAC,CAAQ;AAEZ,QAAA,OAAO,WAAW,CAAC;YACjB,aAAa;YACb;AACD,SAAA,CAAC;;AAGJ,IAAA,OAAO,EAAE;AACX;AAEgB,SAAA,yBAAyB,CAAC,WAAmB,EAAE,KAAU,EAAA;IACvE,OAAO,0BAA0B,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5D;;MC7Ca,OAAO,CAAA;IAQlB,WAAmB,CAAA,EAAO,EAAE,MAAY,EAAA;AACtC,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAEvB;AATQ,UAAA,CAAA;AADN,IAAAA,IAAE;AACY,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAGC,UAAA,CAAA;AADf,IAAA,QAAQ;AACoB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;;MCNlB,qBAAqB,CAAA;AAEhC,IAAA,WAAA,CAAoC,MAA6B,EAAA;QAA7B,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGnC,gBAAgB,CAAC,QAAgB,EAAE,KAAe,EAAA;QACvD,MAAM,aAAa,GAAQ,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC;AAElE,QAAA,IAAI,aAAa,IAAI,IAAI,EAAE;AACzB,YAAA,OAAO,aAAa;;AAGtB,QAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAG,CAAA,CAAA,EAAE,IAAI,CAAC,MAAM,CAAC;AAEnG,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,QAAQ,CAAM,GAAA,EAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG,CAAC;;IAGnF,iBAAiB,CAAC,QAAgB,EAAE,KAAe,EAAA;AACxD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,KAAK,GAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC;AAC1D,YAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,gBAAA,OAAO,KAAK;;;QAIhB,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;YACtC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;;AAGnC,QAAA,OAAO,IAAI;;AAEd;;MC/BY,4BAA4B,CAAA;IAEvC,WAAoC,CAAA,qBAA4C,EAC5C,KAAA,GAAkB,EAAE,EAAA;QADpB,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;QACrB,IAAK,CAAA,KAAA,GAAL,KAAK;;IAGlC,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;;AAGjB,IAAA,gBAAgB,CAA0D,QAAiB,EAAA;AAChG,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,QAAkB,EAAE,IAAI,CAAC,KAAK,CAAC;;AAG7E,IAAA,iBAAiB,CAA0D,QAAiB,EAAA;AACjG,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,QAAkB,EAAE,IAAI,CAAC,KAAK,CAAC;;AAEtF;;ACdD,MAAM,+BAA+B,GAAW,0CAA0C;AAEpF,SAAU,aAAa,CAAI,SAA2C,EAAA;AAC1E,IAAA,OAAO,CAAC,MAAW,EAAE,WAAoB,KAAI;QAC3C,IAAI,cAAc,GAAkC,SAAS;QAE7D,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,cAAc,GAAG,MAAM,IAAI;;QAG7B,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,gBAAgB,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC;YAE9D;;QAGF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE;YAC/D,GAAG,GAAA;AACD,gBAAA,IAAI,OAAO,CAAC,cAAc,CAAC,CAAG,EAAA,+BAA+B,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,EAAE,IAAI,CAAC,EAAE;AACrF,oBAAA,OAAO,OAAO,CAAC,cAAc,CAAC,CAAG,EAAA,+BAA+B,CAAI,CAAA,EAAA,WAAW,CAAE,CAAA,EAAE,IAAI,CAAC;;AAG1F,gBAAA,IAAI,OAAwB;AAC5B,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACjC,oBAAA,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAC5C,MAAM,CAAC,CAAC,KAAU,KAAM,cAAiC,CAAC,IAAI,CAAC,CAAC,CAAe,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC/F;;qBACI;oBACL,OAAO,GAAG,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAC5C,MAAM,CAAC,CAAC,KAAU,KAAM,cAA+B,CAAC,KAAK,CAAC,CAAC,CAChE;;AAGH,gBAAA,OAAO,GAAG,OAAO,CAAC,IAAI,CACpB,SAAS,CAAC,cAAc,CAAC,EACzB,SAAS,EAAE,CACZ;AACD,gBAAA,OAAO,CAAC,cAAc,CAAC,CAAA,EAAG,+BAA+B,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AAE1F,gBAAA,OAAO,OAAO;aACf;AACD,YAAA,GAAG,EAAE,MAAM,KAAK,CAAC;AACjB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AAEJ,KAAC;AACH;;MC3CsB,kBAAkB,CAAA;AAMtC,IAAA,WAAA,CAAyC,cAA8B,EAC9B,MAAwB,EAC3C,mBAA0C,EAAA;QAFvB,IAAc,CAAA,cAAA,GAAd,cAAc;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;AAE7C,QAAA,MAAM,uBAAuB,GAAwC,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;QAC1J,IAAI,CAAC,uBAAuB,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;;AAGjF,QAAA,MAAM,aAAa,GAA0B,MAAM,CAAC,MAAM,CAAC;YACzD,YAAY,EAAE,uBAAuB,CAAC;AACvC,SAAA,EAAE,uBAAuB,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;AAErE,QAAA,IAAI,CAAC,YAAY,GAAG,uBAAuB,CAAC,YAAY,EAAE;AAC1D,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;;AAK/G,IAAA,OAAO,CAAC,IAAS,EAAE,KAAU,EAAE,kBAA4B,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACjC,IAAI;YACJ,KAAK;YACL,aAAa,EAAE,IAAI,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;YAC/F,MAAM,EAAE,IAAI,CAAC;AACd,SAAA,CAAC;;AAEL;;AC9BD;;AAEG;MACmB,yBAAyB,CAAA;AAE7C,IAAA,WAAA,CAAgC,kBAA0B,EAAA;QAA1B,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;;AAK3C,IAAA,aAAa,CAAI,YAAqB,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE;YAC/D,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,YAAY,CAAC,IAAI,CAA2B,yBAAA,CAAA,CAAC;;QAGlE,MAAM,UAAU,GAA0B,IAAI,CAAC,qBAAqB,CAAI,YAAY,CAAC;AAErF,QAAA,MAAM,4BAA4B,GAA0B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC;QACtH,OAAO,CAAC,cAAc,CAAC,mCAAmC,EAAE,4BAA4B,EAAE,UAAU,CAAC;;AAGrG,QAAA,MAAM,gCAAgC,GAAsC;AAC1E,YAAA,YAAY,EAAE,MAAM;SACrB;QACD,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,gCAAgC,EAAE,UAAU,CAAC;AAE7F,QAAA,OAAO,UAAU;;IAKT,qBAAqB,CAAI,cAAyB,EAAE,YAAqB,EAAA;AACjF,QAAA,MAAM,oBAAoB,GAA0B;AAClD,YAAA,YAAY,EAAE,MAAM;SACrB;AAGD,QAAA,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,cAAc,CAAA;SAE1C;QAFK,cAAc,GAAA,UAAA,CAAA;AADnB,YAAA,UAAU,CAAC,MAAM,YAAY,EAAE,oBAAoB;AAC9C,SAAA,EAAA,cAAc,CAEnB;AAED,QAAA,OAAO,cAAc;;AAExB;;ACrDK,SAAU,eAAe,CAAC,MAAW,EAAA;AACzC,IAAA,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,KAAK,GAAW,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC;AAClE,QAAA,MAAM,EAAE,GAAW,MAAM,CAAC,KAAK,CAAC;QAEhC,OAAO,EAAE,IAAI,IAAI;;AAGnB,IAAA,OAAO,IAAI;AACb;;MCTa,EAAE,CAAA;IAIb,WAAoC,CAAA,IAAS,EACT,KAAU,EAAA;QADV,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAK,CAAA,KAAA,GAAL,KAAK;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;;IAGnB,KAAK,GAAA;AACX,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI;;AAE3E;;MCNY,IAAI,CAAA;AAMf,IAAA,WAAA,CAAoC,IAAS,EACT,KAAU,EACV,QAAgB,EAChB,UAAuB,EAAA;QAHvB,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAU,CAAA,UAAA,GAAV,UAAU;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACtC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;;IAGrB,aAAa,GAAA;QACnB,MAAM,MAAM,GAAQ,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,MAAM,cAAc,GAAoC,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAEtH,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;;AAGlE,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,MAAM,eAAe,GAAoC,0BAA0B,CAAC,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC;AAExH,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;;AAGpE,QAAA,OAAO,MAAM;;IAGP,SAAS,CAAC,IAAS,EAAE,UAA2C,EAAA;QACtE,MAAM,MAAM,GAAQ,EAAE;AAEtB,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAwC,KAAI;YAC9D,MAAM,QAAQ,GAAQ,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC;AAEtD,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB;;AAGF,YAAA,IAAI,SAAS,CAAC,eAAe,EAAE;gBAC7B,MAAM,CAAC,CAAI,CAAA,EAAA,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;;iBAC/F;gBACL,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,CAAE,CAAA,CAAC,GAAG,QAAQ;;AAE3C,SAAC,CAAC;AAEF,QAAA,OAAO,MAAM;;IAGP,OAAO,GAAA;AACb,QAAA,MAAM,UAAU,GAAQ,IAAI,CAAC,aAAa,EAAE;AAC5C,QAAA,IAAI,IAAI,GAAW,IAAI,CAAC,QAAQ;QAEhC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAK,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAE3F,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE;YACzB,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;;AAG7B,QAAA,OAAO,IAAI;;AAEd;;MCzEY,mBAAmB,CAAA;AAM9B,IAAA,WAAA,CAAmB,OAAqC,EAAE,EAAA;AACxD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;;AAE5B;;MCTY,oBAAoB,CAAA;AAI/B,IAAA,WAAA,CAAmB,OAAsC,EAAE,EAAA;AACzD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;;AAE5B;;ACeD;MAEa,cAAc,CAAA;IAIzB,WAAmC,CAAA,YAAuB,EACvB,cAA2C,EAAA;QAD3C,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAc,CAAA,cAAA,GAAd,cAAc;QAC/C,IAAI,CAAC,MAAM,GAAG;YACZ,MAAM,EAAE,IAAI,OAAO,EAAO;YAC1B,MAAM,EAAE,IAAI,OAAO,EAAO;YAC1B,KAAK,EAAE,IAAI,OAAO,EAAO;YACzB,MAAM,EAAE,IAAI,OAAO,EAAO;YAC1B,OAAO,EAAE,IAAI,OAAO,EAAO;YAC3B,OAAO,EAAE,IAAI,OAAO,EAAO;YAC3B,QAAQ,EAAE,IAAI,OAAO;SACtB;;AAGI,IAAA,OAAO,MAAM,CAAI,YAAqB,EAAE,cAA2C,EAAA;AACxF,QAAA,OAAO,CAAC,UAA6B,KAAK,UAAU,CAAC,YAAY,KAAK,YAAY,IAAI,UAAU,CAAC,cAAc,KAAK,cAAc;;IAG7H,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;;IAGpB,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;;IAGpB,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;;IAGrB,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;;IAGtB,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;;IAGrB,KAAK,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;;IAGnB,MAAM,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;;AAGpB,IAAA,IAAI,CAAC,SAA8B,EAAE,KAAU,EAAE,WAAoB,KAAK,EAAA;QAC/E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;;;AAIrB,IAAA,QAAQ,CAAC,SAA8B,EAAA;QAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;;8GAzDxB,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAd,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;MCjBY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;QAGmB,IAAY,CAAA,YAAA,GAA0B,EAAE;AAgB1D;IAdQ,QAAQ,GAAA;AACb,QAAA,OAAO,IAAI;;IAGN,aAAa,CAAI,YAAqB,EAAE,cAA2C,EAAA;AACxF,QAAA,IAAI,UAAU,GAAsB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAI,YAAY,EAAE,cAAc,CAAC,CAAC;AAElH,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB,UAAU,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC;AAC7D,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGpC,QAAA,OAAO,UAAiB;;8GAhBf,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArB,qBAAqB,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACAD;;AAEG;MAEU,2BAA2B,CAAA;AAEtC,IAAA,WAAA,CAAoC,iBAAwC,EAAA;QAAxC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;;IAG9C,aAAa,CAAI,YAAqB,EAAE,cAA2C,EAAA;QACxF,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,CAAC;;8GANhE,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACCD;;AAEG;AACH,MAAM,gBAAgB,GAAe,EAAE;AAEvC;;AAEG;AACH;MAIa,0BAA0B,CAAA;AAI9B,IAAA,OAAO,OAAO,GAAA;AACnB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,EAAE;QACxD,MAAM,iBAAiB,GAAyB,IAAI,2BAA2B,CAAC,IAAI,CAAC,qBAAqB,CAAQ;AAClH,QAAA,oBAAoB,CAAC,WAAW,GAAG,MAAM,iBAAiB;QAE1D,OAAO;AACL,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,SAAS,EAAE;SACZ;;AAGI,IAAA,OAAO,aAAa,CAAI,YAAqB,EAAE,cAA2C,EAAA;QAC/F,OAAO,0BAA0B,CAAC,qBAAqB,CAAC,aAAa,CAAC,YAAY,EAAE,cAAc,CAAQ;;8GAhBjG,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA1B,0BAA0B,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,aAF1B,gBAAgB,EAAA,CAAA,CAAA;;2FAEhB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;AACZ,iBAAA;;;ACpBM,MAAM,OAAO,GAAG,CAAC,KAAY,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;;ACK5F,SAAU,YAAY,CAAI,KAAyC,EAAA;IACvE,OAAO,CAAC,MAA2B,KAAqB;QACtD,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,CAAC,SAAkB,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAClD,MAAM,CAAC,CAAC,IAAa,KAAI;YACvB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACzF,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CACrC,KAAK,EAAE,CACR;;AAGH,YAAA,OAAO,KAAK;SACb,CAAC,EACF,OAAO,EAAE,EACT,GAAG,CAAC,CAAC,GAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CACnC,CAAC,CACH;AACH,KAAC;AACH;;ACnBM,SAAU,gBAAgB,CAAI,MAAkC,EAAA;AACpE,IAAA,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;AAC/F;;ACNA;;AAEG;;;;"}