@cuxt/sandboxjs 0.1.0 → 0.1.3

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.
Files changed (226) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +198 -185
  3. package/{build → dist/cjs}/Sandbox.d.ts +15 -6
  4. package/dist/cjs/Sandbox.js +126 -0
  5. package/dist/{SandboxExec.d.ts → cjs/SandboxExec.d.ts} +8 -17
  6. package/dist/cjs/SandboxExec.js +227 -0
  7. package/{build/eval.d.ts → dist/cjs/eval/index.d.ts} +10 -2
  8. package/dist/cjs/eval/index.js +233 -0
  9. package/dist/cjs/executor/executorUtils.d.ts +161 -0
  10. package/dist/cjs/executor/executorUtils.js +930 -0
  11. package/dist/cjs/executor/index.d.ts +1 -0
  12. package/dist/cjs/executor/index.js +2 -0
  13. package/dist/cjs/executor/ops/assignment.d.ts +1 -0
  14. package/dist/cjs/executor/ops/assignment.js +88 -0
  15. package/dist/cjs/executor/ops/call.d.ts +1 -0
  16. package/dist/cjs/executor/ops/call.js +160 -0
  17. package/dist/cjs/executor/ops/comparison.d.ts +1 -0
  18. package/dist/cjs/executor/ops/comparison.js +36 -0
  19. package/dist/cjs/executor/ops/control.d.ts +1 -0
  20. package/dist/cjs/executor/ops/control.js +203 -0
  21. package/dist/cjs/executor/ops/functions.d.ts +1 -0
  22. package/dist/cjs/executor/ops/functions.js +55 -0
  23. package/dist/cjs/executor/ops/index.d.ts +0 -0
  24. package/dist/cjs/executor/ops/index.js +11 -0
  25. package/dist/cjs/executor/ops/literals.d.ts +1 -0
  26. package/dist/cjs/executor/ops/literals.js +45 -0
  27. package/dist/cjs/executor/ops/misc.d.ts +1 -0
  28. package/dist/cjs/executor/ops/misc.js +25 -0
  29. package/dist/cjs/executor/ops/object.d.ts +1 -0
  30. package/dist/cjs/executor/ops/object.js +51 -0
  31. package/dist/cjs/executor/ops/prop.d.ts +1 -0
  32. package/dist/cjs/executor/ops/prop.js +70 -0
  33. package/dist/cjs/executor/ops/unary.d.ts +1 -0
  34. package/dist/cjs/executor/ops/unary.js +48 -0
  35. package/dist/cjs/executor/ops/variables.d.ts +1 -0
  36. package/dist/cjs/executor/ops/variables.js +16 -0
  37. package/dist/cjs/executor/opsRegistry.d.ts +33 -0
  38. package/dist/cjs/executor/opsRegistry.js +8 -0
  39. package/dist/cjs/package.json +3 -0
  40. package/dist/cjs/parser/index.d.ts +3 -0
  41. package/dist/cjs/parser/index.js +1 -0
  42. package/dist/{parser.d.ts → cjs/parser/lisp.d.ts} +29 -42
  43. package/dist/cjs/parser/lispTypes/conditionals.d.ts +2 -0
  44. package/dist/cjs/parser/lispTypes/conditionals.js +135 -0
  45. package/dist/cjs/parser/lispTypes/control.d.ts +2 -0
  46. package/dist/cjs/parser/lispTypes/control.js +204 -0
  47. package/dist/cjs/parser/lispTypes/declarations.d.ts +2 -0
  48. package/dist/cjs/parser/lispTypes/declarations.js +99 -0
  49. package/dist/cjs/parser/lispTypes/index.d.ts +3 -0
  50. package/dist/cjs/parser/lispTypes/index.js +17 -0
  51. package/dist/cjs/parser/lispTypes/operators.d.ts +2 -0
  52. package/dist/cjs/parser/lispTypes/operators.js +252 -0
  53. package/dist/cjs/parser/lispTypes/shared.d.ts +38 -0
  54. package/dist/cjs/parser/lispTypes/structures.d.ts +2 -0
  55. package/dist/cjs/parser/lispTypes/structures.js +188 -0
  56. package/dist/cjs/parser/lispTypes/values.d.ts +2 -0
  57. package/dist/cjs/parser/lispTypes/values.js +89 -0
  58. package/dist/cjs/parser/parserUtils.d.ts +34 -0
  59. package/dist/cjs/parser/parserUtils.js +968 -0
  60. package/dist/cjs/utils/CodeString.d.ts +16 -0
  61. package/dist/cjs/utils/CodeString.js +64 -0
  62. package/dist/cjs/utils/ExecContext.d.ts +34 -0
  63. package/dist/cjs/utils/ExecContext.js +171 -0
  64. package/dist/cjs/utils/Prop.d.ts +16 -0
  65. package/dist/cjs/utils/Prop.js +81 -0
  66. package/dist/cjs/utils/Scope.d.ts +47 -0
  67. package/dist/cjs/utils/Scope.js +127 -0
  68. package/dist/cjs/utils/errors.d.ts +10 -0
  69. package/dist/cjs/utils/errors.js +12 -0
  70. package/dist/cjs/utils/functionReplacements.d.ts +11 -0
  71. package/dist/cjs/utils/functionReplacements.js +362 -0
  72. package/dist/cjs/utils/index.d.ts +7 -0
  73. package/dist/cjs/utils/index.js +7 -0
  74. package/dist/cjs/utils/types.d.ts +221 -0
  75. package/dist/cjs/utils/types.js +164 -0
  76. package/dist/cjs/utils/unraw.js +145 -0
  77. package/dist/{node → esm}/Sandbox.d.ts +15 -6
  78. package/dist/esm/Sandbox.js +115 -0
  79. package/dist/esm/Sandbox.js.map +1 -0
  80. package/{build → dist/esm}/SandboxExec.d.ts +8 -17
  81. package/dist/esm/SandboxExec.js +224 -0
  82. package/dist/esm/SandboxExec.js.map +1 -0
  83. package/dist/{eval.d.ts → esm/eval/index.d.ts} +10 -2
  84. package/dist/esm/eval/index.js +235 -0
  85. package/dist/esm/eval/index.js.map +1 -0
  86. package/dist/esm/executor/executorUtils.d.ts +161 -0
  87. package/dist/esm/executor/executorUtils.js +898 -0
  88. package/dist/esm/executor/executorUtils.js.map +1 -0
  89. package/dist/esm/executor/index.d.ts +1 -0
  90. package/dist/esm/executor/index.js +2 -0
  91. package/dist/esm/executor/ops/assignment.d.ts +1 -0
  92. package/dist/esm/executor/ops/assignment.js +90 -0
  93. package/dist/esm/executor/ops/assignment.js.map +1 -0
  94. package/dist/esm/executor/ops/call.d.ts +1 -0
  95. package/dist/esm/executor/ops/call.js +162 -0
  96. package/dist/esm/executor/ops/call.js.map +1 -0
  97. package/dist/esm/executor/ops/comparison.d.ts +1 -0
  98. package/dist/esm/executor/ops/comparison.js +38 -0
  99. package/dist/esm/executor/ops/comparison.js.map +1 -0
  100. package/dist/esm/executor/ops/control.d.ts +1 -0
  101. package/dist/esm/executor/ops/control.js +205 -0
  102. package/dist/esm/executor/ops/control.js.map +1 -0
  103. package/dist/esm/executor/ops/functions.d.ts +1 -0
  104. package/dist/esm/executor/ops/functions.js +57 -0
  105. package/dist/esm/executor/ops/functions.js.map +1 -0
  106. package/dist/esm/executor/ops/index.d.ts +0 -0
  107. package/dist/esm/executor/ops/index.js +11 -0
  108. package/dist/esm/executor/ops/literals.d.ts +1 -0
  109. package/dist/esm/executor/ops/literals.js +47 -0
  110. package/dist/esm/executor/ops/literals.js.map +1 -0
  111. package/dist/esm/executor/ops/misc.d.ts +1 -0
  112. package/dist/esm/executor/ops/misc.js +27 -0
  113. package/dist/esm/executor/ops/misc.js.map +1 -0
  114. package/dist/esm/executor/ops/object.d.ts +1 -0
  115. package/dist/esm/executor/ops/object.js +53 -0
  116. package/dist/esm/executor/ops/object.js.map +1 -0
  117. package/dist/esm/executor/ops/prop.d.ts +1 -0
  118. package/dist/esm/executor/ops/prop.js +72 -0
  119. package/dist/esm/executor/ops/prop.js.map +1 -0
  120. package/dist/esm/executor/ops/unary.d.ts +1 -0
  121. package/dist/esm/executor/ops/unary.js +50 -0
  122. package/dist/esm/executor/ops/unary.js.map +1 -0
  123. package/dist/esm/executor/ops/variables.d.ts +1 -0
  124. package/dist/esm/executor/ops/variables.js +18 -0
  125. package/dist/esm/executor/ops/variables.js.map +1 -0
  126. package/dist/esm/executor/opsRegistry.d.ts +33 -0
  127. package/dist/esm/executor/opsRegistry.js +9 -0
  128. package/dist/esm/executor/opsRegistry.js.map +1 -0
  129. package/dist/esm/package.json +3 -0
  130. package/dist/esm/parser/index.d.ts +3 -0
  131. package/dist/esm/parser/index.js +1 -0
  132. package/{build/parser.d.ts → dist/esm/parser/lisp.d.ts} +29 -42
  133. package/dist/esm/parser/lispTypes/conditionals.d.ts +2 -0
  134. package/dist/esm/parser/lispTypes/conditionals.js +137 -0
  135. package/dist/esm/parser/lispTypes/conditionals.js.map +1 -0
  136. package/dist/esm/parser/lispTypes/control.d.ts +2 -0
  137. package/dist/esm/parser/lispTypes/control.js +206 -0
  138. package/dist/esm/parser/lispTypes/control.js.map +1 -0
  139. package/dist/esm/parser/lispTypes/declarations.d.ts +2 -0
  140. package/dist/esm/parser/lispTypes/declarations.js +101 -0
  141. package/dist/esm/parser/lispTypes/declarations.js.map +1 -0
  142. package/dist/esm/parser/lispTypes/index.d.ts +3 -0
  143. package/dist/esm/parser/lispTypes/index.js +19 -0
  144. package/dist/esm/parser/lispTypes/index.js.map +1 -0
  145. package/dist/esm/parser/lispTypes/operators.d.ts +2 -0
  146. package/dist/esm/parser/lispTypes/operators.js +254 -0
  147. package/dist/esm/parser/lispTypes/operators.js.map +1 -0
  148. package/dist/esm/parser/lispTypes/shared.d.ts +38 -0
  149. package/dist/esm/parser/lispTypes/structures.d.ts +2 -0
  150. package/dist/esm/parser/lispTypes/structures.js +190 -0
  151. package/dist/esm/parser/lispTypes/structures.js.map +1 -0
  152. package/dist/esm/parser/lispTypes/values.d.ts +2 -0
  153. package/dist/esm/parser/lispTypes/values.js +91 -0
  154. package/dist/esm/parser/lispTypes/values.js.map +1 -0
  155. package/dist/esm/parser/parserUtils.d.ts +34 -0
  156. package/dist/esm/parser/parserUtils.js +959 -0
  157. package/dist/esm/parser/parserUtils.js.map +1 -0
  158. package/dist/esm/utils/CodeString.d.ts +16 -0
  159. package/dist/esm/utils/CodeString.js +66 -0
  160. package/dist/esm/utils/CodeString.js.map +1 -0
  161. package/dist/esm/utils/ExecContext.d.ts +34 -0
  162. package/dist/esm/utils/ExecContext.js +168 -0
  163. package/dist/esm/utils/ExecContext.js.map +1 -0
  164. package/dist/esm/utils/Prop.d.ts +16 -0
  165. package/dist/esm/utils/Prop.js +80 -0
  166. package/dist/esm/utils/Prop.js.map +1 -0
  167. package/dist/esm/utils/Scope.d.ts +47 -0
  168. package/dist/esm/utils/Scope.js +122 -0
  169. package/dist/esm/utils/Scope.js.map +1 -0
  170. package/dist/esm/utils/errors.d.ts +10 -0
  171. package/dist/esm/utils/errors.js +10 -0
  172. package/dist/esm/utils/errors.js.map +1 -0
  173. package/dist/esm/utils/functionReplacements.d.ts +11 -0
  174. package/dist/esm/utils/functionReplacements.js +361 -0
  175. package/dist/esm/utils/functionReplacements.js.map +1 -0
  176. package/dist/esm/utils/index.d.ts +7 -0
  177. package/dist/esm/utils/index.js +7 -0
  178. package/dist/esm/utils/types.d.ts +221 -0
  179. package/dist/esm/utils/types.js +160 -0
  180. package/dist/esm/utils/types.js.map +1 -0
  181. package/dist/esm/utils/unraw.js +147 -0
  182. package/dist/esm/utils/unraw.js.map +1 -0
  183. package/dist/umd/Sandbox.min.js +2 -0
  184. package/dist/umd/Sandbox.min.js.map +1 -0
  185. package/dist/umd/SandboxExec.min.js +2 -0
  186. package/dist/umd/SandboxExec.min.js.map +1 -0
  187. package/package.json +70 -68
  188. package/build/Sandbox.js +0 -62
  189. package/build/SandboxExec.js +0 -214
  190. package/build/eval.js +0 -205
  191. package/build/executor.d.ts +0 -124
  192. package/build/executor.js +0 -1546
  193. package/build/parser.js +0 -1527
  194. package/build/unraw.js +0 -168
  195. package/build/utils.d.ts +0 -264
  196. package/build/utils.js +0 -362
  197. package/dist/Sandbox.d.ts +0 -25
  198. package/dist/Sandbox.js +0 -270
  199. package/dist/Sandbox.js.map +0 -1
  200. package/dist/Sandbox.min.js +0 -2
  201. package/dist/Sandbox.min.js.map +0 -1
  202. package/dist/SandboxExec.js +0 -218
  203. package/dist/SandboxExec.js.map +0 -1
  204. package/dist/SandboxExec.min.js +0 -2
  205. package/dist/SandboxExec.min.js.map +0 -1
  206. package/dist/executor.d.ts +0 -124
  207. package/dist/executor.js +0 -1550
  208. package/dist/executor.js.map +0 -1
  209. package/dist/node/Sandbox.js +0 -277
  210. package/dist/node/SandboxExec.d.ts +0 -66
  211. package/dist/node/SandboxExec.js +0 -225
  212. package/dist/node/eval.d.ts +0 -27
  213. package/dist/node/executor.d.ts +0 -124
  214. package/dist/node/executor.js +0 -1567
  215. package/dist/node/parser.d.ts +0 -154
  216. package/dist/node/parser.js +0 -1704
  217. package/dist/node/utils.d.ts +0 -264
  218. package/dist/node/utils.js +0 -385
  219. package/dist/parser.js +0 -1690
  220. package/dist/parser.js.map +0 -1
  221. package/dist/unraw.d.ts +0 -11
  222. package/dist/utils.d.ts +0 -264
  223. package/dist/utils.js +0 -365
  224. package/dist/utils.js.map +0 -1
  225. /package/{build → dist/cjs/utils}/unraw.d.ts +0 -0
  226. /package/dist/{node → esm/utils}/unraw.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sources":["../src/executor.ts"],"sourcesContent":["import { LispItem, Lisp, IRegEx, SwitchCase } from './parser.js';\r\nimport {\r\n CodeString,\r\n hasOwnProperty,\r\n IAuditReport,\r\n IExecContext,\r\n IScope,\r\n isLisp,\r\n LispType,\r\n LocalScope,\r\n Prop,\r\n SandboxExecutionQuotaExceededError,\r\n SandboxError,\r\n SandboxExecutionTreeError,\r\n Scope,\r\n Ticks,\r\n VarType,\r\n SandboxCapabilityError,\r\n SandboxAccessError,\r\n} from './utils.js';\r\n\r\nexport type Done<T = any> = (err?: any, res?: T | typeof optional) => void;\r\n\r\nexport class ExecReturn<T> {\r\n constructor(\r\n public auditReport: IAuditReport | undefined,\r\n public result: T,\r\n public returned: boolean,\r\n public breakLoop = false,\r\n public continueLoop = false,\r\n ) {}\r\n}\r\n\r\nexport type Unknown = undefined | null | Record<string | number, unknown>;\r\n\r\nexport interface IChange {\r\n type: string;\r\n}\r\n\r\nexport interface ICreate extends IChange {\r\n type: 'create';\r\n prop: number | string;\r\n}\r\n\r\nexport interface IReplace extends IChange {\r\n type: 'replace';\r\n}\r\n\r\nexport interface IDelete extends IChange {\r\n type: 'delete';\r\n prop: number | string;\r\n}\r\n\r\nexport interface IReverse extends IChange {\r\n type: 'reverse';\r\n}\r\n\r\nexport interface ISort extends IChange {\r\n type: 'sort';\r\n}\r\n\r\nexport interface IPush extends IChange {\r\n type: 'push';\r\n added: unknown[];\r\n}\r\n\r\nexport interface IPop extends IChange {\r\n type: 'pop';\r\n removed: unknown[];\r\n}\r\n\r\nexport interface IShift extends IChange {\r\n type: 'shift';\r\n removed: unknown[];\r\n}\r\n\r\nexport interface IUnShift extends IChange {\r\n type: 'unshift';\r\n added: unknown[];\r\n}\r\n\r\nexport interface ISplice extends IChange {\r\n type: 'splice';\r\n startIndex: number;\r\n deleteCount: number;\r\n added: unknown[];\r\n removed: unknown[];\r\n}\r\n\r\nexport interface ICopyWithin extends IChange {\r\n type: 'copyWithin';\r\n startIndex: number;\r\n endIndex: number;\r\n added: unknown[];\r\n removed: unknown[];\r\n}\r\n\r\nexport type Change =\r\n | ICreate\r\n | IReplace\r\n | IDelete\r\n | IReverse\r\n | ISort\r\n | IPush\r\n | IPop\r\n | IUnShift\r\n | IShift\r\n | ISplice\r\n | ICopyWithin;\r\n\r\nconst optional = {};\r\n\r\nfunction generateArgs(argNames: string[], args: unknown[]) {\r\n const vars: Record<string, unknown> = {};\r\n argNames.forEach((arg, i) => {\r\n if (arg.startsWith('...')) {\r\n vars[arg.substring(3)] = args.slice(i);\r\n } else {\r\n vars[arg] = args[i];\r\n }\r\n });\r\n return vars;\r\n}\r\n\r\nexport function createFunction(\r\n argNames: string[],\r\n parsed: Lisp[],\r\n ticks: Ticks,\r\n context: IExecContext,\r\n scope?: Scope,\r\n name?: string,\r\n) {\r\n if (context.ctx.options.forbidFunctionCreation) {\r\n throw new SandboxCapabilityError('Function creation is forbidden');\r\n }\r\n let func;\r\n if (name === undefined) {\r\n func = (...args: unknown[]) => {\r\n const vars = generateArgs(argNames, args);\r\n const res = executeTree(\r\n ticks,\r\n context,\r\n parsed,\r\n scope === undefined ? [] : [new Scope(scope, vars)],\r\n );\r\n return res.result;\r\n };\r\n } else {\r\n func = function sandboxedObject(this: Unknown, ...args: unknown[]) {\r\n const vars = generateArgs(argNames, args);\r\n const res = executeTree(\r\n ticks,\r\n context,\r\n parsed,\r\n scope === undefined ? [] : [new Scope(scope, vars, this)],\r\n );\r\n return res.result;\r\n };\r\n }\r\n context.registerSandboxFunction(func);\r\n context.ctx.sandboxedFunctions.add(func);\r\n return func;\r\n}\r\n\r\nexport function createFunctionAsync(\r\n argNames: string[],\r\n parsed: Lisp[],\r\n ticks: Ticks,\r\n context: IExecContext,\r\n scope?: Scope,\r\n name?: string,\r\n) {\r\n if (context.ctx.options.forbidFunctionCreation) {\r\n throw new SandboxCapabilityError('Function creation is forbidden');\r\n }\r\n if (!context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\r\n throw new SandboxCapabilityError('Async/await not permitted');\r\n }\r\n let func;\r\n if (name === undefined) {\r\n func = async (...args: unknown[]) => {\r\n const vars = generateArgs(argNames, args);\r\n const res = await executeTreeAsync(\r\n ticks,\r\n context,\r\n parsed,\r\n scope === undefined ? [] : [new Scope(scope, vars)],\r\n );\r\n return res.result;\r\n };\r\n } else {\r\n func = async function sandboxedObject(this: Unknown, ...args: unknown[]) {\r\n const vars = generateArgs(argNames, args);\r\n const res = await executeTreeAsync(\r\n ticks,\r\n context,\r\n parsed,\r\n scope === undefined ? [] : [new Scope(scope, vars, this)],\r\n );\r\n return res.result;\r\n };\r\n }\r\n context.registerSandboxFunction(func);\r\n context.ctx.sandboxedFunctions.add(func);\r\n return func;\r\n}\r\n\r\nexport function assignCheck(obj: Prop, context: IExecContext, op = 'assign') {\r\n if (obj.context === undefined) {\r\n throw new ReferenceError(`Cannot ${op} value to undefined.`);\r\n }\r\n if (obj.isConst) {\r\n throw new TypeError(`Assignment to constant variable.`);\r\n }\r\n if (obj.isGlobal) {\r\n throw new SandboxAccessError(\r\n `Cannot ${op} property '${obj.prop.toString()}' of a global object`,\r\n );\r\n }\r\n if (obj.context === null) {\r\n throw new TypeError('Cannot set properties of null');\r\n }\r\n if (\r\n typeof (obj.context as any)[obj.prop] === 'function' &&\r\n !hasOwnProperty(obj.context, obj.prop)\r\n ) {\r\n throw new SandboxAccessError(\r\n `Override prototype property '${obj.prop.toString()}' not allowed`,\r\n );\r\n }\r\n if (op === 'delete') {\r\n if (hasOwnProperty(obj.context, obj.prop)) {\r\n context.changeSubscriptions\r\n .get(obj.context)\r\n ?.forEach((cb) => cb({ type: 'delete', prop: obj.prop.toString() }));\r\n context.changeSubscriptionsGlobal\r\n .get(obj.context)\r\n ?.forEach((cb) => cb({ type: 'delete', prop: obj.prop.toString() }));\r\n }\r\n } else if (hasOwnProperty(obj.context, obj.prop)) {\r\n context.setSubscriptions\r\n .get(obj.context)\r\n ?.get(obj.prop.toString())\r\n ?.forEach((cb) =>\r\n cb({\r\n type: 'replace',\r\n }),\r\n );\r\n context.setSubscriptionsGlobal\r\n .get(obj.context)\r\n ?.get(obj.prop.toString())\r\n ?.forEach((cb) =>\r\n cb({\r\n type: 'replace',\r\n }),\r\n );\r\n } else {\r\n context.changeSubscriptions\r\n .get(obj.context)\r\n ?.forEach((cb) => cb({ type: 'create', prop: obj.prop.toString() }));\r\n context.changeSubscriptionsGlobal\r\n .get(obj.context)\r\n ?.forEach((cb) => cb({ type: 'create', prop: obj.prop.toString() }));\r\n }\r\n}\r\nconst arrayChange = new Set([\r\n [].push,\r\n [].pop,\r\n [].shift,\r\n [].unshift,\r\n [].splice,\r\n [].reverse,\r\n [].sort,\r\n [].copyWithin,\r\n]);\r\n\r\nexport class KeyVal {\r\n constructor(\r\n public key: string | SpreadObject,\r\n public val: unknown,\r\n ) {}\r\n}\r\n\r\nexport class SpreadObject {\r\n constructor(public item: { [key: string]: unknown }) {}\r\n}\r\n\r\nexport class SpreadArray {\r\n constructor(public item: unknown[]) {}\r\n}\r\n\r\nexport class If {\r\n constructor(\r\n public t: Lisp,\r\n public f: Lisp,\r\n ) {}\r\n}\r\n\r\nconst literalRegex = /(\\$\\$)*(\\$)?\\${(\\d+)}/g;\r\ntype OpCallback<a, b, obj, bobj> = (params: OpsCallbackParams<a, b, obj, bobj>) => void;\r\n\r\nexport const ops = new Map<LispType, OpCallback<any, any, any, any>>();\r\nexport function addOps<a = unknown, b = unknown, obj = unknown, bobj = unknown>(\r\n type: LispType,\r\n cb: OpCallback<a, b, obj, bobj>,\r\n) {\r\n ops.set(type, cb);\r\n}\r\n\r\nconst prorptyKeyTypes = ['string', 'number', 'symbol'];\r\n\r\nfunction isPropertyKey(val: unknown): val is PropertyKey {\r\n return prorptyKeyTypes.includes(typeof val);\r\n}\r\n\r\nfunction hasPossibleProperties(val: unknown): val is {} {\r\n return val !== null && val !== undefined;\r\n}\r\n\r\naddOps<unknown, PropertyKey>(LispType.Prop, ({ done, a, b, obj, context, scope }) => {\r\n if (a === null) {\r\n throw new TypeError(`Cannot read properties of null (reading '${b?.toString()}')`);\r\n }\r\n\r\n if (!isPropertyKey(b)) {\r\n b = `${b}`;\r\n }\r\n\r\n if (a === undefined && obj === undefined && typeof b === 'string') {\r\n // is variable access\r\n const prop = scope.get(b);\r\n if (prop.context === context.ctx.sandboxGlobal) {\r\n if (context.ctx.options.audit) {\r\n context.ctx.auditReport?.globalsAccess.add(b);\r\n }\r\n }\r\n const val = prop.context ? (prop.context as any)[prop.prop] : undefined;\r\n const p = getGlobalProp(val, context, prop) || prop;\r\n\r\n done(undefined, p);\r\n return;\r\n } else if (a === undefined) {\r\n throw new TypeError(`Cannot read properties of undefined (reading '${b.toString()}')`);\r\n }\r\n\r\n if (!hasPossibleProperties(a)) {\r\n done(undefined, new Prop(undefined, b));\r\n return;\r\n }\r\n\r\n const prototypeAccess = typeof a === 'function' || !hasOwnProperty(a, b);\r\n\r\n if (context.ctx.options.audit && prototypeAccess) {\r\n let prot: {} = Object.getPrototypeOf(a);\r\n do {\r\n if (hasOwnProperty(prot, b)) {\r\n if (\r\n context.ctx.auditReport &&\r\n !context.ctx.auditReport.prototypeAccess[prot.constructor.name]\r\n ) {\r\n context.ctx.auditReport.prototypeAccess[prot.constructor.name] = new Set();\r\n }\r\n context.ctx.auditReport?.prototypeAccess[prot.constructor.name].add(b);\r\n }\r\n } while ((prot = Object.getPrototypeOf(prot)));\r\n }\r\n\r\n if (prototypeAccess) {\r\n if (typeof a === 'function') {\r\n if (hasOwnProperty(a, b)) {\r\n const whitelist = context.ctx.prototypeWhitelist.get(a.prototype);\r\n const replace = context.ctx.options.prototypeReplacements.get(a);\r\n if (replace) {\r\n done(undefined, new Prop(replace(a, true), b));\r\n return;\r\n }\r\n if (\r\n !(whitelist && (!whitelist.size || whitelist.has(b))) &&\r\n !context.ctx.sandboxedFunctions.has(a)\r\n ) {\r\n throw new SandboxAccessError(\r\n `Static method or property access not permitted: ${a.name}.${b.toString()}`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Fast path: check own properties of `a` first (handles static methods like Body.json)\r\n if (hasOwnProperty(a, b)) {\r\n const replace = context.ctx.options.prototypeReplacements.get(a as Function);\r\n if (replace) {\r\n done(undefined, new Prop(replace(a as object, true), b));\r\n return;\r\n }\r\n if (context.ctx.sandboxedFunctions.has(a as Function)) {\r\n done(undefined, new Prop(a, b, false, false));\r\n return;\r\n }\r\n // Check if constructor or any ancestor is whitelisted\r\n let ctorProt: {} | null = (a as Function).prototype;\r\n while (ctorProt !== null) {\r\n const whitelist = context.ctx.prototypeWhitelist.get(ctorProt as Function);\r\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\r\n done(undefined, new Prop(a, b, false, false));\r\n return;\r\n }\r\n ctorProt = Object.getPrototypeOf(ctorProt);\r\n }\r\n if (typeof a === 'function') {\r\n // Constructor not whitelisted, throw\r\n throw new SandboxAccessError(\r\n `Method or property access not permitted: ${(a as Function).name}.${b.toString()}`,\r\n );\r\n }\r\n }\r\n\r\n let prot: {} = a;\r\n while ((prot = Object.getPrototypeOf(prot))) {\r\n if (hasOwnProperty(prot, b) || b === '__proto__') {\r\n const replace = context.ctx.options.prototypeReplacements.get(prot.constructor);\r\n if (replace) {\r\n done(undefined, new Prop(replace(a, false), b));\r\n return;\r\n }\r\n if (context.ctx.sandboxedFunctions.has(prot.constructor)) {\r\n break;\r\n }\r\n // Check if this constructor or any ancestor in its prototype chain is whitelisted\r\n let ctorProt: {} | null = prot.constructor;\r\n let whitelisted = false;\r\n while (ctorProt !== null) {\r\n const whitelist = context.ctx.prototypeWhitelist.get(ctorProt as Function);\r\n if (whitelist && (!whitelist.size || whitelist.has(b))) {\r\n whitelisted = true;\r\n break;\r\n }\r\n ctorProt = Object.getPrototypeOf(ctorProt);\r\n }\r\n if (whitelisted) {\r\n break;\r\n }\r\n if (b === '__proto__') {\r\n throw new SandboxAccessError(`Access to prototype of global object is not permitted`);\r\n }\r\n throw new SandboxAccessError(\r\n `Method or property access not permitted: ${prot.constructor.name}.${b.toString()}`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n const val = a[b as keyof typeof a] as unknown;\r\n if (typeof a === 'function') {\r\n if (b === 'prototype' && !context.ctx.sandboxedFunctions.has(a)) {\r\n throw new SandboxAccessError(`Access to prototype of global object is not permitted`);\r\n }\r\n }\r\n\r\n if (b === '__proto__' && !context.ctx.sandboxedFunctions.has(val?.constructor as any)) {\r\n throw new SandboxAccessError(`Access to prototype of global object is not permitted`);\r\n }\r\n\r\n const p = getGlobalProp(val, context, new Prop(a, b, false, false));\r\n if (p) {\r\n done(undefined, p);\r\n return;\r\n }\r\n\r\n const g =\r\n (obj instanceof Prop && obj.isGlobal) ||\r\n (typeof a === 'function' && !context.ctx.sandboxedFunctions.has(a)) ||\r\n context.ctx.globalsWhitelist.has(a);\r\n\r\n done(undefined, new Prop(a, b, false, g, false));\r\n});\r\n\r\nfunction getGlobalProp(val: unknown, context: IExecContext, prop?: Prop) {\r\n if (!val) return;\r\n const isFunc = typeof val === 'function';\r\n if (val instanceof Prop) {\r\n if (!prop) {\r\n prop = val;\r\n }\r\n val = val.get(context);\r\n }\r\n const p = prop?.prop || 'prop';\r\n if (val === globalThis) {\r\n return new Prop(\r\n {\r\n [p]: context.ctx.sandboxGlobal,\r\n },\r\n p,\r\n prop?.isConst || false,\r\n false,\r\n prop?.isVariable || false,\r\n );\r\n }\r\n const evl = isFunc && context.evals.get(val as Function);\r\n if (evl) {\r\n return new Prop(\r\n {\r\n [p]: evl,\r\n },\r\n p,\r\n prop?.isConst || false,\r\n true,\r\n prop?.isVariable || false,\r\n );\r\n }\r\n}\r\n\r\nfunction sanitizeArray<T>(val: T, context: IExecContext, cache = new WeakSet<object>()): T {\r\n if (!Array.isArray(val)) return val;\r\n if (cache.has(val)) return val;\r\n cache.add(val);\r\n for (let i = 0; i < val.length; i++) {\r\n const item = val[i];\r\n if (item === globalThis) {\r\n val[i] = context.ctx.sandboxGlobal;\r\n } else if (typeof item === 'function') {\r\n const replacement = context.evals.get(item);\r\n if (replacement) {\r\n val[i] = replacement;\r\n }\r\n } else {\r\n sanitizeArray(item, context, cache);\r\n }\r\n }\r\n return val;\r\n}\r\n\r\naddOps<unknown, Lisp[], any>(LispType.Call, ({ done, a, b, obj, context }) => {\r\n if (context.ctx.options.forbidFunctionCalls)\r\n throw new SandboxCapabilityError('Function invocations are not allowed');\r\n if (typeof a !== 'function') {\r\n throw new TypeError(\r\n `${typeof obj?.prop === 'symbol' ? 'Symbol' : obj?.prop} is not a function`,\r\n );\r\n }\r\n const vals = b\r\n .map((item) => {\r\n if (item instanceof SpreadArray) {\r\n return [...item.item];\r\n } else {\r\n return [item];\r\n }\r\n })\r\n .flat()\r\n .map((item) => valueOrProp(item, context));\r\n\r\n if (typeof obj === 'function') {\r\n const evl = context.evals.get(obj);\r\n let ret = evl ? evl(obj, ...vals) : obj(...vals);\r\n ret = getGlobalProp(ret, context) || ret;\r\n sanitizeArray(ret, context);\r\n done(undefined, ret);\r\n return;\r\n }\r\n if (obj.context[obj.prop] === JSON.stringify && context.getSubscriptions.size) {\r\n const cache = new Set<any>();\r\n const recurse = (x: unknown) => {\r\n if (!x || !(typeof x === 'object') || cache.has(x)) return;\r\n cache.add(x);\r\n for (const y of Object.keys(x) as (keyof typeof x)[]) {\r\n context.getSubscriptions.forEach((cb) => cb(x, y));\r\n recurse(x[y]);\r\n }\r\n };\r\n recurse(vals[0]);\r\n }\r\n\r\n if (\r\n obj.context instanceof Array &&\r\n arrayChange.has(obj.context[obj.prop]) &&\r\n (context.changeSubscriptions.get(obj.context) ||\r\n context.changeSubscriptionsGlobal.get(obj.context))\r\n ) {\r\n let change: Change;\r\n let changed = false;\r\n if (obj.prop === 'push') {\r\n change = {\r\n type: 'push',\r\n added: vals,\r\n };\r\n changed = !!vals.length;\r\n } else if (obj.prop === 'pop') {\r\n change = {\r\n type: 'pop',\r\n removed: obj.context.slice(-1),\r\n };\r\n changed = !!change.removed.length;\r\n } else if (obj.prop === 'shift') {\r\n change = {\r\n type: 'shift',\r\n removed: obj.context.slice(0, 1),\r\n };\r\n changed = !!change.removed.length;\r\n } else if (obj.prop === 'unshift') {\r\n change = {\r\n type: 'unshift',\r\n added: vals,\r\n };\r\n changed = !!vals.length;\r\n } else if (obj.prop === 'splice') {\r\n change = {\r\n type: 'splice',\r\n startIndex: vals[0] as number,\r\n deleteCount: vals[1] === undefined ? obj.context.length : vals[1],\r\n added: vals.slice(2),\r\n removed: obj.context.slice(\r\n vals[0],\r\n vals[1] === undefined ? undefined : (vals[0] as number) + (vals[1] as number),\r\n ),\r\n };\r\n changed = !!change.added.length || !!change.removed.length;\r\n } else if (obj.prop === 'reverse' || obj.prop === 'sort') {\r\n change = { type: obj.prop };\r\n changed = !!obj.context.length;\r\n } else if (obj.prop === 'copyWithin') {\r\n const len =\r\n vals[2] === undefined\r\n ? obj.context.length - (vals[1] as number)\r\n : Math.min(obj.context.length, (vals[2] as number) - (vals[1] as number));\r\n change = {\r\n type: 'copyWithin',\r\n startIndex: vals[0] as number,\r\n endIndex: (vals[0] as number) + len,\r\n added: obj.context.slice(vals[1] as number, (vals[1] as number) + len),\r\n removed: obj.context.slice(vals[0] as number, (vals[0] as number) + len),\r\n };\r\n changed = !!change.added.length || !!change.removed.length;\r\n }\r\n if (changed) {\r\n context.changeSubscriptions.get(obj.context)?.forEach((cb) => cb(change));\r\n context.changeSubscriptionsGlobal.get(obj.context)?.forEach((cb) => cb(change));\r\n }\r\n }\r\n obj.get(context);\r\n const evl = context.evals.get(obj.context[obj.prop] as any);\r\n let ret = evl ? evl(obj.context[obj.prop], ...vals) : (obj.context[obj.prop](...vals) as unknown);\r\n ret = getGlobalProp(ret, context) || ret;\r\n sanitizeArray(ret, context);\r\n done(undefined, ret);\r\n});\r\n\r\naddOps<unknown, KeyVal[]>(LispType.CreateObject, ({ done, b }) => {\r\n let res = {} as any;\r\n for (const item of b) {\r\n if (item.key instanceof SpreadObject) {\r\n res = { ...res, ...item.key.item };\r\n } else {\r\n res[item.key] = item.val;\r\n }\r\n }\r\n done(undefined, res);\r\n});\r\n\r\naddOps<string, LispItem>(LispType.KeyVal, ({ done, a, b }) => done(undefined, new KeyVal(a, b)));\r\n\r\naddOps<unknown, Lisp[]>(LispType.CreateArray, ({ done, b, context }) => {\r\n const items = b\r\n .map((item) => {\r\n if (item instanceof SpreadArray) {\r\n return [...item.item];\r\n } else {\r\n return [item];\r\n }\r\n })\r\n .flat()\r\n .map((item) => valueOrProp(item, context));\r\n done(undefined, items);\r\n});\r\n\r\naddOps<unknown, unknown>(LispType.Group, ({ done, b }) => done(undefined, b));\r\n\r\naddOps<unknown, string>(LispType.GlobalSymbol, ({ done, b }) => {\r\n switch (b) {\r\n case 'true':\r\n return done(undefined, true);\r\n case 'false':\r\n return done(undefined, false);\r\n case 'null':\r\n return done(undefined, null);\r\n case 'undefined':\r\n return done(undefined, undefined);\r\n case 'NaN':\r\n return done(undefined, NaN);\r\n case 'Infinity':\r\n return done(undefined, Infinity);\r\n }\r\n done(new Error('Unknown symbol: ' + b));\r\n});\r\n\r\naddOps<unknown, string>(LispType.Number, ({ done, b }) =>\r\n done(undefined, Number(b.replace(/_/g, ''))),\r\n);\r\naddOps<unknown, string>(LispType.BigInt, ({ done, b }) =>\r\n done(undefined, BigInt(b.replace(/_/g, ''))),\r\n);\r\naddOps<unknown, string>(LispType.StringIndex, ({ done, b, context }) =>\r\n done(undefined, context.constants.strings[parseInt(b)]),\r\n);\r\n\r\naddOps<unknown, string>(LispType.RegexIndex, ({ done, b, context }) => {\r\n const reg: IRegEx = context.constants.regexes[parseInt(b)];\r\n if (!context.ctx.globalsWhitelist.has(RegExp)) {\r\n throw new SandboxCapabilityError('Regex not permitted');\r\n } else {\r\n done(undefined, new RegExp(reg.regex, reg.flags));\r\n }\r\n});\r\n\r\naddOps<unknown, string>(LispType.LiteralIndex, ({ exec, done, ticks, b, context, scope }) => {\r\n const item = context.constants.literals[parseInt(b)];\r\n const [, name, js] = item;\r\n const found: Lisp[] = [];\r\n let f: RegExpExecArray | null;\r\n const resnums: string[] = [];\r\n while ((f = literalRegex.exec(name))) {\r\n if (!f[2]) {\r\n found.push(js[parseInt(f[3], 10)]);\r\n resnums.push(f[3]);\r\n }\r\n }\r\n\r\n exec<unknown[]>(ticks, found, scope, context, (...args: unknown[]) => {\r\n const reses: Record<string, unknown> = {};\r\n if (args.length === 1) {\r\n done(args[0]);\r\n return;\r\n }\r\n const processed = args[1];\r\n for (const i of Object.keys(processed!) as (keyof typeof processed)[]) {\r\n const num = resnums[i];\r\n reses[num] = processed![i];\r\n }\r\n done(\r\n undefined,\r\n name.replace(/(\\\\\\\\)*(\\\\)?\\${(\\d+)}/g, (match, $$, $, num) => {\r\n if ($) return match;\r\n const res = reses[num];\r\n return ($$ ? $$ : '') + `${valueOrProp(res, context)}`;\r\n }),\r\n );\r\n });\r\n});\r\n\r\naddOps<unknown, unknown[]>(LispType.SpreadArray, ({ done, b }) => {\r\n done(undefined, new SpreadArray(b));\r\n});\r\n\r\naddOps<unknown, Record<string, unknown>>(LispType.SpreadObject, ({ done, b }) => {\r\n done(undefined, new SpreadObject(b));\r\n});\r\n\r\naddOps<unknown, unknown>(LispType.Not, ({ done, b }) => done(undefined, !b));\r\naddOps<unknown, number>(LispType.Inverse, ({ done, b }) => done(undefined, ~b));\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.IncrementBefore, ({ done, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, ++obj.context[obj.prop]);\r\n});\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.IncrementAfter, ({ done, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, obj.context[obj.prop]++);\r\n});\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.DecrementBefore, ({ done, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, --obj.context[obj.prop]);\r\n});\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.DecrementAfter, ({ done, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, obj.context[obj.prop]--);\r\n});\r\n\r\naddOps<unknown, unknown, Prop<any>, Prop<any>>(\r\n LispType.Assign,\r\n ({ done, b, obj, context, scope, bobj }) => {\r\n assignCheck(obj, context);\r\n obj.isGlobal = bobj?.isGlobal || false;\r\n if (obj.isVariable) {\r\n const s = scope.getWhereValScope(obj.prop as string, obj.prop === 'this');\r\n if (s === null) {\r\n throw new ReferenceError(`Cannot assign to undeclared variable '${obj.prop.toString()}'`);\r\n }\r\n s.set(obj.prop as string, b);\r\n if (obj.isGlobal) {\r\n s.globals[obj.prop.toString()] = true;\r\n } else {\r\n delete s.globals[obj.prop.toString()];\r\n }\r\n done(undefined, b);\r\n return;\r\n }\r\n done(undefined, (obj.context[obj.prop] = b));\r\n },\r\n);\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.AddEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] += b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.SubractEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] -= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.DivideEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] /= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.MultiplyEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] *= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.PowerEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] **= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.ModulusEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] %= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.BitNegateEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] ^= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.BitAndEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] &= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.BitOrEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] |= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.ShiftLeftEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] <<= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(LispType.ShiftRightEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] >>= b));\r\n});\r\n\r\naddOps<unknown, number, Prop<any>>(\r\n LispType.UnsignedShiftRightEquals,\r\n ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] >>>= b));\r\n },\r\n);\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.AndEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] &&= b));\r\n});\r\n\r\naddOps<unknown, unknown, Prop<any>>(LispType.OrEquals, ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] ||= b));\r\n});\r\n\r\naddOps<unknown, unknown, Prop<any>>(\r\n LispType.NullishCoalescingEquals,\r\n ({ done, b, obj, context }) => {\r\n assignCheck(obj, context);\r\n done(undefined, (obj.context[obj.prop] ??= b));\r\n },\r\n);\r\n\r\naddOps<number, number>(LispType.LargerThan, ({ done, a, b }) => done(undefined, a > b));\r\naddOps<number, number>(LispType.SmallerThan, ({ done, a, b }) => done(undefined, a < b));\r\naddOps<number, number>(LispType.LargerEqualThan, ({ done, a, b }) => done(undefined, a >= b));\r\naddOps<number, number>(LispType.SmallerEqualThan, ({ done, a, b }) => done(undefined, a <= b));\r\naddOps<number, number>(LispType.Equal, ({ done, a, b }) => done(undefined, a == b));\r\naddOps<number, number>(LispType.StrictEqual, ({ done, a, b }) => done(undefined, a === b));\r\naddOps<number, number>(LispType.NotEqual, ({ done, a, b }) => done(undefined, a != b));\r\naddOps<number, number>(LispType.StrictNotEqual, ({ done, a, b }) => done(undefined, a !== b));\r\naddOps<number, number>(LispType.And, ({ done, a, b }) => done(undefined, a && b));\r\naddOps<number, number>(LispType.Or, ({ done, a, b }) => done(undefined, a || b));\r\naddOps<number, number>(LispType.NullishCoalescing, ({ done, a, b }) => done(undefined, a ?? b));\r\naddOps<number, number>(LispType.BitAnd, ({ done, a, b }) => done(undefined, a & b));\r\naddOps<number, number>(LispType.BitOr, ({ done, a, b }) => done(undefined, a | b));\r\naddOps<number, number>(LispType.Plus, ({ done, a, b }) => done(undefined, a + b));\r\naddOps<number, number>(LispType.Minus, ({ done, a, b }) => done(undefined, a - b));\r\naddOps<number, number>(LispType.Positive, ({ done, b }) => done(undefined, +b));\r\naddOps<number, number>(LispType.Negative, ({ done, b }) => done(undefined, -b));\r\naddOps<number, number>(LispType.Divide, ({ done, a, b }) => done(undefined, a / b));\r\naddOps<number, number>(LispType.Power, ({ done, a, b }) => done(undefined, a ** b));\r\naddOps<number, number>(LispType.BitNegate, ({ done, a, b }) => done(undefined, a ^ b));\r\naddOps<number, number>(LispType.Multiply, ({ done, a, b }) => done(undefined, a * b));\r\naddOps<number, number>(LispType.Modulus, ({ done, a, b }) => done(undefined, a % b));\r\naddOps<number, number>(LispType.BitShiftLeft, ({ done, a, b }) => done(undefined, a << b));\r\naddOps<number, number>(LispType.BitShiftRight, ({ done, a, b }) => done(undefined, a >> b));\r\naddOps<number, number>(LispType.BitUnsignedShiftRight, ({ done, a, b }) =>\r\n done(undefined, a >>> b),\r\n);\r\naddOps<unknown, LispItem>(LispType.Typeof, ({ exec, done, ticks, b, context, scope }) => {\r\n exec(ticks, b, scope, context, (e, prop) => {\r\n done(undefined, typeof valueOrProp(prop, context));\r\n });\r\n});\r\n\r\naddOps<unknown, { new (): unknown }>(LispType.Instanceof, ({ done, a, b }) =>\r\n done(undefined, a instanceof b),\r\n);\r\naddOps<string, {}>(LispType.In, ({ done, a, b }) => done(undefined, a in b));\r\n\r\naddOps<unknown, unknown>(LispType.Delete, ({ done, context, bobj }) => {\r\n if (!(bobj instanceof Prop)) {\r\n done(undefined, true);\r\n return;\r\n }\r\n assignCheck(bobj, context, 'delete');\r\n if (bobj.isVariable) {\r\n done(undefined, false);\r\n return;\r\n }\r\n done(undefined, delete (bobj.context as any)?.[bobj.prop]);\r\n});\r\n\r\naddOps(LispType.Return, ({ done, b }) => done(undefined, b));\r\n\r\naddOps<string, unknown, unknown, Prop>(LispType.Var, ({ done, a, b, scope, bobj }) => {\r\n done(undefined, scope.declare(a, VarType.var, b, bobj?.isGlobal || false));\r\n});\r\n\r\naddOps<string, unknown, unknown, Prop>(LispType.Let, ({ done, a, b, scope, bobj }) => {\r\n done(undefined, scope.declare(a, VarType.let, b, bobj?.isGlobal || false));\r\n});\r\n\r\naddOps<string, unknown, unknown, Prop>(LispType.Const, ({ done, a, b, scope, bobj }) => {\r\n done(undefined, scope.declare(a, VarType.const, b, bobj?.isGlobal || false));\r\n});\r\n\r\naddOps<string[], Lisp[], Lisp>(\r\n LispType.ArrowFunction,\r\n ({ done, ticks, a, b, obj, context, scope }) => {\r\n a = [...a];\r\n if (typeof obj[2] === 'string' || obj[2] instanceof CodeString) {\r\n if (context.allowJit && context.evalContext) {\r\n obj[2] = b = context.evalContext.lispifyFunction(new CodeString(obj[2]), context.constants);\r\n } else {\r\n throw new SandboxCapabilityError('Unevaluated code detected, JIT not allowed');\r\n }\r\n }\r\n if (a.shift()) {\r\n done(undefined, createFunctionAsync(a, b, ticks, context, scope));\r\n } else {\r\n done(undefined, createFunction(a, b, ticks, context, scope));\r\n }\r\n },\r\n);\r\n\r\naddOps<(string | LispType)[], Lisp[], Lisp>(\r\n LispType.Function,\r\n ({ done, ticks, a, b, obj, context, scope }) => {\r\n if (typeof obj[2] === 'string' || obj[2] instanceof CodeString) {\r\n if (context.allowJit && context.evalContext) {\r\n obj[2] = b = context.evalContext.lispifyFunction(new CodeString(obj[2]), context.constants);\r\n } else {\r\n throw new SandboxCapabilityError('Unevaluated code detected, JIT not allowed');\r\n }\r\n }\r\n const isAsync = a.shift();\r\n const name = a.shift() as string;\r\n let func;\r\n if (isAsync === LispType.True) {\r\n func = createFunctionAsync(a as string[], b, ticks, context, scope, name);\r\n } else {\r\n func = createFunction(a as string[], b, ticks, context, scope, name);\r\n }\r\n if (name) {\r\n scope.declare(name, VarType.var, func);\r\n }\r\n done(undefined, func);\r\n },\r\n);\r\n\r\naddOps<(string | LispType)[], Lisp[], Lisp>(\r\n LispType.InlineFunction,\r\n ({ done, ticks, a, b, obj, context, scope }) => {\r\n if (typeof obj[2] === 'string' || obj[2] instanceof CodeString) {\r\n if (context.allowJit && context.evalContext) {\r\n obj[2] = b = context.evalContext.lispifyFunction(new CodeString(obj[2]), context.constants);\r\n } else {\r\n throw new SandboxCapabilityError('Unevaluated code detected, JIT not allowed');\r\n }\r\n }\r\n const isAsync = a.shift();\r\n const name = a.shift() as string;\r\n if (name) {\r\n scope = new Scope(scope, {});\r\n }\r\n let func;\r\n if (isAsync === LispType.True) {\r\n func = createFunctionAsync(a as string[], b, ticks, context, scope, name);\r\n } else {\r\n func = createFunction(a as string[], b, ticks, context, scope, name);\r\n }\r\n if (name) {\r\n scope.declare(name, VarType.let, func);\r\n }\r\n done(undefined, func);\r\n },\r\n);\r\n\r\naddOps<Lisp[], Lisp[]>(LispType.Loop, ({ exec, done, ticks, a, b, context, scope }) => {\r\n const [checkFirst, startInternal, getIterator, startStep, step, condition, beforeStep] = a;\r\n let loop = true;\r\n const loopScope = new Scope(scope, {});\r\n const internalVars = {\r\n $$obj: undefined,\r\n };\r\n const interalScope = new Scope(loopScope, internalVars);\r\n if (exec === execAsync) {\r\n (async () => {\r\n let ad: AsyncDoneRet;\r\n ad = asyncDone((d) => exec(ticks, startStep, loopScope, context, d));\r\n internalVars['$$obj'] =\r\n (ad = asyncDone((d) => exec(ticks, getIterator, loopScope, context, d))).isInstant === true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n ad = asyncDone((d) => exec(ticks, startInternal, interalScope, context, d));\r\n if (checkFirst)\r\n loop =\r\n (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant ===\r\n true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n while (loop) {\r\n const innerLoopVars = {};\r\n ad = asyncDone((d) =>\r\n exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d),\r\n );\r\n ad.isInstant === true ? ad.instant : (await ad.p).result;\r\n const res = await executeTreeAsync(\r\n ticks,\r\n context,\r\n b,\r\n [new Scope(loopScope, innerLoopVars)],\r\n 'loop',\r\n );\r\n if (res instanceof ExecReturn && res.returned) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (res instanceof ExecReturn && res.breakLoop) {\r\n break;\r\n }\r\n ad = asyncDone((d) => exec(ticks, step, interalScope, context, d));\r\n loop =\r\n (ad = asyncDone((d) => exec(ticks, condition, interalScope, context, d))).isInstant ===\r\n true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n }\r\n done();\r\n })().catch(done);\r\n } else {\r\n syncDone((d) => exec(ticks, startStep, loopScope, context, d));\r\n internalVars['$$obj'] = syncDone((d) => exec(ticks, getIterator, loopScope, context, d)).result;\r\n syncDone((d) => exec(ticks, startInternal, interalScope, context, d));\r\n if (checkFirst) loop = syncDone((d) => exec(ticks, condition, interalScope, context, d)).result;\r\n while (loop) {\r\n const innerLoopVars = {};\r\n syncDone((d) => exec(ticks, beforeStep, new Scope(interalScope, innerLoopVars), context, d));\r\n const res = executeTree(ticks, context, b, [new Scope(loopScope, innerLoopVars)], 'loop');\r\n if (res instanceof ExecReturn && res.returned) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (res instanceof ExecReturn && res.breakLoop) {\r\n break;\r\n }\r\n syncDone((d) => exec(ticks, step, interalScope, context, d));\r\n loop = syncDone((d) => exec(ticks, condition, interalScope, context, d)).result;\r\n }\r\n done();\r\n }\r\n});\r\n\r\naddOps<LispItem, LispItem>(LispType.LoopAction, ({ done, a, context, inLoopOrSwitch }) => {\r\n if ((inLoopOrSwitch === 'switch' && a === 'continue') || !inLoopOrSwitch) {\r\n throw new TypeError('Illegal ' + a + ' statement');\r\n }\r\n done(\r\n undefined,\r\n new ExecReturn(context.ctx.auditReport, undefined, false, a === 'break', a === 'continue'),\r\n );\r\n});\r\n\r\naddOps<LispItem, If>(LispType.If, ({ exec, done, ticks, a, b, context, scope, inLoopOrSwitch }) => {\r\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done, inLoopOrSwitch);\r\n});\r\n\r\naddOps<LispItem, If>(LispType.InlineIf, ({ exec, done, ticks, a, b, context, scope }) => {\r\n exec(ticks, valueOrProp(a, context) ? b.t : b.f, scope, context, done, undefined);\r\n});\r\n\r\naddOps<Lisp, Lisp>(LispType.InlineIfCase, ({ done, a, b }) => done(undefined, new If(a, b)));\r\naddOps<Lisp, Lisp>(LispType.IfCase, ({ done, a, b }) => done(undefined, new If(a, b)));\r\n\r\naddOps<LispItem, SwitchCase[]>(LispType.Switch, ({ exec, done, ticks, a, b, context, scope }) => {\r\n exec(ticks, a, scope, context, (...args: unknown[]) => {\r\n if (args.length === 1) {\r\n done(args[0]);\r\n return;\r\n }\r\n let toTest = args[1];\r\n toTest = valueOrProp(toTest, context);\r\n if (exec === execSync) {\r\n let res: ExecReturn<unknown>;\r\n let isTrue = false;\r\n for (const caseItem of b) {\r\n if (\r\n isTrue ||\r\n (isTrue =\r\n !caseItem[1] ||\r\n toTest ===\r\n valueOrProp(\r\n syncDone((d) => exec(ticks, caseItem[1], scope, context, d)).result,\r\n context,\r\n ))\r\n ) {\r\n if (!caseItem[2]) continue;\r\n res = executeTree(ticks, context, caseItem[2], [scope], 'switch');\r\n if (res.breakLoop) break;\r\n if (res.returned) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (!caseItem[1]) {\r\n // default case\r\n break;\r\n }\r\n }\r\n }\r\n done();\r\n } else {\r\n (async () => {\r\n let res: ExecReturn<unknown>;\r\n let isTrue = false;\r\n for (const caseItem of b) {\r\n let ad: AsyncDoneRet;\r\n if (\r\n isTrue ||\r\n (isTrue =\r\n !caseItem[1] ||\r\n toTest ===\r\n valueOrProp(\r\n (ad = asyncDone((d) => exec(ticks, caseItem[1], scope, context, d))).isInstant ===\r\n true\r\n ? ad.instant\r\n : (await ad.p).result,\r\n context,\r\n ))\r\n ) {\r\n if (!caseItem[2]) continue;\r\n res = await executeTreeAsync(ticks, context, caseItem[2], [scope], 'switch');\r\n if (res.breakLoop) break;\r\n if (res.returned) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (!caseItem[1]) {\r\n // default case\r\n break;\r\n }\r\n }\r\n }\r\n done();\r\n })().catch(done);\r\n }\r\n });\r\n});\r\n\r\naddOps<Lisp[], [string, Lisp[], Lisp[]]>(\r\n LispType.Try,\r\n ({ exec, done, ticks, a, b, context, scope, inLoopOrSwitch }) => {\r\n const [exception, catchBody, finallyBody] = b;\r\n\r\n // Execute try block\r\n executeTreeWithDone(\r\n exec,\r\n (...tryArgs: unknown[]) => {\r\n const tryHadError = tryArgs.length === 1;\r\n const tryError = tryHadError ? tryArgs[0] : undefined;\r\n const tryResult = !tryHadError && tryArgs.length > 1 ? tryArgs[1] : undefined;\r\n\r\n // Handler to execute finally and complete\r\n const executeFinallyAndComplete = (hadError: boolean, errorOrResult: unknown) => {\r\n if (finallyBody && finallyBody.length > 0) {\r\n // Execute finally block\r\n executeTreeWithDone(\r\n exec,\r\n (...finallyArgs: unknown[]) => {\r\n const finallyHadError = finallyArgs.length === 1;\r\n const finallyResult =\r\n !finallyHadError && finallyArgs.length > 1 ? finallyArgs[1] : undefined;\r\n\r\n // If finally throws an error, it overrides everything\r\n if (finallyHadError) {\r\n done(finallyArgs[0]);\r\n return;\r\n }\r\n\r\n // If finally has a control flow statement (return/break/continue), it overrides everything\r\n if (\r\n finallyResult instanceof ExecReturn &&\r\n (finallyResult.returned || finallyResult.breakLoop || finallyResult.continueLoop)\r\n ) {\r\n done(undefined, finallyResult);\r\n return;\r\n }\r\n\r\n // Otherwise, return the original try/catch result/error\r\n if (hadError) {\r\n done(errorOrResult);\r\n } else if (errorOrResult instanceof ExecReturn) {\r\n // If try/catch returned or has some other control flow, pass that through\r\n if (\r\n errorOrResult.returned ||\r\n errorOrResult.breakLoop ||\r\n errorOrResult.continueLoop\r\n ) {\r\n done(undefined, errorOrResult);\r\n } else {\r\n // Normal completion - don't return a value\r\n done();\r\n }\r\n } else {\r\n // Try/catch completed normally, just signal completion with no return value\r\n done();\r\n }\r\n },\r\n ticks,\r\n context,\r\n finallyBody,\r\n [new Scope(scope, {})],\r\n inLoopOrSwitch,\r\n );\r\n } else {\r\n // No finally block, just return result/error\r\n if (hadError) {\r\n done(errorOrResult);\r\n } else if (errorOrResult instanceof ExecReturn) {\r\n // If try/catch returned or has some other control flow, pass that through\r\n if (errorOrResult.returned || errorOrResult.breakLoop || errorOrResult.continueLoop) {\r\n done(undefined, errorOrResult);\r\n } else {\r\n // Normal completion - don't return a value\r\n done();\r\n }\r\n } else {\r\n done();\r\n }\r\n }\r\n };\r\n\r\n // If try had an error and there's a catch block, execute catch\r\n if (tryHadError && catchBody && catchBody.length > 0) {\r\n const sc: Record<string, unknown> = {};\r\n if (exception) sc[exception] = tryError;\r\n\r\n executeTreeWithDone(\r\n exec,\r\n (...catchArgs: unknown[]) => {\r\n const catchHadError = catchArgs.length === 1;\r\n const catchErrorOrResult = catchHadError\r\n ? catchArgs[0]\r\n : catchArgs.length > 1\r\n ? catchArgs[1]\r\n : undefined;\r\n\r\n // Execute finally with catch result\r\n executeFinallyAndComplete(catchHadError, catchErrorOrResult);\r\n },\r\n ticks,\r\n context,\r\n catchBody,\r\n [new Scope(scope, sc)],\r\n inLoopOrSwitch,\r\n );\r\n } else {\r\n // No catch or no error, execute finally with try result\r\n executeFinallyAndComplete(tryHadError, tryHadError ? tryError : tryResult);\r\n }\r\n },\r\n ticks,\r\n context,\r\n a,\r\n [new Scope(scope)],\r\n inLoopOrSwitch,\r\n );\r\n },\r\n);\r\n\r\naddOps(LispType.Void, ({ done }) => {\r\n done();\r\n});\r\naddOps<new (...args: unknown[]) => unknown, unknown[]>(LispType.New, ({ done, a, b, context }) => {\r\n if (!context.ctx.globalsWhitelist.has(a) && !context.ctx.sandboxedFunctions.has(a)) {\r\n throw new SandboxAccessError(`Object construction not allowed: ${a.constructor.name}`);\r\n }\r\n done(undefined, new a(...b));\r\n});\r\n\r\naddOps(LispType.Throw, ({ done, b }) => {\r\n done(b);\r\n});\r\naddOps<unknown[]>(LispType.Expression, ({ done, a }) => done(undefined, a.pop()));\r\naddOps(LispType.None, ({ done }) => done());\r\n\r\nfunction valueOrProp(a: unknown, context: IExecContext): unknown {\r\n if (a instanceof Prop) return a.get(context);\r\n if (a === optional) return undefined;\r\n return a;\r\n}\r\n\r\nexport function execMany(\r\n ticks: Ticks,\r\n exec: Execution,\r\n tree: Lisp[],\r\n done: Done,\r\n scope: Scope,\r\n context: IExecContext,\r\n inLoopOrSwitch?: string,\r\n) {\r\n if (exec === execSync) {\r\n _execManySync(ticks, tree, done, scope, context, inLoopOrSwitch);\r\n } else {\r\n _execManyAsync(ticks, tree, done, scope, context, inLoopOrSwitch).catch(done);\r\n }\r\n}\r\n\r\nfunction _execManySync(\r\n ticks: Ticks,\r\n tree: Lisp[],\r\n done: Done,\r\n scope: Scope,\r\n context: IExecContext,\r\n inLoopOrSwitch?: string,\r\n) {\r\n const ret: any[] = [];\r\n for (let i = 0; i < tree.length; i++) {\r\n let res = syncDone((d) => execSync(ticks, tree[i], scope, context, d, inLoopOrSwitch)).result;\r\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (isLisp(tree[i]) && tree[i][0] === LispType.Return) {\r\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\r\n return;\r\n }\r\n ret.push(res);\r\n }\r\n done(undefined, ret);\r\n}\r\n\r\nasync function _execManyAsync(\r\n ticks: Ticks,\r\n tree: Lisp[],\r\n done: Done,\r\n scope: Scope,\r\n context: IExecContext,\r\n inLoopOrSwitch?: string,\r\n) {\r\n const ret: any[] = [];\r\n for (let i = 0; i < tree.length; i++) {\r\n let res;\r\n try {\r\n let ad: AsyncDoneRet;\r\n res =\r\n (ad = asyncDone((d) => execAsync(ticks, tree[i], scope, context, d, inLoopOrSwitch)))\r\n .isInstant === true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n } catch (e) {\r\n done(e);\r\n return;\r\n }\r\n if (res instanceof ExecReturn && (res.returned || res.breakLoop || res.continueLoop)) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (isLisp(tree[i]) && tree[i][0] === LispType.Return) {\r\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\r\n return;\r\n }\r\n ret.push(res);\r\n }\r\n done(undefined, ret);\r\n}\r\n\r\ntype Execution = <T = any>(\r\n ticks: Ticks,\r\n tree: LispItem,\r\n scope: Scope,\r\n context: IExecContext,\r\n done: Done<T>,\r\n inLoopOrSwitch?: string,\r\n) => void;\r\n\r\nexport interface AsyncDoneRet {\r\n isInstant: boolean;\r\n instant: any;\r\n p: Promise<{ result: any }>;\r\n}\r\n\r\nexport function asyncDone(callback: (done: Done) => void): AsyncDoneRet {\r\n let isInstant = false;\r\n let instant: unknown;\r\n const p = new Promise<any>((resolve, reject) => {\r\n callback((...args: unknown[]) => {\r\n if (args.length === 1) reject(args[0]);\r\n else {\r\n isInstant = true;\r\n instant = args[1];\r\n resolve({ result: args[1] });\r\n }\r\n });\r\n });\r\n return {\r\n isInstant,\r\n instant,\r\n p,\r\n };\r\n}\r\n\r\nexport function syncDone(callback: (done: Done) => void): { result: any } {\r\n let result;\r\n let err: { error: unknown } | undefined;\r\n callback((...args: unknown[]) => {\r\n err = args.length === 1 ? { error: args[0] } : undefined;\r\n result = args[1];\r\n });\r\n if (err) throw err.error;\r\n return { result };\r\n}\r\n\r\nexport async function execAsync<T = any>(\r\n ticks: Ticks,\r\n tree: LispItem,\r\n scope: Scope,\r\n context: IExecContext,\r\n doneOriginal: Done<T>,\r\n inLoopOrSwitch?: string,\r\n): Promise<void> {\r\n let done: Done<T> = doneOriginal;\r\n const p = new Promise<void>((resolve) => {\r\n done = (...args: unknown[]) => {\r\n doneOriginal(...args);\r\n resolve();\r\n };\r\n });\r\n if (!_execNoneRecurse(ticks, tree, scope, context, done, true, inLoopOrSwitch) && isLisp(tree)) {\r\n let op = tree[0];\r\n let obj;\r\n try {\r\n let ad: AsyncDoneRet;\r\n obj =\r\n (ad = asyncDone((d) => execAsync(ticks, tree[1], scope, context, d, inLoopOrSwitch)))\r\n .isInstant === true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n } catch (e) {\r\n done(e);\r\n return;\r\n }\r\n let a = obj;\r\n try {\r\n a = obj instanceof Prop ? obj.get(context) : obj;\r\n } catch (e) {\r\n done(e);\r\n return;\r\n }\r\n if (op === LispType.PropOptional || op === LispType.CallOptional) {\r\n if (a === undefined || a === null) {\r\n done(undefined, optional);\r\n return;\r\n }\r\n op = op === LispType.PropOptional ? LispType.Prop : LispType.Call;\r\n }\r\n if (a === optional) {\r\n if (op === LispType.Prop || op === LispType.Call) {\r\n done(undefined, a);\r\n return;\r\n } else {\r\n a = undefined;\r\n }\r\n }\r\n // Short-circuit for nullish coalescing: if a is not null/undefined, return a without evaluating b\r\n if (op === LispType.NullishCoalescing && a !== undefined && a !== null) {\r\n done(undefined, a);\r\n return;\r\n }\r\n let bobj;\r\n try {\r\n let ad: AsyncDoneRet;\r\n bobj =\r\n (ad = asyncDone((d) => execAsync(ticks, tree[2], scope, context, d, inLoopOrSwitch)))\r\n .isInstant === true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n } catch (e) {\r\n done(e);\r\n return;\r\n }\r\n let b = bobj;\r\n try {\r\n b = bobj instanceof Prop ? bobj.get(context) : bobj;\r\n } catch (e) {\r\n done(e);\r\n return;\r\n }\r\n if (b === optional) {\r\n b = undefined;\r\n }\r\n performOp({\r\n op,\r\n exec: execAsync,\r\n done,\r\n ticks,\r\n a,\r\n b,\r\n obj,\r\n context,\r\n scope,\r\n bobj,\r\n inLoopOrSwitch,\r\n tree,\r\n });\r\n }\r\n await p;\r\n}\r\n\r\nexport function execSync<T = any>(\r\n ticks: Ticks,\r\n tree: LispItem,\r\n scope: Scope,\r\n context: IExecContext,\r\n done: Done<T>,\r\n inLoopOrSwitch?: string,\r\n) {\r\n if (!_execNoneRecurse(ticks, tree, scope, context, done, false, inLoopOrSwitch) && isLisp(tree)) {\r\n let op = tree[0];\r\n let obj = syncDone((d) => execSync(ticks, tree[1], scope, context, d, inLoopOrSwitch)).result;\r\n let a = obj instanceof Prop ? obj.get(context) : obj;\r\n if (op === LispType.PropOptional || op === LispType.CallOptional) {\r\n if (a === undefined || a === null) {\r\n done(undefined, optional);\r\n return;\r\n }\r\n op = op === LispType.PropOptional ? LispType.Prop : LispType.Call;\r\n }\r\n if (a === optional) {\r\n if (op === LispType.Prop || op === LispType.Call) {\r\n done(undefined, a);\r\n return;\r\n } else {\r\n a = undefined;\r\n }\r\n }\r\n // Short-circuit for nullish coalescing: if a is not null/undefined, return a without evaluating b\r\n if (op === LispType.NullishCoalescing && a !== undefined && a !== null) {\r\n done(undefined, a);\r\n return;\r\n }\r\n let bobj = syncDone((d) => execSync(ticks, tree[2], scope, context, d, inLoopOrSwitch)).result;\r\n let b = bobj instanceof Prop ? bobj.get(context) : bobj;\r\n if (b === optional) {\r\n b = undefined;\r\n }\r\n performOp({\r\n op,\r\n exec: execSync,\r\n done,\r\n ticks,\r\n a,\r\n b,\r\n obj,\r\n context,\r\n scope,\r\n bobj,\r\n inLoopOrSwitch,\r\n tree,\r\n });\r\n }\r\n}\r\n\r\ntype OpsCallbackParams<a, b, obj, bobj> = {\r\n op: LispType;\r\n exec: Execution;\r\n a: a;\r\n b: b;\r\n obj: obj;\r\n bobj: bobj;\r\n ticks: Ticks;\r\n tree: LispItem;\r\n scope: Scope;\r\n context: IExecContext;\r\n done: Done;\r\n inLoopOrSwitch?: string;\r\n};\r\n\r\nfunction checkHaltExpectedTicks(\r\n params: OpsCallbackParams<any, any, any, any>,\r\n expectTicks = 0,\r\n): boolean {\r\n const sandbox = params.context.ctx.sandbox;\r\n const options = params.context.ctx.options;\r\n const { ticks, scope, context, done, op } = params;\r\n if (sandbox.halted) {\r\n const sub = sandbox.subscribeResume(() => {\r\n sub.unsubscribe();\r\n try {\r\n const o = ops.get(op);\r\n if (!o) {\r\n done(new SyntaxError('Unknown operator: ' + op));\r\n return;\r\n }\r\n o(params);\r\n } catch (err) {\r\n if (options.haltOnSandboxError && err instanceof SandboxError) {\r\n const sub = sandbox.subscribeResume(() => {\r\n sub.unsubscribe();\r\n done(err);\r\n });\r\n sandbox.haltExecution({\r\n error: err as Error,\r\n ticks,\r\n scope,\r\n context,\r\n });\r\n } else {\r\n done(err);\r\n }\r\n }\r\n });\r\n return true;\r\n } else if (ticks.tickLimit && ticks.tickLimit <= ticks.ticks + BigInt(expectTicks)) {\r\n const sub = sandbox.subscribeResume(() => {\r\n sub.unsubscribe();\r\n try {\r\n const o = ops.get(op);\r\n if (!o) {\r\n done(new SyntaxError('Unknown operator: ' + op));\r\n return;\r\n }\r\n o(params);\r\n } catch (err) {\r\n if (context.ctx.options.haltOnSandboxError && err instanceof SandboxError) {\r\n const sub = sandbox.subscribeResume(() => {\r\n sub.unsubscribe();\r\n done(err);\r\n });\r\n sandbox.haltExecution({\r\n error: err as Error,\r\n ticks,\r\n scope,\r\n context,\r\n });\r\n } else {\r\n done(err);\r\n }\r\n }\r\n });\r\n const error = new SandboxExecutionQuotaExceededError('Execution quota exceeded');\r\n sandbox.haltExecution({\r\n error,\r\n ticks,\r\n scope: scope,\r\n context,\r\n });\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction performOp(params: OpsCallbackParams<any, any, any, any>) {\r\n const { done, op, ticks, context, scope } = params;\r\n ticks.ticks++;\r\n const sandbox = context.ctx.sandbox;\r\n\r\n if (checkHaltExpectedTicks(params)) {\r\n return;\r\n }\r\n\r\n try {\r\n const o = ops.get(op);\r\n if (!o) {\r\n done(new SandboxExecutionTreeError('Unknown operator: ' + op));\r\n return;\r\n }\r\n o(params);\r\n } catch (err) {\r\n if (context.ctx.options.haltOnSandboxError && err instanceof SandboxError) {\r\n const sub = sandbox.subscribeResume(() => {\r\n sub.unsubscribe();\r\n done(err);\r\n });\r\n sandbox.haltExecution({\r\n error: err as Error,\r\n ticks,\r\n scope,\r\n context,\r\n });\r\n } else {\r\n done(err);\r\n }\r\n }\r\n}\r\n\r\nconst unexecTypes = new Set([\r\n LispType.ArrowFunction,\r\n LispType.Function,\r\n LispType.InlineFunction,\r\n LispType.Loop,\r\n LispType.Try,\r\n LispType.Switch,\r\n LispType.IfCase,\r\n LispType.InlineIfCase,\r\n LispType.Typeof,\r\n]);\r\n\r\nfunction _execNoneRecurse<T = any>(\r\n ticks: Ticks,\r\n tree: LispItem,\r\n scope: Scope,\r\n context: IExecContext,\r\n done: Done<T>,\r\n isAsync: boolean,\r\n inLoopOrSwitch?: string,\r\n): boolean {\r\n const exec = isAsync ? execAsync : execSync;\r\n if (tree instanceof Prop) {\r\n done(undefined, tree.get(context));\r\n } else if (tree === optional) {\r\n done();\r\n } else if (Array.isArray(tree) && !isLisp(tree)) {\r\n if (tree[0] === LispType.None) {\r\n done();\r\n } else {\r\n execMany(ticks, exec, tree as Lisp[], done, scope, context, inLoopOrSwitch);\r\n }\r\n } else if (!isLisp(tree)) {\r\n done(undefined, tree);\r\n } else if (tree[0] === LispType.Block) {\r\n execMany(ticks, exec, tree[1] as Lisp[], done, scope, context, inLoopOrSwitch);\r\n } else if (tree[0] === LispType.Await) {\r\n if (!isAsync) {\r\n done(new SyntaxError(\"Illegal use of 'await', must be inside async function\"));\r\n } else if (context.ctx.prototypeWhitelist?.has(Promise.prototype)) {\r\n execAsync(\r\n ticks,\r\n tree[1],\r\n scope,\r\n context,\r\n async (...args: unknown[]) => {\r\n if (args.length === 1) done(args[0]);\r\n else\r\n try {\r\n done(undefined, (await valueOrProp(args[1], context)) as any);\r\n } catch (err) {\r\n done(err);\r\n }\r\n },\r\n inLoopOrSwitch,\r\n ).catch(done);\r\n } else {\r\n done(new SandboxCapabilityError('Async/await is not permitted'));\r\n }\r\n } else if (unexecTypes.has(tree[0])) {\r\n performOp({\r\n op: tree[0],\r\n exec,\r\n done,\r\n ticks,\r\n a: tree[1],\r\n b: tree[2],\r\n obj: tree,\r\n tree,\r\n context,\r\n scope,\r\n bobj: undefined,\r\n inLoopOrSwitch,\r\n });\r\n } else {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport function executeTree<T>(\r\n ticks: Ticks,\r\n context: IExecContext,\r\n executionTree: Lisp[],\r\n scopes: IScope[] = [],\r\n inLoopOrSwitch?: string,\r\n): ExecReturn<T> {\r\n return syncDone((done) =>\r\n executeTreeWithDone(execSync, done, ticks, context, executionTree, scopes, inLoopOrSwitch),\r\n ).result;\r\n}\r\n\r\nexport async function executeTreeAsync<T>(\r\n ticks: Ticks,\r\n context: IExecContext,\r\n executionTree: Lisp[],\r\n scopes: IScope[] = [],\r\n inLoopOrSwitch?: string,\r\n): Promise<ExecReturn<T>> {\r\n let ad: AsyncDoneRet;\r\n return (ad = asyncDone((done) =>\r\n executeTreeWithDone(execAsync, done, ticks, context, executionTree, scopes, inLoopOrSwitch),\r\n )).isInstant === true\r\n ? ad.instant\r\n : (await ad.p).result;\r\n}\r\n\r\nfunction executeTreeWithDone(\r\n exec: Execution,\r\n done: Done,\r\n ticks: Ticks,\r\n context: IExecContext,\r\n executionTree: Lisp[],\r\n scopes: IScope[] = [],\r\n inLoopOrSwitch?: string,\r\n) {\r\n if (!executionTree) {\r\n done();\r\n return;\r\n }\r\n if (!(executionTree instanceof Array)) {\r\n throw new SyntaxError('Bad execution tree');\r\n }\r\n let scope = context.ctx.globalScope;\r\n let s;\r\n while ((s = scopes.shift())) {\r\n if (typeof s !== 'object') continue;\r\n if (s instanceof Scope) {\r\n scope = s;\r\n } else {\r\n scope = new Scope(scope, s, s instanceof LocalScope ? undefined : null);\r\n }\r\n }\r\n if (context.ctx.options.audit && !context.ctx.auditReport) {\r\n context.ctx.auditReport = {\r\n globalsAccess: new Set(),\r\n prototypeAccess: {},\r\n };\r\n }\r\n if (exec === execSync) {\r\n _executeWithDoneSync(done, ticks, context, executionTree, scope, inLoopOrSwitch);\r\n } else {\r\n _executeWithDoneAsync(done, ticks, context, executionTree, scope, inLoopOrSwitch).catch(done);\r\n }\r\n}\r\n\r\nfunction _executeWithDoneSync(\r\n done: Done,\r\n ticks: Ticks,\r\n context: IExecContext,\r\n executionTree: Lisp[],\r\n scope: Scope,\r\n inLoopOrSwitch?: string,\r\n) {\r\n if (!(executionTree instanceof Array)) throw new SyntaxError('Bad execution tree');\r\n let i = 0;\r\n for (i = 0; i < executionTree.length; i++) {\r\n let res: unknown;\r\n let err: { error: unknown } | undefined;\r\n const current = executionTree[i];\r\n try {\r\n execSync(\r\n ticks,\r\n current,\r\n scope,\r\n context,\r\n (...args: unknown[]) => {\r\n if (args.length === 1) err = { error: args[0] };\r\n else res = args[1];\r\n },\r\n inLoopOrSwitch,\r\n );\r\n } catch (e) {\r\n err = { error: e };\r\n }\r\n if (err) {\r\n done(err.error);\r\n return;\r\n }\r\n if (res instanceof ExecReturn) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (isLisp(current) && current[0] === LispType.Return) {\r\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\r\n return;\r\n }\r\n }\r\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\r\n}\r\n\r\nasync function _executeWithDoneAsync(\r\n done: Done,\r\n ticks: Ticks,\r\n context: IExecContext,\r\n executionTree: Lisp[],\r\n scope: Scope,\r\n inLoopOrSwitch?: string,\r\n) {\r\n if (!(executionTree instanceof Array)) throw new SyntaxError('Bad execution tree');\r\n let i = 0;\r\n for (i = 0; i < executionTree.length; i++) {\r\n let res: unknown;\r\n let err: { error: unknown } | undefined;\r\n const current = executionTree[i];\r\n try {\r\n await execAsync(\r\n ticks,\r\n current,\r\n scope,\r\n context,\r\n (...args: unknown[]) => {\r\n if (args.length === 1) err = { error: args[0] };\r\n else res = args[1];\r\n },\r\n inLoopOrSwitch,\r\n );\r\n } catch (e) {\r\n err = { error: e };\r\n }\r\n if (err) {\r\n done(err.error);\r\n return;\r\n }\r\n if (res instanceof ExecReturn) {\r\n done(undefined, res);\r\n return;\r\n }\r\n if (isLisp(current) && current[0] === LispType.Return) {\r\n done(undefined, new ExecReturn(context.ctx.auditReport, res, true));\r\n return;\r\n }\r\n }\r\n done(undefined, new ExecReturn(context.ctx.auditReport, undefined, false));\r\n}\r\n"],"names":[],"mappings":";;MAuBa,UAAU,CAAA;IACrB,WAAA,CACS,WAAqC,EACrC,MAAS,EACT,QAAiB,EACjB,SAAA,GAAY,KAAK,EACjB,YAAA,GAAe,KAAK,EAAA;QAJpB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,YAAY,GAAZ,YAAY;IAClB;AACJ;AA+ED,MAAM,QAAQ,GAAG,EAAE;AAEnB,SAAS,YAAY,CAAC,QAAkB,EAAE,IAAe,EAAA;IACvD,MAAM,IAAI,GAA4B,EAAE;IACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC1B,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC;aAAO;YACL,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACrB;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,cAAc,CAC5B,QAAkB,EAClB,MAAc,EACd,KAAY,EACZ,OAAqB,EACrB,KAAa,EACb,IAAa,EAAA;IAEb,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE;AAC9C,QAAA,MAAM,IAAI,sBAAsB,CAAC,gCAAgC,CAAC;IACpE;AACA,IAAA,IAAI,IAAI;AACR,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,IAAI,GAAG,CAAC,GAAG,IAAe,KAAI;YAC5B,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,WAAW,CACrB,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CACpD;YACD,OAAO,GAAG,CAAC,MAAM;AACnB,QAAA,CAAC;IACH;SAAO;AACL,QAAA,IAAI,GAAG,SAAS,eAAe,CAAgB,GAAG,IAAe,EAAA;YAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,WAAW,CACrB,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAC1D;YACD,OAAO,GAAG,CAAC,MAAM;AACnB,QAAA,CAAC;IACH;AACA,IAAA,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,mBAAmB,CACjC,QAAkB,EAClB,MAAc,EACd,KAAY,EACZ,OAAqB,EACrB,KAAa,EACb,IAAa,EAAA;IAEb,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE;AAC9C,QAAA,MAAM,IAAI,sBAAsB,CAAC,gCAAgC,CAAC;IACpE;AACA,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC3D,QAAA,MAAM,IAAI,sBAAsB,CAAC,2BAA2B,CAAC;IAC/D;AACA,IAAA,IAAI,IAAI;AACR,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,QAAA,IAAI,GAAG,OAAO,GAAG,IAAe,KAAI;YAClC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAChC,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CACpD;YACD,OAAO,GAAG,CAAC,MAAM;AACnB,QAAA,CAAC;IACH;SAAO;AACL,QAAA,IAAI,GAAG,eAAe,eAAe,CAAgB,GAAG,IAAe,EAAA;YACrE,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAChC,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAC1D;YACD,OAAO,GAAG,CAAC,MAAM;AACnB,QAAA,CAAC;IACH;AACA,IAAA,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,WAAW,CAAC,GAAS,EAAE,OAAqB,EAAE,EAAE,GAAG,QAAQ,EAAA;AACzE,IAAA,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;AAC7B,QAAA,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,CAAA,oBAAA,CAAsB,CAAC;IAC9D;AACA,IAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACf,QAAA,MAAM,IAAI,SAAS,CAAC,CAAA,gCAAA,CAAkC,CAAC;IACzD;AACA,IAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,QAAA,MAAM,IAAI,kBAAkB,CAC1B,CAAA,OAAA,EAAU,EAAE,CAAA,WAAA,EAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA,oBAAA,CAAsB,CACpE;IACH;AACA,IAAA,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE;AACxB,QAAA,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC;IACtD;IACA,IACE,OAAQ,GAAG,CAAC,OAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU;QACpD,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EACtC;AACA,QAAA,MAAM,IAAI,kBAAkB,CAC1B,CAAA,6BAAA,EAAgC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA,aAAA,CAAe,CACnE;IACH;AACA,IAAA,IAAI,EAAE,KAAK,QAAQ,EAAE;QACnB,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,OAAO,CAAC;AACL,iBAAA,GAAG,CAAC,GAAG,CAAC,OAAO;kBACd,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtE,YAAA,OAAO,CAAC;AACL,iBAAA,GAAG,CAAC,GAAG,CAAC,OAAO;kBACd,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxE;IACF;SAAO,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;AAChD,QAAA,OAAO,CAAC;AACL,aAAA,GAAG,CAAC,GAAG,CAAC,OAAO;cACd,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;cACvB,OAAO,CAAC,CAAC,EAAE,KACX,EAAE,CAAC;AACD,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC,CACH;AACH,QAAA,OAAO,CAAC;AACL,aAAA,GAAG,CAAC,GAAG,CAAC,OAAO;cACd,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;cACvB,OAAO,CAAC,CAAC,EAAE,KACX,EAAE,CAAC;AACD,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC,CACH;IACL;SAAO;AACL,QAAA,OAAO,CAAC;AACL,aAAA,GAAG,CAAC,GAAG,CAAC,OAAO;cACd,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtE,QAAA,OAAO,CAAC;AACL,aAAA,GAAG,CAAC,GAAG,CAAC,OAAO;cACd,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxE;AACF;AACA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;AAC1B,IAAA,EAAE,CAAC,IAAI;AACP,IAAA,EAAE,CAAC,GAAG;AACN,IAAA,EAAE,CAAC,KAAK;AACR,IAAA,EAAE,CAAC,OAAO;AACV,IAAA,EAAE,CAAC,MAAM;AACT,IAAA,EAAE,CAAC,OAAO;AACV,IAAA,EAAE,CAAC,IAAI;AACP,IAAA,EAAE,CAAC,UAAU;AACd,CAAA,CAAC;MAEW,MAAM,CAAA;IACjB,WAAA,CACS,GAA0B,EAC1B,GAAY,EAAA;QADZ,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,GAAG,GAAH,GAAG;IACT;AACJ;MAEY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAmB,IAAgC,EAAA;QAAhC,IAAA,CAAA,IAAI,GAAJ,IAAI;IAA+B;AACvD;MAEY,WAAW,CAAA;AACtB,IAAA,WAAA,CAAmB,IAAe,EAAA;QAAf,IAAA,CAAA,IAAI,GAAJ,IAAI;IAAc;AACtC;MAEY,EAAE,CAAA;IACb,WAAA,CACS,CAAO,EACP,CAAO,EAAA;QADP,IAAA,CAAA,CAAC,GAAD,CAAC;QACD,IAAA,CAAA,CAAC,GAAD,CAAC;IACP;AACJ;AAED,MAAM,YAAY,GAAG,wBAAwB;AAGtC,MAAM,GAAG,GAAG,IAAI,GAAG;AACpB,SAAU,MAAM,CACpB,IAAc,EACd,EAA+B,EAAA;AAE/B,IAAA,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACnB;AAEA,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAEtD,SAAS,aAAa,CAAC,GAAY,EAAA;AACjC,IAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC;AAC7C;AAEA,SAAS,qBAAqB,CAAC,GAAY,EAAA;AACzC,IAAA,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;AAC1C;AAEA,MAAM,wBAAsC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AAClF,IAAA,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,IAAI,SAAS,CAAC,CAAA,yCAAA,EAA4C,CAAC,EAAE,QAAQ,EAAE,CAAA,EAAA,CAAI,CAAC;IACpF;AAEA,IAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AACrB,QAAA,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,CAAE;IACZ;AAEA,IAAA,IAAI,CAAC,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;;QAEjE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;YAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C;QACF;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,OAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;AACvE,QAAA,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI;AAEnD,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAClB;IACF;AAAO,SAAA,IAAI,CAAC,KAAK,SAAS,EAAE;QAC1B,MAAM,IAAI,SAAS,CAAC,CAAA,8CAAA,EAAiD,CAAC,CAAC,QAAQ,EAAE,CAAA,EAAA,CAAI,CAAC;IACxF;AAEA,IAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;QAC7B,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACvC;IACF;AAEA,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,eAAe,EAAE;QAChD,IAAI,IAAI,GAAO,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;AACvC,QAAA,GAAG;AACD,YAAA,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;AAC3B,gBAAA,IACE,OAAO,CAAC,GAAG,CAAC,WAAW;AACvB,oBAAA,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAC/D;AACA,oBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;gBAC5E;AACA,gBAAA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxE;QACF,CAAC,SAAS,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;IAC9C;IAEA,IAAI,eAAe,EAAE;AACnB,QAAA,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;AAC3B,YAAA,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACxB,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9C;gBACF;AACA,gBAAA,IACE,EAAE,SAAS,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EACtC;AACA,oBAAA,MAAM,IAAI,kBAAkB,CAC1B,CAAA,gDAAA,EAAmD,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAE,CAC5E;gBACH;YACF;QACF;;AAGA,QAAA,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACxB,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAa,CAAC;YAC5E,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD;YACF;YACA,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAa,CAAC,EAAE;AACrD,gBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC7C;YACF;;AAEA,YAAA,IAAI,QAAQ,GAAe,CAAc,CAAC,SAAS;AACnD,YAAA,OAAO,QAAQ,KAAK,IAAI,EAAE;AACxB,gBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAoB,CAAC;AAC1E,gBAAA,IAAI,SAAS,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;AACtD,oBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC7C;gBACF;AACA,gBAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC5C;AACA,YAAA,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;;AAE3B,gBAAA,MAAM,IAAI,kBAAkB,CAC1B,CAAA,yCAAA,EAA6C,CAAc,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAE,CACnF;YACH;QACF;QAEA,IAAI,IAAI,GAAO,CAAC;QAChB,QAAQ,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;YAC3C,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;AAChD,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC/E,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC/C;gBACF;AACA,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;oBACxD;gBACF;;AAEA,gBAAA,IAAI,QAAQ,GAAc,IAAI,CAAC,WAAW;gBAC1C,IAAI,WAAW,GAAG,KAAK;AACvB,gBAAA,OAAO,QAAQ,KAAK,IAAI,EAAE;AACxB,oBAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAoB,CAAC;AAC1E,oBAAA,IAAI,SAAS,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;wBACtD,WAAW,GAAG,IAAI;wBAClB;oBACF;AACA,oBAAA,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC5C;gBACA,IAAI,WAAW,EAAE;oBACf;gBACF;AACA,gBAAA,IAAI,CAAC,KAAK,WAAW,EAAE;AACrB,oBAAA,MAAM,IAAI,kBAAkB,CAAC,CAAA,qDAAA,CAAuD,CAAC;gBACvF;AACA,gBAAA,MAAM,IAAI,kBAAkB,CAC1B,CAAA,yCAAA,EAA4C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAE,CACpF;YACH;QACF;IACF;AAEA,IAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAmB,CAAY;AAC7C,IAAA,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AAC/D,YAAA,MAAM,IAAI,kBAAkB,CAAC,CAAA,qDAAA,CAAuD,CAAC;QACvF;IACF;AAEA,IAAA,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,WAAkB,CAAC,EAAE;AACrF,QAAA,MAAM,IAAI,kBAAkB,CAAC,CAAA,qDAAA,CAAuD,CAAC;IACvF;IAEA,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACnE,IAAI,CAAC,EAAE;AACL,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAClB;IACF;IAEA,MAAM,CAAC,GACL,CAAC,GAAG,YAAY,IAAI,IAAI,GAAG,CAAC,QAAQ;AACpC,SAAC,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AAErC,IAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,SAAS,aAAa,CAAC,GAAY,EAAE,OAAqB,EAAE,IAAW,EAAA;AACrE,IAAA,IAAI,CAAC,GAAG;QAAE;AACV,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU;AACxC,IAAA,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,GAAG,GAAG;QACZ;AACA,QAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;IACxB;AACA,IAAA,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,MAAM;AAC9B,IAAA,IAAI,GAAG,KAAK,UAAU,EAAE;QACtB,OAAO,IAAI,IAAI,CACb;AACE,YAAA,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa;AAC/B,SAAA,EACD,CAAC,EACD,IAAI,EAAE,OAAO,IAAI,KAAK,EACtB,KAAK,EACL,IAAI,EAAE,UAAU,IAAI,KAAK,CAC1B;IACH;AACA,IAAA,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAe,CAAC;IACxD,IAAI,GAAG,EAAE;QACP,OAAO,IAAI,IAAI,CACb;YACE,CAAC,CAAC,GAAG,GAAG;AACT,SAAA,EACD,CAAC,EACD,IAAI,EAAE,OAAO,IAAI,KAAK,EACtB,IAAI,EACJ,IAAI,EAAE,UAAU,IAAI,KAAK,CAC1B;IACH;AACF;AAEA,SAAS,aAAa,CAAI,GAAM,EAAE,OAAqB,EAAE,KAAA,GAAQ,IAAI,OAAO,EAAU,EAAA;AACpF,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;AACnC,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG;AAC9B,IAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACd,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;YACvB,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa;QACpC;AAAO,aAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;YACrC,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3C,IAAI,WAAW,EAAE;AACf,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW;YACtB;QACF;aAAO;AACL,YAAA,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;QACrC;IACF;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,MAAM,CAAA,CAAA,sBAAsC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AAC3E,IAAA,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB;AACzC,QAAA,MAAM,IAAI,sBAAsB,CAAC,sCAAsC,CAAC;AAC1E,IAAA,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;QAC3B,MAAM,IAAI,SAAS,CACjB,CAAA,EAAG,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,GAAG,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAA,kBAAA,CAAoB,CAC5E;IACH;IACA,MAAM,IAAI,GAAG;AACV,SAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,QAAA,IAAI,IAAI,YAAY,WAAW,EAAE;AAC/B,YAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB;aAAO;YACL,OAAO,CAAC,IAAI,CAAC;QACf;AACF,IAAA,CAAC;AACA,SAAA,IAAI;AACJ,SAAA,GAAG,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAE5C,IAAA,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAChD,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG;AACxC,QAAA,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;QACpB;IACF;AACA,IAAA,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC7E,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAO;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,CAAU,KAAI;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE;AACpD,YAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACZ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAuB,EAAE;AACpD,gBAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf;AACF,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB;AAEA,IAAA,IACE,GAAG,CAAC,OAAO,YAAY,KAAK;QAC5B,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;YAC3C,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EACrD;AACA,QAAA,IAAI,MAAc;QAClB,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,YAAA,MAAM,GAAG;AACP,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,IAAI;aACZ;AACD,YAAA,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;QACzB;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE;AAC7B,YAAA,MAAM,GAAG;AACP,gBAAA,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/B;YACD,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AAC/B,YAAA,MAAM,GAAG;AACP,gBAAA,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACjC;YACD,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;AACjC,YAAA,MAAM,GAAG;AACP,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,IAAI;aACZ;AACD,YAAA,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;QACzB;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AAChC,YAAA,MAAM,GAAG;AACP,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,UAAU,EAAE,IAAI,CAAC,CAAC,CAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AACjE,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CACxB,IAAI,CAAC,CAAC,CAAC,EACP,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,SAAS,GAAI,IAAI,CAAC,CAAC,CAAY,GAAI,IAAI,CAAC,CAAC,CAAY,CAC9E;aACF;AACD,YAAA,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QAC5D;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;YACxD,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;YAC3B,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM;QAChC;AAAO,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;AACpC,YAAA,MAAM,GAAG,GACP,IAAI,CAAC,CAAC,CAAC,KAAK;kBACR,GAAG,CAAC,OAAO,CAAC,MAAM,GAAI,IAAI,CAAC,CAAC;kBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAG,IAAI,CAAC,CAAC,CAAY,GAAI,IAAI,CAAC,CAAC,CAAY,CAAC;AAC7E,YAAA,MAAM,GAAG;AACP,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,UAAU,EAAE,IAAI,CAAC,CAAC,CAAW;AAC7B,gBAAA,QAAQ,EAAG,IAAI,CAAC,CAAC,CAAY,GAAG,GAAG;AACnC,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAW,EAAG,IAAI,CAAC,CAAC,CAAY,GAAG,GAAG,CAAC;AACtE,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAW,EAAG,IAAI,CAAC,CAAC,CAAY,GAAG,GAAG,CAAC;aACzE;AACD,YAAA,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;QAC5D;QACA,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;YACzE,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;QACjF;IACF;AACA,IAAA,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;AAChB,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAQ,CAAC;AAC3D,IAAA,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAa;IACjG,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG;AACxC,IAAA,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;AAC3B,IAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,8BAA2C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAI;IAC/D,IAAI,GAAG,GAAG,EAAS;AACnB,IAAA,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,GAAG,YAAY,YAAY,EAAE;AACpC,YAAA,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACpC;aAAO;YACL,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG;QAC1B;IACF;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAA,CAAA,wBAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEhG,MAAM,CAAA,EAAA,6BAAwC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAI;IACrE,MAAM,KAAK,GAAG;AACX,SAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,QAAA,IAAI,IAAI,YAAY,WAAW,EAAE;AAC/B,YAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB;aAAO;YACL,OAAO,CAAC,IAAI,CAAC;QACf;AACF,IAAA,CAAC;AACA,SAAA,IAAI;AACJ,SAAA,GAAG,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5C,IAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,0BAAmC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAE7E,MAAM,CAAA,EAAA,8BAAyC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAI;IAC7D,QAAQ,CAAC;AACP,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AAC9B,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;AAC/B,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AAC9B,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;AACnC,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AAC7B,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;;IAEpC,IAAI,CAAC,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,CAAA,CAAA,wBAAmC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KACnD,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAC7C;AACD,MAAM,CAAA,EAAA,wBAAmC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KACnD,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAC7C;AACD,MAAM,CAAA,CAAA,6BAAwC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KACjE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CACxD;AAED,MAAM,CAAA,EAAA,4BAAuC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAI;AACpE,IAAA,MAAM,GAAG,GAAW,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC7C,QAAA,MAAM,IAAI,sBAAsB,CAAC,qBAAqB,CAAC;IACzD;SAAO;AACL,QAAA,IAAI,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD;AACF,CAAC,CAAC;AAEF,MAAM,iCAAyC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AAC1F,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI;IACzB,MAAM,KAAK,GAAW,EAAE;AACxB,IAAA,IAAI,CAAyB;IAC7B,MAAM,OAAO,GAAa,EAAE;IAC5B,QAAQ,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AACpC,QAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACT,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB;IACF;AAEA,IAAA,IAAI,CAAY,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,IAAe,KAAI;QACnE,MAAM,KAAK,GAA4B,EAAE;AACzC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb;QACF;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAU,CAA+B,EAAE;AACrE,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,SAAU,CAAC,CAAC,CAAC;QAC5B;AACA,QAAA,IAAI,CACF,SAAS,EACT,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,KAAI;AAC3D,YAAA,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AACnB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACtB,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAA,EAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;QACxD,CAAC,CAAC,CACH;AACH,IAAA,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,6BAA2C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAI;IAC/D,IAAI,CAAC,SAAS,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,8BAA0D,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAI;IAC9E,IAAI,CAAC,SAAS,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,wBAAiC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,MAAM,4BAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,MAAM,CAAA,EAAA,iCAAwD,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACvF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,gCAAuD,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACtF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,iCAAwD,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACvF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,gCAAuD,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACtF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,0BAEJ,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACzC,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;IACzB,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,KAAK;AACtC,IAAA,IAAI,GAAG,CAAC,UAAU,EAAE;AAClB,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAc,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;AACzE,QAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,YAAA,MAAM,IAAI,cAAc,CAAC,CAAA,sCAAA,EAAyC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAA,CAAG,CAAC;QAC3F;QACA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAc,EAAE,CAAC,CAAC;AAC5B,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,YAAA,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI;QACvC;aAAO;YACL,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvC;AACA,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAClB;IACF;AACA,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAC9C,CAAC,CACF;AAED,MAAM,CAAA,EAAA,2BAAkD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACpF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,+BAAqD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACvF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,8BAAoD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACtF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,gCAAsD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACxF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,6BAAmD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACrF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChD,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,+BAAqD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACvF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,iCAAuD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACzF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,8BAAoD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACtF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,6BAAmD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACrF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,iCAAuD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AACzF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChD,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,kCAAwD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AAC1F,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAChD,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,0CAEJ,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;AAC5B,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjD,CAAC,CACF;AAED,MAAM,CAAA,EAAA,2BAAkD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;;AACpF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAE,CAAA,EAAA,GAAC,GAAG,CAAC,OAAO,EAAA,EAAA,GAAC,GAAG,CAAC,IAAI,CAAA,KAAA,EAAA,CAAA,EAAA,CAAA,GAAM,CAAC,CAAA,EAAE;AAChD,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,0BAAiD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;;AACnF,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAE,CAAA,EAAA,GAAC,GAAG,CAAC,OAAO,EAAA,EAAA,GAAC,GAAG,CAAC,IAAI,CAAA,KAAA,EAAA,CAAA,EAAA,CAAA,GAAM,CAAC,CAAA,EAAE;AAChD,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,yCAEJ,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAI;;AAC5B,IAAA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AACzB,IAAA,IAAI,CAAC,SAAS,GAAE,CAAA,EAAA,GAAC,GAAG,CAAC,OAAO,EAAA,EAAA,GAAC,GAAG,CAAC,IAAI,CAAA,KAAA,EAAA,CAAA,EAAA,CAAA,GAAM,CAAC,CAAA,EAAE;AAChD,CAAC,CACF;AAED,MAAM,CAAA,EAAA,4BAAsC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACvF,MAAM,CAAA,EAAA,6BAAuC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACxF,MAAM,CAAA,EAAA,iCAA2C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7F,MAAM,CAAA,EAAA,kCAA4C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9F,MAAM,CAAA,EAAA,uBAAiC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,MAAM,CAAA,EAAA,6BAAuC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1F,MAAM,CAAA,EAAA,0BAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,MAAM,CAAA,EAAA,gCAA0C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7F,MAAM,CAAA,EAAA,qBAA+B,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACjF,MAAM,CAAA,EAAA,oBAA8B,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,MAAM,CAAA,EAAA,mCAA6C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/F,MAAM,CAAA,EAAA,wBAAkC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACnF,MAAM,CAAA,EAAA,uBAAiC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF,MAAM,CAAA,EAAA,sBAAgC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACjF,MAAM,CAAA,EAAA,uBAAiC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF,MAAM,6BAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,MAAM,6BAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,MAAM,CAAA,EAAA,wBAAkC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACnF,MAAM,CAAA,EAAA,uBAAiC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,MAAM,CAAA,EAAA,2BAAqC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtF,MAAM,CAAA,EAAA,0BAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrF,MAAM,CAAA,EAAA,yBAAmC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF,MAAM,CAAA,EAAA,8BAAwC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1F,MAAM,CAAA,EAAA,+BAAyC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F,MAAM,CAAA,EAAA,uCAAiD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KACpE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CACzB;AACD,MAAM,2BAAqC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AACtF,IAAA,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,KAAI;QACzC,IAAI,CAAC,SAAS,EAAE,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpD,IAAA,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,4BAAoD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KACvE,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,CAChC;AACD,MAAM,CAAA,EAAA,oBAA0B,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAE5E,MAAM,CAAA,EAAA,wBAAoC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAI;AACpE,IAAA,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,EAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;QACrB;IACF;AACA,IAAA,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;AACpC,IAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;QACtB;IACF;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,OAAQ,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,0BAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAE5D,MAAM,CAAA,EAAA,qBAA+C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACnF,IAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAA,KAAA,oBAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,CAAA,CAAA,qBAA+C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACnF,IAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAA,KAAA,oBAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,CAAA,CAAA,uBAAiD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAI;AACrF,IAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAA,OAAA,sBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,kCAEJ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AAC7C,IAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE;QAC9D,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;QAC7F;aAAO;AACL,YAAA,MAAM,IAAI,sBAAsB,CAAC,4CAA4C,CAAC;QAChF;IACF;AACA,IAAA,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;AACb,QAAA,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACnE;SAAO;AACL,QAAA,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9D;AACF,CAAC,CACF;AAED,MAAM,6BAEJ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AAC7C,IAAA,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE;QAC9D,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;QAC7F;aAAO;AACL,YAAA,MAAM,IAAI,sBAAsB,CAAC,4CAA4C,CAAC;QAChF;IACF;AACA,IAAA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE;AACzB,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAY;AAChC,IAAA,IAAI,IAAI;IACR,IAAI,OAAO,KAAA,EAAA,sBAAoB;AAC7B,QAAA,IAAI,GAAG,mBAAmB,CAAC,CAAa,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;IAC3E;SAAO;AACL,QAAA,IAAI,GAAG,cAAc,CAAC,CAAa,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;IACtE;IACA,IAAI,IAAI,EAAE;AACR,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,EAAA,KAAA,oBAAe,IAAI,CAAC;IACxC;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AACvB,CAAC,CACF;AAED,MAAM,mCAEJ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AAC7C,IAAA,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE;QAC9D,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;YAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC;QAC7F;aAAO;AACL,YAAA,MAAM,IAAI,sBAAsB,CAAC,4CAA4C,CAAC;QAChF;IACF;AACA,IAAA,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE;AACzB,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAY;IAChC,IAAI,IAAI,EAAE;QACR,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B;AACA,IAAA,IAAI,IAAI;IACR,IAAI,OAAO,KAAA,EAAA,sBAAoB;AAC7B,QAAA,IAAI,GAAG,mBAAmB,CAAC,CAAa,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;IAC3E;SAAO;AACL,QAAA,IAAI,GAAG,cAAc,CAAC,CAAa,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;IACtE;IACA,IAAI,IAAI,EAAE;AACR,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,EAAA,KAAA,oBAAe,IAAI,CAAC;IACxC;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AACvB,CAAC,CACF;AAED,MAAM,yBAAgC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AACpF,IAAA,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;IAC1F,IAAI,IAAI,GAAG,IAAI;IACf,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;AACtC,IAAA,MAAM,YAAY,GAAG;AACnB,QAAA,KAAK,EAAE,SAAS;KACjB;IACD,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC;AACvD,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;QACtB,CAAC,YAAW;AACV,YAAA,IAAI,EAAgB;YACpB,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,YAAY,CAAC,OAAO,CAAC;gBACnB,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK;sBACnF,EAAE,CAAC;sBACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;YACzB,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3E,YAAA,IAAI,UAAU;gBACZ,IAAI;oBACF,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;wBACnF;0BACI,EAAE,CAAC;0BACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;YAC3B,OAAO,IAAI,EAAE;gBACX,MAAM,aAAa,GAAG,EAAE;gBACxB,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KACf,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAC5E;gBACD,EAAE,CAAC,SAAS,KAAK,IAAI,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;gBACxD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAChC,KAAK,EACL,OAAO,EACP,CAAC,EACD,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,EACrC,MAAM,CACP;gBACD,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE;AAC7C,oBAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;oBACpB;gBACF;gBACA,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,SAAS,EAAE;oBAC9C;gBACF;gBACA,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAClE,IAAI;oBACF,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;wBACnF;0BACI,EAAE,CAAC;0BACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;YAC3B;AACA,YAAA,IAAI,EAAE;AACR,QAAA,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IAClB;SAAO;AACL,QAAA,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,YAAY,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;AAC/F,QAAA,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACrE,QAAA,IAAI,UAAU;YAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;QAC/F,OAAO,IAAI,EAAE;YACX,MAAM,aAAa,GAAG,EAAE;YACxB,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5F,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC;YACzF,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE;AAC7C,gBAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;gBACpB;YACF;YACA,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,SAAS,EAAE;gBAC9C;YACF;AACA,YAAA,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;QACjF;AACA,QAAA,IAAI,EAAE;IACR;AACF,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,4BAA0C,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,KAAI;AACvF,IAAA,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,KAAK,UAAU,KAAK,CAAC,cAAc,EAAE;QACxE,MAAM,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,GAAG,YAAY,CAAC;IACpD;IACA,IAAI,CACF,SAAS,EACT,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,KAAK,UAAU,CAAC,CAC3F;AACH,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,oBAA4B,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAI;AAChG,IAAA,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,6BAAkC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AACtF,IAAA,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,8BAAoC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5F,MAAM,CAAA,EAAA,wBAA8B,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEtF,MAAM,2BAA0C,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI;AAC9F,IAAA,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,IAAe,KAAI;AACpD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb;QACF;AACA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC;AACrC,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,IAAI,GAAwB;YAC5B,IAAI,MAAM,GAAG,KAAK;AAClB,YAAA,KAAK,MAAM,QAAQ,IAAI,CAAC,EAAE;AACxB,gBAAA,IACE,MAAM;AACN,qBAAC,MAAM;wBACL,CAAC,QAAQ,CAAC,CAAC,CAAC;4BACZ,MAAM;AACJ,gCAAA,WAAW,CACT,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EACnE,OAAO,CACR,CAAC,EACN;AACA,oBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE;AAClB,oBAAA,GAAG,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;oBACjE,IAAI,GAAG,CAAC,SAAS;wBAAE;AACnB,oBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,wBAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;wBACpB;oBACF;AACA,oBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;wBAEhB;oBACF;gBACF;YACF;AACA,YAAA,IAAI,EAAE;QACR;aAAO;YACL,CAAC,YAAW;AACV,gBAAA,IAAI,GAAwB;gBAC5B,IAAI,MAAM,GAAG,KAAK;AAClB,gBAAA,KAAK,MAAM,QAAQ,IAAI,CAAC,EAAE;AACxB,oBAAA,IAAI,EAAgB;AACpB,oBAAA,IACE,MAAM;AACN,yBAAC,MAAM;4BACL,CAAC,QAAQ,CAAC,CAAC,CAAC;gCACZ,MAAM;AACJ,oCAAA,WAAW,CACT,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;wCAC5E;0CACE,EAAE,CAAC;AACL,0CAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EACvB,OAAO,CACR,CAAC,EACN;AACA,wBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAAE;AAClB,wBAAA,GAAG,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;wBAC5E,IAAI,GAAG,CAAC,SAAS;4BAAE;AACnB,wBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;AAChB,4BAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;4BACpB;wBACF;AACA,wBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;4BAEhB;wBACF;oBACF;gBACF;AACA,gBAAA,IAAI,EAAE;AACR,YAAA,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAClB;AACF,IAAA,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,qBAEJ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,KAAI;IAC9D,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC;;AAG7C,IAAA,mBAAmB,CACjB,IAAI,EACJ,CAAC,GAAG,OAAkB,KAAI;AACxB,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC;AACxC,QAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS;QACrD,MAAM,SAAS,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS;;AAG7E,QAAA,MAAM,yBAAyB,GAAG,CAAC,QAAiB,EAAE,aAAsB,KAAI;YAC9E,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEzC,gBAAA,mBAAmB,CACjB,IAAI,EACJ,CAAC,GAAG,WAAsB,KAAI;AAC5B,oBAAA,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC;oBAChD,MAAM,aAAa,GACjB,CAAC,eAAe,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;;oBAGzE,IAAI,eAAe,EAAE;AACnB,wBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;wBACpB;oBACF;;oBAGA,IACE,aAAa,YAAY,UAAU;AACnC,yBAAC,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,SAAS,IAAI,aAAa,CAAC,YAAY,CAAC,EACjF;AACA,wBAAA,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;wBAC9B;oBACF;;oBAGA,IAAI,QAAQ,EAAE;wBACZ,IAAI,CAAC,aAAa,CAAC;oBACrB;AAAO,yBAAA,IAAI,aAAa,YAAY,UAAU,EAAE;;wBAE9C,IACE,aAAa,CAAC,QAAQ;AACtB,4BAAA,aAAa,CAAC,SAAS;4BACvB,aAAa,CAAC,YAAY,EAC1B;AACA,4BAAA,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;wBAChC;6BAAO;;AAEL,4BAAA,IAAI,EAAE;wBACR;oBACF;yBAAO;;AAEL,wBAAA,IAAI,EAAE;oBACR;AACF,gBAAA,CAAC,EACD,KAAK,EACL,OAAO,EACP,WAAW,EACX,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EACtB,cAAc,CACf;YACH;iBAAO;;gBAEL,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,aAAa,CAAC;gBACrB;AAAO,qBAAA,IAAI,aAAa,YAAY,UAAU,EAAE;;AAE9C,oBAAA,IAAI,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,SAAS,IAAI,aAAa,CAAC,YAAY,EAAE;AACnF,wBAAA,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;oBAChC;yBAAO;;AAEL,wBAAA,IAAI,EAAE;oBACR;gBACF;qBAAO;AACL,oBAAA,IAAI,EAAE;gBACR;YACF;AACF,QAAA,CAAC;;QAGD,IAAI,WAAW,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,MAAM,EAAE,GAA4B,EAAE;AACtC,YAAA,IAAI,SAAS;AAAE,gBAAA,EAAE,CAAC,SAAS,CAAC,GAAG,QAAQ;AAEvC,YAAA,mBAAmB,CACjB,IAAI,EACJ,CAAC,GAAG,SAAoB,KAAI;AAC1B,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC5C,MAAM,kBAAkB,GAAG;AACzB,sBAAE,SAAS,CAAC,CAAC;AACb,sBAAE,SAAS,CAAC,MAAM,GAAG;AACnB,0BAAE,SAAS,CAAC,CAAC;0BACX,SAAS;;AAGf,gBAAA,yBAAyB,CAAC,aAAa,EAAE,kBAAkB,CAAC;AAC9D,YAAA,CAAC,EACD,KAAK,EACL,OAAO,EACP,SAAS,EACT,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EACtB,cAAc,CACf;QACH;aAAO;;AAEL,YAAA,yBAAyB,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC5E;AACF,IAAA,CAAC,EACD,KAAK,EACL,OAAO,EACP,CAAC,EACD,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAClB,cAAc,CACf;AACH,CAAC,CACF;AAED,MAAM,yBAAgB,CAAC,EAAE,IAAI,EAAE,KAAI;AACjC,IAAA,IAAI,EAAE;AACR,CAAC,CAAC;AACF,MAAM,CAAA,EAAA,qBAA+D,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAI;IAC/F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAClF,MAAM,IAAI,kBAAkB,CAAC,CAAA,iCAAA,EAAoC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA,CAAE,CAAC;IACxF;IACA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,CAAA,EAAA,uBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAI;IACrC,IAAI,CAAC,CAAC,CAAC;AACT,CAAC,CAAC;AACF,MAAM,CAAA,EAAA,4BAAiC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,MAAM,CAAA,CAAA,sBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAE3C,SAAS,WAAW,CAAC,CAAU,EAAE,OAAqB,EAAA;IACpD,IAAI,CAAC,YAAY,IAAI;AAAE,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;IAC5C,IAAI,CAAC,KAAK,QAAQ;AAAE,QAAA,OAAO,SAAS;AACpC,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,QAAQ,CACtB,KAAY,EACZ,IAAe,EACf,IAAY,EACZ,IAAU,EACV,KAAY,EACZ,OAAqB,EACrB,cAAuB,EAAA;AAEvB,IAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,QAAA,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC;IAClE;SAAO;AACL,QAAA,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/E;AACF;AAEA,SAAS,aAAa,CACpB,KAAY,EACZ,IAAY,EACZ,IAAU,EACV,KAAY,EACZ,OAAqB,EACrB,cAAuB,EAAA;IAEvB,MAAM,GAAG,GAAU,EAAE;AACrB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM;AAC7F,QAAA,IAAI,GAAG,YAAY,UAAU,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE;AACpF,YAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;YACpB;QACF;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAA,CAAA,wBAAsB;AACrD,YAAA,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnE;QACF;AACA,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AACtB;AAEA,eAAe,cAAc,CAC3B,KAAY,EACZ,IAAY,EACZ,IAAU,EACV,KAAY,EACZ,OAAqB,EACrB,cAAuB,EAAA;IAEvB,MAAM,GAAG,GAAU,EAAE;AACrB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,QAAA,IAAI,GAAG;AACP,QAAA,IAAI;AACF,YAAA,IAAI,EAAgB;YACpB,GAAG;gBACD,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AACjF,qBAAA,SAAS,KAAK;sBACb,EAAE,CAAC;sBACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;QAC3B;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,CAAC,CAAC;YACP;QACF;AACA,QAAA,IAAI,GAAG,YAAY,UAAU,KAAK,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,EAAE;AACpF,YAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;YACpB;QACF;AACA,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAA,CAAA,wBAAsB;AACrD,YAAA,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnE;QACF;AACA,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACf;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;AACtB;AAiBM,SAAU,SAAS,CAAC,QAA8B,EAAA;IACtD,IAAI,SAAS,GAAG,KAAK;AACrB,IAAA,IAAI,OAAgB;IACpB,MAAM,CAAC,GAAG,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;AAC7C,QAAA,QAAQ,CAAC,CAAC,GAAG,IAAe,KAAI;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACH,SAAS,GAAG,IAAI;AAChB,gBAAA,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;gBACjB,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;IACF,OAAO;QACL,SAAS;QACT,OAAO;QACP,CAAC;KACF;AACH;AAEM,SAAU,QAAQ,CAAC,QAA8B,EAAA;AACrD,IAAA,IAAI,MAAM;AACV,IAAA,IAAI,GAAmC;AACvC,IAAA,QAAQ,CAAC,CAAC,GAAG,IAAe,KAAI;QAC9B,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS;AACxD,QAAA,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AAClB,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,GAAG;QAAE,MAAM,GAAG,CAAC,KAAK;IACxB,OAAO,EAAE,MAAM,EAAE;AACnB;AAEO,eAAe,SAAS,CAC7B,KAAY,EACZ,IAAc,EACd,KAAY,EACZ,OAAqB,EACrB,YAAqB,EACrB,cAAuB,EAAA;IAEvB,IAAI,IAAI,GAAY,YAAY;IAChC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACtC,QAAA,IAAI,GAAG,CAAC,GAAG,IAAe,KAAI;AAC5B,YAAA,YAAY,CAAC,GAAG,IAAI,CAAC;AACrB,YAAA,OAAO,EAAE;AACX,QAAA,CAAC;AACH,IAAA,CAAC,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AAC9F,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,GAAG;AACP,QAAA,IAAI;AACF,YAAA,IAAI,EAAgB;YACpB,GAAG;gBACD,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AACjF,qBAAA,SAAS,KAAK;sBACb,EAAE,CAAC;sBACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;QAC3B;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,CAAC,CAAC;YACP;QACF;QACA,IAAI,CAAC,GAAG,GAAG;AACX,QAAA,IAAI;AACF,YAAA,CAAC,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG;QAClD;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,CAAC,CAAC;YACP;QACF;AACA,QAAA,IAAI,EAAE,KAAA,EAAA,gCAA8B,EAAE,KAAA,EAAA,8BAA4B;YAChE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;gBACzB;YACF;YACA,EAAE,GAAG,EAAE,KAAA,EAAA,+BAA4B,CAAA;QACrC;AACA,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;AAClB,YAAA,IAAI,EAAE,KAAA,CAAA,wBAAsB,EAAE,KAAA,CAAA,sBAAoB;AAChD,gBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClB;YACF;iBAAO;gBACL,CAAC,GAAG,SAAS;YACf;QACF;;QAEA,IAAI,EAAE,KAAA,EAAA,qCAAmC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AACtE,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAClB;QACF;AACA,QAAA,IAAI,IAAI;AACR,QAAA,IAAI;AACF,YAAA,IAAI,EAAgB;YACpB,IAAI;gBACF,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AACjF,qBAAA,SAAS,KAAK;sBACb,EAAE,CAAC;sBACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;QAC3B;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,CAAC,CAAC;YACP;QACF;QACA,IAAI,CAAC,GAAG,IAAI;AACZ,QAAA,IAAI;AACF,YAAA,CAAC,GAAG,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI;QACrD;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,CAAC,CAAC;YACP;QACF;AACA,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;YAClB,CAAC,GAAG,SAAS;QACf;AACA,QAAA,SAAS,CAAC;YACR,EAAE;AACF,YAAA,IAAI,EAAE,SAAS;YACf,IAAI;YACJ,KAAK;YACL,CAAC;YACD,CAAC;YACD,GAAG;YACH,OAAO;YACP,KAAK;YACL,IAAI;YACJ,cAAc;YACd,IAAI;AACL,SAAA,CAAC;IACJ;AACA,IAAA,MAAM,CAAC;AACT;AAEM,SAAU,QAAQ,CACtB,KAAY,EACZ,IAAc,EACd,KAAY,EACZ,OAAqB,EACrB,IAAa,EACb,cAAuB,EAAA;IAEvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AAC/F,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM;AAC7F,QAAA,IAAI,CAAC,GAAG,GAAG,YAAY,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG;AACpD,QAAA,IAAI,EAAE,KAAA,EAAA,gCAA8B,EAAE,KAAA,EAAA,8BAA4B;YAChE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;gBACzB;YACF;YACA,EAAE,GAAG,EAAE,KAAA,EAAA,+BAA4B,CAAA;QACrC;AACA,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;AAClB,YAAA,IAAI,EAAE,KAAA,CAAA,wBAAsB,EAAE,KAAA,CAAA,sBAAoB;AAChD,gBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClB;YACF;iBAAO;gBACL,CAAC,GAAG,SAAS;YACf;QACF;;QAEA,IAAI,EAAE,KAAA,EAAA,qCAAmC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AACtE,YAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAClB;QACF;AACA,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM;AAC9F,QAAA,IAAI,CAAC,GAAG,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI;AACvD,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;YAClB,CAAC,GAAG,SAAS;QACf;AACA,QAAA,SAAS,CAAC;YACR,EAAE;AACF,YAAA,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,KAAK;YACL,CAAC;YACD,CAAC;YACD,GAAG;YACH,OAAO;YACP,KAAK;YACL,IAAI;YACJ,cAAc;YACd,IAAI;AACL,SAAA,CAAC;IACJ;AACF;AAiBA,SAAS,sBAAsB,CAC7B,MAA6C,EAC7C,WAAW,GAAG,CAAC,EAAA;IAEf,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;AAC1C,IAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM;AAClD,IAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,MAAK;YACvC,GAAG,CAAC,WAAW,EAAE;AACjB,YAAA,IAAI;gBACF,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,CAAC,EAAE;oBACN,IAAI,CAAC,IAAI,WAAW,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;oBAChD;gBACF;gBACA,CAAC,CAAC,MAAM,CAAC;YACX;YAAE,OAAO,GAAG,EAAE;gBACZ,IAAI,OAAO,CAAC,kBAAkB,IAAI,GAAG,YAAY,YAAY,EAAE;AAC7D,oBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,MAAK;wBACvC,GAAG,CAAC,WAAW,EAAE;wBACjB,IAAI,CAAC,GAAG,CAAC;AACX,oBAAA,CAAC,CAAC;oBACF,OAAO,CAAC,aAAa,CAAC;AACpB,wBAAA,KAAK,EAAE,GAAY;wBACnB,KAAK;wBACL,KAAK;wBACL,OAAO;AACR,qBAAA,CAAC;gBACJ;qBAAO;oBACL,IAAI,CAAC,GAAG,CAAC;gBACX;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAAO,SAAA,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE;AAClF,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,MAAK;YACvC,GAAG,CAAC,WAAW,EAAE;AACjB,YAAA,IAAI;gBACF,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,CAAC,EAAE;oBACN,IAAI,CAAC,IAAI,WAAW,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;oBAChD;gBACF;gBACA,CAAC,CAAC,MAAM,CAAC;YACX;YAAE,OAAO,GAAG,EAAE;AACZ,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,GAAG,YAAY,YAAY,EAAE;AACzE,oBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,MAAK;wBACvC,GAAG,CAAC,WAAW,EAAE;wBACjB,IAAI,CAAC,GAAG,CAAC;AACX,oBAAA,CAAC,CAAC;oBACF,OAAO,CAAC,aAAa,CAAC;AACpB,wBAAA,KAAK,EAAE,GAAY;wBACnB,KAAK;wBACL,KAAK;wBACL,OAAO;AACR,qBAAA,CAAC;gBACJ;qBAAO;oBACL,IAAI,CAAC,GAAG,CAAC;gBACX;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,kCAAkC,CAAC,0BAA0B,CAAC;QAChF,OAAO,CAAC,aAAa,CAAC;YACpB,KAAK;YACL,KAAK;AACL,YAAA,KAAK,EAAE,KAAK;YACZ,OAAO;AACR,SAAA,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,SAAS,CAAC,MAA6C,EAAA;AAC9D,IAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM;IAClD,KAAK,CAAC,KAAK,EAAE;AACb,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO;AAEnC,IAAA,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE;QAClC;IACF;AAEA,IAAA,IAAI;QACF,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,IAAI,yBAAyB,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;YAC9D;QACF;QACA,CAAC,CAAC,MAAM,CAAC;IACX;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,IAAI,GAAG,YAAY,YAAY,EAAE;AACzE,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,MAAK;gBACvC,GAAG,CAAC,WAAW,EAAE;gBACjB,IAAI,CAAC,GAAG,CAAC;AACX,YAAA,CAAC,CAAC;YACF,OAAO,CAAC,aAAa,CAAC;AACpB,gBAAA,KAAK,EAAE,GAAY;gBACnB,KAAK;gBACL,KAAK;gBACL,OAAO;AACR,aAAA,CAAC;QACJ;aAAO;YACL,IAAI,CAAC,GAAG,CAAC;QACX;IACF;AACF;AAEA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;;;;;;;;;;AAU3B,CAAA,CAAC;AAEF,SAAS,gBAAgB,CACvB,KAAY,EACZ,IAAc,EACd,KAAY,EACZ,OAAqB,EACrB,IAAa,EACb,OAAgB,EAChB,cAAuB,EAAA;IAEvB,MAAM,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ;AAC3C,IAAA,IAAI,IAAI,YAAY,IAAI,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC;AAAO,SAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAA,IAAI,EAAE;IACR;AAAO,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC/C,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAA,CAAA,sBAAoB;AAC7B,YAAA,IAAI,EAAE;QACR;aAAO;AACL,YAAA,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC;QAC7E;IACF;AAAO,SAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IACvB;AAAO,SAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAA,EAAA,uBAAqB;AACrC,QAAA,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAW,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC;IAChF;AAAO,SAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAA,EAAA,uBAAqB;QACrC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,IAAI,WAAW,CAAC,uDAAuD,CAAC,CAAC;QAChF;AAAO,aAAA,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AACjE,YAAA,SAAS,CACP,KAAK,EACL,IAAI,CAAC,CAAC,CAAC,EACP,KAAK,EACL,OAAO,EACP,OAAO,GAAG,IAAe,KAAI;AAC3B,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAElC,oBAAA,IAAI;AACF,wBAAA,IAAI,CAAC,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAS;oBAC/D;oBAAE,OAAO,GAAG,EAAE;wBACZ,IAAI,CAAC,GAAG,CAAC;oBACX;YACJ,CAAC,EACD,cAAc,CACf,CAAC,KAAK,CAAC,IAAI,CAAC;QACf;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,sBAAsB,CAAC,8BAA8B,CAAC,CAAC;QAClE;IACF;SAAO,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACnC,QAAA,SAAS,CAAC;AACR,YAAA,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACX,IAAI;YACJ,IAAI;YACJ,KAAK;AACL,YAAA,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACV,YAAA,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACV,YAAA,GAAG,EAAE,IAAI;YACT,IAAI;YACJ,OAAO;YACP,KAAK;AACL,YAAA,IAAI,EAAE,SAAS;YACf,cAAc;AACf,SAAA,CAAC;IACJ;SAAO;AACL,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,IAAI;AACb;AACM,SAAU,WAAW,CACzB,KAAY,EACZ,OAAqB,EACrB,aAAqB,EACrB,MAAA,GAAmB,EAAE,EACrB,cAAuB,EAAA;IAEvB,OAAO,QAAQ,CAAC,CAAC,IAAI,KACnB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC,CAC3F,CAAC,MAAM;AACV;AAEO,eAAe,gBAAgB,CACpC,KAAY,EACZ,OAAqB,EACrB,aAAqB,EACrB,MAAA,GAAmB,EAAE,EACrB,cAAuB,EAAA;AAEvB,IAAA,IAAI,EAAgB;AACpB,IAAA,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,KAC1B,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,CAAC,CAC5F,EAAE,SAAS,KAAK;UACb,EAAE,CAAC;UACH,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM;AACzB;AAEA,SAAS,mBAAmB,CAC1B,IAAe,EACf,IAAU,EACV,KAAY,EACZ,OAAqB,EACrB,aAAqB,EACrB,MAAA,GAAmB,EAAE,EACrB,cAAuB,EAAA;IAEvB,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,IAAI,EAAE;QACN;IACF;AACA,IAAA,IAAI,EAAE,aAAa,YAAY,KAAK,CAAC,EAAE;AACrC,QAAA,MAAM,IAAI,WAAW,CAAC,oBAAoB,CAAC;IAC7C;AACA,IAAA,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW;AACnC,IAAA,IAAI,CAAC;IACL,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG;QAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE;AAC3B,QAAA,IAAI,CAAC,YAAY,KAAK,EAAE;YACtB,KAAK,GAAG,CAAC;QACX;aAAO;YACL,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,YAAY,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;QACzE;IACF;AACA,IAAA,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;AACzD,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG;YACxB,aAAa,EAAE,IAAI,GAAG,EAAE;AACxB,YAAA,eAAe,EAAE,EAAE;SACpB;IACH;AACA,IAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,QAAA,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC;IAClF;SAAO;AACL,QAAA,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/F;AACF;AAEA,SAAS,oBAAoB,CAC3B,IAAU,EACV,KAAY,EACZ,OAAqB,EACrB,aAAqB,EACrB,KAAY,EACZ,cAAuB,EAAA;AAEvB,IAAA,IAAI,EAAE,aAAa,YAAY,KAAK,CAAC;AAAE,QAAA,MAAM,IAAI,WAAW,CAAC,oBAAoB,CAAC;IAClF,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,IAAI,GAAY;AAChB,QAAA,IAAI,GAAmC;AACvC,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC;AAChC,QAAA,IAAI;AACF,YAAA,QAAQ,CACN,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,CAAC,GAAG,IAAe,KAAI;AACrB,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;;AAC1C,oBAAA,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YACpB,CAAC,EACD,cAAc,CACf;QACH;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;QACpB;QACA,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACf;QACF;AACA,QAAA,IAAI,GAAG,YAAY,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;YACpB;QACF;QACA,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAA,CAAA,wBAAsB;AACrD,YAAA,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnE;QACF;IACF;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5E;AAEA,eAAe,qBAAqB,CAClC,IAAU,EACV,KAAY,EACZ,OAAqB,EACrB,aAAqB,EACrB,KAAY,EACZ,cAAuB,EAAA;AAEvB,IAAA,IAAI,EAAE,aAAa,YAAY,KAAK,CAAC;AAAE,QAAA,MAAM,IAAI,WAAW,CAAC,oBAAoB,CAAC;IAClF,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,IAAI,GAAY;AAChB,QAAA,IAAI,GAAmC;AACvC,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC;AAChC,QAAA,IAAI;AACF,YAAA,MAAM,SAAS,CACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,CAAC,GAAG,IAAe,KAAI;AACrB,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;;AAC1C,oBAAA,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YACpB,CAAC,EACD,cAAc,CACf;QACH;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;QACpB;QACA,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACf;QACF;AACA,QAAA,IAAI,GAAG,YAAY,UAAU,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC;YACpB;QACF;QACA,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAA,CAAA,wBAAsB;AACrD,YAAA,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACnE;QACF;IACF;AACA,IAAA,IAAI,CAAC,SAAS,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5E;;;;"}
@@ -1,277 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var utils = require('./utils.js');
6
- var executor = require('./executor.js');
7
- var parser = require('./parser.js');
8
- var SandboxExec = require('./SandboxExec.js');
9
-
10
- function createEvalContext() {
11
- return {
12
- sandboxFunction,
13
- sandboxAsyncFunction,
14
- sandboxedEval,
15
- sandboxedSetTimeout,
16
- sandboxedSetInterval,
17
- sandboxedClearTimeout,
18
- sandboxedClearInterval,
19
- lispifyFunction: parser.lispifyFunction,
20
- };
21
- }
22
- function SB() { }
23
- function sandboxFunction(context) {
24
- SandboxFunction.prototype = SB.prototype;
25
- return SandboxFunction;
26
- function SandboxFunction(...params) {
27
- const code = params.pop() || '';
28
- const parsed = parser.default(code);
29
- return executor.createFunction(params, parsed.tree, context.ctx.ticks, {
30
- ...context,
31
- constants: parsed.constants,
32
- tree: parsed.tree,
33
- }, undefined, 'anonymous');
34
- }
35
- }
36
- function SAF() { }
37
- function sandboxAsyncFunction(context) {
38
- SandboxAsyncFunction.prototype = SAF.prototype;
39
- return SandboxAsyncFunction;
40
- function SandboxAsyncFunction(...params) {
41
- const code = params.pop() || '';
42
- const parsed = parser.default(code);
43
- return executor.createFunctionAsync(params, parsed.tree, context.ctx.ticks, {
44
- ...context,
45
- constants: parsed.constants,
46
- tree: parsed.tree,
47
- }, undefined, 'anonymous');
48
- }
49
- }
50
- function SE() { }
51
- function sandboxedEval(func, context) {
52
- sandboxEval.prototype = SE.prototype;
53
- return sandboxEval;
54
- function sandboxEval(code) {
55
- // Parse the code and wrap last statement in return for completion value
56
- const parsed = parser.default(code);
57
- const tree = wrapLastStatementInReturn(parsed.tree);
58
- // Create and execute function with modified tree
59
- return executor.createFunction([], tree, context.ctx.ticks, {
60
- ...context,
61
- constants: parsed.constants,
62
- tree,
63
- }, undefined, 'anonymous')();
64
- }
65
- }
66
- function wrapLastStatementInReturn(tree) {
67
- if (tree.length === 0)
68
- return tree;
69
- const newTree = [...tree];
70
- const lastIndex = newTree.length - 1;
71
- const lastStmt = newTree[lastIndex];
72
- // Only wrap if it's not already a return or throw
73
- if (Array.isArray(lastStmt) && lastStmt.length >= 1) {
74
- const op = lastStmt[0];
75
- // Don't wrap Return (8) or Throw (47) - they already control flow
76
- if (op === 8 /* LispType.Return */ || op === 46 /* LispType.Throw */) {
77
- return newTree;
78
- }
79
- // List of statement types that should have undefined completion value
80
- // These match JavaScript semantics where declarations and control structures
81
- // don't produce a completion value
82
- const statementTypes = [
83
- 3 /* LispType.Let */, // 3
84
- 4 /* LispType.Const */, // 4
85
- 34 /* LispType.Var */, // 35
86
- 37 /* LispType.Function */, // 38
87
- 13 /* LispType.If */, // 14
88
- 38 /* LispType.Loop */, // 39
89
- 39 /* LispType.Try */, // 40
90
- 40 /* LispType.Switch */, // 41
91
- 42 /* LispType.Block */, // 43
92
- 43 /* LispType.Expression */, // 44
93
- ];
94
- // If the last statement is a declaration or control structure,
95
- // don't wrap it (it will naturally return undefined)
96
- if (statementTypes.includes(op)) {
97
- return newTree;
98
- }
99
- // For all other types (expressions, operators, etc.),
100
- // wrap in return to capture the completion value
101
- newTree[lastIndex] = [8 /* LispType.Return */, 0 /* LispType.None */, lastStmt];
102
- }
103
- return newTree;
104
- }
105
- function sST() { }
106
- function sandboxedSetTimeout(func, context) {
107
- sandboxSetTimeout.prototype = sST.prototype;
108
- return sandboxSetTimeout;
109
- function sandboxSetTimeout(handler, timeout, ...args) {
110
- const sandbox = context.ctx.sandbox;
111
- const exec = (...a) => {
112
- const h = typeof handler === 'string' ? func(handler) : handler;
113
- haltsub.unsubscribe();
114
- contsub.unsubscribe();
115
- sandbox.setTimeoutHandles.delete(sandBoxhandle);
116
- return h(...a);
117
- };
118
- const sandBoxhandle = ++sandbox.timeoutHandleCounter;
119
- let start = Date.now();
120
- let handle = setTimeout(exec, timeout, ...args);
121
- let elapsed = 0;
122
- const haltsub = sandbox.subscribeHalt(() => {
123
- elapsed = Date.now() - start + elapsed;
124
- clearTimeout(handle);
125
- });
126
- const contsub = sandbox.subscribeResume(() => {
127
- start = Date.now();
128
- const remaining = Math.floor((timeout || 0) - elapsed);
129
- handle = setTimeout(exec, remaining, ...args);
130
- sandbox.setTimeoutHandles.set(sandBoxhandle, {
131
- handle,
132
- haltsub,
133
- contsub,
134
- });
135
- });
136
- sandbox.setTimeoutHandles.set(sandBoxhandle, {
137
- handle,
138
- haltsub,
139
- contsub,
140
- });
141
- return sandBoxhandle;
142
- }
143
- }
144
- function sCT() { }
145
- function sandboxedClearTimeout(context) {
146
- sandboxClearTimeout.prototype = sCT.prototype;
147
- return sandboxClearTimeout;
148
- function sandboxClearTimeout(handle) {
149
- const sandbox = context.ctx.sandbox;
150
- const timeoutHandle = sandbox.setTimeoutHandles.get(handle);
151
- if (timeoutHandle) {
152
- clearTimeout(timeoutHandle.handle);
153
- timeoutHandle.haltsub.unsubscribe();
154
- timeoutHandle.contsub.unsubscribe();
155
- sandbox.setTimeoutHandles.delete(handle);
156
- }
157
- }
158
- }
159
- function sCI() { }
160
- function sandboxedClearInterval(context) {
161
- sandboxClearInterval.prototype = sCI.prototype;
162
- return sandboxClearInterval;
163
- function sandboxClearInterval(handle) {
164
- const sandbox = context.ctx.sandbox;
165
- const intervalHandle = sandbox.setIntervalHandles.get(handle);
166
- if (intervalHandle) {
167
- clearInterval(intervalHandle.handle);
168
- intervalHandle.haltsub.unsubscribe();
169
- intervalHandle.contsub.unsubscribe();
170
- sandbox.setIntervalHandles.delete(handle);
171
- }
172
- }
173
- }
174
- function sSI() { }
175
- function sandboxedSetInterval(func, context) {
176
- sandboxSetInterval.prototype = sSI.prototype;
177
- return sandboxSetInterval;
178
- function sandboxSetInterval(handler, timeout, ...args) {
179
- const sandbox = context.ctx.sandbox;
180
- const h = typeof handler === 'string' ? func(handler) : handler;
181
- const exec = (...a) => {
182
- start = Date.now();
183
- elapsed = 0;
184
- return h(...a);
185
- };
186
- const sandBoxhandle = ++sandbox.timeoutHandleCounter;
187
- let start = Date.now();
188
- let handle = setInterval(exec, timeout, ...args);
189
- let elapsed = 0;
190
- const haltsub = sandbox.subscribeHalt(() => {
191
- elapsed = Date.now() - start + elapsed;
192
- clearInterval(handle);
193
- });
194
- const contsub = sandbox.subscribeResume(() => {
195
- start = Date.now();
196
- handle = setTimeout(() => {
197
- start = Date.now();
198
- elapsed = 0;
199
- handle = setInterval(exec, timeout, ...args);
200
- exec(...args);
201
- }, Math.floor((timeout || 0) - elapsed), ...args);
202
- handlObj.handle = handle;
203
- });
204
- const handlObj = {
205
- handle,
206
- haltsub,
207
- contsub,
208
- };
209
- sandbox.setIntervalHandles.set(sandBoxhandle, handlObj);
210
- return sandBoxhandle;
211
- }
212
- }
213
-
214
- class Sandbox extends SandboxExec.default {
215
- constructor(options) {
216
- super(options, createEvalContext());
217
- }
218
- static audit(code, scopes = []) {
219
- const globals = {};
220
- for (const i of Object.getOwnPropertyNames(globalThis)) {
221
- globals[i] = globalThis[i];
222
- }
223
- const sandbox = new SandboxExec.default({
224
- globals,
225
- audit: true,
226
- });
227
- return sandbox.executeTree(utils.createExecContext(sandbox, parser.default(code, true), createEvalContext()), scopes);
228
- }
229
- static parse(code) {
230
- return parser.default(code);
231
- }
232
- compile(code, optimize = false) {
233
- const parsed = parser.default(code, optimize);
234
- const exec = (...scopes) => {
235
- const context = utils.createExecContext(this, parsed, this.evalContext);
236
- return { context, run: () => this.executeTree(context, [...scopes]).result };
237
- };
238
- return exec;
239
- }
240
- compileAsync(code, optimize = false) {
241
- const parsed = parser.default(code, optimize);
242
- const exec = (...scopes) => {
243
- const context = utils.createExecContext(this, parsed, this.evalContext);
244
- return {
245
- context,
246
- run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result),
247
- };
248
- };
249
- return exec;
250
- }
251
- compileExpression(code, optimize = false) {
252
- const parsed = parser.default(code, optimize, true);
253
- const exec = (...scopes) => {
254
- const context = utils.createExecContext(this, parsed, this.evalContext);
255
- return { context, run: () => this.executeTree(context, [...scopes]).result };
256
- };
257
- return exec;
258
- }
259
- compileExpressionAsync(code, optimize = false) {
260
- const parsed = parser.default(code, optimize, true);
261
- const exec = (...scopes) => {
262
- const context = utils.createExecContext(this, parsed, this.evalContext);
263
- return {
264
- context,
265
- run: () => this.executeTreeAsync(context, [...scopes]).then((ret) => ret.result),
266
- };
267
- };
268
- return exec;
269
- }
270
- }
271
-
272
- exports.LocalScope = utils.LocalScope;
273
- exports.SandboxAccessError = utils.SandboxAccessError;
274
- exports.SandboxCapabilityError = utils.SandboxCapabilityError;
275
- exports.SandboxError = utils.SandboxError;
276
- exports.SandboxExecutionTreeError = utils.SandboxExecutionTreeError;
277
- exports.default = Sandbox;
@@ -1,66 +0,0 @@
1
- import { IEvalContext } from './eval.js';
2
- import { Change, ExecReturn } from './executor.js';
3
- import { IContext, IExecContext, IGlobals, IOptionParams, IScope, Scope, SubscriptionSubject, Ticks } from './utils.js';
4
- export { IOptions, IContext, IExecContext, LocalScope, SandboxExecutionTreeError, SandboxCapabilityError, SandboxAccessError, SandboxError, } from './utils.js';
5
- export default class SandboxExec {
6
- evalContext?: IEvalContext | undefined;
7
- readonly context: IContext;
8
- readonly setSubscriptions: WeakMap<SubscriptionSubject, Map<string, Set<(modification: Change) => void>>>;
9
- readonly changeSubscriptions: WeakMap<SubscriptionSubject, Set<(modification: Change) => void>>;
10
- readonly sandboxFunctions: WeakMap<Function, IExecContext>;
11
- private haltSubscriptions;
12
- private resumeSubscriptions;
13
- halted: boolean;
14
- timeoutHandleCounter: number;
15
- readonly setTimeoutHandles: Map<number, {
16
- handle: number;
17
- haltsub: {
18
- unsubscribe: () => void;
19
- };
20
- contsub: {
21
- unsubscribe: () => void;
22
- };
23
- }>;
24
- readonly setIntervalHandles: Map<number, {
25
- handle: number;
26
- haltsub: {
27
- unsubscribe: () => void;
28
- };
29
- contsub: {
30
- unsubscribe: () => void;
31
- };
32
- }>;
33
- constructor(options?: IOptionParams, evalContext?: IEvalContext | undefined);
34
- static get SAFE_GLOBALS(): IGlobals;
35
- static get SAFE_PROTOTYPES(): Map<any, Set<string>>;
36
- subscribeGet(callback: (obj: SubscriptionSubject, name: string) => void, context: IExecContext): {
37
- unsubscribe: () => void;
38
- };
39
- subscribeSet(obj: object, name: string, callback: (modification: Change) => void, context: SandboxExec | IExecContext): {
40
- unsubscribe: () => void;
41
- };
42
- subscribeSetGlobal(obj: SubscriptionSubject, name: string, callback: (modification: Change) => void): {
43
- unsubscribe: () => void;
44
- };
45
- subscribeHalt(cb: (args?: {
46
- error: Error;
47
- ticks: Ticks;
48
- scope: Scope;
49
- context: IExecContext;
50
- }) => void): {
51
- unsubscribe: () => void;
52
- };
53
- subscribeResume(cb: () => void): {
54
- unsubscribe: () => void;
55
- };
56
- haltExecution(haltContext?: {
57
- error: Error;
58
- ticks: Ticks;
59
- scope: Scope;
60
- context: IExecContext;
61
- }): void;
62
- resumeExecution(): void;
63
- getContext(fn: (...args: any[]) => any): IExecContext | undefined;
64
- executeTree<T>(context: IExecContext, scopes?: IScope[]): ExecReturn<T>;
65
- executeTreeAsync<T>(context: IExecContext, scopes?: IScope[]): Promise<ExecReturn<T>>;
66
- }