{"version":3,"file":"app-factory.mjs","sources":["../../src/client/app-factory.ts"],"sourcesContent":["import { DecIndent, DecIndentAndCloseBlock, DocumentParts, IncIndent, indent, jsDoc, NewLine } from '../output/writer'\nimport { BARE_CALL, MethodList } from './helpers/get-call-config-summary'\nimport { GeneratorContext } from './generator-context'\nimport { getCreateOnCompleteOptions } from './deploy-types'\nimport { ABIMethod } from 'algosdk'\nimport { Method } from '@algorandfoundation/algokit-utils/types/app-arc56'\n\nexport function* appFactory(ctx: GeneratorContext): DocumentParts {\n  const { app, name } = ctx\n\n  yield* jsDoc(\n    `A factory to create and deploy one or more instance of the ${app.name} smart contract and to create one or more app clients to interact with those (or other) app instances`,\n  )\n  yield `export class ${name}Factory {`\n  yield IncIndent\n  yield* jsDoc(`The underlying \\`AppFactory\\` for when you want to have more flexibility`)\n  yield 'public readonly appFactory: _AppFactory'\n  yield NewLine\n\n  yield* jsDoc({\n    description: `Creates a new instance of \\`${name}Factory\\``,\n    params: {\n      params: 'The parameters to initialise the app factory with',\n    },\n  })\n\n  yield `\n    constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n      this.appFactory = new _AppFactory({\n        ...params,\n        appSpec: APP_SPEC,\n      })\n    }\n\n    /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n    public get appName() {\n      return this.appFactory.appName\n    }\n\n    /** The ARC-56 app spec being used */\n    get appSpec() {\n      return APP_SPEC\n    }\n\n    /** A reference to the underlying \\`AlgorandClient\\` this app factory is using. */\n    public get algorand(): AlgorandClient {\n      return this.appFactory.algorand\n    }\n\n    /**\n     * Returns a new \\`AppClient\\` client for an app instance of the given ID.\n     *\n     * Automatically populates appName, defaultSender and source maps from the factory\n     * if not specified in the params.\n     * @param params The parameters to create the app client\n     * @returns The \\`AppClient\\`\n     */\n    public getAppClientById(params: AppFactoryAppClientParams) {\n      return new ${name}Client(this.appFactory.getAppClientById(params))\n    }\n\n    /**\n     * Returns a new \\`AppClient\\` client, resolving the app by creator address and name\n     * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n     *\n     * Automatically populates appName, defaultSender and source maps from the factory\n     * if not specified in the params.\n     * @param params The parameters to create the app client\n     * @returns The \\`AppClient\\`\n     */\n    public async getAppClientByCreatorAndName(\n      params: AppFactoryResolveAppClientByCreatorAndNameParams,\n    ) {\n      return new ${name}Client(await this.appFactory.getAppClientByCreatorAndName(params))\n    }\n  `\n\n  yield* deployMethod(ctx)\n  yield* params(ctx)\n  yield* createTransaction(ctx)\n  yield* send(ctx)\n  yield DecIndentAndCloseBlock\n}\n\nfunction* params(ctx: GeneratorContext): DocumentParts {\n  yield* jsDoc(\n    `Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.`,\n  )\n  yield `readonly params = {`\n  yield IncIndent\n  yield* paramMethods(ctx)\n  yield DecIndentAndCloseBlock\n  yield NewLine\n}\n\nfunction* createTransaction(ctx: GeneratorContext): DocumentParts {\n  yield* jsDoc(`Create transactions for the current app`)\n  yield `readonly createTransaction = {`\n  yield IncIndent\n  yield* createTransactionMethods(ctx)\n  yield DecIndentAndCloseBlock\n  yield NewLine\n}\n\nfunction* send(ctx: GeneratorContext): DocumentParts {\n  yield* jsDoc(`Send calls to the current app`)\n  yield `readonly send = {`\n  yield IncIndent\n  yield* createMethods(ctx)\n  yield DecIndentAndCloseBlock\n  yield NewLine\n}\n\nfunction* createMethods(generator: GeneratorContext): DocumentParts {\n  const { app } = generator\n  if (generator.callConfig.createMethods.length) {\n    yield* jsDoc(`Gets available create methods`)\n    yield `create: {`\n    yield IncIndent\n    for (const methodSig of generator.callConfig.createMethods) {\n      if (methodSig === BARE_CALL) {\n        yield* bareMethodCallParams({\n          generator,\n          name: 'bare',\n          description: `Creates a new instance of the ${app.name} smart contract using a bare call`,\n          verb: 'create',\n          type: 'send',\n          includeCompilation: true,\n        })\n      } else {\n        const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n        yield* abiMethodCallParams({\n          generator,\n          method,\n          description: `Creates a new instance of the ${app.name} smart contract using an ABI method call`,\n          verb: 'create',\n          type: 'send',\n          includeCompilation: true,\n        })\n      }\n    }\n    yield DecIndent\n    yield '},'\n    yield NewLine\n  }\n}\n\nfunction* paramMethods(ctx: GeneratorContext): DocumentParts {\n  const { app, callConfig } = ctx\n\n  yield* operationMethods(\n    ctx,\n    `Creates a new instance of the ${app.name} smart contract`,\n    callConfig.createMethods,\n    'create',\n    'params',\n    true,\n  )\n\n  yield* operationMethods(\n    ctx,\n    `Updates an existing instance of the ${app.name} smart contract`,\n    callConfig.updateMethods,\n    'deployUpdate',\n    'params',\n    true,\n  )\n  yield* operationMethods(\n    ctx,\n    `Deletes an existing instance of the ${app.name} smart contract`,\n    callConfig.deleteMethods,\n    'deployDelete',\n    'params',\n  )\n}\n\nfunction* createTransactionMethods(ctx: GeneratorContext): DocumentParts {\n  const { app, callConfig } = ctx\n\n  yield* operationMethods(\n    ctx,\n    `Creates a new instance of the ${app.name} smart contract`,\n    callConfig.createMethods,\n    'create',\n    'createTransaction',\n    true,\n  )\n}\n\nfunction* bareMethodCallParams({\n  generator: { app, name: clientName },\n  name,\n  description,\n  verb,\n  type,\n  includeCompilation,\n}: {\n  generator: GeneratorContext\n  name: string\n  description: string\n  verb: 'create' | 'deployUpdate' | 'deployDelete'\n  type: 'params' | 'createTransaction' | 'send'\n  includeCompilation?: boolean\n}): DocumentParts {\n  const onComplete = verb === 'create' ? getCreateOnCompleteOptions(BARE_CALL, app) : undefined\n  yield* jsDoc({\n    description: `${description}.`,\n    params: {\n      params: `The params for the bare (raw) call`,\n    },\n    returns:\n      type === 'params' || type === 'createTransaction'\n        ? `The ${type === 'createTransaction' ? 'transaction' : type} for a ${verb} call`\n        : `The ${verb} result`,\n  })\n  yield `${name}: ${type === 'send' ? 'async ' : ''}(params?: Expand<AppClientBareCallParams${\n    includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n  }${\n    verb === 'create' ? ' & CreateSchema' : ''\n  }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}>) => {`\n  if (type === 'params' || type === 'createTransaction') {\n    yield* indent(`return this.appFactory.${type}.bare.${verb}(params)`)\n  } else {\n    yield* indent(\n      `const result = await this.appFactory.send.bare.create(params)`,\n      `return { result: result.result, appClient: new ${clientName}Client(result.appClient) }`,\n    )\n  }\n  yield '},'\n}\n\nfunction* abiMethodCallParams({\n  generator: { app, methodSignatureToUniqueName, name, sanitizer },\n  method,\n  description,\n  verb,\n  type,\n  includeCompilation,\n}: {\n  generator: GeneratorContext\n  method: Method\n  description: string\n  verb: 'create' | 'deployUpdate' | 'deployDelete'\n  type: 'params' | 'createTransaction' | 'send'\n  includeCompilation?: boolean\n}) {\n  const methodSig = new ABIMethod(method).getSignature()\n  const uniqueName = methodSignatureToUniqueName[methodSig]\n  const onComplete = verb === 'create' ? getCreateOnCompleteOptions(methodSig, app) : undefined\n  yield* jsDoc({\n    description: `${description} using the ${methodSig} ABI method.`,\n    abiDescription: method?.desc,\n    params: {\n      params: `The params for the smart contract call`,\n    },\n    returns: `The ${verb} ${type === 'params' ? 'params' : type === 'createTransaction' ? 'transaction' : 'result'}${method?.returns?.desc ? `: ${method.returns.desc}` : ''}`,\n  })\n  const methodName = sanitizer.makeSafeMethodIdentifier(uniqueName)\n  const methodNameAccessor = sanitizer.getSafeMemberAccessor(methodName)\n  const methodSigSafe = sanitizer.makeSafeStringTypeLiteral(methodSig)\n  yield `${methodName}: ${type === 'send' ? 'async ' : ''}(params: CallParams<${name}Args['obj']['${methodSigSafe}'] | ${name}Args['tuple']['${methodSigSafe}']>${\n    includeCompilation ? ' &' + ' AppClientCompilationParams' : ''\n  }${\n    verb === 'create' ? ' & CreateSchema' : ''\n  }${type === 'send' ? ' & SendParams' : ''}${onComplete?.type ? ` & ${onComplete.type}` : ''}${onComplete?.isOptional !== false && (method.args.length === 0 || !method.args.some((a) => !a.defaultValue)) ? ` = {args: [${method.args.map((_) => 'undefined').join(', ')}]}` : ''}) => {`\n  if (type === 'params' || type === 'createTransaction') {\n    yield* indent(\n      `return this.appFactory.${type}.${verb}(${name}ParamsFactory.${verb == 'deployDelete' ? 'delete' : verb === 'deployUpdate' ? 'update' : verb}${methodNameAccessor}(params))`,\n    )\n  } else {\n    yield* indent(\n      `const result = await this.appFactory.send.create(${name}ParamsFactory.${verb}${methodNameAccessor}(params))`,\n      `return { result: { ...result.result, return: result.result.return as unknown as (undefined | ${name}Returns['${methodSigSafe}']) }, appClient: new ${name}Client(result.appClient) }`,\n    )\n  }\n  yield '},'\n}\n\nfunction* operationMethods(\n  generator: GeneratorContext,\n  description: string,\n  methods: MethodList,\n  verb: 'create' | 'deployUpdate' | 'deployDelete',\n  type: 'params' | 'createTransaction',\n  includeCompilation?: boolean,\n): DocumentParts {\n  if (methods.length) {\n    yield* jsDoc(`Gets available ${verb} methods`)\n    yield `${verb}: {`\n    yield IncIndent\n    for (const methodSig of methods) {\n      if (methodSig === BARE_CALL) {\n        yield* bareMethodCallParams({\n          generator,\n          name: 'bare',\n          description: `${description} using a bare call`,\n          verb,\n          type,\n          includeCompilation,\n        })\n      } else {\n        const method = generator.app.methods.find((m) => new ABIMethod(m).getSignature() === methodSig)!\n        yield* abiMethodCallParams({\n          generator,\n          method,\n          description,\n          verb,\n          type,\n          includeCompilation,\n        })\n      }\n    }\n    yield DecIndent\n    yield '},'\n    yield NewLine\n  }\n}\n\nfunction* deployMethod(ctx: GeneratorContext): DocumentParts {\n  const { app, callConfig, name } = ctx\n  yield* jsDoc({\n    description: `Idempotently deploys the ${app.name} smart contract.`,\n    params: {\n      params: 'The arguments for the contract calls and any additional parameters for the call',\n    },\n    returns: 'The deployment result',\n  })\n  yield `public async deploy(params: ${name}DeployParams = {}) {`\n  yield IncIndent\n\n  yield `const result = await this.appFactory.deploy({`\n  yield IncIndent\n  yield `...params,`\n  if (callConfig.createMethods.filter((m) => m !== BARE_CALL).length) {\n    yield `createParams: params.createParams?.method ? ${name}ParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (${name}CreateCallParams & { args: Uint8Array[] }) : undefined,`\n  }\n  if (callConfig.updateMethods.filter((m) => m !== BARE_CALL).length) {\n    yield `updateParams: params.updateParams?.method ? ${name}ParamsFactory.update._resolveByMethod(params.updateParams) : params.updateParams ? params.updateParams as (${name}UpdateCallParams & { args: Uint8Array[] }) : undefined,`\n  }\n  if (callConfig.deleteMethods.filter((m) => m !== BARE_CALL).length) {\n    yield `deleteParams: params.deleteParams?.method ? ${name}ParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (${name}DeleteCallParams & { args: Uint8Array[] }) : undefined,`\n  }\n  yield DecIndent\n  yield `})`\n  yield `return { result: result.result, appClient: new ${name}Client(result.appClient) }`\n  yield DecIndentAndCloseBlock\n  yield NewLine\n}\n"],"names":[],"mappings":";;;;;AAOM,UAAW,UAAU,CAAC,GAAqB,EAAA;AAC/C,IAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG;IAEzB,OAAO,KAAK,CACV,CAAA,2DAAA,EAA8D,GAAG,CAAC,IAAI,CAAA,qGAAA,CAAuG,CAC9K;IACD,MAAM,CAAA,aAAA,EAAgB,IAAI,CAAA,SAAA,CAAW;AACrC,IAAA,MAAM,SAAS;AACf,IAAA,OAAO,KAAK,CAAC,CAAA,wEAAA,CAA0E,CAAC;AACxF,IAAA,MAAM,yCAAyC;AAC/C,IAAA,MAAM,OAAO;IAEb,OAAO,KAAK,CAAC;QACX,WAAW,EAAE,CAAA,4BAAA,EAA+B,IAAI,CAAA,SAAA,CAAW;AAC3D,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,mDAAmD;AAC5D,SAAA;AACF,KAAA,CAAC;IAEF,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAgCW,IAAI,CAAA;;;;;;;;;;;;;;;mBAeJ,IAAI,CAAA;;GAEpB;AAED,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC;AACxB,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC;AAClB,IAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC;AAC7B,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC;AAChB,IAAA,MAAM,sBAAsB;AAC9B;AAEA,UAAU,MAAM,CAAC,GAAqB,EAAA;AACpC,IAAA,OAAO,KAAK,CACV,CAAA,6LAAA,CAA+L,CAChM;AACD,IAAA,MAAM,qBAAqB;AAC3B,IAAA,MAAM,SAAS;AACf,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC;AACxB,IAAA,MAAM,sBAAsB;AAC5B,IAAA,MAAM,OAAO;AACf;AAEA,UAAU,iBAAiB,CAAC,GAAqB,EAAA;AAC/C,IAAA,OAAO,KAAK,CAAC,CAAA,uCAAA,CAAyC,CAAC;AACvD,IAAA,MAAM,gCAAgC;AACtC,IAAA,MAAM,SAAS;AACf,IAAA,OAAO,wBAAwB,CAAC,GAAG,CAAC;AACpC,IAAA,MAAM,sBAAsB;AAC5B,IAAA,MAAM,OAAO;AACf;AAEA,UAAU,IAAI,CAAC,GAAqB,EAAA;AAClC,IAAA,OAAO,KAAK,CAAC,CAAA,6BAAA,CAA+B,CAAC;AAC7C,IAAA,MAAM,mBAAmB;AACzB,IAAA,MAAM,SAAS;AACf,IAAA,OAAO,aAAa,CAAC,GAAG,CAAC;AACzB,IAAA,MAAM,sBAAsB;AAC5B,IAAA,MAAM,OAAO;AACf;AAEA,UAAU,aAAa,CAAC,SAA2B,EAAA;AACjD,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS;IACzB,IAAI,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AAC7C,QAAA,OAAO,KAAK,CAAC,CAAA,6BAAA,CAA+B,CAAC;AAC7C,QAAA,MAAM,WAAW;AACjB,QAAA,MAAM,SAAS;QACf,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,aAAa,EAAE;AAC1D,YAAA,IAAI,SAAS,KAAK,SAAS,EAAE;gBAC3B,OAAO,oBAAoB,CAAC;oBAC1B,SAAS;AACT,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,WAAW,EAAE,CAAA,8BAAA,EAAiC,GAAG,CAAC,IAAI,CAAA,iCAAA,CAAmC;AACzF,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,kBAAkB,EAAE,IAAI;AACzB,iBAAA,CAAC;YACJ;iBAAO;gBACL,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,SAAS,CAAE;gBAChG,OAAO,mBAAmB,CAAC;oBACzB,SAAS;oBACT,MAAM;AACN,oBAAA,WAAW,EAAE,CAAA,8BAAA,EAAiC,GAAG,CAAC,IAAI,CAAA,wCAAA,CAA0C;AAChG,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,kBAAkB,EAAE,IAAI;AACzB,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,MAAM,SAAS;AACf,QAAA,MAAM,IAAI;AACV,QAAA,MAAM,OAAO;IACf;AACF;AAEA,UAAU,YAAY,CAAC,GAAqB,EAAA;AAC1C,IAAA,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG;IAE/B,OAAO,gBAAgB,CACrB,GAAG,EACH,CAAA,8BAAA,EAAiC,GAAG,CAAC,IAAI,CAAA,eAAA,CAAiB,EAC1D,UAAU,CAAC,aAAa,EACxB,QAAQ,EACR,QAAQ,EACR,IAAI,CACL;IAED,OAAO,gBAAgB,CACrB,GAAG,EACH,CAAA,oCAAA,EAAuC,GAAG,CAAC,IAAI,CAAA,eAAA,CAAiB,EAChE,UAAU,CAAC,aAAa,EACxB,cAAc,EACd,QAAQ,EACR,IAAI,CACL;IACD,OAAO,gBAAgB,CACrB,GAAG,EACH,CAAA,oCAAA,EAAuC,GAAG,CAAC,IAAI,iBAAiB,EAChE,UAAU,CAAC,aAAa,EACxB,cAAc,EACd,QAAQ,CACT;AACH;AAEA,UAAU,wBAAwB,CAAC,GAAqB,EAAA;AACtD,IAAA,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG;IAE/B,OAAO,gBAAgB,CACrB,GAAG,EACH,CAAA,8BAAA,EAAiC,GAAG,CAAC,IAAI,CAAA,eAAA,CAAiB,EAC1D,UAAU,CAAC,aAAa,EACxB,QAAQ,EACR,mBAAmB,EACnB,IAAI,CACL;AACH;AAEA,UAAU,oBAAoB,CAAC,EAC7B,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EACpC,IAAI,EACJ,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,kBAAkB,GAQnB,EAAA;AACC,IAAA,MAAM,UAAU,GAAG,IAAI,KAAK,QAAQ,GAAG,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,SAAS;IAC7F,OAAO,KAAK,CAAC;QACX,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,CAAA,CAAG;AAC9B,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,CAAA,kCAAA,CAAoC;AAC7C,SAAA;AACD,QAAA,OAAO,EACL,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK;AAC5B,cAAE,CAAA,IAAA,EAAO,IAAI,KAAK,mBAAmB,GAAG,aAAa,GAAG,IAAI,CAAA,OAAA,EAAU,IAAI,CAAA,KAAA;cACxE,CAAA,IAAA,EAAO,IAAI,CAAA,OAAA,CAAS;AAC3B,KAAA,CAAC;AACF,IAAA,MAAM,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAA,wCAAA,EAC/C,kBAAkB,GAAG,IAAI,GAAG,6BAA6B,GAAG,EAC9D,CAAA,EACE,IAAI,KAAK,QAAQ,GAAG,iBAAiB,GAAG,EAC1C,CAAA,EAAG,IAAI,KAAK,MAAM,GAAG,eAAe,GAAG,EAAE,CAAA,EAAG,UAAU,EAAE,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAA,CAAE,GAAG,EAAE,SAAS;IACpG,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,mBAAmB,EAAE;QACrD,OAAO,MAAM,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAA,MAAA,EAAS,IAAI,CAAA,QAAA,CAAU,CAAC;IACtE;SAAO;QACL,OAAO,MAAM,CACX,CAAA,6DAAA,CAA+D,EAC/D,CAAA,+CAAA,EAAkD,UAAU,CAAA,0BAAA,CAA4B,CACzF;IACH;AACA,IAAA,MAAM,IAAI;AACZ;AAEA,UAAU,mBAAmB,CAAC,EAC5B,SAAS,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,IAAI,EAAE,SAAS,EAAE,EAChE,MAAM,EACN,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,kBAAkB,GAQnB,EAAA;IACC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;AACtD,IAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,SAAS,CAAC;AACzD,IAAA,MAAM,UAAU,GAAG,IAAI,KAAK,QAAQ,GAAG,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,SAAS;IAC7F,OAAO,KAAK,CAAC;AACX,QAAA,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,WAAA,EAAc,SAAS,CAAA,YAAA,CAAc;QAChE,cAAc,EAAE,MAAM,EAAE,IAAI;AAC5B,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,CAAA,sCAAA,CAAwC;AACjD,SAAA;QACD,OAAO,EAAE,OAAO,IAAI,CAAA,CAAA,EAAI,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,IAAI,KAAK,mBAAmB,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA,CAAE;AAC3K,KAAA,CAAC;IACF,MAAM,UAAU,GAAG,SAAS,CAAC,wBAAwB,CAAC,UAAU,CAAC;IACjE,MAAM,kBAAkB,GAAG,SAAS,CAAC,qBAAqB,CAAC,UAAU,CAAC;IACtE,MAAM,aAAa,GAAG,SAAS,CAAC,yBAAyB,CAAC,SAAS,CAAC;AACpE,IAAA,MAAM,CAAA,EAAG,UAAU,CAAA,EAAA,EAAK,IAAI,KAAK,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAA,aAAA,EAAgB,aAAa,CAAA,KAAA,EAAQ,IAAI,CAAA,eAAA,EAAkB,aAAa,CAAA,GAAA,EACxJ,kBAAkB,GAAG,IAAI,GAAG,6BAA6B,GAAG,EAC9D,CAAA,EACE,IAAI,KAAK,QAAQ,GAAG,iBAAiB,GAAG,EAC1C,CAAA,EAAG,IAAI,KAAK,MAAM,GAAG,eAAe,GAAG,EAAE,CAAA,EAAG,UAAU,EAAE,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAA,CAAE,GAAG,EAAE,CAAA,EAAG,UAAU,EAAE,UAAU,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAA,WAAA,EAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,GAAG,EAAE,QAAQ;IACzR,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,mBAAmB,EAAE;AACrD,QAAA,OAAO,MAAM,CACX,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,iBAAiB,IAAI,IAAI,cAAc,GAAG,QAAQ,GAAG,IAAI,KAAK,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAA,EAAG,kBAAkB,CAAA,SAAA,CAAW,CAC7K;IACH;SAAO;QACL,OAAO,MAAM,CACX,oDAAoD,IAAI,CAAA,cAAA,EAAiB,IAAI,CAAA,EAAG,kBAAkB,WAAW,EAC7G,CAAA,6FAAA,EAAgG,IAAI,CAAA,SAAA,EAAY,aAAa,yBAAyB,IAAI,CAAA,0BAAA,CAA4B,CACvL;IACH;AACA,IAAA,MAAM,IAAI;AACZ;AAEA,UAAU,gBAAgB,CACxB,SAA2B,EAC3B,WAAmB,EACnB,OAAmB,EACnB,IAAgD,EAChD,IAAoC,EACpC,kBAA4B,EAAA;AAE5B,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,OAAO,KAAK,CAAC,kBAAkB,IAAI,CAAA,QAAA,CAAU,CAAC;QAC9C,MAAM,CAAA,EAAG,IAAI,CAAA,GAAA,CAAK;AAClB,QAAA,MAAM,SAAS;AACf,QAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;AAC/B,YAAA,IAAI,SAAS,KAAK,SAAS,EAAE;gBAC3B,OAAO,oBAAoB,CAAC;oBAC1B,SAAS;AACT,oBAAA,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,CAAA,EAAG,WAAW,CAAA,kBAAA,CAAoB;oBAC/C,IAAI;oBACJ,IAAI;oBACJ,kBAAkB;AACnB,iBAAA,CAAC;YACJ;iBAAO;gBACL,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,SAAS,CAAE;gBAChG,OAAO,mBAAmB,CAAC;oBACzB,SAAS;oBACT,MAAM;oBACN,WAAW;oBACX,IAAI;oBACJ,IAAI;oBACJ,kBAAkB;AACnB,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,MAAM,SAAS;AACf,QAAA,MAAM,IAAI;AACV,QAAA,MAAM,OAAO;IACf;AACF;AAEA,UAAU,YAAY,CAAC,GAAqB,EAAA;IAC1C,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG;IACrC,OAAO,KAAK,CAAC;AACX,QAAA,WAAW,EAAE,CAAA,yBAAA,EAA4B,GAAG,CAAC,IAAI,CAAA,gBAAA,CAAkB;AACnE,QAAA,MAAM,EAAE;AACN,YAAA,MAAM,EAAE,iFAAiF;AAC1F,SAAA;AACD,QAAA,OAAO,EAAE,uBAAuB;AACjC,KAAA,CAAC;IACF,MAAM,CAAA,4BAAA,EAA+B,IAAI,CAAA,oBAAA,CAAsB;AAC/D,IAAA,MAAM,SAAS;AAEf,IAAA,MAAM,+CAA+C;AACrD,IAAA,MAAM,SAAS;AACf,IAAA,MAAM,YAAY;AAClB,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,EAAE;AAClE,QAAA,MAAM,CAAA,4CAAA,EAA+C,IAAI,CAAA,2GAAA,EAA8G,IAAI,yDAAyD;IACtO;AACA,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,EAAE;AAClE,QAAA,MAAM,CAAA,4CAAA,EAA+C,IAAI,CAAA,2GAAA,EAA8G,IAAI,yDAAyD;IACtO;AACA,IAAA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,MAAM,EAAE;AAClE,QAAA,MAAM,CAAA,4CAAA,EAA+C,IAAI,CAAA,2GAAA,EAA8G,IAAI,yDAAyD;IACtO;AACA,IAAA,MAAM,SAAS;AACf,IAAA,MAAM,IAAI;IACV,MAAM,CAAA,+CAAA,EAAkD,IAAI,CAAA,0BAAA,CAA4B;AACxF,IAAA,MAAM,sBAAsB;AAC5B,IAAA,MAAM,OAAO;AACf;;;;"}