{"version":3,"file":"simplyfire-ngx.mjs","sources":["../../packages/ngx/application-context.ts","../../packages/ngx/decorators/autowire.ts","../../packages/ngx/db/AbstractFirestoreApi.ts","../../packages/ngx/db/QueryBuilder.ts","../../packages/ngx/utils/arrays.ts","../../packages/ngx/utils/index.ts","../../packages/ngx/services/firestore.service.ts","../../packages/ngx/simplyfire-ngx.ts"],"sourcesContent":["import { Injectable, Injector } from '@angular/core';\n\ntype ApplicationOptions = { [key: string]: any };\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ApplicationContext {\n  static injector: Injector = null;\n\n  private options: ApplicationOptions;\n\n  private static instance: ApplicationContext = null;\n\n  static getInstance(options?: ApplicationOptions) {\n    this.instance ??= new this();\n    this.instance.initialize(options);\n  }\n\n  initialize(options?: ApplicationOptions) {\n    this.options = options;\n  }\n}\n","import 'reflect-metadata';\n\nimport { ApplicationContext } from '../application-context';\n\nexport const Autowire = (): any => {\n  return (target: any, propertyKey: string): any => {\n    const provider = Reflect.getMetadata('design:type', target, propertyKey);\n\n    type Provider = typeof provider;\n    let value: Provider;\n\n    return {\n      get: (): Provider => {\n        return (value ??= ApplicationContext.injector.get<InstanceType<Provider>>(provider));\n      },\n      set: (v: Provider) => {\n        value = v;\n      }\n    };\n  };\n};\n","import type {\n  DocumentData,\n  DocumentReference,\n  DocumentSnapshot,\n  FieldValue,\n  QuerySnapshot,\n  SetOptions,\n  Transaction,\n  WriteBatch\n} from '@firebase/firestore-types';\nimport { QueryBuilder } from './QueryBuilder';\n\nexport abstract class AbstractFirestoreApi {\n  // Maximum number of writes that can be passed to a Commit operation\n  // or performed in a transaction\n  // https://cloud.google.com/firestore/quotas#writes_and_transactions\n  BATCH_MAX_WRITES = 500;\n\n  abstract collection<T = any>(path: string, qb?: QueryBuilder, maxAge?: number): Promise<T[]>;\n  abstract collectionGroup<T = any>(collectionId: string, qb?: QueryBuilder, maxAge?: number): Promise<T[]>;\n  abstract collectionSnapshot(path: string, qb?: QueryBuilder): Promise<QuerySnapshot<DocumentData>>;\n  abstract doc<T = any>(path: string, maxAge?: number): Promise<T>;\n  abstract docRef(docPath: string): DocumentReference<DocumentData>;\n\n  abstract upsert(collection: string, data: { [key: string]: any }, opts?: SetOptions): Promise<string>;\n  abstract update(docPath: string, data: { [key: string]: any }): Promise<void>;\n  abstract delete(docPath: string): Promise<void>;\n\n  abstract bulkUpsert(\n    collection: string,\n    data: DocumentData[] | { data: DocumentData; qb?: QueryBuilder },\n    opts?: SetOptions\n  ): Promise<string[]>;\n  abstract bulkDelete(collection: string, qb?: QueryBuilder): Promise<string[]>;\n  abstract runTransaction(updateFunction: (transaction: Transaction) => Promise<unknown>): Promise<unknown>;\n\n  abstract get batch(): WriteBatch;\n  abstract get serverTimestamp(): FieldValue;\n\n  abstract increment(n?: number): FieldValue;\n\n  abstract createId(collection?: string): string;\n\n  getValueFromSnapshot<T = any>(snapshot: DocumentSnapshot): T {\n    return (snapshot.exists ? snapshot.data() : null) as T;\n  }\n}\n","import type {\n  CollectionReference,\n  DocumentData,\n  DocumentSnapshot,\n  FieldPath,\n  OrderByDirection,\n  Query,\n  WhereFilterOp\n} from '@firebase/firestore-types';\n\ntype QueryWhere = [fieldPath: string | FieldPath, opStr: WhereFilterOp, value: unknown];\ntype QueryOrderBy = [fieldPath: string | FieldPath, directionStr?: OrderByDirection];\ntype QueryLeftJoin = [idField: string, collection: string, alias: string];\ntype QueryCursor = [snapshot: DocumentSnapshot<unknown>] | unknown[];\n\ndeclare const window: any;\n\nexport class QueryBuilder {\n  private _where: QueryWhere[] = [];\n  private _orderBy: QueryOrderBy[] = [];\n  private _leftJoins: QueryLeftJoin[] = [];\n  private _limit?: number;\n  private _limitToLast?: number;\n  private _startAt?: QueryCursor;\n  private _startAfter?: QueryCursor;\n  private _endAt?: QueryCursor;\n  private _endBefore?: QueryCursor;\n\n  get joins() {\n    return this._leftJoins;\n  }\n\n  where(...where: QueryWhere) {\n    this._where.push(where);\n\n    return this;\n  }\n\n  orderBy(...orderBy: QueryOrderBy) {\n    this._orderBy.push(orderBy);\n\n    return this;\n  }\n\n  leftJoin(...leftJoin: QueryLeftJoin) {\n    this._leftJoins.push(leftJoin);\n  }\n\n  limit(limit: number) {\n    this._limit = limit;\n    return this;\n  }\n\n  limitToLast(limitToLast: number) {\n    this._limitToLast = limitToLast;\n    return this;\n  }\n\n  startAt(...startAt: QueryCursor) {\n    this._startAt = startAt;\n    return this;\n  }\n\n  startAfter(...startAfter: QueryCursor) {\n    this._startAfter = startAfter;\n    return this;\n  }\n\n  endAt(...endAt: QueryCursor) {\n    this._endAt = endAt;\n    return this;\n  }\n\n  endBefore(...endBefore: QueryCursor) {\n    this._endBefore = endBefore;\n    return this;\n  }\n\n  // Still have to use <any> type due to most interfaces of @google-cloud/firestore\n  // are not compatible with @firebase/firestore's interfaces.\n  exec(ref: CollectionReference<DocumentData> | any, queryOps?: { [key: string]: any }): Query<DocumentData> | any {\n    if (typeof window === 'undefined') {\n      return this.execQueryForCloud(ref);\n    }\n\n    if (!queryOps) {\n      throw Error('invalid arguments');\n    }\n\n    const { query, where, orderBy, limit, limitToLast, startAt, startAfter, endAt, endBefore } = queryOps;\n\n    const queryConstraints = [\n      ...this._where.map((w) => where(...w)),\n      ...this._orderBy.map((o) => orderBy(...o)),\n      ...(this._limit ? [limit(this._limit)] : []),\n      ...(this._limitToLast ? [limitToLast(this._limitToLast)] : []),\n      ...(this._startAt?.every((i) => !!i) ? [startAt(...this._startAt)] : []),\n      ...(this._startAfter?.every((i) => !!i) ? [startAfter(...this._startAfter)] : []),\n      ...(this._endAt?.every((i) => !!i) ? [endAt(...this._endAt)] : []),\n      ...(this._endBefore?.every((i) => !!i) ? [endBefore(...this._endBefore)] : [])\n    ];\n\n    return query(ref, ...queryConstraints);\n  }\n\n  private execQueryForCloud(ref: CollectionReference<DocumentData>): Query<DocumentData> {\n    let query = this._where.reduce((q, wh) => q.where(...wh), ref);\n    query = this._orderBy.reduce((q, ob) => q.orderBy(...ob), query);\n\n    if (this._limit) {\n      query = query.limit(this._limit);\n    }\n\n    if (this._limitToLast) {\n      query = query.limitToLast(this._limitToLast);\n    }\n\n    if (this._startAt) {\n      query = query.startAt(this._startAt);\n    }\n\n    if (this._startAfter) {\n      query = query.startAfter(this._startAfter);\n    }\n\n    if (this._endAt) {\n      query = query.endAt(this._endAt);\n    }\n\n    if (this._endBefore) {\n      query = query.endBefore(this._endBefore);\n    }\n\n    return query;\n  }\n}\n","// chunk array to a certain size\nexport const arrayToChunks = (list: any[], size: number) => {\n  list = [...list];\n\n  return [...Array(Math.ceil(list.length / size))].map((_) => list.splice(0, size));\n};\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport * from './arrays';\n\n// flatten the array of observables to one level deep\nexport const flatten = (source: Observable<any[]>) => {\n  return source.pipe(map((arr) => arr.reduce((acc: any[], cur: any[]) => acc.concat(cur))));\n};\n","import { Injectable } from '@angular/core';\nimport {\n  getFirestore,\n  doc,\n  docData,\n  addDoc,\n  setDoc,\n  updateDoc,\n  deleteDoc,\n  collection,\n  collectionData,\n  collectionGroup,\n  collectionChanges,\n  getDocs,\n  increment,\n  writeBatch,\n  serverTimestamp,\n  query,\n  where,\n  orderBy,\n  limit,\n  limitToLast,\n  startAt,\n  startAfter,\n  endAt,\n  endBefore,\n  runTransaction,\n  documentId\n} from '@angular/fire/firestore';\nimport type {\n  Firestore,\n  DocumentChangeType,\n  DocumentData,\n  QuerySnapshot,\n  SetOptions,\n  Transaction\n} from '@angular/fire/firestore';\n\nimport { combineLatest, defer, lastValueFrom, Observable, of } from 'rxjs';\nimport { map, switchMap, take } from 'rxjs/operators';\n\nimport { QueryBuilder, AbstractFirestoreApi } from '../db';\nimport { arrayToChunks } from '../utils';\n\nconst queryOps = {\n  query,\n  where,\n  orderBy,\n  limit,\n  limitToLast,\n  startAt,\n  startAfter,\n  endAt,\n  endBefore\n};\n\nconst CACHE_MAX_AGE = 5 * 60 * 1000;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FirestoreService extends AbstractFirestoreApi {\n  get firestore(): Firestore {\n    return getFirestore();\n  }\n\n  private cache = new Map<string, any>();\n\n  // -----------------------------------------------------------------------------------------------------\n  // @ Abstract members\n  // -----------------------------------------------------------------------------------------------------\n\n  collection<T = any>(path: string, qb?: QueryBuilder, maxAge = CACHE_MAX_AGE): Promise<T[]> {\n    return lastValueFrom(this.collectionWithCache(path, qb, maxAge).pipe(take(1)));\n  }\n\n  collectionGroup<T = any>(collectionId: string, qb?: QueryBuilder, maxAge = CACHE_MAX_AGE): Promise<T[]> {\n    return lastValueFrom(this.collectionGroupWithCache(collectionId, qb, maxAge).pipe(take(1)));\n  }\n\n  doc<T = any>(path: string, maxAge = CACHE_MAX_AGE): Promise<T> {\n    return lastValueFrom(this.docWithCache(path, maxAge).pipe(take(1)));\n  }\n\n  docRef(path: string) {\n    return doc(this.firestore, path) as any;\n  }\n\n  async upsert(\n    collectionPath: string,\n    data: { [key: string]: any },\n    opts: SetOptions = { merge: true }\n  ): Promise<string> {\n    const timestamp = this.serverTimestamp;\n\n    let { id, ...updata } = data;\n    updata.createdTs ??= timestamp;\n    updata.updatedTs = timestamp;\n\n    if (id) {\n      await setDoc(this.docRef(`${collectionPath}/${id}`), Object.assign({}, updata), opts);\n    } else {\n      id = (await addDoc(collection(this.firestore, collectionPath), updata)).id;\n    }\n\n    return id;\n  }\n\n  update(docPath: string, data: { [key: string]: any }) {\n    const updatedTs = this.serverTimestamp;\n\n    // ignore id\n    delete data['id'];\n\n    return updateDoc(this.docRef(docPath), Object.assign({}, data, { updatedTs }));\n  }\n\n  delete(docPath: string) {\n    return deleteDoc(this.docRef(docPath));\n  }\n\n  async bulkUpsert(\n    path: string,\n    data: DocumentData[] | { data: DocumentData; qb?: QueryBuilder },\n    opts: SetOptions = { merge: true }\n  ): Promise<string[]> {\n    const bulkIds = [];\n    const promises = [];\n\n    if (Array.isArray(data)) {\n      // Due to a batch limitation, need to split docs array into chunks\n      for (const chunks of arrayToChunks(data, this.BATCH_MAX_WRITES)) {\n        const batch = this.batch;\n        const timestamp = this.serverTimestamp;\n\n        chunks.forEach(async ({ id, ...updata }) => {\n          updata.createdTs ??= timestamp;\n          updata.updatedTs = timestamp;\n\n          let docRef: any;\n\n          if (id) {\n            docRef = this.docRef(`${path}/${id}`);\n          } else {\n            docRef = doc(collection(this.firestore, path));\n          }\n\n          bulkIds.push(docRef.id);\n          batch.set(docRef, updata, opts);\n        });\n\n        const p = batch.commit();\n        promises.push(p);\n      }\n    } else {\n      const snapshot = await this.collectionSnapshot(path, data.qb);\n\n      // Due to a batch limitation, need to split docs array into chunks\n      for (const chunks of arrayToChunks(snapshot.docs, this.BATCH_MAX_WRITES)) {\n        const batch = this.batch;\n        const timestamp = this.serverTimestamp;\n\n        chunks.forEach((d) => batch.set(d.ref, { updatedTs: timestamp, ...data.data }, opts) && bulkIds.push(d.id));\n\n        const p = batch.commit();\n        promises.push(p);\n      }\n    }\n\n    await Promise.all(promises);\n\n    return bulkIds;\n  }\n\n  async bulkDelete(path: string, qb?: QueryBuilder, maxSize = 1000): Promise<string[]> {\n    qb ??= new QueryBuilder();\n    qb.limit(maxSize);\n\n    const bulkIds = [];\n    const promises = [];\n\n    const snapshot: QuerySnapshot<DocumentData> = await this.collectionSnapshot(path, qb);\n\n    // Due to a batch limitation, need to split docs array into chunks\n    for (const chunks of arrayToChunks(snapshot.docs, this.BATCH_MAX_WRITES)) {\n      const batch = this.batch;\n\n      chunks.forEach((d) => batch.delete(d.ref) && bulkIds.push(d.id));\n      const p = batch.commit();\n      promises.push(p);\n    }\n\n    await Promise.all(promises);\n\n    return bulkIds;\n  }\n\n  /**\n   * write batch\n   */\n  get batch() {\n    return writeBatch(this.firestore) as any;\n  }\n\n  /**\n   * firestore timestamp\n   */\n  get serverTimestamp() {\n    return serverTimestamp();\n  }\n\n  /**\n   * FieldValue increment\n   */\n  increment(n = 1) {\n    return increment(n);\n  }\n\n  /**\n   * Returns a generated Firestore Document Id.\n   */\n  createId(colPath?: string) {\n    return doc(collection(this.firestore, colPath ?? '_')).id;\n  }\n\n  runTransaction(updateFunction: (transaction: Transaction | any) => Promise<unknown>): Promise<unknown> {\n    return runTransaction(this.firestore, updateFunction);\n  }\n\n  // -----------------------------------------------------------------------------------------------------\n  // @ Custom methods\n  // -----------------------------------------------------------------------------------------------------\n\n  collectionValueChanges<T = any>(path: string, qb?: QueryBuilder): Observable<T[]> {\n    const collectionRef = collection(this.firestore, path);\n    qb ??= new QueryBuilder();\n\n    return collectionData(qb.exec(collectionRef, queryOps), { idField: 'id' }).pipe((s) =>\n      (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\n    );\n  }\n\n  collectionGroupValueChanges<T = any>(collectionId: string, qb?: QueryBuilder): Observable<T[]> {\n    const collectionRef = collectionGroup(this.firestore, collectionId);\n    qb ??= new QueryBuilder();\n\n    return collectionData(qb.exec(collectionRef, queryOps), { idField: 'id' }).pipe((s) =>\n      (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\n    );\n  }\n\n  collectionSnapshot(path: string, qb?: QueryBuilder): Promise<QuerySnapshot<any> | any> {\n    qb ??= new QueryBuilder();\n\n    const collectionRef = collection(this.firestore, path);\n    return getDocs(qb.exec(collectionRef, queryOps));\n  }\n\n  collectionSnapshotChanges<T = any>(path: string, qb?: QueryBuilder, events?: DocumentChangeType[]): Observable<T[]> {\n    const collectionRef: any = collection(this.firestore, path);\n    qb ??= new QueryBuilder();\n\n    return collectionChanges(qb.exec(collectionRef, queryOps), { events }).pipe(\n      map((changes) => changes.map((c) => Object.assign({}, c.doc.data(), { id: c.doc.id } as any))),\n      (s) => (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\n    );\n  }\n\n  collectionGroupSnapshotChanges<T = any>(\n    collectionId: string,\n    qb?: QueryBuilder,\n    events?: DocumentChangeType[]\n  ): Observable<T[]> {\n    const collectionRef: any = collectionGroup(this.firestore, collectionId);\n    qb ??= new QueryBuilder();\n\n    return collectionChanges(qb.exec(collectionRef, queryOps), { events }).pipe(\n      map((changes) => changes.map((c) => Object.assign({}, c.doc.data(), { id: c.doc.id } as any))),\n      (s) => (qb?.joins ?? []).map((j) => leftJoin(this, ...j)).reduce((ss, o) => o(ss), s)\n    );\n  }\n\n  docValueChanges<T = any>(path: string): Observable<T> {\n    const docRef: any = doc(this.firestore, path);\n    return docData<T>(docRef, { idField: 'id' });\n  }\n\n  /**\n   * @experimental\n   *\n   * Cache collection data in memory\n   */\n  collectionWithCache<T = any>(path: string, qb?: QueryBuilder, maxAge?: number): Observable<T[]> {\n    return this.fetchFromCache(path + (qb ? JSON.stringify(qb) : ''), this.collectionValueChanges<T>(path, qb), maxAge);\n  }\n\n  /**\n   * @experimental\n   *\n   * Cache collectionGroup data in memory\n   */\n  collectionGroupWithCache<T = any>(collectionId: string, qb?: QueryBuilder, maxAge?: number): Observable<T[]> {\n    return this.fetchFromCache(\n      collectionId + (qb ? JSON.stringify(qb) : ''),\n      this.collectionGroupValueChanges<T>(collectionId, qb),\n      maxAge\n    );\n  }\n\n  /**\n   * @experimental\n   *\n   * Cache document data in memory\n   */\n  docWithCache(path: string, maxAge?: number) {\n    return this.fetchFromCache(path, this.docValueChanges(path), maxAge);\n  }\n\n  /**\n   * @experimental\n   *\n   * Delete cached data from the memory\n   */\n  deleteCache(path: string, qb?: QueryBuilder) {\n    const key = path + (qb ? JSON.stringify(qb) : '');\n    return this.cache.delete(key);\n  }\n\n  private fetchFromCache(key: string, source: Observable<any>, maxAge: number) {\n    const cached = this.cache.get(key);\n\n    if (maxAge === 0 || !cached || (maxAge && Date.now() - cached.lastRead > maxAge)) {\n      return source.pipe(map((data) => this.cache.set(key, { lastRead: Date.now(), data }) && data));\n    }\n\n    return of(cached.data);\n  }\n}\n\nconst leftJoin = (fs: FirestoreService, key: string, collection: string, alias: string, maxAge?: number) => {\n  if (key === alias) {\n    throw Error('Due to use of Cache, you must use different alias for a key.');\n  }\n\n  return (source: Observable<any | any[]>) =>\n    defer(() => {\n      let ret: any;\n\n      return source.pipe(\n        switchMap((data) => {\n          ret = data;\n\n          const fetchJoinData = (id: string | string[]) => {\n            if (Array.isArray(id)) {\n              const qb = new QueryBuilder();\n              qb.where(documentId(), 'in', id);\n              return fs.collectionWithCache(collection, qb, maxAge);\n            }\n\n            return fs.docWithCache(`${collection}/${id}`, maxAge);\n          };\n\n          if (Array.isArray(data)) {\n            const docs$ = (ret as any[]).filter((i) => i[key]).map((i) => fetchJoinData(i[key]));\n            return docs$.length ? combineLatest(docs$) : of([]);\n          }\n\n          return data && data[key] ? fetchJoinData(data[key]) : of(null);\n        }),\n        map((joins) => {\n          if (Array.isArray(ret)) {\n            return ret.map((r) => {\n              const id = r[key];\n              if (id) {\n                if (Array.isArray(id)) {\n                  r[alias] = joins\n                    .filter(\n                      (j: any) =>\n                        Array.isArray(j) && JSON.stringify(j.map((jj) => jj.id).sort()) === JSON.stringify(id.sort())\n                    )\n                    .pop();\n                } else {\n                  r[alias] = joins.filter((j: any) => j?.id === id).pop();\n                }\n              }\n\n              return r;\n            });\n          }\n\n          if (ret) {\n            ret[alias] = joins;\n          }\n\n          return ret;\n        })\n      );\n    });\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAOa,kBAAkB,CAAA;IAO7B,OAAO,WAAW,CAAC,OAA4B,EAAA;;AAC7C,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAb,IAAI,CAAC,QAAQ,GAAK,IAAI,IAAI,EAAE,CAAC,CAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACnC;AAED,IAAA,UAAU,CAAC,OAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;;AAbM,kBAAQ,CAAA,QAAA,GAAa,IAAK,CAAA;AAIlB,kBAAQ,CAAA,QAAA,GAAuB,IAAK,CAAA;+GALxC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;ACFM,MAAM,QAAQ,GAAG,MAAU;AAChC,IAAA,OAAO,CAAC,MAAW,EAAE,WAAmB,KAAS;AAC/C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAGzE,QAAA,IAAI,KAAe,CAAC;QAEpB,OAAO;YACL,GAAG,EAAE,MAAe;gBAClB,QAAQ,KAAK,KAAL,IAAA,IAAA,KAAK,cAAL,KAAK,IAAL,KAAK,GAAK,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAyB,QAAQ,CAAC,GAAE;aACtF;AACD,YAAA,GAAG,EAAE,CAAC,CAAW,KAAI;gBACnB,KAAK,GAAG,CAAC,CAAC;aACX;SACF,CAAC;AACJ,KAAC,CAAC;AACJ;;MCRsB,oBAAoB,CAAA;AAA1C,IAAA,WAAA,GAAA;;;;AAIE,QAAA,IAAgB,CAAA,gBAAA,GAAG,GAAG,CAAC;KA8BxB;AAHC,IAAA,oBAAoB,CAAU,QAA0B,EAAA;AACtD,QAAA,QAAQ,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,EAAO;KACxD;AACF;;MC7BY,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;AACU,QAAA,IAAM,CAAA,MAAA,GAAiB,EAAE,CAAC;AAC1B,QAAA,IAAQ,CAAA,QAAA,GAAmB,EAAE,CAAC;AAC9B,QAAA,IAAU,CAAA,UAAA,GAAoB,EAAE,CAAC;KAmH1C;AA3GC,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,KAAK,CAAC,GAAG,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAExB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CAAC,GAAG,OAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE5B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,QAAQ,CAAC,GAAG,QAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChC;AAED,IAAA,KAAK,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,WAAW,CAAC,WAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CAAC,GAAG,OAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,GAAG,UAAuB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,KAAK,CAAC,GAAG,KAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,SAAS,CAAC,GAAG,SAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb;;;IAID,IAAI,CAAC,GAA4C,EAAE,QAAiC,EAAA;;AAClF,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACpC,SAAA;QAED,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAClC,SAAA;QAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;AAEtG,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;AAC5C,YAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC;AAC9D,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;AACxE,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;AACjF,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;AAClE,YAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC;SAC/E,CAAC;AAEF,QAAA,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,CAAC;KACxC;AAEO,IAAA,iBAAiB,CAAC,GAAsC,EAAA;QAC9D,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAEjE,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,SAAA;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9C,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtC,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5C,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;ACvID;MACa,aAAa,GAAG,CAAC,IAAW,EAAE,IAAY,KAAI;AACzD,IAAA,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAEjB,IAAA,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpF;;ACAA;AACa,MAAA,OAAO,GAAG,CAAC,MAAyB,KAAI;AACnD,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAU,EAAE,GAAU,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F;;ACoCA,MAAM,QAAQ,GAAG;IACf,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,WAAW;IACX,OAAO;IACP,UAAU;IACV,KAAK;IACL,SAAS;CACV,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAK9B,MAAO,gBAAiB,SAAQ,oBAAoB,CAAA;AAH1D,IAAA,WAAA,GAAA;;AAQU,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAe,CAAC;KA+QxC;AAnRC,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,YAAY,EAAE,CAAC;KACvB;;;;AAQD,IAAA,UAAU,CAAU,IAAY,EAAE,EAAiB,EAAE,MAAM,GAAG,aAAa,EAAA;QACzE,OAAO,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAChF;AAED,IAAA,eAAe,CAAU,YAAoB,EAAE,EAAiB,EAAE,MAAM,GAAG,aAAa,EAAA;QACtF,OAAO,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7F;AAED,IAAA,GAAG,CAAU,IAAY,EAAE,MAAM,GAAG,aAAa,EAAA;AAC/C,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACrE;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;QACjB,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAQ,CAAC;KACzC;IAEK,MAAM,CACV,cAAsB,EACtB,IAA4B,EAC5B,IAAA,GAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAA;;;AAElC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;YAEvC,IAAI,EAAE,EAAE,EAAA,GAAgB,IAAI,EAAf,MAAM,GAAA,MAAA,CAAK,IAAI,EAAxB,CAAiB,IAAA,CAAA,CAAO,CAAC;YAC7B,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAhB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAA,MAAM,CAAC,SAAS,GAAK,SAAS,CAAC,CAAA;AAC/B,YAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;AAE7B,YAAA,IAAI,EAAE,EAAE;gBACN,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAG,EAAA,cAAc,CAAI,CAAA,EAAA,EAAE,CAAE,CAAA,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AACvF,aAAA;AAAM,iBAAA;AACL,gBAAA,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AAC5E,aAAA;AAED,YAAA,OAAO,EAAE,CAAC;;AACX,KAAA;IAED,MAAM,CAAC,OAAe,EAAE,IAA4B,EAAA;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;;AAGvC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QAElB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;KAChF;AAED,IAAA,MAAM,CAAC,OAAe,EAAA;QACpB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KACxC;IAEK,UAAU,CACd,IAAY,EACZ,IAAgE,EAChE,IAAA,GAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAA;;YAElC,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;gBAEvB,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE;AAC/D,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;AAEvC,oBAAA,MAAM,CAAC,OAAO,CAAC,CAAO,EAAiB,KAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AAArB,wBAAA,IAAA,EAAE,EAAE,EAAa,GAAA,EAAA,EAAR,MAAM,GAAA,MAAA,CAAA,EAAA,EAAf,MAAiB,CAAF,CAAA;wBACnC,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAhB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAA,MAAM,CAAC,SAAS,GAAK,SAAS,CAAC,CAAA;AAC/B,wBAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;AAE7B,wBAAA,IAAI,MAAW,CAAC;AAEhB,wBAAA,IAAI,EAAE,EAAE;4BACN,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,EAAE,CAAE,CAAA,CAAC,CAAC;AACvC,yBAAA;AAAM,6BAAA;AACL,4BAAA,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;AAChD,yBAAA;AAED,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACxB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;qBACjC,CAAA,CAAA,EAAA,CAAC,CAAC;AAEH,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,oBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;;AAG9D,gBAAA,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACxE,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;AAEvC,oBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,kBAAI,SAAS,EAAE,SAAS,EAAA,EAAK,IAAI,CAAC,IAAI,CAAI,EAAA,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5G,oBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,oBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,iBAAA;AACF,aAAA;AAED,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAE5B,YAAA,OAAO,OAAO,CAAC;SAChB,CAAA,CAAA;AAAA,KAAA;AAEK,IAAA,UAAU,CAAC,IAAY,EAAE,EAAiB,EAAE,OAAO,GAAG,IAAI,EAAA;;AAC9D,YAAA,EAAE,KAAF,IAAA,IAAA,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,IAAF,EAAE,GAAK,IAAI,YAAY,EAAE,CAAC,CAAA;AAC1B,YAAA,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAElB,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;YAEpB,MAAM,QAAQ,GAAgC,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;AAGtF,YAAA,KAAK,MAAM,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACxE,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBAEzB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,gBAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,aAAA;AAED,YAAA,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAE5B,YAAA,OAAO,OAAO,CAAC;SAChB,CAAA,CAAA;AAAA,KAAA;AAED;;AAEG;AACH,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAQ,CAAC;KAC1C;AAED;;AAEG;AACH,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,eAAe,EAAE,CAAC;KAC1B;AAED;;AAEG;IACH,SAAS,CAAC,CAAC,GAAG,CAAC,EAAA;AACb,QAAA,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;KACrB;AAED;;AAEG;AACH,IAAA,QAAQ,CAAC,OAAgB,EAAA;AACvB,QAAA,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAP,OAAO,GAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D;AAED,IAAA,cAAc,CAAC,cAAoE,EAAA;QACjF,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;KACvD;;;;IAMD,sBAAsB,CAAU,IAAY,EAAE,EAAiB,EAAA;QAC7D,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACvD,QAAA,EAAE,KAAF,IAAA,IAAA,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,IAAF,EAAE,GAAK,IAAI,YAAY,EAAE,CAAC,CAAA;AAE1B,QAAA,OAAO,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAChF,OAAA,CAAC,CAAA,EAAA,GAAA,EAAE,aAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,EAAA,CAC/E,CAAC;KACH;IAED,2BAA2B,CAAU,YAAoB,EAAE,EAAiB,EAAA;QAC1E,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACpE,QAAA,EAAE,KAAF,IAAA,IAAA,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,IAAF,EAAE,GAAK,IAAI,YAAY,EAAE,CAAC,CAAA;AAE1B,QAAA,OAAO,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAChF,OAAA,CAAC,CAAA,EAAA,GAAA,EAAE,aAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,EAAA,CAC/E,CAAC;KACH;IAED,kBAAkB,CAAC,IAAY,EAAE,EAAiB,EAAA;AAChD,QAAA,EAAE,KAAF,IAAA,IAAA,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,IAAF,EAAE,GAAK,IAAI,YAAY,EAAE,CAAC,CAAA;QAE1B,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;KAClD;AAED,IAAA,yBAAyB,CAAU,IAAY,EAAE,EAAiB,EAAE,MAA6B,EAAA;QAC/F,MAAM,aAAa,GAAQ,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC5D,QAAA,EAAE,KAAF,IAAA,IAAA,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,IAAF,EAAE,GAAK,IAAI,YAAY,EAAE,CAAC,CAAA;QAE1B,OAAO,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAS,CAAC,CAAC,CAAC,EAC9F,CAAC,CAAC,eAAK,OAAA,CAAC,CAAA,EAAA,GAAA,EAAE,KAAF,IAAA,IAAA,EAAE,uBAAF,EAAE,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,EAAA,CACtF,CAAC;KACH;AAED,IAAA,8BAA8B,CAC5B,YAAoB,EACpB,EAAiB,EACjB,MAA6B,EAAA;QAE7B,MAAM,aAAa,GAAQ,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACzE,QAAA,EAAE,KAAF,IAAA,IAAA,EAAE,KAAF,KAAA,CAAA,GAAA,EAAE,IAAF,EAAE,GAAK,IAAI,YAAY,EAAE,CAAC,CAAA;QAE1B,OAAO,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAS,CAAC,CAAC,CAAC,EAC9F,CAAC,CAAC,eAAK,OAAA,CAAC,CAAA,EAAA,GAAA,EAAE,KAAF,IAAA,IAAA,EAAE,uBAAF,EAAE,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,EAAA,CACtF,CAAC;KACH;AAED,IAAA,eAAe,CAAU,IAAY,EAAA;QACnC,MAAM,MAAM,GAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAI,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9C;AAED;;;;AAIG;AACH,IAAA,mBAAmB,CAAU,IAAY,EAAE,EAAiB,EAAE,MAAe,EAAA;AAC3E,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAI,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;KACrH;AAED;;;;AAIG;AACH,IAAA,wBAAwB,CAAU,YAAoB,EAAE,EAAiB,EAAE,MAAe,EAAA;AACxF,QAAA,OAAO,IAAI,CAAC,cAAc,CACxB,YAAY,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAC7C,IAAI,CAAC,2BAA2B,CAAI,YAAY,EAAE,EAAE,CAAC,EACrD,MAAM,CACP,CAAC;KACH;AAED;;;;AAIG;IACH,YAAY,CAAC,IAAY,EAAE,MAAe,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;KACtE;AAED;;;;AAIG;IACH,WAAW,CAAC,IAAY,EAAE,EAAiB,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC/B;AAEO,IAAA,cAAc,CAAC,GAAW,EAAE,MAAuB,EAAE,MAAc,EAAA;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE;AAChF,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAChG,SAAA;AAED,QAAA,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACxB;;6GAnRU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;AAuRD,MAAM,QAAQ,GAAG,CAAC,EAAoB,EAAE,GAAW,EAAE,UAAkB,EAAE,KAAa,EAAE,MAAe,KAAI;IACzG,IAAI,GAAG,KAAK,KAAK,EAAE;AACjB,QAAA,MAAM,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAC7E,KAAA;IAED,OAAO,CAAC,MAA+B,KACrC,KAAK,CAAC,MAAK;AACT,QAAA,IAAI,GAAQ,CAAC;QAEb,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,CAAC,IAAI,KAAI;YACjB,GAAG,GAAG,IAAI,CAAC;AAEX,YAAA,MAAM,aAAa,GAAG,CAAC,EAAqB,KAAI;AAC9C,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACrB,oBAAA,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC9B,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;oBACjC,OAAO,EAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AACvD,iBAAA;AAED,gBAAA,OAAO,EAAE,CAAC,YAAY,CAAC,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,EAAE,CAAE,CAAA,EAAE,MAAM,CAAC,CAAC;AACxD,aAAC,CAAC;AAEF,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAI,GAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrF,gBAAA,OAAO,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACrD,aAAA;YAED,OAAO,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACjE,SAAC,CAAC,EACF,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACnB,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAClB,oBAAA,IAAI,EAAE,EAAE;AACN,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACrB,4BAAA,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK;iCACb,MAAM,CACL,CAAC,CAAM,KACL,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAChG;AACA,iCAAA,GAAG,EAAE,CAAC;AACV,yBAAA;AAAM,6BAAA;4BACL,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAA,CAAC,KAAD,IAAA,IAAA,CAAC,KAAD,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAC,CAAE,EAAE,MAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AACzD,yBAAA;AACF,qBAAA;AAED,oBAAA,OAAO,CAAC,CAAC;AACX,iBAAC,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AACpB,aAAA;AAED,YAAA,OAAO,GAAG,CAAC;SACZ,CAAC,CACH,CAAC;AACJ,KAAC,CAAC,CAAC;AACP,CAAC;;AC9YD;;AAEG;;;;"}