three-usd-robot 0.13.0 → 0.14.0
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.
- package/README.md +19 -1
- package/dist/{MeshBinding-B_8RhuQE.d.ts → MeshBinding-5Dad1EOh.d.ts} +16 -4
- package/dist/{ThreeUsdRobot-X1zbpRZo.d.ts → ThreeUsdRobot-CurQqRqu.d.ts} +78 -2
- package/dist/{ThreeUsdRobotLoader-u3d1yoLM.d.ts → ThreeUsdRobotLoader-DrYXpMta.d.ts} +28 -4
- package/dist/chunk-ALC7RBKC.js +68 -0
- package/dist/chunk-ALC7RBKC.js.map +1 -0
- package/dist/{chunk-JN2QPDB3.js → chunk-HDZGWL6P.js} +36 -3
- package/dist/chunk-HDZGWL6P.js.map +1 -0
- package/dist/{chunk-YGJ23CG3.js → chunk-IAOPNN6V.js} +3 -66
- package/dist/chunk-IAOPNN6V.js.map +1 -0
- package/dist/{chunk-5ZPHZ5ZH.js → chunk-IT5RWB7A.js} +5 -4
- package/dist/chunk-IT5RWB7A.js.map +1 -0
- package/dist/{chunk-FUVHAORT.js → chunk-KRT4NL3H.js} +190 -126
- package/dist/chunk-KRT4NL3H.js.map +1 -0
- package/dist/{chunk-GRJGPHLW.js → chunk-WQRP5IDJ.js} +382 -59
- package/dist/chunk-WQRP5IDJ.js.map +1 -0
- package/dist/chunk-ZQXYVBQI.js +154 -0
- package/dist/chunk-ZQXYVBQI.js.map +1 -0
- package/dist/core.d.ts +5 -4
- package/dist/core.js +5 -3
- package/dist/extras.d.ts +2 -2
- package/dist/helpers.d.ts +2 -2
- package/dist/helpers.js +3 -2
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +61 -8
- package/dist/index.js +10 -8
- package/dist/index.js.map +1 -1
- package/dist/nodes.d.ts +4 -4
- package/dist/{parseMdl-vfzBGoMr.d.ts → parseMdl-M862hSal.d.ts} +1 -29
- package/dist/react.d.ts +5 -5
- package/dist/react.js +6 -4
- package/dist/react.js.map +1 -1
- package/dist/rendering.d.ts +114 -0
- package/dist/rendering.js +174 -0
- package/dist/rendering.js.map +1 -0
- package/dist/usdGeomCamera-BEsGuz7m.d.ts +53 -0
- package/dist/{buildKinematicTree-Q9JOjAjM.d.ts → usdLux-BqQlSOwG.d.ts} +108 -1
- package/package.json +5 -1
- package/dist/chunk-5ZPHZ5ZH.js.map +0 -1
- package/dist/chunk-FUVHAORT.js.map +0 -1
- package/dist/chunk-GRJGPHLW.js.map +0 -1
- package/dist/chunk-JN2QPDB3.js.map +0 -1
- package/dist/chunk-YGJ23CG3.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/kinematics/transforms.ts"],"names":[],"mappings":"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","file":"chunk-IAOPNN6V.js","sourcesContent":["/**\n * Minimal 4×4 matrix math, Three.js-independent.\n *\n * ## Convention\n *\n * A {@link Mat4} is a flat 16-element array in **column-major** order — the\n * exact layout of `THREE.Matrix4.elements`, so a `Mat4` can be handed to\n * `matrix4.fromArray(m)` with no transposition. Transforms use the\n * column-vector convention `v' = M · v`; the translation lives at indices\n * `[12, 13, 14]`.\n *\n * Conveniently, OpenUSD stores `GfMatrix4d` **row-major** with a row-vector\n * convention (`v' = v · M`). The two raw 16-number arrays for the *same*\n * transform are therefore bit-identical, which is why {@link fromUsdMatrix} is\n * a plain copy. See the module test for a worked example.\n */\n\nimport { Quat, UsdMatrix, type Vec3 } from \"../parser/ast.js\";\n\n/** Column-major 4×4 matrix (Three.js `elements` layout). */\nexport type Mat4 = number[];\n\nexport const DEG2RAD = Math.PI / 180;\nexport const RAD2DEG = 180 / Math.PI;\n\nexport function identity4(): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Matrix product `a · b` (column-major), matching `THREE.Matrix4.multiplyMatrices`. */\nexport function multiply(a: Mat4, b: Mat4): Mat4 {\n const a11 = a[0]!,\n a21 = a[1]!,\n a31 = a[2]!,\n a41 = a[3]!;\n const a12 = a[4]!,\n a22 = a[5]!,\n a32 = a[6]!,\n a42 = a[7]!;\n const a13 = a[8]!,\n a23 = a[9]!,\n a33 = a[10]!,\n a43 = a[11]!;\n const a14 = a[12]!,\n a24 = a[13]!,\n a34 = a[14]!,\n a44 = a[15]!;\n\n const b11 = b[0]!,\n b21 = b[1]!,\n b31 = b[2]!,\n b41 = b[3]!;\n const b12 = b[4]!,\n b22 = b[5]!,\n b32 = b[6]!,\n b42 = b[7]!;\n const b13 = b[8]!,\n b23 = b[9]!,\n b33 = b[10]!,\n b43 = b[11]!;\n const b14 = b[12]!,\n b24 = b[13]!,\n b34 = b[14]!,\n b44 = b[15]!;\n\n return [\n a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41,\n a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41,\n a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41,\n a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41,\n\n a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42,\n a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42,\n a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42,\n a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42,\n\n a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43,\n a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43,\n a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43,\n a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43,\n\n a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44,\n a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44,\n a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44,\n a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44,\n ];\n}\n\n/** Product of a list of matrices, left-to-right (`m[0] · m[1] · …`). */\nexport function multiplyAll(matrices: Mat4[]): Mat4 {\n let m = identity4();\n for (const next of matrices) m = multiply(m, next);\n return m;\n}\n\n/** Inverse (column-major), matching `THREE.Matrix4.invert`. Throws if singular. */\nexport function invert(m: Mat4): Mat4 {\n const n11 = m[0]!,\n n21 = m[1]!,\n n31 = m[2]!,\n n41 = m[3]!;\n const n12 = m[4]!,\n n22 = m[5]!,\n n32 = m[6]!,\n n42 = m[7]!;\n const n13 = m[8]!,\n n23 = m[9]!,\n n33 = m[10]!,\n n43 = m[11]!;\n const n14 = m[12]!,\n n24 = m[13]!,\n n34 = m[14]!,\n n44 = m[15]!;\n\n const t11 =\n n23 * n34 * n42 -\n n24 * n33 * n42 +\n n24 * n32 * n43 -\n n22 * n34 * n43 -\n n23 * n32 * n44 +\n n22 * n33 * n44;\n const t12 =\n n14 * n33 * n42 -\n n13 * n34 * n42 -\n n14 * n32 * n43 +\n n12 * n34 * n43 +\n n13 * n32 * n44 -\n n12 * n33 * n44;\n const t13 =\n n13 * n24 * n42 -\n n14 * n23 * n42 +\n n14 * n22 * n43 -\n n12 * n24 * n43 -\n n13 * n22 * n44 +\n n12 * n23 * n44;\n const t14 =\n n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34;\n\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0) throw new Error(\"cannot invert a singular matrix\");\n const idet = 1 / det;\n\n return [\n t11 * idet,\n (n24 * n33 * n41 -\n n23 * n34 * n41 -\n n24 * n31 * n43 +\n n21 * n34 * n43 +\n n23 * n31 * n44 -\n n21 * n33 * n44) *\n idet,\n (n22 * n34 * n41 -\n n24 * n32 * n41 +\n n24 * n31 * n42 -\n n21 * n34 * n42 -\n n22 * n31 * n44 +\n n21 * n32 * n44) *\n idet,\n (n23 * n32 * n41 -\n n22 * n33 * n41 -\n n23 * n31 * n42 +\n n21 * n33 * n42 +\n n22 * n31 * n43 -\n n21 * n32 * n43) *\n idet,\n\n t12 * idet,\n (n13 * n34 * n41 -\n n14 * n33 * n41 +\n n14 * n31 * n43 -\n n11 * n34 * n43 -\n n13 * n31 * n44 +\n n11 * n33 * n44) *\n idet,\n (n14 * n32 * n41 -\n n12 * n34 * n41 -\n n14 * n31 * n42 +\n n11 * n34 * n42 +\n n12 * n31 * n44 -\n n11 * n32 * n44) *\n idet,\n (n12 * n33 * n41 -\n n13 * n32 * n41 +\n n13 * n31 * n42 -\n n11 * n33 * n42 -\n n12 * n31 * n43 +\n n11 * n32 * n43) *\n idet,\n\n t13 * idet,\n (n14 * n23 * n41 -\n n13 * n24 * n41 -\n n14 * n21 * n43 +\n n11 * n24 * n43 +\n n13 * n21 * n44 -\n n11 * n23 * n44) *\n idet,\n (n12 * n24 * n41 -\n n14 * n22 * n41 +\n n14 * n21 * n42 -\n n11 * n24 * n42 -\n n12 * n21 * n44 +\n n11 * n22 * n44) *\n idet,\n (n13 * n22 * n41 -\n n12 * n23 * n41 -\n n13 * n21 * n42 +\n n11 * n23 * n42 +\n n12 * n21 * n43 -\n n11 * n22 * n43) *\n idet,\n\n t14 * idet,\n (n13 * n24 * n31 -\n n14 * n23 * n31 +\n n14 * n21 * n33 -\n n11 * n24 * n33 -\n n13 * n21 * n34 +\n n11 * n23 * n34) *\n idet,\n (n14 * n22 * n31 -\n n12 * n24 * n31 -\n n14 * n21 * n32 +\n n11 * n24 * n32 +\n n12 * n21 * n34 -\n n11 * n22 * n34) *\n idet,\n (n12 * n23 * n31 -\n n13 * n22 * n31 +\n n13 * n21 * n32 -\n n11 * n23 * n32 -\n n12 * n21 * n33 +\n n11 * n22 * n33) *\n idet,\n ];\n}\n\nexport function makeTranslation([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n x, y, z, 1,\n ];\n}\n\nexport function makeScale([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n x, 0, 0, 0,\n 0, y, 0, 0,\n 0, 0, z, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationX(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, c, s, 0,\n 0, -s, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationY(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, 0, -s, 0,\n 0, 1, 0, 0,\n s, 0, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationZ(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, s, 0, 0,\n -s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Rotation matrix from a (normalized) quaternion, matching `THREE.Matrix4.compose`. */\nexport function makeRotationFromQuat(q: Quat): Mat4 {\n let x = q.imaginary[0];\n let y = q.imaginary[1];\n let z = q.imaginary[2];\n let w = q.real;\n const len = Math.hypot(x, y, z, w);\n if (len > 0 && Math.abs(len - 1) > 1e-9) {\n x /= len;\n y /= len;\n z /= len;\n w /= len;\n }\n\n const x2 = x + x,\n y2 = y + y,\n z2 = z + z;\n const xx = x * x2,\n xy = x * y2,\n xz = x * z2;\n const yy = y * y2,\n yz = y * z2,\n zz = z * z2;\n const wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n // biome-ignore format: matrix layout\n return [\n 1 - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1 - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1 - (xx + yy), 0,\n 0, 0, 0, 1,\n ];\n}\n\n/**\n * Euler rotation matrix for the given axis order (e.g. `\"XYZ\"`), with per-axis\n * angles in **radians** indexed by axis (`angles[0]`=X, `[1]`=Y, `[2]`=Z).\n *\n * Follows OpenUSD's `rotate<ORDER>` semantics: the first listed axis is applied\n * first to the geometry, so `\"XYZ\"` yields `Rz · Ry · Rx` in column-vector form.\n */\nexport function makeEuler(angles: Vec3, order: string): Mat4 {\n const perAxis: Record<string, Mat4> = {\n X: makeRotationX(angles[0]),\n Y: makeRotationY(angles[1]),\n Z: makeRotationZ(angles[2]),\n };\n let m = identity4();\n for (let i = order.length - 1; i >= 0; i--) {\n const axis = perAxis[order[i]!];\n if (!axis)\n throw new Error(\n `invalid euler axis ${JSON.stringify(order[i])} in order ${JSON.stringify(order)}`,\n );\n m = multiply(m, axis);\n }\n return m;\n}\n\n/**\n * Copy a USD matrix into a {@link Mat4}. USD's row-major storage is identical to\n * Three.js column-major elements for the same transform (see module docs), so\n * this is a straight copy after a dimension check.\n */\nexport function fromUsdMatrix(m: UsdMatrix): Mat4 {\n if (m.dim !== 4 || m.values.length !== 16) {\n throw new Error(`expected a 4x4 matrix but got dim=${m.dim}, length=${m.values.length}`);\n }\n return [...m.values];\n}\n\n/** Extract the translation component `[x, y, z]` from a {@link Mat4}. */\nexport function getTranslation(m: Mat4): Vec3 {\n return [m[12]!, m[13]!, m[14]!];\n}\n\n/** Copy a {@link Mat4} into a USD `matrix4d` — same flat layout (see module docs). */\nexport function toUsdMatrix(m: Mat4): UsdMatrix {\n if (m.length !== 16) {\n throw new Error(`expected 16 matrix elements but got ${m.length}`);\n }\n return new UsdMatrix([...m], 4);\n}\n\n/**\n * Decompose a rigid transform into translation + orientation (M13 export).\n *\n * The rotation basis is orthonormalized (Gram-Schmidt, right-handed) before\n * quaternion extraction; `rigid` reports whether the input already was rigid\n * within tolerance, so callers can warn that scale/shear/reflection was\n * discarded.\n */\nexport function decomposeRigid(m: Mat4): { position: Vec3; orientation: Quat; rigid: boolean } {\n const position: Vec3 = [m[12]!, m[13]!, m[14]!];\n\n // Rotation-block basis columns.\n const b0: Vec3 = [m[0]!, m[1]!, m[2]!];\n const b1: Vec3 = [m[4]!, m[5]!, m[6]!];\n const b2: Vec3 = [m[8]!, m[9]!, m[10]!];\n\n const EPS = 1e-6;\n const rigid =\n Math.abs(norm(b0) - 1) < EPS &&\n Math.abs(norm(b1) - 1) < EPS &&\n Math.abs(norm(b2) - 1) < EPS &&\n Math.abs(dot(b0, b1)) < EPS &&\n Math.abs(dot(b1, b2)) < EPS &&\n Math.abs(dot(b0, b2)) < EPS &&\n dot(cross(b0, b1), b2) > 0; // right-handed (no reflection)\n\n const c0 = normalizeVec(b0);\n const c1 = normalizeVec(subVec(b1, scaleVec(c0, dot(c0, b1))));\n const c2 = cross(c0, c1);\n\n // Row-major rotation entries from the orthonormal columns.\n const r11 = c0[0],\n r12 = c1[0],\n r13 = c2[0];\n const r21 = c0[1],\n r22 = c1[1],\n r23 = c2[1];\n const r31 = c0[2],\n r32 = c1[2],\n r33 = c2[2];\n\n // Matrix → quaternion (Shepperd's method, as in THREE.Quaternion.setFromRotationMatrix).\n const trace = r11 + r22 + r33;\n let w: number;\n let x: number;\n let y: number;\n let z: number;\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n w = 0.25 / s;\n x = (r32 - r23) * s;\n y = (r13 - r31) * s;\n z = (r21 - r12) * s;\n } else if (r11 > r22 && r11 > r33) {\n const s = 2 * Math.sqrt(1 + r11 - r22 - r33);\n w = (r32 - r23) / s;\n x = 0.25 * s;\n y = (r12 + r21) / s;\n z = (r13 + r31) / s;\n } else if (r22 > r33) {\n const s = 2 * Math.sqrt(1 + r22 - r11 - r33);\n w = (r13 - r31) / s;\n x = (r12 + r21) / s;\n y = 0.25 * s;\n z = (r23 + r32) / s;\n } else {\n const s = 2 * Math.sqrt(1 + r33 - r11 - r22);\n w = (r21 - r12) / s;\n x = (r13 + r31) / s;\n y = (r23 + r32) / s;\n z = 0.25 * s;\n }\n\n return { position, orientation: new Quat(w, [x, y, z]), rigid };\n}\n\n// --- small Vec3 helpers for decomposeRigid ---------------------------------\n\nfunction dot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction norm(v: Vec3): number {\n return Math.hypot(v[0], v[1], v[2]);\n}\n\nfunction subVec(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\nfunction scaleVec(v: Vec3, s: number): Vec3 {\n return [v[0] * s, v[1] * s, v[2] * s];\n}\n\nfunction normalizeVec(v: Vec3): Vec3 {\n const n = norm(v);\n return n > 0 ? scaleVec(v, 1 / n) : [1, 0, 0];\n}\n\nfunction cross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { buildKinematicTree, ARTICULATION_ROOT_API, COLLISION_API, MESH_COLLISION_API, PHYSICS_MATERIAL_API, driveKindFor, jointValueFromSI, NEWTON_MIMIC_API, getMaterialSubsets,
|
|
2
|
-
import { multiply, invert, identity4, toUsdMatrix, decomposeRigid } from './chunk-YGJ23CG3.js';
|
|
1
|
+
import { buildKinematicTree, ARTICULATION_ROOT_API, COLLISION_API, MESH_COLLISION_API, PHYSICS_MATERIAL_API, driveKindFor, jointValueFromSI, NEWTON_MIMIC_API, getMaterialSubsets, RIGID_BODY_API, MASS_API } from './chunk-KRT4NL3H.js';
|
|
3
2
|
import { resolveBoundMaterial } from './chunk-PPPRB6KE.js';
|
|
3
|
+
import { computeLocalTransform } from './chunk-ZQXYVBQI.js';
|
|
4
|
+
import { multiply, invert, identity4, toUsdMatrix, decomposeRigid } from './chunk-IAOPNN6V.js';
|
|
4
5
|
import { Quat, AssetPath } from './chunk-JGIVJXBU.js';
|
|
5
6
|
import { strToU8, zipSync } from 'fflate';
|
|
6
7
|
|
|
@@ -1007,5 +1008,5 @@ function validateRobotDescription(desc, options = {}) {
|
|
|
1007
1008
|
}
|
|
1008
1009
|
|
|
1009
1010
|
export { PACKAGE_NAME, VERSION, exportRobotUsda, stageGeometryProvider, validateRobotDescription, writeUsdz };
|
|
1010
|
-
//# sourceMappingURL=chunk-
|
|
1011
|
-
//# sourceMappingURL=chunk-
|
|
1011
|
+
//# sourceMappingURL=chunk-IT5RWB7A.js.map
|
|
1012
|
+
//# sourceMappingURL=chunk-IT5RWB7A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/export/exportRobot.ts","../src/export/GeometryProvider.ts","../src/export/writeUsdz.ts","../src/robot/RobotValidator.ts"],"names":["attr"],"mappings":";;;;;;;;AACO,IAAM,YAAA,GAAe;AAGrB,IAAM,OAAA,GAAU;;;ACsDvB,IAAM,sBAAA,GAAyB,sBAAA;AAsB/B,IAAM,oBAAA,GAAkD;AAAA,EACtD,KAAA,EAAO,mBAAA;AAAA,EACP,QAAA,EAAU,sBAAA;AAAA,EACV,UAAA,EAAY,sBAAA;AAAA,EACZ,SAAA,EAAW;AACb,CAAA;AAGO,SAAS,eAAA,CACd,IAAA,EACA,OAAA,GAA8B,EAAC,EACrB;AACV,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAc,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,OAAO,kBAAA,CAAmB,IAAA,EAAM,EAAE,MAAA,EAAQ,MAAM,CAAA;AAEtD,EAAA,MAAM,YAAY,YAAA,CAAa,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,QAAQ,OAAO,CAAA;AAGxE,EAAA,MAAM,KAAA,GAAQ,cAAc,IAAI,CAAA;AAChC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAC1C,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,EAAG,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,GAAA,EAAK,CAAA,MAAA,EAAS,GAAG,GAAG,CAAC,CAAA;AACzF,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;AAC3C,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,EAAG,UAAA,CAAW,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,GAAA,EAAK,CAAA,OAAA,EAAU,GAAG,GAAG,CAAC,CAAA;AAC5F,EAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAAgB,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAKrE,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAgB,IAAA,CAAK,MAAM,GAAG,CAAA,EAAG,kBAAkB,SAAA,EAAU;AACpF,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAkB;AAC1C,EAAA,KAAA,MAAW,GAAA,IAAO,KAAK,KAAA,EAAO;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,IAAA,IAAQ,IAAA,CAAK,kBAAkB,IAAA,EAAM;AACvD,MAAA,MAAM,YAAY,IAAA,CAAK,SAAA,GAAY,KAAK,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,GAAI,MAAA;AACjE,MAAA,WAAA,CAAY,GAAA;AAAA,QACV,GAAA;AAAA,QACA,SAAA,GACI,QAAA,CAAS,SAAA,CAAU,WAAA,EAAa,MAAA,CAAO,UAAU,WAAW,CAAC,CAAA,GAC7D,aAAA,CAAc,GAAG;AAAA,OACvB;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAC5C,IAAA,MAAM,cAAc,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,MAAM,KAAK,SAAA,EAAU;AAC9D,IAAA,WAAA,CAAY,GAAA;AAAA,MACV,GAAA;AAAA,MACA,QAAA,CAAS,SAAS,WAAA,EAAa,KAAA,CAAM,WAAW,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,WAAW,CAAC;AAAA,KAC9E;AAAA,EACF;AACA,EAAA,KAAA,MAAW,GAAA,IAAO,KAAK,aAAA,EAAe,WAAA,CAAY,IAAI,GAAA,EAAK,aAAA,CAAc,GAAG,CAAC,CAAA;AAI7E,EAAA,MAAM,oBAAoB,IAAI,GAAA,CAAI,IAAA,CAAK,iBAAA,IAAqB,EAAE,CAAA;AAG9D,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAA0B;AACnD,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA4B;AAClD,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAmC;AAChE,EAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACpD,IAAA,MAAM,SAAS,OAAA,CAAQ,QAAA,GAAW,GAAA,EAAK,IAAI,KAAK,EAAC;AACjD,IAAA,YAAA,CAAa,GAAA,CAAI,KAAK,MAAM,CAAA;AAC5B,IAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,MAAA,IAAI,IAAA,CAAK,YAAY,CAAC,SAAA,CAAU,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACvD,QAAA,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,KAAK,QAAQ,CAAA;AAAA,MACjD;AACA,MAAA,IAAI,IAAA,CAAK,mBAAmB,CAAC,gBAAA,CAAiB,IAAI,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA,EAAG;AAC5E,QAAA,gBAAA,CAAiB,GAAA,CAAI,IAAA,CAAK,eAAA,CAAgB,IAAA,EAAM,KAAK,eAAe,CAAA;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,YAAY,SAAA,CAAU,IAAA,GAAO,CAAA,GAAI,KAAA,CAAM,OAAO,CAAA,GAAI,MAAA;AACxD,EAAA,MAAM,gBAAgB,aAAA,EAAc;AACpC,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,EAAA,KAAA,MAAW,IAAA,IAAQ,UAAU,IAAA,EAAK,gBAAiB,GAAA,CAAI,IAAA,EAAM,aAAA,CAAc,IAAI,CAAC,CAAA;AAChF,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KACpB,SAAA,GAAY,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,GAAK,MAAA;AAExE,EAAA,MAAM,mBAAmB,gBAAA,CAAiB,IAAA,GAAO,CAAA,GAAI,KAAA,CAAM,kBAAkB,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,uBAAuB,aAAA,EAAc;AAC3C,EAAA,MAAM,oBAAA,uBAA2B,GAAA,EAAoB;AACrD,EAAA,KAAA,MAAW,IAAA,IAAQ,gBAAA,CAAiB,IAAA,EAAK,EAAG;AAC1C,IAAA,oBAAA,CAAqB,GAAA,CAAI,IAAA,EAAM,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAAA,EAC3D;AACA,EAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,KAC3B,gBAAA,GACI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAA,EAAI,oBAAA,CAAqB,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,GACnE,MAAA;AAEN,EAAA,MAAM,KAAA,GAAQ,QAAQ,gBAAA,KAAqB,IAAA;AAC3C,EAAA,MAAM,WAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACpD,IAAA,MAAM,UAAA,GAAa,CAAC,cAAc,CAAA;AAClC,IAAA,IAAI,kBAAkB,GAAA,CAAI,GAAG,CAAA,EAAG,UAAA,CAAW,KAAK,qBAAqB,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAC3C,IAAA,IAAI,KAAA,EAAO,UAAA,CAAW,IAAA,CAAK,cAAc,CAAA;AACzC,IAAA,MAAM,gBAAgB,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,GAAI,QAAQ,qBAAA,GAAwB,MAAA;AACnF,IAAA,IAAI,aAAA,KAAkB,MAAA,EAAW,UAAA,CAAW,IAAA,CAAK,sBAAsB,CAAA;AACvE,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,aAAA,CAAc;AAAA,QACZ,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAAA,QACvB,KAAA,EAAO,WAAA,CAAY,GAAA,CAAI,GAAG,KAAK,SAAA,EAAU;AAAA,QACzC,UAAA;AAAA,QACA,MAAA,EAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,KAAK,EAAC;AAAA,QAClC,YAAA;AAAA,QACA,mBAAA;AAAA,QACA,IAAA;AAAA,QACA,GAAI,KAAK,QAAA,GAAW,EAAE,UAAU,IAAA,CAAK,QAAA,KAAa,EAAC;AAAA,QACnD,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,KAAkB;AAAC,OACxD;AAAA,KACH;AAAA,EACF;AACA,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACtD,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,IAAM,KAAA,CAAM,MAAA,KAAW,EAAA,IAAM,CAAC,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,EAAI;AAClF,MAAA,IAAA,CAAK,CAAA,OAAA,EAAU,GAAG,CAAA,qCAAA,CAAuC,CAAA;AACzD,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KACjB,aAAA,CAAc,IAAI,GAAG,CAAA,GAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA,GAAK,MAAA;AACpE,EAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,cAAA;AAAA,QACE,UAAA,CAAW,IAAI,GAAG,CAAA;AAAA,QAClB,GAAA;AAAA,QACA,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,QACf,QAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF;AACA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,QAAA,CAAS,KAAK,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,aAAA,EAAe,YAAY,CAAC,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,yBAAA,CAA0B,gBAAA,EAAkB,gBAAA,EAAkB,oBAAoB;AAAA,KACpF;AAAA,EACF;AAEA,EAAA,MAAM,iBAA2B,EAAC;AAClC,EAAA,MAAM,iBAAiC,EAAC;AACxC,EAAA,IAAI,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAChC,IAAA,cAAA,CAAe,KAAK,qBAAqB,CAAA;AACzC,IAAA,IAAI,OAAA,CAAQ,0BAA0B,MAAA,EAAW;AAC/C,MAAA,cAAA,CAAe,KAAK,sBAAsB,CAAA;AAC1C,MAAA,cAAA,CAAe,IAAA;AAAA,QACb,IAAA,CAAK,yCAAA,EAA2C,MAAA,EAAQ,OAAA,CAAQ,qBAAqB;AAAA,OACvF;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,cAAA,CAAe,KAAK,eAAe,CAAA;AACnC,IAAA,MAAM,eAAe,CAAC,GAAG,KAAK,KAAA,EAAO,GAAG,KAAK,aAAa,CAAA;AAC1D,IAAA,MAAM,gBAA0B,EAAC;AACjC,IAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAmC;AACpD,MAAA,IAAI,GAAA,IAAO,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA,EAAG,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA;AAAA,IAC3F,CAAA;AACA,IAAA,SAAA,CAAU,KAAK,SAAS,CAAA;AACxB,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,KAAA,EAAO,SAAA,CAAU,KAAK,KAAA,CAAM,OAAO,GAAG,aAAa,CAAA;AAC9E,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,UAAA,EAAY,SAAA,CAAU,QAAQ,CAAA;AAC1D,IAAA,KAAA,MAAW,YAAY,MAAA,CAAO,IAAA,CAAK,KAAK,MAAM,CAAA,YAAa,QAAQ,CAAA;AAEnE,IAAA,cAAA,CAAe,KAAK,GAAA,CAAI,0BAAA,EAA4B,aAAa,GAAA,CAAI,QAAQ,CAAC,CAAC,CAAA;AAC/E,IAAA,cAAA,CAAe,IAAA;AAAA,MACb,GAAA;AAAA,QACE,2BAAA;AAAA,QACA,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,GAAA,CAAI,GAAG,CAAC,CAAA,CAAE;AAAA;AACnE,KACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU,eAAe,MAAA,GAAS,CAAA,GAAI,EAAE,UAAA,EAAY,cAAA,KAAmB,EAAC;AAAA,IACxE,UAAA,EAAY,cAAA;AAAA,IACZ,QAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,MAAM,QAAA,GAAwB;AAAA,IAC5B,WAAA,EAAa,SAAA;AAAA,IACb,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,GAAI,KAAK,kBAAA,KAAuB,MAAA,GAC5B,EAAE,kBAAA,EAAoB,IAAA,CAAK,kBAAA,EAAmB,GAC9C,EAAC;AAAA,IACL,GAAI,KAAK,aAAA,KAAkB,MAAA,GAAY,EAAE,aAAA,EAAe,IAAA,CAAK,aAAA,EAAc,GAAI,EAAC;AAAA,IAChF,GAAI,KAAK,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,IAAA,CAAK,WAAA,EAAY,GAAI;AAAC,GAC5E;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,UAAU,KAAA,EAAO,CAAC,IAAI,CAAA,EAAE;AACnD;AAmBA,SAAS,cAAc,IAAA,EAA8B;AACnD,EAAA,MAAM,YAAY,aAAA,EAAc;AAChC,EAAA,MAAM,UAAA,GAA6B,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA;AAC5D,EAAA,IAAI,IAAA,CAAK,QAAA,EAAU,UAAA,CAAW,IAAA,CAAK,GAAG,SAAA,CAAU,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AACpF,EAAA,IAAI,IAAA,CAAK,kBAAkB,MAAA,EAAW;AACpC,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,yCAAA,EAA2C,MAAA,EAAQ,IAAA,CAAK,aAAa,CAAC,CAAA;AAAA,EAC7F;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,OAAA;AAAA,IACV,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAA,EAAU,EAAE,UAAA,EAAY,IAAA,CAAK,UAAA,EAAW;AAAA,IACxC,UAAA;AAAA,IACA,QAAA,EAAU,KAAK,MAAA,CAAO,GAAA;AAAA,MAAI,CAAC,IAAA,KACzB,aAAA,CAAc,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,mBAAmB;AAAA,KACvF;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AASA,SAAS,SAAA,CACP,QAAA,EACA,QAAA,EACA,IAAA,EACgB;AAChB,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,IAAI,QAAA,CAAS,IAAA,KAAS,MAAA,EAAW,GAAA,CAAI,IAAA,CAAK,KAAK,cAAA,EAAgB,OAAA,EAAS,QAAA,CAAS,IAAI,CAAC,CAAA;AACtF,EAAA,IAAI,QAAA,CAAS,OAAA,KAAY,MAAA,EAAW,GAAA,CAAI,IAAA,CAAK,KAAK,iBAAA,EAAmB,OAAA,EAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AAC/F,EAAA,IAAI,SAAS,YAAA,EAAc;AACzB,IAAA,GAAA,CAAI,KAAK,IAAA,CAAK,sBAAA,EAAwB,SAAA,EAAW,QAAA,CAAS,YAAY,CAAC,CAAA;AAAA,EACzE;AACA,EAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,IAAA,GAAA,CAAI,KAAK,IAAA,CAAK,yBAAA,EAA2B,QAAA,EAAU,QAAA,CAAS,eAAe,CAAC,CAAA;AAC5E,IAAA,GAAA,CAAI,IAAA,CAAK,KAAK,uBAAA,EAAyB,OAAA,EAAS,SAAS,aAAA,IAAiB,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAAA,EAC5F,CAAA,MAAA,IAAW,SAAS,aAAA,EAAe;AACjC,IAAA,IAAA,CAAK,CAAA,MAAA,EAAS,QAAQ,CAAA,gEAAA,CAAkE,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,aAAA,CACP,IAAA,EACA,IAAA,EACA,YAAA,EACA,mBAAA,EACU;AACV,EAAA,MAAM,aAA6B,EAAC;AACpC,EAAA,IAAI,IAAA,CAAK,WAAW,UAAA,CAAW,IAAA,CAAK,GAAG,cAAA,CAAe,IAAA,CAAK,SAAS,CAAC,CAAA;AACrE,EAAA,UAAA,CAAW,IAAA;AAAA,IACT,SAAA,CAAU,kBAAA,EAAoB,KAAA,EAAO,IAAA,CAAK,gBAAgB,CAAA;AAAA,IAC1D,SAAA,CAAU,mBAAA,EAAqB,KAAA,EAAO,IAAA,CAAK,iBAAiB,CAAA;AAAA,IAC5D,SAAA,CAAU,QAAA,EAAU,SAAA,EAAW,IAAA,CAAK,MAAM;AAAA,GAC5C;AACA,EAAA,IAAI,IAAA,CAAK,SAAS,UAAA,CAAW,IAAA,CAAK,UAAU,SAAA,EAAW,UAAA,EAAY,IAAA,CAAK,OAAO,CAAC,CAAA;AAChF,EAAA,IAAI,KAAK,EAAA,EAAI;AACX,IAAA,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,aAAA,EAAe,YAAA,EAAc,IAAA,CAAK,IAAI,EAAE,aAAA,EAAe,QAAA,EAAU,CAAC,CAAA;AAAA,EAC9F;AACA,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,UAAA,CAAW,IAAA,CAAK,UAAU,uBAAA,EAAyB,SAAA,EAAW,CAAC,IAAA,CAAK,YAAY,CAAC,CAAC,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,IAAA,CAAK,aAAa,UAAA,CAAW,IAAA,CAAK,KAAK,aAAA,EAAe,MAAA,EAAQ,IAAI,CAAC,CAAA;AACvE,EAAA,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,mBAAA,EAAqB,MAAM,CAAC,CAAA;AAEzD,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,IAAA,UAAA,CAAW,KAAK,aAAa,CAAA;AAG7B,IAAA,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,SAAA,EAAW,OAAO,CAAC,CAAA;AAChD,IAAA,IAAI,KAAK,sBAAA,EAAwB;AAC/B,MAAA,UAAA,CAAW,KAAK,kBAAkB,CAAA;AAClC,MAAA,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,uBAAA,EAAyB,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAAA,IACpF;AAAA,EACF;AACA,EAAA,MAAM,UAAU,IAAA,CAAK,QAAA,GAAW,aAAa,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,GAAI,MAAA;AACnE,EAAA,IAAI,OAAA,aAAoB,IAAA,CAAK,GAAA,CAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAA;AAC/D,EAAA,MAAM,cAAA,GACJ,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,kBAC9B,mBAAA,CAAoB,IAAA,CAAK,eAAA,CAAgB,IAAI,CAAA,GAC7C,MAAA;AACN,EAAA,IAAI,cAAA,aAA2B,IAAA,CAAK,GAAA,CAAI,4BAA4B,CAAC,cAAc,CAAC,CAAC,CAAA;AACrF,EAAA,IAAI,OAAA,IAAW,cAAA,EAAgB,UAAA,CAAW,IAAA,CAAK,oBAAoB,CAAA;AAEnE,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,MAAA;AAAA,IACV,IAAA;AAAA,IACA,UAAU,UAAA,CAAW,MAAA,GAAS,IAAI,EAAE,UAAA,KAAe,EAAC;AAAA,IACpD,UAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;AAOA,SAAS,yBAAA,CACP,SAAA,EACA,SAAA,EACA,KAAA,EACU;AACV,EAAA,MAAM,WAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,SAAA,EAAW;AACvC,IAAA,QAAA,CAAS,KAAK,wBAAA,CAAyB,KAAA,CAAM,IAAI,GAAG,CAAA,EAAI,QAAQ,CAAC,CAAA;AAAA,EACnE;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,UAAU,EAAC;AAAA,IACX,YAAY,EAAC;AAAA,IACb,QAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,wBAAA,CAAyB,MAAc,QAAA,EAA2C;AACzF,EAAA,MAAM,aAA6B,EAAC;AACpC,EAAA,IAAI,QAAA,CAAS,mBAAmB,MAAA,EAAW;AACzC,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,wBAAA,EAA0B,OAAA,EAAS,QAAA,CAAS,cAAc,CAAC,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,QAAA,CAAS,oBAAoB,MAAA,EAAW;AAC1C,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,yBAAA,EAA2B,OAAA,EAAS,QAAA,CAAS,eAAe,CAAC,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,QAAA,CAAS,gBAAgB,MAAA,EAAW;AACtC,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,qBAAA,EAAuB,OAAA,EAAS,QAAA,CAAS,WAAW,CAAC,CAAA;AAAA,EAC5E;AACA,EAAA,IAAI,QAAA,CAAS,YAAY,MAAA,EAAW;AAClC,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,iBAAA,EAAmB,OAAA,EAAS,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,EACpE;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,UAAA;AAAA,IACV,IAAA;AAAA,IACA,QAAA,EAAU,EAAE,UAAA,EAAY,CAAC,oBAAoB,CAAA,EAAE;AAAA,IAC/C,UAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;AAOA,SAAS,cAAA,CACP,SAAA,EACA,SAAA,EACA,aAAA,EACA,YAAA,EACU;AACV,EAAA,MAAM,WAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,SAAA,EAAW;AACvC,IAAA,QAAA,CAAS,IAAA,CAAK,iBAAA,CAAkB,aAAA,CAAc,GAAA,CAAI,GAAG,GAAI,QAAA,EAAU,YAAA,CAAa,GAAG,CAAE,CAAC,CAAA;AAAA,EACxF;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,OAAA;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,UAAU,EAAC;AAAA,IACX,YAAY,EAAC;AAAA,IACb,QAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AAGA,IAAM,cAAA,GAGF;AAAA,EACF,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,qBAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,aAAA;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,sBAAA;AAAA,IACP,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,aAAA;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,eAAA;AAAA,IACP,SAAA,EAAW,UAAA;AAAA,IACX,MAAA,EAAQ,aAAA;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,gBAAA;AAAA,IACP,SAAA,EAAW,OAAA;AAAA,IACX,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,kBAAA;AAAA,IACP,SAAA,EAAW,OAAA;AAAA,IACX,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,iBAAA;AAAA,IACP,SAAA,EAAW,OAAA;AAAA,IACX,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,kBAAA;AAAA,IACP,SAAA,EAAW,OAAA;AAAA,IACX,MAAA,EAAQ,WAAA;AAAA,IACR,UAAA,EAAY,OAAA;AAAA,IACZ,UAAA,EAAY;AAAA;AAEhB,CAAA;AAEA,SAAS,iBAAA,CAAkB,IAAA,EAAc,QAAA,EAA0B,QAAA,EAA4B;AAC7F,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,IAAY,EAAC;AACvC,EAAA,MAAM,WAAA,GAA8B,CAAC,YAAA,CAAa,SAAA,EAAW,mBAAmB,CAAC,CAAA;AAIjF,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAyB,KAAA,KAAqB;AAC3D,IAAA,MAAM,MAAA,GAAS,eAAe,OAAO,CAAA;AACrC,IAAA,MAAM,WAAA,GAAc,SAAS,OAAO,CAAA;AACpC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,WAAA,KAAgB,MAAA,EAAW;AACtD,IAAA,MAAM,OAAO,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AACvD,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,IAAA,CAAK,WAAA,GAAc,CAAC,CAAA,EAAG,QAAQ,IAAI,OAAO,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IACtE;AACA,IAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,EACvB,CAAA;AACA,EAAA,KAAA,CAAM,OAAA,EAAS,SAAS,YAAY,CAAA;AACpC,EAAA,KAAA,CAAM,WAAA,EAAa,SAAS,QAAQ,CAAA;AACpC,EAAA,KAAA,CAAM,WAAA,EAAa,SAAS,SAAS,CAAA;AACrC,EAAA,KAAA,CAAM,SAAA,EAAW,SAAS,OAAO,CAAA;AACjC,EAAA,KAAA,CAAM,UAAA,EAAY,SAAS,aAAa,CAAA;AACxC,EAAA,KAAA,CAAM,QAAQ,CAAA;AACd,EAAA,KAAA,CAAM,WAAW,CAAA;AACjB,EAAA,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,iBAAA,EAAmB,OAAA,EAAS,MAAS,CAAC,CAAA;AAE5D,EAAA,MAAM,QAAA,GAAuB,CAAC,UAAA,CAAW,gBAAA,EAAkB,WAAW,CAAC,CAAA;AACvE,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AAC9C,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,IAAA,QAAA,CAAS,IAAA;AAAA,MACP,WAAW,UAAA,EAAY;AAAA,QACrB,YAAA,CAAa,WAAW,yBAAyB,CAAA;AAAA,QACjD,IAAA,CAAK,gBAAA,EAAkB,QAAA,EAAU,IAAI,CAAA;AAAA,QACrC,IAAA,CAAK,gBAAA,EAAkB,QAAA,EAAU,MAAS;AAAA,OAC3C;AAAA,KACH;AACA,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,IAAI,CAAA,IAAK,cAAA,EAAgB;AAC5C,MAAA,QAAA,CAAS,IAAA,CAAK,kBAAA,CAAmB,OAAA,EAAS,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,IAC3D;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,iBAAA,EAAmB,OAAA,EAAS,MAAS,CAAA;AACjE,EAAA,cAAA,CAAe,WAAA,GAAc,CAAC,CAAA,EAAG,QAAQ,CAAA,+BAAA,CAAiC,CAAA;AAE1E,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,UAAA;AAAA,IACV,IAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,UAAA,EAAY,CAAC,cAAc,CAAA;AAAA,IAC3B,QAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AAGA,SAAS,kBAAA,CAAmB,OAAA,EAAyB,IAAA,EAAc,QAAA,EAA4B;AAC7F,EAAA,MAAM,MAAA,GAAS,eAAe,OAAO,CAAA;AACrC,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,WAAA,EAAa,QAAA,EAAU,MAAS,CAAA;AAChD,EAAA,EAAA,CAAG,WAAA,GAAc,CAAC,CAAA,EAAG,QAAQ,CAAA,wBAAA,CAA0B,CAAA;AACvD,EAAA,OAAO,UAAA,CAAW,CAAA,EAAG,OAAO,CAAA,OAAA,CAAA,EAAW;AAAA,IACrC,YAAA,CAAa,WAAW,cAAc,CAAA;AAAA,IACtC,KAAK,aAAA,EAAe,OAAA,EAAS,IAAI,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,IAChD,YAAA,CAAa,yBAAA,EAA2B,MAAA,CAAO,UAAU,CAAA;AAAA,IACzD,EAAA;AAAA,IACA,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,YAAY,MAAS;AAAA,GACjD,CAAA;AACH;AAEA,SAAS,UAAA,CAAW,MAAc,UAAA,EAAsC;AACtE,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,QAAA;AAAA,IACV,IAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,UAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;AAGA,SAAS,eAAe,CAAA,EAAyB;AAC/C,EAAA,OAAO;AAAA,IACL,IAAA,CAAK,mBAAA,EAAqB,UAAA,EAAY,WAAA,CAAY,CAAC,CAAC,CAAA;AAAA,IACpD,UAAU,cAAA,EAAgB,OAAA,EAAS,CAAC,mBAAmB,CAAA,EAAG,QAAW,SAAS;AAAA,GAChF;AACF;AAMA,SAAS,eACP,IAAA,EACA,GAAA,EACA,OACA,QAAA,EACA,SAAA,EACA,OACA,IAAA,EACU;AACV,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA;AACpC,EAAA,MAAM,UAAU,IAAA,KAAS,SAAA;AACzB,EAAA,MAAM,aAA6B,EAAC;AACpC,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,EAAA,EAAI,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,CAAC,QAAA,CAAS,KAAA,CAAM,MAAM,CAAC,CAAC,CAAC,CAAA;AACvF,EAAA,UAAA,CAAW,IAAA,CAAK,IAAI,eAAA,EAAiB,CAAC,SAAS,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS,UAAA,CAAW,KAAK,YAAA,CAAa,cAAA,EAAgB,KAAA,CAAM,IAAI,CAAC,CAAA;AACpF,EAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAW;AAC7B,IAAA,UAAA,CAAW,IAAA,CAAK,KAAK,oBAAA,EAAsB,OAAA,EAAS,iBAAiB,OAAA,EAAS,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,EAC7F;AACA,EAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAW;AAC7B,IAAA,UAAA,CAAW,IAAA,CAAK,KAAK,oBAAA,EAAsB,OAAA,EAAS,iBAAiB,OAAA,EAAS,KAAA,CAAM,KAAK,CAAC,CAAC,CAAA;AAAA,EAC7F;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,CAAC,CAAA,EAAG,CAAC,CAAA,EAAY;AACnC,IAAA,MAAM,KAAA,GAAQ,KAAA,KAAU,CAAA,GAAI,KAAA,CAAM,cAAc,KAAA,CAAM,WAAA;AACtD,IAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,KAAA,EAAM,GAAI,eAAe,KAAK,CAAA;AAC7D,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,CAAA,OAAA,EAAU,GAAG,CAAA,aAAA,EAAgB,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAAA,IACnF;AACA,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAA,EAAI,SAAA,EAAW,QAAQ,CAAC,CAAA;AACrE,IAAA,UAAA,CAAW,KAAK,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAA,EAAI,OAAA,EAAS,WAAW,CAAC,CAAA;AAAA,EACxE;AAGA,EAAA,IAAI,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAa,KAAA,CAAM,YAAA,EAAc;AAC1D,IAAA,MAAM,KAAA,GAAQ,IAAA;AAAA,MACZ,SAAS,IAAI,CAAA,iBAAA,CAAA;AAAA,MACb,OAAA;AAAA,MACA,MAAM,YAAA,KAAiB,MAAA,GAAY,iBAAiB,OAAA,EAAS,KAAA,CAAM,YAAY,CAAA,GAAI;AAAA,KACrF;AACA,IAAA,IAAI,MAAM,YAAA,EAAc;AACtB,MAAA,KAAA,CAAM,cAAc,IAAI,GAAA;AAAA,QACtB,MAAM,YAAA,CAAa,KAAA,CAAM,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AAAA,UACrC,CAAA;AAAA,UACA,iBAAiB,OAAA,EAAS,KAAA,CAAM,aAAc,MAAA,CAAO,CAAC,KAAK,CAAC;AAAA,SAC7D;AAAA,OACH;AAAA,IACF;AACA,IAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AACrB,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AAAA,EAChD;AAEA,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,KAAA;AAChB,IAAA,IAAI,CAAA,CAAE,mBAAmB,MAAA,EAAW;AAClC,MAAA,UAAA,CAAW,IAAA;AAAA,QACT,IAAA;AAAA,UACE,SAAS,IAAI,CAAA,uBAAA,CAAA;AAAA,UACb,OAAA;AAAA,UACA,gBAAA,CAAiB,OAAA,EAAS,CAAA,CAAE,cAAc;AAAA;AAC5C,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,cAAc,MAAA,EAAW;AAC7B,MAAA,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,MAAA,EAAS,IAAI,sBAAsB,OAAA,EAAS,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,IAC/E;AACA,IAAA,IAAI,CAAA,CAAE,YAAY,MAAA,EAAW;AAC3B,MAAA,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,MAAA,EAAS,IAAI,oBAAoB,OAAA,EAAS,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,IAC3E;AACA,IAAA,IAAI,CAAA,CAAE,aAAa,MAAA,EAAW;AAC5B,MAAA,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,MAAA,EAAS,IAAI,qBAAqB,OAAA,EAAS,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IAC7E;AACA,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAE,CAAA;AAAA,EAC3C;AAKA,EAAA,IAAI,MAAM,KAAA,EAAO;AACf,IAAA,MAAM,UAAA,GAAa,SAAA,CAAU,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,IAAA,CAAK,UAAU,GAAG,CAAA,iBAAA,EAAoB,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,gCAAA,CAAkC,CAAA;AAAA,IAC3F,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,KAAK,gBAAgB,CAAA;AAChC,MAAA,UAAA,CAAW,KAAK,GAAA,CAAI,mBAAA,EAAqB,CAAC,UAAU,CAAC,CAAC,CAAA;AACtD,MAAA,UAAA,CAAW,KAAK,IAAA,CAAK,mBAAA,EAAqB,SAAS,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,CAAA;AAC1E,MAAA,UAAA,CAAW,IAAA;AAAA,QACT,IAAA,CAAK,qBAAqB,OAAA,EAAS,gBAAA,CAAiB,SAAS,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC;AAAA,OAClF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,UAAA,CAAW,KAAK,eAAe,CAAA;AAC/B,IAAA,IAAI,KAAA,CAAM,SAAS,OAAA,EAAS;AAC1B,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,KAAS,WAAA,GAAc,OAAA,GAAU,KAAA;AACtD,MAAA,UAAA,CAAW,IAAA;AAAA,QACT,SAAA,CAAU,gCAAA,EAAkC,OAAA,EAAS,CAAC,CAAA,EAAG,MAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC;AAAA,OACjF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,QAAA,EAAU,oBAAA,CAAqB,KAAA,CAAM,IAAI,CAAA;AAAA,IACzC,IAAA;AAAA,IACA,UAAU,UAAA,CAAW,MAAA,GAAS,IAAI,EAAE,UAAA,KAAe,EAAC;AAAA,IACpD,UAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;AAOA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,GAAG,CAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU,GAAA;AAC7C,EAAA,OAAO,SAAS,IAAA,CAAK,KAAK,CAAA,GAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,GAAK,KAAA;AAC9C;AAGA,SAAS,cAAc,IAAA,EAAqE;AAC1F,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,OAAO,CAAC,KAAK,KAAA,KAAU;AACrB,IAAA,IAAI,IAAA,GAAO,aAAa,GAAG,CAAA;AAC3B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG,CAAA,EAAA,EAAK,IAAA,GAAO,CAAA,EAAG,YAAA,CAAa,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA;AACrE,IAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACb,IAAA,IAAI,IAAA,KAAS,OAAO,KAAA,IAAS,IAAA,OAAW,CAAA,EAAG,KAAK,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA,CAAG,CAAA;AAC7E,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACF;AAEA,SAAS,KACP,IAAA,EACA,QAAA,EACA,KAAA,EACA,QAAA,GAAwB,EAAC,EACV;AACf,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,IAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa,SAAA;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,IACvC,QAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,SAAA,CACP,MACA,QAAA,EACA,KAAA,EACA,WAAwB,EAAC,EACzB,cAAqC,SAAA,EACtB;AACf,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,IAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA,EAAS,IAAA;AAAA,IACT,WAAA;AAAA,IACA,MAAA,EAAQ,KAAA;AAAA,IACR,KAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,YAAA,CAAa,MAAc,KAAA,EAA8B;AAChE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,IAAA;AAAA,IACA,QAAA,EAAU,OAAA;AAAA,IACV,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa,SAAA;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,KAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,GAAA,CAAI,MAAc,OAAA,EAAqC;AAC9D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN,IAAA;AAAA,IACA,MAAA,EAAQ,KAAA;AAAA,IACR,MAAA,EAAQ,UAAA;AAAA,IACR,OAAA;AAAA,IACA,UAAU,EAAC;AAAA,IACX,IAAA,EAAM;AAAA,GACR;AACF;;;ACttBO,SAAS,sBAAsB,KAAA,EAAqC;AACzE,EAAA,OAAO,CAAC,UAAU,IAAA,KAAS;AACzB,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAC;AAGvB,IAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,IAAA,CAAK,WAAW,CAAA;AAC1C,IAAA,MAAM,MAAoB,EAAC;AAC3B,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,WAAA,EAAa;AACnC,MAAA,GAAA,CAAI,KAAK,GAAG,UAAA,CAAW,OAAO,QAAA,EAAU,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,IACzD;AACA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,cAAA,IAAkB,EAAC,EAAG;AAC5C,MAAA,IAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AACzB,MAAA,GAAA,CAAI,KAAK,GAAG,UAAA,CAAW,OAAO,QAAA,EAAU,IAAA,EAAM,WAAW,CAAC,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AACF;AAQA,SAAS,UAAA,CACP,KAAA,EACA,QAAA,EACA,QAAA,EACA,IAAA,EACc;AACd,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,CAAc,QAAQ,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AAEnB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,QAAQ,EAAE,GAAA,EAAI;AAC/C,EAAA,IAAI,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,MAAA,KAAW,CAAA,SAAU,EAAC;AAEzD,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,YAAA,CAAa,kBAAkB,EAAE,GAAA,EAAI;AAC9D,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,mBAAmB,EAAE,GAAA,EAAI;AAChE,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,WAAW,CAAA,GAAI,cAAc,EAAC;AAC3D,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,YAAY,CAAA,GAAI,eAAe,EAAC;AAC9D,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,SAAS,EAAE,GAAA,EAAI;AACtD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,aAAa,EAAE,GAAA,EAAI;AACrD,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,uBAAuB,EAAE,GAAA,EAAI;AACpE,EAAA,MAAM,OAAA,GACJ,YAAY,YAAY,CAAA,IAAK,aAAa,MAAA,KAAW,MAAA,CAAO,SAAS,YAAA,GAAe,MAAA;AACtF,EAAA,MAAM,EAAA,GAAK,YAAY,OAAO,CAAA,IAAK,QAAQ,MAAA,KAAW,MAAA,CAAO,SAAS,OAAA,GAAU,MAAA;AAGhF,EAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,QAAA,EAAU,IAAI,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAA;AAAA,IACA,GAAI,WAAA,CAAY,YAAY,CAAA,IAAK,YAAA,CAAa,CAAC,CAAA,GAAI,EAAE,YAAA,EAAc,YAAA,CAAa,CAAC,CAAA,KAAM,EAAC;AAAA,IACxF,GAAI,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA,CAAE,GAAA,EAAI,KAAM,IAAA,GAAO,EAAE,WAAA,EAAa,IAAA,EAAK,GAAI,EAAC;AAAA,IAC/E,GAAI,UAAA,CAAW,SAAS,IAAI,EAAC,GAAI,EAAE,SAAA;AAAU,GAC/C;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiC;AACpD,IAAA,IAAI,IAAA,KAAS,aAAa,OAAO,IAAA;AACjC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,YAAA,CAAa,uBAAuB,EAAE,GAAA,EAAI;AACrE,IAAA,IAAI,OAAO,aAAA,KAAkB,QAAA,IAAY,cAAA,CAAe,GAAA,CAAI,aAAa,CAAA,EAAG;AAC1E,MAAA,IAAA,CAAK,sBAAA,GAAyB,aAAA;AAAA,IAChC;AACA,IAAA,MAAM,eAAA,GAAkB,wBAAA,CAAyB,KAAA,EAAO,IAAI,CAAA;AAC5D,IAAA,IAAI,eAAA,OAAsB,eAAA,GAAkB,eAAA;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,mBAAmB,IAAI,CAAA;AACvC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,KAAA,EAAO,IAAI,CAAA;AAC9C,IAAA,OAAO;AAAA,MACL,WAAA,CAAY;AAAA,QACV,GAAG,MAAA;AAAA,QACH,IAAA,EAAM,KAAK,OAAA,EAAQ;AAAA,QACnB,MAAA,EAAQ,OAAO,KAAA,EAAM;AAAA,QACrB,gBAAA,EAAkB,OAAO,KAAA,EAAM;AAAA,QAC/B,iBAAA,EAAmB,QAAQ,KAAA,EAAM;AAAA,QACjC,GAAI,UAAU,EAAE,OAAA,EAAS,QAAQ,KAAA,EAAM,KAAM,EAAC;AAAA,QAC9C,GAAI,KAAK,EAAE,EAAA,EAAI,GAAG,KAAA,EAAM,KAAM,EAAC;AAAA,QAC/B,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,OAChC;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AACrB,IAAA,MAAA,IAAU,KAAA;AAAA,EACZ;AAGA,EAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,EAAiB,IAAA,EAAc,QAAA,KAAiD;AAC7F,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,IAAA,MAAM,YAAoB,EAAC;AAC3B,IAAA,MAAM,aAAqB,EAAC;AAC5B,IAAA,MAAM,QAAgB,EAAC;AACvB,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,MAAM,aAAuB,EAAC;AAE9B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAC5B,MAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AACzB,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,MAAA,EAAW;AAChD,MAAA,SAAA,CAAU,KAAK,KAAK,CAAA;AACpB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,GAAQ,CAAC,CAAA;AAChC,QAAA,IAAI,MAAA,KAAW,MAAA,IAAa,CAAC,MAAA,CAAO,MAAM,CAAA,EAAG;AAC7C,QAAA,IAAI,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAC7B,QAAA,IAAI,WAAW,MAAA,EAAW;AACxB,UAAA,MAAA,GAAS,SAAA,CAAU,MAAA;AACnB,UAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,MAAM,CAAA;AACxB,UAAA,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAE,CAAA;AAC9B,UAAA,IAAI,OAAA,EAAS,UAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAE,CAAA;AAC7C,UAAA,IAAI,EAAA,EAAI,KAAA,CAAM,IAAA,CAAK,EAAA,CAAG,MAAM,CAAE,CAAA;AAAA,QAChC;AACA,QAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AAAA,MACxB;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEnC,IAAA,OAAO,WAAA,CAAY;AAAA,MACjB,GAAG,MAAA;AAAA,MACH,IAAA;AAAA,MACA,MAAA,EAAQ,SAAA;AAAA,MACR,gBAAA,EAAkB,SAAA;AAAA,MAClB,iBAAA,EAAmB,UAAA;AAAA,MACnB,GAAI,OAAA,GAAU,EAAE,OAAA,EAAS,UAAA,KAAe,EAAC;AAAA,MACzC,GAAI,EAAA,GAAK,EAAE,EAAA,EAAI,KAAA,KAAU,EAAC;AAAA,MAC1B,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa;AAAC,KAChC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,MAAoB,EAAC;AAC3B,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAA,KAAU;AACjC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,IAAK,CAAA,IAAK,CAAA,GAAI,OAAO,MAAA,IAAU,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AACvF,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA;AACrD,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,OAAA,EAAS,CAAA,CAAA,EAAI,QAAA,EAAU,IAAA,IAAQ,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA;AAClF,IAAA,IAAI,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EACzB,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,CAAA;AACtE,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,KAAA,EAAO,IAAI,CAAA;AAC9C,IAAA,MAAM,OAAO,KAAA,CAAM,QAAA,EAAU,IAAA,CAAK,OAAA,IAAW,QAAQ,CAAA;AACrD,IAAA,IAAI,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,GAAA;AACT;AAEA,IAAM,cAAA,uBAA0C,GAAA,CAAI;AAAA,EAClD,MAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGD,SAAS,wBAAA,CAAyB,OAAc,IAAA,EAA+C;AAC7F,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,EAAM,0BAA0B,CAAA;AAClE,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,aAAA,CAAc,MAAM,CAAA;AAC/C,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAE1B,EAAA,MAAM,GAAA,GAA6B;AAAA,IACjC,IAAA,EAAM,OAAO,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,EAAI,IAAK;AAAA,GACnD;AACA,EAAA,MAAM,IAAA,GAAO,CAACA,KAAAA,KAAqC;AACjD,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,YAAA,CAAaA,KAAI,EAAE,GAAA,EAAI;AAC9C,IAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,MAAA;AAAA,EACrC,CAAA;AACA,EAAA,MAAM,cAAA,GAAiB,KAAK,wBAAwB,CAAA;AACpD,EAAA,IAAI,cAAA,KAAmB,MAAA,EAAW,GAAA,CAAI,cAAA,GAAiB,cAAA;AACvD,EAAA,MAAM,eAAA,GAAkB,KAAK,yBAAyB,CAAA;AACtD,EAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,GAAA,CAAI,eAAA,GAAkB,eAAA;AACzD,EAAA,MAAM,WAAA,GAAc,KAAK,qBAAqB,CAAA;AAC9C,EAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,GAAA,CAAI,WAAA,GAAc,WAAA;AACjD,EAAA,MAAM,OAAA,GAAU,KAAK,iBAAiB,CAAA;AACtC,EAAA,IAAI,OAAA,KAAY,MAAA,EAAW,GAAA,CAAI,OAAA,GAAU,OAAA;AACzC,EAAA,OAAO,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,IAAI,GAAA,GAAM,MAAA;AAC7C;AAGA,SAAS,kBAAA,CAAmB,MAAY,OAAA,EAAqC;AAC3E,EAAA,IAAI,CAAA,GAAiB,IAAA;AACrB,EAAA,OAAO,CAAA,EAAG;AACR,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,eAAA,CAAgB,OAAO,EAAE,UAAA,EAAW;AACtD,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAO,QAAQ,CAAC,CAAA;AACxC,IAAA,CAAA,GAAI,EAAE,SAAA,EAAU;AAAA,EAClB;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,iBAAA,CAAkB,OAAc,IAAA,EAAwC;AAC/E,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,KAAA,EAAO,IAAI,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,EAAA,MAAM,WAA2B,EAAE,IAAA,EAAM,iBAAA,CAAkB,IAAI,KAAK,UAAA,EAAW;AAC/E,EAAA,IAAI,KAAA,CAAM,KAAA,EAAO,QAAA,CAAS,YAAA,GAAe,KAAA,CAAM,KAAA;AAC/C,EAAA,IAAI,KAAA,CAAM,SAAA,KAAc,MAAA,EAAW,QAAA,CAAS,WAAW,KAAA,CAAM,SAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,SAAA,KAAc,MAAA,EAAW,QAAA,CAAS,YAAY,KAAA,CAAM,SAAA;AAC9D,EAAA,IAAI,KAAA,CAAM,OAAA,KAAY,MAAA,EAAW,QAAA,CAAS,UAAU,KAAA,CAAM,OAAA;AAC1D,EAAA,IAAI,KAAA,CAAM,aAAA,EAAe,QAAA,CAAS,aAAA,GAAgB,KAAA,CAAM,aAAA;AAExD,EAAA,MAAM,WAAoD,EAAC;AAC3D,EAAA,IAAI,KAAA,CAAM,YAAA,EAAc,QAAA,CAAS,KAAA,GAAQ,MAAM,YAAA,CAAa,IAAA;AAC5D,EAAA,IAAI,KAAA,CAAM,cAAA,EAAgB,QAAA,CAAS,OAAA,GAAU,MAAM,cAAA,CAAe,IAAA;AAClE,EAAA,IAAI,KAAA,CAAM,aAAA,EAAe,QAAA,CAAS,MAAA,GAAS,MAAM,aAAA,CAAc,IAAA;AAC/D,EAAA,IAAI,KAAA,CAAM,gBAAA,EAAkB,QAAA,CAAS,SAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA;AACxE,EAAA,IAAI,KAAA,CAAM,gBAAA,EAAkB,QAAA,CAAS,SAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA;AACxE,EAAA,IAAI,KAAA,CAAM,gBAAA,EAAkB,QAAA,CAAS,SAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA;AACxE,EAAA,IAAI,KAAA,CAAM,eAAA,EAAiB,QAAA,CAAS,QAAA,GAAW,MAAM,eAAA,CAAgB,IAAA;AACrE,EAAA,IAAI,OAAO,IAAA,CAAK,QAAQ,EAAE,MAAA,GAAS,CAAA,WAAY,QAAA,GAAW,QAAA;AAE1D,EAAA,OAAO,OAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,GAAS,IAAI,QAAA,GAAW,MAAA;AACvD;AAGA,SAAS,kBAAkB,IAAA,EAAgC;AACzD,EAAA,IAAI,CAAA,GAAiB,IAAA;AACrB,EAAA,OAAO,CAAA,EAAG;AACR,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,eAAA,CAAgB,kBAAkB,EAAE,UAAA,EAAW;AACjE,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAO,OAAA,CAAQ,CAAC,CAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,EAAE,GAAA,EAAI;AAC1E,IAAA,CAAA,GAAI,EAAE,SAAA,EAAU;AAAA,EAClB;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,iBAAA,CAAkB,UAAgB,QAAA,EAAsB;AAC/D,EAAA,MAAM,QAAgB,EAAC;AACvB,EAAA,IAAI,CAAA,GAAiB,QAAA;AACrB,EAAA,MAAM,IAAA,GAAO,SAAS,OAAA,EAAQ;AAC9B,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,OAAA,EAAQ,KAAM,IAAA,EAAM;AAChC,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AACZ,IAAA,CAAA,GAAI,EAAE,SAAA,EAAU;AAAA,EAClB;AACA,EAAA,KAAA,CAAM,OAAA,EAAQ;AAEd,EAAA,IAAI,IAAI,SAAA,EAAU;AAClB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,CAAA,GAAI,QAAA,CAAS,CAAA,EAAG,qBAAA,CAAsB,IAAI,EAAE,MAAM,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,WAAW,CAAA,EAAkB;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,IAAI,CAAA,CAAE,CAAC,CAAA,MAAO,CAAA,GAAI,MAAM,CAAA,GAAI,CAAA,GAAI,IAAI,OAAO,KAAA;AAAA,EAC7C;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAc,CAAA,EAA2B;AAChD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,MAAM,CAAC,CAAA,KAAM,OAAO,CAAA,KAAM,QAAQ,CAAA;AACjE;AAEA,SAAS,YAAY,CAAA,EAAyB;AAC5C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAE,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,WAAW,CAAC,CAAA;AAC9E;AAEA,SAAS,YAAY,CAAA,EAAyB;AAC5C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAE,KAAA,CAAM,CAAC,CAAA,KAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,WAAW,CAAC,CAAA;AAC9E;AChWA,IAAM,SAAA,GAAY,qBAAA;AAElB,IAAM,YAAA,GAAe,KAAA;AAErB,IAAM,iBAAA,GAAoB,EAAA;AAE1B,IAAM,iBAAA,GAAoB,CAAA;AAQnB,SAAS,UAAU,OAAA,EAA0D;AAClF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,CAAC,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAC,CAAA;AAChD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,EACvF;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,IAAA,EAAM,GAAG,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,CAAA,KAAM,IAAI,CAAC,CAAA;AAEzD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAI,CAAA;AACxB,IAAA,MAAM,OAAO,OAAO,GAAA,KAAQ,QAAA,GAAW,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA;AACtD,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA;AAGjC,IAAA,MAAM,SAAA,GAAY,SAAS,iBAAA,GAAoB,UAAA;AAC/C,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,CAAA,EAAG;AAC1B,MAAA,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AACd,MAAA,MAAA,GAAS,YAAY,IAAA,CAAK,MAAA;AAAA,IAC5B,CAAA,MAAO;AAGL,MAAA,MAAM,SAAA,GAAa,EAAA,IAAO,SAAA,GAAY,iBAAA,GAAqB,EAAA,CAAA,GAAO,EAAA;AAClE,MAAA,KAAA,CAAM,IAAI,CAAA,GAAI,CAAC,IAAA,EAAM,EAAE,KAAA,EAAO,EAAE,CAAC,YAAY,GAAG,IAAI,UAAA,CAAW,SAAS,CAAA,IAAK,CAAA;AAC7E,MAAA,MAAA,GAAS,SAAA,GAAY,iBAAA,GAAoB,SAAA,GAAY,IAAA,CAAK,MAAA;AAAA,IAC5D;AAAA,EACF;AAEA,EAAA,OAAO,OAAA,CAAQ,KAAA,EAAO,EAAE,KAAA,EAAO,GAAG,CAAA;AACpC;;;ACzCA,IAAM,SAAA,GAAY,CAAC,IAAA,KAA6B,IAAA,KAAS,cAAc,IAAA,KAAS,YAAA;AAmBzE,SAAS,wBAAA,CACd,IAAA,EACA,OAAA,GAAgC,EAAC,EACd;AACnB,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,MAAM,GAAA,GAAM,CAAC,QAAA,EAA8B,IAAA,EAAc,SAAiB,OAAA,KACxE,MAAA,CAAO,KAAK,EAAE,QAAA,EAAU,MAAM,OAAA,EAAS,GAAI,YAAY,MAAA,GAAY,EAAE,SAAQ,GAAI,IAAK,CAAA;AAExF,EAAA,IAAI,OAAO,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,WAAW,CAAA,EAAG;AACxC,IAAA,GAAA,CAAI,OAAA,EAAS,YAAY,oBAAoB,CAAA;AAAA,EAC/C;AAEA,EAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACtD,IAAA,IAAI,KAAA,CAAM,WAAW,EAAA,IAAM,CAAC,KAAK,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,EAAG;AACpD,MAAA,GAAA;AAAA,QACE,OAAA;AAAA,QACA,cAAA;AAAA,QACA,CAAA,OAAA,EAAU,GAAG,CAAA,6BAAA,EAAgC,KAAA,CAAM,MAAM,CAAA,CAAA,CAAA;AAAA,QACzD;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA,EAAG;AAC5B,MAAA,GAAA,CAAI,OAAA,EAAS,gBAAgB,CAAA,OAAA,EAAU,GAAG,+BAA+B,KAAA,CAAM,KAAK,KAAK,GAAG,CAAA;AAAA,IAC9F;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,MAAA,IAAa,KAAA,CAAM,UAAU,MAAA,IAAa,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO;AACvF,MAAA,GAAA;AAAA,QACE,OAAA;AAAA,QACA,gBAAA;AAAA,QACA,UAAU,GAAG,CAAA,cAAA,EAAiB,MAAM,KAAK,CAAA,eAAA,EAAkB,MAAM,KAAK,CAAA,CAAA;AAAA,QACtE;AAAA,OACF;AAAA,IACF;AACA,IAAA,IACE,MAAM,YAAA,KAAiB,MAAA,KACrB,KAAA,CAAM,KAAA,KAAU,UAAa,KAAA,CAAM,YAAA,GAAe,KAAA,CAAM,KAAA,IACvD,MAAM,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,YAAA,GAAe,MAAM,KAAA,CAAA,EAC3D;AACA,MAAA,GAAA;AAAA,QACE,SAAA;AAAA,QACA,uBAAA;AAAA,QACA,CAAA,OAAA,EAAU,GAAG,CAAA,gBAAA,EAAmB,KAAA,CAAM,YAAY,CAAA,sBAAA,CAAA;AAAA,QAClD;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,CAAC,aAAA,EAAe,KAAA,CAAM,WAAW,CAAA;AAAA,MACjC,CAAC,aAAA,EAAe,KAAA,CAAM,WAAW;AAAA,KACnC;AACA,IAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,MAAA,EAAQ;AACnC,MAAA,IAAI,CAAC,cAAA,CAAe,KAAK,CAAA,CAAE,KAAA,EAAO;AAChC,QAAA,GAAA;AAAA,UACE,SAAA;AAAA,UACA,iBAAA;AAAA,UACA,CAAA,OAAA,EAAU,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,qDAAA,CAAA;AAAA,UACvB;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AACtC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,GAAA;AAAA,UACE,OAAA;AAAA,UACA,qBAAA;AAAA,UACA,CAAA,OAAA,EAAU,GAAG,CAAA,wBAAA,EAA2B,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA;AAAA,UACnD;AAAA,SACF;AAAA,MACF,WAAW,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,MAAA,CAAO,SAAS,OAAA,EAAS;AAC5D,QAAA,GAAA;AAAA,UACE,OAAA;AAAA,UACA,mBAAA;AAAA,UACA,UAAU,GAAG,CAAA,sCAAA,CAAA;AAAA,UACb;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,UAAU,KAAA,CAAM,IAAI,MAAM,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,EAAG;AAC3D,QAAA,GAAA;AAAA,UACE,OAAA;AAAA,UACA,qBAAA;AAAA,UACA,CAAA,OAAA,EAAU,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,IAAI,aAAa,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,MAAA,CAAO,IAAI,CAAA,uDAAA,CAAA;AAAA,UACtE;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,EAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,EAAG;AAC/C,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,QAAQ,GAAG,KAAA,EAAO;AACnC,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,IAAI,OAAA,GAA8B,QAAA;AAClC,IAAA,OAAO,YAAY,MAAA,IAAa,IAAA,CAAK,MAAA,CAAO,OAAO,GAAG,KAAA,EAAO;AAC3D,MAAA,MAAM,IAAA,GAAe,IAAA,CAAK,MAAA,CAAO,OAAO,EAAG,KAAA,CAAO,KAAA;AAClD,MAAA,IAAI,SAAS,QAAA,EAAU;AACrB,QAAA,GAAA;AAAA,UACE,OAAA;AAAA,UACA,aAAA;AAAA,UACA,UAAU,QAAQ,CAAA,4DAAA,CAAA;AAAA,UAClB;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AACb,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,mBAAmB,IAAI,CAAA;AACpC,EAAA,KAAA,MAAW,QAAA,IAAY,KAAK,UAAA,EAAY;AACtC,IAAA,GAAA;AAAA,MACE,SAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAU,QAAQ,CAAA,0DAAA,CAAA;AAAA,MAClB;AAAA,KACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,OAAA,IAAW,KAAK,aAAA,EAAe;AACxC,IAAA,GAAA;AAAA,MACE,SAAA;AAAA,MACA,eAAA;AAAA,MACA,CAAA,MAAA,EAAS,OAAO,CAAA,4BAAA,EAA+B,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAAA,MACxD;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAA,CAAK,IAAA,CAAK,qBAAqB,EAAC,EAAG,WAAW,CAAA,IAAK,CAAC,KAAK,SAAA,EAAW;AAClE,IAAA,GAAA;AAAA,MACE,SAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,KAAK,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACpD,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,IAAA,IAAI,CAAC,QAAA,IAAa,QAAA,CAAS,SAAS,MAAA,IAAa,QAAA,CAAS,YAAY,MAAA,EAAY;AAChF,MAAA,GAAA,CAAI,SAAA,EAAW,aAAA,EAAe,CAAA,MAAA,EAAS,GAAG,6CAA6C,GAAG,CAAA;AAAA,IAC5F;AACA,IAAA,IAAI,QAAA,EAAU,IAAA,KAAS,MAAA,IAAa,QAAA,CAAS,QAAQ,CAAA,EAAG;AACtD,MAAA,GAAA,CAAI,OAAA,EAAS,YAAY,CAAA,MAAA,EAAS,GAAG,2BAA2B,QAAA,CAAS,IAAI,IAAI,GAAG,CAAA;AAAA,IACtF;AACA,IAAA,IAAI,UAAU,eAAA,EAAiB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA,EAAG;AACjD,MAAA,GAAA,CAAI,OAAA,EAAS,aAAA,EAAe,CAAA,MAAA,EAAS,GAAG,+CAA+C,GAAG,CAAA;AAAA,IAC5F;AACA,IAAA,IAAI,QAAA,EAAU,aAAA,IAAiB,CAAC,QAAA,CAAS,eAAA,EAAiB;AACxD,MAAA,GAAA;AAAA,QACE,SAAA;AAAA,QACA,iBAAA;AAAA,QACA,SAAS,GAAG,CAAA,mEAAA,CAAA;AAAA,QACZ;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,GAAA,EAAK,IAAI,CAAA;AACzC,MAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,WAAW,CAAA;AACpE,MAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,QAAA,GAAA,CAAI,SAAA,EAAW,cAAA,EAAgB,CAAA,MAAA,EAAS,GAAG,+BAA+B,GAAG,CAAA;AAAA,MAC/E;AACA,MAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,QAAA,IAAI,CAAC,KAAK,sBAAA,EAAwB;AAChC,UAAA,GAAA;AAAA,YACE,SAAA;AAAA,YACA,yBAAA;AAAA,YACA,CAAA,MAAA,EAAS,GAAG,CAAA,kBAAA,EAAqB,IAAA,CAAK,IAAI,CAAA,8FAAA,CAAA;AAAA,YAC1C;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,MAAO,CAAA,CAAE,QAAA,KAAa,CAAA,CAAE,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,QAAA,KAAa,OAAA,GAAU,KAAK,CAAE,CAAA;AAChG","file":"chunk-IT5RWB7A.js","sourcesContent":["/** Package identity. Kept in one place so every entry point can re-export it. */\nexport const PACKAGE_NAME = \"three-usd-robot\";\n\n/** Library version. Replaced by the release tooling at publish time. */\nexport const VERSION = \"0.0.0\";\n","/**\n * Robot IR → USDA layer (M13).\n *\n * Builds a self-contained UsdPhysics robot layer from a {@link RobotDescription}:\n * one `Xform` prim per link placed at its **zero-pose** world transform\n * (folding joint frames root-down, `T_child = T_parent · frame0 · frame1⁻¹`),\n * one `Physics*Joint` prim per joint, and the\n * link meshes supplied by a {@link RobotGeometryProvider}. Initial joint values\n * author as `PhysicsJointStateAPI` opinions rather than being baked into link\n * transforms, so a re-import applies them exactly once. Values convert back\n * from SI to authored units (angular radians → degrees).\n */\n\nimport {\n type Mat4,\n decomposeRigid,\n identity4,\n invert,\n multiply,\n toUsdMatrix,\n} from \"../kinematics/transforms.js\";\nimport type {\n AttributeSpec,\n MetadataMap,\n PrimSpec,\n PropertySpec,\n RelationshipSpec,\n UsdValue,\n UsdaFile,\n} from \"../parser/ast.js\";\nimport { AssetPath, Quat } from \"../parser/ast.js\";\nimport type {\n JointDescription,\n JointType,\n LinkInertialDescription,\n RobotDescription,\n} from \"../robot/RobotDescription.js\";\nimport { buildKinematicTree } from \"../robot/buildKinematicTree.js\";\nimport { jointValueFromSI } from \"../robot/normalize.js\";\nimport {\n ARTICULATION_ROOT_API,\n COLLISION_API,\n MASS_API,\n MESH_COLLISION_API,\n NEWTON_MIMIC_API,\n PHYSICS_MATERIAL_API,\n RIGID_BODY_API,\n driveKindFor,\n} from \"../schemas/usdPhysics.js\";\nimport type {\n ExportMaterial,\n ExportMesh,\n ExportPhysicsMaterial,\n RobotGeometryProvider,\n TextureChannel,\n} from \"./GeometryProvider.js\";\n\n/** PhysX articulation tuning API (Isaac / Omniverse). */\nconst PHYSX_ARTICULATION_API = \"PhysxArticulationAPI\";\n\nexport type ExportRobotOptions = {\n /** Supplies each link's meshes; omit for a kinematics-only layer. */\n geometry?: RobotGeometryProvider;\n /** Root prim name; defaults to the (sanitized) robot name. */\n robotName?: string;\n /**\n * Author `physxArticulation:enabledSelfCollisions` on the articulation root\n * (M16). `false` is the common Isaac stabilizer for adjacent-link contact.\n */\n enabledSelfCollisions?: boolean;\n /**\n * Apply the Isaac Sim Robot Schema (M16): `IsaacRobotAPI` on the root with\n * ordered `isaac:physics:robotLinks` / `robotJoints` relationships,\n * `IsaacLinkAPI` per link, and `IsaacJointAPI` (+ DOF order) per joint.\n */\n isaacRobotSchema?: boolean;\n /** Receives non-fatal export diagnostics. */\n onWarn?: (message: string) => void;\n};\n\nconst JOINT_SCHEMA_BY_TYPE: Record<JointType, string> = {\n fixed: \"PhysicsFixedJoint\",\n revolute: \"PhysicsRevoluteJoint\",\n continuous: \"PhysicsRevoluteJoint\",\n prismatic: \"PhysicsPrismaticJoint\",\n};\n\n/** Serialize a robot IR into a single-layer USDA AST (pass to `serializeUsda`). */\nexport function exportRobotUsda(\n desc: RobotDescription,\n options: ExportRobotOptions = {},\n): UsdaFile {\n const warn = (m: string) => options.onWarn?.(m);\n const tree = buildKinematicTree(desc, { onWarn: warn });\n\n const robotName = sanitizeName(options.robotName ?? desc.name ?? \"robot\");\n\n // One flat sibling namespace under the root prim for links and joints.\n const alloc = nameAllocator(warn);\n const linkNames = new Map<string, string>();\n for (const key of Object.keys(desc.links)) linkNames.set(key, alloc(key, `link \"${key}\"`));\n const jointNames = new Map<string, string>();\n for (const key of Object.keys(desc.joints)) jointNames.set(key, alloc(key, `joint \"${key}\"`));\n const linkPath = (key: string) => `/${robotName}/${linkNames.get(key)}`;\n\n // Zero-pose world placement per link, folded root-down along the tree.\n // Links no joint chain reaches (floating root / isolated) keep their\n // authored stage placement when the IR carries one.\n const authoredWorld = (key: string) => desc.links[key]?.worldTransform ?? identity4();\n const worldByLink = new Map<string, Mat4>();\n for (const key of tree.order) {\n const node = tree.nodes[key]!;\n if (node.parent === null || node.jointToParent === null) {\n const rootJoint = tree.rootJoint ? desc.joints[tree.rootJoint] : undefined;\n worldByLink.set(\n key,\n rootJoint\n ? multiply(rootJoint.jointFrame0, invert(rootJoint.jointFrame1))\n : authoredWorld(key),\n );\n continue;\n }\n const joint = desc.joints[node.jointToParent]!;\n const parentWorld = worldByLink.get(node.parent) ?? identity4();\n worldByLink.set(\n key,\n multiply(multiply(parentWorld, joint.jointFrame0), invert(joint.jointFrame1)),\n );\n }\n for (const key of tree.isolatedLinks) worldByLink.set(key, authoredWorld(key));\n\n // Articulation root: preserve link-level APIs from the IR; otherwise apply it\n // on the container prim (never both — nested articulation roots are invalid).\n const articulationLinks = new Set(desc.articulationRoots ?? []);\n\n // Gather meshes once, then dedupe their (physics) materials by name.\n const meshesByLink = new Map<string, ExportMesh[]>();\n const materials = new Map<string, ExportMaterial>();\n const physicsMaterials = new Map<string, ExportPhysicsMaterial>();\n for (const [key, link] of Object.entries(desc.links)) {\n const meshes = options.geometry?.(key, link) ?? [];\n meshesByLink.set(key, meshes);\n for (const mesh of meshes) {\n if (mesh.material && !materials.has(mesh.material.name)) {\n materials.set(mesh.material.name, mesh.material);\n }\n if (mesh.physicsMaterial && !physicsMaterials.has(mesh.physicsMaterial.name)) {\n physicsMaterials.set(mesh.physicsMaterial.name, mesh.physicsMaterial);\n }\n }\n }\n const looksName = materials.size > 0 ? alloc(\"Looks\") : undefined;\n const materialAlloc = nameAllocator();\n const materialNames = new Map<string, string>();\n for (const name of materials.keys()) materialNames.set(name, materialAlloc(name));\n const materialPath = (name: string) =>\n looksName ? `/${robotName}/${looksName}/${materialNames.get(name)}` : undefined;\n\n const physicsScopeName = physicsMaterials.size > 0 ? alloc(\"PhysicsMaterials\") : undefined;\n const physicsMaterialAlloc = nameAllocator();\n const physicsMaterialNames = new Map<string, string>();\n for (const name of physicsMaterials.keys()) {\n physicsMaterialNames.set(name, physicsMaterialAlloc(name));\n }\n const physicsMaterialPath = (name: string) =>\n physicsScopeName\n ? `/${robotName}/${physicsScopeName}/${physicsMaterialNames.get(name)}`\n : undefined;\n\n const isaac = options.isaacRobotSchema === true;\n const children: PrimSpec[] = [];\n for (const [key, link] of Object.entries(desc.links)) {\n const apiSchemas = [RIGID_BODY_API];\n if (articulationLinks.has(key)) apiSchemas.push(ARTICULATION_ROOT_API);\n if (link.inertial) apiSchemas.push(MASS_API);\n if (isaac) apiSchemas.push(\"IsaacLinkAPI\");\n const selfCollision = articulationLinks.has(key) ? options.enabledSelfCollisions : undefined;\n if (selfCollision !== undefined) apiSchemas.push(PHYSX_ARTICULATION_API);\n children.push(\n buildLinkPrim({\n name: linkNames.get(key)!,\n world: worldByLink.get(key) ?? identity4(),\n apiSchemas,\n meshes: meshesByLink.get(key) ?? [],\n materialPath,\n physicsMaterialPath,\n warn,\n ...(link.inertial ? { inertial: link.inertial } : {}),\n ...(selfCollision !== undefined ? { selfCollision } : {}),\n }),\n );\n }\n const emittedJoints = new Set<string>();\n for (const [key, joint] of Object.entries(desc.joints)) {\n if (!desc.links[joint.child] || (joint.parent !== \"\" && !desc.links[joint.parent])) {\n warn(`joint \"${key}\" references an unknown link; skipped`);\n continue;\n }\n emittedJoints.add(key);\n }\n const jointPath = (key: string) =>\n emittedJoints.has(key) ? `/${robotName}/${jointNames.get(key)}` : undefined;\n for (const key of emittedJoints) {\n children.push(\n buildJointPrim(\n jointNames.get(key)!,\n key,\n desc.joints[key]!,\n linkPath,\n jointPath,\n isaac,\n warn,\n ),\n );\n }\n if (looksName) {\n children.push(buildLooksPrim(looksName, materials, materialNames, materialPath));\n }\n if (physicsScopeName) {\n children.push(\n buildPhysicsMaterialsPrim(physicsScopeName, physicsMaterials, physicsMaterialNames),\n );\n }\n\n const rootApiSchemas: string[] = [];\n const rootProperties: PropertySpec[] = [];\n if (articulationLinks.size === 0) {\n rootApiSchemas.push(ARTICULATION_ROOT_API);\n if (options.enabledSelfCollisions !== undefined) {\n rootApiSchemas.push(PHYSX_ARTICULATION_API);\n rootProperties.push(\n attr(\"physxArticulation:enabledSelfCollisions\", \"bool\", options.enabledSelfCollisions),\n );\n }\n }\n if (isaac) {\n rootApiSchemas.push(\"IsaacRobotAPI\");\n const orderedLinks = [...tree.order, ...tree.isolatedLinks];\n const orderedJoints: string[] = [];\n const pushJoint = (key: string | null | undefined) => {\n if (key && emittedJoints.has(key) && !orderedJoints.includes(key)) orderedJoints.push(key);\n };\n pushJoint(tree.rootJoint);\n for (const linkKey of tree.order) pushJoint(tree.nodes[linkKey]?.jointToParent);\n for (const jointKey of tree.loopJoints) pushJoint(jointKey);\n for (const jointKey of Object.keys(desc.joints)) pushJoint(jointKey);\n\n rootProperties.push(rel(\"isaac:physics:robotLinks\", orderedLinks.map(linkPath)));\n rootProperties.push(\n rel(\n \"isaac:physics:robotJoints\",\n orderedJoints.map((key) => `/${robotName}/${jointNames.get(key)}`),\n ),\n );\n }\n\n const root: PrimSpec = {\n specifier: \"def\",\n typeName: \"Xform\",\n name: robotName,\n metadata: rootApiSchemas.length > 0 ? { apiSchemas: rootApiSchemas } : {},\n properties: rootProperties,\n children,\n line: 0,\n };\n\n const metadata: MetadataMap = {\n defaultPrim: robotName,\n metersPerUnit: desc.metersPerUnit,\n upAxis: desc.upAxis,\n ...(desc.timeCodesPerSecond !== undefined\n ? { timeCodesPerSecond: desc.timeCodesPerSecond }\n : {}),\n ...(desc.startTimeCode !== undefined ? { startTimeCode: desc.startTimeCode } : {}),\n ...(desc.endTimeCode !== undefined ? { endTimeCode: desc.endTimeCode } : {}),\n };\n\n return { version: \"1.0\", metadata, prims: [root] };\n}\n\n// ---------------------------------------------------------------------------\n// Links & meshes\n// ---------------------------------------------------------------------------\n\ntype LinkPrimArgs = {\n name: string;\n world: Mat4;\n apiSchemas: string[];\n meshes: ExportMesh[];\n inertial?: LinkInertialDescription;\n /** `physxArticulation:enabledSelfCollisions` for link-level articulation roots. */\n selfCollision?: boolean;\n materialPath: (name: string) => string | undefined;\n physicsMaterialPath: (name: string) => string | undefined;\n warn: (message: string) => void;\n};\n\nfunction buildLinkPrim(args: LinkPrimArgs): PrimSpec {\n const meshAlloc = nameAllocator();\n const properties: PropertySpec[] = transformProps(args.world);\n if (args.inertial) properties.push(...massProps(args.inertial, args.name, args.warn));\n if (args.selfCollision !== undefined) {\n properties.push(attr(\"physxArticulation:enabledSelfCollisions\", \"bool\", args.selfCollision));\n }\n return {\n specifier: \"def\",\n typeName: \"Xform\",\n name: args.name,\n metadata: { apiSchemas: args.apiSchemas },\n properties,\n children: args.meshes.map((mesh) =>\n buildMeshPrim(mesh, meshAlloc(mesh.name), args.materialPath, args.physicsMaterialPath),\n ),\n line: 0,\n };\n}\n\n/**\n * `UsdPhysicsMassAPI` attributes for a link's mass properties. UsdPhysics\n * requires `diagonalInertia` and `principalAxes` to be authored together, so a\n * missing principal-axes frame is completed with the identity quaternion\n * (equivalent — the diagonal is then in the body frame) and axes without a\n * diagonal are dropped (meaningless alone).\n */\nfunction massProps(\n inertial: LinkInertialDescription,\n linkName: string,\n warn: (message: string) => void,\n): PropertySpec[] {\n const out: PropertySpec[] = [];\n if (inertial.mass !== undefined) out.push(attr(\"physics:mass\", \"float\", inertial.mass));\n if (inertial.density !== undefined) out.push(attr(\"physics:density\", \"float\", inertial.density));\n if (inertial.centerOfMass) {\n out.push(attr(\"physics:centerOfMass\", \"point3f\", inertial.centerOfMass));\n }\n if (inertial.diagonalInertia) {\n out.push(attr(\"physics:diagonalInertia\", \"float3\", inertial.diagonalInertia));\n out.push(attr(\"physics:principalAxes\", \"quatf\", inertial.principalAxes ?? Quat.identity()));\n } else if (inertial.principalAxes) {\n warn(`link \"${linkName}\": principalAxes without diagonalInertia is meaningless; dropped`);\n }\n return out;\n}\n\nfunction buildMeshPrim(\n mesh: ExportMesh,\n name: string,\n materialPath: (name: string) => string | undefined,\n physicsMaterialPath: (name: string) => string | undefined,\n): PrimSpec {\n const properties: PropertySpec[] = [];\n if (mesh.transform) properties.push(...transformProps(mesh.transform));\n properties.push(\n arrayAttr(\"faceVertexCounts\", \"int\", mesh.faceVertexCounts),\n arrayAttr(\"faceVertexIndices\", \"int\", mesh.faceVertexIndices),\n arrayAttr(\"points\", \"point3f\", mesh.points),\n );\n if (mesh.normals) properties.push(arrayAttr(\"normals\", \"normal3f\", mesh.normals));\n if (mesh.st) {\n properties.push(arrayAttr(\"primvars:st\", \"texCoord2f\", mesh.st, { interpolation: \"vertex\" }));\n }\n if (mesh.displayColor) {\n properties.push(arrayAttr(\"primvars:displayColor\", \"color3f\", [mesh.displayColor]));\n }\n if (mesh.doubleSided) properties.push(attr(\"doubleSided\", \"bool\", true));\n properties.push(uniformToken(\"subdivisionScheme\", \"none\"));\n\n const apiSchemas: string[] = [];\n if (mesh.kind === \"collision\") {\n apiSchemas.push(COLLISION_API);\n // `guide` keeps collision shapes out of the render pass (usdview, Isaac Sim,\n // and this package's own loader) while PhysX still collides with them.\n properties.push(uniformToken(\"purpose\", \"guide\"));\n if (mesh.collisionApproximation) {\n apiSchemas.push(MESH_COLLISION_API);\n properties.push(uniformToken(\"physics:approximation\", mesh.collisionApproximation));\n }\n }\n const binding = mesh.material ? materialPath(mesh.material.name) : undefined;\n if (binding) properties.push(rel(\"material:binding\", [binding]));\n const physicsBinding =\n mesh.kind === \"collision\" && mesh.physicsMaterial\n ? physicsMaterialPath(mesh.physicsMaterial.name)\n : undefined;\n if (physicsBinding) properties.push(rel(\"material:binding:physics\", [physicsBinding]));\n if (binding || physicsBinding) apiSchemas.push(\"MaterialBindingAPI\");\n\n return {\n specifier: \"def\",\n typeName: \"Mesh\",\n name,\n metadata: apiSchemas.length > 0 ? { apiSchemas } : {},\n properties,\n children: [],\n line: 0,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Physics materials\n// ---------------------------------------------------------------------------\n\n/** `Scope` holding one `PhysicsMaterialAPI` material per unique name. */\nfunction buildPhysicsMaterialsPrim(\n scopeName: string,\n materials: Map<string, ExportPhysicsMaterial>,\n names: Map<string, string>,\n): PrimSpec {\n const children: PrimSpec[] = [];\n for (const [key, material] of materials) {\n children.push(buildPhysicsMaterialPrim(names.get(key)!, material));\n }\n return {\n specifier: \"def\",\n typeName: \"Scope\",\n name: scopeName,\n metadata: {},\n properties: [],\n children,\n line: 0,\n };\n}\n\nfunction buildPhysicsMaterialPrim(name: string, material: ExportPhysicsMaterial): PrimSpec {\n const properties: PropertySpec[] = [];\n if (material.staticFriction !== undefined) {\n properties.push(attr(\"physics:staticFriction\", \"float\", material.staticFriction));\n }\n if (material.dynamicFriction !== undefined) {\n properties.push(attr(\"physics:dynamicFriction\", \"float\", material.dynamicFriction));\n }\n if (material.restitution !== undefined) {\n properties.push(attr(\"physics:restitution\", \"float\", material.restitution));\n }\n if (material.density !== undefined) {\n properties.push(attr(\"physics:density\", \"float\", material.density));\n }\n return {\n specifier: \"def\",\n typeName: \"Material\",\n name,\n metadata: { apiSchemas: [PHYSICS_MATERIAL_API] },\n properties,\n children: [],\n line: 0,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Materials\n// ---------------------------------------------------------------------------\n\n/** `Scope` holding one `Material` + `UsdPreviewSurface` shader per material. */\nfunction buildLooksPrim(\n looksName: string,\n materials: Map<string, ExportMaterial>,\n materialNames: Map<string, string>,\n materialPath: (name: string) => string | undefined,\n): PrimSpec {\n const children: PrimSpec[] = [];\n for (const [key, material] of materials) {\n children.push(buildMaterialPrim(materialNames.get(key)!, material, materialPath(key)!));\n }\n return {\n specifier: \"def\",\n typeName: \"Scope\",\n name: looksName,\n metadata: {},\n properties: [],\n children,\n line: 0,\n };\n}\n\n/** How each texture channel wires into `UsdPreviewSurface`. */\nconst TEXTURE_WIRING: Record<\n TextureChannel,\n { input: string; inputType: string; output: string; outputType: string; colorSpace: string }\n> = {\n color: {\n input: \"inputs:diffuseColor\",\n inputType: \"color3f\",\n output: \"outputs:rgb\",\n outputType: \"float3\",\n colorSpace: \"sRGB\",\n },\n emissive: {\n input: \"inputs:emissiveColor\",\n inputType: \"color3f\",\n output: \"outputs:rgb\",\n outputType: \"float3\",\n colorSpace: \"sRGB\",\n },\n normal: {\n input: \"inputs:normal\",\n inputType: \"normal3f\",\n output: \"outputs:rgb\",\n outputType: \"float3\",\n colorSpace: \"raw\",\n },\n opacity: {\n input: \"inputs:opacity\",\n inputType: \"float\",\n output: \"outputs:a\",\n outputType: \"float\",\n colorSpace: \"raw\",\n },\n roughness: {\n input: \"inputs:roughness\",\n inputType: \"float\",\n output: \"outputs:r\",\n outputType: \"float\",\n colorSpace: \"raw\",\n },\n metalness: {\n input: \"inputs:metallic\",\n inputType: \"float\",\n output: \"outputs:r\",\n outputType: \"float\",\n colorSpace: \"raw\",\n },\n occlusion: {\n input: \"inputs:occlusion\",\n inputType: \"float\",\n output: \"outputs:r\",\n outputType: \"float\",\n colorSpace: \"raw\",\n },\n};\n\nfunction buildMaterialPrim(name: string, material: ExportMaterial, selfPath: string): PrimSpec {\n const textures = material.textures ?? {};\n const shaderProps: PropertySpec[] = [uniformToken(\"info:id\", \"UsdPreviewSurface\")];\n\n // A surface input: constant value, texture connection, or both (the\n // connection wins per UsdShade; the constant stays for flat consumers).\n const input = (channel: TextureChannel, value?: UsdValue) => {\n const wiring = TEXTURE_WIRING[channel];\n const texturePath = textures[channel];\n if (value === undefined && texturePath === undefined) return;\n const spec = attr(wiring.input, wiring.inputType, value);\n if (texturePath !== undefined) {\n spec.connections = [`${selfPath}/${channel}Texture.${wiring.output}`];\n }\n shaderProps.push(spec);\n };\n input(\"color\", material.diffuseColor);\n input(\"metalness\", material.metallic);\n input(\"roughness\", material.roughness);\n input(\"opacity\", material.opacity);\n input(\"emissive\", material.emissiveColor);\n input(\"normal\");\n input(\"occlusion\");\n shaderProps.push(attr(\"outputs:surface\", \"token\", undefined));\n\n const children: PrimSpec[] = [shaderPrim(\"PreviewSurface\", shaderProps)];\n const textureEntries = Object.entries(textures) as [TextureChannel, string][];\n if (textureEntries.length > 0) {\n children.push(\n shaderPrim(\"stReader\", [\n uniformToken(\"info:id\", \"UsdPrimvarReader_float2\"),\n attr(\"inputs:varname\", \"string\", \"st\"),\n attr(\"outputs:result\", \"float2\", undefined),\n ]),\n );\n for (const [channel, path] of textureEntries) {\n children.push(buildUvTexturePrim(channel, path, selfPath));\n }\n }\n\n const surfaceConnect = attr(\"outputs:surface\", \"token\", undefined);\n surfaceConnect.connections = [`${selfPath}/PreviewSurface.outputs:surface`];\n\n return {\n specifier: \"def\",\n typeName: \"Material\",\n name,\n metadata: {},\n properties: [surfaceConnect],\n children,\n line: 0,\n };\n}\n\n/** `UsdUVTexture` node for one channel, fed by the material's `stReader`. */\nfunction buildUvTexturePrim(channel: TextureChannel, path: string, selfPath: string): PrimSpec {\n const wiring = TEXTURE_WIRING[channel];\n const st = attr(\"inputs:st\", \"float2\", undefined);\n st.connections = [`${selfPath}/stReader.outputs:result`];\n return shaderPrim(`${channel}Texture`, [\n uniformToken(\"info:id\", \"UsdUVTexture\"),\n attr(\"inputs:file\", \"asset\", new AssetPath(path)),\n uniformToken(\"inputs:sourceColorSpace\", wiring.colorSpace),\n st,\n attr(wiring.output, wiring.outputType, undefined),\n ]);\n}\n\nfunction shaderPrim(name: string, properties: PropertySpec[]): PrimSpec {\n return {\n specifier: \"def\",\n typeName: \"Shader\",\n name,\n metadata: {},\n properties,\n children: [],\n line: 0,\n };\n}\n\n/** `xformOp:transform` + `xformOpOrder` for an explicit matrix placement. */\nfunction transformProps(m: Mat4): PropertySpec[] {\n return [\n attr(\"xformOp:transform\", \"matrix4d\", toUsdMatrix(m)),\n arrayAttr(\"xformOpOrder\", \"token\", [\"xformOp:transform\"], undefined, \"uniform\"),\n ];\n}\n\n// ---------------------------------------------------------------------------\n// Joints\n// ---------------------------------------------------------------------------\n\nfunction buildJointPrim(\n name: string,\n key: string,\n joint: JointDescription,\n linkPath: (key: string) => string,\n jointPath: (key: string) => string | undefined,\n isaac: boolean,\n warn: (m: string) => void,\n): PrimSpec {\n const kind = driveKindFor(joint.type);\n const angular = kind === \"angular\";\n const properties: PropertySpec[] = [];\n const apiSchemas: string[] = [];\n\n if (joint.parent !== \"\") properties.push(rel(\"physics:body0\", [linkPath(joint.parent)]));\n properties.push(rel(\"physics:body1\", [linkPath(joint.child)]));\n if (joint.type !== \"fixed\") properties.push(uniformToken(\"physics:axis\", joint.axis));\n if (joint.lower !== undefined) {\n properties.push(attr(\"physics:lowerLimit\", \"float\", jointValueFromSI(angular, joint.lower)));\n }\n if (joint.upper !== undefined) {\n properties.push(attr(\"physics:upperLimit\", \"float\", jointValueFromSI(angular, joint.upper)));\n }\n\n for (const index of [0, 1] as const) {\n const frame = index === 0 ? joint.jointFrame0 : joint.jointFrame1;\n const { position, orientation, rigid } = decomposeRigid(frame);\n if (!rigid) {\n warn(`joint \"${key}\": jointFrame${index} is not rigid; scale/shear was discarded`);\n }\n properties.push(attr(`physics:localPos${index}`, \"point3f\", position));\n properties.push(attr(`physics:localRot${index}`, \"quatf\", orientation));\n }\n\n // Joint state: the initial value and/or the sampled trajectory (SI → authored).\n if (joint.initialValue !== undefined || joint.valueSamples) {\n const state = attr(\n `state:${kind}:physics:position`,\n \"float\",\n joint.initialValue !== undefined ? jointValueFromSI(angular, joint.initialValue) : undefined,\n );\n if (joint.valueSamples) {\n state.timeSamples = new Map(\n joint.valueSamples.times.map((t, i) => [\n t,\n jointValueFromSI(angular, joint.valueSamples!.values[i] ?? 0),\n ]),\n );\n }\n properties.push(state);\n apiSchemas.push(`PhysicsJointStateAPI:${kind}`);\n }\n\n if (joint.drive) {\n const d = joint.drive;\n if (d.targetPosition !== undefined) {\n properties.push(\n attr(\n `drive:${kind}:physics:targetPosition`,\n \"float\",\n jointValueFromSI(angular, d.targetPosition),\n ),\n );\n }\n if (d.stiffness !== undefined) {\n properties.push(attr(`drive:${kind}:physics:stiffness`, \"float\", d.stiffness));\n }\n if (d.damping !== undefined) {\n properties.push(attr(`drive:${kind}:physics:damping`, \"float\", d.damping));\n }\n if (d.maxForce !== undefined) {\n properties.push(attr(`drive:${kind}:physics:maxForce`, \"float\", d.maxForce));\n }\n apiSchemas.push(`PhysicsDriveAPI:${kind}`);\n }\n\n // Mimic constraint → NewtonMimicAPI (`follower = coef0 + coef1 · leader`),\n // the form Isaac Sim 6 / Newton author and consume. Offset back to authored\n // units (degrees for angular).\n if (joint.mimic) {\n const leaderPath = jointPath(joint.mimic.joint);\n if (!leaderPath) {\n warn(`joint \"${key}\": mimic leader \"${joint.mimic.joint}\" is not exported; mimic dropped`);\n } else {\n apiSchemas.push(NEWTON_MIMIC_API);\n properties.push(rel(\"newton:mimicJoint\", [leaderPath]));\n properties.push(attr(\"newton:mimicCoef1\", \"float\", joint.mimic.multiplier));\n properties.push(\n attr(\"newton:mimicCoef0\", \"float\", jointValueFromSI(angular, joint.mimic.offset)),\n );\n }\n }\n\n if (isaac) {\n apiSchemas.push(\"IsaacJointAPI\");\n if (joint.type !== \"fixed\") {\n const prefix = joint.type === \"prismatic\" ? \"Trans\" : \"Rot\";\n properties.push(\n arrayAttr(\"isaac:physics:DofOffsetOpOrder\", \"token\", [`${prefix}${joint.axis}`]),\n );\n }\n }\n\n return {\n specifier: \"def\",\n typeName: JOINT_SCHEMA_BY_TYPE[joint.type],\n name,\n metadata: apiSchemas.length > 0 ? { apiSchemas } : {},\n properties,\n children: [],\n line: 0,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Naming & spec helpers\n// ---------------------------------------------------------------------------\n\n/** Make a valid USD identifier out of an arbitrary key (`/a/b c` → `_a_b_c`). */\nfunction sanitizeName(raw: string): string {\n const cleaned = raw.replace(/[^A-Za-z0-9_]/g, \"_\");\n const named = cleaned.length > 0 ? cleaned : \"_\";\n return /^[0-9]/.test(named) ? `_${named}` : named;\n}\n\n/** Allocates unique sanitized sibling names, warning when a name changes. */\nfunction nameAllocator(warn?: (m: string) => void): (raw: string, label?: string) => string {\n const used = new Set<string>();\n return (raw, label) => {\n let name = sanitizeName(raw);\n for (let i = 2; used.has(name); i++) name = `${sanitizeName(raw)}_${i}`;\n used.add(name);\n if (name !== raw && label && warn) warn(`${label} exported as prim \"${name}\"`);\n return name;\n };\n}\n\nfunction attr(\n name: string,\n typeName: string,\n value: UsdValue | undefined,\n metadata: MetadataMap = {},\n): AttributeSpec {\n return {\n kind: \"attribute\",\n name,\n typeName,\n isArray: false,\n variability: \"varying\",\n custom: false,\n ...(value !== undefined ? { value } : {}),\n metadata,\n line: 0,\n };\n}\n\nfunction arrayAttr(\n name: string,\n typeName: string,\n value: UsdValue[],\n metadata: MetadataMap = {},\n variability: \"varying\" | \"uniform\" = \"varying\",\n): AttributeSpec {\n return {\n kind: \"attribute\",\n name,\n typeName,\n isArray: true,\n variability,\n custom: false,\n value,\n metadata,\n line: 0,\n };\n}\n\nfunction uniformToken(name: string, value: string): AttributeSpec {\n return {\n kind: \"attribute\",\n name,\n typeName: \"token\",\n isArray: false,\n variability: \"uniform\",\n custom: false,\n value,\n metadata: {},\n line: 0,\n };\n}\n\nfunction rel(name: string, targets: string[]): RelationshipSpec {\n return {\n kind: \"relationship\",\n name,\n custom: false,\n listOp: \"explicit\",\n targets,\n metadata: {},\n line: 0,\n };\n}\n","/**\n * Geometry access for the robot exporter (M13).\n *\n * `exportRobotUsda` is geometry-agnostic: a {@link RobotGeometryProvider}\n * supplies each link's meshes as plain data. {@link stageGeometryProvider}\n * reads them back off a loaded {@link Stage} for round-trip export; the\n * Three.js authoring side (M14) supplies one backed by `BufferGeometry`.\n */\n\nimport { type Mat4, identity4, multiply } from \"../kinematics/transforms.js\";\nimport type { Vec2, Vec3 } from \"../parser/ast.js\";\nimport type { LinkDescription } from \"../robot/RobotDescription.js\";\nimport { getMaterialSubsets } from \"../schemas/usdGeom.js\";\nimport { resolveBoundMaterial } from \"../three/MaterialBinding.js\";\nimport type { Prim } from \"../usd/Prim.js\";\nimport type { Stage } from \"../usd/Stage.js\";\nimport { computeLocalTransform } from \"../usd/xformOps.js\";\n\n/** Texture channels a `UsdPreviewSurface` network can reference (M15). */\nexport type TextureChannel =\n | \"color\"\n | \"opacity\"\n | \"normal\"\n | \"roughness\"\n | \"metalness\"\n | \"occlusion\"\n | \"emissive\";\n\n/**\n * PBR parameters for a mesh, written as a `UsdPreviewSurface` material (M14).\n * `textures` holds per-channel image **asset paths** (M15) — emitted as a\n * `UsdUVTexture` + `UsdPrimvarReader_float2` network; sampler details\n * (wrap/scale/bias/transform) are not carried. Bundle the image bytes\n * themselves with `writeUsdz` under the same paths.\n */\nexport type ExportMaterial = {\n /** Material identity: meshes sharing a name share one Material prim. */\n name: string;\n diffuseColor?: Vec3;\n metallic?: number;\n roughness?: number;\n /** Sub-unit opacity renders as a translucent blend. */\n opacity?: number;\n emissiveColor?: Vec3;\n /** Per-channel texture asset paths. */\n textures?: Partial<Record<TextureChannel, string>>;\n};\n\n/** `UsdPhysicsMaterialAPI` parameters, bound via `material:binding:physics` (M16). */\nexport type ExportPhysicsMaterial = {\n /** Identity: meshes sharing a name share one physics-material prim. */\n name: string;\n staticFriction?: number;\n dynamicFriction?: number;\n restitution?: number;\n density?: number;\n};\n\n/** `physics:approximation` tokens of `UsdPhysicsMeshCollisionAPI`. */\nexport type CollisionApproximation =\n | \"none\"\n | \"convexHull\"\n | \"convexDecomposition\"\n | \"boundingSphere\"\n | \"boundingCube\"\n | \"meshSimplification\";\n\n/** One mesh of a link, as plain exportable data (stage units, link-relative). */\nexport type ExportMesh = {\n /** Prim-name hint; the exporter sanitizes and uniquifies it. */\n name: string;\n kind: \"visual\" | \"collision\";\n points: Vec3[];\n /** Authored polygon topology (not re-triangulated). */\n faceVertexCounts: number[];\n faceVertexIndices: number[];\n /** Per-vertex normals (only written when one per point). */\n normals?: Vec3[];\n /** `primvars:st` UVs, vertex interpolation (one per point). */\n st?: Vec2[];\n displayColor?: Vec3;\n doubleSided?: boolean;\n /** Transform relative to the link frame (column-major); identity when omitted. */\n transform?: Mat4;\n /** Bound material constants, if any. */\n material?: ExportMaterial;\n /** Collision approximation token (collision meshes only, M16). */\n collisionApproximation?: CollisionApproximation;\n /** Bound physics material (collision meshes only, M16). */\n physicsMaterial?: ExportPhysicsMaterial;\n};\n\n/** Supplies the meshes of a link for export. */\nexport type RobotGeometryProvider = (linkKey: string, link: LinkDescription) => ExportMesh[];\n\n/** Provider that reads each link's visual/collision Mesh prims from a stage. */\nexport function stageGeometryProvider(stage: Stage): RobotGeometryProvider {\n return (_linkKey, link) => {\n const linkPrim = stage.GetPrimAtPath(link.primPath);\n if (!linkPrim) return [];\n\n // Meshes that are both visual and collision export once, as visual.\n const visualSet = new Set(link.visualPrims);\n const out: ExportMesh[] = [];\n for (const path of link.visualPrims) {\n out.push(...readMeshes(stage, linkPrim, path, \"visual\"));\n }\n for (const path of link.collisionPrims ?? []) {\n if (visualSet.has(path)) continue;\n out.push(...readMeshes(stage, linkPrim, path, \"collision\"));\n }\n return out;\n };\n}\n\n/**\n * Read a Mesh prim as exportable data. A mesh painted by `materialBind` face\n * subsets becomes one {@link ExportMesh} per subset (points re-indexed to the\n * faces each one covers), so the export keeps its materials instead of\n * collapsing to a single colour.\n */\nfunction readMeshes(\n stage: Stage,\n linkPrim: Prim,\n meshPath: string,\n kind: \"visual\" | \"collision\",\n): ExportMesh[] {\n const prim = stage.GetPrimAtPath(meshPath);\n if (!prim) return [];\n\n const points = prim.GetAttribute(\"points\").Get();\n if (!isVec3Array(points) || points.length === 0) return [];\n\n const countsValue = prim.GetAttribute(\"faceVertexCounts\").Get();\n const indicesValue = prim.GetAttribute(\"faceVertexIndices\").Get();\n const counts = isNumberArray(countsValue) ? countsValue : [];\n const indices = isNumberArray(indicesValue) ? indicesValue : [];\n const normalsValue = prim.GetAttribute(\"normals\").Get();\n const stValue = prim.GetAttribute(\"primvars:st\").Get();\n const displayColor = prim.GetAttribute(\"primvars:displayColor\").Get();\n const normals =\n isVec3Array(normalsValue) && normalsValue.length === points.length ? normalsValue : undefined;\n const st = isVec2Array(stValue) && stValue.length === points.length ? stValue : undefined;\n\n // Attributes shared by every piece of this mesh.\n const transform = relativeTransform(linkPrim, prim);\n const common = {\n kind,\n ...(isVec3Array(displayColor) && displayColor[0] ? { displayColor: displayColor[0] } : {}),\n ...(prim.GetAttribute(\"doubleSided\").Get() === true ? { doubleSided: true } : {}),\n ...(isIdentity(transform) ? {} : { transform }),\n } satisfies Partial<ExportMesh>;\n\n const withPhysics = (mesh: ExportMesh): ExportMesh => {\n if (kind !== \"collision\") return mesh;\n const approximation = prim.GetAttribute(\"physics:approximation\").Get();\n if (typeof approximation === \"string\" && APPROXIMATIONS.has(approximation)) {\n mesh.collisionApproximation = approximation as CollisionApproximation;\n }\n const physicsMaterial = readBoundPhysicsMaterial(stage, prim);\n if (physicsMaterial) mesh.physicsMaterial = physicsMaterial;\n return mesh;\n };\n\n const subsets = getMaterialSubsets(prim);\n if (subsets.length === 0) {\n const material = readBoundMaterial(stage, prim);\n return [\n withPhysics({\n ...common,\n name: prim.GetName(),\n points: points.slice(),\n faceVertexCounts: counts.slice(),\n faceVertexIndices: indices.slice(),\n ...(normals ? { normals: normals.slice() } : {}),\n ...(st ? { st: st.slice() } : {}),\n ...(material ? { material } : {}),\n }),\n ];\n }\n\n const faceStart: number[] = [];\n let offset = 0;\n for (const count of counts) {\n faceStart.push(offset);\n offset += count;\n }\n\n /** Re-index the given faces onto their own point list. */\n const piece = (faces: number[], name: string, material?: ExportMaterial): ExportMesh | null => {\n const remap = new Map<number, number>();\n const outPoints: Vec3[] = [];\n const outNormals: Vec3[] = [];\n const outSt: Vec2[] = [];\n const outCounts: number[] = [];\n const outIndices: number[] = [];\n\n for (const face of faces) {\n const start = faceStart[face];\n const count = counts[face];\n if (start === undefined || count === undefined) continue;\n outCounts.push(count);\n for (let k = 0; k < count; k++) {\n const vertex = indices[start + k];\n if (vertex === undefined || !points[vertex]) continue;\n let mapped = remap.get(vertex);\n if (mapped === undefined) {\n mapped = outPoints.length;\n remap.set(vertex, mapped);\n outPoints.push(points[vertex]!);\n if (normals) outNormals.push(normals[vertex]!);\n if (st) outSt.push(st[vertex]!);\n }\n outIndices.push(mapped);\n }\n }\n if (outPoints.length === 0) return null;\n\n return withPhysics({\n ...common,\n name,\n points: outPoints,\n faceVertexCounts: outCounts,\n faceVertexIndices: outIndices,\n ...(normals ? { normals: outNormals } : {}),\n ...(st ? { st: outSt } : {}),\n ...(material ? { material } : {}),\n });\n };\n\n const out: ExportMesh[] = [];\n const claimed = new Set<number>();\n subsets.forEach((subset, index) => {\n const faces = subset.faces.filter((f) => f >= 0 && f < counts.length && !claimed.has(f));\n for (const f of faces) claimed.add(f);\n const material = readBoundMaterial(stage, subset.prim);\n const mesh = piece(faces, `${prim.GetName()}_${material?.name ?? index}`, material);\n if (mesh) out.push(mesh);\n });\n\n const leftover = counts.map((_, f) => f).filter((f) => !claimed.has(f));\n if (leftover.length > 0) {\n const material = readBoundMaterial(stage, prim);\n const mesh = piece(leftover, prim.GetName(), material);\n if (mesh) out.push(mesh);\n }\n return out;\n}\n\nconst APPROXIMATIONS: ReadonlySet<string> = new Set([\n \"none\",\n \"convexHull\",\n \"convexDecomposition\",\n \"boundingSphere\",\n \"boundingCube\",\n \"meshSimplification\",\n]);\n\n/** `UsdPhysicsMaterialAPI` parameters bound via `material:binding:physics`. */\nfunction readBoundPhysicsMaterial(stage: Stage, prim: Prim): ExportPhysicsMaterial | undefined {\n const target = firstBindingTarget(prim, \"material:binding:physics\");\n if (!target) return undefined;\n const materialPrim = stage.GetPrimAtPath(target);\n if (!materialPrim) return undefined;\n\n const out: ExportPhysicsMaterial = {\n name: target.split(\"/\").filter(Boolean).pop() ?? \"PhysicsMaterial\",\n };\n const read = (attr: string): number | undefined => {\n const v = materialPrim.GetAttribute(attr).Get();\n return typeof v === \"number\" ? v : undefined;\n };\n const staticFriction = read(\"physics:staticFriction\");\n if (staticFriction !== undefined) out.staticFriction = staticFriction;\n const dynamicFriction = read(\"physics:dynamicFriction\");\n if (dynamicFriction !== undefined) out.dynamicFriction = dynamicFriction;\n const restitution = read(\"physics:restitution\");\n if (restitution !== undefined) out.restitution = restitution;\n const density = read(\"physics:density\");\n if (density !== undefined) out.density = density;\n return Object.keys(out).length > 1 ? out : undefined;\n}\n\n/** First target of `relName` on the prim or an ancestor. */\nfunction firstBindingTarget(prim: Prim, relName: string): string | undefined {\n let p: Prim | null = prim;\n while (p) {\n const targets = p.GetRelationship(relName).GetTargets();\n if (targets.length > 0) return targets[0];\n p = p.GetParent();\n }\n return undefined;\n}\n\n/** PBR constants + texture asset paths of the bound material. */\nfunction readBoundMaterial(stage: Stage, prim: Prim): ExportMaterial | undefined {\n const bound = resolveBoundMaterial(stage, prim);\n if (!bound) return undefined;\n const material: ExportMaterial = { name: boundMaterialName(prim) ?? \"Material\" };\n if (bound.color) material.diffuseColor = bound.color;\n if (bound.metalness !== undefined) material.metallic = bound.metalness;\n if (bound.roughness !== undefined) material.roughness = bound.roughness;\n if (bound.opacity !== undefined) material.opacity = bound.opacity;\n if (bound.emissiveColor) material.emissiveColor = bound.emissiveColor;\n\n const textures: Partial<Record<TextureChannel, string>> = {};\n if (bound.colorTexture) textures.color = bound.colorTexture.path;\n if (bound.opacityTexture) textures.opacity = bound.opacityTexture.path;\n if (bound.normalTexture) textures.normal = bound.normalTexture.path;\n if (bound.roughnessTexture) textures.roughness = bound.roughnessTexture.path;\n if (bound.metalnessTexture) textures.metalness = bound.metalnessTexture.path;\n if (bound.occlusionTexture) textures.occlusion = bound.occlusionTexture.path;\n if (bound.emissiveTexture) textures.emissive = bound.emissiveTexture.path;\n if (Object.keys(textures).length > 0) material.textures = textures;\n\n return Object.keys(material).length > 1 ? material : undefined;\n}\n\n/** Leaf name of the first `material:binding` target on the prim or an ancestor. */\nfunction boundMaterialName(prim: Prim): string | undefined {\n let p: Prim | null = prim;\n while (p) {\n const targets = p.GetRelationship(\"material:binding\").GetTargets();\n if (targets.length > 0) return targets[0]!.split(\"/\").filter(Boolean).pop();\n p = p.GetParent();\n }\n return undefined;\n}\n\n/** Accumulated local transform from `linkPrim` (exclusive) down to `meshPrim` (inclusive). */\nfunction relativeTransform(linkPrim: Prim, meshPrim: Prim): Mat4 {\n const chain: Prim[] = [];\n let p: Prim | null = meshPrim;\n const stop = linkPrim.GetPath();\n while (p && p.GetPath() !== stop) {\n chain.push(p);\n p = p.GetParent();\n }\n chain.reverse();\n\n let m = identity4();\n for (const prim of chain) {\n m = multiply(m, computeLocalTransform(prim).matrix);\n }\n return m;\n}\n\nfunction isIdentity(m: Mat4): boolean {\n for (let i = 0; i < 16; i++) {\n if (m[i] !== (i % 5 === 0 ? 1 : 0)) return false;\n }\n return true;\n}\n\nfunction isNumberArray(v: unknown): v is number[] {\n return Array.isArray(v) && v.every((n) => typeof n === \"number\");\n}\n\nfunction isVec3Array(v: unknown): v is Vec3[] {\n return Array.isArray(v) && v.every((e) => Array.isArray(e) && e.length === 3);\n}\n\nfunction isVec2Array(v: unknown): v is Vec2[] {\n return Array.isArray(v) && v.every((e) => Array.isArray(e) && e.length === 2);\n}\n","/**\n * USDZ package writer (M15) — the write-direction counterpart of `openUsdz`.\n *\n * A `.usdz` is a **stored** (uncompressed) zip whose entries' file data must\n * start on 64-byte boundaries; alignment is achieved with padding placed in a\n * local-header extra field (the fflate-sanctioned trick, as used by Three.js's\n * USDZExporter). The first entry is the package's root USD layer — `openUsdz`\n * and other USDZ readers open that one.\n */\n\nimport { type Zippable, strToU8, zipSync } from \"fflate\";\n\nconst USD_ENTRY = /\\.(usda|usdc|usd)$/i;\n/** Private extra-field id used purely as alignment padding. */\nconst PAD_EXTRA_ID = 12345;\n/** Bytes of a zip local file header before the name/extra fields. */\nconst LOCAL_HEADER_SIZE = 30;\n/** An extra field costs 4 header bytes (id + size) plus its data. */\nconst EXTRA_HEADER_SIZE = 4;\n\n/**\n * Pack entries into USDZ bytes. `entries` maps archive paths to file contents\n * (strings are UTF-8 encoded — pass the `serializeUsda` output directly). One\n * entry must be a USD layer (`.usda`/`.usdc`/`.usd`); the first such entry\n * becomes the package root and is moved to the front of the archive.\n */\nexport function writeUsdz(entries: Record<string, Uint8Array | string>): Uint8Array {\n const names = Object.keys(entries);\n const root = names.find((n) => USD_ENTRY.test(n));\n if (!root) {\n throw new Error(\"writeUsdz: entries must include a root USD layer (.usda/.usdc/.usd)\");\n }\n const ordered = [root, ...names.filter((n) => n !== root)];\n\n const files: Zippable = {};\n let offset = 0;\n for (const name of ordered) {\n const raw = entries[name]!;\n const data = typeof raw === \"string\" ? strToU8(raw) : raw;\n const nameLength = strToU8(name).length;\n\n // Where this entry's data would start without an extra field.\n const dataStart = offset + LOCAL_HEADER_SIZE + nameLength;\n if ((dataStart & 63) === 0) {\n files[name] = data;\n offset = dataStart + data.length;\n } else {\n // Pad so the data starts on the next 64-byte boundary past the 4-byte\n // extra-field header.\n const padLength = (64 - ((dataStart + EXTRA_HEADER_SIZE) & 63)) & 63;\n files[name] = [data, { extra: { [PAD_EXTRA_ID]: new Uint8Array(padLength) } }];\n offset = dataStart + EXTRA_HEADER_SIZE + padLength + data.length;\n }\n }\n\n return zipSync(files, { level: 0 });\n}\n","/**\n * Simulation-readiness checks for a {@link RobotDescription} (M16).\n *\n * Validates what Isaac Sim's Asset Validator cares about that is visible from\n * the IR (plus, optionally, the export geometry): graph connectivity, limit\n * sanity, mass properties, and collision setup. `error` issues break\n * simulation; `warning` issues are quality gaps a physics engine tolerates\n * but misbehaves on.\n */\n\nimport type { RobotGeometryProvider } from \"../export/GeometryProvider.js\";\nimport { decomposeRigid } from \"../kinematics/transforms.js\";\nimport type { JointType, RobotDescription } from \"./RobotDescription.js\";\nimport { buildKinematicTree } from \"./buildKinematicTree.js\";\n\nconst isAngular = (type: JointType): boolean => type === \"revolute\" || type === \"continuous\";\n\nexport type ValidationSeverity = \"error\" | \"warning\";\n\nexport type ValidationIssue = {\n severity: ValidationSeverity;\n /** Stable machine-readable code (e.g. `unknown-link`, `no-collision`). */\n code: string;\n message: string;\n /** Link or joint key the issue refers to, when applicable. */\n subject?: string;\n};\n\nexport type ValidateRobotOptions = {\n /** Enables mesh-level checks (collision presence / approximation). */\n geometry?: RobotGeometryProvider;\n};\n\n/** Check a robot IR for simulation-readiness; returns errors first. */\nexport function validateRobotDescription(\n desc: RobotDescription,\n options: ValidateRobotOptions = {},\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const add = (severity: ValidationSeverity, code: string, message: string, subject?: string) =>\n issues.push({ severity, code, message, ...(subject !== undefined ? { subject } : {}) });\n\n if (Object.keys(desc.links).length === 0) {\n add(\"error\", \"no-links\", \"robot has no links\");\n }\n\n for (const [key, joint] of Object.entries(desc.joints)) {\n if (joint.parent !== \"\" && !desc.links[joint.parent]) {\n add(\n \"error\",\n \"unknown-link\",\n `joint \"${key}\" references unknown parent \"${joint.parent}\"`,\n key,\n );\n }\n if (!desc.links[joint.child]) {\n add(\"error\", \"unknown-link\", `joint \"${key}\" references unknown child \"${joint.child}\"`, key);\n }\n if (joint.lower !== undefined && joint.upper !== undefined && joint.lower > joint.upper) {\n add(\n \"error\",\n \"invalid-limits\",\n `joint \"${key}\" lower limit ${joint.lower} exceeds upper ${joint.upper}`,\n key,\n );\n }\n if (\n joint.initialValue !== undefined &&\n ((joint.lower !== undefined && joint.initialValue < joint.lower) ||\n (joint.upper !== undefined && joint.initialValue > joint.upper))\n ) {\n add(\n \"warning\",\n \"initial-out-of-limits\",\n `joint \"${key}\" initial value ${joint.initialValue} is outside its limits`,\n key,\n );\n }\n const frames = [\n [\"jointFrame0\", joint.jointFrame0],\n [\"jointFrame1\", joint.jointFrame1],\n ] as const;\n for (const [label, frame] of frames) {\n if (!decomposeRigid(frame).rigid) {\n add(\n \"warning\",\n \"non-rigid-frame\",\n `joint \"${key}\" ${label} carries scale/shear/reflection (discarded on export)`,\n key,\n );\n }\n }\n\n const mimic = joint.mimic;\n if (mimic) {\n const leader = desc.joints[mimic.joint];\n if (!leader) {\n add(\n \"error\",\n \"mimic-unknown-joint\",\n `joint \"${key}\" mimics unknown joint \"${mimic.joint}\"`,\n key,\n );\n } else if (joint.type === \"fixed\" || leader.type === \"fixed\") {\n add(\n \"error\",\n \"mimic-fixed-joint\",\n `joint \"${key}\" mimic involves a fixed joint (inert)`,\n key,\n );\n } else if (isAngular(joint.type) !== isAngular(leader.type)) {\n add(\n \"error\",\n \"mimic-type-mismatch\",\n `joint \"${key}\" (${joint.type}) mimics \"${mimic.joint}\" (${leader.type}) — leader and follower must share the motion kind`,\n key,\n );\n }\n }\n }\n\n // Mimic cycles: follow follower → leader edges; a walk that returns to its\n // start is a cycle (each member reports once).\n for (const startKey of Object.keys(desc.joints)) {\n if (!desc.joints[startKey]?.mimic) continue;\n const seen = new Set<string>();\n let current: string | undefined = startKey;\n while (current !== undefined && desc.joints[current]?.mimic) {\n const next: string = desc.joints[current]!.mimic!.joint;\n if (next === startKey) {\n add(\n \"error\",\n \"mimic-cycle\",\n `joint \"${startKey}\" is part of a mimic cycle — followers cannot be driven`,\n startKey,\n );\n break;\n }\n if (seen.has(next)) break;\n seen.add(next);\n current = next;\n }\n }\n\n const tree = buildKinematicTree(desc);\n for (const jointKey of tree.loopJoints) {\n add(\n \"warning\",\n \"closed-loop\",\n `joint \"${jointKey}\" closes a kinematic loop (dropped from the spanning tree)`,\n jointKey,\n );\n }\n for (const linkKey of tree.isolatedLinks) {\n add(\n \"warning\",\n \"isolated-link\",\n `link \"${linkKey}\" is unreachable from root \"${tree.root}\"`,\n linkKey,\n );\n }\n if ((desc.articulationRoots ?? []).length === 0 && !tree.rootJoint) {\n add(\n \"warning\",\n \"no-articulation-root\",\n \"no ArticulationRootAPI link and no world-fixed joint — the base will float\",\n );\n }\n\n for (const [key, link] of Object.entries(desc.links)) {\n const inertial = link.inertial;\n if (!inertial || (inertial.mass === undefined && inertial.density === undefined)) {\n add(\"warning\", \"no-inertial\", `link \"${key}\" has no mass or density (PhysicsMassAPI)`, key);\n }\n if (inertial?.mass !== undefined && inertial.mass <= 0) {\n add(\"error\", \"bad-mass\", `link \"${key}\" has non-positive mass ${inertial.mass}`, key);\n }\n if (inertial?.diagonalInertia?.some((v) => v < 0)) {\n add(\"error\", \"bad-inertia\", `link \"${key}\" has a negative diagonal-inertia component`, key);\n }\n if (inertial?.principalAxes && !inertial.diagonalInertia) {\n add(\n \"warning\",\n \"inertia-pairing\",\n `link \"${key}\" authors principalAxes without diagonalInertia (dropped on export)`,\n key,\n );\n }\n\n if (options.geometry) {\n const meshes = options.geometry(key, link);\n const collisions = meshes.filter((mesh) => mesh.kind === \"collision\");\n if (collisions.length === 0) {\n add(\"warning\", \"no-collision\", `link \"${key}\" has no collision geometry`, key);\n }\n for (const mesh of collisions) {\n if (!mesh.collisionApproximation) {\n add(\n \"warning\",\n \"collision-approximation\",\n `link \"${key}\" collision mesh \"${mesh.name}\" has no physics:approximation (PhysX dynamic bodies need a convex or primitive approximation)`,\n key,\n );\n }\n }\n }\n }\n\n return issues.sort((a, b) => (a.severity === b.severity ? 0 : a.severity === \"error\" ? -1 : 1));\n}\n"]}
|