@accelbyte/codegen 1.0.0-alpha.7 → 1.0.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -104,10 +104,14 @@ class ParserUtils {
104
104
  return `${attrName}: ${defaultValue}`;
105
105
  };
106
106
  static parseType = (pathParam) => {
107
- if (pathParam.type === "int" || pathParam.type === "integer")
107
+ if (pathParam.type === "int" || pathParam.type === "integer" || pathParam?.schema?.type === "integer")
108
108
  return "number";
109
109
  if (pathParam.type === "array")
110
110
  return `${pathParam.items.type ?? "any"}[]`;
111
+ if (pathParam?.schema?.type === "array")
112
+ return `${pathParam.schema.items.type ?? "any"}[]`;
113
+ if (pathParam?.schema?.type)
114
+ return pathParam.schema.type;
111
115
  return pathParam.type;
112
116
  };
113
117
  static parseQueryParamsType = (queryParams) => {
@@ -160,7 +164,7 @@ class ParserUtils {
160
164
  if (definition.type && ParserUtils.parseType(definition) === "number") {
161
165
  return `${attrName}${required}: number`;
162
166
  }
163
- if (definition?.schema?.type && ParserUtils.parseType(definition.schema) === "number") {
167
+ if (definition?.schema?.type && ParserUtils.parseType(definition) === "number") {
164
168
  return `${attrName}${required}: number`;
165
169
  }
166
170
  if (definition.type && definition.type === "array") {
@@ -252,8 +256,8 @@ class ParserUtils {
252
256
  }
253
257
  let classMethod = httpMethod + "/" + replacedIdsPath;
254
258
  classMethod = _.camelCase(classMethod);
255
- classMethod = classMethod.replace("PublicNamespacesByNamespace", "");
256
- classMethod = classMethod.replace("AdminNamespacesByNamespace", "Admin");
259
+ classMethod = classMethod.replace("PublicNamespacesByNamespace", "Ns");
260
+ classMethod = classMethod.replace("AdminNamespacesByNamespace", "AdminNs");
257
261
  const searchWord = "NamespacesByNamespace";
258
262
  const nsExistInsideMethod = classMethod.indexOf(searchWord) > 0 && classMethod.indexOf(searchWord) + searchWord.length < classMethod.length;
259
263
  const excludedClasses = ["Policies"];
@@ -353,7 +357,7 @@ const Schema = z.object({
353
357
  $ref: z.string().nullish(),
354
358
  type: z.string().nullish()
355
359
  }).nullish(),
356
- properties: z.array(z.string()).nullish(),
360
+ properties: z.union([z.array(z.string()).nullish(), z.record(z.object({ type: z.string() })).nullish()]),
357
361
  description: z.string().nullish(),
358
362
  additionalProperties: z.object({
359
363
  type: z.string().nullish()
@@ -398,7 +402,15 @@ const Endpoint = z.object({
398
402
  })
399
403
  }).nullish()
400
404
  })),
401
- parameters: z.array(EndpointParameters).nullish()
405
+ parameters: z.array(EndpointParameters).nullish(),
406
+ requestBody: z.object({
407
+ required: z.boolean(),
408
+ content: z.object({
409
+ "application/json": z.object({
410
+ schema: Schema.nullish()
411
+ })
412
+ }).nullish()
413
+ }).nullish()
402
414
  });
403
415
  const Operation = z.object({
404
416
  get: Endpoint.nullish(),
@@ -615,13 +627,17 @@ class TemplateZod {
615
627
  if (definition.additionalProperties) {
616
628
  return this.parseToZodAttribute("", definition, []);
617
629
  }
618
- if (!definition.properties) {
630
+ let properties;
631
+ if (definition.properties) {
632
+ properties = Object.entries(definition.properties);
633
+ } else if (definition.items?.properties) {
634
+ properties = Object.entries(definition.items.properties);
635
+ } else {
619
636
  return {
620
637
  schemaString: "z.any()",
621
638
  typeString: "any"
622
639
  };
623
640
  }
624
- const properties = Object.entries(definition.properties);
625
641
  const schemaFields = [];
626
642
  const typeFields = [];
627
643
  for (const property of properties) {
@@ -630,6 +646,12 @@ class TemplateZod {
630
646
  schemaFields.push(result.schemaString);
631
647
  typeFields.push(result.typeString);
632
648
  }
649
+ if (definition?.type === "array") {
650
+ return {
651
+ schemaString: `z.array(z.object({${schemaFields.join(",")}}))`,
652
+ typeString: typeFields.join(";")
653
+ };
654
+ }
633
655
  return {
634
656
  schemaString: `z.object({${schemaFields.join(",")}})`,
635
657
  typeString: typeFields.join(";")
@@ -685,8 +707,8 @@ class TemplateZod {
685
707
  model2 = this.parseEnumItems(items);
686
708
  } else {
687
709
  return {
688
- schemaString: `${schemaAttribute} z.array(z.unknown())${schemaRequired}`,
689
- typeString: `${typeAttribute} z.unknown()[]${typeNullishability}`
710
+ schemaString: `${schemaAttribute} z.array(z.any())${schemaRequired}`,
711
+ typeString: `${typeAttribute} any[]${typeNullishability}`
690
712
  };
691
713
  }
692
714
  return {
@@ -837,13 +859,22 @@ class CodeGenerator {
837
859
  const isFormUrlEncoded = ParserUtils.isFormUrlEncoded(httpMethod, endpoint.consumes);
838
860
  const queryParams = ParserUtils.filterQueryParameters(endpoint.parameters);
839
861
  const pathParams = ParserUtils.filterPathParams(endpoint.parameters);
840
- const bodyParams = ParserUtils.filterBodyParams(endpoint.parameters);
862
+ let bodyParams = ParserUtils.filterBodyParams(endpoint.parameters);
841
863
  const classMethod = ParserUtils.generateClassMethod({
842
864
  path: path2,
843
865
  endpoint,
844
866
  httpMethod,
845
867
  className
846
868
  });
869
+ if (endpoint.requestBody) {
870
+ bodyParams = [
871
+ {
872
+ name: "body",
873
+ in: "body",
874
+ schema: endpoint.requestBody.content["application/json"].schema
875
+ }
876
+ ];
877
+ }
847
878
  const pathWithBase = `${api.basePath ?? ""}${path2}`;
848
879
  const [generatedMethodString, importStatements] = templateMethod({
849
880
  classMethod,
@@ -1 +1 @@
1
- {"version":3,"file":"accelbyte-codegen.mjs","sources":["../src/CliParser.ts","../src/templates/template-class.ts","../src/templates/template-jsdoc-file.ts","../src/ParserUtils.ts","../src/Swagger.ts","../src/templates/template-jsdoc-method.ts","../src/templates/template-method.ts","../src/templates/template-zod.ts","../src/CodeGenerator.ts","../src/SwaggerDownloader.ts","../src/cli.ts"],"sourcesContent":["/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { Argv } from 'yargs'\nimport { z } from 'zod'\nimport fs from 'fs'\nimport * as path from 'path'\n\nconst SwaggersConfig = z.array(z.array(z.string()))\ntype SwaggersConfig = z.TypeOf<typeof SwaggersConfig>\n\nexport interface CliOption\n extends Argv<{\n config: string\n swaggersOutput: string\n output: string\n admin: boolean\n }> {}\n\nexport class CliParser {\n private static _instance: CliParser\n public argv\n constructor(yargs: CliOption) {\n this.argv = yargs.parse()\n }\n\n public static createInstance = (yargs: CliOption) => {\n CliParser._instance = new CliParser(yargs)\n return CliParser._instance\n }\n\n private static instance = (yargs?: CliOption) => {\n if (!CliParser._instance && yargs) {\n return CliParser.createInstance(yargs)\n }\n return CliParser._instance\n }\n\n public static getConfigPath = (): string => {\n return CliParser.instance().argv.config\n }\n\n public static getConfigFile = (): SwaggersConfig => {\n const configPath = CliParser.getConfigPath()\n if (!configPath) throw new Error('Missing config file')\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8'))\n if (!SwaggersConfig.safeParse(config).success) {\n throw new Error('Wrong config file format')\n }\n return config\n }\n\n public static getOutputPath = (): string => {\n return CliParser.instance().argv.output\n }\n\n public static getSwaggersOutputPath = (): string => {\n return CliParser.instance().argv.swaggersOutput\n }\n\n public static getResolvedSwaggersOutputPath = (): string => {\n return path.resolve(CliParser.getSwaggersOutputPath())\n }\n\n public static isAdmin = (): boolean => {\n return CliParser.instance().argv.admin\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nconst getImportableVarMap = () => ({\n '@accelbyte/sdk': ['CodeGenUtil', 'SdkCache', 'IResponse', 'IResponseWithSync', 'Validate'],\n axios: ['AxiosRequestConfig', 'AxiosResponse'],\n zod: ['z']\n})\n\nconst makeNewImportVarMap = () => ({\n axios: ['AxiosInstance'],\n '@accelbyte/sdk': ['SDKRequestConfig']\n})\n\nconst generateImports = (body: string, importStatements: string[]) => {\n const usedImportVarMap = makeNewImportVarMap()\n const importableVarMap = getImportableVarMap()\n\n for (const [moduleSource, importableVars] of Object.entries(importableVarMap)) {\n for (const importableVar of importableVars) {\n const importVarRegex = new RegExp(`(?<![\\\\d\\\\w_])${importableVar}(?![\\\\d\\\\w_])`)\n if (body.match(importVarRegex)) {\n usedImportVarMap[moduleSource] = [...(usedImportVarMap[moduleSource] || []), importableVar]\n }\n }\n }\n\n const generatedImports = Object.keys(usedImportVarMap)\n .sort()\n .map((moduleSource: string) => `import { ${usedImportVarMap[moduleSource].sort().join(', ')} } from '${moduleSource}'`)\n .join('\\n')\n return `${generatedImports}\\n${importStatements.sort().join('\\n')}`\n}\n\nexport const templateClass = (className: string, body: string, importStatements: string[]): string =>\n `/**\n * DON'T EDIT THIS FILE, it is AUTO GENERATED\n */\n ${generateImports(body, importStatements)}\n\n export class ${className} {\n // @ts-ignore\n constructor(private axiosInstance: AxiosInstance, private namespace: string, private cache = false) {}\n ${body}\n }\n `\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport const templateJsdocFile = (apiName, body) =>\n `\n\\`\\`\\`\nSDK.getService('${apiName}', authHeader):\n${body}\n\n\\`\\`\\`\n`\n .replace(/, \\)/g, ')')\n .trim()\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { applyPatch } from 'fast-json-patch'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport path from 'path'\nimport { Endpoint, EndpointParameters, Schema } from './Swagger'\nimport { templateClass } from './templates/template-class'\nimport { templateJsdocFile } from './templates/template-jsdoc-file'\n\nexport class ParserUtils {\n static parseQueryParamAttributeDefault = (definition: EndpointParameters) => {\n const attrName = definition.name.slice(definition.name.lastIndexOf('.') + 1)\n const defaultValue = definition.type === 'string' ? `'${definition.default}'` : definition.default\n return `${attrName}: ${defaultValue}`\n }\n\n static parseType = (pathParam: EndpointParameters | Schema) => {\n if (pathParam.type === 'int' || pathParam.type === 'integer') return 'number'\n if (pathParam.type === 'array') return `${pathParam.items.type ?? 'any'}[]`\n return pathParam.type\n }\n\n static parseQueryParamsType = (queryParams: EndpointParameters[]) => {\n return queryParams.map(queryParam => ParserUtils.parseAttributeType(queryParam)).join(',')\n }\n\n static isAnyQueryParamRequired = (queryParams: EndpointParameters[]) => {\n return queryParams.some(queryParam => queryParam.required)\n }\n\n static parseQueryParamsDefault = (queryParams: EndpointParameters[]) => {\n const result = queryParams\n .filter(queryParam => !!queryParam.default && !queryParam.required)\n .map(ParserUtils.parseQueryParamAttributeDefault)\n .join(',')\n return result ? `${result},` : ''\n }\n\n static parseBodyParamsImports = (bodyParams: EndpointParameters[]) => {\n return bodyParams.map(ParserUtils.parseRefImport).filter(Boolean)\n }\n\n static parseImportDir = ($ref: string) => {\n let ref = $ref.replace('.', '/')\n if (ref[ref.length - 1] === '.' || ref[ref.length - 1] === '/') {\n ref = ref.slice(0, -1)\n }\n if (!ref.includes('/')) {\n return ''\n } else {\n return ref.slice(0, ref.lastIndexOf('/')).replace('#', '.')\n }\n }\n\n static parseRefImport = (bodyParam: EndpointParameters) => {\n const $ref = bodyParam?.schema?.$ref || bodyParam?.schema?.items?.$ref\n if (!$ref) {\n return null\n }\n const type = ParserUtils.parseRefType($ref)\n // const dir = ParserUtils.parseImportDir($ref)\n // return `import {${type}} from '${dir}/${type}'`\n return `import { ${type} } from './definitions/${type}'`\n }\n\n static parseRefType = ($ref: string) => {\n let ref = $ref.replace('.', '/')\n if (ref[ref.length - 1] === '.' || ref[ref.length - 1] === '/') {\n ref = ref.slice(0, -1)\n }\n const val = ref.slice(ref.lastIndexOf('/') + 1)\n // Converting it to TitleCase breaks schema refs. E.g. UserDataURL schema is converted to UserDataUrl breaking refs\n return _.upperFirst(_.camelCase(val)).replace(/( \\w)/g, group => group.replace(' ', '').toUpperCase())\n }\n\n static parseAttributeType = (definition: EndpointParameters) => {\n const required = definition.required ? '' : '?'\n\n const attrName = definition.name.slice(definition.name.lastIndexOf('.') + 1)\n\n if (definition.enum) {\n const enums = definition.enum.map(enm => (definition.type === 'string' ? `'${enm}'` : enm)).join(' | ')\n return `${attrName}${required}: ${enums}`\n }\n\n if (definition.type && ParserUtils.parseType(definition) === 'number') {\n return `${attrName}${required}: number`\n }\n\n if (definition?.schema?.type && ParserUtils.parseType(definition.schema) === 'number') {\n return `${attrName}${required}: number`\n }\n\n if (definition.type && definition.type === 'array') {\n return `${attrName}${required}: ${definition.items.type ?? 'any'}[]`\n }\n\n if (definition?.schema?.type && definition.schema.type === 'array') {\n return `${attrName}${required}: ${definition.schema.items.type ?? 'any'}[]`\n }\n\n if (definition.type && definition.type) {\n return `${attrName}${required}: ${definition.type} | null`\n }\n\n if (definition?.schema?.type && definition.schema.type) {\n return `${attrName}${required}: ${definition.schema.type} | null`\n }\n\n return `${attrName}${required}: any`\n }\n\n static parseBodyParamsType = (bodyParams: EndpointParameters[]): string => {\n const [bodyParam] = bodyParams\n\n if (!bodyParam) return null\n\n if (bodyParams.length > 0 && bodyParam?.name !== 'body' && !bodyParam?.schema) {\n let retBodyParams = `{${bodyParams.map(bodyParam => ParserUtils.parseAttributeType(bodyParam)).join(',')}}`\n retBodyParams = retBodyParams.replace('file?: file', 'file?: File') // fixed TS type File\n return retBodyParams\n }\n\n if (bodyParam?.schema?.type === 'array' && !bodyParam?.schema?.items?.$ref) {\n return `${bodyParam.schema.items.type ?? 'any'}[]`\n }\n\n if (bodyParam?.schema?.type === 'array' && bodyParam?.schema?.items?.$ref) {\n return `${ParserUtils.parseRefType(bodyParam.schema.items.$ref)}[]`\n }\n\n if (bodyParam?.schema.$ref) {\n return ParserUtils.parseRefType(bodyParam.schema.$ref)\n }\n\n if (bodyParam?.schema?.additionalProperties?.type === 'object') {\n return 'any'\n }\n\n return null\n }\n\n static get2xxResponse(methodEntity: Endpoint['responses']): string {\n const keys = Object.keys(methodEntity)\n let responseClass = null\n keys.forEach(key => {\n if (String(key).startsWith('2')) {\n const sch = methodEntity[key].schema\n const schV3 = methodEntity[key].content && methodEntity[key].content['application/json'].schema\n if (sch?.$ref) {\n responseClass = ParserUtils.parseRefType(sch.$ref)\n } else if (sch?.type === 'array' && sch.items?.$ref) {\n responseClass = ParserUtils.parseRefType(sch.items.$ref)\n responseClass = `${responseClass}Array` // Adds support for z.array() types\n } else if (schV3?.$ref) {\n responseClass = ParserUtils.parseRefType(schV3.$ref)\n } else {\n // TODO add support for non $ref types. E.g. { type: 'array', items: { type: 'string', enum: [ 'WALLET', 'XSOLLA', .. ] } }\n }\n }\n })\n\n return responseClass\n }\n\n static isFormUrlEncoded(httpMethod: string, contentTypes: string[]): boolean {\n if (!contentTypes || contentTypes.length < 1) {\n return false\n }\n if (!['post', 'put', 'patch'].includes(httpMethod)) {\n return false\n }\n return contentTypes.includes('application/x-www-form-urlencoded')\n }\n\n static filterPathParams(parameters?: EndpointParameters[]): EndpointParameters[] {\n if (!parameters) {\n return []\n }\n return parameters.filter(parameter => parameter.in === 'path')\n }\n\n static generateClassMethod({\n path,\n endpoint,\n httpMethod,\n className\n }: {\n path: string\n endpoint: Endpoint\n httpMethod: string\n className: string\n }): string {\n let replacedIdsPath = path\n if (endpoint.parameters) {\n for (const parameter of endpoint.parameters) {\n if (parameter.in === 'path') {\n replacedIdsPath = replacedIdsPath.replace('{' + parameter.name + '}', 'By' + ParserUtils.toTitleCaseWord(parameter.name))\n // remove bellow prefixes as they unnecessarily pollute method names getIamV30, etc ..\n replacedIdsPath = replacedIdsPath.replace('/iam', '')\n replacedIdsPath = replacedIdsPath.replace('/odin-config', '')\n }\n }\n }\n let classMethod = httpMethod + '/' + replacedIdsPath\n classMethod = _.camelCase(classMethod)\n\n // Replace long verbose methods with shorter names. e.g.\n // getPublicNamespacesByNamespaceBySomething -> getSomething\n // getAdminNamespacesByNamespaceBySomething -> getAdminSomething\n classMethod = classMethod.replace('PublicNamespacesByNamespace', '')\n classMethod = classMethod.replace('AdminNamespacesByNamespace', 'Admin')\n\n const searchWord = 'NamespacesByNamespace'\n const nsExistInsideMethod =\n classMethod.indexOf(searchWord) > 0 && classMethod.indexOf(searchWord) + searchWord.length < classMethod.length\n const excludedClasses = ['Policies'] // Policies replacement corrupts the file with duplicate methods, skip replacement\n if (nsExistInsideMethod && !excludedClasses.includes(className)) {\n classMethod = classMethod.replace(searchWord, '')\n }\n return classMethod\n }\n\n static filterBodyParams(parameters?: EndpointParameters[]) {\n if (Array.isArray(parameters) && parameters.length > 0) {\n return parameters.filter(parameter => parameter.in === 'body' || parameter.in === 'formData')\n }\n return []\n }\n\n static filterQueryParameters(parameters?: EndpointParameters[]): EndpointParameters[] {\n if (!parameters) {\n return []\n }\n return parameters.filter(parameter => parameter.in === 'query')\n }\n\n static mkdirIfNotExist(dirToCreate: string) {\n if (!fs.existsSync(dirToCreate)) {\n fs.mkdirSync(dirToCreate, { recursive: true })\n }\n }\n\n static writeClassFile(distDir: string, apiName: string, apiBuffer: string, imports?: string[]) {\n const fileContent = templateClass(apiName, apiBuffer, imports)\n fs.writeFileSync(`${distDir}/${apiName}.ts`, ParserUtils.prependCopyrightHeader(fileContent))\n }\n\n static writeJsdocFile(distDir: string, nameArray: string[], apiBuffer: string) {\n const jsdocFile = templateJsdocFile(nameArray[0], apiBuffer)\n fs.writeFileSync(`${distDir}/docs/${nameArray[0]}.md`, jsdocFile)\n }\n\n static writeDefinitionFile(distDir: string, name: string, buffer: string) {\n ParserUtils.mkdirIfNotExist(distDir)\n fs.writeFileSync(path.join(distDir, `${name}.ts`), ParserUtils.prependCopyrightHeader(buffer))\n }\n\n static writeAllImportsFile(distDir: string, buffer: string, isAdminWebSdk: boolean) {\n ParserUtils.mkdirIfNotExist(distDir)\n fs.writeFileSync(path.join(distDir, `all-${isAdminWebSdk ? 'admin' : 'public'}-imports.ts`), ParserUtils.prependCopyrightHeader(buffer))\n }\n\n static toCamelCase(str: string) {\n return str\n .split('/')\n .map(function (word, index) {\n // If it is the first word make sure to lowercase all the chars.\n if (index === 0) {\n return word.toLowerCase()\n }\n // If it is not the first word only upper case the first char\n return ParserUtils.toCamelCaseWord(word)\n })\n .join('')\n }\n\n static toCamelCaseWord(word: string) {\n if (!word) {\n return ''\n }\n // convert hyphen separated case to camel case\n word = word.replace(/(-\\w)/g, m => m[1].toUpperCase())\n // capitalize first letter\n return word.charAt(0).toUpperCase() + word.slice(1)\n }\n\n static toTitleCaseWord(word: string) {\n if (!word) {\n return ''\n }\n return word.replace(/\\w\\S*/g, txt => {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase()\n })\n }\n\n static applyPatchIfExists(\n swaggerFilePath: string,\n possibleSwaggerPatchFilePath: string,\n swaggerPatchedFilePath: string,\n swaggerPatchedDir: string\n ) {\n if (!fs.existsSync(swaggerPatchedDir)) {\n fs.mkdirSync(swaggerPatchedDir, { recursive: true })\n }\n\n if (!fs.existsSync(possibleSwaggerPatchFilePath)) {\n fs.copyFileSync(swaggerFilePath, swaggerPatchedFilePath)\n return\n }\n const swaggerContent = JSON.parse(fs.readFileSync(swaggerFilePath, 'utf8'))\n const swaggerPatchFileContent = JSON.parse(fs.readFileSync(possibleSwaggerPatchFilePath, 'utf8'))\n const { newDocument } = applyPatch(swaggerContent, swaggerPatchFileContent)\n fs.writeFileSync(swaggerPatchedFilePath, JSON.stringify(newDocument, null, 2))\n }\n\n static getRelativePathToWebSdkSrcFolder(srcFolder: string, targetSrcFolder: string) {\n // For example:\n // Input: ../../accelbyte-web-sdk/packages/sdk/src/generated/...\n // Output: ./generated/...\n // Need to replace for Windows as `/` becomes `\\`.\n const replaced = srcFolder.replace(/\\\\/g, '/')\n return replaced.replace(/\\\\/g, '/').replace(targetSrcFolder, './')\n }\n\n static prependCopyrightHeader = (content: string): string => {\n const currentYear = new Date().getFullYear()\n return `/* \n * Copyright (c) 2022${currentYear > 2022 ? `-${currentYear}` : ''} AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n${content}`\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nconst Schema = z.object({\n $ref: z.string().nullish(),\n type: z\n .union([z.literal('array'), z.literal('object'), z.literal('file'), z.literal('string'), z.literal('boolean'), z.literal('integer')])\n .nullish(),\n items: z\n .object({\n $ref: z.string().nullish(),\n type: z.string().nullish()\n })\n .nullish(),\n properties: z.array(z.string()).nullish(),\n description: z.string().nullish(),\n additionalProperties: z\n .object({\n type: z.string().nullish()\n })\n .nullish()\n})\n\nexport type Schema = z.TypeOf<typeof Schema>\n\nexport const Definition = z.object({\n required: z.array(z.string()).nullish(),\n properties: z\n .record(\n z.object({\n type: z.string()\n })\n )\n .nullish()\n})\n\nexport type Definition = z.TypeOf<typeof Definition>\n\nexport const Definitions = z.record(Definition)\n\nexport type Definitions = z.TypeOf<typeof Definitions>\n\nconst EndpointParametersType = z.enum(['apiKey', 'boolean', 'int', 'integer', 'number', 'string', 'array', 'file'])\nconst EndpointParametersIn = z.enum(['body', 'formData', 'header', 'path', 'query'])\n\nconst EndpointParameters = z.object({\n type: EndpointParametersType.nullish(),\n description: z.string().nullish(),\n name: z.string(),\n in: EndpointParametersIn,\n required: z.boolean().nullish(),\n schema: Schema.nullish(),\n default: z.union([z.boolean(), z.string(), z.number()]).nullish(),\n enum: z.array(z.union([z.boolean(), z.string(), z.number()])).nullish(),\n items: z\n .object({\n type: z.string()\n })\n .nullish()\n})\n\nexport type EndpointParameters = z.TypeOf<typeof EndpointParameters>\n\nexport const Endpoint = z.object({\n description: z.string().nullish(),\n consumes: z.array(z.string()).nullish(),\n produces: z.array(z.string()).nullish(),\n tags: z.array(z.string()).nullish(),\n summary: z.string().nullish(),\n operationId: z.string(),\n deprecated: z.boolean().nullish(),\n responses: z.record(\n z.object({\n description: z.string().nullish(),\n schema: Schema.nullish(),\n content: z\n .object({\n 'application/json': z.object({\n schema: Schema.nullish()\n })\n })\n .nullish()\n })\n ),\n parameters: z.array(EndpointParameters).nullish()\n})\nexport type Endpoint = z.TypeOf<typeof Endpoint>\n\nconst Operation = z.object({\n get: Endpoint.nullish(),\n post: Endpoint.nullish(),\n patch: Endpoint.nullish(),\n delete: Endpoint.nullish(),\n put: Endpoint.nullish()\n})\nexport type Operation = z.TypeOf<typeof Operation>\nexport type HttpMethod = keyof Operation\n\nexport const Paths = z.record(Operation)\n\nexport const OpenApiSpec = z.object({\n paths: Paths,\n definitions: Definitions,\n basePath: z.string(),\n info: z.object({\n description: z.string(),\n title: z.string(),\n contact: z.object({\n name: z.string(),\n url: z.string(),\n email: z.string()\n }),\n version: z.string()\n }),\n schemes: z.array(z.string()).nullish(),\n components: z\n .object({\n schemas: Definitions\n })\n .nullish()\n})\n\nexport type OpenApiSpec = z.TypeOf<typeof OpenApiSpec>\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { EndpointParameters } from './../Swagger'\n\nexport const templateJsdocMethod = ({\n classMethod,\n httpMethod,\n path,\n pathParams,\n bodyParams,\n queryParams\n}: {\n classMethod: string\n httpMethod: string\n path: string\n pathParams: EndpointParameters[]\n bodyParams: EndpointParameters[]\n queryParams: EndpointParameters[]\n}) => {\n let jsdoc = ''\n let methodSignature = ''\n let newPath = path\n for (const p of pathParams) {\n methodSignature += p.name + ', '\n newPath = newPath.replace('{' + p.name + '}', `' + ${p.name} + '`)\n jsdoc += `\n * @pathParam '${p.name}${p.required ? '' : '?'}' - ${p.description}`\n }\n\n let payloads = ''\n for (const p of bodyParams) {\n methodSignature += p.name + ', '\n payloads += p.name\n jsdoc += `\n * @payload '${p.name}${p.required ? '' : '?'}' - ${p.description} ${\n p?.schema?.properties ? '=> ' + JSON.stringify(p.schema.properties) : ''\n }`\n }\n\n for (const p of queryParams) {\n const optionalMark = p.required ? '' : '?'\n methodSignature += p.name + optionalMark + ', '\n jsdoc += `\n * @queryParam '${p.name}${p.required ? '' : '?'}' - ${p.description}`\n }\n\n let queryString = ''\n for (const p of queryParams) {\n queryString += `${p.name}=__&`\n }\n queryString = queryString.length > 0 ? '?' + queryString : ''\n\n return `\n /**\n * ${httpMethod.toUpperCase()} '${newPath}${queryString}' ${payloads ? \"payload: '\" + payloads + \"'\" : ''}\n * ${jsdoc}\n */\n ${classMethod}(${methodSignature}): Promise\n`\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { ParserUtils } from '../ParserUtils'\nimport { EndpointParameters } from './../Swagger'\n\nexport const templateMethod = ({\n classMethod,\n description,\n httpMethod,\n path,\n pathParams,\n bodyParams,\n queryParams,\n isFormUrlEncoded,\n responseClass\n}: {\n classMethod: string\n description: string\n httpMethod: string\n path: string\n pathParams: EndpointParameters[]\n bodyParams: EndpointParameters[]\n queryParams: EndpointParameters[]\n isFormUrlEncoded: boolean\n responseClass: string\n}) => {\n let methodSignature = ''\n let newPath = `'${path}'`\n let dependencies: string[] = []\n\n for (const pathParam of pathParams) {\n const type = ParserUtils.parseType(pathParam)\n if (pathParam.name !== 'namespace') {\n methodSignature += pathParam.name + `:${type}` + ', '\n }\n const pName = pathParam.name === 'namespace' ? 'this.namespace' : pathParam.name\n if (path.match(`{${pathParam.name}}`)) {\n if (type === 'string') {\n newPath = `${newPath}.replace('{${pathParam.name}}', ${pName})`\n } else {\n newPath = `${newPath}.replace('{${pathParam.name}}', String(${pName}))`\n }\n }\n }\n\n let dataType = null\n if (httpMethod !== 'get') {\n dataType = ParserUtils.parseBodyParamsType(bodyParams)\n dependencies = ParserUtils.parseBodyParamsImports(bodyParams)\n methodSignature += dataType ? `data: ${dataType},` : ''\n }\n\n const isAnyRequired = ParserUtils.isAnyQueryParamRequired(queryParams)\n const queryParamsType = queryParams.length\n ? `queryParams${isAnyRequired ? '' : '?'}: {${ParserUtils.parseQueryParamsType(queryParams)}}`\n : ''\n\n const queryParamsDefault = queryParams.length\n ? `const params = {${ParserUtils.parseQueryParamsDefault(queryParams)} ...queryParams} as SDKRequestConfig`\n : 'const params = {} as SDKRequestConfig'\n\n const isPostPutPatch = ['post', 'put', 'patch'].includes(httpMethod)\n const isDelete = ['delete'].includes(httpMethod)\n let dataPayload = '{params}'\n\n const descriptionText = description\n ? `\n /**\n * ${(description || '').replace(/\\n/g, '\\n * ')} \n */`\n : ''\n\n let formPayloadString = ''\n if (isFormUrlEncoded) {\n formPayloadString = ``\n const params = \"{ ...params, headers: { ...params.headers, 'content-type': 'application/x-www-form-urlencoded' } }\"\n\n dataPayload = dataType ? `CodeGenUtil.getFormUrlEncodedData(data), ${params}` : `null, ${params}`\n } else if (isPostPutPatch) {\n dataPayload = dataType ? `data, {params}` : 'null, {params}'\n } else if (isDelete) {\n dataPayload = dataType ? `{data, params}` : '{params}'\n }\n const isFileUpload = methodSignature.indexOf('data: {file') > -1\n\n const resolvedResponseClass = responseClass || 'unknown'\n const resolvedResponseClassValidated = responseClass || 'z.unknown()'\n const parameters = (queryParamsType ? `${methodSignature} ${queryParamsType}` : methodSignature).replace(/,\\s*$/, '')\n\n let methodImpl = ''\n const isCacheFetch = ['get'].includes(httpMethod) && resolvedResponseClass !== 'unknown'\n const cachedFetchMethod = classMethod.replace('get', 'fetch')\n const deprecateTag = isCacheFetch\n ? `/**\n * @deprecated Use \"${cachedFetchMethod}()\" instead.\n */`\n : ''\n\n const isGuardInvoked = ['get', 'post', 'put', 'patch', 'delete'].includes(httpMethod)\n const methodName = httpMethod === 'get' ? cachedFetchMethod : ['post', 'put', 'patch', 'delete'].includes(httpMethod) ? classMethod : ''\n const methodGenerics = resolvedResponseClass !== 'unknown' ? `<T = ${resolvedResponseClass}>` : ''\n const responseType = resolvedResponseClass !== 'unknown' ? `T` : 'unknown'\n const responseSyncType =\n httpMethod === 'get' ? 'IResponseWithSync' : ['post', 'put', 'patch', 'delete'].includes(httpMethod) ? 'IResponse' : ''\n methodImpl = `${descriptionText}\n ${methodName}${methodGenerics}(${parameters}): Promise<${responseSyncType}<${responseType}>> {\n ${queryParamsDefault}\n const url = ${newPath} ${formPayloadString} ${isFileUpload ? '\\n// TODO file upload not implemented' : ''}\n const resultPromise = this.axiosInstance.${httpMethod}(url, ${dataPayload})\n\n${\n httpMethod === 'get'\n ? `const res = () => Validate.responseType(() => resultPromise, ${resolvedResponseClassValidated})\n\n if (!this.cache) {\n return SdkCache.withoutCache(res)\n }\n const cacheKey = url + CodeGenUtil.hashCode(JSON.stringify({ params }))\n return SdkCache.withCache(cacheKey, res)`\n : ''\n}${\n ['post', 'put', 'patch', 'delete'].includes(httpMethod)\n ? `return Validate.responseType(() => resultPromise, ${resolvedResponseClassValidated})`\n : ''\n }\n }\n `\n\n if (!isGuardInvoked) {\n methodImpl = `${descriptionText}\n ${deprecateTag}\n TODO_${classMethod}<T = ${resolvedResponseClass}>(${parameters}): Promise<AxiosResponse<T>> {\n ${queryParamsDefault}\n const url = ${newPath} ${formPayloadString} ${isFileUpload ? '\\n// TODO file upload not implemented' : ''}\n return this.axiosInstance.${httpMethod}(url, ${dataPayload})\n }\n `\n }\n\n return [methodImpl, dependencies]\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { ParserUtils } from '../ParserUtils'\nimport { Definition } from './../Swagger'\n\n// The expected output that we return from most of the functions below.\n// Normally, we will mostly use `schemaString`. In some unique cases\n// where there are recursive types, we cannot infer type. Hence, we need\n// to store the TypeScript syntax so we can write them manually.\ninterface ResultType {\n schemaString: string\n typeString: string\n}\n\nexport class TemplateZod {\n duplicates: Map<string, string>\n duplicateFound = false\n //\n private importClasses = new Set()\n\n // --\n render = (fileName: string, definition: Definition, duplicates: Map<string, string>) => {\n this.duplicates = duplicates\n const content = this.parseToZodSchema(definition, definition.required || [])\n\n // Prevent self-importing and handle recursive types.\n const containsRecursiveType = this.importClasses.has(fileName)\n if (containsRecursiveType) {\n this.importClasses.delete(fileName)\n }\n\n let imports = ''\n for (const cl of Array.from(this.importClasses).sort()) {\n imports += ` import { ${cl} } from './${cl}'\\n`\n }\n\n // Modify export variable string, based on existence of recursive types.\n // Reference: https://github.com/colinhacks/zod#recursive-types.\n let exportedVariableString: string\n let exportedTypeString: string\n\n if (containsRecursiveType) {\n // If it contains recursive type, then we need to modify the exported variable in a way,\n // so that there are no TypeScript errors.\n exportedVariableString = `\n export const ${fileName}: z.ZodType<${fileName}> = z.lazy(() =>\n ${content.schemaString}\n )\n `\n exportedTypeString = `\n export type ${fileName} = {\n ${content.typeString}\n }\n `\n } else {\n // Export normally by writing the `z.ZodObject` and type inferring with `z.TypeOf`.\n exportedVariableString = `export const ${fileName} = ${content.schemaString}`\n exportedTypeString = `export type ${fileName} = z.TypeOf<typeof ${fileName}>`\n }\n\n const template = `import { z } from 'zod'\n ${imports}\n\n ${exportedVariableString}\n\n ${exportedTypeString}\n `\n return { buffer: template, duplicateFound: this.duplicateFound }\n }\n\n // --\n parseToZodSchema = (definition, requiredAttrs): ResultType => {\n if (definition.additionalProperties) {\n return this.parseToZodAttribute('', definition, [])\n }\n\n if (!definition.properties) {\n return {\n schemaString: 'z.any()',\n typeString: 'any'\n }\n }\n\n const properties = Object.entries(definition.properties) as [string, any]\n const schemaFields: string[] = []\n const typeFields: string[] = []\n\n for (const property of properties) {\n const [name, definition] = property\n const result = this.parseToZodAttribute(name, definition, requiredAttrs)\n\n schemaFields.push(result.schemaString)\n typeFields.push(result.typeString)\n }\n\n return {\n schemaString: `z.object({${schemaFields.join(',')}})`,\n typeString: typeFields.join(';')\n }\n }\n\n // --\n parseToZodAttribute = (name, definition, requiredAttrs): ResultType => {\n // Required field syntax.\n // Empty name check is required for fields with type records.\n const isRequired = requiredAttrs.includes(name) || name === ''\n const schemaRequired = isRequired ? '' : '.nullish()'\n const typeRequired = isRequired ? '' : '?'\n const typeNullishability = isRequired ? '' : ' | null | undefined'\n // Field name syntax.\n const schemaAttribute = name ? `'${name}':` : ''\n const typeAttribute = name ? `'${name}'${typeRequired}:` : ''\n\n const type = definition?.type\n\n if (type) {\n if (type === 'object' && definition.additionalProperties) {\n const zodAttribute = this.parseToZodAttribute('', definition.additionalProperties, [''])\n return {\n schemaString: `${schemaAttribute} z.record(${zodAttribute.schemaString})${schemaRequired}`,\n typeString: `${typeAttribute} Record<string, ${zodAttribute.typeString}>${typeNullishability}`\n }\n }\n\n if (type === 'object' && !definition.additionalProperties && !name) {\n return {\n schemaString: `z.any()`,\n typeString: 'any'\n }\n }\n\n if (type === 'object' && !definition.additionalProperties) {\n return {\n schemaString: `${schemaAttribute} z.record(z.any())${schemaRequired}`,\n typeString: `${typeAttribute} Record<string, any>${typeNullishability}`\n }\n }\n\n if (type === 'integer' || type === 'number') {\n const effectiveType = getZodNumberType(type)\n return {\n schemaString: `${schemaAttribute} z.${effectiveType.schemaString}()${schemaRequired}`,\n typeString: `${typeAttribute} ${effectiveType.typeString}${typeNullishability}`\n }\n }\n\n if (type === 'array') {\n const items = definition.items\n const ref = items?.$ref\n let model: ResultType\n if (ref) {\n const refType = ParserUtils.parseRefType(ref)\n this.importClasses.add(refType)\n\n model = {\n schemaString: refType,\n typeString: refType\n }\n } else if (items) {\n model = this.parseEnumItems(items)\n } else {\n return {\n schemaString: `${schemaAttribute} z.array(z.unknown())${schemaRequired}`,\n typeString: `${typeAttribute} z.unknown()[]${typeNullishability}`\n }\n }\n\n return {\n schemaString: `${schemaAttribute} z.array(${model.schemaString})${schemaRequired}`,\n typeString: `${typeAttribute} ${model.typeString}[]${typeNullishability}`\n }\n }\n\n if (type !== 'object') {\n const result = extractEnumObject(type, isRequired, definition.enum)\n return {\n schemaString: `${schemaAttribute} ${result.schemaString}`,\n typeString: `${typeAttribute} ${result.typeString}`\n }\n }\n } else if (definition.properties) {\n const result = this.parseToZodSchema(definition, requiredAttrs)\n return {\n schemaString: `${schemaAttribute} ${result.schemaString}${schemaRequired}`,\n typeString: `${typeAttribute} ${result.typeString}${typeNullishability}`\n }\n }\n\n const ref = definition.$ref\n let model = `z.record(z.any())`\n\n if (ref) {\n model = ParserUtils.parseRefType(ref)\n\n const fullModelName = ref.replace('#/definitions/', '')\n this.duplicateFound = this.duplicates.has(fullModelName)\n if (this.duplicateFound) {\n model = this.duplicates.get(fullModelName)\n }\n this.importClasses.add(model)\n model = `${model}`\n }\n\n return {\n schemaString: `${schemaAttribute} ${model}${schemaRequired}`,\n typeString: `${typeAttribute} ${model}${typeNullishability}`\n }\n }\n\n parseEnumItems = (items): ResultType => {\n if (items.enum) {\n const enumStr = items.enum.map(e => {\n return `\"${e}\"`\n })\n return {\n schemaString: `z.enum([${enumStr}])`,\n typeString: `(${enumStr.join(' | ')})`\n }\n }\n\n if (items.type === 'object') {\n return this.parseToZodSchema(items, items.required)\n }\n\n let effectiveType: ResultType\n if (items.type === 'integer' || items.type === 'number') {\n effectiveType = getZodNumberType(items.type)\n } else {\n effectiveType = { typeString: items.type, schemaString: items.type }\n }\n\n return {\n schemaString: `z.${effectiveType.schemaString}()`,\n typeString: effectiveType.typeString\n }\n }\n}\n\nexport class TemplateZodArray {\n //\n render = name => {\n const cls = name.replace('Array', '')\n const template = `import { z } from 'zod'\n import { ${cls} } from './${cls}'\n \n export const ${name} = z.array(${cls})\n\n export type ${name} = z.TypeOf<typeof ${name}>\n `\n return template\n }\n}\n\nconst getZodNumberType = (type: string) => {\n // In Swagger, integer and number are different types.\n // As such, we need to map them separately.\n // Example how to use:\n //\n // if (type === 'integer' || type === 'number') return getZodNumberType(type);\n //\n // Reference 1: https://swagger.io/docs/specification/data-models/data-types/.\n // Reference 2: https://github.com/colinhacks/zod#numbers.\n if (type === 'integer') {\n return {\n schemaString: 'number().int',\n typeString: 'number'\n }\n }\n\n return {\n schemaString: type,\n typeString: type\n }\n}\n\nconst extractEnumObject = (type: string, isRequired: boolean, enumArr?: string[]): ResultType => {\n const schemaRequired = isRequired ? '' : '.nullish()'\n const typeNullishability = isRequired ? '' : ' | null | undefined'\n if (enumArr) {\n const enumStr = enumArr.map(e => {\n return `\"${e}\"`\n })\n return {\n schemaString: `z.enum([${enumStr}])${schemaRequired}`,\n typeString: `(${enumStr.join(' | ')}${typeNullishability})`\n }\n }\n return {\n schemaString: `z.${type}()${schemaRequired}`,\n typeString: `${type}${typeNullishability}`\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport SwaggerParser from '@apidevtools/swagger-parser'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport path from 'path'\nimport { CliParser } from './CliParser'\nimport { ParserUtils } from './ParserUtils'\nimport { Endpoint, OpenApiSpec } from './Swagger'\nimport { templateJsdocMethod } from './templates/template-jsdoc-method'\nimport { templateMethod } from './templates/template-method'\nimport { TemplateZod, TemplateZodArray } from './templates/template-zod'\n\nexport class CodeGenerator {\n //\n static getPatchedDir = () => path.join(CliParser.getSwaggersOutputPath(), 'patched')\n\n static getGeneratedPublicFolder = () => `${CliParser.getOutputPath()}/generated-public`\n\n static getGeneratedAdminFolder = () => `${CliParser.getOutputPath()}/generated-admin`\n\n static iterateApi = async (api: OpenApiSpec) => {\n const apiBufferByTag = {}\n const jsDocApiBufferByTag = {}\n const dependenciesByTag = {}\n const classImports = {}\n let arrayDefinitions = []\n\n for (const path in api.paths) {\n const isAdminEndpoint = path.indexOf('/admin/') > -1\n if (CliParser.isAdmin() && !isAdminEndpoint) {\n continue\n } else if (!CliParser.isAdmin() && isAdminEndpoint) {\n continue\n }\n\n const operation = api.paths[path]\n\n const httpMethods = Object.keys(operation)\n for (const httpMethod of httpMethods) {\n const endpoint = await Endpoint.parseAsync(operation[httpMethod]).catch(error => {\n console.error(JSON.stringify({ path, httpMethod }, null, 2))\n throw error\n })\n if (!endpoint.tags) {\n continue\n }\n const [tag] = endpoint.tags\n const description = endpoint.description\n const isDeprecated = endpoint.deprecated\n const responseClass = ParserUtils.get2xxResponse(endpoint.responses)\n const className = _.upperFirst(_.camelCase(tag))\n classImports[className] = classImports[className] ? classImports[className] : {}\n\n if (!isDeprecated) {\n if (responseClass) {\n const importTypeClass = ParserUtils.parseRefType(responseClass)\n classImports[className][importTypeClass] = `import { ${importTypeClass} } from './definitions/${importTypeClass}'`\n }\n if (responseClass && responseClass.endsWith('Array')) {\n arrayDefinitions.push(responseClass)\n }\n\n const isFormUrlEncoded = ParserUtils.isFormUrlEncoded(httpMethod, endpoint.consumes)\n const queryParams = ParserUtils.filterQueryParameters(endpoint.parameters)\n const pathParams = ParserUtils.filterPathParams(endpoint.parameters)\n const bodyParams = ParserUtils.filterBodyParams(endpoint.parameters)\n const classMethod = ParserUtils.generateClassMethod({\n path,\n endpoint,\n httpMethod,\n className\n })\n\n const pathWithBase = `${api.basePath ?? ''}${path}`\n\n const [generatedMethodString, importStatements] = templateMethod({\n classMethod,\n description,\n httpMethod,\n path: pathWithBase,\n pathParams,\n bodyParams,\n queryParams,\n isFormUrlEncoded,\n responseClass\n })\n apiBufferByTag[tag] = (apiBufferByTag[tag] || '') + generatedMethodString\n jsDocApiBufferByTag[tag] =\n (jsDocApiBufferByTag[tag] || '') + templateJsdocMethod({ classMethod, httpMethod, path, pathParams, bodyParams, queryParams })\n dependenciesByTag[tag] = dependenciesByTag[tag]\n ? [...new Set([...importStatements, ...dependenciesByTag[tag]])]\n : [...new Set(importStatements)]\n }\n }\n }\n\n arrayDefinitions = [...new Set(arrayDefinitions)]\n return { apiBufferByTag, jsDocApiBufferByTag, dependenciesByTag, classImports, arrayDefinitions }\n }\n\n static main = async (nameArray: string[]): Promise<Set<string>> => {\n const serviceName = nameArray[0]\n const swaggerFile = nameArray[2]\n const parser = new SwaggerParser()\n\n const generatedFolder = CliParser.isAdmin() ? CodeGenerator.getGeneratedAdminFolder() : CodeGenerator.getGeneratedPublicFolder()\n\n const DIST_DIR = `${generatedFolder}/${serviceName}`\n const DIST_DOCS_DIR = path.join(DIST_DIR, 'docs')\n const DIST_DEFINITION_DIR = path.join(DIST_DIR, 'definitions')\n\n const swaggerFilePath = `${CliParser.getSwaggersOutputPath()}/${swaggerFile}`\n const swaggerPatchedFilePath = `${CodeGenerator.getPatchedDir()}/${swaggerFile}`\n const swaggerPatchFilePath = `${swaggerFilePath}patch`\n ParserUtils.applyPatchIfExists(swaggerFilePath, swaggerPatchFilePath, swaggerPatchedFilePath, CodeGenerator.getPatchedDir())\n const api = await parser.parse(swaggerPatchedFilePath)\n\n const indexImportsSet: Set<string> = new Set()\n\n console.log('\\n----------\\n API name: %s, Version: %s schemes %s', api, api.info.title, api.info.version, api.schemes)\n\n ParserUtils.mkdirIfNotExist(DIST_DIR)\n ParserUtils.mkdirIfNotExist(DIST_DOCS_DIR)\n ParserUtils.mkdirIfNotExist(DIST_DEFINITION_DIR)\n\n const { apiBufferByTag, dependenciesByTag, classImports, arrayDefinitions /* jsDocApiBufferByTag, */ } = await CodeGenerator.iterateApi(\n api\n )\n\n const targetSrcFolder = `${CliParser.getOutputPath()}/`\n\n for (const tag in apiBufferByTag) {\n const className = _.upperFirst(_.camelCase(tag))\n const apiBuffer = apiBufferByTag[tag]\n const imports = [...new Set([...dependenciesByTag[tag], ...Object.values(classImports[className])])]\n\n const classGenName = CliParser.isAdmin() ? className + 'Admin$' : className + '$'\n\n ParserUtils.writeClassFile(DIST_DIR, classGenName, apiBuffer, imports)\n // const jsDocApiBuffer = jsDocApiBufferByTag[tag]\n // ParserUtils.writeJsdocFile(DIST_DIR, nameArray, jsDocApiBuffer)\n\n // For classes, we need to append `$`.\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DIR, `${classGenName}`), targetSrcFolder))\n }\n\n const duplicates = new Map<string, string>()\n const definitions = api?.components?.schemas || api.definitions\n for (const ref in definitions) {\n const definition = definitions[ref]\n let fileName = ParserUtils.parseRefType(ref)\n const fileExist = fs.existsSync(path.join(DIST_DEFINITION_DIR, `${fileName}.ts`))\n if (fileExist) {\n fileName = ParserUtils.toCamelCaseWord(ref).replace('.', '').replace('.', '')\n duplicates.set(ref, fileName)\n }\n const { buffer } = new TemplateZod().render(fileName, definition, new Map())\n // Disabled as it creates definitions tree dir structure that is difficult to maintain, instead a flat \"definitions\" dir was used\n // const dir = ParserUtils.parseImportDir(ref)\n // const defPath = path.join(DIST_DEFINITION_DIR, dir)\n ParserUtils.writeDefinitionFile(DIST_DEFINITION_DIR, fileName, buffer)\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DEFINITION_DIR, fileName), targetSrcFolder))\n }\n\n // rerun, find duplicates and write again the fixed dup name\n for (const ref in definitions) {\n const definition = definitions[ref]\n const fileName = ParserUtils.parseRefType(ref)\n const { buffer, duplicateFound } = new TemplateZod().render(fileName, definition, duplicates)\n if (duplicateFound) {\n ParserUtils.writeDefinitionFile(DIST_DEFINITION_DIR, fileName, buffer)\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DEFINITION_DIR, fileName), targetSrcFolder))\n }\n }\n\n for (const arrayClass of arrayDefinitions) {\n const buffer = new TemplateZodArray().render(arrayClass)\n ParserUtils.writeDefinitionFile(DIST_DEFINITION_DIR, arrayClass, buffer)\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DEFINITION_DIR, arrayClass), targetSrcFolder))\n }\n\n console.log('\\n----------\\nCOMPLETED.\\n----------\\n\\n')\n return indexImportsSet\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport * as https from 'https'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { CliParser } from './CliParser'\n\n/**\n * This file iterates over intended API configs and downloads the swagger files to target location from --swaggersOutput argument\n *\n * e.g\n * /packages\n * /od-config\n * /codegen\n * /swaggers\n * serviceName.json --> example \"iam.json\"\n */\nexport class SwaggerDownloader {\n static getDestFile = (targetFileName: string) => {\n const destPath = CliParser.getResolvedSwaggersOutputPath()\n const destFile = path.join(destPath, targetFileName)\n if (fs.existsSync(destFile)) return destFile\n if (!fs.existsSync(destPath)) fs.mkdirSync(destPath)\n fs.writeFileSync(destFile, '')\n return destFile\n }\n\n static downloadFile = (targetFileName: string, url: string) => {\n const destFile = SwaggerDownloader.getDestFile(targetFileName)\n const file = fs.createWriteStream(destFile)\n const request = https.get(url, function (response) {\n response.pipe(file)\n file.on('finish', () => {\n file.close()\n console.log(`SwaggerDownload ${url} completed`)\n })\n })\n request.on('error', (err: Error) => {\n console.log(`SwaggerDownloader dl failed for \"${targetFileName}\" and \"${url}\"`, err)\n })\n }\n\n static main = () => {\n const swaggers = CliParser.getConfigFile()\n for (const ref in swaggers) {\n const targetFileName = swaggers[ref][2]\n const url = swaggers[ref][3]\n SwaggerDownloader.downloadFile(targetFileName, url)\n }\n console.log('\\n----------\\n SwaggerDownloader COMPLETED.\\n----------\\n\\n')\n }\n}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport yargs from 'yargs'\nimport { CliOption, CliParser } from './CliParser'\nimport { CodeGenerator } from './CodeGenerator'\nimport path from 'path'\nimport { ParserUtils } from './ParserUtils'\nimport { SwaggerDownloader } from './SwaggerDownloader'\n\n// eslint-disable-next-line no-unused-expressions\nyargs\n .command('download-swaggers', 'Download swaggers JSON files', (yargs: CliOption) => {\n CliParser.createInstance(yargs)\n SwaggerDownloader.main()\n })\n .command('generate-code', 'Generate code based on downloaded swagger files', async (yargs: CliOption) => {\n // validate options\n yargs.check(({ output, swaggersOutput }) => {\n if (!output?.trim()) {\n throw new Error('output is required for generate-code')\n }\n return true\n })\n\n CliParser.createInstance(yargs)\n const arrayOfSets = await Promise.all(CliParser.getConfigFile().map(config => CodeGenerator.main(config)))\n const indexImportsSet = new Set<string>()\n const filenamesSet = new Set<string>()\n\n for (const set of arrayOfSets) {\n set.forEach(value => {\n const fileName = path.basename(value)\n\n if (!filenamesSet.has(fileName)) {\n indexImportsSet.add(value)\n filenamesSet.add(fileName)\n }\n })\n }\n\n const indexImportsArray = Array.from(indexImportsSet)\n const filesToImport = indexImportsArray.map(fileToImport => {\n return `export * from '${fileToImport.replace('\\\\', '/')}'`\n })\n ParserUtils.writeAllImportsFile(CliParser.getOutputPath(), filesToImport.join('\\n'), CliParser.isAdmin())\n })\n .option('config', {\n description: 'Config file providing backend services URL.',\n type: 'string',\n demandOption: true\n })\n .option('swaggersOutput', {\n description: 'Output path for downloaded swaggers JSON files.',\n type: 'string',\n demandOption: true\n })\n .option('output', {\n description: 'Output path for generated code. Required for generate-code',\n type: 'string'\n })\n .option('admin', {\n description: 'Only generate /admin endpoints.',\n type: 'boolean',\n default: false,\n demandOption: false\n })\n .demandCommand(1)\n .help().argv\n"],"names":["fs","path"],"mappings":"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"}
1
+ {"version":3,"file":"accelbyte-codegen.mjs","sources":["../src/CliParser.ts","../src/templates/template-class.ts","../src/templates/template-jsdoc-file.ts","../src/ParserUtils.ts","../src/Swagger.ts","../src/templates/template-jsdoc-method.ts","../src/templates/template-method.ts","../src/templates/template-zod.ts","../src/CodeGenerator.ts","../src/SwaggerDownloader.ts","../src/cli.ts"],"sourcesContent":["/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport { Argv } from 'yargs'\nimport { z } from 'zod'\nimport fs from 'fs'\nimport * as path from 'path'\n\nconst SwaggersConfig = z.array(z.array(z.string()))\ntype SwaggersConfig = z.TypeOf<typeof SwaggersConfig>\n\nexport interface CliOption\n extends Argv<{\n config: string\n swaggersOutput: string\n output: string\n admin: boolean\n }> {}\n\nexport class CliParser {\n private static _instance: CliParser\n public argv\n constructor(yargs: CliOption) {\n this.argv = yargs.parse()\n }\n\n public static createInstance = (yargs: CliOption) => {\n CliParser._instance = new CliParser(yargs)\n return CliParser._instance\n }\n\n private static instance = (yargs?: CliOption) => {\n if (!CliParser._instance && yargs) {\n return CliParser.createInstance(yargs)\n }\n return CliParser._instance\n }\n\n public static getConfigPath = (): string => {\n return CliParser.instance().argv.config\n }\n\n public static getConfigFile = (): SwaggersConfig => {\n const configPath = CliParser.getConfigPath()\n if (!configPath) throw new Error('Missing config file')\n const config = JSON.parse(fs.readFileSync(configPath, 'utf8'))\n if (!SwaggersConfig.safeParse(config).success) {\n throw new Error('Wrong config file format')\n }\n return config\n }\n\n public static getOutputPath = (): string => {\n return CliParser.instance().argv.output\n }\n\n public static getSwaggersOutputPath = (): string => {\n return CliParser.instance().argv.swaggersOutput\n }\n\n public static getResolvedSwaggersOutputPath = (): string => {\n return path.resolve(CliParser.getSwaggersOutputPath())\n }\n\n public static isAdmin = (): boolean => {\n return CliParser.instance().argv.admin\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nconst getImportableVarMap = () => ({\n '@accelbyte/sdk': ['CodeGenUtil', 'SdkCache', 'IResponse', 'IResponseWithSync', 'Validate'],\n axios: ['AxiosRequestConfig', 'AxiosResponse'],\n zod: ['z']\n})\n\nconst makeNewImportVarMap = () => ({\n axios: ['AxiosInstance'],\n '@accelbyte/sdk': ['SDKRequestConfig']\n})\n\nconst generateImports = (body: string, importStatements: string[]) => {\n const usedImportVarMap = makeNewImportVarMap()\n const importableVarMap = getImportableVarMap()\n\n for (const [moduleSource, importableVars] of Object.entries(importableVarMap)) {\n for (const importableVar of importableVars) {\n const importVarRegex = new RegExp(`(?<![\\\\d\\\\w_])${importableVar}(?![\\\\d\\\\w_])`)\n if (body.match(importVarRegex)) {\n usedImportVarMap[moduleSource] = [...(usedImportVarMap[moduleSource] || []), importableVar]\n }\n }\n }\n\n const generatedImports = Object.keys(usedImportVarMap)\n .sort()\n .map((moduleSource: string) => `import { ${usedImportVarMap[moduleSource].sort().join(', ')} } from '${moduleSource}'`)\n .join('\\n')\n return `${generatedImports}\\n${importStatements.sort().join('\\n')}`\n}\n\nexport const templateClass = (className: string, body: string, importStatements: string[]): string =>\n `/**\n * DON'T EDIT THIS FILE, it is AUTO GENERATED\n */\n ${generateImports(body, importStatements)}\n\n export class ${className} {\n // @ts-ignore\n constructor(private axiosInstance: AxiosInstance, private namespace: string, private cache = false) {}\n ${body}\n }\n `\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nexport const templateJsdocFile = (apiName, body) =>\n `\n\\`\\`\\`\nSDK.getService('${apiName}', authHeader):\n${body}\n\n\\`\\`\\`\n`\n .replace(/, \\)/g, ')')\n .trim()\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { applyPatch } from 'fast-json-patch'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport path from 'path'\nimport { Endpoint, EndpointParameters, Schema } from './Swagger'\nimport { templateClass } from './templates/template-class'\nimport { templateJsdocFile } from './templates/template-jsdoc-file'\n\nexport class ParserUtils {\n static parseQueryParamAttributeDefault = (definition: EndpointParameters) => {\n const attrName = definition.name.slice(definition.name.lastIndexOf('.') + 1)\n const defaultValue = definition.type === 'string' ? `'${definition.default}'` : definition.default\n return `${attrName}: ${defaultValue}`\n }\n\n static parseType = (pathParam: EndpointParameters) => {\n if (pathParam.type === 'int' || pathParam.type === 'integer' || pathParam?.schema?.type === 'integer') return 'number'\n if (pathParam.type === 'array') return `${pathParam.items.type ?? 'any'}[]`\n if (pathParam?.schema?.type === 'array') return `${pathParam.schema.items.type ?? 'any'}[]`\n if (pathParam?.schema?.type) return pathParam.schema.type\n return pathParam.type\n }\n\n static parseQueryParamsType = (queryParams: EndpointParameters[]) => {\n return queryParams.map(queryParam => ParserUtils.parseAttributeType(queryParam)).join(',')\n }\n\n static isAnyQueryParamRequired = (queryParams: EndpointParameters[]) => {\n return queryParams.some(queryParam => queryParam.required)\n }\n\n static parseQueryParamsDefault = (queryParams: EndpointParameters[]) => {\n const result = queryParams\n .filter(queryParam => !!queryParam.default && !queryParam.required)\n .map(ParserUtils.parseQueryParamAttributeDefault)\n .join(',')\n return result ? `${result},` : ''\n }\n\n static parseBodyParamsImports = (bodyParams: EndpointParameters[]) => {\n return bodyParams.map(ParserUtils.parseRefImport).filter(Boolean)\n }\n\n static parseImportDir = ($ref: string) => {\n let ref = $ref.replace('.', '/')\n if (ref[ref.length - 1] === '.' || ref[ref.length - 1] === '/') {\n ref = ref.slice(0, -1)\n }\n if (!ref.includes('/')) {\n return ''\n } else {\n return ref.slice(0, ref.lastIndexOf('/')).replace('#', '.')\n }\n }\n\n static parseRefImport = (bodyParam: EndpointParameters) => {\n const $ref = bodyParam?.schema?.$ref || bodyParam?.schema?.items?.$ref\n if (!$ref) {\n return null\n }\n const type = ParserUtils.parseRefType($ref)\n // const dir = ParserUtils.parseImportDir($ref)\n // return `import {${type}} from '${dir}/${type}'`\n return `import { ${type} } from './definitions/${type}'`\n }\n\n static parseRefType = ($ref: string) => {\n let ref = $ref.replace('.', '/')\n if (ref[ref.length - 1] === '.' || ref[ref.length - 1] === '/') {\n ref = ref.slice(0, -1)\n }\n const val = ref.slice(ref.lastIndexOf('/') + 1)\n // Converting it to TitleCase breaks schema refs. E.g. UserDataURL schema is converted to UserDataUrl breaking refs\n return _.upperFirst(_.camelCase(val)).replace(/( \\w)/g, group => group.replace(' ', '').toUpperCase())\n }\n\n static parseAttributeType = (definition: EndpointParameters) => {\n const required = definition.required ? '' : '?'\n\n const attrName = definition.name.slice(definition.name.lastIndexOf('.') + 1)\n\n if (definition.enum) {\n const enums = definition.enum.map(enm => (definition.type === 'string' ? `'${enm}'` : enm)).join(' | ')\n return `${attrName}${required}: ${enums}`\n }\n\n if (definition.type && ParserUtils.parseType(definition) === 'number') {\n return `${attrName}${required}: number`\n }\n\n if (definition?.schema?.type && ParserUtils.parseType(definition) === 'number') {\n return `${attrName}${required}: number`\n }\n\n if (definition.type && definition.type === 'array') {\n return `${attrName}${required}: ${definition.items.type ?? 'any'}[]`\n }\n\n if (definition?.schema?.type && definition.schema.type === 'array') {\n return `${attrName}${required}: ${definition.schema.items.type ?? 'any'}[]`\n }\n\n if (definition.type && definition.type) {\n return `${attrName}${required}: ${definition.type} | null`\n }\n\n if (definition?.schema?.type && definition.schema.type) {\n return `${attrName}${required}: ${definition.schema.type} | null`\n }\n\n return `${attrName}${required}: any`\n }\n\n static parseBodyParamsType = (bodyParams: EndpointParameters[]): string => {\n const [bodyParam] = bodyParams\n\n if (!bodyParam) return null\n\n if (bodyParams.length > 0 && bodyParam?.name !== 'body' && !bodyParam?.schema) {\n let retBodyParams = `{${bodyParams.map(bodyParam => ParserUtils.parseAttributeType(bodyParam)).join(',')}}`\n retBodyParams = retBodyParams.replace('file?: file', 'file?: File') // fixed TS type File\n return retBodyParams\n }\n\n if (bodyParam?.schema?.type === 'array' && !bodyParam?.schema?.items?.$ref) {\n return `${bodyParam.schema.items.type ?? 'any'}[]`\n }\n\n if (bodyParam?.schema?.type === 'array' && bodyParam?.schema?.items?.$ref) {\n return `${ParserUtils.parseRefType(bodyParam.schema.items.$ref)}[]`\n }\n\n if (bodyParam?.schema.$ref) {\n return ParserUtils.parseRefType(bodyParam.schema.$ref)\n }\n\n if (bodyParam?.schema?.additionalProperties?.type === 'object') {\n return 'any'\n }\n\n return null\n }\n\n static get2xxResponse(methodEntity: Endpoint['responses']): string {\n const keys = Object.keys(methodEntity)\n let responseClass = null\n keys.forEach(key => {\n if (String(key).startsWith('2')) {\n const sch = methodEntity[key].schema\n const schV3 = methodEntity[key].content && methodEntity[key].content['application/json'].schema\n if (sch?.$ref) {\n responseClass = ParserUtils.parseRefType(sch.$ref)\n } else if (sch?.type === 'array' && sch.items?.$ref) {\n responseClass = ParserUtils.parseRefType(sch.items.$ref)\n responseClass = `${responseClass}Array` // Adds support for z.array() types\n } else if (schV3?.$ref) {\n responseClass = ParserUtils.parseRefType(schV3.$ref)\n } else {\n // TODO add support for non $ref types. E.g. { type: 'array', items: { type: 'string', enum: [ 'WALLET', 'XSOLLA', .. ] } }\n }\n }\n })\n\n return responseClass\n }\n\n static isFormUrlEncoded(httpMethod: string, contentTypes: string[]): boolean {\n if (!contentTypes || contentTypes.length < 1) {\n return false\n }\n if (!['post', 'put', 'patch'].includes(httpMethod)) {\n return false\n }\n return contentTypes.includes('application/x-www-form-urlencoded')\n }\n\n static filterPathParams(parameters?: EndpointParameters[]): EndpointParameters[] {\n if (!parameters) {\n return []\n }\n return parameters.filter(parameter => parameter.in === 'path')\n }\n\n static generateClassMethod({\n path,\n endpoint,\n httpMethod,\n className\n }: {\n path: string\n endpoint: Endpoint\n httpMethod: string\n className: string\n }): string {\n let replacedIdsPath = path\n if (endpoint.parameters) {\n for (const parameter of endpoint.parameters) {\n if (parameter.in === 'path') {\n replacedIdsPath = replacedIdsPath.replace('{' + parameter.name + '}', 'By' + ParserUtils.toTitleCaseWord(parameter.name))\n // remove bellow prefixes as they unnecessarily pollute method names getIamV30, etc ..\n replacedIdsPath = replacedIdsPath.replace('/iam', '')\n replacedIdsPath = replacedIdsPath.replace('/odin-config', '')\n }\n }\n }\n let classMethod = httpMethod + '/' + replacedIdsPath\n classMethod = _.camelCase(classMethod)\n\n // Replace long verbose methods with shorter names. e.g.\n // getPublicNamespacesByNamespaceBySomething -> getNsSomething\n // getAdminNamespacesByNamespaceBySomething -> getAdminNsSomething\n classMethod = classMethod.replace('PublicNamespacesByNamespace', 'Ns')\n classMethod = classMethod.replace('AdminNamespacesByNamespace', 'AdminNs')\n\n const searchWord = 'NamespacesByNamespace'\n const nsExistInsideMethod =\n classMethod.indexOf(searchWord) > 0 && classMethod.indexOf(searchWord) + searchWord.length < classMethod.length\n const excludedClasses = ['Policies'] // Policies replacement corrupts the file with duplicate methods, skip replacement\n if (nsExistInsideMethod && !excludedClasses.includes(className)) {\n classMethod = classMethod.replace(searchWord, '')\n }\n return classMethod\n }\n\n static filterBodyParams(parameters?: EndpointParameters[]) {\n if (Array.isArray(parameters) && parameters.length > 0) {\n return parameters.filter(parameter => parameter.in === 'body' || parameter.in === 'formData')\n }\n return []\n }\n\n static filterQueryParameters(parameters?: EndpointParameters[]): EndpointParameters[] {\n if (!parameters) {\n return []\n }\n return parameters.filter(parameter => parameter.in === 'query')\n }\n\n static mkdirIfNotExist(dirToCreate: string) {\n if (!fs.existsSync(dirToCreate)) {\n fs.mkdirSync(dirToCreate, { recursive: true })\n }\n }\n\n static writeClassFile(distDir: string, apiName: string, apiBuffer: string, imports?: string[]) {\n const fileContent = templateClass(apiName, apiBuffer, imports)\n fs.writeFileSync(`${distDir}/${apiName}.ts`, ParserUtils.prependCopyrightHeader(fileContent))\n }\n\n static writeJsdocFile(distDir: string, nameArray: string[], apiBuffer: string) {\n const jsdocFile = templateJsdocFile(nameArray[0], apiBuffer)\n fs.writeFileSync(`${distDir}/docs/${nameArray[0]}.md`, jsdocFile)\n }\n\n static writeDefinitionFile(distDir: string, name: string, buffer: string) {\n ParserUtils.mkdirIfNotExist(distDir)\n fs.writeFileSync(path.join(distDir, `${name}.ts`), ParserUtils.prependCopyrightHeader(buffer))\n }\n\n static writeAllImportsFile(distDir: string, buffer: string, isAdminWebSdk: boolean) {\n ParserUtils.mkdirIfNotExist(distDir)\n fs.writeFileSync(path.join(distDir, `all-${isAdminWebSdk ? 'admin' : 'public'}-imports.ts`), ParserUtils.prependCopyrightHeader(buffer))\n }\n\n static toCamelCase(str: string) {\n return str\n .split('/')\n .map(function (word, index) {\n // If it is the first word make sure to lowercase all the chars.\n if (index === 0) {\n return word.toLowerCase()\n }\n // If it is not the first word only upper case the first char\n return ParserUtils.toCamelCaseWord(word)\n })\n .join('')\n }\n\n static toCamelCaseWord(word: string) {\n if (!word) {\n return ''\n }\n // convert hyphen separated case to camel case\n word = word.replace(/(-\\w)/g, m => m[1].toUpperCase())\n // capitalize first letter\n return word.charAt(0).toUpperCase() + word.slice(1)\n }\n\n static toTitleCaseWord(word: string) {\n if (!word) {\n return ''\n }\n return word.replace(/\\w\\S*/g, txt => {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase()\n })\n }\n\n static applyPatchIfExists(\n swaggerFilePath: string,\n possibleSwaggerPatchFilePath: string,\n swaggerPatchedFilePath: string,\n swaggerPatchedDir: string\n ) {\n if (!fs.existsSync(swaggerPatchedDir)) {\n fs.mkdirSync(swaggerPatchedDir, { recursive: true })\n }\n\n if (!fs.existsSync(possibleSwaggerPatchFilePath)) {\n fs.copyFileSync(swaggerFilePath, swaggerPatchedFilePath)\n return\n }\n const swaggerContent = JSON.parse(fs.readFileSync(swaggerFilePath, 'utf8'))\n const swaggerPatchFileContent = JSON.parse(fs.readFileSync(possibleSwaggerPatchFilePath, 'utf8'))\n const { newDocument } = applyPatch(swaggerContent, swaggerPatchFileContent)\n fs.writeFileSync(swaggerPatchedFilePath, JSON.stringify(newDocument, null, 2))\n }\n\n static getRelativePathToWebSdkSrcFolder(srcFolder: string, targetSrcFolder: string) {\n // For example:\n // Input: ../../accelbyte-web-sdk/packages/sdk/src/generated/...\n // Output: ./generated/...\n // Need to replace for Windows as `/` becomes `\\`.\n const replaced = srcFolder.replace(/\\\\/g, '/')\n return replaced.replace(/\\\\/g, '/').replace(targetSrcFolder, './')\n }\n\n static prependCopyrightHeader = (content: string): string => {\n const currentYear = new Date().getFullYear()\n return `/* \n * Copyright (c) 2022${currentYear > 2022 ? `-${currentYear}` : ''} AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n${content}`\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { z } from 'zod'\n\nconst Schema = z.object({\n $ref: z.string().nullish(),\n type: z\n .union([z.literal('array'), z.literal('object'), z.literal('file'), z.literal('string'), z.literal('boolean'), z.literal('integer')])\n .nullish(),\n items: z\n .object({\n $ref: z.string().nullish(),\n type: z.string().nullish()\n })\n .nullish(),\n properties: z.union([z.array(z.string()).nullish(), z.record(z.object({ type: z.string() })).nullish()]),\n description: z.string().nullish(),\n additionalProperties: z\n .object({\n type: z.string().nullish()\n })\n .nullish()\n})\n\nexport type Schema = z.TypeOf<typeof Schema>\n\nexport const Definition = z.object({\n required: z.array(z.string()).nullish(),\n properties: z\n .record(\n z.object({\n type: z.string()\n })\n )\n .nullish()\n})\n\nexport type Definition = z.TypeOf<typeof Definition>\n\nexport const Definitions = z.record(Definition)\n\nexport type Definitions = z.TypeOf<typeof Definitions>\n\nconst EndpointParametersType = z.enum(['apiKey', 'boolean', 'int', 'integer', 'number', 'string', 'array', 'file'])\nconst EndpointParametersIn = z.enum(['body', 'formData', 'header', 'path', 'query'])\n\nconst EndpointParameters = z.object({\n type: EndpointParametersType.nullish(),\n description: z.string().nullish(),\n name: z.string(),\n in: EndpointParametersIn,\n required: z.boolean().nullish(),\n schema: Schema.nullish(),\n default: z.union([z.boolean(), z.string(), z.number()]).nullish(),\n enum: z.array(z.union([z.boolean(), z.string(), z.number()])).nullish(),\n items: z\n .object({\n type: z.string()\n })\n .nullish()\n})\n\nexport type EndpointParameters = z.TypeOf<typeof EndpointParameters>\n\nexport const Endpoint = z.object({\n description: z.string().nullish(),\n consumes: z.array(z.string()).nullish(),\n produces: z.array(z.string()).nullish(),\n tags: z.array(z.string()).nullish(),\n summary: z.string().nullish(),\n operationId: z.string(),\n deprecated: z.boolean().nullish(),\n responses: z.record(\n z.object({\n description: z.string().nullish(),\n schema: Schema.nullish(),\n content: z\n .object({\n 'application/json': z.object({\n schema: Schema.nullish()\n })\n })\n .nullish()\n })\n ),\n parameters: z.array(EndpointParameters).nullish(),\n requestBody: z\n .object({\n required: z.boolean(),\n content: z\n .object({\n 'application/json': z.object({\n schema: Schema.nullish()\n })\n })\n .nullish()\n })\n .nullish()\n})\nexport type Endpoint = z.TypeOf<typeof Endpoint>\n\nconst Operation = z.object({\n get: Endpoint.nullish(),\n post: Endpoint.nullish(),\n patch: Endpoint.nullish(),\n delete: Endpoint.nullish(),\n put: Endpoint.nullish()\n})\nexport type Operation = z.TypeOf<typeof Operation>\nexport type HttpMethod = keyof Operation\n\nexport const Paths = z.record(Operation)\n\nexport const OpenApiSpec = z.object({\n paths: Paths,\n definitions: Definitions,\n basePath: z.string(),\n info: z.object({\n description: z.string(),\n title: z.string(),\n contact: z.object({\n name: z.string(),\n url: z.string(),\n email: z.string()\n }),\n version: z.string()\n }),\n schemes: z.array(z.string()).nullish(),\n components: z\n .object({\n schemas: Definitions\n })\n .nullish()\n})\n\nexport type OpenApiSpec = z.TypeOf<typeof OpenApiSpec>\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { EndpointParameters } from './../Swagger'\n\nexport const templateJsdocMethod = ({\n classMethod,\n httpMethod,\n path,\n pathParams,\n bodyParams,\n queryParams\n}: {\n classMethod: string\n httpMethod: string\n path: string\n pathParams: EndpointParameters[]\n bodyParams: EndpointParameters[]\n queryParams: EndpointParameters[]\n}) => {\n let jsdoc = ''\n let methodSignature = ''\n let newPath = path\n for (const p of pathParams) {\n methodSignature += p.name + ', '\n newPath = newPath.replace('{' + p.name + '}', `' + ${p.name} + '`)\n jsdoc += `\n * @pathParam '${p.name}${p.required ? '' : '?'}' - ${p.description}`\n }\n\n let payloads = ''\n for (const p of bodyParams) {\n methodSignature += p.name + ', '\n payloads += p.name\n jsdoc += `\n * @payload '${p.name}${p.required ? '' : '?'}' - ${p.description} ${\n p?.schema?.properties ? '=> ' + JSON.stringify(p.schema.properties) : ''\n }`\n }\n\n for (const p of queryParams) {\n const optionalMark = p.required ? '' : '?'\n methodSignature += p.name + optionalMark + ', '\n jsdoc += `\n * @queryParam '${p.name}${p.required ? '' : '?'}' - ${p.description}`\n }\n\n let queryString = ''\n for (const p of queryParams) {\n queryString += `${p.name}=__&`\n }\n queryString = queryString.length > 0 ? '?' + queryString : ''\n\n return `\n /**\n * ${httpMethod.toUpperCase()} '${newPath}${queryString}' ${payloads ? \"payload: '\" + payloads + \"'\" : ''}\n * ${jsdoc}\n */\n ${classMethod}(${methodSignature}): Promise\n`\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { ParserUtils } from '../ParserUtils'\nimport { EndpointParameters } from './../Swagger'\n\nexport const templateMethod = ({\n classMethod,\n description,\n httpMethod,\n path,\n pathParams,\n bodyParams,\n queryParams,\n isFormUrlEncoded,\n responseClass\n}: {\n classMethod: string\n description: string\n httpMethod: string\n path: string\n pathParams: EndpointParameters[]\n bodyParams: EndpointParameters[]\n queryParams: EndpointParameters[]\n isFormUrlEncoded: boolean\n responseClass: string\n}) => {\n let methodSignature = ''\n let newPath = `'${path}'`\n let dependencies: string[] = []\n\n for (const pathParam of pathParams) {\n const type = ParserUtils.parseType(pathParam)\n if (pathParam.name !== 'namespace') {\n methodSignature += pathParam.name + `:${type}` + ', '\n }\n const pName = pathParam.name === 'namespace' ? 'this.namespace' : pathParam.name\n if (path.match(`{${pathParam.name}}`)) {\n if (type === 'string') {\n newPath = `${newPath}.replace('{${pathParam.name}}', ${pName})`\n } else {\n newPath = `${newPath}.replace('{${pathParam.name}}', String(${pName}))`\n }\n }\n }\n\n let dataType = null\n if (httpMethod !== 'get') {\n dataType = ParserUtils.parseBodyParamsType(bodyParams)\n dependencies = ParserUtils.parseBodyParamsImports(bodyParams)\n methodSignature += dataType ? `data: ${dataType},` : ''\n }\n\n const isAnyRequired = ParserUtils.isAnyQueryParamRequired(queryParams)\n const queryParamsType = queryParams.length\n ? `queryParams${isAnyRequired ? '' : '?'}: {${ParserUtils.parseQueryParamsType(queryParams)}}`\n : ''\n\n const queryParamsDefault = queryParams.length\n ? `const params = {${ParserUtils.parseQueryParamsDefault(queryParams)} ...queryParams} as SDKRequestConfig`\n : 'const params = {} as SDKRequestConfig'\n\n const isPostPutPatch = ['post', 'put', 'patch'].includes(httpMethod)\n const isDelete = ['delete'].includes(httpMethod)\n let dataPayload = '{params}'\n\n const descriptionText = description\n ? `\n /**\n * ${(description || '').replace(/\\n/g, '\\n * ')} \n */`\n : ''\n\n let formPayloadString = ''\n if (isFormUrlEncoded) {\n formPayloadString = ``\n const params = \"{ ...params, headers: { ...params.headers, 'content-type': 'application/x-www-form-urlencoded' } }\"\n\n dataPayload = dataType ? `CodeGenUtil.getFormUrlEncodedData(data), ${params}` : `null, ${params}`\n } else if (isPostPutPatch) {\n dataPayload = dataType ? `data, {params}` : 'null, {params}'\n } else if (isDelete) {\n dataPayload = dataType ? `{data, params}` : '{params}'\n }\n const isFileUpload = methodSignature.indexOf('data: {file') > -1\n\n const resolvedResponseClass = responseClass || 'unknown'\n const resolvedResponseClassValidated = responseClass || 'z.unknown()'\n const parameters = (queryParamsType ? `${methodSignature} ${queryParamsType}` : methodSignature).replace(/,\\s*$/, '')\n\n let methodImpl = ''\n const isCacheFetch = ['get'].includes(httpMethod) && resolvedResponseClass !== 'unknown'\n const cachedFetchMethod = classMethod.replace('get', 'fetch')\n const deprecateTag = isCacheFetch\n ? `/**\n * @deprecated Use \"${cachedFetchMethod}()\" instead.\n */`\n : ''\n\n const isGuardInvoked = ['get', 'post', 'put', 'patch', 'delete'].includes(httpMethod)\n const methodName = httpMethod === 'get' ? cachedFetchMethod : ['post', 'put', 'patch', 'delete'].includes(httpMethod) ? classMethod : ''\n const methodGenerics = resolvedResponseClass !== 'unknown' ? `<T = ${resolvedResponseClass}>` : ''\n const responseType = resolvedResponseClass !== 'unknown' ? `T` : 'unknown'\n const responseSyncType =\n httpMethod === 'get' ? 'IResponseWithSync' : ['post', 'put', 'patch', 'delete'].includes(httpMethod) ? 'IResponse' : ''\n methodImpl = `${descriptionText}\n ${methodName}${methodGenerics}(${parameters}): Promise<${responseSyncType}<${responseType}>> {\n ${queryParamsDefault}\n const url = ${newPath} ${formPayloadString} ${isFileUpload ? '\\n// TODO file upload not implemented' : ''}\n const resultPromise = this.axiosInstance.${httpMethod}(url, ${dataPayload})\n\n${\n httpMethod === 'get'\n ? `const res = () => Validate.responseType(() => resultPromise, ${resolvedResponseClassValidated})\n\n if (!this.cache) {\n return SdkCache.withoutCache(res)\n }\n const cacheKey = url + CodeGenUtil.hashCode(JSON.stringify({ params }))\n return SdkCache.withCache(cacheKey, res)`\n : ''\n}${\n ['post', 'put', 'patch', 'delete'].includes(httpMethod)\n ? `return Validate.responseType(() => resultPromise, ${resolvedResponseClassValidated})`\n : ''\n }\n }\n `\n\n if (!isGuardInvoked) {\n methodImpl = `${descriptionText}\n ${deprecateTag}\n TODO_${classMethod}<T = ${resolvedResponseClass}>(${parameters}): Promise<AxiosResponse<T>> {\n ${queryParamsDefault}\n const url = ${newPath} ${formPayloadString} ${isFileUpload ? '\\n// TODO file upload not implemented' : ''}\n return this.axiosInstance.${httpMethod}(url, ${dataPayload})\n }\n `\n }\n\n return [methodImpl, dependencies]\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport { ParserUtils } from '../ParserUtils'\nimport { Definition } from './../Swagger'\n\n// The expected output that we return from most of the functions below.\n// Normally, we will mostly use `schemaString`. In some unique cases\n// where there are recursive types, we cannot infer type. Hence, we need\n// to store the TypeScript syntax so we can write them manually.\ninterface ResultType {\n schemaString: string\n typeString: string\n}\n\nexport class TemplateZod {\n duplicates: Map<string, string>\n duplicateFound = false\n //\n private importClasses = new Set()\n\n // --\n render = (fileName: string, definition: Definition, duplicates: Map<string, string>) => {\n this.duplicates = duplicates\n const content = this.parseToZodSchema(definition, definition.required || [])\n\n // Prevent self-importing and handle recursive types.\n const containsRecursiveType = this.importClasses.has(fileName)\n if (containsRecursiveType) {\n this.importClasses.delete(fileName)\n }\n\n let imports = ''\n for (const cl of Array.from(this.importClasses).sort()) {\n imports += ` import { ${cl} } from './${cl}'\\n`\n }\n\n // Modify export variable string, based on existence of recursive types.\n // Reference: https://github.com/colinhacks/zod#recursive-types.\n let exportedVariableString: string\n let exportedTypeString: string\n\n if (containsRecursiveType) {\n // If it contains recursive type, then we need to modify the exported variable in a way,\n // so that there are no TypeScript errors.\n exportedVariableString = `\n export const ${fileName}: z.ZodType<${fileName}> = z.lazy(() =>\n ${content.schemaString}\n )\n `\n exportedTypeString = `\n export type ${fileName} = {\n ${content.typeString}\n }\n `\n } else {\n // Export normally by writing the `z.ZodObject` and type inferring with `z.TypeOf`.\n exportedVariableString = `export const ${fileName} = ${content.schemaString}`\n exportedTypeString = `export type ${fileName} = z.TypeOf<typeof ${fileName}>`\n }\n\n const template = `import { z } from 'zod'\n ${imports}\n\n ${exportedVariableString}\n\n ${exportedTypeString}\n `\n return { buffer: template, duplicateFound: this.duplicateFound }\n }\n\n // --\n parseToZodSchema = (definition, requiredAttrs): ResultType => {\n if (definition.additionalProperties) {\n return this.parseToZodAttribute('', definition, [])\n }\n\n let properties: [string, any]\n if (definition.properties) {\n properties = Object.entries(definition.properties) as [string, any]\n } else if (definition.items?.properties) {\n properties = Object.entries(definition.items.properties) as [string, any]\n } else {\n return {\n schemaString: 'z.any()',\n typeString: 'any'\n }\n }\n\n const schemaFields: string[] = []\n const typeFields: string[] = []\n\n for (const property of properties) {\n const [name, definition] = property\n const result = this.parseToZodAttribute(name, definition, requiredAttrs)\n\n schemaFields.push(result.schemaString)\n typeFields.push(result.typeString)\n }\n\n if (definition?.type === 'array') {\n return {\n schemaString: `z.array(z.object({${schemaFields.join(',')}}))`,\n typeString: typeFields.join(';')\n }\n }\n\n return {\n schemaString: `z.object({${schemaFields.join(',')}})`,\n typeString: typeFields.join(';')\n }\n }\n\n // --\n parseToZodAttribute = (name, definition, requiredAttrs): ResultType => {\n // Required field syntax.\n // Empty name check is required for fields with type records.\n const isRequired = requiredAttrs.includes(name) || name === ''\n const schemaRequired = isRequired ? '' : '.nullish()'\n const typeRequired = isRequired ? '' : '?'\n const typeNullishability = isRequired ? '' : ' | null | undefined'\n // Field name syntax.\n const schemaAttribute = name ? `'${name}':` : ''\n const typeAttribute = name ? `'${name}'${typeRequired}:` : ''\n\n const type = definition?.type\n\n if (type) {\n if (type === 'object' && definition.additionalProperties) {\n const zodAttribute = this.parseToZodAttribute('', definition.additionalProperties, [''])\n return {\n schemaString: `${schemaAttribute} z.record(${zodAttribute.schemaString})${schemaRequired}`,\n typeString: `${typeAttribute} Record<string, ${zodAttribute.typeString}>${typeNullishability}`\n }\n }\n\n if (type === 'object' && !definition.additionalProperties && !name) {\n return {\n schemaString: `z.any()`,\n typeString: 'any'\n }\n }\n\n if (type === 'object' && !definition.additionalProperties) {\n return {\n schemaString: `${schemaAttribute} z.record(z.any())${schemaRequired}`,\n typeString: `${typeAttribute} Record<string, any>${typeNullishability}`\n }\n }\n\n if (type === 'integer' || type === 'number') {\n const effectiveType = getZodNumberType(type)\n return {\n schemaString: `${schemaAttribute} z.${effectiveType.schemaString}()${schemaRequired}`,\n typeString: `${typeAttribute} ${effectiveType.typeString}${typeNullishability}`\n }\n }\n\n if (type === 'array') {\n const items = definition.items\n const ref = items?.$ref\n let model: ResultType\n if (ref) {\n const refType = ParserUtils.parseRefType(ref)\n this.importClasses.add(refType)\n\n model = {\n schemaString: refType,\n typeString: refType\n }\n } else if (items) {\n model = this.parseEnumItems(items)\n } else {\n return {\n schemaString: `${schemaAttribute} z.array(z.any())${schemaRequired}`,\n typeString: `${typeAttribute} any[]${typeNullishability}`\n }\n }\n\n return {\n schemaString: `${schemaAttribute} z.array(${model.schemaString})${schemaRequired}`,\n typeString: `${typeAttribute} ${model.typeString}[]${typeNullishability}`\n }\n }\n\n if (type !== 'object') {\n const result = extractEnumObject(type, isRequired, definition.enum)\n return {\n schemaString: `${schemaAttribute} ${result.schemaString}`,\n typeString: `${typeAttribute} ${result.typeString}`\n }\n }\n } else if (definition.properties) {\n const result = this.parseToZodSchema(definition, requiredAttrs)\n return {\n schemaString: `${schemaAttribute} ${result.schemaString}${schemaRequired}`,\n typeString: `${typeAttribute} ${result.typeString}${typeNullishability}`\n }\n }\n\n const ref = definition.$ref\n let model = `z.record(z.any())`\n\n if (ref) {\n model = ParserUtils.parseRefType(ref)\n\n const fullModelName = ref.replace('#/definitions/', '')\n this.duplicateFound = this.duplicates.has(fullModelName)\n if (this.duplicateFound) {\n model = this.duplicates.get(fullModelName)\n }\n this.importClasses.add(model)\n model = `${model}`\n }\n\n return {\n schemaString: `${schemaAttribute} ${model}${schemaRequired}`,\n typeString: `${typeAttribute} ${model}${typeNullishability}`\n }\n }\n\n parseEnumItems = (items): ResultType => {\n if (items.enum) {\n const enumStr = items.enum.map(e => {\n return `\"${e}\"`\n })\n return {\n schemaString: `z.enum([${enumStr}])`,\n typeString: `(${enumStr.join(' | ')})`\n }\n }\n\n if (items.type === 'object') {\n return this.parseToZodSchema(items, items.required)\n }\n\n let effectiveType: ResultType\n if (items.type === 'integer' || items.type === 'number') {\n effectiveType = getZodNumberType(items.type)\n } else {\n effectiveType = { typeString: items.type, schemaString: items.type }\n }\n\n return {\n schemaString: `z.${effectiveType.schemaString}()`,\n typeString: effectiveType.typeString\n }\n }\n}\n\nexport class TemplateZodArray {\n //\n render = name => {\n const cls = name.replace('Array', '')\n const template = `import { z } from 'zod'\n import { ${cls} } from './${cls}'\n \n export const ${name} = z.array(${cls})\n\n export type ${name} = z.TypeOf<typeof ${name}>\n `\n return template\n }\n}\n\nconst getZodNumberType = (type: string) => {\n // In Swagger, integer and number are different types.\n // As such, we need to map them separately.\n // Example how to use:\n //\n // if (type === 'integer' || type === 'number') return getZodNumberType(type);\n //\n // Reference 1: https://swagger.io/docs/specification/data-models/data-types/.\n // Reference 2: https://github.com/colinhacks/zod#numbers.\n if (type === 'integer') {\n return {\n schemaString: 'number().int',\n typeString: 'number'\n }\n }\n\n return {\n schemaString: type,\n typeString: type\n }\n}\n\nconst extractEnumObject = (type: string, isRequired: boolean, enumArr?: string[]): ResultType => {\n const schemaRequired = isRequired ? '' : '.nullish()'\n const typeNullishability = isRequired ? '' : ' | null | undefined'\n if (enumArr) {\n const enumStr = enumArr.map(e => {\n return `\"${e}\"`\n })\n return {\n schemaString: `z.enum([${enumStr}])${schemaRequired}`,\n typeString: `(${enumStr.join(' | ')}${typeNullishability})`\n }\n }\n return {\n schemaString: `z.${type}()${schemaRequired}`,\n typeString: `${type}${typeNullishability}`\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport SwaggerParser from '@apidevtools/swagger-parser'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport path from 'path'\nimport { CliParser } from './CliParser'\nimport { ParserUtils } from './ParserUtils'\nimport { Endpoint, OpenApiSpec } from './Swagger'\nimport { templateJsdocMethod } from './templates/template-jsdoc-method'\nimport { templateMethod } from './templates/template-method'\nimport { TemplateZod, TemplateZodArray } from './templates/template-zod'\n\nexport class CodeGenerator {\n //\n static getPatchedDir = () => path.join(CliParser.getSwaggersOutputPath(), 'patched')\n\n static getGeneratedPublicFolder = () => `${CliParser.getOutputPath()}/generated-public`\n\n static getGeneratedAdminFolder = () => `${CliParser.getOutputPath()}/generated-admin`\n\n static iterateApi = async (api: OpenApiSpec) => {\n const apiBufferByTag = {}\n const jsDocApiBufferByTag = {}\n const dependenciesByTag = {}\n const classImports = {}\n let arrayDefinitions = []\n\n for (const path in api.paths) {\n const isAdminEndpoint = path.indexOf('/admin/') > -1\n if (CliParser.isAdmin() && !isAdminEndpoint) {\n continue\n } else if (!CliParser.isAdmin() && isAdminEndpoint) {\n continue\n }\n\n const operation = api.paths[path]\n\n const httpMethods = Object.keys(operation)\n for (const httpMethod of httpMethods) {\n const endpoint = await Endpoint.parseAsync(operation[httpMethod]).catch(error => {\n console.error(JSON.stringify({ path, httpMethod }, null, 2))\n throw error\n })\n if (!endpoint.tags) {\n continue\n }\n const [tag] = endpoint.tags\n const description = endpoint.description\n const isDeprecated = endpoint.deprecated\n const responseClass = ParserUtils.get2xxResponse(endpoint.responses)\n const className = _.upperFirst(_.camelCase(tag))\n classImports[className] = classImports[className] ? classImports[className] : {}\n\n if (!isDeprecated) {\n if (responseClass) {\n const importTypeClass = ParserUtils.parseRefType(responseClass)\n classImports[className][importTypeClass] = `import { ${importTypeClass} } from './definitions/${importTypeClass}'`\n }\n if (responseClass && responseClass.endsWith('Array')) {\n arrayDefinitions.push(responseClass)\n }\n\n const isFormUrlEncoded = ParserUtils.isFormUrlEncoded(httpMethod, endpoint.consumes)\n const queryParams = ParserUtils.filterQueryParameters(endpoint.parameters)\n const pathParams = ParserUtils.filterPathParams(endpoint.parameters)\n let bodyParams = ParserUtils.filterBodyParams(endpoint.parameters)\n const classMethod = ParserUtils.generateClassMethod({\n path,\n endpoint,\n httpMethod,\n className\n })\n\n // Handling requestBody in swagger v3\n // `templateMethod` expect `bodyParams` to be array, so for now we convert requestBody format\n // to array params\n if (endpoint.requestBody) {\n bodyParams = [\n {\n name: 'body',\n in: 'body',\n schema: endpoint.requestBody.content['application/json'].schema\n }\n ]\n }\n\n const pathWithBase = `${api.basePath ?? ''}${path}`\n\n const [generatedMethodString, importStatements] = templateMethod({\n classMethod,\n description,\n httpMethod,\n path: pathWithBase,\n pathParams,\n bodyParams,\n queryParams,\n isFormUrlEncoded,\n responseClass\n })\n apiBufferByTag[tag] = (apiBufferByTag[tag] || '') + generatedMethodString\n jsDocApiBufferByTag[tag] =\n (jsDocApiBufferByTag[tag] || '') + templateJsdocMethod({ classMethod, httpMethod, path, pathParams, bodyParams, queryParams })\n dependenciesByTag[tag] = dependenciesByTag[tag]\n ? [...new Set([...importStatements, ...dependenciesByTag[tag]])]\n : [...new Set(importStatements)]\n }\n }\n }\n\n arrayDefinitions = [...new Set(arrayDefinitions)]\n return { apiBufferByTag, jsDocApiBufferByTag, dependenciesByTag, classImports, arrayDefinitions }\n }\n\n static main = async (nameArray: string[]): Promise<Set<string>> => {\n const serviceName = nameArray[0]\n const swaggerFile = nameArray[2]\n const parser = new SwaggerParser()\n\n const generatedFolder = CliParser.isAdmin() ? CodeGenerator.getGeneratedAdminFolder() : CodeGenerator.getGeneratedPublicFolder()\n\n const DIST_DIR = `${generatedFolder}/${serviceName}`\n const DIST_DOCS_DIR = path.join(DIST_DIR, 'docs')\n const DIST_DEFINITION_DIR = path.join(DIST_DIR, 'definitions')\n\n const swaggerFilePath = `${CliParser.getSwaggersOutputPath()}/${swaggerFile}`\n const swaggerPatchedFilePath = `${CodeGenerator.getPatchedDir()}/${swaggerFile}`\n const swaggerPatchFilePath = `${swaggerFilePath}patch`\n ParserUtils.applyPatchIfExists(swaggerFilePath, swaggerPatchFilePath, swaggerPatchedFilePath, CodeGenerator.getPatchedDir())\n const api = await parser.parse(swaggerPatchedFilePath)\n\n const indexImportsSet: Set<string> = new Set()\n\n console.log('\\n----------\\n API name: %s, Version: %s schemes %s', api, api.info.title, api.info.version, api.schemes)\n\n ParserUtils.mkdirIfNotExist(DIST_DIR)\n ParserUtils.mkdirIfNotExist(DIST_DOCS_DIR)\n ParserUtils.mkdirIfNotExist(DIST_DEFINITION_DIR)\n\n const { apiBufferByTag, dependenciesByTag, classImports, arrayDefinitions /* jsDocApiBufferByTag, */ } = await CodeGenerator.iterateApi(\n api\n )\n\n const targetSrcFolder = `${CliParser.getOutputPath()}/`\n\n for (const tag in apiBufferByTag) {\n const className = _.upperFirst(_.camelCase(tag))\n const apiBuffer = apiBufferByTag[tag]\n const imports = [...new Set([...dependenciesByTag[tag], ...Object.values(classImports[className])])]\n\n const classGenName = CliParser.isAdmin() ? className + 'Admin$' : className + '$'\n\n ParserUtils.writeClassFile(DIST_DIR, classGenName, apiBuffer, imports)\n // const jsDocApiBuffer = jsDocApiBufferByTag[tag]\n // ParserUtils.writeJsdocFile(DIST_DIR, nameArray, jsDocApiBuffer)\n\n // For classes, we need to append `$`.\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DIR, `${classGenName}`), targetSrcFolder))\n }\n\n const duplicates = new Map<string, string>()\n const definitions = api?.components?.schemas || api.definitions\n for (const ref in definitions) {\n const definition = definitions[ref]\n let fileName = ParserUtils.parseRefType(ref)\n const fileExist = fs.existsSync(path.join(DIST_DEFINITION_DIR, `${fileName}.ts`))\n if (fileExist) {\n fileName = ParserUtils.toCamelCaseWord(ref).replace('.', '').replace('.', '')\n duplicates.set(ref, fileName)\n }\n const { buffer } = new TemplateZod().render(fileName, definition, new Map())\n // Disabled as it creates definitions tree dir structure that is difficult to maintain, instead a flat \"definitions\" dir was used\n // const dir = ParserUtils.parseImportDir(ref)\n // const defPath = path.join(DIST_DEFINITION_DIR, dir)\n ParserUtils.writeDefinitionFile(DIST_DEFINITION_DIR, fileName, buffer)\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DEFINITION_DIR, fileName), targetSrcFolder))\n }\n\n // rerun, find duplicates and write again the fixed dup name\n for (const ref in definitions) {\n const definition = definitions[ref]\n const fileName = ParserUtils.parseRefType(ref)\n const { buffer, duplicateFound } = new TemplateZod().render(fileName, definition, duplicates)\n if (duplicateFound) {\n ParserUtils.writeDefinitionFile(DIST_DEFINITION_DIR, fileName, buffer)\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DEFINITION_DIR, fileName), targetSrcFolder))\n }\n }\n\n for (const arrayClass of arrayDefinitions) {\n const buffer = new TemplateZodArray().render(arrayClass)\n ParserUtils.writeDefinitionFile(DIST_DEFINITION_DIR, arrayClass, buffer)\n indexImportsSet.add(ParserUtils.getRelativePathToWebSdkSrcFolder(path.join(DIST_DEFINITION_DIR, arrayClass), targetSrcFolder))\n }\n\n console.log('\\n----------\\nCOMPLETED.\\n----------\\n\\n')\n return indexImportsSet\n }\n}\n","/*\n * Copyright (c) 2018-2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\nimport * as https from 'https'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { CliParser } from './CliParser'\n\n/**\n * This file iterates over intended API configs and downloads the swagger files to target location from --swaggersOutput argument\n *\n * e.g\n * /packages\n * /od-config\n * /codegen\n * /swaggers\n * serviceName.json --> example \"iam.json\"\n */\nexport class SwaggerDownloader {\n static getDestFile = (targetFileName: string) => {\n const destPath = CliParser.getResolvedSwaggersOutputPath()\n const destFile = path.join(destPath, targetFileName)\n if (fs.existsSync(destFile)) return destFile\n if (!fs.existsSync(destPath)) fs.mkdirSync(destPath)\n fs.writeFileSync(destFile, '')\n return destFile\n }\n\n static downloadFile = (targetFileName: string, url: string) => {\n const destFile = SwaggerDownloader.getDestFile(targetFileName)\n const file = fs.createWriteStream(destFile)\n const request = https.get(url, function (response) {\n response.pipe(file)\n file.on('finish', () => {\n file.close()\n console.log(`SwaggerDownload ${url} completed`)\n })\n })\n request.on('error', (err: Error) => {\n console.log(`SwaggerDownloader dl failed for \"${targetFileName}\" and \"${url}\"`, err)\n })\n }\n\n static main = () => {\n const swaggers = CliParser.getConfigFile()\n for (const ref in swaggers) {\n const targetFileName = swaggers[ref][2]\n const url = swaggers[ref][3]\n SwaggerDownloader.downloadFile(targetFileName, url)\n }\n console.log('\\n----------\\n SwaggerDownloader COMPLETED.\\n----------\\n\\n')\n }\n}\n","/*\n * Copyright (c) 2022 AccelByte Inc. All Rights Reserved\n * This is licensed software from AccelByte Inc, for limitations\n * and restrictions contact your company contract manager.\n */\n\nimport yargs from 'yargs'\nimport { CliOption, CliParser } from './CliParser'\nimport { CodeGenerator } from './CodeGenerator'\nimport path from 'path'\nimport { ParserUtils } from './ParserUtils'\nimport { SwaggerDownloader } from './SwaggerDownloader'\n\n// eslint-disable-next-line no-unused-expressions\nyargs\n .command('download-swaggers', 'Download swaggers JSON files', (yargs: CliOption) => {\n CliParser.createInstance(yargs)\n SwaggerDownloader.main()\n })\n .command('generate-code', 'Generate code based on downloaded swagger files', async (yargs: CliOption) => {\n // validate options\n yargs.check(({ output, swaggersOutput }) => {\n if (!output?.trim()) {\n throw new Error('output is required for generate-code')\n }\n return true\n })\n\n CliParser.createInstance(yargs)\n const arrayOfSets = await Promise.all(CliParser.getConfigFile().map(config => CodeGenerator.main(config)))\n const indexImportsSet = new Set<string>()\n const filenamesSet = new Set<string>()\n\n for (const set of arrayOfSets) {\n set.forEach(value => {\n const fileName = path.basename(value)\n\n if (!filenamesSet.has(fileName)) {\n indexImportsSet.add(value)\n filenamesSet.add(fileName)\n }\n })\n }\n\n const indexImportsArray = Array.from(indexImportsSet)\n const filesToImport = indexImportsArray.map(fileToImport => {\n return `export * from '${fileToImport.replace('\\\\', '/')}'`\n })\n ParserUtils.writeAllImportsFile(CliParser.getOutputPath(), filesToImport.join('\\n'), CliParser.isAdmin())\n })\n .option('config', {\n description: 'Config file providing backend services URL.',\n type: 'string',\n demandOption: true\n })\n .option('swaggersOutput', {\n description: 'Output path for downloaded swaggers JSON files.',\n type: 'string',\n demandOption: true\n })\n .option('output', {\n description: 'Output path for generated code. Required for generate-code',\n type: 'string'\n })\n .option('admin', {\n description: 'Only generate /admin endpoints.',\n type: 'boolean',\n default: false,\n demandOption: false\n })\n .demandCommand(1)\n .help().argv\n"],"names":["fs","path"],"mappings":";;;;;;;;;;;AAWA,MAAM,cAAiB,GAAA,CAAA,CAAE,KAAM,CAAA,CAAA,CAAE,MAAM,CAAE,CAAA,MAAA,EAAA,CAAA,CAAA,CAAA;AAWlB,MAAA,SAAA,CAAA;AAAA,EACN,OAAA,SAAA,CAAA;AAAA,EACR,IAAA,CAAA;AAAA,EACP,YAAY,KAAkB,EAAA;AAC5B,IAAA,IAAA,CAAK,OAAO,KAAM,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGN,OAAA,cAAA,GAAiB,CAAC,KAAqB,KAAA;AACnD,IAAU,SAAA,CAAA,SAAA,GAAY,IAAI,SAAU,CAAA,KAAA,CAAA,CAAA;AACpC,IAAA,OAAO,SAAU,CAAA,SAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGJ,OAAA,QAAA,GAAW,CAAC,KAAsB,KAAA;AAC/C,IAAI,IAAA,CAAC,SAAU,CAAA,SAAA,IAAa,KAAO,EAAA;AACjC,MAAA,OAAO,UAAU,cAAe,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA;AAElC,IAAA,OAAO,SAAU,CAAA,SAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGL,gBAAgB,MAAc;AAC1C,IAAO,OAAA,SAAA,CAAU,WAAW,IAAK,CAAA,MAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGrB,gBAAgB,MAAsB;AAClD,IAAA,MAAM,aAAa,SAAU,CAAA,aAAA,EAAA,CAAA;AAC7B,IAAA,IAAI,CAAC,UAAA;AAAY,MAAA,MAAM,IAAI,KAAM,CAAA,qBAAA,CAAA,CAAA;AACjC,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,KAAM,CAAAA,WAAA,CAAG,aAAa,UAAY,EAAA,MAAA,CAAA,CAAA,CAAA;AACtD,IAAA,IAAI,CAAC,cAAA,CAAe,SAAU,CAAA,MAAA,CAAA,CAAQ,OAAS,EAAA;AAC7C,MAAA,MAAM,IAAI,KAAM,CAAA,0BAAA,CAAA,CAAA;AAAA,KAAA;AAElB,IAAO,OAAA,MAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGK,gBAAgB,MAAc;AAC1C,IAAO,OAAA,SAAA,CAAU,WAAW,IAAK,CAAA,MAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGrB,wBAAwB,MAAc;AAClD,IAAO,OAAA,SAAA,CAAU,WAAW,IAAK,CAAA,cAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGrB,gCAAgC,MAAc;AAC1D,IAAO,OAAA,IAAA,CAAK,QAAQ,SAAU,CAAA,qBAAA,EAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGlB,UAAU,MAAe;AACrC,IAAO,OAAA,SAAA,CAAU,WAAW,IAAK,CAAA,KAAA,CAAA;AAAA,GAAA,CAAA;AAAA;;AC/DrC,MAAM,sBAAsB,OAAO;AAAA,EACjC,gBAAkB,EAAA,CAAC,aAAe,EAAA,UAAA,EAAY,aAAa,mBAAqB,EAAA,UAAA,CAAA;AAAA,EAChF,KAAA,EAAO,CAAC,oBAAsB,EAAA,eAAA,CAAA;AAAA,EAC9B,KAAK,CAAC,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAGR,MAAM,sBAAsB,OAAO;AAAA,EACjC,OAAO,CAAC,eAAA,CAAA;AAAA,EACR,kBAAkB,CAAC,kBAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAGrB,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,gBAA+B,KAAA;AACpE,EAAA,MAAM,gBAAmB,GAAA,mBAAA,EAAA,CAAA;AACzB,EAAA,MAAM,gBAAmB,GAAA,mBAAA,EAAA,CAAA;AAEzB,EAAA,KAAA,MAAW,CAAC,YAAA,EAAc,cAAmB,CAAA,IAAA,MAAA,CAAO,QAAQ,gBAAmB,CAAA,EAAA;AAC7E,IAAA,KAAA,MAAW,iBAAiB,cAAgB,EAAA;AAC1C,MAAM,MAAA,cAAA,GAAiB,IAAI,MAAA,CAAO,CAAiB,cAAA,EAAA,aAAA,CAAA,aAAA,CAAA,CAAA,CAAA;AACnD,MAAI,IAAA,IAAA,CAAK,MAAM,cAAiB,CAAA,EAAA;AAC9B,QAAA,gBAAA,CAAiB,YAAgB,CAAA,GAAA,CAAC,GAAI,gBAAA,CAAiB,iBAAiB,EAAK,EAAA,aAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAAA;AAKnF,EAAA,MAAM,gBAAmB,GAAA,MAAA,CAAO,IAAK,CAAA,gBAAA,CAAA,CAClC,OACA,GAAI,CAAA,CAAC,YAAyB,KAAA,CAAA,SAAA,EAAY,iBAAiB,YAAc,CAAA,CAAA,IAAA,EAAA,CAAO,IAAK,CAAA,IAAA,CAAA,CAAA,SAAA,EAAiB,iBACtG,IAAK,CAAA,IAAA,CAAA,CAAA;AACR,EAAA,OAAO,CAAG,EAAA,gBAAA,CAAA;AAAA,EAAqB,gBAAA,CAAiB,OAAO,IAAK,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAGvD,MAAM,aAAgB,GAAA,CAAC,SAAmB,EAAA,IAAA,EAAc,gBAC7D,KAAA,CAAA;AAAA;AAAA;AAAA,EAAA,EAGE,gBAAgB,IAAM,EAAA,gBAAA,CAAA,CAAA;AAAA;AAAA,eAET,EAAA,SAAA,CAAA;AAAA;AAAA;AAAA,EAGb,EAAA,IAAA,CAAA;AAAA;AAAA,EAAA,CAAA;;ACxCS,MAAA,iBAAA,GAAoB,CAAC,OAAA,EAAS,IACzC,KAAA,CAAA;AAAA;AAAA,gBAEgB,EAAA,OAAA,CAAA;AAAA,EAChB,IAAA,CAAA;AAAA;AAAA;AAAA,CAIG,CAAA,OAAA,CAAQ,SAAS,GACjB,CAAA,CAAA,IAAA,EAAA;;ACDoB,MAAA,WAAA,CAAA;AAAA,EAChB,OAAA,+BAAA,GAAkC,CAAC,UAAmC,KAAA;AAC3E,IAAA,MAAM,WAAW,UAAW,CAAA,IAAA,CAAK,MAAM,UAAW,CAAA,IAAA,CAAK,YAAY,GAAO,CAAA,GAAA,CAAA,CAAA,CAAA;AAC1E,IAAA,MAAM,eAAe,UAAW,CAAA,IAAA,KAAS,WAAW,CAAI,CAAA,EAAA,UAAA,CAAW,aAAa,UAAW,CAAA,OAAA,CAAA;AAC3F,IAAA,OAAO,GAAG,QAAa,CAAA,EAAA,EAAA,YAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGlB,OAAA,SAAA,GAAY,CAAC,SAAkC,KAAA;AACpD,IAAI,IAAA,SAAA,CAAU,SAAS,KAAS,IAAA,SAAA,CAAU,SAAS,SAAa,IAAA,SAAA,EAAW,QAAQ,IAAS,KAAA,SAAA;AAAW,MAAO,OAAA,QAAA,CAAA;AAC9G,IAAA,IAAI,UAAU,IAAS,KAAA,OAAA;AAAS,MAAO,OAAA,CAAA,EAAG,SAAU,CAAA,KAAA,CAAM,IAAQ,IAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAClE,IAAI,IAAA,SAAA,EAAW,QAAQ,IAAS,KAAA,OAAA;AAAS,MAAA,OAAO,CAAG,EAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,IAAQ,IAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAClF,IAAA,IAAI,WAAW,MAAQ,EAAA,IAAA;AAAM,MAAA,OAAO,UAAU,MAAO,CAAA,IAAA,CAAA;AACrD,IAAA,OAAO,SAAU,CAAA,IAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGZ,OAAA,oBAAA,GAAuB,CAAC,WAAsC,KAAA;AACnE,IAAA,OAAO,YAAY,GAAI,CAAA,CAAA,UAAA,KAAc,WAAY,CAAA,kBAAA,CAAmB,aAAa,IAAK,CAAA,GAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGjF,OAAA,uBAAA,GAA0B,CAAC,WAAsC,KAAA;AACtE,IAAO,OAAA,WAAA,CAAY,IAAK,CAAA,CAAA,UAAA,KAAc,UAAW,CAAA,QAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAG5C,OAAA,uBAAA,GAA0B,CAAC,WAAsC,KAAA;AACtE,IAAA,MAAM,MAAS,GAAA,WAAA,CACZ,MAAO,CAAA,CAAA,UAAA,KAAc,CAAC,CAAC,UAAA,CAAW,OAAW,IAAA,CAAC,UAAW,CAAA,QAAA,CAAA,CACzD,GAAI,CAAA,WAAA,CAAY,iCAChB,IAAK,CAAA,GAAA,CAAA,CAAA;AACR,IAAO,OAAA,MAAA,GAAS,GAAG,MAAY,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAG1B,OAAA,sBAAA,GAAyB,CAAC,UAAqC,KAAA;AACpE,IAAA,OAAO,UAAW,CAAA,GAAA,CAAI,WAAY,CAAA,cAAA,CAAA,CAAgB,MAAO,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGpD,OAAA,cAAA,GAAiB,CAAC,IAAiB,KAAA;AACxC,IAAI,IAAA,GAAA,GAAM,IAAK,CAAA,OAAA,CAAQ,GAAK,EAAA,GAAA,CAAA,CAAA;AAC5B,IAAI,IAAA,GAAA,CAAI,IAAI,MAAS,GAAA,CAAA,CAAA,KAAO,OAAO,GAAI,CAAA,GAAA,CAAI,MAAS,GAAA,CAAA,CAAA,KAAO,GAAK,EAAA;AAC9D,MAAM,GAAA,GAAA,GAAA,CAAI,MAAM,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAErB,IAAI,IAAA,CAAC,GAAI,CAAA,QAAA,CAAS,GAAM,CAAA,EAAA;AACtB,MAAO,OAAA,EAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,OAAO,IAAI,KAAM,CAAA,CAAA,EAAG,IAAI,WAAY,CAAA,GAAA,CAAA,CAAA,CAAM,QAAQ,GAAK,EAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAAA,EAIpD,OAAA,cAAA,GAAiB,CAAC,SAAkC,KAAA;AACzD,IAAA,MAAM,OAAO,SAAW,EAAA,MAAA,EAAQ,IAAQ,IAAA,SAAA,EAAW,QAAQ,KAAO,EAAA,IAAA,CAAA;AAClE,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA;AAET,IAAM,MAAA,IAAA,GAAO,YAAY,YAAa,CAAA,IAAA,CAAA,CAAA;AAGtC,IAAA,OAAO,YAAY,IAA8B,CAAA,uBAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAG5C,OAAA,YAAA,GAAe,CAAC,IAAiB,KAAA;AACtC,IAAI,IAAA,GAAA,GAAM,IAAK,CAAA,OAAA,CAAQ,GAAK,EAAA,GAAA,CAAA,CAAA;AAC5B,IAAI,IAAA,GAAA,CAAI,IAAI,MAAS,GAAA,CAAA,CAAA,KAAO,OAAO,GAAI,CAAA,GAAA,CAAI,MAAS,GAAA,CAAA,CAAA,KAAO,GAAK,EAAA;AAC9D,MAAM,GAAA,GAAA,GAAA,CAAI,MAAM,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAErB,IAAA,MAAM,GAAM,GAAA,GAAA,CAAI,KAAM,CAAA,GAAA,CAAI,YAAY,GAAO,CAAA,GAAA,CAAA,CAAA,CAAA;AAE7C,IAAO,OAAA,CAAA,CAAE,UAAW,CAAA,CAAA,CAAE,SAAU,CAAA,GAAA,CAAA,CAAA,CAAM,OAAQ,CAAA,QAAA,EAAU,CAAS,KAAA,KAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,EAAK,EAAI,CAAA,CAAA,WAAA,EAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGnF,OAAA,kBAAA,GAAqB,CAAC,UAAmC,KAAA;AAC9D,IAAM,MAAA,QAAA,GAAW,UAAW,CAAA,QAAA,GAAW,EAAK,GAAA,GAAA,CAAA;AAE5C,IAAA,MAAM,WAAW,UAAW,CAAA,IAAA,CAAK,MAAM,UAAW,CAAA,IAAA,CAAK,YAAY,GAAO,CAAA,GAAA,CAAA,CAAA,CAAA;AAE1E,IAAA,IAAI,WAAW,IAAM,EAAA;AACnB,MAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,IAAA,CAAK,GAAI,CAAA,CAAA,GAAA,KAAQ,UAAW,CAAA,IAAA,KAAS,QAAW,GAAA,CAAA,CAAA,EAAI,GAAS,CAAA,CAAA,CAAA,GAAA,GAAA,CAAA,CAAM,IAAK,CAAA,KAAA,CAAA,CAAA;AACjG,MAAO,OAAA,CAAA,EAAG,WAAW,QAAa,CAAA,EAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGpC,IAAA,IAAI,UAAW,CAAA,IAAA,IAAQ,WAAY,CAAA,SAAA,CAAU,gBAAgB,QAAU,EAAA;AACrE,MAAA,OAAO,GAAG,QAAW,CAAA,EAAA,QAAA,CAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAGvB,IAAA,IAAI,YAAY,MAAQ,EAAA,IAAA,IAAQ,WAAY,CAAA,SAAA,CAAU,gBAAgB,QAAU,EAAA;AAC9E,MAAA,OAAO,GAAG,QAAW,CAAA,EAAA,QAAA,CAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAGvB,IAAA,IAAI,UAAW,CAAA,IAAA,IAAQ,UAAW,CAAA,IAAA,KAAS,OAAS,EAAA;AAClD,MAAA,OAAO,CAAG,EAAA,QAAA,CAAA,EAAW,QAAa,CAAA,EAAA,EAAA,UAAA,CAAW,MAAM,IAAQ,IAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAG7D,IAAA,IAAI,YAAY,MAAQ,EAAA,IAAA,IAAQ,UAAW,CAAA,MAAA,CAAO,SAAS,OAAS,EAAA;AAClE,MAAA,OAAO,GAAG,QAAW,CAAA,EAAA,QAAA,CAAA,EAAA,EAAa,UAAW,CAAA,MAAA,CAAO,MAAM,IAAQ,IAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAGpE,IAAI,IAAA,UAAA,CAAW,IAAQ,IAAA,UAAA,CAAW,IAAM,EAAA;AACtC,MAAO,OAAA,CAAA,EAAG,QAAW,CAAA,EAAA,QAAA,CAAA,EAAA,EAAa,UAAW,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAG/C,IAAA,IAAI,UAAY,EAAA,MAAA,EAAQ,IAAQ,IAAA,UAAA,CAAW,OAAO,IAAM,EAAA;AACtD,MAAA,OAAO,CAAG,EAAA,QAAA,CAAA,EAAW,QAAa,CAAA,EAAA,EAAA,UAAA,CAAW,MAAO,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAGtD,IAAA,OAAO,GAAG,QAAW,CAAA,EAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGhB,OAAA,mBAAA,GAAsB,CAAC,UAA6C,KAAA;AACzE,IAAA,MAAM,CAAC,SAAa,CAAA,GAAA,UAAA,CAAA;AAEpB,IAAA,IAAI,CAAC,SAAA;AAAW,MAAO,OAAA,IAAA,CAAA;AAEvB,IAAI,IAAA,UAAA,CAAW,SAAS,CAAK,IAAA,SAAA,EAAW,SAAS,MAAU,IAAA,CAAC,WAAW,MAAQ,EAAA;AAC7E,MAAI,IAAA,aAAA,GAAgB,IAAI,UAAW,CAAA,GAAA,CAAI,gBAAa,WAAY,CAAA,kBAAA,CAAmB,aAAY,IAAK,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACpG,MAAgB,aAAA,GAAA,aAAA,CAAc,QAAQ,aAAe,EAAA,aAAA,CAAA,CAAA;AACrD,MAAO,OAAA,aAAA,CAAA;AAAA,KAAA;AAGT,IAAI,IAAA,SAAA,EAAW,QAAQ,IAAS,KAAA,OAAA,IAAW,CAAC,SAAW,EAAA,MAAA,EAAQ,OAAO,IAAM,EAAA;AAC1E,MAAA,OAAO,CAAG,EAAA,SAAA,CAAU,MAAO,CAAA,KAAA,CAAM,IAAQ,IAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAG3C,IAAA,IAAI,WAAW,MAAQ,EAAA,IAAA,KAAS,WAAW,SAAW,EAAA,MAAA,EAAQ,OAAO,IAAM,EAAA;AACzE,MAAA,OAAO,CAAG,EAAA,WAAA,CAAY,YAAa,CAAA,SAAA,CAAU,OAAO,KAAM,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAG5D,IAAI,IAAA,SAAA,EAAW,OAAO,IAAM,EAAA;AAC1B,MAAO,OAAA,WAAA,CAAY,YAAa,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA;AAGnD,IAAA,IAAI,SAAW,EAAA,MAAA,EAAQ,oBAAsB,EAAA,IAAA,KAAS,QAAU,EAAA;AAC9D,MAAO,OAAA,KAAA,CAAA;AAAA,KAAA;AAGT,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAGF,eAAe,YAA6C,EAAA;AACjE,IAAM,MAAA,IAAA,GAAO,OAAO,IAAK,CAAA,YAAA,CAAA,CAAA;AACzB,IAAA,IAAI,aAAgB,GAAA,IAAA,CAAA;AACpB,IAAA,IAAA,CAAK,QAAQ,CAAO,GAAA,KAAA;AAClB,MAAI,IAAA,MAAA,CAAO,GAAK,CAAA,CAAA,UAAA,CAAW,GAAM,CAAA,EAAA;AAC/B,QAAM,MAAA,GAAA,GAAM,aAAa,GAAK,CAAA,CAAA,MAAA,CAAA;AAC9B,QAAA,MAAM,QAAQ,YAAa,CAAA,GAAA,CAAA,CAAK,WAAW,YAAa,CAAA,GAAA,CAAA,CAAK,QAAQ,kBAAoB,CAAA,CAAA,MAAA,CAAA;AACzF,QAAA,IAAI,KAAK,IAAM,EAAA;AACb,UAAgB,aAAA,GAAA,WAAA,CAAY,aAAa,GAAI,CAAA,IAAA,CAAA,CAAA;AAAA,SAAA,MAAA,IACpC,GAAK,EAAA,IAAA,KAAS,OAAW,IAAA,GAAA,CAAI,OAAO,IAAM,EAAA;AACnD,UAAgB,aAAA,GAAA,WAAA,CAAY,YAAa,CAAA,GAAA,CAAI,KAAM,CAAA,IAAA,CAAA,CAAA;AACnD,UAAA,aAAA,GAAgB,CAAG,EAAA,aAAA,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA,MAAA,IACV,OAAO,IAAM,EAAA;AACtB,UAAgB,aAAA,GAAA,WAAA,CAAY,aAAa,KAAM,CAAA,IAAA,CAAA,CAAA;AAAA,SAC1C,MAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAMX,IAAO,OAAA,aAAA,CAAA;AAAA,GAAA;AAAA,EAGF,OAAA,gBAAA,CAAiB,YAAoB,YAAiC,EAAA;AAC3E,IAAA,IAAI,CAAC,YAAA,IAAgB,YAAa,CAAA,MAAA,GAAS,CAAG,EAAA;AAC5C,MAAO,OAAA,KAAA,CAAA;AAAA,KAAA;AAET,IAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,KAAO,EAAA,OAAA,CAAA,CAAS,SAAS,UAAa,CAAA,EAAA;AAClD,MAAO,OAAA,KAAA,CAAA;AAAA,KAAA;AAET,IAAA,OAAO,aAAa,QAAS,CAAA,mCAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAGxB,iBAAiB,UAAyD,EAAA;AAC/E,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAET,IAAA,OAAO,UAAW,CAAA,MAAA,CAAO,CAAa,SAAA,KAAA,SAAA,CAAU,EAAO,KAAA,MAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAGlD,mBAAoB,CAAA;AAAA,IACzB,IAAA,EAAA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,GAMS,EAAA;AACT,IAAA,IAAI,eAAkB,GAAA,KAAA,CAAA;AACtB,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAW,KAAA,MAAA,SAAA,IAAa,SAAS,UAAY,EAAA;AAC3C,QAAI,IAAA,SAAA,CAAU,OAAO,MAAQ,EAAA;AAC3B,UAAkB,eAAA,GAAA,eAAA,CAAgB,QAAQ,GAAM,GAAA,SAAA,CAAU,OAAO,GAAK,EAAA,IAAA,GAAO,WAAY,CAAA,eAAA,CAAgB,SAAU,CAAA,IAAA,CAAA,CAAA,CAAA;AAEnH,UAAkB,eAAA,GAAA,eAAA,CAAgB,QAAQ,MAAQ,EAAA,EAAA,CAAA,CAAA;AAClD,UAAkB,eAAA,GAAA,eAAA,CAAgB,QAAQ,cAAgB,EAAA,EAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA;AAIhE,IAAI,IAAA,WAAA,GAAc,aAAa,GAAM,GAAA,eAAA,CAAA;AACrC,IAAA,WAAA,GAAc,EAAE,SAAU,CAAA,WAAA,CAAA,CAAA;AAK1B,IAAc,WAAA,GAAA,WAAA,CAAY,QAAQ,6BAA+B,EAAA,IAAA,CAAA,CAAA;AACjE,IAAc,WAAA,GAAA,WAAA,CAAY,QAAQ,4BAA8B,EAAA,SAAA,CAAA,CAAA;AAEhE,IAAA,MAAM,UAAa,GAAA,uBAAA,CAAA;AACnB,IAAM,MAAA,mBAAA,GACJ,WAAY,CAAA,OAAA,CAAQ,UAAc,CAAA,GAAA,CAAA,IAAK,YAAY,OAAQ,CAAA,UAAA,CAAA,GAAc,UAAW,CAAA,MAAA,GAAS,WAAY,CAAA,MAAA,CAAA;AAC3G,IAAA,MAAM,kBAAkB,CAAC,UAAA,CAAA,CAAA;AACzB,IAAA,IAAI,mBAAuB,IAAA,CAAC,eAAgB,CAAA,QAAA,CAAS,SAAY,CAAA,EAAA;AAC/D,MAAc,WAAA,GAAA,WAAA,CAAY,QAAQ,UAAY,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAEhD,IAAO,OAAA,WAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAGF,iBAAiB,UAAmC,EAAA;AACzD,IAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,UAAe,CAAA,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACtD,MAAA,OAAO,WAAW,MAAO,CAAA,CAAA,SAAA,KAAa,UAAU,EAAO,KAAA,MAAA,IAAU,UAAU,EAAO,KAAA,UAAA,CAAA,CAAA;AAAA,KAAA;AAEpF,IAAO,OAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAGF,sBAAsB,UAAyD,EAAA;AACpF,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAET,IAAA,OAAO,UAAW,CAAA,MAAA,CAAO,CAAa,SAAA,KAAA,SAAA,CAAU,EAAO,KAAA,OAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAGlD,gBAAgB,WAAqB,EAAA;AAC1C,IAAI,IAAA,CAACA,WAAG,CAAA,UAAA,CAAW,WAAc,CAAA,EAAA;AAC/B,MAAGA,WAAA,CAAA,SAAA,CAAU,WAAa,EAAA,EAAE,SAAW,EAAA,IAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAAA,OAIpC,cAAe,CAAA,OAAA,EAAiB,OAAiB,EAAA,SAAA,EAAmB,OAAoB,EAAA;AAC7F,IAAM,MAAA,WAAA,GAAc,aAAc,CAAA,OAAA,EAAS,SAAW,EAAA,OAAA,CAAA,CAAA;AACtD,IAAAA,WAAA,CAAG,aAAc,CAAA,CAAA,EAAG,OAAW,CAAA,CAAA,EAAA,OAAA,CAAA,GAAA,CAAA,EAAc,YAAY,sBAAuB,CAAA,WAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAG3E,OAAA,cAAA,CAAe,OAAiB,EAAA,SAAA,EAAqB,SAAmB,EAAA;AAC7E,IAAM,MAAA,SAAA,GAAY,iBAAkB,CAAA,SAAA,CAAU,CAAI,CAAA,EAAA,SAAA,CAAA,CAAA;AAClD,IAAAA,WAAA,CAAG,aAAc,CAAA,CAAA,EAAG,OAAgB,CAAA,MAAA,EAAA,SAAA,CAAU,CAAS,CAAA,CAAA,GAAA,CAAA,EAAA,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGlD,OAAA,mBAAA,CAAoB,OAAiB,EAAA,IAAA,EAAc,MAAgB,EAAA;AACxE,IAAA,WAAA,CAAY,eAAgB,CAAA,OAAA,CAAA,CAAA;AAC5B,IAAAA,WAAA,CAAG,cAAcC,aAAK,CAAA,IAAA,CAAK,SAAS,CAAG,EAAA,IAAA,CAAA,GAAA,CAAA,CAAA,EAAY,YAAY,sBAAuB,CAAA,MAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGjF,OAAA,mBAAA,CAAoB,OAAiB,EAAA,MAAA,EAAgB,aAAwB,EAAA;AAClF,IAAA,WAAA,CAAY,eAAgB,CAAA,OAAA,CAAA,CAAA;AAC5B,IAAGD,WAAA,CAAA,aAAA,CAAcC,cAAK,IAAK,CAAA,OAAA,EAAS,OAAO,aAAgB,GAAA,OAAA,GAAU,QAAwB,CAAA,WAAA,CAAA,CAAA,EAAA,WAAA,CAAY,sBAAuB,CAAA,MAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAG3H,YAAY,GAAa,EAAA;AAC9B,IAAA,OAAO,IACJ,KAAM,CAAA,GAAA,CAAA,CACN,GAAI,CAAA,SAAU,MAAM,KAAO,EAAA;AAE1B,MAAA,IAAI,UAAU,CAAG,EAAA;AACf,QAAA,OAAO,IAAK,CAAA,WAAA,EAAA,CAAA;AAAA,OAAA;AAGd,MAAA,OAAO,YAAY,eAAgB,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAEpC,IAAK,CAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAGH,gBAAgB,IAAc,EAAA;AACnC,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAGT,IAAA,IAAA,GAAO,IAAK,CAAA,OAAA,CAAQ,QAAU,EAAA,CAAA,CAAA,KAAK,EAAE,CAAG,CAAA,CAAA,WAAA,EAAA,CAAA,CAAA;AAExC,IAAA,OAAO,IAAK,CAAA,MAAA,CAAO,CAAG,CAAA,CAAA,WAAA,EAAA,GAAgB,KAAK,KAAM,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAG5C,gBAAgB,IAAc,EAAA;AACnC,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAET,IAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,EAAU,CAAO,GAAA,KAAA;AACnC,MAAA,OAAO,IAAI,MAAO,CAAA,CAAA,CAAA,CAAG,WAAgB,EAAA,GAAA,GAAA,CAAI,UAAU,CAAG,CAAA,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAInD,kBACL,CAAA,eAAA,EACA,4BACA,EAAA,sBAAA,EACA,iBACA,EAAA;AACA,IAAI,IAAA,CAACD,WAAG,CAAA,UAAA,CAAW,iBAAoB,CAAA,EAAA;AACrC,MAAGA,WAAA,CAAA,SAAA,CAAU,iBAAmB,EAAA,EAAE,SAAW,EAAA,IAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAG/C,IAAI,IAAA,CAACA,WAAG,CAAA,UAAA,CAAW,4BAA+B,CAAA,EAAA;AAChD,MAAAA,WAAA,CAAG,aAAa,eAAiB,EAAA,sBAAA,CAAA,CAAA;AACjC,MAAA,OAAA;AAAA,KAAA;AAEF,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,KAAM,CAAAA,WAAA,CAAG,aAAa,eAAiB,EAAA,MAAA,CAAA,CAAA,CAAA;AACnE,IAAA,MAAM,uBAA0B,GAAA,IAAA,CAAK,KAAM,CAAAA,WAAA,CAAG,aAAa,4BAA8B,EAAA,MAAA,CAAA,CAAA,CAAA;AACzF,IAAM,MAAA,EAAE,WAAgB,EAAA,GAAA,UAAA,CAAW,cAAgB,EAAA,uBAAA,CAAA,CAAA;AACnD,IAAAA,WAAA,CAAG,aAAc,CAAA,sBAAA,EAAwB,IAAK,CAAA,SAAA,CAAU,aAAa,IAAM,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGtE,OAAA,gCAAA,CAAiC,WAAmB,eAAyB,EAAA;AAKlF,IAAM,MAAA,QAAA,GAAW,SAAU,CAAA,OAAA,CAAQ,KAAO,EAAA,GAAA,CAAA,CAAA;AAC1C,IAAA,OAAO,QAAS,CAAA,OAAA,CAAQ,KAAO,EAAA,GAAA,CAAA,CAAK,QAAQ,eAAiB,EAAA,IAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGxD,OAAA,sBAAA,GAAyB,CAAC,OAA4B,KAAA;AAC3D,IAAM,MAAA,WAAA,GAAc,IAAI,IAAO,EAAA,CAAA,WAAA,EAAA,CAAA;AAC/B,IAAO,OAAA,CAAA;AAAA,qBACY,EAAA,WAAA,GAAc,IAAO,GAAA,CAAA,CAAA,EAAI,WAAgB,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA,EAI9D,OAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA;;AC3UF,MAAM,MAAA,GAAS,EAAE,MAAO,CAAA;AAAA,EACtB,IAAA,EAAM,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,EACjB,IAAA,EAAM,EACH,KAAM,CAAA,CAAC,EAAE,OAAQ,CAAA,OAAA,CAAA,EAAU,EAAE,OAAQ,CAAA,QAAA,CAAA,EAAW,EAAE,OAAQ,CAAA,MAAA,CAAA,EAAS,EAAE,OAAQ,CAAA,QAAA,CAAA,EAAW,EAAE,OAAQ,CAAA,SAAA,CAAA,EAAY,CAAE,CAAA,OAAA,CAAQ,SACxH,CAAA,CAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EACH,KAAA,EAAO,EACJ,MAAO,CAAA;AAAA,IACN,IAAA,EAAM,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,IACjB,IAAA,EAAM,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,GAElB,CAAA,CAAA,OAAA,EAAA;AAAA,EACH,YAAY,CAAE,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,CAAE,CAAA,MAAA,EAAA,CAAA,CAAU,OAAW,EAAA,EAAA,CAAA,CAAE,OAAO,CAAE,CAAA,MAAA,CAAO,EAAE,IAAA,EAAM,EAAE,MAAa,EAAA,EAAA,CAAA,CAAA,CAAA,OAAA,EAAA,CAAA,CAAA;AAAA,EAC7F,WAAA,EAAa,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,EACxB,oBAAA,EAAsB,EACnB,MAAO,CAAA;AAAA,IACN,IAAA,EAAM,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,GAElB,CAAA,CAAA,OAAA,EAAA;AAAA,CAAA,CAAA,CAAA;AAKQ,MAAA,UAAA,GAAa,EAAE,MAAO,CAAA;AAAA,EACjC,QAAU,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,CAAE,MAAU,EAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EAC9B,UAAY,EAAA,CAAA,CACT,MACC,CAAA,CAAA,CAAE,MAAO,CAAA;AAAA,IACP,MAAM,CAAE,CAAA,MAAA,EAAA;AAAA,GAGX,CAAA,CAAA,CAAA,OAAA,EAAA;AAAA,CAAA,CAAA,CAAA;AAKQ,MAAA,WAAA,GAAc,EAAE,MAAO,CAAA,UAAA,CAAA,CAAA;AAIpC,MAAM,sBAAA,GAAyB,CAAE,CAAA,IAAA,CAAK,CAAC,QAAA,EAAU,WAAW,KAAO,EAAA,SAAA,EAAW,QAAU,EAAA,QAAA,EAAU,OAAS,EAAA,MAAA,CAAA,CAAA,CAAA;AAC3G,MAAM,uBAAuB,CAAE,CAAA,IAAA,CAAK,CAAC,MAAQ,EAAA,UAAA,EAAY,UAAU,MAAQ,EAAA,OAAA,CAAA,CAAA,CAAA;AAE3E,MAAM,kBAAA,GAAqB,EAAE,MAAO,CAAA;AAAA,EAClC,MAAM,sBAAuB,CAAA,OAAA,EAAA;AAAA,EAC7B,WAAA,EAAa,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,EACxB,MAAM,CAAE,CAAA,MAAA,EAAA;AAAA,EACR,EAAI,EAAA,oBAAA;AAAA,EACJ,QAAA,EAAU,EAAE,OAAU,EAAA,CAAA,OAAA,EAAA;AAAA,EACtB,QAAQ,MAAO,CAAA,OAAA,EAAA;AAAA,EACf,OAAA,EAAS,EAAE,KAAM,CAAA,CAAC,EAAE,OAAW,EAAA,EAAA,CAAA,CAAE,MAAU,EAAA,EAAA,CAAA,CAAE,MAAW,EAAA,CAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EACxD,IAAA,EAAM,CAAE,CAAA,KAAA,CAAM,CAAE,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,OAAW,EAAA,EAAA,CAAA,CAAE,MAAU,EAAA,EAAA,CAAA,CAAE,MAAY,EAAA,CAAA,CAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EAC9D,KAAA,EAAO,EACJ,MAAO,CAAA;AAAA,IACN,MAAM,CAAE,CAAA,MAAA,EAAA;AAAA,GAET,CAAA,CAAA,OAAA,EAAA;AAAA,CAAA,CAAA,CAAA;AAKQ,MAAA,QAAA,GAAW,EAAE,MAAO,CAAA;AAAA,EAC/B,WAAA,EAAa,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,EACxB,QAAU,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,CAAE,MAAU,EAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EAC9B,QAAU,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,CAAE,MAAU,EAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EAC9B,IAAM,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,CAAE,MAAU,EAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EAC1B,OAAA,EAAS,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,EACpB,aAAa,CAAE,CAAA,MAAA,EAAA;AAAA,EACf,UAAA,EAAY,EAAE,OAAU,EAAA,CAAA,OAAA,EAAA;AAAA,EACxB,SAAW,EAAA,CAAA,CAAE,MACX,CAAA,CAAA,CAAE,MAAO,CAAA;AAAA,IACP,WAAA,EAAa,EAAE,MAAS,EAAA,CAAA,OAAA,EAAA;AAAA,IACxB,QAAQ,MAAO,CAAA,OAAA,EAAA;AAAA,IACf,OAAA,EAAS,EACN,MAAO,CAAA;AAAA,MACN,kBAAA,EAAoB,EAAE,MAAO,CAAA;AAAA,QAC3B,QAAQ,MAAO,CAAA,OAAA,EAAA;AAAA,OAAA,CAAA;AAAA,KAGlB,CAAA,CAAA,OAAA,EAAA;AAAA,GAAA,CAAA,CAAA;AAAA,EAGP,UAAA,EAAY,CAAE,CAAA,KAAA,CAAM,kBAAoB,CAAA,CAAA,OAAA,EAAA;AAAA,EACxC,WAAA,EAAa,EACV,MAAO,CAAA;AAAA,IACN,UAAU,CAAE,CAAA,OAAA,EAAA;AAAA,IACZ,OAAA,EAAS,EACN,MAAO,CAAA;AAAA,MACN,kBAAA,EAAoB,EAAE,MAAO,CAAA;AAAA,QAC3B,QAAQ,MAAO,CAAA,OAAA,EAAA;AAAA,OAAA,CAAA;AAAA,KAGlB,CAAA,CAAA,OAAA,EAAA;AAAA,GAEJ,CAAA,CAAA,OAAA,EAAA;AAAA,CAAA,CAAA,CAAA;AAIL,MAAM,SAAA,GAAY,EAAE,MAAO,CAAA;AAAA,EACzB,KAAK,QAAS,CAAA,OAAA,EAAA;AAAA,EACd,MAAM,QAAS,CAAA,OAAA,EAAA;AAAA,EACf,OAAO,QAAS,CAAA,OAAA,EAAA;AAAA,EAChB,QAAQ,QAAS,CAAA,OAAA,EAAA;AAAA,EACjB,KAAK,QAAS,CAAA,OAAA,EAAA;AAAA,CAAA,CAAA,CAAA;AAKH,MAAA,KAAA,GAAQ,EAAE,MAAO,CAAA,SAAA,CAAA,CAAA;AAEH,EAAE,MAAO,CAAA;AAAA,EAClC,KAAO,EAAA,KAAA;AAAA,EACP,WAAa,EAAA,WAAA;AAAA,EACb,UAAU,CAAE,CAAA,MAAA,EAAA;AAAA,EACZ,IAAA,EAAM,EAAE,MAAO,CAAA;AAAA,IACb,aAAa,CAAE,CAAA,MAAA,EAAA;AAAA,IACf,OAAO,CAAE,CAAA,MAAA,EAAA;AAAA,IACT,OAAA,EAAS,EAAE,MAAO,CAAA;AAAA,MAChB,MAAM,CAAE,CAAA,MAAA,EAAA;AAAA,MACR,KAAK,CAAE,CAAA,MAAA,EAAA;AAAA,MACP,OAAO,CAAE,CAAA,MAAA,EAAA;AAAA,KAAA,CAAA;AAAA,IAEX,SAAS,CAAE,CAAA,MAAA,EAAA;AAAA,GAAA,CAAA;AAAA,EAEb,OAAS,EAAA,CAAA,CAAE,KAAM,CAAA,CAAA,CAAE,MAAU,EAAA,CAAA,CAAA,OAAA,EAAA;AAAA,EAC7B,UAAA,EAAY,EACT,MAAO,CAAA;AAAA,IACN,OAAS,EAAA,WAAA;AAAA,GAEV,CAAA,CAAA,OAAA,EAAA;AAAA,CAAA;;AChIE,MAAM,sBAAsB,CAAC;AAAA,EAClC,WAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,CAQI,KAAA;AACJ,EAAA,IAAI,KAAQ,GAAA,EAAA,CAAA;AACZ,EAAA,IAAI,eAAkB,GAAA,EAAA,CAAA;AACtB,EAAA,IAAI,OAAU,GAAA,IAAA,CAAA;AACd,EAAA,KAAA,MAAW,KAAK,UAAY,EAAA;AAC1B,IAAA,eAAA,IAAmB,EAAE,IAAO,GAAA,IAAA,CAAA;AAC5B,IAAA,OAAA,GAAU,QAAQ,OAAQ,CAAA,GAAA,GAAM,EAAE,IAAO,GAAA,GAAA,EAAK,OAAO,CAAE,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA;AACvD,IAAS,KAAA,IAAA,CAAA;AAAA,iBAAA,EACM,EAAE,IAAO,CAAA,EAAA,CAAA,CAAE,QAAW,GAAA,EAAA,GAAK,UAAU,CAAE,CAAA,WAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAGxD,EAAA,IAAI,QAAW,GAAA,EAAA,CAAA;AACf,EAAA,KAAA,MAAW,KAAK,UAAY,EAAA;AAC1B,IAAA,eAAA,IAAmB,EAAE,IAAO,GAAA,IAAA,CAAA;AAC5B,IAAA,QAAA,IAAY,CAAE,CAAA,IAAA,CAAA;AACd,IAAS,KAAA,IAAA,CAAA;AAAA,eAAA,EACI,EAAE,IAAO,CAAA,EAAA,CAAA,CAAE,QAAW,GAAA,EAAA,GAAK,UAAU,CAAE,CAAA,WAAA,CAAA,CAAA,EAClD,CAAG,EAAA,MAAA,EAAQ,aAAa,KAAQ,GAAA,IAAA,CAAK,SAAU,CAAA,CAAA,CAAE,OAAO,UAAc,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAI1E,EAAA,KAAA,MAAW,KAAK,WAAa,EAAA;AAC3B,IAAM,MAAA,YAAA,GAAe,CAAE,CAAA,QAAA,GAAW,EAAK,GAAA,GAAA,CAAA;AACvC,IAAmB,eAAA,IAAA,CAAA,CAAE,OAAO,YAAe,GAAA,IAAA,CAAA;AAC3C,IAAS,KAAA,IAAA,CAAA;AAAA,kBAAA,EACO,EAAE,IAAO,CAAA,EAAA,CAAA,CAAE,QAAW,GAAA,EAAA,GAAK,UAAU,CAAE,CAAA,WAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAGzD,EAAA,IAAI,WAAc,GAAA,EAAA,CAAA;AAClB,EAAA,KAAA,MAAW,KAAK,WAAa,EAAA;AAC3B,IAAA,WAAA,IAAe,GAAG,CAAE,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA;AAEtB,EAAA,WAAA,GAAc,WAAY,CAAA,MAAA,GAAS,CAAI,GAAA,GAAA,GAAM,WAAc,GAAA,EAAA,CAAA;AAE3D,EAAO,OAAA,CAAA;AAAA;AAAA,KAAA,EAEF,WAAW,WAAkB,EAAA,CAAA,EAAA,EAAA,OAAA,CAAA,EAAU,gBAAgB,QAAW,GAAA,YAAA,GAAe,WAAW,GAAM,GAAA,EAAA,CAAA;AAAA,KAClG,EAAA,KAAA,CAAA;AAAA;AAAA,EAAA,EAEH,WAAe,CAAA,CAAA,EAAA,eAAA,CAAA;AAAA,CAAA,CAAA;AAAA,CAAA;;ACpDZ,MAAM,iBAAiB,CAAC;AAAA,EAC7B,WAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,CAWI,KAAA;AACJ,EAAA,IAAI,eAAkB,GAAA,EAAA,CAAA;AACtB,EAAA,IAAI,UAAU,CAAI,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAClB,EAAA,IAAI,YAAyB,GAAA,EAAA,CAAA;AAE7B,EAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AAClC,IAAM,MAAA,IAAA,GAAO,YAAY,SAAU,CAAA,SAAA,CAAA,CAAA;AACnC,IAAI,IAAA,SAAA,CAAU,SAAS,WAAa,EAAA;AAClC,MAAmB,eAAA,IAAA,SAAA,CAAU,OAAO,CAAI,CAAA,EAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAE1C,IAAA,MAAM,KAAQ,GAAA,SAAA,CAAU,IAAS,KAAA,WAAA,GAAc,mBAAmB,SAAU,CAAA,IAAA,CAAA;AAC5E,IAAA,IAAI,IAAK,CAAA,KAAA,CAAM,CAAI,CAAA,EAAA,SAAA,CAAU,IAAU,CAAA,CAAA,CAAA,CAAA,EAAA;AACrC,MAAA,IAAI,SAAS,QAAU,EAAA;AACrB,QAAU,OAAA,GAAA,CAAA,EAAG,OAAqB,CAAA,WAAA,EAAA,SAAA,CAAU,IAAW,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAClD,MAAA;AACL,QAAU,OAAA,GAAA,CAAA,EAAG,OAAqB,CAAA,WAAA,EAAA,SAAA,CAAU,IAAkB,CAAA,WAAA,EAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAAA;AAKpE,EAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AACf,EAAA,IAAI,eAAe,KAAO,EAAA;AACxB,IAAA,QAAA,GAAW,YAAY,mBAAoB,CAAA,UAAA,CAAA,CAAA;AAC3C,IAAA,YAAA,GAAe,YAAY,sBAAuB,CAAA,UAAA,CAAA,CAAA;AAClD,IAAmB,eAAA,IAAA,QAAA,GAAW,SAAS,QAAc,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAGvD,EAAM,MAAA,aAAA,GAAgB,YAAY,uBAAwB,CAAA,WAAA,CAAA,CAAA;AAC1D,EAAM,MAAA,eAAA,GAAkB,YAAY,MAChC,GAAA,CAAA,WAAA,EAAc,gBAAgB,EAAK,GAAA,GAAA,CAAA,GAAA,EAAS,WAAY,CAAA,oBAAA,CAAqB,WAC7E,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAEJ,EAAA,MAAM,qBAAqB,WAAY,CAAA,MAAA,GACnC,CAAmB,gBAAA,EAAA,WAAA,CAAY,wBAAwB,WACvD,CAAA,CAAA,oCAAA,CAAA,GAAA,uCAAA,CAAA;AAEJ,EAAA,MAAM,cAAiB,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,SAAS,QAAS,CAAA,UAAA,CAAA,CAAA;AACzD,EAAM,MAAA,QAAA,GAAW,CAAC,QAAA,CAAA,CAAU,QAAS,CAAA,UAAA,CAAA,CAAA;AACrC,EAAA,IAAI,WAAc,GAAA,UAAA,CAAA;AAElB,EAAA,MAAM,kBAAkB,WACpB,GAAA,CAAA;AAAA;AAAA,KAEE,EAAA,CAAA,WAAA,IAAe,EAAI,EAAA,OAAA,CAAQ,KAAO,EAAA,SAAA,CAAA,CAAA;AAAA,KAEpC,CAAA,GAAA,EAAA,CAAA;AAEJ,EAAA,IAAI,iBAAoB,GAAA,EAAA,CAAA;AACxB,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAoB,iBAAA,GAAA,CAAA,CAAA,CAAA;AACpB,IAAA,MAAM,MAAS,GAAA,oGAAA,CAAA;AAEf,IAAc,WAAA,GAAA,QAAA,GAAW,CAA4C,yCAAA,EAAA,MAAA,CAAA,CAAA,GAAW,CAAS,MAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AAAA,GAAA,MAAA,IAChF,cAAgB,EAAA;AACzB,IAAA,WAAA,GAAc,WAAW,CAAmB,cAAA,CAAA,GAAA,gBAAA,CAAA;AAAA,GAAA,MAAA,IACnC,QAAU,EAAA;AACnB,IAAA,WAAA,GAAc,WAAW,CAAmB,cAAA,CAAA,GAAA,UAAA,CAAA;AAAA,GAAA;AAE9C,EAAM,MAAA,YAAA,GAAe,eAAgB,CAAA,OAAA,CAAQ,aAAiB,CAAA,GAAA,CAAA,CAAA,CAAA;AAE9D,EAAA,MAAM,wBAAwB,aAAiB,IAAA,SAAA,CAAA;AAC/C,EAAA,MAAM,iCAAiC,aAAiB,IAAA,aAAA,CAAA;AACxD,EAAA,MAAM,aAAc,CAAkB,eAAA,GAAA,CAAA,EAAG,mBAAmB,eAAoB,CAAA,CAAA,GAAA,eAAA,EAAiB,QAAQ,OAAS,EAAA,EAAA,CAAA,CAAA;AAElH,EAAA,IAAI,UAAa,GAAA,EAAA,CAAA;AACjB,EAAA,MAAM,YAAe,GAAA,CAAC,KAAO,CAAA,CAAA,QAAA,CAAS,eAAe,qBAA0B,KAAA,SAAA,CAAA;AAC/E,EAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAA,CAAA;AACrD,EAAA,MAAM,eAAe,YACjB,GAAA,CAAA;AAAA,oBACgB,EAAA,iBAAA,CAAA;AAAA,GAEhB,CAAA,GAAA,EAAA,CAAA;AAEJ,EAAA,MAAM,iBAAiB,CAAC,KAAA,EAAO,QAAQ,KAAO,EAAA,OAAA,EAAS,UAAU,QAAS,CAAA,UAAA,CAAA,CAAA;AAC1E,EAAM,MAAA,UAAA,GAAa,UAAe,KAAA,KAAA,GAAQ,iBAAoB,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,OAAS,EAAA,QAAA,CAAA,CAAU,QAAS,CAAA,UAAA,CAAA,GAAc,WAAc,GAAA,EAAA,CAAA;AACtI,EAAA,MAAM,cAAiB,GAAA,qBAAA,KAA0B,SAAY,GAAA,CAAA,KAAA,EAAQ,qBAA2B,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAChG,EAAM,MAAA,YAAA,GAAe,qBAA0B,KAAA,SAAA,GAAY,CAAM,CAAA,CAAA,GAAA,SAAA,CAAA;AACjE,EAAM,MAAA,gBAAA,GACJ,UAAe,KAAA,KAAA,GAAQ,mBAAsB,GAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,OAAS,EAAA,QAAA,CAAA,CAAU,QAAS,CAAA,UAAA,CAAA,GAAc,WAAc,GAAA,EAAA,CAAA;AACvH,EAAA,UAAA,GAAa,CAAG,EAAA,eAAA,CAAA;AAAA,EACd,EAAA,UAAA,CAAA,EAAa,cAAkB,CAAA,CAAA,EAAA,UAAA,CAAA,WAAA,EAAwB,gBAAoB,CAAA,CAAA,EAAA,YAAA,CAAA;AAAA,IACzE,EAAA,kBAAA,CAAA;AAAA,gBACY,EAAA,OAAA,CAAA,IAAA,EAAc,iBAAqB,CAAA,CAAA,EAAA,YAAA,GAAe,uCAA0C,GAAA,EAAA,CAAA;AAAA,6CAAA,EAC/D,UAAmB,CAAA,MAAA,EAAA,WAAA,CAAA;AAAA;AAAA,EAGhE,UAAA,KAAe,QACX,CAAgE,6DAAA,EAAA,8BAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAOhE,CAAA,GAAA,EAAA,CAAA,EAEF,CAAC,MAAQ,EAAA,KAAA,EAAO,SAAS,QAAU,CAAA,CAAA,QAAA,CAAS,UACxC,CAAA,GAAA,CAAA,kDAAA,EAAqD,8BACrD,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA;AAAA,EAAA,CAAA,CAAA;AAKN,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAA,UAAA,GAAa,CAAG,EAAA,eAAA,CAAA;AAAA,MACZ,EAAA,YAAA,CAAA;AAAA,OAAA,EACC,mBAAmB,qBAA0B,CAAA,EAAA,EAAA,UAAA,CAAA;AAAA,IAChD,EAAA,kBAAA,CAAA;AAAA,gBACY,EAAA,OAAA,CAAA,IAAA,EAAc,iBAAqB,CAAA,CAAA,EAAA,YAAA,GAAe,uCAA0C,GAAA,EAAA,CAAA;AAAA,8BAAA,EAC9E,UAAmB,CAAA,MAAA,EAAA,WAAA,CAAA;AAAA;AAAA,IAAA,CAAA,CAAA;AAAA,GAAA;AAKjD,EAAA,OAAO,CAAC,UAAY,EAAA,YAAA,CAAA,CAAA;AAAA,CAAA;;AC7HG,MAAA,WAAA,CAAA;AAAA,EACvB,UAAA,CAAA;AAAA,EACA,cAAiB,GAAA,KAAA,CAAA;AAAA,EAET,gCAAoB,IAAA,GAAA,EAAA,CAAA;AAAA,EAG5B,MAAS,GAAA,CAAC,QAAkB,EAAA,UAAA,EAAwB,UAAoC,KAAA;AACtF,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAClB,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,gBAAiB,CAAA,UAAA,EAAY,WAAW,QAAY,IAAA,EAAA,CAAA,CAAA;AAGzE,IAAM,MAAA,qBAAA,GAAwB,IAAK,CAAA,aAAA,CAAc,GAAI,CAAA,QAAA,CAAA,CAAA;AACrD,IAAA,IAAI,qBAAuB,EAAA;AACzB,MAAA,IAAA,CAAK,cAAc,MAAO,CAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAG5B,IAAA,IAAI,OAAU,GAAA,EAAA,CAAA;AACd,IAAA,KAAA,MAAW,EAAM,IAAA,KAAA,CAAM,IAAK,CAAA,IAAA,CAAK,eAAe,IAAQ,EAAA,EAAA;AACtD,MAAA,OAAA,IAAW,cAAc,EAAgB,CAAA,WAAA,EAAA,EAAA,CAAA;AAAA,CAAA,CAAA;AAAA,KAAA;AAK3C,IAAI,IAAA,sBAAA,CAAA;AACJ,IAAI,IAAA,kBAAA,CAAA;AAEJ,IAAA,IAAI,qBAAuB,EAAA;AAGzB,MAAyB,sBAAA,GAAA,CAAA;AAAA,qBAAA,EACR,QAAuB,CAAA,YAAA,EAAA,QAAA,CAAA;AAAA,UAAA,EAClC,OAAQ,CAAA,YAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAAA;AAGd,MAAqB,kBAAA,GAAA,CAAA;AAAA,oBACL,EAAA,QAAA,CAAA;AAAA,UAAA,EACV,OAAQ,CAAA,UAAA,CAAA;AAAA;AAAA,MAAA,CAAA,CAAA;AAAA,KAGT,MAAA;AAEL,MAAyB,sBAAA,GAAA,CAAA,aAAA,EAAgB,cAAc,OAAQ,CAAA,YAAA,CAAA,CAAA,CAAA;AAC/D,MAAA,kBAAA,GAAqB,eAAe,QAA8B,CAAA,mBAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGpE,IAAA,MAAM,QAAW,GAAA,CAAA;AAAA,EACjB,EAAA,OAAA,CAAA;AAAA;AAAA,EAEA,EAAA,sBAAA,CAAA;AAAA;AAAA,EAEA,EAAA,kBAAA,CAAA;AAAA,EAAA,CAAA,CAAA;AAEA,IAAA,OAAO,EAAE,MAAA,EAAQ,QAAU,EAAA,cAAA,EAAgB,IAAK,CAAA,cAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAIlD,gBAAA,GAAmB,CAAC,UAAA,EAAY,aAA8B,KAAA;AAC5D,IAAA,IAAI,WAAW,oBAAsB,EAAA;AACnC,MAAO,OAAA,IAAA,CAAK,mBAAoB,CAAA,EAAA,EAAI,UAAY,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAGlD,IAAI,IAAA,UAAA,CAAA;AACJ,IAAA,IAAI,WAAW,UAAY,EAAA;AACzB,MAAa,UAAA,GAAA,MAAA,CAAO,QAAQ,UAAW,CAAA,UAAA,CAAA,CAAA;AAAA,KAC9B,MAAA,IAAA,UAAA,CAAW,OAAO,UAAY,EAAA;AACvC,MAAa,UAAA,GAAA,MAAA,CAAO,OAAQ,CAAA,UAAA,CAAW,KAAM,CAAA,UAAA,CAAA,CAAA;AAAA,KACxC,MAAA;AACL,MAAO,OAAA;AAAA,QACL,YAAc,EAAA,SAAA;AAAA,QACd,UAAY,EAAA,KAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAIhB,IAAA,MAAM,YAAyB,GAAA,EAAA,CAAA;AAC/B,IAAA,MAAM,UAAuB,GAAA,EAAA,CAAA;AAE7B,IAAA,KAAA,MAAW,YAAY,UAAY,EAAA;AACjC,MAAM,MAAA,CAAC,MAAM,WAAc,CAAA,GAAA,QAAA,CAAA;AAC3B,MAAA,MAAM,MAAS,GAAA,IAAA,CAAK,mBAAoB,CAAA,IAAA,EAAM,WAAY,EAAA,aAAA,CAAA,CAAA;AAE1D,MAAA,YAAA,CAAa,KAAK,MAAO,CAAA,YAAA,CAAA,CAAA;AACzB,MAAA,UAAA,CAAW,KAAK,MAAO,CAAA,UAAA,CAAA,CAAA;AAAA,KAAA;AAGzB,IAAI,IAAA,UAAA,EAAY,SAAS,OAAS,EAAA;AAChC,MAAO,OAAA;AAAA,QACL,YAAA,EAAc,CAAqB,kBAAA,EAAA,YAAA,CAAa,IAAK,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA;AAAA,QACrD,UAAA,EAAY,WAAW,IAAK,CAAA,GAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAIhC,IAAO,OAAA;AAAA,MACL,YAAA,EAAc,CAAa,UAAA,EAAA,YAAA,CAAa,IAAK,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA;AAAA,MAC7C,UAAA,EAAY,WAAW,IAAK,CAAA,GAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAKhC,mBAAsB,GAAA,CAAC,IAAM,EAAA,UAAA,EAAY,aAA8B,KAAA;AAGrE,IAAA,MAAM,UAAa,GAAA,aAAA,CAAc,QAAS,CAAA,IAAA,CAAA,IAAS,IAAS,KAAA,EAAA,CAAA;AAC5D,IAAM,MAAA,cAAA,GAAiB,aAAa,EAAK,GAAA,YAAA,CAAA;AACzC,IAAM,MAAA,YAAA,GAAe,aAAa,EAAK,GAAA,GAAA,CAAA;AACvC,IAAM,MAAA,kBAAA,GAAqB,aAAa,EAAK,GAAA,qBAAA,CAAA;AAE7C,IAAM,MAAA,eAAA,GAAkB,IAAO,GAAA,CAAA,CAAA,EAAI,IAAW,CAAA,EAAA,CAAA,GAAA,EAAA,CAAA;AAC9C,IAAA,MAAM,aAAgB,GAAA,IAAA,GAAO,CAAI,CAAA,EAAA,IAAA,CAAA,CAAA,EAAQ,YAAkB,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAE3D,IAAA,MAAM,OAAO,UAAY,EAAA,IAAA,CAAA;AAEzB,IAAA,IAAI,IAAM,EAAA;AACR,MAAI,IAAA,IAAA,KAAS,QAAY,IAAA,UAAA,CAAW,oBAAsB,EAAA;AACxD,QAAA,MAAM,eAAe,IAAK,CAAA,mBAAA,CAAoB,EAAI,EAAA,UAAA,CAAW,sBAAsB,CAAC,EAAA,CAAA,CAAA,CAAA;AACpF,QAAO,OAAA;AAAA,UACL,YAAc,EAAA,CAAA,EAAG,eAA4B,CAAA,UAAA,EAAA,YAAA,CAAa,YAAgB,CAAA,CAAA,EAAA,cAAA,CAAA,CAAA;AAAA,UAC1E,UAAY,EAAA,CAAA,EAAG,aAAgC,CAAA,gBAAA,EAAA,YAAA,CAAa,UAAc,CAAA,CAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAI9E,MAAA,IAAI,SAAS,QAAY,IAAA,CAAC,UAAW,CAAA,oBAAA,IAAwB,CAAC,IAAM,EAAA;AAClE,QAAO,OAAA;AAAA,UACL,YAAc,EAAA,CAAA,OAAA,CAAA;AAAA,UACd,UAAY,EAAA,KAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAIhB,MAAA,IAAI,IAAS,KAAA,QAAA,IAAY,CAAC,UAAA,CAAW,oBAAsB,EAAA;AACzD,QAAO,OAAA;AAAA,UACL,YAAA,EAAc,GAAG,eAAoC,CAAA,kBAAA,EAAA,cAAA,CAAA,CAAA;AAAA,UACrD,UAAA,EAAY,GAAG,aAAoC,CAAA,oBAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAIvD,MAAI,IAAA,IAAA,KAAS,SAAa,IAAA,IAAA,KAAS,QAAU,EAAA;AAC3C,QAAA,MAAM,gBAAgB,gBAAiB,CAAA,IAAA,CAAA,CAAA;AACvC,QAAO,OAAA;AAAA,UACL,YAAc,EAAA,CAAA,EAAG,eAAqB,CAAA,GAAA,EAAA,aAAA,CAAc,YAAiB,CAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAAA,UACrE,UAAY,EAAA,CAAA,EAAG,aAAiB,CAAA,CAAA,EAAA,aAAA,CAAc,UAAa,CAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAI/D,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,MAAM,QAAQ,UAAW,CAAA,KAAA,CAAA;AACzB,QAAA,MAAM,OAAM,KAAO,EAAA,IAAA,CAAA;AACnB,QAAI,IAAA,MAAA,CAAA;AACJ,QAAA,IAAI,IAAK,EAAA;AACP,UAAM,MAAA,OAAA,GAAU,YAAY,YAAa,CAAA,IAAA,CAAA,CAAA;AACzC,UAAA,IAAA,CAAK,cAAc,GAAI,CAAA,OAAA,CAAA,CAAA;AAEvB,UAAQ,MAAA,GAAA;AAAA,YACN,YAAc,EAAA,OAAA;AAAA,YACd,UAAY,EAAA,OAAA;AAAA,WAAA,CAAA;AAAA,SAAA,MAAA,IAEL,KAAO,EAAA;AAChB,UAAA,MAAA,GAAQ,KAAK,cAAe,CAAA,KAAA,CAAA,CAAA;AAAA,SACvB,MAAA;AACL,UAAO,OAAA;AAAA,YACL,YAAA,EAAc,GAAG,eAAmC,CAAA,iBAAA,EAAA,cAAA,CAAA,CAAA;AAAA,YACpD,UAAA,EAAY,GAAG,aAAsB,CAAA,MAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,WAAA,CAAA;AAAA,SAAA;AAIzC,QAAO,OAAA;AAAA,UACL,YAAc,EAAA,CAAA,EAAG,eAA2B,CAAA,SAAA,EAAA,MAAA,CAAM,YAAgB,CAAA,CAAA,EAAA,cAAA,CAAA,CAAA;AAAA,UAClE,UAAY,EAAA,CAAA,EAAG,aAAiB,CAAA,CAAA,EAAA,MAAA,CAAM,UAAe,CAAA,EAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAIzD,MAAA,IAAI,SAAS,QAAU,EAAA;AACrB,QAAA,MAAM,MAAS,GAAA,iBAAA,CAAkB,IAAM,EAAA,UAAA,EAAY,UAAW,CAAA,IAAA,CAAA,CAAA;AAC9D,QAAO,OAAA;AAAA,UACL,YAAA,EAAc,CAAG,EAAA,eAAA,CAAA,CAAA,EAAmB,MAAO,CAAA,YAAA,CAAA,CAAA;AAAA,UAC3C,UAAA,EAAY,CAAG,EAAA,aAAA,CAAA,CAAA,EAAiB,MAAO,CAAA,UAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAAA,KAAA,MAAA,IAGlC,WAAW,UAAY,EAAA;AAChC,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,gBAAA,CAAiB,UAAY,EAAA,aAAA,CAAA,CAAA;AACjD,MAAO,OAAA;AAAA,QACL,YAAc,EAAA,CAAA,EAAG,eAAmB,CAAA,CAAA,EAAA,MAAA,CAAO,YAAe,CAAA,EAAA,cAAA,CAAA,CAAA;AAAA,QAC1D,UAAY,EAAA,CAAA,EAAG,aAAiB,CAAA,CAAA,EAAA,MAAA,CAAO,UAAa,CAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAIxD,IAAA,MAAM,MAAM,UAAW,CAAA,IAAA,CAAA;AACvB,IAAA,IAAI,KAAQ,GAAA,CAAA,iBAAA,CAAA,CAAA;AAEZ,IAAA,IAAI,GAAK,EAAA;AACP,MAAA,KAAA,GAAQ,YAAY,YAAa,CAAA,GAAA,CAAA,CAAA;AAEjC,MAAM,MAAA,aAAA,GAAgB,GAAI,CAAA,OAAA,CAAQ,gBAAkB,EAAA,EAAA,CAAA,CAAA;AACpD,MAAK,IAAA,CAAA,cAAA,GAAiB,IAAK,CAAA,UAAA,CAAW,GAAI,CAAA,aAAA,CAAA,CAAA;AAC1C,MAAA,IAAI,KAAK,cAAgB,EAAA;AACvB,QAAQ,KAAA,GAAA,IAAA,CAAK,WAAW,GAAI,CAAA,aAAA,CAAA,CAAA;AAAA,OAAA;AAE9B,MAAA,IAAA,CAAK,cAAc,GAAI,CAAA,KAAA,CAAA,CAAA;AACvB,MAAA,KAAA,GAAQ,CAAG,EAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGb,IAAO,OAAA;AAAA,MACL,YAAA,EAAc,CAAG,EAAA,eAAA,CAAA,CAAA,EAAmB,KAAQ,CAAA,EAAA,cAAA,CAAA,CAAA;AAAA,MAC5C,UAAA,EAAY,CAAG,EAAA,aAAA,CAAA,CAAA,EAAiB,KAAQ,CAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAI5C,cAAA,GAAiB,CAAC,KAAsB,KAAA;AACtC,IAAA,IAAI,MAAM,IAAM,EAAA;AACd,MAAA,MAAM,OAAU,GAAA,KAAA,CAAM,IAAK,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA;AAClC,QAAA,OAAO,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAEb,MAAO,OAAA;AAAA,QACL,cAAc,CAAW,QAAA,EAAA,OAAA,CAAA,EAAA,CAAA;AAAA,QACzB,UAAA,EAAY,CAAI,CAAA,EAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAIjC,IAAI,IAAA,KAAA,CAAM,SAAS,QAAU,EAAA;AAC3B,MAAO,OAAA,IAAA,CAAK,gBAAiB,CAAA,KAAA,EAAO,KAAM,CAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAG5C,IAAI,IAAA,aAAA,CAAA;AACJ,IAAA,IAAI,KAAM,CAAA,IAAA,KAAS,SAAa,IAAA,KAAA,CAAM,SAAS,QAAU,EAAA;AACvD,MAAA,aAAA,GAAgB,iBAAiB,KAAM,CAAA,IAAA,CAAA,CAAA;AAAA,KAClC,MAAA;AACL,MAAA,aAAA,GAAgB,EAAE,UAAA,EAAY,KAAM,CAAA,IAAA,EAAM,cAAc,KAAM,CAAA,IAAA,EAAA,CAAA;AAAA,KAAA;AAGhE,IAAO,OAAA;AAAA,MACL,YAAA,EAAc,KAAK,aAAc,CAAA,YAAA,CAAA,EAAA,CAAA;AAAA,MACjC,YAAY,aAAc,CAAA,UAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAAA;AAKF,MAAA,gBAAA,CAAA;AAAA,EAE5B,SAAS,CAAQ,IAAA,KAAA;AACf,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,OAAA,CAAQ,OAAS,EAAA,EAAA,CAAA,CAAA;AAClC,IAAA,MAAM,QAAW,GAAA,CAAA;AAAA,WAAA,EACR,GAAiB,CAAA,WAAA,EAAA,GAAA,CAAA;AAAA;AAAA,eAAA,EAEb,IAAkB,CAAA,WAAA,EAAA,GAAA,CAAA;AAAA;AAAA,cAAA,EAEnB,IAA0B,CAAA,mBAAA,EAAA,IAAA,CAAA;AAAA,EAAA,CAAA,CAAA;AAEtC,IAAO,OAAA,QAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAAA;AAIX,MAAM,gBAAA,GAAmB,CAAC,IAAiB,KAAA;AASzC,EAAA,IAAI,SAAS,SAAW,EAAA;AACtB,IAAO,OAAA;AAAA,MACL,YAAc,EAAA,cAAA;AAAA,MACd,UAAY,EAAA,QAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAIhB,EAAO,OAAA;AAAA,IACL,YAAc,EAAA,IAAA;AAAA,IACd,UAAY,EAAA,IAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;AAIhB,MAAM,iBAAoB,GAAA,CAAC,IAAc,EAAA,UAAA,EAAqB,OAAmC,KAAA;AAC/F,EAAM,MAAA,cAAA,GAAiB,aAAa,EAAK,GAAA,YAAA,CAAA;AACzC,EAAM,MAAA,kBAAA,GAAqB,aAAa,EAAK,GAAA,qBAAA,CAAA;AAC7C,EAAA,IAAI,OAAS,EAAA;AACX,IAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA;AAC/B,MAAA,OAAO,CAAI,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEb,IAAO,OAAA;AAAA,MACL,YAAA,EAAc,WAAW,OAAY,CAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAAA,MACrC,UAAY,EAAA,CAAA,CAAA,EAAI,OAAQ,CAAA,IAAA,CAAK,KAAS,CAAA,CAAA,EAAA,kBAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAG1C,EAAO,OAAA;AAAA,IACL,YAAA,EAAc,KAAK,IAAS,CAAA,EAAA,EAAA,cAAA,CAAA,CAAA;AAAA,IAC5B,UAAA,EAAY,GAAG,IAAO,CAAA,EAAA,kBAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAAA;;AC/RC,MAAA,aAAA,CAAA;AAAA,EAAA,OAElB,aAAgB,GAAA,MAAMC,aAAK,CAAA,IAAA,CAAK,UAAU,qBAAyB,EAAA,EAAA,SAAA,CAAA,CAAA;AAAA,EAEnE,OAAA,wBAAA,GAA2B,MAAM,CAAA,EAAG,SAAU,CAAA,aAAA,EAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,EAE9C,OAAA,uBAAA,GAA0B,MAAM,CAAA,EAAG,SAAU,CAAA,aAAA,EAAA,CAAA,gBAAA,CAAA,CAAA;AAAA,EAE7C,OAAA,UAAA,GAAa,OAAO,GAAqB,KAAA;AAC9C,IAAA,MAAM,cAAiB,GAAA,EAAA,CAAA;AACvB,IAAA,MAAM,mBAAsB,GAAA,EAAA,CAAA;AAC5B,IAAA,MAAM,iBAAoB,GAAA,EAAA,CAAA;AAC1B,IAAA,MAAM,YAAe,GAAA,EAAA,CAAA;AACrB,IAAA,IAAI,gBAAmB,GAAA,EAAA,CAAA;AAEvB,IAAW,KAAA,MAAA,KAAA,IAAQ,IAAI,KAAO,EAAA;AAC5B,MAAM,MAAA,eAAA,GAAkB,KAAK,CAAA,OAAA,CAAQ,SAAa,CAAA,GAAA,CAAA,CAAA,CAAA;AAClD,MAAI,IAAA,SAAA,CAAU,OAAa,EAAA,IAAA,CAAC,eAAiB,EAAA;AAC3C,QAAA,SAAA;AAAA,OACS,MAAA,IAAA,CAAC,SAAU,CAAA,OAAA,EAAA,IAAa,eAAiB,EAAA;AAClD,QAAA,SAAA;AAAA,OAAA;AAGF,MAAM,MAAA,SAAA,GAAY,IAAI,KAAM,CAAA,KAAA,CAAA,CAAA;AAE5B,MAAM,MAAA,WAAA,GAAc,OAAO,IAAK,CAAA,SAAA,CAAA,CAAA;AAChC,MAAA,KAAA,MAAW,cAAc,WAAa,EAAA;AACpC,QAAA,MAAM,WAAW,MAAM,QAAA,CAAS,WAAW,SAAU,CAAA,UAAA,CAAA,CAAA,CAAa,MAAM,CAAS,KAAA,KAAA;AAC/E,UAAA,OAAA,CAAQ,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,IAAA,EAAA,KAAA,EAAM,cAAc,IAAM,EAAA,CAAA,CAAA,CAAA,CAAA;AACzD,UAAM,MAAA,KAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAER,QAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AAClB,UAAA,SAAA;AAAA,SAAA;AAEF,QAAM,MAAA,CAAC,OAAO,QAAS,CAAA,IAAA,CAAA;AACvB,QAAA,MAAM,cAAc,QAAS,CAAA,WAAA,CAAA;AAC7B,QAAA,MAAM,eAAe,QAAS,CAAA,UAAA,CAAA;AAC9B,QAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,cAAA,CAAe,QAAS,CAAA,SAAA,CAAA,CAAA;AAC1D,QAAA,MAAM,SAAY,GAAA,CAAA,CAAE,UAAW,CAAA,CAAA,CAAE,SAAU,CAAA,GAAA,CAAA,CAAA,CAAA;AAC3C,QAAA,YAAA,CAAa,SAAa,CAAA,GAAA,YAAA,CAAa,SAAa,CAAA,GAAA,YAAA,CAAa,SAAa,CAAA,GAAA,EAAA,CAAA;AAE9E,QAAA,IAAI,CAAC,YAAc,EAAA;AACjB,UAAA,IAAI,aAAe,EAAA;AACjB,YAAM,MAAA,eAAA,GAAkB,YAAY,YAAa,CAAA,aAAA,CAAA,CAAA;AACjD,YAAa,YAAA,CAAA,SAAA,CAAA,CAAW,eAAmB,CAAA,GAAA,CAAA,SAAA,EAAY,eAAyC,CAAA,uBAAA,EAAA,eAAA,CAAA,CAAA,CAAA,CAAA;AAAA,WAAA;AAElG,UAAI,IAAA,aAAA,IAAiB,aAAc,CAAA,QAAA,CAAS,OAAU,CAAA,EAAA;AACpD,YAAA,gBAAA,CAAiB,IAAK,CAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAGxB,UAAA,MAAM,gBAAmB,GAAA,WAAA,CAAY,gBAAiB,CAAA,UAAA,EAAY,QAAS,CAAA,QAAA,CAAA,CAAA;AAC3E,UAAM,MAAA,WAAA,GAAc,WAAY,CAAA,qBAAA,CAAsB,QAAS,CAAA,UAAA,CAAA,CAAA;AAC/D,UAAM,MAAA,UAAA,GAAa,WAAY,CAAA,gBAAA,CAAiB,QAAS,CAAA,UAAA,CAAA,CAAA;AACzD,UAAI,IAAA,UAAA,GAAa,WAAY,CAAA,gBAAA,CAAiB,QAAS,CAAA,UAAA,CAAA,CAAA;AACvD,UAAM,MAAA,WAAA,GAAc,YAAY,mBAAoB,CAAA;AAAA,YAClD,IAAA,EAAA,KAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA;AAAA,YACA,SAAA;AAAA,WAAA,CAAA,CAAA;AAMF,UAAA,IAAI,SAAS,WAAa,EAAA;AACxB,YAAa,UAAA,GAAA;AAAA,cACX;AAAA,gBACE,IAAM,EAAA,MAAA;AAAA,gBACN,EAAI,EAAA,MAAA;AAAA,gBACJ,MAAQ,EAAA,QAAA,CAAS,WAAY,CAAA,OAAA,CAAQ,kBAAoB,CAAA,CAAA,MAAA;AAAA,eAAA;AAAA,aAAA,CAAA;AAAA,WAAA;AAK/D,UAAA,MAAM,YAAe,GAAA,CAAA,EAAG,GAAI,CAAA,QAAA,IAAY,EAAK,CAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAE7C,UAAM,MAAA,CAAC,qBAAuB,EAAA,gBAAA,CAAA,GAAoB,cAAe,CAAA;AAAA,YAC/D,WAAA;AAAA,YACA,WAAA;AAAA,YACA,UAAA;AAAA,YACA,IAAM,EAAA,YAAA;AAAA,YACN,UAAA;AAAA,YACA,UAAA;AAAA,YACA,WAAA;AAAA,YACA,gBAAA;AAAA,YACA,aAAA;AAAA,WAAA,CAAA,CAAA;AAEF,UAAe,cAAA,CAAA,GAAA,CAAA,GAAQ,CAAe,cAAA,CAAA,GAAA,CAAA,IAAQ,EAAM,IAAA,qBAAA,CAAA;AACpD,UAAoB,mBAAA,CAAA,GAAA,CAAA,GACjB,CAAoB,mBAAA,CAAA,GAAA,CAAA,IAAQ,EAAM,IAAA,mBAAA,CAAoB,EAAE,WAAa,EAAA,UAAA,EAAY,IAAM,EAAA,KAAA,EAAA,UAAA,EAAY,UAAY,EAAA,WAAA,EAAA,CAAA,CAAA;AAClH,UAAA,iBAAA,CAAkB,OAAO,iBAAkB,CAAA,GAAA,CAAA,GACvC,CAAC,uBAAO,GAAI,CAAA,CAAC,GAAG,gBAAA,EAAkB,GAAG,iBAAkB,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GACvD,CAAC,GAAG,IAAI,GAAI,CAAA,gBAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA;AAKtB,IAAmB,gBAAA,GAAA,CAAC,GAAG,IAAI,GAAI,CAAA,gBAAA,CAAA,CAAA,CAAA;AAC/B,IAAA,OAAO,EAAE,cAAA,EAAgB,mBAAqB,EAAA,iBAAA,EAAmB,YAAc,EAAA,gBAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAG1E,OAAA,IAAA,GAAO,OAAO,SAA8C,KAAA;AACjE,IAAA,MAAM,cAAc,SAAU,CAAA,CAAA,CAAA,CAAA;AAC9B,IAAA,MAAM,cAAc,SAAU,CAAA,CAAA,CAAA,CAAA;AAC9B,IAAA,MAAM,SAAS,IAAI,aAAA,EAAA,CAAA;AAEnB,IAAA,MAAM,eAAkB,GAAA,SAAA,CAAU,OAAY,EAAA,GAAA,aAAA,CAAc,4BAA4B,aAAc,CAAA,wBAAA,EAAA,CAAA;AAEtG,IAAM,MAAA,QAAA,GAAW,GAAG,eAAmB,CAAA,CAAA,EAAA,WAAA,CAAA,CAAA,CAAA;AACvC,IAAM,MAAA,aAAA,GAAgBA,aAAK,CAAA,IAAA,CAAK,QAAU,EAAA,MAAA,CAAA,CAAA;AAC1C,IAAM,MAAA,mBAAA,GAAsBA,aAAK,CAAA,IAAA,CAAK,QAAU,EAAA,aAAA,CAAA,CAAA;AAEhD,IAAM,MAAA,eAAA,GAAkB,CAAG,EAAA,SAAA,CAAU,qBAA2B,EAAA,CAAA,CAAA,EAAA,WAAA,CAAA,CAAA,CAAA;AAChE,IAAM,MAAA,sBAAA,GAAyB,CAAG,EAAA,aAAA,CAAc,aAAmB,EAAA,CAAA,CAAA,EAAA,WAAA,CAAA,CAAA,CAAA;AACnE,IAAA,MAAM,uBAAuB,CAAG,EAAA,eAAA,CAAA,KAAA,CAAA,CAAA;AAChC,IAAA,WAAA,CAAY,kBAAmB,CAAA,eAAA,EAAiB,oBAAsB,EAAA,sBAAA,EAAwB,aAAc,CAAA,aAAA,EAAA,CAAA,CAAA;AAC5G,IAAM,MAAA,GAAA,GAAM,MAAM,MAAA,CAAO,KAAM,CAAA,sBAAA,CAAA,CAAA;AAE/B,IAAA,MAAM,kCAAmC,IAAA,GAAA,EAAA,CAAA;AAEzC,IAAQ,OAAA,CAAA,GAAA,CAAI,uDAAuD,GAAK,EAAA,GAAA,CAAI,KAAK,KAAO,EAAA,GAAA,CAAI,IAAK,CAAA,OAAA,EAAS,GAAI,CAAA,OAAA,CAAA,CAAA;AAE9G,IAAA,WAAA,CAAY,eAAgB,CAAA,QAAA,CAAA,CAAA;AAC5B,IAAA,WAAA,CAAY,eAAgB,CAAA,aAAA,CAAA,CAAA;AAC5B,IAAA,WAAA,CAAY,eAAgB,CAAA,mBAAA,CAAA,CAAA;AAE5B,IAAA,MAAM,EAAE,cAAgB,EAAA,iBAAA,EAAmB,cAAc,gBAAgD,EAAA,GAAA,MAAM,cAAc,UAC3H,CAAA,GAAA,CAAA,CAAA;AAGF,IAAM,MAAA,eAAA,GAAkB,GAAG,SAAU,CAAA,aAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAErC,IAAA,KAAA,MAAW,OAAO,cAAgB,EAAA;AAChC,MAAA,MAAM,SAAY,GAAA,CAAA,CAAE,UAAW,CAAA,CAAA,CAAE,SAAU,CAAA,GAAA,CAAA,CAAA,CAAA;AAC3C,MAAA,MAAM,YAAY,cAAe,CAAA,GAAA,CAAA,CAAA;AACjC,MAAA,MAAM,OAAU,GAAA,CAAC,mBAAG,IAAI,GAAI,CAAA,CAAC,GAAG,iBAAA,CAAkB,GAAM,CAAA,EAAA,GAAG,MAAO,CAAA,MAAA,CAAO,YAAa,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEtF,MAAA,MAAM,YAAe,GAAA,SAAA,CAAU,OAAY,EAAA,GAAA,SAAA,GAAY,WAAW,SAAY,GAAA,GAAA,CAAA;AAE9E,MAAY,WAAA,CAAA,cAAA,CAAe,QAAU,EAAA,YAAA,EAAc,SAAW,EAAA,OAAA,CAAA,CAAA;AAK9D,MAAA,eAAA,CAAgB,IAAI,WAAY,CAAA,gCAAA,CAAiCA,cAAK,IAAK,CAAA,QAAA,EAAU,GAAG,YAAiB,CAAA,CAAA,CAAA,EAAA,eAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAG3G,IAAA,MAAM,6BAAiB,IAAA,GAAA,EAAA,CAAA;AACvB,IAAA,MAAM,WAAc,GAAA,GAAA,EAAK,UAAY,EAAA,OAAA,IAAW,GAAI,CAAA,WAAA,CAAA;AACpD,IAAA,KAAA,MAAW,OAAO,WAAa,EAAA;AAC7B,MAAA,MAAM,aAAa,WAAY,CAAA,GAAA,CAAA,CAAA;AAC/B,MAAI,IAAA,QAAA,GAAW,YAAY,YAAa,CAAA,GAAA,CAAA,CAAA;AACxC,MAAA,MAAM,YAAYD,WAAG,CAAA,UAAA,CAAWC,aAAK,CAAA,IAAA,CAAK,qBAAqB,CAAG,EAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA;AAClE,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,QAAA,GAAW,YAAY,eAAgB,CAAA,GAAA,CAAA,CAAK,QAAQ,GAAK,EAAA,EAAA,CAAA,CAAI,QAAQ,GAAK,EAAA,EAAA,CAAA,CAAA;AAC1E,QAAA,UAAA,CAAW,IAAI,GAAK,EAAA,QAAA,CAAA,CAAA;AAAA,OAAA;AAEtB,MAAA,MAAM,EAAE,MAAW,EAAA,GAAA,IAAI,cAAc,MAAO,CAAA,QAAA,EAAU,4BAAgB,IAAA,GAAA,EAAA,CAAA,CAAA;AAItE,MAAY,WAAA,CAAA,mBAAA,CAAoB,qBAAqB,QAAU,EAAA,MAAA,CAAA,CAAA;AAC/D,MAAA,eAAA,CAAgB,IAAI,WAAY,CAAA,gCAAA,CAAiCA,aAAK,CAAA,IAAA,CAAK,qBAAqB,QAAW,CAAA,EAAA,eAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAI7G,IAAA,KAAA,MAAW,OAAO,WAAa,EAAA;AAC7B,MAAA,MAAM,aAAa,WAAY,CAAA,GAAA,CAAA,CAAA;AAC/B,MAAM,MAAA,QAAA,GAAW,YAAY,YAAa,CAAA,GAAA,CAAA,CAAA;AAC1C,MAAA,MAAM,EAAE,MAAQ,EAAA,cAAA,EAAA,GAAmB,IAAI,WAAc,EAAA,CAAA,MAAA,CAAO,UAAU,UAAY,EAAA,UAAA,CAAA,CAAA;AAClF,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAY,WAAA,CAAA,mBAAA,CAAoB,qBAAqB,QAAU,EAAA,MAAA,CAAA,CAAA;AAC/D,QAAA,eAAA,CAAgB,IAAI,WAAY,CAAA,gCAAA,CAAiCA,aAAK,CAAA,IAAA,CAAK,qBAAqB,QAAW,CAAA,EAAA,eAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI/G,IAAA,KAAA,MAAW,cAAc,gBAAkB,EAAA;AACzC,MAAM,MAAA,MAAA,GAAS,IAAI,gBAAA,EAAA,CAAmB,MAAO,CAAA,UAAA,CAAA,CAAA;AAC7C,MAAY,WAAA,CAAA,mBAAA,CAAoB,qBAAqB,UAAY,EAAA,MAAA,CAAA,CAAA;AACjE,MAAA,eAAA,CAAgB,IAAI,WAAY,CAAA,gCAAA,CAAiCA,aAAK,CAAA,IAAA,CAAK,qBAAqB,UAAa,CAAA,EAAA,eAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAG/G,IAAA,OAAA,CAAQ,GAAI,CAAA,0CAAA,CAAA,CAAA;AACZ,IAAO,OAAA,eAAA,CAAA;AAAA,GAAA,CAAA;AAAA;;ACnLoB,MAAA,iBAAA,CAAA;AAAA,EACtB,OAAA,WAAA,GAAc,CAAC,cAA2B,KAAA;AAC/C,IAAA,MAAM,WAAW,SAAU,CAAA,6BAAA,EAAA,CAAA;AAC3B,IAAM,MAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAK,QAAU,EAAA,cAAA,CAAA,CAAA;AACrC,IAAA,IAAI,GAAG,UAAW,CAAA,QAAA,CAAA;AAAW,MAAO,OAAA,QAAA,CAAA;AACpC,IAAI,IAAA,CAAC,GAAG,UAAW,CAAA,QAAA,CAAA;AAAW,MAAA,EAAA,CAAG,SAAU,CAAA,QAAA,CAAA,CAAA;AAC3C,IAAA,EAAA,CAAG,cAAc,QAAU,EAAA,EAAA,CAAA,CAAA;AAC3B,IAAO,OAAA,QAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAGF,OAAA,YAAA,GAAe,CAAC,cAAA,EAAwB,GAAgB,KAAA;AAC7D,IAAM,MAAA,QAAA,GAAW,kBAAkB,WAAY,CAAA,cAAA,CAAA,CAAA;AAC/C,IAAM,MAAA,IAAA,GAAO,GAAG,iBAAkB,CAAA,QAAA,CAAA,CAAA;AAClC,IAAA,MAAM,OAAU,GAAA,KAAA,CAAM,GAAI,CAAA,GAAA,EAAK,SAAU,QAAU,EAAA;AACjD,MAAA,QAAA,CAAS,IAAK,CAAA,IAAA,CAAA,CAAA;AACd,MAAK,IAAA,CAAA,EAAA,CAAG,UAAU,MAAM;AACtB,QAAK,IAAA,CAAA,KAAA,EAAA,CAAA;AACL,QAAA,OAAA,CAAQ,IAAI,CAAmB,gBAAA,EAAA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGnC,IAAQ,OAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,GAAe,KAAA;AAClC,MAAQ,OAAA,CAAA,GAAA,CAAI,CAAoC,iCAAA,EAAA,cAAA,CAAA,OAAA,EAAwB,GAAQ,CAAA,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,OAI7E,OAAO,MAAM;AAClB,IAAA,MAAM,WAAW,SAAU,CAAA,aAAA,EAAA,CAAA;AAC3B,IAAA,KAAA,MAAW,OAAO,QAAU,EAAA;AAC1B,MAAM,MAAA,cAAA,GAAiB,SAAS,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AACrC,MAAM,MAAA,GAAA,GAAM,SAAS,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1B,MAAA,iBAAA,CAAkB,aAAa,cAAgB,EAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAEjD,IAAA,OAAA,CAAQ,GAAI,CAAA,6DAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA;;ACtChB,KAAA,CACG,OAAQ,CAAA,mBAAA,EAAqB,8BAAgC,EAAA,CAAC,MAAqB,KAAA;AAClF,EAAA,SAAA,CAAU,cAAe,CAAA,MAAA,CAAA,CAAA;AACzB,EAAkB,iBAAA,CAAA,IAAA,EAAA,CAAA;AAAA,CAAA,CAAA,CAEnB,OAAQ,CAAA,eAAA,EAAiB,iDAAmD,EAAA,OAAO,MAAqB,KAAA;AAEvG,EAAA,MAAA,CAAM,KAAM,CAAA,CAAC,EAAE,MAAA,EAAQ,cAAqB,EAAA,KAAA;AAC1C,IAAI,IAAA,CAAC,QAAQ,IAAQ,EAAA,EAAA;AACnB,MAAA,MAAM,IAAI,KAAM,CAAA,sCAAA,CAAA,CAAA;AAAA,KAAA;AAElB,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAGT,EAAA,SAAA,CAAU,cAAe,CAAA,MAAA,CAAA,CAAA;AACzB,EAAM,MAAA,WAAA,GAAc,MAAM,OAAQ,CAAA,GAAA,CAAI,UAAU,aAAgB,EAAA,CAAA,GAAA,CAAI,CAAU,MAAA,KAAA,aAAA,CAAc,IAAK,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA;AACjG,EAAA,MAAM,kCAAsB,IAAA,GAAA,EAAA,CAAA;AAC5B,EAAA,MAAM,+BAAmB,IAAA,GAAA,EAAA,CAAA;AAEzB,EAAA,KAAA,MAAW,OAAO,WAAa,EAAA;AAC7B,IAAA,GAAA,CAAI,QAAQ,CAAS,KAAA,KAAA;AACnB,MAAM,MAAA,QAAA,GAAWA,cAAK,QAAS,CAAA,KAAA,CAAA,CAAA;AAE/B,MAAI,IAAA,CAAC,YAAa,CAAA,GAAA,CAAI,QAAW,CAAA,EAAA;AAC/B,QAAA,eAAA,CAAgB,GAAI,CAAA,KAAA,CAAA,CAAA;AACpB,QAAA,YAAA,CAAa,GAAI,CAAA,QAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAKvB,EAAM,MAAA,iBAAA,GAAoB,MAAM,IAAK,CAAA,eAAA,CAAA,CAAA;AACrC,EAAM,MAAA,aAAA,GAAgB,iBAAkB,CAAA,GAAA,CAAI,CAAgB,YAAA,KAAA;AAC1D,IAAO,OAAA,CAAA,eAAA,EAAkB,YAAa,CAAA,OAAA,CAAQ,IAAM,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAEtD,EAAA,WAAA,CAAY,oBAAoB,SAAU,CAAA,aAAA,EAAA,EAAiB,aAAc,CAAA,IAAA,CAAK,OAAO,SAAU,CAAA,OAAA,EAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAEhG,OAAO,QAAU,EAAA;AAAA,EAChB,WAAa,EAAA,6CAAA;AAAA,EACb,IAAM,EAAA,QAAA;AAAA,EACN,YAAc,EAAA,IAAA;AAAA,CAAA,CAAA,CAEf,OAAO,gBAAkB,EAAA;AAAA,EACxB,WAAa,EAAA,iDAAA;AAAA,EACb,IAAM,EAAA,QAAA;AAAA,EACN,YAAc,EAAA,IAAA;AAAA,CAAA,CAAA,CAEf,OAAO,QAAU,EAAA;AAAA,EAChB,WAAa,EAAA,4DAAA;AAAA,EACb,IAAM,EAAA,QAAA;AAAA,CAAA,CAAA,CAEP,OAAO,OAAS,EAAA;AAAA,EACf,WAAa,EAAA,iCAAA;AAAA,EACb,IAAM,EAAA,SAAA;AAAA,EACN,OAAS,EAAA,KAAA;AAAA,EACT,YAAc,EAAA,KAAA;AAAA,CAEf,CAAA,CAAA,aAAA,CAAc,GACd,IAAO,EAAA,CAAA,IAAA"}