angular-three-rapier 4.2.0 → 4.2.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-rapier.mjs","sources":["../../../../libs/rapier/src/lib/interaction-groups.ts","../../../../libs/rapier/src/lib/debug.ts","../../../../libs/rapier/src/lib/frame-stepper.ts","../../../../libs/rapier/src/lib/shared.ts","../../../../libs/rapier/src/lib/utils.ts","../../../../libs/rapier/src/lib/physics.ts","../../../../libs/rapier/src/lib/rigid-body.ts","../../../../libs/rapier/src/lib/colliders.ts","../../../../libs/rapier/src/lib/instanced-rigid-bodies.ts","../../../../libs/rapier/src/lib/joints.ts","../../../../libs/rapier/src/lib/mesh-collider.ts","../../../../libs/rapier/src/lib/physics-hooks.ts","../../../../libs/rapier/src/angular-three-rapier.ts"],"sourcesContent":["import { computed, Directive, effect, inject, InjectionToken, input } from '@angular/core';\nimport { InteractionGroups } from '@dimforge/rapier3d-compat';\n\n/**\n * Calculates an InteractionGroup bitmask for use in the `collisionGroups` or `solverGroups`\n * properties of RigidBody or Collider components. The first argument represents a list of\n * groups the entity is in (expressed as numbers from 0 to 15). The second argument is a list\n * of groups that will be filtered against. When it is omitted, all groups are filtered against.\n *\n * @example\n * A RigidBody that is member of group 0 and will collide with everything from groups 0 and 1:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0], [0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will collide with everything else:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will not collide with anything:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1], [])} />\n * ```\n *\n * Please note that Rapier needs interaction filters to evaluate to true between _both_ colliding\n * entities for collision events to trigger.\n *\n * @param memberships Groups the collider is a member of. (Values can range from 0 to 15.)\n * @param filters Groups the interaction group should filter against. (Values can range from 0 to 15.)\n * @returns An InteractionGroup bitmask.\n */\nexport function interactionGroups(memberships: number | number[], filters?: number | number[]): InteractionGroups {\n\treturn (bitmask(memberships) << 16) + (filters !== undefined ? bitmask(filters) : 0b1111_1111_1111_1111);\n}\n\nfunction bitmask(groups: number | number[]): InteractionGroups {\n\treturn [groups].flat().reduce((acc, layer) => acc | (1 << layer), 0);\n}\n\n/**\n * Injection token for handlers that set collision groups on colliders.\n * Used internally by rigid bodies and attractors to apply interaction groups.\n */\nexport const COLLISION_GROUPS_HANDLER = new InjectionToken<\n\t() => undefined | ((interactionGroups: InteractionGroups) => void)\n>('COLLISION_GROUPS_HANDLER');\n\n/**\n * Directive for setting collision/solver groups on a rigid body or collider.\n * This allows filtering which objects can collide with each other.\n *\n * @example\n * ```html\n * <!-- Object in group 0, collides with groups 0 and 1 -->\n * <ngt-object3D rigidBody [interactionGroups]=\"[[0], [0, 1]]\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Object in groups 0 and 1, collides with everything -->\n * <ngt-object3D rigidBody [interactionGroups]=\"[[0, 1]]\">\n * <ngt-mesh>\n * <ngt-sphere-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n * ```\n */\n@Directive({ selector: 'ngt-object3D[interactionGroups]' })\nexport class NgtrInteractionGroups {\n\tinputs = input.required<[number | number[], (number | number[])?]>({ alias: 'interactionGroups' });\n\tinteractionGroups = computed(() => {\n\t\tconst [memberships, filters] = this.inputs();\n\t\treturn interactionGroups(memberships, filters);\n\t});\n\n\tconstructor() {\n\t\tconst collisionGroupsHandlerFn = inject(COLLISION_GROUPS_HANDLER, { host: true, optional: true });\n\n\t\teffect(() => {\n\t\t\tif (!collisionGroupsHandlerFn) return;\n\t\t\tconst handler = collisionGroupsHandlerFn();\n\t\t\tif (!handler) return;\n\t\t\thandler(this.interactionGroups());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend } from 'angular-three';\nimport * as THREE from 'three';\nimport { Group, LineBasicMaterial, LineSegments } from 'three';\nimport { NgtrPhysics } from './physics';\n\n/**\n * Debug visualization component for the physics world.\n * Renders wireframe outlines of all colliders in the physics simulation.\n *\n * This component is automatically rendered when the `debug` option is set to `true`\n * on the `NgtrPhysics` component. It updates every frame to show current collider positions.\n *\n * @example\n * ```html\n * <ngtr-physics [options]=\"{ debug: true }\">\n * <ng-template>\n * <!-- Your physics scene -->\n * </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Component({\n\tselector: 'ngtr-debug',\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-line-segments #lineSegments [frustumCulled]=\"false\">\n\t\t\t\t<ngt-line-basic-material color=\"white\" vertexColors />\n\t\t\t\t<ngt-buffer-geometry />\n\t\t\t</ngt-line-segments>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtrDebug {\n\tprivate physics = inject(NgtrPhysics);\n\tprivate lineSegmentsRef = viewChild.required<ElementRef<THREE.LineSegments>>('lineSegments');\n\n\tconstructor() {\n\t\textend({ Group, LineSegments, LineBasicMaterial });\n\n\t\tbeforeRender(() => {\n\t\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst lineSegments = this.lineSegmentsRef().nativeElement;\n\t\t\tif (!lineSegments) return;\n\n\t\t\tconst buffers = worldSingleton.proxy.debugRender();\n\t\t\tconst geometry = new THREE.BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(buffers.vertices, 3));\n\t\t\tgeometry.setAttribute('color', new THREE.BufferAttribute(buffers.colors, 4));\n\n\t\t\tlineSegments.geometry.dispose();\n\t\t\tlineSegments.geometry = geometry;\n\t\t});\n\t}\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { NgtrPhysicsOptions } from './types';\n\n/**\n * Internal directive that manages the physics simulation loop.\n * Handles both \"follow\" mode (tied to render loop) and \"independent\" mode (separate loop).\n *\n * This directive is used internally by NgtrPhysics and should not be used directly.\n */\n@Directive({ selector: 'ngtr-frame-stepper' })\nexport class NgtrFrameStepper {\n\tready = input(false);\n\tupdatePriority = input<number | undefined>(0);\n\tstepFn = input.required<(delta: number) => void>();\n\ttype = input.required<NgtrPhysicsOptions['updateLoop']>();\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect((onCleanup) => {\n\t\t\tconst ready = this.ready();\n\t\t\tif (!ready) return;\n\n\t\t\tconst [type, stepFn] = [this.type(), this.stepFn()];\n\n\t\t\tif (type === 'follow') {\n\t\t\t\tconst updatePriority = this.updatePriority();\n\t\t\t\tconst cleanup = store.snapshot.internal.subscribe(\n\t\t\t\t\t({ delta }) => {\n\t\t\t\t\t\tstepFn(delta);\n\t\t\t\t\t},\n\t\t\t\t\tupdatePriority,\n\t\t\t\t\tstore,\n\t\t\t\t);\n\t\t\t\tonCleanup(() => cleanup());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastFrame = 0;\n\t\t\tlet raf: ReturnType<typeof requestAnimationFrame> = 0;\n\t\t\tconst loop = () => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tconst delta = now - lastFrame;\n\t\t\t\traf = requestAnimationFrame(loop);\n\t\t\t\tstepFn(delta);\n\t\t\t\tlastFrame = now;\n\t\t\t};\n\n\t\t\traf = requestAnimationFrame(loop);\n\t\t\tonCleanup(() => cancelAnimationFrame(raf));\n\t\t});\n\t}\n}\n","import * as THREE from 'three';\n\n/**\n * Shared reusable Three.js objects for internal calculations.\n * These are used to avoid creating new objects on every frame,\n * which would cause garbage collection pressure.\n *\n * @internal\n */\n\n/** Shared quaternion for internal calculations */\nexport const _quaternion = new THREE.Quaternion();\n/** Shared euler angles for internal calculations */\nexport const _euler = new THREE.Euler();\n/** Shared vector3 for internal calculations */\nexport const _vector3 = new THREE.Vector3();\n/** Shared Object3D for internal calculations */\nexport const _object3d = new THREE.Object3D();\n/** Shared matrix4 for internal calculations */\nexport const _matrix4 = new THREE.Matrix4();\n/** Shared position vector for internal calculations */\nexport const _position = new THREE.Vector3();\n/** Shared rotation quaternion for internal calculations */\nexport const _rotation = new THREE.Quaternion();\n/** Shared scale vector for internal calculations */\nexport const _scale = new THREE.Vector3();\n","import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';\nimport { is, NgtEuler, NgtQuaternion, NgtVector3 } from 'angular-three';\nimport * as THREE from 'three';\nimport { mergeVertices } from 'three-stdlib';\nimport { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';\nimport { NgtrColliderOptions, NgtrColliderShape, NgtrRigidBodyAutoCollider, NgtrRigidBodyOptions } from './types';\n\n/**\n * Creates a proxy that will create a singleton instance of the given class\n * when a property is accessed, and not before. This is useful for lazy initialization\n * of expensive objects like physics worlds.\n *\n * @template SingletonClass - The type of the singleton instance\n * @template CreationFn - The type of the factory function\n * @param createInstance - A function that returns a new instance of the class\n * @returns An object containing the proxy, reset function, and set function\n *\n * @example\n * ```typescript\n * const { proxy, reset } = createSingletonProxy(() => new World(gravity));\n * // Access the world lazily\n * proxy.step();\n * // Reset when done\n * reset();\n * ```\n */\nexport const createSingletonProxy = <\n\tSingletonClass extends object,\n\tCreationFn extends () => SingletonClass = () => SingletonClass,\n>(\n\t/**\n\t * A function that returns a new instance of the class\n\t */\n\tcreateInstance: CreationFn,\n): {\n\t/** The lazy proxy to the singleton instance */\n\tproxy: SingletonClass;\n\t/** Resets the singleton, allowing a new instance to be created */\n\treset: () => void;\n\t/** Sets the singleton to a specific instance */\n\tset: (newInstance: SingletonClass) => void;\n} => {\n\tlet instance: SingletonClass | undefined;\n\n\tconst handler: ProxyHandler<SingletonClass> = {\n\t\tget(target, prop) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.get(instance!, prop);\n\t\t},\n\t\tset(target, prop, value) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.set(instance!, prop, value);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy({} as SingletonClass, handler) as SingletonClass;\n\n\tconst reset = () => {\n\t\tinstance = undefined;\n\t};\n\n\tconst set = (newInstance: SingletonClass) => {\n\t\tinstance = newInstance;\n\t};\n\n\t/**\n\t * Return the proxy and a reset function\n\t */\n\treturn { proxy, reset, set };\n};\n\n/**\n * Converts a Rapier quaternion to a Three.js quaternion.\n *\n * @param quaternion - The Rapier quaternion to convert\n * @returns A Three.js Quaternion with the same values\n */\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\n/**\n * Converts an Angular Three vector representation to a Rapier Vector3.\n * Supports arrays, numbers (uniform scale), and objects with x, y, z properties.\n *\n * @param v - The vector to convert (can be [x, y, z], a number, or {x, y, z})\n * @returns A Rapier Vector3 instance\n *\n * @example\n * ```typescript\n * vector3ToRapierVector([1, 2, 3]); // RapierVector3(1, 2, 3)\n * vector3ToRapierVector(5); // RapierVector3(5, 5, 5)\n * vector3ToRapierVector({ x: 1, y: 2, z: 3 }); // RapierVector3(1, 2, 3)\n * ```\n */\nexport function vector3ToRapierVector(v: NgtVector3) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierVector3(v[0], v[1], v[2]);\n\t}\n\n\tif (typeof v === 'number') {\n\t\treturn new RapierVector3(v, v, v);\n\t}\n\n\treturn new RapierVector3(v.x, v.y, v.z);\n}\n\n/**\n * Converts an Angular Three quaternion representation to a Rapier Quaternion.\n * Supports arrays and objects with x, y, z, w properties.\n *\n * @param v - The quaternion to convert (can be [x, y, z, w] or {x, y, z, w})\n * @returns A Rapier Quaternion instance\n *\n * @example\n * ```typescript\n * quaternionToRapierQuaternion([0, 0, 0, 1]); // Identity quaternion\n * quaternionToRapierQuaternion({ x: 0, y: 0, z: 0, w: 1 }); // Identity quaternion\n * ```\n */\nexport function quaternionToRapierQuaternion(v: NgtQuaternion) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierQuaternion(v[0], v[1], v[2], v[3]);\n\t}\n\n\treturn new RapierQuaternion(v.x, v.y, v.z, v.w);\n}\n\nfunction isChildOfMeshCollider(child: THREE.Mesh) {\n\tlet flag = false;\n\tchild.traverseAncestors((a) => {\n\t\tif (a.userData['ngtRapierType'] === 'MeshCollider') flag = true;\n\t});\n\treturn flag;\n}\n\nconst autoColliderMap = {\n\tcuboid: 'cuboid',\n\tball: 'ball',\n\thull: 'convexHull',\n\ttrimesh: 'trimesh',\n};\n\nfunction getColliderArgsFromGeometry(\n\tgeometry: THREE.BufferGeometry,\n\tcolliders: NgtrRigidBodyAutoCollider,\n): { args: unknown[]; offset: THREE.Vector3 } {\n\tswitch (colliders) {\n\t\tcase 'cuboid': {\n\t\t\tgeometry.computeBoundingBox();\n\t\t\tconst { boundingBox } = geometry;\n\t\t\tconst size = boundingBox!.getSize(new THREE.Vector3());\n\t\t\treturn {\n\t\t\t\targs: [size.x / 2, size.y / 2, size.z / 2],\n\t\t\t\toffset: boundingBox!.getCenter(new THREE.Vector3()),\n\t\t\t};\n\t\t}\n\n\t\tcase 'ball': {\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\tconst { boundingSphere } = geometry;\n\n\t\t\tconst radius = boundingSphere!.radius;\n\n\t\t\treturn {\n\t\t\t\targs: [radius],\n\t\t\t\toffset: boundingSphere!.center,\n\t\t\t};\n\t\t}\n\n\t\tcase 'trimesh': {\n\t\t\tconst clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);\n\n\t\t\treturn {\n\t\t\t\targs: [\n\t\t\t\t\tclonedGeometry.attributes['position'].array as Float32Array,\n\t\t\t\t\tclonedGeometry.index?.array as Uint32Array,\n\t\t\t\t],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\n\t\tcase 'hull': {\n\t\t\tconst clonedGeometry = geometry.clone();\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn { args: [], offset: new THREE.Vector3() };\n}\n\n/**\n * Creates collider options by traversing child meshes of an object and generating\n * appropriate collider configurations based on their geometries.\n *\n * @param object - The parent Object3D to traverse for meshes\n * @param options - The rigid body options containing collider type and other settings\n * @param ignoreMeshColliders - Whether to skip meshes that are children of mesh colliders\n * @returns Array of collider configurations with shape, args, position, rotation, and scale\n *\n * @example\n * ```typescript\n * const colliderOptions = createColliderOptions(rigidBodyObject, { colliders: 'cuboid' });\n * // Returns array of collider configs for each mesh child\n * ```\n */\nexport function createColliderOptions(\n\tobject: THREE.Object3D,\n\toptions: NgtrRigidBodyOptions,\n\tignoreMeshColliders = true,\n) {\n\tconst childColliderOptions: {\n\t\tcolliderOptions: NgtrColliderOptions;\n\t\targs: unknown[];\n\t\tshape: NgtrColliderShape;\n\t\trotation: NgtEuler;\n\t\tposition: NgtVector3;\n\t\tscale: NgtVector3;\n\t}[] = [];\n\tobject.updateWorldMatrix(true, false);\n\tconst invertedParentMatrixWorld = object.matrixWorld.clone().invert();\n\n\tconst colliderFromChild = (child: THREE.Object3D) => {\n\t\tif (is.three<THREE.Mesh>(child, 'isMesh')) {\n\t\t\tif (ignoreMeshColliders && isChildOfMeshCollider(child)) return;\n\n\t\t\tconst worldScale = child.getWorldScale(_scale);\n\t\t\tconst shape = autoColliderMap[options.colliders || 'cuboid'] as NgtrColliderShape;\n\t\t\tchild.updateWorldMatrix(true, false);\n\t\t\t_matrix4\n\t\t\t\t.copy(child.matrixWorld)\n\t\t\t\t.premultiply(invertedParentMatrixWorld)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tconst rotationEuler = new THREE.Euler().setFromQuaternion(_rotation, 'XYZ');\n\n\t\t\tconst { args, offset } = getColliderArgsFromGeometry(child.geometry, options.colliders || 'cuboid');\n\t\t\tconst { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } =\n\t\t\t\toptions;\n\n\t\t\tchildColliderOptions.push({\n\t\t\t\tcolliderOptions: rest,\n\t\t\t\targs,\n\t\t\t\tshape,\n\t\t\t\trotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],\n\t\t\t\tposition: [\n\t\t\t\t\t_position.x + offset.x * worldScale.x,\n\t\t\t\t\t_position.y + offset.y * worldScale.y,\n\t\t\t\t\t_position.z + offset.z * worldScale.z,\n\t\t\t\t],\n\t\t\t\tscale: [worldScale.x, worldScale.y, worldScale.z],\n\t\t\t});\n\t\t}\n\t};\n\n\tif (options.includeInvisible) {\n\t\tobject.traverse(colliderFromChild);\n\t} else {\n\t\tobject.traverseVisible(colliderFromChild);\n\t}\n\n\treturn childColliderOptions;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport RAPIER, { ColliderHandle, EventQueue, PhysicsHooks, Rotation, Vector, World } from '@dimforge/rapier3d-compat';\nimport { injectStore, pick, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { NgtrDebug } from './debug';\nimport { NgtrFrameStepper } from './frame-stepper';\nimport { _matrix4, _position, _rotation, _scale } from './shared';\nimport {\n\tNgtrColliderStateMap,\n\tNgtrCollisionPayload,\n\tNgtrCollisionSource,\n\tNgtrEventMap,\n\tNgtrFilterContactPairCallback,\n\tNgtrFilterIntersectionPairCallback,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallback,\n} from './types';\nimport { createSingletonProxy, rapierQuaternionToQuaternion } from './utils';\n\nconst defaultOptions: NgtrPhysicsOptions = {\n\tgravity: [0, -9.81, 0],\n\tallowedLinearError: 0.001,\n\tnumSolverIterations: 4,\n\tnumInternalPgsIterations: 1,\n\tpredictionDistance: 0.002,\n\tminIslandSize: 128,\n\tmaxCcdSubsteps: 1,\n\tcontactNaturalFrequency: 30,\n\tlengthUnit: 1,\n\tcolliders: 'cuboid',\n\tupdateLoop: 'follow',\n\tinterpolate: true,\n\tpaused: false,\n\ttimeStep: 1 / 60,\n\tdebug: false,\n};\n\n/**\n * Directive for providing a fallback template when Rapier fails to load.\n *\n * @example\n * ```html\n * <ngtr-physics>\n * <ng-template>\n * <!-- Physics scene content -->\n * </ng-template>\n * <ng-template rapierFallback let-error=\"error\">\n * <p>Failed to load physics: {{ error }}</p>\n * </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Directive({ selector: 'ng-template[rapierFallback]' })\nexport class NgtrPhysicsFallback {\n\t/** Type guard for template context */\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n/**\n * Main physics component that creates and manages a Rapier physics world.\n * Wrap your 3D scene content in this component to enable physics simulation.\n *\n * The component lazily loads the Rapier WASM module and provides the physics\n * context to all child components.\n *\n * @example\n * ```html\n * <ngtr-physics [options]=\"{ gravity: [0, -9.81, 0], debug: true }\">\n * <ng-template>\n * <ngt-object3D rigidBody>\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngt-object3D>\n * </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Component({\n\tselector: 'ngtr-physics',\n\ttemplate: `\n\t\t@let _rapierError = rapierError();\n\t\t@let _fallbackContent = fallbackContent();\n\n\t\t@if (rapierConstruct()) {\n\t\t\t@if (debug()) {\n\t\t\t\t<ngtr-debug />\n\t\t\t}\n\n\t\t\t<ngtr-frame-stepper\n\t\t\t\t[ready]=\"ready()\"\n\t\t\t\t[stepFn]=\"step.bind(this)\"\n\t\t\t\t[type]=\"updateLoop()\"\n\t\t\t\t[updatePriority]=\"updatePriority()\"\n\t\t\t/>\n\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t} @else if (_rapierError && _fallbackContent) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"_fallbackContent\" [ngTemplateOutletContext]=\"{ error: _rapierError }\" />\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],\n})\nexport class NgtrPhysics {\n\t/** Physics configuration options */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprotected content = contentChild.required(TemplateRef);\n\tprotected fallbackContent = contentChild(NgtrPhysicsFallback, { read: TemplateRef });\n\n\tprotected updatePriority = pick(this.options, 'updatePriority');\n\tprotected updateLoop = pick(this.options, 'updateLoop');\n\n\tprivate numSolverIterations = pick(this.options, 'numSolverIterations');\n\tprivate numInternalPgsIterations = pick(this.options, 'numInternalPgsIterations');\n\tprivate allowedLinearError = pick(this.options, 'allowedLinearError');\n\tprivate minIslandSize = pick(this.options, 'minIslandSize');\n\tprivate maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');\n\tprivate predictionDistance = pick(this.options, 'predictionDistance');\n\tprivate contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');\n\tprivate lengthUnit = pick(this.options, 'lengthUnit');\n\tprivate timeStep = pick(this.options, 'timeStep');\n\tprivate interpolate = pick(this.options, 'interpolate');\n\n\t/** Whether the physics simulation is paused */\n\tpaused = pick(this.options, 'paused');\n\tprotected debug = pick(this.options, 'debug');\n\t/** The default collider type for automatic collider generation */\n\tcolliders = pick(this.options, 'colliders');\n\n\tprivate vGravity = vector3(this.options, 'gravity');\n\n\tprivate store = injectStore();\n\n\tprotected rapierConstruct = signal<typeof RAPIER | null>(null);\n\tprotected rapierError = signal<string | null>(null);\n\t/** The loaded Rapier module, null if not yet loaded */\n\trapier = this.rapierConstruct.asReadonly();\n\n\tprotected ready = computed(() => !!this.rapier());\n\t/** Singleton proxy to the Rapier physics world */\n\tworldSingleton = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn createSingletonProxy<World>(() => new rapier.World(untracked(this.vGravity)));\n\t});\n\n\t/** Map of rigid body states indexed by handle */\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\t/** Map of collider states indexed by handle */\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\t/** Map of rigid body event handlers indexed by handle */\n\trigidBodyEvents: NgtrEventMap = new Map();\n\t/** Map of collider event handlers indexed by handle */\n\tcolliderEvents: NgtrEventMap = new Map();\n\t/** Callbacks to run before each physics step */\n\tbeforeStepCallbacks = new Set<NgtrWorldStepCallback>();\n\t/** Callbacks to run after each physics step */\n\tafterStepCallbacks = new Set<NgtrWorldStepCallback>();\n\t/** Callbacks to filter contact pairs */\n\tfilterContactPairCallbacks = new Set<NgtrFilterContactPairCallback>();\n\t/** Callbacks to filter intersection pairs */\n\tfilterIntersectionPairCallbacks = new Set<NgtrFilterIntersectionPairCallback>();\n\n\tprivate hooks: PhysicsHooks = {\n\t\tfilterContactPair: (...args) => {\n\t\t\tfor (const callback of this.filterContactPairCallbacks) {\n\t\t\t\tconst result = callback(...args);\n\t\t\t\tif (result !== null) return result;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tfilterIntersectionPair: (...args) => {\n\t\t\tfor (const callback of this.filterIntersectionPairCallbacks) {\n\t\t\t\tconst result = callback(...args);\n\t\t\t\tif (result === false) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tprivate eventQueue = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn new EventQueue(false);\n\t});\n\n\tprivate steppingState: {\n\t\taccumulator: number;\n\t\tpreviousState: Record<number, { position: Vector; rotation: Rotation }>;\n\t} = { accumulator: 0, previousState: {} };\n\n\tconstructor() {\n\t\timport('@dimforge/rapier3d-compat')\n\t\t\t.then((rapier) => rapier.init().then(() => rapier))\n\t\t\t.then(this.rapierConstruct.set.bind(this.rapierConstruct))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(`[NGT] Failed to load rapier3d-compat`, err);\n\t\t\t\tthis.rapierError.set(err?.message ?? err.toString());\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateWorldEffect();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst world = this.worldSingleton();\n\t\t\tif (world) {\n\t\t\t\tworld.proxy.free();\n\t\t\t\tworld.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Steps the physics simulation forward by the given delta time.\n\t * This is called automatically by the frame stepper, but can be called manually\n\t * if you need custom control over the simulation timing.\n\t *\n\t * @param delta - Time in seconds since the last step\n\t */\n\tstep(delta: number) {\n\t\tif (!this.paused()) {\n\t\t\tthis.internalStep(delta);\n\t\t}\n\t}\n\n\tprivate updateWorldEffect() {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tworld.proxy.gravity = this.vGravity();\n\t\tworld.proxy.integrationParameters.numSolverIterations = this.numSolverIterations();\n\t\tworld.proxy.integrationParameters.numInternalPgsIterations = this.numInternalPgsIterations();\n\t\tworld.proxy.integrationParameters.normalizedAllowedLinearError = this.allowedLinearError();\n\t\tworld.proxy.integrationParameters.minIslandSize = this.minIslandSize();\n\t\tworld.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();\n\t\tworld.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();\n\t\tworld.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();\n\t\tworld.proxy.lengthUnit = this.lengthUnit();\n\t}\n\n\tprivate internalStep(delta: number) {\n\t\tconst worldSingleton = this.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst eventQueue = this.eventQueue();\n\t\tif (!eventQueue) return;\n\n\t\tconst world = worldSingleton.proxy;\n\t\tconst [timeStep, interpolate, paused] = [this.timeStep(), this.interpolate(), this.paused()];\n\n\t\t/* Check if the timestep is supposed to be variable. We'll do this here\n once so we don't have to string-check every frame. */\n\t\tconst timeStepVariable = timeStep === 'vary';\n\n\t\t/**\n\t\t * Fixed timeStep simulation progression.\n\t\t * @see https://gafferongames.com/post/fix_your_timestep/\n\t\t */\n\t\tconst clampedDelta = THREE.MathUtils.clamp(delta, 0, 0.5);\n\n\t\tconst stepWorld = (innerDelta: number) => {\n\t\t\t// Trigger beforeStep callbacks\n\t\t\tthis.beforeStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\n\t\t\tworld.timestep = innerDelta;\n\t\t\tconst hasHooks = this.filterContactPairCallbacks.size > 0 || this.filterIntersectionPairCallbacks.size > 0;\n\t\t\tworld.step(eventQueue, hasHooks ? this.hooks : undefined);\n\n\t\t\t// Trigger afterStep callbacks\n\t\t\tthis.afterStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\t\t};\n\n\t\tif (timeStepVariable) {\n\t\t\tstepWorld(clampedDelta);\n\t\t} else {\n\t\t\t// don't step time forwards if paused\n\t\t\t// Increase accumulator\n\t\t\tthis.steppingState.accumulator += clampedDelta;\n\n\t\t\twhile (this.steppingState.accumulator >= timeStep) {\n\t\t\t\t// Set up previous state\n\t\t\t\t// needed for accurate interpolations if the world steps more than once\n\t\t\t\tif (interpolate) {\n\t\t\t\t\tthis.steppingState.previousState = {};\n\t\t\t\t\tworld.forEachRigidBody((body) => {\n\t\t\t\t\t\tthis.steppingState.previousState[body.handle] = {\n\t\t\t\t\t\t\tposition: body.translation(),\n\t\t\t\t\t\t\trotation: body.rotation(),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstepWorld(timeStep);\n\t\t\t\tthis.steppingState.accumulator -= timeStep;\n\t\t\t}\n\t\t}\n\n\t\tconst interpolationAlpha =\n\t\t\ttimeStepVariable || !interpolate || paused ? 1 : this.steppingState.accumulator / timeStep;\n\n\t\t// Update meshes\n\t\tthis.rigidBodyStates.forEach((state, handle) => {\n\t\t\tconst rigidBody = world.getRigidBody(handle);\n\n\t\t\tconst events = this.rigidBodyEvents.get(handle);\n\t\t\tif (events?.onSleep || events?.onWake) {\n\t\t\t\tif (rigidBody.isSleeping() && !state.isSleeping) events?.onSleep?.();\n\t\t\t\tif (!rigidBody.isSleeping() && state.isSleeping) events?.onWake?.();\n\t\t\t\tstate.isSleeping = rigidBody.isSleeping();\n\t\t\t}\n\n\t\t\tif (!rigidBody || (rigidBody.isSleeping() && !('isInstancedMesh' in state.object)) || !state.setMatrix) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New states\n\t\t\tlet t = rigidBody.translation() as THREE.Vector3;\n\t\t\tlet r = rigidBody.rotation() as THREE.Quaternion;\n\n\t\t\tlet previousState = this.steppingState.previousState[handle];\n\n\t\t\tif (previousState) {\n\t\t\t\t// Get previous simulated world position\n\t\t\t\t_matrix4\n\t\t\t\t\t.compose(\n\t\t\t\t\t\tpreviousState.position as THREE.Vector3,\n\t\t\t\t\t\trapierQuaternionToQuaternion(previousState.rotation),\n\t\t\t\t\t\tstate.scale,\n\t\t\t\t\t)\n\t\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\t\t// Apply previous tick position\n\t\t\t\tif (state.meshType == 'mesh') {\n\t\t\t\t\tstate.object.position.copy(_position);\n\t\t\t\t\tstate.object.quaternion.copy(_rotation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get new position\n\t\t\t_matrix4\n\t\t\t\t.compose(t, rapierQuaternionToQuaternion(r), state.scale)\n\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tif (state.meshType == 'instancedMesh') {\n\t\t\t\tstate.setMatrix(_matrix4);\n\t\t\t} else {\n\t\t\t\t// Interpolate to new position\n\t\t\t\tstate.object.position.lerp(_position, interpolationAlpha);\n\t\t\t\tstate.object.quaternion.slerp(_rotation, interpolationAlpha);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainCollisionEvents((handle1, handle2, started) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(handle1);\n\t\t\tconst source2 = this.getSourceFromColliderHandle(handle2);\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tif (started) {\n\t\t\t\tworld.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {\n\t\t\t\t\t/* RigidBody events */\n\t\t\t\t\tsource1.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\n\t\t\t\t\t/* Collider events */\n\t\t\t\t\tsource1.collider.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.collider.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t}\n\n\t\t\t// Sensor Intersections\n\t\t\tif (started) {\n\t\t\t\tif (world.intersectionPair(source1.collider.object, source2.collider.object)) {\n\t\t\t\t\tsource1.rigidBody.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.rigidBody.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t\tsource1.collider.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.collider.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainContactForceEvents((event) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(event.collider1());\n\t\t\tconst source2 = this.getSourceFromColliderHandle(event.collider2());\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tsource1.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource1.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\t\t});\n\n\t\tworld.forEachActiveRigidBody(() => {\n\t\t\tthis.store.snapshot.invalidate();\n\t\t});\n\t}\n\n\tprivate getSourceFromColliderHandle(handle: ColliderHandle) {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tconst collider = world.proxy.getCollider(handle);\n\t\tconst colEvents = this.colliderEvents.get(handle);\n\t\tconst colliderState = this.colliderStates.get(handle);\n\n\t\tconst rigidBodyHandle = collider.parent()?.handle;\n\t\tconst rigidBody = rigidBodyHandle !== undefined ? world.proxy.getRigidBody(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyEvents =\n\t\t\trigidBody && rigidBodyHandle !== undefined ? this.rigidBodyEvents.get(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyState = rigidBodyHandle !== undefined ? this.rigidBodyStates.get(rigidBodyHandle) : undefined;\n\n\t\treturn {\n\t\t\tcollider: { object: collider, events: colEvents, state: colliderState },\n\t\t\trigidBody: { object: rigidBody, events: rigidBodyEvents, state: rigidBodyState },\n\t\t} as NgtrCollisionSource;\n\t}\n\n\tprivate getCollisionPayloadFromSource(\n\t\ttarget: NgtrCollisionSource,\n\t\tother: NgtrCollisionSource,\n\t): NgtrCollisionPayload {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\trigidBody: target.rigidBody.object,\n\t\t\t\tcollider: target.collider.object,\n\t\t\t\tcolliderObject: target.collider.state?.object,\n\t\t\t\trigidBodyObject: target.rigidBody.state?.object,\n\t\t\t},\n\t\t\tother: {\n\t\t\t\trigidBody: other.rigidBody.object,\n\t\t\t\tcollider: other.collider.object,\n\t\t\t\tcolliderObject: other.collider.state?.object,\n\t\t\t\trigidBodyObject: other.rigidBody.state?.object,\n\t\t\t},\n\t\t};\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tuntracked,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tActiveEvents,\n\tCollider,\n\tColliderDesc,\n\tInteractionGroups,\n\tRigidBody,\n\tRigidBodyDesc,\n} from '@dimforge/rapier3d-compat';\nimport {\n\tapplyProps,\n\textend,\n\tgetEmitter,\n\tgetInstanceState,\n\thasListener,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { COLLISION_GROUPS_HANDLER } from './interaction-groups';\nimport { NgtrPhysics } from './physics';\nimport { _matrix4, _position, _rotation, _scale, _vector3 } from './shared';\nimport type {\n\tNgtrColliderOptions,\n\tNgtrColliderShape,\n\tNgtrColliderState,\n\tNgtrCollisionEnterPayload,\n\tNgtrCollisionExitPayload,\n\tNgtrContactForcePayload,\n\tNgtrIntersectionEnterPayload,\n\tNgtrIntersectionExitPayload,\n\tNgtrRigidBodyOptions,\n\tNgtrRigidBodyState,\n\tNgtrRigidBodyType,\n} from './types';\nimport { createColliderOptions } from './utils';\n\nconst colliderDefaultOptions: NgtrColliderOptions = {\n\tcontactSkin: 0,\n};\n\n/**\n * Base directive for creating colliders in the physics simulation.\n * This directive can be used to create any type of collider by specifying the shape.\n *\n * For convenience, use the specific collider directives like `NgtrCuboidCollider`,\n * `NgtrBallCollider`, etc., which provide type-safe arguments.\n *\n * @example\n * ```html\n * <ngt-object3D [collider]=\"'cuboid'\" [args]=\"[1, 1, 1]\" [position]=\"[0, 5, 0]\" />\n * ```\n */\n@Directive({ selector: 'ngt-object3D[collider]' })\nexport class NgtrAnyCollider {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tname = input<NgtThreeElements['ngt-object3D']['name']>();\n\toptions = input(colliderDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData, name] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t\tthis.name(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData, name: name || `${untracked(this.shape)}-${Date.now()}` };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\t// TODO: change this to input required when Angular allows setting hostDirective input\n\tshape = model<NgtrColliderShape | undefined>(undefined, { alias: 'collider' });\n\t// NOTE: this will be typed by individual collider\n\targs = model<unknown[]>([]);\n\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate sensor = pick(this.options, 'sensor');\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tprivate solverGroups = pick(this.options, 'solverGroups');\n\tprivate friction = pick(this.options, 'friction');\n\tprivate frictionCombineRule = pick(this.options, 'frictionCombineRule');\n\tprivate restitution = pick(this.options, 'restitution');\n\tprivate restitutionCombineRule = pick(this.options, 'restitutionCombineRule');\n\tprivate activeCollisionTypes = pick(this.options, 'activeCollisionTypes');\n\tprivate contactSkin = pick(this.options, 'contactSkin');\n\tprivate mass = pick(this.options, 'mass');\n\tprivate massProperties = pick(this.options, 'massProperties');\n\tprivate density = pick(this.options, 'density');\n\n\tprivate rigidBody = inject(NgtrRigidBody, { optional: true });\n\tprivate physics = inject(NgtrPhysics);\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate scaledArgs = computed(() => {\n\t\tconst [shape, args] = [\n\t\t\tthis.shape(),\n\t\t\tthis.args() as (number | ArrayLike<number> | { x: number; y: number; z: number })[],\n\t\t];\n\n\t\tconst cloned = args.slice();\n\n\t\tif (cloned.length === 0) return [];\n\n\t\t// Heightfield uses a vector\n\t\tif (shape === 'heightfield') {\n\t\t\tconst s = cloned[3] as { x: number; y: number; z: number };\n\t\t\ts.x *= this.worldScale.x;\n\t\t\ts.y *= this.worldScale.y;\n\t\t\ts.z *= this.worldScale.z;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// Trimesh and convex scale the vertices\n\t\tif (shape === 'trimesh' || shape === 'convexHull') {\n\t\t\tcloned[0] = this.scaleVertices(cloned[0] as ArrayLike<number>, this.worldScale);\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// prefill with some extra\n\t\tconst scaleArray = [\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.y,\n\t\t\tthis.worldScale.z,\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.x,\n\t\t];\n\t\treturn cloned.map((arg, index) => scaleArray[index] * (arg as number));\n\t});\n\n\tcollider = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\n\t\tconst args = this.scaledArgs();\n\t\tif (!args.length) return null;\n\n\t\tconst [shape, rigidBody] = [this.shape(), this.rigidBody?.rigidBody()];\n\n\t\t// @ts-expect-error - we know the type of the data\n\t\tconst desc = ColliderDesc[shape](...args);\n\t\tif (!desc) return null;\n\n\t\treturn worldSingleton.proxy.createCollider(desc, rigidBody ?? undefined);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateColliderEffect();\n\t\t\tthis.updateMassPropertiesEffect();\n\t\t});\n\t}\n\n\tget worldScale() {\n\t\treturn this.objectRef.nativeElement.getWorldScale(new THREE.Vector3());\n\t}\n\n\tsetShape(shape: NgtrColliderShape) {\n\t\tthis.shape.set(shape);\n\t}\n\n\tsetArgs(args: unknown[]) {\n\t\tthis.args.set(args);\n\t}\n\n\tprivate createColliderStateEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createColliderState(\n\t\t\tcollider,\n\t\t\tthis.objectRef.nativeElement,\n\t\t\tthis.rigidBody?.objectRef.nativeElement,\n\t\t);\n\t\tthis.physics.colliderStates.set(collider.handle, state);\n\n\t\treturn () => {\n\t\t\tthis.physics.colliderStates.delete(collider.handle);\n\t\t\tif (worldSingleton.proxy.getCollider(collider.handle)) {\n\t\t\t\tworldSingleton.proxy.removeCollider(collider, true);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createColliderEventsEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tconst hasCollisionEvent = hasListener(\n\t\t\tthis.collisionEnter,\n\t\t\tthis.collisionExit,\n\t\t\tthis.intersectionEnter,\n\t\t\tthis.intersectionExit,\n\t\t\tthis.rigidBody?.collisionEnter,\n\t\t\tthis.rigidBody?.collisionExit,\n\t\t\tthis.rigidBody?.intersectionEnter,\n\t\t\tthis.rigidBody?.intersectionExit,\n\t\t);\n\t\tconst hasContactForceEvent = hasListener(this.contactForce, this.rigidBody?.contactForce);\n\n\t\tif (hasCollisionEvent && hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS | ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t} else if (hasCollisionEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS);\n\t\t} else if (hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t}\n\n\t\tthis.physics.colliderEvents.set(collider.handle, {\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\t\treturn () => {\n\t\t\tthis.physics.colliderEvents.delete(collider.handle);\n\t\t};\n\t}\n\n\tprivate updateColliderEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst state = this.physics.colliderStates.get(collider.handle);\n\t\tif (!state) return;\n\n\t\t// Update collider position based on the object's position\n\t\tconst parentWorldScale = state.object.parent!.getWorldScale(_vector3);\n\t\tconst parentInvertedWorldMatrix = state.worldParent?.matrixWorld.clone().invert();\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\n\t\t_matrix4.copy(state.object.matrixWorld);\n\n\t\tif (parentInvertedWorldMatrix) {\n\t\t\t_matrix4.premultiply(parentInvertedWorldMatrix);\n\t\t}\n\n\t\t_matrix4.decompose(_position, _rotation, _scale);\n\n\t\tif (collider.parent()) {\n\t\t\tcollider.setTranslationWrtParent({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotationWrtParent(_rotation);\n\t\t} else {\n\t\t\tcollider.setTranslation({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotation(_rotation);\n\t\t}\n\n\t\tconst [\n\t\t\tsensor,\n\t\t\tcollisionGroups,\n\t\t\tsolverGroups,\n\t\t\tfriction,\n\t\t\tfrictionCombineRule,\n\t\t\trestitution,\n\t\t\trestitutionCombineRule,\n\t\t\tactiveCollisionTypes,\n\t\t\tcontactSkin,\n\t\t] = [\n\t\t\tthis.sensor(),\n\t\t\tthis.collisionGroups(),\n\t\t\tthis.solverGroups(),\n\t\t\tthis.friction(),\n\t\t\tthis.frictionCombineRule(),\n\t\t\tthis.restitution(),\n\t\t\tthis.restitutionCombineRule(),\n\t\t\tthis.activeCollisionTypes(),\n\t\t\tthis.contactSkin(),\n\t\t];\n\n\t\tif (sensor !== undefined) collider.setSensor(sensor);\n\t\tif (collisionGroups !== undefined) collider.setCollisionGroups(collisionGroups);\n\t\tif (solverGroups !== undefined) collider.setSolverGroups(solverGroups);\n\t\tif (friction !== undefined) collider.setFriction(friction);\n\t\tif (frictionCombineRule !== undefined) collider.setFrictionCombineRule(frictionCombineRule);\n\t\tif (restitution !== undefined) collider.setRestitution(restitution);\n\t\tif (restitutionCombineRule !== undefined) collider.setRestitutionCombineRule(restitutionCombineRule);\n\t\tif (activeCollisionTypes !== undefined) collider.setActiveCollisionTypes(activeCollisionTypes);\n\t\tif (contactSkin !== undefined) collider.setContactSkin(contactSkin);\n\t}\n\n\tprivate updateMassPropertiesEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst [mass, massProperties, density] = [this.mass(), this.massProperties(), this.density()];\n\n\t\tif (density !== undefined) {\n\t\t\tif (mass !== undefined || massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set mass and massProperties along with density');\n\t\t\t}\n\n\t\t\tcollider.setDensity(density);\n\t\t\treturn;\n\t\t}\n\n\t\tif (mass !== undefined) {\n\t\t\tif (massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set massProperties along with mass');\n\t\t\t}\n\t\t\tcollider.setMass(mass);\n\t\t\treturn;\n\t\t}\n\n\t\tif (massProperties !== undefined) {\n\t\t\tcollider.setMassProperties(\n\t\t\t\tmassProperties.mass,\n\t\t\t\tmassProperties.centerOfMass,\n\t\t\t\tmassProperties.principalAngularInertia,\n\t\t\t\tmassProperties.angularInertiaLocalFrame,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate createColliderState(\n\t\tcollider: Collider,\n\t\tobject: THREE.Object3D,\n\t\trigidBodyObject?: THREE.Object3D | null,\n\t): NgtrColliderState {\n\t\treturn { collider, worldParent: rigidBodyObject || undefined, object };\n\t}\n\n\tprivate scaleVertices(vertices: ArrayLike<number>, scale: THREE.Vector3) {\n\t\tconst scaledVerts = Array.from(vertices);\n\n\t\tfor (let i = 0; i < vertices.length / 3; i++) {\n\t\t\tscaledVerts[i * 3] *= scale.x;\n\t\t\tscaledVerts[i * 3 + 1] *= scale.y;\n\t\t\tscaledVerts[i * 3 + 2] *= scale.z;\n\t\t}\n\n\t\treturn scaledVerts;\n\t}\n}\n\n/** Maps rigid body type strings to Rapier body type enum values */\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\n/**\n * Default options for rigid bodies.\n * These values are used when specific options are not provided.\n */\nexport const rigidBodyDefaultOptions: NgtrRigidBodyOptions = {\n\tcanSleep: true,\n\tlinearVelocity: [0, 0, 0],\n\tangularVelocity: [0, 0, 0],\n\tgravityScale: 1,\n\tdominanceGroup: 0,\n\tccd: false,\n\tsoftCcdPrediction: 0,\n\tcontactSkin: 0,\n};\n\n/**\n * Component that creates a rigid body in the physics simulation.\n * Rigid bodies can be dynamic (simulated), fixed (static), or kinematic (user-controlled).\n *\n * Child meshes automatically generate colliders based on their geometry.\n * The collider type can be controlled via the `colliders` option.\n *\n * @example\n * ```html\n * <!-- Dynamic rigid body with automatic colliders -->\n * <ngt-object3D rigidBody [position]=\"[0, 5, 0]\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Fixed (static) rigid body -->\n * <ngt-object3D rigidBody=\"fixed\" [position]=\"[0, -1, 0]\">\n * <ngt-mesh>\n * <ngt-plane-geometry [args]=\"[100, 100]\" />\n * </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Kinematic rigid body -->\n * <ngt-object3D rigidBody=\"kinematicPosition\" #kinematicBody=\"rigidBody\">\n * <ngt-mesh>\n * <ngt-sphere-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n * ```\n */\n@Component({\n\tselector: 'ngt-object3D[rigidBody]',\n\texportAs: 'rigidBody',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (rigidBody: NgtrRigidBody) => {\n\t\t\t\treturn () => {\n\t\t\t\t\tconst anyColliders = rigidBody.anyColliders();\n\t\t\t\t\tif (!anyColliders.length) return;\n\n\t\t\t\t\tconst colliders = anyColliders.map((anyCollider) => anyCollider['collider']);\n\t\t\t\t\treturn (interactionGroups: InteractionGroups) => {\n\t\t\t\t\t\tfor (const colliderFn of colliders) {\n\t\t\t\t\t\t\tconst collider = colliderFn();\n\t\t\t\t\t\t\tif (!collider) continue;\n\t\t\t\t\t\t\tcollider.setCollisionGroups(interactionGroups);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrRigidBody],\n\t\t},\n\t],\n})\nexport class NgtrRigidBody {\n\ttype = input.required({\n\t\talias: 'rigidBody',\n\t\ttransform: (value: NgtrRigidBodyType | '' | undefined) => {\n\t\t\tif (value === '' || value === undefined) return 'dynamic' as NgtrRigidBodyType;\n\t\t\treturn value;\n\t\t},\n\t});\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\toptions = input(rigidBodyDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tanyColliders = viewChildren(NgtrAnyCollider);\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\twake = output<void>();\n\tsleep = output<void>();\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate canSleep = pick(this.options, 'canSleep');\n\tprivate colliders = pick(this.options, 'colliders');\n\tprivate transformState = pick(this.options, 'transformState');\n\tprivate gravityScale = pick(this.options, 'gravityScale');\n\tprivate dominanceGroup = pick(this.options, 'dominanceGroup');\n\tprivate ccd = pick(this.options, 'ccd');\n\tprivate softCcdPrediction = pick(this.options, 'softCcdPrediction');\n\tprivate additionalSolverIterations = pick(this.options, 'additionalSolverIterations');\n\tprivate linearDamping = pick(this.options, 'linearDamping');\n\tprivate angularDamping = pick(this.options, 'angularDamping');\n\tprivate lockRotations = pick(this.options, 'lockRotations');\n\tprivate lockTranslations = pick(this.options, 'lockTranslations');\n\tprivate enabledRotations = pick(this.options, 'enabledRotations');\n\tprivate enabledTranslations = pick(this.options, 'enabledTranslations');\n\tprivate angularVelocity = pick(this.options, 'angularVelocity');\n\tprivate linearVelocity = pick(this.options, 'linearVelocity');\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate physics = inject(NgtrPhysics);\n\n\tprivate bodyType = computed(() => RIGID_BODY_TYPE_MAP[this.type()]);\n\tprivate bodyDesc = computed(() => {\n\t\tconst [canSleep, bodyType] = [this.canSleep(), untracked(this.bodyType), this.colliders()];\n\t\treturn new RigidBodyDesc(bodyType).setCanSleep(canSleep);\n\t});\n\trigidBody = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\t\treturn worldSingleton.proxy.createRigidBody(this.bodyDesc());\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = untracked(this.options);\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and children\n\t\tconst [parent] = [\n\t\t\tobjectInstanceState.parent(),\n\t\t\tobjectInstanceState.nonObjects(),\n\t\t\tobjectInstanceState.objects(),\n\t\t];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options, true);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateRigidBodyEffect();\n\t\t});\n\t}\n\n\tprivate createRigidBodyStateEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst transformState = untracked(this.transformState);\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createRigidBodyState(body, this.objectRef.nativeElement);\n\t\tthis.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyStates.delete(body.handle);\n\t\t\tif (worldSingleton.proxy.getRigidBody(body.handle)) {\n\t\t\t\tworldSingleton.proxy.removeRigidBody(body);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createRigidBodyEventsEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst wake = getEmitter(this.wake);\n\t\tconst sleep = getEmitter(this.sleep);\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tthis.physics.rigidBodyEvents.set(body.handle, {\n\t\t\tonWake: wake,\n\t\t\tonSleep: sleep,\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyEvents.delete(body.handle);\n\t\t};\n\t}\n\n\tprivate updateRigidBodyEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst state = this.physics.rigidBodyStates.get(body.handle);\n\t\tif (!state) return;\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\t\t_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);\n\t\tbody.setTranslation(_position, true);\n\t\tbody.setRotation(_rotation, true);\n\n\t\tconst [\n\t\t\tgravityScale,\n\t\t\tadditionalSolverIterations,\n\t\t\tlinearDamping,\n\t\t\tangularDamping,\n\t\t\tlockRotations,\n\t\t\tlockTranslations,\n\t\t\tenabledRotations,\n\t\t\tenabledTranslations,\n\t\t\tangularVelocity,\n\t\t\tlinearVelocity,\n\t\t\tccd,\n\t\t\tsoftCcdPrediction,\n\t\t\tdominanceGroup,\n\t\t\tuserData,\n\t\t\tbodyType,\n\t\t] = [\n\t\t\tthis.gravityScale(),\n\t\t\tthis.additionalSolverIterations(),\n\t\t\tthis.linearDamping(),\n\t\t\tthis.angularDamping(),\n\t\t\tthis.lockRotations(),\n\t\t\tthis.lockTranslations(),\n\t\t\tthis.enabledRotations(),\n\t\t\tthis.enabledTranslations(),\n\t\t\tthis.angularVelocity(),\n\t\t\tthis.linearVelocity(),\n\t\t\tthis.ccd(),\n\t\t\tthis.softCcdPrediction(),\n\t\t\tthis.dominanceGroup(),\n\t\t\tthis.userData(),\n\t\t\tthis.bodyType(),\n\t\t];\n\n\t\tbody.setGravityScale(gravityScale, true);\n\t\tif (additionalSolverIterations !== undefined) body.setAdditionalSolverIterations(additionalSolverIterations);\n\t\tif (linearDamping !== undefined) body.setLinearDamping(linearDamping);\n\t\tif (angularDamping !== undefined) body.setAngularDamping(angularDamping);\n\t\tbody.setDominanceGroup(dominanceGroup);\n\t\tif (enabledRotations !== undefined) body.setEnabledRotations(...enabledRotations, true);\n\t\tif (enabledTranslations !== undefined) body.setEnabledTranslations(...enabledTranslations, true);\n\t\tif (lockRotations !== undefined) body.lockRotations(lockRotations, true);\n\t\tif (lockTranslations !== undefined) body.lockTranslations(lockTranslations, true);\n\t\tbody.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);\n\t\tbody.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);\n\t\tbody.enableCcd(ccd);\n\t\tbody.setSoftCcdPrediction(softCcdPrediction);\n\t\tif (userData !== undefined) body.userData = userData;\n\t\tif (bodyType !== body.bodyType()) body.setBodyType(bodyType, true);\n\t}\n\n\tprivate createRigidBodyState(\n\t\trigidBody: RigidBody,\n\t\tobject: Object3D,\n\t\tsetMatrix?: (matrix: THREE.Matrix4) => void,\n\t\tgetMatrix?: (matrix: THREE.Matrix4) => THREE.Matrix4,\n\t\tworldScale?: THREE.Vector3,\n\t\tmeshType: NgtrRigidBodyState['meshType'] = 'mesh',\n\t) {\n\t\tobject.updateWorldMatrix(true, false);\n\t\tconst invertedWorldMatrix = object.parent!.matrixWorld.clone().invert();\n\t\treturn {\n\t\t\tobject,\n\t\t\trigidBody,\n\t\t\tinvertedWorldMatrix,\n\t\t\tsetMatrix: setMatrix\n\t\t\t\t? setMatrix\n\t\t\t\t: (matrix: THREE.Matrix4) => {\n\t\t\t\t\t\tobject.matrix.copy(matrix);\n\t\t\t\t\t},\n\t\t\tgetMatrix: getMatrix ? getMatrix : (matrix: THREE.Matrix4) => matrix.copy(object.matrix),\n\t\t\tscale: worldScale || object.getWorldScale(_scale).clone(),\n\t\t\tisSleeping: false,\n\t\t\tmeshType,\n\t\t};\n\t}\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { NgtrAnyCollider } from './rigid-body';\nimport type {\n\tNgtrBallArgs,\n\tNgtrCapsuleArgs,\n\tNgtrConeArgs,\n\tNgtrConvexHullArgs,\n\tNgtrConvexMeshArgs,\n\tNgtrCuboidArgs,\n\tNgtrCylinderArgs,\n\tNgtrHeightfieldArgs,\n\tNgtrPolylineArgs,\n\tNgtrRoundConeArgs,\n\tNgtrRoundConvexHullArgs,\n\tNgtrRoundConvexMeshArgs,\n\tNgtrRoundCuboidArgs,\n\tNgtrRoundCylinderArgs,\n\tNgtrTrimeshArgs,\n} from './types';\n\n// NOTE: this is ok to use here since we're not exporting this short-cut\nconst ANY_COLLIDER_HOST_DIRECTIVE = {\n\tdirective: NgtrAnyCollider,\n\tinputs: ['options', 'name', 'scale', 'position', 'quaternion', 'rotation', 'userData'],\n\toutputs: ['collisionEnter', 'collisionExit', 'intersectionEnter', 'intersectionExit', 'contactForce'],\n};\n\n/**\n * Creates a cuboid (box) collider with specified half-extents.\n *\n * @example\n * ```html\n * <ngt-object3D [cuboidCollider]=\"[1, 0.5, 2]\" [position]=\"[0, 0, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[cuboidCollider]',\n\texportAs: 'cuboidCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>({ alias: 'cuboidCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a capsule collider with specified half-height and radius.\n *\n * @example\n * ```html\n * <ngt-object3D [capsuleCollider]=\"[0.5, 0.25]\" [position]=\"[0, 1, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[capsuleCollider]',\n\texportAs: 'capsuleCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>({ alias: 'capsuleCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a spherical (ball) collider with specified radius.\n *\n * @example\n * ```html\n * <ngt-object3D [ballCollider]=\"[0.5]\" [position]=\"[0, 2, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[ballCollider]',\n\texportAs: 'ballCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>({ alias: 'ballCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex hull collider from an array of vertices.\n * The convex hull is computed from the provided points.\n *\n * @example\n * ```html\n * <ngt-object3D [convexHullCollider]=\"[vertices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[convexHullCollider]',\n\texportAs: 'convexHullCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>({ alias: 'convexHullCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('convexHull');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a heightfield collider for terrain-like surfaces.\n * The heightfield is defined by a grid of height values.\n *\n * @example\n * ```html\n * <ngt-object3D [heightfieldCollider]=\"[width, height, heights, scale]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[heightfieldCollider]',\n\texportAs: 'heightfieldCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>({ alias: 'heightfieldCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a triangle mesh collider for exact collision shapes.\n * Note: Trimesh colliders are computationally expensive and should be used sparingly.\n *\n * @example\n * ```html\n * <ngt-object3D [trimeshCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[trimeshCollider]',\n\texportAs: 'trimeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>({ alias: 'trimeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a polyline collider from connected line segments.\n *\n * @example\n * ```html\n * <ngt-object3D [polylineCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[polylineCollider]',\n\texportAs: 'polylineCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>({ alias: 'polylineCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cuboid collider with rounded corners.\n *\n * @example\n * ```html\n * <ngt-object3D [roundCuboidCollider]=\"[1, 0.5, 2, 0.1]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundCuboidCollider]',\n\texportAs: 'roundCuboidCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>({ alias: 'roundCuboidCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cylinder collider with specified half-height and radius.\n *\n * @example\n * ```html\n * <ngt-object3D [cylinderCollider]=\"[1, 0.5]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[cylinderCollider]',\n\texportAs: 'cylinderCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>({ alias: 'cylinderCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cylinder collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundCylinderCollider]=\"[1, 0.5, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundCylinderCollider]',\n\texportAs: 'roundCylinderCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>({ alias: 'roundCylinderCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cone collider with specified half-height and base radius.\n *\n * @example\n * ```html\n * <ngt-object3D [coneCollider]=\"[1, 0.5]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[coneCollider]',\n\texportAs: 'coneCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>({ alias: 'coneCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cone collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConeCollider]=\"[1, 0.5, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConeCollider]',\n\texportAs: 'roundConeCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>({ alias: 'roundConeCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex mesh collider from vertices and indices.\n *\n * @example\n * ```html\n * <ngt-object3D [convexMeshCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[convexMeshCollider]',\n\texportAs: 'convexMeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>({ alias: 'convexMeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex hull collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConvexHullCollider]=\"[vertices, indices, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConvexHullCollider]',\n\texportAs: 'roundConvexHullCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>({ alias: 'roundConvexHullCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex mesh collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConvexMeshCollider]=\"[vertices, indices, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConvexMeshCollider]',\n\texportAs: 'roundConvexMeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>({ alias: 'roundConvexMeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tapplyProps,\n\textend,\n\tgetInstanceState,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';\nimport { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';\nimport { createColliderOptions } from './utils';\n\n/**\n * Configuration options for individual rigid body instances.\n * Used with NgtrInstancedRigidBodies to define per-instance properties.\n */\nexport interface NgtrInstancedRigidBodyOptions {\n\t/** Unique identifier for this instance (required for change tracking) */\n\tkey: string | number;\n\t/** Type of rigid body for this instance */\n\ttype?: NgtrRigidBodyType;\n\t/** Initial position of this instance */\n\tposition?: NgtVector3;\n\t/** Initial rotation of this instance (Euler angles) */\n\trotation?: NgtEuler;\n\t/** Scale of this instance */\n\tscale?: NgtVector3;\n\t/** Initial rotation of this instance (quaternion) */\n\tquaternion?: NgtQuaternion;\n\t/** Custom user data attached to this instance */\n\tuserData?: NgtThreeElements['ngt-object3D']['userData'];\n\t/** Physics options specific to this instance */\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n/**\n * Component for creating multiple rigid bodies from a single InstancedMesh.\n * This is highly efficient for scenes with many identical physics objects.\n *\n * Each instance gets its own rigid body but shares the same geometry for rendering.\n * The component automatically syncs instance matrices with physics simulation.\n *\n * @example\n * ```html\n * <ngt-object3D [instancedRigidBodies]=\"instances\">\n * <ngt-instanced-mesh [count]=\"instances.length\" castShadow receiveShadow>\n * <ngt-sphere-geometry [args]=\"[0.5]\" />\n * <ngt-mesh-standard-material color=\"orange\" />\n * </ngt-instanced-mesh>\n * </ngt-object3D>\n * ```\n *\n * ```typescript\n * instances = Array.from({ length: 100 }, (_, i) => ({\n * key: i,\n * position: [Math.random() * 10, Math.random() * 10, 0] as [number, number, number],\n * }));\n * ```\n */\n@Component({\n\tselector: 'ngt-object3D[instancedRigidBodies]',\n\texportAs: 'instancedRigidBodies',\n\ttemplate: `\n\t\t<ngt-object3D #instanceWrapper>\n\t\t\t<ng-content />\n\t\t</ngt-object3D>\n\n\t\t@for (instance of instancesOptions(); track instance.key) {\n\t\t\t<ngt-object3D\n\t\t\t\t[rigidBody]=\"instance.type\"\n\t\t\t\t[options]=\"instance.options\"\n\t\t\t\t[position]=\"instance.position\"\n\t\t\t\t[rotation]=\"instance.rotation\"\n\t\t\t\t[scale]=\"instance.scale\"\n\t\t\t\t[quaternion]=\"instance.quaternion\"\n\t\t\t\t[userData]=\"instance.userData\"\n\t\t\t\t[name]=\"instance.key + '-instanced-rigid-body-' + $index\"\n\t\t\t>\n\t\t\t\t<ng-content select=\"[data-colliders]\" />\n\n\t\t\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t\t\t<ngt-object3D\n\t\t\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t\t\t[name]=\"objectRef.nativeElement.name + '-instanced-collider-' + $index\"\n\t\t\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-object3D>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrRigidBody, NgtrAnyCollider],\n})\nexport class NgtrInstancedRigidBodies {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tinstances = input.required({\n\t\talias: 'instancedRigidBodies',\n\t\ttransform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {\n\t\t\tif (value === '') return [];\n\t\t\treturn value;\n\t\t},\n\t});\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\tprivate instanceWrapperRef = viewChild.required<ElementRef<THREE.Object3D>>('instanceWrapper');\n\trigidBodyRefs = viewChildren(NgtrRigidBody);\n\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate colliders = pick(this.options, 'colliders');\n\n\tprivate instancedMesh = computed(() => {\n\t\tconst instanceWrapper = this.instanceWrapperRef().nativeElement;\n\t\tif (!instanceWrapper) return null;\n\n\t\tconst instanceState = getInstanceState(instanceWrapper);\n\t\tif (!instanceState) return null;\n\n\t\t// track object's children\n\t\tinstanceState.objects();\n\t\tconst firstChild = instanceWrapper.children[0];\n\t\tif (!firstChild || !(firstChild as THREE.InstancedMesh).isInstancedMesh) return null;\n\n\t\treturn firstChild as THREE.InstancedMesh;\n\t});\n\n\tprotected instancesOptions = computed(() => {\n\t\tconst [instances, options, instancedMesh] = [this.instances(), untracked(this.options), this.instancedMesh()];\n\t\tif (!instancedMesh) return [];\n\t\treturn instances.map(\n\t\t\t(instance, index) =>\n\t\t\t\t({\n\t\t\t\t\t...instance,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...(instance.options || {}),\n\t\t\t\t\t\ttransformState: (state) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tgetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.getMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\treturn matrix;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.setMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\tinstancedMesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeshType: 'instancedMesh',\n\t\t\t\t\t\t\t} as NgtrRigidBodyState;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkey: `${instance.key}-${index}` + `${instancedMesh?.uuid || ''}`,\n\t\t\t\t}) as Omit<NgtrInstancedRigidBodyOptions, 'options' | 'position' | 'scale'> & {\n\t\t\t\t\tposition: NgtVector3;\n\t\t\t\t\tscale: NgtVector3;\n\t\t\t\t\toptions: Partial<NgtrRigidBodyOptions>;\n\t\t\t\t},\n\t\t);\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = this.options();\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectInstanceState.parent(), objectInstanceState.nonObjects()];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMesh();\n\t\t\tif (!instancedMesh) return;\n\t\t\tinstancedMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\t\t});\n\t}\n}\n","import { computed, effect, ElementRef, inject, Injector, untracked } from '@angular/core';\nimport {\n\tFixedImpulseJoint,\n\tImpulseJoint,\n\tJointData,\n\tPrismaticImpulseJoint,\n\tRevoluteImpulseJoint,\n\tRigidBody,\n\tRopeImpulseJoint,\n\tSphericalImpulseJoint,\n\tSpringImpulseJoint,\n} from '@dimforge/rapier3d-compat';\nimport { resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type {\n\tNgtrFixedJointParams,\n\tNgtrPrismaticJointParams,\n\tNgtrRevoluteJointParams,\n\tNgtrRopeJointParams,\n\tNgtrSphericalJointParams,\n\tNgtrSpringJointParams,\n} from './types';\nimport { quaternionToRapierQuaternion, vector3ToRapierVector } from './utils';\n\nfunction impulseJoint<TJoinType extends ImpulseJoint>(\n\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t{ injector, data }: { injector?: Injector; data: JointData | (() => JointData | null) },\n) {\n\treturn assertInjector(impulseJoint, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tconst newJoint = computed<TJoinType | null>(() => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return null;\n\n\t\t\tconst a = typeof bodyA === 'function' ? resolveRef(bodyA()) : resolveRef(bodyA);\n\t\t\tconst b = typeof bodyB === 'function' ? resolveRef(bodyB()) : resolveRef(bodyB);\n\t\t\tif (!a || !b) return null;\n\n\t\t\tconst jointData = typeof data === 'function' ? data() : data;\n\t\t\tif (!jointData) return null;\n\n\t\t\treturn worldSingleton.proxy.createImpulseJoint(jointData, a, b, true) as TJoinType;\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst joint = newJoint();\n\t\t\tif (!joint) return;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (worldSingleton.proxy.getImpulseJoint(joint.handle)) {\n\t\t\t\t\tworldSingleton.proxy.removeImpulseJoint(joint, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn newJoint;\n\t});\n}\n\nfunction createJoint<TJointParams, TJoinType extends ImpulseJoint>(\n\tjointDataFn: (rapier: NonNullable<ReturnType<NgtrPhysics['rapier']>>, data: TJointParams) => JointData,\n) {\n\treturn function _injectJoint(\n\t\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\t{ injector, data }: { injector?: Injector; data: TJointParams | (() => TJointParams) },\n\t) {\n\t\treturn assertInjector(_injectJoint, injector, () => {\n\t\t\tconst physics = inject(NgtrPhysics);\n\n\t\t\tlet dataFn = data as () => TJointParams;\n\n\t\t\tif (typeof data !== 'function') {\n\t\t\t\tdataFn = () => data;\n\t\t\t}\n\n\t\t\tconst jointData = computed(() => {\n\t\t\t\tconst rapier = physics.rapier();\n\t\t\t\tif (!rapier) return null;\n\t\t\t\treturn jointDataFn(rapier, untracked(dataFn));\n\t\t\t});\n\n\t\t\treturn impulseJoint<TJoinType>(bodyA, bodyB, { injector, data: jointData });\n\t\t});\n\t};\n}\n\n/**\n * Creates a fixed joint that prevents any relative movement between two rigid bodies.\n * Fixed joints are characterized by one local frame (represented by an isometry) on each rigid-body.\n * The fixed-joint makes these frames coincide in world-space.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * fixedJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body1LocalFrame: [0, 0, 0, 1],\n * body2Anchor: [0, 0, 0],\n * body2LocalFrame: [0, 0, 0, 1]\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const fixedJoint = createJoint<NgtrFixedJointParams, FixedImpulseJoint>((rapier, data) =>\n\trapier.JointData.fixed(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tquaternionToRapierQuaternion(data.body1LocalFrame),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tquaternionToRapierQuaternion(data.body2LocalFrame),\n\t),\n);\n/**\n * @deprecated Use `fixedJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectFixedJoint = fixedJoint;\n\n/**\n * Creates a spherical (ball-and-socket) joint that ensures two anchor points always coincide.\n * This prevents any relative translational motion at these points while allowing rotation.\n * Typically used to simulate ragdoll arms, pendulums, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * sphericalJoint(bodyA, bodyB, {\n * data: { body1Anchor: [0, -0.5, 0], body2Anchor: [0, 0.5, 0] }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const sphericalJoint = createJoint<NgtrSphericalJointParams, SphericalImpulseJoint>((rapier, data) =>\n\trapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n/**\n * @deprecated Use `sphericalJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSphericalJoint = sphericalJoint;\n\n/**\n * Creates a revolute (hinge) joint that allows rotation only around one axis.\n * Prevents any other relative movement between two rigid bodies.\n * Typically used to simulate wheels, doors, fans, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data (including optional limits) and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * revoluteJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [0, 1, 0],\n * axis: [0, 1, 0],\n * limits: [-Math.PI / 2, Math.PI / 2]\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const revoluteJoint = createJoint<NgtrRevoluteJointParams, RevoluteImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.revolute(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n/**\n * @deprecated Use `revoluteJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectRevoluteJoint = revoluteJoint;\n\n/**\n * Creates a prismatic (slider) joint that allows translation only along one axis.\n * Prevents any other relative movement between two rigid bodies.\n * Typically used to simulate pistons, sliding doors, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data (including optional limits) and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * prismaticJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [2, 0, 0],\n * axis: [1, 0, 0],\n * limits: [-1, 1]\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const prismaticJoint = createJoint<NgtrPrismaticJointParams, PrismaticImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.prismatic(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n/**\n * @deprecated Use `prismaticJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectPrismaticJoint = prismaticJoint;\n\n/**\n * Creates a rope joint that limits the maximum distance between two anchor points.\n * The bodies can move freely as long as the distance doesn't exceed the specified length.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * ropeJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [0, 0, 0],\n * length: 5\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const ropeJoint = createJoint<NgtrRopeJointParams, RopeImpulseJoint>((rapier, data) =>\n\trapier.JointData.rope(\n\t\tdata.length,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t),\n);\n/**\n * @deprecated Use `ropeJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectRopeJoint = ropeJoint;\n\n/**\n * Creates a spring joint that applies a force proportional to the distance between two anchor points.\n * The spring tries to maintain its rest length through spring forces.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * springJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [0, 0, 0],\n * restLength: 2,\n * stiffness: 100,\n * damping: 10\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const springJoint = createJoint<NgtrSpringJointParams, SpringImpulseJoint>((rapier, data) => {\n\treturn rapier.JointData.spring(\n\t\tdata.restLength,\n\t\tdata.stiffness,\n\t\tdata.damping,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t);\n});\n/**\n * @deprecated Use `springJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSpringJoint = springJoint;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n} from '@angular/core';\nimport { extend, getInstanceState } from 'angular-three';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';\nimport type { NgtrRigidBodyAutoCollider } from './types';\nimport { createColliderOptions } from './utils';\n\n/**\n * Component that generates colliders based on child mesh geometries.\n * Use this when you want specific collider generation for a group of meshes\n * within a rigid body.\n *\n * This is useful when you want different parts of a complex object to have\n * different collider types than the parent rigid body's automatic colliders.\n *\n * @example\n * ```html\n * <ngt-object3D rigidBody [options]=\"{ colliders: false }\">\n * <ngt-object3D [meshCollider]=\"'trimesh'\">\n * <ngt-mesh>\n * <ngt-torus-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n * </ngt-object3D>\n * ```\n */\n@Component({\n\tselector: 'ngt-object3D[meshCollider]',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-mesh-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrMeshCollider {\n\tcolliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'meshCollider' });\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate rigidBody = inject(NgtrRigidBody);\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst rigidBodyOptions = this.rigidBody.options();\n\t\trigidBodyOptions.colliders = this.colliders();\n\n\t\tconst objectInstaceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstaceState) return [];\n\n\t\t// track object's children\n\t\tobjectInstaceState.nonObjects();\n\t\tobjectInstaceState.objects();\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\t\tthis.objectRef.nativeElement.userData ??= {};\n\t\tthis.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';\n\t}\n}\n","import { DestroyRef, inject, Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type { NgtrFilterContactPairCallback, NgtrFilterIntersectionPairCallback, NgtrWorldStepCallback } from './types';\n\n/**\n * Registers a callback to be executed before each physics world step.\n * Useful for applying forces, updating kinematic bodies, or other pre-step logic.\n *\n * The callback is automatically unregistered when the component is destroyed.\n *\n * @param callback - Function to call before each physics step, receives the Rapier World\n * @param injector - Optional injector for dependency injection context\n *\n * @example\n * ```typescript\n * beforePhysicsStep((world) => {\n * // Apply custom forces or update kinematic bodies\n * const body = world.getRigidBody(handle);\n * body?.applyImpulse({ x: 0, y: 10, z: 0 }, true);\n * });\n * ```\n */\nexport function beforePhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(beforePhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.beforeStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.beforeStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to be executed after each physics world step.\n * Useful for reading physics state, updating visuals, or other post-step logic.\n *\n * The callback is automatically unregistered when the component is destroyed.\n *\n * @param callback - Function to call after each physics step, receives the Rapier World\n * @param injector - Optional injector for dependency injection context\n *\n * @example\n * ```typescript\n * afterPhysicsStep((world) => {\n * // Read physics state after simulation\n * const body = world.getRigidBody(handle);\n * const position = body?.translation();\n * console.log('Body position:', position);\n * });\n * ```\n */\nexport function afterPhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(afterPhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.afterStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.afterStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to filter contact pairs.\n *\n * The callback determines if contact computation should happen between two colliders,\n * and how the constraints solver should behave for these contacts.\n *\n * This will only be executed if at least one of the involved colliders contains the\n * `ActiveHooks.FILTER_CONTACT_PAIRS` flag in its active hooks.\n *\n * @param callback - Function that returns:\n * - `SolverFlags.COMPUTE_IMPULSE` (1) - Process the collision normally\n * - `SolverFlags.EMPTY` (0) - Skip computing impulses (colliders pass through)\n * - `null` - Skip this hook; let the next registered hook decide\n *\n * When multiple hooks are registered, they are called in order until one returns a non-null value.\n */\nexport function filterContactPair(callback: NgtrFilterContactPairCallback, injector?: Injector) {\n\treturn assertInjector(filterContactPair, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.filterContactPairCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.filterContactPairCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to filter intersection pairs.\n *\n * The callback determines if intersection computation should happen between two colliders\n * (where at least one is a sensor).\n *\n * This will only be executed if at least one of the involved colliders contains the\n * `ActiveHooks.FILTER_INTERSECTION_PAIR` flag in its active hooks.\n *\n * @param callback - Function that returns:\n * - `true` - Allow the intersection to be detected\n * - `false` - Block the intersection (no intersection events will fire)\n *\n * When multiple hooks are registered, the first hook that returns `false` blocks the intersection.\n */\nexport function filterIntersectionPair(callback: NgtrFilterIntersectionPairCallback, injector?: Injector) {\n\treturn assertInjector(filterIntersectionPair, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.filterIntersectionPairCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.filterIntersectionPairCallbacks.delete(callback);\n\t\t});\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RapierVector3","RapierQuaternion","defaultOptions","i1.NgtrAnyCollider"],"mappings":";;;;;;;;;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;AACG,SAAU,iBAAiB,CAAC,WAA8B,EAAE,OAA2B,EAAA;IAC5F,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAC;AACzG;AAEA,SAAS,OAAO,CAAC,MAAyB,EAAA;IACzC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;AACrE;AAEA;;;AAGG;MACU,wBAAwB,GAAG,IAAI,cAAc,CAExD,0BAA0B;AAE5B;;;;;;;;;;;;;;;;;;;;AAoBG;MAEU,qBAAqB,CAAA;IACjC,MAAM,GAAG,KAAK,CAAC,QAAQ,kDAA8C,KAAK,EAAE,mBAAmB,EAAA,CAAG;AAClG,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QACjC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5C,QAAA,OAAO,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC;AAC/C,IAAA,CAAC,6DAAC;AAEF,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAEjG,MAAM,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,wBAAwB;gBAAE;AAC/B,YAAA,MAAM,OAAO,GAAG,wBAAwB,EAAE;AAC1C,YAAA,IAAI,CAAC,OAAO;gBAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC;IACH;uGAhBY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,SAAS;mBAAC,EAAE,QAAQ,EAAE,iCAAiC,EAAE;;;AC3D1D;;;;;;;;;;;;;;;AAeG;MAcU,SAAS,CAAA;AACb,IAAA,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7B,IAAA,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAiC,cAAc,CAAC;AAE5F,IAAA,WAAA,GAAA;QACC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;QAElD,YAAY,CAAC,MAAK;YACjB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,YAAA,IAAI,CAAC,cAAc;gBAAE;YAErB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa;AACzD,YAAA,IAAI,CAAC,YAAY;gBAAE;YAEnB,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE;AAClD,YAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE;AAC3C,YAAA,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACjF,YAAA,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE5E,YAAA,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE;AAC/B,YAAA,YAAY,CAAC,QAAQ,GAAG,QAAQ;AACjC,QAAA,CAAC,CAAC;IACH;uGAtBY,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAXX;;;;;;;AAOT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIW,SAAS,EAAA,UAAA,EAAA,CAAA;kBAbrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE;;;;;;;AAOT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA;uGAG6E,cAAc,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACxC5F;;;;;AAKG;MAEU,gBAAgB,CAAA;AAC5B,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,iDAAC;AACpB,IAAA,cAAc,GAAG,KAAK,CAAqB,CAAC,0DAAC;AAC7C,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA2B;AAClD,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAoC;AAEzD,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,KAAK,GAAG,WAAW,EAAE;AAE3B,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,KAAK;gBAAE;AAEZ,YAAA,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAEnD,YAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACtB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAChD,CAAC,EAAE,KAAK,EAAE,KAAI;oBACb,MAAM,CAAC,KAAK,CAAC;AACd,gBAAA,CAAC,EACD,cAAc,EACd,KAAK,CACL;AACD,gBAAA,SAAS,CAAC,MAAM,OAAO,EAAE,CAAC;gBAC1B;YACD;YAEA,IAAI,SAAS,GAAG,CAAC;YACjB,IAAI,GAAG,GAA6C,CAAC;YACrD,MAAM,IAAI,GAAG,MAAK;AACjB,gBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,GAAG,GAAG,SAAS;AAC7B,gBAAA,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;gBACjC,MAAM,CAAC,KAAK,CAAC;gBACb,SAAS,GAAG,GAAG;AAChB,YAAA,CAAC;AAED,YAAA,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;YACjC,SAAS,CAAC,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC;IACH;uGAzCY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,SAAS;mBAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE;;;ACR7C;;;;;;AAMG;AAEH;AACO,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;AACjD;AACO,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;AACvC;AACO,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC3C;AACO,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC7C;AACO,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC3C;AACO,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;AAC5C;AACO,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;AAC/C;AACO,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;;AClBzC;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,oBAAoB,GAAG;AAInC;;AAEG;AACH,cAA0B,KAQvB;AACH,IAAA,IAAI,QAAoC;AAExC,IAAA,MAAM,OAAO,GAAiC;QAC7C,GAAG,CAAC,MAAM,EAAE,IAAI,EAAA;YACf,IAAI,CAAC,QAAQ,EAAE;gBACd,QAAQ,GAAG,cAAc,EAAE;YAC5B;YACA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAS,EAAE,IAAI,CAAC;QACpC,CAAC;AACD,QAAA,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAA;YACtB,IAAI,CAAC,QAAQ,EAAE;gBACd,QAAQ,GAAG,cAAc,EAAE;YAC5B;YACA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAS,EAAE,IAAI,EAAE,KAAK,CAAC;QAC3C,CAAC;KACD;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAoB,EAAE,OAAO,CAAmB;IAExE,MAAM,KAAK,GAAG,MAAK;QAClB,QAAQ,GAAG,SAAS;AACrB,IAAA,CAAC;AAED,IAAA,MAAM,GAAG,GAAG,CAAC,WAA2B,KAAI;QAC3C,QAAQ,GAAG,WAAW;AACvB,IAAA,CAAC;AAED;;AAEG;AACH,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AAC7B,CAAC;AAED;;;;;AAKG;AACG,SAAU,4BAA4B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAoB,EAAA;AAC5E,IAAA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnC;AAEA;;;;;;;;;;;;;AAaG;AACG,SAAU,qBAAqB,CAAC,CAAa,EAAA;AAClD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACrB,QAAA,OAAO,IAAIA,OAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C;AAEA,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAC1B,OAAO,IAAIA,OAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC;AAEA,IAAA,OAAO,IAAIA,OAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxC;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,4BAA4B,CAAC,CAAgB,EAAA;AAC5D,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrB,OAAO,IAAIC,UAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD;AAEA,IAAA,OAAO,IAAIA,UAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD;AAEA,SAAS,qBAAqB,CAAC,KAAiB,EAAA;IAC/C,IAAI,IAAI,GAAG,KAAK;AAChB,IAAA,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAI;AAC7B,QAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,cAAc;YAAE,IAAI,GAAG,IAAI;AAChE,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACZ;AAEA,MAAM,eAAe,GAAG;AACvB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,OAAO,EAAE,SAAS;CAClB;AAED,SAAS,2BAA2B,CACnC,QAA8B,EAC9B,SAAoC,EAAA;IAEpC,QAAQ,SAAS;QAChB,KAAK,QAAQ,EAAE;YACd,QAAQ,CAAC,kBAAkB,EAAE;AAC7B,YAAA,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ;AAChC,YAAA,MAAM,IAAI,GAAG,WAAY,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACtD,OAAO;AACN,gBAAA,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,EAAE,WAAY,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;aACnD;QACF;QAEA,KAAK,MAAM,EAAE;YACZ,QAAQ,CAAC,qBAAqB,EAAE;AAChC,YAAA,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ;AAEnC,YAAA,MAAM,MAAM,GAAG,cAAe,CAAC,MAAM;YAErC,OAAO;gBACN,IAAI,EAAE,CAAC,MAAM,CAAC;gBACd,MAAM,EAAE,cAAe,CAAC,MAAM;aAC9B;QACF;QAEA,KAAK,SAAS,EAAE;AACf,YAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC;YAElF,OAAO;AACN,gBAAA,IAAI,EAAE;AACL,oBAAA,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAqB;oBAC3D,cAAc,CAAC,KAAK,EAAE,KAAoB;AAC1C,iBAAA;AACD,gBAAA,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;aAC3B;QACF;QAEA,KAAK,MAAM,EAAE;AACZ,YAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE;YACvC,OAAO;gBACN,IAAI,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAqB,CAAC;AACnE,gBAAA,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE;aAC3B;QACF;;AAGD,IAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;AACjD;AAEA;;;;;;;;;;;;;;AAcG;AACG,SAAU,qBAAqB,CACpC,MAAsB,EACtB,OAA6B,EAC7B,mBAAmB,GAAG,IAAI,EAAA;IAE1B,MAAM,oBAAoB,GAOpB,EAAE;AACR,IAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;IACrC,MAAM,yBAAyB,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AAErE,IAAA,MAAM,iBAAiB,GAAG,CAAC,KAAqB,KAAI;QACnD,IAAI,EAAE,CAAC,KAAK,CAAa,KAAK,EAAE,QAAQ,CAAC,EAAE;AAC1C,YAAA,IAAI,mBAAmB,IAAI,qBAAqB,CAAC,KAAK,CAAC;gBAAE;YAEzD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;YAC9C,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAsB;AACjF,YAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;YACpC;AACE,iBAAA,IAAI,CAAC,KAAK,CAAC,WAAW;iBACtB,WAAW,CAAC,yBAAyB;AACrC,iBAAA,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAEzC,YAAA,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC;AAE3E,YAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,2BAA2B,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC;YACnG,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,IAAI,EAAE,GACrG,OAAO;YAER,oBAAoB,CAAC,IAAI,CAAC;AACzB,gBAAA,eAAe,EAAE,IAAI;gBACrB,IAAI;gBACJ,KAAK;AACL,gBAAA,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AAC7D,gBAAA,QAAQ,EAAE;oBACT,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;oBACrC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;oBACrC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACrC,iBAAA;AACD,gBAAA,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACjD,aAAA,CAAC;QACH;AACD,IAAA,CAAC;AAED,IAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC7B,QAAA,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC;SAAO;AACN,QAAA,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC;IAC1C;AAEA,IAAA,OAAO,oBAAoB;AAC5B;;AC1OA,MAAMC,gBAAc,GAAuB;IAC1C,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACtB,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,wBAAwB,EAAE,CAAC;AAC3B,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,uBAAuB,EAAE,EAAE;AAC3B,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,CAAC,GAAG,EAAE;AAChB,IAAA,KAAK,EAAE,KAAK;CACZ;AAED;;;;;;;;;;;;;;AAcG;MAEU,mBAAmB,CAAA;;AAE/B,IAAA,OAAO,sBAAsB,CAAC,CAAsB,EAAE,GAAY,EAAA;AACjE,QAAA,OAAO,IAAI;IACZ;uGAJY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;mBAAC,EAAE,QAAQ,EAAE,6BAA6B,EAAE;;AAQtD;;;;;;;;;;;;;;;;;;;;AAoBG;MA2BU,WAAW,CAAA;;AAEvB,IAAA,OAAO,GAAG,KAAK,CAACA,gBAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAACA,gBAAc,CAAC,EAAA,CAAG;AAEjE,IAAA,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC5C,eAAe,GAAG,YAAY,CAAC,mBAAmB,4DAAI,IAAI,EAAE,WAAW,EAAA,CAAG;IAE1E,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;IAE/C,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;IAC/D,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC;IACzE,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;IAC7D,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;IACnD,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrD,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;IAC7D,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC;IACvE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;IAC7C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;IACzC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;;IAGvD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;;IAE7C,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;IAEnC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IAE3C,KAAK,GAAG,WAAW,EAAE;AAEnB,IAAA,eAAe,GAAG,MAAM,CAAuB,IAAI,2DAAC;AACpD,IAAA,WAAW,GAAG,MAAM,CAAgB,IAAI,uDAAC;;AAEnD,IAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;AAEhC,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,iDAAC;;AAEjD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,OAAO,oBAAoB,CAAQ,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrF,IAAA,CAAC,0DAAC;;AAGF,IAAA,eAAe,GAA0B,IAAI,GAAG,EAAE;;AAElD,IAAA,cAAc,GAAyB,IAAI,GAAG,EAAE;;AAEhD,IAAA,eAAe,GAAiB,IAAI,GAAG,EAAE;;AAEzC,IAAA,cAAc,GAAiB,IAAI,GAAG,EAAE;;AAExC,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAAyB;;AAEtD,IAAA,kBAAkB,GAAG,IAAI,GAAG,EAAyB;;AAErD,IAAA,0BAA0B,GAAG,IAAI,GAAG,EAAiC;;AAErE,IAAA,+BAA+B,GAAG,IAAI,GAAG,EAAsC;AAEvE,IAAA,KAAK,GAAiB;AAC7B,QAAA,iBAAiB,EAAE,CAAC,GAAG,IAAI,KAAI;AAC9B,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,0BAA0B,EAAE;AACvD,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAChC,IAAI,MAAM,KAAK,IAAI;AAAE,oBAAA,OAAO,MAAM;YACnC;AACA,YAAA,OAAO,IAAI;QACZ,CAAC;AACD,QAAA,sBAAsB,EAAE,CAAC,GAAG,IAAI,KAAI;AACnC,YAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,+BAA+B,EAAE;AAC5D,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAChC,IAAI,MAAM,KAAK,KAAK;AAAE,oBAAA,OAAO,KAAK;YACnC;AACA,YAAA,OAAO,IAAI;QACZ,CAAC;KACD;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;AAC7B,IAAA,CAAC,sDAAC;IAEM,aAAa,GAGjB,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;AAEzC,IAAA,WAAA,GAAA;QACC,OAAO,2BAA2B;AAChC,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC;AACjD,aAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACxD,aAAA,KAAK,CAAC,CAAC,GAAG,KAAI;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC;AAC1D,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;AACrD,QAAA,CAAC,CAAC;QAEH,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,iBAAiB,EAAE;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;YACnC,IAAI,KAAK,EAAE;AACV,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;gBAClB,KAAK,CAAC,KAAK,EAAE;YACd;AACD,QAAA,CAAC,CAAC;IACH;AAEA;;;;;;AAMG;AACH,IAAA,IAAI,CAAC,KAAa,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACzB;IACD;IAEQ,iBAAiB,GAAA;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;QACrC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;QAClF,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,EAAE;QAC5F,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,4BAA4B,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAC1F,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;QACtE,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QACxE,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,4BAA4B,GAAG,IAAI,CAAC,kBAAkB,EAAE;QAC1F,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,yBAAyB,GAAG,IAAI,CAAC,uBAAuB,EAAE;QAC5F,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;IAC3C;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;AACjC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,QAAA,IAAI,CAAC,cAAc;YAAE;AAErB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,IAAI,CAAC,UAAU;YAAE;AAEjB,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK;QAClC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAE5F;AACyD;AACzD,QAAA,MAAM,gBAAgB,GAAG,QAAQ,KAAK,MAAM;AAE5C;;;AAGG;AACH,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;AAEzD,QAAA,MAAM,SAAS,GAAG,CAAC,UAAkB,KAAI;;YAExC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBAC7C,QAAQ,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC,CAAC;AAEF,YAAA,KAAK,CAAC,QAAQ,GAAG,UAAU;AAC3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,+BAA+B,CAAC,IAAI,GAAG,CAAC;AAC1G,YAAA,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;;YAGzD,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBAC5C,QAAQ,CAAC,KAAK,CAAC;AAChB,YAAA,CAAC,CAAC;AACH,QAAA,CAAC;QAED,IAAI,gBAAgB,EAAE;YACrB,SAAS,CAAC,YAAY,CAAC;QACxB;aAAO;;;AAGN,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,YAAY;YAE9C,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,QAAQ,EAAE;;;gBAGlD,IAAI,WAAW,EAAE;AAChB,oBAAA,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,EAAE;AACrC,oBAAA,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,KAAI;wBAC/B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;AAC/C,4BAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;AAC5B,4BAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;yBACzB;AACF,oBAAA,CAAC,CAAC;gBACH;gBAEA,SAAS,CAAC,QAAQ,CAAC;AACnB,gBAAA,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,QAAQ;YAC3C;QACD;QAEA,MAAM,kBAAkB,GACvB,gBAAgB,IAAI,CAAC,WAAW,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,QAAQ;;QAG3F,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,KAAI;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;YAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/C,IAAI,MAAM,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,EAAE;gBACtC,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;AAAE,oBAAA,MAAM,EAAE,OAAO,IAAI;gBACpE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,UAAU;AAAE,oBAAA,MAAM,EAAE,MAAM,IAAI;AACnE,gBAAA,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE;YAC1C;YAEA,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;gBACvG;YACD;;AAGA,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,WAAW,EAAmB;AAChD,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAsB;YAEhD,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC;YAE5D,IAAI,aAAa,EAAE;;gBAElB;AACE,qBAAA,OAAO,CACP,aAAa,CAAC,QAAyB,EACvC,4BAA4B,CAAC,aAAa,CAAC,QAAQ,CAAC,EACpD,KAAK,CAAC,KAAK;AAEX,qBAAA,WAAW,CAAC,KAAK,CAAC,mBAAmB;AACrC,qBAAA,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;;AAGzC,gBAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE;oBAC7B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxC;YACD;;YAGA;iBACE,OAAO,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK;AACvD,iBAAA,WAAW,CAAC,KAAK,CAAC,mBAAmB;AACrC,iBAAA,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAEzC,YAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,eAAe,EAAE;AACtC,gBAAA,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC1B;iBAAO;;gBAEN,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;gBACzD,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC;YAC7D;AACD,QAAA,CAAC,CAAC;QAEF,UAAU,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,KAAI;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;;AAGzD,YAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE;gBAC3D;YACD;YAEA,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC;YAC9E,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC;YAE9E,IAAI,OAAO,EAAE;gBACZ,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAI;;AAEzF,oBAAA,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,EAAE,GAAG,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACzF,oBAAA,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,EAAE,GAAG,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;;AAGzF,oBAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,EAAE,GAAG,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACxF,oBAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,EAAE,GAAG,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACzF,gBAAA,CAAC,CAAC;YACH;iBAAO;gBACN,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAAC;gBAC9D,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAAC;gBAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAAC;gBAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAAC;YAC9D;;YAGA,IAAI,OAAO,EAAE;AACZ,gBAAA,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAC7E,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;oBAClE,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;oBAClE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;oBACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;gBAClE;YACD;iBAAO;gBACN,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;gBACjE,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;gBACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;gBAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;YACjE;AACD,QAAA,CAAC,CAAC;AAEF,QAAA,UAAU,CAAC,uBAAuB,CAAC,CAAC,KAAK,KAAI;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;;AAGnE,YAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE;gBAC3D;YACD;YAEA,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC;YAC9E,MAAM,iBAAiB,GAAG,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC;AAE9E,YAAA,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG;AAC1C,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;AAC9B,gBAAA,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE;AAChD,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG;AAC1C,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;AAC9B,gBAAA,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE;AAChD,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG;AACzC,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;AAC9B,gBAAA,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE;AAChD,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG;AACzC,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;AAC9B,gBAAA,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE;AAChD,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,gBAAA,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE;AAC5C,aAAA,CAAC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,KAAK,CAAC,sBAAsB,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AACjC,QAAA,CAAC,CAAC;IACH;AAEQ,IAAA,2BAA2B,CAAC,MAAsB,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE;AACnC,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAErD,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM;QACjD,MAAM,SAAS,GAAG,eAAe,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,SAAS;QACvG,MAAM,eAAe,GACpB,SAAS,IAAI,eAAe,KAAK,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,SAAS;QACnG,MAAM,cAAc,GAAG,eAAe,KAAK,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,SAAS;QAE5G,OAAO;AACN,YAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;AACvE,YAAA,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE;SACzD;IACzB;IAEQ,6BAA6B,CACpC,MAA2B,EAC3B,KAA0B,EAAA;QAE1B,OAAO;AACN,YAAA,MAAM,EAAE;AACP,gBAAA,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;AAClC,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;AAChC,gBAAA,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;AAC7C,gBAAA,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;AAC/C,aAAA;AACD,YAAA,KAAK,EAAE;AACN,gBAAA,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;AACjC,gBAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;AAC/B,gBAAA,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;AAC5C,gBAAA,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM;AAC9C,aAAA;SACD;IACF;uGAtYY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,uPAImB,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACZ,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7BvE;;;;;;;;;;;;;;;;;;;;AAoBT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE3C,WAAW,EAAA,UAAA,EAAA,CAAA;kBA1BvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;AAoBT,CAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;AACxD,iBAAA;AAK0C,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,iGACZ,mBAAmB,CAAA,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACvEpF,MAAM,sBAAsB,GAAwB;AACnD,IAAA,WAAW,EAAE,CAAC;CACd;AAED;;;;;;;;;;;AAWG;MAEU,eAAe,CAAA;IAC3B,QAAQ,GAAG,KAAK,CAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACvC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;IAC5B,KAAK,GAAG,KAAK,CAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACpC,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiB;IACnC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgD;IAChE,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA4C;AACxD,IAAA,OAAO,GAAG,KAAK,CAAC,sBAAsB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,uBAAuB,CAAC,EAAA,CAAG;AAEpF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;YAC/D,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,IAAI,EAAE;SACX;QAED,MAAM,UAAU,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,CAAA,EAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,EAAE;QAExG,IAAI,UAAU,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;QAC1C;aAAO,IAAI,QAAQ,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC;QACxC;aAAO;AACN,YAAA,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACnD;AAEA,QAAA,OAAO,UAAU;AAClB,IAAA,CAAC,8DAAC;;IAGF,KAAK,GAAG,KAAK,CAAgC,SAAS,kDAAI,KAAK,EAAE,UAAU,EAAA,CAAG;;AAE9E,IAAA,IAAI,GAAG,KAAK,CAAY,EAAE,gDAAC;IAE3B,cAAc,GAAG,MAAM,EAA6B;IACpD,aAAa,GAAG,MAAM,EAA4B;IAClD,iBAAiB,GAAG,MAAM,EAAgC;IAC1D,gBAAgB,GAAG,MAAM,EAA+B;IACxD,YAAY,GAAG,MAAM,EAA2B;IAExC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;IACrC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACvD,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;IACjD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;IACzC,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;IAC/D,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;IAC/C,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;IACrE,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACjE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;IAC/C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;IACjC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IAEvC,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrD,IAAA,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7B,IAAA,SAAS,GAAG,MAAM,CAA6B,UAAU,CAAC;AAE1D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG;YACrB,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,IAAI,EAA0E;SACnF;AAED,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;AAE3B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;AAGlC,QAAA,IAAI,KAAK,KAAK,aAAa,EAAE;AAC5B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAwC;YAC1D,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;AAExB,YAAA,OAAO,MAAM;QACd;;QAGA,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY,EAAE;AAClD,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAsB,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/E,YAAA,OAAO,MAAM;QACd;;AAGA,QAAA,MAAM,UAAU,GAAG;YAClB,IAAI,CAAC,UAAU,CAAC,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,CAAC;SACjB;AACD,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,GAAI,GAAc,CAAC;AACvE,IAAA,CAAC,sDAAC;AAEF,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QACxB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;AAEhC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAE7B,QAAA,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;;QAGtE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AAEtB,QAAA,OAAO,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,IAAI,SAAS,CAAC;AACzE,IAAA,CAAC,oDAAC;AAEF,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAEpB,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACpD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,CAAC;AAC7D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;YAChD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,EAAE;YACjD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,0BAA0B,EAAE;AAClC,QAAA,CAAC,CAAC;IACH;AAEA,IAAA,IAAI,UAAU,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACvE;AAEA,IAAA,QAAQ,CAAC,KAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,OAAO,CAAC,IAAe,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACpB;IAEQ,yBAAyB,GAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;YAAE;QAErB,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE;QACrC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAiB,MAAM,EAAE,YAAY,CAAC;YAAE;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CACrC,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,aAAa,EAC5B,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,aAAa,CACvC;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;AAEvD,QAAA,OAAO,MAAK;YACX,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnD,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACtD,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC;YACpD;AACD,QAAA,CAAC;IACF;IAEQ,0BAA0B,GAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;YAAE;QAErB,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QACtD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;QACpD,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC5D,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QAElD,MAAM,iBAAiB,GAAG,WAAW,CACpC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,SAAS,EAAE,cAAc,EAC9B,IAAI,CAAC,SAAS,EAAE,aAAa,EAC7B,IAAI,CAAC,SAAS,EAAE,iBAAiB,EACjC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAChC;AACD,QAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;AAEzF,QAAA,IAAI,iBAAiB,IAAI,oBAAoB,EAAE;YAC9C,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,GAAG,YAAY,CAAC,oBAAoB,CAAC;QAC5F;aAAO,IAAI,iBAAiB,EAAE;AAC7B,YAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC;QACxD;aAAO,IAAI,oBAAoB,EAAE;AAChC,YAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,oBAAoB,CAAC;QAC5D;QAEA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;AAChD,YAAA,gBAAgB,EAAE,cAAc;AAChC,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,mBAAmB,EAAE,iBAAiB;AACtC,YAAA,kBAAkB,EAAE,gBAAgB;AACpC,YAAA,cAAc,EAAE,YAAY;AAC5B,SAAA,CAAC;AACF,QAAA,OAAO,MAAK;YACX,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpD,QAAA,CAAC;IACF;IAEQ,oBAAoB,GAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;YAAE;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9D,QAAA,IAAI,CAAC,KAAK;YAAE;;AAGZ,QAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,MAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;AACrE,QAAA,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QAEjF,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;QAE3C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;QAEvC,IAAI,yBAAyB,EAAE;AAC9B,YAAA,QAAQ,CAAC,WAAW,CAAC,yBAAyB,CAAC;QAChD;QAEA,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAEhD,QAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;YACtB,QAAQ,CAAC,uBAAuB,CAAC;AAChC,gBAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACnC,gBAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACnC,gBAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACnC,aAAA,CAAC;AACF,YAAA,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC;QACzC;aAAO;YACN,QAAQ,CAAC,cAAc,CAAC;AACvB,gBAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACnC,gBAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACnC,gBAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AACnC,aAAA,CAAC;AACF,YAAA,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;QAChC;AAEA,QAAA,MAAM,CACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,GAAG;YACH,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,WAAW,EAAE;SAClB;QAED,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;QACpD,IAAI,eAAe,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAC/E,IAAI,YAAY,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;QACtE,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC1D,IAAI,mBAAmB,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;QAC3F,IAAI,WAAW,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;QACnE,IAAI,sBAAsB,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,yBAAyB,CAAC,sBAAsB,CAAC;QACpG,IAAI,oBAAoB,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,uBAAuB,CAAC,oBAAoB,CAAC;QAC9F,IAAI,WAAW,KAAK,SAAS;AAAE,YAAA,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC;IACpE;IAEQ,0BAA0B,GAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ;YAAE;QAEf,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAE5F,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,EAAE;AACvD,gBAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC;YACtF;AAEA,YAAA,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;YAC5B;QACD;AAEA,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AACjC,gBAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;YAC1E;AACA,YAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YACtB;QACD;AAEA,QAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AACjC,YAAA,QAAQ,CAAC,iBAAiB,CACzB,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,YAAY,EAC3B,cAAc,CAAC,uBAAuB,EACtC,cAAc,CAAC,wBAAwB,CACvC;YACD;QACD;IACD;AAEQ,IAAA,mBAAmB,CAC1B,QAAkB,EAClB,MAAsB,EACtB,eAAuC,EAAA;QAEvC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,IAAI,SAAS,EAAE,MAAM,EAAE;IACvE;IAEQ,aAAa,CAAC,QAA2B,EAAE,KAAoB,EAAA;QACtE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7C,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;YAC7B,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;YACjC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;QAClC;AAEA,QAAA,OAAO,WAAW;IACnB;uGA3VY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,SAAS;mBAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE;;AA+VjD;AACA,MAAM,mBAAmB,GAAsC;AAC9D,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,iBAAiB,EAAE,CAAC;CACpB;AAED;;;AAGG;AACI,MAAM,uBAAuB,GAAyB;AAC5D,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzB,IAAA,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,WAAW,EAAE,CAAC;;AAGf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;MA2CU,aAAa,CAAA;AACzB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,GAAA,EAAA,CAAA,EACpB,KAAK,EAAE,WAAW;AAClB,QAAA,SAAS,EAAE,CAAC,KAAyC,KAAI;AACxD,YAAA,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,SAAS;AAAE,gBAAA,OAAO,SAA8B;AAC9E,YAAA,OAAO,KAAK;AACb,QAAA,CAAC,GACA;IACF,QAAQ,GAAG,KAAK,CAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACvC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;IAC5B,KAAK,GAAG,KAAK,CAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACpC,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiB;IACnC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgD;AAChE,IAAA,OAAO,GAAG,KAAK,CAAC,uBAAuB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,uBAAuB,CAAC,EAAA,CAAG;AAE7F,IAAA,YAAY,GAAG,YAAY,CAAC,eAAe,wDAAC;AAEpC,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG;YACzD,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,QAAQ,EAAE;SACf;QAED,MAAM,UAAU,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QAEhD,IAAI,UAAU,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;QAC1C;aAAO,IAAI,QAAQ,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC;QACxC;aAAO;AACN,YAAA,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACnD;AAEA,QAAA,OAAO,UAAU;AAClB,IAAA,CAAC,8DAAC;IAEF,IAAI,GAAG,MAAM,EAAQ;IACrB,KAAK,GAAG,MAAM,EAAQ;IACtB,cAAc,GAAG,MAAM,EAA6B;IACpD,aAAa,GAAG,MAAM,EAA4B;IAClD,iBAAiB,GAAG,MAAM,EAAgC;IAC1D,gBAAgB,GAAG,MAAM,EAA+B;IACxD,YAAY,GAAG,MAAM,EAA2B;IAExC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;IACzC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;IAC3C,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrD,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;IACjD,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrD,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAC/B,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAC3D,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAC7E,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;IACnD,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACrD,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;IACnD,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACzD,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACzD,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;IAC/D,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACvD,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;AAE7D,IAAA,SAAS,GAAG,MAAM,CAA6B,UAAU,CAAC;AAClD,IAAA,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAE7B,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,oDAAC;AAC3D,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAChC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1F,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;AACzD,IAAA,CAAC,oDAAC;AACF,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;QAChC,OAAO,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7D,IAAA,CAAC,qDAAC;AAEQ,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;QAGlC,IAAI,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,EAAE;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;;AAEjD,QAAA,IAAI,gBAAgB,KAAK,KAAK,IAAI,SAAS,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;QAEpE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;QAEvC,IAAI,CAAC,OAAO,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC,SAAS,GAAG,gBAAgB;QAE5D,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAC1E,QAAA,IAAI,CAAC,mBAAmB;AAAE,YAAA,OAAO,EAAE;;QAGnC,MAAM,CAAC,MAAM,CAAC,GAAG;YAChB,mBAAmB,CAAC,MAAM,EAAE;YAC5B,mBAAmB,CAAC,UAAU,EAAE;YAChC,mBAAmB,CAAC,OAAO,EAAE;SAC7B;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAiB,MAAM,EAAE,YAAY,CAAC;AAAE,YAAA,OAAO,EAAE;AAEzE,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAC1E,IAAA,CAAC,gEAAC;AAEF,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAEpB,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACpD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,CAAC;AAC7D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,EAAE;YACjD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,EAAE;YAClD,SAAS,CAAC,MAAM,OAAO,IAAI,CAAC;AAC7B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,qBAAqB,EAAE;AAC7B,QAAA,CAAC,CAAC;IACH;IAEQ,0BAA0B,GAAA;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;YAAE;AAErB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;QAErD,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE;QACrC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAiB,MAAM,EAAE,YAAY,CAAC;YAAE;AAEhE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAC3E,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAE7F,QAAA,OAAO,MAAK;YACX,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAChD,IAAI,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACnD,gBAAA,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3C;AACD,QAAA,CAAC;IACF;IAEQ,2BAA2B,GAAA;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;YAAE;AAErB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;QACtD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC;QACpD,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAC5D,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QAElD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,gBAAgB,EAAE,cAAc;AAChC,YAAA,eAAe,EAAE,aAAa;AAC9B,YAAA,mBAAmB,EAAE,iBAAiB;AACtC,YAAA,kBAAkB,EAAE,gBAAgB;AACpC,YAAA,cAAc,EAAE,YAAY;AAC5B,SAAA,CAAC;AAEF,QAAA,OAAO,MAAK;YACX,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACjD,QAAA,CAAC;IACF;IAEQ,qBAAqB,GAAA;QAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;AACpD,QAAA,IAAI,CAAC,cAAc;YAAE;AAErB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3D,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3C,QAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAC/E,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC;AAEjC,QAAA,MAAM,CACL,YAAY,EACZ,0BAA0B,EAC1B,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,GAAG,EACH,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,GAAG;YACH,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,0BAA0B,EAAE;YACjC,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE;SACf;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC;QACxC,IAAI,0BAA0B,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,6BAA6B,CAAC,0BAA0B,CAAC;QAC5G,IAAI,aAAa,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;QACrE,IAAI,cAAc,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;AACxE,QAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;QACtC,IAAI,gBAAgB,KAAK,SAAS;YAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,EAAE,IAAI,CAAC;QACvF,IAAI,mBAAmB,KAAK,SAAS;YAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,mBAAmB,EAAE,IAAI,CAAC;QAChG,IAAI,aAAa,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC;QACxE,IAAI,gBAAgB,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC;AACjF,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;AAC7F,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;AAC1F,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;QAC5C,IAAI,QAAQ,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACpD,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC;IACnE;AAEQ,IAAA,oBAAoB,CAC3B,SAAoB,EACpB,MAAgB,EAChB,SAA2C,EAC3C,SAAoD,EACpD,UAA0B,EAC1B,QAAA,GAA2C,MAAM,EAAA;AAEjD,QAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AACrC,QAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;QACvE,OAAO;YACN,MAAM;YACN,SAAS;YACT,mBAAmB;AACnB,YAAA,SAAS,EAAE;AACV,kBAAE;AACF,kBAAE,CAAC,MAAqB,KAAI;AAC1B,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3B,CAAC;YACH,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,CAAC,MAAqB,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACxF,KAAK,EAAE,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;AACzD,YAAA,UAAU,EAAE,KAAK;YACjB,QAAQ;SACR;IACF;uGAnRY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAtBd;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,UAAU,EAAE,CAAC,SAAwB,KAAI;AACxC,oBAAA,OAAO,MAAK;AACX,wBAAA,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,EAAE;wBAC7C,IAAI,CAAC,YAAY,CAAC,MAAM;4BAAE;AAE1B,wBAAA,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC;wBAC5E,OAAO,CAAC,iBAAoC,KAAI;AAC/C,4BAAA,KAAK,MAAM,UAAU,IAAI,SAAS,EAAE;AACnC,gCAAA,MAAM,QAAQ,GAAG,UAAU,EAAE;AAC7B,gCAAA,IAAI,CAAC,QAAQ;oCAAE;AACf,gCAAA,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;4BAC/C;AACD,wBAAA,CAAC;AACF,oBAAA,CAAC;gBACF,CAAC;gBACD,IAAI,EAAE,CAAC,aAAa,CAAC;AACrB,aAAA;AACD,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAiB2B,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtDjC;;;;;;;;;;;;;AAaT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAraW,eAAe,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA+bf,aAAa,EAAA,UAAA,EAAA,CAAA;kBA1CzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,oBAAA,SAAS,EAAE;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,UAAU,EAAE,CAAC,SAAwB,KAAI;AACxC,gCAAA,OAAO,MAAK;AACX,oCAAA,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,EAAE;oCAC7C,IAAI,CAAC,YAAY,CAAC,MAAM;wCAAE;AAE1B,oCAAA,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC;oCAC5E,OAAO,CAAC,iBAAoC,KAAI;AAC/C,wCAAA,KAAK,MAAM,UAAU,IAAI,SAAS,EAAE;AACnC,4CAAA,MAAM,QAAQ,GAAG,UAAU,EAAE;AAC7B,4CAAA,IAAI,CAAC,QAAQ;gDAAE;AACf,4CAAA,QAAQ,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;wCAC/C;AACD,oCAAA,CAAC;AACF,gCAAA,CAAC;4BACF,CAAC;AACD,4BAAA,IAAI,EAAE,CAAA,aAAA,CAAe;AACrB,yBAAA;AACD,qBAAA;AACD,iBAAA;mxBAgB4B,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACpgB5C;AACA,MAAM,2BAA2B,GAAG;AACnC,IAAA,SAAS,EAAE,eAAe;AAC1B,IAAA,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC;IACtF,OAAO,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,CAAC;CACrG;AAED;;;;;;;AAOG;MAMU,kBAAkB,CAAA;IAC9B,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAmB,KAAK,EAAE,gBAAgB,EAAA,CAAG;IAE1D,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACnC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,mBAAmB,CAAA;IAC/B,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAoB,KAAK,EAAE,iBAAiB,EAAA,CAAG;IAE5D,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,gBAAgB,CAAA;IAC5B,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAiB,KAAK,EAAE,cAAc,EAAA,CAAG;IAEtD,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,cAAc;oBACxB,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;;AAQG;MAMU,sBAAsB,CAAA;IAClC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAuB,KAAK,EAAE,oBAAoB,EAAA,CAAG;IAElE,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;QACvC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,QAAQ,EAAE,oBAAoB;oBAC9B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;;AAQG;MAMU,uBAAuB,CAAA;IACnC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAwB,KAAK,EAAE,qBAAqB,EAAA,CAAG;IAEpE,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;QACxC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;;AAQG;MAMU,mBAAmB,CAAA;IAC/B,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAoB,KAAK,EAAE,iBAAiB,EAAA,CAAG;IAE5D,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,oBAAoB,CAAA;IAChC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAqB,KAAK,EAAE,kBAAkB,EAAA,CAAG;IAE9D,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,uBAAuB,CAAA;IACnC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAwB,KAAK,EAAE,qBAAqB,EAAA,CAAG;IAEpE,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;QACxC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,oBAAoB,CAAA;IAChC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAqB,KAAK,EAAE,kBAAkB,EAAA,CAAG;IAE9D,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,yBAAyB,CAAA;IACrC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAA0B,KAAK,EAAE,uBAAuB,EAAA,CAAG;IAExE,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,qCAAqC;AAC/C,oBAAA,QAAQ,EAAE,uBAAuB;oBACjC,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,gBAAgB,CAAA;IAC5B,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAiB,KAAK,EAAE,cAAc,EAAA,CAAG;IAEtD,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,cAAc;oBACxB,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,qBAAqB,CAAA;IACjC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAsB,KAAK,EAAE,mBAAmB,EAAA,CAAG;IAEhE,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,QAAQ,EAAE,mBAAmB;oBAC7B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,sBAAsB,CAAA;IAClC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAAuB,KAAK,EAAE,oBAAoB,EAAA,CAAG;IAElE,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;QACvC,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,QAAQ,EAAE,oBAAoB;oBAC9B,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,2BAA2B,CAAA;IACvC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAA4B,KAAK,EAAE,yBAAyB,EAAA,CAAG;IAE5E,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC5C,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,QAAQ,EAAE,yBAAyB;oBACnC,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;AAeD;;;;;;;AAOG;MAMU,2BAA2B,CAAA;IACvC,IAAI,GAAG,KAAK,CAAC,QAAQ,gDAA4B,KAAK,EAAE,yBAAyB,EAAA,CAAG;IAE5E,WAAW,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,IAAA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ;AAEpC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC5C,MAAM,CAAC,MAAK;YACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;IACH;uGAXY,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,QAAQ,EAAE,yBAAyB;oBACnC,cAAc,EAAE,CAAC,2BAA2B,CAAC;AAC7C,iBAAA;;;AC7WD,MAAM,cAAc,GAAyB,uBAAuB;AAEpE;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAwCU,wBAAwB,CAAA;IACpC,QAAQ,GAAG,KAAK,CAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACvC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;IAC5B,KAAK,GAAG,KAAK,CAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IACpC,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiB;IACnC,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAgD;AAChE,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EACzB,KAAK,EAAE,sBAAsB;AAC7B,QAAA,SAAS,EAAE,CAAC,KAAgD,KAAI;YAC/D,IAAI,KAAK,KAAK,EAAE;AAAE,gBAAA,OAAO,EAAE;AAC3B,YAAA,OAAO,KAAK;AACb,QAAA,CAAC,GACA;AACF,IAAA,OAAO,GAAG,KAAK,CAAC,cAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAAA,CAAA,EAAI,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAA,CAAG;AAEnE,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG;YACzD,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,QAAQ,EAAE;SACf;QAED,MAAM,UAAU,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QAEhD,IAAI,UAAU,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;QAC1C;aAAO,IAAI,QAAQ,EAAE;YACpB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC;QACxC;aAAO;AACN,YAAA,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACnD;AAEA,QAAA,OAAO,UAAU;AAClB,IAAA,CAAC,8DAAC;AAEM,IAAA,kBAAkB,GAAG,SAAS,CAAC,QAAQ,CAA6B,iBAAiB,CAAC;AAC9F,IAAA,aAAa,GAAG,YAAY,CAAC,aAAa,yDAAC;AAEnC,IAAA,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,IAAA,SAAS,GAAG,MAAM,CAA6B,UAAU,CAAC;IAElD,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAE3C,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,aAAa;AAC/D,QAAA,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI;AAEjC,QAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,eAAe,CAAC;AACvD,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,IAAI;;QAG/B,aAAa,CAAC,OAAO,EAAE;QACvB,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,IAAI,CAAE,UAAkC,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI;AAEpF,QAAA,OAAO,UAAiC;AACzC,IAAA,CAAC,yDAAC;AAEQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;AAC7G,QAAA,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,EAAE;QAC7B,OAAO,SAAS,CAAC,GAAG,CACnB,CAAC,QAAQ,EAAE,KAAK,MACd;AACA,YAAA,GAAG,QAAQ;AACX,YAAA,OAAO,EAAE;AACR,gBAAA,GAAG,OAAO;AACV,gBAAA,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;AAC3B,gBAAA,cAAc,EAAE,CAAC,KAAK,KAAI;oBACzB,OAAO;AACN,wBAAA,GAAG,KAAK;AACR,wBAAA,SAAS,EAAE,CAAC,MAAM,KAAI;AACrB,4BAAA,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AACxC,4BAAA,OAAO,MAAM;wBACd,CAAC;AACD,wBAAA,SAAS,EAAE,CAAC,MAAM,KAAI;AACrB,4BAAA,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AACxC,4BAAA,aAAa,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI;wBAChD,CAAC;AACD,wBAAA,QAAQ,EAAE,eAAe;qBACH;gBACxB,CAAC;AACD,aAAA;AACD,YAAA,GAAG,EAAE,CAAA,EAAG,QAAQ,CAAC,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,GAAG,GAAG,aAAa,EAAE,IAAI,IAAI,EAAE,CAAA,CAAE;AAChE,SAAA,CAIA,CACF;AACF,IAAA,CAAC,4DAAC;AAEQ,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;QAElC,IAAI,SAAS,KAAK,KAAK;AAAE,YAAA,OAAO,EAAE;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;;AAEjD,QAAA,IAAI,gBAAgB,KAAK,KAAK,IAAI,SAAS,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAEpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;;QAE9B,IAAI,CAAC,OAAO,CAAC,SAAS;AAAE,YAAA,OAAO,CAAC,SAAS,GAAG,gBAAgB;QAE5D,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AAC1E,QAAA,IAAI,CAAC,mBAAmB;AAAE,YAAA,OAAO,EAAE;;AAGnC,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,UAAU,EAAE,CAAC;QACjF,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAiB,MAAM,EAAE,YAAY,CAAC;AAAE,YAAA,OAAO,EAAE;QAEzE,OAAO,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;AACpE,IAAA,CAAC,gEAAC;AAEF,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QAEpB,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE;YACpD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,kBAAkB,CAAC;AAC7D,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa;gBAAE;YACpB,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC9D,QAAA,CAAC,CAAC;IACH;uGAlIY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAsCP,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1EhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,aAAa,kTAAE,eAAe,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE5B,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvCpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,oCAAoC;AAC9C,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;AACzC,iBAAA;AAsC4E,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,iBAAiB,8FAChE,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACrI3C,SAAS,YAAY,CACpB,KAAuG,EACvG,KAAuG,EACvG,EAAE,QAAQ,EAAE,IAAI,EAAuE,EAAA;AAEvF,IAAA,OAAO,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAK;AAClD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAEnC,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAmB,MAAK;AAChD,YAAA,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE;AAC/C,YAAA,IAAI,CAAC,cAAc;AAAE,gBAAA,OAAO,IAAI;YAEhC,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;YAC/E,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/E,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AAEzB,YAAA,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI;AAC5D,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO,IAAI;AAE3B,YAAA,OAAO,cAAc,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAc;AACnF,QAAA,CAAC,oDAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACpB,YAAA,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE;AAC/C,YAAA,IAAI,CAAC,cAAc;gBAAE;AAErB,YAAA,MAAM,KAAK,GAAG,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK;gBAAE;YAEZ,SAAS,CAAC,MAAK;gBACd,IAAI,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACvD,cAAc,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC;gBACrD;AACD,YAAA,CAAC,CAAC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;AAChB,IAAA,CAAC,CAAC;AACH;AAEA,SAAS,WAAW,CACnB,WAAsG,EAAA;IAEtG,OAAO,SAAS,YAAY,CAC3B,KAAuG,EACvG,KAAuG,EACvG,EAAE,QAAQ,EAAE,IAAI,EAAsE,EAAA;AAEtF,QAAA,OAAO,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAK;AAClD,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;YAEnC,IAAI,MAAM,GAAG,IAA0B;AAEvC,YAAA,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;AAC/B,gBAAA,MAAM,GAAG,MAAM,IAAI;YACpB;AAEA,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC/B,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;AAC/B,gBAAA,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,IAAI;gBACxB,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9C,YAAA,CAAC,qDAAC;AAEF,YAAA,OAAO,YAAY,CAAY,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC5E,QAAA,CAAC,CAAC;AACH,IAAA,CAAC;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MACU,UAAU,GAAG,WAAW,CAA0C,CAAC,MAAM,EAAE,IAAI,KAC3F,MAAM,CAAC,SAAS,CAAC,KAAK,CACrB,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,4BAA4B,CAAC,IAAI,CAAC,eAAe,CAAC,EAClD,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,4BAA4B,CAAC,IAAI,CAAC,eAAe,CAAC,CAClD;AAEF;;;AAGG;AACI,MAAM,gBAAgB,GAAG;AAEhC;;;;;;;;;;;;;;;;;;AAkBG;AACI,MAAM,cAAc,GAAG,WAAW,CAAkD,CAAC,MAAM,EAAE,IAAI,KACvG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE7G;;;AAGG;AACI,MAAM,oBAAoB,GAAG;AAEpC;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACI,MAAM,aAAa,GAAG,WAAW,CAAgD,CAAC,MAAM,EAAE,IAAI,KAAI;AACxG,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAC1C,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AAChB,QAAA,SAAS,CAAC,aAAa,GAAG,IAAI;AAC9B,QAAA,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IAC/B;AAEA,IAAA,OAAO,SAAS;AACjB,CAAC;AACD;;;AAGG;AACI,MAAM,mBAAmB,GAAG;AAEnC;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACI,MAAM,cAAc,GAAG,WAAW,CAAkD,CAAC,MAAM,EAAE,IAAI,KAAI;AAC3G,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAC3C,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AAChB,QAAA,SAAS,CAAC,aAAa,GAAG,IAAI;AAC9B,QAAA,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;IAC/B;AAEA,IAAA,OAAO,SAAS;AACjB,CAAC;AACD;;;AAGG;AACI,MAAM,oBAAoB,GAAG;AAEpC;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,SAAS,GAAG,WAAW,CAAwC,CAAC,MAAM,EAAE,IAAI,KACxF,MAAM,CAAC,SAAS,CAAC,IAAI,CACpB,IAAI,CAAC,MAAM,EACX,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CACvC;AAEF;;;AAGG;AACI,MAAM,eAAe,GAAG;AAE/B;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACI,MAAM,WAAW,GAAG,WAAW,CAA4C,CAAC,MAAM,EAAE,IAAI,KAAI;AAClG,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAC7B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CACvC;AACF,CAAC;AACD;;;AAGG;AACI,MAAM,iBAAiB,GAAG;;AC/SjC;;;;;;;;;;;;;;;;;;AAkBG;MAqBU,gBAAgB,CAAA;IAC5B,SAAS,GAAG,KAAK,CAAC,QAAQ,qDAA8B,KAAK,EAAE,cAAc,EAAA,CAAG;AAEhF,IAAA,SAAS,GAAG,MAAM,CAA6B,UAAU,CAAC;AAClD,IAAA,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC;AAE/B,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;QAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACjD,QAAA,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAE7C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;AACzE,QAAA,IAAI,CAAC,kBAAkB;AAAE,YAAA,OAAO,EAAE;;QAGlC,kBAAkB,CAAC,UAAU,EAAE;QAC/B,kBAAkB,CAAC,OAAO,EAAE;AAE5B,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,gBAAgB,EAAE,KAAK,CAAC;AACpF,IAAA,CAAC,gEAAC;AAEF,IAAA,WAAA,GAAA;AACC,QAAA,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,KAAK,EAAE;QAC5C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,cAAc;IACzE;uGAxBY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBlB;;;;;;;;;;;;;AAaT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGS,eAAe,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;AAaT,CAAA,CAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,iBAAA;;;ACjDD;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,iBAAiB,CAAC,QAA+B,EAAE,QAAmB,EAAA;AACrF,IAAA,OAAO,cAAc,CAAC,iBAAiB,EAAE,QAAQ,EAAE,MAAK;AACvD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAEnC,QAAA,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAEzC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7C,QAAA,CAAC,CAAC;AACH,IAAA,CAAC,CAAC;AACH;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,QAA+B,EAAE,QAAmB,EAAA;AACpF,IAAA,OAAO,cAAc,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAK;AACtD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAEnC,QAAA,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;AAExC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5C,QAAA,CAAC,CAAC;AACH,IAAA,CAAC,CAAC;AACH;AAEA;;;;;;;;;;;;;;;AAeG;AACG,SAAU,iBAAiB,CAAC,QAAuC,EAAE,QAAmB,EAAA;AAC7F,IAAA,OAAO,cAAc,CAAC,iBAAiB,EAAE,QAAQ,EAAE,MAAK;AACvD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAEnC,QAAA,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC;AAEhD,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,OAAO,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC;AACpD,QAAA,CAAC,CAAC;AACH,IAAA,CAAC,CAAC;AACH;AAEA;;;;;;;;;;;;;;AAcG;AACG,SAAU,sBAAsB,CAAC,QAA4C,EAAE,QAAmB,EAAA;AACvG,IAAA,OAAO,cAAc,CAAC,sBAAsB,EAAE,QAAQ,EAAE,MAAK;AAC5D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAEnC,QAAA,OAAO,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,CAAC;AAErD,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,OAAO,CAAC,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzD,QAAA,CAAC,CAAC;AACH,IAAA,CAAC,CAAC;AACH;;ACvHA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"angular-three-rapier.mjs","sources":["../../../../libs/rapier/src/lib/interaction-groups.ts","../../../../libs/rapier/src/lib/debug.ts","../../../../libs/rapier/src/lib/frame-stepper.ts","../../../../libs/rapier/src/lib/shared.ts","../../../../libs/rapier/src/lib/utils.ts","../../../../libs/rapier/src/lib/physics.ts","../../../../libs/rapier/src/lib/rigid-body.ts","../../../../libs/rapier/src/lib/colliders.ts","../../../../libs/rapier/src/lib/instanced-rigid-bodies.ts","../../../../libs/rapier/src/lib/joints.ts","../../../../libs/rapier/src/lib/mesh-collider.ts","../../../../libs/rapier/src/lib/physics-hooks.ts","../../../../libs/rapier/src/angular-three-rapier.ts"],"sourcesContent":["import { computed, Directive, effect, inject, InjectionToken, input } from '@angular/core';\nimport { InteractionGroups } from '@dimforge/rapier3d-compat';\n\n/**\n * Calculates an InteractionGroup bitmask for use in the `collisionGroups` or `solverGroups`\n * properties of RigidBody or Collider components. The first argument represents a list of\n * groups the entity is in (expressed as numbers from 0 to 15). The second argument is a list\n * of groups that will be filtered against. When it is omitted, all groups are filtered against.\n *\n * @example\n * A RigidBody that is member of group 0 and will collide with everything from groups 0 and 1:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0], [0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will collide with everything else:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will not collide with anything:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1], [])} />\n * ```\n *\n * Please note that Rapier needs interaction filters to evaluate to true between _both_ colliding\n * entities for collision events to trigger.\n *\n * @param memberships Groups the collider is a member of. (Values can range from 0 to 15.)\n * @param filters Groups the interaction group should filter against. (Values can range from 0 to 15.)\n * @returns An InteractionGroup bitmask.\n */\nexport function interactionGroups(memberships: number | number[], filters?: number | number[]): InteractionGroups {\n\treturn (bitmask(memberships) << 16) + (filters !== undefined ? bitmask(filters) : 0b1111_1111_1111_1111);\n}\n\nfunction bitmask(groups: number | number[]): InteractionGroups {\n\treturn [groups].flat().reduce((acc, layer) => acc | (1 << layer), 0);\n}\n\n/**\n * Injection token for handlers that set collision groups on colliders.\n * Used internally by rigid bodies and attractors to apply interaction groups.\n */\nexport const COLLISION_GROUPS_HANDLER = new InjectionToken<\n\t() => undefined | ((interactionGroups: InteractionGroups) => void)\n>('COLLISION_GROUPS_HANDLER');\n\n/**\n * Directive for setting collision/solver groups on a rigid body or collider.\n * This allows filtering which objects can collide with each other.\n *\n * @example\n * ```html\n * <!-- Object in group 0, collides with groups 0 and 1 -->\n * <ngt-object3D rigidBody [interactionGroups]=\"[[0], [0, 1]]\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Object in groups 0 and 1, collides with everything -->\n * <ngt-object3D rigidBody [interactionGroups]=\"[[0, 1]]\">\n * <ngt-mesh>\n * <ngt-sphere-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n * ```\n */\n@Directive({ selector: 'ngt-object3D[interactionGroups]' })\nexport class NgtrInteractionGroups {\n\tinputs = input.required<[number | number[], (number | number[])?]>({ alias: 'interactionGroups' });\n\tinteractionGroups = computed(() => {\n\t\tconst [memberships, filters] = this.inputs();\n\t\treturn interactionGroups(memberships, filters);\n\t});\n\n\tconstructor() {\n\t\tconst collisionGroupsHandlerFn = inject(COLLISION_GROUPS_HANDLER, { host: true, optional: true });\n\n\t\teffect(() => {\n\t\t\tif (!collisionGroupsHandlerFn) return;\n\t\t\tconst handler = collisionGroupsHandlerFn();\n\t\t\tif (!handler) return;\n\t\t\thandler(this.interactionGroups());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend } from 'angular-three';\nimport * as THREE from 'three';\nimport { Group, LineBasicMaterial, LineSegments } from 'three';\nimport { NgtrPhysics } from './physics';\n\n/**\n * Debug visualization component for the physics world.\n * Renders wireframe outlines of all colliders in the physics simulation.\n *\n * This component is automatically rendered when the `debug` option is set to `true`\n * on the `NgtrPhysics` component. It updates every frame to show current collider positions.\n *\n * @example\n * ```html\n * <ngtr-physics [options]=\"{ debug: true }\">\n * <ng-template>\n * <!-- Your physics scene -->\n * </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Component({\n\tselector: 'ngtr-debug',\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-line-segments #lineSegments [frustumCulled]=\"false\">\n\t\t\t\t<ngt-line-basic-material color=\"white\" vertexColors />\n\t\t\t\t<ngt-buffer-geometry />\n\t\t\t</ngt-line-segments>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtrDebug {\n\tprivate physics = inject(NgtrPhysics);\n\tprivate lineSegmentsRef = viewChild.required<ElementRef<THREE.LineSegments>>('lineSegments');\n\n\tconstructor() {\n\t\textend({ Group, LineSegments, LineBasicMaterial });\n\n\t\tbeforeRender(() => {\n\t\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst lineSegments = this.lineSegmentsRef().nativeElement;\n\t\t\tif (!lineSegments) return;\n\n\t\t\tconst buffers = worldSingleton.proxy.debugRender();\n\t\t\tconst geometry = new THREE.BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(buffers.vertices, 3));\n\t\t\tgeometry.setAttribute('color', new THREE.BufferAttribute(buffers.colors, 4));\n\n\t\t\tlineSegments.geometry.dispose();\n\t\t\tlineSegments.geometry = geometry;\n\t\t});\n\t}\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { NgtrPhysicsOptions } from './types';\n\n/**\n * Internal directive that manages the physics simulation loop.\n * Handles both \"follow\" mode (tied to render loop) and \"independent\" mode (separate loop).\n *\n * This directive is used internally by NgtrPhysics and should not be used directly.\n */\n@Directive({ selector: 'ngtr-frame-stepper' })\nexport class NgtrFrameStepper {\n\tready = input(false);\n\tupdatePriority = input<number | undefined>(0);\n\tstepFn = input.required<(delta: number) => void>();\n\ttype = input.required<NgtrPhysicsOptions['updateLoop']>();\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect((onCleanup) => {\n\t\t\tconst ready = this.ready();\n\t\t\tif (!ready) return;\n\n\t\t\tconst [type, stepFn] = [this.type(), this.stepFn()];\n\n\t\t\tif (type === 'follow') {\n\t\t\t\tconst updatePriority = this.updatePriority();\n\t\t\t\tconst cleanup = store.snapshot.internal.subscribe(\n\t\t\t\t\t({ delta }) => {\n\t\t\t\t\t\tstepFn(delta);\n\t\t\t\t\t},\n\t\t\t\t\tupdatePriority,\n\t\t\t\t\tstore,\n\t\t\t\t);\n\t\t\t\tonCleanup(() => cleanup());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastFrame = 0;\n\t\t\tlet raf: ReturnType<typeof requestAnimationFrame> = 0;\n\t\t\tconst loop = () => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tconst delta = now - lastFrame;\n\t\t\t\traf = requestAnimationFrame(loop);\n\t\t\t\tstepFn(delta);\n\t\t\t\tlastFrame = now;\n\t\t\t};\n\n\t\t\traf = requestAnimationFrame(loop);\n\t\t\tonCleanup(() => cancelAnimationFrame(raf));\n\t\t});\n\t}\n}\n","import * as THREE from 'three';\n\n/**\n * Shared reusable Three.js objects for internal calculations.\n * These are used to avoid creating new objects on every frame,\n * which would cause garbage collection pressure.\n *\n * @internal\n */\n\n/** Shared quaternion for internal calculations */\nexport const _quaternion = new THREE.Quaternion();\n/** Shared euler angles for internal calculations */\nexport const _euler = new THREE.Euler();\n/** Shared vector3 for internal calculations */\nexport const _vector3 = new THREE.Vector3();\n/** Shared Object3D for internal calculations */\nexport const _object3d = new THREE.Object3D();\n/** Shared matrix4 for internal calculations */\nexport const _matrix4 = new THREE.Matrix4();\n/** Shared position vector for internal calculations */\nexport const _position = new THREE.Vector3();\n/** Shared rotation quaternion for internal calculations */\nexport const _rotation = new THREE.Quaternion();\n/** Shared scale vector for internal calculations */\nexport const _scale = new THREE.Vector3();\n","import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';\nimport { is, NgtEuler, NgtQuaternion, NgtVector3 } from 'angular-three';\nimport * as THREE from 'three';\nimport { mergeVertices } from 'three-stdlib';\nimport { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';\nimport { NgtrColliderOptions, NgtrColliderShape, NgtrRigidBodyAutoCollider, NgtrRigidBodyOptions } from './types';\n\n/**\n * Creates a proxy that will create a singleton instance of the given class\n * when a property is accessed, and not before. This is useful for lazy initialization\n * of expensive objects like physics worlds.\n *\n * @template SingletonClass - The type of the singleton instance\n * @template CreationFn - The type of the factory function\n * @param createInstance - A function that returns a new instance of the class\n * @returns An object containing the proxy, reset function, and set function\n *\n * @example\n * ```typescript\n * const { proxy, reset } = createSingletonProxy(() => new World(gravity));\n * // Access the world lazily\n * proxy.step();\n * // Reset when done\n * reset();\n * ```\n */\nexport const createSingletonProxy = <\n\tSingletonClass extends object,\n\tCreationFn extends () => SingletonClass = () => SingletonClass,\n>(\n\t/**\n\t * A function that returns a new instance of the class\n\t */\n\tcreateInstance: CreationFn,\n): {\n\t/** The lazy proxy to the singleton instance */\n\tproxy: SingletonClass;\n\t/** Resets the singleton, allowing a new instance to be created */\n\treset: () => void;\n\t/** Sets the singleton to a specific instance */\n\tset: (newInstance: SingletonClass) => void;\n} => {\n\tlet instance: SingletonClass | undefined;\n\n\tconst handler: ProxyHandler<SingletonClass> = {\n\t\tget(target, prop) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.get(instance!, prop);\n\t\t},\n\t\tset(target, prop, value) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.set(instance!, prop, value);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy({} as SingletonClass, handler) as SingletonClass;\n\n\tconst reset = () => {\n\t\tinstance = undefined;\n\t};\n\n\tconst set = (newInstance: SingletonClass) => {\n\t\tinstance = newInstance;\n\t};\n\n\t/**\n\t * Return the proxy and a reset function\n\t */\n\treturn { proxy, reset, set };\n};\n\n/**\n * Converts a Rapier quaternion to a Three.js quaternion.\n *\n * @param quaternion - The Rapier quaternion to convert\n * @returns A Three.js Quaternion with the same values\n */\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\n/**\n * Converts an Angular Three vector representation to a Rapier Vector3.\n * Supports arrays, numbers (uniform scale), and objects with x, y, z properties.\n *\n * @param v - The vector to convert (can be [x, y, z], a number, or {x, y, z})\n * @returns A Rapier Vector3 instance\n *\n * @example\n * ```typescript\n * vector3ToRapierVector([1, 2, 3]); // RapierVector3(1, 2, 3)\n * vector3ToRapierVector(5); // RapierVector3(5, 5, 5)\n * vector3ToRapierVector({ x: 1, y: 2, z: 3 }); // RapierVector3(1, 2, 3)\n * ```\n */\nexport function vector3ToRapierVector(v: NgtVector3) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierVector3(v[0], v[1], v[2]);\n\t}\n\n\tif (typeof v === 'number') {\n\t\treturn new RapierVector3(v, v, v);\n\t}\n\n\treturn new RapierVector3(v.x, v.y, v.z);\n}\n\n/**\n * Converts an Angular Three quaternion representation to a Rapier Quaternion.\n * Supports arrays and objects with x, y, z, w properties.\n *\n * @param v - The quaternion to convert (can be [x, y, z, w] or {x, y, z, w})\n * @returns A Rapier Quaternion instance\n *\n * @example\n * ```typescript\n * quaternionToRapierQuaternion([0, 0, 0, 1]); // Identity quaternion\n * quaternionToRapierQuaternion({ x: 0, y: 0, z: 0, w: 1 }); // Identity quaternion\n * ```\n */\nexport function quaternionToRapierQuaternion(v: NgtQuaternion) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierQuaternion(v[0], v[1], v[2], v[3]);\n\t}\n\n\treturn new RapierQuaternion(v.x, v.y, v.z, v.w);\n}\n\nfunction isChildOfMeshCollider(child: THREE.Mesh) {\n\tlet flag = false;\n\tchild.traverseAncestors((a) => {\n\t\tif (a.userData['ngtRapierType'] === 'MeshCollider') flag = true;\n\t});\n\treturn flag;\n}\n\nconst autoColliderMap = {\n\tcuboid: 'cuboid',\n\tball: 'ball',\n\thull: 'convexHull',\n\ttrimesh: 'trimesh',\n};\n\nfunction getColliderArgsFromGeometry(\n\tgeometry: THREE.BufferGeometry,\n\tcolliders: NgtrRigidBodyAutoCollider,\n): { args: unknown[]; offset: THREE.Vector3 } {\n\tswitch (colliders) {\n\t\tcase 'cuboid': {\n\t\t\tgeometry.computeBoundingBox();\n\t\t\tconst { boundingBox } = geometry;\n\t\t\tconst size = boundingBox!.getSize(new THREE.Vector3());\n\t\t\treturn {\n\t\t\t\targs: [size.x / 2, size.y / 2, size.z / 2],\n\t\t\t\toffset: boundingBox!.getCenter(new THREE.Vector3()),\n\t\t\t};\n\t\t}\n\n\t\tcase 'ball': {\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\tconst { boundingSphere } = geometry;\n\n\t\t\tconst radius = boundingSphere!.radius;\n\n\t\t\treturn {\n\t\t\t\targs: [radius],\n\t\t\t\toffset: boundingSphere!.center,\n\t\t\t};\n\t\t}\n\n\t\tcase 'trimesh': {\n\t\t\tconst clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);\n\n\t\t\treturn {\n\t\t\t\targs: [\n\t\t\t\t\tclonedGeometry.attributes['position'].array as Float32Array,\n\t\t\t\t\tclonedGeometry.index?.array as Uint32Array,\n\t\t\t\t],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\n\t\tcase 'hull': {\n\t\t\tconst clonedGeometry = geometry.clone();\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn { args: [], offset: new THREE.Vector3() };\n}\n\n/**\n * Creates collider options by traversing child meshes of an object and generating\n * appropriate collider configurations based on their geometries.\n *\n * @param object - The parent Object3D to traverse for meshes\n * @param options - The rigid body options containing collider type and other settings\n * @param ignoreMeshColliders - Whether to skip meshes that are children of mesh colliders\n * @returns Array of collider configurations with shape, args, position, rotation, and scale\n *\n * @example\n * ```typescript\n * const colliderOptions = createColliderOptions(rigidBodyObject, { colliders: 'cuboid' });\n * // Returns array of collider configs for each mesh child\n * ```\n */\nexport function createColliderOptions(\n\tobject: THREE.Object3D,\n\toptions: NgtrRigidBodyOptions,\n\tignoreMeshColliders = true,\n) {\n\tconst childColliderOptions: {\n\t\tcolliderOptions: NgtrColliderOptions;\n\t\targs: unknown[];\n\t\tshape: NgtrColliderShape;\n\t\trotation: NgtEuler;\n\t\tposition: NgtVector3;\n\t\tscale: NgtVector3;\n\t}[] = [];\n\tobject.updateWorldMatrix(true, false);\n\tconst invertedParentMatrixWorld = object.matrixWorld.clone().invert();\n\n\tconst colliderFromChild = (child: THREE.Object3D) => {\n\t\tif (is.three<THREE.Mesh>(child, 'isMesh')) {\n\t\t\tif (ignoreMeshColliders && isChildOfMeshCollider(child)) return;\n\n\t\t\tconst worldScale = child.getWorldScale(_scale);\n\t\t\tconst shape = autoColliderMap[options.colliders || 'cuboid'] as NgtrColliderShape;\n\t\t\tchild.updateWorldMatrix(true, false);\n\t\t\t_matrix4\n\t\t\t\t.copy(child.matrixWorld)\n\t\t\t\t.premultiply(invertedParentMatrixWorld)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tconst rotationEuler = new THREE.Euler().setFromQuaternion(_rotation, 'XYZ');\n\n\t\t\tconst { args, offset } = getColliderArgsFromGeometry(child.geometry, options.colliders || 'cuboid');\n\t\t\tconst { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } =\n\t\t\t\toptions;\n\n\t\t\tchildColliderOptions.push({\n\t\t\t\tcolliderOptions: rest,\n\t\t\t\targs,\n\t\t\t\tshape,\n\t\t\t\trotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],\n\t\t\t\tposition: [\n\t\t\t\t\t_position.x + offset.x * worldScale.x,\n\t\t\t\t\t_position.y + offset.y * worldScale.y,\n\t\t\t\t\t_position.z + offset.z * worldScale.z,\n\t\t\t\t],\n\t\t\t\tscale: [worldScale.x, worldScale.y, worldScale.z],\n\t\t\t});\n\t\t}\n\t};\n\n\tif (options.includeInvisible) {\n\t\tobject.traverse(colliderFromChild);\n\t} else {\n\t\tobject.traverseVisible(colliderFromChild);\n\t}\n\n\treturn childColliderOptions;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport RAPIER, { ColliderHandle, EventQueue, PhysicsHooks, Rotation, Vector, World } from '@dimforge/rapier3d-compat';\nimport { injectStore, pick, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { NgtrDebug } from './debug';\nimport { NgtrFrameStepper } from './frame-stepper';\nimport { _matrix4, _position, _rotation, _scale } from './shared';\nimport {\n\tNgtrColliderStateMap,\n\tNgtrCollisionPayload,\n\tNgtrCollisionSource,\n\tNgtrEventMap,\n\tNgtrFilterContactPairCallback,\n\tNgtrFilterIntersectionPairCallback,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallback,\n} from './types';\nimport { createSingletonProxy, rapierQuaternionToQuaternion } from './utils';\n\nconst defaultOptions: NgtrPhysicsOptions = {\n\tgravity: [0, -9.81, 0],\n\tallowedLinearError: 0.001,\n\tnumSolverIterations: 4,\n\tnumInternalPgsIterations: 1,\n\tpredictionDistance: 0.002,\n\tminIslandSize: 128,\n\tmaxCcdSubsteps: 1,\n\tcontactNaturalFrequency: 30,\n\tlengthUnit: 1,\n\tcolliders: 'cuboid',\n\tupdateLoop: 'follow',\n\tinterpolate: true,\n\tpaused: false,\n\ttimeStep: 1 / 60,\n\tdebug: false,\n};\n\n/**\n * Directive for providing a fallback template when Rapier fails to load.\n *\n * @example\n * ```html\n * <ngtr-physics>\n * <ng-template>\n * <!-- Physics scene content -->\n * </ng-template>\n * <ng-template rapierFallback let-error=\"error\">\n * <p>Failed to load physics: {{ error }}</p>\n * </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Directive({ selector: 'ng-template[rapierFallback]' })\nexport class NgtrPhysicsFallback {\n\t/** Type guard for template context */\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n/**\n * Main physics component that creates and manages a Rapier physics world.\n * Wrap your 3D scene content in this component to enable physics simulation.\n *\n * The component lazily loads the Rapier WASM module and provides the physics\n * context to all child components.\n *\n * @example\n * ```html\n * <ngtr-physics [options]=\"{ gravity: [0, -9.81, 0], debug: true }\">\n * <ng-template>\n * <ngt-object3D rigidBody>\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngt-object3D>\n * </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Component({\n\tselector: 'ngtr-physics',\n\ttemplate: `\n\t\t@let _rapierError = rapierError();\n\t\t@let _fallbackContent = fallbackContent();\n\n\t\t@if (rapierConstruct()) {\n\t\t\t@if (debug()) {\n\t\t\t\t<ngtr-debug />\n\t\t\t}\n\n\t\t\t<ngtr-frame-stepper\n\t\t\t\t[ready]=\"ready()\"\n\t\t\t\t[stepFn]=\"step.bind(this)\"\n\t\t\t\t[type]=\"updateLoop()\"\n\t\t\t\t[updatePriority]=\"updatePriority()\"\n\t\t\t/>\n\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t} @else if (_rapierError && _fallbackContent) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"_fallbackContent\" [ngTemplateOutletContext]=\"{ error: _rapierError }\" />\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],\n})\nexport class NgtrPhysics {\n\t/** Physics configuration options */\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprotected content = contentChild.required(TemplateRef);\n\tprotected fallbackContent = contentChild(NgtrPhysicsFallback, { read: TemplateRef });\n\n\tprotected updatePriority = pick(this.options, 'updatePriority');\n\tprotected updateLoop = pick(this.options, 'updateLoop');\n\n\tprivate numSolverIterations = pick(this.options, 'numSolverIterations');\n\tprivate numInternalPgsIterations = pick(this.options, 'numInternalPgsIterations');\n\tprivate allowedLinearError = pick(this.options, 'allowedLinearError');\n\tprivate minIslandSize = pick(this.options, 'minIslandSize');\n\tprivate maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');\n\tprivate predictionDistance = pick(this.options, 'predictionDistance');\n\tprivate contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');\n\tprivate lengthUnit = pick(this.options, 'lengthUnit');\n\tprivate timeStep = pick(this.options, 'timeStep');\n\tprivate interpolate = pick(this.options, 'interpolate');\n\n\t/** Whether the physics simulation is paused */\n\tpaused = pick(this.options, 'paused');\n\tprotected debug = pick(this.options, 'debug');\n\t/** The default collider type for automatic collider generation */\n\tcolliders = pick(this.options, 'colliders');\n\n\tprivate vGravity = vector3(this.options, 'gravity');\n\n\tprivate store = injectStore();\n\n\tprotected rapierConstruct = signal<typeof RAPIER | null>(null);\n\tprotected rapierError = signal<string | null>(null);\n\t/** The loaded Rapier module, null if not yet loaded */\n\trapier = this.rapierConstruct.asReadonly();\n\n\tprotected ready = computed(() => !!this.rapier());\n\t/** Singleton proxy to the Rapier physics world */\n\tworldSingleton = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn createSingletonProxy<World>(() => new rapier.World(untracked(this.vGravity)));\n\t});\n\n\t/** Map of rigid body states indexed by handle */\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\t/** Map of collider states indexed by handle */\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\t/** Map of rigid body event handlers indexed by handle */\n\trigidBodyEvents: NgtrEventMap = new Map();\n\t/** Map of collider event handlers indexed by handle */\n\tcolliderEvents: NgtrEventMap = new Map();\n\t/** Callbacks to run before each physics step */\n\tbeforeStepCallbacks = new Set<NgtrWorldStepCallback>();\n\t/** Callbacks to run after each physics step */\n\tafterStepCallbacks = new Set<NgtrWorldStepCallback>();\n\t/** Callbacks to filter contact pairs */\n\tfilterContactPairCallbacks = new Set<NgtrFilterContactPairCallback>();\n\t/** Callbacks to filter intersection pairs */\n\tfilterIntersectionPairCallbacks = new Set<NgtrFilterIntersectionPairCallback>();\n\n\tprivate hooks: PhysicsHooks = {\n\t\tfilterContactPair: (...args) => {\n\t\t\tfor (const callback of this.filterContactPairCallbacks) {\n\t\t\t\tconst result = callback(...args);\n\t\t\t\tif (result !== null) return result;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tfilterIntersectionPair: (...args) => {\n\t\t\tfor (const callback of this.filterIntersectionPairCallbacks) {\n\t\t\t\tconst result = callback(...args);\n\t\t\t\tif (result === false) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tprivate eventQueue = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn new EventQueue(false);\n\t});\n\n\tprivate steppingState: {\n\t\taccumulator: number;\n\t\tpreviousState: Record<number, { position: Vector; rotation: Rotation }>;\n\t} = { accumulator: 0, previousState: {} };\n\n\tconstructor() {\n\t\timport('@dimforge/rapier3d-compat')\n\t\t\t.then((rapier) => rapier.init().then(() => rapier))\n\t\t\t.then(this.rapierConstruct.set.bind(this.rapierConstruct))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(`[NGT] Failed to load rapier3d-compat`, err);\n\t\t\t\tthis.rapierError.set(err?.message ?? err.toString());\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateWorldEffect();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst world = this.worldSingleton();\n\t\t\tif (world) {\n\t\t\t\tworld.proxy.free();\n\t\t\t\tworld.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Steps the physics simulation forward by the given delta time.\n\t * This is called automatically by the frame stepper, but can be called manually\n\t * if you need custom control over the simulation timing.\n\t *\n\t * @param delta - Time in seconds since the last step\n\t */\n\tstep(delta: number) {\n\t\tif (!this.paused()) {\n\t\t\tthis.internalStep(delta);\n\t\t}\n\t}\n\n\tprivate updateWorldEffect() {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tworld.proxy.gravity = this.vGravity();\n\t\tworld.proxy.integrationParameters.numSolverIterations = this.numSolverIterations();\n\t\tworld.proxy.integrationParameters.numInternalPgsIterations = this.numInternalPgsIterations();\n\t\tworld.proxy.integrationParameters.normalizedAllowedLinearError = this.allowedLinearError();\n\t\tworld.proxy.integrationParameters.minIslandSize = this.minIslandSize();\n\t\tworld.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();\n\t\tworld.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();\n\t\tworld.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();\n\t\tworld.proxy.lengthUnit = this.lengthUnit();\n\t}\n\n\tprivate internalStep(delta: number) {\n\t\tconst worldSingleton = this.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst eventQueue = this.eventQueue();\n\t\tif (!eventQueue) return;\n\n\t\tconst world = worldSingleton.proxy;\n\t\tconst [timeStep, interpolate, paused] = [this.timeStep(), this.interpolate(), this.paused()];\n\n\t\t/* Check if the timestep is supposed to be variable. We'll do this here\n once so we don't have to string-check every frame. */\n\t\tconst timeStepVariable = timeStep === 'vary';\n\n\t\t/**\n\t\t * Fixed timeStep simulation progression.\n\t\t * @see https://gafferongames.com/post/fix_your_timestep/\n\t\t */\n\t\tconst clampedDelta = THREE.MathUtils.clamp(delta, 0, 0.5);\n\n\t\tconst stepWorld = (innerDelta: number) => {\n\t\t\t// Trigger beforeStep callbacks\n\t\t\tthis.beforeStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\n\t\t\tworld.timestep = innerDelta;\n\t\t\tconst hasHooks = this.filterContactPairCallbacks.size > 0 || this.filterIntersectionPairCallbacks.size > 0;\n\t\t\tworld.step(eventQueue, hasHooks ? this.hooks : undefined);\n\n\t\t\t// Trigger afterStep callbacks\n\t\t\tthis.afterStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\t\t};\n\n\t\tif (timeStepVariable) {\n\t\t\tstepWorld(clampedDelta);\n\t\t} else {\n\t\t\t// don't step time forwards if paused\n\t\t\t// Increase accumulator\n\t\t\tthis.steppingState.accumulator += clampedDelta;\n\n\t\t\twhile (this.steppingState.accumulator >= timeStep) {\n\t\t\t\t// Set up previous state\n\t\t\t\t// needed for accurate interpolations if the world steps more than once\n\t\t\t\tif (interpolate) {\n\t\t\t\t\tthis.steppingState.previousState = {};\n\t\t\t\t\tworld.forEachRigidBody((body) => {\n\t\t\t\t\t\tthis.steppingState.previousState[body.handle] = {\n\t\t\t\t\t\t\tposition: body.translation(),\n\t\t\t\t\t\t\trotation: body.rotation(),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstepWorld(timeStep);\n\t\t\t\tthis.steppingState.accumulator -= timeStep;\n\t\t\t}\n\t\t}\n\n\t\tconst interpolationAlpha =\n\t\t\ttimeStepVariable || !interpolate || paused ? 1 : this.steppingState.accumulator / timeStep;\n\n\t\t// Update meshes\n\t\tthis.rigidBodyStates.forEach((state, handle) => {\n\t\t\tconst rigidBody = world.getRigidBody(handle);\n\n\t\t\tconst events = this.rigidBodyEvents.get(handle);\n\t\t\tif (events?.onSleep || events?.onWake) {\n\t\t\t\tif (rigidBody.isSleeping() && !state.isSleeping) events?.onSleep?.();\n\t\t\t\tif (!rigidBody.isSleeping() && state.isSleeping) events?.onWake?.();\n\t\t\t\tstate.isSleeping = rigidBody.isSleeping();\n\t\t\t}\n\n\t\t\tif (!rigidBody || (rigidBody.isSleeping() && !('isInstancedMesh' in state.object)) || !state.setMatrix) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New states\n\t\t\tlet t = rigidBody.translation() as THREE.Vector3;\n\t\t\tlet r = rigidBody.rotation() as THREE.Quaternion;\n\n\t\t\tlet previousState = this.steppingState.previousState[handle];\n\n\t\t\tif (previousState) {\n\t\t\t\t// Get previous simulated world position\n\t\t\t\t_matrix4\n\t\t\t\t\t.compose(\n\t\t\t\t\t\tpreviousState.position as THREE.Vector3,\n\t\t\t\t\t\trapierQuaternionToQuaternion(previousState.rotation),\n\t\t\t\t\t\tstate.scale,\n\t\t\t\t\t)\n\t\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\t\t// Apply previous tick position\n\t\t\t\tif (state.meshType == 'mesh') {\n\t\t\t\t\tstate.object.position.copy(_position);\n\t\t\t\t\tstate.object.quaternion.copy(_rotation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get new position\n\t\t\t_matrix4\n\t\t\t\t.compose(t, rapierQuaternionToQuaternion(r), state.scale)\n\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tif (state.meshType == 'instancedMesh') {\n\t\t\t\tstate.setMatrix(_matrix4);\n\t\t\t} else {\n\t\t\t\t// Interpolate to new position\n\t\t\t\tstate.object.position.lerp(_position, interpolationAlpha);\n\t\t\t\tstate.object.quaternion.slerp(_rotation, interpolationAlpha);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainCollisionEvents((handle1, handle2, started) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(handle1);\n\t\t\tconst source2 = this.getSourceFromColliderHandle(handle2);\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tif (started) {\n\t\t\t\tworld.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {\n\t\t\t\t\t/* RigidBody events */\n\t\t\t\t\tsource1.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\n\t\t\t\t\t/* Collider events */\n\t\t\t\t\tsource1.collider.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.collider.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t}\n\n\t\t\t// Sensor Intersections\n\t\t\tif (started) {\n\t\t\t\tif (world.intersectionPair(source1.collider.object, source2.collider.object)) {\n\t\t\t\t\tsource1.rigidBody.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.rigidBody.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t\tsource1.collider.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.collider.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainContactForceEvents((event) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(event.collider1());\n\t\t\tconst source2 = this.getSourceFromColliderHandle(event.collider2());\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tsource1.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource1.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\t\t});\n\n\t\tworld.forEachActiveRigidBody(() => {\n\t\t\tthis.store.snapshot.invalidate();\n\t\t});\n\t}\n\n\tprivate getSourceFromColliderHandle(handle: ColliderHandle) {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tconst collider = world.proxy.getCollider(handle);\n\t\tconst colEvents = this.colliderEvents.get(handle);\n\t\tconst colliderState = this.colliderStates.get(handle);\n\n\t\tconst rigidBodyHandle = collider.parent()?.handle;\n\t\tconst rigidBody = rigidBodyHandle !== undefined ? world.proxy.getRigidBody(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyEvents =\n\t\t\trigidBody && rigidBodyHandle !== undefined ? this.rigidBodyEvents.get(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyState = rigidBodyHandle !== undefined ? this.rigidBodyStates.get(rigidBodyHandle) : undefined;\n\n\t\treturn {\n\t\t\tcollider: { object: collider, events: colEvents, state: colliderState },\n\t\t\trigidBody: { object: rigidBody, events: rigidBodyEvents, state: rigidBodyState },\n\t\t} as NgtrCollisionSource;\n\t}\n\n\tprivate getCollisionPayloadFromSource(\n\t\ttarget: NgtrCollisionSource,\n\t\tother: NgtrCollisionSource,\n\t): NgtrCollisionPayload {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\trigidBody: target.rigidBody.object,\n\t\t\t\tcollider: target.collider.object,\n\t\t\t\tcolliderObject: target.collider.state?.object,\n\t\t\t\trigidBodyObject: target.rigidBody.state?.object,\n\t\t\t},\n\t\t\tother: {\n\t\t\t\trigidBody: other.rigidBody.object,\n\t\t\t\tcollider: other.collider.object,\n\t\t\t\tcolliderObject: other.collider.state?.object,\n\t\t\t\trigidBodyObject: other.rigidBody.state?.object,\n\t\t\t},\n\t\t};\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tuntracked,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tActiveEvents,\n\tCollider,\n\tColliderDesc,\n\tInteractionGroups,\n\tRigidBody,\n\tRigidBodyDesc,\n} from '@dimforge/rapier3d-compat';\nimport {\n\tapplyProps,\n\textend,\n\tgetEmitter,\n\tgetInstanceState,\n\thasListener,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { COLLISION_GROUPS_HANDLER } from './interaction-groups';\nimport { NgtrPhysics } from './physics';\nimport { _matrix4, _position, _rotation, _scale, _vector3 } from './shared';\nimport type {\n\tNgtrColliderOptions,\n\tNgtrColliderShape,\n\tNgtrColliderState,\n\tNgtrCollisionEnterPayload,\n\tNgtrCollisionExitPayload,\n\tNgtrContactForcePayload,\n\tNgtrIntersectionEnterPayload,\n\tNgtrIntersectionExitPayload,\n\tNgtrRigidBodyOptions,\n\tNgtrRigidBodyState,\n\tNgtrRigidBodyType,\n} from './types';\nimport { createColliderOptions } from './utils';\n\nconst colliderDefaultOptions: NgtrColliderOptions = {\n\tcontactSkin: 0,\n};\n\n/**\n * Base directive for creating colliders in the physics simulation.\n * This directive can be used to create any type of collider by specifying the shape.\n *\n * For convenience, use the specific collider directives like `NgtrCuboidCollider`,\n * `NgtrBallCollider`, etc., which provide type-safe arguments.\n *\n * @example\n * ```html\n * <ngt-object3D [collider]=\"'cuboid'\" [args]=\"[1, 1, 1]\" [position]=\"[0, 5, 0]\" />\n * ```\n */\n@Directive({ selector: 'ngt-object3D[collider]' })\nexport class NgtrAnyCollider {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tname = input<NgtThreeElements['ngt-object3D']['name']>();\n\toptions = input(colliderDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData, name] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t\tthis.name(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData, name: name || `${untracked(this.shape)}-${Date.now()}` };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\t// TODO: change this to input required when Angular allows setting hostDirective input\n\tshape = model<NgtrColliderShape | undefined>(undefined, { alias: 'collider' });\n\t// NOTE: this will be typed by individual collider\n\targs = model<unknown[]>([]);\n\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate sensor = pick(this.options, 'sensor');\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tprivate solverGroups = pick(this.options, 'solverGroups');\n\tprivate friction = pick(this.options, 'friction');\n\tprivate frictionCombineRule = pick(this.options, 'frictionCombineRule');\n\tprivate restitution = pick(this.options, 'restitution');\n\tprivate restitutionCombineRule = pick(this.options, 'restitutionCombineRule');\n\tprivate activeCollisionTypes = pick(this.options, 'activeCollisionTypes');\n\tprivate contactSkin = pick(this.options, 'contactSkin');\n\tprivate mass = pick(this.options, 'mass');\n\tprivate massProperties = pick(this.options, 'massProperties');\n\tprivate density = pick(this.options, 'density');\n\n\tprivate rigidBody = inject(NgtrRigidBody, { optional: true });\n\tprivate physics = inject(NgtrPhysics);\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate scaledArgs = computed(() => {\n\t\tconst [shape, args] = [\n\t\t\tthis.shape(),\n\t\t\tthis.args() as (number | ArrayLike<number> | { x: number; y: number; z: number })[],\n\t\t];\n\n\t\tconst cloned = args.slice();\n\n\t\tif (cloned.length === 0) return [];\n\n\t\t// Heightfield uses a vector\n\t\tif (shape === 'heightfield') {\n\t\t\tconst s = cloned[3] as { x: number; y: number; z: number };\n\t\t\ts.x *= this.worldScale.x;\n\t\t\ts.y *= this.worldScale.y;\n\t\t\ts.z *= this.worldScale.z;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// Trimesh and convex scale the vertices\n\t\tif (shape === 'trimesh' || shape === 'convexHull') {\n\t\t\tcloned[0] = this.scaleVertices(cloned[0] as ArrayLike<number>, this.worldScale);\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// prefill with some extra\n\t\tconst scaleArray = [\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.y,\n\t\t\tthis.worldScale.z,\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.x,\n\t\t];\n\t\treturn cloned.map((arg, index) => scaleArray[index] * (arg as number));\n\t});\n\n\tcollider = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\n\t\tconst args = this.scaledArgs();\n\t\tif (!args.length) return null;\n\n\t\tconst [shape, rigidBody] = [this.shape(), this.rigidBody?.rigidBody()];\n\n\t\t// @ts-expect-error - we know the type of the data\n\t\tconst desc = ColliderDesc[shape](...args);\n\t\tif (!desc) return null;\n\n\t\treturn worldSingleton.proxy.createCollider(desc, rigidBody ?? undefined);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateColliderEffect();\n\t\t\tthis.updateMassPropertiesEffect();\n\t\t});\n\t}\n\n\tget worldScale() {\n\t\treturn this.objectRef.nativeElement.getWorldScale(new THREE.Vector3());\n\t}\n\n\tsetShape(shape: NgtrColliderShape) {\n\t\tthis.shape.set(shape);\n\t}\n\n\tsetArgs(args: unknown[]) {\n\t\tthis.args.set(args);\n\t}\n\n\tprivate createColliderStateEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createColliderState(\n\t\t\tcollider,\n\t\t\tthis.objectRef.nativeElement,\n\t\t\tthis.rigidBody?.objectRef.nativeElement,\n\t\t);\n\t\tthis.physics.colliderStates.set(collider.handle, state);\n\n\t\treturn () => {\n\t\t\tthis.physics.colliderStates.delete(collider.handle);\n\t\t\tif (worldSingleton.proxy.getCollider(collider.handle)) {\n\t\t\t\tworldSingleton.proxy.removeCollider(collider, true);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createColliderEventsEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tconst hasCollisionEvent = hasListener(\n\t\t\tthis.collisionEnter,\n\t\t\tthis.collisionExit,\n\t\t\tthis.intersectionEnter,\n\t\t\tthis.intersectionExit,\n\t\t\tthis.rigidBody?.collisionEnter,\n\t\t\tthis.rigidBody?.collisionExit,\n\t\t\tthis.rigidBody?.intersectionEnter,\n\t\t\tthis.rigidBody?.intersectionExit,\n\t\t);\n\t\tconst hasContactForceEvent = hasListener(this.contactForce, this.rigidBody?.contactForce);\n\n\t\tif (hasCollisionEvent && hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS | ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t} else if (hasCollisionEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS);\n\t\t} else if (hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t}\n\n\t\tthis.physics.colliderEvents.set(collider.handle, {\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\t\treturn () => {\n\t\t\tthis.physics.colliderEvents.delete(collider.handle);\n\t\t};\n\t}\n\n\tprivate updateColliderEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst state = this.physics.colliderStates.get(collider.handle);\n\t\tif (!state) return;\n\n\t\t// Update collider position based on the object's position\n\t\tconst parentWorldScale = state.object.parent!.getWorldScale(_vector3);\n\t\tconst parentInvertedWorldMatrix = state.worldParent?.matrixWorld.clone().invert();\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\n\t\t_matrix4.copy(state.object.matrixWorld);\n\n\t\tif (parentInvertedWorldMatrix) {\n\t\t\t_matrix4.premultiply(parentInvertedWorldMatrix);\n\t\t}\n\n\t\t_matrix4.decompose(_position, _rotation, _scale);\n\n\t\tif (collider.parent()) {\n\t\t\tcollider.setTranslationWrtParent({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotationWrtParent(_rotation);\n\t\t} else {\n\t\t\tcollider.setTranslation({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotation(_rotation);\n\t\t}\n\n\t\tconst [\n\t\t\tsensor,\n\t\t\tcollisionGroups,\n\t\t\tsolverGroups,\n\t\t\tfriction,\n\t\t\tfrictionCombineRule,\n\t\t\trestitution,\n\t\t\trestitutionCombineRule,\n\t\t\tactiveCollisionTypes,\n\t\t\tcontactSkin,\n\t\t] = [\n\t\t\tthis.sensor(),\n\t\t\tthis.collisionGroups(),\n\t\t\tthis.solverGroups(),\n\t\t\tthis.friction(),\n\t\t\tthis.frictionCombineRule(),\n\t\t\tthis.restitution(),\n\t\t\tthis.restitutionCombineRule(),\n\t\t\tthis.activeCollisionTypes(),\n\t\t\tthis.contactSkin(),\n\t\t];\n\n\t\tif (sensor !== undefined) collider.setSensor(sensor);\n\t\tif (collisionGroups !== undefined) collider.setCollisionGroups(collisionGroups);\n\t\tif (solverGroups !== undefined) collider.setSolverGroups(solverGroups);\n\t\tif (friction !== undefined) collider.setFriction(friction);\n\t\tif (frictionCombineRule !== undefined) collider.setFrictionCombineRule(frictionCombineRule);\n\t\tif (restitution !== undefined) collider.setRestitution(restitution);\n\t\tif (restitutionCombineRule !== undefined) collider.setRestitutionCombineRule(restitutionCombineRule);\n\t\tif (activeCollisionTypes !== undefined) collider.setActiveCollisionTypes(activeCollisionTypes);\n\t\tif (contactSkin !== undefined) collider.setContactSkin(contactSkin);\n\t}\n\n\tprivate updateMassPropertiesEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst [mass, massProperties, density] = [this.mass(), this.massProperties(), this.density()];\n\n\t\tif (density !== undefined) {\n\t\t\tif (mass !== undefined || massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set mass and massProperties along with density');\n\t\t\t}\n\n\t\t\tcollider.setDensity(density);\n\t\t\treturn;\n\t\t}\n\n\t\tif (mass !== undefined) {\n\t\t\tif (massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set massProperties along with mass');\n\t\t\t}\n\t\t\tcollider.setMass(mass);\n\t\t\treturn;\n\t\t}\n\n\t\tif (massProperties !== undefined) {\n\t\t\tcollider.setMassProperties(\n\t\t\t\tmassProperties.mass,\n\t\t\t\tmassProperties.centerOfMass,\n\t\t\t\tmassProperties.principalAngularInertia,\n\t\t\t\tmassProperties.angularInertiaLocalFrame,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate createColliderState(\n\t\tcollider: Collider,\n\t\tobject: THREE.Object3D,\n\t\trigidBodyObject?: THREE.Object3D | null,\n\t): NgtrColliderState {\n\t\treturn { collider, worldParent: rigidBodyObject || undefined, object };\n\t}\n\n\tprivate scaleVertices(vertices: ArrayLike<number>, scale: THREE.Vector3) {\n\t\tconst scaledVerts = Array.from(vertices);\n\n\t\tfor (let i = 0; i < vertices.length / 3; i++) {\n\t\t\tscaledVerts[i * 3] *= scale.x;\n\t\t\tscaledVerts[i * 3 + 1] *= scale.y;\n\t\t\tscaledVerts[i * 3 + 2] *= scale.z;\n\t\t}\n\n\t\treturn scaledVerts;\n\t}\n}\n\n/** Maps rigid body type strings to Rapier body type enum values */\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\n/**\n * Default options for rigid bodies.\n * These values are used when specific options are not provided.\n */\nexport const rigidBodyDefaultOptions: NgtrRigidBodyOptions = {\n\tcanSleep: true,\n\tlinearVelocity: [0, 0, 0],\n\tangularVelocity: [0, 0, 0],\n\tgravityScale: 1,\n\tdominanceGroup: 0,\n\tccd: false,\n\tsoftCcdPrediction: 0,\n\tcontactSkin: 0,\n};\n\n/**\n * Component that creates a rigid body in the physics simulation.\n * Rigid bodies can be dynamic (simulated), fixed (static), or kinematic (user-controlled).\n *\n * Child meshes automatically generate colliders based on their geometry.\n * The collider type can be controlled via the `colliders` option.\n *\n * @example\n * ```html\n * <!-- Dynamic rigid body with automatic colliders -->\n * <ngt-object3D rigidBody [position]=\"[0, 5, 0]\">\n * <ngt-mesh>\n * <ngt-box-geometry />\n * <ngt-mesh-standard-material />\n * </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Fixed (static) rigid body -->\n * <ngt-object3D rigidBody=\"fixed\" [position]=\"[0, -1, 0]\">\n * <ngt-mesh>\n * <ngt-plane-geometry [args]=\"[100, 100]\" />\n * </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Kinematic rigid body -->\n * <ngt-object3D rigidBody=\"kinematicPosition\" #kinematicBody=\"rigidBody\">\n * <ngt-mesh>\n * <ngt-sphere-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n * ```\n */\n@Component({\n\tselector: 'ngt-object3D[rigidBody]',\n\texportAs: 'rigidBody',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (rigidBody: NgtrRigidBody) => {\n\t\t\t\treturn () => {\n\t\t\t\t\tconst anyColliders = rigidBody.anyColliders();\n\t\t\t\t\tif (!anyColliders.length) return;\n\n\t\t\t\t\tconst colliders = anyColliders.map((anyCollider) => anyCollider['collider']);\n\t\t\t\t\treturn (interactionGroups: InteractionGroups) => {\n\t\t\t\t\t\tfor (const colliderFn of colliders) {\n\t\t\t\t\t\t\tconst collider = colliderFn();\n\t\t\t\t\t\t\tif (!collider) continue;\n\t\t\t\t\t\t\tcollider.setCollisionGroups(interactionGroups);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrRigidBody],\n\t\t},\n\t],\n})\nexport class NgtrRigidBody {\n\ttype = input.required({\n\t\talias: 'rigidBody',\n\t\ttransform: (value: NgtrRigidBodyType | '' | undefined) => {\n\t\t\tif (value === '' || value === undefined) return 'dynamic' as NgtrRigidBodyType;\n\t\t\treturn value;\n\t\t},\n\t});\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\toptions = input(rigidBodyDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tanyColliders = viewChildren(NgtrAnyCollider);\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\twake = output<void>();\n\tsleep = output<void>();\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate canSleep = pick(this.options, 'canSleep');\n\tprivate colliders = pick(this.options, 'colliders');\n\tprivate transformState = pick(this.options, 'transformState');\n\tprivate gravityScale = pick(this.options, 'gravityScale');\n\tprivate dominanceGroup = pick(this.options, 'dominanceGroup');\n\tprivate ccd = pick(this.options, 'ccd');\n\tprivate softCcdPrediction = pick(this.options, 'softCcdPrediction');\n\tprivate additionalSolverIterations = pick(this.options, 'additionalSolverIterations');\n\tprivate linearDamping = pick(this.options, 'linearDamping');\n\tprivate angularDamping = pick(this.options, 'angularDamping');\n\tprivate lockRotations = pick(this.options, 'lockRotations');\n\tprivate lockTranslations = pick(this.options, 'lockTranslations');\n\tprivate enabledRotations = pick(this.options, 'enabledRotations');\n\tprivate enabledTranslations = pick(this.options, 'enabledTranslations');\n\tprivate angularVelocity = pick(this.options, 'angularVelocity');\n\tprivate linearVelocity = pick(this.options, 'linearVelocity');\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate physics = inject(NgtrPhysics);\n\n\tprivate bodyType = computed(() => RIGID_BODY_TYPE_MAP[this.type()]);\n\tprivate bodyDesc = computed(() => {\n\t\tconst [canSleep, bodyType] = [this.canSleep(), untracked(this.bodyType), this.colliders()];\n\t\treturn new RigidBodyDesc(bodyType).setCanSleep(canSleep);\n\t});\n\trigidBody = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\t\treturn worldSingleton.proxy.createRigidBody(this.bodyDesc());\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = untracked(this.options);\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and children\n\t\tconst [parent] = [\n\t\t\tobjectInstanceState.parent(),\n\t\t\tobjectInstanceState.nonObjects(),\n\t\t\tobjectInstanceState.objects(),\n\t\t];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options, true);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateRigidBodyEffect();\n\t\t});\n\t}\n\n\tprivate createRigidBodyStateEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst transformState = untracked(this.transformState);\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createRigidBodyState(body, this.objectRef.nativeElement);\n\t\tthis.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyStates.delete(body.handle);\n\t\t\tif (worldSingleton.proxy.getRigidBody(body.handle)) {\n\t\t\t\tworldSingleton.proxy.removeRigidBody(body);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createRigidBodyEventsEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst wake = getEmitter(this.wake);\n\t\tconst sleep = getEmitter(this.sleep);\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tthis.physics.rigidBodyEvents.set(body.handle, {\n\t\t\tonWake: wake,\n\t\t\tonSleep: sleep,\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyEvents.delete(body.handle);\n\t\t};\n\t}\n\n\tprivate updateRigidBodyEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst state = this.physics.rigidBodyStates.get(body.handle);\n\t\tif (!state) return;\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\t\t_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);\n\t\tbody.setTranslation(_position, true);\n\t\tbody.setRotation(_rotation, true);\n\n\t\tconst [\n\t\t\tgravityScale,\n\t\t\tadditionalSolverIterations,\n\t\t\tlinearDamping,\n\t\t\tangularDamping,\n\t\t\tlockRotations,\n\t\t\tlockTranslations,\n\t\t\tenabledRotations,\n\t\t\tenabledTranslations,\n\t\t\tangularVelocity,\n\t\t\tlinearVelocity,\n\t\t\tccd,\n\t\t\tsoftCcdPrediction,\n\t\t\tdominanceGroup,\n\t\t\tuserData,\n\t\t\tbodyType,\n\t\t] = [\n\t\t\tthis.gravityScale(),\n\t\t\tthis.additionalSolverIterations(),\n\t\t\tthis.linearDamping(),\n\t\t\tthis.angularDamping(),\n\t\t\tthis.lockRotations(),\n\t\t\tthis.lockTranslations(),\n\t\t\tthis.enabledRotations(),\n\t\t\tthis.enabledTranslations(),\n\t\t\tthis.angularVelocity(),\n\t\t\tthis.linearVelocity(),\n\t\t\tthis.ccd(),\n\t\t\tthis.softCcdPrediction(),\n\t\t\tthis.dominanceGroup(),\n\t\t\tthis.userData(),\n\t\t\tthis.bodyType(),\n\t\t];\n\n\t\tbody.setGravityScale(gravityScale, true);\n\t\tif (additionalSolverIterations !== undefined) body.setAdditionalSolverIterations(additionalSolverIterations);\n\t\tif (linearDamping !== undefined) body.setLinearDamping(linearDamping);\n\t\tif (angularDamping !== undefined) body.setAngularDamping(angularDamping);\n\t\tbody.setDominanceGroup(dominanceGroup);\n\t\tif (enabledRotations !== undefined) body.setEnabledRotations(...enabledRotations, true);\n\t\tif (enabledTranslations !== undefined) body.setEnabledTranslations(...enabledTranslations, true);\n\t\tif (lockRotations !== undefined) body.lockRotations(lockRotations, true);\n\t\tif (lockTranslations !== undefined) body.lockTranslations(lockTranslations, true);\n\t\tbody.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);\n\t\tbody.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);\n\t\tbody.enableCcd(ccd);\n\t\tbody.setSoftCcdPrediction(softCcdPrediction);\n\t\tif (userData !== undefined) body.userData = userData;\n\t\tif (bodyType !== body.bodyType()) body.setBodyType(bodyType, true);\n\t}\n\n\tprivate createRigidBodyState(\n\t\trigidBody: RigidBody,\n\t\tobject: Object3D,\n\t\tsetMatrix?: (matrix: THREE.Matrix4) => void,\n\t\tgetMatrix?: (matrix: THREE.Matrix4) => THREE.Matrix4,\n\t\tworldScale?: THREE.Vector3,\n\t\tmeshType: NgtrRigidBodyState['meshType'] = 'mesh',\n\t) {\n\t\tobject.updateWorldMatrix(true, false);\n\t\tconst invertedWorldMatrix = object.parent!.matrixWorld.clone().invert();\n\t\treturn {\n\t\t\tobject,\n\t\t\trigidBody,\n\t\t\tinvertedWorldMatrix,\n\t\t\tsetMatrix: setMatrix\n\t\t\t\t? setMatrix\n\t\t\t\t: (matrix: THREE.Matrix4) => {\n\t\t\t\t\t\tobject.matrix.copy(matrix);\n\t\t\t\t\t},\n\t\t\tgetMatrix: getMatrix ? getMatrix : (matrix: THREE.Matrix4) => matrix.copy(object.matrix),\n\t\t\tscale: worldScale || object.getWorldScale(_scale).clone(),\n\t\t\tisSleeping: false,\n\t\t\tmeshType,\n\t\t};\n\t}\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { NgtrAnyCollider } from './rigid-body';\nimport type {\n\tNgtrBallArgs,\n\tNgtrCapsuleArgs,\n\tNgtrConeArgs,\n\tNgtrConvexHullArgs,\n\tNgtrConvexMeshArgs,\n\tNgtrCuboidArgs,\n\tNgtrCylinderArgs,\n\tNgtrHeightfieldArgs,\n\tNgtrPolylineArgs,\n\tNgtrRoundConeArgs,\n\tNgtrRoundConvexHullArgs,\n\tNgtrRoundConvexMeshArgs,\n\tNgtrRoundCuboidArgs,\n\tNgtrRoundCylinderArgs,\n\tNgtrTrimeshArgs,\n} from './types';\n\n// NOTE: this is ok to use here since we're not exporting this short-cut\nconst ANY_COLLIDER_HOST_DIRECTIVE = {\n\tdirective: NgtrAnyCollider,\n\tinputs: ['options', 'name', 'scale', 'position', 'quaternion', 'rotation', 'userData'],\n\toutputs: ['collisionEnter', 'collisionExit', 'intersectionEnter', 'intersectionExit', 'contactForce'],\n};\n\n/**\n * Creates a cuboid (box) collider with specified half-extents.\n *\n * @example\n * ```html\n * <ngt-object3D [cuboidCollider]=\"[1, 0.5, 2]\" [position]=\"[0, 0, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[cuboidCollider]',\n\texportAs: 'cuboidCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>({ alias: 'cuboidCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a capsule collider with specified half-height and radius.\n *\n * @example\n * ```html\n * <ngt-object3D [capsuleCollider]=\"[0.5, 0.25]\" [position]=\"[0, 1, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[capsuleCollider]',\n\texportAs: 'capsuleCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>({ alias: 'capsuleCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a spherical (ball) collider with specified radius.\n *\n * @example\n * ```html\n * <ngt-object3D [ballCollider]=\"[0.5]\" [position]=\"[0, 2, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[ballCollider]',\n\texportAs: 'ballCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>({ alias: 'ballCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex hull collider from an array of vertices.\n * The convex hull is computed from the provided points.\n *\n * @example\n * ```html\n * <ngt-object3D [convexHullCollider]=\"[vertices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[convexHullCollider]',\n\texportAs: 'convexHullCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>({ alias: 'convexHullCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('convexHull');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a heightfield collider for terrain-like surfaces.\n * The heightfield is defined by a grid of height values.\n *\n * @example\n * ```html\n * <ngt-object3D [heightfieldCollider]=\"[width, height, heights, scale]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[heightfieldCollider]',\n\texportAs: 'heightfieldCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>({ alias: 'heightfieldCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a triangle mesh collider for exact collision shapes.\n * Note: Trimesh colliders are computationally expensive and should be used sparingly.\n *\n * @example\n * ```html\n * <ngt-object3D [trimeshCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[trimeshCollider]',\n\texportAs: 'trimeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>({ alias: 'trimeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a polyline collider from connected line segments.\n *\n * @example\n * ```html\n * <ngt-object3D [polylineCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[polylineCollider]',\n\texportAs: 'polylineCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>({ alias: 'polylineCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cuboid collider with rounded corners.\n *\n * @example\n * ```html\n * <ngt-object3D [roundCuboidCollider]=\"[1, 0.5, 2, 0.1]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundCuboidCollider]',\n\texportAs: 'roundCuboidCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>({ alias: 'roundCuboidCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cylinder collider with specified half-height and radius.\n *\n * @example\n * ```html\n * <ngt-object3D [cylinderCollider]=\"[1, 0.5]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[cylinderCollider]',\n\texportAs: 'cylinderCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>({ alias: 'cylinderCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cylinder collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundCylinderCollider]=\"[1, 0.5, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundCylinderCollider]',\n\texportAs: 'roundCylinderCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>({ alias: 'roundCylinderCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cone collider with specified half-height and base radius.\n *\n * @example\n * ```html\n * <ngt-object3D [coneCollider]=\"[1, 0.5]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[coneCollider]',\n\texportAs: 'coneCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>({ alias: 'coneCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cone collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConeCollider]=\"[1, 0.5, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConeCollider]',\n\texportAs: 'roundConeCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>({ alias: 'roundConeCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex mesh collider from vertices and indices.\n *\n * @example\n * ```html\n * <ngt-object3D [convexMeshCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[convexMeshCollider]',\n\texportAs: 'convexMeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>({ alias: 'convexMeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex hull collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConvexHullCollider]=\"[vertices, indices, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConvexHullCollider]',\n\texportAs: 'roundConvexHullCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>({ alias: 'roundConvexHullCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex mesh collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConvexMeshCollider]=\"[vertices, indices, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConvexMeshCollider]',\n\texportAs: 'roundConvexMeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>({ alias: 'roundConvexMeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tapplyProps,\n\textend,\n\tgetInstanceState,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';\nimport { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';\nimport { createColliderOptions } from './utils';\n\n/**\n * Configuration options for individual rigid body instances.\n * Used with NgtrInstancedRigidBodies to define per-instance properties.\n */\nexport interface NgtrInstancedRigidBodyOptions {\n\t/** Unique identifier for this instance (required for change tracking) */\n\tkey: string | number;\n\t/** Type of rigid body for this instance */\n\ttype?: NgtrRigidBodyType;\n\t/** Initial position of this instance */\n\tposition?: NgtVector3;\n\t/** Initial rotation of this instance (Euler angles) */\n\trotation?: NgtEuler;\n\t/** Scale of this instance */\n\tscale?: NgtVector3;\n\t/** Initial rotation of this instance (quaternion) */\n\tquaternion?: NgtQuaternion;\n\t/** Custom user data attached to this instance */\n\tuserData?: NgtThreeElements['ngt-object3D']['userData'];\n\t/** Physics options specific to this instance */\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n/**\n * Component for creating multiple rigid bodies from a single InstancedMesh.\n * This is highly efficient for scenes with many identical physics objects.\n *\n * Each instance gets its own rigid body but shares the same geometry for rendering.\n * The component automatically syncs instance matrices with physics simulation.\n *\n * @example\n * ```html\n * <ngt-object3D [instancedRigidBodies]=\"instances\">\n * <ngt-instanced-mesh [count]=\"instances.length\" castShadow receiveShadow>\n * <ngt-sphere-geometry [args]=\"[0.5]\" />\n * <ngt-mesh-standard-material color=\"orange\" />\n * </ngt-instanced-mesh>\n * </ngt-object3D>\n * ```\n *\n * ```typescript\n * instances = Array.from({ length: 100 }, (_, i) => ({\n * key: i,\n * position: [Math.random() * 10, Math.random() * 10, 0] as [number, number, number],\n * }));\n * ```\n */\n@Component({\n\tselector: 'ngt-object3D[instancedRigidBodies]',\n\texportAs: 'instancedRigidBodies',\n\ttemplate: `\n\t\t<ngt-object3D #instanceWrapper>\n\t\t\t<ng-content />\n\t\t</ngt-object3D>\n\n\t\t@for (instance of instancesOptions(); track instance.key) {\n\t\t\t<ngt-object3D\n\t\t\t\t[rigidBody]=\"instance.type\"\n\t\t\t\t[options]=\"instance.options\"\n\t\t\t\t[position]=\"instance.position\"\n\t\t\t\t[rotation]=\"instance.rotation\"\n\t\t\t\t[scale]=\"instance.scale\"\n\t\t\t\t[quaternion]=\"instance.quaternion\"\n\t\t\t\t[userData]=\"instance.userData\"\n\t\t\t\t[name]=\"instance.key + '-instanced-rigid-body-' + $index\"\n\t\t\t>\n\t\t\t\t<ng-content select=\"[data-colliders]\" />\n\n\t\t\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t\t\t<ngt-object3D\n\t\t\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t\t\t[name]=\"objectRef.nativeElement.name + '-instanced-collider-' + $index\"\n\t\t\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-object3D>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrRigidBody, NgtrAnyCollider],\n})\nexport class NgtrInstancedRigidBodies {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tinstances = input.required({\n\t\talias: 'instancedRigidBodies',\n\t\ttransform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {\n\t\t\tif (value === '') return [];\n\t\t\treturn value;\n\t\t},\n\t});\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\tprivate instanceWrapperRef = viewChild.required<ElementRef<THREE.Object3D>>('instanceWrapper');\n\trigidBodyRefs = viewChildren(NgtrRigidBody);\n\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate colliders = pick(this.options, 'colliders');\n\n\tprivate instancedMesh = computed(() => {\n\t\tconst instanceWrapper = this.instanceWrapperRef().nativeElement;\n\t\tif (!instanceWrapper) return null;\n\n\t\tconst instanceState = getInstanceState(instanceWrapper);\n\t\tif (!instanceState) return null;\n\n\t\t// track object's children\n\t\tinstanceState.objects();\n\t\tconst firstChild = instanceWrapper.children[0];\n\t\tif (!firstChild || !(firstChild as THREE.InstancedMesh).isInstancedMesh) return null;\n\n\t\treturn firstChild as THREE.InstancedMesh;\n\t});\n\n\tprotected instancesOptions = computed(() => {\n\t\tconst [instances, options, instancedMesh] = [this.instances(), untracked(this.options), this.instancedMesh()];\n\t\tif (!instancedMesh) return [];\n\t\treturn instances.map(\n\t\t\t(instance, index) =>\n\t\t\t\t({\n\t\t\t\t\t...instance,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...(instance.options || {}),\n\t\t\t\t\t\ttransformState: (state) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tgetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.getMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\treturn matrix;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.setMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\tinstancedMesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeshType: 'instancedMesh',\n\t\t\t\t\t\t\t} as NgtrRigidBodyState;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkey: `${instance.key}-${index}` + `${instancedMesh?.uuid || ''}`,\n\t\t\t\t}) as Omit<NgtrInstancedRigidBodyOptions, 'options' | 'position' | 'scale'> & {\n\t\t\t\t\tposition: NgtVector3;\n\t\t\t\t\tscale: NgtVector3;\n\t\t\t\t\toptions: Partial<NgtrRigidBodyOptions>;\n\t\t\t\t},\n\t\t);\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = this.options();\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectInstanceState.parent(), objectInstanceState.nonObjects()];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMesh();\n\t\t\tif (!instancedMesh) return;\n\t\t\tinstancedMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\t\t});\n\t}\n}\n","import { computed, effect, ElementRef, inject, Injector, untracked } from '@angular/core';\nimport {\n\tFixedImpulseJoint,\n\tImpulseJoint,\n\tJointData,\n\tPrismaticImpulseJoint,\n\tRevoluteImpulseJoint,\n\tRigidBody,\n\tRopeImpulseJoint,\n\tSphericalImpulseJoint,\n\tSpringImpulseJoint,\n} from '@dimforge/rapier3d-compat';\nimport { resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type {\n\tNgtrFixedJointParams,\n\tNgtrPrismaticJointParams,\n\tNgtrRevoluteJointParams,\n\tNgtrRopeJointParams,\n\tNgtrSphericalJointParams,\n\tNgtrSpringJointParams,\n} from './types';\nimport { quaternionToRapierQuaternion, vector3ToRapierVector } from './utils';\n\nfunction impulseJoint<TJoinType extends ImpulseJoint>(\n\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t{ injector, data }: { injector?: Injector; data: JointData | (() => JointData | null) },\n) {\n\treturn assertInjector(impulseJoint, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tconst newJoint = computed<TJoinType | null>(() => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return null;\n\n\t\t\tconst a = typeof bodyA === 'function' ? resolveRef(bodyA()) : resolveRef(bodyA);\n\t\t\tconst b = typeof bodyB === 'function' ? resolveRef(bodyB()) : resolveRef(bodyB);\n\t\t\tif (!a || !b) return null;\n\n\t\t\tconst jointData = typeof data === 'function' ? data() : data;\n\t\t\tif (!jointData) return null;\n\n\t\t\treturn worldSingleton.proxy.createImpulseJoint(jointData, a, b, true) as TJoinType;\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst joint = newJoint();\n\t\t\tif (!joint) return;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (worldSingleton.proxy.getImpulseJoint(joint.handle)) {\n\t\t\t\t\tworldSingleton.proxy.removeImpulseJoint(joint, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn newJoint;\n\t});\n}\n\nfunction createJoint<TJointParams, TJoinType extends ImpulseJoint>(\n\tjointDataFn: (rapier: NonNullable<ReturnType<NgtrPhysics['rapier']>>, data: TJointParams) => JointData,\n) {\n\treturn function _injectJoint(\n\t\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\t{ injector, data }: { injector?: Injector; data: TJointParams | (() => TJointParams) },\n\t) {\n\t\treturn assertInjector(_injectJoint, injector, () => {\n\t\t\tconst physics = inject(NgtrPhysics);\n\n\t\t\tlet dataFn = data as () => TJointParams;\n\n\t\t\tif (typeof data !== 'function') {\n\t\t\t\tdataFn = () => data;\n\t\t\t}\n\n\t\t\tconst jointData = computed(() => {\n\t\t\t\tconst rapier = physics.rapier();\n\t\t\t\tif (!rapier) return null;\n\t\t\t\treturn jointDataFn(rapier, untracked(dataFn));\n\t\t\t});\n\n\t\t\treturn impulseJoint<TJoinType>(bodyA, bodyB, { injector, data: jointData });\n\t\t});\n\t};\n}\n\n/**\n * Creates a fixed joint that prevents any relative movement between two rigid bodies.\n * Fixed joints are characterized by one local frame (represented by an isometry) on each rigid-body.\n * The fixed-joint makes these frames coincide in world-space.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * fixedJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body1LocalFrame: [0, 0, 0, 1],\n * body2Anchor: [0, 0, 0],\n * body2LocalFrame: [0, 0, 0, 1]\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const fixedJoint = createJoint<NgtrFixedJointParams, FixedImpulseJoint>((rapier, data) =>\n\trapier.JointData.fixed(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tquaternionToRapierQuaternion(data.body1LocalFrame),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tquaternionToRapierQuaternion(data.body2LocalFrame),\n\t),\n);\n/**\n * @deprecated Use `fixedJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectFixedJoint = fixedJoint;\n\n/**\n * Creates a spherical (ball-and-socket) joint that ensures two anchor points always coincide.\n * This prevents any relative translational motion at these points while allowing rotation.\n * Typically used to simulate ragdoll arms, pendulums, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * sphericalJoint(bodyA, bodyB, {\n * data: { body1Anchor: [0, -0.5, 0], body2Anchor: [0, 0.5, 0] }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const sphericalJoint = createJoint<NgtrSphericalJointParams, SphericalImpulseJoint>((rapier, data) =>\n\trapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n/**\n * @deprecated Use `sphericalJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSphericalJoint = sphericalJoint;\n\n/**\n * Creates a revolute (hinge) joint that allows rotation only around one axis.\n * Prevents any other relative movement between two rigid bodies.\n * Typically used to simulate wheels, doors, fans, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data (including optional limits) and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * revoluteJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [0, 1, 0],\n * axis: [0, 1, 0],\n * limits: [-Math.PI / 2, Math.PI / 2]\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const revoluteJoint = createJoint<NgtrRevoluteJointParams, RevoluteImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.revolute(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n/**\n * @deprecated Use `revoluteJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectRevoluteJoint = revoluteJoint;\n\n/**\n * Creates a prismatic (slider) joint that allows translation only along one axis.\n * Prevents any other relative movement between two rigid bodies.\n * Typically used to simulate pistons, sliding doors, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data (including optional limits) and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * prismaticJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [2, 0, 0],\n * axis: [1, 0, 0],\n * limits: [-1, 1]\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const prismaticJoint = createJoint<NgtrPrismaticJointParams, PrismaticImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.prismatic(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n/**\n * @deprecated Use `prismaticJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectPrismaticJoint = prismaticJoint;\n\n/**\n * Creates a rope joint that limits the maximum distance between two anchor points.\n * The bodies can move freely as long as the distance doesn't exceed the specified length.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * ropeJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [0, 0, 0],\n * length: 5\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const ropeJoint = createJoint<NgtrRopeJointParams, RopeImpulseJoint>((rapier, data) =>\n\trapier.JointData.rope(\n\t\tdata.length,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t),\n);\n/**\n * @deprecated Use `ropeJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectRopeJoint = ropeJoint;\n\n/**\n * Creates a spring joint that applies a force proportional to the distance between two anchor points.\n * The spring tries to maintain its rest length through spring forces.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * springJoint(bodyA, bodyB, {\n * data: {\n * body1Anchor: [0, 0, 0],\n * body2Anchor: [0, 0, 0],\n * restLength: 2,\n * stiffness: 100,\n * damping: 10\n * }\n * });\n * ```\n *\n * @category Hooks - Joints\n */\nexport const springJoint = createJoint<NgtrSpringJointParams, SpringImpulseJoint>((rapier, data) => {\n\treturn rapier.JointData.spring(\n\t\tdata.restLength,\n\t\tdata.stiffness,\n\t\tdata.damping,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t);\n});\n/**\n * @deprecated Use `springJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSpringJoint = springJoint;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n} from '@angular/core';\nimport { extend, getInstanceState } from 'angular-three';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';\nimport type { NgtrRigidBodyAutoCollider } from './types';\nimport { createColliderOptions } from './utils';\n\n/**\n * Component that generates colliders based on child mesh geometries.\n * Use this when you want specific collider generation for a group of meshes\n * within a rigid body.\n *\n * This is useful when you want different parts of a complex object to have\n * different collider types than the parent rigid body's automatic colliders.\n *\n * @example\n * ```html\n * <ngt-object3D rigidBody [options]=\"{ colliders: false }\">\n * <ngt-object3D [meshCollider]=\"'trimesh'\">\n * <ngt-mesh>\n * <ngt-torus-geometry />\n * </ngt-mesh>\n * </ngt-object3D>\n * </ngt-object3D>\n * ```\n */\n@Component({\n\tselector: 'ngt-object3D[meshCollider]',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-mesh-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrMeshCollider {\n\tcolliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'meshCollider' });\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate rigidBody = inject(NgtrRigidBody);\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst rigidBodyOptions = this.rigidBody.options();\n\t\trigidBodyOptions.colliders = this.colliders();\n\n\t\tconst objectInstaceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstaceState) return [];\n\n\t\t// track object's children\n\t\tobjectInstaceState.nonObjects();\n\t\tobjectInstaceState.objects();\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\t\tthis.objectRef.nativeElement.userData ??= {};\n\t\tthis.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';\n\t}\n}\n","import { DestroyRef, inject, Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type { NgtrFilterContactPairCallback, NgtrFilterIntersectionPairCallback, NgtrWorldStepCallback } from './types';\n\n/**\n * Registers a callback to be executed before each physics world step.\n * Useful for applying forces, updating kinematic bodies, or other pre-step logic.\n *\n * The callback is automatically unregistered when the component is destroyed.\n *\n * @param callback - Function to call before each physics step, receives the Rapier World\n * @param injector - Optional injector for dependency injection context\n *\n * @example\n * ```typescript\n * beforePhysicsStep((world) => {\n * // Apply custom forces or update kinematic bodies\n * const body = world.getRigidBody(handle);\n * body?.applyImpulse({ x: 0, y: 10, z: 0 }, true);\n * });\n * ```\n */\nexport function beforePhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(beforePhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.beforeStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.beforeStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to be executed after each physics world step.\n * Useful for reading physics state, updating visuals, or other post-step logic.\n *\n * The callback is automatically unregistered when the component is destroyed.\n *\n * @param callback - Function to call after each physics step, receives the Rapier World\n * @param injector - Optional injector for dependency injection context\n *\n * @example\n * ```typescript\n * afterPhysicsStep((world) => {\n * // Read physics state after simulation\n * const body = world.getRigidBody(handle);\n * const position = body?.translation();\n * console.log('Body position:', position);\n * });\n * ```\n */\nexport function afterPhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(afterPhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.afterStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.afterStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to filter contact pairs.\n *\n * The callback determines if contact computation should happen between two colliders,\n * and how the constraints solver should behave for these contacts.\n *\n * This will only be executed if at least one of the involved colliders contains the\n * `ActiveHooks.FILTER_CONTACT_PAIRS` flag in its active hooks.\n *\n * @param callback - Function that returns:\n * - `SolverFlags.COMPUTE_IMPULSE` (1) - Process the collision normally\n * - `SolverFlags.EMPTY` (0) - Skip computing impulses (colliders pass through)\n * - `null` - Skip this hook; let the next registered hook decide\n *\n * When multiple hooks are registered, they are called in order until one returns a non-null value.\n */\nexport function filterContactPair(callback: NgtrFilterContactPairCallback, injector?: Injector) {\n\treturn assertInjector(filterContactPair, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.filterContactPairCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.filterContactPairCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to filter intersection pairs.\n *\n * The callback determines if intersection computation should happen between two colliders\n * (where at least one is a sensor).\n *\n * This will only be executed if at least one of the involved colliders contains the\n * `ActiveHooks.FILTER_INTERSECTION_PAIR` flag in its active hooks.\n *\n * @param callback - Function that returns:\n * - `true` - Allow the intersection to be detected\n * - `false` - Block the intersection (no intersection events will fire)\n *\n * When multiple hooks are registered, the first hook that returns `false` blocks the intersection.\n */\nexport function filterIntersectionPair(callback: NgtrFilterIntersectionPairCallback, injector?: Injector) {\n\treturn assertInjector(filterIntersectionPair, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.filterIntersectionPairCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.filterIntersectionPairCallbacks.delete(callback);\n\t\t});\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RapierVector3","RapierQuaternion","defaultOptions","i1.NgtrAnyCollider"],"mappings":"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"}
|