@newkrok/nape-js 3.10.0 → 3.10.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,2 +1,2 @@
1
- "use strict";var Vl=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var fo=Object.getOwnPropertyNames;var bo=Object.prototype.hasOwnProperty;var zo=(g,e)=>{for(var t in e)Vl(g,t,{get:e[t],enumerable:!0})},Po=(g,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fo(e))!bo.call(g,s)&&s!==t&&Vl(g,s,{get:()=>e[s],enumerable:!(n=mo(e,s))||n.enumerable});return g};var wo=g=>Po(Vl({},"__esModule",{value:!0}),g);var Vr={};zo(Vr,{BINARY_SNAPSHOT_VERSION:()=>Es,SNAPSHOT_VERSION:()=>Ns,spaceFromBinary:()=>yo,spaceFromJSON:()=>ho,spaceToBinary:()=>xo,spaceToJSON:()=>Wl});module.exports=wo(Vr);var Ns=1;function ht(g){return{x:g.x,y:g.y}}function Ul(g){if(g==null)return null;try{let e=JSON.stringify(g);return e==="{}"?null:JSON.parse(e)}catch{return null}}function vo(g){return{elasticity:g.elasticity,dynamicFriction:g.dynamicFriction,staticFriction:g.staticFriction,density:g.density,rollingFriction:g.rollingFriction}}function go(g){return{collisionGroup:g.collisionGroup,collisionMask:g.collisionMask,sensorGroup:g.sensorGroup,sensorMask:g.sensorMask,fluidGroup:g.fluidGroup,fluidMask:g.fluidMask}}function Co(g){if(g==null)return null;let e=g.gravity;return{density:g.density,viscosity:g.viscosity,gravity:e!=null?ht(e):null}}function Mo(g){let e=vo(g.material),t=go(g.filter),n=g.fluidEnabled,s=n?Co(g.fluidProperties):null,i=g.sensorEnabled;if(g.isCircle()){let l=g,r=g.localCOM;return{type:"circle",radius:l.radius,localCOM:ht(r),material:e,filter:t,sensorEnabled:i,fluidEnabled:n,fluidProperties:s}}else if(g.isCapsule()){let l=g,r=g.localCOM;return{type:"capsule",width:l.width,height:l.height,localCOM:ht(r),material:e,filter:t,sensorEnabled:i,fluidEnabled:n,fluidProperties:s}}else{let r=g.localVerts,a=[],o=r.length;for(let p=0;p<o;p++)a.push(ht(r.at(p)));return{type:"polygon",localVerts:a,material:e,filter:t,sensorEnabled:i,fluidEnabled:n,fluidProperties:s}}}var Zo={1:"STATIC",2:"DYNAMIC",3:"KINEMATIC"},ko={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},Eo={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},No={0:"DEFAULT",1:"FIXED",2:"SCALED"};function Oo(g,e){let t=g.zpp_inner,n=ko[t.massMode]??"DEFAULT",s=Eo[t.inertiaMode]??"DEFAULT",i=No[t.gravMassMode]??"DEFAULT",l=[],r=g.shapes,a=r.length;for(let o=0;o<a;o++)l.push(Mo(r.at(o)));return{id:e,type:Zo[t.type]??"DYNAMIC",position:ht(g.position),rotation:g.rotation,velocity:ht(g.velocity),angularVel:g.angularVel,kinematicVel:ht(g.kinematicVel),kinAngVel:g.kinAngVel,surfaceVel:ht(g.surfaceVel),force:ht(g.force),torque:t.type===2?g.torque:0,massMode:n,mass:n==="FIXED"?t.cmass:null,inertiaMode:s,inertia:s==="FIXED"?t.cinertia:null,gravMassMode:i,gravMassScale:t.gravMassScale,allowMovement:g.allowMovement,allowRotation:g.allowRotation,bullet:g.isBullet,shapes:l,userData:Ul(t.userData)}}function Vi(g,e,t,n){let s=g.zpp_inner,i=t!=null?e.get(t.zpp_inner.id)??null:null,l=n!=null?e.get(n.zpp_inner.id)??null:null;return{body1Id:i,body2Id:l,active:s.active,ignore:s.ignore,stiff:s.stiff,frequency:s.frequency,damping:s.damping,maxForce:s.maxForce,maxError:s.maxError,breakUnderForce:s.breakUnderForce,breakUnderError:s.breakUnderError,removeOnBreak:s.removeOnBreak,userData:Ul(s.userData)}}function So(g,e){switch(g.constructor?.name??""){case"PivotJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"PivotJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2)}}case"DistanceJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"DistanceJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),jointMin:n.jointMin,jointMax:n.jointMax}}case"AngleJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"AngleJoint",jointMin:n.jointMin,jointMax:n.jointMax,ratio:n.ratio}}case"MotorJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"MotorJoint",rate:n.rate,ratio:n.ratio}}case"LineJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"LineJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),direction:ht(n.direction),jointMin:n.jointMin,jointMax:n.jointMax}}case"PulleyJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"PulleyJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),anchor3:ht(n.anchor3),anchor4:ht(n.anchor4),jointMin:n.jointMin,jointMax:n.jointMax,ratio:n.ratio}}case"WeldJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"WeldJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),phase:n.phase}}default:return null}}function Wl(g){let e=[],t=new Map,n=new Map;function s(f){let z=f.zpp_inner.id;if(n.has(z))return;let P=e.length;t.set(f,P),n.set(z,P),e.push(Oo(f,P))}let i=g.bodies,l=i.length;for(let f=0;f<l;f++)s(i.at(f));let r=g.compounds,a=r.length;for(let f=0;f<a;f++){let P=r.at(f).bodies,k=P.length;for(let m=0;m<k;m++)s(P.at(m))}let o=[],p=new Map;function c(f){if(p.has(f))return;let z=So(f,n);z!=null&&(p.set(f,o.length),o.push(z))}let h=g.constraints,u=h.length;for(let f=0;f<u;f++)c(h.at(f));for(let f=0;f<a;f++){let P=r.at(f).constraints,k=P.length;for(let m=0;m<k;m++)c(P.at(m))}let x=[];for(let f=0;f<a;f++){let z=r.at(f),P=[],k=z.bodies,m=k.length;for(let w=0;w<m;w++){let O=k.at(w),E=t.get(O);E!=null&&P.push(E)}let b=[],C=z.constraints,v=C.length;for(let w=0;w<v;w++){let O=C.at(w),E=p.get(O);E!=null&&b.push(E)}x.push({bodyIds:P,constraintIndices:b,childIndices:[]})}let d=g.zpp_inner.bphase.is_sweep?"SWEEP_AND_PRUNE":"DYNAMIC_AABB_TREE",_=g.gravity;return{version:1,gravity:ht(_),worldLinearDrag:g.worldLinearDrag,worldAngularDrag:g.worldAngularDrag,sortContacts:g.sortContacts,broadphase:d,bodies:e,constraints:o,compounds:x}}var Rn=class{static POSINF(){return 1/0}static NEGINF(){return-1/0}};Rn.FMAX=1e100;var gt=class gt{static Constraint(){return gt._Constraint++}static Interactor(){return gt._Interactor++}static CbType(){return gt._CbType++}static CbSet(){return gt._CbSet++}static Listener(){return gt._Listener++}static ZPP_SimpleVert(){return gt._ZPP_SimpleVert++}static ZPP_SimpleSeg(){return gt._ZPP_SimpleSeg++}static Space(){return gt._Space++}static InteractionGroup(){return gt._InteractionGroup++}};gt._Constraint=0,gt._Interactor=0,gt._CbType=0,gt._CbSet=0,gt._Listener=0,gt._ZPP_SimpleVert=0,gt._ZPP_SimpleSeg=0,gt._Space=0,gt._InteractionGroup=0;var _n=gt;var Q=class{};Q.GravMassMode_DEFAULT=null,Q.GravMassMode_FIXED=null,Q.GravMassMode_SCALED=null,Q.InertiaMode_DEFAULT=null,Q.InertiaMode_FIXED=null,Q.MassMode_DEFAULT=null,Q.MassMode_FIXED=null,Q.BodyType_STATIC=null,Q.BodyType_DYNAMIC=null,Q.BodyType_KINEMATIC=null,Q.ListenerType_BODY=null,Q.ListenerType_CONSTRAINT=null,Q.ListenerType_INTERACTION=null,Q.ListenerType_PRE=null,Q.PreFlag_ACCEPT=null,Q.PreFlag_IGNORE=null,Q.PreFlag_ACCEPT_ONCE=null,Q.PreFlag_IGNORE_ONCE=null,Q.CbEvent_BEGIN=null,Q.CbEvent_ONGOING=null,Q.CbEvent_END=null,Q.CbEvent_WAKE=null,Q.CbEvent_SLEEP=null,Q.CbEvent_BREAK=null,Q.CbEvent_PRE=null,Q.InteractionType_COLLISION=null,Q.InteractionType_SENSOR=null,Q.InteractionType_FLUID=null,Q.InteractionType_ANY=null,Q.Winding_UNDEFINED=null,Q.Winding_CLOCKWISE=null,Q.Winding_ANTICLOCKWISE=null,Q.ValidationResult_VALID=null,Q.ValidationResult_DEGENERATE=null,Q.ValidationResult_CONCAVE=null,Q.ValidationResult_SELF_INTERSECTING=null,Q.ShapeType_CIRCLE=null,Q.ShapeType_POLYGON=null,Q.ShapeType_CAPSULE=null,Q.Broadphase_DYNAMIC_AABB_TREE=null,Q.Broadphase_SWEEP_AND_PRUNE=null,Q.ArbiterType_COLLISION=null,Q.ArbiterType_SENSOR=null,Q.ArbiterType_FLUID=null,Q.internal=!1,Q.id_ImmState_ACCEPT=1,Q.id_ImmState_IGNORE=2,Q.id_ImmState_ALWAYS=4,Q.id_GravMassMode_DEFAULT=0,Q.id_GravMassMode_FIXED=1,Q.id_GravMassMode_SCALED=2,Q.id_InertiaMode_DEFAULT=0,Q.id_InertiaMode_FIXED=1,Q.id_MassMode_DEFAULT=0,Q.id_MassMode_FIXED=1,Q.id_BodyType_STATIC=1,Q.id_BodyType_DYNAMIC=2,Q.id_BodyType_KINEMATIC=3,Q.id_ListenerType_BODY=0,Q.id_ListenerType_CONSTRAINT=1,Q.id_ListenerType_INTERACTION=2,Q.id_ListenerType_PRE=3,Q.id_PreFlag_ACCEPT=1,Q.id_PreFlag_IGNORE=2,Q.id_PreFlag_ACCEPT_ONCE=3,Q.id_PreFlag_IGNORE_ONCE=4,Q.id_CbEvent_BEGIN=0,Q.id_CbEvent_END=1,Q.id_CbEvent_WAKE=2,Q.id_CbEvent_SLEEP=3,Q.id_CbEvent_BREAK=4,Q.id_CbEvent_PRE=5,Q.id_CbEvent_ONGOING=6,Q.id_InteractionType_COLLISION=1,Q.id_InteractionType_SENSOR=2,Q.id_InteractionType_FLUID=4,Q.id_InteractionType_ANY=7,Q.id_Winding_UNDEFINED=0,Q.id_Winding_CLOCKWISE=1,Q.id_Winding_ANTICLOCKWISE=2,Q.id_ValidationResult_VALID=0,Q.id_ValidationResult_DEGENERATE=1,Q.id_ValidationResult_CONCAVE=2,Q.id_ValidationResult_SELF_INTERSECTING=3,Q.id_ShapeType_CIRCLE=0,Q.id_ShapeType_POLYGON=1,Q.id_ShapeType_CAPSULE=2,Q.id_Broadphase_DYNAMIC_AABB_TREE=0,Q.id_Broadphase_SWEEP_AND_PRUNE=1,Q.id_ArbiterType_COLLISION=1,Q.id_ArbiterType_SENSOR=2,Q.id_ArbiterType_FLUID=4;var ol=class{static sqrt(e){return Math.sqrt(e)}static invsqrt(e){return 1/Math.sqrt(e)}static sqr(e){return e*e}static clamp2(e,t){let n=-t;return e<n?n:e>t?t:e}static clamp(e,t,n){return e<t?t:e>n?n:e}};var ye=class{};ye.poolGeomPoly=null,ye.nextGeomPoly=null,ye.poolVec2=null,ye.nextVec2=null,ye.poolVec3=null,ye.nextVec3=null;var Os=class{constructor(e,t){this.list=[];this.width=0;this.width=e,this.list=[]}resize(e,t,n){this.width=e;let s=e*t;for(let i=0;i<s;i++)this.list[i]=n}get(e,t){return this.list[t*this.width+e]}set(e,t,n){return this.list[t*this.width+e]=n}},xs=class extends Os{},ds=class extends Os{},_s=class extends Os{};var Pn=class Pn{constructor(){this.value=!1;this.next=null;this.hnext=null;this.id=0;this.di=0}static _alloc(){if(Pn.zpp_pool==null)return new Pn;let e=Pn.zpp_pool;return Pn.zpp_pool=e.next,e.next=null,e}static get(e,t,n){let s=Pn._alloc();return s.id=e,s.di=t,s.value=n,s}static getpersist(e,t){let n=Pn._alloc();return n.id=e,n.di=t,n}static ordered_get(e,t,n){if(e<=t){let s=Pn._alloc();return s.id=e,s.di=t,s.value=n,s}else{let s=Pn._alloc();return s.id=t,s.di=e,s.value=n,s}}static ordered_get_persist(e,t){if(e<=t){let n=Pn._alloc();return n.id=e,n.di=t,n}else{let n=Pn._alloc();return n.id=t,n.di=e,n}}free(){}alloc(){}};Pn.zpp_pool=null;var Te=Pn;var Ao=1048576,Ii=1048575,ji=106039,Bi=class{constructor(){this.cnt=0;this.cnt=0,this.table=new Array(Ao).fill(null)}empty(){return this.cnt==0}clear(){for(let e=0;e<this.table.length;e++){let t=this.table[e];if(t!=null){for(;t!=null;){let n=t.hnext;t.hnext=null,t=n}this.table[e]=null}}}get(e,t){let n=this.table[e*ji+t&Ii];if(n==null)return null;if(n.id==e&&n.di==t)return n;for(;n=n.hnext,n!=null&&(n.id!=e||n.di!=t););return n}ordered_get(e,t){if(e>t){let s=e;e=t,t=s}let n=this.table[e*ji+t&Ii];if(n==null)return null;if(n.id==e&&n.di==t)return n;for(;n=n.hnext,n!=null&&(n.id!=e||n.di!=t););return n}has(e,t){let n=this.table[e*ji+t&Ii];if(n==null)return!1;if(n.id==e&&n.di==t)return!0;for(;n=n.hnext,n!=null&&(n.id!=e||n.di!=t););return n!=null}maybeAdd(e){let t=e.id*ji+e.di&Ii,n=this.table[t],s=!0;n==null?(this.table[t]=e,e.hnext=null):s&&(e.hnext=n.hnext,n.hnext=e),s&&this.cnt++}add(e){let t=e.id*ji+e.di&Ii,n=this.table[t];n==null?(this.table[t]=e,e.hnext=null):(e.hnext=n.hnext,n.hnext=e),this.cnt++}remove(e){let t=e.id*ji+e.di&Ii,n=this.table[t];if(n==e)this.table[t]=n.hnext;else if(n!=null){let s;for(;s=n,n=n.hnext,n!=null&&n!=e;);s.hnext=n.hnext}e.hnext=null,this.cnt--}hash(e,t){return e*ji+t&Ii}};var Ss=class{constructor(){this.elt=null;this.next=null}alloc(){}free(){this.elt=null}elem(){return this.elt}};Ss.zpp_pool=null;var dt=class{constructor(){this.head=null;this.length=0;this.modified=!1;this.pushmod=!1}_allocNode(){let e=this.constructor._NodeClass,t;return e.zpp_pool==null?t=new e:(t=e.zpp_pool,e.zpp_pool=t.next,t.next=null),t}_freeNode(e){let t=this.constructor._NodeClass;e.elt=null,e.next=t.zpp_pool,t.zpp_pool=e}begin(){return this.head}setbegin(e){this.head=e,this.modified=!0,this.pushmod=!0}add(e){let t=this._allocNode();return t.elt=e,t.next=this.head,this.head=t,this.modified=!0,this.length++,e}addAll(e){let t=e.head;for(;t!=null;)this.add(t.elt),t=t.next}insert(e,t){let n=this._allocNode();return n.elt=t,e==null?(n.next=this.head,this.head=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.head;this.head=e.next,this._freeNode(e),this.head==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.head.elt;return this.pop(),e}erase(e){let t,n;return e==null?(t=this.head,n=t.next,this.head=n,this.head==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),this._freeNode(t),this.modified=!0,this.length--,this.pushmod=!0,n}remove(e){let t=null,n=this.head;for(;n!=null;){if(n.elt==e){this.erase(t);break}t=n,n=n.next}}try_remove(e){let t=null,n=this.head,s=!1;for(;n!=null;){if(n.elt==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){for(;this.head!=null;){let e=this.head;this.head=e.next,this._freeNode(e),this.head==null&&(this.pushmod=!0),this.modified=!0,this.length--}this.pushmod=!0}reverse(){let e=this.head,t=null;for(;e!=null;){let n=e.next;e.next=t,this.head=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.head==null}size(){return this.length}has(e){let t=this.head;for(;t!=null;){if(t.elt==e)return!0;t=t.next}return!1}front(){return this.head.elt}back(){let e=this.head,t=e;for(;t!=null;)e=t,t=t.next;return e.elt}iterator_at(e){let t=this.head;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t!=null?t.elt:null}};dt.prototype.inlined_add=dt.prototype.add;dt.prototype.inlined_insert=dt.prototype.insert;dt.prototype.inlined_pop=dt.prototype.pop;dt.prototype.inlined_pop_unsafe=dt.prototype.pop_unsafe;dt.prototype.inlined_erase=dt.prototype.erase;dt.prototype.inlined_remove=dt.prototype.remove;dt.prototype.inlined_try_remove=dt.prototype.try_remove;dt.prototype.inlined_clear=dt.prototype.clear;dt.prototype.inlined_has=dt.prototype.has;var As=class{constructor(){this.colour=0;this.parent=null;this.next=null;this.prev=null;this.data=null;this.swapped=null;this.lt=null}_allocNode(){let e=this.constructor,t;return e.zpp_pool==null?t=new e:(t=e.zpp_pool,e.zpp_pool=t.next,t.next=null),t}_freeNode(e){let t=this.constructor;e.data=null,e.lt=null,e.swapped=null,e.next=t.zpp_pool,t.zpp_pool=e}free(){this.data=null,this.lt=null,this.swapped=null}alloc(){}verify(){if(!this.empty()){let e=this.parent;for(;e.prev!=null;)e=e.prev;for(;e!=null;){let t=e.data,n=!0;if(!this.empty()){let s=this.parent;for(;s.prev!=null;)s=s.prev;for(;s!=null;){let i=s.data;if(n){if(t==i)n=!1;else if(!this.lt(i,t)&&this.lt(t,i))return!1}else if(!this.lt(t,i)&&this.lt(i,t))return!1;if(s.next!=null)for(s=s.next;s.prev!=null;)s=s.prev;else{for(;s.parent!=null&&s==s.parent.next;)s=s.parent;s=s.parent}}}if(e.next!=null)for(e=e.next;e.prev!=null;)e=e.prev;else{for(;e.parent!=null&&e==e.parent.next;)e=e.parent;e=e.parent}}}return!0}empty(){return this.parent==null}singular(){return this.parent!=null&&this.parent.prev==null?this.parent.next==null:!1}size(){let e=0;if(!this.empty()){let t=this.parent;for(;t.prev!=null;)t=t.prev;for(;t!=null;)if(++e,t.next!=null)for(t=t.next;t.prev!=null;)t=t.prev;else{for(;t.parent!=null&&t==t.parent.next;)t=t.parent;t=t.parent}}return e}has(e){return this.find(e)!=null}find(e){let t=this.parent;for(;t!=null&&t.data!=e;)this.lt(e,t.data)?t=t.prev:t=t.next;return t}has_weak(e){return this.find_weak(e)!=null}find_weak(e){let t=this.parent;for(;t!=null;)if(this.lt(e,t.data))t=t.prev;else if(this.lt(t.data,e))t=t.next;else break;return t}lower_bound(e){let t=null;if(!this.empty()){let n=this.parent;for(;n.prev!=null;)n=n.prev;for(;n!=null;){if(!this.lt(n.data,e)){t=n.data;break}if(n.next!=null)for(n=n.next;n.prev!=null;)n=n.prev;else{for(;n.parent!=null&&n==n.parent.next;)n=n.parent;n=n.parent}}}return t}first(){let e=this.parent;for(;e.prev!=null;)e=e.prev;return e.data}pop_front(){let e=this.parent;for(;e.prev!=null;)e=e.prev;let t=e.data;return this.remove_node(e),t}remove(e){this.remove_node(this.find(e))}successor_node(e){if(e.next!=null)for(e=e.next;e.prev!=null;)e=e.prev;else{let t=e;for(e=e.parent;e!=null&&e.prev!=t;)t=e,e=e.parent}return e}predecessor_node(e){if(e.prev!=null)for(e=e.prev;e.next!=null;)e=e.next;else{let t=e;for(e=e.parent;e!=null&&e.next!=t;)t=e,e=e.parent}return e}successor(e){let t=this.successor_node(this.find(e));return t==null?null:t.data}predecessor(e){let t=this.predecessor_node(this.find(e));return t==null?null:t.data}remove_node(e){if(e.next!=null&&e.prev!=null){let s=e.next;for(;s.prev!=null;)s=s.prev;let i=e.data;e.data=s.data,s.data=i,this.swapped!=null&&this.swapped(e.data,s.data),e=s}let t=e.prev==null?e.next:e.prev;if(e.colour==1){if(e.prev!=null||e.next!=null)t.colour=1;else if(e.parent!=null){let s=e.parent;for(;;){s.colour++,s.prev.colour--,s.next.colour--;let i=s.prev;if(i.colour==-1){this.__fix_neg_red(i);break}else if(i.colour==0){if(i.prev!=null&&i.prev.colour==0){this.__fix_dbl_red(i.prev);break}if(i.next!=null&&i.next.colour==0){this.__fix_dbl_red(i.next);break}}let l=s.next;if(l.colour==-1){this.__fix_neg_red(l);break}else if(l.colour==0){if(l.prev!=null&&l.prev.colour==0){this.__fix_dbl_red(l.prev);break}if(l.next!=null&&l.next.colour==0){this.__fix_dbl_red(l.next);break}}if(s.colour==2)if(s.parent==null)s.colour=1;else{s=s.parent;continue}break}}}let n=e.parent;n==null?this.parent=t:n.prev==e?n.prev=t:n.next=t,t!=null&&(t.parent=n),e.parent=e.prev=e.next=null,this._freeNode(e)}clear(){if(this.parent!=null){let e=this.parent;for(;e!=null;)if(e.prev!=null)e=e.prev;else if(e.next!=null)e=e.next;else{let t=e.parent;t!=null&&(e==t.prev?t.prev=null:t.next=null,e.parent=null),this._freeNode(e),e=t}this.parent=null}}clear_with(e){if(this.parent==null)return;let t=this.parent;for(;t!=null;)if(t.prev!=null)t=t.prev;else if(t.next!=null)t=t.next;else{e(t.data);let n=t.parent;n!=null&&(t==n.prev?n.prev=null:n.next=null,t.parent=null),this._freeNode(t),t=n}this.parent=null}clear_node(e,t){t(e.data);let n=e.parent;return n!=null&&(e==n.prev?n.prev=null:n.next=null,e.parent=null),this._freeNode(e),n}__fix_neg_red(e){let t=e.parent,n;if(t.prev==e){let s=e.prev,i=e.next,l=i.prev,r=i.next;s.colour=0,e.colour=t.colour=1,e.next=l,l!=null&&(l.parent=e);let a=t.data;t.data=i.data,i.data=a,this.swapped!=null&&this.swapped(t.data,i.data),i.prev=r,r!=null&&(r.parent=i),i.next=t.next,t.next!=null&&(t.next.parent=i),t.next=i,i!=null&&(i.parent=t),n=s}else{let s=e.next,i=e.prev,l=i.next,r=i.prev;s.colour=0,e.colour=t.colour=1,e.prev=l,l!=null&&(l.parent=e);let a=t.data;t.data=i.data,i.data=a,this.swapped!=null&&this.swapped(t.data,i.data),i.next=r,r!=null&&(r.parent=i),i.prev=t.prev,t.prev!=null&&(t.prev.parent=i),t.prev=i,i!=null&&(i.parent=t),n=s}n.prev!=null&&n.prev.colour==0?this.__fix_dbl_red(n.prev):n.next!=null&&n.next.colour==0&&this.__fix_dbl_red(n.next)}__fix_dbl_red(e){for(;;){let t=e.parent,n=t.parent;if(n==null){t.colour=1;break}let s,i,l,r,a,o,p;t==n.prev?(l=n,p=n.next,e==t.prev?(s=e,i=t,r=e.prev,a=e.next,o=t.next):(s=t,i=e,r=t.prev,a=e.prev,o=e.next)):(s=n,r=n.prev,e==t.prev?(i=e,l=t,a=e.prev,o=e.next,p=t.next):(i=t,l=e,a=t.prev,o=e.prev,p=e.next));let c=n.parent;if(c==null?this.parent=i:c.prev==n?c.prev=i:c.next=i,i!=null&&(i.parent=c),s.prev=r,r!=null&&(r.parent=s),s.next=a,a!=null&&(a.parent=s),i.prev=s,s!=null&&(s.parent=i),i.next=l,l!=null&&(l.parent=i),l.prev=o,o!=null&&(o.parent=l),l.next=p,p!=null&&(p.parent=l),i.colour=n.colour-1,s.colour=1,l.colour=1,i==this.parent)this.parent.colour=1;else if(i.colour==0&&i.parent.colour==0){e=i;continue}break}}try_insert_bool(e){let t=null;if(this.parent==null)t=this._allocNode(),t.data=e,this.parent=t;else{let n=this.parent;for(;;)if(this.lt(e,n.data))if(n.prev==null){t=this._allocNode(),t.data=e,n.prev=t,t.parent=n;break}else n=n.prev;else if(this.lt(n.data,e))if(n.next==null){t=this._allocNode(),t.data=e,n.next=t,t.parent=n;break}else n=n.next;else break}return t==null?!1:(t.parent==null?t.colour=1:(t.colour=0,t.parent.colour==0&&this.__fix_dbl_red(t)),!0)}try_insert(e){let t=null,n=null;if(this.parent==null)t=this._allocNode(),t.data=e,this.parent=t;else for(n=this.parent;;)if(this.lt(e,n.data))if(n.prev==null){t=this._allocNode(),t.data=e,n.prev=t,t.parent=n;break}else n=n.prev;else if(this.lt(n.data,e))if(n.next==null){t=this._allocNode(),t.data=e,n.next=t,t.parent=n;break}else n=n.next;else break;return t==null?n:(t.parent==null?t.colour=1:(t.colour=0,t.parent.colour==0&&this.__fix_dbl_red(t)),t)}insert(e){let t=this._allocNode();if(t.data=e,this.parent==null)this.parent=t;else{let n=this.parent;for(;;)if(this.lt(t.data,n.data))if(n.prev==null){n.prev=t,t.parent=n;break}else n=n.prev;else if(n.next==null){n.next=t,t.parent=n;break}else n=n.next}return t.parent==null?t.colour=1:(t.colour=0,t.parent.colour==0&&this.__fix_dbl_red(t)),t}};As.zpp_pool=null;var di=null,rl=null,ys=null,Il=null,Vo=null,jl=null,ms=null,Qt=null,fs=null,Kn=null,bs=null,zs=null,Bl=null,Io=null,jo=null,Bo=null,To=null,Lo=null,Do=null,Fo=null,Ro=null;function qe(g){let e=class extends Ss{};return e.zpp_pool=null,e}function Ue(g,e){let t=class extends dt{};return t._NodeClass=e,t}function xi(g){let e=class extends As{};return e.zpp_pool=null,e}function Kl(g){g.util||(g.util={}),g.util.ZNPNode_ZPP_CbType=qe("ZPP_CbType"),g.util.ZNPNode_ZPP_CallbackSet=qe("ZPP_CallbackSet"),g.util.ZNPNode_ZPP_Shape=qe("ZPP_Shape"),g.util.ZNPNode_ZPP_Body=qe("ZPP_Body"),g.util.ZNPNode_ZPP_Constraint=qe("ZPP_Constraint"),g.util.ZNPNode_ZPP_Compound=qe("ZPP_Compound"),g.util.ZNPNode_ZPP_Arbiter=qe("ZPP_Arbiter"),g.util.ZNPNode_ZPP_InteractionListener=qe("ZPP_InteractionListener"),g.util.ZNPNode_ZPP_CbSet=qe("ZPP_CbSet"),g.util.ZNPNode_ZPP_Interactor=qe("ZPP_Interactor"),g.util.ZNPNode_ZPP_BodyListener=qe("ZPP_BodyListener"),g.util.ZNPNode_ZPP_CbSetPair=qe("ZPP_CbSetPair"),g.util.ZNPNode_ZPP_ConstraintListener=qe("ZPP_ConstraintListener"),g.util.ZNPNode_ZPP_CutInt=qe("ZPP_CutInt"),g.util.ZNPNode_ZPP_CutVert=qe("ZPP_CutVert"),g.util.ZNPNode_ZPP_PartitionVertex=qe("ZPP_PartitionVertex"),g.util.ZNPNode_ZPP_SimplifyP=qe("ZPP_SimplifyP"),g.util.ZNPNode_ZPP_PartitionedPoly=qe("ZPP_PartitionedPoly"),g.util.ZNPNode_ZPP_GeomVert=qe("ZPP_GeomVert"),g.util.ZNPNode_ZPP_SimpleVert=qe("ZPP_SimpleVert"),g.util.ZNPNode_ZPP_SimpleEvent=qe("ZPP_SimpleEvent"),g.util.ZNPNode_ZPP_Vec2=qe("ZPP_Vec2"),g.util.ZNPNode_ZPP_AABBPair=qe("ZPP_AABBPair"),g.util.ZNPNode_ZPP_Edge=qe("ZPP_Edge"),g.util.ZNPNode_ZPP_AABBNode=qe("ZPP_AABBNode"),g.util.ZNPNode_ZPP_Component=qe("ZPP_Component"),g.util.ZNPNode_ZPP_FluidArbiter=qe("ZPP_FluidArbiter"),g.util.ZNPNode_ZPP_SensorArbiter=qe("ZPP_SensorArbiter"),g.util.ZNPNode_ZPP_Listener=qe("ZPP_Listener"),g.util.ZNPNode_ZPP_ColArbiter=qe("ZPP_ColArbiter"),g.util.ZNPNode_ZPP_InteractionGroup=qe("ZPP_InteractionGroup"),g.util.ZNPNode_ZPP_ToiEvent=qe("ZPP_ToiEvent"),g.util.ZNPNode_ConvexResult=qe("ConvexResult"),g.util.ZNPNode_ZPP_GeomPoly=qe("ZPP_GeomPoly"),g.util.ZNPNode_RayResult=qe("RayResult");let e=g.util;jo=g.util.ZNPList_ZPP_InteractionListener=Ue("ZPP_InteractionListener",e.ZNPNode_ZPP_InteractionListener),Bo=g.util.ZNPList_ZPP_BodyListener=Ue("ZPP_BodyListener",e.ZNPNode_ZPP_BodyListener),To=g.util.ZNPList_ZPP_ConstraintListener=Ue("ZPP_ConstraintListener",e.ZNPNode_ZPP_ConstraintListener),Lo=g.util.ZNPList_ZPP_Constraint=Ue("ZPP_Constraint",e.ZNPNode_ZPP_Constraint),Do=g.util.ZNPList_ZPP_Interactor=Ue("ZPP_Interactor",e.ZNPNode_ZPP_Interactor),Fo=g.util.ZNPList_ZPP_CbSet=Ue("ZPP_CbSet",e.ZNPNode_ZPP_CbSet),Io=g.util.ZNPList_ZPP_CbType=Ue("ZPP_CbType",e.ZNPNode_ZPP_CbType),g.util.ZNPList_ZPP_Vec2=Ue("ZPP_Vec2",e.ZNPNode_ZPP_Vec2),Vo=g.util.ZNPList_ZPP_Vec2,g.util.ZNPList_ZPP_CallbackSet=Ue("ZPP_CallbackSet",e.ZNPNode_ZPP_CallbackSet),g.util.ZNPList_ZPP_Shape=Ue("ZPP_Shape",e.ZNPNode_ZPP_Shape),g.util.ZNPList_ZPP_Body=Ue("ZPP_Body",e.ZNPNode_ZPP_Body),g.util.ZNPList_ZPP_Compound=Ue("ZPP_Compound",e.ZNPNode_ZPP_Compound),g.util.ZNPList_ZPP_Arbiter=Ue("ZPP_Arbiter",e.ZNPNode_ZPP_Arbiter),Ro=g.util.ZNPList_ZPP_CbSetPair=Ue("ZPP_CbSetPair",e.ZNPNode_ZPP_CbSetPair),g.util.ZNPList_ZPP_CutInt=Ue("ZPP_CutInt",e.ZNPNode_ZPP_CutInt),g.util.ZNPList_ZPP_CutVert=Ue("ZPP_CutVert",e.ZNPNode_ZPP_CutVert),g.util.ZNPList_ZPP_PartitionVertex=Ue("ZPP_PartitionVertex",e.ZNPNode_ZPP_PartitionVertex),di=g.util.ZNPList_ZPP_PartitionVertex,g.util.ZNPList_ZPP_SimplifyP=Ue("ZPP_SimplifyP",e.ZNPNode_ZPP_SimplifyP),Il=g.util.ZNPList_ZPP_SimplifyP,g.util.ZNPList_ZPP_PartitionedPoly=Ue("ZPP_PartitionedPoly",e.ZNPNode_ZPP_PartitionedPoly),rl=g.util.ZNPList_ZPP_PartitionedPoly,g.util.ZNPList_ZPP_GeomVert=Ue("ZPP_GeomVert",e.ZNPNode_ZPP_GeomVert),ys=g.util.ZNPList_ZPP_GeomVert,g.util.ZNPList_ZPP_SimpleVert=Ue("ZPP_SimpleVert",e.ZNPNode_ZPP_SimpleVert),Bl=g.util.ZNPList_ZPP_SimpleEvent=Ue("ZPP_SimpleEvent",e.ZNPNode_ZPP_SimpleEvent),g.util.ZNPList_ZPP_AABBPair=Ue("ZPP_AABBPair",e.ZNPNode_ZPP_AABBPair),g.util.ZNPList_ZPP_Edge=Ue("ZPP_Edge",e.ZNPNode_ZPP_Edge),g.util.ZNPList_ZPP_AABBNode=Ue("ZPP_AABBNode",e.ZNPNode_ZPP_AABBNode),g.util.ZNPList_ZPP_Component=Ue("ZPP_Component",e.ZNPNode_ZPP_Component),g.util.ZNPList_ZPP_FluidArbiter=Ue("ZPP_FluidArbiter",e.ZNPNode_ZPP_FluidArbiter),g.util.ZNPList_ZPP_SensorArbiter=Ue("ZPP_SensorArbiter",e.ZNPNode_ZPP_SensorArbiter),g.util.ZNPList_ZPP_Listener=Ue("ZPP_Listener",e.ZNPNode_ZPP_Listener),g.util.ZNPList_ZPP_ColArbiter=Ue("ZPP_ColArbiter",e.ZNPNode_ZPP_ColArbiter),g.util.ZNPList_ZPP_InteractionGroup=Ue("ZPP_InteractionGroup",e.ZNPNode_ZPP_InteractionGroup),g.util.ZNPList_ZPP_ToiEvent=Ue("ZPP_ToiEvent",e.ZNPNode_ZPP_ToiEvent),g.util.ZNPList_ConvexResult=Ue("ConvexResult",e.ZNPNode_ConvexResult),g.util.ZNPList_ZPP_GeomPoly=Ue("ZPP_GeomPoly",e.ZNPNode_ZPP_GeomPoly),g.util.ZNPList_RayResult=Ue("RayResult",e.ZNPNode_RayResult),ms=g.util.ZNPNode_RayResult,jl=g.util.ZNPList_ZPP_SimpleVert,g.util.ZPP_Set_ZPP_Body=xi("ZPP_Body"),g.util.ZPP_Set_ZPP_CbSetPair=xi("ZPP_CbSetPair"),g.util.ZPP_Set_ZPP_PartitionVertex=xi("ZPP_PartitionVertex"),bs=g.util.ZPP_Set_ZPP_PartitionVertex,g.util.ZPP_Set_ZPP_PartitionPair=xi("ZPP_PartitionPair"),zs=g.util.ZPP_Set_ZPP_PartitionPair,g.util.ZPP_Set_ZPP_SimpleVert=xi("ZPP_SimpleVert"),Qt=g.util.ZPP_Set_ZPP_SimpleVert,g.util.ZPP_Set_ZPP_SimpleSeg=xi("ZPP_SimpleSeg"),fs=g.util.ZPP_Set_ZPP_SimpleSeg,g.util.ZPP_Set_ZPP_SimpleEvent=xi("ZPP_SimpleEvent"),Kn=g.util.ZPP_Set_ZPP_SimpleEvent,g.util.ZPP_Set_ZPP_CbSet=xi("ZPP_CbSet")}var zt=class zt{constructor(){this.outer_body=null;this.outer_con=null;this.outer_int=null;this.event=0;this.listener=null;this.space=null;this.index=0;this.next=null;this.prev=null;this.length=0;this.int1=null;this.int2=null;this.set=null;this.wrap_arbiters=null;this.pre_arbiter=null;this.pre_swapped=!1;this.body=null;this.constraint=null}wrapper_body(){return this.outer_body==null&&(zt.internal=!0,this.outer_body=zt._createBodyCb(),zt.internal=!1,this.outer_body.zpp_inner=this),this.outer_body}wrapper_con(){return this.outer_con==null&&(zt.internal=!0,this.outer_con=zt._createConCb(),zt.internal=!1,this.outer_con.zpp_inner=this),this.outer_con}wrapper_int(){let e=zt._zpp;return this.outer_int==null&&(zt.internal=!0,this.outer_int=zt._createIntCb(),zt.internal=!1,this.outer_int.zpp_inner=this),this.wrap_arbiters==null?this.wrap_arbiters=e.util.ZPP_ArbiterList.get(this.set.arbiters,!0):this.wrap_arbiters.zpp_inner.inner=this.set.arbiters,this.wrap_arbiters.zpp_inner.zip_length=!0,this.wrap_arbiters.zpp_inner.at_ite=null,this.outer_int}push(e){this.prev!=null?this.prev.next=e:this.next=e,e.prev=this.prev,e.next=null,this.prev=e,this.length++}push_rev(e){this.next!=null?this.next.prev=e:this.prev=e,e.next=this.next,e.prev=null,this.next=e,this.length++}pop(){let e=this.next;return this.next=e.next,this.next==null?this.prev=null:this.next.prev=null,this.length--,e}pop_rev(){let e=this.prev;return this.prev=e.prev,this.prev==null?this.next=null:this.prev.next=null,this.length--,e}empty(){return this.next==null}clear(){for(;!this.empty();)this.pop()}splice(e){let t=e.next;return e.prev==null?(this.next=e.next,this.next!=null?this.next.prev=null:this.prev=null):(e.prev.next=e.next,e.next!=null?e.next.prev=e.prev:this.prev=e.prev),this.length--,t}rotateL(){this.push(this.pop())}rotateR(){this.push_rev(this.pop_rev())}cycleNext(e){return e.next==null?this.next:e.next}cyclePrev(e){return e.prev==null?this.prev:e.prev}at(e){let t=this.next;for(;e--!=0;)t=t.next;return t}rev_at(e){let t=this.prev;for(;e--!=0;)t=t.prev;return t}free(){this.int1=this.int2=null,this.body=null,this.constraint=null,this.listener=null,this.wrap_arbiters!=null&&(this.wrap_arbiters.zpp_inner.inner=null),this.set=null}alloc(){}genarbs(){let e=zt._zpp;this.wrap_arbiters==null?this.wrap_arbiters=e.util.ZPP_ArbiterList.get(this.set.arbiters,!0):this.wrap_arbiters.zpp_inner.inner=this.set.arbiters,this.wrap_arbiters.zpp_inner.zip_length=!0,this.wrap_arbiters.zpp_inner.at_ite=null}};zt._nape=null,zt._zpp=null,zt.internal=!1,zt.zpp_pool=null,zt._createBodyCb=null,zt._createConCb=null,zt._createIntCb=null,zt._createPreCb=null;var Tt=zt;var Jt=class Jt{constructor(){this.count=0;this.next=null;this.id=0;this.manager=null;this.cbpairs=null;this.zip_listeners=!1;this.zip_bodylisteners=!1;this.zip_conlisteners=!1;this.interactors=null;this.wrap_interactors=null;this.constraints=null;this.wrap_constraints=null;let e=Jt._zpp;this.cbTypes=new e.util.ZNPList_ZPP_CbType,this.listeners=new e.util.ZNPList_ZPP_InteractionListener,this.zip_listeners=!0,this.bodylisteners=new e.util.ZNPList_ZPP_BodyListener,this.zip_bodylisteners=!0,this.conlisteners=new e.util.ZNPList_ZPP_ConstraintListener,this.zip_conlisteners=!0,this.constraints=new e.util.ZNPList_ZPP_Constraint,this.interactors=new e.util.ZNPList_ZPP_Interactor,this.id=e.ZPP_ID.CbSet(),this.cbpairs=new e.util.ZNPList_ZPP_CbSetPair}static setlt(e,t){let n=e.cbTypes.head,s=t.cbTypes.head;for(;n!=null&&s!=null;){let i=n.elt,l=s.elt;if(i.id<l.id)return!0;if(l.id<i.id)return!1;n=n.next,s=s.next}return s!=null?n==null:!1}static get(e){let t;Jt.zpp_pool==null?t=new Jt:(t=Jt.zpp_pool,Jt.zpp_pool=t.next,t.next=null);let n=null,s=e.head;for(;s!=null;){let i=s.elt;n=t.cbTypes.insert(n,i),i.cbsets.add(t),s=s.next}return t}static compatible(e,t,n){let s,i=e.options1,l=t.cbTypes;if(i.nonemptyintersection(l,i.includes)&&!i.nonemptyintersection(l,i.excludes)){let r=e.options2,a=n.cbTypes;s=r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)}else s=!1;if(s)return!0;{let r=e.options2,a=t.cbTypes;if(r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)){let o=e.options1,p=n.cbTypes;return o.nonemptyintersection(p,o.includes)?!o.nonemptyintersection(p,o.excludes):!1}else return!1}}static findOrCreatePair(e,t){let n=Jt._zpp,s=null,l=(e.cbpairs.length<t.cbpairs.length?e.cbpairs:t.cbpairs).head;for(;l!=null;){let r=l.elt;if(r.a==e&&r.b==t||r.a==t&&r.b==e){s=r;break}l=l.next}if(s==null){let r;n.callbacks.ZPP_CbSetPair.zpp_pool==null?r=new n.callbacks.ZPP_CbSetPair:(r=n.callbacks.ZPP_CbSetPair.zpp_pool,n.callbacks.ZPP_CbSetPair.zpp_pool=r.next,r.next=null),r.zip_listeners=!0,Jt.setlt(e,t)?(r.a=e,r.b=t):(r.a=t,r.b=e),s=r,e.cbpairs.add(s),t!=e&&t.cbpairs.add(s)}return s.zip_listeners&&(s.zip_listeners=!1,s.__validate()),s}static empty_intersection(e,t){return Jt.findOrCreatePair(e,t).listeners.head==null}static single_intersection(e,t,n){let i=Jt.findOrCreatePair(e,t).listeners.head;return i!=null&&i.elt==n?i.next==null:!1}static find_all(e,t,n,s){let l=Jt.findOrCreatePair(e,t).listeners.head;for(;l!=null;){let r=l.elt;r.event==n&&s(r),l=l.next}}increment(){this.count++}decrement(){return--this.count==0}invalidate_pairs(){let e=this.cbpairs.head;for(;e!=null;){let t=e.elt;t.zip_listeners=!0,e=e.next}}invalidate_listeners(){this.zip_listeners=!0,this.invalidate_pairs()}validate_listeners(){this.zip_listeners&&(this.zip_listeners=!1,this.realvalidate_listeners())}realvalidate_listeners(){let e=Jt._zpp;this.listeners.clear();let t=this.cbTypes.head;for(;t!=null;){let n=t.elt,s=null,i=this.listeners.head,l=n.listeners.head;for(;l!=null;){let r=l.elt;if(i!=null&&i.elt==r)l=l.next,s=i,i=i.next;else{let a;if(i!=null){let o=i.elt;a=r.precedence>o.precedence||r.precedence==o.precedence&&r.id>o.id}else a=!0;if(a){if(r.space==this.manager.space){let o=this.listeners,p;e.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?p=new e.util.ZNPNode_ZPP_InteractionListener:(p=e.util.ZNPNode_ZPP_InteractionListener.zpp_pool,e.util.ZNPNode_ZPP_InteractionListener.zpp_pool=p.next,p.next=null),p.elt=r;let c=p;s==null?(c.next=o.head,o.head=c):(c.next=s.next,s.next=c),o.pushmod=o.modified=!0,o.length++,s=c}l=l.next}else s=i,i=i.next}}t=t.next}}invalidate_bodylisteners(){this.zip_bodylisteners=!0}validate_bodylisteners(){this.zip_bodylisteners&&(this.zip_bodylisteners=!1,this.realvalidate_bodylisteners())}realvalidate_bodylisteners(){let e=Jt._zpp;this.bodylisteners.clear();let t=this.cbTypes.head;for(;t!=null;){let n=t.elt,s=null,i=this.bodylisteners.head,l=n.bodylisteners.head;for(;l!=null;){let r=l.elt;if(i!=null&&i.elt==r)l=l.next,s=i,i=i.next;else{let a;if(i!=null){let o=i.elt;a=r.precedence>o.precedence||r.precedence==o.precedence&&r.id>o.id}else a=!0;if(a){let o=r.options;if(!o.nonemptyintersection(this.cbTypes,o.excludes)&&r.space==this.manager.space){let p=this.bodylisteners,c;e.util.ZNPNode_ZPP_BodyListener.zpp_pool==null?c=new e.util.ZNPNode_ZPP_BodyListener:(c=e.util.ZNPNode_ZPP_BodyListener.zpp_pool,e.util.ZNPNode_ZPP_BodyListener.zpp_pool=c.next,c.next=null),c.elt=r;let h=c;s==null?(h.next=p.head,p.head=h):(h.next=s.next,s.next=h),p.pushmod=p.modified=!0,p.length++,s=h}l=l.next}else s=i,i=i.next}}t=t.next}}invalidate_conlisteners(){this.zip_conlisteners=!0}validate_conlisteners(){this.zip_conlisteners&&(this.zip_conlisteners=!1,this.realvalidate_conlisteners())}realvalidate_conlisteners(){let e=Jt._zpp;this.conlisteners.clear();let t=this.cbTypes.head;for(;t!=null;){let n=t.elt,s=null,i=this.conlisteners.head,l=n.conlisteners.head;for(;l!=null;){let r=l.elt;if(i!=null&&i.elt==r)l=l.next,s=i,i=i.next;else{let a;if(i!=null){let o=i.elt;a=r.precedence>o.precedence||r.precedence==o.precedence&&r.id>o.id}else a=!0;if(a){let o=r.options;if(!o.nonemptyintersection(this.cbTypes,o.excludes)&&r.space==this.manager.space){let p=this.conlisteners,c;e.util.ZNPNode_ZPP_ConstraintListener.zpp_pool==null?c=new e.util.ZNPNode_ZPP_ConstraintListener:(c=e.util.ZNPNode_ZPP_ConstraintListener.zpp_pool,e.util.ZNPNode_ZPP_ConstraintListener.zpp_pool=c.next,c.next=null),c.elt=r;let h=c;s==null?(h.next=p.head,p.head=h):(h.next=s.next,s.next=h),p.pushmod=p.modified=!0,p.length++,s=h}l=l.next}else s=i,i=i.next}}t=t.next}}validate(){this.zip_listeners&&(this.zip_listeners=!1,this.realvalidate_listeners()),this.zip_bodylisteners&&(this.zip_bodylisteners=!1,this.realvalidate_bodylisteners()),this.zip_conlisteners&&(this.zip_conlisteners=!1,this.realvalidate_conlisteners())}addConstraint(e){this.constraints.add(e)}addInteractor(e){this.interactors.add(e)}remConstraint(e){this.constraints.remove(e)}remInteractor(e){this.interactors.remove(e)}free(){for(this.listeners.clear(),this.zip_listeners=!0,this.bodylisteners.clear(),this.zip_bodylisteners=!0,this.conlisteners.clear(),this.zip_conlisteners=!0;this.cbTypes.head!=null;)this.cbTypes.pop_unsafe().cbsets.remove(this)}alloc(){}};Jt._zpp=null,Jt.zpp_pool=null;var _t=Jt;var Gn=class Gn{constructor(){this.a=null;this.b=null;this.next=null;this.zip_listeners=!1;this.listeners=null;let e=Gn._zpp;this.listeners=new e.util.ZNPList_ZPP_InteractionListener}static get(e,t){let n=Gn._zpp,s;return Gn.zpp_pool==null?s=new Gn:(s=Gn.zpp_pool,Gn.zpp_pool=s.next,s.next=null),s.zip_listeners=!0,n.callbacks.ZPP_CbSet.setlt(e,t)?(s.a=e,s.b=t):(s.a=t,s.b=e),s}static setlt(e,t){let n=Gn._zpp;return n.callbacks.ZPP_CbSet.setlt(e.a,t.a)?!0:e.a==t.a?n.callbacks.ZPP_CbSet.setlt(e.b,t.b):!1}free(){this.a=this.b=null,this.listeners.clear()}alloc(){this.zip_listeners=!0}compatible(e){let t,n=e.options1,s=this.a.cbTypes;if(n.nonemptyintersection(s,n.includes)&&!n.nonemptyintersection(s,n.excludes)){let i=e.options2,l=this.b.cbTypes;t=i.nonemptyintersection(l,i.includes)&&!i.nonemptyintersection(l,i.excludes)}else t=!1;if(t)return!0;{let i=e.options2,l=this.a.cbTypes;if(i.nonemptyintersection(l,i.includes)&&!i.nonemptyintersection(l,i.excludes)){let r=e.options1,a=this.b.cbTypes;return r.nonemptyintersection(a,r.includes)?!r.nonemptyintersection(a,r.excludes):!1}else return!1}}invalidate(){this.zip_listeners=!0}validate(){this.zip_listeners&&(this.zip_listeners=!1,this.__validate())}__validate(){this.listeners.clear();let e=this.a.listeners.head,t=this.b.listeners.head;for(;e!=null&&t!=null;){let n=e.elt,s=t.elt;if(n==s){let i,l,r=n.options1,a=this.a.cbTypes;if(r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)){let o=n.options2,p=this.b.cbTypes;l=o.nonemptyintersection(p,o.includes)&&!o.nonemptyintersection(p,o.excludes)}else l=!1;if(l)i=!0;else{let o=n.options2,p=this.a.cbTypes;if(o.nonemptyintersection(p,o.includes)&&!o.nonemptyintersection(p,o.excludes)){let c=n.options1,h=this.b.cbTypes;i=c.nonemptyintersection(h,c.includes)&&!c.nonemptyintersection(h,c.excludes)}else i=!1}i&&this.listeners.add(n),e=e.next,t=t.next}else n.precedence>s.precedence||n.precedence==s.precedence&&n.id>s.id?e=e.next:t=t.next}}empty_intersection(){return this.listeners.head==null}single_intersection(e){let t=this.listeners.head;return t!=null&&t.elt==e?t.next==null:!1}forall(e,t){let n=this.listeners.head;for(;n!=null;){let s=n.elt;s.event==e&&t(s),n=n.next}}};Gn._zpp=null,Gn.zpp_pool=null;var Ne=Gn;var rn=class rn{constructor(){this.outer=null;this.userData=null;this.id=0;this.cbsets=null;this.interactors=null;this.wrap_interactors=null;this.constraints=null;this.wrap_constraints=null;this.listeners=null;this.bodylisteners=null;this.conlisteners=null;let e=rn._zpp;this.id=e.ZPP_ID.CbType(),this.listeners=new e.util.ZNPList_ZPP_InteractionListener,this.bodylisteners=new e.util.ZNPList_ZPP_BodyListener,this.conlisteners=new e.util.ZNPList_ZPP_ConstraintListener,this.constraints=new e.util.ZNPList_ZPP_Constraint,this.interactors=new e.util.ZNPList_ZPP_Interactor,this.cbsets=new e.util.ZNPList_ZPP_CbSet}static _initEnums(e){rn.ANY_SHAPE=new e.callbacks.CbType,rn.ANY_BODY=new e.callbacks.CbType,rn.ANY_COMPOUND=new e.callbacks.CbType,rn.ANY_CONSTRAINT=new e.callbacks.CbType}static setlt(e,t){return e.id<t.id}addInteractor(e){this.interactors.add(e)}remInteractor(e){this.interactors.remove(e)}addConstraint(e){this.constraints.add(e)}remConstraint(e){this.constraints.remove(e)}addint(e){let t=rn._zpp,n=null,s=this.listeners.head;for(;s!=null;){let a=s.elt;if(e.precedence>a.precedence||e.precedence===a.precedence&&e.id>a.id)break;n=s,s=s.next}let i=this.listeners,l;t.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?l=new t.util.ZNPNode_ZPP_InteractionListener:(l=t.util.ZNPNode_ZPP_InteractionListener.zpp_pool,t.util.ZNPNode_ZPP_InteractionListener.zpp_pool=l.next,l.next=null),l.elt=e,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++;let r=this.cbsets.head;for(;r!=null;)r.elt.zip_listeners=!0,r.elt.invalidate_pairs(),r=r.next}removeint(e){this.listeners.remove(e);let t=this.cbsets.head;for(;t!=null;)t.elt.zip_listeners=!0,t.elt.invalidate_pairs(),t=t.next}invalidateint(){let e=this.cbsets.head;for(;e!=null;)e.elt.zip_listeners=!0,e.elt.invalidate_pairs(),e=e.next}addbody(e){let t=rn._zpp,n=null,s=this.bodylisteners.head;for(;s!=null;){let a=s.elt;if(e.precedence>a.precedence||e.precedence===a.precedence&&e.id>a.id)break;n=s,s=s.next}let i=this.bodylisteners,l;t.util.ZNPNode_ZPP_BodyListener.zpp_pool==null?l=new t.util.ZNPNode_ZPP_BodyListener:(l=t.util.ZNPNode_ZPP_BodyListener.zpp_pool,t.util.ZNPNode_ZPP_BodyListener.zpp_pool=l.next,l.next=null),l.elt=e,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++;let r=this.cbsets.head;for(;r!=null;)r.elt.zip_bodylisteners=!0,r=r.next}removebody(e){this.bodylisteners.remove(e);let t=this.cbsets.head;for(;t!=null;)t.elt.zip_bodylisteners=!0,t=t.next}invalidatebody(){let e=this.cbsets.head;for(;e!=null;)e.elt.zip_bodylisteners=!0,e=e.next}addconstraint(e){let t=rn._zpp,n=null,s=this.conlisteners.head;for(;s!=null;){let a=s.elt;if(e.precedence>a.precedence||e.precedence===a.precedence&&e.id>a.id)break;n=s,s=s.next}let i=this.conlisteners,l;t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool==null?l=new t.util.ZNPNode_ZPP_ConstraintListener:(l=t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool,t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool=l.next,l.next=null),l.elt=e,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++;let r=this.cbsets.head;for(;r!=null;)r.elt.zip_conlisteners=!0,r=r.next}removeconstraint(e){this.conlisteners.remove(e);let t=this.cbsets.head;for(;t!=null;)t.elt.zip_conlisteners=!0,t=t.next}invalidateconstraint(){let e=this.cbsets.head;for(;e!=null;)e.elt.zip_conlisteners=!0,e=e.next}};rn._zpp=null,rn.ANY_SHAPE=null,rn.ANY_BODY=null,rn.ANY_COMPOUND=null,rn.ANY_CONSTRAINT=null;var an=rn;var li=class li{constructor(){this.space=null;this.interaction=null;this.constraint=null;this.body=null;this.precedence=0;this.event=0;this.type=0;this.id=0;this.outer=null;this.id=_n.Listener()}static setlt(e,t){return e.precedence<=t.precedence?e.precedence==t.precedence?e.id>t.id:!1:!0}swapEvent(e){}invalidate_precedence(){}addedToSpace(){}removedFromSpace(){}static _initEnums(e,t){let n=()=>{t.internal=!0;let i=new e.callbacks.ListenerType;return t.internal=!1,i};t.ListenerType_BODY==null&&(t.ListenerType_BODY=n()),t.ListenerType_CONSTRAINT==null&&(t.ListenerType_CONSTRAINT=n()),t.ListenerType_INTERACTION==null&&(t.ListenerType_INTERACTION=n()),t.ListenerType_PRE==null&&(t.ListenerType_PRE=n()),li.types=[t.ListenerType_BODY,t.ListenerType_CONSTRAINT,t.ListenerType_INTERACTION,t.ListenerType_PRE];let s=()=>{t.internal=!0;let i=new e.callbacks.CbEvent;return t.internal=!1,i};t.CbEvent_BEGIN==null&&(t.CbEvent_BEGIN=s()),t.CbEvent_END==null&&(t.CbEvent_END=s()),t.CbEvent_WAKE==null&&(t.CbEvent_WAKE=s()),t.CbEvent_SLEEP==null&&(t.CbEvent_SLEEP=s()),t.CbEvent_BREAK==null&&(t.CbEvent_BREAK=s()),t.CbEvent_PRE==null&&(t.CbEvent_PRE=s()),t.CbEvent_ONGOING==null&&(t.CbEvent_ONGOING=s()),li.events=[t.CbEvent_BEGIN,t.CbEvent_END,t.CbEvent_WAKE,t.CbEvent_SLEEP,t.CbEvent_BREAK,t.CbEvent_PRE,t.CbEvent_ONGOING]}};li._nape=null,li._zpp=null,li.internal=!1,li.types=[],li.events=[];var Lt=li;var al=class extends Lt{constructor(t,n,s){super();this.handler=null;this.options=null;this.outer_zn=null;this.event=n,this.handler=s,this.body=this,this.type=0,this.options=t.zpp_inner}immutable_options(){if(this.space!=null&&this.space.midstep)throw new Error("Error: Cannot change listener type options during space.step()")}addedToSpace(){let t=Lt._zpp;this.options.handler=(s,i,l)=>this.cbtype_change(s,i,l);let n=this.options.includes.head;for(;n!=null;){let s=n.elt,i=null,l=s.bodylisteners.head;for(;l!=null;){let c=l.elt;if(this.precedence>c.precedence||this.precedence==c.precedence&&this.id>c.id)break;i=l,l=l.next}let r=s.bodylisteners,a;t.util.ZNPNode_ZPP_BodyListener.zpp_pool==null?a=new t.util.ZNPNode_ZPP_BodyListener:(a=t.util.ZNPNode_ZPP_BodyListener.zpp_pool,t.util.ZNPNode_ZPP_BodyListener.zpp_pool=a.next,a.next=null),a.elt=this;let o=a;i==null?(o.next=r.head,r.head=o):(o.next=i.next,i.next=o),r.pushmod=r.modified=!0,r.length++;let p=s.cbsets.head;for(;p!=null;){let c=p.elt;c.zip_bodylisteners=!0,p=p.next}n=n.next}}removedFromSpace(){let t=this.options.includes.head;for(;t!=null;){let n=t.elt;n.bodylisteners.remove(this);let s=n.cbsets.head;for(;s!=null;){let i=s.elt;i.zip_bodylisteners=!0,s=s.next}t=t.next}this.options.handler=null}cbtype_change(t,n,s){this.removedFromSpace();let i=this.options;n?s?i.effect_change(t,!0,!0):i.includes.remove(t):s?i.effect_change(t,!1,!0):i.excludes.remove(t),this.addedToSpace()}invalidate_precedence(){this.space!=null&&(this.removedFromSpace(),this.addedToSpace())}swapEvent(t){if(t!=2&&t!=3)throw new Error("Error: BodyListener event must be either WAKE or SLEEP only");this.removedFromSpace(),this.event=t,this.addedToSpace()}};var pl=class extends Lt{constructor(t,n,s){super();this.handler=null;this.options=null;this.outer_zn=null;this.event=n,this.handler=s,this.constraint=this,this.type=1,this.options=t.zpp_inner}immutable_options(){if(this.space!=null&&this.space.midstep)throw new Error("Error: Cannot change listener type options during space.step()")}addedToSpace(){let t=Lt._zpp;this.options.handler=(s,i,l)=>this.cbtype_change(s,i,l);let n=this.options.includes.head;for(;n!=null;){let s=n.elt,i=null,l=s.conlisteners.head;for(;l!=null;){let c=l.elt;if(this.precedence>c.precedence||this.precedence==c.precedence&&this.id>c.id)break;i=l,l=l.next}let r=s.conlisteners,a;t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool==null?a=new t.util.ZNPNode_ZPP_ConstraintListener:(a=t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool,t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool=a.next,a.next=null),a.elt=this;let o=a;i==null?(o.next=r.head,r.head=o):(o.next=i.next,i.next=o),r.pushmod=r.modified=!0,r.length++;let p=s.cbsets.head;for(;p!=null;){let c=p.elt;c.zip_conlisteners=!0,p=p.next}n=n.next}}removedFromSpace(){let t=this.options.includes.head;for(;t!=null;){let n=t.elt;n.conlisteners.remove(this);let s=n.cbsets.head;for(;s!=null;){let i=s.elt;i.zip_conlisteners=!0,s=s.next}t=t.next}this.options.handler=null}cbtype_change(t,n,s){this.removedFromSpace();let i=this.options;n?s?i.effect_change(t,!0,!0):i.includes.remove(t):s?i.effect_change(t,!1,!0):i.excludes.remove(t),this.addedToSpace()}invalidate_precedence(){this.space!=null&&(this.removedFromSpace(),this.addedToSpace())}swapEvent(t){if(t!=2&&t!=3&&t!=4)throw new Error("Error: ConstraintListener event must be either WAKE or SLEEP only");this.removedFromSpace(),this.event=t,this.addedToSpace()}};var Ct=class Ct extends Lt{constructor(t,n,s,i){super();this.outer_zni=null;this.outer_znp=null;this.itype=0;this.handleri=null;this.allowSleepingCallbacks=!1;this.pure=!1;this.handlerp=null;this.type=i,this.interaction=this,this.event=s,this.options1=t.zpp_inner,this.options2=n.zpp_inner,this.allowSleepingCallbacks=!1}setInteractionType(t){this.itype=t}wake(){let t=this.options1.includes.head,n=this.options2.includes.head;for(;t!=null&&n!=null;){let s=t.elt,i=n.elt;if(s==i){let l=s.interactors.head;for(;l!=null;)l.elt.wake(),l=l.next;t=t.next,n=n.next}else if(s.id<i.id){let l=s.interactors.head;for(;l!=null;)l.elt.wake(),l=l.next;t=t.next}else{let l=i.interactors.head;for(;l!=null;)l.elt.wake(),l=l.next;n=n.next}}for(;t!=null;){let s=t.elt.interactors.head;for(;s!=null;)s.elt.wake(),s=s.next;t=t.next}for(;n!=null;){let s=n.elt.interactors.head;for(;s!=null;)s.elt.wake(),s=s.next;n=n.next}}CbSetset(t,n,s){let i=Lt._zpp,l=Ct.UCbSet,r=Ct.VCbSet,a=Ct.WCbSet,o=t.head,p=n.head;for(;o!=null&&p!=null;){let c=o.elt,h=p.elt;if(c==h){let u=this._allocCbSetNode(i);u.elt=c,u.next=a.head,a.head=u,a.modified=!0,a.length++,o=o.next,p=p.next}else if(i.callbacks.ZPP_CbSet.setlt(c,h)){let u=this._allocCbSetNode(i);u.elt=c,u.next=l.head,l.head=u,l.modified=!0,l.length++,o=o.next}else{let u=this._allocCbSetNode(i);u.elt=h,u.next=r.head,r.head=u,r.modified=!0,r.length++,p=p.next}}for(;o!=null;){let c=this._allocCbSetNode(i);c.elt=o.elt,c.next=l.head,l.head=c,l.modified=!0,l.length++,o=o.next}for(;p!=null;){let c=this._allocCbSetNode(i);c.elt=p.elt,c.next=r.head,r.head=c,r.modified=!0,r.length++,p=p.next}for(;l.head!=null;){let c=l.pop_unsafe(),h=n.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;r.head!=null;){let c=r.pop_unsafe(),h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;a.head!=null;){let c=a.pop_unsafe();s(c,c);let h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}}CbTypeset(t,n,s){let i=Lt._zpp,l=Ct.UCbType,r=Ct.VCbType,a=Ct.WCbType,o=t.head,p=n.head;for(;o!=null&&p!=null;){let c=o.elt,h=p.elt;if(c==h){let u=this._allocCbTypeNode(i);u.elt=c,u.next=a.head,a.head=u,a.modified=!0,a.length++,o=o.next,p=p.next}else if(c.id<h.id){let u=this._allocCbTypeNode(i);u.elt=c,u.next=l.head,l.head=u,l.modified=!0,l.length++,o=o.next}else{let u=this._allocCbTypeNode(i);u.elt=h,u.next=r.head,r.head=u,r.modified=!0,r.length++,p=p.next}}for(;o!=null;){let c=this._allocCbTypeNode(i);c.elt=o.elt,c.next=l.head,l.head=c,l.modified=!0,l.length++,o=o.next}for(;p!=null;){let c=this._allocCbTypeNode(i);c.elt=p.elt,c.next=r.head,r.head=c,r.modified=!0,r.length++,p=p.next}for(;l.head!=null;){let c=l.pop_unsafe(),h=n.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;r.head!=null;){let c=r.pop_unsafe(),h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;a.head!=null;){let c=a.pop_unsafe();s(c,c);let h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}}with_uniquesets(t){let n=Lt._zpp,s;if(n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool==null?s=new n.util.ZPP_Set_ZPP_CbSetPair:(s=n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool,n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool=s.next,s.next=null),s.lt=n.callbacks.ZPP_CbSetPair.setlt,this.CbTypeset(this.options1.includes,this.options2.includes,(l,r)=>{this.CbSetset(l.cbsets,r.cbsets,(a,o)=>{if(a.validate(),o.validate(),n.callbacks.ZPP_CbSet.single_intersection(a,o,this)){let p;n.callbacks.ZPP_CbSetPair.zpp_pool==null?p=new n.callbacks.ZPP_CbSetPair:(p=n.callbacks.ZPP_CbSetPair.zpp_pool,n.callbacks.ZPP_CbSetPair.zpp_pool=p.next,p.next=null),p.zip_listeners=!0,n.callbacks.ZPP_CbSet.setlt(a,o)?(p.a=a,p.b=o):(p.a=o,p.b=a),s.try_insert(p)}})}),s.parent!=null){let l=s.parent;for(;l!=null;)if(l.prev!=null)l=l.prev;else if(l.next!=null)l=l.next;else{let r=l.data;t?this.space.freshListenerType(r.a,r.b):this.space.nullListenerType(r.a,r.b);let a=r;a.a=a.b=null,a.listeners.clear(),a.next=n.callbacks.ZPP_CbSetPair.zpp_pool,n.callbacks.ZPP_CbSetPair.zpp_pool=a;let o=l.parent;o!=null&&(l==o.prev?o.prev=null:o.next=null,l.parent=null);let p=l;p.data=null,p.lt=null,p.swapped=null,p.next=n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool,n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool=p,l=o}s.parent=null}let i=s;i.data=null,i.lt=null,i.swapped=null,i.next=n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool,n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool=i}with_union(t){let n=this.options1.includes.head,s=this.options2.includes.head;for(;n!=null&&s!=null;){let i=n.elt,l=s.elt;i==l?(t(i),n=n.next,s=s.next):i.id<l.id?(t(i),n=n.next):(t(l),s=s.next)}for(;n!=null;)t(n.elt),n=n.next;for(;s!=null;)t(s.elt),s=s.next}addedToSpace(){let t=Lt._zpp,n=this.type==3;this.with_union(s=>{let i=null,l=s.listeners.head;for(;l!=null;){let c=l.elt;if(this.precedence>c.precedence||this.precedence==c.precedence&&this.id>c.id)break;i=l,l=l.next}let r=s.listeners,a;t.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?a=new t.util.ZNPNode_ZPP_InteractionListener:(a=t.util.ZNPNode_ZPP_InteractionListener.zpp_pool,t.util.ZNPNode_ZPP_InteractionListener.zpp_pool=a.next,a.next=null),a.elt=this;let o=a;i==null?(o.next=r.head,r.head=o):(o.next=i.next,i.next=o),r.pushmod=r.modified=!0,r.length++;let p=s.cbsets.head;for(;p!=null;){let c=p.elt;c.zip_listeners=!0,c.invalidate_pairs(),p=p.next}if(n){let c=s.interactors.head;for(;c!=null;)c.elt.wake(),c=c.next}}),this.options1.handler=(s,i,l)=>this.cbtype_change1(s,i,l),this.options2.handler=(s,i,l)=>this.cbtype_change2(s,i,l),this.with_uniquesets(!0)}removedFromSpace(){this.with_uniquesets(!1);let t=this.type==3;this.with_union(n=>{n.listeners.remove(this);let s=n.cbsets.head;for(;s!=null;){let i=s.elt;i.zip_listeners=!0,i.invalidate_pairs(),s=s.next}if(t){let i=n.interactors.head;for(;i!=null;)i.elt.wake(),i=i.next}}),this.options1.handler=null,this.options2.handler=null}invalidate_precedence(){this.space!=null&&(this.removedFromSpace(),this.addedToSpace())}cbtype_change1(t,n,s){this.cbtype_change(this.options1,t,n,s)}cbtype_change2(t,n,s){this.cbtype_change(this.options2,t,n,s)}cbtype_change(t,n,s,i){this.removedFromSpace(),s?i?t.effect_change(n,!0,!0):t.includes.remove(n):i?t.effect_change(n,!1,!0):t.excludes.remove(n),this.addedToSpace()}swapEvent(t){if(this.type==3)throw new Error("Error: PreListener event can only be PRE");if(t!=0&&t!=1&&t!=6)throw new Error("Error: InteractionListener event must be either BEGIN, END, ONGOING");this.removedFromSpace(),this.event=t,this.addedToSpace()}_allocCbSetNode(t){let n;return t.util.ZNPNode_ZPP_CbSet.zpp_pool==null?n=new t.util.ZNPNode_ZPP_CbSet:(n=t.util.ZNPNode_ZPP_CbSet.zpp_pool,t.util.ZNPNode_ZPP_CbSet.zpp_pool=n.next,n.next=null),n}_allocCbTypeNode(t){let n;return t.util.ZNPNode_ZPP_CbType.zpp_pool==null?n=new t.util.ZNPNode_ZPP_CbType:(n=t.util.ZNPNode_ZPP_CbType.zpp_pool,t.util.ZNPNode_ZPP_CbType.zpp_pool=n.next,n.next=null),n}static _initStatics(t){Ct.UCbSet=new t.util.ZNPList_ZPP_CbSet,Ct.VCbSet=new t.util.ZNPList_ZPP_CbSet,Ct.WCbSet=new t.util.ZNPList_ZPP_CbSet,Ct.UCbType=new t.util.ZNPList_ZPP_CbType,Ct.VCbType=new t.util.ZNPList_ZPP_CbType,Ct.WCbType=new t.util.ZNPList_ZPP_CbType}};Ct.UCbSet=null,Ct.VCbSet=null,Ct.WCbSet=null,Ct.UCbType=null,Ct.VCbType=null,Ct.WCbType=null;var cl=Ct;var Yn=class Yn{constructor(){this.outer=null;this.handler=null;this.includes=null;this.excludes=null;this.wrap_includes=null;this.wrap_excludes=null;let e=Yn._zpp;this.includes=new e.util.ZNPList_ZPP_CbType,this.excludes=new e.util.ZNPList_ZPP_CbType}static argument(e){let t=Yn._nape;return e==null?new t.callbacks.OptionType:e instanceof t.callbacks.OptionType?e:new t.callbacks.OptionType().including(e)}setup_includes(){let e=Yn._zpp;this.wrap_includes=e.util.ZPP_CbTypeList.get(this.includes,!0)}setup_excludes(){let e=Yn._zpp;this.wrap_excludes=e.util.ZPP_CbTypeList.get(this.excludes,!0)}excluded(e){return this.nonemptyintersection(e,this.excludes)}included(e){return this.nonemptyintersection(e,this.includes)}compatible(e){return this.nonemptyintersection(e,this.includes)?!this.nonemptyintersection(e,this.excludes):!1}nonemptyintersection(e,t){let n=!1,s=e.head,i=t.head;for(;i!=null&&s!=null;){let l=i.elt,r=s.elt;if(l===r){n=!0;break}else l.id<r.id?i=i.next:s=s.next}return n}insertOrdered(e,t){let n=Yn._zpp,s=null,i=e.head;for(;i!=null;){let r=i.elt;if(t.id<r.id)break;s=i,i=i.next}let l;n.util.ZNPNode_ZPP_CbType.zpp_pool==null?l=new n.util.ZNPNode_ZPP_CbType:(l=n.util.ZNPNode_ZPP_CbType.zpp_pool,n.util.ZNPNode_ZPP_CbType.zpp_pool=l.next,l.next=null),l.elt=t,s==null?(l.next=e.head,e.head=l):(l.next=s.next,s.next=l),e.pushmod=e.modified=!0,e.length++}effect_change(e,t,n){t?n?this.insertOrdered(this.includes,e):this.includes.remove(e):n?this.insertOrdered(this.excludes,e):this.excludes.remove(e)}append_type(e,t){e===this.includes?this.includes.has(t)||(this.excludes.has(t)?this.handler!=null?this.handler(t,!1,!1):this.excludes.remove(t):this.handler!=null?this.handler(t,!0,!0):this.insertOrdered(this.includes,t)):this.excludes.has(t)||(this.includes.has(t)?this.handler!=null?this.handler(t,!0,!1):this.includes.remove(t):this.handler!=null?this.handler(t,!1,!0):this.insertOrdered(this.excludes,t))}set(e){if(e!==this){for(;this.includes.head!=null;)this.append_type(this.excludes,this.includes.head.elt);for(;this.excludes.head!=null;)this.append_type(this.includes,this.excludes.head.elt);let t=e.excludes.head;for(;t!=null;){let s=t.elt;this.append_type(this.excludes,s),t=t.next}let n=e.includes.head;for(;n!=null;){let s=n.elt;this.append_type(this.includes,s),n=n.next}}return this}append(e,t){let n=Yn._nape;if(t==null)throw new Error("Error: Cannot append null, only CbType and CbType list values");if(t instanceof n.callbacks.CbType){let s=t;this.append_type(e,s.zpp_inner)}else if(t instanceof n.callbacks.CbTypeList){let s=t;s.zpp_inner.valmod();let i=n.callbacks.CbTypeIterator.get(s);for(;;){i.zpp_inner.zpp_inner.valmod();let l=i.zpp_inner;l.zpp_inner.valmod(),l.zpp_inner.zip_length&&(l.zpp_inner.zip_length=!1,l.zpp_inner.user_length=l.zpp_inner.inner.length);let r=l.zpp_inner.user_length;i.zpp_critical=!0;let a;if(i.zpp_i<r?a=!0:(i.zpp_next=n.callbacks.CbTypeIterator.zpp_pool,n.callbacks.CbTypeIterator.zpp_pool=i,i.zpp_inner=null,a=!1),!a)break;i.zpp_critical=!1;let o=i.zpp_inner.at(i.zpp_i++);this.append_type(e,o.zpp_inner)}}else if(t instanceof Array){let s=t,i=0;for(;i<s.length;){let l=s[i];if(++i,!(l instanceof n.callbacks.CbType))throw new Error("Error: Cannot append non-CbType or CbType list value");let r=l;this.append_type(e,r.zpp_inner)}}else throw new Error("Error: Cannot append non-CbType or CbType list value")}};Yn._nape=null,Yn._zpp=null;var Ps=Yn;var wn=class wn{constructor(){this.outer=null;this.id=0;this.userData=null;this.compound=null;this.space=null;this.active=!1;this.stiff=!1;this.frequency=0;this.damping=0;this.maxForce=0;this.maxError=0;this.breakUnderForce=!1;this.breakUnderError=!1;this.removeOnBreak=!1;this.component=null;this.ignore=!1;this.__velocity=!1;this.cbTypes=null;this.cbSet=null;this.wrap_cbTypes=null;this.pre_dt=-1;this._initBase()}_initBase(){let e=wn._zpp;this.id=_n.Constraint(),this.stiff=!0,this.active=!0,this.ignore=!1,this.frequency=10,this.damping=1,this.maxForce=1/0,this.maxError=1/0,this.breakUnderForce=!1,this.removeOnBreak=!0,this.pre_dt=-1,this.cbTypes=new e.util.ZNPList_ZPP_CbType}clear(){}activeBodies(){}inactiveBodies(){}clearcache(){}validate(){}wake_connected(){}forest(){}broken(){}warmStart(){}draw(e){}pair_exists(e,t){return!1}preStep(e){return!1}applyImpulseVel(){return!1}applyImpulsePos(){return!1}copy(e,t){return null}immutable_midstep(e){if(this.space!=null&&this.space.midstep)throw new Error("Error: Constraint::"+e+" cannot be set during space step()")}setupcbTypes(){let e=wn._zpp;this.wrap_cbTypes=e.util.ZPP_CbTypeList.get(this.cbTypes),this.wrap_cbTypes.zpp_inner.adder=this.wrap_cbTypes_adder.bind(this),this.wrap_cbTypes.zpp_inner.subber=this.wrap_cbTypes_subber.bind(this),this.wrap_cbTypes.zpp_inner.dontremove=!0,this.wrap_cbTypes.zpp_inner._modifiable=this.immutable_cbTypes.bind(this)}immutable_cbTypes(){this.immutable_midstep("Constraint::cbTypes")}wrap_cbTypes_subber(e){let t=e.zpp_inner;this.cbTypes.has(t)&&(this.space!=null&&(this.dealloc_cbSet(),t.constraints.remove(this)),this.cbTypes.remove(t),this.space!=null&&(this.alloc_cbSet(),this.wake()))}wrap_cbTypes_adder(e){return this.insert_cbtype(e.zpp_inner),!1}insert_cbtype(e){let t=wn._zpp;if(!this.cbTypes.has(e)){this.space!=null&&(this.dealloc_cbSet(),e.constraints.add(this));let n=null,s=this.cbTypes.head;for(;s!=null;){let a=s.elt;if(e.id<a.id)break;n=s,s=s.next}let i=this.cbTypes,l;t.util.ZNPNode_ZPP_CbType.zpp_pool==null?l=new t.util.ZNPNode_ZPP_CbType:(l=t.util.ZNPNode_ZPP_CbType.zpp_pool,t.util.ZNPNode_ZPP_CbType.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;n==null?(r.next=i.head,i.head=r):(r.next=n.next,n.next=r),i.pushmod=i.modified=!0,i.length++,this.space!=null&&(this.alloc_cbSet(),this.wake())}}alloc_cbSet(){(this.cbSet=this.space.cbsets.get(this.cbTypes))!=null&&(this.cbSet.count++,this.cbSet.constraints.add(this))}dealloc_cbSet(){let e=wn._zpp;if(this.cbSet!=null){if(this.cbSet.constraints.remove(this),--this.cbSet.count==0){this.space.cbsets.remove(this.cbSet);let t=this.cbSet;for(t.listeners.clear(),t.zip_listeners=!0,t.bodylisteners.clear(),t.zip_bodylisteners=!0,t.conlisteners.clear(),t.zip_conlisteners=!0;t.cbTypes.head!=null;)t.cbTypes.pop_unsafe().cbsets.remove(t);t.next=e.callbacks.ZPP_CbSet.zpp_pool,e.callbacks.ZPP_CbSet.zpp_pool=t}this.cbSet=null}}activate(){this.space!=null&&this.activeInSpace()}deactivate(){this.space!=null&&this.inactiveOrOutSpace()}addedToSpace(){this.active&&this.activeInSpace(),this.activeBodies();let e=this.cbTypes.head;for(;e!=null;)e.elt.constraints.add(this),e=e.next}removedFromSpace(){this.active&&this.inactiveOrOutSpace(),this.inactiveBodies();let e=this.cbTypes.head;for(;e!=null;)e.elt.constraints.remove(this),e=e.next}activeInSpace(){let e=wn._zpp;this.alloc_cbSet(),e.space.ZPP_Component.zpp_pool==null?this.component=new e.space.ZPP_Component:(this.component=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=this.component.next,this.component.next=null),this.component.isBody=!1,this.component.constraint=this}inactiveOrOutSpace(){let e=wn._zpp;this.dealloc_cbSet();let t=this.component;t.body=null,t.constraint=null,t.next=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=t,this.component=null}wake(){this.space!=null&&this.space.wake_constraint(this)}copyto(e){let t=wn._nape,n=this.outer;n.zpp_inner.wrap_cbTypes==null&&n.zpp_inner.setupcbTypes();let s=n.zpp_inner.wrap_cbTypes;s.zpp_inner.valmod();let i=t.callbacks.CbTypeIterator.get(s);for(;;){i.zpp_inner.zpp_inner.valmod();let y=i.zpp_inner;y.zpp_inner.valmod(),y.zpp_inner.zip_length&&(y.zpp_inner.zip_length=!1,y.zpp_inner.user_length=y.zpp_inner.inner.length);let d=y.zpp_inner.user_length;i.zpp_critical=!0;let _;if(i.zpp_i<d?_=!0:(i.zpp_next=t.callbacks.CbTypeIterator.zpp_pool,t.callbacks.CbTypeIterator.zpp_pool=i,i.zpp_inner=null,_=!1),!_)break;i.zpp_critical=!1;let f=i.zpp_inner.at(i.zpp_i++);e.zpp_inner.wrap_cbTypes==null&&e.zpp_inner.setupcbTypes();let z=e.zpp_inner.wrap_cbTypes;z.zpp_inner.reverse_flag?z.push(f):z.unshift(f)}e.zpp_inner.removeOnBreak=n.zpp_inner.removeOnBreak;let l=n.zpp_inner.breakUnderError;e.zpp_inner.breakUnderError!=l&&(e.zpp_inner.breakUnderError=l,e.zpp_inner.wake());let r=n.zpp_inner.breakUnderForce;e.zpp_inner.breakUnderForce!=r&&(e.zpp_inner.breakUnderForce=r,e.zpp_inner.wake());let a=n.zpp_inner.maxError;if(a!==a)throw new Error("Error: Constraint::maxError cannot be NaN");if(a<0)throw new Error("Error: Constraint::maxError must be >=0");e.zpp_inner.maxError!=a&&(e.zpp_inner.maxError=a,e.zpp_inner.wake());let o=n.zpp_inner.maxForce;if(o!==o)throw new Error("Error: Constraint::maxForce cannot be NaN");if(o<0)throw new Error("Error: Constraint::maxForce must be >=0");e.zpp_inner.maxForce!=o&&(e.zpp_inner.maxForce=o,e.zpp_inner.wake());let p=n.zpp_inner.damping;if(p!==p)throw new Error("Error: Constraint::Damping cannot be Nan");if(p<0)throw new Error("Error: Constraint::Damping must be >=0");e.zpp_inner.damping!=p&&(e.zpp_inner.damping=p,e.zpp_inner.stiff||e.zpp_inner.wake());let c=n.zpp_inner.frequency;if(c!==c)throw new Error("Error: Constraint::Frequency cannot be NaN");if(c<=0)throw new Error("Error: Constraint::Frequency must be >0");e.zpp_inner.frequency!=c&&(e.zpp_inner.frequency=c,e.zpp_inner.stiff||e.zpp_inner.wake());let h=n.zpp_inner.stiff;e.zpp_inner.stiff!=h&&(e.zpp_inner.stiff=h,e.zpp_inner.wake());let u=n.zpp_inner.ignore;e.zpp_inner.ignore!=u&&(e.zpp_inner.ignore=u,e.zpp_inner.wake());let x=n.zpp_inner.active;e.zpp_inner.active!=x&&(e.zpp_inner.component!=null&&(e.zpp_inner.component.woken=!1),e.zpp_inner.clearcache(),x?(e.zpp_inner.active=x,e.zpp_inner.activate(),e.zpp_inner.space!=null&&(e.zpp_inner.component!=null&&(e.zpp_inner.component.sleeping=!0),e.zpp_inner.space.wake_constraint(e.zpp_inner,!0))):(e.zpp_inner.space!=null&&(e.zpp_inner.wake(),e.zpp_inner.space.live_constraints.remove(e.zpp_inner)),e.zpp_inner.active=x,e.zpp_inner.deactivate()))}static _findRoot(e){if(e==e.parent)return e;let t=e,n=null;for(;t!=t.parent;){let s=t.parent;t.parent=n,n=t,t=s}for(;n!=null;){let s=n.parent;n.parent=t,n=s}return t}static _unionComponents(e,t){let n=wn._findRoot(e),s=wn._findRoot(t);n!=s&&(n.rank<s.rank?n.parent=s:n.rank>s.rank?s.parent=n:(s.parent=n,n.rank++))}};wn._nape=null,wn._zpp=null;var Me=wn;var Jn=class g{constructor(){this.id=0;this.bc=null;this.cb=null}static dict(e,t){let n=new g;return n.id=e,n.bc=t,n}static todo(e,t){let n=new g;return n.id=e,n.cb=t,n}};var Vs=class Vs extends Me{constructor(){super();this.outer_zn=null;this.ratio=0;this.jointMin=0;this.jointMax=0;this.slack=!1;this.equal=!1;this.scale=0;this.b1=null;this.b2=null;this.kMass=0;this.jAcc=0;this.jMax=0;this.gamma=0;this.bias=0;this.stepped=!1;this.ratio=1,this.jAcc=0,this.slack=!1,this.jMax=1/0,this.stepped=!1}is_slack(){let t=this.ratio*this.b2.rot-this.b1.rot;return this.equal?(this.scale=1,!1):t<this.jointMin?(this.scale=-1,!1):t>this.jointMax?(this.scale=1,!1):(this.scale=0,!0)}bodyImpulse(t){let n=me();return this.stepped?t==this.b1?n.geom.Vec3.get(0,0,-this.scale*this.jAcc):n.geom.Vec3.get(0,0,this.ratio*this.scale*this.jAcc):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}copy(t,n){let s=Vs._createFn(null,null,this.jointMin,this.jointMax,this.ratio);if(this.copyto(s),t!=null&&this.b1!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b1.id){i=r.bc;break}}i!=null?s.zpp_inner.b1=i.zpp_inner:n.push(Jn.todo(this.b1.id,r=>{s.zpp_inner.b1=r.zpp_inner}))}if(t!=null&&this.b2!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b2.id){i=r.bc;break}}i!=null?s.zpp_inner.b2=i.zpp_inner:n.push(Jn.todo(this.b2.id,r=>{s.zpp_inner.b2=r.zpp_inner}))}return s}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: AngleJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: AngleJoint must have jointMin <= jointMax");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){if(this.b1.type==2){let t;if(this.b1.component==this.b1.component.parent)t=this.b1.component;else{let s=this.b1.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}if(this.b2.type==2){let t;if(this.b2.component==this.b2.component.parent)t=this.b2.component;else{let s=this.b2.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAcc=0,this.pre_dt=-1,this.slack=!1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.equal=this.jointMin==this.jointMax;let s=this.ratio*this.b2.rot-this.b1.rot;this.equal?(s-=this.jointMax,this.slack=!1,this.scale=1):s<this.jointMin?(s=this.jointMin-s,this.scale=-1,this.slack=!1):s>this.jointMax?(s-=this.jointMax,this.scale=1,this.slack=!1):(this.scale=0,s=0,this.slack=!0);let i=s;if(!this.slack){if(this.kMass=this.b1.sinertia+this.ratio*this.ratio*this.b2.sinertia,this.kMass!=0?this.kMass=1/this.kMass:this.jAcc=0,this.stiff)this.bias=0,this.gamma=0;else{if(this.breakUnderError&&i*i>this.maxError*this.maxError)return!0;let l=2*Math.PI*this.frequency;this.gamma=1/(t*l*(2*this.damping+l*t));let r=1/(1+this.gamma),a=t*l*l*this.gamma;this.gamma*=r,this.kMass*=r,this.bias=-i*a,this.bias<-this.maxError?this.bias=-this.maxError:this.bias>this.maxError&&(this.bias=this.maxError)}this.jAcc*=n,this.jMax=this.maxForce*t}return!1}warmStart(){this.slack||(this.b1.angvel-=this.scale*this.b1.iinertia*this.jAcc,this.b2.angvel+=this.ratio*this.scale*this.b2.iinertia*this.jAcc)}applyImpulseVel(){if(this.slack)return!1;let t=this.scale*(this.ratio*(this.b2.angvel+this.b2.kinangvel)-this.b1.angvel-this.b1.kinangvel),n=this.kMass*(this.bias-t)-this.jAcc*this.gamma,s=this.jAcc;return this.jAcc+=n,!this.equal&&this.jAcc>0&&(this.jAcc=0),this.breakUnderForce&&(this.jAcc>this.jMax||this.jAcc<-this.jMax)?!0:(this.stiff||(this.jAcc>this.jMax?this.jAcc=this.jMax:this.jAcc<-this.jMax&&(this.jAcc=-this.jMax)),n=this.jAcc-s,this.b1.angvel-=this.scale*this.b1.iinertia*n,this.b2.angvel+=this.ratio*this.scale*this.b2.iinertia*n,!1)}applyImpulsePos(){let t=this.ratio*this.b2.rot-this.b1.rot,n;this.equal?(t-=this.jointMax,n=!1,this.scale=1):t<this.jointMin?(t=this.jointMin-t,this.scale=-1,n=!1):t>this.jointMax?(t-=this.jointMax,this.scale=1,n=!1):(this.scale=0,t=0,n=!0);let s=t;if(!n){if(this.breakUnderError&&s*s>this.maxError*this.maxError)return!0;let l=-(s*.5)*this.kMass;if(this.equal||l<0){let r=this.b1,a=-this.scale*l*this.b1.iinertia;if(r.rot+=a,a*a>1e-4)r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot);else{let c=a*a,h=1-.5*c,u=1-c*c/8,x=(h*r.axisx+a*r.axisy)*u;r.axisy=(h*r.axisy-a*r.axisx)*u,r.axisx=x}let o=this.b2,p=this.ratio*this.scale*l*this.b2.iinertia;if(o.rot+=p,p*p>1e-4)o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot);else{let c=p*p,h=1-.5*c,u=1-c*c/8,x=(h*o.axisx+p*o.axisy)*u;o.axisy=(h*o.axisy-p*o.axisx)*u,o.axisx=x}}}return!1}draw(t){}static _rotateBody(t,n){if(t.rot+=n,n*n>1e-4)t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot);else{let s=n*n,i=1-.5*s,l=1-s*s/8,r=(i*t.axisx+n*t.axisy)*l;t.axisy=(i*t.axisy-n*t.axisx)*l,t.axisx=r}}static _copyBody(t,n,s,i,l){if(t!=null&&s!=null){let r=null;for(let a=0;a<t.length;a++){let o=t[a];if(o.id==s.id){r=o.bc;break}}r!=null?i.zpp_inner_zn[l]=r.zpp_inner:n.push(Jn.todo(s.id,function(a){i.zpp_inner_zn[l]=a.zpp_inner}))}}};Vs._wrapFn=null,Vs._createFn=null;var Je=Vs;var Nt=class Nt{constructor(){this.x=0;this.y=0;this.next=null;this.length=0;this.modified=!1;this.pushmod=!1;this._inuse=!1;this.weak=!1;this.outer=null;this._immutable=!1;this._isimmutable=null;this._validate=null;this._invalidate=null}static get(e,t,n){n==null&&(n=!1);let s;return Nt.zpp_pool==null?s=new Nt:(s=Nt.zpp_pool,Nt.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=n,s.x=e,s.y=t,s}validate(){this._validate!=null&&this._validate()}invalidate(){this._invalidate!=null&&this._invalidate(this)}immutable(){if(this._immutable)throw new Error("Error: Vec2 is immutable");this._isimmutable!=null&&this._isimmutable()}wrapper(){if(this.outer==null)if(Nt._wrapFn)this.outer=Nt._wrapFn(this);else{this.outer=new Nt._nape.geom.Vec2;let e=this.outer.zpp_inner;e.outer!=null&&(e.outer.zpp_inner=null,e.outer=null),e._isimmutable=null,e._validate=null,e._invalidate=null,e.next=Nt.zpp_pool,Nt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer!=null&&(this.outer.zpp_inner=null,this.outer=null),this._isimmutable=null,this._validate=null,this._invalidate=null}alloc(){this.weak=!1}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){return e._inuse=!0,e.next=this.next,this.next=e,this.modified=!0,this.length++,e}inlined_add(e){return e._inuse=!0,e.next=this.next,this.next=e,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;)this.add(t),t=t.next}insert(e,t){return t._inuse=!0,e==null?(t.next=this.next,this.next=t):(t.next=e.next,e.next=t),this.pushmod=this.modified=!0,this.length++,t}inlined_insert(e,t){return t._inuse=!0,e==null?(t.next=this.next,this.next=t):(t.next=e.next,e.next=t),this.pushmod=this.modified=!0,this.length++,t}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e){let s;t==null?(s=this.next,this.next=s.next,this.next==null&&(this.pushmod=!0)):(s=t.next,t.next=s.next,s.next==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e)return this.erase(t),!0;t=n,n=n.next}return!1}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e){let s;t==null?(s=this.next,this.next=s.next,this.next==null&&(this.pushmod=!0)):(s=t.next,t.next=s.next,s.next==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e){let s;return t==null?(s=this.next,this.next=s.next,this.next==null&&(this.pushmod=!0)):(s=t.next,t.next=s.next,s.next==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,!0}t=n,n=n.next}return!1}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=this.next;for(;t!=null;){if(t===e)return!0;t=t.next}return!1}inlined_has(e){let t=this.next;for(;t!=null;){if(t===e)return!0;t=t.next}return!1}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}copy(){let e=this.x,t=this.y,n;return Nt.zpp_pool==null?n=new Nt:(n=Nt.zpp_pool,Nt.zpp_pool=n.next,n.next=null),n.weak=!1,n._immutable=!1,n.x=e,n.y=t,n}toString(){return"{ x: "+this.x+" y: "+this.y+" }"}};Nt.zpp_pool=null,Nt._nape=null,Nt._zpp=null,Nt._wrapFn=null;var le=Nt;var Ti=class Ti extends Me{constructor(){super();this.outer_zn=null;this.jointMin=0;this.jointMax=0;this.slack=!1;this.equal=!1;this.nx=0;this.ny=0;this.cx1=0;this.cx2=0;this.b1=null;this.b2=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a1=null;this.wrap_a2=null;this.kMass=0;this.jAcc=0;this.jMax=1/0;this.gamma=0;this.bias=0;this.stepped=!1;this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0,this.jAcc=0,this.jMax=1/0,this.stepped=!1,this.cx1=this.cx2=0}is_slack(){let t;this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let n=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),s=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),i=n*n+s*s;return i<Me._nape.Config.epsilon?t=!0:(i=Math.sqrt(i),this.equal||i<this.jointMin||i>this.jointMax?t=!1:t=!0),t}bodyImpulse(t){let n=Me._nape;return this.stepped?t==this.b1?n.geom.Vec3.get(-this.jAcc*this.nx,-this.jAcc*this.ny,-this.cx1*this.jAcc):n.geom.Vec3.get(this.jAcc*this.nx,this.jAcc*this.ny,this.cx2*this.jAcc):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){this.wrap_a1=Ti._setupAnchorVec2(this.a1localx,this.a1localy,this.validate_a1.bind(this),this.invalidate_a1.bind(this))}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){this.wrap_a2=Ti._setupAnchorVec2(this.a2localx,this.a2localy,this.validate_a2.bind(this),this.invalidate_a2.bind(this))}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=Ti._createFn(null,null,i,l.zpp_inner_zn.wrap_a2,this.jointMin,this.jointMax);return this.copyto(r),Je._copyBody(t,n,this.b1,r,"b1"),Je._copyBody(t,n,this.b2,r,"b2"),r}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: DistanceJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: DistanceJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: DistanceJoint must have jointMin <= jointMax");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAcc=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.equal=this.jointMin==this.jointMax,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,this.nx=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),this.ny=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely);let s=this.nx*this.nx+this.ny*this.ny;if(s<Me._nape.Config.epsilon)this.nx=0,this.ny=0,s=0,this.slack=!0;else{s=Math.sqrt(s);let l=1/s;this.nx*=l,this.ny*=l,this.equal?(s-=this.jointMax,this.slack=!1):s<this.jointMin?(s=this.jointMin-s,this.nx=-this.nx,this.ny=-this.ny,this.slack=!1):s>this.jointMax?(s-=this.jointMax,this.slack=!1):(this.nx=0,this.ny=0,s=0,this.slack=!0)}let i=s;if(!this.slack){if(this.cx1=this.ny*this.a1relx-this.nx*this.a1rely,this.cx2=this.ny*this.a2relx-this.nx*this.a2rely,this.kMass=this.b1.smass+this.b2.smass+this.cx1*this.cx1*this.b1.sinertia+this.cx2*this.cx2*this.b2.sinertia,this.kMass!=0?this.kMass=1/this.kMass:this.jAcc=0,this.stiff)this.bias=0,this.gamma=0;else{if(this.breakUnderError&&i*i>this.maxError*this.maxError)return!0;let l=2*Math.PI*this.frequency;this.gamma=1/(t*l*(2*this.damping+l*t));let r=1/(1+this.gamma),a=t*l*l*this.gamma;this.gamma*=r,this.kMass*=r,this.bias=-i*a,this.bias<-this.maxError?this.bias=-this.maxError:this.bias>this.maxError&&(this.bias=this.maxError)}this.jAcc*=n,this.jMax=this.maxForce*t}return!1}warmStart(){if(!this.slack){let t=this.b1.imass*this.jAcc;this.b1.velx-=this.nx*t,this.b1.vely-=this.ny*t;let n=this.b2.imass*this.jAcc;this.b2.velx+=this.nx*n,this.b2.vely+=this.ny*n,this.b1.angvel-=this.cx1*this.b1.iinertia*this.jAcc,this.b2.angvel+=this.cx2*this.b2.iinertia*this.jAcc}}applyImpulseVel(){if(this.slack)return!1;let t=this.nx*(this.b2.velx+this.b2.kinvelx-this.b1.velx-this.b1.kinvelx)+this.ny*(this.b2.vely+this.b2.kinvely-this.b1.vely-this.b1.kinvely)+(this.b2.angvel+this.b2.kinangvel)*this.cx2-(this.b1.angvel+this.b1.kinangvel)*this.cx1,n=this.kMass*(this.bias-t)-this.jAcc*this.gamma,s=this.jAcc;if(this.jAcc+=n,!this.equal&&this.jAcc>0&&(this.jAcc=0),this.breakUnderForce&&this.jAcc<-this.jMax)return!0;this.stiff||this.jAcc<-this.jMax&&(this.jAcc=-this.jMax),n=this.jAcc-s;let i=this.b1.imass*n;this.b1.velx-=this.nx*i,this.b1.vely-=this.ny*i;let l=this.b2.imass*n;return this.b2.velx+=this.nx*l,this.b2.vely+=this.ny*l,this.b1.angvel-=this.cx1*this.b1.iinertia*n,this.b2.angvel+=this.cx2*this.b2.iinertia*n,!1}applyImpulsePos(){let t,n=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,s=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,i=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,l=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,r,a=this.b2.posx+i-(this.b1.posx+n),o=this.b2.posy+l-(this.b1.posy+s),p=a*a+o*o;if(p<Me._nape.Config.epsilon)a=0,o=0,p=0,r=!0;else{p=Math.sqrt(p);let h=1/p;a*=h,o*=h,this.equal?(p-=this.jointMax,r=!1):p<this.jointMin?(p=this.jointMin-p,a=-a,o=-o,r=!1):p>this.jointMax?(p-=this.jointMax,r=!1):(a=0,o=0,p=0,r=!0)}let c=p;if(!r){if(this.breakUnderError&&c*c>this.maxError*this.maxError)return!0;if(c*c<Me._nape.Config.constraintLinearSlop*Me._nape.Config.constraintLinearSlop)return!1;if(c*=.5,c*c>6){let y=this.b1.smass+this.b2.smass;if(y>Me._nape.Config.epsilon){let d=.75/y;if(t=-c*d,this.equal||t<0){let _=t*this.b1.imass;this.b1.posx-=a*_,this.b1.posy-=o*_;let f=t*this.b2.imass;this.b2.posx+=a*f,this.b2.posy+=o*f,a=this.b2.posx+i-(this.b1.posx+n),o=this.b2.posy+l-(this.b1.posy+s);let z=a*a+o*o;if(z<Me._nape.Config.epsilon)a=0,o=0,z=0;else{z=Math.sqrt(z);let P=1/z;a*=P,o*=P,this.equal?z-=this.jointMax:z<this.jointMin?(z=this.jointMin-z,a=-a,o=-o):z>this.jointMax?z-=this.jointMax:(a=0,o=0,z=0)}c=z,c*=.5}}}let h=o*n-a*s,u=o*i-a*l,x=this.b1.smass+this.b2.smass+h*h*this.b1.sinertia+u*u*this.b2.sinertia;if(x!=0&&(x=1/x),t=-c*x,this.equal||t<0){let y=this.b1.imass*t;this.b1.posx-=a*y,this.b1.posy-=o*y;let d=this.b2.imass*t;this.b2.posx+=a*d,this.b2.posy+=o*d,Je._rotateBody(this.b1,-h*this.b1.iinertia*t),Je._rotateBody(this.b2,u*this.b2.iinertia*t)}}return!1}draw(t){}static _setupAnchorVec2(t,n,s,i){let l=Me._nape,r=t,a=n;if(a==null&&(a=0),r==null&&(r=0),r!=r||a!=a)throw new Error("Error: Vec2 components cannot be NaN");let o;if(ye.poolVec2==null?o=new l.geom.Vec2:(o=ye.poolVec2,ye.poolVec2=o.zpp_pool,o.zpp_pool=null,o.zpp_disp=!1,o==ye.nextVec2&&(ye.nextVec2=null)),o.zpp_inner==null){let p;le.zpp_pool==null?p=new le:(p=le.zpp_pool,le.zpp_pool=p.next,p.next=null),p.weak=!1,p._immutable=!1,p.x=r,p.y=a,o.zpp_inner=p,o.zpp_inner.outer=o}else{if(o!=null&&o.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=o.zpp_inner;if(p._immutable)throw new Error("Error: Vec2 is immutable");if(p._isimmutable!=null&&p._isimmutable(),r!=r||a!=a)throw new Error("Error: Vec2 components cannot be NaN");let c;if(o!=null&&o.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let h=o.zpp_inner;if(h._validate!=null&&h._validate(),o.zpp_inner.x==r){if(o!=null&&o.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=o.zpp_inner;u._validate!=null&&u._validate(),c=o.zpp_inner.y==a}else c=!1;if(!c){o.zpp_inner.x=r,o.zpp_inner.y=a;let u=o.zpp_inner;u._invalidate!=null&&u._invalidate(u)}}return o.zpp_inner.weak=!1,o.zpp_inner._inuse=!0,o.zpp_inner._validate=s,o.zpp_inner._invalidate=i,o}};Ti._wrapFn=null,Ti._createFn=null;var _i=Ti;var Is=class Is extends Me{constructor(){super();this.outer_zn=null;this.scale=0;this.jointMin=0;this.jointMax=0;this.equal=!1;this.dot1=0;this.dot2=0;this.cx1=0;this.cx2=0;this.b1=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.b2=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.zip_n=null;this.nlocalx=0;this.nlocaly=0;this.nrelx=0;this.nrely=0;this.wrap_n=null;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.jAccx=0;this.jAccy=0;this.jMax=null;this.gamma=null;this.biasx=0;this.biasy=0;this.stepped=!1;this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0,this.nlocalx=0,this.nlocaly=0,this.nrelx=0,this.nrely=0,this.jAccx=0,this.jAccy=0,this.jMax=1/0,this.jointMin=-1/0,this.jointMax=1/0,this.stepped=!1}_setupVec2(t,n,s,i){let l=Me._nape,r=Me._zpp;if(n==null&&(n=0),t==null&&(t=0),t!==t||n!==n)throw new Error("Error: Vec2 components cannot be NaN");let a;if(r.util.ZPP_PubPool.poolVec2==null?a=new l.geom.Vec2:(a=r.util.ZPP_PubPool.poolVec2,r.util.ZPP_PubPool.poolVec2=a.zpp_pool,a.zpp_pool=null,a.zpp_disp=!1,a==r.util.ZPP_PubPool.nextVec2&&(r.util.ZPP_PubPool.nextVec2=null)),a.zpp_inner==null){let o;r.geom.ZPP_Vec2.zpp_pool==null?o=new r.geom.ZPP_Vec2:(o=r.geom.ZPP_Vec2.zpp_pool,r.geom.ZPP_Vec2.zpp_pool=o.next,o.next=null),o.weak=!1,o._immutable=!1,o.x=t,o.y=n,a.zpp_inner=o,a.zpp_inner.outer=a}else{if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=a.zpp_inner;if(o._immutable)throw new Error("Error: Vec2 is immutable");if(o._isimmutable!=null&&o._isimmutable(),t!==t||n!==n)throw new Error("Error: Vec2 components cannot be NaN");if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=a.zpp_inner;p._validate!=null&&p._validate();let c;if(a.zpp_inner.x==t){if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let h=a.zpp_inner;h._validate!=null&&h._validate(),c=a.zpp_inner.y==n}else c=!1;if(!c){a.zpp_inner.x=t,a.zpp_inner.y=n;let h=a.zpp_inner;h._invalidate!=null&&h._invalidate(h)}}return a.zpp_inner.weak=!1,a.zpp_inner._inuse=!0,a.zpp_inner._validate=s,a.zpp_inner._invalidate=i,a}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){this.wrap_a1=this._setupVec2(this.a1localx,this.a1localy,this.validate_a1.bind(this),this.invalidate_a1.bind(this))}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){this.wrap_a2=this._setupVec2(this.a2localx,this.a2localy,this.validate_a2.bind(this),this.invalidate_a2.bind(this))}validate_n(){this.wrap_n.zpp_inner.x=this.nlocalx,this.wrap_n.zpp_inner.y=this.nlocaly}invalidate_n(t){this.immutable_midstep("Constraint::n"),this.nlocalx=t.x,this.nlocaly=t.y,this.zip_n=!0,this.wake()}setup_n(){this.wrap_n=this._setupVec2(this.nlocalx,this.nlocaly,this.validate_n.bind(this),this.invalidate_n.bind(this))}validate_norm(){if(this.zip_n){this.zip_n=!1;let t=this.nlocalx*this.nlocalx+this.nlocaly*this.nlocaly,s=1/Math.sqrt(t);this.nlocalx*=s,this.nlocaly*=s}}bodyImpulse(t){let n=Me._nape;if(this.stepped){let s=this.scale*this.nrelx*this.jAccy-this.nrely*this.jAccx,i=this.nrelx*this.jAccx+this.scale*this.nrely*this.jAccy;return t==this.b1?n.geom.Vec3.get(-s,-i,this.scale*this.cx1*i-this.dot1*s):n.geom.Vec3.get(s,i,this.scale*this.cx1*i-this.dot1*s)}else return n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=l.zpp_inner_zn.wrap_a2,a=this.outer_zn;a.zpp_inner_zn.wrap_n==null&&a.zpp_inner_zn.setup_n();let o=Is._createFn(null,null,i,r,a.zpp_inner_zn.wrap_n,this.jointMin,this.jointMax);return this.copyto(o),Je._copyBody(t,n,this.b1,o,"b1"),Je._copyBody(t,n,this.b2,o,"b2"),o}validate(){let t=Me._nape;if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: DistanceJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: DistanceJoint must have jointMin <= jointMax");if(this.nlocalx*this.nlocalx+this.nlocaly*this.nlocaly<t.Config.epsilon)throw new Error("Error: DistanceJoint direction must be non-degenerate");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAccx=0,this.jAccy=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.equal=this.jointMin==this.jointMax,this.stepped=!0,this.validate_norm(),this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.nrelx=this.b1.axisy*this.nlocalx-this.b1.axisx*this.nlocaly,this.nrely=this.nlocalx*this.b1.axisx+this.nlocaly*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let s=this.b2.posx+this.a2relx-this.b1.posx-this.a1relx,i=this.b2.posy+this.a2rely-this.b1.posy-this.a1rely,l=i*this.nrelx-s*this.nrely,r=this.nrelx*s+this.nrely*i;this.equal?(r-=this.jointMin,this.scale=1):r>this.jointMax?(r-=this.jointMax,this.scale=1):r<this.jointMin?(r=this.jointMin-r,this.scale=-1):(r=0,this.scale=0);let a=s+this.a1relx,o=i+this.a1rely;this.dot1=this.nrelx*a+this.nrely*o,this.cx1=o*this.nrelx-a*this.nrely,this.dot2=this.nrelx*this.a2relx+this.nrely*this.a2rely,this.cx2=this.a2rely*this.nrelx-this.a2relx*this.nrely,this.kMassa=this.b1.smass+this.b2.smass+this.dot1*this.dot1*this.b1.sinertia+this.dot2*this.dot2*this.b2.sinertia,this.kMassb=-this.scale*(this.dot1*this.cx1*this.b1.sinertia+this.dot2*this.cx2*this.b2.sinertia),this.kMassc=this.scale*this.scale*(this.b1.smass+this.b2.smass+this.cx1*this.cx1*this.b1.sinertia+this.cx2*this.cx2*this.b2.sinertia);let p=this.kMassa*this.kMassc-this.kMassb*this.kMassb,c;if(p!==p)this.kMassa=this.kMassb=this.kMassc=0,c=3;else if(p==0){let u=0;this.kMassa!=0?this.kMassa=1/this.kMassa:(this.kMassa=0,u|=1),this.kMassc!=0?this.kMassc=1/this.kMassc:(this.kMassc=0,u|=2),this.kMassb=0,c=u}else{let u=1/p,x=this.kMassc*u;this.kMassc=this.kMassa*u,this.kMassa=x,this.kMassb*=-u,c=0}if((c&1)!=0&&(this.jAccx=0),(c&2)!=0&&(this.jAccy=0),this.stiff)this.gamma=0,this.biasx=0,this.biasy=0;else{if(this.breakUnderError&&l*l+r*r>this.maxError*this.maxError)return!0;let u=2*Math.PI*this.frequency;this.gamma=1/(t*u*(2*this.damping+u*t));let x=1/(1+this.gamma),y=t*u*u*this.gamma;this.gamma*=x;let d=x;this.kMassa*=d,this.kMassb*=d,this.kMassc*=d,this.biasx=l,this.biasy=r;let _=-y;this.biasx*=_,this.biasy*=_;let f=this.maxError,z=this.biasx*this.biasx+this.biasy*this.biasy;if(z>f*f){let P=f*(1/Math.sqrt(z));this.biasx*=P,this.biasy*=P}}let h=n;return this.jAccx*=h,this.jAccy*=h,this.jMax=this.maxForce*t,!1}warmStart(){let t=this.scale*this.nrelx*this.jAccy-this.nrely*this.jAccx,n=this.nrelx*this.jAccx+this.scale*this.nrely*this.jAccy,s=this.b1.imass;this.b1.velx-=t*s,this.b1.vely-=n*s;let i=this.b2.imass;this.b2.velx+=t*i,this.b2.vely+=n*i,this.b1.angvel+=(this.scale*this.cx1*this.jAccy-this.dot1*this.jAccx)*this.b1.iinertia,this.b2.angvel+=(this.dot2*this.jAccx-this.scale*this.cx2*this.jAccy)*this.b2.iinertia}applyImpulseVel(){let t=this.b2.velx-this.b1.velx,n=this.b2.vely-this.b1.vely;t+=this.b2.kinvelx-this.b1.kinvelx,n+=this.b2.kinvely-this.b1.kinvely;let s=n*this.nrelx-t*this.nrely+(this.b2.angvel+this.b2.kinangvel)*this.dot2-(this.b1.angvel+this.b1.kinangvel)*this.dot1,i=this.scale*(this.nrelx*t+this.nrely*n-(this.b2.angvel+this.b2.kinangvel)*this.cx2+(this.b1.angvel+this.b1.kinangvel)*this.cx1),l=this.biasx-s,r=this.biasy-i,a=this.kMassa*l+this.kMassb*r;r=this.kMassb*l+this.kMassc*r,l=a;let o=this.gamma;l-=this.jAccx*o,r-=this.jAccy*o;let p=this.jAccx,c=this.jAccy;if(this.jAccx+=l,this.jAccy+=r,this.jAccy>0&&(this.jAccy=0),this.breakUnderForce){if(this.jAccx*this.jAccx+this.jAccy*this.jAccy>this.jMax*this.jMax)return!0}else if(!this.stiff){let f=this.jMax,z=this.jAccx*this.jAccx+this.jAccy*this.jAccy;if(z>f*f){let P=f*(1/Math.sqrt(z));this.jAccx*=P,this.jAccy*=P}}let h=this.jAccx-p,u=this.jAccy-c,x=this.scale*this.nrelx*u-this.nrely*h,y=this.nrelx*h+this.scale*this.nrely*u,d=this.b1.imass;this.b1.velx-=x*d,this.b1.vely-=y*d;let _=this.b2.imass;return this.b2.velx+=x*_,this.b2.vely+=y*_,this.b1.angvel+=(this.scale*this.cx1*u-this.dot1*h)*this.b1.iinertia,this.b2.angvel+=(this.dot2*h-this.scale*this.cx2*u)*this.b2.iinertia,!1}applyImpulsePos(){let t=Me._nape,n=this.b1.axisy*this.nlocalx-this.b1.axisx*this.nlocaly,s=this.nlocalx*this.b1.axisx+this.nlocaly*this.b1.axisy,i=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,l=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,r=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,a=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,o=this.b2.posx+r-this.b1.posx-i,p=this.b2.posy+a-this.b1.posy-l,c,h=p*n-o*s,u=n*o+s*p;if(this.equal?(u-=this.jointMin,c=1):u>this.jointMax?(u-=this.jointMax,c=1):u<this.jointMin?(u=this.jointMin-u,c=-1):(u=0,c=0),this.breakUnderError&&h*h+u*u>this.maxError*this.maxError)return!0;if(h*h+u*u<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop)return!1;let x,y,d=.5;if(h*=d,u*=d,h*h+u*u>6){let Z=this.b1.smass+this.b2.smass;if(Z>t.Config.epsilon){let S=.8/Z,A=S*(s*h-c*n*u),F=S*(n*h*c-s*h),B=this.b1.imass;this.b1.posx-=A*B,this.b1.posy-=F*B;let G=this.b2.imass;this.b2.posx+=A*G,this.b2.posy+=F*G,o=this.b2.posx+r-this.b1.posx-i,p=this.b2.posy+a-this.b1.posy-l,h=p*n-o*s,u=n*o+s*p,this.equal?(u-=this.jointMin,c=1):u>this.jointMax?(u-=this.jointMax,c=1):u<this.jointMin?(u=this.jointMin-u,c=-1):(u=0,c=0);let q=.5;h*=q,u*=q}}let _=o+i,f=p+l,z=n*_+s*f,P=f*n-_*s,k=n*r+s*a,m=a*n-r*s,b=this.b1.smass+this.b2.smass+z*z*this.b1.sinertia+k*k*this.b2.sinertia,C=-c*(z*P*this.b1.sinertia+k*m*this.b2.sinertia),v=c*c*(this.b1.smass+this.b2.smass+P*P*this.b1.sinertia+m*m*this.b2.sinertia);x=-h,y=-u;let w=b*v-C*C;if(w!==w)y=0,x=y;else if(w==0)b!=0?x/=b:x=0,v!=0?y/=v:y=0;else{let Z=1/w,S=Z*(v*x-C*y);y=Z*(b*y-C*x),x=S}y>0&&(y=0);let O=c*n*y-s*x,E=n*x+c*s*y,M=this.b1.imass;this.b1.posx-=O*M,this.b1.posy-=E*M;let N=this.b2.imass;return this.b2.posx+=O*N,this.b2.posy+=E*N,Je._rotateBody(this.b1,(c*P*y-z*x)*this.b1.iinertia),Je._rotateBody(this.b2,(k*x-c*m*y)*this.b2.iinertia),!1}draw(t){}};Is._wrapFn=null,Is._createFn=null;var yi=Is;var js=class js extends Me{constructor(){super();this.outer_zn=null;this.ratio=0;this.rate=0;this.b1=null;this.b2=null;this.kMass=0;this.jAcc=0;this.jMax=0;this.stepped=!1;this.jAcc=0,this.stepped=!1,this.__velocity=!0}bodyImpulse(t){let n=me();return this.stepped?t==this.b1?n.geom.Vec3.get(0,0,-this.jAcc):n.geom.Vec3.get(0,0,this.ratio*this.jAcc):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}copy(t,n){let s=js._createFn(null,null,this.rate,this.ratio);if(this.copyto(s),t!=null&&this.b1!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b1.id){i=r.bc;break}}i!=null?s.zpp_inner.b1=i.zpp_inner:n.push(Jn.todo(this.b1.id,r=>{s.zpp_inner.b1=r.zpp_inner}))}if(t!=null&&this.b2!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b2.id){i=r.bc;break}}i!=null?s.zpp_inner.b2=i.zpp_inner:n.push(Jn.todo(this.b2.id,r=>{s.zpp_inner.b2=r.zpp_inner}))}return s}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: MotorJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){if(this.b1.type==2){let t;if(this.b1.component==this.b1.component.parent)t=this.b1.component;else{let s=this.b1.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}if(this.b2.type==2){let t;if(this.b2.component==this.b2.component.parent)t=this.b2.component;else{let s=this.b2.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAcc=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;return this.pre_dt=t,this.stepped=!0,this.kMass=this.b1.sinertia+this.ratio*this.ratio*this.b2.sinertia,this.kMass=1/this.kMass,this.jAcc*=n,this.jMax=this.maxForce*t,!1}warmStart(){this.b1.angvel-=this.b1.iinertia*this.jAcc,this.b2.angvel+=this.ratio*this.b2.iinertia*this.jAcc}applyImpulseVel(){let t=this.ratio*(this.b2.angvel+this.b2.kinangvel)-this.b1.angvel-this.b1.kinangvel-this.rate,n=-this.kMass*t,s=this.jAcc;if(this.jAcc+=n,this.breakUnderForce){if(this.jAcc>this.jMax||this.jAcc<-this.jMax)return!0}else this.jAcc<-this.jMax?this.jAcc=-this.jMax:this.jAcc>this.jMax&&(this.jAcc=this.jMax);return n=this.jAcc-s,this.b1.angvel-=this.b1.iinertia*n,this.b2.angvel+=this.ratio*this.b2.iinertia*n,!1}applyImpulsePos(){return!1}};js._wrapFn=null,js._createFn=null;var mi=js;var Bs=class Bs extends Me{constructor(){super();this.outer_zn=null;this.b1=null;this.b2=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.jAccx=0;this.jAccy=0;this.jMax=1/0;this.gamma=0;this.biasx=0;this.biasy=0;this.stepped=!1;this.stepped=!1,this.jAccx=0,this.jAccy=0,this.jMax=1/0,this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0}bodyImpulse(t){let n=Me._nape;return this.stepped?t==this.b1?n.geom.Vec3.get(-this.jAccx,-this.jAccy,-(this.jAccy*this.a1relx-this.jAccx*this.a1rely)):n.geom.Vec3.get(this.jAccx,this.jAccy,this.jAccy*this.a2relx-this.jAccx*this.a2rely):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){let t=Me._nape,n=Me._zpp,s=this.a1localx,i=this.a1localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a1=l,this.wrap_a1.zpp_inner._inuse=!0,this.wrap_a1.zpp_inner._validate=this.validate_a1.bind(this),this.wrap_a1.zpp_inner._invalidate=this.invalidate_a1.bind(this)}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){let t=Me._nape,n=Me._zpp,s=this.a2localx,i=this.a2localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a2=l,this.wrap_a2.zpp_inner._inuse=!0,this.wrap_a2.zpp_inner._validate=this.validate_a2.bind(this),this.wrap_a2.zpp_inner._invalidate=this.invalidate_a2.bind(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=Bs._createFn(null,null,i,l.zpp_inner_zn.wrap_a2);return this.copyto(r),Je._copyBody(t,n,this.b1,r,"b1"),Je._copyBody(t,n,this.b2,r,"b2"),r}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: PivotJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: PivotJoint cannot be simulated with body1 == body2 (body1=body2="+this.b1.outer.toString()+")");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned (body1="+this.b1.outer.toString()+", body2="+this.b2.outer.toString()+")");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic (body1="+this.b1.outer.toString()+", body2="+this.b2.outer.toString()+")")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAccx=0,this.jAccy=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let s=this.b1.smass+this.b2.smass;if(this.kMassa=s,this.kMassb=0,this.kMassc=s,this.b1.sinertia!=0){let a=this.a1relx*this.b1.sinertia,o=this.a1rely*this.b1.sinertia;this.kMassa+=o*this.a1rely,this.kMassb+=-o*this.a1relx,this.kMassc+=a*this.a1relx}if(this.b2.sinertia!=0){let a=this.a2relx*this.b2.sinertia,o=this.a2rely*this.b2.sinertia;this.kMassa+=o*this.a2rely,this.kMassb+=-o*this.a2relx,this.kMassc+=a*this.a2relx}let i=this.kMassa*this.kMassc-this.kMassb*this.kMassb,l;if(i!=i)this.kMassa=this.kMassb=this.kMassc=0,l=3;else if(i==0){let a=0;this.kMassa!=0?this.kMassa=1/this.kMassa:(this.kMassa=0,a|=1),this.kMassc!=0?this.kMassc=1/this.kMassc:(this.kMassc=0,a|=2),this.kMassb=0,l=a}else{let a=1/i,o=this.kMassc*a;this.kMassc=this.kMassa*a,this.kMassa=o,this.kMassb*=-a,l=0}if((l&1)!=0&&(this.jAccx=0),(l&2)!=0&&(this.jAccy=0),this.stiff)this.biasx=0,this.biasy=0,this.gamma=0;else{let a=2*Math.PI*this.frequency;this.gamma=1/(t*a*(2*this.damping+a*t));let o=1/(1+this.gamma),p=t*a*a*this.gamma;this.gamma*=o;let c=o;if(this.kMassa*=c,this.kMassb*=c,this.kMassc*=c,this.biasx=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),this.biasy=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),this.breakUnderError&&this.biasx*this.biasx+this.biasy*this.biasy>this.maxError*this.maxError)return!0;let h=-p;this.biasx*=h,this.biasy*=h;let u=this.maxError,x=this.biasx*this.biasx+this.biasy*this.biasy;if(x>u*u){let y=u*(1/Math.sqrt(x));this.biasx*=y,this.biasy*=y}}let r=n;return this.jAccx*=r,this.jAccy*=r,this.jMax=this.maxForce*t,!1}warmStart(){let t=this.b1.imass;this.b1.velx-=this.jAccx*t,this.b1.vely-=this.jAccy*t;let n=this.b2.imass;this.b2.velx+=this.jAccx*n,this.b2.vely+=this.jAccy*n,this.b1.angvel-=(this.jAccy*this.a1relx-this.jAccx*this.a1rely)*this.b1.iinertia,this.b2.angvel+=(this.jAccy*this.a2relx-this.jAccx*this.a2rely)*this.b2.iinertia}applyImpulseVel(){let t=this.b2.velx+this.b2.kinvelx-this.a2rely*(this.b2.angvel+this.b2.kinangvel)-(this.b1.velx+this.b1.kinvelx-this.a1rely*(this.b1.angvel+this.b1.kinangvel)),n=this.b2.vely+this.b2.kinvely+this.a2relx*(this.b2.angvel+this.b2.kinangvel)-(this.b1.vely+this.b1.kinvely+this.a1relx*(this.b1.angvel+this.b1.kinangvel)),s=this.biasx-t,i=this.biasy-n,l=this.kMassa*s+this.kMassb*i;i=this.kMassb*s+this.kMassc*i,s=l;let r=this.gamma;s-=this.jAccx*r,i-=this.jAccy*r;let a=this.jAccx,o=this.jAccy,p=1;if(this.jAccx+=s*p,this.jAccy+=i*p,this.breakUnderForce){if(this.jAccx*this.jAccx+this.jAccy*this.jAccy>this.jMax*this.jMax)return!0}else if(!this.stiff){let u=this.jMax,x=this.jAccx*this.jAccx+this.jAccy*this.jAccy;if(x>u*u){let y=u*(1/Math.sqrt(x));this.jAccx*=y,this.jAccy*=y}}s=this.jAccx-a,i=this.jAccy-o;let c=this.b1.imass;this.b1.velx-=s*c,this.b1.vely-=i*c;let h=this.b2.imass;return this.b2.velx+=s*h,this.b2.vely+=i*h,this.b1.angvel-=(i*this.a1relx-s*this.a1rely)*this.b1.iinertia,this.b2.angvel+=(i*this.a2relx-s*this.a2rely)*this.b2.iinertia,!1}applyImpulsePos(){let t=Me._nape,n=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,s=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,i=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,l=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s);if(this.breakUnderError&&r*r+a*a>this.maxError*this.maxError)return!0;if(r*r+a*a<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop)return!1;let o=.5;r*=o,a*=o;let p,c;if(r*r+a*a>6){let b=this.b1.smass+this.b2.smass;if(b>t.Config.epsilon){let C=.75/b;p=-r*C,c=-a*C;let v=20,w=p*p+c*c;if(w>v*v){let N=v*(1/Math.sqrt(w));p*=N,c*=N}let O=this.b1.imass;this.b1.posx-=p*O,this.b1.posy-=c*O;let E=this.b2.imass;this.b2.posx+=p*E,this.b2.posy+=c*E,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s);let M=.5;r*=M,a*=M}}let h=this.b1.smass+this.b2.smass,u=h,x=0,y=h;if(this.b1.sinertia!=0){let b=n*this.b1.sinertia,C=s*this.b1.sinertia;u+=C*s,x+=-C*n,y+=b*n}if(this.b2.sinertia!=0){let b=i*this.b2.sinertia,C=l*this.b2.sinertia;u+=C*l,x+=-C*i,y+=b*i}p=-r,c=-a;let d=6,_=p*p+c*c;if(_>d*d){let b=d*(1/Math.sqrt(_));p*=b,c*=b}let f=u*y-x*x;if(f!=f)c=0,p=0;else if(f==0)u!=0?p/=u:p=0,y!=0?c/=y:c=0;else{let b=1/f,C=b*(y*p-x*c);c=b*(u*c-x*p),p=C}let z=this.b1.imass;this.b1.posx-=p*z,this.b1.posy-=c*z;let P=this.b2.imass;this.b2.posx+=p*P,this.b2.posy+=c*P;let k=-(c*n-p*s)*this.b1.iinertia;Je._rotateBody(this.b1,k);let m=(c*i-p*l)*this.b2.iinertia;return Je._rotateBody(this.b2,m),!1}draw(t){}};Bs._wrapFn=null,Bs._createFn=null;var fi=Bs;var Ts=class Ts extends Me{constructor(){super();this.outer_zn=null;this.ratio=1;this.jointMin=0;this.jointMax=0;this.slack=!1;this.equal=!1;this.n12x=0;this.n12y=0;this.n34x=0;this.n34y=0;this.cx1=0;this.cx2=0;this.cx3=0;this.cx4=0;this.b1=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.b2=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.b3=null;this.a3localx=0;this.a3localy=0;this.a3relx=0;this.a3rely=0;this.wrap_a3=null;this.b4=null;this.a4localx=0;this.a4localy=0;this.a4relx=0;this.a4rely=0;this.wrap_a4=null;this.kMass=0;this.jAcc=0;this.jMax=1/0;this.gamma=0;this.bias=0;this.stepped=!1;this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0,this.a3localx=0,this.a3localy=0,this.a3relx=0,this.a3rely=0,this.a4localx=0,this.a4localy=0,this.a4relx=0,this.a4rely=0,this.n12x=1,this.n12y=0,this.n34x=1,this.n34y=0,this.jAcc=0,this.jMax=1/0,this.stepped=!1,this.cx1=this.cx2=this.cx3=this.cx4=0}is_slack(){let t;this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,this.a3relx=this.b3.axisy*this.a3localx-this.b3.axisx*this.a3localy,this.a3rely=this.a3localx*this.b3.axisx+this.a3localy*this.b3.axisy,this.a4relx=this.b4.axisy*this.a4localx-this.b4.axisx*this.a4localy,this.a4rely=this.a4localx*this.b4.axisx+this.a4localy*this.b4.axisy;let n=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),s=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),i=this.b4.posx+this.a4relx-(this.b3.posx+this.a3relx),l=this.b4.posy+this.a4rely-(this.b3.posy+this.a3rely),r=Math.sqrt(n*n+s*s),a=Math.sqrt(i*i+l*l),o=r+this.ratio*a;return this.equal||o<this.jointMin||o>this.jointMax?t=!1:t=!0,t}bodyImpulse(t){let n=Me._nape;if(this.stepped){let s=n.geom.Vec3.get();return t==this.b1&&(s.zpp_inner.x=s.zpp_inner.x-this.jAcc*this.n12x,s.zpp_inner.y=s.zpp_inner.y-this.jAcc*this.n12y,s.zpp_inner.z=s.zpp_inner.z-this.cx1*this.jAcc),t==this.b2&&(s.zpp_inner.x=s.zpp_inner.x+this.jAcc*this.n12x,s.zpp_inner.y=s.zpp_inner.y+this.jAcc*this.n12y,s.zpp_inner.z=s.zpp_inner.z+this.cx2*this.jAcc),t==this.b3&&(s.zpp_inner.x=s.zpp_inner.x-this.jAcc*this.n34x,s.zpp_inner.y=s.zpp_inner.y-this.jAcc*this.n34y,s.zpp_inner.z=s.zpp_inner.z-this.cx3*this.jAcc),t==this.b4&&(s.zpp_inner.x=s.zpp_inner.x+this.jAcc*this.n34x,s.zpp_inner.y=s.zpp_inner.y+this.jAcc*this.n34y,s.zpp_inner.z=s.zpp_inner.z+this.cx4*this.jAcc),s}else return n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this),this.b3!=this.b1&&this.b3!=this.b2&&this.b3!=null&&this.b3.constraints.add(this),this.b4!=this.b1&&this.b4!=this.b2&&this.b4!=this.b3&&this.b4!=null&&this.b4.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this),this.b3!=this.b1&&this.b3!=this.b2&&this.b3!=null&&this.b3.constraints.remove(this),this.b4!=this.b1&&this.b4!=this.b2&&this.b4!=this.b3&&this.b4!=null&&this.b4.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){let t=Me._nape,n=Me._zpp,s=this.a1localx,i=this.a1localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a1=l,this.wrap_a1.zpp_inner._inuse=!0,this.wrap_a1.zpp_inner._validate=this.validate_a1.bind(this),this.wrap_a1.zpp_inner._invalidate=this.invalidate_a1.bind(this)}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){let t=Me._nape,n=Me._zpp,s=this.a2localx,i=this.a2localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a2=l,this.wrap_a2.zpp_inner._inuse=!0,this.wrap_a2.zpp_inner._validate=this.validate_a2.bind(this),this.wrap_a2.zpp_inner._invalidate=this.invalidate_a2.bind(this)}validate_a3(){this.wrap_a3.zpp_inner.x=this.a3localx,this.wrap_a3.zpp_inner.y=this.a3localy}invalidate_a3(t){this.immutable_midstep("Constraint::a3"),this.a3localx=t.x,this.a3localy=t.y,this.wake()}setup_a3(){let t=Me._nape,n=Me._zpp,s=this.a3localx,i=this.a3localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a3=l,this.wrap_a3.zpp_inner._inuse=!0,this.wrap_a3.zpp_inner._validate=this.validate_a3.bind(this),this.wrap_a3.zpp_inner._invalidate=this.invalidate_a3.bind(this)}validate_a4(){this.wrap_a4.zpp_inner.x=this.a4localx,this.wrap_a4.zpp_inner.y=this.a4localy}invalidate_a4(t){this.immutable_midstep("Constraint::a4"),this.a4localx=t.x,this.a4localy=t.y,this.wake()}setup_a4(){let t=Me._nape,n=Me._zpp,s=this.a4localx,i=this.a4localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a4=l,this.wrap_a4.zpp_inner._inuse=!0,this.wrap_a4.zpp_inner._validate=this.validate_a4.bind(this),this.wrap_a4.zpp_inner._invalidate=this.invalidate_a4.bind(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=l.zpp_inner_zn.wrap_a2,a=this.outer_zn;a.zpp_inner_zn.wrap_a3==null&&a.zpp_inner_zn.setup_a3();let o=a.zpp_inner_zn.wrap_a3,p=this.outer_zn;p.zpp_inner_zn.wrap_a4==null&&p.zpp_inner_zn.setup_a4();let c=Ts._createFn(null,null,null,null,i,r,o,p.zpp_inner_zn.wrap_a4,this.jointMin,this.jointMax,this.ratio);return this.copyto(c),Je._copyBody(t,n,this.b1,c,"b1"),Je._copyBody(t,n,this.b2,c,"b2"),Je._copyBody(t,n,this.b3,c,"b3"),Je._copyBody(t,n,this.b4,c,"b4"),c}validate(){if(this.b1==null||this.b2==null||this.b3==null||this.b4==null)throw new Error("Error: PulleyJoint cannot be simulated with null bodies");if(this.b1==this.b2||this.b3==this.b4)throw new Error("Error: PulleyJoint cannot have body1==body2 or body3==body4");if(this.b1.space!=this.space||this.b2.space!=this.space||this.b3.space!=this.space||this.b4.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: PulleyJoint must have jointMin <= jointMax");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: PulleyJoint cannot have both bodies in a linked pair non-dynamic");if(this.b3.type!=2&&this.b4.type!=2)throw new Error("Error: PulleyJoint cannot have both bodies in a linked pair non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake(),this.b3!=null&&this.b3.type==2&&this.b3.wake(),this.b4!=null&&this.b4.type==2&&this.b4.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component),this.b3.type==2&&Me._unionComponents(this.b3.component,this.component),this.b4.type==2&&Me._unionComponents(this.b4.component,this.component)}pair_exists(t,n){return this.b1.id==t&&(this.b2.id==n||this.b3.id==n||this.b4.id==n)||this.b2.id==t&&(this.b3.id==n||this.b4.id==n||this.b1.id==n)||this.b3.id==t&&(this.b4.id==n||this.b1.id==n||this.b2.id==n)?!0:this.b4.id==t?this.b1.id==n||this.b2.id==n?!0:this.b3.id==n:!1}clearcache(){this.jAcc=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.equal=this.jointMin==this.jointMax,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,this.a3relx=this.b3.axisy*this.a3localx-this.b3.axisx*this.a3localy,this.a3rely=this.a3localx*this.b3.axisx+this.a3localy*this.b3.axisy,this.a4relx=this.b4.axisy*this.a4localx-this.b4.axisx*this.a4localy,this.a4rely=this.a4localx*this.b4.axisx+this.a4localy*this.b4.axisy;let s=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),i=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),l=this.b4.posx+this.a4relx-(this.b3.posx+this.a3relx),r=this.b4.posy+this.a4rely-(this.b3.posy+this.a3rely),a=Math.sqrt(s*s+i*i),o=Math.sqrt(l*l+r*r);if(a!=0){let h=1/a;this.n12x=s*h,this.n12y=i*h}if(o!=0){let h=1/o;this.n34x=l*h,this.n34y=r*h;let u=this.ratio;this.n34x*=u,this.n34y*=u}else{let h=this.ratio/Math.sqrt(this.n34x*this.n34x+this.n34y*this.n34y);this.n34x*=h,this.n34y*=h}let p=a+this.ratio*o;this.equal?(p-=this.jointMax,this.slack=!1):p<this.jointMin?(p=this.jointMin-p,this.n12x=-this.n12x,this.n12y=-this.n12y,this.n34x=-this.n34x,this.n34y=-this.n34y,this.slack=!1):p>this.jointMax?(p-=this.jointMax,this.slack=!1):(this.n12x=0,this.n12y=0,this.n34x=0,this.n34y=0,p=0,this.slack=!0);let c=p;if(!this.slack){this.cx1=this.n12y*this.a1relx-this.n12x*this.a1rely,this.cx2=this.n12y*this.a2relx-this.n12x*this.a2rely,this.cx3=this.n34y*this.a3relx-this.n34x*this.a3rely,this.cx4=this.n34y*this.a4relx-this.n34x*this.a4rely;let h=this.ratio*this.ratio,u=this.b1.smass+this.b2.smass+h*(this.b3.smass+this.b4.smass)+this.b1.sinertia*this.cx1*this.cx1+this.b2.sinertia*this.cx2*this.cx2+this.b3.sinertia*this.cx3*this.cx3+this.b4.sinertia*this.cx4*this.cx4;if(this.b1==this.b4&&(u-=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b1.smass+this.cx1*this.cx4*this.b1.sinertia)),this.b1==this.b3&&(u+=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b1.smass+this.cx1*this.cx3*this.b1.sinertia)),this.b2==this.b3&&(u-=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b2.smass+this.cx2*this.cx3*this.b2.sinertia)),this.b2==this.b4&&(u+=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b2.smass+this.cx2*this.cx4*this.b2.sinertia)),this.kMass=u,this.kMass!=0?this.kMass=1/this.kMass:this.jAcc=0,this.stiff)this.bias=0,this.gamma=0;else{if(this.breakUnderError&&c*c>this.maxError*this.maxError)return!0;let x=2*Math.PI*this.frequency;this.gamma=1/(t*x*(2*this.damping+x*t));let y=1/(1+this.gamma),d=t*x*x*this.gamma;this.gamma*=y,this.kMass*=y,this.bias=-c*d,this.bias<-this.maxError?this.bias=-this.maxError:this.bias>this.maxError&&(this.bias=this.maxError)}this.jAcc*=n,this.jMax=this.maxForce*t}return!1}warmStart(){if(!this.slack){let t=this.b1.imass*this.jAcc;this.b1.velx-=this.n12x*t,this.b1.vely-=this.n12y*t;let n=this.b2.imass*this.jAcc;this.b2.velx+=this.n12x*n,this.b2.vely+=this.n12y*n;let s=this.b3.imass*this.jAcc;this.b3.velx-=this.n34x*s,this.b3.vely-=this.n34y*s;let i=this.b4.imass*this.jAcc;this.b4.velx+=this.n34x*i,this.b4.vely+=this.n34y*i,this.b1.angvel-=this.cx1*this.b1.iinertia*this.jAcc,this.b2.angvel+=this.cx2*this.b2.iinertia*this.jAcc,this.b3.angvel-=this.cx3*this.b3.iinertia*this.jAcc,this.b4.angvel+=this.cx4*this.b4.iinertia*this.jAcc}}applyImpulseVel(){if(this.slack)return!1;let t=this.n12x*(this.b2.velx+this.b2.kinvelx-this.b1.velx-this.b1.kinvelx)+this.n12y*(this.b2.vely+this.b2.kinvely-this.b1.vely-this.b1.kinvely)+this.n34x*(this.b4.velx+this.b4.kinvelx-this.b3.velx-this.b3.kinvelx)+this.n34y*(this.b4.vely+this.b4.kinvely-this.b3.vely-this.b3.kinvely)+(this.b2.angvel+this.b2.kinangvel)*this.cx2-(this.b1.angvel+this.b1.kinangvel)*this.cx1+(this.b4.angvel+this.b4.kinangvel)*this.cx4-(this.b3.angvel+this.b3.kinangvel)*this.cx3,n=this.kMass*(this.bias-t)-this.jAcc*this.gamma,s=this.jAcc;if(this.jAcc+=n,!this.equal&&this.jAcc>0&&(this.jAcc=0),this.breakUnderForce&&this.jAcc<-this.jMax)return!0;this.stiff||this.jAcc<-this.jMax&&(this.jAcc=-this.jMax),n=this.jAcc-s;let i=this.b1.imass*n;this.b1.velx-=this.n12x*i,this.b1.vely-=this.n12y*i;let l=this.b2.imass*n;this.b2.velx+=this.n12x*l,this.b2.vely+=this.n12y*l;let r=this.b3.imass*n;this.b3.velx-=this.n34x*r,this.b3.vely-=this.n34y*r;let a=this.b4.imass*n;return this.b4.velx+=this.n34x*a,this.b4.vely+=this.n34y*a,this.b1.angvel-=this.cx1*this.b1.iinertia*n,this.b2.angvel+=this.cx2*this.b2.iinertia*n,this.b3.angvel-=this.cx3*this.b3.iinertia*n,this.b4.angvel+=this.cx4*this.b4.iinertia*n,!1}applyImpulsePos(){let t=Me._nape,n,s=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,i=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,l=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,r=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,a=this.b3.axisy*this.a3localx-this.b3.axisx*this.a3localy,o=this.a3localx*this.b3.axisx+this.a3localy*this.b3.axisy,p=this.b4.axisy*this.a4localx-this.b4.axisx*this.a4localy,c=this.a4localx*this.b4.axisx+this.a4localy*this.b4.axisy,h,u=this.n12x,x=this.n12y,y=this.n34x,d=this.n34y,_=this.b2.posx+l-(this.b1.posx+s),f=this.b2.posy+r-(this.b1.posy+i),z=this.b4.posx+p-(this.b3.posx+a),P=this.b4.posy+c-(this.b3.posy+o),k=Math.sqrt(_*_+f*f),m=Math.sqrt(z*z+P*P);if(k!=0){let v=1/k;u=_*v,x=f*v}if(m!=0){let v=1/m;y=z*v,d=P*v;let w=this.ratio;y*=w,d*=w}else{let v=this.ratio/Math.sqrt(y*y+d*d);y*=v,d*=v}let b=k+this.ratio*m;this.equal?(b-=this.jointMax,h=!1):b<this.jointMin?(b=this.jointMin-b,u=-u,x=-x,y=-y,d=-d,h=!1):b>this.jointMax?(b-=this.jointMax,h=!1):(u=0,x=0,y=0,d=0,b=0,h=!0);let C=b;if(!h){if(this.breakUnderError&&C*C>this.maxError*this.maxError)return!0;if(C*C<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop)return!1;if(C*=.5,C*C>6){let S=this.b1.smass+this.b2.smass;if(S>t.Config.epsilon){let A=.75/S;if(n=-C*A,this.equal||n<0){let F=n*this.b1.imass;this.b1.posx-=u*F,this.b1.posy-=x*F;let B=n*this.b2.imass;this.b2.posx+=u*B,this.b2.posy+=x*B;let G=n*this.b3.imass;this.b3.posx-=y*G,this.b3.posy-=d*G;let q=n*this.b4.imass;this.b4.posx+=y*q,this.b4.posy+=d*q;let R=this.b2.posx+l-(this.b1.posx+s),T=this.b2.posy+r-(this.b1.posy+i),V=this.b4.posx+p-(this.b3.posx+a),K=this.b4.posy+c-(this.b3.posy+o),$=Math.sqrt(R*R+T*T),Y=Math.sqrt(V*V+K*K);if($!=0){let ee=1/$;u=R*ee,x=T*ee}if(Y!=0){let ee=1/Y;y=V*ee,d=K*ee;let J=this.ratio;y*=J,d*=J}else{let ee=this.ratio/Math.sqrt(y*y+d*d);y*=ee,d*=ee}let X=$+this.ratio*Y;this.equal?X-=this.jointMax:X<this.jointMin?(X=this.jointMin-X,u=-u,x=-x,y=-y,d=-d):X>this.jointMax?X-=this.jointMax:(u=0,x=0,y=0,d=0,X=0),C=X,C*=.5}}}let v=x*s-u*i,w=x*l-u*r,O=d*a-y*o,E=d*p-y*c,M=this.ratio*this.ratio,N=this.b1.smass+this.b2.smass+M*(this.b3.smass+this.b4.smass)+this.b1.sinertia*v*v+this.b2.sinertia*w*w+this.b3.sinertia*O*O+this.b4.sinertia*E*E;this.b1==this.b4&&(N-=2*((u*y+x*d)*this.b1.smass+v*E*this.b1.sinertia)),this.b1==this.b3&&(N+=2*((u*y+x*d)*this.b1.smass+v*O*this.b1.sinertia)),this.b2==this.b3&&(N-=2*((u*y+x*d)*this.b2.smass+w*O*this.b2.sinertia)),this.b2==this.b4&&(N+=2*((u*y+x*d)*this.b2.smass+w*E*this.b2.sinertia));let Z=N;if(Z!=0&&(Z=1/Z),n=-C*Z,this.equal||n<0){let S=this.b1.imass*n;this.b1.posx-=u*S,this.b1.posy-=x*S;let A=this.b2.imass*n;this.b2.posx+=u*A,this.b2.posy+=x*A;let F=this.b3.imass*n;this.b3.posx-=y*F,this.b3.posy-=d*F;let B=this.b4.imass*n;this.b4.posx+=y*B,this.b4.posy+=d*B,Je._rotateBody(this.b1,-v*this.b1.iinertia*n),Je._rotateBody(this.b2,w*this.b2.iinertia*n),Je._rotateBody(this.b3,-O*this.b3.iinertia*n),Je._rotateBody(this.b4,E*this.b4.iinertia*n)}}return!1}draw(t){}};Ts._wrapFn=null,Ts._createFn=null;var bi=Ts;var ws=class{constructor(e,t){this.cnt=0;this.body=null;this.cnt=e,this.body=t}};var hl=class extends Me{constructor(t,n){super();this.outer_zn=null;this.bodies=null;this.dim=0;this.jAcc=null;this.bias=null;this.stepped=!1;this.L=null;this.y=null;this.soft=0;this.gamma=0;this.velonly=!1;this.jMax=0;this.Keff=null;this.vec3=null;this.J=null;this.jOld=null;this.bodies=[],this.dim=t,this.velonly=n,this.jAcc=[],this.bias=[],this.L=[],this.J=[],this.jOld=[],this.y=[],this.Keff=[],this.vec3=Me._nape.geom.Vec3.get(0,0,0);for(let s=0;s<t;s++){let i=this.bias[s]=this.J[s]=this.jOld[s]=this.y[s]=0;this.jAcc[s]=i;for(let l=0;l<t;l++)this.L[s*t+l]=0}this.stepped=!1}bindVec2_invalidate(t){this.outer_zn.__invalidate()}addBody(t){let n=null;for(let s of this.bodies)if(s.body===t){n=s;break}n===null?(this.bodies.push(new ws(1,t)),this.active&&this.space!=null&&t?.constraints.add(this)):n.cnt++}remBody(t){let n=null,s=this.bodies.length|0,i=0;for(;i<s;){let l=this.bodies[i];if(l.body===t){l.cnt--,l.cnt===0&&(s>0&&(this.bodies[i]=this.bodies[s-1]),this.bodies.pop(),this.active&&this.space!=null&&t?.constraints.remove(this)),n=l;break}++i}return n!=null}bodyImpulse(t){for(let s=0;s<this.dim;s++)this.J[s]=this.jAcc[s];let n=Me._nape.geom.Vec3.get(0,0,0);return this.stepped&&this.outer_zn.__impulse(this.J,t.outer,n),n}activeBodies(){for(let t of this.bodies)t.body!=null&&t.body.constraints.add(this)}inactiveBodies(){for(let t of this.bodies)t.body!=null&&t.body.constraints.remove(this)}copy(t,n){let s=this.outer_zn.__copy();throw this.copyto(s),new Error("not done yet")}validate(){for(let t of this.bodies)if(t.body.space!==this.space)throw new Error("Error: Constraints must have each body within the same sapce to which the constraint has been assigned");this.outer_zn.__validate()}wake_connected(){for(let t of this.bodies)t.body.type===2&&t.body.wake()}forest(){for(let t of this.bodies)if(t.body.type===2){let n;if(t.body.component===t.body.component.parent)n=t.body.component;else{let i=t.body.component,l=null;for(;i!==i.parent;){let r=i.parent;i.parent=l,l=i,i=r}for(;l!=null;){let r=l.parent;l.parent=i,l=r}n=i}let s;if(this.component===this.component.parent)s=this.component;else{let i=this.component,l=null;for(;i!==i.parent;){let r=i.parent;i.parent=l,l=i,i=r}for(;l!=null;){let r=l.parent;l.parent=i,l=r}s=i}n!==s&&(n.rank<s.rank?n.parent=s:n.rank>s.rank?s.parent=n:(s.parent=n,n.rank++))}}pair_exists(t,n){let s=!1,i=this.bodies.length|0;for(let l=0;l<i;l++){let r=this.bodies[l].body;for(let a=l+1;a<i;a++){let o=this.bodies[a].body;if(r.id===t&&o.id===n||r.id===n&&o.id===t){s=!0;break}}if(s)break}return s}broken(){this.outer_zn.__broken()}clearcache(){for(let t=0;t<this.dim;t++)this.jAcc[t]=0;this.pre_dt=-1}lsq(t){let n=0;for(let s=0;s<this.dim;s++)n+=t[s]*t[s];return n}_clamp(t,n){let s=this.lsq(t);if(s>n*n){let i=n/Math.sqrt(s);for(let l=0;l<this.dim;l++)t[l]*=i}}solve(t){let n=0;for(let s=0;s<this.dim;s++){let i=0;for(let r=0;r<s-1;r++)i+=this.L[s*this.dim+r]*this.L[s*this.dim+r];let l=Math.sqrt(t[n++]-i);if(this.L[s*this.dim+s]=l,l!==0){l=1/l;for(let r=s+1;r<this.dim;r++){let a=0;for(let o=0;o<s-1;o++)a+=this.L[r*this.dim+o]*this.L[s*this.dim+o];this.L[r*this.dim+s]=l*(t[n++]-a)}}else{for(let r=s+1;r<this.dim;r++)this.L[r*this.dim+s]=0;n+=this.dim-s-1}}return this.L}transform(t,n){for(let s=0;s<this.dim;s++){let i=n[s],l=t[s*this.dim+s];if(l!==0){for(let r=0;r<s;r++)i-=t[s*this.dim+r]*this.y[r];this.y[s]=i/l}else this.y[s]=0}for(let s=0;s<this.dim;s++){let i=this.dim-1-s,l=t[i*this.dim+i];if(l!==0){let r=this.y[i];for(let a=i+1;a<this.dim;a++)r-=t[a*this.dim+i]*n[a];n[i]=r/l}else n[i]=0}}preStep(t){this.pre_dt===-1&&(this.pre_dt=t);let n=t/this.pre_dt;if(this.pre_dt=t,this.stepped=!0,this.outer_zn.__prepare(),this.outer_zn.__eff_mass(this.Keff),this.L=this.solve(this.Keff),!this.stiff&&!this.velonly){let s=2*Math.PI*this.frequency;this.gamma=1/(t*s*(2*this.damping+s*t));let i=1/(1+this.gamma),l=t*s*s*this.gamma;if(this.gamma*=i,this.soft=i,this.outer_zn.__position(this.bias),this.breakUnderError&&this.lsq(this.bias)>this.maxError*this.maxError)return!0;for(let r=0;r<this.dim;r++)this.bias[r]*=-l;this._clamp(this.bias,this.maxError)}else{for(let s=0;s<this.dim;s++)this.bias[s]=0;this.gamma=0,this.soft=1}for(let s=0;s<this.dim;s++)this.jAcc[s]*=n;return this.jMax=this.maxForce*t,!1}warmStart(){for(let t of this.bodies){let n=t.body;this.outer_zn.__impulse(this.jAcc,n.outer,this.vec3);let s=n.imass,i=n,l=i.velx,r=this.vec3;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let a=r.zpp_inner;a._validate!=null&&a._validate(),i.velx=l+r.zpp_inner.x*s;let o=n,p=o.vely,c=this.vec3;if(c!=null&&c.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let h=c.zpp_inner;h._validate!=null&&h._validate(),o.vely=p+c.zpp_inner.y*s;let u=n,x=u.angvel,y=this.vec3;if(y!=null&&y.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let d=y.zpp_inner;d._validate!=null&&d._validate(),u.angvel=x+y.zpp_inner.z*n.iinertia}}applyImpulseVel(){this.outer_zn.__velocity(this.J);for(let t=0;t<this.dim;t++)this.J[t]=this.bias[t]-this.J[t];this.transform(this.L,this.J);for(let t=0;t<this.dim;t++)this.jOld[t]=this.jAcc[t],this.jAcc[t]+=this.J[t]=this.J[t]*this.soft-this.jAcc[t]*this.gamma;if(this.outer_zn.__clamp(this.jAcc),(this.breakUnderForce||!this.stiff)&&this.lsq(this.jAcc)>this.jMax*this.jMax){if(this.breakUnderForce)return!0;this.stiff||this._clamp(this.jAcc,this.jMax)}for(let t=0;t<this.dim;t++)this.J[t]=this.jAcc[t]-this.jOld[t];for(let t of this.bodies){let n=t.body;this.outer_zn.__impulse(this.J,n.outer,this.vec3);let s=n.imass,i=n,l=i.velx,r=this.vec3;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let a=r.zpp_inner;a._validate!=null&&a._validate(),i.velx=l+r.zpp_inner.x*s;let o=n,p=o.vely,c=this.vec3;if(c!=null&&c.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let h=c.zpp_inner;h._validate!=null&&h._validate(),o.vely=p+c.zpp_inner.y*s;let u=n,x=u.angvel,y=this.vec3;if(y!=null&&y.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let d=y.zpp_inner;d._validate!=null&&d._validate(),u.angvel=x+y.zpp_inner.z*n.iinertia}return!1}applyImpulsePos(){if(this.velonly)return!1;this.outer_zn.__prepare(),this.outer_zn.__position(this.J);let t=this.lsq(this.J);if(this.breakUnderError&&t>this.maxError*this.maxError)return!0;if(t<Me._nape.Config.constraintLinearSlop*Me._nape.Config.constraintLinearSlop)return!1;for(let n=0;n<this.dim;n++)this.J[n]*=-1;this.outer_zn.__eff_mass(this.Keff),this.transform(this.solve(this.Keff),this.J),this.outer_zn.__clamp(this.J);for(let n of this.bodies){let s=n.body;this.outer_zn.__impulse(this.J,s.outer,this.vec3);let i=s.imass,l=s,r=l.posx,a=this.vec3;if(a!=null&&a.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let o=a.zpp_inner;o._validate!=null&&o._validate(),l.posx=r+a.zpp_inner.x*i;let p=s,c=p.posy,h=this.vec3;if(h!=null&&h.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let u=h.zpp_inner;u._validate!=null&&u._validate(),p.posy=c+h.zpp_inner.y*i;let x=this.vec3;if(x!=null&&x.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let y=x.zpp_inner;y._validate!=null&&y._validate();let d=x.zpp_inner.z*s.iinertia;if(s.rot+=d,d*d>1e-4)s.axisx=Math.sin(s.rot),s.axisy=Math.cos(s.rot);else{let _=d*d,f=1-.5*_,z=1-_*_/8,P=(f*s.axisx+d*s.axisy)*z;s.axisy=(f*s.axisy-d*s.axisx)*z,s.axisx=P}}return!1}draw(t){this.outer_zn.__draw(t)}};var Ls=class Ls extends Me{constructor(){super();this.outer_zn=null;this.b1=null;this.b2=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.phase=0;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.kMassd=0;this.kMasse=0;this.kMassf=0;this.jAccx=0;this.jAccy=0;this.jAccz=0;this.jMax=1/0;this.gamma=0;this.biasx=0;this.biasy=0;this.biasz=0;this.stepped=!1;this.phase=0,this.jAccx=0,this.jAccy=0,this.jAccz=0,this.jMax=1/0,this.stepped=!1,this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0}bodyImpulse(t){let n=Me._nape;return this.stepped?t==this.b1?n.geom.Vec3.get(-this.jAccx,-this.jAccy,-(this.jAccy*this.a1relx-this.jAccx*this.a1rely+this.jAccz)):n.geom.Vec3.get(this.jAccx,this.jAccy,this.jAccy*this.a2relx-this.jAccx*this.a2rely+this.jAccz):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){let t=Me._nape,n=Me._zpp,s=this.a1localx,i=this.a1localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a1=l,this.wrap_a1.zpp_inner._inuse=!0,this.wrap_a1.zpp_inner._validate=this.validate_a1.bind(this),this.wrap_a1.zpp_inner._invalidate=this.invalidate_a1.bind(this)}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){let t=Me._nape,n=Me._zpp,s=this.a2localx,i=this.a2localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a2=l,this.wrap_a2.zpp_inner._inuse=!0,this.wrap_a2.zpp_inner._validate=this.validate_a2.bind(this),this.wrap_a2.zpp_inner._invalidate=this.invalidate_a2.bind(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=Ls._createFn(null,null,i,l.zpp_inner_zn.wrap_a2);return this.copyto(r),Je._copyBody(t,n,this.b1,r,"b1"),Je._copyBody(t,n,this.b2,r,"b2"),r}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: WeldJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAccx=0,this.jAccy=0,this.jAccz=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let s=this.b1.smass+this.b2.smass;if(this.kMassa=s,this.kMassb=0,this.kMassd=s,this.kMassc=0,this.kMasse=0,this.kMassf=0,this.b1.sinertia!=0){let r=this.a1relx*this.b1.sinertia,a=this.a1rely*this.b1.sinertia;this.kMassa+=a*this.a1rely,this.kMassb+=-a*this.a1relx,this.kMassd+=r*this.a1relx,this.kMassc+=-a,this.kMasse+=r,this.kMassf+=this.b1.sinertia}if(this.b2.sinertia!=0){let r=this.a2relx*this.b2.sinertia,a=this.a2rely*this.b2.sinertia;this.kMassa+=a*this.a2rely,this.kMassb+=-a*this.a2relx,this.kMassd+=r*this.a2relx,this.kMassc+=-a,this.kMasse+=r,this.kMassf+=this.b2.sinertia}let i=this.kMassa*(this.kMassd*this.kMassf-this.kMasse*this.kMasse)+this.kMassb*(this.kMassc*this.kMasse-this.kMassb*this.kMassf)+this.kMassc*(this.kMassb*this.kMasse-this.kMassc*this.kMassd),l;if(i!=i)this.kMassa=0,this.kMassb=0,this.kMassd=0,this.kMassc=0,this.kMasse=0,this.kMassf=0,l=7;else if(i==0){let r=0;this.kMassa!=0?this.kMassa=1/this.kMassa:(this.kMassa=0,r|=1),this.kMassd!=0?this.kMassd=1/this.kMassd:(this.kMassd=0,r|=2),this.kMassf!=0?this.kMassf=1/this.kMassf:(this.kMassf=0,r|=4),this.kMassb=this.kMassc=this.kMasse=0,l=r}else{let r=1/i,a=r*(this.kMassd*this.kMassf-this.kMasse*this.kMasse),o=r*(this.kMasse*this.kMassc-this.kMassb*this.kMassf),p=r*(this.kMassa*this.kMassf-this.kMassc*this.kMassc),c=r*(this.kMassb*this.kMasse-this.kMassc*this.kMassd),h=r*(this.kMassb*this.kMassc-this.kMassa*this.kMasse),u=r*(this.kMassa*this.kMassd-this.kMassb*this.kMassb);this.kMassa=a,this.kMassb=o,this.kMassd=p,this.kMassc=c,this.kMasse=h,this.kMassf=u,l=0}if((l&1)!=0&&(this.jAccx=0),(l&2)!=0&&(this.jAccy=0),(l&4)!=0&&(this.jAccz=0),this.stiff)this.biasx=0,this.biasy=0,this.biasz=0,this.gamma=0;else{let r=2*Math.PI*this.frequency;this.gamma=1/(t*r*(2*this.damping+r*t));let a=1/(1+this.gamma),o=t*r*r*this.gamma;this.gamma*=a;let p=a;if(this.kMassa*=p,this.kMassb*=p,this.kMassd*=p,this.kMassc*=p,this.kMasse*=p,this.kMassf*=p,this.biasx=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),this.biasy=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),this.biasz=this.b2.rot-this.b1.rot-this.phase,this.breakUnderError&&this.biasx*this.biasx+this.biasy*this.biasy+this.biasz*this.biasz>this.maxError*this.maxError)return!0;let c=-o;this.biasx*=c,this.biasy*=c,this.biasz*=c;let h=this.maxError,u=this.biasx*this.biasx+this.biasy*this.biasy+this.biasz*this.biasz;if(u>h*h){let x=h*(1/Math.sqrt(u));this.biasx*=x,this.biasy*=x,this.biasz*=x}}return this.jAccx*=n,this.jAccy*=n,this.jAccz*=n,this.jMax=this.maxForce*t,!1}warmStart(){let t=this.b1.imass;this.b1.velx-=this.jAccx*t,this.b1.vely-=this.jAccy*t;let n=this.b2.imass;this.b2.velx+=this.jAccx*n,this.b2.vely+=this.jAccy*n,this.b1.angvel-=(this.jAccy*this.a1relx-this.jAccx*this.a1rely+this.jAccz)*this.b1.iinertia,this.b2.angvel+=(this.jAccy*this.a2relx-this.jAccx*this.a2rely+this.jAccz)*this.b2.iinertia}applyImpulseVel(){let t=this.b2.velx+this.b2.kinvelx-this.a2rely*(this.b2.angvel+this.b2.kinangvel)-(this.b1.velx+this.b1.kinvelx-this.a1rely*(this.b1.angvel+this.b1.kinangvel)),n=this.b2.vely+this.b2.kinvely+this.a2relx*(this.b2.angvel+this.b2.kinangvel)-(this.b1.vely+this.b1.kinvely+this.a1relx*(this.b1.angvel+this.b1.kinangvel)),s=this.b2.angvel+this.b2.kinangvel-this.b1.angvel-this.b1.kinangvel,i=this.biasx-t,l=this.biasy-n,r=this.biasz-s,a=this.kMassa*i+this.kMassb*l+this.kMassc*r,o=this.kMassb*i+this.kMassd*l+this.kMasse*r;r=this.kMassc*i+this.kMasse*l+this.kMassf*r,i=a,l=o,i-=this.jAccx*this.gamma,l-=this.jAccy*this.gamma,r-=this.jAccz*this.gamma;let p=this.jAccx,c=this.jAccy,h=this.jAccz;if(this.jAccx+=i,this.jAccy+=l,this.jAccz+=r,this.breakUnderForce){if(this.jAccx*this.jAccx+this.jAccy*this.jAccy+this.jAccz*this.jAccz>this.jMax*this.jMax)return!0}else if(!this.stiff){let y=this.jMax,d=this.jAccx*this.jAccx+this.jAccy*this.jAccy+this.jAccz*this.jAccz;if(d>y*y){let _=y*(1/Math.sqrt(d));this.jAccx*=_,this.jAccy*=_,this.jAccz*=_}}i=this.jAccx-p,l=this.jAccy-c,r=this.jAccz-h;let u=this.b1.imass;this.b1.velx-=i*u,this.b1.vely-=l*u;let x=this.b2.imass;return this.b2.velx+=i*x,this.b2.vely+=l*x,this.b1.angvel-=(l*this.a1relx-i*this.a1rely+r)*this.b1.iinertia,this.b2.angvel+=(l*this.a2relx-i*this.a2rely+r)*this.b2.iinertia,!1}applyImpulsePos(){let t=Me._nape,n=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,s=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,i=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,l=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s),o=this.b2.rot-this.b1.rot-this.phase,p,c,h;if(this.breakUnderError&&r*r+a*a+o*o>this.maxError*this.maxError)return!0;let u=!0;r*r+a*a<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop&&(u=!1,r=0,a=0);let x=t.Config.constraintAngularSlop;if(o*o<x*x)if(u)o=0;else return!1;if(r*=.5,a*=.5,o*=.5,r*r+a*a>6){let A=this.b1.smass+this.b2.smass;if(A>t.Config.epsilon){let F=.75/A;p=-r*F,c=-a*F;let B=20,G=p*p+c*c;if(G>B*B){let T=B*(1/Math.sqrt(G));p*=T,c*=T}let q=this.b1.imass;this.b1.posx-=p*q,this.b1.posy-=c*q;let R=this.b2.imass;this.b2.posx+=p*R,this.b2.posy+=c*R,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s),o=this.b2.rot-this.b1.rot-this.phase,r*=.5,a*=.5,o*=.5}}let y=this.b1.smass+this.b2.smass,d=y,_=0,f=y,z=0,P=0,k=0;if(this.b1.sinertia!=0){let A=n*this.b1.sinertia,F=s*this.b1.sinertia;d+=F*s,_+=-F*n,f+=A*n,z+=-F,P+=A,k+=this.b1.sinertia}if(this.b2.sinertia!=0){let A=i*this.b2.sinertia,F=l*this.b2.sinertia;d+=F*l,_+=-F*i,f+=A*i,z+=-F,P+=A,k+=this.b2.sinertia}p=-r,c=-a,h=-o;let m=6,b=p*p+c*c;if(b>m*m){let A=m*(1/Math.sqrt(b));p*=A,c*=A}let v=h<-.25,w=d*(f*k-P*P)+_*(z*P-_*k)+z*(_*P-z*f);if(w!=w)h=0,c=h,p=c;else if(w==0)d!=0?p/=d:p=0,f!=0?c/=f:c=0,k!=0?h/=k:h=0;else{let A=1/w,F=P*z-_*k,B=_*P-z*f,G=_*z-d*P,q=A*(p*(f*k-P*P)+c*F+h*B),R=A*(p*F+c*(d*k-z*z)+h*G);h=A*(p*B+c*G+h*(d*f-_*_)),p=q,c=R}let O=this.b1.imass;this.b1.posx-=p*O,this.b1.posy-=c*O;let E=this.b2.imass;this.b2.posx+=p*E,this.b2.posy+=c*E;let M=this.b1,N=-(c*n-p*s+h)*this.b1.iinertia;Je._rotateBody(M,N);let Z=this.b2,S=(c*i-p*l+h)*this.b2.iinertia;return Je._rotateBody(Z,S),!1}draw(t){}};Ls._wrapFn=null,Ls._createFn=null;var zi=Ls;var it=class it{constructor(){this.outer=null;this.hnext=null;this.id=0;this.di=0;this.stamp=0;this.up_stamp=0;this.sleep_stamp=0;this.endGenerated=0;this.active=!1;this.cleared=!1;this.sleeping=!1;this.present=0;this.intchange=!1;this.presentable=!1;this.continuous=!1;this.fresh=!1;this.immState=0;this.invalidated=!1;this.b1=null;this.b2=null;this.ws1=null;this.ws2=null;this.pair=null;this.type=0;this.colarb=null;this.fluidarb=null;this.sensorarb=null;this.sensorarb=null,this.fluidarb=null,this.colarb=null,this.type=0,this.pair=null,this.ws2=null,this.ws1=null,this.b2=null,this.b1=null,this.invalidated=!1,this.immState=0,this.fresh=!1,this.continuous=!1,this.presentable=!1,this.intchange=!1,this.present=0,this.sleeping=!1,this.cleared=!1,this.active=!1,this.endGenerated=0,this.sleep_stamp=0,this.up_stamp=0,this.stamp=0,this.di=0,this.id=0,this.hnext=null,this.outer=null}static _initEnums(e,t){let n=()=>{t.internal=!0;let s=new e.dynamics.ArbiterType;return t.internal=!1,s};t.ArbiterType_COLLISION==null&&(t.ArbiterType_COLLISION=n()),t.ArbiterType_SENSOR==null&&(t.ArbiterType_SENSOR=n()),t.ArbiterType_FLUID==null&&(t.ArbiterType_FLUID=n()),it.types=[null,t.ArbiterType_COLLISION,t.ArbiterType_SENSOR,null,t.ArbiterType_FLUID]}wrapper(){if(this.outer==null){let e=it._nape;it.internal=!0,this.type==it.COL?(this.colarb.outer_zn=it._createColArb(),this.outer=this.colarb.outer_zn):this.type==it.FLUID?(this.fluidarb.outer_zn=it._createFluidArb(),this.outer=this.fluidarb.outer_zn):this.outer=new e.dynamics.Arbiter,this.outer.zpp_inner=this,it.internal=!1}return this.outer}inactiveme(){return!this.active}acting(){return this.active?(this.immState&1)!=0:!1}swap_features(){let e=this.b1;this.b1=this.b2,this.b2=e,e=this.ws1,this.ws1=this.ws2,this.ws2=e,e=this.colarb.s1,this.colarb.s1=this.colarb.s2,this.colarb.s2=e}lazyRetire(e,t){let n=it._zpp;this.cleared=!0,(t==null||this.b2==t)&&it._removeFromArbiterList(this.b1.arbiters,this,n),(t==null||this.b1==t)&&it._removeFromArbiterList(this.b2.arbiters,this,n),this.pair!=null&&(this.pair.arb=null,this.pair=null),this.active=!1,e.f_arbiters.modified=!0}sup_assign(e,t,n,s){let i=it._zpp;this.b1=e.body,this.ws1=e,this.b2=t.body,this.ws2=t,this.id=n,this.di=s,it._addToArbiterList(this.b1.arbiters,this,i),it._addToArbiterList(this.b2.arbiters,this,i),this.active=!0,this.present=0,this.cleared=!1,this.sleeping=!1,this.fresh=!1,this.presentable=!1}sup_retire(){let e=it._zpp;this.cleared||(it._removeFromArbiterList(this.b1.arbiters,this,e),it._removeFromArbiterList(this.b2.arbiters,this,e),this.pair!=null&&(this.pair.arb=null,this.pair=null)),this.b1=this.b2=null,this.active=!1,this.intchange=!1}static _removeFromArbiterList(e,t,n){let s=null,i=e.head;for(;i!=null;){if(i.elt==t){let l,r;s==null?(l=e.head,r=l.next,e.head=r,e.head==null&&(e.pushmod=!0)):(l=s.next,r=l.next,s.next=r,r==null&&(e.pushmod=!0));let a=l;a.elt=null,a.next=n.util.ZNPNode_ZPP_Arbiter.zpp_pool,n.util.ZNPNode_ZPP_Arbiter.zpp_pool=a,e.modified=!0,e.length--,e.pushmod=!0;break}s=i,i=i.next}}static _addToArbiterList(e,t,n){let s;n.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?s=new n.util.ZNPNode_ZPP_Arbiter:(s=n.util.ZNPNode_ZPP_Arbiter.zpp_pool,n.util.ZNPNode_ZPP_Arbiter.zpp_pool=s.next,s.next=null),s.elt=t;let i=s;i.next=e.head,e.head=i,e.modified=!0,e.length++}};it._nape=null,it._zpp=null,it.internal=!1,it._createColArb=null,it._createFluidArb=null,it.COL=1,it.FLUID=4,it.SENSOR=2,it.types=[];var Ie=it;var Ds=class Ds extends Ie{constructor(){super(),this.next=null,this.type=Ie.SENSOR,this.sensorarb=this}alloc(){}free(){}assign(e,t,n,s){this.sup_assign(e,t,n,s)}retire(){this.sup_retire(),this.next=Ds.zpp_pool,Ds.zpp_pool=this}makemutable(){}makeimmutable(){}};Ds.zpp_pool=null;var Ot=Ds;var Fs=class Fs extends Ie{constructor(){super();this.outer_zn=null;this.centroidx=0;this.centroidy=0;this.overlap=0;this.r1x=0;this.r1y=0;this.r2x=0;this.r2y=0;this.nodrag=!1;this.wMass=0;this.adamp=0;this.agamma=0;this.vMassa=0;this.vMassb=0;this.vMassc=0;this.dampx=0;this.dampy=0;this.lgamma=0;this.nx=0;this.ny=0;this.buoyx=0;this.buoyy=0;this.wrap_position=null;this.mutable=!1;this.pre_dt=0;this.pre_dt=0,this.mutable=!1,this.wrap_position=null,this.buoyy=0,this.buoyx=0,this.ny=0,this.nx=0,this.lgamma=0,this.dampy=0,this.dampx=0,this.vMassc=0,this.vMassb=0,this.vMassa=0,this.agamma=0,this.adamp=0,this.wMass=0,this.nodrag=!1,this.r2y=0,this.r2x=0,this.r1y=0,this.r1x=0,this.overlap=0,this.centroidy=0,this.centroidx=0,this.next=null,this.outer_zn=null,this.type=Ie.FLUID,this.fluidarb=this,this.buoyx=0,this.buoyy=0,this.pre_dt=-1}alloc(){}free(){}position_validate(){if(!this.active)throw new Error("Error: Arbiter not currently in use");this.wrap_position.zpp_inner.x=this.centroidx,this.wrap_position.zpp_inner.y=this.centroidy}position_invalidate(t){this.centroidx=t.x,this.centroidy=t.y}getposition(){let t=Ie._zpp,n=Ie._nape,s;if(t.util.ZPP_PubPool.poolVec2==null?s=new n.geom.Vec2:(s=t.util.ZPP_PubPool.poolVec2,t.util.ZPP_PubPool.poolVec2=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s==t.util.ZPP_PubPool.nextVec2&&(t.util.ZPP_PubPool.nextVec2=null)),s.zpp_inner==null){let i;t.geom.ZPP_Vec2.zpp_pool==null?i=new t.geom.ZPP_Vec2:(i=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=i.next,i.next=null),i.weak=!1,i._immutable=!1,i.x=0,i.y=0,s.zpp_inner=i,s.zpp_inner.outer=s}else{if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");i._isimmutable!=null&&i._isimmutable();let l;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=s.zpp_inner;if(r._validate!=null&&r._validate(),s.zpp_inner.x==0){if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let a=s.zpp_inner;a._validate!=null&&a._validate(),l=s.zpp_inner.y==0}else l=!1;if(!l){s.zpp_inner.x=0,s.zpp_inner.y=0;let a=s.zpp_inner;a._invalidate!=null&&a._invalidate(a)}}s.zpp_inner.weak=!1,this.wrap_position=s,this.wrap_position.zpp_inner._inuse=!0,this.wrap_position.zpp_inner._immutable=!this.mutable,this.wrap_position.zpp_inner._validate=this.position_validate.bind(this),this.wrap_position.zpp_inner._invalidate=this.position_invalidate.bind(this)}assign(t,n,s,i){this.sup_assign(t,n,s,i),this.nx=0,this.ny=1,this.dampx=0,this.dampy=0,this.adamp=0}retire(){this.sup_retire(),this.next=Fs.zpp_pool,Fs.zpp_pool=this,this.pre_dt=-1}makemutable(){this.mutable=!0,this.wrap_position!=null&&(this.wrap_position.zpp_inner._immutable=!1)}makeimmutable(){this.mutable=!1,this.wrap_position!=null&&(this.wrap_position.zpp_inner._immutable=!0)}inject(t,n,s){this.overlap=t,this.centroidx=n,this.centroidy=s}preStep(t,n){let s=Ie._nape;this.pre_dt==-1&&(this.pre_dt=n);let i=n/this.pre_dt;this.pre_dt=n,this.r1x=this.centroidx-this.b1.posx,this.r1y=this.centroidy-this.b1.posy,this.r2x=this.centroidx-this.b2.posx,this.r2y=this.centroidy-this.b2.posy;let l,r;this.ws1.fluidEnabled&&this.ws1.fluidProperties.wrap_gravity!=null?(l=this.ws1.fluidProperties.gravityx,r=this.ws1.fluidProperties.gravityy):(l=t.gravityx,r=t.gravityy);let a,o;this.ws2.fluidEnabled&&this.ws2.fluidProperties.wrap_gravity!=null?(a=this.ws2.fluidProperties.gravityx,o=this.ws2.fluidProperties.gravityy):(a=t.gravityx,o=t.gravityy);let p=0,c=0;if(this.ws1.fluidEnabled&&this.ws2.fluidEnabled){let h=this.overlap*this.ws1.fluidProperties.density,u=this.overlap*this.ws2.fluidProperties.density;if(h>u){let x=h+u;p-=l*x,c-=r*x}else if(h<u){let x=h+u;p+=a*x,c+=o*x}else{let x=l+a,y=r+o,d=.5;if(x*=d,y*=d,this.ws1.worldCOMx*x+this.ws1.worldCOMy*y>this.ws2.worldCOMx*x+this.ws2.worldCOMy*y){let _=h+u;p-=x*_,c-=y*_}else{let _=h+u;p+=x*_,c+=y*_}}}else if(this.ws1.fluidEnabled){let h=this.overlap*this.ws1.fluidProperties.density;p-=l*h,c-=r*h}else if(this.ws2.fluidEnabled){let h=this.overlap*this.ws2.fluidProperties.density;p+=a*h,c+=o*h}if(p*=n,c*=n,this.buoyx=p,this.buoyy=c,this.b1.type==2&&(this.b1.velx-=p*this.b1.imass,this.b1.vely-=c*this.b1.imass,this.b1.angvel-=(c*this.r1x-p*this.r1y)*this.b1.iinertia),this.b2.type==2&&(this.b2.velx+=p*this.b2.imass,this.b2.vely+=c*this.b2.imass,this.b2.angvel+=(c*this.r2x-p*this.r2y)*this.b2.iinertia),(!this.ws1.fluidEnabled||this.ws1.fluidProperties.viscosity==0)&&(!this.ws2.fluidEnabled||this.ws2.fluidProperties.viscosity==0))this.nodrag=!0,this.dampx=0,this.dampy=0,this.adamp=0;else{this.nodrag=!1;let h=0;if(this.ws1.fluidEnabled&&(this.ws2.validate_angDrag(),h+=this.ws1.fluidProperties.viscosity*this.ws2.angDrag*this.overlap/this.ws2.area),this.ws2.fluidEnabled&&(this.ws1.validate_angDrag(),h+=this.ws2.fluidProperties.viscosity*this.ws1.angDrag*this.overlap/this.ws1.area),h!=0){let d=this.b1.sinertia+this.b2.sinertia;d!=0?this.wMass=1/d:this.wMass=0,h*=4e-4;let _=2*Math.PI*h;this.agamma=1/(n*_*(2+_*n));let f=1/(1+this.agamma);this.agamma*=f,this.wMass*=f}else this.wMass=0,this.agamma=0;let u=this.b2.velx+this.b2.kinvelx-this.r2y*(this.b2.angvel+this.b2.kinangvel)-(this.b1.velx+this.b1.kinvelx-this.r1y*(this.b2.angvel+this.b2.kinangvel)),x=this.b2.vely+this.b2.kinvely+this.r2x*(this.b2.angvel+this.b2.kinangvel)-(this.b1.vely+this.b1.kinvely+this.r1x*(this.b1.angvel+this.b1.kinangvel));if(!(u*u+x*x<s.Config.epsilon*s.Config.epsilon)){let d=u*u+x*x,_=1/Math.sqrt(d);this.nx=u*_,this.ny=x*_}let y=0;if(this.ws1.fluidEnabled){let d=-this.ws1.fluidProperties.viscosity*this.overlap/this.ws2.area;if(this.ws2.type==0)y-=d*this.ws2.circle.radius*s.Config.fluidLinearDrag/(2*this.ws2.circle.radius*Math.PI);else{let _=this.ws2.polygon,f=0,z=0,P=_.edges.head;for(;P!=null;){let k=P.elt;f+=k.length;let m=d*k.length*(k.gnormx*this.nx+k.gnormy*this.ny);m>0&&(m*=-s.Config.fluidVacuumDrag),z-=m*.5*s.Config.fluidLinearDrag,P=P.next}y+=z/f}}if(this.ws2.fluidEnabled){let d=-this.ws2.fluidProperties.viscosity*this.overlap/this.ws1.area;if(this.ws1.type==0)y-=d*this.ws1.circle.radius*s.Config.fluidLinearDrag/(2*this.ws1.circle.radius*Math.PI);else{let _=this.ws1.polygon,f=0,z=0,P=_.edges.head;for(;P!=null;){let k=P.elt;f+=k.length;let m=d*k.length*(k.gnormx*this.nx+k.gnormy*this.ny);m>0&&(m*=-s.Config.fluidVacuumDrag),z-=m*.5*s.Config.fluidLinearDrag,P=P.next}y+=z/f}}if(y!=0){let d=this.b1.smass+this.b2.smass,_=d,f=0,z=d;if(this.b1.sinertia!=0){let b=this.r1x*this.b1.sinertia,C=this.r1y*this.b1.sinertia;_+=C*this.r1y,f+=-C*this.r1x,z+=b*this.r1x}if(this.b2.sinertia!=0){let b=this.r2x*this.b2.sinertia,C=this.r2y*this.b2.sinertia;_+=C*this.r2y,f+=-C*this.r2x,z+=b*this.r2x}let P=_*z-f*f;if(P!==P)z=0,f=z,_=f;else if(P==0)_!=0?_=1/_:_=0,z!=0?z=1/z:z=0,f=0;else{let b=1/P,C=z*b;z=_*b,_=C,f*=-b}this.vMassa=_,this.vMassb=f,this.vMassc=z;let k=2*Math.PI*y;this.lgamma=1/(n*k*(2+k*n));let m=1/(1+this.lgamma);this.lgamma*=m,this.vMassa*=m,this.vMassb*=m,this.vMassc*=m}else this.vMassa=0,this.vMassb=0,this.vMassc=0,this.lgamma=0}this.dampx*=i,this.dampy*=i,this.adamp*=i}warmStart(){this.b1.velx-=this.dampx*this.b1.imass,this.b1.vely-=this.dampy*this.b1.imass,this.b2.velx+=this.dampx*this.b2.imass,this.b2.vely+=this.dampy*this.b2.imass,this.b1.angvel-=this.b1.iinertia*(this.dampy*this.r1x-this.dampx*this.r1y),this.b2.angvel+=this.b2.iinertia*(this.dampy*this.r2x-this.dampx*this.r2y),this.b1.angvel-=this.adamp*this.b1.iinertia,this.b2.angvel+=this.adamp*this.b2.iinertia}applyImpulseVel(){if(!this.nodrag){let t=this.b1.angvel+this.b1.kinangvel,n=this.b2.angvel+this.b2.kinangvel,s=this.b1.velx+this.b1.kinvelx-this.r1y*t-(this.b2.velx+this.b2.kinvelx-this.r2y*n),i=this.b1.vely+this.b1.kinvely+this.r1x*t-(this.b2.vely+this.b2.kinvely+this.r2x*n),l=this.vMassa*s+this.vMassb*i;i=this.vMassb*s+this.vMassc*i,s=l,s-=this.dampx*this.lgamma,i-=this.dampy*this.lgamma,this.dampx+=s,this.dampy+=i,this.b1.velx-=s*this.b1.imass,this.b1.vely-=i*this.b1.imass,this.b2.velx+=s*this.b2.imass,this.b2.vely+=i*this.b2.imass,this.b1.angvel-=this.b1.iinertia*(i*this.r1x-s*this.r1y),this.b2.angvel+=this.b2.iinertia*(i*this.r2x-s*this.r2y);let r=(t-n)*this.wMass-this.adamp*this.agamma;this.adamp+=r,this.b1.angvel-=r*this.b1.iinertia,this.b2.angvel+=r*this.b2.iinertia}}};Fs.zpp_pool=null;var Pt=Fs;var Pi=class{constructor(){this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.r1x=0;this.r1y=0;this.r2x=0;this.r2y=0;this.nMass=0;this.tMass=0;this.bounce=0;this.friction=0;this.jnAcc=0;this.jtAcc=0;this.lr1x=0;this.lr1y=0;this.lr2x=0;this.lr2y=0}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}};var yn=class yn{constructor(){this.outer=null;this.px=0;this.py=0;this.wrap_position=null;this.arbiter=null;this.active=!1;this.posOnly=!1;this.stamp=0;this.hash=0;this.fresh=!1;this.dist=0;this.elasticity=0;this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.length=0,this.pushmod=!1,this.modified=!1,this._inuse=!1,this.next=null,this.elasticity=0,this.dist=0,this.fresh=!1,this.hash=0,this.stamp=0,this.posOnly=!1,this.active=!1,this.inner=null,this.arbiter=null,this.wrap_position=null,this.py=0,this.px=0,this.outer=null,this.inner=new Pi}wrapper(){return this.outer==null&&(yn._wrapFn?this.outer=yn._wrapFn(this):(yn.internal=!0,this.outer=new yn._nape.dynamics.Contact,yn.internal=!1,this.outer.zpp_inner=this)),this.outer}position_validate(){if(this.inactiveme())throw new Error("Error: Contact not currently in use");this.wrap_position.zpp_inner.x=this.px,this.wrap_position.zpp_inner.y=this.py}getposition(){let e=yn._zpp,t=yn._nape,n;if(e.util.ZPP_PubPool.poolVec2==null?n=new t.geom.Vec2:(n=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),n.zpp_inner==null){let s;e.geom.ZPP_Vec2.zpp_pool==null?s=new e.geom.ZPP_Vec2:(s=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=0,s.y=0,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");s._isimmutable!=null&&s._isimmutable();let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x==0){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y==0}else i=!1;if(!i){n.zpp_inner.x=0,n.zpp_inner.y=0;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.wrap_position=n,this.wrap_position.zpp_inner._inuse=!0,this.wrap_position.zpp_inner._immutable=!0,this.wrap_position.zpp_inner._validate=this.position_validate.bind(this)}inactiveme(){return!(this.active&&this.arbiter!=null&&this.arbiter.active)}free(){this.arbiter=null}alloc(){}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}};yn._nape=null,yn._zpp=null,yn.zpp_pool=null,yn.internal=!1,yn._wrapFn=null;var we=yn;var wt=class wt extends Ie{constructor(){super();this.outer_zn=null;this.dyn_fric=0;this.stat_fric=0;this.restitution=0;this.rfric=0;this.userdef_dyn_fric=!1;this.userdef_stat_fric=!1;this.userdef_restitution=!1;this.userdef_rfric=!1;this.s1=null;this.s2=null;this.wrap_contacts=null;this.nx=0;this.ny=0;this.wrap_normal=null;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.Ka=0;this.Kb=0;this.Kc=0;this.rMass=0;this.jrAcc=0;this.rn1a=0;this.rt1a=0;this.rn1b=0;this.rt1b=0;this.rn2a=0;this.rt2a=0;this.rn2b=0;this.rt2b=0;this.k1x=0;this.k1y=0;this.k2x=0;this.k2y=0;this.surfacex=0;this.surfacey=0;this.ptype=null;this.lnormx=0;this.lnormy=0;this.lproj=0;this.radius=0;this.rev=!1;this.biasCoef=0;this.__ref_edge1=null;this.__ref_edge2=null;this.__ref_vertex=0;this.c1=null;this.oc1=null;this.c2=null;this.oc2=null;this.hc2=!1;this.hpc2=!1;this.stat=!1;this.mutable=!1;this.pre_dt=0;this.pre_dt=0,this.mutable=!1,this.stat=!1,this.next=null,this.hpc2=!1,this.hc2=!1,this.oc2=null,this.c2=null,this.oc1=null,this.c1=null,this.__ref_vertex=0,this.__ref_edge2=null,this.__ref_edge1=null,this.biasCoef=0,this.rev=!1,this.radius=0,this.lproj=0,this.lnormy=0,this.lnormx=0,this.surfacey=0,this.surfacex=0,this.k2y=0,this.k2x=0,this.k1y=0,this.k1x=0,this.rt2b=0,this.rn2b=0,this.rt2a=0,this.rn2a=0,this.rt1b=0,this.rn1b=0,this.rt1a=0,this.rn1a=0,this.jrAcc=0,this.rMass=0,this.Kc=0,this.Kb=0,this.Ka=0,this.kMassc=0,this.kMassb=0,this.kMassa=0,this.wrap_normal=null,this.ny=0,this.nx=0,this.innards=null,this.wrap_contacts=null,this.contacts=null,this.s2=null,this.s1=null,this.userdef_rfric=!1,this.userdef_restitution=!1,this.userdef_stat_fric=!1,this.userdef_dyn_fric=!1,this.rfric=0,this.restitution=0,this.stat_fric=0,this.dyn_fric=0,this.outer_zn=null,this.pre_dt=-1,this.contacts=new we,this.innards=new Pi,this.type=Ie.COL,this.colarb=this}alloc(){}free(){this.userdef_dyn_fric=!1,this.userdef_stat_fric=!1,this.userdef_restitution=!1,this.userdef_rfric=!1,this.__ref_edge1=this.__ref_edge2=null}normal_validate(){if(this.cleared)throw new Error("Error: Arbiter not currently in use");this.wrap_normal.zpp_inner.x=this.nx,this.wrap_normal.zpp_inner.y=this.ny,this.ws1.id>this.ws2.id&&(this.wrap_normal.zpp_inner.x=-this.wrap_normal.zpp_inner.x,this.wrap_normal.zpp_inner.y=-this.wrap_normal.zpp_inner.y)}getnormal(){let t=Ie._zpp,n=Ie._nape,s=0,i=0,l;if(t.util.ZPP_PubPool.poolVec2==null?l=new n.geom.Vec2:(l=t.util.ZPP_PubPool.poolVec2,t.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==t.util.ZPP_PubPool.nextVec2&&(t.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;t.geom.ZPP_Vec2.zpp_pool==null?r=new t.geom.ZPP_Vec2:(r=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!==s||i!==i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_normal=l,this.wrap_normal.zpp_inner._immutable=!0,this.wrap_normal.zpp_inner._inuse=!0,this.wrap_normal.zpp_inner._validate=this.normal_validate.bind(this)}injectContact(t,n,s,i,l,r,a=!1){let o=null,p=this.contacts.next;for(;p!=null;){if(r==p.hash){o=p;break}p=p.next}if(o==null){we.zpp_pool==null?o=new we:(o=we.zpp_pool,we.zpp_pool=o.next,o.next=null);let c=o.inner;c.jnAcc=c.jtAcc=0,o.hash=r,o.fresh=!0,o.arbiter=this,this.jrAcc=0,o._inuse=!0,o.next=this.contacts.next,this.contacts.next=o,this.contacts.modified=!0,this.contacts.length++,this.innards.add(c)}else o.fresh=!1;return o.px=t,o.py=n,this.nx=s,this.ny=i,o.dist=l,o.stamp=this.stamp,o.posOnly=a,o}assign(t,n,s,i){this.sup_assign(t,n,s,i),this.s1=t,this.s2=n,this._calcFrictionRestitution()}calcProperties(){this._calcFrictionRestitution()}validate_props(){this.invalidated&&(this.invalidated=!1,this._calcFrictionRestitution())}_calcFrictionRestitution(){this.userdef_restitution||(this.s1.material.elasticity<=-1/0||this.s2.material.elasticity<=-1/0?this.restitution=0:this.s1.material.elasticity>=1/0||this.s2.material.elasticity>=1/0?this.restitution=1:this.restitution=(this.s1.material.elasticity+this.s2.material.elasticity)/2,this.restitution<0&&(this.restitution=0),this.restitution>1&&(this.restitution=1)),this.userdef_dyn_fric||(this.dyn_fric=Math.sqrt(this.s1.material.dynamicFriction*this.s2.material.dynamicFriction)),this.userdef_stat_fric||(this.stat_fric=Math.sqrt(this.s1.material.staticFriction*this.s2.material.staticFriction)),this.userdef_rfric||(this.rfric=Math.sqrt(this.s1.material.rollingFriction*this.s2.material.rollingFriction))}retire(){for(this.sup_retire();this.contacts.next!=null;){let t=this.contacts.next;this.contacts.pop(),t.arbiter=null,t.next=we.zpp_pool,we.zpp_pool=t;let n=this.innards.next;this.innards.next=n.next,n._inuse=!1,this.innards.next==null&&(this.innards.pushmod=!0),this.innards.modified=!0,this.innards.length--}this.free(),this.next=wt.zpp_pool,wt.zpp_pool=this,this.pre_dt=-1}makemutable(){this.mutable=!0,this.wrap_normal!=null&&(this.wrap_normal.zpp_inner._immutable=!1),this.wrap_contacts!=null&&(this.wrap_contacts.zpp_inner.immutable=!1)}makeimmutable(){this.mutable=!1,this.wrap_normal!=null&&(this.wrap_normal.zpp_inner._immutable=!0),this.wrap_contacts!=null&&(this.wrap_contacts.zpp_inner.immutable=!0)}contacts_adder(t){throw new Error("Error: Cannot add new contacts, information required is far too specific and detailed :)")}contacts_subber(t){let n=null,s=null,i=this.innards.next,l=this.contacts.next;for(;l!=null;){if(l==t.zpp_inner){this.contacts.erase(n),this.innards.erase(s),l.arbiter=null,l.next=we.zpp_pool,we.zpp_pool=l;break}n=l,s=i,i=i.next,l=l.next}}setupcontacts(){let t=Ie._zpp;this.wrap_contacts=t.util.ZPP_ContactList.get(this.contacts,!0),this.wrap_contacts.zpp_inner.immutable=!this.mutable,this.wrap_contacts.zpp_inner.adder=this.contacts_adder.bind(this),this.wrap_contacts.zpp_inner.dontremove=!0,this.wrap_contacts.zpp_inner.subber=this.contacts_subber.bind(this)}cleanupContacts(){let t=Ie._nape,n=!0,s=null,i=null,l=this.innards.next;this.hc2=!1;let r=this.contacts.next;for(;r!=null;){let a=r;if(a.stamp+t.Config.arbiterExpirationDelay<this.stamp){r=wt._eraseFromList(this.contacts,s),l=wt._eraseFromList(this.innards,i),a.arbiter=null,a.next=we.zpp_pool,we.zpp_pool=a;continue}let o=a.inner,p=a.active;a.active=a.stamp==this.stamp,a.active&&(n?(n=!1,this.c1=o,this.oc1=a):(this.hc2=!0,this.c2=o,this.oc2=a)),p!=a.active&&(this.contacts.modified=!0),s=r,i=l,l=l.next,r=r.next}if(this.hc2){if(this.hpc2=!0,this.oc1.posOnly){let a=this.c1;this.c1=this.c2,this.c2=a,a=this.oc1,this.oc1=this.oc2,this.oc2=a,this.hc2=!1}else this.oc2.posOnly&&(this.hc2=!1);this.oc1.posOnly&&(n=!0)}else this.hpc2=!1;return n}preStep(t){let n=Ie._nape;this.validate_props(),this.pre_dt==-1&&(this.pre_dt=t);let s=t/this.pre_dt;this.pre_dt=t;let i=this.b1.smass+this.b2.smass;this.hc2=!1;let l=!0,a=this.b1.type!=2||this.b2.type!=2?this.continuous?n.Config.contactContinuousStaticBiasCoef:n.Config.contactStaticBiasCoef:this.continuous?n.Config.contactContinuousBiasCoef:n.Config.contactBiasCoef;this.biasCoef=a,this.continuous=!1;let o=null,p=null,c=this.innards.next,h=this.contacts.next;for(;h!=null;){let u=h;if(u.stamp+n.Config.arbiterExpirationDelay<this.stamp){h=wt._eraseFromList(this.contacts,o),c=wt._eraseFromList(this.innards,p),u.arbiter=null,u.next=we.zpp_pool,we.zpp_pool=u;continue}let x=u.inner,y=u.active;if(u.active=u.stamp==this.stamp,u.active){l?(l=!1,this.c1=x,this.oc1=u):(this.hc2=!0,this.c2=x,this.oc2=u),x.r2x=u.px-this.b2.posx,x.r2y=u.py-this.b2.posy,x.r1x=u.px-this.b1.posx,x.r1y=u.py-this.b1.posy;let d=x.r2x*this.nx+x.r2y*this.ny,_=i+this.b2.sinertia*(d*d);d=x.r1x*this.nx+x.r1y*this.ny,_+=this.b1.sinertia*(d*d),x.tMass=_<n.Config.epsilon*n.Config.epsilon?0:1/_,d=this.ny*x.r2x-this.nx*x.r2y;let f=i+this.b2.sinertia*(d*d);d=this.ny*x.r1x-this.nx*x.r1y,f+=this.b1.sinertia*(d*d),x.nMass=f<n.Config.epsilon*n.Config.epsilon?0:1/f;let z=this.b2.angvel+this.b2.kinangvel,P=this.b2.velx+this.b2.kinvelx-x.r2y*z,k=this.b2.vely+this.b2.kinvely+x.r2x*z;z=this.b1.angvel+this.b1.kinangvel,P-=this.b1.velx+this.b1.kinvelx-x.r1y*z,k-=this.b1.vely+this.b1.kinvely+x.r1x*z;let m=this.nx*P+this.ny*k;u.elasticity=this.restitution,x.bounce=m*u.elasticity,x.bounce>-n.Config.elasticThreshold&&(x.bounce=0);let b=k*this.nx-P*this.ny,C=n.Config.staticFrictionThreshold;b*b>C*C?x.friction=this.dyn_fric:x.friction=this.stat_fric,x.jnAcc*=s,x.jtAcc*=s}y!=u.active&&(this.contacts.modified=!0),o=h,p=c,c=c.next,h=h.next}if(this.hc2){if(this.hpc2=!0,this.oc1.posOnly){let u=this.c1;this.c1=this.c2,this.c2=u,u=this.oc1,this.oc1=this.oc2,this.oc2=u,this.hc2=!1}else this.oc2.posOnly&&(this.hc2=!1);this.oc1.posOnly&&(l=!0)}else this.hpc2=!1;if(this.jrAcc*=s,l||(this.rn1a=this.ny*this.c1.r1x-this.nx*this.c1.r1y,this.rt1a=this.c1.r1x*this.nx+this.c1.r1y*this.ny,this.rn1b=this.ny*this.c1.r2x-this.nx*this.c1.r2y,this.rt1b=this.c1.r2x*this.nx+this.c1.r2y*this.ny,this.k1x=this.b2.kinvelx-this.c1.r2y*this.b2.kinangvel-(this.b1.kinvelx-this.c1.r1y*this.b1.kinangvel),this.k1y=this.b2.kinvely+this.c1.r2x*this.b2.kinangvel-(this.b1.kinvely+this.c1.r1x*this.b1.kinangvel)),this.hc2)if(this.rn2a=this.ny*this.c2.r1x-this.nx*this.c2.r1y,this.rt2a=this.c2.r1x*this.nx+this.c2.r1y*this.ny,this.rn2b=this.ny*this.c2.r2x-this.nx*this.c2.r2y,this.rt2b=this.c2.r2x*this.nx+this.c2.r2y*this.ny,this.k2x=this.b2.kinvelx-this.c2.r2y*this.b2.kinangvel-(this.b1.kinvelx-this.c2.r1y*this.b1.kinangvel),this.k2y=this.b2.kinvely+this.c2.r2x*this.b2.kinangvel-(this.b1.kinvely+this.c2.r1x*this.b1.kinangvel),this.kMassa=i+this.b1.sinertia*this.rn1a*this.rn1a+this.b2.sinertia*this.rn1b*this.rn1b,this.kMassb=i+this.b1.sinertia*this.rn1a*this.rn2a+this.b2.sinertia*this.rn1b*this.rn2b,this.kMassc=i+this.b1.sinertia*this.rn2a*this.rn2a+this.b2.sinertia*this.rn2b*this.rn2b,this.kMassa*this.kMassa+2*this.kMassb*this.kMassb+this.kMassc*this.kMassc<n.Config.illConditionedThreshold*(this.kMassa*this.kMassc-this.kMassb*this.kMassb)){this.Ka=this.kMassa,this.Kb=this.kMassb,this.Kc=this.kMassc;let x=this.kMassa*this.kMassc-this.kMassb*this.kMassb;if(x!==x)this.kMassa=this.kMassb=this.kMassc=0;else if(x==0)this.kMassa!=0?this.kMassa=1/this.kMassa:this.kMassa=0,this.kMassc!=0?this.kMassc=1/this.kMassc:this.kMassc=0,this.kMassb=0;else{let y=1/x,d=this.kMassc*y;this.kMassc=this.kMassa*y,this.kMassa=d,this.kMassb*=-y}}else{if(this.hc2=!1,this.oc2.dist<this.oc1.dist){let x=this.c1;this.c1=this.c2,this.c2=x}this.oc2.active=!1,this.contacts.modified=!0}return this.surfacex=this.b2.svelx,this.surfacey=this.b2.svely,this.surfacex+=this.b1.svelx,this.surfacey+=this.b1.svely,this.surfacex=-this.surfacex,this.surfacey=-this.surfacey,this.rMass=this.b1.sinertia+this.b2.sinertia,this.rMass!=0&&(this.rMass=1/this.rMass),l}warmStart(){let t=this.nx*this.c1.jnAcc-this.ny*this.c1.jtAcc,n=this.ny*this.c1.jnAcc+this.nx*this.c1.jtAcc;this.b1.velx-=t*this.b1.imass,this.b1.vely-=n*this.b1.imass,this.b1.angvel-=this.b1.iinertia*(n*this.c1.r1x-t*this.c1.r1y),this.b2.velx+=t*this.b2.imass,this.b2.vely+=n*this.b2.imass,this.b2.angvel+=this.b2.iinertia*(n*this.c1.r2x-t*this.c1.r2y),this.hc2&&(t=this.nx*this.c2.jnAcc-this.ny*this.c2.jtAcc,n=this.ny*this.c2.jnAcc+this.nx*this.c2.jtAcc,this.b1.velx-=t*this.b1.imass,this.b1.vely-=n*this.b1.imass,this.b1.angvel-=this.b1.iinertia*(n*this.c2.r1x-t*this.c2.r1y),this.b2.velx+=t*this.b2.imass,this.b2.vely+=n*this.b2.imass,this.b2.angvel+=this.b2.iinertia*(n*this.c2.r2x-t*this.c2.r2y)),this.b2.angvel+=this.jrAcc*this.b2.iinertia,this.b1.angvel-=this.jrAcc*this.b1.iinertia}applyImpulseVel(){let t=this.k1x+this.b2.velx-this.c1.r2y*this.b2.angvel-(this.b1.velx-this.c1.r1y*this.b1.angvel),n=this.k1y+this.b2.vely+this.c1.r2x*this.b2.angvel-(this.b1.vely+this.c1.r1x*this.b1.angvel),s=(n*this.nx-t*this.ny+this.surfacex)*this.c1.tMass,i=this.c1.friction*this.c1.jnAcc,l=this.c1.jtAcc,r=l-s;r>i?r=i:r<-i&&(r=-i),s=r-l,this.c1.jtAcc=r;let a=-this.ny*s,o=this.nx*s;if(this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=this.rt1b*s*this.b2.iinertia,this.b1.angvel-=this.rt1a*s*this.b1.iinertia,this.hc2){let p=this.k2x+this.b2.velx-this.c2.r2y*this.b2.angvel-(this.b1.velx-this.c2.r1y*this.b1.angvel),c=this.k2y+this.b2.vely+this.c2.r2x*this.b2.angvel-(this.b1.vely+this.c2.r1x*this.b1.angvel);s=(c*this.nx-p*this.ny+this.surfacex)*this.c2.tMass,i=this.c2.friction*this.c2.jnAcc,l=this.c2.jtAcc,r=l-s,r>i?r=i:r<-i&&(r=-i),s=r-l,this.c2.jtAcc=r,a=-this.ny*s,o=this.nx*s,this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=this.rt2b*s*this.b2.iinertia,this.b1.angvel-=this.rt2a*s*this.b1.iinertia,t=this.k1x+this.b2.velx-this.c1.r2y*this.b2.angvel-(this.b1.velx-this.c1.r1y*this.b1.angvel),n=this.k1y+this.b2.vely+this.c1.r2x*this.b2.angvel-(this.b1.vely+this.c1.r1x*this.b1.angvel),p=this.k2x+this.b2.velx-this.c2.r2y*this.b2.angvel-(this.b1.velx-this.c2.r1y*this.b1.angvel),c=this.k2y+this.b2.vely+this.c2.r2x*this.b2.angvel-(this.b1.vely+this.c2.r1x*this.b1.angvel);let h=this.c1.jnAcc,u=this.c2.jnAcc,x=t*this.nx+n*this.ny+this.surfacey+this.c1.bounce-(this.Ka*h+this.Kb*u),y=p*this.nx+c*this.ny+this.surfacey+this.c2.bounce-(this.Kb*h+this.Kc*u),d=-(this.kMassa*x+this.kMassb*y),_=-(this.kMassb*x+this.kMassc*y);d>=0&&_>=0?(x=d-h,y=_-u,this.c1.jnAcc=d,this.c2.jnAcc=_):(d=-this.c1.nMass*x,d>=0&&this.Kb*d+y>=0?(x=d-h,y=-u,this.c1.jnAcc=d,this.c2.jnAcc=0):(_=-this.c2.nMass*y,_>=0&&this.Kb*_+x>=0?(x=-h,y=_-u,this.c1.jnAcc=0,this.c2.jnAcc=_):x>=0&&y>=0?(x=-h,y=-u,this.c1.jnAcc=this.c2.jnAcc=0):(x=0,y=0))),s=x+y,a=this.nx*s,o=this.ny*s,this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=(this.rn1b*x+this.rn2b*y)*this.b2.iinertia,this.b1.angvel-=(this.rn1a*x+this.rn2a*y)*this.b1.iinertia}else this.radius!=0&&(s=(this.b2.angvel-this.b1.angvel)*this.rMass,i=this.rfric*this.c1.jnAcc,l=this.jrAcc,this.jrAcc-=s,this.jrAcc>i?this.jrAcc=i:this.jrAcc<-i&&(this.jrAcc=-i),s=this.jrAcc-l,this.b2.angvel+=s*this.b2.iinertia,this.b1.angvel-=s*this.b1.iinertia),t=this.k1x+this.b2.velx-this.c1.r2y*this.b2.angvel-(this.b1.velx-this.c1.r1y*this.b1.angvel),n=this.k1y+this.b2.vely+this.c1.r2x*this.b2.angvel-(this.b1.vely+this.c1.r1x*this.b1.angvel),s=(this.c1.bounce+(this.nx*t+this.ny*n)+this.surfacey)*this.c1.nMass,l=this.c1.jnAcc,r=l-s,r<0&&(r=0),s=r-l,this.c1.jnAcc=r,a=this.nx*s,o=this.ny*s,this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=this.rn1b*s*this.b2.iinertia,this.b1.angvel-=this.rn1a*s*this.b1.iinertia}applyImpulsePos(){let t=Ie._nape;this.ptype==2?this._applyImpulsePosCircle(t):this._applyImpulsePosEdge(t)}_applyImpulsePosCircle(t){let n=this.c1,s=this.b2.axisy*n.lr2x-this.b2.axisx*n.lr2y,i=n.lr2x*this.b2.axisx+n.lr2y*this.b2.axisy;s+=this.b2.posx,i+=this.b2.posy;let l=this.b1.axisy*n.lr1x-this.b1.axisx*n.lr1y,r=n.lr1x*this.b1.axisx+n.lr1y*this.b1.axisy;l+=this.b1.posx,r+=this.b1.posy;let a=s-l,o=i-r,p=Math.sqrt(a*a+o*o),c=this.radius-t.Config.collisionSlop,h=p-c;if(a*this.nx+o*this.ny<0&&(a=-a,o=-o,h-=this.radius),h<0)if(p<t.Config.epsilon)this.b1.smass!=0?this.b1.posx+=t.Config.epsilon*10:this.b2.posx+=t.Config.epsilon*10;else{let u=1/p;a*=u,o*=u;let x=.5*(l+s),y=.5*(r+i),d=p-c;l=x-this.b1.posx,r=y-this.b1.posy,s=x-this.b2.posx,i=y-this.b2.posy;let _=o*l-a*r,f=o*s-a*i,z=this.b2.smass+f*f*this.b2.sinertia+this.b1.smass+_*_*this.b1.sinertia;if(z!=0){let P=-this.biasCoef*d/z,k=a*P,m=o*P;this.b1.posx-=k*this.b1.imass,this.b1.posy-=m*this.b1.imass,wt._rotateBody(this.b1,-_*this.b1.iinertia*P),this.b2.posx+=k*this.b2.imass,this.b2.posy+=m*this.b2.imass,wt._rotateBody(this.b2,f*this.b2.iinertia*P)}}}_applyImpulsePosEdge(t){let n,s,i,l,r,a=0,o=0;this.ptype==0?(n=this.b1.axisy*this.lnormx-this.b1.axisx*this.lnormy,s=this.lnormx*this.b1.axisx+this.lnormy*this.b1.axisy,i=this.lproj+(n*this.b1.posx+s*this.b1.posy),l=this.b2.axisy*this.c1.lr1x-this.b2.axisx*this.c1.lr1y,r=this.c1.lr1x*this.b2.axisx+this.c1.lr1y*this.b2.axisy,l+=this.b2.posx,r+=this.b2.posy,this.hpc2&&(a=this.b2.axisy*this.c2.lr1x-this.b2.axisx*this.c2.lr1y,o=this.c2.lr1x*this.b2.axisx+this.c2.lr1y*this.b2.axisy,a+=this.b2.posx,o+=this.b2.posy)):(n=this.b2.axisy*this.lnormx-this.b2.axisx*this.lnormy,s=this.lnormx*this.b2.axisx+this.lnormy*this.b2.axisy,i=this.lproj+(n*this.b2.posx+s*this.b2.posy),l=this.b1.axisy*this.c1.lr1x-this.b1.axisx*this.c1.lr1y,r=this.c1.lr1x*this.b1.axisx+this.c1.lr1y*this.b1.axisy,l+=this.b1.posx,r+=this.b1.posy,this.hpc2&&(a=this.b1.axisy*this.c2.lr1x-this.b1.axisx*this.c2.lr1y,o=this.c2.lr1x*this.b1.axisx+this.c2.lr1y*this.b1.axisy,a+=this.b1.posx,o+=this.b1.posy));let p=l*n+r*s-i-this.radius;p+=t.Config.collisionSlop;let c=0;if(this.hpc2&&(c=a*n+o*s-i-this.radius,c+=t.Config.collisionSlop),p<0||c<0){this.rev&&(n=-n,s=-s);let h=l-this.b1.posx,u=r-this.b1.posy,x=l-this.b2.posx,y=r-this.b2.posy;if(this.hpc2){let d=a-this.b1.posx,_=o-this.b1.posy,f=a-this.b2.posx,z=o-this.b2.posy,P=s*h-n*u,k=s*x-n*y,m=s*d-n*_,b=s*f-n*z,C=this.b1.smass+this.b2.smass;this.kMassa=C+this.b1.sinertia*P*P+this.b2.sinertia*k*k,this.kMassb=C+this.b1.sinertia*P*m+this.b2.sinertia*k*b,this.kMassc=C+this.b1.sinertia*m*m+this.b2.sinertia*b*b;let v=this.kMassa,w=this.kMassb,O=this.kMassc,E=p*this.biasCoef,M=c*this.biasCoef;for(;;){let N=-E,Z=-M,S=this.kMassa*this.kMassc-this.kMassb*this.kMassb;if(S!==S)N=0,Z=0;else if(S==0)this.kMassa!=0?N/=this.kMassa:N=0,this.kMassc!=0?Z/=this.kMassc:Z=0;else{let A=1/S,F=A*(this.kMassc*N-this.kMassb*Z);Z=A*(this.kMassa*Z-this.kMassb*N),N=F}if(N>=0&&Z>=0){wt._applyPosImpulse2(this.b1,this.b2,n,s,N,Z,P,m,k,b);break}if(N=-E/v,Z=0,N>=0&&w*N+M>=0){wt._applyPosImpulse2(this.b1,this.b2,n,s,N,Z,P,m,k,b);break}if(N=0,Z=-M/O,Z>=0&&w*Z+E>=0){wt._applyPosImpulse2(this.b1,this.b2,n,s,N,Z,P,m,k,b);break}break}}else{let d=s*h-n*u,_=s*x-n*y,f=this.b2.smass+_*_*this.b2.sinertia+this.b1.smass+d*d*this.b1.sinertia;if(f!=0){let z=-this.biasCoef*p/f,P=n*z,k=s*z;this.b1.posx-=P*this.b1.imass,this.b1.posy-=k*this.b1.imass,wt._rotateBody(this.b1,-d*this.b1.iinertia*z),this.b2.posx+=P*this.b2.imass,this.b2.posy+=k*this.b2.imass,wt._rotateBody(this.b2,_*this.b2.iinertia*z)}}}}static _eraseFromList(t,n){let s,i;return n==null?(s=t.next,i=s.next,t.next=i,t.next==null&&(t.pushmod=!0)):(s=n.next,i=s.next,n.next=i,i==null&&(t.pushmod=!0)),s._inuse=!1,t.modified=!0,t.length--,t.pushmod=!0,i}static _rotateBody(t,n){if(t.rot+=n,n*n>1e-4)t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot);else{let s=n*n,i=1-.5*s,l=1-s*s/8,r=(i*t.axisx+n*t.axisy)*l;t.axisy=(i*t.axisy-n*t.axisx)*l,t.axisx=r}}static _applyPosImpulse2(t,n,s,i,l,r,a,o,p,c){let h=(l+r)*t.imass;t.posx-=s*h,t.posy-=i*h,wt._rotateBody(t,-t.iinertia*(a*l+o*r));let u=(l+r)*n.imass;n.posx+=s*u,n.posy+=i*u,wt._rotateBody(n,n.iinertia*(p*l+c*r))}};wt.FACE1=0,wt.FACE2=1,wt.CIRCLE=2,wt.zpp_pool=null;var ut=wt;var qt=class qt{constructor(){this.collisionGroup=1;this.collisionMask=-1;this.sensorGroup=1;this.sensorMask=-1;this.fluidGroup=1;this.fluidMask=-1;this.shapes=null;this.wrap_shapes=null;this.outer=null;this.userData=null;this.next=null;this.shapes=new qt._zpp.util.ZNPList_ZPP_Shape}wrapper(){if(this.outer==null)if(qt._wrapFn)this.outer=qt._wrapFn(this);else{this.outer=new qt._nape.dynamics.InteractionFilter;let e=this.outer.zpp_inner;e.outer=null,e.next=qt.zpp_pool,qt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer=null}alloc(){}feature_cons(){this.shapes=new qt._zpp.util.ZNPList_ZPP_Shape}addShape(e){this.shapes.add(e)}remShape(e){this.shapes.remove(e)}copy(){let e;return qt.zpp_pool==null?e=new qt:(e=qt.zpp_pool,qt.zpp_pool=e.next,e.next=null),e.collisionGroup=this.collisionGroup,e.collisionMask=this.collisionMask,e.sensorGroup=this.sensorGroup,e.sensorMask=this.sensorMask,e.fluidGroup=this.fluidGroup,e.fluidMask=this.fluidMask,e}shouldCollide(e){return(this.collisionMask&e.collisionGroup)!==0&&(e.collisionMask&this.collisionGroup)!==0}shouldSense(e){return(this.sensorMask&e.sensorGroup)!==0&&(e.sensorMask&this.sensorGroup)!==0}shouldFlow(e){return(this.fluidMask&e.fluidGroup)!==0&&(e.fluidMask&this.fluidGroup)!==0}invalidate(){let e=this.shapes.head;for(;e!=null;)e.elt.invalidate_filter(),e=e.next}};qt.zpp_pool=null,qt._nape=null,qt._zpp=null,qt._wrapFn=null;var st=qt;var Li=class Li{constructor(){this.outer=null;this.ignore=!1;this.group=null;this.groups=null;this.wrap_groups=null;this.interactors=null;this.wrap_interactors=null;this.depth=0;let e=Li._zpp;this.groups=new e.util.ZNPList_ZPP_InteractionGroup,this.interactors=new e.util.ZNPList_ZPP_Interactor}setGroup(e){this.group!==e&&(this.group!=null&&(this.group.groups.remove(this),this.depth=0,this.group.invalidate(!0)),this.group=e,e!=null?(e.groups.add(this),this.depth=e.depth+1,e.invalidate(!0)):this.invalidate(!0))}invalidate(e){if(e==null&&(e=!1),!(e||this.ignore))return;let t=this.interactors.head;for(;t!=null;){let s=t.elt;s.ibody!=null?s.ibody.wake():s.ishape!=null?s.ishape.body.wake():s.icompound.wake(),t=t.next}let n=this.groups.head;for(;n!=null;)n.elt.invalidate(e),n=n.next}addGroup(e){this.groups.add(e),e.depth=this.depth+1}remGroup(e){this.groups.remove(e),e.depth=0}addInteractor(e){this.interactors.add(e)}remInteractor(e,t){this.interactors.remove(e)}};Li.SHAPE=1,Li.BODY=2,Li._zpp=null,Li._wrapFn=null;var Rs=Li;var Xn=class{constructor(){this.zpp_inner=null;this.space=null;this._length=0;this.zip_length=!1;this.lengths=[];this.ite_0=null;this.ite_1=null;this.ite_2=null;this.ite_3=null;this.at_index_0=0;this.at_index_1=0;this.at_index_2=0;this.at_index_3=0;this.at_index_0=0,this.at_index_1=0,this.at_index_2=0,this.at_index_3=0,this.zip_length=!0,this._length=0,this.lengths=[],this.lengths.push(0),this.lengths.push(0),this.lengths.push(0),this.lengths.push(0)}zpp_gl(){if(this.zpp_vm(),this.zip_length){this._length=0;let e=0,t=0,n=this.space.c_arbiters_true.head;for(;n!=null;)n.elt.active&&++t,n=n.next;this.lengths[e++]=t,this._length+=t;let s=0,i=this.space.c_arbiters_false.head;for(;i!=null;)i.elt.active&&++s,i=i.next;this.lengths[e++]=s,this._length+=s;let l=0,r=this.space.f_arbiters.head;for(;r!=null;)r.elt.active&&++l,r=r.next;this.lengths[e++]=l,this._length+=l;let a=0,o=this.space.s_arbiters.head;for(;o!=null;)o.elt.active&&++a,o=o.next;this.lengths[e++]=a,this._length+=a,this.zip_length=!1}return this._length}zpp_vm(){let e=!1;this.space.c_arbiters_true.modified&&(e=!0,this.space.c_arbiters_true.modified=!1),this.space.c_arbiters_false.modified&&(e=!0,this.space.c_arbiters_false.modified=!1),this.space.f_arbiters.modified&&(e=!0,this.space.f_arbiters.modified=!1),this.space.s_arbiters.modified&&(e=!0,this.space.s_arbiters.modified=!1),e&&(this.zip_length=!0,this._length=0,this.ite_0=null,this.ite_1=null,this.ite_2=null,this.ite_3=null)}push(e){throw new Error("Error: ArbiterList is immutable")}pop(){throw new Error("Error: ArbiterList is immutable")}unshift(e){throw new Error("Error: ArbiterList is immutable")}shift(){throw new Error("Error: ArbiterList is immutable")}remove(e){throw new Error("Error: ArbiterList is immutable")}clear(){throw new Error("Error: ArbiterList is immutable")}at(e){if(this.zpp_vm(),e<0||e>=this.zpp_gl())throw new Error("Error: Index out of bounds");let t=null,n=0;if(t==null)if(e<n+this.lengths[0]){let s=e-n;if(s<this.at_index_0||this.ite_0==null)for(this.at_index_0=0,this.ite_0=this.space.c_arbiters_true.head;!this.ite_0.elt.active;)this.ite_0=this.ite_0.next;for(;this.at_index_0!=s;)for(this.at_index_0++,this.ite_0=this.ite_0.next;!this.ite_0.elt.active;)this.ite_0=this.ite_0.next;t=this.ite_0.elt.wrapper()}else n+=this.lengths[0];if(t==null)if(e<n+this.lengths[1]){let s=e-n;if(s<this.at_index_1||this.ite_1==null)for(this.at_index_1=0,this.ite_1=this.space.c_arbiters_false.head;!this.ite_1.elt.active;)this.ite_1=this.ite_1.next;for(;this.at_index_1!=s;)for(this.at_index_1++,this.ite_1=this.ite_1.next;!this.ite_1.elt.active;)this.ite_1=this.ite_1.next;t=this.ite_1.elt.wrapper()}else n+=this.lengths[1];if(t==null)if(e<n+this.lengths[2]){let s=e-n;if(s<this.at_index_2||this.ite_2==null)for(this.at_index_2=0,this.ite_2=this.space.f_arbiters.head;!this.ite_2.elt.active;)this.ite_2=this.ite_2.next;for(;this.at_index_2!=s;)for(this.at_index_2++,this.ite_2=this.ite_2.next;!this.ite_2.elt.active;)this.ite_2=this.ite_2.next;t=this.ite_2.elt.wrapper()}else n+=this.lengths[2];if(t==null)if(e<n+this.lengths[3]){let s=e-n;if(s<this.at_index_3||this.ite_3==null)for(this.at_index_3=0,this.ite_3=this.space.s_arbiters.head;!this.ite_3.elt.active;)this.ite_3=this.ite_3.next;for(;this.at_index_3!=s;)for(this.at_index_3++,this.ite_3=this.ite_3.next;!this.ite_3.elt.active;)this.ite_3=this.ite_3.next;t=this.ite_3.elt.wrapper()}else n+=this.lengths[3];return t}};Xn._nape=null,Xn._zpp=null;var Mt=class Mt{constructor(){this._invalidate=null;this._validate=null;this._immutable=!1;this.outer=null;this.next=null;this.minx=0;this.miny=0;this.maxx=0;this.maxy=0;this.wrap_min=null;this.wrap_max=null}static get(e,t,n,s){let i;return Mt.zpp_pool==null?i=new Mt:(i=Mt.zpp_pool,Mt.zpp_pool=i.next,i.next=null),i.minx=e,i.miny=t,i.maxx=n,i.maxy=s,i}validate(){this._validate!=null&&this._validate()}invalidate(){this._invalidate!=null&&this._invalidate(this)}wrapper(){if(this.outer==null)if(Mt._wrapFn)this.outer=Mt._wrapFn(this);else{this.outer=new Mt._nape.geom.AABB;let e=this.outer.zpp_inner;e.outer!=null&&(e.outer.zpp_inner=null,e.outer=null),e.wrap_min=e.wrap_max=null,e._invalidate=null,e._validate=null,e.next=Mt.zpp_pool,Mt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}alloc(){}free(){this.outer!=null&&(this.outer.zpp_inner=null,this.outer=null),this.wrap_min=this.wrap_max=null,this._invalidate=null,this._validate=null}copy(){return Mt.get(this.minx,this.miny,this.maxx,this.maxy)}width(){return this.maxx-this.minx}height(){return this.maxy-this.miny}perimeter(){return(this.maxx-this.minx+(this.maxy-this.miny))*2}static _makeVec2Wrapper(e,t){let n=Mt._zpp,s=Mt._nape;if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let i;if(n.util.ZPP_PubPool.poolVec2==null?i=new s.geom.Vec2:(i=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;n.geom.ZPP_Vec2.zpp_pool==null?l=new n.geom.ZPP_Vec2:(l=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=e,l.y=t,i.zpp_inner=l,i.zpp_inner.outer=i}else{if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");l._validate!=null&&l._validate(),(l.x!==e||l.y!==t)&&(l.x=e,l.y=t,l._invalidate!=null&&l._invalidate(l))}return i.zpp_inner.weak=!1,i}getmin(){this.wrap_min==null&&(this.wrap_min=Mt._makeVec2Wrapper(this.minx,this.miny),this.wrap_min.zpp_inner._inuse=!0,this._immutable?this.wrap_min.zpp_inner._immutable=!0:this.wrap_min.zpp_inner._invalidate=this.mod_min.bind(this),this.wrap_min.zpp_inner._validate=this.dom_min.bind(this))}dom_min(){this._validate!=null&&this._validate(),this.wrap_min.zpp_inner.x=this.minx,this.wrap_min.zpp_inner.y=this.miny}mod_min(e){(e.x!==this.minx||e.y!==this.miny)&&(this.minx=e.x,this.miny=e.y,this._invalidate!=null&&this._invalidate(this))}getmax(){this.wrap_max==null&&(this.wrap_max=Mt._makeVec2Wrapper(this.maxx,this.maxy),this.wrap_max.zpp_inner._inuse=!0,this._immutable?this.wrap_max.zpp_inner._immutable=!0:this.wrap_max.zpp_inner._invalidate=this.mod_max.bind(this),this.wrap_max.zpp_inner._validate=this.dom_max.bind(this))}dom_max(){this._validate!=null&&this._validate(),this.wrap_max.zpp_inner.x=this.maxx,this.wrap_max.zpp_inner.y=this.maxy}mod_max(e){(e.x!==this.maxx||e.y!==this.maxy)&&(this.maxx=e.x,this.maxy=e.y,this._invalidate!=null&&this._invalidate(this))}intersectX(e){return!(e.minx>this.maxx||this.minx>e.maxx)}intersectY(e){return!(e.miny>this.maxy||this.miny>e.maxy)}intersect(e){return e.miny<=this.maxy&&this.miny<=e.maxy&&e.minx<=this.maxx&&this.minx<=e.maxx}combine(e){e.minx<this.minx&&(this.minx=e.minx),e.maxx>this.maxx&&(this.maxx=e.maxx),e.miny<this.miny&&(this.miny=e.miny),e.maxy>this.maxy&&(this.maxy=e.maxy)}contains(e){return e.minx>=this.minx&&e.miny>=this.miny&&e.maxx<=this.maxx&&e.maxy<=this.maxy}containsPoint(e){return e.x>=this.minx&&e.x<=this.maxx&&e.y>=this.miny&&e.y<=this.maxy}setCombine(e,t){this.minx=e.minx<t.minx?e.minx:t.minx,this.miny=e.miny<t.miny?e.miny:t.miny,this.maxx=e.maxx>t.maxx?e.maxx:t.maxx,this.maxy=e.maxy>t.maxy?e.maxy:t.maxy}setExpand(e,t){this.minx=e.minx-t,this.miny=e.miny-t,this.maxx=e.maxx+t,this.maxy=e.maxy+t}setExpandPoint(e,t){e<this.minx&&(this.minx=e),e>this.maxx&&(this.maxx=e),t<this.miny&&(this.miny=t),t>this.maxy&&(this.maxy=t)}toString(){return"{ x: "+this.minx+" y: "+this.miny+" w: "+(this.maxx-this.minx)+" h: "+(this.maxy-this.miny)+" }"}};Mt.zpp_pool=null,Mt._nape=null,Mt._zpp=null,Mt._wrapFn=null;var fe=Mt;var be=class be{static _initStatics(e){be.flowpoly=new e.util.ZNPList_ZPP_Vec2,be.flowsegs=new e.util.ZNPList_ZPP_Vec2}static circleContains(e,t){let n=t.x-e.worldCOMx,s=t.y-e.worldCOMy;return n*n+s*s<e.radius*e.radius}static polyContains(e,t){let n;n=!0;let s=e.edges.head;for(;s!=null;){let i=s.elt;if(i.gnormx*t.x+i.gnormy*t.y<=i.gprojection){s=s.next;continue}else{n=!1;break}}return n}static shapeContains(e,t){return e.type==0?be.circleContains(e.circle,t):e.type==1?be.polyContains(e.polygon,t):be.capsuleContains(e.capsule,t)}static bodyContains(e,t){let n;n=!1;let s=e.shapes.head;for(;s!=null;){let i=s.elt;if(be.shapeContains(i,t)){n=!0;break}s=s.next}return n}static containTest(e,t){let n=e.aabb,s=t.aabb;if(s.minx>=n.minx&&s.miny>=n.miny&&s.maxx<=n.maxx&&s.maxy<=n.maxy)if(e.type==0)if(t.type==0){let i=e.circle.radius+-t.circle.radius,l=t.circle.worldCOMx-e.circle.worldCOMx,r=t.circle.worldCOMy-e.circle.worldCOMy;return l*l+r*r<=i*i}else if(t.type==1){let i;i=!0;let l=t.polygon.gverts.next;for(;l!=null;){let r=l,a=e.circle.radius,o=r.x-e.circle.worldCOMx,p=r.y-e.circle.worldCOMy;if(o*o+p*p<=a*a){l=l.next;continue}else{i=!1;break}}return i}else{let i=t.capsule,l=e.circle.radius-i.radius;if(l<0)return!1;let r=l*l,a=i.spine1x-e.circle.worldCOMx,o=i.spine1y-e.circle.worldCOMy;if(a*a+o*o>r)return!1;let p=i.spine2x-e.circle.worldCOMx,c=i.spine2y-e.circle.worldCOMy;return p*p+c*c<=r}else if(e.type==2)if(t.type==0){let i=e.capsule,l=be._closestT(i.spine1x,i.spine1y,i.spine2x,i.spine2y,t.circle.worldCOMx,t.circle.worldCOMy),r=i.spine1x+l*(i.spine2x-i.spine1x),a=i.spine1y+l*(i.spine2y-i.spine1y),o=i.radius-t.circle.radius;if(o<0)return!1;let p=t.circle.worldCOMx-r,c=t.circle.worldCOMy-a;return p*p+c*c<=o*o}else return!1;else if(t.type==0){let i;i=!0;let l=e.polygon.edges.head;for(;l!=null;){let r=l.elt;if(r.gnormx*t.circle.worldCOMx+r.gnormy*t.circle.worldCOMy+t.circle.radius<=r.gprojection){l=l.next;continue}else{i=!1;break}}return i}else{let i;i=!0;let l=e.polygon.edges.head;for(;l!=null;){let r=l.elt,a=-1e100,o=t.polygon.gverts.next;for(;o!=null;){let p=o,c=r.gnormx*p.x+r.gnormy*p.y;c>a&&(a=c),o=o.next}if(a<=r.gprojection){l=l.next;continue}else{i=!1;break}}return i}else return!1}static contactCollide(e,t,n,s){let i=me();if(t.type==2)return be._capsuleContactCollide(e,t,n,s,i);if(e.type==2)return be._capsuleContactCollide(t,e,n,!s,i);if(t.type==1)if(e.type==1){let l=!0,r=-1e100,a=-1e100,o=-1,p=null,c=null,h=e.polygon.edges.head;for(;h!=null;){let u=h.elt,x=1e100,y=t.polygon.gverts.next;for(;y!=null;){let d=y,_=u.gnormx*d.x+u.gnormy*d.y;if(_<x&&(x=_),x-u.gprojection<=r)break;y=y.next}if(x-=u.gprojection,x>=0){l=!1;break}x>r&&(r=x,p=u,o=1),h=h.next}if(l){let u=t.polygon.edges.head;for(;u!=null;){let x=u.elt,y=1e100,d=e.polygon.gverts.next;for(;d!=null;){let _=d,f=x.gnormx*_.x+x.gnormy*_.y;if(f<y&&(y=f),y-x.gprojection<=r)break;d=d.next}if(y-=x.gprojection,y>=0){l=!1;break}y>r&&(r=y,c=x,o=2),u=u.next}if(l){let x,y,d,_;o==1?(x=e.polygon,y=t.polygon,d=p,_=1):(x=t.polygon,y=e.polygon,d=c,_=-1);let f=null,z=1e100,P=y.edges.head;for(;P!=null;){let q=P.elt,R=d.gnormx*q.gnormx+d.gnormy*q.gnormy;R<z&&(z=R,f=q),P=P.next}let k=f.gp0.x,m=f.gp0.y,b=f.gp1.x,C=f.gp1.y,v=b-k,w=C-m,O=d.gnormy*k-d.gnormx*m,E=d.gnormy*b-d.gnormx*C,M=1/(E-O),N=(-d.tp1-O)*M;if(N>i.Config.epsilon){let q=N;k+=v*q,m+=w*q}let Z=(-d.tp0-E)*M;if(Z<-i.Config.epsilon){let q=Z;b+=v*q,C+=w*q}let S=_,A=d.gnormx*S,F=d.gnormy*S;n.lnormx=d.lnormx,n.lnormy=d.lnormy,n.lproj=d.lprojection,n.radius=0,n.rev=s!=(_==-1),n.ptype=n.rev?1:0;let B=k*d.gnormx+m*d.gnormy-d.gprojection,G=b*d.gnormx+C*d.gnormy-d.gprojection;if(B>0&&G>0)return!1;{s&&(A=-A,F=-F);let q=k-d.gnormx*B*.5,R=m-d.gnormy*B*.5,T=n.rev?1:0,V=B>0;V==null&&(V=!1);let K=null,$=n.contacts.next;for(;$!=null;){let W=$;if(T==W.hash){K=W;break}$=$.next}if(K==null){we.zpp_pool==null?K=new we:(K=we.zpp_pool,we.zpp_pool=K.next,K.next=null);let W=K.inner;W.jnAcc=W.jtAcc=0,K.hash=T,K.fresh=!0,K.arbiter=n,n.jrAcc=0;let ne=n.contacts;K._inuse=!0;let re=K;re.next=ne.next,ne.next=re,ne.modified=!0,ne.length++,n.innards.add(W)}else K.fresh=!1;K.px=q,K.py=R,n.nx=A,n.ny=F,K.dist=B,K.stamp=n.stamp,K.posOnly=V;let Y=K,X=1;k-=y.body.posx*X,m-=y.body.posy*X,Y.inner.lr1x=k*y.body.axisy+m*y.body.axisx,Y.inner.lr1y=m*y.body.axisy-k*y.body.axisx;let ee=b-d.gnormx*G*.5,J=C-d.gnormy*G*.5,L=n.rev?0:1,D=G>0;D==null&&(D=!1);let I=null,U=n.contacts.next;for(;U!=null;){let W=U;if(L==W.hash){I=W;break}U=U.next}if(I==null){we.zpp_pool==null?I=new we:(I=we.zpp_pool,we.zpp_pool=I.next,I.next=null);let W=I.inner;W.jnAcc=W.jtAcc=0,I.hash=L,I.fresh=!0,I.arbiter=n,n.jrAcc=0;let ne=n.contacts;I._inuse=!0;let re=I;re.next=ne.next,ne.next=re,ne.modified=!0,ne.length++,n.innards.add(W)}else I.fresh=!1;I.px=ee,I.py=J,n.nx=A,n.ny=F,I.dist=G,I.stamp=n.stamp,I.posOnly=D,Y=I;let H=1;return b-=y.body.posx*H,C-=y.body.posy*H,Y.inner.lr1x=b*y.body.axisy+C*y.body.axisx,Y.inner.lr1y=C*y.body.axisy-b*y.body.axisx,o==1?(n.__ref_edge1=d,n.__ref_edge2=f):(n.__ref_edge2=d,n.__ref_edge1=f),!0}}else return!1}else return!1}else{let l=-1e100,r=-1e100,a=!0,o=null,p=null,c=t.polygon.gverts.next,h=t.polygon.edges.head;for(;h!=null;){let u=h.elt,x=u.gnormx*e.circle.worldCOMx+u.gnormy*e.circle.worldCOMy-u.gprojection-e.circle.radius;if(x>0){a=!1;break}x>l&&(l=x,o=u,p=c),c=c.next,h=h.next}if(a){let u=p,x=p.next==null?t.polygon.gverts.next:p.next,y=e.circle.worldCOMy*o.gnormx-e.circle.worldCOMx*o.gnormy;if(y<=u.y*o.gnormx-u.x*o.gnormy){let d=e.circle.radius,_=u.x-e.circle.worldCOMx,f=u.y-e.circle.worldCOMy,z=_*_+f*f,P;if(z>d*d)P=null;else if(z<i.Config.epsilon*i.Config.epsilon){let k=e.circle.worldCOMx,m=e.circle.worldCOMy,b=null,C=n.contacts.next;for(;C!=null;){let v=C;if(v.hash==0){b=v;break}C=C.next}if(b==null){we.zpp_pool==null?b=new we:(b=we.zpp_pool,we.zpp_pool=b.next,b.next=null);let v=b.inner;v.jnAcc=v.jtAcc=0,b.hash=0,b.fresh=!0,b.arbiter=n,n.jrAcc=0;let w=n.contacts;b._inuse=!0;let O=b;O.next=w.next,w.next=O,w.modified=!0,w.length++,n.innards.add(v)}else b.fresh=!1;b.px=k,b.py=m,n.nx=1,n.ny=0,b.dist=-d,b.stamp=n.stamp,b.posOnly=!1,P=b}else{let k=1/Math.sqrt(z),m=k<i.Config.epsilon?1e100:1/k,b=.5+(e.circle.radius-.5*d)*k;if(s){let C=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let M=n.contacts;w._inuse=!0;let N=w;N.next=M.next,M.next=N,M.modified=!0,M.length++,n.innards.add(E)}else w.fresh=!1;w.px=C,w.py=v,n.nx=-_*k,n.ny=-f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}else{let C=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let M=n.contacts;w._inuse=!0;let N=w;N.next=M.next,M.next=N,M.modified=!0,M.length++,n.innards.add(E)}else w.fresh=!1;w.px=C,w.py=v,n.nx=_*k,n.ny=f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}}if(P!=null){let k=P.inner;n.ptype=2;let m=u.x-t.polygon.body.posx,b=u.y-t.polygon.body.posy;n.__ref_edge1=o,n.__ref_vertex=-1,s?(k.lr1x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr1y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr2x=e.circle.localCOMx,k.lr2y=e.circle.localCOMy):(k.lr2x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr2y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr1x=e.circle.localCOMx,k.lr1y=e.circle.localCOMy),n.radius=e.circle.radius}return P!=null}else if(y>=x.y*o.gnormx-x.x*o.gnormy){let d=e.circle.radius,_=x.x-e.circle.worldCOMx,f=x.y-e.circle.worldCOMy,z=_*_+f*f,P;if(z>d*d)P=null;else if(z<i.Config.epsilon*i.Config.epsilon){let k=e.circle.worldCOMx,m=e.circle.worldCOMy,b=null,C=n.contacts.next;for(;C!=null;){let v=C;if(v.hash==0){b=v;break}C=C.next}if(b==null){we.zpp_pool==null?b=new we:(b=we.zpp_pool,we.zpp_pool=b.next,b.next=null);let v=b.inner;v.jnAcc=v.jtAcc=0,b.hash=0,b.fresh=!0,b.arbiter=n,n.jrAcc=0;let w=n.contacts;b._inuse=!0;let O=b;O.next=w.next,w.next=O,w.modified=!0,w.length++,n.innards.add(v)}else b.fresh=!1;b.px=k,b.py=m,n.nx=1,n.ny=0,b.dist=-d,b.stamp=n.stamp,b.posOnly=!1,P=b}else{let k=1/Math.sqrt(z),m=k<i.Config.epsilon?1e100:1/k,b=.5+(e.circle.radius-.5*d)*k;if(s){let C=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let M=n.contacts;w._inuse=!0;let N=w;N.next=M.next,M.next=N,M.modified=!0,M.length++,n.innards.add(E)}else w.fresh=!1;w.px=C,w.py=v,n.nx=-_*k,n.ny=-f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}else{let C=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let M=n.contacts;w._inuse=!0;let N=w;N.next=M.next,M.next=N,M.modified=!0,M.length++,n.innards.add(E)}else w.fresh=!1;w.px=C,w.py=v,n.nx=_*k,n.ny=f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}}if(P!=null){let k=P.inner;n.ptype=2;let m=x.x-t.polygon.body.posx,b=x.y-t.polygon.body.posy;n.__ref_edge1=o,n.__ref_vertex=1,s?(k.lr1x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr1y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr2x=e.circle.localCOMx,k.lr2y=e.circle.localCOMy):(k.lr2x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr2y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr1x=e.circle.localCOMx,k.lr1y=e.circle.localCOMy),n.radius=e.circle.radius}return P!=null}else{let d=e.circle.radius+l*.5,_=o.gnormx*d,f=o.gnormy*d,z=e.circle.worldCOMx-_,P=e.circle.worldCOMy-f,k;if(s){let m=o.gnormx,b=o.gnormy,C=null,v=n.contacts.next;for(;v!=null;){let w=v;if(w.hash==0){C=w;break}v=v.next}if(C==null){we.zpp_pool==null?C=new we:(C=we.zpp_pool,we.zpp_pool=C.next,C.next=null);let w=C.inner;w.jnAcc=w.jtAcc=0,C.hash=0,C.fresh=!0,C.arbiter=n,n.jrAcc=0;let O=n.contacts;C._inuse=!0;let E=C;E.next=O.next,O.next=E,O.modified=!0,O.length++,n.innards.add(w)}else C.fresh=!1;C.px=z,C.py=P,n.nx=m,n.ny=b,C.dist=l,C.stamp=n.stamp,C.posOnly=!1,k=C}else{let m=-o.gnormx,b=-o.gnormy,C=null,v=n.contacts.next;for(;v!=null;){let w=v;if(w.hash==0){C=w;break}v=v.next}if(C==null){we.zpp_pool==null?C=new we:(C=we.zpp_pool,we.zpp_pool=C.next,C.next=null);let w=C.inner;w.jnAcc=w.jtAcc=0,C.hash=0,C.fresh=!0,C.arbiter=n,n.jrAcc=0;let O=n.contacts;C._inuse=!0;let E=C;E.next=O.next,O.next=E,O.modified=!0,O.length++,n.innards.add(w)}else C.fresh=!1;C.px=z,C.py=P,n.nx=m,n.ny=b,C.dist=l,C.stamp=n.stamp,C.posOnly=!1,k=C}return n.ptype=s?0:1,n.lnormx=o.lnormx,n.lnormy=o.lnormy,n.rev=!s,n.lproj=o.lprojection,n.radius=e.circle.radius,k.inner.lr1x=e.circle.localCOMx,k.inner.lr1y=e.circle.localCOMy,n.__ref_edge1=o,n.__ref_vertex=0,!0}}else return!1}else{let l=e.circle.radius+t.circle.radius,r=t.circle.worldCOMx-e.circle.worldCOMx,a=t.circle.worldCOMy-e.circle.worldCOMy,o=r*r+a*a,p;if(o>l*l)p=null;else if(o<i.Config.epsilon*i.Config.epsilon){let c=e.circle.worldCOMx,h=e.circle.worldCOMy,u=null,x=n.contacts.next;for(;x!=null;){let y=x;if(y.hash==0){u=y;break}x=x.next}if(u==null){we.zpp_pool==null?u=new we:(u=we.zpp_pool,we.zpp_pool=u.next,u.next=null);let y=u.inner;y.jnAcc=y.jtAcc=0,u.hash=0,u.fresh=!0,u.arbiter=n,n.jrAcc=0;let d=n.contacts;u._inuse=!0;let _=u;_.next=d.next,d.next=_,d.modified=!0,d.length++,n.innards.add(y)}else u.fresh=!1;u.px=c,u.py=h,n.nx=1,n.ny=0,u.dist=-l,u.stamp=n.stamp,u.posOnly=!1,p=u}else{let c=1/Math.sqrt(o),h=c<i.Config.epsilon?1e100:1/c,u=.5+(e.circle.radius-.5*l)*c;if(s){let x=e.circle.worldCOMx+r*u,y=e.circle.worldCOMy+a*u,d=null,_=n.contacts.next;for(;_!=null;){let f=_;if(f.hash==0){d=f;break}_=_.next}if(d==null){we.zpp_pool==null?d=new we:(d=we.zpp_pool,we.zpp_pool=d.next,d.next=null);let f=d.inner;f.jnAcc=f.jtAcc=0,d.hash=0,d.fresh=!0,d.arbiter=n,n.jrAcc=0;let z=n.contacts;d._inuse=!0;let P=d;P.next=z.next,z.next=P,z.modified=!0,z.length++,n.innards.add(f)}else d.fresh=!1;d.px=x,d.py=y,n.nx=-r*c,n.ny=-a*c,d.dist=h-l,d.stamp=n.stamp,d.posOnly=!1,p=d}else{let x=e.circle.worldCOMx+r*u,y=e.circle.worldCOMy+a*u,d=null,_=n.contacts.next;for(;_!=null;){let f=_;if(f.hash==0){d=f;break}_=_.next}if(d==null){we.zpp_pool==null?d=new we:(d=we.zpp_pool,we.zpp_pool=d.next,d.next=null);let f=d.inner;f.jnAcc=f.jtAcc=0,d.hash=0,d.fresh=!0,d.arbiter=n,n.jrAcc=0;let z=n.contacts;d._inuse=!0;let P=d;P.next=z.next,z.next=P,z.modified=!0,z.length++,n.innards.add(f)}else d.fresh=!1;d.px=x,d.py=y,n.nx=r*c,n.ny=a*c,d.dist=h-l,d.stamp=n.stamp,d.posOnly=!1,p=d}}if(p!=null){let c=p.inner;return s?(c.lr1x=t.circle.localCOMx,c.lr1y=t.circle.localCOMy,c.lr2x=e.circle.localCOMx,c.lr2y=e.circle.localCOMy):(c.lr1x=e.circle.localCOMx,c.lr1y=e.circle.localCOMy,c.lr2x=t.circle.localCOMx,c.lr2y=t.circle.localCOMy),n.radius=e.circle.radius+t.circle.radius,n.ptype=2,!0}else return!1}}static testCollide_safe(e,t){let n=me();if(e.type>t.type){let s=e;e=t,t=s}return be.testCollide(e,t)}static testCollide(e,t){let n=me();if(t.type==2)return be._capsuleTestCollide(e,t);if(t.type==1)if(e.type==1){let s=!0,i=e.polygon.edges.head;for(;i!=null;){let l=i.elt,r=1e100,a=t.polygon.gverts.next;for(;a!=null;){let o=a,p=l.gnormx*o.x+l.gnormy*o.y;p<r&&(r=p),a=a.next}if(r-=l.gprojection,r>0){s=!1;break}i=i.next}if(s){let l=t.polygon.edges.head;for(;l!=null;){let r=l.elt,a=1e100,o=e.polygon.gverts.next;for(;o!=null;){let p=o,c=r.gnormx*p.x+r.gnormy*p.y;c<a&&(a=c),o=o.next}if(a-=r.gprojection,a>0){s=!1;break}l=l.next}return s}else return!1}else{let s=null,i=null,l=!0,r=-1e100,a=t.polygon.gverts.next,o=t.polygon.edges.head;for(;o!=null;){let p=o.elt,c=p.gnormx*e.circle.worldCOMx+p.gnormy*e.circle.worldCOMy-p.gprojection-e.circle.radius;if(c>0){l=!1;break}c>r&&(r=c,s=p,i=a),a=a.next,o=o.next}if(l){let p=i,c=i.next==null?t.polygon.gverts.next:i.next,h=e.circle.worldCOMy*s.gnormx-e.circle.worldCOMx*s.gnormy;if(h<=p.y*s.gnormx-p.x*s.gnormy){let u=e.circle.radius,x=p.x-e.circle.worldCOMx,y=p.y-e.circle.worldCOMy;return x*x+y*y<=u*u}else if(h>=c.y*s.gnormx-c.x*s.gnormy){let u=e.circle.radius,x=c.x-e.circle.worldCOMx,y=c.y-e.circle.worldCOMy;return x*x+y*y<=u*u}else return!0}else return!1}else{let s=e.circle.radius+t.circle.radius,i=t.circle.worldCOMx-e.circle.worldCOMx,l=t.circle.worldCOMy-e.circle.worldCOMy;return i*i+l*l<=s*s}}static flowCollide(e,t,n){let s=me();if(e.type==2||t.type==2)return be._capsuleFlowCollide(e,t,n,s);if(t.type==1)if(e.type==1){let i=[],l=[],r=!0,a=!0,o=e.polygon.edges.head;for(;o!=null;){let p=o.elt,c=1e100,h=0,u=t.polygon.gverts.next;for(;u!=null;){let x=u,y=p.gnormx*x.x+p.gnormy*x.y;y<c&&(c=y),y>=p.gprojection+s.Config.epsilon&&(l[h]=!0,a=!1),++h,u=u.next}if(c-=p.gprojection,c>0){r=!1;break}o=o.next}if(a){let p=t.polygon;if(p.zip_worldCOM&&p.body!=null){if(p.zip_worldCOM=!1,p.zip_localCOM){if(p.zip_localCOM=!1,p.type==1){let h=p.polygon;if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(h.lverts.next.next==null)h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;else if(h.lverts.next.next.next==null){h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;let u=1;h.localCOMx+=h.lverts.next.next.x*u,h.localCOMy+=h.lverts.next.next.y*u;let x=.5;h.localCOMx*=x,h.localCOMy*=x}else{h.localCOMx=0,h.localCOMy=0;let u=0,x=h.lverts.next,y=x;x=x.next;let d=x;for(x=x.next;x!=null;){let m=x;u+=d.x*(m.y-y.y);let b=m.y*d.x-m.x*d.y;h.localCOMx+=(d.x+m.x)*b,h.localCOMy+=(d.y+m.y)*b,y=d,d=m,x=x.next}x=h.lverts.next;let _=x;u+=d.x*(_.y-y.y);let f=_.y*d.x-_.x*d.y;h.localCOMx+=(d.x+_.x)*f,h.localCOMy+=(d.y+_.y)*f,y=d,d=_,x=x.next;let z=x;u+=d.x*(z.y-y.y);let P=z.y*d.x-z.x*d.y;h.localCOMx+=(d.x+z.x)*P,h.localCOMy+=(d.y+z.y)*P,u=1/(3*u);let k=u;h.localCOMx*=k,h.localCOMy*=k}}p.wrap_localCOM!=null&&(p.wrap_localCOM.zpp_inner.x=p.localCOMx,p.wrap_localCOM.zpp_inner.y=p.localCOMy)}let c=p.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),p.worldCOMx=p.body.posx+(p.body.axisy*p.localCOMx-p.body.axisx*p.localCOMy),p.worldCOMy=p.body.posy+(p.localCOMx*p.body.axisx+p.localCOMy*p.body.axisy)}return n.overlap=t.polygon.area,n.centroidx=t.polygon.worldCOMx,n.centroidy=t.polygon.worldCOMy,!0}else if(r){a=!0;let p=t.polygon.edges.head;for(;p!=null;){let c=p.elt,h=1e100,u=0,x=e.polygon.gverts.next;for(;x!=null;){let y=x,d=c.gnormx*y.x+c.gnormy*y.y;d<h&&(h=d),d>=c.gprojection+s.Config.epsilon&&(i[u]=!0,a=!1),++u,x=x.next}if(h-=c.gprojection,h>0){r=!1;break}p=p.next}if(a){let c=e.polygon;if(c.zip_worldCOM&&c.body!=null){if(c.zip_worldCOM=!1,c.zip_localCOM){if(c.zip_localCOM=!1,c.type==1){let u=c.polygon;if(u.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(u.lverts.next.next==null)u.localCOMx=u.lverts.next.x,u.localCOMy=u.lverts.next.y;else if(u.lverts.next.next.next==null){u.localCOMx=u.lverts.next.x,u.localCOMy=u.lverts.next.y;let x=1;u.localCOMx+=u.lverts.next.next.x*x,u.localCOMy+=u.lverts.next.next.y*x;let y=.5;u.localCOMx*=y,u.localCOMy*=y}else{u.localCOMx=0,u.localCOMy=0;let x=0,y=u.lverts.next,d=y;y=y.next;let _=y;for(y=y.next;y!=null;){let b=y;x+=_.x*(b.y-d.y);let C=b.y*_.x-b.x*_.y;u.localCOMx+=(_.x+b.x)*C,u.localCOMy+=(_.y+b.y)*C,d=_,_=b,y=y.next}y=u.lverts.next;let f=y;x+=_.x*(f.y-d.y);let z=f.y*_.x-f.x*_.y;u.localCOMx+=(_.x+f.x)*z,u.localCOMy+=(_.y+f.y)*z,d=_,_=f,y=y.next;let P=y;x+=_.x*(P.y-d.y);let k=P.y*_.x-P.x*_.y;u.localCOMx+=(_.x+P.x)*k,u.localCOMy+=(_.y+P.y)*k,x=1/(3*x);let m=x;u.localCOMx*=m,u.localCOMy*=m}}c.wrap_localCOM!=null&&(c.wrap_localCOM.zpp_inner.x=c.localCOMx,c.wrap_localCOM.zpp_inner.y=c.localCOMy)}let h=c.body;h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot)),c.worldCOMx=c.body.posx+(c.body.axisy*c.localCOMx-c.body.axisx*c.localCOMy),c.worldCOMy=c.body.posy+(c.localCOMx*c.body.axisx+c.localCOMy*c.body.axisy)}return n.overlap=e.polygon.area,n.centroidx=e.polygon.worldCOMx,n.centroidy=e.polygon.worldCOMy,!0}else if(r){for(;be.flowpoly.head!=null;){let P=be.flowpoly.pop_unsafe();if(!P._inuse){let k=P;k.outer!=null&&(k.outer.zpp_inner=null,k.outer=null),k._isimmutable=null,k._validate=null,k._invalidate=null,k.next=le.zpp_pool,le.zpp_pool=k}}let c=null,h=!1,u=e.polygon.gverts.next,x=0,y=t.polygon.gverts.next,d=0,_=0,f=t.polygon.edgeCnt;for(;_<f;){let P=_++;if(l[P])y=y.next;else{d=P;break}}if(y==null){y=t.polygon.gverts.next,h=!0;let P=0,k=e.polygon.edgeCnt;for(;P<k;){let m=P++;if(i[m])u=u.next;else{x=m;break}}u==null?u=e.polygon.gverts.next:(be.flowpoly.add(u),c=be.flowpoly.head.elt)}else be.flowpoly.add(y),c=be.flowpoly.head.elt;let z=1;if(be.flowpoly.head==null){let P=!0,k=e.polygon.gverts.next,m=k,b=k.next;for(;b!=null;){let C=b,v=2,w=!0,O=t.polygon.gverts.next,E=O,M=O.next;for(;M!=null;){let N=M,Z=0,S=m.x-E.x,A=m.y-E.y,F=C.x-m.x,B=C.y-m.y,G=N.x-E.x,q=N.y-E.y,R=B*G-F*q,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(q*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let K=(B*S-F*A)*R;K>s.Config.epsilon&&K<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O),O=M,E=N,M=M.next}if(w)for(;;){M=t.polygon.gverts.next;let N=M,Z=0,S=m.x-E.x,A=m.y-E.y,F=C.x-m.x,B=C.y-m.y,G=N.x-E.x,q=N.y-E.y,R=B*G-F*q,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(q*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let K=(B*S-F*A)*R;K>s.Config.epsilon&&K<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O);break}if(v!=2){let N=v,Z=m.x+(C.x-m.x)*N,S=m.y+(C.y-m.y)*N,A;le.zpp_pool==null?A=new le:(A=le.zpp_pool,le.zpp_pool=A.next,A.next=null),A.weak=!1,A._immutable=!1,A.x=Z,A.y=S,c=A,be.flowpoly.add(c),h=!0,u=k,P=!1;break}k=b,m=C,b=b.next}if(P)for(;;){b=e.polygon.gverts.next;let C=b,v=2,w=!0,O=t.polygon.gverts.next,E=O,M=O.next;for(;M!=null;){let N=M,Z=0,S=m.x-E.x,A=m.y-E.y,F=C.x-m.x,B=C.y-m.y,G=N.x-E.x,q=N.y-E.y,R=B*G-F*q,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(q*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let K=(B*S-F*A)*R;K>s.Config.epsilon&&K<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O),O=M,E=N,M=M.next}if(w)for(;;){M=t.polygon.gverts.next;let N=M,Z=0,S=m.x-E.x,A=m.y-E.y,F=C.x-m.x,B=C.y-m.y,G=N.x-E.x,q=N.y-E.y,R=B*G-F*q,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(q*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let K=(B*S-F*A)*R;K>s.Config.epsilon&&K<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O);break}if(v!=2){let N=v,Z=m.x+(C.x-m.x)*N,S=m.y+(C.y-m.y)*N,A;le.zpp_pool==null?A=new le:(A=le.zpp_pool,le.zpp_pool=A.next,A.next=null),A.weak=!1,A._immutable=!1,A.x=Z,A.y=S,c=A,be.flowpoly.add(c),h=!0,u=k;break}break}z=2}for(;;)if(h)if(u=u.next,++x,u==null&&(u=e.polygon.gverts.next,x=0),i[x]){let P=be.flowpoly.head.elt,k=u,m=y,b=y.next;b==null&&(b=t.polygon.gverts.next);let C=-1,v=null,w=0,O=0,E=b,M=b;for(;;){let T=M,V=0,K=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,J=k.y-P.y,L=X*ee-Y*J,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(J*K-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*K-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=C)if(v=y,w=d,++O==z){C=V,M=E;break}else C=V;m=T,y=M,++d,d>=t.polygon.edgeCnt&&(d=0),M=M.next,M==null&&(M=t.polygon.gverts.next);break}for(;M!=E;){let T=M,V=0,K=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,J=k.y-P.y,L=X*ee-Y*J,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(J*K-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*K-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=C)if(v=y,w=d,++O==z){C=V;break}else C=V;m=T,y=M,++d,d>=t.polygon.edgeCnt&&(d=0),M=M.next,M==null&&(M=t.polygon.gverts.next)}if(v==null)break;let N=v,Z=v.next;Z==null&&(Z=t.polygon.gverts.next);let S=Z,A=C,F=N.x+(S.x-N.x)*A,B=N.y+(S.y-N.y)*A,G;if(c!=null){let T=F-c.x,V=B-c.y;G=T*T+V*V<s.Config.epsilon}else G=!1;if(G)break;let q=be.flowpoly,R;le.zpp_pool==null?R=new le:(R=le.zpp_pool,le.zpp_pool=R.next,R.next=null),R.weak=!1,R._immutable=!1,R.x=F,R.y=B,q.add(R),c==null&&(c=be.flowpoly.head.elt),y=v,d=w,h=!h,z=2}else{let P=u,k;if(c!=null){let m=P.x-c.x,b=P.y-c.y;k=m*m+b*b<s.Config.epsilon}else k=!1;if(k)break;be.flowpoly.add(P),c==null&&(c=be.flowpoly.head.elt),z=1}else if(y=y.next,++d,y==null&&(y=t.polygon.gverts.next,d=0),l[d]){let P=be.flowpoly.head.elt,k=y,m=u,b=u.next;b==null&&(b=e.polygon.gverts.next);let C=-1,v=null,w=0,O=0,E=b,M=b;for(;;){let T=M,V=0,K=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,J=k.y-P.y,L=X*ee-Y*J,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(J*K-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*K-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=C)if(v=u,w=x,++O==z){C=V,M=E;break}else C=V;m=T,u=M,++x,x>=e.polygon.edgeCnt&&(x=0),M=M.next,M==null&&(M=e.polygon.gverts.next);break}for(;M!=E;){let T=M,V=0,K=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,J=k.y-P.y,L=X*ee-Y*J,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(J*K-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*K-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=C)if(v=u,w=x,++O==z){C=V;break}else C=V;m=T,u=M,++x,x>=e.polygon.edgeCnt&&(x=0),M=M.next,M==null&&(M=e.polygon.gverts.next)}if(v==null)break;let N=v,Z=v.next;Z==null&&(Z=e.polygon.gverts.next);let S=Z,A=C,F=N.x+(S.x-N.x)*A,B=N.y+(S.y-N.y)*A,G;if(c!=null){let T=F-c.x,V=B-c.y;G=T*T+V*V<s.Config.epsilon}else G=!1;if(G)break;let q=be.flowpoly,R;le.zpp_pool==null?R=new le:(R=le.zpp_pool,le.zpp_pool=R.next,R.next=null),R.weak=!1,R._immutable=!1,R.x=F,R.y=B,q.add(R),c==null&&(c=be.flowpoly.head.elt),u=v,x=w,h=!h,z=2}else{let P=y,k;if(c!=null){let m=P.x-c.x,b=P.y-c.y;k=m*m+b*b<s.Config.epsilon}else k=!1;if(k)break;be.flowpoly.add(P),c==null&&(c=be.flowpoly.head.elt),z=1}if(be.flowpoly.head!=null&&be.flowpoly.head.next!=null&&be.flowpoly.head.next.next!=null){let P=0,k=0,m=0,b=be.flowpoly.head,C=b.elt;b=b.next;let v=b.elt;for(b=b.next;b!=null;){let S=b.elt;P+=v.x*(S.y-C.y);let A=S.y*v.x-S.x*v.y;k+=(v.x+S.x)*A,m+=(v.y+S.y)*A,C=v,v=S,b=b.next}b=be.flowpoly.head;let w=b.elt;P+=v.x*(w.y-C.y);let O=w.y*v.x-w.x*v.y;k+=(v.x+w.x)*O,m+=(v.y+w.y)*O,C=v,v=w,b=b.next;let E=b.elt;P+=v.x*(E.y-C.y);let M=E.y*v.x-E.x*v.y;k+=(v.x+E.x)*M,m+=(v.y+E.y)*M,P*=.5;let Z=1/(6*P);return k*=Z,m*=Z,n.overlap=-P,n.centroidx=k,n.centroidy=m,!0}else return!1}else return!1}else return!1}else{let i=[],l=!0,r=null,a=null,o=-1e100,p=!0,c=t.polygon.gverts.next,h=0,u=t.polygon.edges.head;for(;u!=null;){let x=u.elt,y=x.gnormx*e.circle.worldCOMx+x.gnormy*e.circle.worldCOMy;if(y>x.gprojection+e.circle.radius){p=!1;break}else y+e.circle.radius>x.gprojection+s.Config.epsilon&&(l=!1,i[h]=!0);y-=x.gprojection+e.circle.radius,y>o&&(o=y,r=x,a=c),c=c.next,++h,u=u.next}if(p){if(l)return n.overlap=e.circle.area,n.centroidx=e.circle.worldCOMx,n.centroidy=e.circle.worldCOMy,!0;{let x=a,y=a.next==null?t.polygon.gverts.next:a.next,d=e.circle.worldCOMy*r.gnormx-e.circle.worldCOMx*r.gnormy,_;if(d<=x.y*r.gnormx-x.x*r.gnormy){let f=e.circle.radius,z=x.x-e.circle.worldCOMx,P=x.y-e.circle.worldCOMy;_=z*z+P*P<=f*f}else if(d>=y.y*r.gnormx-y.x*r.gnormy){let f=e.circle.radius,z=y.x-e.circle.worldCOMx,P=y.y-e.circle.worldCOMy;_=z*z+P*P<=f*f}else _=!0;if(_){let f=[],z=0,P=!0,k=null,m=0,b=t.polygon.gverts.next;for(;b!=null;){let C=b,v=C.x-e.circle.worldCOMx,w=C.y-e.circle.worldCOMy,O=v*v+w*w;(f[z]=O<=e.circle.radius*e.circle.radius)?(m=z,k=b):P=!1,++z,b=b.next}if(P){let C=t.polygon;if(C.zip_worldCOM&&C.body!=null){if(C.zip_worldCOM=!1,C.zip_localCOM){if(C.zip_localCOM=!1,C.type==1){let w=C.polygon;if(w.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(w.lverts.next.next==null)w.localCOMx=w.lverts.next.x,w.localCOMy=w.lverts.next.y;else if(w.lverts.next.next.next==null){w.localCOMx=w.lverts.next.x,w.localCOMy=w.lverts.next.y;let O=1;w.localCOMx+=w.lverts.next.next.x*O,w.localCOMy+=w.lverts.next.next.y*O;let E=.5;w.localCOMx*=E,w.localCOMy*=E}else{w.localCOMx=0,w.localCOMy=0;let O=0,E=w.lverts.next,M=E;E=E.next;let N=E;for(E=E.next;E!=null;){let G=E;O+=N.x*(G.y-M.y);let q=G.y*N.x-G.x*N.y;w.localCOMx+=(N.x+G.x)*q,w.localCOMy+=(N.y+G.y)*q,M=N,N=G,E=E.next}E=w.lverts.next;let Z=E;O+=N.x*(Z.y-M.y);let S=Z.y*N.x-Z.x*N.y;w.localCOMx+=(N.x+Z.x)*S,w.localCOMy+=(N.y+Z.y)*S,M=N,N=Z,E=E.next;let A=E;O+=N.x*(A.y-M.y);let F=A.y*N.x-A.x*N.y;w.localCOMx+=(N.x+A.x)*F,w.localCOMy+=(N.y+A.y)*F,O=1/(3*O);let B=O;w.localCOMx*=B,w.localCOMy*=B}}C.wrap_localCOM!=null&&(C.wrap_localCOM.zpp_inner.x=C.localCOMx,C.wrap_localCOM.zpp_inner.y=C.localCOMy)}let v=C.body;v.zip_axis&&(v.zip_axis=!1,v.axisx=Math.sin(v.rot),v.axisy=Math.cos(v.rot)),C.worldCOMx=C.body.posx+(C.body.axisy*C.localCOMx-C.body.axisx*C.localCOMy),C.worldCOMy=C.body.posy+(C.localCOMx*C.body.axisx+C.localCOMy*C.body.axisy)}return n.overlap=t.polygon.area,n.centroidx=t.polygon.worldCOMx,n.centroidy=t.polygon.worldCOMy,!0}else{for(;be.flowpoly.head!=null;){let w=be.flowpoly.pop_unsafe();if(!w._inuse){let O=w;O.outer!=null&&(O.outer.zpp_inner=null,O.outer=null),O._isimmutable=null,O._validate=null,O._invalidate=null,O.next=le.zpp_pool,le.zpp_pool=O}}be.flowsegs.clear();let C=null,v=1;for(k==null?(k=t.polygon.gverts.next,v=2):(C=k,be.flowpoly.add(C));v!=0;)if(v==1)if(k=k.next,k==null&&(k=t.polygon.gverts.next),++m,m>=t.polygon.edgeCnt&&(m=0),f[m]){let w=C.x-k.x,O=C.y-k.y;if(w*w+O*O<s.Config.epsilon)break;be.flowpoly.add(k)}else{let w=be.flowpoly.head.elt,O=k,E=O.x-w.x,M=O.y-w.y,N=w.x-e.circle.worldCOMx,Z=w.y-e.circle.worldCOMy,S=E*E+M*M,A=2*(N*E+Z*M),F=N*N+Z*Z-e.circle.radius*e.circle.radius,B=Math.sqrt(A*A-4*S*F);S=1/(2*S);let G=(-A-B)*S,q=G<s.Config.epsilon?(-A+B)*S:G,R=0,T=0,V=q;R=w.x+(O.x-w.x)*V,T=w.y+(O.y-w.y)*V;let K=C.x-R,$=C.y-T;if(K*K+$*$<s.Config.epsilon)break;let Y=be.flowpoly,X;le.zpp_pool==null?X=new le:(X=le.zpp_pool,le.zpp_pool=X.next,X.next=null),X.weak=!1,X._immutable=!1,X.x=R,X.y=T,Y.add(X),v=2}else if(v==2){let w=k.next;w==null&&(w=t.polygon.gverts.next);let O=k;v=0;let E=w,M=w;for(;;){let N=M,Z=m+1;if(Z==t.polygon.edgeCnt&&(Z=0),i[m])if(f[Z]){let S=N.x-O.x,A=N.y-O.y,F=O.x-e.circle.worldCOMx,B=O.y-e.circle.worldCOMy,G=S*S+A*A,q=2*(F*S+B*A),R=F*F+B*B-e.circle.radius*e.circle.radius,T=Math.sqrt(q*q-4*G*R);G=1/(2*G);let V=(-q-T)*G,K=V<s.Config.epsilon?(-q+T)*G:V,$=0,Y=0,X=K;$=O.x+(N.x-O.x)*X,Y=O.y+(N.y-O.y)*X;let ee=C.x-$,J=C.y-Y;if(ee*ee+J*J<s.Config.epsilon){v=0,M=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=$,L.y=Y;let D=L;be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D),be.flowpoly.add(D),v=1,M=E;break}else{let S=0,A=0,F=N.x-O.x,B=N.y-O.y,G=O.x-e.circle.worldCOMx,q=O.y-e.circle.worldCOMy,R=F*F+B*B,T=2*(G*F+q*B),V=G*G+q*q-e.circle.radius*e.circle.radius,K=T*T-4*R*V,$;if(K*K<s.Config.epsilon?(K<0?S=10:(A=-T/(2*R),S=A),$=!1):(K=Math.sqrt(K),R=1/(2*R),S=(-T-K)*R,A=(-T+K)*R,$=!0),S<1-s.Config.epsilon&&A>s.Config.epsilon){let Y=0,X=0,ee=S;Y=O.x+(N.x-O.x)*ee,X=O.y+(N.y-O.y)*ee;let J;if(C!=null){let I=C.x-Y,U=C.y-X;J=I*I+U*U<s.Config.epsilon}else J=!1;if(J){v=0,M=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=Y,L.y=X;let D=L;if(be.flowpoly.head!=null&&(be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D)),be.flowpoly.add(D),C==null&&(C=be.flowpoly.head.elt),$){let I=0,U=0,H=A;I=O.x+(N.x-O.x)*H,U=O.y+(N.y-O.y)*H;let W=be.flowpoly,ne;le.zpp_pool==null?ne=new le:(ne=le.zpp_pool,le.zpp_pool=ne.next,ne.next=null),ne.weak=!1,ne._immutable=!1,ne.x=I,ne.y=U,W.add(ne)}}}O=N,k=M,m=Z,M=M.next,M==null&&(M=t.polygon.gverts.next);break}for(;M!=E;){let N=M,Z=m+1;if(Z==t.polygon.edgeCnt&&(Z=0),i[m])if(f[Z]){let S=N.x-O.x,A=N.y-O.y,F=O.x-e.circle.worldCOMx,B=O.y-e.circle.worldCOMy,G=S*S+A*A,q=2*(F*S+B*A),R=F*F+B*B-e.circle.radius*e.circle.radius,T=Math.sqrt(q*q-4*G*R);G=1/(2*G);let V=(-q-T)*G,K=V<s.Config.epsilon?(-q+T)*G:V,$=0,Y=0,X=K;$=O.x+(N.x-O.x)*X,Y=O.y+(N.y-O.y)*X;let ee=C.x-$,J=C.y-Y;if(ee*ee+J*J<s.Config.epsilon){v=0,M=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=$,L.y=Y;let D=L;be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D),be.flowpoly.add(D),v=1,M=E;break}else{let S=0,A=0,F=N.x-O.x,B=N.y-O.y,G=O.x-e.circle.worldCOMx,q=O.y-e.circle.worldCOMy,R=F*F+B*B,T=2*(G*F+q*B),V=G*G+q*q-e.circle.radius*e.circle.radius,K=T*T-4*R*V,$;if(K*K<s.Config.epsilon?(K<0?S=10:(A=-T/(2*R),S=A),$=!1):(K=Math.sqrt(K),R=1/(2*R),S=(-T-K)*R,A=(-T+K)*R,$=!0),S<1-s.Config.epsilon&&A>s.Config.epsilon){let Y=0,X=0,ee=S;Y=O.x+(N.x-O.x)*ee,X=O.y+(N.y-O.y)*ee;let J;if(C!=null){let I=C.x-Y,U=C.y-X;J=I*I+U*U<s.Config.epsilon}else J=!1;if(J){v=0,M=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=Y,L.y=X;let D=L;if(be.flowpoly.head!=null&&(be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D)),be.flowpoly.add(D),C==null&&(C=be.flowpoly.head.elt),$){let I=0,U=0,H=A;I=O.x+(N.x-O.x)*H,U=O.y+(N.y-O.y)*H;let W=be.flowpoly,ne;le.zpp_pool==null?ne=new le:(ne=le.zpp_pool,le.zpp_pool=ne.next,ne.next=null),ne.weak=!1,ne._immutable=!1,ne.x=I,ne.y=U,W.add(ne)}}}O=N,k=M,m=Z,M=M.next,M==null&&(M=t.polygon.gverts.next)}}if(be.flowpoly.head==null)return!1;if(be.flowpoly.head.next==null){let w=!0,O=t.polygon.edges.head;for(;O!=null;){let E=O.elt;if(E.gnormx*e.circle.worldCOMx+E.gnormy*e.circle.worldCOMy>E.gprojection){w=!1;break}O=O.next}return w?(n.overlap=e.circle.area,n.centroidx=e.circle.worldCOMx,n.centroidy=e.circle.worldCOMy,!0):!1}else{let w=0,O=0,E=0;if(be.flowpoly.head.next.next!=null){let N=0,Z=0,S=0;N=0;let A=be.flowpoly.head,F=A.elt;A=A.next;let B=A.elt;for(A=A.next;A!=null;){let Y=A.elt;N+=B.x*(Y.y-F.y);let X=Y.y*B.x-Y.x*B.y;Z+=(B.x+Y.x)*X,S+=(B.y+Y.y)*X,F=B,B=Y,A=A.next}A=be.flowpoly.head;let G=A.elt;N+=B.x*(G.y-F.y);let q=G.y*B.x-G.x*B.y;Z+=(B.x+G.x)*q,S+=(B.y+G.y)*q,F=B,B=G,A=A.next;let R=A.elt;N+=B.x*(R.y-F.y);let T=R.y*B.x-R.x*B.y;Z+=(B.x+R.x)*T,S+=(B.y+R.y)*T,N*=.5;let K=1/(6*N);Z*=K,S*=K;let $=-N;w+=Z*$,O+=S*$,E-=N}else be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(be.flowpoly.head.next.elt);for(;be.flowsegs.head!=null;){let N=be.flowsegs.pop_unsafe(),Z=be.flowsegs.pop_unsafe(),S=Z.x-N.x,A=Z.y-N.y,F=S,B=A,G=F*F+B*B,R=1/Math.sqrt(G);F*=R,B*=R;let T=F;F=-B,B=T;let V=N.x+Z.x,K=N.y+Z.y,$=.5;V*=$,K*=$;let Y=1;V-=e.circle.worldCOMx*Y,K-=e.circle.worldCOMy*Y;let X=F*V+B*K,ee=0,J=0,L=X,D=L/e.circle.radius,I=Math.sqrt(1-D*D),U=Math.acos(D);ee=e.circle.radius*(e.circle.radius*U-L*I),J=.6666666666666666*e.circle.radius*I*I*I/(U-D*I),V=e.circle.worldCOMx,K=e.circle.worldCOMy;let H=J;V+=F*H,K+=B*H;let W=ee;w+=V*W,O+=K*W,E+=ee}let M=1/E;return w*=M,O*=M,n.overlap=E,n.centroidx=w,n.centroidy=O,!0}}}else return!1}}else return!1}else{let i=e.circle,l=t.circle,r=l.worldCOMx-i.worldCOMx,a=l.worldCOMy-i.worldCOMy,o=i.radius+l.radius,p=r*r+a*a;if(p>o*o)return!1;if(p<s.Config.epsilon*s.Config.epsilon)return i.radius<l.radius?(n.overlap=i.area,n.centroidx=i.worldCOMx,n.centroidy=i.worldCOMy):(n.overlap=l.area,n.centroidx=l.worldCOMx,n.centroidy=l.worldCOMy),!0;{let c=Math.sqrt(p),h=1/c,u=.5*(c-(l.radius*l.radius-i.radius*i.radius)*h);if(u<=-i.radius)n.overlap=i.area,n.centroidx=i.worldCOMx,n.centroidy=i.worldCOMy;else{let x=c-u;if(x<=-l.radius)n.overlap=l.area,n.centroidx=l.worldCOMx,n.centroidy=l.worldCOMy;else{let y=0,d=0,_=0,f=0,z=u,P=z/i.radius,k=Math.sqrt(1-P*P),m=Math.acos(P);y=i.radius*(i.radius*m-z*k),d=.6666666666666666*i.radius*k*k*k/(m-P*k);let b=x,C=b/l.radius,v=Math.sqrt(1-C*C),w=Math.acos(C);_=l.radius*(l.radius*w-b*v),f=.6666666666666666*l.radius*v*v*v/(w-C*v);let O=y+_,E=(d*y+(c-f)*_)/O*h;n.overlap=O,n.centroidx=i.worldCOMx+r*E,n.centroidy=i.worldCOMy+a*E}}return!0}}}static capsuleContains(e,t){let n=be._closestT(e.spine1x,e.spine1y,e.spine2x,e.spine2y,t.x,t.y),s=e.spine1x+n*(e.spine2x-e.spine1x),i=e.spine1y+n*(e.spine2y-e.spine1y),l=t.x-s,r=t.y-i;return l*l+r*r<e.radius*e.radius}static _closestT(e,t,n,s,i,l){let r=n-e,a=s-t,o=r*r+a*a;if(o<1e-12)return 0;let p=((i-e)*r+(l-t)*a)/o;return p<0&&(p=0),p>1&&(p=1),p}static _closestTT(e,t,n,s,i,l,r,a){let o=n-e,p=s-t,c=r-i,h=a-l,u=e-i,x=t-l,y=o*o+p*p,d=c*c+h*h,_=c*u+h*x,f,z;if(y<1e-12&&d<1e-12)return[0,0];if(y<1e-12)return f=0,z=_/d,z<0&&(z=0),z>1&&(z=1),[f,z];let P=o*u+p*x;if(d<1e-12)return z=0,f=-P/y,f<0&&(f=0),f>1&&(f=1),[f,z];let k=o*c+p*h,m=y*d-k*k;return m>1e-12?(f=(k*_-P*d)/m,f<0&&(f=0),f>1&&(f=1)):f=0,z=(k*f+_)/d,z<0?(z=0,f=-P/y,f<0&&(f=0),f>1&&(f=1)):z>1&&(z=1,f=(k-P)/y,f<0&&(f=0),f>1&&(f=1)),[f,z]}static _getOrCreateContact(e,t,n){let s=null,i=e.contacts.next;for(;i!=null;){if(t==i.hash){s=i;break}i=i.next}if(s==null){we.zpp_pool==null?s=new we:(s=we.zpp_pool,we.zpp_pool=s.next,s.next=null);let l=s.inner;l.jnAcc=l.jtAcc=0,s.hash=t,s.fresh=!0,s.arbiter=e,e.jrAcc=0;let r=e.contacts;s._inuse=!0;let a=s;a.next=r.next,r.next=a,r.modified=!0,r.length++,e.innards.add(l)}else s.fresh=!1;return s}static _capsuleContactCollide(e,t,n,s,i){let l=t.capsule;return e.type==0?be._circleCapsuleContact(e.circle,l,n,s,i):e.type==1?be._polyCapsuleContact(e.polygon,l,n,s,i):be._capsuleCapsuleContact(e.capsule,l,n,s,i)}static _circleCapsuleContact(e,t,n,s,i){let l=be._closestT(t.spine1x,t.spine1y,t.spine2x,t.spine2y,e.worldCOMx,e.worldCOMy),r=t.spine1x+l*(t.spine2x-t.spine1x),a=t.spine1y+l*(t.spine2y-t.spine1y),o=e.radius+t.radius,p=e.worldCOMx-r,c=e.worldCOMy-a,h=p*p+c*c;if(h>o*o)return!1;let u;if(h<i.Config.epsilon*i.Config.epsilon){let x=(e.worldCOMx+r)*.5,y=(e.worldCOMy+a)*.5;u=be._getOrCreateContact(n,0,n.stamp),u.px=x,u.py=y,n.nx=1,n.ny=0,u.dist=-o,u.stamp=n.stamp,u.posOnly=!1}else{let x=1/Math.sqrt(h),y=x<i.Config.epsilon?1e100:1/x,d=.5+(e.radius-.5*o)*x,_=e.worldCOMx-p*d,f=e.worldCOMy-c*d;u=be._getOrCreateContact(n,0,n.stamp),u.px=_,u.py=f,s?(n.nx=p*x,n.ny=c*x):(n.nx=-p*x,n.ny=-c*x),u.dist=y-o,u.stamp=n.stamp,u.posOnly=!1}if(u!=null){let x=u.inner,y=t.localCOMx+(2*l-1)*t.halfLength;return s?(x.lr1x=y,x.lr1y=t.localCOMy,x.lr2x=e.localCOMx,x.lr2y=e.localCOMy):(x.lr1x=e.localCOMx,x.lr1y=e.localCOMy,x.lr2x=y,x.lr2y=t.localCOMy),n.radius=o,n.ptype=2,!0}return!1}static _capsuleCapsuleContact(e,t,n,s,i){let[l,r]=be._closestTT(e.spine1x,e.spine1y,e.spine2x,e.spine2y,t.spine1x,t.spine1y,t.spine2x,t.spine2y),a=e.spine1x+l*(e.spine2x-e.spine1x),o=e.spine1y+l*(e.spine2y-e.spine1y),p=t.spine1x+r*(t.spine2x-t.spine1x),c=t.spine1y+r*(t.spine2y-t.spine1y),h=e.radius+t.radius,u=p-a,x=c-o,y=u*u+x*x;if(y>h*h)return!1;let d;if(y<i.Config.epsilon*i.Config.epsilon){let _=(a+p)*.5,f=(o+c)*.5;d=be._getOrCreateContact(n,0,n.stamp),d.px=_,d.py=f,n.nx=1,n.ny=0,d.dist=-h,d.stamp=n.stamp,d.posOnly=!1}else{let _=1/Math.sqrt(y),f=_<i.Config.epsilon?1e100:1/_,z=.5+(e.radius-.5*h)*_,P=a+u*z,k=o+x*z;d=be._getOrCreateContact(n,0,n.stamp),d.px=P,d.py=k,s?(n.nx=-u*_,n.ny=-x*_):(n.nx=u*_,n.ny=x*_),d.dist=f-h,d.stamp=n.stamp,d.posOnly=!1}if(d!=null){let _=d.inner,f=e.localCOMx+(2*l-1)*e.halfLength,z=t.localCOMx+(2*r-1)*t.halfLength;return s?(_.lr1x=z,_.lr1y=t.localCOMy,_.lr2x=f,_.lr2y=e.localCOMy):(_.lr1x=f,_.lr1y=e.localCOMy,_.lr2x=z,_.lr2y=t.localCOMy),n.radius=h,n.ptype=2,!0}return!1}static _polyCapsuleContact(e,t,n,s,i){let l=-1e100,r=null,a=null,o=0,p=!0,c=e.gverts.next,h=e.edges.head;for(;h!=null;){let f=h.elt,z=f.gnormx*t.spine1x+f.gnormy*t.spine1y,P=f.gnormx*t.spine2x+f.gnormy*t.spine2y,m=(z<P?z:P)-f.gprojection-t.radius;if(m>0){p=!1;break}m>l&&(l=m,r=f,a=c,o=z<P?0:1),c=c.next,h=h.next}if(!p)return!1;let u=t.spine1x+o*(t.spine2x-t.spine1x),x=t.spine1y+o*(t.spine2y-t.spine1y),y=a,d=a.next==null?e.gverts.next:a.next,_=x*r.gnormx-u*r.gnormy;if(_<=y.y*r.gnormx-y.x*r.gnormy){let f=y.x-u,z=y.y-x,P=f*f+z*z;if(P>t.radius*t.radius)return!1;if(P<i.Config.epsilon*i.Config.epsilon){let N=be._getOrCreateContact(n,0,n.stamp);N.px=u,N.py=x,n.nx=s?-r.gnormx:r.gnormx,n.ny=s?-r.gnormy:r.gnormy,N.dist=-t.radius,N.stamp=n.stamp,N.posOnly=!1;let Z=N.inner,S=t.localCOMx+(2*o-1)*t.halfLength;return s?(Z.lr1x=S,Z.lr1y=t.localCOMy,Z.lr2x=0,Z.lr2y=0):(Z.lr1x=0,Z.lr1y=0,Z.lr2x=S,Z.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,!0}let k=1/Math.sqrt(P),m=1/k,b=f*k,C=z*k,v=u+b*t.radius,w=x+C*t.radius,O=be._getOrCreateContact(n,0,n.stamp);O.px=v,O.py=w,n.nx=s?-b:b,n.ny=s?-C:C,O.dist=m-t.radius,O.stamp=n.stamp,O.posOnly=!1;let E=O.inner,M=t.localCOMx+(2*o-1)*t.halfLength;return s?(E.lr1x=M,E.lr1y=t.localCOMy,E.lr2x=0,E.lr2y=0):(E.lr1x=0,E.lr1y=0,E.lr2x=M,E.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,n.__ref_edge1=r,n.__ref_vertex=0,!0}else if(_>=d.y*r.gnormx-d.x*r.gnormy){let f=d.x-u,z=d.y-x,P=f*f+z*z;if(P>t.radius*t.radius)return!1;if(P<i.Config.epsilon*i.Config.epsilon){let N=be._getOrCreateContact(n,0,n.stamp);N.px=u,N.py=x,n.nx=s?-r.gnormx:r.gnormx,n.ny=s?-r.gnormy:r.gnormy,N.dist=-t.radius,N.stamp=n.stamp,N.posOnly=!1;let Z=N.inner,S=t.localCOMx+(2*o-1)*t.halfLength;return s?(Z.lr1x=S,Z.lr1y=t.localCOMy,Z.lr2x=0,Z.lr2y=0):(Z.lr1x=0,Z.lr1y=0,Z.lr2x=S,Z.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,!0}let k=1/Math.sqrt(P),m=1/k,b=f*k,C=z*k,v=u+b*t.radius,w=x+C*t.radius,O=be._getOrCreateContact(n,0,n.stamp);O.px=v,O.py=w,n.nx=s?-b:b,n.ny=s?-C:C,O.dist=m-t.radius,O.stamp=n.stamp,O.posOnly=!1;let E=O.inner,M=t.localCOMx+(2*o-1)*t.halfLength;return s?(E.lr1x=M,E.lr1y=t.localCOMy,E.lr2x=0,E.lr2y=0):(E.lr1x=0,E.lr1y=0,E.lr2x=M,E.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,n.__ref_edge1=r,n.__ref_vertex=0,!0}else{let f=be._getOrCreateContact(n,0,n.stamp);f.px=u+r.gnormx*(l*.5+t.radius),f.py=x+r.gnormy*(l*.5+t.radius),n.nx=s?-r.gnormx:r.gnormx,n.ny=s?-r.gnormy:r.gnormy,f.dist=l,f.stamp=n.stamp,f.posOnly=!1;let z=f.inner,P=t.localCOMx+(2*o-1)*t.halfLength;return s?(z.lr1x=P,z.lr1y=t.localCOMy,z.lr2x=0,z.lr2y=0):(z.lr1x=0,z.lr1y=0,z.lr2x=P,z.lr2y=t.localCOMy),n.radius=t.radius,n.lproj=r.lprojection,n.ptype=1,n.__ref_edge1=r,n.__ref_vertex=0,!0}}static _capsuleTestCollide(e,t){let n=t.capsule;if(e.type==0){let s=be._closestT(n.spine1x,n.spine1y,n.spine2x,n.spine2y,e.circle.worldCOMx,e.circle.worldCOMy),i=n.spine1x+s*(n.spine2x-n.spine1x),l=n.spine1y+s*(n.spine2y-n.spine1y),r=e.circle.radius+n.radius,a=e.circle.worldCOMx-i,o=e.circle.worldCOMy-l;return a*a+o*o<=r*r}else if(e.type==1){let s=e.polygon.edges.head;for(;s!=null;){let a=s.elt,o=a.gnormx*n.spine1x+a.gnormy*n.spine1y,p=a.gnormx*n.spine2x+a.gnormy*n.spine2y;if((o<p?o:p)-a.gprojection-n.radius>0)return!1;s=s.next}let i=n.spine2x-n.spine1x,l=n.spine2y-n.spine1y,r=i*i+l*l;if(r>1e-12){let a=-l,o=i,p=Math.sqrt(r),c=a/p,h=o/p,u=c*n.spine1x+h*n.spine1y,x=1e100,y=-1e100,d=e.polygon.gverts.next;for(;d!=null;){let _=c*d.x+h*d.y;_<x&&(x=_),_>y&&(y=_),d=d.next}if(x>u+n.radius||y<u-n.radius)return!1}return!0}else{let s=e.capsule,[i,l]=be._closestTT(s.spine1x,s.spine1y,s.spine2x,s.spine2y,n.spine1x,n.spine1y,n.spine2x,n.spine2y),r=s.spine1x+i*(s.spine2x-s.spine1x),a=s.spine1y+i*(s.spine2y-s.spine1y),o=n.spine1x+l*(n.spine2x-n.spine1x),p=n.spine1y+l*(n.spine2y-n.spine1y),c=s.radius+n.radius,h=o-r,u=p-a;return h*h+u*u<=c*c}}static _capsuleFlowCollide(e,t,n,s){let i=e.type==2?e.capsule:t.capsule,l=e.type==2?t:e,r=i.area||Math.PI*i.radius*i.radius+4*i.halfLength*i.radius;if(l.type==2){let u=l.type==2?l.capsule:l,[x,y]=be._closestTT(i.spine1x,i.spine1y,i.spine2x,i.spine2y,u.spine1x,u.spine1y,u.spine2x,u.spine2y),d=i.spine1x+x*(i.spine2x-i.spine1x),_=i.spine1y+x*(i.spine2y-i.spine1y),f=u.spine1x+y*(u.spine2x-u.spine1x),z=u.spine1y+y*(u.spine2y-u.spine1y),P=f-d,k=z-_,m=Math.sqrt(P*P+k*k),b=i.radius+u.radius;if(m>=b)return!1;let C=b-m;return n.overlap=C*Math.min(2*i.radius,2*u.radius)*.5,n.buoyx=(d+f)*.5,n.buoyy=(_+z)*.5,!0}if(l.type==0){let u=l.circle||l.circle,x=be._closestT(i.spine1x,i.spine1y,i.spine2x,i.spine2y,u.worldCOMx,u.worldCOMy),y=i.spine1x+x*(i.spine2x-i.spine1x),d=i.spine1y+x*(i.spine2y-i.spine1y),_=u.worldCOMx-y,f=u.worldCOMy-d,z=Math.sqrt(_*_+f*f),P=i.radius+u.radius;if(z>=P)return!1;let k=P-z;return n.overlap=k*Math.min(2*i.radius,2*u.radius)*.5,n.buoyx=(y+u.worldCOMx)*.5,n.buoyy=(d+u.worldCOMy)*.5,!0}let a=l.polygon||l.polygon,o=1e100,p=0,c=0,h=a.edges.head;for(;h!=null;){let u=h.elt,x=u.gnormx*i.spine1x+u.gnormy*i.spine1y,y=u.gnormx*i.spine2x+u.gnormy*i.spine2y,d=x<y?x:y,_=u.gprojection+i.radius-d;if(_<0)return!1;_<o&&(o=_,p=u.gnormx,c=u.gnormy),h=h.next}return n.overlap=o*2*i.radius*.5,n.buoyx=i.worldCOMx,n.buoyy=i.worldCOMy,!0}};be.flowpoly=null,be.flowsegs=null;var Ee=be;var ul=class g{static isinner(e,t,n){let s=e.x-t.x,i=e.y-t.y,l=n.x-t.x;return(n.y-t.y)*s-l*i>=0}static optimise(e){let t=e.vertices,n=e.vertices;if(t!=null){let l=t;for(;l.sort(),l=l.next,l!=n;);}let s=e.vertices,i=e.vertices;if(s!=null){let l=s;for(;;){let r=l,a=r.prev,o=null,p=r.diagonals.head;for(;p!=null;){let c=p.elt,h=p.next==null?r.next:p.next.elt;if(!g.isinner(h,r,a)){o=p,a=c,p=p.next;continue}let u=!0,x=c,y=x.prev,d=null,_=x.diagonals.head;for(;_!=null;){let f=_.elt;if(f==r){let z=_.next==null?x.next:_.next.elt;u=g.isinner(z,x,y);break}y=f,d=_,_=_.next}if(u){p=r.diagonals.erase(o),x.diagonals.erase(d);continue}a=c,o=p,p=p.next}if(l=l.next,l==i)break}}}};var nt=class nt{constructor(){this.normal=null;this.shape=null;this.convex=null;this.position=null;this.ray=null;this.inner=!1;this.next=null;this.toiDistance=0}static getRay(e,t,n,s){let i;nt.rayPool==null?(nt.internal=!0,i=nt._createRayResult(),i.zpp_inner=new nt,i.zpp_inner.ray=i,nt.internal=!1):(i=nt.rayPool.ray,nt.rayPool=nt.rayPool.next,i.zpp_inner.next=null);let l=i.zpp_inner;return l.normal=e,e.zpp_inner._immutable=!0,l.toiDistance=t,l.inner=n,l.shape=s,i}static getConvex(e,t,n,s){let i;nt.convexPool==null?(nt.internal=!0,i=nt._createConvexResult(),i.zpp_inner=new nt,i.zpp_inner.convex=i,nt.internal=!1):(i=nt.convexPool.convex,nt.convexPool=nt.convexPool.next,i.zpp_inner.next=null);let l=i.zpp_inner;return l.normal=e,l.position=t,e.zpp_inner._immutable=!0,t.zpp_inner._immutable=!0,l.toiDistance=n,l.shape=s,i}disposed(){if(this.next!=null)throw new Error("Error: This object has been disposed of and cannot be used")}free(){nt._disposeVec2(this.normal),this.position!=null&&nt._disposeVec2(this.position),this.shape=null,this.toiDistance=0,this.convex!=null?(this.next=nt.convexPool,nt.convexPool=this):(this.next=nt.rayPool,nt.rayPool=this)}static _disposeVec2(e){if(e.zpp_inner._immutable=!1,e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let t=e.zpp_inner;if(t._immutable)throw new Error("Error: Vec2 is immutable");if(t._isimmutable!=null&&t._isimmutable(),t._inuse)throw new Error("Error: This Vec2 is not disposable");let n=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null,e.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=e:ye.poolVec2=e,ye.nextVec2=e,e.zpp_disp=!0,n.outer!=null&&(n.outer.zpp_inner=null,n.outer=null),n._isimmutable=null,n._validate=null,n._invalidate=null,n.next=le.zpp_pool,le.zpp_pool=n}};nt.rayPool=null,nt.convexPool=null,nt.internal=!1,nt._createRayResult=null,nt._createConvexResult=null;var mn=nt;var Di=class Di{constructor(){this.prev=null;this.next=null;this.posx=0;this.posy=0;this.vert=null;this.value=0;this.positive=!1;this.parent=null;this.rank=0;this.used=!1}static path(e){let t;return Di.zpp_pool==null?t=new Di:(t=Di.zpp_pool,Di.zpp_pool=t.next,t.next=null),t.vert=e,t.parent=t,t.rank=0,t.used=!1,t}alloc(){}free(){this.vert=null,this.parent=null}};Di.zpp_pool=null;var Qe=Di;var Fi=class Fi{constructor(){this.next=null;this.time=0;this.virtualint=!1;this.vertex=!1;this.path0=null;this.end=null;this.start=null;this.path1=null}static get(e,t,n,s,i,l=!1,r=!1){let a;return Fi.zpp_pool==null?a=new Fi:(a=Fi.zpp_pool,Fi.zpp_pool=a.next,a.next=null),a.virtualint=l,a.end=t,a.start=n,a.path0=s,a.path1=i,a.time=e,a.vertex=r,a}alloc(){}free(){this.end=this.start=null,this.path0=this.path1=null}};Fi.zpp_pool=null;var lt=Fi;var oi=class oi{constructor(){this.x=0;this.y=0;this.prev=null;this.next=null;this.wrap=null;this.forced=!1}static get(e,t){let n;return oi.zpp_pool==null?n=new oi:(n=oi.zpp_pool,oi.zpp_pool=n.next,n.next=null),n.forced=!1,n.x=e,n.y=t,n}alloc(){this.forced=!1}free(){if(this.wrap!=null){this.wrap.zpp_inner._inuse=!1;let e=this.wrap;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let t=e.zpp_inner;if(t._immutable)throw new Error("Error: Vec2 is immutable");if(t._isimmutable!=null&&t._isimmutable(),e.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let n=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null;let s=e;s.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=s:ye.poolVec2=s,ye.nextVec2=s,s.zpp_disp=!0;let i=n;i.outer!=null&&(i.outer.zpp_inner=null,i.outer=null),i._isimmutable=null,i._validate=null,i._invalidate=null,i.next=le.zpp_pool,le.zpp_pool=i,this.wrap=null}this.prev=this.next=null}wrapper(){if(this.wrap==null){let e=this.x,t=this.y;if(t==null&&(t=0),e==null&&(e=0),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let n;if(ye.poolVec2==null?n=oi._createVec2Fn():(n=ye.poolVec2,ye.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n===ye.nextVec2&&(ye.nextVec2=null)),n.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=e,s.y=t,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");if(s._isimmutable!=null&&s._isimmutable(),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x===e){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y===t}else i=!1;if(!i){n.zpp_inner.x=e,n.zpp_inner.y=t;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.wrap=n,this.wrap.zpp_inner._inuse=!0,this.wrap.zpp_inner._invalidate=s=>this.modwrap(s),this.wrap.zpp_inner._validate=()=>this.getwrap()}return this.wrap}modwrap(e){this.x=e.x,this.y=e.y}getwrap(){this.wrap.zpp_inner.x=this.x,this.wrap.zpp_inner.y=this.y}};oi.zpp_pool=null,oi._createVec2Fn=null;var ge=oi;var et=class et{static run(e,t,n,s,i,l){let r=me(),a=r.__zpp;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=t.zpp_inner;o._validate!=null&&o._validate();let p=t.zpp_inner.x;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let c=t.zpp_inner;c._validate!=null&&c._validate();let h=t.zpp_inner.y;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=n.zpp_inner;u._validate!=null&&u._validate();let x=n.zpp_inner.x-p;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let y=n.zpp_inner;y._validate!=null&&y._validate();let d=n.zpp_inner.y-h,_=s?0:-1/0,f=i?1:1/0,z=-(h*x-p*d),P=null,k=!1,m=e;for(;;){let T;Qe.zpp_pool==null?T=new Qe:(T=Qe.zpp_pool,Qe.zpp_pool=T.next,T.next=null),T.vert=m,T.posx=m.x,T.posy=m.y,T.value=T.posy*x-T.posx*d+z,T.positive=T.value>0,T.value==0&&(k=!0);let V=T;if(P==null?V.prev=V.next=V:(V.prev=P,V.next=P.next,P.next.prev=V,P.next=V),P=V,m=m.next,m==e)break}if(k){let T=null,V=P,K=P;if(V!=null){let U=V;for(;;){let H=U;if(H.value!=0){T=H;break}if(U=U.next,U==K)break}}let $,Y;$=x,Y=d;let X=$*$+Y*Y,J=1/Math.sqrt(X);$*=J,Y*=J;let L=$;$=-Y,Y=L;let D=null,I=T;for(;;){if(I.value!=0&&(D==null||I==D.next)){if(D=I,I=I.next,I==T)break;continue}let U=D.value*I.value;if(U==0){if(I=I.next,I==T)break;continue}let H=D.next,W;if(U>0)W=D.positive;else{let se=H.next,ie,ae;ie=H.posx+se.posx,ae=H.posy+se.posy;let oe=.5;ie*=oe,ae*=oe;let he=ie+$*1e-8,pe=ae+Y*1e-8,ce=!1,te=e,ue=e;if(te!=null){let xe=te;for(;;){let _e=xe,ve=_e.prev;if((_e.y<pe&&ve.y>=pe||ve.y<pe&&_e.y>=pe)&&(_e.x<=he||ve.x<=he)&&_e.x+(pe-_e.y)/(ve.y-_e.y)*(ve.x-_e.x)<he&&(ce=!ce),xe=xe.next,xe==ue)break}}W=ce}let ne=H,re=I;if(ne!=null){let se=ne;for(;;){let ie=se;if(ie.positive=W,se=se.next,se==re)break}}if(D=I,I=I.next,I==T)break}for(;!(I.value!=0&&(D==null||I==D.next));){let U=D.value*I.value;if(U==0)break;let H=D.next,W;if(U>0)W=D.positive;else{let se=H.next,ie,ae;ie=H.posx+se.posx,ae=H.posy+se.posy;let oe=.5;ie*=oe,ae*=oe;let he=ie+$*1e-8,pe=ae+Y*1e-8,ce=!1,te=e,ue=e;if(te!=null){let xe=te;for(;;){let _e=xe,ve=_e.prev;if((_e.y<pe&&ve.y>=pe||ve.y<pe&&_e.y>=pe)&&(_e.x<=he||ve.x<=he)&&_e.x+(pe-_e.y)/(ve.y-_e.y)*(ve.x-_e.x)<he&&(ce=!ce),xe=xe.next,xe==ue)break}}W=ce}let ne=H,re=I;if(ne!=null){let se=ne;for(;;){let ie=se;if(ie.positive=W,se=se.next,se==re)break}}break}}et.ints==null&&(et.ints=new a.util.ZNPList_ZPP_CutInt),et.paths==null&&(et.paths=new a.util.ZNPList_ZPP_CutVert);let b=null,C=P.posx,v=P.posy,w;ge.zpp_pool==null?w=new ge:(w=ge.zpp_pool,ge.zpp_pool=w.next,w.next=null),w.forced=!1,w.x=C,w.y=v;let O=w;O.prev=O.next=O,b=O;let E=b,M;Qe.zpp_pool==null?M=new Qe:(M=Qe.zpp_pool,Qe.zpp_pool=M.next,M.next=null),M.vert=b,M.parent=M,M.rank=0,M.used=!1;let N=M;et.paths.add(N);let Z=P;for(;;){let T=Z.next,V=T.posx,K=T.posy,$;ge.zpp_pool==null?$=new ge:($=ge.zpp_pool,ge.zpp_pool=$.next,$.next=null),$.forced=!1,$.x=V,$.y=K;let Y=$;if(Z.positive==T.positive){let X=Y;b==null?(X.prev=X.next=X,b=X):(X.next=b,X.prev=b.prev,b.prev.next=X,b.prev=X)}else{let X=T.posx-Z.posx,ee=T.posy-Z.posy,J=d*X-x*ee;J=1/J;let L=p-Z.posx,D=h-Z.posy,I=(ee*L-X*D)*J;if(I<_||I>f){let U=et.ints,H=!0;H==null&&(H=!1);let W;lt.zpp_pool==null?W=new lt:(W=lt.zpp_pool,lt.zpp_pool=W.next,W.next=null),W.virtualint=H,W.end=null,W.start=null,W.path0=null,W.path1=null,W.time=I,W.vertex=!1,U.add(W);let ne=Y;b==null?(ne.prev=ne.next=ne,b=ne):(ne.next=b,ne.prev=b.prev,b.prev.next=ne,b.prev=ne)}else if(Z.value==0){let U=b.prev;b=null;let H=U.x,W=U.y,ne;ge.zpp_pool==null?ne=new ge:(ne=ge.zpp_pool,ge.zpp_pool=ne.next,ne.next=null),ne.forced=!1,ne.x=H,ne.y=W;let re=ne;re.prev=re.next=re,b=re;let se=Y;b==null?(se.prev=se.next=se,b=se):(se.next=b,se.prev=b.prev,b.prev.next=se,b.prev=se);let ie=et.paths.head.elt,ae=et.paths,oe;Qe.zpp_pool==null?oe=new Qe:(oe=Qe.zpp_pool,Qe.zpp_pool=oe.next,oe.next=null),oe.vert=b,oe.parent=oe,oe.rank=0,oe.used=!1,ae.add(oe);let he=et.paths.head.elt,pe=et.ints,ce=!0;ce==null&&(ce=!1);let te;lt.zpp_pool==null?te=new lt:(te=lt.zpp_pool,lt.zpp_pool=te.next,te.next=null),te.virtualint=ce,te.end=U,te.start=b,te.path0=ie,te.path1=he,te.time=I,te.vertex=!1,pe.add(te)}else if(T.value==0){let U=Y;b==null?(U.prev=U.next=U,b=U):(U.next=b,U.prev=b.prev,b.prev.next=U,b.prev=U);let H=b.prev;b=null;let W=T.posx,ne=T.posy,re;ge.zpp_pool==null?re=new ge:(re=ge.zpp_pool,ge.zpp_pool=re.next,re.next=null),re.forced=!1,re.x=W,re.y=ne;let se=re;se.prev=se.next=se,b=se;let ie=et.paths.head.elt,ae=et.paths,oe;Qe.zpp_pool==null?oe=new Qe:(oe=Qe.zpp_pool,Qe.zpp_pool=oe.next,oe.next=null),oe.vert=b,oe.parent=oe,oe.rank=0,oe.used=!1,ae.add(oe);let he=et.paths.head.elt,pe=et.ints,ce=!0;ce==null&&(ce=!1);let te;lt.zpp_pool==null?te=new lt:(te=lt.zpp_pool,lt.zpp_pool=te.next,te.next=null),te.virtualint=ce,te.end=H,te.start=b,te.path0=ie,te.path1=he,te.time=I,te.vertex=!1,pe.add(te)}else{let U=(d*L-x*D)*J,H,W;H=Z.posx,W=Z.posy;let ne=U;H+=X*ne,W+=ee*ne;let re;ge.zpp_pool==null?re=new ge:(re=ge.zpp_pool,ge.zpp_pool=re.next,re.next=null),re.forced=!1,re.x=H,re.y=W;let se=re;b==null?(se.prev=se.next=se,b=se):(se.next=b,se.prev=b.prev,b.prev.next=se,b.prev=se);let ie=b.prev;b=null;let ae;ge.zpp_pool==null?ae=new ge:(ae=ge.zpp_pool,ge.zpp_pool=ae.next,ae.next=null),ae.forced=!1,ae.x=H,ae.y=W;let oe=ae;oe.prev=oe.next=oe,b=oe;let he=Y;b==null?(he.prev=he.next=he,b=he):(he.next=b,he.prev=b.prev,b.prev.next=he,b.prev=he);let pe=et.paths.head.elt,ce=et.paths,te;Qe.zpp_pool==null?te=new Qe:(te=Qe.zpp_pool,Qe.zpp_pool=te.next,te.next=null),te.vert=b,te.parent=te,te.rank=0,te.used=!1,ce.add(te);let ue=et.paths.head.elt,xe=et.ints,_e=!1;_e==null&&(_e=!1);let ve;lt.zpp_pool==null?ve=new lt:(ve=lt.zpp_pool,lt.zpp_pool=ve.next,ve.next=null),ve.virtualint=_e,ve.end=ie,ve.start=b,ve.path0=pe,ve.path1=ue,ve.time=I,ve.vertex=!1,xe.add(ve)}}if(Z=Z.next,Z==P)break}let S=b.prev;S.next.prev=E.prev,E.prev.next=S.next,S.next=E,E.prev=S;let A=et.paths.head.elt,F;if(N==N.parent)F=N;else{let T=N,V=null;for(;T!=T.parent;){let K=T.parent;T.parent=V,V=T,T=K}for(;V!=null;){let K=V.parent;V.parent=T,V=K}F=T}let B;if(A==A.parent)B=A;else{let T=A,V=null;for(;T!=T.parent;){let K=T.parent;T.parent=V,V=T,T=K}for(;V!=null;){let K=V.parent;V.parent=T,V=K}B=T}F!=B&&(F.rank<B.rank?F.parent=B:F.rank>B.rank?B.parent=F:(B.parent=F,F.rank++));let G=et.ints;if(G.head!=null&&G.head.next!=null){let T=G.head,V,K,$,Y,X=1,ee,J,L;for(;;){for(ee=0,K=T,T=null,V=T;K!=null;){for(++ee,$=K,J=0,L=X;$!=null&&J<X;)++J,$=$.next;for(;J>0||L>0&&$!=null;)J==0?(Y=$,$=$.next,--L):L==0||$==null||K.elt.time<$.elt.time?(Y=K,K=K.next,--J):(Y=$,$=$.next,--L),V!=null?V.next=Y:T=Y,V=Y;K=$}if(V.next=null,X<<=1,!(ee>1))break}G.head=T,G.modified=!0,G.pushmod=!0}for(;et.ints.head!=null;){let T=et.ints.pop_unsafe(),V=et.ints.pop_unsafe();if(!T.virtualint&&!V.virtualint){T.end.next.prev=V.start.prev,V.start.prev.next=T.end.next,T.end.next=V.start,V.start.prev=T.end,V.end.next.prev=T.start.prev,T.start.prev.next=V.end.next,V.end.next=T.start,T.start.prev=V.end;let Y;if(T.path0==T.path0.parent)Y=T.path0;else{let L=T.path0,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}Y=L}let X;if(V.path1==V.path1.parent)X=V.path1;else{let L=V.path1,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}X=L}Y!=X&&(Y.rank<X.rank?Y.parent=X:Y.rank>X.rank?X.parent=Y:(X.parent=Y,Y.rank++));let ee;if(T.path1==T.path1.parent)ee=T.path1;else{let L=T.path1,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}ee=L}let J;if(V.path0==V.path0.parent)J=V.path0;else{let L=V.path0,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}J=L}ee!=J&&(ee.rank<J.rank?ee.parent=J:ee.rank>J.rank?J.parent=ee:(J.parent=ee,ee.rank++))}else if(T.virtualint&&!V.virtualint){let Y;if(V.end!=null&&V.end.prev==V.end){V.end.next=V.end.prev=null;let J=V.end;if(J.wrap!=null){J.wrap.zpp_inner._inuse=!1;let L=J.wrap;if(L!=null&&L.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=L.zpp_inner;if(D._immutable)throw new Error("Error: Vec2 is immutable");if(D._isimmutable!=null&&D._isimmutable(),L.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let I=L.zpp_inner;L.zpp_inner.outer=null,L.zpp_inner=null;let U=L;U.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=U:ye.poolVec2=U,ye.nextVec2=U,U.zpp_disp=!0;let H=I;H.outer!=null&&(H.outer.zpp_inner=null,H.outer=null),H._isimmutable=null,H._validate=null,H._invalidate=null,H.next=le.zpp_pool,le.zpp_pool=H,J.wrap=null}J.prev=J.next=null,J.next=ge.zpp_pool,ge.zpp_pool=J,Y=null}else{let J=V.end.prev;V.end.prev.next=V.end.next,V.end.next.prev=V.end.prev,V.end.next=V.end.prev=null;let L=V.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,V.end=null,Y=J}if(V.end=Y,!V.vertex)if(V.end!=V.path0.vert){V.start.x=V.end.x,V.start.y=V.end.y;let J;if(V.end!=null&&V.end.prev==V.end){V.end.next=V.end.prev=null;let L=V.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,J=null}else{let L=V.end.prev;V.end.prev.next=V.end.next,V.end.next.prev=V.end.prev,V.end.next=V.end.prev=null;let D=V.end;if(D.wrap!=null){D.wrap.zpp_inner._inuse=!1;let I=D.wrap;if(I!=null&&I.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let U=I.zpp_inner;if(U._immutable)throw new Error("Error: Vec2 is immutable");if(U._isimmutable!=null&&U._isimmutable(),I.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let H=I.zpp_inner;I.zpp_inner.outer=null,I.zpp_inner=null;let W=I;W.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=W:ye.poolVec2=W,ye.nextVec2=W,W.zpp_disp=!0;let ne=H;ne.outer!=null&&(ne.outer.zpp_inner=null,ne.outer=null),ne._isimmutable=null,ne._validate=null,ne._invalidate=null,ne.next=le.zpp_pool,le.zpp_pool=ne,D.wrap=null}D.prev=D.next=null,D.next=ge.zpp_pool,ge.zpp_pool=D,V.end=null,J=L}V.end=J}else{let J=V.start.next;if(V.start.x=J.x,V.start.y=J.y,J!=null&&J.prev==J){J.next=J.prev=null;let L=J;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}else{J.prev.next=J.next,J.next.prev=J.prev,J.next=J.prev=null;let L=J;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}}V.end.next.prev=V.start.prev,V.start.prev.next=V.end.next,V.end.next=V.start,V.start.prev=V.end;let X;if(V.path0==V.path0.parent)X=V.path0;else{let J=V.path0,L=null;for(;J!=J.parent;){let D=J.parent;J.parent=L,L=J,J=D}for(;L!=null;){let D=L.parent;L.parent=J,L=D}X=J}let ee;if(V.path1==V.path1.parent)ee=V.path1;else{let J=V.path1,L=null;for(;J!=J.parent;){let D=J.parent;J.parent=L,L=J,J=D}for(;L!=null;){let D=L.parent;L.parent=J,L=D}ee=J}X!=ee&&(X.rank<ee.rank?X.parent=ee:X.rank>ee.rank?ee.parent=X:(ee.parent=X,X.rank++))}else if(V.virtualint&&!T.virtualint){let Y;if(T.end!=null&&T.end.prev==T.end){T.end.next=T.end.prev=null;let J=T.end;if(J.wrap!=null){J.wrap.zpp_inner._inuse=!1;let L=J.wrap;if(L!=null&&L.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=L.zpp_inner;if(D._immutable)throw new Error("Error: Vec2 is immutable");if(D._isimmutable!=null&&D._isimmutable(),L.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let I=L.zpp_inner;L.zpp_inner.outer=null,L.zpp_inner=null;let U=L;U.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=U:ye.poolVec2=U,ye.nextVec2=U,U.zpp_disp=!0;let H=I;H.outer!=null&&(H.outer.zpp_inner=null,H.outer=null),H._isimmutable=null,H._validate=null,H._invalidate=null,H.next=le.zpp_pool,le.zpp_pool=H,J.wrap=null}J.prev=J.next=null,J.next=ge.zpp_pool,ge.zpp_pool=J,Y=null}else{let J=T.end.prev;T.end.prev.next=T.end.next,T.end.next.prev=T.end.prev,T.end.next=T.end.prev=null;let L=T.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,T.end=null,Y=J}if(T.end=Y,!T.vertex)if(T.end!=T.path0.vert){T.start.x=T.end.x,T.start.y=T.end.y;let J;if(T.end!=null&&T.end.prev==T.end){T.end.next=T.end.prev=null;let L=T.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,J=null}else{let L=T.end.prev;T.end.prev.next=T.end.next,T.end.next.prev=T.end.prev,T.end.next=T.end.prev=null;let D=T.end;if(D.wrap!=null){D.wrap.zpp_inner._inuse=!1;let I=D.wrap;if(I!=null&&I.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let U=I.zpp_inner;if(U._immutable)throw new Error("Error: Vec2 is immutable");if(U._isimmutable!=null&&U._isimmutable(),I.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let H=I.zpp_inner;I.zpp_inner.outer=null,I.zpp_inner=null;let W=I;W.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=W:ye.poolVec2=W,ye.nextVec2=W,W.zpp_disp=!0;let ne=H;ne.outer!=null&&(ne.outer.zpp_inner=null,ne.outer=null),ne._isimmutable=null,ne._validate=null,ne._invalidate=null,ne.next=le.zpp_pool,le.zpp_pool=ne,D.wrap=null}D.prev=D.next=null,D.next=ge.zpp_pool,ge.zpp_pool=D,T.end=null,J=L}T.end=J}else{let J=T.start.next;if(T.start.x=J.x,T.start.y=J.y,J!=null&&J.prev==J){J.next=J.prev=null;let L=J;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}else{J.prev.next=J.next,J.next.prev=J.prev,J.next=J.prev=null;let L=J;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let W=U;W.outer!=null&&(W.outer.zpp_inner=null,W.outer=null),W._isimmutable=null,W._validate=null,W._invalidate=null,W.next=le.zpp_pool,le.zpp_pool=W,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}}T.end.next.prev=T.start.prev,T.start.prev.next=T.end.next,T.end.next=T.start,T.start.prev=T.end;let X;if(T.path0==T.path0.parent)X=T.path0;else{let J=T.path0,L=null;for(;J!=J.parent;){let D=J.parent;J.parent=L,L=J,J=D}for(;L!=null;){let D=L.parent;L.parent=J,L=D}X=J}let ee;if(T.path1==T.path1.parent)ee=T.path1;else{let J=T.path1,L=null;for(;J!=J.parent;){let D=J.parent;J.parent=L,L=J,J=D}for(;L!=null;){let D=L.parent;L.parent=J,L=D}ee=J}X!=ee&&(X.rank<ee.rank?X.parent=ee:X.rank>ee.rank?ee.parent=X:(ee.parent=X,X.rank++))}let K=T;K.end=K.start=null,K.path0=K.path1=null,K.next=lt.zpp_pool,lt.zpp_pool=K;let $=V;$.end=$.start=null,$.path0=$.path1=null,$.next=lt.zpp_pool,lt.zpp_pool=$}let q=l??new r.geom.GeomPolyList,R=et.paths.head;for(;R!=null;){let T=R.elt,V;if(T==T.parent)V=T;else{let Y=T,X=null;for(;Y!=Y.parent;){let ee=Y.parent;Y.parent=X,X=Y,Y=ee}for(;X!=null;){let ee=X.parent;X.parent=Y,X=ee}V=Y}if(V.used){R=R.next;continue}V.used=!0;let K=V.vert,$=!0;for(;V.vert!=null&&($||K!=V.vert);)if($=!1,K.x==K.next.x&&K.y==K.next.y)if(K==V.vert&&(V.vert=K.next==K?null:K.next,$=!0),K!=null&&K.prev==K)K.next=K.prev=null,K=null;else{let Y=K.next;K.prev.next=K.next,K.next.prev=K.prev,K.next=K.prev=null,K=Y}else K=K.next;if(V.vert!=null){let Y=r.geom.GeomPoly.get();Y.zpp_inner.vertices=V.vert,q.zpp_inner.reverse_flag?q.push(Y):q.unshift(Y)}R=R.next}for(;et.paths.head!=null;){let V=et.paths.pop_unsafe();V.vert=null,V.parent=null,V.next=Qe.zpp_pool,Qe.zpp_pool=V}for(;P!=null;)if(P!=null&&P.prev==P){P.next=P.prev=null;let T=P;T.vert=null,T.parent=null,T.next=Qe.zpp_pool,Qe.zpp_pool=T,P=null}else{let T=P.next;P.prev.next=P.next,P.next.prev=P.prev,P.next=P.prev=null;let V=P;V.vert=null,V.parent=null,V.next=Qe.zpp_pool,Qe.zpp_pool=V,P=T}return q}};et.ints=null,et.paths=null;var xl=et;var vs=class g{static validateShape(e){if(e.type==1){let t=e.polygon;if(t.zip_gaxi&&t.body!=null){t.zip_gaxi=!1,t.validate_laxi();let n=t.body;if(n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let o=t.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=t.lverts.next,c=t.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=t.body.posx+(t.body.axisy*u.x-t.body.axisx*u.y),h.y=t.body.posy+(u.x*t.body.axisx+u.y*t.body.axisy),c=c.next}}let s=t.edges.head,i=t.gverts.next,l=i;for(i=i.next;i!=null;){let o=i,p=s.elt;s=s.next,p.gp0=l,p.gp1=o,p.gnormx=t.body.axisy*p.lnormx-t.body.axisx*p.lnormy,p.gnormy=p.lnormx*t.body.axisx+p.lnormy*t.body.axisy,p.gprojection=t.body.posx*p.gnormx+t.body.posy*p.gnormy+p.lprojection,p.wrap_gnorm!=null&&(p.wrap_gnorm.zpp_inner.x=p.gnormx,p.wrap_gnorm.zpp_inner.y=p.gnormy),p.tp0=p.gp0.y*p.gnormx-p.gp0.x*p.gnormy,p.tp1=p.gp1.y*p.gnormx-p.gp1.x*p.gnormy,l=o,i=i.next}let r=t.gverts.next,a=s.elt;a.gp0=l,a.gp1=r,a.gnormx=t.body.axisy*a.lnormx-t.body.axisx*a.lnormy,a.gnormy=a.lnormx*t.body.axisx+a.lnormy*t.body.axisy,a.gprojection=t.body.posx*a.gnormx+t.body.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy}}if(e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let t=e.circle;g._validateWorldCOM(t);let n=t.radius,s=t.radius;t.aabb.minx=t.worldCOMx-n,t.aabb.miny=t.worldCOMy-s,t.aabb.maxx=t.worldCOMx+n,t.aabb.maxy=t.worldCOMy+s}else if(e.type==2)e.capsule.__validate_aabb();else{let t=e.polygon;if(t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot));let l=t.lverts.next,r=t.gverts.next;for(;r!=null;){let a=r,o=l;l=l.next,a.x=t.body.posx+(t.body.axisy*o.x-t.body.axisx*o.y),a.y=t.body.posy+(o.x*t.body.axisx+o.y*t.body.axisy),r=r.next}}if(t.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let n=t.gverts.next;t.aabb.minx=n.x,t.aabb.miny=n.y,t.aabb.maxx=n.x,t.aabb.maxy=n.y;let s=t.gverts.next.next;for(;s!=null;){let i=s;i.x<t.aabb.minx&&(t.aabb.minx=i.x),i.x>t.aabb.maxx&&(t.aabb.maxx=i.x),i.y<t.aabb.miny&&(t.aabb.miny=i.y),i.y>t.aabb.maxy&&(t.aabb.maxy=i.y),s=s.next}}if(e.zip_worldCOM&&e.body!=null){e.zip_worldCOM=!1,e.zip_localCOM&&(e.zip_localCOM=!1,e.type==1&&g._computePolygonLocalCOM(e.polygon),e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy));let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}static _validateWorldCOM(e){if(e.zip_worldCOM&&e.body!=null){e.zip_worldCOM=!1,e.zip_localCOM&&(e.zip_localCOM=!1,e.type==1&&g._computePolygonLocalCOM(e.polygon),e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy));let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}static _computePolygonLocalCOM(e){if(e.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(e.lverts.next.next==null)e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y;else if(e.lverts.next.next.next==null){e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y;let t=1;e.localCOMx+=e.lverts.next.next.x*t,e.localCOMy+=e.lverts.next.next.y*t;let n=.5;e.localCOMx*=n,e.localCOMy*=n}else{e.localCOMx=0,e.localCOMy=0;let t=0,n=e.lverts.next,s=n;n=n.next;let i=n;for(n=n.next;n!=null;){let c=n;t+=i.x*(c.y-s.y);let h=c.y*i.x-c.x*i.y;e.localCOMx+=(i.x+c.x)*h,e.localCOMy+=(i.y+c.y)*h,s=i,i=c,n=n.next}n=e.lverts.next;let l=n;t+=i.x*(l.y-s.y);let r=l.y*i.x-l.x*i.y;e.localCOMx+=(i.x+l.x)*r,e.localCOMy+=(i.y+l.y)*r,s=i,i=l,n=n.next;let a=n;t+=i.x*(a.y-s.y);let o=a.y*i.x-a.x*i.y;e.localCOMx+=(i.x+a.x)*o,e.localCOMy+=(i.y+a.y)*o,t=1/(3*t);let p=t;e.localCOMx*=p,e.localCOMy*=p}}};var dl=class{constructor(e=null){this.outer=null;this.vertices=null;this.outer=e}};var In=class{constructor(){this.rank=0;this.out=!1;this.next=null;this.parent=this}free(){this.parent=this}alloc(){this.out=!1,this.rank=0}};In.zpp_pool=null;var jn=class{constructor(){this.p1=null;this.key1=0;this.okey1=0;this.p2=null;this.key2=0;this.okey2=0;this.pr=null;this.keyr=0;this.okeyr=0;this.pd=null;this.span1=null;this.span2=null;this.spanr=null;this.next=null}free(){this.p1=this.p2=this.pr=this.pd=null,this.span1=this.span2=this.spanr=null}alloc(){}};jn.zpp_pool=null;var Pe=class Pe{static _init(e,t){Pe._zpp=e,Pe._nape=t,Pe.me=new Pe,Pe.look_march=[-1,224,56,216,14,-1,54,214,131,99,-1,91,141,109,181,85]}static _allocVert(e,t){let n;return ge.zpp_pool==null?n=new ge:(n=ge.zpp_pool,ge.zpp_pool=n.next,n.next=null),n.forced=!1,n.x=e,n.y=t,n}static _freeVert(e){if(e.wrap!=null){e.wrap.zpp_inner._inuse=!1;let t=e.wrap;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let n=t.zpp_inner;if(n._immutable)throw new Error("Error: Vec2 is immutable");if(n._isimmutable!=null&&n._isimmutable(),t.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let s=t.zpp_inner;t.zpp_inner.outer=null,t.zpp_inner=null;let i=t;i.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=i:ye.poolVec2=i,ye.nextVec2=i,i.zpp_disp=!0;let l=s;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l._isimmutable=null,l._validate=null,l._invalidate=null,l.next=le.zpp_pool,le.zpp_pool=l,e.wrap=null}e.prev=e.next=null,e.next=ge.zpp_pool,ge.zpp_pool=e}static _allocSpan(){let e;return In.zpp_pool==null?e=new In:(e=In.zpp_pool,In.zpp_pool=e.next,e.next=null),e.out=!1,e.rank=0,e}static _allocPair(){let e;return jn.zpp_pool==null?e=new jn:(e=jn.zpp_pool,jn.zpp_pool=e.next,e.next=null),e}static _freePair(e){e.p1=e.p2=e.pr=e.pd=null,e.span1=e.span2=e.spanr=null,e.next=jn.zpp_pool,jn.zpp_pool=e}static _findRoot(e){if(e==e.parent)return e;let t=e,n=null;for(;t!=t.parent;){let s=t.parent;t.parent=n,n=t,t=s}for(;n!=null;){let s=n.parent;n.parent=t,n=s}return t}static _union(e,t){let n=Pe._findRoot(e),s=Pe._findRoot(t);n!=s&&(n.rank<s.rank?n.parent=s:n.rank>s.rank?s.parent=n:(s.parent=n,n.rank++))}static _pushVert(e,t){return e==null?t.prev=t.next=t:(t.prev=e,t.next=e.next,e.next.prev=t,e.next=t),t}static _isDegenKey(e){return e==1||e==4||e==16||e==64||e==3||e==12||e==48||e==192||e==129||e==6||e==24||e==96||e==5||e==20||e==80||e==65||e==17||e==68}static ISO(e,t,n){return e(t,n)}static run(e,t,n,s,i,l,r,a,o){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate();let c=(s-t)/l.zpp_inner.x,h=c|0;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");p=l.zpp_inner,p._validate!=null&&p._validate();let u=(i-n)/l.zpp_inner.y,x=u|0;c!=h&&++h,u!=x&&++x,a&&(Pe.map==null?Pe.map=new _s(h,x):Pe.map.resize(h,x,null)),Pe.isos==null?Pe.isos=new xs(h+1,x+1):Pe.isos.resize(h+1,x+1,0);for(let _=0;_<x+1;_++){let f;if(_==0)f=n;else if(_<=x){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let z=l.zpp_inner;z._validate!=null&&z._validate(),f=n+l.zpp_inner.y*_}else f=i;for(let z=0;z<h+1;z++){let P;if(z==0)P=t;else if(z<=h){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let b=l.zpp_inner;b._validate!=null&&b._validate(),P=t+l.zpp_inner.x*z}else P=s;let k=Pe.isos,m=e(P,f);k.list[_*k.width+z]=m}}Pe.ints==null?Pe.ints=new ds(h+1,(x<<1)+1):Pe.ints.resize(h+1,(x<<1)+1,null);let y=null;a&&(y=Pe._allocSpan(),y.next=null);let d=n;for(let _=0;_<x;_++){let f=d,z;if(_==x-1)z=i;else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let m=l.zpp_inner;m._validate!=null&&m._validate(),z=n+l.zpp_inner.y*(_+1)}d=z;let P=t,k=null;for(let m=0;m<h;m++){let b=P,C;if(m==h-1)C=s;else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let N=l.zpp_inner;N._validate!=null&&N._validate(),C=t+l.zpp_inner.x*(m+1)}P=C;let v=m==0||!a,w=_==0||!a,O=m==h-1||!a,E=_==x-1||!a,M=Pe.me.marchSquare(e,Pe.isos,Pe.ints,b,f,C,z,m,_,v,w,O,E,r);if(M==null){k=null;continue}if(a){let N=M.p2!=null&&M.okey2!=14?M.p2:M.p1;M.pd=((N==M.p2?M.okey2:M.okey1)&128)==0?N.prev:N.prev.prev;let Z=Pe.map;Z.list[_*Z.width+m]=M;let S;if(k!=null){let B=M.key1,G=B&1|(B&192)>>5,q=0;(G&1)!=0&&++q,(G&2)!=0&&++q,(G&4)!=0&&++q,S=q>=2}else S=!1;S?(Pe.me.combLR(k,M),M.span1=k.spanr):(M.span1=Pe._allocSpan(),M.span1.next=y,y=M.span1),M.p2!=null?(M.span2=Pe._allocSpan(),M.span2.next=y,y=M.span2,M.spanr=M.span2):M.spanr=M.span1;let A=(M.keyr&28)>>2,F=0;(A&1)!=0&&++F,(A&2)!=0&&++F,(A&4)!=0&&++F,F>=2?k=M:k=null}else Pe.me.output(o,M.p1),M.p2!=null&&Pe.me.output(o,M.p2),Pe._freePair(M)}}if(a){for(let _=1;_<x;_++){let f=null;for(let z=0;z<h;z++){let P=Pe.map,k=P.list[_*P.width+z];if(k==null){f=null;continue}let b=(k.p2!=null&&k.okey2==14?k.okey2:k.okey1)&7,C=0;if((b&1)!=0&&++C,(b&2)!=0&&++C,(b&4)!=0&&++C,C<2){f=null;continue}let v=Pe.map,w=v.list[(_-1)*v.width+z];if(w==null){f=null;continue}let E=((w.p2!=null&&w.okey2==56?w.okey2:w.okey1)&112)>>4,M=0;if((E&1)!=0&&++M,(E&2)!=0&&++M,(E&4)!=0&&++M,M<2){f=null;continue}let N=w.p2!=null&&w.okey2==56?w.span2:w.span1,Z=k.p2!=null&&k.okey2==14?k.span2:k.span1,S=Pe._findRoot(N),A=Pe._findRoot(Z);S==A?f!=Z&&Pe.me.combUD_virtual(w,k):(Pe._union(N,Z),Pe.me.combUD(w,k)),f=((Z==k.span2?k.okey2:k.okey1)&4)!=0?Z:null}}for(let _=0;_<x;_++)for(let f=0;f<h;f++){let z=Pe.map,P=z.list[_*z.width+f];if(P==null)continue;let k=Pe._findRoot(P.span1);k.out||(k.out=!0,Pe.me.output(o,P.p1)),P.p2!=null&&(k=Pe._findRoot(P.span2),k.out||(k.out=!0,Pe.me.output(o,P.p2))),Pe._freePair(P),z.list[_*z.width+f]=null}for(;y!=null;){let _=y;y=_.next;let f=_;f.parent=f,f.next=In.zpp_pool,In.zpp_pool=f}}}output(e,t){let n=Pe._nape,s;if(t==null||t.next==t||t.next==t.prev)s=!0;else{let r=0,a=t,o=t;if(a!=null){let c=a;for(;;){let h=c;if(r+=h.x*(h.next.y-h.prev.y),c=c.next,c==o)break}}let p=r*.5;s=p*p<n.Config.epsilon*n.Config.epsilon}if(s){for(;t!=null;)if(t!=null&&t.prev==t)t.next=t.prev=null,t=null;else{let r=t.next;t.prev.next=t.next,t.next.prev=t.prev,t.next=t.prev=null,t=r}return}let i=n.geom.GeomPoly.get();i.zpp_inner.vertices=t;let l=e;l.zpp_inner.reverse_flag?l.push(i):l.unshift(i)}linkright(e,t){let n=t&7;return n==0?e:n==3?e.next.next:e.next}linkleft(e,t){return(t&1)==0?e.prev:e}linkdown(e,t){return(t&128)==0?e.prev:e.prev.prev}linkup(e,t){return e}combLR(e,t){let n=e.pr,s=e.okeyr&7,i=s==0?n:s==3?n.next.next:n.next,l=t.p1,r=(t.okey1&1)==0?l.prev:l,a=i.next,o=r.prev;(e.keyr&4)!=0?(t.pr==t.p1&&(t.pr=i.prev),t.p1=i.prev,i.prev.next=r.next,r.next.prev=i.prev,Pe._freeVert(i)):(i.next=r.next,r.next.prev=i),Pe._freeVert(r),(e.keyr&16)!=0?(t.pd=a.next,a.next.prev=o.prev,o.prev.next=a.next,Pe._freeVert(a)):(a.prev=o.prev,o.prev.next=a),Pe._freeVert(o)}combUD(e,t){let n=e.pd,s=t.p2!=null&&t.key2==14?t.p2:t.p1,i=n.prev,l=s.next;s.next=n.next,n.next.prev=s,Pe._freeVert(n),l.prev=i.prev,i.prev.next=l,i==e.p1&&(e.p1=l),Pe._freeVert(i)}combUD_virtual(e,t){let n=e.pd,s=t.p2!=null&&t.key2==14?t.p2:t.p1,i=n.prev,l=s.next;n.forced=s.forced=i.forced=l.forced=!0}combLeft(e){let t=e&1|(e&192)>>5,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}combRight(e){let t=(e&28)>>2,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}combUp(e){let t=e&7,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}combDown(e){let t=(e&112)>>4,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}comb(e){let t=0;return(e&1)!=0&&++t,(e&2)!=0&&++t,(e&4)!=0&&++t,t>=2}_buildPoly(e,t,n,s,i,l,r,a,o,p,c,h,u,x,y,d,_,f,z){let P=null;for(let k=0;k<8;k++)if((e&1<<k)!=0){let m;if(k==0)m=Pe._allocVert(s,i),(x||y)&&(m.forced=!0);else if(k==2)m=Pe._allocVert(l,i),(d||y)&&(m.forced=!0);else if(k==4)m=Pe._allocVert(l,r),(d||_)&&(m.forced=!0);else if(k==6)m=Pe._allocVert(s,r),(x||_)&&(m.forced=!0);else if(k==1){if(m=n.list[(o<<1)*n.width+a],m==null){let b=this.xlerp(s,l,i,p,c,f,z);m=Pe._allocVert(b,i),n.list[(o<<1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);y&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&1)!=0||m.x==l&&(e&4)!=0)&&(e^=2)}else if(k==5){if(m=n.list[((o<<1)+2)*n.width+a],m==null){let b=this.xlerp(s,l,r,u,h,f,z);m=Pe._allocVert(b,r),n.list[((o<<1)+2)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);_&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&64)!=0||m.x==l&&(e&16)!=0)&&(e^=32)}else if(k==3){if(m=n.list[((o<<1)+1)*n.width+(a+1)],m==null){let b=this.ylerp(i,r,l,c,h,f,z);m=Pe._allocVert(l,b),n.list[((o<<1)+1)*n.width+(a+1)]=m}else m=Pe._allocVert(m.x,m.y);d&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&4)!=0||m.y==r&&(e&16)!=0)&&(e^=8)}else{if(m=n.list[((o<<1)+1)*n.width+a],m==null){let b=this.ylerp(i,r,s,p,u,f,z);m=Pe._allocVert(s,b),n.list[((o<<1)+1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);x&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&1)!=0||m.y==r&&(e&64)!=0)&&(e^=128)}P=Pe._pushVert(P,m)}return P!=null&&(P=P.next),{head:P,val:e}}marchSquare(e,t,n,s,i,l,r,a,o,p,c,h,u,x){let y=0,d=t.list[o*t.width+a];d<0&&(y|=8);let _=t.list[o*t.width+(a+1)];_<0&&(y|=4);let f=t.list[(o+1)*t.width+(a+1)];f<0&&(y|=2);let z=t.list[(o+1)*t.width+a];if(z<0&&(y|=1),y==0)return null;let P=Pe._allocPair();if(y!=10&&y!=5){let k=Pe.look_march[y];P.okey1=k;let m=this._buildPoly(k,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=m.head,k=m.val,P.key1=k,Pe._isDegenKey(k)&&(k=0,P.key1=0,P.p1=null),k==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}else{let k=e(.5*(s+l),.5*(i+r))<0;if(y==10)if(k){let m=187;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}else{let m=131;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);if(P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m!=0){let C=56;P.okey2=C,C=this._buildPoly2(C,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x,P).val,P.key2=C,Pe._isDegenKey(C)&&(C=0,P.key2=0,P.p2=null),C==0?(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1):(P.pr=P.p2,P.okeyr=P.okey2,P.keyr=P.key2)}else{let C=56;P.okey1=C;let v=this._buildPoly(C,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=v.head,C=v.val,P.key1=C,Pe._isDegenKey(C)&&(C=0,P.key1=0,P.p1=null),C==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}}else if(k){let m=238;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}else{let m=224;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);if(P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m!=0){let C=14;P.okey2=C,C=this._buildPoly2(C,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x,P).val,P.key2=C,Pe._isDegenKey(C)&&(C=0,P.key2=0,P.p2=null),C==0?(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1):(P.pr=P.p2,P.okeyr=P.okey2,P.keyr=P.key2)}else{let C=14;P.okey1=C;let v=this._buildPoly(C,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=v.head,C=v.val,P.key1=C,Pe._isDegenKey(C)&&(C=0,P.key1=0,P.p1=null),C==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}}}return P}_buildPoly2(e,t,n,s,i,l,r,a,o,p,c,h,u,x,y,d,_,f,z,P){for(let k=0;k<8;k++)if((e&1<<k)!=0){let m;if(k==0)m=Pe._allocVert(s,i),(x||y)&&(m.forced=!0);else if(k==2)m=Pe._allocVert(l,i),(d||y)&&(m.forced=!0);else if(k==4)m=Pe._allocVert(l,r),(d||_)&&(m.forced=!0);else if(k==6)m=Pe._allocVert(s,r),(x||_)&&(m.forced=!0);else if(k==1){if(m=n.list[(o<<1)*n.width+a],m==null){let C=this.xlerp(s,l,i,p,c,f,z);m=Pe._allocVert(C,i),n.list[(o<<1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);y&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&1)!=0||m.x==l&&(e&4)!=0)&&(e^=2)}else if(k==5){if(m=n.list[((o<<1)+2)*n.width+a],m==null){let C=this.xlerp(s,l,r,u,h,f,z);m=Pe._allocVert(C,r),n.list[((o<<1)+2)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);_&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&64)!=0||m.x==l&&(e&16)!=0)&&(e^=32)}else if(k==3){if(m=n.list[((o<<1)+1)*n.width+(a+1)],m==null){let C=this.ylerp(i,r,l,c,h,f,z);m=Pe._allocVert(l,C),n.list[((o<<1)+1)*n.width+(a+1)]=m}else m=Pe._allocVert(m.x,m.y);d&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&4)!=0||m.y==r&&(e&16)!=0)&&(e^=8)}else{if(m=n.list[((o<<1)+1)*n.width+a],m==null){let C=this.ylerp(i,r,s,p,u,f,z);m=Pe._allocVert(s,C),n.list[((o<<1)+1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);x&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&1)!=0||m.y==r&&(e&64)!=0)&&(e^=128)}let b=m;P.p2==null?P.p2=b.prev=b.next=b:(b.prev=P.p2,b.next=P.p2.next,P.p2.next.prev=b,P.p2.next=b),P.p2=b}return P.p2!=null&&(P.p2=P.p2.next),{val:e}}lerp(e,t,n,s){let i=Pe._nape;if(n==0)return e;if(s==0)return t;{let l=n-s,r=l*l<i.Config.epsilon*i.Config.epsilon?.5:n/l;return r<0?r=0:r>1&&(r=1),e+r*(t-e)}}xlerp(e,t,n,s,i,l,r){let a=Pe._nape,o;if(s==0)o=e;else if(i==0)o=t;else{let p=s-i,c=p*p<a.Config.epsilon*a.Config.epsilon?.5:s/p;c<0?c=0:c>1&&(c=1),o=e+c*(t-e)}for(;r--!=0&&e<o&&o<t;){let p=l(o,n);if(p==0)break;if(s*p<0?(t=o,i=p):(e=o,s=p),s==0)o=e;else if(i==0)o=t;else{let c=s-i,h=c*c<a.Config.epsilon*a.Config.epsilon?.5:s/c;h<0?h=0:h>1&&(h=1),o=e+h*(t-e)}}return o}ylerp(e,t,n,s,i,l,r){let a=Pe._nape,o;if(s==0)o=e;else if(i==0)o=t;else{let p=s-i,c=p*p<a.Config.epsilon*a.Config.epsilon?.5:s/p;c<0?c=0:c>1&&(c=1),o=e+c*(t-e)}for(;r--!=0&&e<o&&o<t;){let p=l(n,o);if(p==0)break;if(s*p<0?(t=o,i=p):(e=o,s=p),s==0)o=e;else if(i==0)o=t;else{let c=s-i,h=c*c<a.Config.epsilon*a.Config.epsilon?.5:s/c;h<0?h=0:h>1&&(h=1),o=e+h*(t-e)}}return o}};Pe.isos=null,Pe.ints=null,Pe.map=null,Pe._zpp=null,Pe._nape=null;var Gs=Pe;var pn=class pn{constructor(){this.outer=null;this.a=0;this.b=0;this.c=0;this.d=0;this.tx=0;this.ty=0;this._invalidate=null;this.next=null}static get(){let e;return pn.zpp_pool==null?e=new pn:(e=pn.zpp_pool,pn.zpp_pool=e.next,e.next=null),e}static identity(){let e=pn.get();return e.setas(1,0,0,1,0,0),e}wrapper(){if(this.outer==null)if(pn._wrapFn)this.outer=pn._wrapFn(this);else{this.outer=new pn._nape.geom.Mat23;let e=this.outer.zpp_inner;e.next=pn.zpp_pool,pn.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}invalidate(){this._invalidate!=null&&this._invalidate()}set(e){this.setas(e.a,e.b,e.c,e.d,e.tx,e.ty)}setas(e,t,n,s,i,l){this.tx=i,this.ty=l,this.a=e,this.b=t,this.c=n,this.d=s}free(){}alloc(){}};pn._nape=null,pn._wrapFn=null,pn.zpp_pool=null;var Js=pn;var Ri=class{constructor(e,t){this.outer=null;this.m=0;this.n=0;this.m=e,this.n=t,this.x=[];let n=0,s=e*t;for(;n<s;)n++,this.x.push(0)}};var yt=class yt{constructor(){this.node=null;this.prev=null;this.next=null;this.rightchain=!1;this.helper=null;this.type=0;this.diagonals=null;this.forced=!1;this.y=0;this.x=0;this.mag=0;this.id=0;this.id=yt.nextId++,this.diagonals=new di}static get(e){let t;return yt.zpp_pool==null?t=new yt:(t=yt.zpp_pool,yt.zpp_pool=t.next,t.next=null),t.x=e.x,t.y=e.y,t}static rightdistance(e,t){let n=e.next.y>e.y,s=e.next.x-e.x,i=e.next.y-e.y,l=t.x-e.x,r=t.y-e.y;return(n?-1:1)*(r*s-l*i)}static vert_lt(e,t){if(t==e||t==e.next)return!0;if(e.y==e.next.y){let n=e.x,s=e.next.x;return(n<s?n:s)<=t.x}else return yt.rightdistance(e,t)<=0}static edge_swap(e,t){let n=e.node;e.node=t.node,t.node=n}static edge_lt(e,t){if(e==t&&e.next==t.next)return!1;if(e==t.next)return!yt.vert_lt(e,t);if(t==e.next)return yt.vert_lt(t,e);if(e.y==e.next.y)if(t.y==t.next.y){let n=e.x,s=e.next.x,i=t.x,l=t.next.x;return(n>s?n:s)>(i>l?i:l)}else return yt.rightdistance(t,e)>0?!0:yt.rightdistance(t,e.next)>0;else{let n=yt.rightdistance(e,t),s=yt.rightdistance(e,t.next);if(n==0&&s==0){let r=e.x,a=e.next.x,o=t.x,p=t.next.x;return(r>a?r:a)>(o>p?o:p)}if(n*s>=0)return n<0?!0:s<0;let i=yt.rightdistance(t,e),l=yt.rightdistance(t,e.next);return i*l>=0?i>0?!0:l>0:!1}}alloc(){}free(){this.helper=null}copy(){let e;return yt.zpp_pool==null?e=new yt:(e=yt.zpp_pool,yt.zpp_pool=e.next,e.next=null),e.x=this.x,e.y=this.y,e.forced=this.forced,e}sort(){let e=this.prev.x-this.x,t=this.prev.y-this.y,n=this.next.x-this.x,s=this.next.y-this.y,i=s*e-n*t,l=i>0?-1:i==0?0:1,r=this.diagonals;if(r.head!=null&&r.head.next!=null){let a=r.head,o,p,c,h,u=1,x,y,d;for(;;){for(x=0,p=a,a=null,o=a;p!=null;){for(++x,c=p,y=0,d=u;c!=null&&y<u;)++y,c=c.next;for(;y>0||d>0&&c!=null;){if(y==0)h=c,c=c.next,--d;else if(d==0||c==null)h=p,p=p.next,--y;else{let _;if(l==1){e=p.elt.x-this.x,t=p.elt.y-this.y,n=c.elt.x-this.x,s=c.elt.y-this.y;let f=s*e-n*t;_=(f>0?-1:f==0?0:1)==1}else{e=this.prev.x-this.x,t=this.prev.y-this.y,n=p.elt.x-this.x,s=p.elt.y-this.y;let f=s*e-n*t,z=f>0?-1:f==0?0:1;e=this.prev.x-this.x,t=this.prev.y-this.y,n=c.elt.x-this.x,s=c.elt.y-this.y;let P=s*e-n*t,k=P>0?-1:P==0?0:1;if(z*k==1||z*k==0&&(z==1||k==1)){e=p.elt.x-this.x,t=p.elt.y-this.y,n=c.elt.x-this.x,s=c.elt.y-this.y;let m=s*e-n*t;_=(m>0?-1:m==0?0:1)==1}else if(z==-1||k==-1)_=k==-1;else if(z==0&&k==0){e=this.x-this.prev.x,t=this.y-this.prev.y,n=p.elt.x-this.x,s=p.elt.y-this.y;let m=e*n+t*s;n=c.elt.x-this.x,s=c.elt.y-this.y;let b=e*n+t*s;_=m<0&&b>0?!0:!(b<0&&m>0)}else _=!0}_?(h=p,p=p.next,--y):(h=c,c=c.next,--d)}o!=null?o.next=h:a=h,o=h}p=c}if(o.next=null,u<<=1,!(x>1))break}r.head=a,r.modified=!0,r.pushmod=!0}}};yt.zpp_pool=null,yt.nextId=0;var Ge=yt;var cn=class cn{constructor(e){this.next=null;this.vertices=null;this.init(e)}static getSharedPP(){return cn.sharedPPList==null&&(cn.sharedPPList=new rl),cn.sharedPPList}static getShared(){return cn.sharedGVList==null&&(cn.sharedGVList=new ys),cn.sharedGVList}eq(e,t){let n=e.x-t.x,s=e.y-t.y;return n*n+s*s<me().Config.epsilon*me().Config.epsilon}alloc(){}free(){}init(e){if(e==null)return;let t=0,n=e,s=e;if(n!=null){let r=n;for(;;){let a=r;if(t+=a.x*(a.next.y-a.prev.y),r=r.next,r==s)break}}let i=t*.5>0,l=e;for(;;){let r;if(i){let a;Ge.zpp_pool==null?a=new Ge:(a=Ge.zpp_pool,Ge.zpp_pool=a.next,a.next=null),a.x=l.x,a.y=l.y;let o=a;this.vertices==null?this.vertices=o.prev=o.next=o:(o.prev=this.vertices,o.next=this.vertices.next,this.vertices.next.prev=o,this.vertices.next=o),r=o}else{let a;Ge.zpp_pool==null?a=new Ge:(a=Ge.zpp_pool,Ge.zpp_pool=a.next,a.next=null),a.x=l.x,a.y=l.y;let o=a;this.vertices==null?this.vertices=o.prev=o.next=o:(o.next=this.vertices,o.prev=this.vertices.prev,this.vertices.prev.next=o,this.vertices.prev=o),r=o}if(this.vertices=r,this.vertices.forced=l.forced,l=l.next,l==e)break}this.remove_collinear_vertices()}remove_collinear_vertices(){let e=this.vertices,t=!0;for(;t||e!=this.vertices;)if(t=!1,this.eq(e,e.next)){if(e==this.vertices&&(this.vertices=e.next,t=!0),e.forced&&(e.next.forced=!0),e!=null&&e.prev==e){e.next=e.prev=null;let s=e;s.helper=null,s.next=Ge.zpp_pool,Ge.zpp_pool=s,e=null,e=null}else{let s=e.next;e.prev.next=e.next,e.next.prev=e.prev,e.next=e.prev=null;let i=e;i.helper=null,i.next=Ge.zpp_pool,Ge.zpp_pool=i,e=s}if(e==null){this.vertices=null;break}}else e=e.next;if(this.vertices==null)return!0;let n;for(;;){for(n=!1,e=this.vertices,t=!0;t||e!=this.vertices;){t=!1;let s=e.prev,i=e.x-s.x,l=e.y-s.y,r=e.next.x-e.x,o=(e.next.y-e.y)*i-r*l;if(o*o>=me().Config.epsilon*me().Config.epsilon)e=e.next;else{if(e==this.vertices&&(this.vertices=e.next,t=!0),e!=null&&e.prev==e){e.next=e.prev=null;let p=e;p.helper=null,p.next=Ge.zpp_pool,Ge.zpp_pool=p,e=null,e=null}else{let p=e.next;e.prev.next=e.next,e.next.prev=e.prev,e.next=e.prev=null;let c=e;c.helper=null,c.next=Ge.zpp_pool,Ge.zpp_pool=c,e=p}if(n=!0,e==null){n=!1,this.vertices=null;break}}}if(!n)break}return this.vertices==null}add_diagonal(e,t){e.diagonals.add(t),t.diagonals.add(e),e.forced=t.forced=!0}extract_partitions(e){if(e==null&&(e=new rl),this.vertices!=null){let t=this.vertices,n=this.vertices;if(t!=null){let l=t;for(;l.sort(),l=l.next,l!=n;);}for(this.pull_partitions(this.vertices,e);this.vertices!=null;){let l;if(this.vertices!=null&&this.vertices.prev==this.vertices){this.vertices.next=this.vertices.prev=null;let r=this.vertices;r.helper=null,r.next=Ge.zpp_pool,Ge.zpp_pool=r,l=this.vertices=null}else{let r=this.vertices.next;this.vertices.prev.next=this.vertices.next,this.vertices.next.prev=this.vertices.prev,this.vertices.next=this.vertices.prev=null;let a=this.vertices;a.helper=null,a.next=Ge.zpp_pool,Ge.zpp_pool=a,this.vertices=null,l=r}this.vertices=l}let s=null,i=e.head;for(;i!=null;){if(i.elt.remove_collinear_vertices()){e.erase(s);continue}s=i,i=i.next}}return e}pull_partitions(e,t){let n;cn.zpp_pool==null?n=new cn:(n=cn.zpp_pool,cn.zpp_pool=n.next,n.next=null);let s=e;for(;;){let a;Ge.zpp_pool==null?a=new Ge:(a=Ge.zpp_pool,Ge.zpp_pool=a.next,a.next=null),a.x=s.x,a.y=s.y,a.forced=s.forced;let o=a;if(n.vertices==null?n.vertices=o.prev=o.next=o:(o.prev=n.vertices,o.next=n.vertices.next,n.vertices.next.prev=o,n.vertices.next=o),n.vertices=o,n.vertices.forced=s.forced,s.diagonals.head!=null){let p=s.diagonals,c=p.head.elt;if(p.pop(),c==e)break;s=this.pull_partitions(s,t)}else s=s.next;if(s==e)break}let i=0,l=n.vertices,r=n.vertices;if(l!=null){let a=l;for(;;){let o=a;if(i+=o.x*(o.next.y-o.prev.y),a=a.next,a==r)break}}return i*.5!=0&&t.add(n),s}extract(e){if(e==null&&(e=new ys),this.vertices!=null){let t=this.vertices,n=this.vertices;if(t!=null){let s=t;for(;s.sort(),s=s.next,s!=n;);}for(this.pull(this.vertices,e);this.vertices!=null;){let s;if(this.vertices!=null&&this.vertices.prev==this.vertices){this.vertices.next=this.vertices.prev=null;let i=this.vertices;i.helper=null,i.next=Ge.zpp_pool,Ge.zpp_pool=i,s=this.vertices=null}else{let i=this.vertices.next;this.vertices.prev.next=this.vertices.next,this.vertices.next.prev=this.vertices.prev,this.vertices.next=this.vertices.prev=null;let l=this.vertices;l.helper=null,l.next=Ge.zpp_pool,Ge.zpp_pool=l,this.vertices=null,s=i}this.vertices=s}}return e}pull(e,t){let n=null,s=e;for(;;){let o=s.x,p=s.y,c;ge.zpp_pool==null?c=new ge:(c=ge.zpp_pool,ge.zpp_pool=c.next,c.next=null),c.forced=!1,c.x=o,c.y=p;let h=c;if(n==null?h.prev=h.next=h:(h.prev=n,h.next=n.next,n.next.prev=h,n.next=h),n=h,n.forced=s.forced,s.diagonals.head!=null){let u=s.diagonals,x=u.head.elt;if(u.pop(),x==e)break;s=this.pull(s,t)}else s=s.next;if(s==e)break}let i=0,l=n,r=n;if(l!=null){let o=l;for(;;){let p=o;if(i+=p.x*(p.next.y-p.prev.y),o=o.next,o==r)break}}let a=i*.5;if(a*a>=me().Config.epsilon*me().Config.epsilon){let o=n,p=!0;for(;p||o!=n;){p=!1;let c=o.x-o.next.x,h=o.y-o.next.y;if(c*c+h*h<me().Config.epsilon*me().Config.epsilon){if(o==n&&(n=o.next,p=!0),o.forced&&(o.next.forced=!0),o!=null&&o.prev==o)o.next=o.prev=null,o=null;else{let u=o.next;o.prev.next=o.next,o.next.prev=o.prev,o.next=o.prev=null,o=u}if(o==null){n=null;break}}else o=o.next}if(n!=null){let c;for(;;){for(c=!1,o=n,p=!0;p||o!=n;){p=!1;let h=o.prev,u=o.x-h.x,x=o.y-h.y,y=o.next.x-o.x,_=(o.next.y-o.y)*u-y*x;if(_*_>=me().Config.epsilon*me().Config.epsilon)o=o.next;else{if(o==n&&(n=o.next,p=!0),o!=null&&o.prev==o)o.next=o.prev=null,o=null;else{let f=o.next;o.prev.next=o.next,o.next.prev=o.prev,o.next=o.prev=null,o=f}if(c=!0,o==null){c=!1,n=null;break}}}if(!c)break}}n!=null&&t.add(n)}return s}};cn.zpp_pool=null,cn.sharedPPList=null,cn.sharedGVList=null;var Gi=cn;var Fe=class Fe{static bisector(e){let t=e.prev,n=e.next,s=e.x-t.x,i=e.y-t.y,l=n.x-e.x,r=n.y-e.y,a;le.zpp_pool==null?a=new le:(a=le.zpp_pool,le.zpp_pool=a.next,a.next=null),a.weak=!1,a._immutable=!1,a.x=-i-r,a.y=s+l;let o=a,p=o.x*o.x+o.y*o.y,h=1/Math.sqrt(p);return o.x*=h,o.y*=h,r*s-l*i<0&&(o.x=-o.x,o.y=-o.y),o}static below(e,t){if(e.y<t.y)return!0;if(e.y>t.y)return!1;if(e.x<t.x)return!0;if(e.x>t.x)return!1;{let n=Fe.bisector(e),s=Fe.bisector(t),i=1;n.x+=e.x*i,n.y+=e.y*i;let l=1;s.x+=t.x*l,s.y+=t.y*l;let r=n.x<s.x||n.x==s.x&&n.y<s.y;return n.outer!=null&&(n.outer.zpp_inner=null,n.outer=null),n._isimmutable=null,n._validate=null,n._invalidate=null,n.next=le.zpp_pool,le.zpp_pool=n,s.outer!=null&&(s.outer.zpp_inner=null,s.outer=null),s._isimmutable=null,s._validate=null,s._invalidate=null,s.next=le.zpp_pool,le.zpp_pool=s,r}}static above(e,t){return Fe.below(t,e)}static left_vertex(e){let t=e.prev;return t.y>e.y?!0:t.y==e.y?e.next.y<e.y:!1}static isMonotone(e){let t=e,n=e,s=e.next,i=e;if(s!=null){let a=s;for(;;){let o=a;if(o.y<t.y&&(t=o),o.y>n.y&&(n=o),a=a.next,a==i)break}}let l=!0,r=t;if(n!=t.next){let a=t.next,o=n;if(a!=null){let p=a;for(;;){let c=p;if(c.y<r.y){l=!1;break}if(r=c,p=p.next,p==o)break}}}if(!l)return!1;if(r=t,n!=t.prev){let a=t.prev,o=n;if(a!=null){let p=a;for(;;){let c=p;if(c.y<r.y){l=!1;break}if(r=c,p=p.prev,p==o)break}}}return l}static getShared(){return Fe.sharedPPoly==null&&(Fe.sharedPPoly=new Gi),Fe.sharedPPoly}static decompose(e,t){if(t==null?t=new Gi(e):t.init(e),t.vertices==null)return t;Fe.queue==null&&(Fe.queue=new di);let n=t.vertices,s=t.vertices;if(n!=null){let l=n;for(;;){let r=l;Fe.queue.add(r);let a=r.next.x-r.x,o=r.next.y-r.y,p=r.prev.x-r.x,h=(r.prev.y-r.y)*a-p*o>0;if(r.type=Fe.below(r.prev,r)?Fe.below(r.next,r)?h?0:3:4:Fe.below(r,r.next)?h?1:2:4,l=l.next,l==s)break}}let i=Fe.queue;if(i.head!=null&&i.head.next!=null){let l=i.head,r,a,o,p,c=1,h,u,x;for(;;){for(h=0,a=l,l=null,r=l;a!=null;){for(++h,o=a,u=0,x=c;o!=null&&u<c;)++u,o=o.next;for(;u>0||x>0&&o!=null;)u==0?(p=o,o=o.next,--x):x==0||o==null||Fe.above(a.elt,o.elt)?(p=a,a=a.next,--u):(p=o,o=o.next,--x),r!=null?r.next=p:l=p,r=p;a=o}if(r.next=null,c<<=1,!(h>1))break}i.head=l,i.modified=!0,i.pushmod=!0}for(Fe.edges==null&&(bs.zpp_pool==null?Fe.edges=new bs:(Fe.edges=bs.zpp_pool,bs.zpp_pool=Fe.edges.next,Fe.edges.next=null),Fe.edges.lt=Ge.edge_lt,Fe.edges.swapped=Ge.edge_swap);Fe.queue.head!=null;){let l=Fe.queue.pop_unsafe();switch(l.type){case 0:l.helper=l,l.node=Fe.edges.insert(l);break;case 1:{let r=l.prev;if(r.helper==null)throw new Error("Fatal error (1): Polygon is not weakly-simple and clockwise");r.helper.type==2&&t.add_diagonal(l,r.helper),Fe.edges.remove_node(r.node),r.helper=null;break}case 2:{let r=l.prev;if(r.helper==null)throw new Error("Fatal error (3): Polygon is not weakly-simple and clockwise");r.helper.type==2&&t.add_diagonal(l,r.helper),Fe.edges.remove_node(r.node),r.helper=null;let a=null;if(!Fe.edges.empty()){let p=Fe.edges.parent;for(;p.prev!=null;)p=p.prev;for(;p!=null;){let c=p.data;if(!Ge.vert_lt(c,l)){a=c;break}if(p.next!=null)for(p=p.next;p.prev!=null;)p=p.prev;else{for(;p.parent!=null&&p==p.parent.next;)p=p.parent;p=p.parent}}}let o=a;if(o!=null){if(o.helper==null)throw new Error("Fatal error (4): Polygon is not weakly-simple and clockwise");o.helper.type==2&&t.add_diagonal(l,o.helper),o.helper=l}break}case 3:{let r=null;if(!Fe.edges.empty()){let o=Fe.edges.parent;for(;o.prev!=null;)o=o.prev;for(;o!=null;){let p=o.data;if(!Ge.vert_lt(p,l)){r=p;break}if(o.next!=null)for(o=o.next;o.prev!=null;)o=o.prev;else{for(;o.parent!=null&&o==o.parent.next;)o=o.parent;o=o.parent}}}let a=r;if(a!=null){if(a.helper==null)throw new Error("Fatal error (2): Polygon is not weakly-simple and clockwise");t.add_diagonal(l,a.helper),a.helper=l}l.node=Fe.edges.insert(l),l.helper=l;break}case 4:{let r=l.prev;if(Fe.left_vertex(l)){if(r.helper==null)throw new Error("Fatal error (5): Polygon is not weakly-simple and clockwise");r.helper.type==2&&t.add_diagonal(l,r.helper),Fe.edges.remove_node(r.node),r.helper=null,l.node=Fe.edges.insert(l),l.helper=l}else{let a=null;if(!Fe.edges.empty()){let p=Fe.edges.parent;for(;p.prev!=null;)p=p.prev;for(;p!=null;){let c=p.data;if(!Ge.vert_lt(c,l)){a=c;break}if(p.next!=null)for(p=p.next;p.prev!=null;)p=p.prev;else{for(;p.parent!=null&&p==p.parent.next;)p=p.parent;p=p.parent}}}let o=a;if(o==null||o.helper==null)throw new Error("Fatal error (6): Polygon is not weakly-simple and clockwise");o.helper.type==2&&t.add_diagonal(l,o.helper),o.helper=l}break}}}return t}};Fe.queue=null,Fe.edges=null,Fe.sharedPPoly=null;var _l=Fe;var Ji=class Ji{constructor(){this.node=null;this.di=0;this.id=0;this.b=null;this.a=null;this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null}static get(e,t){let n;return Ji.zpp_pool==null?n=new Ji:(n=Ji.zpp_pool,Ji.zpp_pool=n.next,n.next=null),n.a=e,n.b=t,e.id<t.id?(n.id=e.id,n.di=t.id):(n.id=t.id,n.di=e.id),n}static edge_swap(e,t){let n=e.node;e.node=t.node,t.node=n}static edge_lt(e,t){return e.id>=t.id?e.id==t.id?e.di<t.di:!1:!0}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}free(){this.a=this.b=null,this.node=null}alloc(){}};Ji.zpp_pool=null;var St=Ji;var At=class At{constructor(){this.zip_dir=!1;this.absnormaly=0;this.absnormalx=0;this.normaly=0;this.normalx=0;this.idiry=0;this.idirx=0;this.diry=0;this.dirx=0;this.originy=0;this.originx=0;this.userData=null;this.maxdist=0;this.direction=null;this.origin=null;let e=me(),t;if(ye.poolVec2==null?t=new e.geom.Vec2:(t=ye.poolVec2,ye.poolVec2=t.zpp_pool,t.zpp_pool=null,t.zpp_disp=!1,t==ye.nextVec2&&(ye.nextVec2=null)),t.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=0,s.y=0,t.zpp_inner=s,t.zpp_inner.outer=t}else{if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=t.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");s._isimmutable!=null&&s._isimmutable();let i;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=t.zpp_inner;if(l._validate!=null&&l._validate(),t.zpp_inner.x==0){if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=t.zpp_inner;r._validate!=null&&r._validate(),i=t.zpp_inner.y==0}else i=!1;if(!i){t.zpp_inner.x=0,t.zpp_inner.y=0;let r=t.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}t.zpp_inner.weak=!1,this.origin=t,this.origin.zpp_inner._invalidate=s=>this.origin_invalidate(s);let n;if(ye.poolVec2==null?n=new e.geom.Vec2:(n=ye.poolVec2,ye.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n==ye.nextVec2&&(ye.nextVec2=null)),n.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=0,s.y=0,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");s._isimmutable!=null&&s._isimmutable();let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x==0){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y==0}else i=!1;if(!i){n.zpp_inner.x=0,n.zpp_inner.y=0;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.direction=n,this.direction.zpp_inner._invalidate=s=>this.direction_invalidate(s),this.originx=0,this.originy=0,this.dirx=0,this.diry=0,this.zip_dir=!1}origin_invalidate(e){this.originx=e.x,this.originy=e.y}direction_invalidate(e){this.dirx=e.x,this.diry=e.y,this.zip_dir=!0}invalidate_dir(){this.zip_dir=!0}validate_dir(){if(this.zip_dir){this.zip_dir=!1;let e=me();if(this.dirx*this.dirx+this.diry*this.diry<e.Config.epsilon)throw new Error("Error: Ray::direction is degenerate");let t=this.dirx*this.dirx+this.diry*this.diry,n=1/Math.sqrt(t);this.dirx*=n,this.diry*=n,this.idirx=1/this.dirx,this.idiry=1/this.diry,this.normalx=-this.diry,this.normaly=this.dirx;let s=this.normalx;this.absnormalx=s<0?-s:s;let i=this.normaly;this.absnormaly=i<0?-i:i}}rayAABB(){let e=this.originx,t=e,n=this.originy,s=n;if(this.maxdist>=1/0?(this.dirx>0?t=1/0:this.dirx<0&&(t=-1/0),this.diry>0?s=1/0:this.diry<0&&(s=-1/0)):(t+=this.maxdist*this.dirx,s+=this.maxdist*this.diry),t<e){let l=e;e=t,t=l}if(s<n){let l=n;n=s,s=l}let i;return fe.zpp_pool==null?i=new fe:(i=fe.zpp_pool,fe.zpp_pool=i.next,i.next=null),i.minx=e,i.miny=n,i.maxx=t,i.maxy=s,i}aabbtest(e){let t=this.normalx*(this.originx-.5*(e.minx+e.maxx))+this.normaly*(this.originy-.5*(e.miny+e.maxy)),n=this.absnormalx*.5*(e.maxx-e.minx)+this.absnormaly*.5*(e.maxy-e.miny),s=t;return(s<0?-s:s)<n}aabbsect(e){let t=this.originx>=e.minx&&this.originx<=e.maxx,n=this.originy>=e.miny&&this.originy<=e.maxy;if(t&&n)return 0;{let s=-1;for(;!(this.dirx>=0&&this.originx>=e.maxx)&&!(this.dirx<=0&&this.originx<=e.minx||this.diry>=0&&this.originy>=e.maxy||this.diry<=0&&this.originy<=e.miny);){if(this.dirx>0){let i=(e.minx-this.originx)*this.idirx;if(i>=0&&i<=this.maxdist){let l=this.originy+i*this.diry;if(l>=e.miny&&l<=e.maxy){s=i;break}}}else if(this.dirx<0){let i=(e.maxx-this.originx)*this.idirx;if(i>=0&&i<=this.maxdist){let l=this.originy+i*this.diry;if(l>=e.miny&&l<=e.maxy){s=i;break}}}if(this.diry>0){let i=(e.miny-this.originy)*this.idiry;if(i>=0&&i<=this.maxdist){let l=this.originx+i*this.dirx;if(l>=e.minx&&l<=e.maxx){s=i;break}}}else if(this.diry<0){let i=(e.maxy-this.originy)*this.idiry;if(i>=0&&i<=this.maxdist){let l=this.originx+i*this.dirx;if(l>=e.minx&&l<=e.maxx){s=i;break}}}break}return s}}static _allocVec2(e,t){let n=me();if(e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let s;if(ye.poolVec2==null?s=new n.geom.Vec2:(s=ye.poolVec2,ye.poolVec2=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s==ye.nextVec2&&(ye.nextVec2=null)),s.zpp_inner==null){let i;le.zpp_pool==null?i=new le:(i=le.zpp_pool,le.zpp_pool=i.next,i.next=null),i.weak=!1,i._immutable=!1,i.x=e,i.y=t,s.zpp_inner=i,s.zpp_inner.outer=s}else{if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");if(i._isimmutable!=null&&i._isimmutable(),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let l;s.zpp_inner._validate!=null&&s.zpp_inner._validate(),s.zpp_inner.x==e?(s.zpp_inner._validate!=null&&s.zpp_inner._validate(),l=s.zpp_inner.y==t):l=!1,l||(s.zpp_inner.x=e,s.zpp_inner.y=t,s.zpp_inner._invalidate!=null&&s.zpp_inner._invalidate(s.zpp_inner))}return s.zpp_inner.weak=!1,s}static _validateWorldCOM(e){if(e.zip_worldCOM&&e.body!=null){if(e.zip_worldCOM=!1,e.zip_localCOM){if(e.zip_localCOM=!1,e.type==1){let n=e.polygon;if(n.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(n.lverts.next.next==null)n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;else if(n.lverts.next.next.next==null){n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;let s=1;n.localCOMx+=n.lverts.next.next.x*s,n.localCOMy+=n.lverts.next.next.y*s;let i=.5;n.localCOMx*=i,n.localCOMy*=i}else{n.localCOMx=0,n.localCOMy=0;let s=0,i=n.lverts.next,l=i;i=i.next;let r=i;for(i=i.next;i!=null;){let u=i;s+=r.x*(u.y-l.y);let x=u.y*r.x-u.x*r.y;n.localCOMx+=(r.x+u.x)*x,n.localCOMy+=(r.y+u.y)*x,l=r,r=u,i=i.next}i=n.lverts.next;let a=i;s+=r.x*(a.y-l.y);let o=a.y*r.x-a.x*r.y;n.localCOMx+=(r.x+a.x)*o,n.localCOMy+=(r.y+a.y)*o,l=r,r=a,i=i.next;let p=i;s+=r.x*(p.y-l.y);let c=p.y*r.x-p.x*r.y;n.localCOMx+=(r.x+p.x)*c,n.localCOMy+=(r.y+p.y)*c,s=1/(3*s);let h=s;n.localCOMx*=h,n.localCOMy*=h}}e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy)}let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}_circleNormal(e,t,n){let s=this.originx+this.dirx*e,i=this.originy+this.diry*e;s-=t.worldCOMx,i-=t.worldCOMy;let l=s*s+i*i,r=1/Math.sqrt(l);return s*=r,i*=r,n&&(s=-s,i=-i),{nx:s,ny:i}}static _insertSorted(e,t){let n=null,s=e.zpp_inner.inner.head;for(;s!=null;){let r=s.elt;if(t.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(t.zpp_inner.toiDistance<r.zpp_inner.toiDistance)break;n=s,s=s.next}let i=e.zpp_inner.inner,l;ms.zpp_pool==null?l=new ms:(l=ms.zpp_pool,ms.zpp_pool=l.next,l.next=null),l.elt=t,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++}circlesect(e,t,n){At._validateWorldCOM(e);let s=this.originx-e.worldCOMx,i=this.originy-e.worldCOMy,l=this.dirx*this.dirx+this.diry*this.diry,r=2*(s*this.dirx+i*this.diry),a=s*s+i*i-e.radius*e.radius,o=r*r-4*l*a;if(o==0){let p=-r/2*l;if((!t||a>0)&&p>0&&p<n&&p<=this.maxdist){let c=this._circleNormal(p,e,a<=0),h=At._allocVec2(c.nx,c.ny);return mn.getRay(h,p,a<=0,e.outer)}else return null}else{o=Math.sqrt(o),l=1/(2*l);let p=(-r-o)*l,c=(-r+o)*l;if(p>0)if(p<n&&p<=this.maxdist){let h=this._circleNormal(p,e,!1),u=At._allocVec2(h.nx,h.ny);return mn.getRay(u,p,!1,e.outer)}else return null;else if(c>0&&t)if(c<n&&c<=this.maxdist){let h=this._circleNormal(c,e,!0),u=At._allocVec2(h.nx,h.ny);return mn.getRay(u,c,!0,e.outer)}else return null;else return null}}circlesect2(e,t,n){At._validateWorldCOM(e);let s=this.originx-e.worldCOMx,i=this.originy-e.worldCOMy,l=this.dirx*this.dirx+this.diry*this.diry,r=2*(s*this.dirx+i*this.diry),a=s*s+i*i-e.radius*e.radius,o=r*r-4*l*a;if(o==0){let p=-r/2*l;if((!t||a>0)&&p>0&&p<=this.maxdist){let c=this._circleNormal(p,e,a<=0),h=At._allocVec2(c.nx,c.ny),u=mn.getRay(h,p,a<=0,e.outer);At._insertSorted(n,u)}}else{o=Math.sqrt(o),l=1/(2*l);let p=(-r-o)*l,c=(-r+o)*l;if(p>0&&p<=this.maxdist){let h=this._circleNormal(p,e,!1),u=At._allocVec2(h.nx,h.ny),x=mn.getRay(u,p,!1,e.outer);At._insertSorted(n,x)}if(c>0&&c<=this.maxdist&&t){let h=this._circleNormal(c,e,!0),u=At._allocVec2(h.nx,h.ny),x=mn.getRay(u,c,!0,e.outer);At._insertSorted(n,x)}}}polysect(e,t,n){let s=me(),i=n,l=null,r=e.edges.head,a=!0,o=e.gverts.next,p=o,c=o.next;for(;c!=null;){let h=c,u=r.elt;if(t||u.gnormx*this.dirx+u.gnormy*this.diry<0){let x=h.x-p.x,y=h.y-p.y,d=p.x-this.originx,_=p.y-this.originy,f=y*this.dirx-x*this.diry;if(f*f>s.Config.epsilon){f=1/f;let z=(y*d-x*_)*f;if(z>0&&z<i&&z<=this.maxdist){let P=(this.diry*d-this.dirx*_)*f;P>-s.Config.epsilon&&P<1+s.Config.epsilon&&(i=z,l=r.elt)}}}r=r.next,p=h,c=c.next}if(a){c=e.gverts.next;let h=c,u=r.elt;if(t||u.gnormx*this.dirx+u.gnormy*this.diry<0){let x=h.x-p.x,y=h.y-p.y,d=p.x-this.originx,_=p.y-this.originy,f=y*this.dirx-x*this.diry;if(f*f>s.Config.epsilon){f=1/f;let z=(y*d-x*_)*f;if(z>0&&z<i&&z<=this.maxdist){let P=(this.diry*d-this.dirx*_)*f;P>-s.Config.epsilon&&P<1+s.Config.epsilon&&(i=z,l=r.elt)}}}}if(l!=null){let h=l.gnormx,u=l.gnormy,x=h*this.dirx+u*this.diry>0;x&&(h=-h,u=-u);let y=At._allocVec2(h,u);return mn.getRay(y,i,x,e.outer)}else return null}polysect2(e,t,n){let s=me(),i=1/0,l=-1,r=null,a=null,o=e.edges.head,p=!0,c=e.gverts.next,h=c,u=c.next;for(;u!=null;){let x=u,y=o.elt;if(t||y.gnormx*this.dirx+y.gnormy*this.diry<0){let d=x.x-h.x,_=x.y-h.y,f=h.x-this.originx,z=h.y-this.originy,P=_*this.dirx-d*this.diry;if(P*P>s.Config.epsilon){P=1/P;let k=(_*f-d*z)*P;if(k>0&&k<=this.maxdist&&(k<i||k>l)){let m=(this.diry*f-this.dirx*z)*P;m>-s.Config.epsilon&&m<1+s.Config.epsilon&&(k<i&&(i=k,r=o.elt),k>l&&(l=k,a=o.elt))}}}o=o.next,h=x,u=u.next}if(p){u=e.gverts.next;let x=u,y=o.elt;if(t||y.gnormx*this.dirx+y.gnormy*this.diry<0){let d=x.x-h.x,_=x.y-h.y,f=h.x-this.originx,z=h.y-this.originy,P=_*this.dirx-d*this.diry;if(P*P>s.Config.epsilon){P=1/P;let k=(_*f-d*z)*P;if(k>0&&k<=this.maxdist&&(k<i||k>l)){let m=(this.diry*f-this.dirx*z)*P;m>-s.Config.epsilon&&m<1+s.Config.epsilon&&(k<i&&(i=k,r=o.elt),k>l&&(l=k,a=o.elt))}}}}if(r!=null){let x=r.gnormx,y=r.gnormy,d=x*this.dirx+y*this.diry>0;d&&(x=-x,y=-y);let _=At._allocVec2(x,y),f=mn.getRay(_,i,d,e.outer);At._insertSorted(n,f)}if(a!=null&&r!=a){let x=a.gnormx,y=a.gnormy,d=x*this.dirx+y*this.diry>0;d&&(x=-x,y=-y);let _=At._allocVec2(x,y),f=mn.getRay(_,l,d,e.outer);At._insertSorted(n,f)}}};At.internal=!1;var yl=At;var wi=class wi{constructor(){this.forced=!1;this.x=0;this.y=0;this.links=null;this.id=0;this.next=null;this.node=null;this.id=_n.ZPP_SimpleVert(),Qt.zpp_pool==null?this.links=new Qt:(this.links=Qt.zpp_pool,Qt.zpp_pool=this.links.next,this.links.next=null),this.links.lt=wi.less_xy}static less_xy(e,t){return e.y<t.y?!0:e.y==t.y?e.x<t.x:!1}static swap_nodes(e,t){let n=e.node;e.node=t.node,t.node=n}static get(e,t){let n;return wi.zpp_pool==null?n=new wi:(n=wi.zpp_pool,wi.zpp_pool=n.next,n.next=null),n.x=e,n.y=t,n}free(){this.links.clear(),this.node=null,this.forced=!1}alloc(){}};wi.zpp_pool=null;var ke=wi;var qi=class qi{constructor(){this.left=null;this.right=null;this.vertices=null;this.id=0;this.next=null;this.prev=null;this.node=null;this.id=_n.ZPP_SimpleSeg(),Qt.zpp_pool==null?this.vertices=new Qt:(this.vertices=Qt.zpp_pool,Qt.zpp_pool=this.vertices.next,this.vertices.next=null),this.vertices.lt=(e,t)=>this.less_xy(e,t)}static get(e,t){let n;return qi.zpp_pool==null?n=new qi:(n=qi.zpp_pool,qi.zpp_pool=n.next,n.next=null),n.left=e,n.right=t,n.vertices.insert(e),n.vertices.insert(t),n}free(){this.left=this.right=null,this.prev=null,this.node=null,this.vertices.clear()}alloc(){}less_xy(e,t){return e.x<t.x?!0:e.x==t.x?e.y<t.y:!1}};qi.zpp_pool=null;var Vt=qi;var Ui=class Ui{constructor(){this.type=0;this.vertex=null;this.segment=null;this.segment2=null;this.node=null;this.next=null}static swap_nodes(e,t){let n=e.node;e.node=t.node,t.node=n}static less_xy(e,t){return e.vertex.x<t.vertex.x?!0:e.vertex.x>t.vertex.x?!1:e.vertex.y<t.vertex.y?!0:e.vertex.y>t.vertex.y?!1:e.type<t.type}static get(e){let t;return Ui.zpp_pool==null?t=new Ui:(t=Ui.zpp_pool,Ui.zpp_pool=t.next,t.next=null),t.vertex=e,t}free(){this.vertex=null,this.segment=this.segment2=null,this.node=null}alloc(){}};Ui.zpp_pool=null;var Ce=Ui;var Wi=class{constructor(){this.sweepx=0;this.tree=null;fs.zpp_pool==null?this.tree=new fs:(this.tree=fs.zpp_pool,fs.zpp_pool=this.tree.next,this.tree.next=null),this.tree.lt=(e,t)=>this.edge_lt(e,t),this.tree.swapped=(e,t)=>this.swap_nodes(e,t)}swap_nodes(e,t){let n=e.node;e.node=t.node,t.node=n}edge_lt(e,t){let n=e.left,s=e.right,i=t.left,l=t.right,r,a,o,p,c;if(e.left==t.left&&e.right==t.right)return!1;if(e.left==t.right)return n.x==s.x?n.y<s.y?n.y>i.y:s.y>i.y:(c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y,(c?a*o-r*p:p*r-o*a)<0);if(e.right==t.left){let h;return i.x==l.x?h=i.y<l.y?i.y>n.y:l.y>n.y:(c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=n.x-i.x,p=n.y-i.y,h=(c?a*o-r*p:p*r-o*a)<0),!h}else{if(e.left==t.left)return n.x==s.x?n.y<s.y?n.y>l.y:s.y>l.y:(c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=l.x-n.x,p=l.y-n.y,(c?a*o-r*p:p*r-o*a)<0);if(e.right==t.right)return n.x==s.x?n.y<s.y?n.y>i.y:s.y>i.y:(c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y,(c?a*o-r*p:p*r-o*a)<0)}if(n.x==s.x)if(i.x==l.x){let h=n.y<s.y?s:n,u=i.y<l.y?l:i;return h.y>u.y}else{c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=n.x-i.x,p=n.y-i.y;let h=c?a*o-r*p:p*r-o*a;c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=s.x-i.x,p=s.y-i.y;let u=c?a*o-r*p:p*r-o*a;return h*u>=0?h>=0:this.sweepx>=n.x}else if(i.x==l.x){c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y;let h=c?a*o-r*p:p*r-o*a;c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=l.x-n.x,p=l.y-n.y;let u=c?a*o-r*p:p*r-o*a;return h*u>=0?h<0:this.sweepx<i.x}else{c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y;let h=(c?a*o-r*p:p*r-o*a)<0;c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=l.x-n.x,p=l.y-n.y;let u=(c?a*o-r*p:p*r-o*a)<0;if(h==u)return h;{c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=n.x-i.x,p=n.y-i.y;let x=(c?a*o-r*p:p*r-o*a)>=0;c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=s.x-i.x,p=s.y-i.y;let y=(c?a*o-r*p:p*r-o*a)>=0;if(x==y)return x;let d=(this.sweepx-n.x)/(s.x-n.x)*(s.y-n.y)+n.y,_=(this.sweepx-i.x)/(l.x-i.x)*(l.y-i.y)+i.y;return d>_}}}clear(){this.tree.clear()}add(e){e.node=this.tree.insert(e);let t=this.tree.successor_node(e.node),n=this.tree.predecessor_node(e.node);return t!=null&&(e.next=t.data,t.data.prev=e),n!=null&&(e.prev=n.data,n.data.next=e),e}remove(e){let t=this.tree.successor_node(e.node),n=this.tree.predecessor_node(e.node);t!=null&&(t.data.prev=e.prev),n!=null&&(n.data.next=e.next),this.tree.remove_node(e.node),e.node=null}intersect(e,t){if(e==null||t==null)return!1;if(e.left==t.left||e.left==t.right||e.right==t.left||e.right==t.right)return!1;{let n=e.left,s=e.right,i=t.left,l=t.right,r=(i.x-n.x)*(s.y-n.y)-(s.x-n.x)*(i.y-n.y),a=(l.x-n.x)*(s.y-n.y)-(s.x-n.x)*(l.y-n.y);if(r*a>0)return!1;{let o=(n.x-i.x)*(l.y-i.y)-(l.x-i.x)*(n.y-i.y),p=(s.x-i.x)*(l.y-i.y)-(l.x-i.x)*(s.y-i.y);return!(o*p>0)}}}intersection(e,t){if(e==null||t==null)return null;if(e.left==t.left||e.left==t.right||e.right==t.left||e.right==t.right)return null;{let n=e.left,s=e.right,i=t.left,l=t.right,r=s.x-n.x,a=s.y-n.y,o=l.x-i.x,p=l.y-i.y,c=p*r-o*a;if(c==0)return null;c=1/c;let h=i.x-n.x,u=i.y-n.y,x=(p*h-o*u)*c;if(x<0||x>1)return null;let y=(a*h-r*u)*c;if(y<0||y>1)return null;let d;if(y==0||y==1||x==0||x==1){let z=y==0;if(y==1&&z)throw new Error("corner case 1a");if(y==1&&(z=!0),x==0&&z)throw new Error("corner case 1b");if(x==0&&(z=!0),x==1&&z)throw new Error("corner case 1c");d=y==0?i:y==1?l:x==0?n:s}else{let z=.5*(n.x+r*x+i.x+o*y),P=.5*(n.y+a*x+i.y+p*y),k;ke.zpp_pool==null?k=new ke:(k=ke.zpp_pool,ke.zpp_pool=k.next,k.next=null),k.x=z,k.y=P,d=k}let _;Ce.zpp_pool==null?_=new Ce:(_=Ce.zpp_pool,Ce.zpp_pool=_.next,_.next=null),_.vertex=d;let f=_;return f.type=0,f.segment=e,f.segment2=t,f}}};var de=class de{static decompose(e,t){de.sweep==null&&(de.sweep=new Wi,de.inthash=new Bi),de.vertices==null&&(Qt.zpp_pool==null?de.vertices=new Qt:(de.vertices=Qt.zpp_pool,Qt.zpp_pool=de.vertices.next,de.vertices.next=null),de.vertices.lt=ke.less_xy,de.vertices.swapped=ke.swap_nodes),de.queue==null&&(Kn.zpp_pool==null?de.queue=new Kn:(de.queue=Kn.zpp_pool,Kn.zpp_pool=de.queue.next,de.queue.next=null),de.queue.lt=Ce.less_xy,de.queue.swapped=Ce.swap_nodes);let n=null,s=null,i=e,l=e;if(i!=null){let x=i;for(;;){let y=x,d=y.x,_=y.y,f;ke.zpp_pool==null?f=new ke:(f=ke.zpp_pool,ke.zpp_pool=f.next,f.next=null),f.x=d,f.y=_;let z=f,P=de.vertices.parent;for(;P!=null;)if(de.vertices.lt(z,P.data))P=P.prev;else if(de.vertices.lt(P.data,z))P=P.next;else break;let k=P;if(k!=null){let m=z;m.links.clear(),m.node=null,m.forced=!1,m.next=ke.zpp_pool,ke.zpp_pool=m,z=k.data}else z.node=de.vertices.insert(z);if(s!=null){let m;Ce.zpp_pool==null?m=new Ce:(m=Ce.zpp_pool,Ce.zpp_pool=m.next,m.next=null),m.vertex=s;let b=m,C;Ce.zpp_pool==null?C=new Ce:(C=Ce.zpp_pool,Ce.zpp_pool=C.next,C.next=null),C.vertex=z;let v=C,w;Ce.less_xy(b,v)?(b.type=1,v.type=2,w=Vt.get(s,z)):(b.type=2,v.type=1,w=Vt.get(z,s)),b.segment=v.segment=w,de.queue.insert(b),de.queue.insert(v),s.links.insert(z),z.links.insert(s)}if(s=z,n==null&&(n=z),x=x.next,x==l)break}}let r;Ce.zpp_pool==null?r=new Ce:(r=Ce.zpp_pool,Ce.zpp_pool=r.next,r.next=null),r.vertex=s;let a=r,o;Ce.zpp_pool==null?o=new Ce:(o=Ce.zpp_pool,Ce.zpp_pool=o.next,o.next=null),o.vertex=n;let p=o,c;for(Ce.less_xy(a,p)?(a.type=1,p.type=2,c=Vt.get(s,n)):(a.type=2,p.type=1,c=Vt.get(n,s)),a.segment=p.segment=c,de.queue.insert(a),de.queue.insert(p),s.links.insert(n),n.links.insert(s),de.ints==null&&(Kn.zpp_pool==null?de.ints=new Kn:(de.ints=Kn.zpp_pool,Kn.zpp_pool=de.ints.next,de.ints.next=null),de.ints.lt=Ce.less_xy);!de.queue.empty();){let x=de.queue.pop_front();if(de.sweep.sweepx=x.vertex.x,x.type==1){let d=x.segment;if(de.sweep.add(d),d.next!=null&&d!=null&&!(d.next.id<d.id?de.inthash.has(d.next.id,d.id):de.inthash.has(d.id,d.next.id))){let _=de.sweep.intersection(d.next,d);if(_!=null)if(_.vertex.x>=de.sweep.sweepx){let f=de.queue.parent;for(;f!=null;)if(de.queue.lt(_,f.data))f=f.prev;else if(de.queue.lt(f.data,_))f=f.next;else break;let z=f;if(z==null){let P=de.ints.parent;for(;P!=null;)if(de.ints.lt(_,P.data))P=P.prev;else if(de.ints.lt(P.data,_))P=P.next;else break;let k=P;if(k!=null){let m=_.vertex;m.links.clear(),m.node=null,m.forced=!1,m.next=ke.zpp_pool,ke.zpp_pool=m,_.vertex=k.data.vertex,k.data=_,de.queue.insert(_)}else de.queue.insert(_),de.ints.insert(_);if(d.next.id<d.id){let m=de.inthash,b=d.next.id,C=d.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=C;let w=v;w.value=!0,m.add(w)}else{let m=de.inthash,b=d.id,C=d.next.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=C;let w=v;w.value=!0,m.add(w)}}else{let P=z.data;if(P.segment!=_.segment||_.segment2!=P.segment2)throw new Error("corner case 2, shiiiit.");let k=_.vertex;k.links.clear(),k.node=null,k.forced=!1,k.next=ke.zpp_pool,ke.zpp_pool=k;let m=_;m.vertex=null,m.segment=m.segment2=null,m.node=null,m.next=Ce.zpp_pool,Ce.zpp_pool=m}}else{let f=_.vertex;f.links.clear(),f.node=null,f.forced=!1,f.next=ke.zpp_pool,ke.zpp_pool=f;let z=_;z.vertex=null,z.segment=z.segment2=null,z.node=null,z.next=Ce.zpp_pool,Ce.zpp_pool=z}}if(d!=null&&d.prev!=null&&!(d.id<d.prev.id?de.inthash.has(d.id,d.prev.id):de.inthash.has(d.prev.id,d.id))){let _=de.sweep.intersection(d,d.prev);if(_!=null)if(_.vertex.x>=de.sweep.sweepx){let f=de.queue.parent;for(;f!=null;)if(de.queue.lt(_,f.data))f=f.prev;else if(de.queue.lt(f.data,_))f=f.next;else break;let z=f;if(z==null){let P=de.ints.parent;for(;P!=null;)if(de.ints.lt(_,P.data))P=P.prev;else if(de.ints.lt(P.data,_))P=P.next;else break;let k=P;if(k!=null){let m=_.vertex;m.links.clear(),m.node=null,m.forced=!1,m.next=ke.zpp_pool,ke.zpp_pool=m,_.vertex=k.data.vertex,k.data=_,de.queue.insert(_)}else de.queue.insert(_),de.ints.insert(_);if(d.id<d.prev.id){let m=de.inthash,b=d.id,C=d.prev.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=C;let w=v;w.value=!0,m.add(w)}else{let m=de.inthash,b=d.prev.id,C=d.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=C;let w=v;w.value=!0,m.add(w)}}else{let P=z.data;if(P.segment!=_.segment||_.segment2!=P.segment2)throw new Error("corner case 2, shiiiit.");let k=_.vertex;k.links.clear(),k.node=null,k.forced=!1,k.next=ke.zpp_pool,ke.zpp_pool=k;let m=_;m.vertex=null,m.segment=m.segment2=null,m.node=null,m.next=Ce.zpp_pool,Ce.zpp_pool=m}}else{let f=_.vertex;f.links.clear(),f.node=null,f.forced=!1,f.next=ke.zpp_pool,ke.zpp_pool=f;let z=_;z.vertex=null,z.segment=z.segment2=null,z.node=null,z.next=Ce.zpp_pool,Ce.zpp_pool=z}}}else if(x.type==2){let d=x.segment;if(d.node!=null){let _=d.next,f=d.prev;de.sweep.remove(d);let z=d;if(z.left=z.right=null,z.prev=null,z.node=null,z.vertices.clear(),z.next=Vt.zpp_pool,Vt.zpp_pool=z,_!=null&&f!=null&&!(_.id<f.id?de.inthash.has(_.id,f.id):de.inthash.has(f.id,_.id))){let P=de.sweep.intersection(_,f);if(P!=null)if(P.vertex.x>=de.sweep.sweepx){let k=de.queue.parent;for(;k!=null;)if(de.queue.lt(P,k.data))k=k.prev;else if(de.queue.lt(k.data,P))k=k.next;else break;let m=k;if(m==null){let b=de.ints.parent;for(;b!=null;)if(de.ints.lt(P,b.data))b=b.prev;else if(de.ints.lt(b.data,P))b=b.next;else break;let C=b;if(C!=null){let v=P.vertex;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v,P.vertex=C.data.vertex,C.data=P,de.queue.insert(P)}else de.queue.insert(P),de.ints.insert(P);if(_.id<f.id){let v=de.inthash,w=_.id,O=f.id,E;Te.zpp_pool==null?E=new Te:(E=Te.zpp_pool,Te.zpp_pool=E.next,E.next=null),E.id=w,E.di=O;let M=E;M.value=!0,v.add(M)}else{let v=de.inthash,w=f.id,O=_.id,E;Te.zpp_pool==null?E=new Te:(E=Te.zpp_pool,Te.zpp_pool=E.next,E.next=null),E.id=w,E.di=O;let M=E;M.value=!0,v.add(M)}}else{let b=m.data;if(b.segment!=P.segment||P.segment2!=b.segment2)throw new Error("corner case 2, shiiiit.");let C=P.vertex;C.links.clear(),C.node=null,C.forced=!1,C.next=ke.zpp_pool,ke.zpp_pool=C;let v=P;v.vertex=null,v.segment=v.segment2=null,v.node=null,v.next=Ce.zpp_pool,Ce.zpp_pool=v}}else{let k=P.vertex;k.links.clear(),k.node=null,k.forced=!1,k.next=ke.zpp_pool,ke.zpp_pool=k;let m=P;m.vertex=null,m.segment=m.segment2=null,m.node=null,m.next=Ce.zpp_pool,Ce.zpp_pool=m}}}}else{let d=x.vertex,_=d.node==null,f=x.segment,z=x.segment2;if(z.next!=f){let C=f;f=z,z=C}let P=f.vertices.parent;for(;P!=null;)if(f.vertices.lt(d,P.data))P=P.prev;else if(f.vertices.lt(P.data,d))P=P.next;else break;let k=P==null,m=z.vertices.parent;for(;m!=null;)if(z.vertices.lt(d,m.data))m=m.prev;else if(z.vertices.lt(m.data,d))m=m.next;else break;let b=m==null;if(k){let C=f.vertices.insert(d),v=d==f.left?d:f.vertices.predecessor_node(C).data,w=d==f.right?d:f.vertices.successor_node(C).data;v.links.remove(w),d!=v&&v.links.insert(d),w.links.remove(v),d!=w&&w.links.insert(d),d!=v&&d.links.insert(v),d!=w&&d.links.insert(w)}if(b){let C=z.vertices.insert(d),v=d==z.left?d:z.vertices.predecessor_node(C).data,w=d==z.right?d:z.vertices.successor_node(C).data;v.links.remove(w),d!=v&&v.links.insert(d),w.links.remove(v),d!=w&&w.links.insert(d),d!=v&&d.links.insert(v),d!=w&&d.links.insert(w)}if(_&&(d.node=de.vertices.insert(d)),d.forced=!0,_){let C=f.node,v=z.node;C.data=z,v.data=f,f.node=v,z.node=C,z.next=f.next,f.next=z,f.prev=z.prev,z.prev=f,f.prev!=null&&(f.prev.next=f),z.next!=null&&(z.next.prev=z)}if(z.next!=null&&z!=null&&!(z.next.id<z.id?de.inthash.has(z.next.id,z.id):de.inthash.has(z.id,z.next.id))){let C=de.sweep.intersection(z.next,z);if(C!=null)if(C.vertex.x>=de.sweep.sweepx){let v=de.queue.parent;for(;v!=null;)if(de.queue.lt(C,v.data))v=v.prev;else if(de.queue.lt(v.data,C))v=v.next;else break;let w=v;if(w==null){let O=de.ints.parent;for(;O!=null;)if(de.ints.lt(C,O.data))O=O.prev;else if(de.ints.lt(O.data,C))O=O.next;else break;let E=O;if(E!=null){let M=C.vertex;M.links.clear(),M.node=null,M.forced=!1,M.next=ke.zpp_pool,ke.zpp_pool=M,C.vertex=E.data.vertex,E.data=C,de.queue.insert(C)}else de.queue.insert(C),de.ints.insert(C);if(z.next.id<z.id){let M=de.inthash,N=z.next.id,Z=z.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,M.add(A)}else{let M=de.inthash,N=z.id,Z=z.next.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,M.add(A)}}else{let O=w.data;if(O.segment!=C.segment||C.segment2!=O.segment2)throw new Error("corner case 2, shiiiit.");let E=C.vertex;E.links.clear(),E.node=null,E.forced=!1,E.next=ke.zpp_pool,ke.zpp_pool=E;let M=C;M.vertex=null,M.segment=M.segment2=null,M.node=null,M.next=Ce.zpp_pool,Ce.zpp_pool=M}}else{let v=C.vertex;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v;let w=C;w.vertex=null,w.segment=w.segment2=null,w.node=null,w.next=Ce.zpp_pool,Ce.zpp_pool=w}}if(f!=null&&f.prev!=null&&!(f.id<f.prev.id?de.inthash.has(f.id,f.prev.id):de.inthash.has(f.prev.id,f.id))){let C=de.sweep.intersection(f,f.prev);if(C!=null)if(C.vertex.x>=de.sweep.sweepx){let v=de.queue.parent;for(;v!=null;)if(de.queue.lt(C,v.data))v=v.prev;else if(de.queue.lt(v.data,C))v=v.next;else break;let w=v;if(w==null){let O=de.ints.parent;for(;O!=null;)if(de.ints.lt(C,O.data))O=O.prev;else if(de.ints.lt(O.data,C))O=O.next;else break;let E=O;if(E!=null){let M=C.vertex;M.links.clear(),M.node=null,M.forced=!1,M.next=ke.zpp_pool,ke.zpp_pool=M,C.vertex=E.data.vertex,E.data=C,de.queue.insert(C)}else de.queue.insert(C),de.ints.insert(C);if(f.id<f.prev.id){let M=de.inthash,N=f.id,Z=f.prev.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,M.add(A)}else{let M=de.inthash,N=f.prev.id,Z=f.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,M.add(A)}}else{let O=w.data;if(O.segment!=C.segment||C.segment2!=O.segment2)throw new Error("corner case 2, shiiiit.");let E=C.vertex;E.links.clear(),E.node=null,E.forced=!1,E.next=ke.zpp_pool,ke.zpp_pool=E;let M=C;M.vertex=null,M.segment=M.segment2=null,M.node=null,M.next=Ce.zpp_pool,Ce.zpp_pool=M}}else{let v=C.vertex;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v;let w=C;w.vertex=null,w.segment=w.segment2=null,w.node=null,w.next=Ce.zpp_pool,Ce.zpp_pool=w}}de.ints.remove(x)}let y=x;y.vertex=null,y.segment=y.segment2=null,y.node=null,y.next=Ce.zpp_pool,Ce.zpp_pool=y}let h=0,u=de.inthash.table.length;for(;h<u;){let x=h++,y=de.inthash.table[x];if(y!=null){for(;y!=null;){let d=y.hnext;y.hnext=null;let _=y;_.next=Te.zpp_pool,Te.zpp_pool=_,y=d}de.inthash.table[x]=null}}for(t==null&&(t=new ys);!de.vertices.empty();)de.clip_polygon(de.vertices,t);return t}static clip_polygon(e,t){let n=null,s=e.first(),i=s,l=s.links.parent,r=l.prev==null?l.next:l.prev,a=l.data,o=r.data,p=s.x-a.x,c=s.y-a.y,h=o.x-s.x;(o.y-s.y)*p-h*c<0&&(o=a);let x=s.x,y=s.y,d;ge.zpp_pool==null?d=new ge:(d=ge.zpp_pool,ge.zpp_pool=d.next,d.next=null),d.forced=!1,d.x=x,d.y=y;let _=d;if(n==null)_.prev=_.next=_;else{let z=n,P=z.next;_.prev=z,_.next=P,P.prev=_,z.next=_}for(n=_,n.forced=s.forced;;){if(s.links.remove(o),o.links.remove(s),o==i){if(s.links.empty()){e.remove(s);let b=s;b.links.clear(),b.node=null,b.forced=!1,b.next=ke.zpp_pool,ke.zpp_pool=b}break}let z=o.x,P=o.y,k;ge.zpp_pool==null?k=new ge:(k=ge.zpp_pool,ge.zpp_pool=k.next,k.next=null),k.forced=!1,k.x=z,k.y=P;let m=k;if(n==null)m.prev=m.next=m;else{let b=n,C=b.next;m.prev=b,m.next=C,C.prev=m,b.next=m}if(n=m,n.forced=o.forced,o.links.singular()){if(s.links.empty()){e.remove(s);let b=s;b.links.clear(),b.node=null,b.forced=!1,b.next=ke.zpp_pool,ke.zpp_pool=b}s=o,o=o.links.parent.data}else{let b=null,C=0;if(!o.links.empty()){let v=o.links.parent;for(;v.prev!=null;)v=v.prev;for(;v!=null;){let w=v.data;if(b==null){b=w;let O=o.x-s.x,E=o.y-s.y,M=w.x-o.x;C=(w.y-o.y)*O-M*E}else{let O=o.x-s.x,E=o.y-s.y,M=w.x-o.x,Z=(w.y-o.y)*O-M*E;if(Z>0&&C<=0)b=w,C=Z;else if(C*Z>=0){let S=o.x-w.x,A=o.y-w.y,F=b.x-o.x;(b.y-o.y)*S-F*A>0&&(b=w,C=Z)}}if(v.next!=null)for(v=v.next;v.prev!=null;)v=v.prev;else{for(;v.parent!=null&&v==v.parent.next;)v=v.parent;v=v.parent}}}if(s.links.empty()){e.remove(s);let v=s;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v}s=o,o=b}}e.remove(i);let f=i;f.links.clear(),f.node=null,f.forced=!1,f.next=ke.zpp_pool,ke.zpp_pool=f,t.add(n)}static isSimple(e){de.sweep==null&&(de.sweep=new Wi,de.inthash=new Bi);let t=de.list_vertices;t==null&&(t=de.list_vertices=new jl);let n=e,s=e;if(n!=null){let d=n;for(;;){let _=d,f=_.x,z=_.y,P;if(ke.zpp_pool==null?P=new ke:(P=ke.zpp_pool,ke.zpp_pool=P.next,P.next=null),P.x=f,P.y=z,t.add(P),d=d.next,d==s)break}}let i=de.list_queue;i==null&&(i=de.list_queue=new Bl);let l=t.head,r=l.elt;for(l=l.next;l!=null;){let d=l.elt,_;Ce.zpp_pool==null?_=new Ce:(_=Ce.zpp_pool,Ce.zpp_pool=_.next,_.next=null),_.vertex=r;let f=i.add(_),z;Ce.zpp_pool==null?z=new Ce:(z=Ce.zpp_pool,Ce.zpp_pool=z.next,z.next=null),z.vertex=d;let P=i.add(z),k;Ce.less_xy(f,P)?(f.type=1,P.type=2,k=Vt.get(r,d)):(f.type=2,P.type=1,k=Vt.get(d,r)),f.segment=P.segment=k,r=d,l=l.next}let a=t.head.elt,o;Ce.zpp_pool==null?o=new Ce:(o=Ce.zpp_pool,Ce.zpp_pool=o.next,o.next=null),o.vertex=r;let p=i.add(o),c;Ce.zpp_pool==null?c=new Ce:(c=Ce.zpp_pool,Ce.zpp_pool=c.next,c.next=null),c.vertex=a;let h=i.add(c),u;Ce.less_xy(p,h)?(p.type=1,h.type=2,u=Vt.get(r,a)):(p.type=2,h.type=1,u=Vt.get(a,r)),p.segment=h.segment=u;let x=i;if(x.head!=null&&x.head.next!=null){let d=x.head,_,f,z,P,k=1,m,b,C;for(;;){for(m=0,f=d,d=null,_=null;f!=null;){for(++m,z=f,b=0,C=k;z!=null&&b<k;)++b,z=z.next;for(;b>0||C>0&&z!=null;)b==0?(P=z,z=z.next,--C):C==0||z==null||Ce.less_xy(f.elt,z.elt)?(P=f,f=f.next,--b):(P=z,z=z.next,--C),_!=null?_.next=P:d=P,_=P;f=z}if(_.next=null,k<<=1,!(m>1))break}x.head=d,x.modified=!0,x.pushmod=!0}let y=!0;for(;i.head!=null;){let d=i.pop_unsafe(),_=d.segment;if(d.type==1){if(de.sweep.add(_),de.sweep.intersect(_,_.next)||de.sweep.intersect(_,_.prev)){y=!1;break}}else if(d.type==2){if(de.sweep.intersect(_.prev,_.next)){y=!1;break}de.sweep.remove(_);let z=_;z.left=z.right=null,z.prev=null,z.node=null,z.vertices.clear(),z.next=Vt.zpp_pool,Vt.zpp_pool=z}let f=d;f.vertex=null,f.segment=f.segment2=null,f.node=null,f.next=Ce.zpp_pool,Ce.zpp_pool=f}for(;i.head!=null;){let d=i.pop_unsafe();if(d.type==2){let f=d.segment;f.left=f.right=null,f.prev=null,f.node=null,f.vertices.clear(),f.next=Vt.zpp_pool,Vt.zpp_pool=f}let _=d;_.vertex=null,_.segment=_.segment2=null,_.node=null,_.next=Ce.zpp_pool,Ce.zpp_pool=_}for(de.sweep.clear();t.head!=null;){let d=t.pop_unsafe();d.links.clear(),d.node=null,d.forced=!1,d.next=ke.zpp_pool,ke.zpp_pool=d}return y}};de.sweep=null,de.inthash=null,de.vertices=null,de.queue=null,de.ints=null,de.list_vertices=null,de.list_queue=null;var ml=de;var Ki=class Ki{constructor(){this.x=0;this.y=0;this.next=null;this.prev=null;this.flag=!1;this.forced=!1}static get(e){let t;return Ki.zpp_pool==null?t=new Ki:(t=Ki.zpp_pool,Ki.zpp_pool=t.next,t.next=null),t.x=e.x,t.y=e.y,t.flag=!1,t}free(){}alloc(){}};Ki.zpp_pool=null;var vn=Ki;var Yi=class Yi{constructor(){this.next=null;this.min=null;this.max=null}static get(e,t){let n;return Yi.zpp_pool==null?n=new Yi:(n=Yi.zpp_pool,Yi.zpp_pool=n.next,n.next=null),n.min=e,n.max=t,n}free(){this.min=null,this.max=null}alloc(){}};Yi.zpp_pool=null;var Le=Yi;var It=class It{static lessval(e,t){return e.x-t.x+(e.y-t.y)}static less(e,t){return e.x-t.x+(e.y-t.y)<0}static distance(e,t,n){let s=n.x-t.x,i=n.y-t.y,l=e.x-t.x,r=e.y-t.y;if(s*s+i*i==0)return l*l+r*r;{let o=(l*s+r*i)/(s*s+i*i);if(o<=0)return l*l+r*r;if(o>=1){let p=e.x-n.x,c=e.y-n.y;return p*p+c*c}else{let p=o;return l-=s*p,r-=i*p,l*l+r*r}}}static simplify(e,t){let n=null,s=null,i=null;t*=t,It.stack==null&&(It.stack=new Il);let l=null,r=null,a=e;for(;;){let p;vn.zpp_pool==null?p=new vn:(p=vn.zpp_pool,vn.zpp_pool=p.next,p.next=null),p.x=a.x,p.y=a.y,p.flag=!1;let c=p;if(c.forced=a.forced,c.forced){if(c.flag=!0,l!=null){let u=It.stack,x;Le.zpp_pool==null?x=new Le:(x=Le.zpp_pool,Le.zpp_pool=x.next,x.next=null),x.min=l,x.max=c,u.add(x)}else r=c;l=c}let h=c;if(n==null?h.prev=h.next=h:(h.prev=n,h.next=n.next,n.next.prev=h,n.next=h),n=h,s==null?(s=n,i=n):(n.x-s.x+(n.y-s.y)<0&&(s=n),i.x-n.x+(i.y-n.y)<0&&(i=n)),a=a.next,a==e)break}if(It.stack.head==null)if(r==null){s.flag=i.flag=!0;let p=It.stack,c;Le.zpp_pool==null?c=new Le:(c=Le.zpp_pool,Le.zpp_pool=c.next,c.next=null),c.min=s,c.max=i,p.add(c);let h=It.stack,u;Le.zpp_pool==null?u=new Le:(u=Le.zpp_pool,Le.zpp_pool=u.next,u.next=null),u.min=i,u.max=s,h.add(u)}else{let p=s.x-r.x+(s.y-r.y);p<0&&(p=-p);let c=i.x-r.x+(i.y-r.y);if(c<0&&(c=-c),p>c){s.flag=r.flag=!0;let h=It.stack,u;Le.zpp_pool==null?u=new Le:(u=Le.zpp_pool,Le.zpp_pool=u.next,u.next=null),u.min=s,u.max=r,h.add(u);let x=It.stack,y;Le.zpp_pool==null?y=new Le:(y=Le.zpp_pool,Le.zpp_pool=y.next,y.next=null),y.min=r,y.max=s,x.add(y)}else{i.flag=r.flag=!0;let h=It.stack,u;Le.zpp_pool==null?u=new Le:(u=Le.zpp_pool,Le.zpp_pool=u.next,u.next=null),u.min=i,u.max=r,h.add(u);let x=It.stack,y;Le.zpp_pool==null?y=new Le:(y=Le.zpp_pool,Le.zpp_pool=y.next,y.next=null),y.min=r,y.max=i,x.add(y)}}else{let p=It.stack,c;Le.zpp_pool==null?c=new Le:(c=Le.zpp_pool,Le.zpp_pool=c.next,c.next=null),c.min=l,c.max=r,p.add(c)}for(;It.stack.head!=null;){let p=It.stack.pop_unsafe(),c=p.min,h=p.max,u=p;u.min=u.max=null,u.next=Le.zpp_pool,Le.zpp_pool=u;let x=t,y=null,d=c.next;for(;d!=h;){let _=It.distance(d,c,h);_>x&&(x=_,y=d),d=d.next}if(y!=null){y.flag=!0;let _=It.stack,f;Le.zpp_pool==null?f=new Le:(f=Le.zpp_pool,Le.zpp_pool=f.next,f.next=null),f.min=c,f.max=y,_.add(f);let z=It.stack,P;Le.zpp_pool==null?P=new Le:(P=Le.zpp_pool,Le.zpp_pool=P.next,P.next=null),P.min=y,P.max=h,z.add(P)}}let o=null;for(;n!=null;){if(n.flag){let p=n.x,c=n.y,h;ge.zpp_pool==null?h=new ge:(h=ge.zpp_pool,ge.zpp_pool=h.next,h.next=null),h.forced=!1,h.x=p,h.y=c;let u=h;o==null?u.prev=u.next=u:(u.prev=o,u.next=o.next,o.next.prev=u,o.next=u),o=u,o.forced=n.forced}if(n!=null&&n.prev==n)n.next=n.prev=null,n.next=vn.zpp_pool,vn.zpp_pool=n,n=null;else{let p=n.next;n.prev.next=n.next,n.next.prev=n.prev,n.next=n.prev=null,n.next=vn.zpp_pool,vn.zpp_pool=n,n=p}}return o}};It.stack=null;var fl=It;var qs=class{constructor(){this.next=null;this.toi=0;this.s1=null;this.s2=null;this.arbiter=null;this.frozen1=!1;this.frozen2=!1;this.slipped=!1;this.failed=!1;this.kinematic=!1;this.c1=new le,this.c2=new le,this.axis=new le}alloc(){this.failed=!1,this.s1=this.s2=null,this.arbiter=null}free(){}};qs.zpp_pool=null;function at(g){return g.type===0||g.type===2}function Dt(g){return g.type===0?g.circle.radius:g.capsule.halfLength+g.capsule.radius}var gn=class{static dynamicSweep(e,t,n,s,i){let l=me();i==null&&(i=!1);let r=e.s1,a=e.s2,o=r.body,p=a.body,c=0,h=0;c=p.velx-o.velx,h=p.vely-o.vely;let u=o.angvel;u<0&&(u=-u);let x=p.angvel;x<0&&(x=-x);let y=r.sweepCoef*u+a.sweepCoef*x;if(!i&&!e.kinematic&&c*c+h*h<l.Config.dynamicSweepLinearThreshold*l.Config.dynamicSweepLinearThreshold&&y<l.Config.dynamicSweepAngularThreshold){e.toi=-1,e.failed=!0;return}let d=e.c1,_=e.c2,f=e.axis,z=n,P=0;for(;;){let Z=z*t,S=Z-o.sweepTime;if(S!=0){o.sweepTime=Z;let Y=S;if(o.posx+=o.velx*Y,o.posy+=o.vely*Y,o.angvel!=0){let X=o.sweep_angvel*S;if(o.rot+=X,X*X>1e-4)o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot);else{let ee=X*X,J=1-.5*ee,L=1-ee*ee/8,D=(J*o.axisx+X*o.axisy)*L;o.axisy=(J*o.axisy-X*o.axisx)*L,o.axisx=D}}}if(r.type==0||r.type===2)r.worldCOMx=o.posx+(o.axisy*r.localCOMx-o.axisx*r.localCOMy),r.worldCOMy=o.posy+(r.localCOMx*o.axisx+r.localCOMy*o.axisy);else{let Y=r.polygon,X=Y.lverts.next,ee=Y.gverts.next;for(;ee!=null;){let H=ee,W=X;X=X.next,H.x=o.posx+(o.axisy*W.x-o.axisx*W.y),H.y=o.posy+(W.x*o.axisx+W.y*o.axisy),ee=ee.next}let J=Y.edges.head,L=Y.gverts.next,D=L;for(L=L.next;L!=null;){let H=L,W=J.elt;J=J.next,W.gnormx=o.axisy*W.lnormx-o.axisx*W.lnormy,W.gnormy=W.lnormx*o.axisx+W.lnormy*o.axisy,W.gprojection=o.posx*W.gnormx+o.posy*W.gnormy+W.lprojection,W.tp0=D.y*W.gnormx-D.x*W.gnormy,W.tp1=H.y*W.gnormx-H.x*W.gnormy,D=H,L=L.next}let I=Y.gverts.next,U=J.elt;J=J.next,U.gnormx=o.axisy*U.lnormx-o.axisx*U.lnormy,U.gnormy=U.lnormx*o.axisx+U.lnormy*o.axisy,U.gprojection=o.posx*U.gnormx+o.posy*U.gnormy+U.lprojection,U.tp0=D.y*U.gnormx-D.x*U.gnormy,U.tp1=I.y*U.gnormx-I.x*U.gnormy}let A=z*t,F=A-p.sweepTime;if(F!=0){p.sweepTime=A;let Y=F;if(p.posx+=p.velx*Y,p.posy+=p.vely*Y,p.angvel!=0){let X=p.sweep_angvel*F;if(p.rot+=X,X*X>1e-4)p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot);else{let ee=X*X,J=1-.5*ee,L=1-ee*ee/8,D=(J*p.axisx+X*p.axisy)*L;p.axisy=(J*p.axisy-X*p.axisx)*L,p.axisx=D}}}if(a.type==0||a.type===2)a.worldCOMx=p.posx+(p.axisy*a.localCOMx-p.axisx*a.localCOMy),a.worldCOMy=p.posy+(a.localCOMx*p.axisx+a.localCOMy*p.axisy);else{let Y=a.polygon,X=Y.lverts.next,ee=Y.gverts.next;for(;ee!=null;){let H=ee,W=X;X=X.next,H.x=p.posx+(p.axisy*W.x-p.axisx*W.y),H.y=p.posy+(W.x*p.axisx+W.y*p.axisy),ee=ee.next}let J=Y.edges.head,L=Y.gverts.next,D=L;for(L=L.next;L!=null;){let H=L,W=J.elt;J=J.next,W.gnormx=p.axisy*W.lnormx-p.axisx*W.lnormy,W.gnormy=W.lnormx*p.axisx+W.lnormy*p.axisy,W.gprojection=p.posx*W.gnormx+p.posy*W.gnormy+W.lprojection,W.tp0=D.y*W.gnormx-D.x*W.gnormy,W.tp1=H.y*W.gnormx-H.x*W.gnormy,D=H,L=L.next}let I=Y.gverts.next,U=J.elt;J=J.next,U.gnormx=p.axisy*U.lnormx-p.axisx*U.lnormy,U.gnormy=U.lnormx*p.axisx+U.lnormy*p.axisy,U.gprojection=p.posx*U.gnormx+p.posy*U.gnormy+U.lprojection,U.tp0=D.y*U.gnormx-D.x*U.gnormy,U.tp1=I.y*U.gnormx-I.x*U.gnormy}let B=r,G=a,q=d,R=_;var k;if(at(B)&&at(G)){let Y=B.circle||B.capsule,X=G.circle||G.capsule,ee=Dt(B),J=Dt(G);var m;let L=0,D=0;L=X.worldCOMx-Y.worldCOMx,D=X.worldCOMy-Y.worldCOMy;let I=Math.sqrt(L*L+D*D);if(m=I-(ee+J),m<1e100){if(I==0)L=1,D=0;else{let W=1/I;L*=W,D*=W}let U=ee;q.x=Y.worldCOMx+L*U,q.y=Y.worldCOMy+D*U;let H=-J;R.x=X.worldCOMx+L*H,R.y=X.worldCOMy+D*H,f.x=L,f.y=D}k=m}else{let Y=!1;if(at(B)&&G.type==1){let X=B;B=G,G=X;let ee=q;q=R,R=ee,Y=!0}if(B.type==1&&at(G)){let X=B.polygon,ee=G.circle||G.capsule,J=Dt(G),L=-1e100,D=null,I=X.edges.head;for(;I!=null;){let U=I.elt,H=U.gnormx*ee.worldCOMx+U.gnormy*ee.worldCOMy-U.gprojection-J;if(H>1e100){L=H;break}H>0?H>L&&(L=H,D=U):L<0&&H>L&&(L=H,D=U),I=I.next}if(L<1e100){let U=D.gp0,H=D.gp1,W=ee.worldCOMy*D.gnormx-ee.worldCOMx*D.gnormy;if(W<=U.y*D.gnormx-U.x*D.gnormy){let ne=0,re=0;ne=ee.worldCOMx-U.x,re=ee.worldCOMy-U.y;let se=Math.sqrt(ne*ne+re*re);if(L=se-J,L<1e100){if(se==0)ne=1,re=0;else{let oe=1/se;ne*=oe,re*=oe}let ie=0;q.x=U.x+ne*ie,q.y=U.y+re*ie;let ae=-J;R.x=ee.worldCOMx+ne*ae,R.y=ee.worldCOMy+re*ae,f.x=ne,f.y=re}}else if(W>=H.y*D.gnormx-H.x*D.gnormy){let ne=0,re=0;ne=ee.worldCOMx-H.x,re=ee.worldCOMy-H.y;let se=Math.sqrt(ne*ne+re*re);if(L=se-J,L<1e100){if(se==0)ne=1,re=0;else{let oe=1/se;ne*=oe,re*=oe}let ie=0;q.x=H.x+ne*ie,q.y=H.y+re*ie;let ae=-J;R.x=ee.worldCOMx+ne*ae,R.y=ee.worldCOMy+re*ae,f.x=ne,f.y=re}}else{let ne=-J;R.x=ee.worldCOMx+D.gnormx*ne,R.y=ee.worldCOMy+D.gnormy*ne;let re=-L;q.x=R.x+D.gnormx*re,q.y=R.y+D.gnormy*re,f.x=D.gnormx,f.y=D.gnormy}}Y&&(f.x=-f.x,f.y=-f.y),k=L}else{let X=B.polygon,ee=G.polygon,J=-1e100,L=null,D=null,I=0,U=X.edges.head;for(;U!=null;){let H=U.elt,W=1e100,ne=ee.gverts.next;for(;ne!=null;){let re=ne,se=H.gnormx*re.x+H.gnormy*re.y;se<W&&(W=se),ne=ne.next}if(W-=H.gprojection,W>1e100){J=W;break}W>0?W>J&&(J=W,L=H,I=1):J<0&&W>J&&(J=W,L=H,I=1),U=U.next}if(J<1e100){let H=ee.edges.head;for(;H!=null;){let W=H.elt,ne=1e100,re=X.gverts.next;for(;re!=null;){let se=re,ie=W.gnormx*se.x+W.gnormy*se.y;ie<ne&&(ne=ie),re=re.next}if(ne-=W.gprojection,ne>1e100){J=ne;break}ne>0?ne>J&&(J=ne,D=W,I=2):J<0&&ne>J&&(J=ne,D=W,I=2),H=H.next}if(J<1e100){var b,C,v;if(I==1)b=X,C=ee,v=L;else{b=ee,C=X,v=D;let se=q;q=R,R=se,Y=!Y}let W=null,ne=1e100,re=C.edges.head;for(;re!=null;){let se=re.elt,ie=v.gnormx*se.gnormx+v.gnormy*se.gnormy;ie<ne&&(ne=ie,W=se),re=re.next}if(Y?(f.x=-v.gnormx,f.y=-v.gnormy):(f.x=v.gnormx,f.y=v.gnormy),J>=0){let se=v.gp0,ie=v.gp1,ae=W.gp0,oe=W.gp1,he=0,pe=0,ce=0,te=0;he=ie.x-se.x,pe=ie.y-se.y,ce=oe.x-ae.x,te=oe.y-ae.y;let ue=1/(he*he+pe*pe),xe=1/(ce*ce+te*te),_e=-(he*(se.x-ae.x)+pe*(se.y-ae.y))*ue,ve=-(he*(se.x-oe.x)+pe*(se.y-oe.y))*ue,Se=-(ce*(ae.x-se.x)+te*(ae.y-se.y))*xe,Ve=-(ce*(ae.x-ie.x)+te*(ae.y-ie.y))*xe;_e<0?_e=0:_e>1&&(_e=1),ve<0?ve=0:ve>1&&(ve=1),Se<0?Se=0:Se>1&&(Se=1),Ve<0?Ve=0:Ve>1&&(Ve=1);let Ke=0,Xe=0,He=_e;Ke=se.x+he*He,Xe=se.y+pe*He;let Re=0,ft=0,vt=ve;Re=se.x+he*vt,ft=se.y+pe*vt;let pt=0,ct=0,rt=Se;pt=ae.x+ce*rt,ct=ae.y+te*rt;let Ye=0,bt=0,Bt=Ve;Ye=ae.x+ce*Bt,bt=ae.y+te*Bt;let Rt=0,kt=0;Rt=Ke-ae.x,kt=Xe-ae.y;let Et=Rt*Rt+kt*kt,bn=0,Kt=0;bn=Re-oe.x,Kt=ft-oe.y;let un=bn*bn+Kt*Kt,ln=0,xn=0;ln=pt-se.x,xn=ct-se.y;let Yt=ln*ln+xn*xn,zn=0,Xt=0;zn=Ye-ie.x,Xt=bt-ie.y;let dn=zn*zn+Xt*Xt,Gt=0,Ht=0,on=null;Et<un?(Gt=Ke,Ht=Xe,on=ae):(Gt=Re,Ht=ft,on=oe,Et=un);let si=0,Fn=0,An=null;if(Yt<dn?(si=pt,Fn=ct,An=se):(si=Ye,Fn=bt,An=ie,Yt=dn),Et<Yt?(q.x=Gt,q.y=Ht,R.x=on.x,R.y=on.y,J=Math.sqrt(Et)):(R.x=si,R.y=Fn,q.x=An.x,q.y=An.y,J=Math.sqrt(Yt)),J!=0){f.x=R.x-q.x,f.y=R.y-q.y;let Vn=1/J;f.x*=Vn,f.y*=Vn,Y&&(f.x=-f.x,f.y=-f.y)}k=J}else{let se=0,ie=0;se=W.gp0.x,ie=W.gp0.y;let ae=0,oe=0;ae=W.gp1.x,oe=W.gp1.y;let he=0,pe=0;he=ae-se,pe=oe-ie;let ce=v.gnormy*se-v.gnormx*ie,te=v.gnormy*ae-v.gnormx*oe,ue=1/(te-ce),xe=(-v.tp1-ce)*ue;if(xe>l.Config.epsilon){let Ve=xe;se+=he*Ve,ie+=pe*Ve}let _e=(-v.tp0-te)*ue;if(_e<-l.Config.epsilon){let Ve=_e;ae+=he*Ve,oe+=pe*Ve}let ve=se*v.gnormx+ie*v.gnormy-v.gprojection,Se=ae*v.gnormx+oe*v.gnormy-v.gprojection;if(ve<Se){R.x=se,R.y=ie;let Ve=-ve;q.x=R.x+v.gnormx*Ve,q.y=R.y+v.gnormy*Ve,k=ve}else{R.x=ae,R.y=oe;let Ve=-Se;q.x=R.x+v.gnormx*Ve,q.y=R.y+v.gnormy*Ve,k=Se}}}else k=1e100}else k=1e100}}let T=k+s,V=c*f.x+h*f.y;if(T<l.Config.distanceThresholdCCD){if(i)break;let Y=0,X=0;Y=d.x-o.posx,X=d.y-o.posy;let ee=0,J=0;ee=_.x-p.posx,J=_.y-p.posy;let L=V-o.sweep_angvel*(f.y*Y-f.x*X)+p.sweep_angvel*(f.y*ee-f.x*J);if(L>0&&(e.slipped=!0),L<=0||T<l.Config.distanceThresholdCCD*.5)break}let K=(y-V)*t;if(K<=0){z=-1;break}let $=T/K;if($<1e-6&&($=1e-6),z+=$,z>=1){z=1;let Y=z*t,X=Y-o.sweepTime;if(X!=0){o.sweepTime=Y;let ne=X;if(o.posx+=o.velx*ne,o.posy+=o.vely*ne,o.angvel!=0){let re=o.sweep_angvel*X;if(o.rot+=re,re*re>1e-4)o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot);else{let se=re*re,ie=1-.5*se,ae=1-se*se/8,oe=(ie*o.axisx+re*o.axisy)*ae;o.axisy=(ie*o.axisy-re*o.axisx)*ae,o.axisx=oe}}}if(r.type==0||r.type===2)r.worldCOMx=o.posx+(o.axisy*r.localCOMx-o.axisx*r.localCOMy),r.worldCOMy=o.posy+(r.localCOMx*o.axisx+r.localCOMy*o.axisy);else{let ne=r.polygon,re=ne.lverts.next,se=ne.gverts.next;for(;se!=null;){let ce=se,te=re;re=re.next,ce.x=o.posx+(o.axisy*te.x-o.axisx*te.y),ce.y=o.posy+(te.x*o.axisx+te.y*o.axisy),se=se.next}let ie=ne.edges.head,ae=ne.gverts.next,oe=ae;for(ae=ae.next;ae!=null;){let ce=ae,te=ie.elt;ie=ie.next,te.gnormx=o.axisy*te.lnormx-o.axisx*te.lnormy,te.gnormy=te.lnormx*o.axisx+te.lnormy*o.axisy,te.gprojection=o.posx*te.gnormx+o.posy*te.gnormy+te.lprojection,te.tp0=oe.y*te.gnormx-oe.x*te.gnormy,te.tp1=ce.y*te.gnormx-ce.x*te.gnormy,oe=ce,ae=ae.next}let he=ne.gverts.next,pe=ie.elt;ie=ie.next,pe.gnormx=o.axisy*pe.lnormx-o.axisx*pe.lnormy,pe.gnormy=pe.lnormx*o.axisx+pe.lnormy*o.axisy,pe.gprojection=o.posx*pe.gnormx+o.posy*pe.gnormy+pe.lprojection,pe.tp0=oe.y*pe.gnormx-oe.x*pe.gnormy,pe.tp1=he.y*pe.gnormx-he.x*pe.gnormy}let ee=z*t,J=ee-p.sweepTime;if(J!=0){p.sweepTime=ee;let ne=J;if(p.posx+=p.velx*ne,p.posy+=p.vely*ne,p.angvel!=0){let re=p.sweep_angvel*J;if(p.rot+=re,re*re>1e-4)p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot);else{let se=re*re,ie=1-.5*se,ae=1-se*se/8,oe=(ie*p.axisx+re*p.axisy)*ae;p.axisy=(ie*p.axisy-re*p.axisx)*ae,p.axisx=oe}}}if(a.type==0||a.type===2)a.worldCOMx=p.posx+(p.axisy*a.localCOMx-p.axisx*a.localCOMy),a.worldCOMy=p.posy+(a.localCOMx*p.axisx+a.localCOMy*p.axisy);else{let ne=a.polygon,re=ne.lverts.next,se=ne.gverts.next;for(;se!=null;){let ce=se,te=re;re=re.next,ce.x=p.posx+(p.axisy*te.x-p.axisx*te.y),ce.y=p.posy+(te.x*p.axisx+te.y*p.axisy),se=se.next}let ie=ne.edges.head,ae=ne.gverts.next,oe=ae;for(ae=ae.next;ae!=null;){let ce=ae,te=ie.elt;ie=ie.next,te.gnormx=p.axisy*te.lnormx-p.axisx*te.lnormy,te.gnormy=te.lnormx*p.axisx+te.lnormy*p.axisy,te.gprojection=p.posx*te.gnormx+p.posy*te.gnormy+te.lprojection,te.tp0=oe.y*te.gnormx-oe.x*te.gnormy,te.tp1=ce.y*te.gnormx-ce.x*te.gnormy,oe=ce,ae=ae.next}let he=ne.gverts.next,pe=ie.elt;ie=ie.next,pe.gnormx=p.axisy*pe.lnormx-p.axisx*pe.lnormy,pe.gnormy=pe.lnormx*p.axisx+pe.lnormy*p.axisy,pe.gprojection=p.posx*pe.gnormx+p.posy*pe.gnormy+pe.lprojection,pe.tp0=oe.y*pe.gnormx-oe.x*pe.gnormy,pe.tp1=he.y*pe.gnormx-he.x*pe.gnormy}let L=r,D=a,I=d,U=_;var w;if(at(L)&&at(D)){let ne=L.circle||L.capsule,re=D.circle||D.capsule,se=Dt(L),ie=Dt(D);var O;let ae=0,oe=0;ae=re.worldCOMx-ne.worldCOMx,oe=re.worldCOMy-ne.worldCOMy;let he=Math.sqrt(ae*ae+oe*oe);if(O=he-(se+ie),O<1e100){if(he==0)ae=1,oe=0;else{let te=1/he;ae*=te,oe*=te}let pe=se;I.x=ne.worldCOMx+ae*pe,I.y=ne.worldCOMy+oe*pe;let ce=-ie;U.x=re.worldCOMx+ae*ce,U.y=re.worldCOMy+oe*ce,f.x=ae,f.y=oe}w=O}else{let ne=!1;if(at(L)&&D.type==1){let re=L;L=D,D=re;let se=I;I=U,U=se,ne=!0}if(L.type==1&&at(D)){let re=L.polygon,se=D.circle||D.capsule,ie=Dt(D),ae=-1e100,oe=null,he=re.edges.head;for(;he!=null;){let pe=he.elt,ce=pe.gnormx*se.worldCOMx+pe.gnormy*se.worldCOMy-pe.gprojection-ie;if(ce>1e100){ae=ce;break}ce>0?ce>ae&&(ae=ce,oe=pe):ae<0&&ce>ae&&(ae=ce,oe=pe),he=he.next}if(ae<1e100){let pe=oe.gp0,ce=oe.gp1,te=se.worldCOMy*oe.gnormx-se.worldCOMx*oe.gnormy;if(te<=pe.y*oe.gnormx-pe.x*oe.gnormy){let ue=0,xe=0;ue=se.worldCOMx-pe.x,xe=se.worldCOMy-pe.y;let _e=Math.sqrt(ue*ue+xe*xe);if(ae=_e-ie,ae<1e100){if(_e==0)ue=1,xe=0;else{let Ve=1/_e;ue*=Ve,xe*=Ve}let ve=0;I.x=pe.x+ue*ve,I.y=pe.y+xe*ve;let Se=-ie;U.x=se.worldCOMx+ue*Se,U.y=se.worldCOMy+xe*Se,f.x=ue,f.y=xe}}else if(te>=ce.y*oe.gnormx-ce.x*oe.gnormy){let ue=0,xe=0;ue=se.worldCOMx-ce.x,xe=se.worldCOMy-ce.y;let _e=Math.sqrt(ue*ue+xe*xe);if(ae=_e-ie,ae<1e100){if(_e==0)ue=1,xe=0;else{let Ve=1/_e;ue*=Ve,xe*=Ve}let ve=0;I.x=ce.x+ue*ve,I.y=ce.y+xe*ve;let Se=-ie;U.x=se.worldCOMx+ue*Se,U.y=se.worldCOMy+xe*Se,f.x=ue,f.y=xe}}else{let ue=-ie;U.x=se.worldCOMx+oe.gnormx*ue,U.y=se.worldCOMy+oe.gnormy*ue;let xe=-ae;I.x=U.x+oe.gnormx*xe,I.y=U.y+oe.gnormy*xe,f.x=oe.gnormx,f.y=oe.gnormy}}ne&&(f.x=-f.x,f.y=-f.y),w=ae}else{let re=L.polygon,se=D.polygon,ie=-1e100,ae=null,oe=null,he=0,pe=re.edges.head;for(;pe!=null;){let ce=pe.elt,te=1e100,ue=se.gverts.next;for(;ue!=null;){let xe=ue,_e=ce.gnormx*xe.x+ce.gnormy*xe.y;_e<te&&(te=_e),ue=ue.next}if(te-=ce.gprojection,te>1e100){ie=te;break}te>0?te>ie&&(ie=te,ae=ce,he=1):ie<0&&te>ie&&(ie=te,ae=ce,he=1),pe=pe.next}if(ie<1e100){let ce=se.edges.head;for(;ce!=null;){let te=ce.elt,ue=1e100,xe=re.gverts.next;for(;xe!=null;){let _e=xe,ve=te.gnormx*_e.x+te.gnormy*_e.y;ve<ue&&(ue=ve),xe=xe.next}if(ue-=te.gprojection,ue>1e100){ie=ue;break}ue>0?ue>ie&&(ie=ue,oe=te,he=2):ie<0&&ue>ie&&(ie=ue,oe=te,he=2),ce=ce.next}if(ie<1e100){var E,M,N;if(he==1)E=re,M=se,N=ae;else{E=se,M=re,N=oe;let _e=I;I=U,U=_e,ne=!ne}let te=null,ue=1e100,xe=M.edges.head;for(;xe!=null;){let _e=xe.elt,ve=N.gnormx*_e.gnormx+N.gnormy*_e.gnormy;ve<ue&&(ue=ve,te=_e),xe=xe.next}if(ne?(f.x=-N.gnormx,f.y=-N.gnormy):(f.x=N.gnormx,f.y=N.gnormy),ie>=0){let _e=N.gp0,ve=N.gp1,Se=te.gp0,Ve=te.gp1,Ke=0,Xe=0,He=0,Re=0;Ke=ve.x-_e.x,Xe=ve.y-_e.y,He=Ve.x-Se.x,Re=Ve.y-Se.y;let ft=1/(Ke*Ke+Xe*Xe),vt=1/(He*He+Re*Re),pt=-(Ke*(_e.x-Se.x)+Xe*(_e.y-Se.y))*ft,ct=-(Ke*(_e.x-Ve.x)+Xe*(_e.y-Ve.y))*ft,rt=-(He*(Se.x-_e.x)+Re*(Se.y-_e.y))*vt,Ye=-(He*(Se.x-ve.x)+Re*(Se.y-ve.y))*vt;pt<0?pt=0:pt>1&&(pt=1),ct<0?ct=0:ct>1&&(ct=1),rt<0?rt=0:rt>1&&(rt=1),Ye<0?Ye=0:Ye>1&&(Ye=1);let bt=0,Bt=0,Rt=pt;bt=_e.x+Ke*Rt,Bt=_e.y+Xe*Rt;let kt=0,Et=0,bn=ct;kt=_e.x+Ke*bn,Et=_e.y+Xe*bn;let Kt=0,un=0,ln=rt;Kt=Se.x+He*ln,un=Se.y+Re*ln;let xn=0,Yt=0,zn=Ye;xn=Se.x+He*zn,Yt=Se.y+Re*zn;let Xt=0,dn=0;Xt=bt-Se.x,dn=Bt-Se.y;let Gt=Xt*Xt+dn*dn,Ht=0,on=0;Ht=kt-Ve.x,on=Et-Ve.y;let si=Ht*Ht+on*on,Fn=0,An=0;Fn=Kt-_e.x,An=un-_e.y;let Vn=Fn*Fn+An*An,Oi=0,Si=0;Oi=xn-ve.x,Si=Yt-ve.y;let Ai=Oi*Oi+Si*Si,us=0,Ol=0,sl=null;Gt<si?(us=bt,Ol=Bt,sl=Se):(us=kt,Ol=Et,sl=Ve,Gt=si);let Sl=0,Al=0,ll=null;if(Vn<Ai?(Sl=Kt,Al=un,ll=_e):(Sl=xn,Al=Yt,ll=ve,Vn=Ai),Gt<Vn?(I.x=us,I.y=Ol,U.x=sl.x,U.y=sl.y,ie=Math.sqrt(Gt)):(U.x=Sl,U.y=Al,I.x=ll.x,I.y=ll.y,ie=Math.sqrt(Vn)),ie!=0){f.x=U.x-I.x,f.y=U.y-I.y;let ql=1/ie;f.x*=ql,f.y*=ql,ne&&(f.x=-f.x,f.y=-f.y)}w=ie}else{let _e=0,ve=0;_e=te.gp0.x,ve=te.gp0.y;let Se=0,Ve=0;Se=te.gp1.x,Ve=te.gp1.y;let Ke=0,Xe=0;Ke=Se-_e,Xe=Ve-ve;let He=N.gnormy*_e-N.gnormx*ve,Re=N.gnormy*Se-N.gnormx*Ve,ft=1/(Re-He),vt=(-N.tp1-He)*ft;if(vt>l.Config.epsilon){let Ye=vt;_e+=Ke*Ye,ve+=Xe*Ye}let pt=(-N.tp0-Re)*ft;if(pt<-l.Config.epsilon){let Ye=pt;Se+=Ke*Ye,Ve+=Xe*Ye}let ct=_e*N.gnormx+ve*N.gnormy-N.gprojection,rt=Se*N.gnormx+Ve*N.gnormy-N.gprojection;if(ct<rt){U.x=_e,U.y=ve;let Ye=-ct;I.x=U.x+N.gnormx*Ye,I.y=U.y+N.gnormy*Ye,w=ct}else{U.x=Se,U.y=Ve;let Ye=-rt;I.x=U.x+N.gnormx*Ye,I.y=U.y+N.gnormy*Ye,w=rt}}}else w=1e100}else w=1e100}}let H=w+s,W=c*f.x+h*f.y;if(H<l.Config.distanceThresholdCCD){if(i)break;let ne=0,re=0;ne=d.x-o.posx,re=d.y-o.posy;let se=0,ie=0;se=_.x-p.posx,ie=_.y-p.posy;let ae=W-o.sweep_angvel*(f.y*ne-f.x*re)+p.sweep_angvel*(f.y*se-f.x*ie);if(ae>0&&(e.slipped=!0),ae<=0||H<l.Config.distanceThresholdCCD*.5)break}z=-1;break}if(++P>=40){T>s&&(e.failed=!0);break}}e.toi=z}static staticSweep(e,t,n,s){let i=me(),l=e.s1,r=e.s2,a=l.body,o=r.body,p=0,c=0;p=-a.velx,c=-a.vely;let h=a.sweep_angvel;h<0&&(h=-h);let u=l.sweepCoef*h,x=e.c1,y=e.c2,d=e.axis,_=n,f=0;for(;;){let M=_*t,N=M-a.sweepTime;if(N!=0){a.sweepTime=M;let T=N;if(a.posx+=a.velx*T,a.posy+=a.vely*T,a.angvel!=0){let V=a.sweep_angvel*N;if(a.rot+=V,V*V>1e-4)a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot);else{let K=V*V,$=1-.5*K,Y=1-K*K/8,X=($*a.axisx+V*a.axisy)*Y;a.axisy=($*a.axisy-V*a.axisx)*Y,a.axisx=X}}}if(l.type==0||l.type===2)l.worldCOMx=a.posx+(a.axisy*l.localCOMx-a.axisx*l.localCOMy),l.worldCOMy=a.posy+(l.localCOMx*a.axisx+l.localCOMy*a.axisy);else{let T=l.polygon,V=T.lverts.next,K=T.gverts.next;for(;K!=null;){let L=K,D=V;V=V.next,L.x=a.posx+(a.axisy*D.x-a.axisx*D.y),L.y=a.posy+(D.x*a.axisx+D.y*a.axisy),K=K.next}let $=T.edges.head,Y=T.gverts.next,X=Y;for(Y=Y.next;Y!=null;){let L=Y,D=$.elt;$=$.next,D.gnormx=a.axisy*D.lnormx-a.axisx*D.lnormy,D.gnormy=D.lnormx*a.axisx+D.lnormy*a.axisy,D.gprojection=a.posx*D.gnormx+a.posy*D.gnormy+D.lprojection,D.tp0=X.y*D.gnormx-X.x*D.gnormy,D.tp1=L.y*D.gnormx-L.x*D.gnormy,X=L,Y=Y.next}let ee=T.gverts.next,J=$.elt;$=$.next,J.gnormx=a.axisy*J.lnormx-a.axisx*J.lnormy,J.gnormy=J.lnormx*a.axisx+J.lnormy*a.axisy,J.gprojection=a.posx*J.gnormx+a.posy*J.gnormy+J.lprojection,J.tp0=X.y*J.gnormx-X.x*J.gnormy,J.tp1=ee.y*J.gnormx-ee.x*J.gnormy}let Z=l,S=r,A=x,F=y;var z;if(at(Z)&&at(S)){let T=Z.circle||Z.capsule,V=S.circle||S.capsule,K=Dt(Z),$=Dt(S);var P;let Y=0,X=0;Y=V.worldCOMx-T.worldCOMx,X=V.worldCOMy-T.worldCOMy;let ee=Math.sqrt(Y*Y+X*X);if(P=ee-(T.radius+V.radius),P<1e100){if(ee==0)Y=1,X=0;else{let D=1/ee;Y*=D,X*=D}let J=T.radius;A.x=T.worldCOMx+Y*J,A.y=T.worldCOMy+X*J;let L=-V.radius;F.x=V.worldCOMx+Y*L,F.y=V.worldCOMy+X*L,d.x=Y,d.y=X}z=P}else{let T=!1;if(at(Z)&&S.type==1){let V=Z;Z=S,S=V;let K=A;A=F,F=K,T=!0}if(Z.type==1&&at(S)){let V=Z.polygon,K=S.circle||S.capsule,$=Dt(S),Y=-1e100,X=null,ee=V.edges.head;for(;ee!=null;){let J=ee.elt,L=J.gnormx*K.worldCOMx+J.gnormy*K.worldCOMy-J.gprojection-$;if(L>1e100){Y=L;break}L>0?L>Y&&(Y=L,X=J):Y<0&&L>Y&&(Y=L,X=J),ee=ee.next}if(Y<1e100){let J=X.gp0,L=X.gp1,D=K.worldCOMy*X.gnormx-K.worldCOMx*X.gnormy;if(D<=J.y*X.gnormx-J.x*X.gnormy){let I=0,U=0;I=K.worldCOMx-J.x,U=K.worldCOMy-J.y;let H=Math.sqrt(I*I+U*U);if(Y=H-$,Y<1e100){if(H==0)I=1,U=0;else{let re=1/H;I*=re,U*=re}let W=0;A.x=J.x+I*W,A.y=J.y+U*W;let ne=-$;F.x=K.worldCOMx+I*ne,F.y=K.worldCOMy+U*ne,d.x=I,d.y=U}}else if(D>=L.y*X.gnormx-L.x*X.gnormy){let I=0,U=0;I=K.worldCOMx-L.x,U=K.worldCOMy-L.y;let H=Math.sqrt(I*I+U*U);if(Y=H-$,Y<1e100){if(H==0)I=1,U=0;else{let re=1/H;I*=re,U*=re}let W=0;A.x=L.x+I*W,A.y=L.y+U*W;let ne=-$;F.x=K.worldCOMx+I*ne,F.y=K.worldCOMy+U*ne,d.x=I,d.y=U}}else{let I=-$;F.x=K.worldCOMx+X.gnormx*I,F.y=K.worldCOMy+X.gnormy*I;let U=-Y;A.x=F.x+X.gnormx*U,A.y=F.y+X.gnormy*U,d.x=X.gnormx,d.y=X.gnormy}}T&&(d.x=-d.x,d.y=-d.y),z=Y}else{let V=Z.polygon,K=S.polygon,$=-1e100,Y=null,X=null,ee=0,J=V.edges.head;for(;J!=null;){let L=J.elt,D=1e100,I=K.gverts.next;for(;I!=null;){let U=I,H=L.gnormx*U.x+L.gnormy*U.y;H<D&&(D=H),I=I.next}if(D-=L.gprojection,D>1e100){$=D;break}D>0?D>$&&($=D,Y=L,ee=1):$<0&&D>$&&($=D,Y=L,ee=1),J=J.next}if($<1e100){let L=K.edges.head;for(;L!=null;){let D=L.elt,I=1e100,U=V.gverts.next;for(;U!=null;){let H=U,W=D.gnormx*H.x+D.gnormy*H.y;W<I&&(I=W),U=U.next}if(I-=D.gprojection,I>1e100){$=I;break}I>0?I>$&&($=I,X=D,ee=2):$<0&&I>$&&($=I,X=D,ee=2),L=L.next}if($<1e100){var k,m,b;if(ee==1)k=V,m=K,b=Y;else{k=K,m=V,b=X;let H=A;A=F,F=H,T=!T}let D=null,I=1e100,U=m.edges.head;for(;U!=null;){let H=U.elt,W=b.gnormx*H.gnormx+b.gnormy*H.gnormy;W<I&&(I=W,D=H),U=U.next}if(T?(d.x=-b.gnormx,d.y=-b.gnormy):(d.x=b.gnormx,d.y=b.gnormy),$>=0){let H=b.gp0,W=b.gp1,ne=D.gp0,re=D.gp1,se=0,ie=0,ae=0,oe=0;se=W.x-H.x,ie=W.y-H.y,ae=re.x-ne.x,oe=re.y-ne.y;let he=1/(se*se+ie*ie),pe=1/(ae*ae+oe*oe),ce=-(se*(H.x-ne.x)+ie*(H.y-ne.y))*he,te=-(se*(H.x-re.x)+ie*(H.y-re.y))*he,ue=-(ae*(ne.x-H.x)+oe*(ne.y-H.y))*pe,xe=-(ae*(ne.x-W.x)+oe*(ne.y-W.y))*pe;ce<0?ce=0:ce>1&&(ce=1),te<0?te=0:te>1&&(te=1),ue<0?ue=0:ue>1&&(ue=1),xe<0?xe=0:xe>1&&(xe=1);let _e=0,ve=0,Se=ce;_e=H.x+se*Se,ve=H.y+ie*Se;let Ve=0,Ke=0,Xe=te;Ve=H.x+se*Xe,Ke=H.y+ie*Xe;let He=0,Re=0,ft=ue;He=ne.x+ae*ft,Re=ne.y+oe*ft;let vt=0,pt=0,ct=xe;vt=ne.x+ae*ct,pt=ne.y+oe*ct;let rt=0,Ye=0;rt=_e-ne.x,Ye=ve-ne.y;let bt=rt*rt+Ye*Ye,Bt=0,Rt=0;Bt=Ve-re.x,Rt=Ke-re.y;let kt=Bt*Bt+Rt*Rt,Et=0,bn=0;Et=He-H.x,bn=Re-H.y;let Kt=Et*Et+bn*bn,un=0,ln=0;un=vt-W.x,ln=pt-W.y;let xn=un*un+ln*ln,Yt=0,zn=0,Xt=null;bt<kt?(Yt=_e,zn=ve,Xt=ne):(Yt=Ve,zn=Ke,Xt=re,bt=kt);let dn=0,Gt=0,Ht=null;if(Kt<xn?(dn=He,Gt=Re,Ht=H):(dn=vt,Gt=pt,Ht=W,Kt=xn),bt<Kt?(A.x=Yt,A.y=zn,F.x=Xt.x,F.y=Xt.y,$=Math.sqrt(bt)):(F.x=dn,F.y=Gt,A.x=Ht.x,A.y=Ht.y,$=Math.sqrt(Kt)),$!=0){d.x=F.x-A.x,d.y=F.y-A.y;let on=1/$;d.x*=on,d.y*=on,T&&(d.x=-d.x,d.y=-d.y)}z=$}else{let H=0,W=0;H=D.gp0.x,W=D.gp0.y;let ne=0,re=0;ne=D.gp1.x,re=D.gp1.y;let se=0,ie=0;se=ne-H,ie=re-W;let ae=b.gnormy*H-b.gnormx*W,oe=b.gnormy*ne-b.gnormx*re,he=1/(oe-ae),pe=(-b.tp1-ae)*he;if(pe>i.Config.epsilon){let xe=pe;H+=se*xe,W+=ie*xe}let ce=(-b.tp0-oe)*he;if(ce<-i.Config.epsilon){let xe=ce;ne+=se*xe,re+=ie*xe}let te=H*b.gnormx+W*b.gnormy-b.gprojection,ue=ne*b.gnormx+re*b.gnormy-b.gprojection;if(te<ue){F.x=H,F.y=W;let xe=-te;A.x=F.x+b.gnormx*xe,A.y=F.y+b.gnormy*xe,z=te}else{F.x=ne,F.y=re;let xe=-ue;A.x=F.x+b.gnormx*xe,A.y=F.y+b.gnormy*xe,z=ue}}}else z=1e100}else z=1e100}}let B=z+s,G=p*d.x+c*d.y;if(B<i.Config.distanceThresholdCCD){let T=0,V=0;T=x.x-a.posx,V=x.y-a.posy;let K=G-a.sweep_angvel*(d.y*T-d.x*V);if(K>0&&(e.slipped=!0),K<=0||B<i.Config.distanceThresholdCCD*.5)break}let q=(u-G)*t;if(q<=0){_=-1;break}let R=B/q;if(R<1e-6&&(R=1e-6),_+=R,_>=1){_=1;let T=_*t,V=T-a.sweepTime;if(V!=0){a.sweepTime=T;let L=V;if(a.posx+=a.velx*L,a.posy+=a.vely*L,a.angvel!=0){let D=a.sweep_angvel*V;if(a.rot+=D,D*D>1e-4)a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot);else{let I=D*D,U=1-.5*I,H=1-I*I/8,W=(U*a.axisx+D*a.axisy)*H;a.axisy=(U*a.axisy-D*a.axisx)*H,a.axisx=W}}}if(l.type==0||l.type===2)l.worldCOMx=a.posx+(a.axisy*l.localCOMx-a.axisx*l.localCOMy),l.worldCOMy=a.posy+(l.localCOMx*a.axisx+l.localCOMy*a.axisy);else{let L=l.polygon,D=L.lverts.next,I=L.gverts.next;for(;I!=null;){let se=I,ie=D;D=D.next,se.x=a.posx+(a.axisy*ie.x-a.axisx*ie.y),se.y=a.posy+(ie.x*a.axisx+ie.y*a.axisy),I=I.next}let U=L.edges.head,H=L.gverts.next,W=H;for(H=H.next;H!=null;){let se=H,ie=U.elt;U=U.next,ie.gnormx=a.axisy*ie.lnormx-a.axisx*ie.lnormy,ie.gnormy=ie.lnormx*a.axisx+ie.lnormy*a.axisy,ie.gprojection=a.posx*ie.gnormx+a.posy*ie.gnormy+ie.lprojection,ie.tp0=W.y*ie.gnormx-W.x*ie.gnormy,ie.tp1=se.y*ie.gnormx-se.x*ie.gnormy,W=se,H=H.next}let ne=L.gverts.next,re=U.elt;U=U.next,re.gnormx=a.axisy*re.lnormx-a.axisx*re.lnormy,re.gnormy=re.lnormx*a.axisx+re.lnormy*a.axisy,re.gprojection=a.posx*re.gnormx+a.posy*re.gnormy+re.lprojection,re.tp0=W.y*re.gnormx-W.x*re.gnormy,re.tp1=ne.y*re.gnormx-ne.x*re.gnormy}let K=l,$=r,Y=x,X=y;var C;if(at(K)&&at($)){let L=K.circle||K.capsule,D=$.circle||$.capsule,I=Dt(K),U=Dt($);var v;let H=0,W=0;H=D.worldCOMx-L.worldCOMx,W=D.worldCOMy-L.worldCOMy;let ne=Math.sqrt(H*H+W*W);if(v=ne-(I+U),v<1e100){if(ne==0)H=1,W=0;else{let ie=1/ne;H*=ie,W*=ie}let re=I;Y.x=L.worldCOMx+H*re,Y.y=L.worldCOMy+W*re;let se=-U;X.x=D.worldCOMx+H*se,X.y=D.worldCOMy+W*se,d.x=H,d.y=W}C=v}else{let L=!1;if(at(K)&&$.type==1){let D=K;K=$,$=D;let I=Y;Y=X,X=I,L=!0}if(K.type==1&&at($)){let D=K.polygon,I=$.circle||$.capsule,U=Dt($),H=-1e100,W=null,ne=D.edges.head;for(;ne!=null;){let re=ne.elt,se=re.gnormx*I.worldCOMx+re.gnormy*I.worldCOMy-re.gprojection-U;if(se>1e100){H=se;break}se>0?se>H&&(H=se,W=re):H<0&&se>H&&(H=se,W=re),ne=ne.next}if(H<1e100){let re=W.gp0,se=W.gp1,ie=I.worldCOMy*W.gnormx-I.worldCOMx*W.gnormy;if(ie<=re.y*W.gnormx-re.x*W.gnormy){let ae=0,oe=0;ae=I.worldCOMx-re.x,oe=I.worldCOMy-re.y;let he=Math.sqrt(ae*ae+oe*oe);if(H=he-U,H<1e100){if(he==0)ae=1,oe=0;else{let te=1/he;ae*=te,oe*=te}let pe=0;Y.x=re.x+ae*pe,Y.y=re.y+oe*pe;let ce=-U;X.x=I.worldCOMx+ae*ce,X.y=I.worldCOMy+oe*ce,d.x=ae,d.y=oe}}else if(ie>=se.y*W.gnormx-se.x*W.gnormy){let ae=0,oe=0;ae=I.worldCOMx-se.x,oe=I.worldCOMy-se.y;let he=Math.sqrt(ae*ae+oe*oe);if(H=he-U,H<1e100){if(he==0)ae=1,oe=0;else{let te=1/he;ae*=te,oe*=te}let pe=0;Y.x=se.x+ae*pe,Y.y=se.y+oe*pe;let ce=-U;X.x=I.worldCOMx+ae*ce,X.y=I.worldCOMy+oe*ce,d.x=ae,d.y=oe}}else{let ae=-U;X.x=I.worldCOMx+W.gnormx*ae,X.y=I.worldCOMy+W.gnormy*ae;let oe=-H;Y.x=X.x+W.gnormx*oe,Y.y=X.y+W.gnormy*oe,d.x=W.gnormx,d.y=W.gnormy}}L&&(d.x=-d.x,d.y=-d.y),C=H}else{let D=K.polygon,I=$.polygon,U=-1e100,H=null,W=null,ne=0,re=D.edges.head;for(;re!=null;){let se=re.elt,ie=1e100,ae=I.gverts.next;for(;ae!=null;){let oe=ae,he=se.gnormx*oe.x+se.gnormy*oe.y;he<ie&&(ie=he),ae=ae.next}if(ie-=se.gprojection,ie>1e100){U=ie;break}ie>0?ie>U&&(U=ie,H=se,ne=1):U<0&&ie>U&&(U=ie,H=se,ne=1),re=re.next}if(U<1e100){let se=I.edges.head;for(;se!=null;){let ie=se.elt,ae=1e100,oe=D.gverts.next;for(;oe!=null;){let he=oe,pe=ie.gnormx*he.x+ie.gnormy*he.y;pe<ae&&(ae=pe),oe=oe.next}if(ae-=ie.gprojection,ae>1e100){U=ae;break}ae>0?ae>U&&(U=ae,W=ie,ne=2):U<0&&ae>U&&(U=ae,W=ie,ne=2),se=se.next}if(U<1e100){var w,O,E;if(ne==1)w=D,O=I,E=H;else{w=I,O=D,E=W;let he=Y;Y=X,X=he,L=!L}let ie=null,ae=1e100,oe=O.edges.head;for(;oe!=null;){let he=oe.elt,pe=E.gnormx*he.gnormx+E.gnormy*he.gnormy;pe<ae&&(ae=pe,ie=he),oe=oe.next}if(L?(d.x=-E.gnormx,d.y=-E.gnormy):(d.x=E.gnormx,d.y=E.gnormy),U>=0){let he=E.gp0,pe=E.gp1,ce=ie.gp0,te=ie.gp1,ue=0,xe=0,_e=0,ve=0;ue=pe.x-he.x,xe=pe.y-he.y,_e=te.x-ce.x,ve=te.y-ce.y;let Se=1/(ue*ue+xe*xe),Ve=1/(_e*_e+ve*ve),Ke=-(ue*(he.x-ce.x)+xe*(he.y-ce.y))*Se,Xe=-(ue*(he.x-te.x)+xe*(he.y-te.y))*Se,He=-(_e*(ce.x-he.x)+ve*(ce.y-he.y))*Ve,Re=-(_e*(ce.x-pe.x)+ve*(ce.y-pe.y))*Ve;Ke<0?Ke=0:Ke>1&&(Ke=1),Xe<0?Xe=0:Xe>1&&(Xe=1),He<0?He=0:He>1&&(He=1),Re<0?Re=0:Re>1&&(Re=1);let ft=0,vt=0,pt=Ke;ft=he.x+ue*pt,vt=he.y+xe*pt;let ct=0,rt=0,Ye=Xe;ct=he.x+ue*Ye,rt=he.y+xe*Ye;let bt=0,Bt=0,Rt=He;bt=ce.x+_e*Rt,Bt=ce.y+ve*Rt;let kt=0,Et=0,bn=Re;kt=ce.x+_e*bn,Et=ce.y+ve*bn;let Kt=0,un=0;Kt=ft-ce.x,un=vt-ce.y;let ln=Kt*Kt+un*un,xn=0,Yt=0;xn=ct-te.x,Yt=rt-te.y;let zn=xn*xn+Yt*Yt,Xt=0,dn=0;Xt=bt-he.x,dn=Bt-he.y;let Gt=Xt*Xt+dn*dn,Ht=0,on=0;Ht=kt-pe.x,on=Et-pe.y;let si=Ht*Ht+on*on,Fn=0,An=0,Vn=null;ln<zn?(Fn=ft,An=vt,Vn=ce):(Fn=ct,An=rt,Vn=te,ln=zn);let Oi=0,Si=0,Ai=null;if(Gt<si?(Oi=bt,Si=Bt,Ai=he):(Oi=kt,Si=Et,Ai=pe,Gt=si),ln<Gt?(Y.x=Fn,Y.y=An,X.x=Vn.x,X.y=Vn.y,U=Math.sqrt(ln)):(X.x=Oi,X.y=Si,Y.x=Ai.x,Y.y=Ai.y,U=Math.sqrt(Gt)),U!=0){d.x=X.x-Y.x,d.y=X.y-Y.y;let us=1/U;d.x*=us,d.y*=us,L&&(d.x=-d.x,d.y=-d.y)}C=U}else{let he=0,pe=0;he=ie.gp0.x,pe=ie.gp0.y;let ce=0,te=0;ce=ie.gp1.x,te=ie.gp1.y;let ue=0,xe=0;ue=ce-he,xe=te-pe;let _e=E.gnormy*he-E.gnormx*pe,ve=E.gnormy*ce-E.gnormx*te,Se=1/(ve-_e),Ve=(-E.tp1-_e)*Se;if(Ve>i.Config.epsilon){let Re=Ve;he+=ue*Re,pe+=xe*Re}let Ke=(-E.tp0-ve)*Se;if(Ke<-i.Config.epsilon){let Re=Ke;ce+=ue*Re,te+=xe*Re}let Xe=he*E.gnormx+pe*E.gnormy-E.gprojection,He=ce*E.gnormx+te*E.gnormy-E.gprojection;if(Xe<He){X.x=he,X.y=pe;let Re=-Xe;Y.x=X.x+E.gnormx*Re,Y.y=X.y+E.gnormy*Re,C=Xe}else{X.x=ce,X.y=te;let Re=-He;Y.x=X.x+E.gnormx*Re,Y.y=X.y+E.gnormy*Re,C=He}}}else C=1e100}else C=1e100}}let ee=C+s,J=p*d.x+c*d.y;if(ee<i.Config.distanceThresholdCCD){let L=0,D=0;L=x.x-a.posx,D=x.y-a.posy;let I=J-a.sweep_angvel*(d.y*L-d.x*D);if(I>0&&(e.slipped=!0),I<=0||ee<i.Config.distanceThresholdCCD*.5)break}_=-1;break}if(++f>=40){B>s&&(e.failed=!0);break}}e.toi=_}static distanceBody(e,t,n,s){let i=me(),l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1;let r;le.zpp_pool==null?r=new le:(r=le.zpp_pool,le.zpp_pool=r.next,r.next=null),r.weak=!1;let a;le.zpp_pool==null?a=new le:(a=le.zpp_pool,le.zpp_pool=a.next,a.next=null),a.weak=!1;let o=1e100,p=e.shapes.head;for(;p!=null;){let z=p.elt,P=t.shapes.head;for(;P!=null;){let k=P.elt,m=z,b=k,C=l,v=r,w=o;w==null&&(w=1e100);var c;if(at(m)&&at(b)){let O=m.circle||m.capsule,E=b.circle||b.capsule,M=Dt(m),N=Dt(b);var h;let Z=0,S=0;Z=E.worldCOMx-O.worldCOMx,S=E.worldCOMy-O.worldCOMy;let A=Math.sqrt(Z*Z+S*S);if(h=A-(M+N),h<w){if(A==0)Z=1,S=0;else{let G=1/A;Z*=G,S*=G}let F=M;C.x=O.worldCOMx+Z*F,C.y=O.worldCOMy+S*F;let B=-N;v.x=E.worldCOMx+Z*B,v.y=E.worldCOMy+S*B,a.x=Z,a.y=S}c=h}else{let O=!1;if(at(m)&&b.type==1){let E=m;m=b,b=E;let M=C;C=v,v=M,O=!0}if(m.type==1&&at(b)){let E=m.polygon,M=b.circle||b.capsule,N=Dt(b),Z=-1e100,S=null,A=E.edges.head;for(;A!=null;){let F=A.elt,B=F.gnormx*M.worldCOMx+F.gnormy*M.worldCOMy-F.gprojection-N;if(B>w){Z=B;break}B>0?B>Z&&(Z=B,S=F):Z<0&&B>Z&&(Z=B,S=F),A=A.next}if(Z<w){let F=S.gp0,B=S.gp1,G=M.worldCOMy*S.gnormx-M.worldCOMx*S.gnormy;if(G<=F.y*S.gnormx-F.x*S.gnormy){let q=0,R=0;q=M.worldCOMx-F.x,R=M.worldCOMy-F.y;let T=Math.sqrt(q*q+R*R);if(Z=T-N,Z<w){if(T==0)q=1,R=0;else{let $=1/T;q*=$,R*=$}let V=0;C.x=F.x+q*V,C.y=F.y+R*V;let K=-N;v.x=M.worldCOMx+q*K,v.y=M.worldCOMy+R*K,a.x=q,a.y=R}}else if(G>=B.y*S.gnormx-B.x*S.gnormy){let q=0,R=0;q=M.worldCOMx-B.x,R=M.worldCOMy-B.y;let T=Math.sqrt(q*q+R*R);if(Z=T-N,Z<w){if(T==0)q=1,R=0;else{let $=1/T;q*=$,R*=$}let V=0;C.x=B.x+q*V,C.y=B.y+R*V;let K=-N;v.x=M.worldCOMx+q*K,v.y=M.worldCOMy+R*K,a.x=q,a.y=R}}else{let q=-N;v.x=M.worldCOMx+S.gnormx*q,v.y=M.worldCOMy+S.gnormy*q;let R=-Z;C.x=v.x+S.gnormx*R,C.y=v.y+S.gnormy*R,a.x=S.gnormx,a.y=S.gnormy}}O&&(a.x=-a.x,a.y=-a.y),c=Z}else{let E=m.polygon,M=b.polygon,N=-1e100,Z=null,S=null,A=0,F=E.edges.head;for(;F!=null;){let B=F.elt,G=1e100,q=M.gverts.next;for(;q!=null;){let R=q,T=B.gnormx*R.x+B.gnormy*R.y;T<G&&(G=T),q=q.next}if(G-=B.gprojection,G>w){N=G;break}G>0?G>N&&(N=G,Z=B,A=1):N<0&&G>N&&(N=G,Z=B,A=1),F=F.next}if(N<w){let B=M.edges.head;for(;B!=null;){let G=B.elt,q=1e100,R=E.gverts.next;for(;R!=null;){let T=R,V=G.gnormx*T.x+G.gnormy*T.y;V<q&&(q=V),R=R.next}if(q-=G.gprojection,q>w){N=q;break}q>0?q>N&&(N=q,S=G,A=2):N<0&&q>N&&(N=q,S=G,A=2),B=B.next}if(N<w){var u,x,y;if(A==1)u=E,x=M,y=Z;else{u=M,x=E,y=S;let T=C;C=v,v=T,O=!O}let G=null,q=1e100,R=x.edges.head;for(;R!=null;){let T=R.elt,V=y.gnormx*T.gnormx+y.gnormy*T.gnormy;V<q&&(q=V,G=T),R=R.next}if(O?(a.x=-y.gnormx,a.y=-y.gnormy):(a.x=y.gnormx,a.y=y.gnormy),N>=0){let T=y.gp0,V=y.gp1,K=G.gp0,$=G.gp1,Y=0,X=0,ee=0,J=0;Y=V.x-T.x,X=V.y-T.y,ee=$.x-K.x,J=$.y-K.y;let L=1/(Y*Y+X*X),D=1/(ee*ee+J*J),I=-(Y*(T.x-K.x)+X*(T.y-K.y))*L,U=-(Y*(T.x-$.x)+X*(T.y-$.y))*L,H=-(ee*(K.x-T.x)+J*(K.y-T.y))*D,W=-(ee*(K.x-V.x)+J*(K.y-V.y))*D;I<0?I=0:I>1&&(I=1),U<0?U=0:U>1&&(U=1),H<0?H=0:H>1&&(H=1),W<0?W=0:W>1&&(W=1);let ne=0,re=0,se=I;ne=T.x+Y*se,re=T.y+X*se;let ie=0,ae=0,oe=U;ie=T.x+Y*oe,ae=T.y+X*oe;let he=0,pe=0,ce=H;he=K.x+ee*ce,pe=K.y+J*ce;let te=0,ue=0,xe=W;te=K.x+ee*xe,ue=K.y+J*xe;let _e=0,ve=0;_e=ne-K.x,ve=re-K.y;let Se=_e*_e+ve*ve,Ve=0,Ke=0;Ve=ie-$.x,Ke=ae-$.y;let Xe=Ve*Ve+Ke*Ke,He=0,Re=0;He=he-T.x,Re=pe-T.y;let ft=He*He+Re*Re,vt=0,pt=0;vt=te-V.x,pt=ue-V.y;let ct=vt*vt+pt*pt,rt=0,Ye=0,bt=null;Se<Xe?(rt=ne,Ye=re,bt=K):(rt=ie,Ye=ae,bt=$,Se=Xe);let Bt=0,Rt=0,kt=null;if(ft<ct?(Bt=he,Rt=pe,kt=T):(Bt=te,Rt=ue,kt=V,ft=ct),Se<ft?(C.x=rt,C.y=Ye,v.x=bt.x,v.y=bt.y,N=Math.sqrt(Se)):(v.x=Bt,v.y=Rt,C.x=kt.x,C.y=kt.y,N=Math.sqrt(ft)),N!=0){a.x=v.x-C.x,a.y=v.y-C.y;let Et=1/N;a.x*=Et,a.y*=Et,O&&(a.x=-a.x,a.y=-a.y)}c=N}else{let T=0,V=0;T=G.gp0.x,V=G.gp0.y;let K=0,$=0;K=G.gp1.x,$=G.gp1.y;let Y=0,X=0;Y=K-T,X=$-V;let ee=y.gnormy*T-y.gnormx*V,J=y.gnormy*K-y.gnormx*$,L=1/(J-ee),D=(-y.tp1-ee)*L;if(D>i.Config.epsilon){let W=D;T+=Y*W,V+=X*W}let I=(-y.tp0-J)*L;if(I<-i.Config.epsilon){let W=I;K+=Y*W,$+=X*W}let U=T*y.gnormx+V*y.gnormy-y.gprojection,H=K*y.gnormx+$*y.gnormy-y.gprojection;if(U<H){v.x=T,v.y=V;let W=-U;C.x=v.x+y.gnormx*W,C.y=v.y+y.gnormy*W,c=U}else{v.x=K,v.y=$;let W=-H;C.x=v.x+y.gnormx*W,C.y=v.y+y.gnormy*W,c=H}}}else c=w}else c=w}}c<o&&(o=c,n.x=l.x,n.y=l.y,s.x=r.x,s.y=r.y),P=P.next}p=p.next}let d=l;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d._isimmutable=null,d._validate=null,d._invalidate=null,d.next=le.zpp_pool,le.zpp_pool=d;let _=r;_.outer!=null&&(_.outer.zpp_inner=null,_.outer=null),_._isimmutable=null,_._validate=null,_._invalidate=null,_.next=le.zpp_pool,le.zpp_pool=_;let f=a;return f.outer!=null&&(f.outer.zpp_inner=null,f.outer=null),f._isimmutable=null,f._validate=null,f._invalidate=null,f.next=le.zpp_pool,le.zpp_pool=f,o}static distance(e,t,n,s,i,l){let r=me();if(l==null&&(l=1e100),at(e)&&at(t)){let a=e.circle||e.capsule,o=t.circle||t.capsule,p=Dt(e),c=Dt(t),h,u=0,x=0;u=o.worldCOMx-a.worldCOMx,x=o.worldCOMy-a.worldCOMy;let y=Math.sqrt(u*u+x*x);if(h=y-(p+c),h<l){if(y==0)u=1,x=0;else{let f=1/y;u*=f,x*=f}let d=p;n.x=a.worldCOMx+u*d,n.y=a.worldCOMy+x*d;let _=-c;s.x=o.worldCOMx+u*_,s.y=o.worldCOMy+x*_,i.x=u,i.y=x}return h}else{let a=!1;if(at(e)&&t.type==1){let o=e;e=t,t=o;let p=n;n=s,s=p,a=!0}if(e.type==1&&at(t)){let o=e.polygon,p=t.circle||t.capsule,c=Dt(t),h=-1e100,u=null,x=o.edges.head;for(;x!=null;){let y=x.elt,d=y.gnormx*p.worldCOMx+y.gnormy*p.worldCOMy-y.gprojection-c;if(d>l){h=d;break}d>0?d>h&&(h=d,u=y):h<0&&d>h&&(h=d,u=y),x=x.next}if(h<l){let y=u.gp0,d=u.gp1,_=p.worldCOMy*u.gnormx-p.worldCOMx*u.gnormy;if(_<=y.y*u.gnormx-y.x*u.gnormy){let f=0,z=0;f=p.worldCOMx-y.x,z=p.worldCOMy-y.y;let P=Math.sqrt(f*f+z*z);if(h=P-c,h<l){if(P==0)f=1,z=0;else{let b=1/P;f*=b,z*=b}let k=0;n.x=y.x+f*k,n.y=y.y+z*k;let m=-c;s.x=p.worldCOMx+f*m,s.y=p.worldCOMy+z*m,i.x=f,i.y=z}}else if(_>=d.y*u.gnormx-d.x*u.gnormy){let f=0,z=0;f=p.worldCOMx-d.x,z=p.worldCOMy-d.y;let P=Math.sqrt(f*f+z*z);if(h=P-c,h<l){if(P==0)f=1,z=0;else{let b=1/P;f*=b,z*=b}let k=0;n.x=d.x+f*k,n.y=d.y+z*k;let m=-c;s.x=p.worldCOMx+f*m,s.y=p.worldCOMy+z*m,i.x=f,i.y=z}}else{let f=-c;s.x=p.worldCOMx+u.gnormx*f,s.y=p.worldCOMy+u.gnormy*f;let z=-h;n.x=s.x+u.gnormx*z,n.y=s.y+u.gnormy*z,i.x=u.gnormx,i.y=u.gnormy}}return a&&(i.x=-i.x,i.y=-i.y),h}else{let o=e.polygon,p=t.polygon,c=-1e100,h=null,u=null,x=0,y=o.edges.head;for(;y!=null;){let d=y.elt,_=1e100,f=p.gverts.next;for(;f!=null;){let z=f,P=d.gnormx*z.x+d.gnormy*z.y;P<_&&(_=P),f=f.next}if(_-=d.gprojection,_>l){c=_;break}_>0?_>c&&(c=_,h=d,x=1):c<0&&_>c&&(c=_,h=d,x=1),y=y.next}if(c<l){let d=p.edges.head;for(;d!=null;){let _=d.elt,f=1e100,z=o.gverts.next;for(;z!=null;){let P=z,k=_.gnormx*P.x+_.gnormy*P.y;k<f&&(f=k),z=z.next}if(f-=_.gprojection,f>l){c=f;break}f>0?f>c&&(c=f,u=_,x=2):c<0&&f>c&&(c=f,u=_,x=2),d=d.next}if(c<l){let _,f,z;if(x==1)_=o,f=p,z=h;else{_=p,f=o,z=u;let b=n;n=s,s=b,a=!a}let P=null,k=1e100,m=f.edges.head;for(;m!=null;){let b=m.elt,C=z.gnormx*b.gnormx+z.gnormy*b.gnormy;C<k&&(k=C,P=b),m=m.next}if(a?(i.x=-z.gnormx,i.y=-z.gnormy):(i.x=z.gnormx,i.y=z.gnormy),c>=0){let b=z.gp0,C=z.gp1,v=P.gp0,w=P.gp1,O=0,E=0,M=0,N=0;O=C.x-b.x,E=C.y-b.y,M=w.x-v.x,N=w.y-v.y;let Z=1/(O*O+E*E),S=1/(M*M+N*N),A=-(O*(b.x-v.x)+E*(b.y-v.y))*Z,F=-(O*(b.x-w.x)+E*(b.y-w.y))*Z,B=-(M*(v.x-b.x)+N*(v.y-b.y))*S,G=-(M*(v.x-C.x)+N*(v.y-C.y))*S;A<0?A=0:A>1&&(A=1),F<0?F=0:F>1&&(F=1),B<0?B=0:B>1&&(B=1),G<0?G=0:G>1&&(G=1);let q=0,R=0,T=A;q=b.x+O*T,R=b.y+E*T;let V=0,K=0,$=F;V=b.x+O*$,K=b.y+E*$;let Y=0,X=0,ee=B;Y=v.x+M*ee,X=v.y+N*ee;let J=0,L=0,D=G;J=v.x+M*D,L=v.y+N*D;let I=0,U=0;I=q-v.x,U=R-v.y;let H=I*I+U*U,W=0,ne=0;W=V-w.x,ne=K-w.y;let re=W*W+ne*ne,se=0,ie=0;se=Y-b.x,ie=X-b.y;let ae=se*se+ie*ie,oe=0,he=0;oe=J-C.x,he=L-C.y;let pe=oe*oe+he*he,ce=0,te=0,ue=null;H<re?(ce=q,te=R,ue=v):(ce=V,te=K,ue=w,H=re);let xe=0,_e=0,ve=null;if(ae<pe?(xe=Y,_e=X,ve=b):(xe=J,_e=L,ve=C,ae=pe),H<ae?(n.x=ce,n.y=te,s.x=ue.x,s.y=ue.y,c=Math.sqrt(H)):(s.x=xe,s.y=_e,n.x=ve.x,n.y=ve.y,c=Math.sqrt(ae)),c!=0){i.x=s.x-n.x,i.y=s.y-n.y;let Se=1/c;i.x*=Se,i.y*=Se,a&&(i.x=-i.x,i.y=-i.y)}return c}else{let b=0,C=0;b=P.gp0.x,C=P.gp0.y;let v=0,w=0;v=P.gp1.x,w=P.gp1.y;let O=0,E=0;O=v-b,E=w-C;let M=z.gnormy*b-z.gnormx*C,N=z.gnormy*v-z.gnormx*w,Z=1/(N-M),S=(-z.tp1-M)*Z;if(S>r.Config.epsilon){let G=S;b+=O*G,C+=E*G}let A=(-z.tp0-N)*Z;if(A<-r.Config.epsilon){let G=A;v+=O*G,w+=E*G}let F=b*z.gnormx+C*z.gnormy-z.gprojection,B=v*z.gnormx+w*z.gnormy-z.gprojection;if(F<B){s.x=b,s.y=C;let G=-F;return n.x=s.x+z.gnormx*G,n.y=s.y+z.gnormy*G,F}else{s.x=v,s.y=w;let G=-B;return n.x=s.x+z.gnormx*G,n.y=s.y+z.gnormy*G,B}}}else return l}else return l}}}};var De=class De{static lt(e,t){return e.y<t.y?!0:e.y==t.y?e.x<t.x:!1}static right_turn(e,t,n){let s=n.x-t.x,i=n.y-t.y,l=t.x-e.x;return(t.y-e.y)*s-l*i}static delaunay(e,t,n,s){let i=n.x-t.x,l=n.y-t.y,r=t.x-e.x,a=t.y-e.y,o,p,c;return a*i-r*l>=0?c=!0:(i=s.x-n.x,l=s.y-n.y,r=n.x-t.x,a=n.y-t.y,c=a*i-r*l>=0),c?p=!0:(i=e.x-s.x,l=e.y-s.y,r=s.x-n.x,a=s.y-n.y,p=a*i-r*l>=0),p?o=!0:(i=t.x-e.x,l=t.y-e.y,r=e.x-s.x,a=e.y-s.y,o=a*i-r*l>=0),o?!0:t.x*(n.y*s.mag-n.mag*s.y)-n.x*(t.y*s.mag-t.mag*s.y)+s.x*(t.y*n.mag-t.mag*n.y)-(e.x*(n.y*s.mag-n.mag*s.y)-n.x*(e.y*s.mag-e.mag*s.y)+s.x*(e.y*n.mag-e.mag*n.y))+(e.x*(t.y*s.mag-t.mag*s.y)-t.x*(e.y*s.mag-e.mag*s.y)+s.x*(e.y*t.mag-e.mag*t.y))-(e.x*(t.y*n.mag-t.mag*n.y)-t.x*(e.y*n.mag-e.mag*n.y)+n.x*(e.y*t.mag-e.mag*t.y))>0}static optimise(e){let t=e.vertices,n=e.vertices;if(t!=null){let a=t;for(;;){let o=a;if(o.sort(),o.mag=o.x*o.x+o.y*o.y,a=a.next,a==n)break}}De.edgeSet==null&&(zs.zpp_pool==null?De.edgeSet=new zs:(De.edgeSet=zs.zpp_pool,zs.zpp_pool=De.edgeSet.next,De.edgeSet.next=null),De.edgeSet.lt=St.edge_lt,De.edgeSet.swapped=St.edge_swap);let s;St.zpp_pool==null?s=new St:(s=St.zpp_pool,St.zpp_pool=s.next,s.next=null);let i=e.vertices,l=e.vertices;if(i!=null){let a=i;for(;;){let o=a,p=o.next;o.diagonals.reverse();let c=o.diagonals.head;for(;c!=null;){let h=c.elt;if(h.id<o.id){p=h,c=c.next;continue}let u=c.next==null?o.prev:c.next.elt;if(!De.delaunay(o,p,h,u)){let x;St.zpp_pool==null?x=new St:(x=St.zpp_pool,St.zpp_pool=x.next,x.next=null),x.a=o,x.b=h,o.id<h.id?(x.id=o.id,x.di=h.id):(x.id=h.id,x.di=o.id);let y=x;s.add(y),y.node=De.edgeSet.insert(y)}p=h,c=c.next}if(a=a.next,a==l)break}}for(;s.next!=null;){let a=s.pop_unsafe(),o=a.a,p=a.b,c=o.next,h=null,u=o.diagonals.head;for(;u!=null;){let y=u.elt;if(y==p){u=u.next,h=u==null?o.prev:u.elt;break}c=y,u=u.next}if(o.diagonals.remove(p),p.diagonals.remove(o),p==c.next)c.diagonals.add(h);else{let y=c.diagonals.head;for(;y!=null;){if(y.elt==p){c.diagonals.insert(y,h);break}y=y.next}}if(o==h.next)h.diagonals.add(c);else{let y=h.diagonals.head;for(;y!=null;){if(y.elt==o){h.diagonals.insert(y,c);break}y=y.next}}De.edgeSet.remove_node(a.node);let x=a;x.a=x.b=null,x.node=null,x.next=St.zpp_pool,St.zpp_pool=x}let r=s;r.a=r.b=null,r.node=null,r.next=St.zpp_pool,St.zpp_pool=r}static triangulate(e){let t=e.vertices,n=e.vertices,s=e.vertices.next,i=e.vertices;if(s!=null){let o=s;for(;;){let p=o;if((p.y<t.y||p.y==t.y&&p.x<t.x)&&(t=p),(n.y<p.y||n.y==p.y&&n.x<p.x)&&(n=p),o=o.next,o==i)break}}De.queue==null&&(De.queue=new di);let l=n.prev,r=n.next;for(De.queue.add(n);l!=t||r!=t;)l==t||r!=t&&(l.y<r.y||l.y==r.y&&l.x<r.x)?(De.queue.add(r),r.rightchain=!1,r=r.next):(De.queue.add(l),l.rightchain=!0,l=l.prev);De.queue.add(t),De.stack==null&&(De.stack=new di),De.stack.add(De.queue.pop_unsafe());let a=De.queue.pop_unsafe();for(De.stack.add(a);;){let o=De.queue.pop_unsafe();if(De.queue.head==null)break;if(o.rightchain!=De.stack.head.elt.rightchain){for(;;){let p=De.stack.pop_unsafe();if(De.stack.head==null)break;e.add_diagonal(p,o)}De.stack.add(a)}else{let p=De.stack.pop_unsafe();for(;De.stack.head!=null;){let c=De.stack.head.elt,h=o.x-p.x,u=o.y-p.y,x=p.x-c.x,d=(p.y-c.y)*h-x*u;if(o.rightchain&&d>=0||!o.rightchain&&d<=0)break;e.add_diagonal(c,o),p=c,De.stack.pop()}De.stack.add(p)}De.stack.add(o),a=o}if(De.stack.head!=null)for(De.stack.pop();De.stack.head!=null;){let o=De.stack.pop_unsafe();if(De.stack.head==null)break;e.add_diagonal(n,o)}return e}};De.queue=null,De.stack=null,De.edgeSet=null;var bl=De;var gs=class gs{constructor(){this.outer=null;this.x=0;this.y=0;this.z=0;this.immutable=!1;this._validate=null}validate(){this._validate!=null&&this._validate()}wrapper(){return this.outer==null&&gs._wrapFn&&(this.outer=gs._wrapFn(this)),this.outer}};gs._zpp=null,gs._wrapFn=null;var ri=gs;var zl=class{static vec_dsq(e,t,n,s){let i=e-n,l=t-s;return i*i+l*l}static vec_distance(e,t,n,s){let i=e-n,l=t-s;return Math.sqrt(i*i+l*l)}};var fn=class fn{constructor(){this.outer_i=null;this.id=0;this.userData=null;this.ishape=null;this.ibody=null;this.icompound=null;this.wrap_cbTypes=null;this.cbSet=null;this.cbTypes=null;this.group=null;this.cbsets=null;fn.initFields(this)}static initFields(e){let t=fn._zpp;e.wrap_cbTypes=null,e.cbSet=null,e.cbTypes=null,e.group=null,e.cbsets=null,e.icompound=null,e.ibody=null,e.ishape=null,e.userData=null,e.id=0,e.outer_i=null,e.id=_n.Interactor(),e.cbsets=new t.util.ZNPList_ZPP_CallbackSet,e.cbTypes=new t.util.ZNPList_ZPP_CbType}static get(e,t){let n=e.id<t.id?e.id:t.id,s=e.id<t.id?t.id:e.id,i=e.cbsets.length<t.cbsets.length?e.cbsets:t.cbsets,l=null,r=i.head;for(;r!=null;){let a=r.elt;if(a.id==n&&a.di==s){l=a;break}r=r.next}return l}static int_callback(e,t,n){let s=e.int1,i=e.int2,l,r=t.options1,a=s.cbTypes;if(r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)){let o=t.options2,p=i.cbTypes;l=o.nonemptyintersection(p,o.includes)&&!o.nonemptyintersection(p,o.excludes)}else l=!1;l?(n.int1=s,n.int2=i):(n.int1=i,n.int2=s)}isShape(){return this.ishape!=null}isBody(){return this.ibody!=null}isCompound(){return this.icompound!=null}__iaddedToSpace(){this.group!=null&&this.group.interactors.add(this);let e=this.cbTypes.head;for(;e!=null;)e.elt.interactors.add(this),e=e.next;this.alloc_cbSet()}__iremovedFromSpace(){this.group!=null&&this.group.interactors.remove(this);let e=this.cbTypes.head;for(;e!=null;)e.elt.interactors.remove(this),e=e.next;this.dealloc_cbSet()}wake(){if(this.ishape!=null){let e=this.ishape.body;e!=null&&e.space!=null&&e.space.non_inlined_wake(e)}else this.ibody!=null?this.ibody.space!=null&&this.ibody.space.non_inlined_wake(this.ibody):this.icompound.space!=null&&this.icompound.space.wakeCompound(this.icompound)}_getSpace(){return this.ishape!=null?this.ishape.body==null?null:this.ishape.body.space:this.ibody!=null?this.ibody.space:this.icompound.space}getSpace(){return this._getSpace()}setupcbTypes(){let e=fn._zpp;this.wrap_cbTypes=e.util.ZPP_CbTypeList.get(this.cbTypes),this.wrap_cbTypes.zpp_inner.adder=this.wrap_cbTypes_adder.bind(this),this.wrap_cbTypes.zpp_inner.subber=this.wrap_cbTypes_subber.bind(this),this.wrap_cbTypes.zpp_inner.dontremove=!0,this.wrap_cbTypes.zpp_inner._modifiable=this.immutable_cbTypes.bind(this)}immutable_cbTypes(){this.immutable_midstep("Interactor::cbTypes")}wrap_cbTypes_subber(e){let t=e.zpp_inner;if(this.cbTypes.has(t)){let n=this._getSpace();n!=null&&(this.dealloc_cbSet(),t.interactors.remove(this)),this.cbTypes.remove(t),n!=null&&(this.alloc_cbSet(),this.wake())}}wrap_cbTypes_adder(e){return this.insert_cbtype(e.zpp_inner),!1}insert_cbtype(e){let t=fn._zpp;if(!this.cbTypes.has(e)){let n=this._getSpace();n!=null&&(this.dealloc_cbSet(),e.interactors.add(this));let s=null,i=this.cbTypes.head;for(;i!=null;){let o=i.elt;if(e.id<o.id)break;s=i,i=i.next}let l=this.cbTypes,r;t.util.ZNPNode_ZPP_CbType.zpp_pool==null?r=new t.util.ZNPNode_ZPP_CbType:(r=t.util.ZNPNode_ZPP_CbType.zpp_pool,t.util.ZNPNode_ZPP_CbType.zpp_pool=r.next,r.next=null),r.elt=e;let a=r;s==null?(a.next=l.head,l.head=a):(a.next=s.next,s.next=a),l.pushmod=l.modified=!0,l.length++,n!=null&&(this.alloc_cbSet(),this.wake())}}alloc_cbSet(){let e=this._getSpace();(this.cbSet=e.cbsets.get(this.cbTypes))!=null&&(this.cbSet.count++,this.cbSet.interactors.add(this),this.cbSet.validate(),e.freshInteractorType(this))}dealloc_cbSet(){let e=this._getSpace();if(this.cbSet!=null){if(this.cbSet.interactors.remove(this),e.nullInteractorType(this),--this.cbSet.count==0){e.cbsets.remove(this.cbSet);let t=this.cbSet;for(t.listeners.clear(),t.zip_listeners=!0,t.bodylisteners.clear(),t.zip_bodylisteners=!0,t.conlisteners.clear(),t.zip_conlisteners=!0;t.cbTypes.head!=null;)t.cbTypes.pop_unsafe().cbsets.remove(t);t.next=_t.zpp_pool,_t.zpp_pool=t}this.cbSet=null}}setGroup(e){if(this.group!=e){let t=this._getSpace()!=null;t&&this.group!=null&&this.group.interactors.remove(this),this.group=e,t&&e!=null&&e.interactors.add(this),t&&(this.ishape!=null?this.ishape.body.wake():this.ibody!=null?this.ibody.wake():this.icompound.wake())}}immutable_midstep(e){if(this.ibody!=null){let t=this.ibody;if(t.space!=null&&t.space.midstep)throw new Error("Error: "+e+" cannot be set during a space step()")}else this.ishape!=null?this.ishape.__immutable_midstep(e):this.icompound.__imutable_midstep(e)}lookup_group(){let e=this;for(;e!=null&&e.group==null;)e.ishape!=null?e=e.ishape.body:e.icompound!=null?e=e.icompound.compound:e=e.ibody.compound;return e==null?null:e.group}copyto(e){let t=fn._nape;e.zpp_inner_i.group=this.group;let n=this.outer_i;n.zpp_inner_i.wrap_cbTypes==null&&n.zpp_inner_i.setupcbTypes();let s=n.zpp_inner_i.wrap_cbTypes;s.zpp_inner.valmod();let i=t.callbacks.CbTypeIterator.get(s);for(;;){i.zpp_inner.zpp_inner.valmod();let l=i.zpp_inner;l.zpp_inner.valmod(),l.zpp_inner.zip_length&&(l.zpp_inner.zip_length=!1,l.zpp_inner.user_length=l.zpp_inner.inner.length);let r=l.zpp_inner.user_length;i.zpp_critical=!0;let a;if(i.zpp_i<r?a=!0:(i.zpp_next=t.callbacks.CbTypeIterator.zpp_pool,t.callbacks.CbTypeIterator.zpp_pool=i,i.zpp_inner=null,a=!1),!a)break;i.zpp_critical=!1;let o=i.zpp_inner.at(i.zpp_i++);e.zpp_inner_i.wrap_cbTypes==null&&e.zpp_inner_i.setupcbTypes();let p=e.zpp_inner_i.wrap_cbTypes;p.zpp_inner.reverse_flag?p.push(o):p.unshift(o)}this.userData!=null&&(e.zpp_inner_i.userData=Object.assign({},this.userData))}static _init(e,t){fn._initialized||(fn._initialized=!0,fn._zpp=e,fn._nape=t)}};fn._nape=null,fn._zpp=null,fn._initialized=!1;var Ut=fn;var Be=class Be{constructor(){this.outer_i=null;this.id=0;this.userData=null;this.ishape=null;this.ibody=null;this.icompound=null;this.wrap_cbTypes=null;this.cbSet=null;this.cbTypes=null;this.group=null;this.cbsets=null;this.outer=null;this.world=!1;this.type=0;this.compound=null;this.shapes=null;this.wrap_shapes=null;this.space=null;this.arbiters=null;this.wrap_arbiters=null;this.constraints=null;this.wrap_constraints=null;this.component=null;this.graph_depth=0;this.sweepTime=0;this.sweep_angvel=0;this.sweepFrozen=!1;this.sweepRadius=0;this.bullet=!1;this.bulletEnabled=!1;this.disableCCD=!1;this.pre_posx=0;this.pre_posy=0;this.posx=0;this.posy=0;this.wrap_pos=null;this.velx=0;this.vely=0;this.wrap_vel=null;this.forcex=0;this.forcey=0;this.wrap_force=null;this.kinvelx=0;this.kinvely=0;this.wrap_kinvel=null;this.svelx=0;this.svely=0;this.wrap_svel=null;this.wrapcvel=null;this.angvel=0;this.torque=0;this.kinangvel=0;this.pre_rot=0;this.rot=0;this.axisx=0;this.axisy=0;this.zip_axis=!1;this.kinematicDelaySleep=!1;this.mass=0;this.zip_mass=!1;this.massMode=0;this.imass=0;this.smass=0;this.cmass=0;this.nomove=!1;this.gravMass=0;this.zip_gravMass=!1;this.gravMassMode=0;this.gravMassScale=0;this.zip_gravMassScale=!1;this.inertiaMode=0;this.inertia=0;this.zip_inertia=!1;this.cinertia=0;this.iinertia=0;this.sinertia=0;this.norotate=!1;this.aabb=null;this.zip_aabb=!1;this.localCOMx=0;this.localCOMy=0;this.zip_localCOM=!1;this.worldCOMx=0;this.worldCOMy=0;this.zip_worldCOM=!1;this.wrap_localCOM=null;this.wrap_worldCOM=null;let e=Be._zpp;Ut.initFields(this),this.ibody=this,this.world=!1,this.bulletEnabled=!1,this.sweepTime=0,this.sweep_angvel=0,this.norotate=this.nomove=!1,this.disableCCD=!1,this.posx=0,this.posy=0,this.rot=0,this.axisx=0,this.axisy=1,this.svelx=0,this.svely=0,this.velx=0,this.vely=0,this.kinvelx=0,this.kinvely=0,this.forcex=0,this.forcey=0,this.torque=this.angvel=this.kinangvel=0,this.pre_posx=1/0,this.pre_posy=1/0,this.pre_rot=1/0,this.localCOMx=0,this.localCOMy=0,this.worldCOMx=0,this.worldCOMy=0,this.zip_aabb=!0;let t;fe.zpp_pool==null?t=new fe:(t=fe.zpp_pool,fe.zpp_pool=t.next,t.next=null),t.minx=0,t.miny=0,t.maxx=0,t.maxy=0,this.aabb=t,this.aabb._immutable=!0,this.aabb._validate=this.aabb_validate.bind(this),this.massMode=0,this.gravMassMode=0,this.gravMassScale=1,this.inertiaMode=0,this.arbiters=new e.util.ZNPList_ZPP_Arbiter,this.constraints=new e.util.ZNPList_ZPP_Constraint,this.shapes=new e.util.ZNPList_ZPP_Shape,this.wrap_shapes=e.util.ZPP_ShapeList.get(this.shapes),this.wrap_shapes.zpp_inner.adder=this.shapes_adder.bind(this),this.wrap_shapes.zpp_inner.subber=this.shapes_subber.bind(this),this.wrap_shapes.zpp_inner._invalidate=this.shapes_invalidate.bind(this),this.wrap_shapes.zpp_inner._modifiable=this.shapes_modifiable.bind(this),this.kinematicDelaySleep=!1}static bodysetlt(e,t){return e.id<t.id}static __static(){let e=Be._nape,t=Be._zpp;t.util.ZPP_Flags.BodyType_STATIC==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.BodyType_STATIC=new e.phys.BodyType,t.util.ZPP_Flags.internal=!1);let n=new e.phys.Body(t.util.ZPP_Flags.BodyType_STATIC),s=n.zpp_inner;return s.world=!0,s.wrap_shapes.zpp_inner.immutable=!0,s.smass=s.imass=s.cmass=s.mass=s.gravMass=0,s.sinertia=s.iinertia=s.cinertia=s.inertia=0,s.cbTypes.clear(),n}isStatic(){return this.type===1}isDynamic(){return this.type===2}isKinematic(){return this.type===3}invalidate_type(){this.invalidate_mass(),this.invalidate_inertia()}invalidate_shapes(){this.zip_aabb=!0,this.zip_localCOM=!0,this.zip_worldCOM=!0,this.invalidate_mass(),this.invalidate_inertia()}init_bodysetlist(){if(Be.bodyset==null){let e=Be._zpp;Be.bodyset=new e.util.ZPP_Set_ZPP_Body,Be.bodyset.lt=Be.bodysetlt,Be.bodystack=new e.util.ZNPList_ZPP_Body}}connectedBodies_cont(e){Be.bodyset.try_insert_bool(e.zpp_inner)&&(Be.bodystack.add(e.zpp_inner),e.zpp_inner.graph_depth=Be.cur_graph_depth+1)}connectedBodies(e,t){let n=Be._nape;Be.bodyset==null&&this.init_bodysetlist();let s=t??new n.phys.BodyList;for(Be.bodystack.add(this),Be.bodyset.insert(this),this.graph_depth=0;Be.bodystack.head!=null;){let l=Be.bodystack.pop_unsafe();if(l.graph_depth===e)continue;Be.cur_graph_depth=l.graph_depth;let r=l.constraints.head;for(;r!=null;)r.elt.outer.visitBodies(this.connectedBodies_cont.bind(this)),r=r.next}let i=Be.bodyset;if(i.parent!=null){let l=i.parent;for(;l!=null;)if(l.prev!=null)l=l.prev;else if(l.next!=null)l=l.next;else{let r=l.data;if(r!==this){let p=r.outer;s.zpp_inner.reverse_flag?s.push(p):s.unshift(p)}let a=l.parent;a!=null&&(l===a.prev?a.prev=null:a.next=null,l.parent=null);let o=l;o.data=null,o.lt=null,o.next=Be._zpp.util.ZPP_Set_ZPP_Body.zpp_pool,Be._zpp.util.ZPP_Set_ZPP_Body.zpp_pool=o,l=a}i.parent=null}return s}interactingBodies(e,t){let n=Be._nape,s=Be._zpp;Be.bodyset==null&&this.init_bodysetlist();let i=t??new n.phys.BodyList,l=this.arbiters.head;for(;l!=null;){let a=l.elt;if(!a.sleeping&&(e===4||a.type===e)){let o=a.b1===this?a.b2:a.b1;if(Be.bodyset.try_insert_bool(o)){let p=o.outer;i.zpp_inner.reverse_flag?i.push(p):i.unshift(p)}}l=l.next}let r=Be.bodyset;if(r.parent!=null){let a=r.parent;for(;a!=null;)if(a.prev!=null)a=a.prev;else if(a.next!=null)a=a.next;else{let o=a.parent;o!=null&&(a===o.prev?o.prev=null:o.next=null,a.parent=null);let p=a;p.data=null,p.lt=null,p.next=s.util.ZPP_Set_ZPP_Body.zpp_pool,s.util.ZPP_Set_ZPP_Body.zpp_pool=p,a=o}r.parent=null}return i}atRest(e){let t=Be._nape;if(this.type!==2)return this.component.sleeping;let n=t.Config.linearSleepThreshold*t.Config.linearSleepThreshold,s;if(this.velx*this.velx+this.vely*this.vely>n)s=!1;else{let i=this.posx-this.pre_posx,l=this.posy-this.pre_posy;if(i*i+l*l>.25*n*e*e)s=!1;else{let r=this.aabb.maxx-this.aabb.minx,a=this.aabb.maxy-this.aabb.miny,o=r*r+a*a,p=t.Config.angularSleepThreshold*t.Config.angularSleepThreshold;if(4*this.angvel*this.angvel*o>p)s=!1;else{let c=this.rot-this.pre_rot;s=!(c*c*o>p*e*e)}}}return s||(this.component.waket=this.space.stamp),this.component.waket+t.Config.sleepDelay<this.space.stamp}refreshArbiters(){let e=this.arbiters.head;for(;e!=null;){let t=e.elt;t.invalidated=!0,e=e.next}}sweepIntegrate(e){let t=e-this.sweepTime;if(t!==0&&(this.sweepTime=e,this.posx+=this.velx*t,this.posy+=this.vely*t,this.angvel!==0)){let n=this.sweep_angvel*t;if(this.rot+=n,n*n>1e-4)this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot);else{let s=n*n,i=1-.5*s,l=1-s*s/8,r=(i*this.axisx+n*this.axisy)*l;this.axisy=(i*this.axisy-n*this.axisx)*l,this.axisx=r}}}sweepValidate(e){if(e.type===0)e.worldCOMx=this.posx+(this.axisy*e.localCOMx-this.axisx*e.localCOMy),e.worldCOMy=this.posy+(e.localCOMx*this.axisx+e.localCOMy*this.axisy);else{let t=e.polygon,n=t.lverts.next,s=t.gverts.next;for(;s!=null;){let p=s,c=n;n=n.next,p.x=this.posx+(this.axisy*c.x-this.axisx*c.y),p.y=this.posy+(c.x*this.axisx+c.y*this.axisy),s=s.next}let i=t.edges.head,l=t.gverts.next,r=l;for(l=l.next;l!=null;){let p=l,c=i.elt;i=i.next,c.gnormx=this.axisy*c.lnormx-this.axisx*c.lnormy,c.gnormy=c.lnormx*this.axisx+c.lnormy*this.axisy,c.gprojection=this.posx*c.gnormx+this.posy*c.gnormy+c.lprojection,c.tp0=r.y*c.gnormx-r.x*c.gnormy,c.tp1=p.y*c.gnormx-p.x*c.gnormy,r=p,l=l.next}let a=t.gverts.next,o=i.elt;o.gnormx=this.axisy*o.lnormx-this.axisx*o.lnormy,o.gnormy=o.lnormx*this.axisx+o.lnormy*this.axisy,o.gprojection=this.posx*o.gnormx+this.posy*o.gnormy+o.lprojection,o.tp0=r.y*o.gnormx-r.x*o.gnormy,o.tp1=a.y*o.gnormx-a.x*o.gnormy}}invalidate_pos(){let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}this.zip_worldCOM=!0}pos_invalidate(e){if(this.immutable_midstep("Body::position"),this.type===1&&this.space!=null)throw new Error("Error: Cannot move a static object once inside a Space");this.posx===e.x&&this.posy===e.y||(this.posx=e.x,this.posy=e.y,this.invalidate_pos(),this.wake())}pos_validate(){this.wrap_pos.zpp_inner.x=this.posx,this.wrap_pos.zpp_inner.y=this.posy}vel_invalidate(e){if(this.type===1)throw new Error("Error: Static body cannot have its velocity set.");this.velx=e.x,this.vely=e.y,this.wake()}vel_validate(){this.wrap_vel.zpp_inner.x=this.velx,this.wrap_vel.zpp_inner.y=this.vely}kinvel_invalidate(e){this.kinvelx=e.x,this.kinvely=e.y,this.wake()}kinvel_validate(){this.wrap_kinvel.zpp_inner.x=this.kinvelx,this.wrap_kinvel.zpp_inner.y=this.kinvely}svel_invalidate(e){this.svelx=e.x,this.svely=e.y,this.wake()}svel_validate(){this.wrap_svel.zpp_inner.x=this.svelx,this.wrap_svel.zpp_inner.y=this.svely}force_invalidate(e){if(this.type!==2)throw new Error("Error: Non-dynamic body cannot have force applied.");this.forcex=e.x,this.forcey=e.y,this.wake()}force_validate(){this.wrap_force.zpp_inner.x=this.forcex,this.wrap_force.zpp_inner.y=this.forcey}_setupVec2Wrapper(e,t,n,s){let i=Be._nape;if(e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let l;if(ye.poolVec2==null?l=new i.geom.Vec2:(l=ye.poolVec2,ye.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l===ye.nextVec2&&(ye.nextVec2=null)),l.zpp_inner==null){let r;le.zpp_pool==null?r=new le:(r=le.zpp_pool,le.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=e,r.y=t,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let a;l.zpp_inner._validate!=null&&l.zpp_inner._validate(),l.zpp_inner.x===e?(l.zpp_inner._validate!=null&&l.zpp_inner._validate(),a=l.zpp_inner.y===t):a=!1,a||(l.zpp_inner.x=e,l.zpp_inner.y=t,l.zpp_inner._invalidate!=null&&l.zpp_inner._invalidate(l.zpp_inner))}return l.zpp_inner.weak=!1,l}setupPosition(){this.wrap_pos=this._setupVec2Wrapper(this.posx,this.posy,null,null),this.wrap_pos.zpp_inner._inuse=!0,this.world?this.wrap_pos.zpp_inner._immutable=!0:(this.wrap_pos.zpp_inner._invalidate=this.pos_invalidate.bind(this),this.wrap_pos.zpp_inner._validate=this.pos_validate.bind(this))}setupVelocity(){this.wrap_vel=this._setupVec2Wrapper(this.velx,this.vely,null,null),this.wrap_vel.zpp_inner._inuse=!0,this.world?this.wrap_vel.zpp_inner._immutable=!0:(this.wrap_vel.zpp_inner._invalidate=this.vel_invalidate.bind(this),this.wrap_vel.zpp_inner._validate=this.vel_validate.bind(this))}setupkinvel(){this.wrap_kinvel=this._setupVec2Wrapper(this.kinvelx,this.kinvely,null,null),this.wrap_kinvel.zpp_inner._inuse=!0,this.world?this.wrap_kinvel.zpp_inner._immutable=!0:(this.wrap_kinvel.zpp_inner._invalidate=this.kinvel_invalidate.bind(this),this.wrap_kinvel.zpp_inner._validate=this.kinvel_validate.bind(this))}setupsvel(){this.wrap_svel=this._setupVec2Wrapper(this.svelx,this.svely,null,null),this.wrap_svel.zpp_inner._inuse=!0,this.world?this.wrap_svel.zpp_inner._immutable=!0:(this.wrap_svel.zpp_inner._invalidate=this.svel_invalidate.bind(this),this.wrap_svel.zpp_inner._validate=this.svel_validate.bind(this))}setupForce(){this.wrap_force=this._setupVec2Wrapper(this.forcex,this.forcey,null,null),this.wrap_force.zpp_inner._inuse=!0,this.world?this.wrap_force.zpp_inner._immutable=!0:(this.wrap_force.zpp_inner._invalidate=this.force_invalidate.bind(this),this.wrap_force.zpp_inner._validate=this.force_validate.bind(this))}cvel_validate(){this.wrapcvel.zpp_inner.x=this.velx+this.kinvelx,this.wrapcvel.zpp_inner.y=this.vely+this.kinvely}setup_cvel(){this.wrapcvel=this._setupVec2Wrapper(this.velx+this.kinvelx,this.vely+this.kinvely,null,null),this.wrapcvel.zpp_inner._inuse=!0,this.wrapcvel.zpp_inner._immutable=!0,this.wrapcvel.zpp_inner._validate=this.cvel_validate.bind(this)}invalidate_rot(){this.zip_axis=!0;let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}this.zip_worldCOM=!0}validate_axis(){this.zip_axis&&(this.zip_axis=!1,this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot))}quick_validate_axis(){this.zip_axis&&(this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot))}delta_rot(e){if(e*e>1e-4)this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot);else{let t=e*e,n=1-.5*t,s=1-t*t/8,i=(n*this.axisx+e*this.axisy)*s;this.axisy=(n*this.axisy-e*this.axisx)*s,this.axisx=i}this.zip_axis=!1}invalidate_mass(){this.zip_mass=!0,this.invalidate_gravMass()}validate_mass(){if(this.zip_mass||this.massMode===0&&!1){if(this.zip_mass=!1,this.massMode===0){this.cmass=0;let t=this.shapes.head;for(;t!=null;){let n=t.elt;n.refmaterial.density=n.material.density,n.validate_area_inertia(),this.cmass+=n.area*n.material.density,t=t.next}}this.type===2&&!this.nomove?(this.mass=this.cmass,this.imass=this.smass=1/this.mass):(this.mass=1/0,this.imass=this.smass=0)}}invalidate_gravMass(){this.gravMassMode!==1&&(this.zip_gravMass=!0),this.gravMassMode!==2&&(this.zip_gravMassScale=!0),this.wake()}validate_gravMass(){this.zip_gravMass&&(this.zip_gravMass=!1,this.validate_mass(),this.gravMassMode===0?(this.validate_mass(),this.gravMass=this.cmass):this.gravMassMode===2&&(this.validate_mass(),this.gravMass=this.cmass*this.gravMassScale))}invalidate_gravMassScale(){this.gravMassMode!==2?this.zip_gravMassScale=!0:this.invalidate_gravMass()}validate_gravMassScale(){this.zip_gravMassScale&&(this.zip_gravMassScale=!1,this.gravMassMode===0?this.gravMassScale=1:this.gravMassMode===1&&(this.validate_mass(),this.gravMassScale=this.gravMass/this.cmass))}invalidate_inertia(){this.zip_inertia=!0,this.wake()}validate_inertia(){if(this.zip_inertia||this.inertiaMode===0&&!1){if(this.zip_inertia=!1,this.inertiaMode===0){this.cinertia=0;let t=this.shapes.head;for(;t!=null;){let n=t.elt;n.refmaterial.density=n.material.density,n.validate_area_inertia(),this.cinertia+=n.inertia*n.area*n.material.density,t=t.next}}this.type===2&&!this.norotate?(this.inertia=this.cinertia,this.sinertia=this.iinertia=1/this.inertia):(this.inertia=1/0,this.sinertia=this.iinertia=0)}}invalidate_wake(){this.wake()}invalidate_aabb(){this.zip_aabb=!0}validate_aabb(){if(this.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(this.zip_aabb){this.zip_aabb=!1,this.aabb.minx=1/0,this.aabb.miny=1/0,this.aabb.maxx=-1/0,this.aabb.maxy=-1/0;let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.zip_aabb&&t.body!=null&&(t.zip_aabb=!1,t.type===0?this._validateCircleAABB(t.circle):this._validatePolygonAABB(t.polygon)),t.aabb.minx<this.aabb.minx&&(this.aabb.minx=t.aabb.minx),t.aabb.maxx>this.aabb.maxx&&(this.aabb.maxx=t.aabb.maxx),t.aabb.miny<this.aabb.miny&&(this.aabb.miny=t.aabb.miny),t.aabb.maxy>this.aabb.maxy&&(this.aabb.maxy=t.aabb.maxy),e=e.next}}}_validateCircleAABB(e){e.zip_worldCOM&&e.body!=null&&(e.zip_worldCOM=!1,e.zip_localCOM&&(e.zip_localCOM=!1,e.type===1&&this._computePolygonLocalCOM(e.polygon),e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy)),this.validate_axis(),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy));let t=e.radius;e.aabb.minx=e.worldCOMx-t,e.aabb.miny=e.worldCOMy-t,e.aabb.maxx=e.worldCOMx+t,e.aabb.maxy=e.worldCOMy+t}_validatePolygonAABB(e){if(e.zip_gverts&&e.body!=null){e.zip_gverts=!1,e.validate_lverts(),this.validate_axis();let s=e.lverts.next,i=e.gverts.next;for(;i!=null;){let l=i,r=s;s=s.next,l.x=e.body.posx+(e.body.axisy*r.x-e.body.axisx*r.y),l.y=e.body.posy+(r.x*e.body.axisx+r.y*e.body.axisy),i=i.next}}if(e.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let t=e.gverts.next;e.aabb.minx=t.x,e.aabb.miny=t.y,e.aabb.maxx=t.x,e.aabb.maxy=t.y;let n=e.gverts.next.next;for(;n!=null;){let s=n;s.x<e.aabb.minx&&(e.aabb.minx=s.x),s.x>e.aabb.maxx&&(e.aabb.maxx=s.x),s.y<e.aabb.miny&&(e.aabb.miny=s.y),s.y>e.aabb.maxy&&(e.aabb.maxy=s.y),n=n.next}}aabb_validate(){if(this.shapes.head==null)throw new Error("Error: bounds only makes sense when Body has shapes");this.validate_aabb()}invalidate_localCOM(){this.zip_localCOM=!0,this.zip_worldCOM=!0}invalidate_worldCOM(){this.zip_worldCOM=!0}_computePolygonLocalCOM(e){if(e.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(e.lverts.next.next==null)e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y;else if(e.lverts.next.next.next==null)e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y,e.localCOMx+=e.lverts.next.next.x,e.localCOMy+=e.lverts.next.next.y,e.localCOMx*=.5,e.localCOMy*=.5;else{e.localCOMx=0,e.localCOMy=0;let t=0,n=e.lverts.next,s=n;n=n.next;let i=n;for(n=n.next;n!=null;){let p=n;t+=i.x*(p.y-s.y);let c=p.y*i.x-p.x*i.y;e.localCOMx+=(i.x+p.x)*c,e.localCOMy+=(i.y+p.y)*c,s=i,i=p,n=n.next}n=e.lverts.next;let l=n;t+=i.x*(l.y-s.y);let r=l.y*i.x-l.x*i.y;e.localCOMx+=(i.x+l.x)*r,e.localCOMy+=(i.y+l.y)*r,s=i,i=l,n=n.next;let a=n;t+=i.x*(a.y-s.y);let o=a.y*i.x-a.x*i.y;e.localCOMx+=(i.x+a.x)*o,e.localCOMy+=(i.y+a.y)*o,t=1/(3*t),e.localCOMx*=t,e.localCOMy*=t}}validate_localCOM(){if(this.zip_localCOM){this.zip_localCOM=!1;let e=0,t=0,n=0,s=this.shapes.head;for(;s!=null;){let i=s.elt;i.zip_localCOM&&(i.zip_localCOM=!1,i.type===1&&this._computePolygonLocalCOM(i.polygon),i.wrap_localCOM!=null&&(i.wrap_localCOM.zpp_inner.x=i.localCOMx,i.wrap_localCOM.zpp_inner.y=i.localCOMy)),i.validate_area_inertia();let l=i.area*i.material.density;e+=i.localCOMx*l,t+=i.localCOMy*l,n+=i.area*i.material.density,s=s.next}if(n!==0){let i=1/n;this.localCOMx=e*i,this.localCOMy=t*i}this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy),this.zip_mass&&this.massMode===0&&(this.zip_mass=!1,this.cmass=n,this.type===2?(this.mass=this.cmass,this.imass=this.smass=1/this.mass):(this.mass=1/0,this.imass=this.smass=0))}}validate_worldCOM(){this.zip_worldCOM&&(this.zip_worldCOM=!1,this.validate_localCOM(),this.validate_axis(),this.worldCOMx=this.posx+(this.axisy*this.localCOMx-this.axisx*this.localCOMy),this.worldCOMy=this.posy+(this.localCOMx*this.axisx+this.localCOMy*this.axisy)),this.wrap_worldCOM!=null&&(this.wrap_worldCOM.zpp_inner.x=this.worldCOMx,this.wrap_worldCOM.zpp_inner.y=this.worldCOMy)}getlocalCOM(){if(this.shapes.head==null)throw new Error("Error: Body has no shapes so cannot compute its localCOM");this.validate_localCOM()}getworldCOM(){if(this.shapes.head==null)throw new Error("Error: Body has no shapes so cannot compute its worldCOM");this.validate_worldCOM()}__immutable_midstep(){if(this.world)throw new Error("Error: Space::world is immutable")}clear(){if(this.space!=null)throw new Error("Error: Cannot clear a Body if it is currently being used by a Space!");if(this.constraints.head!=null)throw new Error("Error: Cannot clear a Body if it is currently being used by a constraint!");for(;this.shapes.head!=null;){let t=this.shapes.pop_unsafe();t.removedFromBody(),t.body=null}this.invalidate_shapes(),this.pre_posx=0,this.pre_posy=0,this.posx=0,this.posy=0,this.velx=0,this.vely=0,this.forcex=0,this.forcey=0,this.kinvelx=0,this.kinvely=0,this.svelx=0,this.svely=0,this.angvel=this.torque=this.kinangvel=this.pre_rot=this.rot=0;let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}for(this.zip_worldCOM=!0,this.zip_axis=!0,e=this.shapes.head;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}this.zip_worldCOM=!0,this.axisx=0,this.axisy=1,this.zip_axis=!1,this.massMode=0,this.gravMassMode=0,this.gravMassScale=1,this.inertiaMode=0,this.norotate=!1,this.nomove=!1}shapes_adder(e){if(e.zpp_inner.body!==this){if(e.zpp_inner.body!=null&&e.zpp_inner.body.wrap_shapes.remove(e),e.zpp_inner.body=this,e.zpp_inner.addedToBody(),this.space!=null){let t=this.space,n=e.zpp_inner,s=n.body;s.world||(s.component.waket=t.stamp+(t.midstep?0:1),s.type===3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&t.really_wake(s,!1)),t.bphase.insert(n),n.addedToSpace()}return e.zpp_inner.type===1&&(e.zpp_inner.polygon.invalidate_gaxi(),e.zpp_inner.polygon.invalidate_gverts()),!0}else return!1}shapes_subber(e){this.space!=null&&this.space.removed_shape(e.zpp_inner),e.zpp_inner.body=null,e.zpp_inner.removedFromBody()}shapes_invalidate(e){this.invalidate_shapes()}shapes_modifiable(){if(this.immutable_midstep("Body::shapes"),this.type===1&&this.space!=null)throw new Error("Error: Cannot modifiy shapes of static object once added to Space")}addedToSpace(){let e=Be._zpp,t;e.space.ZPP_Component.zpp_pool==null?t=new e.space.ZPP_Component:(t=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=t.next,t.next=null),t.isBody=!0,t.body=this,this.component=t,this.__iaddedToSpace()}removedFromSpace(){let e=Be._zpp;for(;this.arbiters.head!=null;){let n=this.arbiters.pop_unsafe(),s=this.space;n.cleared=!0,n.b2===this&&this._removeArbiterFromList(n.b1.arbiters,n,e),n.b1===this&&this._removeArbiterFromList(n.b2.arbiters,n,e),n.pair!=null&&(n.pair.arb=null,n.pair=null),n.active=!1,s.f_arbiters.modified=!0}let t=this.component;t.body=null,t.constraint=null,t.next=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=t,this.component=null,this.__iremovedFromSpace()}_removeArbiterFromList(e,t,n){let s=null,i=e.head;for(;i!=null;){if(i.elt===t){let l;s==null?(l=e.head,e.head=l.next,e.head==null&&(e.pushmod=!0)):(l=s.next,s.next=l.next,l.next==null&&(e.pushmod=!0));let r=l;r.elt=null,r.next=n.util.ZNPNode_ZPP_Arbiter.zpp_pool,n.util.ZNPNode_ZPP_Arbiter.zpp_pool=r,e.modified=!0,e.length--,e.pushmod=!0;break}s=i,i=i.next}}copy(){let e=Be._nape,t=new e.phys.Body().zpp_inner;t.type=this.type,t.bulletEnabled=this.bulletEnabled,t.disableCCD=this.disableCCD;let n=this.shapes.head;for(;n!=null;){let s=n.elt,i=t.outer.zpp_inner.wrap_shapes,l=s.outer.copy();i.zpp_inner.reverse_flag?i.push(l):i.unshift(l),n=n.next}if(t.posx=this.posx,t.posy=this.posy,t.velx=this.velx,t.vely=this.vely,t.forcex=this.forcex,t.forcey=this.forcey,t.rot=this.rot,t.angvel=this.angvel,t.torque=this.torque,t.kinvelx=this.kinvelx,t.kinvely=this.kinvely,t.kinangvel=this.kinangvel,t.svelx=this.svelx,t.svely=this.svely,!this.zip_axis)t.axisx=this.axisx,t.axisy=this.axisy;else{t.zip_axis=!0;let s=t.shapes.head;for(;s!=null;){let i=s.elt;i.type===1&&(i.polygon.invalidate_gverts(),i.polygon.invalidate_gaxi()),i.invalidate_worldCOM(),s=s.next}t.zip_worldCOM=!0}return t.rot=this.rot,t.massMode=this.massMode,t.gravMassMode=this.gravMassMode,t.inertiaMode=this.inertiaMode,t.norotate=this.norotate,t.nomove=this.nomove,t.cmass=this.cmass,t.cinertia=this.cinertia,this.zip_mass?t.invalidate_mass():t.mass=this.mass,this.zip_gravMass?t.invalidate_gravMass():t.gravMass=this.gravMass,this.zip_gravMassScale?t.invalidate_gravMassScale():t.gravMassScale=this.gravMassScale,this.zip_inertia?t.invalidate_inertia():t.inertia=this.inertia,this.zip_aabb?t.zip_aabb=!0:(t.aabb.minx=this.aabb.minx,t.aabb.miny=this.aabb.miny,t.aabb.maxx=this.aabb.maxx,t.aabb.maxy=this.aabb.maxy),this.zip_localCOM?(t.zip_localCOM=!0,t.zip_worldCOM=!0):(t.localCOMx=this.localCOMx,t.localCOMy=this.localCOMy),this.zip_worldCOM?t.zip_worldCOM=!0:(t.worldCOMx=this.worldCOMx,t.worldCOMy=this.worldCOMy),this.copyto(t.outer),t.outer}static _init(e,t){if(!Be._initialized){Be._initialized=!0,Be._zpp=e,Be._nape=t;for(let n of Object.getOwnPropertyNames(Ut.prototype))n!=="constructor"&&!(n in Be.prototype)&&(Be.prototype[n]=Ut.prototype[n])}}static _initEnums(e,t){let n=()=>{t.internal=!0;let s=new e.phys.BodyType;return t.internal=!1,s};t.BodyType_STATIC==null&&(t.BodyType_STATIC=n()),t.BodyType_DYNAMIC==null&&(t.BodyType_DYNAMIC=n()),t.BodyType_KINEMATIC==null&&(t.BodyType_KINEMATIC=n()),Be.types=[null,t.BodyType_STATIC,t.BodyType_DYNAMIC,t.BodyType_KINEMATIC]}};Be._nape=null,Be._zpp=null,Be.types=[],Be.bodystack=null,Be.bodyset=null,Be.cur_graph_depth=0,Be._initialized=!1;var Cn=Be;var $t=class $t{constructor(){this.outer_i=null;this.id=0;this.userData=null;this.ishape=null;this.ibody=null;this.icompound=null;this.wrap_cbTypes=null;this.cbSet=null;this.cbTypes=null;this.group=null;this.cbsets=null;this.outer=null;this.bodies=null;this.constraints=null;this.compounds=null;this.wrap_bodies=null;this.wrap_constraints=null;this.wrap_compounds=null;this.depth=0;this.compound=null;this.space=null;let e=$t._zpp;Ut.initFields(this),this.icompound=this,this.depth=1,this.bodies=new e.util.ZNPList_ZPP_Body,this.wrap_bodies=e.util.ZPP_BodyList.get(this.bodies),this.wrap_bodies.zpp_inner.adder=this.bodies_adder.bind(this),this.wrap_bodies.zpp_inner.subber=this.bodies_subber.bind(this),this.wrap_bodies.zpp_inner._modifiable=this.bodies_modifiable.bind(this),this.constraints=new e.util.ZNPList_ZPP_Constraint,this.wrap_constraints=e.util.ZPP_ConstraintList.get(this.constraints),this.wrap_constraints.zpp_inner.adder=this.constraints_adder.bind(this),this.wrap_constraints.zpp_inner.subber=this.constraints_subber.bind(this),this.wrap_constraints.zpp_inner._modifiable=this.constraints_modifiable.bind(this),this.compounds=new e.util.ZNPList_ZPP_Compound,this.wrap_compounds=e.util.ZPP_CompoundList.get(this.compounds),this.wrap_compounds.zpp_inner.adder=this.compounds_adder.bind(this),this.wrap_compounds.zpp_inner.subber=this.compounds_subber.bind(this),this.wrap_compounds.zpp_inner._modifiable=this.compounds_modifiable.bind(this)}__imutable_midstep(e){if(this.space!=null&&this.space.midstep)throw new Error("Error: "+e+" cannot be set during space step()")}addedToSpace(){this.__iaddedToSpace()}removedFromSpace(){this.__iremovedFromSpace()}breakApart(){for(this.space!=null&&(this.__iremovedFromSpace(),this.space.nullInteractorType(this)),this.compound!=null?this.compound.compounds.remove(this):this.space!=null&&this.space.compounds.remove(this);this.bodies.head!=null;){let e=this.bodies.pop_unsafe();(e.compound=this.compound)!=null?this.compound.bodies.add(e):this.space!=null&&this.space.bodies.add(e),this.space!=null&&this.space.freshInteractorType(e)}for(;this.constraints.head!=null;){let e=this.constraints.pop_unsafe();(e.compound=this.compound)!=null?this.compound.constraints.add(e):this.space!=null&&this.space.constraints.add(e)}for(;this.compounds.head!=null;){let e=this.compounds.pop_unsafe();(e.compound=this.compound)!=null?this.compound.compounds.add(e):this.space!=null&&this.space.compounds.add(e),this.space!=null&&this.space.freshInteractorType(e)}this.compound=null,this.space=null}static _zppOf(e){return e.zpp_inner??e._inner?.zpp_inner??e._inner}bodies_adder(e){let t=$t._zppOf(e);return t.compound!==this?(t.compound!=null?t.compound.wrap_bodies.remove(e):t.space!=null&&t.space.wrap_bodies.remove(e),t.compound=this,this.space!=null&&this.space.addBody(t),!0):!1}bodies_subber(e){let t=$t._zppOf(e);t.compound=null,this.space!=null&&this.space.remBody(t)}bodies_modifiable(){this.immutable_midstep("Compound::bodies")}constraints_adder(e){let t=$t._zppOf(e);return t.compound!==this?(t.compound!=null?t.compound.wrap_constraints.remove(e):t.space!=null&&t.space.wrap_constraints.remove(e),t.compound=this,this.space!=null&&this.space.addConstraint(t),!0):!1}constraints_subber(e){let t=$t._zppOf(e);t.compound=null,this.space!=null&&this.space.remConstraint(t)}constraints_modifiable(){this.immutable_midstep("Compound::constraints")}compounds_adder(e){let t=$t._zppOf(e),n=this;for(;n!=null&&n!==t;)n=n.compound;if(n===t)throw new Error("Error: Assignment would cause a cycle in the Compound tree: assigning "+e.toString()+".compound = "+this.outer.toString());return t.compound!==this?(t.compound!=null?t.compound.wrap_compounds.remove(e):t.space!=null&&t.space.wrap_compounds.remove(e),t.compound=this,t.depth=this.depth+1,this.space!=null&&this.space.addCompound(t),!0):!1}compounds_subber(e){let t=$t._zppOf(e);t.compound=null,t.depth=1,this.space!=null&&this.space.remCompound(t)}compounds_modifiable(){this.immutable_midstep("Compound::compounds")}copy(e,t){let n=$t._nape,s=$t._zpp,i=e==null;e==null&&(e=[]),t==null&&(t=[]);let l=new n.phys.Compound,r=this.compounds.head;for(;r!=null;){let c=r.elt.copy(e,t);if(c.zpp_inner.immutable_midstep("Compound::compound"),(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!==l&&((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!=null&&(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer).zpp_inner.wrap_compounds.remove(c),l!=null)){let h=l.zpp_inner.wrap_compounds;h.zpp_inner.reverse_flag?h.push(c):h.unshift(c)}r=r.next}let a=this.bodies.head;for(;a!=null;){let p=a.elt,c=p.outer.copy();if(e.push(s.constraint.ZPP_CopyHelper.dict(p.id,c)),(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!==l&&((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!=null&&(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer).zpp_inner.wrap_bodies.remove(c),l!=null)){let h=l.zpp_inner.wrap_bodies;h.zpp_inner.reverse_flag?h.push(c):h.unshift(c)}a=a.next}let o=this.constraints.head;for(;o!=null;){let c=o.elt.copy(e,t);if((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!==l&&((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!=null&&(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer).zpp_inner.wrap_constraints.remove(c),l!=null)){let h=l.zpp_inner.wrap_constraints;h.zpp_inner.reverse_flag?h.push(c):h.unshift(c)}o=o.next}if(i)for(;t.length>0;){let p=t.pop();for(let c=0;c<e.length;c++){let h=e[c];if(h.id===p.id){p.cb(h.bc);break}}}return this.copyto(l),l}static _init(){for(let e of Object.getOwnPropertyNames(Ut.prototype))e!=="constructor"&&!Object.prototype.hasOwnProperty.call($t.prototype,e)&&($t.prototype[e]=Ut.prototype[e])}};$t._nape=null,$t._zpp=null,$t._wrapFn=null;var qn=$t;var jt=class jt{constructor(){this.viscosity=1;this.density=1;this.gravityx=0;this.gravityy=0;this.wrap_gravity=null;this.shapes=null;this.wrap_shapes=null;this.outer=null;this.userData=null;this.next=null;this.shapes=new jt._zpp.util.ZNPList_ZPP_Shape}wrapper(){if(this.outer==null)if(jt._wrapFn)this.outer=jt._wrapFn(this);else{this.outer=new jt._nape.phys.FluidProperties;let e=this.outer.zpp_inner;e.outer=null,e.next=jt.zpp_pool,jt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer=null}alloc(){}feature_cons(){this.shapes=new jt._zpp.util.ZNPList_ZPP_Shape}addShape(e){this.shapes.add(e)}remShape(e){this.shapes.remove(e)}copy(){let e;return jt.zpp_pool==null?e=new jt:(e=jt.zpp_pool,jt.zpp_pool=e.next,e.next=null),e.viscosity=this.viscosity,e.density=this.density,e}gravity_invalidate(e){this.gravityx=e.x,this.gravityy=e.y,this.invalidate()}gravity_validate(){this.wrap_gravity.zpp_inner.x=this.gravityx,this.wrap_gravity.zpp_inner.y=this.gravityy}getgravity(){let e=jt._zpp,t=jt._nape,n=this.gravityx??0,s=this.gravityy??0;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else{if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let r=!1;l._validate!=null&&l._validate(),(l.x!==n||l.y!==s)&&(r=!0),r&&(l.x=n,l.y=s,l._invalidate!=null&&l._invalidate(l))}i.zpp_inner.weak=!1,this.wrap_gravity=i,this.wrap_gravity.zpp_inner._inuse=!0,this.wrap_gravity.zpp_inner._invalidate=this.gravity_invalidate.bind(this),this.wrap_gravity.zpp_inner._validate=this.gravity_validate.bind(this)}invalidate(){let e=this.shapes.head;for(;e!=null;)e.elt.invalidate_fluidprops(),e=e.next}};jt.zpp_pool=null,jt._nape=null,jt._zpp=null,jt._wrapFn=null;var Mn=jt;var Ft=class Ft{constructor(){this.elasticity=0;this.dynamicFriction=1;this.staticFriction=2;this.density=.001;this.rollingFriction=.01;this.shapes=null;this.wrap_shapes=null;this.outer=null;this.userData=null;this.next=null;this.shapes=new Ft._zpp.util.ZNPList_ZPP_Shape}wrapper(){if(this.outer==null)if(Ft._wrapFn)this.outer=Ft._wrapFn(this);else{this.outer=new Ft._nape.phys.Material;let e=this.outer.zpp_inner;e.outer=null,e.next=Ft.zpp_pool,Ft.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer=null}alloc(){}feature_cons(){this.shapes=new Ft._zpp.util.ZNPList_ZPP_Shape}addShape(e){this.shapes.add(e)}remShape(e){this.shapes.remove(e)}copy(){let e=new Ft;return e.dynamicFriction=this.dynamicFriction,e.staticFriction=this.staticFriction,e.density=this.density,e.elasticity=this.elasticity,e.rollingFriction=this.rollingFriction,e}set(e){this.dynamicFriction=e.dynamicFriction,this.staticFriction=e.staticFriction,this.density=e.density,this.elasticity=e.elasticity,this.rollingFriction=e.rollingFriction}invalidate(e){let t=this.shapes.head;for(;t!=null;)t.elt.invalidate_material(e),t=t.next}};Ft.zpp_pool=null,Ft.WAKE=1,Ft.PROPS=2,Ft.ANGDRAG=4,Ft.ARBITERS=8,Ft._nape=null,Ft._zpp=null,Ft._wrapFn=null;var Oe=Ft;var Zn=class Zn{constructor(e){this.outer=null;this.body=null;this.type=0;this.area=0;this.zip_area_inertia=!1;this.inertia=0;this.angDrag=0;this.zip_angDrag=!1;this.localCOMx=0;this.localCOMy=0;this.zip_localCOM=!1;this.worldCOMx=0;this.worldCOMy=0;this.zip_worldCOM=!1;this.wrap_localCOM=null;this.wrap_worldCOM=null;this.sweepRadius=0;this.zip_sweepRadius=!1;this.sweepCoef=0;this.circle=null;this.polygon=null;this.capsule=null;this.refmaterial=null;this.material=null;this.filter=null;this.fluidProperties=null;this.fluidEnabled=!1;this.sensorEnabled=!1;this.sweep=null;this.node=null;this.pairs=null;this.aabb=null;this.zip_aabb=!1;this.ishape=null;this.userData=null;e!==void 0&&this._initShape(e)}static _initEnums(e,t){let n=()=>{t.internal=!0;let s=new e.shape.ShapeType;return t.internal=!1,s};t.ShapeType_CIRCLE==null&&(t.ShapeType_CIRCLE=n()),t.ShapeType_POLYGON==null&&(t.ShapeType_POLYGON=n()),t.ShapeType_CAPSULE==null&&(t.ShapeType_CAPSULE=n()),Zn.types=[t.ShapeType_CIRCLE,t.ShapeType_POLYGON,t.ShapeType_CAPSULE]}_initShape(e){let t=Zn._zpp;Ut.initFields(this),this.pairs=new t.util.ZNPList_ZPP_AABBPair,this.ishape=this,this.type=e;let n;fe.zpp_pool==null?n=new fe:(n=fe.zpp_pool,fe.zpp_pool=n.next,n.next=null),n.minx=0,n.miny=0,n.maxx=0,n.maxy=0,this.aabb=n,this.aabb._immutable=!0,this.aabb._validate=this.aabb_validate.bind(this),this.zip_area_inertia=this.zip_angDrag=this.zip_localCOM=this.zip_sweepRadius=!0,this.localCOMx=0,this.localCOMy=0,this.worldCOMx=0,this.worldCOMy=0,this.fluidEnabled=!1,this.sensorEnabled=!1,this.fluidProperties=null,this.body=null,this.refmaterial=new Oe,this.sweepRadius=this.sweepCoef=0}static _init(){if(!Zn._initialized){Zn._initialized=!0;for(let e of Object.getOwnPropertyNames(Ut.prototype))e!=="constructor"&&!Object.prototype.hasOwnProperty.call(Zn.prototype,e)&&(Zn.prototype[e]=Ut.prototype[e])}}isCircle(){return this.type===0}isPolygon(){return this.type===1}isCapsule(){return this.type===2}invalidate_sweepRadius(){this.zip_sweepRadius=!0}validate_sweepRadius(){this.zip_sweepRadius&&(this.zip_sweepRadius=!1,this.type===0?this.circle.__validate_sweepRadius():this.type===1?this.polygon.__validate_sweepRadius():this.capsule.__validate_sweepRadius())}clear(){this.type===0?this.circle.__clear():this.type===1?this.polygon.__clear():this.capsule.__clear()}validate_aabb(){this.zip_aabb&&this.body!=null&&(this.zip_aabb=!1,this.type===0?this.circle.__validate_aabb():this.type===1?this.polygon.__validate_aabb():this.capsule.__validate_aabb())}force_validate_aabb(){this.type===0?this.circle._force_validate_aabb():this.type===1?this.polygon._force_validate_aabb():this.capsule._force_validate_aabb()}invalidate_aabb(){this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0)}validate_area_inertia(){this.zip_area_inertia&&(this.zip_area_inertia=!1,this.type===0?this.circle.__validate_area_inertia():this.type===1?this.polygon.__validate_area_inertia():this.capsule.__validate_area_inertia())}validate_angDrag(){(this.zip_angDrag||this.refmaterial.dynamicFriction!==this.material.dynamicFriction)&&(this.zip_angDrag=!1,this.refmaterial.dynamicFriction=this.material.dynamicFriction,this.type===0?this.circle.__validate_angDrag():this.type===1?this.polygon.__validate_angDrag():this.capsule.__validate_angDrag())}validate_localCOM(){this.zip_localCOM&&(this.zip_localCOM=!1,this.type===1&&this.polygon.__validate_localCOM(),this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy))}validate_worldCOM(){if(this.zip_worldCOM&&this.body!=null){this.zip_worldCOM=!1,this.validate_localCOM();let e=this.body;e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot)),this.worldCOMx=e.posx+(e.axisy*this.localCOMx-e.axisx*this.localCOMy),this.worldCOMy=e.posy+(this.localCOMx*e.axisx+this.localCOMy*e.axisy)}}getworldCOM(){if(this.body==null)throw new Error("Error: worldCOM only makes sense when Shape belongs to a Body");this.validate_worldCOM(),this.wrap_worldCOM.zpp_inner.x=this.worldCOMx,this.wrap_worldCOM.zpp_inner.y=this.worldCOMy}invalidate_area_inertia(){this.zip_area_inertia=!0,this.body!=null&&(this.body.zip_localCOM=!0,this.body.zip_worldCOM=!0,this.body.invalidate_mass(),this.body.invalidate_inertia())}invalidate_angDrag(){this.zip_angDrag=!0}invalidate_localCOM(){this.zip_localCOM=!0,this.invalidate_area_inertia(),(this.type===0||this.type===2)&&(this.zip_sweepRadius=!0),this.invalidate_angDrag(),this.invalidate_worldCOM(),this.body!=null&&(this.body.zip_localCOM=!0,this.body.zip_worldCOM=!0)}invalidate_worldCOM(){this.zip_worldCOM=!0,this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0)}invalidate_material(e){(e&Oe.WAKE)!==0&&this.wake(),(e&Oe.ARBITERS)!==0&&this.body!=null&&this.body.refreshArbiters(),(e&Oe.PROPS)!==0&&this.body!=null&&(this.body.zip_localCOM=!0,this.body.zip_worldCOM=!0,this.body.invalidate_mass(),this.body.invalidate_inertia()),(e&Oe.ANGDRAG)!==0&&this.invalidate_angDrag(),this.refmaterial.set(this.material)}invalidate_filter(){this.wake()}invalidate_fluidprops(){this.fluidEnabled&&this.wake()}aabb_validate(){if(this.body==null)throw new Error("Error: bounds only makes sense when Shape belongs to a Body");this.validate_aabb()}setMaterial(e){this.material!==e&&(this.body!=null&&this.body.space!=null&&this.material!=null&&this.material.shapes.remove(this),this.material=e,this.body!=null&&this.body.space!=null&&e.shapes.add(this),this.wake(),this.body!=null&&this.body.refreshArbiters())}setFilter(e){this.filter!==e&&(this.body!=null&&this.body.space!=null&&this.filter!=null&&this.filter.shapes.remove(this),this.filter=e,this.body!=null&&this.body.space!=null&&e.shapes.add(this),this.wake())}setFluid(e){this.fluidProperties!==e&&(this.body!=null&&this.body.space!=null&&this.fluidProperties!=null&&this.fluidProperties.shapes.remove(this),this.fluidProperties=e,this.body!=null&&this.body.space!=null&&e.shapes.add(this),this.fluidEnabled&&this.wake())}__immutable_midstep(e){if(this.body!=null&&this.body.space!=null&&this.body.space.midstep)throw new Error("Error: "+e+" cannot be set during a space step()")}addedToBody(){this.invalidate_worldCOM(),this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0)}removedFromBody(){}addedToSpace(){this.__iaddedToSpace(),this.material.shapes.add(this),this.filter.shapes.add(this),this.fluidProperties!=null&&this.fluidProperties.shapes.add(this)}removedFromSpace(){this.__iremovedFromSpace(),this.material.shapes.remove(this),this.filter.shapes.remove(this),this.fluidProperties!=null&&this.fluidProperties.shapes.remove(this)}copy(){let e=Zn._zpp,t=this.type===0?this.circle.__copy():this.type===1?this.polygon.__copy():this.capsule.__copy();this.zip_area_inertia?t.invalidate_area_inertia():(t.area=this.area,t.inertia=this.inertia),this.zip_sweepRadius?t.zip_sweepRadius=!0:(t.sweepRadius=this.sweepRadius,t.sweepCoef=this.sweepCoef),this.zip_angDrag?t.invalidate_angDrag():t.angDrag=this.angDrag,this.zip_aabb?(t.zip_aabb=!0,t.body!=null&&(t.body.zip_aabb=!0)):(t.aabb.minx=this.aabb.minx,t.aabb.miny=this.aabb.miny,t.aabb.maxx=this.aabb.maxx,t.aabb.maxy=this.aabb.maxy);let n=t.material;n.outer=null,n.next=Oe.zpp_pool,Oe.zpp_pool=n;let s=t.filter;return s.outer=null,s.next=e.dynamics.ZPP_InteractionFilter.zpp_pool,e.dynamics.ZPP_InteractionFilter.zpp_pool=s,t.material=this.material,t.filter=this.filter,this.fluidProperties!=null&&(t.fluidProperties=this.fluidProperties),t.fluidEnabled=this.fluidEnabled,t.sensorEnabled=this.sensorEnabled,this.userData!=null&&(t.userData=Object.assign({},this.userData)),this.copyto(t.outer),t.outer}};Zn._nape=null,Zn._zpp=null,Zn.types=[],Zn._initialized=!1;var ai=Zn;var kn=class kn{constructor(){this.radius=0;this.outer_zn=null;this.radius=0,this.outer_zn=null,this._initShape(0),this.circle=this,this.zip_localCOM=!1}static _init(){if(kn._initialized)return;kn._initialized=!0;let t=kn._zpp.shape.ZPP_Shape.prototype,n=kn.prototype;for(let s in t)Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[s]);for(let s of Object.getOwnPropertyNames(t))s!=="constructor"&&!Object.prototype.hasOwnProperty.call(n,s)&&(n[s]=t[s])}__clear(){}invalidate_radius(){this.invalidate_area_inertia(),this.invalidate_angDrag(),this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0),this.body!=null&&this.body.wake()}localCOM_validate(){this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy}localCOM_invalidate(e){this.localCOMx=e.x,this.localCOMy=e.y,this.invalidate_localCOM(),this.body!=null&&this.body.wake()}localCOM_immutable(){if(this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modify localCOM of Circle added to a static Body whilst within a Space")}setupLocalCOM(){let e=kn._zpp,t=kn._nape,n=this.localCOMx,s=this.localCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_localCOM=i,this.wrap_localCOM.zpp_inner._inuse=!0,this.wrap_localCOM.zpp_inner._validate=this.localCOM_validate.bind(this),this.wrap_localCOM.zpp_inner._invalidate=this.localCOM_invalidate.bind(this),this.wrap_localCOM.zpp_inner._isimmutable=this.localCOM_immutable.bind(this)}__validate_aabb(){if(this.zip_worldCOM&&this.body!=null){this.zip_worldCOM=!1,this.zip_localCOM&&(this.zip_localCOM=!1,this.type===1&&this.polygon.__validate_localCOM(),this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy));let n=this.body;n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),this.worldCOMx=n.posx+(n.axisy*this.localCOMx-n.axisx*this.localCOMy),this.worldCOMy=n.posy+(this.localCOMx*n.axisx+this.localCOMy*n.axisy)}let e=this.radius,t=this.radius;this.aabb.minx=this.worldCOMx-e,this.aabb.miny=this.worldCOMy-t,this.aabb.maxx=this.worldCOMx+e,this.aabb.maxy=this.worldCOMy+t}_force_validate_aabb(){let e=this.body;this.worldCOMx=e.posx+(e.axisy*this.localCOMx-e.axisx*this.localCOMy),this.worldCOMy=e.posy+(this.localCOMx*e.axisx+this.localCOMy*e.axisy),this.aabb.minx=this.worldCOMx-this.radius,this.aabb.miny=this.worldCOMy-this.radius,this.aabb.maxx=this.worldCOMx+this.radius,this.aabb.maxy=this.worldCOMy+this.radius}__validate_sweepRadius(){this.sweepCoef=Math.sqrt(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy),this.sweepRadius=this.sweepCoef+this.radius}__validate_area_inertia(){let e=this.radius*this.radius;this.area=e*Math.PI,this.inertia=e*.5+(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy)}__validate_angDrag(){let e=kn._nape,t=this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy,n=this.radius*this.radius,s=this.material.dynamicFriction*e.Config.fluidAngularDragFriction;this.angDrag=(t+2*n)*s+.5*e.Config.fluidAngularDrag*(1+e.Config.fluidVacuumDrag)*t,this.angDrag/=2*(t+.5*n)}__scale(e,t){let n=((e<0?-e:e)+(t<0?-t:t))/2;this.radius*=n<0?-n:n,this.invalidate_radius(),this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0&&(this.localCOMx*=e,this.localCOMy*=t,this.invalidate_localCOM())}__translate(e,t){this.localCOMx+=e,this.localCOMy+=t,this.invalidate_localCOM()}__rotate(e,t){if(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0){let n=t*this.localCOMx-e*this.localCOMy,s=this.localCOMx*e+this.localCOMy*t;this.localCOMx=n,this.localCOMy=s,this.invalidate_localCOM()}}__transform(e){let t=e.zpp_inner.a*e.zpp_inner.d-e.zpp_inner.b*e.zpp_inner.c;t<0&&(t=-t),this.radius*=Math.sqrt(t);let n=e.zpp_inner.a*this.localCOMx+e.zpp_inner.b*this.localCOMy+e.zpp_inner.tx;this.localCOMy=e.zpp_inner.c*this.localCOMx+e.zpp_inner.d*this.localCOMy+e.zpp_inner.ty,this.localCOMx=n,this.invalidate_radius(),this.invalidate_localCOM()}__copy(){let e=kn._nape,t=new e.shape.Circle(this.radius).zpp_inner_zn;return t.localCOMx=this.localCOMx,t.localCOMy=this.localCOMy,t.zip_localCOM=!1,t}};kn._nape=null,kn._zpp=null,kn._initialized=!1;var Hn=kn;var en=class en{constructor(){this.next=null;this.polygon=null;this.outer=null;this.lnormx=0;this.lnormy=0;this.wrap_lnorm=null;this.gnormx=0;this.gnormy=0;this.wrap_gnorm=null;this.length=0;this.lprojection=0;this.gprojection=0;this.lp0=null;this.gp0=null;this.lp1=null;this.gp1=null;this.tp0=0;this.tp1=0;this.lnormx=0,this.lnormy=0,this.gnormx=0,this.gnormy=0,this.length=0,this.lprojection=0,this.gprojection=0}free(){this.polygon=null}alloc(){}wrapper(){return this.outer==null&&(en._wrapFn?this.outer=en._wrapFn(this):(en.internal=!0,this.outer=new en._nape.shape.Edge,en.internal=!1,this.outer.zpp_inner=this)),this.outer}lnorm_validate(){if(this.polygon==null)throw new Error("Error: Edge not currently in use");this.polygon.validate_laxi(),this.wrap_lnorm.zpp_inner.x=this.lnormx,this.wrap_lnorm.zpp_inner.y=this.lnormy}gnorm_validate(){if(this.polygon==null)throw new Error("Error: Edge not currently in use");if(this.polygon.body==null)throw new Error("Error: Edge worldNormal only makes sense if the parent Polygon is contained within a rigid body");this.polygon.validate_gaxi(),this.wrap_gnorm.zpp_inner.x=this.gnormx,this.wrap_gnorm.zpp_inner.y=this.gnormy}getlnorm(){let e=en._zpp,t=en._nape,n=this.lnormx,s=this.lnormy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_lnorm=i,this.wrap_lnorm.zpp_inner._immutable=!0,this.wrap_lnorm.zpp_inner._validate=this.lnorm_validate.bind(this)}getgnorm(){let e=en._zpp,t=en._nape,n=this.gnormx,s=this.gnormy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_gnorm=i,this.wrap_gnorm.zpp_inner._immutable=!0,this.wrap_gnorm.zpp_inner._validate=this.gnorm_validate.bind(this)}};en.zpp_pool=null,en.internal=!1,en._nape=null,en._zpp=null,en._wrapFn=null;var ot=en;var mt=class mt{constructor(){this.outer_zn=null;this.lverts=null;this.wrap_lverts=null;this.gverts=null;this.wrap_gverts=null;this.edges=null;this.wrap_edges=null;this.edgeCnt=0;this.reverse_flag=!1;this.zip_lverts=!1;this.zip_laxi=!1;this.zip_gverts=!1;this.zip_gaxi=!1;this.zip_valid=!1;this.zip_sanitation=!1;this.validation=null;this.zip_sanitation=!1,this.zip_valid=!1,this.zip_gaxi=!1,this.zip_gverts=!1,this.zip_laxi=!1,this.zip_lverts=!1,this.reverse_flag=!1,this.edgeCnt=0,this.wrap_edges=null,this.edges=null,this.wrap_gverts=null,this.gverts=null,this.wrap_lverts=null,this.lverts=null,this.outer_zn=null;let e=mt._zpp;this._initShape(1),this.polygon=this,this.lverts=new e.geom.ZPP_Vec2,this.gverts=new e.geom.ZPP_Vec2,this.edges=new e.util.ZNPList_ZPP_Edge,this.edgeCnt=0}static _init(){if(mt._initialized)return;mt._initialized=!0;let t=mt._zpp.shape.ZPP_Shape.prototype,n=mt.prototype;for(let s in t)Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[s]);for(let s of Object.getOwnPropertyNames(t))s!=="constructor"&&!Object.prototype.hasOwnProperty.call(n,s)&&(n[s]=t[s])}__clear(){}lverts_pa_invalidate(e){this.invalidate_lverts()}lverts_pa_immutable(){if(this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modify local vertex of Polygon added to a static body whilst within a Space")}gverts_pa_validate(){if(this.body==null)throw new Error("Error: World vertex only makes sense when Polygon is contained in a rigid body");this._validateGverts()}lverts_post_adder(e){let t=mt._zpp;e.zpp_inner._invalidate=this.lverts_pa_invalidate.bind(this),e.zpp_inner._isimmutable=this.lverts_pa_immutable.bind(this);let n=null,s=null,i=this.lverts.next;for(;i!=null&&i!==e.zpp_inner;)n=n==null?this.gverts.next:n.next,s=s==null?this.edges.head:s.next,i=i.next;let l;if(t.geom.ZPP_Vec2.zpp_pool==null?l=new t.geom.ZPP_Vec2:(l=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!0,l.x=0,l.y=0,this.gverts.insert(n,l),this.lverts.next.next!=null)if(this.lverts.next.next.next==null){let r;ot.zpp_pool==null?r=new ot:(r=ot.zpp_pool,ot.zpp_pool=r.next,r.next=null),r.polygon=this,this.edges.add(r);let a;ot.zpp_pool==null?a=new ot:(a=ot.zpp_pool,ot.zpp_pool=a.next,a.next=null),a.polygon=this,this.edges.add(a),this.edgeCnt+=2}else{let r;ot.zpp_pool==null?r=new ot:(r=ot.zpp_pool,ot.zpp_pool=r.next,r.next=null),r.polygon=this,this.edges.insert(s,r),this.edgeCnt++}l._validate=this.gverts_pa_validate.bind(this)}lverts_subber(e){this.cleanup_lvert(e.zpp_inner)}lverts_invalidate(e){this.invalidate_lverts()}lverts_validate(){this.validate_lverts()}lverts_modifiable(){if(this.immutable_midstep("Polygon::localVerts"),this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modifiy shapes of static object once added to Space")}gverts_validate(){this._validateGverts()}edges_validate(){this.validate_lverts()}getlverts(){let e=mt._zpp;this.wrap_lverts=e.util.ZPP_MixVec2List.get(this.lverts),this.wrap_lverts.zpp_inner.post_adder=this.lverts_post_adder.bind(this),this.wrap_lverts.zpp_inner.subber=this.lverts_subber.bind(this),this.wrap_lverts.zpp_inner._invalidate=this.lverts_invalidate.bind(this),this.wrap_lverts.zpp_inner._validate=this.lverts_validate.bind(this),this.wrap_lverts.zpp_inner._modifiable=this.lverts_modifiable.bind(this),this.wrap_lverts.zpp_inner.reverse_flag=this.reverse_flag}getgverts(){let e=mt._zpp;this.wrap_gverts=e.util.ZPP_MixVec2List.get(this.gverts,!0),this.wrap_gverts.zpp_inner.reverse_flag=this.reverse_flag,this.wrap_gverts.zpp_inner._validate=this.gverts_validate.bind(this)}getedges(){let e=mt._zpp;this.wrap_edges=e.util.ZPP_EdgeList.get(this.edges,!0),this.wrap_edges.zpp_inner.reverse_flag=this.reverse_flag,this.wrap_edges.zpp_inner._validate=this.edges_validate.bind(this)}invalidate_lverts(){this.invalidate_laxi(),this.invalidate_area_inertia(),this.invalidate_angDrag(),this.invalidate_localCOM(),this.invalidate_gverts(),this.zip_lverts=!0,this.zip_valid=!0,this.zip_sanitation=!0,this.body!=null&&this.body.wake()}invalidate_laxi(){this.invalidate_gaxi(),this.zip_sweepRadius=!0,this.zip_laxi=!0}invalidate_gverts(){this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0),this.zip_gverts=!0}invalidate_gaxi(){this.zip_gaxi=!0}validate_lverts(){this.zip_lverts&&(this.zip_lverts=!1,this.lverts.length>2&&(this.validate_area_inertia(),this.area<0&&(this.reverse_vertices(),this.area=-this.area)))}validate_laxi(){if(this.zip_laxi){this.zip_laxi=!1,this.validate_lverts();let t=this.edges.head,n=this.lverts.next,s=n;for(n=n.next;n!=null;){let h=n,u=t.elt;t=t.next,u.lp0=s,u.lp1=h;let x=s.x-h.x,y=s.y-h.y,d=Math.sqrt(x*x+y*y);u.length=d;let _=1/d;x*=_,y*=_;let f=x;x=-y,y=f,u.lprojection=x*s.x+y*s.y,u.lnormx=x,u.lnormy=y,u.wrap_lnorm!=null&&(u.wrap_lnorm.zpp_inner.x=x,u.wrap_lnorm.zpp_inner.y=y),s=h,n=n.next}let i=this.lverts.next,l=t.elt;l.lp0=s,l.lp1=i;let r=s.x-i.x,a=s.y-i.y,o=Math.sqrt(r*r+a*a);l.length=o;let p=1/o;r*=p,a*=p;let c=r;r=-a,a=c,l.lprojection=r*s.x+a*s.y,l.lnormx=r,l.lnormy=a,l.wrap_lnorm!=null&&(l.wrap_lnorm.zpp_inner.x=r,l.wrap_lnorm.zpp_inner.y=a)}}validate_gverts(){this._validateGverts()}validate_gaxi(){if(this.zip_gaxi&&this.body!=null){this.zip_gaxi=!1,this.validate_laxi();let e=this.body;e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot)),this._validateGverts();let t=this.edges.head,n=this.gverts.next,s=n;for(n=n.next;n!=null;){let r=n,a=t.elt;t=t.next,a.gp0=s,a.gp1=r,a.gnormx=e.axisy*a.lnormx-e.axisx*a.lnormy,a.gnormy=a.lnormx*e.axisx+a.lnormy*e.axisy,a.gprojection=e.posx*a.gnormx+e.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy,s=r,n=n.next}let i=this.gverts.next,l=t.elt;l.gp0=s,l.gp1=i,l.gnormx=e.axisy*l.lnormx-e.axisx*l.lnormy,l.gnormy=l.lnormx*e.axisx+l.lnormy*e.axisy,l.gprojection=e.posx*l.gnormx+e.posy*l.gnormy+l.lprojection,l.wrap_gnorm!=null&&(l.wrap_gnorm.zpp_inner.x=l.gnormx,l.wrap_gnorm.zpp_inner.y=l.gnormy),l.tp0=l.gp0.y*l.gnormx-l.gp0.x*l.gnormy,l.tp1=l.gp1.y*l.gnormx-l.gp1.x*l.gnormy}}_validateGverts(){if(this.zip_gverts&&this.body!=null){this.zip_gverts=!1,this.validate_lverts();let e=this.body;e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot));let t=this.lverts.next,n=this.gverts.next;for(;n!=null;){let s=n,i=t;t=t.next,s.x=e.posx+(e.axisy*i.x-e.axisx*i.y),s.y=e.posy+(i.x*e.axisx+i.y*e.axisy),n=n.next}}}cleanup_lvert(e){let t=mt._zpp,n=null,s=null,i=this.lverts.next;for(;i!=null&&i!==e;)n=n==null?this.gverts.next:n.next,s=s==null?this.edges.head:s.next,i=i.next;let l=n==null?this.gverts.next:n.next;this.gverts.erase(n);let r=l;if(r.outer!=null&&(r.outer.zpp_inner=null,r.outer=null),r._isimmutable=null,r._validate=null,r._invalidate=null,r.next=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=r,this.edgeCnt===2){let a=this.edges.pop_unsafe();a.polygon=null,a.next=ot.zpp_pool,ot.zpp_pool=a,a=this.edges.pop_unsafe(),a.polygon=null,a.next=ot.zpp_pool,ot.zpp_pool=a,this.edgeCnt=0}else if(this.edgeCnt!==0){let a=s==null?this.edges.head.elt:s.next.elt;this.edges.erase(s),a.polygon=null,a.next=ot.zpp_pool,ot.zpp_pool=a,this.edgeCnt--}}splice_collinear(){this.zip_sanitation&&(this.zip_sanitation=!1,this.splice_collinear_real())}splice_collinear_real(){let e=mt._nape;if(this.lverts.next==null||this.lverts.next.next==null||this.lverts.next.next.next==null)return;let t=null,n=this.lverts.next;for(;n!=null;){let i=n.next==null?this.lverts.next:n.next,l=n.x-i.x,r=n.y-i.y;l*l+r*r<e.Config.epsilon*e.Config.epsilon?(this.cleanup_lvert(n),n=this.lverts.erase(t)):(t=n,n=n.next)}if(this.lverts.next==null)return;let s;for(;;){s=!1;let i=this.lverts.next;for(;i!=null;){let l=i.next==null?this.lverts.next:i.next,r=l.next==null?this.lverts.next:l.next,a=l.x-i.x,o=l.y-i.y,p=r.x-l.x,h=(r.y-l.y)*a-p*o;h*h>=e.Config.epsilon*e.Config.epsilon||(this.cleanup_lvert(l),this.lverts.erase(i.next==null?null:i),s=!0),i=i.next}if(!s)break}}reverse_vertices(){this.lverts.reverse(),this.gverts.reverse(),this.edges.reverse();let e=this.edges.iterator_at(this.edgeCnt-1),t=this.edges.pop_unsafe();this.edges.insert(e,t),this.reverse_flag=!this.reverse_flag,this.wrap_lverts!=null&&(this.wrap_lverts.zpp_inner.reverse_flag=this.reverse_flag),this.wrap_gverts!=null&&(this.wrap_gverts.zpp_inner.reverse_flag=this.reverse_flag),this.wrap_edges!=null&&(this.wrap_edges.zpp_inner.reverse_flag=this.reverse_flag)}valid(){let e=mt._nape,t=mt._zpp;if(this.zip_valid){if(this.zip_valid=!1,this.zip_sanitation&&(this.zip_sanitation=!1,this.splice_collinear_real()),this.lverts.length<3)return t.util.ZPP_Flags.ValidationResult_DEGENERATE==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_DEGENERATE=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_DEGENERATE;if(this.validate_lverts(),this.validate_area_inertia(),this.area<e.Config.epsilon)return t.util.ZPP_Flags.ValidationResult_DEGENERATE==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_DEGENERATE=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_DEGENERATE;{let n=!1,s=!1,i=!0,l=this.lverts.next,r=l;l=l.next;let a=l;for(l=l.next;l!=null;){let o=l,p=o.x-a.x,c=o.y-a.y,h=a.x-r.x,x=(a.y-r.y)*p-h*c;if(x>e.Config.epsilon?s=!0:x<-e.Config.epsilon&&(n=!0),s&&n){i=!1;break}r=a,a=o,l=l.next}if(i){l=this.lverts.next;let o=l,p=o.x-a.x,c=o.y-a.y,h=a.x-r.x,x=(a.y-r.y)*p-h*c;if(x>e.Config.epsilon?s=!0:x<-e.Config.epsilon&&(n=!0),!(s&&n)){r=a,a=o,l=l.next;let y=l,d=y.x-a.x,_=y.y-a.y,f=a.x-r.x,P=(a.y-r.y)*d-f*_;P>e.Config.epsilon?s=!0:P<-e.Config.epsilon&&(n=!0)}}if(s&&n)return t.util.ZPP_Flags.ValidationResult_CONCAVE==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_CONCAVE=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_CONCAVE;{let o=!0,p=this.lverts.next,c=p;for(p=p.next;p!=null&&o;){let h=p,u=this.lverts.next,x=u.next;for(;x!=null&&o;){let y=x;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e)),u=y,x=x.next}if(o){let y=this.lverts.next;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e))}c=h,p=p.next}if(o){let h=this.lverts.next,u=this.lverts.next,x=u.next;for(;x!=null&&o;){let y=x;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e)),u=y,x=x.next}if(o){let y=this.lverts.next;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e))}}return o?(t.util.ZPP_Flags.ValidationResult_VALID==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_VALID=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_VALID):(t.util.ZPP_Flags.ValidationResult_SELF_INTERSECTING==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_SELF_INTERSECTING=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_SELF_INTERSECTING)}}}else return this.validation}_checkNoIntersection(e,t,n,s,i){let l=e.x-n.x,r=e.y-n.y,a=t.x-e.x,o=t.y-e.y,p=s.x-n.x,c=s.y-n.y,h=o*p-a*c;if(h*h>i.Config.epsilon){h=1/h;let u=(c*l-p*r)*h;if(u>i.Config.epsilon&&u<1-i.Config.epsilon){let x=(o*l-a*r)*h;if(x>i.Config.epsilon&&x<1-i.Config.epsilon)return!1}}return!0}__validate_aabb(){if(this._validateGverts(),this.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let e=this.gverts.next;this.aabb.minx=e.x,this.aabb.miny=e.y,this.aabb.maxx=e.x,this.aabb.maxy=e.y;let t=this.gverts.next.next;for(;t!=null;){let n=t;n.x<this.aabb.minx&&(this.aabb.minx=n.x),n.x>this.aabb.maxx&&(this.aabb.maxx=n.x),n.y<this.aabb.miny&&(this.aabb.miny=n.y),n.y>this.aabb.maxy&&(this.aabb.maxy=n.y),t=t.next}}_force_validate_aabb(){let e=this.body,t=this.lverts.next,n=this.gverts.next,s=t;t=t.next,n.x=e.posx+(e.axisy*s.x-e.axisx*s.y),n.y=e.posy+(s.x*e.axisx+s.y*e.axisy),this.aabb.minx=n.x,this.aabb.miny=n.y,this.aabb.maxx=n.x,this.aabb.maxy=n.y;let i=this.gverts.next.next;for(;i!=null;){let l=i,r=t;t=t.next,l.x=e.posx+(e.axisy*r.x-e.axisx*r.y),l.y=e.posy+(r.x*e.axisx+r.y*e.axisy),l.x<this.aabb.minx&&(this.aabb.minx=l.x),l.x>this.aabb.maxx&&(this.aabb.maxx=l.x),l.y<this.aabb.miny&&(this.aabb.miny=l.y),l.y>this.aabb.maxy&&(this.aabb.maxy=l.y),i=i.next}}__validate_sweepRadius(){let e=0,t=0;this.validate_laxi();let n=this.lverts.next;for(;n!=null;){let i=n,l=i.x*i.x+i.y*i.y;l>e&&(e=l),n=n.next}let s=this.edges.head;for(;s!=null;){let i=s.elt;if(i.lprojection<t&&(t=i.lprojection,t<0))break;s=s.next}t<0&&(t=0),this.sweepRadius=Math.sqrt(e),this.sweepCoef=this.sweepRadius-t}__validate_area_inertia(){if(this.lverts.next==null||this.lverts.next.next==null||this.lverts.next.next.next==null)this.area=0,this.inertia=0;else{this.area=0;let e=0,t=0,n=this.lverts.next,s=n;n=n.next;let i=n;for(n=n.next;n!=null;){let p=n,c=i.y*s.x-i.x*s.y,h=i.x*i.x+i.y*i.y+(i.x*s.x+i.y*s.y)+(s.x*s.x+s.y*s.y);e+=c*h,t+=c,this.area+=i.x*(p.y-s.y),s=i,i=p,n=n.next}n=this.lverts.next;let l=n,r=i.y*s.x-i.x*s.y,a=i.x*i.x+i.y*i.y+(i.x*s.x+i.y*s.y)+(s.x*s.x+s.y*s.y);e+=r*a,t+=r,this.area+=i.x*(l.y-s.y),s=i,i=l,n=n.next;let o=n;r=i.y*s.x-i.x*s.y,a=i.x*i.x+i.y*i.y+(i.x*s.x+i.y*s.y)+(s.x*s.x+s.y*s.y),e+=r*a,t+=r,this.area+=i.x*(o.y-s.y),this.inertia=e/(6*t),this.area*=.5,this.area<0&&(this.area=-this.area,this.reverse_vertices())}}__validate_angDrag(){let e=mt._nape;if(this.lverts.length<3)throw new Error("Error: Polygon's with less than 3 vertices have no meaningful angDrag");this.validate_area_inertia(),this.validate_laxi();let t=0,n=this.edges.head,s=0,i=this.lverts.next,l=i,r=i.next;for(;r!=null;){let a=r,o=n.elt;n=n.next,s+=o.length;let p=a.x-l.x,c=a.y-l.y;t+=o.length*e.Config.fluidAngularDragFriction*this.material.dynamicFriction*o.lprojection*o.lprojection;let h=-(l.y*o.lnormx-l.x*o.lnormy)/(c*o.lnormx-p*o.lnormy);if(h>0){let u=h>1?1:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*l.x-o.lnormx*l.y,_=o.lnormy*x-o.lnormx*y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*u*o.length*e.Config.fluidAngularDrag}if(h<1){let u=h<0?0:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*x-o.lnormx*y,_=o.lnormy*a.x-o.lnormx*a.y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*e.Config.fluidVacuumDrag*(1-u)*o.length*e.Config.fluidAngularDrag}l=a,r=r.next}{let a=this.lverts.next,o=n.elt;s+=o.length;let p=a.x-l.x,c=a.y-l.y;t+=o.length*e.Config.fluidAngularDragFriction*this.material.dynamicFriction*o.lprojection*o.lprojection;let h=-(l.y*o.lnormx-l.x*o.lnormy)/(c*o.lnormx-p*o.lnormy);if(h>0){let u=h>1?1:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*l.x-o.lnormx*l.y,_=o.lnormy*x-o.lnormx*y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*u*o.length*e.Config.fluidAngularDrag}if(h<1){let u=h<0?0:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*x-o.lnormx*y,_=o.lnormy*a.x-o.lnormx*a.y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*e.Config.fluidVacuumDrag*(1-u)*o.length*e.Config.fluidAngularDrag}}this.angDrag=t/(this.inertia*s)}__validate_localCOM(){if(this.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(this.lverts.next.next==null)this.localCOMx=this.lverts.next.x,this.localCOMy=this.lverts.next.y;else if(this.lverts.next.next.next==null)this.localCOMx=this.lverts.next.x,this.localCOMy=this.lverts.next.y,this.localCOMx+=this.lverts.next.next.x,this.localCOMy+=this.lverts.next.next.y,this.localCOMx*=.5,this.localCOMy*=.5;else{this.localCOMx=0,this.localCOMy=0;let e=0,t=this.lverts.next,n=t;t=t.next;let s=t;for(t=t.next;t!=null;){let a=t;e+=s.x*(a.y-n.y);let o=a.y*s.x-a.x*s.y;this.localCOMx+=(s.x+a.x)*o,this.localCOMy+=(s.y+a.y)*o,n=s,s=a,t=t.next}t=this.lverts.next;let i=t;e+=s.x*(i.y-n.y);let l=i.y*s.x-i.x*s.y;this.localCOMx+=(s.x+i.x)*l,this.localCOMy+=(s.y+i.y)*l,n=s,s=i,t=t.next;let r=t;e+=s.x*(r.y-n.y),l=r.y*s.x-r.x*s.y,this.localCOMx+=(s.x+r.x)*l,this.localCOMy+=(s.y+r.y)*l,e=1/(3*e),this.localCOMx*=e,this.localCOMy*=e}}localCOM_validate(){if(this.lverts.next==null)throw new Error("Error: An empty polygon does not have any meaningful localCOM");this.validate_localCOM()}localCOM_invalidate(e){this.validate_localCOM();let t=e.x-this.localCOMx,n=e.y-this.localCOMy,s=this.lverts.next;for(;s!=null;)s.x+=t,s.y+=n,s=s.next;this.invalidate_lverts()}setupLocalCOM(){let e=mt._zpp,t=mt._nape,n=this.localCOMx,s=this.localCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_localCOM=i,this.wrap_localCOM.zpp_inner._inuse=!0,this.wrap_localCOM.zpp_inner._validate=this.localCOM_validate.bind(this),this.wrap_localCOM.zpp_inner._invalidate=this.localCOM_invalidate.bind(this)}__translate(e,t){let n=this.lverts.next;for(;n!=null;)n.x+=e,n.y+=t,n=n.next;this.invalidate_lverts()}__scale(e,t){let n=this.lverts.next;for(;n!=null;)n.x*=e,n.y*=t,n=n.next;this.invalidate_lverts()}__rotate(e,t){let n=this.lverts.next;for(;n!=null;){let s=t*n.x-e*n.y,i=n.x*e+n.y*t;n.x=s,n.y=i,n=n.next}this.invalidate_lverts()}__transform(e){let t=this.lverts.next;for(;t!=null;){let n=e.zpp_inner.a*t.x+e.zpp_inner.b*t.y+e.zpp_inner.tx;t.y=e.zpp_inner.c*t.x+e.zpp_inner.d*t.y+e.zpp_inner.ty,t.x=n,t=t.next}this.invalidate_lverts()}__copy(){let e=mt._nape;this.outer_zn.zpp_inner_zn.wrap_lverts==null&&this.outer_zn.zpp_inner_zn.getlverts();let t=this.outer_zn.zpp_inner_zn.wrap_lverts,n=[],s=t.iterator();for(;s.hasNext();)n.push(s.next());return new e.shape.Polygon(n).zpp_inner_zn}};mt._nape=null,mt._zpp=null,mt._initialized=!1;var Qn=mt;var En=class En{constructor(){this.radius=0;this.halfLength=0;this.outer_zn=null;this.spine1x=0;this.spine1y=0;this.spine2x=0;this.spine2y=0;this.radius=0,this.halfLength=0,this.outer_zn=null,this._initShape(2),this.capsule=this,this.zip_localCOM=!1}static _init(){if(En._initialized)return;En._initialized=!0;let t=En._zpp.shape.ZPP_Shape.prototype,n=En.prototype;for(let s in t)Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[s]);for(let s of Object.getOwnPropertyNames(t))s!=="constructor"&&!Object.prototype.hasOwnProperty.call(n,s)&&(n[s]=t[s])}__clear(){}invalidate_radius(){this.invalidate_area_inertia(),this.invalidate_angDrag(),this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0,this.body.wake())}invalidate_halfLength(){this.invalidate_area_inertia(),this.invalidate_angDrag(),this.zip_aabb=!0,this.zip_sweepRadius=!0,this.body!=null&&(this.body.zip_aabb=!0,this.body.wake())}localCOM_validate(){this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy}localCOM_invalidate(e){this.localCOMx=e.x,this.localCOMy=e.y,this.invalidate_localCOM(),this.body!=null&&this.body.wake()}localCOM_immutable(){if(this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modify localCOM of Capsule added to a static Body whilst within a Space")}setupLocalCOM(){let e=En._zpp,t=En._nape,n=this.localCOMx,s=this.localCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_localCOM=i,this.wrap_localCOM.zpp_inner._inuse=!0,this.wrap_localCOM.zpp_inner._validate=this.localCOM_validate.bind(this),this.wrap_localCOM.zpp_inner._invalidate=this.localCOM_invalidate.bind(this),this.wrap_localCOM.zpp_inner._isimmutable=this.localCOM_immutable.bind(this)}__validate_aabb(){if(this.zip_worldCOM&&this.body!=null){this.zip_worldCOM=!1,this.zip_localCOM&&(this.zip_localCOM=!1,this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy));let c=this.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),this.worldCOMx=c.posx+(c.axisy*this.localCOMx-c.axisx*this.localCOMy),this.worldCOMy=c.posy+(this.localCOMx*c.axisx+this.localCOMy*c.axisy)}let e=this.body;if(e!=null){e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot));let c=e.axisy*this.halfLength,h=e.axisx*this.halfLength;this.spine1x=this.worldCOMx-c,this.spine1y=this.worldCOMy-h,this.spine2x=this.worldCOMx+c,this.spine2y=this.worldCOMy+h}let t=this.radius,n=this.spine1x-t,s=this.spine2x-t,i=this.spine1y-t,l=this.spine2y-t,r=this.spine1x+t,a=this.spine2x+t,o=this.spine1y+t,p=this.spine2y+t;this.aabb.minx=n<s?n:s,this.aabb.miny=i<l?i:l,this.aabb.maxx=r>a?r:a,this.aabb.maxy=o>p?o:p}_force_validate_aabb(){let e=this.body;this.worldCOMx=e.posx+(e.axisy*this.localCOMx-e.axisx*this.localCOMy),this.worldCOMy=e.posy+(this.localCOMx*e.axisx+this.localCOMy*e.axisy);let t=e.axisy*this.halfLength,n=e.axisx*this.halfLength;this.spine1x=this.worldCOMx-t,this.spine1y=this.worldCOMy-n,this.spine2x=this.worldCOMx+t,this.spine2y=this.worldCOMy+n;let s=this.radius,i=this.spine1x-s,l=this.spine2x-s,r=this.spine1y-s,a=this.spine2y-s,o=this.spine1x+s,p=this.spine2x+s,c=this.spine1y+s,h=this.spine2y+s;this.aabb.minx=i<l?i:l,this.aabb.miny=r<a?r:a,this.aabb.maxx=o>p?o:p,this.aabb.maxy=c>h?c:h}__validate_sweepRadius(){let e=Math.sqrt(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy);this.sweepCoef=e+this.halfLength,this.sweepRadius=this.sweepCoef+this.radius}__validate_area_inertia(){let e=this.radius,t=this.halfLength,n=e*e;this.area=Math.PI*n+4*t*e;let s=2*t*(2*e)*(2*e*(2*e)+2*t*(2*t))/12,i=Math.PI*n*(n*.5+t*t);this.inertia=(s+i)/this.area+(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy)}__validate_angDrag(){let e=En._nape,t=this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy,n=this.radius*this.radius,s=this.halfLength*this.halfLength,i=this.material.dynamicFriction*e.Config.fluidAngularDragFriction;this.angDrag=(t+2*n+s)*i+.5*e.Config.fluidAngularDrag*(1+e.Config.fluidVacuumDrag)*t,this.angDrag/=2*(t+.5*n+s/3)}__scale(e,t){let n=((e<0?-e:e)+(t<0?-t:t))/2,s=n<0?-n:n;this.radius*=s,this.halfLength*=s,this.invalidate_radius(),this.invalidate_halfLength(),this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0&&(this.localCOMx*=e,this.localCOMy*=t,this.invalidate_localCOM())}__translate(e,t){this.localCOMx+=e,this.localCOMy+=t,this.invalidate_localCOM()}__rotate(e,t){if(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0){let n=t*this.localCOMx-e*this.localCOMy,s=this.localCOMx*e+this.localCOMy*t;this.localCOMx=n,this.localCOMy=s,this.invalidate_localCOM()}}__transform(e){let t=e.zpp_inner.a*e.zpp_inner.d-e.zpp_inner.b*e.zpp_inner.c;t<0&&(t=-t);let n=Math.sqrt(t);this.radius*=n,this.halfLength*=n;let s=e.zpp_inner.a*this.localCOMx+e.zpp_inner.b*this.localCOMy+e.zpp_inner.tx;this.localCOMy=e.zpp_inner.c*this.localCOMx+e.zpp_inner.d*this.localCOMy+e.zpp_inner.ty,this.localCOMx=s,this.invalidate_radius(),this.invalidate_halfLength(),this.invalidate_localCOM()}__copy(){let e=En._nape,t=2*(this.halfLength+this.radius),n=2*this.radius,s=new e.shape.Capsule(t,n).zpp_inner_zn;return s.localCOMx=this.localCOMx,s.localCOMy=this.localCOMy,s.zip_localCOM=!1,s}};En._nape=null,En._zpp=null,En._initialized=!1;var $n=En;var vi=class vi{constructor(){this.space=null;this.is_sweep=!1;this.sweep=null;this.dynab=null;this.aabbShape=null;this.matrix=null;this.circShape=null}static _initFields(e){e.space=null,e.is_sweep=!1,e.sweep=null,e.dynab=null,e.aabbShape=null,e.matrix=null,e.circShape=null}insert(e){this.is_sweep?this.sweep.__insert(e):this.dynab.__insert(e)}remove(e){this.is_sweep?this.sweep.__remove(e):this.dynab.__remove(e)}sync(e){if(this.is_sweep){if(!this.sweep.space.continuous&&e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let t=e.circle;if(t.zip_worldCOM&&t.body!=null){if(t.zip_worldCOM=!1,t.zip_localCOM){if(t.zip_localCOM=!1,t.type==1){let l=t.polygon;if(l.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(l.lverts.next.next==null)l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;else if(l.lverts.next.next.next==null){l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;let r=1;l.localCOMx+=l.lverts.next.next.x*r,l.localCOMy+=l.lverts.next.next.y*r;let a=.5;l.localCOMx*=a,l.localCOMy*=a}else{l.localCOMx=0,l.localCOMy=0;let r=0,a=l.lverts.next,o=a;a=a.next;let p=a;for(a=a.next;a!=null;){let d=a;r+=p.x*(d.y-o.y);let _=d.y*p.x-d.x*p.y;l.localCOMx+=(p.x+d.x)*_,l.localCOMy+=(p.y+d.y)*_,o=p,p=d,a=a.next}a=l.lverts.next;let c=a;r+=p.x*(c.y-o.y);let h=c.y*p.x-c.x*p.y;l.localCOMx+=(p.x+c.x)*h,l.localCOMy+=(p.y+c.y)*h,o=p,p=c,a=a.next;let u=a;r+=p.x*(u.y-o.y);let x=u.y*p.x-u.x*p.y;l.localCOMx+=(p.x+u.x)*x,l.localCOMy+=(p.y+u.y)*x,r=1/(3*r);let y=r;l.localCOMx*=y,l.localCOMy*=y}}t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy)}let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}let n=t.radius,s=t.radius;t.aabb.minx=t.worldCOMx-n,t.aabb.miny=t.worldCOMy-s,t.aabb.maxx=t.worldCOMx+n,t.aabb.maxy=t.worldCOMy+s}else{let t=e.polygon;if(t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot));let l=t.lverts.next,r=t.gverts.next;for(;r!=null;){let a=r,o=l;l=l.next,a.x=t.body.posx+(t.body.axisy*o.x-t.body.axisx*o.y),a.y=t.body.posy+(o.x*t.body.axisx+o.y*t.body.axisy),r=r.next}}if(t.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let n=t.gverts.next;t.aabb.minx=n.x,t.aabb.miny=n.y,t.aabb.maxx=n.x,t.aabb.maxy=n.y;let s=t.gverts.next.next;for(;s!=null;){let i=s;i.x<t.aabb.minx&&(t.aabb.minx=i.x),i.x>t.aabb.maxx&&(t.aabb.maxx=i.x),i.y<t.aabb.miny&&(t.aabb.miny=i.y),i.y>t.aabb.maxy&&(t.aabb.maxy=i.y),s=s.next}}}else{let t=this.dynab,n=e.node;if(!n.synced){if(!t.space.continuous&&e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let i=e.circle;if(i.zip_worldCOM&&i.body!=null){if(i.zip_worldCOM=!1,i.zip_localCOM){if(i.zip_localCOM=!1,i.type==1){let o=i.polygon;if(o.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(o.lverts.next.next==null)o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;else if(o.lverts.next.next.next==null){o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;let p=1;o.localCOMx+=o.lverts.next.next.x*p,o.localCOMy+=o.lverts.next.next.y*p;let c=.5;o.localCOMx*=c,o.localCOMy*=c}else{o.localCOMx=0,o.localCOMy=0;let p=0,c=o.lverts.next,h=c;c=c.next;let u=c;for(c=c.next;c!=null;){let z=c;p+=u.x*(z.y-h.y);let P=z.y*u.x-z.x*u.y;o.localCOMx+=(u.x+z.x)*P,o.localCOMy+=(u.y+z.y)*P,h=u,u=z,c=c.next}c=o.lverts.next;let x=c;p+=u.x*(x.y-h.y);let y=x.y*u.x-x.x*u.y;o.localCOMx+=(u.x+x.x)*y,o.localCOMy+=(u.y+x.y)*y,h=u,u=x,c=c.next;let d=c;p+=u.x*(d.y-h.y);let _=d.y*u.x-d.x*u.y;o.localCOMx+=(u.x+d.x)*_,o.localCOMy+=(u.y+d.y)*_,p=1/(3*p);let f=p;o.localCOMx*=f,o.localCOMy*=f}}i.wrap_localCOM!=null&&(i.wrap_localCOM.zpp_inner.x=i.localCOMx,i.wrap_localCOM.zpp_inner.y=i.localCOMy)}let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot)),i.worldCOMx=i.body.posx+(i.body.axisy*i.localCOMx-i.body.axisx*i.localCOMy),i.worldCOMy=i.body.posy+(i.localCOMx*i.body.axisx+i.localCOMy*i.body.axisy)}let l=i.radius,r=i.radius;i.aabb.minx=i.worldCOMx-l,i.aabb.miny=i.worldCOMy-r,i.aabb.maxx=i.worldCOMx+l,i.aabb.maxy=i.worldCOMy+r}else{let i=e.polygon;if(i.zip_gverts&&i.body!=null){i.zip_gverts=!1,i.validate_lverts();let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot));let o=i.lverts.next,p=i.gverts.next;for(;p!=null;){let c=p,h=o;o=o.next,c.x=i.body.posx+(i.body.axisy*h.x-i.body.axisx*h.y),c.y=i.body.posy+(h.x*i.body.axisx+h.y*i.body.axisy),p=p.next}}if(i.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let l=i.gverts.next;i.aabb.minx=l.x,i.aabb.miny=l.y,i.aabb.maxx=l.x,i.aabb.maxy=l.y;let r=i.gverts.next.next;for(;r!=null;){let a=r;a.x<i.aabb.minx&&(i.aabb.minx=a.x),a.x>i.aabb.maxx&&(i.aabb.maxx=a.x),a.y<i.aabb.miny&&(i.aabb.miny=a.y),a.y>i.aabb.maxy&&(i.aabb.maxy=a.y),r=r.next}}let s;if(n.dyn==(e.body.type==1?!1:!e.body.component.sleeping)){let i=n.aabb,l=e.aabb;s=!(l.minx>=i.minx&&l.miny>=i.miny&&l.maxx<=i.maxx&&l.maxy<=i.maxy)}else s=!0;s&&(n.synced=!0,n.snext=t.syncs,t.syncs=n)}}}broadphase(e,t){}clear(){}shapesUnderPoint(e,t,n,s){return null}bodiesUnderPoint(e,t,n,s){return null}updateAABBShape(e){let t=vi._zpp,n=vi._nape;if(this.aabbShape==null){t.util.ZPP_Flags.BodyType_STATIC==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.BodyType_STATIC=new n.phys.BodyType,t.util.ZPP_Flags.internal=!1);let r=new n.phys.Body(t.util.ZPP_Flags.BodyType_STATIC).zpp_inner.wrap_shapes,a=this.aabbShape=new n.shape.Polygon(n.shape.Polygon.rect(e.minx,e.miny,e.maxx-e.minx,e.maxy-e.miny));r.zpp_inner.reverse_flag?r.push(a):r.unshift(a)}else{let l=this.aabbShape.zpp_inner.aabb,r=(e.maxx-e.minx)/(l.maxx-l.minx),a=(e.maxy-e.miny)/(l.maxy-l.miny);this.matrix==null&&(this.matrix=new n.geom.Mat23);let o=this.matrix;if(r!==r)throw new Error("Error: Mat23::a cannot be NaN");o.zpp_inner.a=r;let p=o.zpp_inner;p._invalidate!=null&&p._invalidate();let c=this.matrix,h=this.matrix;h.zpp_inner.c=0;let u=h.zpp_inner;u._invalidate!=null&&u._invalidate();let x=h.zpp_inner.c;if(x!==x)throw new Error("Error: Mat23::b cannot be NaN");c.zpp_inner.b=x;let y=c.zpp_inner;y._invalidate!=null&&y._invalidate();let d=this.matrix;if(a!==a)throw new Error("Error: Mat23::d cannot be NaN");d.zpp_inner.d=a;let _=d.zpp_inner;_._invalidate!=null&&_._invalidate();let f=this.matrix,z=e.minx-r*l.minx;if(z!==z)throw new Error("Error: Mat23::tx cannot be NaN");f.zpp_inner.tx=z;let P=f.zpp_inner;P._invalidate!=null&&P._invalidate();let k=this.matrix,m=e.miny-a*l.miny;if(m!==m)throw new Error("Error: Mat23::ty cannot be NaN");k.zpp_inner.ty=m;let b=k.zpp_inner;b._invalidate!=null&&b._invalidate(),this.aabbShape.transform(this.matrix)}let s=this.aabbShape.zpp_inner;if(s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let l=s.circle;if(l.zip_worldCOM&&l.body!=null){if(l.zip_worldCOM=!1,l.zip_localCOM){if(l.zip_localCOM=!1,l.type==1){let p=l.polygon;if(p.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(p.lverts.next.next==null)p.localCOMx=p.lverts.next.x,p.localCOMy=p.lverts.next.y;else if(p.lverts.next.next.next==null){p.localCOMx=p.lverts.next.x,p.localCOMy=p.lverts.next.y;let c=1;p.localCOMx+=p.lverts.next.next.x*c,p.localCOMy+=p.lverts.next.next.y*c;let h=.5;p.localCOMx*=h,p.localCOMy*=h}else{p.localCOMx=0,p.localCOMy=0;let c=0,h=p.lverts.next,u=h;h=h.next;let x=h;for(h=h.next;h!=null;){let P=h;c+=x.x*(P.y-u.y);let k=P.y*x.x-P.x*x.y;p.localCOMx+=(x.x+P.x)*k,p.localCOMy+=(x.y+P.y)*k,u=x,x=P,h=h.next}h=p.lverts.next;let y=h;c+=x.x*(y.y-u.y);let d=y.y*x.x-y.x*x.y;p.localCOMx+=(x.x+y.x)*d,p.localCOMy+=(x.y+y.y)*d,u=x,x=y,h=h.next;let _=h;c+=x.x*(_.y-u.y);let f=_.y*x.x-_.x*x.y;p.localCOMx+=(x.x+_.x)*f,p.localCOMy+=(x.y+_.y)*f,c=1/(3*c);let z=c;p.localCOMx*=z,p.localCOMy*=z}}l.wrap_localCOM!=null&&(l.wrap_localCOM.zpp_inner.x=l.localCOMx,l.wrap_localCOM.zpp_inner.y=l.localCOMy)}let o=l.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot)),l.worldCOMx=l.body.posx+(l.body.axisy*l.localCOMx-l.body.axisx*l.localCOMy),l.worldCOMy=l.body.posy+(l.localCOMx*l.body.axisx+l.localCOMy*l.body.axisy)}let r=l.radius,a=l.radius;l.aabb.minx=l.worldCOMx-r,l.aabb.miny=l.worldCOMy-a,l.aabb.maxx=l.worldCOMx+r,l.aabb.maxy=l.worldCOMy+a}else{let l=s.polygon;if(l.zip_gverts&&l.body!=null){l.zip_gverts=!1,l.validate_lverts();let o=l.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=l.lverts.next,c=l.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=l.body.posx+(l.body.axisy*u.x-l.body.axisx*u.y),h.y=l.body.posy+(u.x*l.body.axisx+u.y*l.body.axisy),c=c.next}}if(l.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let r=l.gverts.next;l.aabb.minx=r.x,l.aabb.miny=r.y,l.aabb.maxx=r.x,l.aabb.maxy=r.y;let a=l.gverts.next.next;for(;a!=null;){let o=a;o.x<l.aabb.minx&&(l.aabb.minx=o.x),o.x>l.aabb.maxx&&(l.aabb.maxx=o.x),o.y<l.aabb.miny&&(l.aabb.miny=o.y),o.y>l.aabb.maxy&&(l.aabb.maxy=o.y),a=a.next}}let i=this.aabbShape.zpp_inner.polygon;if(i.zip_gaxi&&i.body!=null){i.zip_gaxi=!1,i.validate_laxi();let l=i.body;if(l.zip_axis&&(l.zip_axis=!1,l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot)),i.zip_gverts&&i.body!=null){i.zip_gverts=!1,i.validate_lverts();let h=i.body;h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot));let u=i.lverts.next,x=i.gverts.next;for(;x!=null;){let y=x,d=u;u=u.next,y.x=i.body.posx+(i.body.axisy*d.x-i.body.axisx*d.y),y.y=i.body.posy+(d.x*i.body.axisx+d.y*i.body.axisy),x=x.next}}let r=i.edges.head,a=i.gverts.next,o=a;for(a=a.next;a!=null;){let h=a,u=r.elt;r=r.next,u.gp0=o,u.gp1=h,u.gnormx=i.body.axisy*u.lnormx-i.body.axisx*u.lnormy,u.gnormy=u.lnormx*i.body.axisx+u.lnormy*i.body.axisy,u.gprojection=i.body.posx*u.gnormx+i.body.posy*u.gnormy+u.lprojection,u.wrap_gnorm!=null&&(u.wrap_gnorm.zpp_inner.x=u.gnormx,u.wrap_gnorm.zpp_inner.y=u.gnormy),u.tp0=u.gp0.y*u.gnormx-u.gp0.x*u.gnormy,u.tp1=u.gp1.y*u.gnormx-u.gp1.x*u.gnormy,o=h,a=a.next}let p=i.gverts.next,c=r.elt;r=r.next,c.gp0=o,c.gp1=p,c.gnormx=i.body.axisy*c.lnormx-i.body.axisx*c.lnormy,c.gnormy=c.lnormx*i.body.axisx+c.lnormy*i.body.axisy,c.gprojection=i.body.posx*c.gnormx+i.body.posy*c.gnormy+c.lprojection,c.wrap_gnorm!=null&&(c.wrap_gnorm.zpp_inner.x=c.gnormx,c.wrap_gnorm.zpp_inner.y=c.gnormy),c.tp0=c.gp0.y*c.gnormx-c.gp0.x*c.gnormy,c.tp1=c.gp1.y*c.gnormx-c.gp1.x*c.gnormy}}shapesInAABB(e,t,n,s,i){return null}bodiesInAABB(e,t,n,s,i){return null}updateCircShape(e,t,n){let s=vi._zpp,i=vi._nape;if(this.circShape==null){s.util.ZPP_Flags.BodyType_STATIC==null&&(s.util.ZPP_Flags.internal=!0,s.util.ZPP_Flags.BodyType_STATIC=new i.phys.BodyType,s.util.ZPP_Flags.internal=!1);let a=new i.phys.Body(s.util.ZPP_Flags.BodyType_STATIC).zpp_inner.wrap_shapes,o=e,p=t;if(p==null&&(p=0),o==null&&(o=0),o!==o||p!==p)throw new Error("Error: Vec2 components cannot be NaN");let c;if(s.util.ZPP_PubPool.poolVec2==null?c=new i.geom.Vec2:(c=s.util.ZPP_PubPool.poolVec2,s.util.ZPP_PubPool.poolVec2=c.zpp_pool,c.zpp_pool=null,c.zpp_disp=!1,c==s.util.ZPP_PubPool.nextVec2&&(s.util.ZPP_PubPool.nextVec2=null)),c.zpp_inner==null){let u;s.geom.ZPP_Vec2.zpp_pool==null?u=new s.geom.ZPP_Vec2:(u=s.geom.ZPP_Vec2.zpp_pool,s.geom.ZPP_Vec2.zpp_pool=u.next,u.next=null),u.weak=!1,u._immutable=!1,u.x=o,u.y=p,c.zpp_inner=u,c.zpp_inner.outer=c}else{if(c!=null&&c.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=c.zpp_inner;if(u._immutable)throw new Error("Error: Vec2 is immutable");if(u._isimmutable!=null&&u._isimmutable(),o!==o||p!==p)throw new Error("Error: Vec2 components cannot be NaN");let x;if(c!=null&&c.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let y=c.zpp_inner;if(y._validate!=null&&y._validate(),c.zpp_inner.x==o){if(c!=null&&c.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let d=c.zpp_inner;d._validate!=null&&d._validate(),x=c.zpp_inner.y==p}else x=!1;if(!x){c.zpp_inner.x=o,c.zpp_inner.y=p;let d=c.zpp_inner;d._invalidate!=null&&d._invalidate(d)}}c.zpp_inner.weak=!1;let h=this.circShape=new i.shape.Circle(n,c);a.zpp_inner.reverse_flag?a.push(h):a.unshift(h)}else{let r=this.circShape.zpp_inner.circle,a=n/r.radius;this.matrix==null&&(this.matrix=new i.geom.Mat23);let o=this.matrix,p=this.matrix;if(a!==a)throw new Error("Error: Mat23::d cannot be NaN");p.zpp_inner.d=a;let c=p.zpp_inner;c._invalidate!=null&&c._invalidate();let h=p.zpp_inner.d;if(h!==h)throw new Error("Error: Mat23::a cannot be NaN");o.zpp_inner.a=h;let u=o.zpp_inner;u._invalidate!=null&&u._invalidate();let x=this.matrix,y=this.matrix;y.zpp_inner.c=0;let d=y.zpp_inner;d._invalidate!=null&&d._invalidate();let _=y.zpp_inner.c;if(_!==_)throw new Error("Error: Mat23::b cannot be NaN");x.zpp_inner.b=_;let f=x.zpp_inner;f._invalidate!=null&&f._invalidate();let z=this.matrix,P=e-a*r.localCOMx;if(P!==P)throw new Error("Error: Mat23::tx cannot be NaN");z.zpp_inner.tx=P;let k=z.zpp_inner;k._invalidate!=null&&k._invalidate();let m=this.matrix,b=t-a*r.localCOMy;if(b!==b)throw new Error("Error: Mat23::ty cannot be NaN");m.zpp_inner.ty=b;let C=m.zpp_inner;C._invalidate!=null&&C._invalidate(),this.circShape.transform(this.matrix)}let l=this.circShape.zpp_inner;if(l.zip_aabb&&l.body!=null)if(l.zip_aabb=!1,l.type==0){let r=l.circle;if(r.zip_worldCOM&&r.body!=null){if(r.zip_worldCOM=!1,r.zip_localCOM){if(r.zip_localCOM=!1,r.type==1){let c=r.polygon;if(c.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(c.lverts.next.next==null)c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;else if(c.lverts.next.next.next==null){c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;let h=1;c.localCOMx+=c.lverts.next.next.x*h,c.localCOMy+=c.lverts.next.next.y*h;let u=.5;c.localCOMx*=u,c.localCOMy*=u}else{c.localCOMx=0,c.localCOMy=0;let h=0,u=c.lverts.next,x=u;u=u.next;let y=u;for(u=u.next;u!=null;){let k=u;h+=y.x*(k.y-x.y);let m=k.y*y.x-k.x*y.y;c.localCOMx+=(y.x+k.x)*m,c.localCOMy+=(y.y+k.y)*m,x=y,y=k,u=u.next}u=c.lverts.next;let d=u;h+=y.x*(d.y-x.y);let _=d.y*y.x-d.x*y.y;c.localCOMx+=(y.x+d.x)*_,c.localCOMy+=(y.y+d.y)*_,x=y,y=d,u=u.next;let f=u;h+=y.x*(f.y-x.y);let z=f.y*y.x-f.x*y.y;c.localCOMx+=(y.x+f.x)*z,c.localCOMy+=(y.y+f.y)*z,h=1/(3*h);let P=h;c.localCOMx*=P,c.localCOMy*=P}}r.wrap_localCOM!=null&&(r.wrap_localCOM.zpp_inner.x=r.localCOMx,r.wrap_localCOM.zpp_inner.y=r.localCOMy)}let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot)),r.worldCOMx=r.body.posx+(r.body.axisy*r.localCOMx-r.body.axisx*r.localCOMy),r.worldCOMy=r.body.posy+(r.localCOMx*r.body.axisx+r.localCOMy*r.body.axisy)}let a=r.radius,o=r.radius;r.aabb.minx=r.worldCOMx-a,r.aabb.miny=r.worldCOMy-o,r.aabb.maxx=r.worldCOMx+a,r.aabb.maxy=r.worldCOMy+o}else{let r=l.polygon;if(r.zip_gverts&&r.body!=null){r.zip_gverts=!1,r.validate_lverts();let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot));let c=r.lverts.next,h=r.gverts.next;for(;h!=null;){let u=h,x=c;c=c.next,u.x=r.body.posx+(r.body.axisy*x.x-r.body.axisx*x.y),u.y=r.body.posy+(x.x*r.body.axisx+x.y*r.body.axisy),h=h.next}}if(r.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let a=r.gverts.next;r.aabb.minx=a.x,r.aabb.miny=a.y,r.aabb.maxx=a.x,r.aabb.maxy=a.y;let o=r.gverts.next.next;for(;o!=null;){let p=o;p.x<r.aabb.minx&&(r.aabb.minx=p.x),p.x>r.aabb.maxx&&(r.aabb.maxx=p.x),p.y<r.aabb.miny&&(r.aabb.miny=p.y),p.y>r.aabb.maxy&&(r.aabb.maxy=p.y),o=o.next}}}shapesInCircle(e,t,n,s,i,l){return null}bodiesInCircle(e,t,n,s,i,l){return null}validateShape(e){if(e.type==1){let t=e.polygon;if(t.zip_gaxi&&t.body!=null){t.zip_gaxi=!1,t.validate_laxi();let n=t.body;if(n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let o=t.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=t.lverts.next,c=t.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=t.body.posx+(t.body.axisy*u.x-t.body.axisx*u.y),h.y=t.body.posy+(u.x*t.body.axisx+u.y*t.body.axisy),c=c.next}}let s=t.edges.head,i=t.gverts.next,l=i;for(i=i.next;i!=null;){let o=i,p=s.elt;s=s.next,p.gp0=l,p.gp1=o,p.gnormx=t.body.axisy*p.lnormx-t.body.axisx*p.lnormy,p.gnormy=p.lnormx*t.body.axisx+p.lnormy*t.body.axisy,p.gprojection=t.body.posx*p.gnormx+t.body.posy*p.gnormy+p.lprojection,p.wrap_gnorm!=null&&(p.wrap_gnorm.zpp_inner.x=p.gnormx,p.wrap_gnorm.zpp_inner.y=p.gnormy),p.tp0=p.gp0.y*p.gnormx-p.gp0.x*p.gnormy,p.tp1=p.gp1.y*p.gnormx-p.gp1.x*p.gnormy,l=o,i=i.next}let r=t.gverts.next,a=s.elt;s=s.next,a.gp0=l,a.gp1=r,a.gnormx=t.body.axisy*a.lnormx-t.body.axisx*a.lnormy,a.gnormy=a.lnormx*t.body.axisx+a.lnormy*t.body.axisy,a.gprojection=t.body.posx*a.gnormx+t.body.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy}}if(e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let t=e.circle;if(t.zip_worldCOM&&t.body!=null){if(t.zip_worldCOM=!1,t.zip_localCOM){if(t.zip_localCOM=!1,t.type==1){let l=t.polygon;if(l.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(l.lverts.next.next==null)l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;else if(l.lverts.next.next.next==null){l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;let r=1;l.localCOMx+=l.lverts.next.next.x*r,l.localCOMy+=l.lverts.next.next.y*r;let a=.5;l.localCOMx*=a,l.localCOMy*=a}else{l.localCOMx=0,l.localCOMy=0;let r=0,a=l.lverts.next,o=a;a=a.next;let p=a;for(a=a.next;a!=null;){let d=a;r+=p.x*(d.y-o.y);let _=d.y*p.x-d.x*p.y;l.localCOMx+=(p.x+d.x)*_,l.localCOMy+=(p.y+d.y)*_,o=p,p=d,a=a.next}a=l.lverts.next;let c=a;r+=p.x*(c.y-o.y);let h=c.y*p.x-c.x*p.y;l.localCOMx+=(p.x+c.x)*h,l.localCOMy+=(p.y+c.y)*h,o=p,p=c,a=a.next;let u=a;r+=p.x*(u.y-o.y);let x=u.y*p.x-u.x*p.y;l.localCOMx+=(p.x+u.x)*x,l.localCOMy+=(p.y+u.y)*x,r=1/(3*r);let y=r;l.localCOMx*=y,l.localCOMy*=y}}t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy)}let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}let n=t.radius,s=t.radius;t.aabb.minx=t.worldCOMx-n,t.aabb.miny=t.worldCOMy-s,t.aabb.maxx=t.worldCOMx+n,t.aabb.maxy=t.worldCOMy+s}else{let t=e.polygon;if(t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot));let l=t.lverts.next,r=t.gverts.next;for(;r!=null;){let a=r,o=l;l=l.next,a.x=t.body.posx+(t.body.axisy*o.x-t.body.axisx*o.y),a.y=t.body.posy+(o.x*t.body.axisx+o.y*t.body.axisy),r=r.next}}if(t.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let n=t.gverts.next;t.aabb.minx=n.x,t.aabb.miny=n.y,t.aabb.maxx=n.x,t.aabb.maxy=n.y;let s=t.gverts.next.next;for(;s!=null;){let i=s;i.x<t.aabb.minx&&(t.aabb.minx=i.x),i.x>t.aabb.maxx&&(t.aabb.maxx=i.x),i.y<t.aabb.miny&&(t.aabb.miny=i.y),i.y>t.aabb.maxy&&(t.aabb.maxy=i.y),s=s.next}}if(e.zip_worldCOM&&e.body!=null){if(e.zip_worldCOM=!1,e.zip_localCOM){if(e.zip_localCOM=!1,e.type==1){let n=e.polygon;if(n.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(n.lverts.next.next==null)n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;else if(n.lverts.next.next.next==null){n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;let s=1;n.localCOMx+=n.lverts.next.next.x*s,n.localCOMy+=n.lverts.next.next.y*s;let i=.5;n.localCOMx*=i,n.localCOMy*=i}else{n.localCOMx=0,n.localCOMy=0;let s=0,i=n.lverts.next,l=i;i=i.next;let r=i;for(i=i.next;i!=null;){let u=i;s+=r.x*(u.y-l.y);let x=u.y*r.x-u.x*r.y;n.localCOMx+=(r.x+u.x)*x,n.localCOMy+=(r.y+u.y)*x,l=r,r=u,i=i.next}i=n.lverts.next;let a=i;s+=r.x*(a.y-l.y);let o=a.y*r.x-a.x*r.y;n.localCOMx+=(r.x+a.x)*o,n.localCOMy+=(r.y+a.y)*o,l=r,r=a,i=i.next;let p=i;s+=r.x*(p.y-l.y);let c=p.y*r.x-p.x*r.y;n.localCOMx+=(r.x+p.x)*c,n.localCOMy+=(r.y+p.y)*c,s=1/(3*s);let h=s;n.localCOMx*=h,n.localCOMy*=h}}e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy)}let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}shapesInShape(e,t,n,s){return null}bodiesInShape(e,t,n,s){return null}rayCast(e,t,n){return null}rayMultiCast(e,t,n,s){return null}};vi._zpp=null,vi._nape=null;var ei=vi;var Ae=class{constructor(){this.aabb=null;this.shape=null;this.dyn=!1;this.parent=null;this.child1=null;this.child2=null;this.height=-1;this.rayt=0;this.next=null;this.mnext=null;this.moved=!1;this.snext=null;this.synced=!1;this.first_sync=!1}alloc(){fe.zpp_pool==null?this.aabb=new fe:(this.aabb=fe.zpp_pool,fe.zpp_pool=this.aabb.next,this.aabb.next=null),this.moved=!1,this.synced=!1,this.first_sync=!1}free(){this.height=-1;let e=this.aabb;e.outer!=null&&(e.outer.zpp_inner=null,e.outer=null),e.wrap_min=e.wrap_max=null,e._invalidate=null,e._validate=null,e.next=fe.zpp_pool,fe.zpp_pool=e,this.child1=this.child2=this.parent=null,this.next=null,this.snext=null,this.mnext=null}isLeaf(){return this.child1==null}};Ae.zpp_pool=null;var tt=class{constructor(){this.n1=null;this.n2=null;this.first=!1;this.sleeping=!1;this.id=0;this.di=0;this.arb=null;this.next=null}alloc(){}free(){this.n1=this.n2=null,this.sleeping=!1}};tt.zpp_pool=null;var Zt=class Zt{constructor(){this.root=null}static _initStatics(){Zt.tmpaabb=new fe}clear(){if(this.root==null)return;let e=null;for(this.root.next=e,e=this.root;e!=null;){let t=e;e=t.next,t.next=null;let n=t;n.child1==null?(n.shape.node=null,n.shape.removedFromSpace(),n.shape=null):(n.child1!=null&&(n.child1.next=e,e=n.child1),n.child2!=null&&(n.child2.next=e,e=n.child2));let s=n;s.height=-1;let i=s.aabb;i.outer!=null&&(i.outer.zpp_inner=null,i.outer=null),i.wrap_min=i.wrap_max=null,i._invalidate=null,i._validate=null,i.next=fe.zpp_pool,fe.zpp_pool=i,s.child1=s.child2=s.parent=null,s.next=null,s.snext=null,s.mnext=null,s.next=Ae.zpp_pool,Ae.zpp_pool=s}this.root=null}insertLeaf(e){if(this.root==null)this.root=e,this.root.parent=null;else{let t=e.aabb,n=this.root;for(;n.child1!=null;){let o=n.child1,p=n.child2,c=n.aabb,h=(c.maxx-c.minx+(c.maxy-c.miny))*2,u=Zt.tmpaabb,x=n.aabb;u.minx=x.minx<t.minx?x.minx:t.minx,u.miny=x.miny<t.miny?x.miny:t.miny,u.maxx=x.maxx>t.maxx?x.maxx:t.maxx,u.maxy=x.maxy>t.maxy?x.maxy:t.maxy;let y=Zt.tmpaabb,d=(y.maxx-y.minx+(y.maxy-y.miny))*2,_=2*d,f=2*(d-h),z=Zt.tmpaabb,P=o.aabb;z.minx=t.minx<P.minx?t.minx:P.minx,z.miny=t.miny<P.miny?t.miny:P.miny,z.maxx=t.maxx>P.maxx?t.maxx:P.maxx,z.maxy=t.maxy>P.maxy?t.maxy:P.maxy;let k;if(o.child1==null){let v=Zt.tmpaabb;k=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=o.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;k=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}let m=Zt.tmpaabb,b=p.aabb;m.minx=t.minx<b.minx?t.minx:b.minx,m.miny=t.miny<b.miny?t.miny:b.miny,m.maxx=t.maxx>b.maxx?t.maxx:b.maxx,m.maxy=t.maxy>b.maxy?t.maxy:b.maxy;let C;if(p.child1==null){let v=Zt.tmpaabb;C=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=p.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;C=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}if(_<k&&_<C)break;n=k<C?o:p}let s=n,i=s.parent,l;Ae.zpp_pool==null?l=new Ae:(l=Ae.zpp_pool,Ae.zpp_pool=l.next,l.next=null),fe.zpp_pool==null?l.aabb=new fe:(l.aabb=fe.zpp_pool,fe.zpp_pool=l.aabb.next,l.aabb.next=null),l.moved=!1,l.synced=!1,l.first_sync=!1,l.parent=i;let r=l.aabb,a=s.aabb;for(r.minx=t.minx<a.minx?t.minx:a.minx,r.miny=t.miny<a.miny?t.miny:a.miny,r.maxx=t.maxx>a.maxx?t.maxx:a.maxx,r.maxy=t.maxy>a.maxy?t.maxy:a.maxy,l.height=s.height+1,i!=null?(i.child1==s?i.child1=l:i.child2=l,l.child1=s,l.child2=e,s.parent=l,e.parent=l):(l.child1=s,l.child2=e,s.parent=l,e.parent=l,this.root=l),n=e.parent;n!=null;){if(n.child1==null||n.height<2)n=n;else{let d=n.child1,_=n.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=n,_.parent=n.parent,n.parent=_,_.parent!=null?_.parent.child1==n?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,n.child2=P,P.parent=n;let k=n.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=n.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;n.height=1+(O>E?O:E);let M=n.height,N=z.height;_.height=1+(M>N?M:N)}else{_.child2=P,n.child2=z,z.parent=n;let k=n.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=n.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;n.height=1+(O>E?O:E);let M=n.height,N=P.height;_.height=1+(M>N?M:N)}n=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=n,d.parent=n.parent,n.parent=d,d.parent!=null?d.parent.child1==n?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,n.child1=P,P.parent=n;let k=n.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=n.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;n.height=1+(O>E?O:E);let M=n.height,N=z.height;d.height=1+(M>N?M:N)}else{d.child2=P,n.child1=z,z.parent=n;let k=n.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=n.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;n.height=1+(O>E?O:E);let M=n.height,N=P.height;d.height=1+(M>N?M:N)}n=d}else n=n}let o=n.child1,p=n.child2,c=o.height,h=p.height;n.height=1+(c>h?c:h);let u=n.aabb,x=o.aabb,y=p.aabb;u.minx=x.minx<y.minx?x.minx:y.minx,u.miny=x.miny<y.miny?x.miny:y.miny,u.maxx=x.maxx>y.maxx?x.maxx:y.maxx,u.maxy=x.maxy>y.maxy?x.maxy:y.maxy,n=n.parent}}}inlined_insertLeaf(e){if(this.root==null)this.root=e,this.root.parent=null;else{let t=e.aabb,n=this.root;for(;n.child1!=null;){let o=n.child1,p=n.child2,c=n.aabb,h=(c.maxx-c.minx+(c.maxy-c.miny))*2,u=Zt.tmpaabb,x=n.aabb;u.minx=x.minx<t.minx?x.minx:t.minx,u.miny=x.miny<t.miny?x.miny:t.miny,u.maxx=x.maxx>t.maxx?x.maxx:t.maxx,u.maxy=x.maxy>t.maxy?x.maxy:t.maxy;let y=Zt.tmpaabb,d=(y.maxx-y.minx+(y.maxy-y.miny))*2,_=2*d,f=2*(d-h),z=Zt.tmpaabb,P=o.aabb;z.minx=t.minx<P.minx?t.minx:P.minx,z.miny=t.miny<P.miny?t.miny:P.miny,z.maxx=t.maxx>P.maxx?t.maxx:P.maxx,z.maxy=t.maxy>P.maxy?t.maxy:P.maxy;let k;if(o.child1==null){let v=Zt.tmpaabb;k=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=o.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;k=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}let m=Zt.tmpaabb,b=p.aabb;m.minx=t.minx<b.minx?t.minx:b.minx,m.miny=t.miny<b.miny?t.miny:b.miny,m.maxx=t.maxx>b.maxx?t.maxx:b.maxx,m.maxy=t.maxy>b.maxy?t.maxy:b.maxy;let C;if(p.child1==null){let v=Zt.tmpaabb;C=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=p.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;C=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}if(_<k&&_<C)break;n=k<C?o:p}let s=n,i=s.parent,l;Ae.zpp_pool==null?l=new Ae:(l=Ae.zpp_pool,Ae.zpp_pool=l.next,l.next=null),fe.zpp_pool==null?l.aabb=new fe:(l.aabb=fe.zpp_pool,fe.zpp_pool=l.aabb.next,l.aabb.next=null),l.moved=!1,l.synced=!1,l.first_sync=!1,l.parent=i;let r=l.aabb,a=s.aabb;for(r.minx=t.minx<a.minx?t.minx:a.minx,r.miny=t.miny<a.miny?t.miny:a.miny,r.maxx=t.maxx>a.maxx?t.maxx:a.maxx,r.maxy=t.maxy>a.maxy?t.maxy:a.maxy,l.height=s.height+1,i!=null?(i.child1==s?i.child1=l:i.child2=l,l.child1=s,l.child2=e,s.parent=l,e.parent=l):(l.child1=s,l.child2=e,s.parent=l,e.parent=l,this.root=l),n=e.parent;n!=null;){if(n.child1==null||n.height<2)n=n;else{let d=n.child1,_=n.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=n,_.parent=n.parent,n.parent=_,_.parent!=null?_.parent.child1==n?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,n.child2=P,P.parent=n;let k=n.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=n.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;n.height=1+(O>E?O:E);let M=n.height,N=z.height;_.height=1+(M>N?M:N)}else{_.child2=P,n.child2=z,z.parent=n;let k=n.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=n.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;n.height=1+(O>E?O:E);let M=n.height,N=P.height;_.height=1+(M>N?M:N)}n=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=n,d.parent=n.parent,n.parent=d,d.parent!=null?d.parent.child1==n?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,n.child1=P,P.parent=n;let k=n.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=n.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;n.height=1+(O>E?O:E);let M=n.height,N=z.height;d.height=1+(M>N?M:N)}else{d.child2=P,n.child1=z,z.parent=n;let k=n.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=n.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;n.height=1+(O>E?O:E);let M=n.height,N=P.height;d.height=1+(M>N?M:N)}n=d}else n=n}let o=n.child1,p=n.child2,c=o.height,h=p.height;n.height=1+(c>h?c:h);let u=n.aabb,x=o.aabb,y=p.aabb;u.minx=x.minx<y.minx?x.minx:y.minx,u.miny=x.miny<y.miny?x.miny:y.miny,u.maxx=x.maxx>y.maxx?x.maxx:y.maxx,u.maxy=x.maxy>y.maxy?x.maxy:y.maxy,n=n.parent}}}removeLeaf(e){if(e==this.root)this.root=null;else{let t=e.parent,n=t.parent,s=t.child1==e?t.child2:t.child1;if(n!=null){n.child1==t?n.child1=s:n.child2=s,s.parent=n;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i;let r=n;for(;r!=null;){if(r.child1==null||r.height<2)r=r;else{let d=r.child1,_=r.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=r,_.parent=r.parent,r.parent=_,_.parent!=null?_.parent.child1==r?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,r.child2=P,P.parent=r;let k=r.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=r.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;r.height=1+(O>E?O:E);let M=r.height,N=z.height;_.height=1+(M>N?M:N)}else{_.child2=P,r.child2=z,z.parent=r;let k=r.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=r.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;r.height=1+(O>E?O:E);let M=r.height,N=P.height;_.height=1+(M>N?M:N)}r=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=r,d.parent=r.parent,r.parent=d,d.parent!=null?d.parent.child1==r?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,r.child1=P,P.parent=r;let k=r.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=r.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;r.height=1+(O>E?O:E);let M=r.height,N=z.height;d.height=1+(M>N?M:N)}else{d.child2=P,r.child1=z,z.parent=r;let k=r.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=r.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;r.height=1+(O>E?O:E);let M=r.height,N=P.height;d.height=1+(M>N?M:N)}r=d}else r=r}let a=r,o=a.child1,p=a.child2,c=a.aabb,h=o.aabb,u=p.aabb;c.minx=h.minx<u.minx?h.minx:u.minx,c.miny=h.miny<u.miny?h.miny:u.miny,c.maxx=h.maxx>u.maxx?h.maxx:u.maxx,c.maxy=h.maxy>u.maxy?h.maxy:u.maxy;let x=o.height,y=p.height;a.height=1+(x>y?x:y),r=a.parent}}else{this.root=s,s.parent=null;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i}}}inlined_removeLeaf(e){if(e==this.root){this.root=null;return}else{let t=e.parent,n=t.parent,s=t.child1==e?t.child2:t.child1;if(n!=null){n.child1==t?n.child1=s:n.child2=s,s.parent=n;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i;let r=n;for(;r!=null;){if(r.child1==null||r.height<2)r=r;else{let d=r.child1,_=r.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=r,_.parent=r.parent,r.parent=_,_.parent!=null?_.parent.child1==r?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,r.child2=P,P.parent=r;let k=r.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=r.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;r.height=1+(O>E?O:E);let M=r.height,N=z.height;_.height=1+(M>N?M:N)}else{_.child2=P,r.child2=z,z.parent=r;let k=r.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=_.aabb,v=r.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;r.height=1+(O>E?O:E);let M=r.height,N=P.height;_.height=1+(M>N?M:N)}r=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=r,d.parent=r.parent,r.parent=d,d.parent!=null?d.parent.child1==r?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,r.child1=P,P.parent=r;let k=r.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=r.aabb,w=z.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;r.height=1+(O>E?O:E);let M=r.height,N=z.height;d.height=1+(M>N?M:N)}else{d.child2=P,r.child1=z,z.parent=r;let k=r.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let C=d.aabb,v=r.aabb,w=P.aabb;C.minx=v.minx<w.minx?v.minx:w.minx,C.miny=v.miny<w.miny?v.miny:w.miny,C.maxx=v.maxx>w.maxx?v.maxx:w.maxx,C.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;r.height=1+(O>E?O:E);let M=r.height,N=P.height;d.height=1+(M>N?M:N)}r=d}else r=r}let a=r,o=a.child1,p=a.child2,c=a.aabb,h=o.aabb,u=p.aabb;c.minx=h.minx<u.minx?h.minx:u.minx,c.miny=h.miny<u.miny?h.miny:u.miny,c.maxx=h.maxx>u.maxx?h.maxx:u.maxx,c.maxy=h.maxy>u.maxy?h.maxy:u.maxy;let x=o.height,y=p.height;a.height=1+(x>y?x:y),r=a.parent}}else{this.root=s,s.parent=null;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i}}}balance(e){if(e.child1==null||e.height<2)return e;{let t=e.child1,n=e.child2,s=n.height-t.height;if(s>1){let i=n.child1,l=n.child2;if(n.child1=e,n.parent=e.parent,e.parent=n,n.parent!=null?n.parent.child1==e?n.parent.child1=n:n.parent.child2=n:this.root=n,i.height>l.height){n.child2=i,e.child2=l,l.parent=e;let r=e.aabb,a=t.aabb,o=l.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=n.aabb,c=e.aabb,h=i.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=t.height,x=l.height;e.height=1+(u>x?u:x);let y=e.height,d=i.height;n.height=1+(y>d?y:d)}else{n.child2=l,e.child2=i,i.parent=e;let r=e.aabb,a=t.aabb,o=i.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=n.aabb,c=e.aabb,h=l.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=t.height,x=i.height;e.height=1+(u>x?u:x);let y=e.height,d=l.height;n.height=1+(y>d?y:d)}return n}else if(s<-1){let i=t.child1,l=t.child2;if(t.child1=e,t.parent=e.parent,e.parent=t,t.parent!=null?t.parent.child1==e?t.parent.child1=t:t.parent.child2=t:this.root=t,i.height>l.height){t.child2=i,e.child1=l,l.parent=e;let r=e.aabb,a=n.aabb,o=l.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=t.aabb,c=e.aabb,h=i.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=n.height,x=l.height;e.height=1+(u>x?u:x);let y=e.height,d=i.height;t.height=1+(y>d?y:d)}else{t.child2=l,e.child1=i,i.parent=e;let r=e.aabb,a=n.aabb,o=i.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=t.aabb,c=e.aabb,h=l.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=n.height,x=i.height;e.height=1+(u>x?u:x);let y=e.height,d=l.height;t.height=1+(y>d?y:d)}return t}else return e}}};Zt.tmpaabb=null;var $e=Zt;var ze=class ze extends ei{constructor(t){super();this.pairs=null;this.syncs=null;this.moves=null;this.treeStack=null;this.treeStack2=null;this.failed=null;this.openlist=null;this.space=t,this.is_sweep=!1,this.dynab=this,this.stree=new $e,this.dtree=new $e}dyn(t){return t.body.type==1?!1:!t.body.component.sleeping}__insert(t){let n;Ae.zpp_pool==null?n=new Ae:(n=Ae.zpp_pool,Ae.zpp_pool=n.next,n.next=null),fe.zpp_pool==null?n.aabb=new fe:(n.aabb=fe.zpp_pool,fe.zpp_pool=n.aabb.next,n.aabb.next=null),n.moved=!1,n.synced=!1,n.first_sync=!1,n.shape=t,t.node=n,n.synced=!0,n.first_sync=!0,n.snext=this.syncs,this.syncs=n}__remove(t){let n=t.node;if(n.first_sync||(n.dyn?this.dtree.removeLeaf(n):this.stree.removeLeaf(n)),t.node=null,n.synced){let a=null,o=this.syncs;for(;o!=null&&o!=n;)a=o,o=o.snext;a==null?this.syncs=o.snext:a.snext=o.snext,o.snext=null,n.synced=!1}if(n.moved){let a=null,o=this.moves;for(;o!=null&&o!=n;)a=o,o=o.mnext;a==null?this.moves=o.mnext:a.mnext=o.mnext,o.mnext=null,n.moved=!1}let s=null,i=this.pairs;for(;i!=null;){let a=i.next;if(i.n1==n||i.n2==n){s==null?this.pairs=a:s.next=a,i.arb!=null&&(i.arb.pair=null),i.arb=null,i.n1.shape.pairs.remove(i),i.n2.shape.pairs.remove(i);let o=i;o.n1=o.n2=null,o.sleeping=!1,o.next=tt.zpp_pool,tt.zpp_pool=o,i=a;continue}s=i,i=a}for(;t.pairs.head!=null;){let a=t.pairs.pop_unsafe();a.n1==n?a.n2.shape.pairs.remove(a):a.n1.shape.pairs.remove(a),a.arb!=null&&(a.arb.pair=null),a.arb=null;let o=a;o.n1=o.n2=null,o.sleeping=!1,o.next=tt.zpp_pool,tt.zpp_pool=o}let l=n;l.height=-1;let r=l.aabb;r.outer!=null&&(r.outer.zpp_inner=null,r.outer=null),r.wrap_min=r.wrap_max=null,r._invalidate=null,r._validate=null,r.next=fe.zpp_pool,fe.zpp_pool=r,l.child1=l.child2=l.parent=null,l.next=null,l.snext=null,l.mnext=null,l.next=Ae.zpp_pool,Ae.zpp_pool=l}__sync(t){let n=t.node;if(!n.synced){if(!this.space.continuous&&t.zip_aabb&&t.body!=null)if(t.zip_aabb=!1,t.type==0){let i=t.circle;if(i.zip_worldCOM&&i.body!=null){if(i.zip_worldCOM=!1,i.zip_localCOM){if(i.zip_localCOM=!1,i.type==1){let o=i.polygon;if(o.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(o.lverts.next.next==null)o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;else if(o.lverts.next.next.next==null){o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;let p=1;o.localCOMx+=o.lverts.next.next.x*p,o.localCOMy+=o.lverts.next.next.y*p;let c=.5;o.localCOMx*=c,o.localCOMy*=c}else{o.localCOMx=0,o.localCOMy=0;let p=0,c=o.lverts.next,h=c;c=c.next;let u=c;for(c=c.next;c!=null;){let z=c;p+=u.x*(z.y-h.y);let P=z.y*u.x-z.x*u.y;o.localCOMx+=(u.x+z.x)*P,o.localCOMy+=(u.y+z.y)*P,h=u,u=z,c=c.next}c=o.lverts.next;let x=c;p+=u.x*(x.y-h.y);let y=x.y*u.x-x.x*u.y;o.localCOMx+=(u.x+x.x)*y,o.localCOMy+=(u.y+x.y)*y,h=u,u=x,c=c.next;let d=c;p+=u.x*(d.y-h.y);let _=d.y*u.x-d.x*u.y;o.localCOMx+=(u.x+d.x)*_,o.localCOMy+=(u.y+d.y)*_,p=1/(3*p);let f=p;o.localCOMx*=f,o.localCOMy*=f}}i.wrap_localCOM!=null&&(i.wrap_localCOM.zpp_inner.x=i.localCOMx,i.wrap_localCOM.zpp_inner.y=i.localCOMy)}let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot)),i.worldCOMx=i.body.posx+(i.body.axisy*i.localCOMx-i.body.axisx*i.localCOMy),i.worldCOMy=i.body.posy+(i.localCOMx*i.body.axisx+i.localCOMy*i.body.axisy)}let l=i.radius,r=i.radius;i.aabb.minx=i.worldCOMx-l,i.aabb.miny=i.worldCOMy-r,i.aabb.maxx=i.worldCOMx+l,i.aabb.maxy=i.worldCOMy+r}else{let i=t.polygon;if(i.zip_gverts&&i.body!=null){i.zip_gverts=!1,i.validate_lverts();let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot));let o=i.lverts.next,p=i.gverts.next;for(;p!=null;){let c=p,h=o;o=o.next,c.x=i.body.posx+(i.body.axisy*h.x-i.body.axisx*h.y),c.y=i.body.posy+(h.x*i.body.axisx+h.y*i.body.axisy),p=p.next}}if(i.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let l=i.gverts.next;i.aabb.minx=l.x,i.aabb.miny=l.y,i.aabb.maxx=l.x,i.aabb.maxy=l.y;let r=i.gverts.next.next;for(;r!=null;){let a=r;a.x<i.aabb.minx&&(i.aabb.minx=a.x),a.x>i.aabb.maxx&&(i.aabb.maxx=a.x),a.y<i.aabb.miny&&(i.aabb.miny=a.y),a.y>i.aabb.maxy&&(i.aabb.maxy=a.y),r=r.next}}let s;if(n.dyn==(t.body.type==1?!1:!t.body.component.sleeping)){let i=n.aabb,l=t.aabb;s=!(l.minx>=i.minx&&l.miny>=i.miny&&l.maxx<=i.maxx&&l.maxy<=i.maxy)}else s=!0;s&&(n.synced=!0,n.snext=this.syncs,this.syncs=n)}}sync_broadphase(){if(this.space.validation(),this.syncs!=null)if(this.moves==null){let t=this.syncs;for(;t!=null;){let s=t.shape;if(t.first_sync)t.first_sync=!1;else{let a=t.dyn?this.dtree:this.stree;if(t==a.root)a.root=null;else{let o=t.parent,p=o.parent,c=o.child1==t?o.child2:o.child1;if(p!=null){p.child1==o?p.child1=c:p.child2=c,c.parent=p;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h;let x=p;for(;x!=null;){if(x.child1==null||x.height<2)x=x;else{let m=x.child1,b=x.child2,C=b.height-m.height;if(C>1){let v=b.child1,w=b.child2;if(b.child1=x,b.parent=x.parent,x.parent=b,b.parent!=null?b.parent.child1==x?b.parent.child1=b:b.parent.child2=b:a.root=b,v.height>w.height){b.child2=v,x.child2=w,w.parent=x;let O=x.aabb,E=m.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,x.child2=v,v.parent=x;let O=x.aabb,E=m.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;b.height=1+(B>G?B:G)}x=b}else if(C<-1){let v=m.child1,w=m.child2;if(m.child1=x,m.parent=x.parent,x.parent=m,m.parent!=null?m.parent.child1==x?m.parent.child1=m:m.parent.child2=m:a.root=m,v.height>w.height){m.child2=v,x.child1=w,w.parent=x;let O=x.aabb,E=b.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,x.child1=v,v.parent=x;let O=x.aabb,E=b.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;m.height=1+(B>G?B:G)}x=m}else x=x}let y=x.child1,d=x.child2,_=x.aabb,f=y.aabb,z=d.aabb;_.minx=f.minx<z.minx?f.minx:z.minx,_.miny=f.miny<z.miny?f.miny:z.miny,_.maxx=f.maxx>z.maxx?f.maxx:z.maxx,_.maxy=f.maxy>z.maxy?f.maxy:z.maxy;let P=y.height,k=d.height;x.height=1+(P>k?P:k),x=x.parent}}else{a.root=c,c.parent=null;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h}}}let i=t.aabb;if(!this.space.continuous&&s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let a=s.circle;if(a.zip_worldCOM&&a.body!=null){if(a.zip_worldCOM=!1,a.zip_localCOM){if(a.zip_localCOM=!1,a.type==1){let h=a.polygon;if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(h.lverts.next.next==null)h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;else if(h.lverts.next.next.next==null){h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;let u=1;h.localCOMx+=h.lverts.next.next.x*u,h.localCOMy+=h.lverts.next.next.y*u;let x=.5;h.localCOMx*=x,h.localCOMy*=x}else{h.localCOMx=0,h.localCOMy=0;let u=0,x=h.lverts.next,y=x;x=x.next;let d=x;for(x=x.next;x!=null;){let m=x;u+=d.x*(m.y-y.y);let b=m.y*d.x-m.x*d.y;h.localCOMx+=(d.x+m.x)*b,h.localCOMy+=(d.y+m.y)*b,y=d,d=m,x=x.next}x=h.lverts.next;let _=x;u+=d.x*(_.y-y.y);let f=_.y*d.x-_.x*d.y;h.localCOMx+=(d.x+_.x)*f,h.localCOMy+=(d.y+_.y)*f,y=d,d=_,x=x.next;let z=x;u+=d.x*(z.y-y.y);let P=z.y*d.x-z.x*d.y;h.localCOMx+=(d.x+z.x)*P,h.localCOMy+=(d.y+z.y)*P,u=1/(3*u);let k=u;h.localCOMx*=k,h.localCOMy*=k}}a.wrap_localCOM!=null&&(a.wrap_localCOM.zpp_inner.x=a.localCOMx,a.wrap_localCOM.zpp_inner.y=a.localCOMy)}let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),a.worldCOMx=a.body.posx+(a.body.axisy*a.localCOMx-a.body.axisx*a.localCOMy),a.worldCOMy=a.body.posy+(a.localCOMx*a.body.axisx+a.localCOMy*a.body.axisy)}let o=a.radius,p=a.radius;a.aabb.minx=a.worldCOMx-o,a.aabb.miny=a.worldCOMy-p,a.aabb.maxx=a.worldCOMx+o,a.aabb.maxy=a.worldCOMy+p}else{let a=s.polygon;if(a.zip_gverts&&a.body!=null){a.zip_gverts=!1,a.validate_lverts();let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot));let h=a.lverts.next,u=a.gverts.next;for(;u!=null;){let x=u,y=h;h=h.next,x.x=a.body.posx+(a.body.axisy*y.x-a.body.axisx*y.y),x.y=a.body.posy+(y.x*a.body.axisx+y.y*a.body.axisy),u=u.next}}if(a.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let o=a.gverts.next;a.aabb.minx=o.x,a.aabb.miny=o.y,a.aabb.maxx=o.x,a.aabb.maxy=o.y;let p=a.gverts.next.next;for(;p!=null;){let c=p;c.x<a.aabb.minx&&(a.aabb.minx=c.x),c.x>a.aabb.maxx&&(a.aabb.maxx=c.x),c.y<a.aabb.miny&&(a.aabb.miny=c.y),c.y>a.aabb.maxy&&(a.aabb.maxy=c.y),p=p.next}}let l=s.aabb;i.minx=l.minx-3,i.miny=l.miny-3,i.maxx=l.maxx+3,i.maxy=l.maxy+3;let r=(t.dyn=s.body.type==1?!1:!s.body.component.sleeping)?this.dtree:this.stree;if(r.root==null)r.root=t,r.root.parent=null;else{let a=t.aabb,o=r.root;for(;o.child1!=null;){let y=o.child1,d=o.child2,_=o.aabb,f=(_.maxx-_.minx+(_.maxy-_.miny))*2,z=$e.tmpaabb,P=o.aabb;z.minx=P.minx<a.minx?P.minx:a.minx,z.miny=P.miny<a.miny?P.miny:a.miny,z.maxx=P.maxx>a.maxx?P.maxx:a.maxx,z.maxy=P.maxy>a.maxy?P.maxy:a.maxy;let k=$e.tmpaabb,m=(k.maxx-k.minx+(k.maxy-k.miny))*2,b=2*m,C=2*(m-f),v=$e.tmpaabb,w=y.aabb;v.minx=a.minx<w.minx?a.minx:w.minx,v.miny=a.miny<w.miny?a.miny:w.miny,v.maxx=a.maxx>w.maxx?a.maxx:w.maxx,v.maxy=a.maxy>w.maxy?a.maxy:w.maxy;let O;if(y.child1==null){let Z=$e.tmpaabb;O=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+C}else{let Z=y.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;O=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+C}let E=$e.tmpaabb,M=d.aabb;E.minx=a.minx<M.minx?a.minx:M.minx,E.miny=a.miny<M.miny?a.miny:M.miny,E.maxx=a.maxx>M.maxx?a.maxx:M.maxx,E.maxy=a.maxy>M.maxy?a.maxy:M.maxy;let N;if(d.child1==null){let Z=$e.tmpaabb;N=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+C}else{let Z=d.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;N=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+C}if(b<O&&b<N)break;o=O<N?y:d}let p=o,c=p.parent,h;Ae.zpp_pool==null?h=new Ae:(h=Ae.zpp_pool,Ae.zpp_pool=h.next,h.next=null),fe.zpp_pool==null?h.aabb=new fe:(h.aabb=fe.zpp_pool,fe.zpp_pool=h.aabb.next,h.aabb.next=null),h.moved=!1,h.synced=!1,h.first_sync=!1,h.parent=c;let u=h.aabb,x=p.aabb;for(u.minx=a.minx<x.minx?a.minx:x.minx,u.miny=a.miny<x.miny?a.miny:x.miny,u.maxx=a.maxx>x.maxx?a.maxx:x.maxx,u.maxy=a.maxy>x.maxy?a.maxy:x.maxy,h.height=p.height+1,c!=null?(c.child1==p?c.child1=h:c.child2=h,h.child1=p,h.child2=t,p.parent=h,t.parent=h):(h.child1=p,h.child2=t,p.parent=h,t.parent=h,r.root=h),o=t.parent;o!=null;){if(o.child1==null||o.height<2)o=o;else{let m=o.child1,b=o.child2,C=b.height-m.height;if(C>1){let v=b.child1,w=b.child2;if(b.child1=o,b.parent=o.parent,o.parent=b,b.parent!=null?b.parent.child1==o?b.parent.child1=b:b.parent.child2=b:r.root=b,v.height>w.height){b.child2=v,o.child2=w,w.parent=o;let O=o.aabb,E=m.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,o.child2=v,v.parent=o;let O=o.aabb,E=m.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;b.height=1+(B>G?B:G)}o=b}else if(C<-1){let v=m.child1,w=m.child2;if(m.child1=o,m.parent=o.parent,o.parent=m,m.parent!=null?m.parent.child1==o?m.parent.child1=m:m.parent.child2=m:r.root=m,v.height>w.height){m.child2=v,o.child1=w,w.parent=o;let O=o.aabb,E=b.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,o.child1=v,v.parent=o;let O=o.aabb,E=b.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;m.height=1+(B>G?B:G)}o=m}else o=o}let y=o.child1,d=o.child2,_=y.height,f=d.height;o.height=1+(_>f?_:f);let z=o.aabb,P=y.aabb,k=d.aabb;z.minx=P.minx<k.minx?P.minx:k.minx,z.miny=P.miny<k.miny?P.miny:k.miny,z.maxx=P.maxx>k.maxx?P.maxx:k.maxx,z.maxy=P.maxy>k.maxy?P.maxy:k.maxy,o=o.parent}}t.synced=!1,t.moved=!0,t.mnext=t.snext,t.snext=null,t=t.mnext}let n=this.syncs;this.syncs=this.moves,this.moves=n}else for(;this.syncs!=null;){let t=this.syncs;this.syncs=t.snext,t.snext=null;let n=t,s=n.shape;if(n.first_sync)n.first_sync=!1;else{let a=n.dyn?this.dtree:this.stree;if(n==a.root)a.root=null;else{let o=n.parent,p=o.parent,c=o.child1==n?o.child2:o.child1;if(p!=null){p.child1==o?p.child1=c:p.child2=c,c.parent=p;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h;let x=p;for(;x!=null;){if(x.child1==null||x.height<2)x=x;else{let m=x.child1,b=x.child2,C=b.height-m.height;if(C>1){let v=b.child1,w=b.child2;if(b.child1=x,b.parent=x.parent,x.parent=b,b.parent!=null?b.parent.child1==x?b.parent.child1=b:b.parent.child2=b:a.root=b,v.height>w.height){b.child2=v,x.child2=w,w.parent=x;let O=x.aabb,E=m.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,x.child2=v,v.parent=x;let O=x.aabb,E=m.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;b.height=1+(B>G?B:G)}x=b}else if(C<-1){let v=m.child1,w=m.child2;if(m.child1=x,m.parent=x.parent,x.parent=m,m.parent!=null?m.parent.child1==x?m.parent.child1=m:m.parent.child2=m:a.root=m,v.height>w.height){m.child2=v,x.child1=w,w.parent=x;let O=x.aabb,E=b.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,x.child1=v,v.parent=x;let O=x.aabb,E=b.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;m.height=1+(B>G?B:G)}x=m}else x=x}let y=x.child1,d=x.child2,_=x.aabb,f=y.aabb,z=d.aabb;_.minx=f.minx<z.minx?f.minx:z.minx,_.miny=f.miny<z.miny?f.miny:z.miny,_.maxx=f.maxx>z.maxx?f.maxx:z.maxx,_.maxy=f.maxy>z.maxy?f.maxy:z.maxy;let P=y.height,k=d.height;x.height=1+(P>k?P:k),x=x.parent}}else{a.root=c,c.parent=null;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h}}}let i=n.aabb;if(!this.space.continuous&&s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let a=s.circle;if(a.zip_worldCOM&&a.body!=null){if(a.zip_worldCOM=!1,a.zip_localCOM){if(a.zip_localCOM=!1,a.type==1){let h=a.polygon;if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(h.lverts.next.next==null)h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;else if(h.lverts.next.next.next==null){h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;let u=1;h.localCOMx+=h.lverts.next.next.x*u,h.localCOMy+=h.lverts.next.next.y*u;let x=.5;h.localCOMx*=x,h.localCOMy*=x}else{h.localCOMx=0,h.localCOMy=0;let u=0,x=h.lverts.next,y=x;x=x.next;let d=x;for(x=x.next;x!=null;){let m=x;u+=d.x*(m.y-y.y);let b=m.y*d.x-m.x*d.y;h.localCOMx+=(d.x+m.x)*b,h.localCOMy+=(d.y+m.y)*b,y=d,d=m,x=x.next}x=h.lverts.next;let _=x;u+=d.x*(_.y-y.y);let f=_.y*d.x-_.x*d.y;h.localCOMx+=(d.x+_.x)*f,h.localCOMy+=(d.y+_.y)*f,y=d,d=_,x=x.next;let z=x;u+=d.x*(z.y-y.y);let P=z.y*d.x-z.x*d.y;h.localCOMx+=(d.x+z.x)*P,h.localCOMy+=(d.y+z.y)*P,u=1/(3*u);let k=u;h.localCOMx*=k,h.localCOMy*=k}}a.wrap_localCOM!=null&&(a.wrap_localCOM.zpp_inner.x=a.localCOMx,a.wrap_localCOM.zpp_inner.y=a.localCOMy)}let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),a.worldCOMx=a.body.posx+(a.body.axisy*a.localCOMx-a.body.axisx*a.localCOMy),a.worldCOMy=a.body.posy+(a.localCOMx*a.body.axisx+a.localCOMy*a.body.axisy)}let o=a.radius,p=a.radius;a.aabb.minx=a.worldCOMx-o,a.aabb.miny=a.worldCOMy-p,a.aabb.maxx=a.worldCOMx+o,a.aabb.maxy=a.worldCOMy+p}else{let a=s.polygon;if(a.zip_gverts&&a.body!=null){a.zip_gverts=!1,a.validate_lverts();let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot));let h=a.lverts.next,u=a.gverts.next;for(;u!=null;){let x=u,y=h;h=h.next,x.x=a.body.posx+(a.body.axisy*y.x-a.body.axisx*y.y),x.y=a.body.posy+(y.x*a.body.axisx+y.y*a.body.axisy),u=u.next}}if(a.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let o=a.gverts.next;a.aabb.minx=o.x,a.aabb.miny=o.y,a.aabb.maxx=o.x,a.aabb.maxy=o.y;let p=a.gverts.next.next;for(;p!=null;){let c=p;c.x<a.aabb.minx&&(a.aabb.minx=c.x),c.x>a.aabb.maxx&&(a.aabb.maxx=c.x),c.y<a.aabb.miny&&(a.aabb.miny=c.y),c.y>a.aabb.maxy&&(a.aabb.maxy=c.y),p=p.next}}let l=s.aabb;i.minx=l.minx-3,i.miny=l.miny-3,i.maxx=l.maxx+3,i.maxy=l.maxy+3;let r=(n.dyn=s.body.type==1?!1:!s.body.component.sleeping)?this.dtree:this.stree;if(r.root==null)r.root=n,r.root.parent=null;else{let a=n.aabb,o=r.root;for(;o.child1!=null;){let y=o.child1,d=o.child2,_=o.aabb,f=(_.maxx-_.minx+(_.maxy-_.miny))*2,z=$e.tmpaabb,P=o.aabb;z.minx=P.minx<a.minx?P.minx:a.minx,z.miny=P.miny<a.miny?P.miny:a.miny,z.maxx=P.maxx>a.maxx?P.maxx:a.maxx,z.maxy=P.maxy>a.maxy?P.maxy:a.maxy;let k=$e.tmpaabb,m=(k.maxx-k.minx+(k.maxy-k.miny))*2,b=2*m,C=2*(m-f),v=$e.tmpaabb,w=y.aabb;v.minx=a.minx<w.minx?a.minx:w.minx,v.miny=a.miny<w.miny?a.miny:w.miny,v.maxx=a.maxx>w.maxx?a.maxx:w.maxx,v.maxy=a.maxy>w.maxy?a.maxy:w.maxy;let O;if(y.child1==null){let Z=$e.tmpaabb;O=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+C}else{let Z=y.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;O=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+C}let E=$e.tmpaabb,M=d.aabb;E.minx=a.minx<M.minx?a.minx:M.minx,E.miny=a.miny<M.miny?a.miny:M.miny,E.maxx=a.maxx>M.maxx?a.maxx:M.maxx,E.maxy=a.maxy>M.maxy?a.maxy:M.maxy;let N;if(d.child1==null){let Z=$e.tmpaabb;N=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+C}else{let Z=d.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;N=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+C}if(b<O&&b<N)break;o=O<N?y:d}let p=o,c=p.parent,h;Ae.zpp_pool==null?h=new Ae:(h=Ae.zpp_pool,Ae.zpp_pool=h.next,h.next=null),fe.zpp_pool==null?h.aabb=new fe:(h.aabb=fe.zpp_pool,fe.zpp_pool=h.aabb.next,h.aabb.next=null),h.moved=!1,h.synced=!1,h.first_sync=!1,h.parent=c;let u=h.aabb,x=p.aabb;for(u.minx=a.minx<x.minx?a.minx:x.minx,u.miny=a.miny<x.miny?a.miny:x.miny,u.maxx=a.maxx>x.maxx?a.maxx:x.maxx,u.maxy=a.maxy>x.maxy?a.maxy:x.maxy,h.height=p.height+1,c!=null?(c.child1==p?c.child1=h:c.child2=h,h.child1=p,h.child2=n,p.parent=h,n.parent=h):(h.child1=p,h.child2=n,p.parent=h,n.parent=h,r.root=h),o=n.parent;o!=null;){if(o.child1==null||o.height<2)o=o;else{let m=o.child1,b=o.child2,C=b.height-m.height;if(C>1){let v=b.child1,w=b.child2;if(b.child1=o,b.parent=o.parent,o.parent=b,b.parent!=null?b.parent.child1==o?b.parent.child1=b:b.parent.child2=b:r.root=b,v.height>w.height){b.child2=v,o.child2=w,w.parent=o;let O=o.aabb,E=m.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,o.child2=v,v.parent=o;let O=o.aabb,E=m.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=b.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;b.height=1+(B>G?B:G)}o=b}else if(C<-1){let v=m.child1,w=m.child2;if(m.child1=o,m.parent=o.parent,o.parent=m,m.parent!=null?m.parent.child1==o?m.parent.child1=m:m.parent.child2=m:r.root=m,v.height>w.height){m.child2=v,o.child1=w,w.parent=o;let O=o.aabb,E=b.aabb,M=w.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,o.child1=v,v.parent=o;let O=o.aabb,E=b.aabb,M=v.aabb;O.minx=E.minx<M.minx?E.minx:M.minx,O.miny=E.miny<M.miny?E.miny:M.miny,O.maxx=E.maxx>M.maxx?E.maxx:M.maxx,O.maxy=E.maxy>M.maxy?E.maxy:M.maxy;let N=m.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;m.height=1+(B>G?B:G)}o=m}else o=o}let y=o.child1,d=o.child2,_=y.height,f=d.height;o.height=1+(_>f?_:f);let z=o.aabb,P=y.aabb,k=d.aabb;z.minx=P.minx<k.minx?P.minx:k.minx,z.miny=P.miny<k.miny?P.miny:k.miny,z.maxx=P.maxx>k.maxx?P.maxx:k.maxx,z.maxy=P.maxy>k.maxy?P.maxy:k.maxy,o=o.parent}}n.synced=!1,n.moved||(n.moved=!0,n.mnext=this.moves,this.moves=n)}}broadphase(t,n){let s=this.syncs;for(;s!=null;){let r=s.shape;if(s.first_sync)s.first_sync=!1;else{let c=s.dyn?this.dtree:this.stree;if(s==c.root)c.root=null;else{let h=s.parent,u=h.parent,x=h.child1==s?h.child2:h.child1;if(u!=null){u.child1==h?u.child1=x:u.child2=x,x.parent=u;let y=h;y.height=-1;let d=y.aabb;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d.wrap_min=d.wrap_max=null,d._invalidate=null,d._validate=null,d.next=fe.zpp_pool,fe.zpp_pool=d,y.child1=y.child2=y.parent=null,y.next=null,y.snext=null,y.mnext=null,y.next=Ae.zpp_pool,Ae.zpp_pool=y;let _=u;for(;_!=null;){if(_.child1==null||_.height<2)_=_;else{let v=_.child1,w=_.child2,O=w.height-v.height;if(O>1){let E=w.child1,M=w.child2;if(w.child1=_,w.parent=_.parent,_.parent=w,w.parent!=null?w.parent.child1==_?w.parent.child1=w:w.parent.child2=w:c.root=w,E.height>M.height){w.child2=E,_.child2=M,M.parent=_;let N=_.aabb,Z=v.aabb,S=M.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=_.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,q=M.height;_.height=1+(G>q?G:q);let R=_.height,T=E.height;w.height=1+(R>T?R:T)}else{w.child2=M,_.child2=E,E.parent=_;let N=_.aabb,Z=v.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=_.aabb,B=M.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,q=E.height;_.height=1+(G>q?G:q);let R=_.height,T=M.height;w.height=1+(R>T?R:T)}_=w}else if(O<-1){let E=v.child1,M=v.child2;if(v.child1=_,v.parent=_.parent,_.parent=v,v.parent!=null?v.parent.child1==_?v.parent.child1=v:v.parent.child2=v:c.root=v,E.height>M.height){v.child2=E,_.child1=M,M.parent=_;let N=_.aabb,Z=w.aabb,S=M.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=_.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,q=M.height;_.height=1+(G>q?G:q);let R=_.height,T=E.height;v.height=1+(R>T?R:T)}else{v.child2=M,_.child1=E,E.parent=_;let N=_.aabb,Z=w.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=_.aabb,B=M.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,q=E.height;_.height=1+(G>q?G:q);let R=_.height,T=M.height;v.height=1+(R>T?R:T)}_=v}else _=_}let f=_.child1,z=_.child2,P=_.aabb,k=f.aabb,m=z.aabb;P.minx=k.minx<m.minx?k.minx:m.minx,P.miny=k.miny<m.miny?k.miny:m.miny,P.maxx=k.maxx>m.maxx?k.maxx:m.maxx,P.maxy=k.maxy>m.maxy?k.maxy:m.maxy;let b=f.height,C=z.height;_.height=1+(b>C?b:C),_=_.parent}}else{c.root=x,x.parent=null;let y=h;y.height=-1;let d=y.aabb;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d.wrap_min=d.wrap_max=null,d._invalidate=null,d._validate=null,d.next=fe.zpp_pool,fe.zpp_pool=d,y.child1=y.child2=y.parent=null,y.next=null,y.snext=null,y.mnext=null,y.next=Ae.zpp_pool,Ae.zpp_pool=y}}}let a=s.aabb;if(!t.continuous&&r.zip_aabb&&r.body!=null)if(r.zip_aabb=!1,r.type==0){let c=r.circle;if(c.zip_worldCOM&&c.body!=null){if(c.zip_worldCOM=!1,c.zip_localCOM){if(c.zip_localCOM=!1,c.type==1){let y=c.polygon;if(y.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(y.lverts.next.next==null)y.localCOMx=y.lverts.next.x,y.localCOMy=y.lverts.next.y;else if(y.lverts.next.next.next==null){y.localCOMx=y.lverts.next.x,y.localCOMy=y.lverts.next.y;let d=1;y.localCOMx+=y.lverts.next.next.x*d,y.localCOMy+=y.lverts.next.next.y*d;let _=.5;y.localCOMx*=_,y.localCOMy*=_}else{y.localCOMx=0,y.localCOMy=0;let d=0,_=y.lverts.next,f=_;_=_.next;let z=_;for(_=_.next;_!=null;){let v=_;d+=z.x*(v.y-f.y);let w=v.y*z.x-v.x*z.y;y.localCOMx+=(z.x+v.x)*w,y.localCOMy+=(z.y+v.y)*w,f=z,z=v,_=_.next}_=y.lverts.next;let P=_;d+=z.x*(P.y-f.y);let k=P.y*z.x-P.x*z.y;y.localCOMx+=(z.x+P.x)*k,y.localCOMy+=(z.y+P.y)*k,f=z,z=P,_=_.next;let m=_;d+=z.x*(m.y-f.y);let b=m.y*z.x-m.x*z.y;y.localCOMx+=(z.x+m.x)*b,y.localCOMy+=(z.y+m.y)*b,d=1/(3*d);let C=d;y.localCOMx*=C,y.localCOMy*=C}}c.wrap_localCOM!=null&&(c.wrap_localCOM.zpp_inner.x=c.localCOMx,c.wrap_localCOM.zpp_inner.y=c.localCOMy)}let x=c.body;x.zip_axis&&(x.zip_axis=!1,x.axisx=Math.sin(x.rot),x.axisy=Math.cos(x.rot)),c.worldCOMx=c.body.posx+(c.body.axisy*c.localCOMx-c.body.axisx*c.localCOMy),c.worldCOMy=c.body.posy+(c.localCOMx*c.body.axisx+c.localCOMy*c.body.axisy)}let h=c.radius,u=c.radius;c.aabb.minx=c.worldCOMx-h,c.aabb.miny=c.worldCOMy-u,c.aabb.maxx=c.worldCOMx+h,c.aabb.maxy=c.worldCOMy+u}else{let c=r.polygon;if(c.zip_gverts&&c.body!=null){c.zip_gverts=!1,c.validate_lverts();let x=c.body;x.zip_axis&&(x.zip_axis=!1,x.axisx=Math.sin(x.rot),x.axisy=Math.cos(x.rot));let y=c.lverts.next,d=c.gverts.next;for(;d!=null;){let _=d,f=y;y=y.next,_.x=c.body.posx+(c.body.axisy*f.x-c.body.axisx*f.y),_.y=c.body.posy+(f.x*c.body.axisx+f.y*c.body.axisy),d=d.next}}if(c.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let h=c.gverts.next;c.aabb.minx=h.x,c.aabb.miny=h.y,c.aabb.maxx=h.x,c.aabb.maxy=h.y;let u=c.gverts.next.next;for(;u!=null;){let x=u;x.x<c.aabb.minx&&(c.aabb.minx=x.x),x.x>c.aabb.maxx&&(c.aabb.maxx=x.x),x.y<c.aabb.miny&&(c.aabb.miny=x.y),x.y>c.aabb.maxy&&(c.aabb.maxy=x.y),u=u.next}}let o=r.aabb;a.minx=o.minx-3,a.miny=o.miny-3,a.maxx=o.maxx+3,a.maxy=o.maxy+3;let p=(s.dyn=r.body.type==1?!1:!r.body.component.sleeping)?this.dtree:this.stree;if(p.root==null)p.root=s,p.root.parent=null;else{let c=s.aabb,h=p.root;for(;h.child1!=null;){let f=h.child1,z=h.child2,P=h.aabb,k=(P.maxx-P.minx+(P.maxy-P.miny))*2,m=$e.tmpaabb,b=h.aabb;m.minx=b.minx<c.minx?b.minx:c.minx,m.miny=b.miny<c.miny?b.miny:c.miny,m.maxx=b.maxx>c.maxx?b.maxx:c.maxx,m.maxy=b.maxy>c.maxy?b.maxy:c.maxy;let C=$e.tmpaabb,v=(C.maxx-C.minx+(C.maxy-C.miny))*2,w=2*v,O=2*(v-k),E=$e.tmpaabb,M=f.aabb;E.minx=c.minx<M.minx?c.minx:M.minx,E.miny=c.miny<M.miny?c.miny:M.miny,E.maxx=c.maxx>M.maxx?c.maxx:M.maxx,E.maxy=c.maxy>M.maxy?c.maxy:M.maxy;let N;if(f.child1==null){let F=$e.tmpaabb;N=(F.maxx-F.minx+(F.maxy-F.miny))*2+O}else{let F=f.aabb,B=(F.maxx-F.minx+(F.maxy-F.miny))*2,G=$e.tmpaabb;N=(G.maxx-G.minx+(G.maxy-G.miny))*2-B+O}let Z=$e.tmpaabb,S=z.aabb;Z.minx=c.minx<S.minx?c.minx:S.minx,Z.miny=c.miny<S.miny?c.miny:S.miny,Z.maxx=c.maxx>S.maxx?c.maxx:S.maxx,Z.maxy=c.maxy>S.maxy?c.maxy:S.maxy;let A;if(z.child1==null){let F=$e.tmpaabb;A=(F.maxx-F.minx+(F.maxy-F.miny))*2+O}else{let F=z.aabb,B=(F.maxx-F.minx+(F.maxy-F.miny))*2,G=$e.tmpaabb;A=(G.maxx-G.minx+(G.maxy-G.miny))*2-B+O}if(w<N&&w<A)break;h=N<A?f:z}let u=h,x=u.parent,y;Ae.zpp_pool==null?y=new Ae:(y=Ae.zpp_pool,Ae.zpp_pool=y.next,y.next=null),fe.zpp_pool==null?y.aabb=new fe:(y.aabb=fe.zpp_pool,fe.zpp_pool=y.aabb.next,y.aabb.next=null),y.moved=!1,y.synced=!1,y.first_sync=!1,y.parent=x;let d=y.aabb,_=u.aabb;for(d.minx=c.minx<_.minx?c.minx:_.minx,d.miny=c.miny<_.miny?c.miny:_.miny,d.maxx=c.maxx>_.maxx?c.maxx:_.maxx,d.maxy=c.maxy>_.maxy?c.maxy:_.maxy,y.height=u.height+1,x!=null?(x.child1==u?x.child1=y:x.child2=y,y.child1=u,y.child2=s,u.parent=y,s.parent=y):(y.child1=u,y.child2=s,u.parent=y,s.parent=y,p.root=y),h=s.parent;h!=null;){if(h.child1==null||h.height<2)h=h;else{let v=h.child1,w=h.child2,O=w.height-v.height;if(O>1){let E=w.child1,M=w.child2;if(w.child1=h,w.parent=h.parent,h.parent=w,w.parent!=null?w.parent.child1==h?w.parent.child1=w:w.parent.child2=w:p.root=w,E.height>M.height){w.child2=E,h.child2=M,M.parent=h;let N=h.aabb,Z=v.aabb,S=M.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=h.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,q=M.height;h.height=1+(G>q?G:q);let R=h.height,T=E.height;w.height=1+(R>T?R:T)}else{w.child2=M,h.child2=E,E.parent=h;let N=h.aabb,Z=v.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=h.aabb,B=M.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,q=E.height;h.height=1+(G>q?G:q);let R=h.height,T=M.height;w.height=1+(R>T?R:T)}h=w}else if(O<-1){let E=v.child1,M=v.child2;if(v.child1=h,v.parent=h.parent,h.parent=v,v.parent!=null?v.parent.child1==h?v.parent.child1=v:v.parent.child2=v:p.root=v,E.height>M.height){v.child2=E,h.child1=M,M.parent=h;let N=h.aabb,Z=w.aabb,S=M.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=h.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,q=M.height;h.height=1+(G>q?G:q);let R=h.height,T=E.height;v.height=1+(R>T?R:T)}else{v.child2=M,h.child1=E,E.parent=h;let N=h.aabb,Z=w.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=h.aabb,B=M.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,q=E.height;h.height=1+(G>q?G:q);let R=h.height,T=M.height;v.height=1+(R>T?R:T)}h=v}else h=h}let f=h.child1,z=h.child2,P=f.height,k=z.height;h.height=1+(P>k?P:k);let m=h.aabb,b=f.aabb,C=z.aabb;m.minx=b.minx<C.minx?b.minx:C.minx,m.miny=b.miny<C.miny?b.miny:C.miny,m.maxx=b.maxx>C.maxx?b.maxx:C.maxx,m.maxy=b.maxy>C.maxy?b.maxy:C.maxy,h=h.parent}}s.synced=!1,s=s.snext}for(;this.syncs!=null;){let r=this.syncs;this.syncs=r.snext,r.snext=null;let a=r;if(a.moved)continue;a.moved=!1;let o=a.shape;if(o.body.component.sleeping)continue;let c=a.aabb,h=null;for(this.dtree.root!=null&&(this.dtree.root.next=h,h=this.dtree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let C=b;C.next=m.head,m.head=C,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}for(this.stree.root!=null&&(this.stree.root.next=h,h=this.stree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let C=b;C.next=m.head,m.head=C,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}}for(;this.moves!=null;){let r=this.moves;this.moves=r.mnext,r.mnext=null;let a=r;a.moved=!1;let o=a.shape;if(o.body.component.sleeping)continue;let c=a.aabb,h=null;for(this.dtree.root!=null&&(this.dtree.root.next=h,h=this.dtree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let C=b;C.next=m.head,m.head=C,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}for(this.stree.root!=null&&(this.stree.root.next=h,h=this.stree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let C=b;C.next=m.head,m.head=C,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}}let i=null,l=this.pairs;for(;l!=null;){let r;if(l.first)r=!1;else{let x=l.n1.aabb,y=l.n2.aabb;r=!(y.miny<=x.maxy&&x.miny<=y.maxy&&y.minx<=x.maxx&&x.minx<=y.maxx)}if(r){i==null?this.pairs=l.next:i.next=l.next;let x=l.n1.shape.pairs,y=null,d=x.head,_=!1;for(;d!=null;){if(d.elt==l){let C,v;y==null?(C=x.head,v=C.next,x.head=v,x.head==null&&(x.pushmod=!0)):(C=y.next,v=C.next,y.next=v,v==null&&(x.pushmod=!0));let w=C;w.elt=null,w.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w,x.modified=!0,x.length--,x.pushmod=!0,_=!0;break}y=d,d=d.next}let f=l.n2.shape.pairs,z=null,P=f.head,k=!1;for(;P!=null;){if(P.elt==l){let C,v;z==null?(C=f.head,v=C.next,f.head=v,f.head==null&&(f.pushmod=!0)):(C=z.next,v=C.next,z.next=v,v==null&&(f.pushmod=!0));let w=C;w.elt=null,w.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w,f.modified=!0,f.length--,f.pushmod=!0,k=!0;break}z=P,P=P.next}let m=l.next;l.arb!=null&&(l.arb.pair=null),l.arb=null;let b=l;b.n1=b.n2=null,b.sleeping=!1,b.next=tt.zpp_pool,tt.zpp_pool=b,l=m;continue}let a=l.n1.shape,o=a.body,p=l.n2.shape,c=p.body;if(!l.first&&(o.component.sleeping||o.type==1)&&(c.component.sleeping||c.type==1)){l.sleeping=!0,i==null?this.pairs=l.next:i.next=l.next,l=l.next;continue}l.first=!1;let h=a.aabb,u=p.aabb;if(u.miny<=h.maxy&&h.miny<=u.maxy&&u.minx<=h.maxx&&h.minx<=u.maxx){let x=l.arb;n?l.arb=t.narrowPhase(a,p,o.type!=2||c.type!=2,l.arb,!1):l.arb=t.continuousEvent(a,p,o.type!=2||c.type!=2,l.arb,!1),l.arb==null?x!=null&&(x.pair=null):l.arb.pair=l}i=l,l=l.next}}clear(){for(;this.syncs!=null;){let t=this.syncs.snext;this.syncs.snext=null,this.syncs.first_sync&&(this.syncs.shape.node=null,this.syncs.shape.removedFromSpace(),this.syncs.shape=null),this.syncs=t}for(;this.moves!=null;){let t=this.moves.mnext;this.moves.mnext=null,this.moves.first_sync&&(this.moves.shape.node=null,this.moves.shape.removedFromSpace(),this.moves.shape=null),this.moves=t}for(;this.pairs!=null;){let t=this.pairs.next;this.pairs.arb!=null&&(this.pairs.arb.pair=null),this.pairs.arb=null;let n=this.pairs.n1.shape.pairs,s=this.pairs,i=null,l=n.head,r=!1;for(;l!=null;){if(l.elt==s){let x,y;i==null?(x=n.head,y=x.next,n.head=y,n.head==null&&(n.pushmod=!0)):(x=i.next,y=x.next,i.next=y,y==null&&(n.pushmod=!0));let d=x;d.elt=null,d.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=d,n.modified=!0,n.length--,n.pushmod=!0,r=!0;break}i=l,l=l.next}let a=this.pairs.n2.shape.pairs,o=this.pairs,p=null,c=a.head,h=!1;for(;c!=null;){if(c.elt==o){let x,y;p==null?(x=a.head,y=x.next,a.head=y,a.head==null&&(a.pushmod=!0)):(x=p.next,y=x.next,p.next=y,y==null&&(a.pushmod=!0));let d=x;d.elt=null,d.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=d,a.modified=!0,a.length--,a.pushmod=!0,h=!0;break}p=c,c=c.next}let u=this.pairs;u.n1=u.n2=null,u.sleeping=!1,u.next=tt.zpp_pool,tt.zpp_pool=u,this.pairs=t}this.dtree.clear(),this.stree.clear()}shapesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h;if(s!=null){let u=p.shape.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(p.shape.outer):Ee.polyContains(p.shape.polygon,r)&&a.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h;if(s!=null){let u=p.shape.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(p.shape.outer):Ee.polyContains(p.shape.polygon,r)&&a.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}let o=r;return o.outer!=null&&(o.outer.zpp_inner=null,o.outer=null),o._isimmutable=null,o._validate=null,o._invalidate=null,o.next=le.zpp_pool,le.zpp_pool=o,a}bodiesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new ze._nape.phys.BodyList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h=p.shape.body.outer;if(!a.has(h)){let u;if(s!=null){let x=p.shape.filter;u=(x.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(h):Ee.polyContains(p.shape.polygon,r)&&a.push(h))}}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h=p.shape.body.outer;if(!a.has(h)){let u;if(s!=null){let x=p.shape.filter;u=(x.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(h):Ee.polyContains(p.shape.polygon,r)&&a.push(h))}}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}let o=r;return o.outer!=null&&(o.outer.zpp_inner=null,o.outer=null),o._isimmutable=null,o._validate=null,o._invalidate=null,o.next=le.zpp_pool,le.zpp_pool=o,a}shapesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;c&&a.push(o.shape.outer)}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;h&&a.push(c.shape.outer)}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h;if(i!=null){let u=o.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h)if(n)if(s)Ee.containTest(this.aabbShape.zpp_inner,o.shape)&&a.push(o.shape.outer);else{let u=o.shape.aabb;(u.minx>=r.minx&&u.miny>=r.miny&&u.maxx<=r.maxx&&u.maxy<=r.maxy||Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner))&&a.push(o.shape.outer)}else{let u;if(s){let x=o.shape.aabb;u=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy}else u=!0;u&&a.push(o.shape.outer)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;c&&a.push(o.shape.outer)}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;h&&a.push(c.shape.outer)}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h;if(i!=null){let u=o.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h)if(n)if(s)Ee.containTest(this.aabbShape.zpp_inner,o.shape)&&a.push(o.shape.outer);else{let u=o.shape.aabb;(u.minx>=r.minx&&u.miny>=r.miny&&u.maxx<=r.maxx&&u.maxy<=r.maxy||Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner))&&a.push(o.shape.outer)}else{let u;if(s){let x=o.shape.aabb;u=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy}else u=!0;u&&a.push(o.shape.outer)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}return a}bodiesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new ze._nape.phys.BodyList;if(this.failed==null&&(this.failed=new ze._nape.phys.BodyList),this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;if(c){let h=o.shape.body.outer;a.has(h)||a.push(h)}}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h){let u=c.shape.body.outer;a.has(u)||a.push(u)}}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h=o.shape.body.outer,u;if(i!=null){let x=o.shape.filter;u=(x.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(n)if(s){if(!this.failed.has(h)){let x=Ee.containTest(this.aabbShape.zpp_inner,o.shape);!a.has(h)&&x?a.push(h):x||(a.remove(h),this.failed.push(h))}}else!a.has(h)&&Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner)&&a.push(h);else if(s){if(!this.failed.has(h)){let x=o.shape.aabb,y=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy;!a.has(h)&&y?a.push(h):y||(a.remove(h),this.failed.push(h))}}else{let x;if(a.has(h))x=!1;else{let y=o.shape.aabb;x=y.minx>=r.minx&&y.miny>=r.miny&&y.maxx<=r.maxx&&y.maxy<=r.maxy}x&&a.push(h)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;if(c){let h=o.shape.body.outer;a.has(h)||a.push(h)}}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h){let u=c.shape.body.outer;a.has(u)||a.push(u)}}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h=o.shape.body.outer,u;if(i!=null){let x=o.shape.filter;u=(x.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(n)if(s){if(!this.failed.has(h)){let x=Ee.containTest(this.aabbShape.zpp_inner,o.shape);!a.has(h)&&x?a.push(h):x||(a.remove(h),this.failed.push(h))}}else!a.has(h)&&Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner)&&a.push(h);else if(s){if(!this.failed.has(h)){let x=o.shape.aabb,y=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy;!a.has(h)&&y?a.push(h):y||(a.remove(h),this.failed.push(h))}}else{let x;if(a.has(h))x=!1;else{let y=o.shape.aabb;x=y.minx>=r.minx&&y.miny>=r.miny&&y.maxx<=r.maxx&&y.maxy<=r.maxy}x&&a.push(h)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}return this.failed.clear(),a}shapesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h;if(l!=null){let u=p.shape.filter;h=(u.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(i?Ee.containTest(this.circShape.zpp_inner,p.shape)&&o.push(p.shape.outer):Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h;if(l!=null){let u=p.shape.filter;h=(u.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(i?Ee.containTest(this.circShape.zpp_inner,p.shape)&&o.push(p.shape.outer):Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}return o}bodiesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new ze._nape.phys.BodyList;if(this.failed==null&&(this.failed=new ze._nape.phys.BodyList),this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h=p.shape.body.outer,u;if(l!=null){let x=p.shape.filter;u=(x.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(i){if(!this.failed.has(h)){let x=Ee.containTest(this.circShape.zpp_inner,p.shape);!o.has(h)&&x?o.push(h):x||(o.remove(h),this.failed.push(h))}}else!o.has(h)&&Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(h)}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h=p.shape.body.outer,u;if(l!=null){let x=p.shape.filter;u=(x.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(i){if(!this.failed.has(h)){let x=Ee.containTest(this.circShape.zpp_inner,p.shape);!o.has(h)&&x?o.push(h):x||(o.remove(h),this.failed.push(h))}}else!o.has(h)&&Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(h)}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}return this.failed.clear(),o}shapesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p;if(s!=null){let c=a.shape.filter;p=(c.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&c.collisionGroup)!=0}else p=!0;p&&(n?Ee.containTest(t,a.shape)&&r.push(a.shape.outer):Ee.testCollide_safe(a.shape,t)&&r.push(a.shape.outer))}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p;if(s!=null){let c=a.shape.filter;p=(c.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&c.collisionGroup)!=0}else p=!0;p&&(n?Ee.containTest(t,a.shape)&&r.push(a.shape.outer):Ee.testCollide_safe(a.shape,t)&&r.push(a.shape.outer))}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}return r}bodiesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new ze._nape.phys.BodyList;if(this.failed==null&&(this.failed=new ze._nape.phys.BodyList),this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p=a.shape.body.outer,c;if(s!=null){let h=a.shape.filter;c=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else c=!0;if(c)if(n){if(!this.failed.has(p)){let h=Ee.containTest(t,a.shape);!r.has(p)&&h?r.push(p):h||(r.remove(p),this.failed.push(p))}}else!r.has(p)&&Ee.testCollide_safe(a.shape,t)&&r.push(p)}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p=a.shape.body.outer,c;if(s!=null){let h=a.shape.filter;c=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else c=!0;if(c)if(n){if(!this.failed.has(p)){let h=Ee.containTest(t,a.shape);!r.has(p)&&h?r.push(p):h||(r.remove(p),this.failed.push(p))}}else!r.has(p)&&Ee.testCollide_safe(a.shape,t)&&r.push(p)}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}return this.failed.clear(),r}rayCast(t,n,s){this.openlist==null&&(this.openlist=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.sync_broadphase(),t.validate_dir();let i=t.maxdist;if(this.dtree.root!=null&&t.aabbtest(this.dtree.root.aabb)){let r=t.aabbsect(this.dtree.root.aabb);if(r>=0&&r<i){this.dtree.root.rayt=r;let a=null,o=this.openlist.head;for(;o!=null;){let x=o.elt;if(this.dtree.root.rayt<x.rayt)break;a=o,o=o.next}let p=this.openlist,c=this.dtree.root,h;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?h=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(h=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=h.next,h.next=null),h.elt=c;let u=h;a==null?(u.next=p.head,p.head=u):(u.next=a.next,a.next=u),p.pushmod=p.modified=!0,p.length++}}if(this.stree.root!=null&&t.aabbtest(this.stree.root.aabb)){let r=t.aabbsect(this.stree.root.aabb);if(r>=0&&r<i){this.stree.root.rayt=r;let a=null,o=this.openlist.head;for(;o!=null;){let x=o.elt;if(this.stree.root.rayt<x.rayt)break;a=o,o=o.next}let p=this.openlist,c=this.stree.root,h;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?h=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(h=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=h.next,h.next=null),h.elt=c;let u=h;a==null?(u.next=p.head,p.head=u):(u.next=a.next,a.next=u),p.pushmod=p.modified=!0,p.length++}}let l=null;for(;this.openlist.head!=null;){let r=this.openlist.pop_unsafe();if(r.rayt>=i)break;if(r.child1==null){let a=r.shape,o;if(s!=null){let p=a.filter;o=(p.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&p.collisionGroup)!=0}else o=!0;if(o){let p=a.type==0?t.circlesect(a.circle,n,i):t.aabbtest(a.aabb)?t.polysect(a.polygon,n,i):null;if(p!=null){if(p.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(i=p.zpp_inner.toiDistance,l!=null){if(l.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");l.zpp_inner.free()}l=p}}}else{if(r.child1!=null&&t.aabbtest(r.child1.aabb)){let a=t.aabbsect(r.child1.aabb);if(a>=0&&a<i){r.child1.rayt=a;let o=null,p=this.openlist.head;for(;p!=null;){let y=p.elt;if(r.child1.rayt<y.rayt)break;o=p,p=p.next}let c=this.openlist,h=r.child1,u;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?u=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(u=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=u.next,u.next=null),u.elt=h;let x=u;o==null?(x.next=c.head,c.head=x):(x.next=o.next,o.next=x),c.pushmod=c.modified=!0,c.length++}}if(r.child2!=null&&t.aabbtest(r.child2.aabb)){let a=t.aabbsect(r.child2.aabb);if(a>=0&&a<i){r.child2.rayt=a;let o=null,p=this.openlist.head;for(;p!=null;){let y=p.elt;if(r.child2.rayt<y.rayt)break;o=p,p=p.next}let c=this.openlist,h=r.child2,u;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?u=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(u=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=u.next,u.next=null),u.elt=h;let x=u;o==null?(x.next=c.head,c.head=x):(x.next=o.next,o.next=x),c.pushmod=c.modified=!0,c.length++}}}}return this.openlist.clear(),l}rayMultiCast(t,n,s,i){this.openlist==null&&(this.openlist=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.sync_broadphase(),t.validate_dir();let l=t.maxdist>=1/0,r=i??new ze._nape.geom.RayResultList;if(this.dtree.root!=null&&t.aabbtest(this.dtree.root.aabb))if(l)this.openlist.add(this.dtree.root);else{let a=t.aabbsect(this.dtree.root.aabb);a>=0&&a<t.maxdist&&this.openlist.add(this.dtree.root)}if(this.stree.root!=null&&t.aabbtest(this.stree.root.aabb))if(l)this.openlist.add(this.stree.root);else{let a=t.aabbsect(this.stree.root.aabb);a>=0&&a<t.maxdist&&this.openlist.add(this.stree.root)}for(;this.openlist.head!=null;){let a=this.openlist.pop_unsafe();if(a.child1==null){let o=a.shape,p;if(s!=null){let c=o.filter;p=(c.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&c.collisionGroup)!=0}else p=!0;p&&(o.type==0?t.circlesect2(o.circle,n,r):t.aabbtest(o.aabb)&&t.polysect2(o.polygon,n,r))}else{if(a.child1!=null&&t.aabbtest(a.child1.aabb))if(l)this.openlist.add(a.child1);else{let o=t.aabbsect(a.child1.aabb);o>=0&&o<t.maxdist&&this.openlist.add(a.child1)}if(a.child2!=null&&t.aabbtest(a.child2.aabb))if(l)this.openlist.add(a.child2);else{let o=t.aabbsect(a.child2.aabb);o>=0&&o<t.maxdist&&this.openlist.add(a.child2)}}}return this.openlist.clear(),r}};ze._zpp=null,ze._nape=null,ze.FATTEN=3,ze.VEL_STEPS=2;var Cs=ze;var Us=class Us{constructor(){this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.comps=null;this.sleep=!1;this.waket=0;this.comps=new Us._zpp.util.ZNPList_ZPP_Component}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}free(){}alloc(){this.waket=0}};Us.zpp_pool=null,Us._zpp=null;var xt=Us;var Ws=class{constructor(){this.next=null;this.parent=this;this.rank=0;this.isBody=!1;this.body=null;this.constraint=null;this.island=null;this.sleeping=!1;this.waket=0;this.woken=!1;this._inuse=!1}free(){this.body=null,this.constraint=null}alloc(){}reset(){this.sleeping=!1,this.island=null,this.parent=this,this.rank=0}};Ws.zpp_pool=null;var Bn=class Bn{constructor(){this.id=0;this.di=0;this.int1=null;this.int2=null;this.arbiters=null;this.COLLISIONstate=null;this.COLLISIONstamp=null;this.SENSORstate=null;this.SENSORstamp=null;this.FLUIDstate=null;this.FLUIDstamp=null;this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.freed=!1;this.lazydel=!1;this.arbiters=new Bn._zpp.util.ZNPList_ZPP_Arbiter}static get(e,t){let n;return Bn.zpp_pool==null?n=new Bn:(n=Bn.zpp_pool,Bn.zpp_pool=n.next,n.next=null),n.freed=!1,n.lazydel=!1,n.COLLISIONstate=1,n.COLLISIONstamp=0,n.SENSORstate=1,n.SENSORstamp=0,n.FLUIDstate=1,n.FLUIDstamp=0,e.id<t.id?(n.int1=e,n.int2=t):(n.int1=t,n.int2=e),n.id=n.int1.id,n.di=n.int2.id,n}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}free(){this.int1=this.int2=null,this.id=this.di=-1,this.freed=!0}alloc(){this.freed=!1,this.lazydel=!1,this.COLLISIONstate=1,this.COLLISIONstamp=0,this.SENSORstate=1,this.SENSORstamp=0,this.FLUIDstate=1,this.FLUIDstamp=0}add_arb(e){let t=!1,n=this.arbiters.head;for(;n!=null;){if(n.elt==e){t=!0;break}n=n.next}if(t)return!1;{let s=this.arbiters,i,l=Bn._zpp.util.ZNPNode_ZPP_Arbiter;l.zpp_pool==null?i=new l:(i=l.zpp_pool,l.zpp_pool=i.next,i.next=null),i.elt=e;let r=i;return r.next=s.head,s.head=r,s.modified=!0,s.length++,!0}}try_remove_arb(e){let t=this.arbiters,n=null,s=t.head,i=!1;for(;s!=null;){if(s.elt==e){let l,r;n==null?(l=t.head,r=l.next,t.head=r,t.head==null&&(t.pushmod=!0)):(l=n.next,r=l.next,n.next=r,r==null&&(t.pushmod=!0));let a=l;a.elt=null;let o=Bn._zpp.util.ZNPNode_ZPP_Arbiter;a.next=o.zpp_pool,o.zpp_pool=a,t.modified=!0,t.length--,t.pushmod=!0,i=!0;break}n=s,s=s.next}return i}remove_arb(e){let t=this.arbiters,n=null,s=t.head;for(;s!=null;){if(s.elt==e){let i,l;n==null?(i=t.head,l=i.next,t.head=l,t.head==null&&(t.pushmod=!0)):(i=n.next,l=i.next,n.next=l,l==null&&(t.pushmod=!0));let r=i;r.elt=null;let a=Bn._zpp.util.ZNPNode_ZPP_Arbiter;r.next=a.zpp_pool,a.zpp_pool=r,t.modified=!0,t.length--,t.pushmod=!0;break}n=s,s=s.next}}empty_arb(e){let t=!0,n=this.arbiters.head;for(;n!=null;)if((n.elt.type&e)==0){n=n.next;continue}else{t=!1;break}return t}really_empty(){return this.arbiters.head==null}sleeping(){let e=!0,t=this.arbiters.head;for(;t!=null;)if(t.elt.sleeping){t=t.next;continue}else{e=!1;break}return e}};Bn.zpp_pool=null,Bn._zpp=null;var Wt=Bn;var pi=class pi{constructor(e){this.cbsets=null;this.space=null;let t=pi._zpp.util.ZPP_Set_ZPP_CbSet;t.zpp_pool==null?this.cbsets=new t:(this.cbsets=t.zpp_pool,t.zpp_pool=this.cbsets.next,this.cbsets.next=null),this.cbsets.lt=pi._zpp.callbacks.ZPP_CbSet.setlt,this.space=e}get(e){if(e.head==null)return null;let t=pi._zpp.callbacks.ZPP_CbSet,n;t.zpp_pool==null?n=new t:(n=t.zpp_pool,t.zpp_pool=n.next,n.next=null);let s=n.cbTypes;n.cbTypes=e;let i=this.cbsets.find_weak(n),l;if(i!=null)l=i.data;else{let a=t.get(e);this.cbsets.insert(a),a.manager=this,l=a}n.cbTypes=s;let r=n;for(r.listeners.clear(),r.zip_listeners=!0,r.bodylisteners.clear(),r.zip_bodylisteners=!0,r.conlisteners.clear(),r.zip_conlisteners=!0;r.cbTypes.head!=null;)r.cbTypes.pop_unsafe().cbsets.remove(r);return r.next=t.zpp_pool,t.zpp_pool=r,l}remove(e){let t=pi._zpp.callbacks.ZPP_CbSetPair;for(this.cbsets.remove(e);e.cbpairs.head!=null;){let n=e.cbpairs.pop_unsafe();n.a!=n.b&&(e==n.a?n.b.cbpairs.remove(n):n.a.cbpairs.remove(n));let s=n;s.a=s.b=null,s.listeners.clear(),s.next=t.zpp_pool,t.zpp_pool=s}e.manager=null}clear(){}validate(){if(!this.cbsets.empty()){let e=this.cbsets.parent;for(;e.prev!=null;)e=e.prev;for(;e!=null;)if(e.data.validate(),e.next!=null)for(e=e.next;e.prev!=null;)e=e.prev;else{for(;e.parent!=null&&e==e.parent.next;)e=e.parent;e=e.parent}}}pair(e,t){let n=pi._zpp.callbacks.ZPP_CbSet,s=pi._zpp.callbacks.ZPP_CbSetPair,i=null,r=(e.cbpairs.length<t.cbpairs.length?e.cbpairs:t.cbpairs).head;for(;r!=null;){let a=r.elt;if(a.a==e&&a.b==t||a.a==t&&a.b==e){i=a;break}r=r.next}if(i==null){let a;s.zpp_pool==null?a=new s:(a=s.zpp_pool,s.zpp_pool=a.next,a.next=null),a.zip_listeners=!0,n.setlt(e,t)?(a.a=e,a.b=t):(a.a=t,a.b=e),i=a,e.cbpairs.add(i),t!=e&&t.cbpairs.add(i)}return i.zip_listeners&&(i.zip_listeners=!1,i.__validate()),i}valid_listener(e){return e.space==this.space}};pi._zpp=null;var Xi=pi;var j=class j{constructor(e,t){this.outer=null;this.userData=null;this.gravityx=null;this.gravityy=null;this.wrap_gravity=null;this.bodies=null;this.wrap_bodies=null;this.compounds=null;this.wrap_compounds=null;this.constraints=null;this.wrap_constraints=null;this.kinematics=null;this.bphase=null;this.__static=null;this.global_lin_drag=null;this.global_ang_drag=null;this.stamp=null;this.midstep=null;this.time=null;this.sortcontacts=null;this.c_arbiters_true=null;this.c_arbiters_false=null;this.f_arbiters=null;this.s_arbiters=null;this.wrap_arbiters=null;this.live=null;this.wrap_live=null;this.live_constraints=null;this.wrap_livecon=null;this.staticsleep=null;this.islands=null;this.listeners=null;this.wrap_listeners=null;this.callbacks=null;this.callbackset_list=null;this.cbsets=null;this.convexShapeList=null;this.pre_dt=null;this.toiEvents=null;this.continuous=null;this.precb=null;this.prelisteners=null;this.mrca1=null;this.mrca2=null;this.prelisteners=null,this.precb=null,this.continuous=!1,this.toiEvents=null,this.pre_dt=0,this.convexShapeList=null,this.cbsets=null,this.callbackset_list=null,this.callbacks=null,this.wrap_listeners=null,this.listeners=null,this.islands=null,this.staticsleep=null,this.wrap_livecon=null,this.live_constraints=null,this.wrap_live=null,this.live=null,this.wrap_arbiters=null,this.s_arbiters=null,this.f_arbiters=null,this.c_arbiters_false=null,this.c_arbiters_true=null,this.sortcontacts=!1,this.time=0,this.midstep=!1,this.stamp=0,this.global_ang_drag=0,this.global_lin_drag=0,this.__static=null,this.bphase=null,this.kinematics=null,this.wrap_constraints=null,this.constraints=null,this.wrap_compounds=null,this.compounds=null,this.wrap_bodies=null,this.bodies=null,this.wrap_gravity=null,this.gravityy=0,this.gravityx=0,this.userData=null,this.outer=null,this.toiEvents=new j._zpp.util.ZNPList_ZPP_ToiEvent,this.global_lin_drag=.015,this.global_ang_drag=.015,Tt.internal=!0,this.precb=Tt._createPreCb(),this.precb.zpp_inner=new Tt,Tt.internal=!1,this.sortcontacts=!0,this.pre_dt=0;let n;t!=null?(Q.Broadphase_DYNAMIC_AABB_TREE==null&&(Q.internal=!0,Q.Broadphase_DYNAMIC_AABB_TREE=new j._nape.space.Broadphase,Q.internal=!1),n=t==Q.Broadphase_DYNAMIC_AABB_TREE):n=!0,n?this.bphase=new j._zpp.space.ZPP_DynAABBPhase(this):(Q.Broadphase_SWEEP_AND_PRUNE==null&&(Q.internal=!0,Q.Broadphase_SWEEP_AND_PRUNE=new j._nape.space.Broadphase,Q.internal=!1),t==Q.Broadphase_SWEEP_AND_PRUNE&&(this.bphase=new j._zpp.space.ZPP_SweepPhase(this))),this.time=0;let s=this;e!=null?(this.gravityx=e.x,this.gravityy=e.y):(this.gravityx=0,this.gravityy=0),this.bodies=new j._zpp.util.ZNPList_ZPP_Body,this.wrap_bodies=j._zpp.util.ZPP_BodyList.get(this.bodies),this.wrap_bodies.zpp_inner.adder=i=>this.bodies_adder(i),this.wrap_bodies.zpp_inner.subber=i=>this.bodies_subber(i),this.wrap_bodies.zpp_inner._modifiable=()=>this.bodies_modifiable(),this.compounds=new j._zpp.util.ZNPList_ZPP_Compound,this.wrap_compounds=j._zpp.util.ZPP_CompoundList.get(this.compounds),this.wrap_compounds.zpp_inner.adder=i=>this.compounds_adder(i),this.wrap_compounds.zpp_inner.subber=i=>this.compounds_subber(i),this.wrap_compounds.zpp_inner._modifiable=()=>this.compounds_modifiable(),this.kinematics=new j._zpp.util.ZNPList_ZPP_Body,this.c_arbiters_true=new j._zpp.util.ZNPList_ZPP_ColArbiter,this.c_arbiters_false=new j._zpp.util.ZNPList_ZPP_ColArbiter,this.f_arbiters=new j._zpp.util.ZNPList_ZPP_FluidArbiter,this.s_arbiters=new j._zpp.util.ZNPList_ZPP_SensorArbiter,this.islands=new xt,this.live=new j._zpp.util.ZNPList_ZPP_Body,this.wrap_live=j._zpp.util.ZPP_BodyList.get(this.live,!0),this.staticsleep=new j._zpp.util.ZNPList_ZPP_Body,this.constraints=new j._zpp.util.ZNPList_ZPP_Constraint,this.wrap_constraints=j._zpp.util.ZPP_ConstraintList.get(this.constraints),this.wrap_constraints.zpp_inner.adder=i=>this.constraints_adder(i),this.wrap_constraints.zpp_inner.subber=i=>this.constraints_subber(i),this.wrap_constraints.zpp_inner._modifiable=()=>this.constraints_modifiable(),this.live_constraints=new j._zpp.util.ZNPList_ZPP_Constraint,this.wrap_livecon=j._zpp.util.ZPP_ConstraintList.get(this.live_constraints,!0),this.__static=Cn.__static(),this.__static.zpp_inner.space=this,this.callbacks=new Tt,this.midstep=!1,this.listeners=new j._zpp.util.ZNPList_ZPP_Listener,this.wrap_listeners=j._zpp.util.ZPP_ListenerList.get(this.listeners),this.wrap_listeners.zpp_inner.adder=i=>this.listeners_adder(i),this.wrap_listeners.zpp_inner.subber=i=>this.listeners_subber(i),this.wrap_listeners.zpp_inner._modifiable=()=>this.listeners_modifiable(),this.callbackset_list=new Wt,this.mrca1=new j._zpp.util.ZNPList_ZPP_Interactor,this.mrca2=new j._zpp.util.ZNPList_ZPP_Interactor,this.prelisteners=new j._zpp.util.ZNPList_ZPP_InteractionListener,this.cbsets=new Xi(this)}getgravity(){let e=this.gravityx,t=this.gravityy;if(t==null&&(t=0),e==null&&(e=0),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let n;if(j._zpp.util.ZPP_PubPool.poolVec2==null?n=new j._nape.geom.Vec2:(n=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),n.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=e,s.y=t,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");if(s._isimmutable!=null&&s._isimmutable(),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x==e){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y==t}else i=!1;if(!i){n.zpp_inner.x=e,n.zpp_inner.y=t;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.wrap_gravity=n,this.wrap_gravity.zpp_inner._inuse=!0,this.wrap_gravity.zpp_inner._invalidate=s=>this.gravity_invalidate(s),this.wrap_gravity.zpp_inner._validate=()=>this.gravity_validate()}gravity_invalidate(e){if(this.midstep)throw new Error("Error: Space::gravity cannot be set during space step");this.gravityx=e.x,this.gravityy=e.y;let t=new j._zpp.util.ZNPList_ZPP_Compound,n=this.bodies.head;for(;n!=null;){let l=n.elt;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1)),n=n.next}let s=this.compounds.head;for(;s!=null;){let i=s.elt;t.add(i),s=s.next}for(;t.head!=null;){let i=t.pop_unsafe(),l=i.bodies.head;for(;l!=null;){let o=l.elt;o.world||(o.component.waket=this.stamp+(this.midstep?0:1),o.type==3&&(o.kinematicDelaySleep=!0),o.component.sleeping&&this.really_wake(o,!1)),l=l.next}let r=i.compounds.head;for(;r!=null;){let a=r.elt;t.add(a),r=r.next}}}gravity_validate(){this.wrap_gravity.zpp_inner.x=this.gravityx,this.wrap_gravity.zpp_inner.y=this.gravityy}clear(){for(;this.listeners.head!=null;){let t=this.listeners.pop_unsafe();this.remListener(t)}for(;this.callbackset_list.next!=null;){let t=this.callbackset_list.pop_unsafe();t.arbiters.clear();let n=t;n.int1=n.int2=null,n.id=n.di=-1,n.freed=!0,n.next=Wt.zpp_pool,Wt.zpp_pool=n}for(;this.c_arbiters_true.head!=null;){let t=this.c_arbiters_true.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}for(t.b1=t.b2=null,t.active=!1,t.intchange=!1;t.contacts.next!=null;){let s=t.contacts,i=s.next;s.pop();let l=i;l.arbiter=null,l.next=we.zpp_pool,we.zpp_pool=l;let r=t.innards,a=r.next;r.next=a.next,a._inuse=!1,r.next==null&&(r.pushmod=!0),r.modified=!0,r.length--}let n=t;n.userdef_dyn_fric=!1,n.userdef_stat_fric=!1,n.userdef_restitution=!1,n.userdef_rfric=!1,n.__ref_edge1=n.__ref_edge2=null,n.next=ut.zpp_pool,ut.zpp_pool=n,t.pre_dt=-1}for(;this.c_arbiters_false.head!=null;){let t=this.c_arbiters_false.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}for(t.b1=t.b2=null,t.active=!1,t.intchange=!1;t.contacts.next!=null;){let s=t.contacts,i=s.next;s.pop();let l=i;l.arbiter=null,l.next=we.zpp_pool,we.zpp_pool=l;let r=t.innards,a=r.next;r.next=a.next,a._inuse=!1,r.next==null&&(r.pushmod=!0),r.modified=!0,r.length--}let n=t;n.userdef_dyn_fric=!1,n.userdef_stat_fric=!1,n.userdef_restitution=!1,n.userdef_rfric=!1,n.__ref_edge1=n.__ref_edge2=null,n.next=ut.zpp_pool,ut.zpp_pool=n,t.pre_dt=-1}for(;this.s_arbiters.head!=null;){let t=this.s_arbiters.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}t.b1=t.b2=null,t.active=!1,t.intchange=!1;let n=t;n.next=Ot.zpp_pool,Ot.zpp_pool=n}for(;this.f_arbiters.head!=null;){let t=this.f_arbiters.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}t.b1=t.b2=null,t.active=!1,t.intchange=!1;let n=t;n.next=Pt.zpp_pool,Pt.zpp_pool=n,t.pre_dt=-1}for(this.bphase.clear();this.bodies.head!=null;){let t=this.bodies.pop_unsafe();if(t.component!=null){let n=t.component.island;if(n!=null){for(;n.comps.head!=null;){let i=n.comps.pop_unsafe();i.sleeping=!1,i.island=null,i.parent=i,i.rank=0}let s=n;s.next=xt.zpp_pool,xt.zpp_pool=s}}t.removedFromSpace(),t.space=null}for(;this.constraints.head!=null;){let t=this.constraints.pop_unsafe();if(t.component!=null){let n=t.component.island;if(n!=null){for(;n.comps.head!=null;){let i=n.comps.pop_unsafe();i.sleeping=!1,i.island=null,i.parent=i,i.rank=0}let s=n;s.next=xt.zpp_pool,xt.zpp_pool=s}}t.removedFromSpace(),t.space=null}this.kinematics.clear();let e=new j._zpp.util.ZNPList_ZPP_Compound;for(;this.compounds.head!=null;){let t=this.compounds.pop_unsafe();e.add(t)}for(;e.head!=null;){let t=e.pop_unsafe();t.removedFromSpace(),t.space=null;let n=t.bodies.head;for(;n!=null;){let l=n.elt;if(l.component!=null){let r=l.component.island;if(r!=null){for(;r.comps.head!=null;){let o=r.comps.pop_unsafe();o.sleeping=!1,o.island=null,o.parent=o,o.rank=0}let a=r;a.next=xt.zpp_pool,xt.zpp_pool=a}}l.removedFromSpace(),l.space=null,n=n.next}let s=t.constraints.head;for(;s!=null;){let l=s.elt;if(l.component!=null){let r=l.component.island;if(r!=null){for(;r.comps.head!=null;){let o=r.comps.pop_unsafe();o.sleeping=!1,o.island=null,o.parent=o,o.rank=0}let a=r;a.next=xt.zpp_pool,xt.zpp_pool=a}}l.removedFromSpace(),l.space=null,s=s.next}let i=t.compounds.head;for(;i!=null;){let l=i.elt;e.add(l),i=i.next}}this.staticsleep.clear(),this.live.clear(),this.live_constraints.clear(),this.stamp=0,this.time=0,this.mrca1.clear(),this.mrca2.clear(),this.prelisteners.clear(),this.cbsets.clear()}bodies_adder(e){if(e.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Body belonging to a Compound, only the root Compound space can be set");return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.outer.zpp_inner.wrap_bodies.remove(e),this.addBody(e.zpp_inner),!0):!1}bodies_subber(e){this.remBody(e.zpp_inner)}bodies_modifiable(){if(this.midstep)throw new Error("Error: Space::bodies cannot be set during space step()")}compounds_adder(e){if(e.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of an inner Compound, only the root Compound space can be set");return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.wrap_compounds.remove(e),this.addCompound(e.zpp_inner),!0):!1}compounds_subber(e){this.remCompound(e.zpp_inner)}compounds_modifiable(){if(this.midstep)throw new Error("Error: Space::compounds cannot be set during space step()")}constraints_adder(e){if(e.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Constraint belonging to a Compound, only the root Compound space can be set");return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.outer.zpp_inner.wrap_constraints.remove(e),this.addConstraint(e.zpp_inner),!0):!1}constraints_subber(e){this.remConstraint(e.zpp_inner)}constraints_modifiable(){if(this.midstep)throw new Error("Error: Space::constraints cannot be set during space step()")}listeners_adder(e){return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.outer.zpp_inner.wrap_listeners.remove(e),this.addListener(e.zpp_inner),!0):!1}listeners_subber(e){this.remListener(e.zpp_inner)}listeners_modifiable(){if(this.midstep)throw new Error("Error: Space::listeners cannot be set during space step()")}revoke_listener(e){}unrevoke_listener(e){}addListener(e){e.space=this,e.addedToSpace();let t=e.interaction!=null}remListener(e){let t=e.interaction!=null;e.removedFromSpace(),e.space=null}add_callbackset(e){let t=e.int1.cbsets,n;j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool==null?n=new j._zpp.util.ZNPNode_ZPP_CallbackSet:(n=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=n.next,n.next=null),n.elt=e;let s=n;s.next=t.head,t.head=s,t.modified=!0,t.length++;let i=e.int2.cbsets,l;j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_CallbackSet:(l=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++;let a=this.callbackset_list;e._inuse=!0;let o=e;o.next=a.next,a.next=o,a.modified=!0,a.length++}remove_callbackset(e){e.lazydel=!0;let t=e.int1.cbsets,n=null,s=t.head,i=!1;for(;s!=null;){if(s.elt==e){let p,c;n==null?(p=t.head,c=p.next,t.head=c,t.head==null&&(t.pushmod=!0)):(p=n.next,c=p.next,n.next=c,c==null&&(t.pushmod=!0));let h=p;h.elt=null,h.next=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=h,t.modified=!0,t.length--,t.pushmod=!0,i=!0;break}n=s,s=s.next}let l=e.int2.cbsets,r=null,a=l.head,o=!1;for(;a!=null;){if(a.elt==e){let p,c;r==null?(p=l.head,c=p.next,l.head=c,l.head==null&&(l.pushmod=!0)):(p=r.next,c=p.next,r.next=c,c==null&&(l.pushmod=!0));let h=p;h.elt=null,h.next=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=h,l.modified=!0,l.length--,l.pushmod=!0,o=!0;break}r=a,a=a.next}}transmitType(e,t){let n=e;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,!1)),e.type==2?this.live.remove(e):e.type==3?(this.kinematics.remove(e),this.staticsleep.remove(e)):e.type==1&&this.staticsleep.remove(e),e.type=t,e.type==3&&this.kinematics.add(e),e.type==1&&this.static_validation(e),e.component.sleeping=!0;let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0))}added_shape(e,t){if(t==null&&(t=!1),!t){let n=e.body;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,!1))}this.bphase.insert(e),e.addedToSpace()}removed_shape(e,t){t==null&&(t=!1);let n=e.body;t||n.wake();let s=null,i=n.arbiters.head;for(;i!=null;){let l=i.elt;if(l.ws1==e||l.ws2==e){if(l.present!=0){this.MRCA_chains(l.ws1,l.ws2);let a=this.mrca1.head;for(;a!=null;){let o=a.elt,p=this.mrca2.head;for(;p!=null;){let c=p.elt,h=o.cbSet,u=c.cbSet;h.validate(),u.validate();let x=h.manager,y=null,_=(h.cbpairs.length<u.cbpairs.length?h.cbpairs:u.cbpairs).head;for(;_!=null;){let C=_.elt;if(C.a==h&&C.b==u||C.a==u&&C.b==h){y=C;break}_=_.next}if(y==null){let C;Ne.zpp_pool==null?C=new Ne:(C=Ne.zpp_pool,Ne.zpp_pool=C.next,C.next=null),C.zip_listeners=!0,_t.setlt(h,u)?(C.a=h,C.b=u):(C.a=u,C.b=h),y=C,h.cbpairs.add(y),u!=h&&u.cbpairs.add(y)}if(y.zip_listeners&&(y.zip_listeners=!1,y.__validate()),y.listeners.head==null){p=p.next;continue}let f=j._zpp.phys.ZPP_Interactor.get(o,c);f.remove_arb(l),l.present--;let z=h.manager,P=null,m=(h.cbpairs.length<u.cbpairs.length?h.cbpairs:u.cbpairs).head;for(;m!=null;){let C=m.elt;if(C.a==h&&C.b==u||C.a==u&&C.b==h){P=C;break}m=m.next}if(P==null){let C;Ne.zpp_pool==null?C=new Ne:(C=Ne.zpp_pool,Ne.zpp_pool=C.next,C.next=null),C.zip_listeners=!0,_t.setlt(h,u)?(C.a=h,C.b=u):(C.a=u,C.b=h),P=C,h.cbpairs.add(P),u!=h&&u.cbpairs.add(P)}P.zip_listeners&&(P.zip_listeners=!1,P.__validate());let b=P.listeners.head;for(;b!=null;){let C=b.elt;if(C.event==1&&(C.itype&l.type)!=0&&f.empty_arb(C.itype)){let v=this.push_callback(C);v.event=1;let w=f.int1,O=f.int2,E,M=C.options1,N=w.cbTypes;if(M.nonemptyintersection(N,M.includes)&&!M.nonemptyintersection(N,M.excludes)){let Z=C.options2,S=O.cbTypes;E=Z.nonemptyintersection(S,Z.includes)&&!Z.nonemptyintersection(S,Z.excludes)}else E=!1;E?(v.int1=w,v.int2=O):(v.int1=O,v.int2=w),v.set=f}b=b.next}f.arbiters.head==null&&this.remove_callbackset(f),p=p.next}a=a.next}}if(l.b1!=n&&l.b1.type==2){let a=l.b1;a.world||(a.component.waket=this.stamp+(this.midstep?0:1),a.type==3&&(a.kinematicDelaySleep=!0),a.component.sleeping&&this.really_wake(a,!1))}if(l.b2!=n&&l.b2.type==2){let a=l.b2;a.world||(a.component.waket=this.stamp+(this.midstep?0:1),a.type==3&&(a.kinematicDelaySleep=!0),a.component.sleeping&&this.really_wake(a,!1))}if(l.cleared=!0,n==null||l.b2==n){let a=l.b1.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==l){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}}if(n==null||l.b1==n){let a=l.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==l){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}}l.pair!=null&&(l.pair.arb=null,l.pair=null),l.active=!1,this.f_arbiters.modified=!0,i=n.arbiters.erase(s);continue}s=i,i=i.next}this.bphase.remove(e),e.removedFromSpace()}addConstraint(e){e.space=this,e.addedToSpace(),e.active&&(e.component.sleeping=!0,this.wake_constraint(e,!0))}remConstraint(e){e.active&&(this.wake_constraint(e,!0),this.live_constraints.remove(e)),e.removedFromSpace(),e.space=null}addCompound(e){e.space=this,e.addedToSpace();let t=e.bodies.head;for(;t!=null;){let i=t.elt;this.addBody(i),t=t.next}let n=e.constraints.head;for(;n!=null;){let i=n.elt;this.addConstraint(i),n=n.next}let s=e.compounds.head;for(;s!=null;){let i=s.elt;this.addCompound(i),s=s.next}}remCompound(e){let t=e.bodies.head;for(;t!=null;){let i=t.elt;this.remBody(i),t=t.next}let n=e.constraints.head;for(;n!=null;){let i=n.elt;this.remConstraint(i),n=n.next}let s=e.compounds.head;for(;s!=null;){let i=s.elt;this.remCompound(i),s=s.next}e.removedFromSpace(),e.space=null}addBody(e,t){t==null&&(t=-1),e.space=this,e.addedToSpace(),e.component.sleeping=!0;let n=e;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,!0));let s=e.shapes.head;for(;s!=null;){let i=s.elt,l=!0;if(l==null&&(l=!1),!l){let r=i.body;r.world||(r.component.waket=this.stamp+(this.midstep?0:1),r.type==3&&(r.kinematicDelaySleep=!0),r.component.sleeping&&this.really_wake(r,!1))}this.bphase.insert(i),i.addedToSpace(),s=s.next}e.type==1?this.static_validation(e):e.type!=2&&t!=3&&this.kinematics.add(e)}remBody(e,t){if(t==null&&(t=-1),e.type==1){let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0)),this.staticsleep.remove(e)}else if(e.type==2){let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0)),this.live.remove(e)}else{t!=3&&this.kinematics.remove(e);let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0)),this.staticsleep.remove(e)}let n=e.shapes.head;for(;n!=null;){let s=n.elt;this.removed_shape(s,!0),n=n.next}e.removedFromSpace(),e.space=null}shapesUnderPoint(e,t,n,s){return this.bphase.shapesUnderPoint(e,t,n,s)}bodiesUnderPoint(e,t,n,s){return this.bphase.bodiesUnderPoint(e,t,n,s)}shapesInAABB(e,t,n,s,i){return this.bphase.shapesInAABB(e.zpp_inner,t,n,s,i)}bodiesInAABB(e,t,n,s,i){return this.bphase.bodiesInAABB(e.zpp_inner,t,n,s,i)}shapesInCircle(e,t,n,s,i){let l=this.bphase;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=e.zpp_inner;r._validate!=null&&r._validate();let a=e.zpp_inner.x;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=e.zpp_inner;return o._validate!=null&&o._validate(),l.shapesInCircle(a,e.zpp_inner.y,t,n,s,i)}bodiesInCircle(e,t,n,s,i){let l=this.bphase;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=e.zpp_inner;r._validate!=null&&r._validate();let a=e.zpp_inner.x;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=e.zpp_inner;return o._validate!=null&&o._validate(),l.bodiesInCircle(a,e.zpp_inner.y,t,n,s,i)}shapesInShape(e,t,n,s){return this.bphase.shapesInShape(e,t,n,s)}bodiesInShape(e,t,n,s){return this.bphase.bodiesInShape(e,t,n,s)}rayCast(e,t,n){return this.bphase.rayCast(e.zpp_inner,t,n==null?null:n.zpp_inner)}rayMultiCast(e,t,n,s){return this.bphase.rayMultiCast(e.zpp_inner,t,n==null?null:n.zpp_inner,s)}convexCast(e,t,n,s){let i;if(j._zpp.geom.ZPP_ToiEvent.zpp_pool==null?i=new j._zpp.geom.ZPP_ToiEvent:(i=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=i.next,i.next=null),i.failed=!1,i.s1=i.s2=null,i.arbiter=null,e.type==0){let A=e.circle;if(A.zip_worldCOM&&A.body!=null){if(A.zip_worldCOM=!1,A.zip_localCOM){if(A.zip_localCOM=!1,A.type==1){let B=A.polygon;if(B.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(B.lverts.next.next==null)B.localCOMx=B.lverts.next.x,B.localCOMy=B.lverts.next.y;else if(B.lverts.next.next.next==null){B.localCOMx=B.lverts.next.x,B.localCOMy=B.lverts.next.y;let G=1;B.localCOMx+=B.lverts.next.next.x*G,B.localCOMy+=B.lverts.next.next.y*G;let q=.5;B.localCOMx*=q,B.localCOMy*=q}else{B.localCOMx=0,B.localCOMy=0;let G=0,q=B.lverts.next,R=q;q=q.next;let T=q;for(q=q.next;q!=null;){let ee=q;G+=T.x*(ee.y-R.y);let J=ee.y*T.x-ee.x*T.y;B.localCOMx+=(T.x+ee.x)*J,B.localCOMy+=(T.y+ee.y)*J,R=T,T=ee,q=q.next}q=B.lverts.next;let V=q;G+=T.x*(V.y-R.y);let K=V.y*T.x-V.x*T.y;B.localCOMx+=(T.x+V.x)*K,B.localCOMy+=(T.y+V.y)*K,R=T,T=V,q=q.next;let $=q;G+=T.x*($.y-R.y);let Y=$.y*T.x-$.x*T.y;B.localCOMx+=(T.x+$.x)*Y,B.localCOMy+=(T.y+$.y)*Y,G=1/(3*G);let X=G;B.localCOMx*=X,B.localCOMy*=X}}A.wrap_localCOM!=null&&(A.wrap_localCOM.zpp_inner.x=A.localCOMx,A.wrap_localCOM.zpp_inner.y=A.localCOMy)}let F=A.body;F.zip_axis&&(F.zip_axis=!1,F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot)),A.worldCOMx=A.body.posx+(A.body.axisy*A.localCOMx-A.body.axisx*A.localCOMy),A.worldCOMy=A.body.posy+(A.localCOMx*A.body.axisx+A.localCOMy*A.body.axisy)}}else if(e.type===2){let A=e.capsule;if(A.zip_worldCOM&&A.body!=null){A.zip_worldCOM=!1,A.zip_localCOM&&(A.zip_localCOM=!1,A.wrap_localCOM!=null&&(A.wrap_localCOM.zpp_inner.x=A.localCOMx,A.wrap_localCOM.zpp_inner.y=A.localCOMy));let F=A.body;F.zip_axis&&(F.zip_axis=!1,F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot)),A.worldCOMx=A.body.posx+(A.body.axisy*A.localCOMx-A.body.axisx*A.localCOMy),A.worldCOMy=A.body.posy+(A.localCOMx*A.body.axisx+A.localCOMy*A.body.axisy)}}else{let A=e.polygon;if(A.zip_gaxi&&A.body!=null){A.zip_gaxi=!1,A.validate_laxi();let F=A.body;if(F.zip_axis&&(F.zip_axis=!1,F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot)),A.zip_gverts&&A.body!=null){A.zip_gverts=!1,A.validate_lverts();let V=A.body;V.zip_axis&&(V.zip_axis=!1,V.axisx=Math.sin(V.rot),V.axisy=Math.cos(V.rot));let K=A.lverts.next,$=A.gverts.next;for(;$!=null;){let Y=$,X=K;K=K.next,Y.x=A.body.posx+(A.body.axisy*X.x-A.body.axisx*X.y),Y.y=A.body.posy+(X.x*A.body.axisx+X.y*A.body.axisy),$=$.next}}let B=A.edges.head,G=A.gverts.next,q=G;for(G=G.next;G!=null;){let V=G,K=B.elt;B=B.next,K.gp0=q,K.gp1=V,K.gnormx=A.body.axisy*K.lnormx-A.body.axisx*K.lnormy,K.gnormy=K.lnormx*A.body.axisx+K.lnormy*A.body.axisy,K.gprojection=A.body.posx*K.gnormx+A.body.posy*K.gnormy+K.lprojection,K.wrap_gnorm!=null&&(K.wrap_gnorm.zpp_inner.x=K.gnormx,K.wrap_gnorm.zpp_inner.y=K.gnormy),K.tp0=K.gp0.y*K.gnormx-K.gp0.x*K.gnormy,K.tp1=K.gp1.y*K.gnormx-K.gp1.x*K.gnormy,q=V,G=G.next}let R=A.gverts.next,T=B.elt;B=B.next,T.gp0=q,T.gp1=R,T.gnormx=A.body.axisy*T.lnormx-A.body.axisx*T.lnormy,T.gnormy=T.lnormx*A.body.axisx+T.lnormy*A.body.axisy,T.gprojection=A.body.posx*T.gnormx+A.body.posy*T.gnormy+T.lprojection,T.wrap_gnorm!=null&&(T.wrap_gnorm.zpp_inner.x=T.gnormx,T.wrap_gnorm.zpp_inner.y=T.gnormy),T.tp0=T.gp0.y*T.gnormx-T.gp0.x*T.gnormy,T.tp1=T.gp1.y*T.gnormx-T.gp1.x*T.gnormy}}let l=e.body,r=l.posx,a=l.posy;l.sweepTime=0,l.sweep_angvel=l.angvel;let o=t-l.sweepTime;if(o!=0){l.sweepTime=t;let A=o;if(l.posx+=l.velx*A,l.posy+=l.vely*A,l.angvel!=0){let F=l.sweep_angvel*o;if(l.rot+=F,F*F>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let B=F*F,G=1-.5*B,q=1-B*B/8,R=(G*l.axisx+F*l.axisy)*q;l.axisy=(G*l.axisy-F*l.axisx)*q,l.axisx=R}}}let p=l.posx,c=l.posy;e.validate_sweepRadius();let h=e.sweepRadius,u;fe.zpp_pool==null?u=new fe:(u=fe.zpp_pool,fe.zpp_pool=u.next,u.next=null);let x=r,y=p;u.minx=(x<y?x:y)-h;let d=r,_=p;u.maxx=(d>_?d:_)+h;let f=a,z=c;u.miny=(f<z?f:z)-h;let P=a,k=c;u.maxy=(P>k?P:k)+h;let m=this.convexShapeList=this.bphase.shapesInAABB(u,!1,!1,n==null?null:n.zpp_inner,this.convexShapeList),b=u;b.outer!=null&&(b.outer.zpp_inner=null,b.outer=null),b.wrap_min=b.wrap_max=null,b._invalidate=null,b._validate=null,b.next=fe.zpp_pool,fe.zpp_pool=b;let C=0,v=0;C=0,v=0;let w=0,O=0;w=0,O=0;let E=null,M=t+1;m.zpp_inner.valmod();let N=j._nape.shape.ShapeIterator.get(m);for(;;){N.zpp_inner.zpp_inner.valmod();let A=N.zpp_inner;A.zpp_inner.valmod(),A.zpp_inner.zip_length&&(A.zpp_inner.zip_length=!1,A.zpp_inner.user_length=A.zpp_inner.inner.length);let F=A.zpp_inner.user_length;N.zpp_critical=!0;let B;if(N.zpp_i<F?B=!0:(N.zpp_next=j._nape.shape.ShapeIterator.zpp_pool,j._nape.shape.ShapeIterator.zpp_pool=N,N.zpp_inner=null,B=!1),!B)break;N.zpp_critical=!1;let G=N.zpp_inner.at(N.zpp_i++);if(G!=e.outer&&(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null)!=l.outer){if(i.s1=e,i.s2=G.zpp_inner,s){G.zpp_inner.validate_sweepRadius(),(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner.sweep_angvel=(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner.angvel,(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner.sweepTime=0,gn.dynamicSweep(i,t,0,0,!0);let q=(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner,R=0-q.sweepTime;if(R!=0){q.sweepTime=0;let K=R;if(q.posx+=q.velx*K,q.posy+=q.vely*K,q.angvel!=0){let $=q.sweep_angvel*R;if(q.rot+=$,$*$>1e-4)q.axisx=Math.sin(q.rot),q.axisy=Math.cos(q.rot);else{let Y=$*$,X=1-.5*Y,ee=1-Y*Y/8,J=(X*q.axisx+$*q.axisy)*ee;q.axisy=(X*q.axisy-$*q.axisx)*ee,q.axisx=J}}}let T=(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner,V=G.zpp_inner;if(V.type==0||V.type===2)V.worldCOMx=T.posx+(T.axisy*V.localCOMx-T.axisx*V.localCOMy),V.worldCOMy=T.posy+(V.localCOMx*T.axisx+V.localCOMy*T.axisy);else{let K=V.polygon,$=K.lverts.next,Y=K.gverts.next;for(;Y!=null;){let I=Y,U=$;$=$.next,I.x=T.posx+(T.axisy*U.x-T.axisx*U.y),I.y=T.posy+(U.x*T.axisx+U.y*T.axisy),Y=Y.next}let X=K.edges.head,ee=K.gverts.next,J=ee;for(ee=ee.next;ee!=null;){let I=ee,U=X.elt;X=X.next,U.gnormx=T.axisy*U.lnormx-T.axisx*U.lnormy,U.gnormy=U.lnormx*T.axisx+U.lnormy*T.axisy,U.gprojection=T.posx*U.gnormx+T.posy*U.gnormy+U.lprojection,U.tp0=J.y*U.gnormx-J.x*U.gnormy,U.tp1=I.y*U.gnormx-I.x*U.gnormy,J=I,ee=ee.next}let L=K.gverts.next,D=X.elt;X=X.next,D.gnormx=T.axisy*D.lnormx-T.axisx*D.lnormy,D.gnormy=D.lnormx*T.axisx+D.lnormy*T.axisy,D.gprojection=T.posx*D.gnormx+T.posy*D.gnormy+D.lprojection,D.tp0=J.y*D.gnormx-J.x*D.gnormy,D.tp1=L.y*D.gnormx-L.x*D.gnormy}}else gn.staticSweep(i,t,0,0);i.toi*=t,i.toi>0&&i.toi<M&&(M=i.toi,C=i.axis.x,v=i.axis.y,w=i.c2.x,O=i.c2.y,E=G)}}m.clear();let Z=i;Z.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=Z;let S=0-l.sweepTime;if(S!=0){l.sweepTime=0;let A=S;if(l.posx+=l.velx*A,l.posy+=l.vely*A,l.angvel!=0){let F=l.sweep_angvel*S;if(l.rot+=F,F*F>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let B=F*F,G=1-.5*B,q=1-B*B/8,R=(G*l.axisx+F*l.axisy)*q;l.axisy=(G*l.axisy-F*l.axisx)*q,l.axisx=R}}}if(e.type==0||e.type===2)e.worldCOMx=l.posx+(l.axisy*e.localCOMx-l.axisx*e.localCOMy),e.worldCOMy=l.posy+(e.localCOMx*l.axisx+e.localCOMy*l.axisy);else{let A=e.polygon,F=A.lverts.next,B=A.gverts.next;for(;B!=null;){let K=B,$=F;F=F.next,K.x=l.posx+(l.axisy*$.x-l.axisx*$.y),K.y=l.posy+($.x*l.axisx+$.y*l.axisy),B=B.next}let G=A.edges.head,q=A.gverts.next,R=q;for(q=q.next;q!=null;){let K=q,$=G.elt;G=G.next,$.gnormx=l.axisy*$.lnormx-l.axisx*$.lnormy,$.gnormy=$.lnormx*l.axisx+$.lnormy*l.axisy,$.gprojection=l.posx*$.gnormx+l.posy*$.gnormy+$.lprojection,$.tp0=R.y*$.gnormx-R.x*$.gnormy,$.tp1=K.y*$.gnormx-K.x*$.gnormy,R=K,q=q.next}let T=A.gverts.next,V=G.elt;G=G.next,V.gnormx=l.axisy*V.lnormx-l.axisx*V.lnormy,V.gnormy=V.lnormx*l.axisx+V.lnormy*l.axisy,V.gprojection=l.posx*V.gnormx+l.posy*V.gnormy+V.lprojection,V.tp0=R.y*V.gnormx-R.x*V.gnormy,V.tp1=T.y*V.gnormx-T.x*V.gnormy}if(M<=t){let A=-C,F=-v;if(F==null&&(F=0),A==null&&(A=0),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let B;if(j._zpp.util.ZPP_PubPool.poolVec2==null?B=new j._nape.geom.Vec2:(B=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=B.zpp_pool,B.zpp_pool=null,B.zpp_disp=!1,B==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),B.zpp_inner==null){let T;le.zpp_pool==null?T=new le:(T=le.zpp_pool,le.zpp_pool=T.next,T.next=null),T.weak=!1,T._immutable=!1,T.x=A,T.y=F,B.zpp_inner=T,B.zpp_inner.outer=B}else{if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let T=B.zpp_inner;if(T._immutable)throw new Error("Error: Vec2 is immutable");if(T._isimmutable!=null&&T._isimmutable(),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let V;if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let K=B.zpp_inner;if(K._validate!=null&&K._validate(),B.zpp_inner.x==A){if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let $=B.zpp_inner;$._validate!=null&&$._validate(),V=B.zpp_inner.y==F}else V=!1;if(!V){B.zpp_inner.x=A,B.zpp_inner.y=F;let $=B.zpp_inner;$._invalidate!=null&&$._invalidate($)}}B.zpp_inner.weak=!1;let G=w,q=O;if(q==null&&(q=0),G==null&&(G=0),G!=G||q!=q)throw new Error("Error: Vec2 components cannot be NaN");let R;if(j._zpp.util.ZPP_PubPool.poolVec2==null?R=new j._nape.geom.Vec2:(R=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=R.zpp_pool,R.zpp_pool=null,R.zpp_disp=!1,R==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),R.zpp_inner==null){let T;le.zpp_pool==null?T=new le:(T=le.zpp_pool,le.zpp_pool=T.next,T.next=null),T.weak=!1,T._immutable=!1,T.x=G,T.y=q,R.zpp_inner=T,R.zpp_inner.outer=R}else{if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let T=R.zpp_inner;if(T._immutable)throw new Error("Error: Vec2 is immutable");if(T._isimmutable!=null&&T._isimmutable(),G!=G||q!=q)throw new Error("Error: Vec2 components cannot be NaN");let V;if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let K=R.zpp_inner;if(K._validate!=null&&K._validate(),R.zpp_inner.x==G){if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let $=R.zpp_inner;$._validate!=null&&$._validate(),V=R.zpp_inner.y==q}else V=!1;if(!V){R.zpp_inner.x=G,R.zpp_inner.y=q;let $=R.zpp_inner;$._invalidate!=null&&$._invalidate($)}}return R.zpp_inner.weak=!1,j._zpp.geom.ZPP_ConvexRayResult.getConvex(B,R,M,E)}else return null}prepareCast(e){if(e.type==0){let t=e.circle;if(t.zip_worldCOM&&t.body!=null){if(t.zip_worldCOM=!1,t.zip_localCOM){if(t.zip_localCOM=!1,t.type==1){let s=t.polygon;if(s.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(s.lverts.next.next==null)s.localCOMx=s.lverts.next.x,s.localCOMy=s.lverts.next.y;else if(s.lverts.next.next.next==null){s.localCOMx=s.lverts.next.x,s.localCOMy=s.lverts.next.y;let i=1;s.localCOMx+=s.lverts.next.next.x*i,s.localCOMy+=s.lverts.next.next.y*i;let l=.5;s.localCOMx*=l,s.localCOMy*=l}else{s.localCOMx=0,s.localCOMy=0;let i=0,l=s.lverts.next,r=l;l=l.next;let a=l;for(l=l.next;l!=null;){let x=l;i+=a.x*(x.y-r.y);let y=x.y*a.x-x.x*a.y;s.localCOMx+=(a.x+x.x)*y,s.localCOMy+=(a.y+x.y)*y,r=a,a=x,l=l.next}l=s.lverts.next;let o=l;i+=a.x*(o.y-r.y);let p=o.y*a.x-o.x*a.y;s.localCOMx+=(a.x+o.x)*p,s.localCOMy+=(a.y+o.y)*p,r=a,a=o,l=l.next;let c=l;i+=a.x*(c.y-r.y);let h=c.y*a.x-c.x*a.y;s.localCOMx+=(a.x+c.x)*h,s.localCOMy+=(a.y+c.y)*h,i=1/(3*i);let u=i;s.localCOMx*=u,s.localCOMy*=u}}t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy)}let n=t.body;n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}}else if(e.type===2){let t=e.capsule;if(t.zip_worldCOM&&t.body!=null){t.zip_worldCOM=!1,t.zip_localCOM&&(t.zip_localCOM=!1,t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy));let n=t.body;n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}}else{let t=e.polygon;if(t.zip_gaxi&&t.body!=null){t.zip_gaxi=!1,t.validate_laxi();let n=t.body;if(n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let o=t.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=t.lverts.next,c=t.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=t.body.posx+(t.body.axisy*u.x-t.body.axisx*u.y),h.y=t.body.posy+(u.x*t.body.axisx+u.y*t.body.axisy),c=c.next}}let s=t.edges.head,i=t.gverts.next,l=i;for(i=i.next;i!=null;){let o=i,p=s.elt;s=s.next,p.gp0=l,p.gp1=o,p.gnormx=t.body.axisy*p.lnormx-t.body.axisx*p.lnormy,p.gnormy=p.lnormx*t.body.axisx+p.lnormy*t.body.axisy,p.gprojection=t.body.posx*p.gnormx+t.body.posy*p.gnormy+p.lprojection,p.wrap_gnorm!=null&&(p.wrap_gnorm.zpp_inner.x=p.gnormx,p.wrap_gnorm.zpp_inner.y=p.gnormy),p.tp0=p.gp0.y*p.gnormx-p.gp0.x*p.gnormy,p.tp1=p.gp1.y*p.gnormx-p.gp1.x*p.gnormy,l=o,i=i.next}let r=t.gverts.next,a=s.elt;s=s.next,a.gp0=l,a.gp1=r,a.gnormx=t.body.axisy*a.lnormx-t.body.axisx*a.lnormy,a.gnormy=a.lnormx*t.body.axisx+a.lnormy*t.body.axisy,a.gprojection=t.body.posx*a.gnormx+t.body.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy}}}convexMultiCast(e,t,n,s,i){let l;if(j._zpp.geom.ZPP_ToiEvent.zpp_pool==null?l=new j._zpp.geom.ZPP_ToiEvent:(l=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=l.next,l.next=null),l.failed=!1,l.s1=l.s2=null,l.arbiter=null,e.type==0){let M=e.circle;if(M.zip_worldCOM&&M.body!=null){if(M.zip_worldCOM=!1,M.zip_localCOM){if(M.zip_localCOM=!1,M.type==1){let Z=M.polygon;if(Z.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(Z.lverts.next.next==null)Z.localCOMx=Z.lverts.next.x,Z.localCOMy=Z.lverts.next.y;else if(Z.lverts.next.next.next==null){Z.localCOMx=Z.lverts.next.x,Z.localCOMy=Z.lverts.next.y;let S=1;Z.localCOMx+=Z.lverts.next.next.x*S,Z.localCOMy+=Z.lverts.next.next.y*S;let A=.5;Z.localCOMx*=A,Z.localCOMy*=A}else{Z.localCOMx=0,Z.localCOMy=0;let S=0,A=Z.lverts.next,F=A;A=A.next;let B=A;for(A=A.next;A!=null;){let K=A;S+=B.x*(K.y-F.y);let $=K.y*B.x-K.x*B.y;Z.localCOMx+=(B.x+K.x)*$,Z.localCOMy+=(B.y+K.y)*$,F=B,B=K,A=A.next}A=Z.lverts.next;let G=A;S+=B.x*(G.y-F.y);let q=G.y*B.x-G.x*B.y;Z.localCOMx+=(B.x+G.x)*q,Z.localCOMy+=(B.y+G.y)*q,F=B,B=G,A=A.next;let R=A;S+=B.x*(R.y-F.y);let T=R.y*B.x-R.x*B.y;Z.localCOMx+=(B.x+R.x)*T,Z.localCOMy+=(B.y+R.y)*T,S=1/(3*S);let V=S;Z.localCOMx*=V,Z.localCOMy*=V}}M.wrap_localCOM!=null&&(M.wrap_localCOM.zpp_inner.x=M.localCOMx,M.wrap_localCOM.zpp_inner.y=M.localCOMy)}let N=M.body;N.zip_axis&&(N.zip_axis=!1,N.axisx=Math.sin(N.rot),N.axisy=Math.cos(N.rot)),M.worldCOMx=M.body.posx+(M.body.axisy*M.localCOMx-M.body.axisx*M.localCOMy),M.worldCOMy=M.body.posy+(M.localCOMx*M.body.axisx+M.localCOMy*M.body.axisy)}}else if(e.type===2){let M=e.capsule;if(M.zip_worldCOM&&M.body!=null){M.zip_worldCOM=!1,M.zip_localCOM&&(M.zip_localCOM=!1,M.wrap_localCOM!=null&&(M.wrap_localCOM.zpp_inner.x=M.localCOMx,M.wrap_localCOM.zpp_inner.y=M.localCOMy));let N=M.body;N.zip_axis&&(N.zip_axis=!1,N.axisx=Math.sin(N.rot),N.axisy=Math.cos(N.rot)),M.worldCOMx=M.body.posx+(M.body.axisy*M.localCOMx-M.body.axisx*M.localCOMy),M.worldCOMy=M.body.posy+(M.localCOMx*M.body.axisx+M.localCOMy*M.body.axisy)}}else{let M=e.polygon;if(M.zip_gaxi&&M.body!=null){M.zip_gaxi=!1,M.validate_laxi();let N=M.body;if(N.zip_axis&&(N.zip_axis=!1,N.axisx=Math.sin(N.rot),N.axisy=Math.cos(N.rot)),M.zip_gverts&&M.body!=null){M.zip_gverts=!1,M.validate_lverts();let G=M.body;G.zip_axis&&(G.zip_axis=!1,G.axisx=Math.sin(G.rot),G.axisy=Math.cos(G.rot));let q=M.lverts.next,R=M.gverts.next;for(;R!=null;){let T=R,V=q;q=q.next,T.x=M.body.posx+(M.body.axisy*V.x-M.body.axisx*V.y),T.y=M.body.posy+(V.x*M.body.axisx+V.y*M.body.axisy),R=R.next}}let Z=M.edges.head,S=M.gverts.next,A=S;for(S=S.next;S!=null;){let G=S,q=Z.elt;Z=Z.next,q.gp0=A,q.gp1=G,q.gnormx=M.body.axisy*q.lnormx-M.body.axisx*q.lnormy,q.gnormy=q.lnormx*M.body.axisx+q.lnormy*M.body.axisy,q.gprojection=M.body.posx*q.gnormx+M.body.posy*q.gnormy+q.lprojection,q.wrap_gnorm!=null&&(q.wrap_gnorm.zpp_inner.x=q.gnormx,q.wrap_gnorm.zpp_inner.y=q.gnormy),q.tp0=q.gp0.y*q.gnormx-q.gp0.x*q.gnormy,q.tp1=q.gp1.y*q.gnormx-q.gp1.x*q.gnormy,A=G,S=S.next}let F=M.gverts.next,B=Z.elt;Z=Z.next,B.gp0=A,B.gp1=F,B.gnormx=M.body.axisy*B.lnormx-M.body.axisx*B.lnormy,B.gnormy=B.lnormx*M.body.axisx+B.lnormy*M.body.axisy,B.gprojection=M.body.posx*B.gnormx+M.body.posy*B.gnormy+B.lprojection,B.wrap_gnorm!=null&&(B.wrap_gnorm.zpp_inner.x=B.gnormx,B.wrap_gnorm.zpp_inner.y=B.gnormy),B.tp0=B.gp0.y*B.gnormx-B.gp0.x*B.gnormy,B.tp1=B.gp1.y*B.gnormx-B.gp1.x*B.gnormy}}let r=e.body,a=r.posx,o=r.posy;r.sweepTime=0,r.sweep_angvel=r.angvel;let p=t-r.sweepTime;if(p!=0){r.sweepTime=t;let M=p;if(r.posx+=r.velx*M,r.posy+=r.vely*M,r.angvel!=0){let N=r.sweep_angvel*p;if(r.rot+=N,N*N>1e-4)r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot);else{let Z=N*N,S=1-.5*Z,A=1-Z*Z/8,F=(S*r.axisx+N*r.axisy)*A;r.axisy=(S*r.axisy-N*r.axisx)*A,r.axisx=F}}}let c=r.posx,h=r.posy;e.validate_sweepRadius();let u=e.sweepRadius,x;fe.zpp_pool==null?x=new fe:(x=fe.zpp_pool,fe.zpp_pool=x.next,x.next=null);let y=a,d=c;x.minx=(y<d?y:d)-u;let _=a,f=c;x.maxx=(_>f?_:f)+u;let z=o,P=h;x.miny=(z<P?z:P)-u;let k=o,m=h;x.maxy=(k>m?k:m)+u;let b=this.convexShapeList=this.bphase.shapesInAABB(x,!1,!1,n==null?null:n.zpp_inner,this.convexShapeList),C=x;C.outer!=null&&(C.outer.zpp_inner=null,C.outer=null),C.wrap_min=C.wrap_max=null,C._invalidate=null,C._validate=null,C.next=fe.zpp_pool,fe.zpp_pool=C;let v=i??new j._nape.geom.ConvexResultList;b.zpp_inner.valmod();let w=j._nape.shape.ShapeIterator.get(b);for(;;){w.zpp_inner.zpp_inner.valmod();let M=w.zpp_inner;M.zpp_inner.valmod(),M.zpp_inner.zip_length&&(M.zpp_inner.zip_length=!1,M.zpp_inner.user_length=M.zpp_inner.inner.length);let N=M.zpp_inner.user_length;w.zpp_critical=!0;let Z;if(w.zpp_i<N?Z=!0:(w.zpp_next=j._nape.shape.ShapeIterator.zpp_pool,j._nape.shape.ShapeIterator.zpp_pool=w,w.zpp_inner=null,Z=!1),!Z)break;w.zpp_critical=!1;let S=w.zpp_inner.at(w.zpp_i++);if(S!=e.outer&&(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null)!=r.outer){if(l.s1=e,l.s2=S.zpp_inner,s){S.zpp_inner.validate_sweepRadius(),(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner.sweep_angvel=(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner.angvel,(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner.sweepTime=0,gn.dynamicSweep(l,t,0,0,!0);let A=(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner,F=0-A.sweepTime;if(F!=0){A.sweepTime=0;let q=F;if(A.posx+=A.velx*q,A.posy+=A.vely*q,A.angvel!=0){let R=A.sweep_angvel*F;if(A.rot+=R,R*R>1e-4)A.axisx=Math.sin(A.rot),A.axisy=Math.cos(A.rot);else{let T=R*R,V=1-.5*T,K=1-T*T/8,$=(V*A.axisx+R*A.axisy)*K;A.axisy=(V*A.axisy-R*A.axisx)*K,A.axisx=$}}}let B=(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner,G=S.zpp_inner;if(G.type==0||G.type===2)G.worldCOMx=B.posx+(B.axisy*G.localCOMx-B.axisx*G.localCOMy),G.worldCOMy=B.posy+(G.localCOMx*B.axisx+G.localCOMy*B.axisy);else{let q=G.polygon,R=q.lverts.next,T=q.gverts.next;for(;T!=null;){let ee=T,J=R;R=R.next,ee.x=B.posx+(B.axisy*J.x-B.axisx*J.y),ee.y=B.posy+(J.x*B.axisx+J.y*B.axisy),T=T.next}let V=q.edges.head,K=q.gverts.next,$=K;for(K=K.next;K!=null;){let ee=K,J=V.elt;V=V.next,J.gnormx=B.axisy*J.lnormx-B.axisx*J.lnormy,J.gnormy=J.lnormx*B.axisx+J.lnormy*B.axisy,J.gprojection=B.posx*J.gnormx+B.posy*J.gnormy+J.lprojection,J.tp0=$.y*J.gnormx-$.x*J.gnormy,J.tp1=ee.y*J.gnormx-ee.x*J.gnormy,$=ee,K=K.next}let Y=q.gverts.next,X=V.elt;V=V.next,X.gnormx=B.axisy*X.lnormx-B.axisx*X.lnormy,X.gnormy=X.lnormx*B.axisx+X.lnormy*B.axisy,X.gprojection=B.posx*X.gnormx+B.posy*X.gnormy+X.lprojection,X.tp0=$.y*X.gnormx-$.x*X.gnormy,X.tp1=Y.y*X.gnormx-Y.x*X.gnormy}}else gn.staticSweep(l,t,0,0);if(l.toi*=t,l.toi>0){let A=-l.axis.x,F=-l.axis.y;if(F==null&&(F=0),A==null&&(A=0),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let B;if(j._zpp.util.ZPP_PubPool.poolVec2==null?B=new j._nape.geom.Vec2:(B=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=B.zpp_pool,B.zpp_pool=null,B.zpp_disp=!1,B==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),B.zpp_inner==null){let ee;le.zpp_pool==null?ee=new le:(ee=le.zpp_pool,le.zpp_pool=ee.next,ee.next=null),ee.weak=!1,ee._immutable=!1,ee.x=A,ee.y=F,B.zpp_inner=ee,B.zpp_inner.outer=B}else{if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let ee=B.zpp_inner;if(ee._immutable)throw new Error("Error: Vec2 is immutable");if(ee._isimmutable!=null&&ee._isimmutable(),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let J;if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let L=B.zpp_inner;if(L._validate!=null&&L._validate(),B.zpp_inner.x==A){if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=B.zpp_inner;D._validate!=null&&D._validate(),J=B.zpp_inner.y==F}else J=!1;if(!J){B.zpp_inner.x=A,B.zpp_inner.y=F;let D=B.zpp_inner;D._invalidate!=null&&D._invalidate(D)}}B.zpp_inner.weak=!1;let G=l.c2.x,q=l.c2.y;if(q==null&&(q=0),G==null&&(G=0),G!=G||q!=q)throw new Error("Error: Vec2 components cannot be NaN");let R;if(j._zpp.util.ZPP_PubPool.poolVec2==null?R=new j._nape.geom.Vec2:(R=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=R.zpp_pool,R.zpp_pool=null,R.zpp_disp=!1,R==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),R.zpp_inner==null){let ee;le.zpp_pool==null?ee=new le:(ee=le.zpp_pool,le.zpp_pool=ee.next,ee.next=null),ee.weak=!1,ee._immutable=!1,ee.x=G,ee.y=q,R.zpp_inner=ee,R.zpp_inner.outer=R}else{if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let ee=R.zpp_inner;if(ee._immutable)throw new Error("Error: Vec2 is immutable");if(ee._isimmutable!=null&&ee._isimmutable(),G!=G||q!=q)throw new Error("Error: Vec2 components cannot be NaN");let J;if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let L=R.zpp_inner;if(L._validate!=null&&L._validate(),R.zpp_inner.x==G){if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=R.zpp_inner;D._validate!=null&&D._validate(),J=R.zpp_inner.y==q}else J=!1;if(!J){R.zpp_inner.x=G,R.zpp_inner.y=q;let D=R.zpp_inner;D._invalidate!=null&&D._invalidate(D)}}R.zpp_inner.weak=!1;let T=j._zpp.geom.ZPP_ConvexRayResult.getConvex(B,R,l.toi,S),V=null,K=v.zpp_inner.inner.head;for(;K!=null;){let ee=K.elt;if(T.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(ee.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(T.zpp_inner.toiDistance<ee.zpp_inner.toiDistance)break;V=K,K=K.next}let $=v.zpp_inner.inner,Y;j._zpp.util.ZNPNode_ConvexResult.zpp_pool==null?Y=new j._zpp.util.ZNPNode_ConvexResult:(Y=j._zpp.util.ZNPNode_ConvexResult.zpp_pool,j._zpp.util.ZNPNode_ConvexResult.zpp_pool=Y.next,Y.next=null),Y.elt=T;let X=Y;V==null?(X.next=$.head,$.head=X):(X.next=V.next,V.next=X),$.pushmod=$.modified=!0,$.length++}}}b.clear();let O=l;O.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=O;let E=0-r.sweepTime;if(E!=0){r.sweepTime=0;let M=E;if(r.posx+=r.velx*M,r.posy+=r.vely*M,r.angvel!=0){let N=r.sweep_angvel*E;if(r.rot+=N,N*N>1e-4)r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot);else{let Z=N*N,S=1-.5*Z,A=1-Z*Z/8,F=(S*r.axisx+N*r.axisy)*A;r.axisy=(S*r.axisy-N*r.axisx)*A,r.axisx=F}}}if(e.type==0||e.type===2)e.worldCOMx=r.posx+(r.axisy*e.localCOMx-r.axisx*e.localCOMy),e.worldCOMy=r.posy+(e.localCOMx*r.axisx+e.localCOMy*r.axisy);else{let M=e.polygon,N=M.lverts.next,Z=M.gverts.next;for(;Z!=null;){let q=Z,R=N;N=N.next,q.x=r.posx+(r.axisy*R.x-r.axisx*R.y),q.y=r.posy+(R.x*r.axisx+R.y*r.axisy),Z=Z.next}let S=M.edges.head,A=M.gverts.next,F=A;for(A=A.next;A!=null;){let q=A,R=S.elt;S=S.next,R.gnormx=r.axisy*R.lnormx-r.axisx*R.lnormy,R.gnormy=R.lnormx*r.axisx+R.lnormy*r.axisy,R.gprojection=r.posx*R.gnormx+r.posy*R.gnormy+R.lprojection,R.tp0=F.y*R.gnormx-F.x*R.gnormy,R.tp1=q.y*R.gnormx-q.x*R.gnormy,F=q,A=A.next}let B=M.gverts.next,G=S.elt;S=S.next,G.gnormx=r.axisy*G.lnormx-r.axisx*G.lnormy,G.gnormy=G.lnormx*r.axisx+G.lnormy*r.axisy,G.gprojection=r.posx*G.gnormx+r.posy*G.gnormy+G.lprojection,G.tp0=F.y*G.gnormx-F.x*G.gnormy,G.tp1=B.y*G.gnormx-B.x*G.gnormy}return v}push_callback(e){let t;return Tt.zpp_pool==null?t=new Tt:(t=Tt.zpp_pool,Tt.zpp_pool=t.next,t.next=null),this.callbacks.push(t),t.listener=e,t}step(e,t,n){if(this.midstep)throw new Error("Error: ... REALLY?? you're going to call space.step() inside of space.step()? COME ON!!");if(this.time+=e,this.pre_dt=e,this.midstep=!0,this.stamp++,this.validation(),this.bphase.broadphase(this,!0),this.prestep(e),this.sortcontacts){let h=this.c_arbiters_false;if(h.head!=null&&h.head.next!=null){let u=h.head,x=null,y=null,d=null,_=null,f=1,z,P,k;for(;;){for(z=0,y=u,u=null,x=u;y!=null;){for(++z,d=y,P=0,k=f;d!=null&&P<f;)++P,d=d.next;for(;P>0||k>0&&d!=null;)P==0?(_=d,d=d.next,--k):k==0||d==null||!(y.elt.active&&d.elt.active)||y.elt.oc1.dist<d.elt.oc1.dist?(_=y,y=y.next,--P):(_=d,d=d.next,--k),x!=null?x.next=_:u=_,x=_;y=d}if(x.next=null,f<<=1,!(z>1))break}h.head=u,h.modified=!0,h.pushmod=!0}}this.updateVel(e),this.warmStart(),this.iterateVel(t);let s=this.kinematics.head;for(;s!=null;){let h=s.elt;h.pre_posx=h.posx,h.pre_posy=h.posy,h.pre_rot=h.rot,s=s.next}let i=this.live.head;for(;i!=null;){let h=i.elt;h.pre_posx=h.posx,h.pre_posy=h.posy,h.pre_rot=h.rot,i=i.next}this.updatePos(e),this.continuous=!0,this.continuousCollisions(e),this.continuous=!1,this.iteratePos(n);let l=this.kinematics.head;for(;l!=null;){let h=l.elt,u=!(h.posx==h.pre_posx&&h.posy==h.pre_posy),x=h.pre_rot!=h.rot;if(u){let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}if(x){h.zip_axis=!0;let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}l=l.next}let r=this.live.head;for(;r!=null;){let h=r.elt,u=!(h.posx==h.pre_posx&&h.posy==h.pre_posy),x=h.pre_rot!=h.rot;if(u){let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}if(x){h.zip_axis=!0;let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}r=r.next}let a=null,o=this.staticsleep.head;for(;o!=null;){let h=o.elt;if(h.type!=3||h.velx==0&&h.vely==0&&h.angvel==0){if(h.kinematicDelaySleep){h.kinematicDelaySleep=!1,o=o.next;continue}h.component.sleeping=!0;let u=this.staticsleep,x,y;a==null?(x=u.head,y=x.next,u.head=y,u.head==null&&(u.pushmod=!0)):(x=a.next,y=x.next,a.next=y,y==null&&(u.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=d,u.modified=!0,u.length--,u.pushmod=!0,o=y;continue}a=o,o=o.next}this.doForests(e),this.sleepArbiters(),this.midstep=!1;let p=null,c=this.callbackset_list.next;for(;c!=null;){let h=c;if(h.arbiters.head==null){let b=this.callbackset_list,C,v;p==null?(C=b.next,v=C.next,b.next=v,b.next==null&&(b.pushmod=!0)):(C=p.next,v=C.next,p.next=v,v==null&&(b.pushmod=!0)),C._inuse=!1,b.modified=!0,b.length--,b.pushmod=!0,c=v;let w=h;w.int1=w.int2=null,w.id=w.di=-1,w.freed=!0,w.next=Wt.zpp_pool,Wt.zpp_pool=w;continue}let u;u=!0;let x=h.arbiters.head;for(;x!=null;)if(x.elt.sleeping){x=x.next;continue}else{u=!1;break}let y=u,d=h.int1.cbSet,_=h.int2.cbSet,f=d.manager,z=null,k=(d.cbpairs.length<_.cbpairs.length?d.cbpairs:_.cbpairs).head;for(;k!=null;){let b=k.elt;if(b.a==d&&b.b==_||b.a==_&&b.b==d){z=b;break}k=k.next}if(z==null){let b;Ne.zpp_pool==null?b=new Ne:(b=Ne.zpp_pool,Ne.zpp_pool=b.next,b.next=null),b.zip_listeners=!0,_t.setlt(d,_)?(b.a=d,b.b=_):(b.a=_,b.b=d),z=b,d.cbpairs.add(z),_!=d&&_.cbpairs.add(z)}z.zip_listeners&&(z.zip_listeners=!1,z.__validate());let m=z.listeners.head;for(;m!=null;){let b=m.elt;if(b.event==6&&(!y||b.allowSleepingCallbacks)&&!h.empty_arb(b.itype)){let C=this.push_callback(b);C.event=6;let v=h.int1,w=h.int2,O,E=b.options1,M=v.cbTypes;if(E.nonemptyintersection(M,E.includes)&&!E.nonemptyintersection(M,E.excludes)){let N=b.options2,Z=w.cbTypes;O=N.nonemptyintersection(Z,N.includes)&&!N.nonemptyintersection(Z,N.excludes)}else O=!1;O?(C.int1=v,C.int2=w):(C.int1=w,C.int2=v),C.set=h}m=m.next}p=c,c=c.next}for(;!this.callbacks.empty();){let h=this.callbacks.pop();h.listener.type==0?h.listener.body.handler(h.wrapper_body()):h.listener.type==1?h.listener.constraint.handler(h.wrapper_con()):h.listener.type==2&&h.listener.interaction.handleri(h.wrapper_int());let u=h;u.int1=u.int2=null,u.body=null,u.constraint=null,u.listener=null,u.wrap_arbiters!=null&&(u.wrap_arbiters.zpp_inner.inner=null),u.set=null,u.next=Tt.zpp_pool,Tt.zpp_pool=u}}continuousCollisions(e){let t=2*Math.PI/e;this.bphase.broadphase(this,!1);let n=0;for(;n<1&&this.toiEvents.head!=null;){let l=null,r=2,a=!1,o=null,p=null,c=this.toiEvents.head;for(;c!=null;){let _=c.elt,f=_.s1.body,z=_.s2.body;if(f.sweepFrozen&&z.sweepFrozen)if(_.toi!=0&&Ee.testCollide_safe(_.s1,_.s2))_.toi=0;else{c=this.toiEvents.erase(p);let P=_;P.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=P;continue}if(_.frozen1!=f.sweepFrozen||_.frozen2!=z.sweepFrozen)if(_.kinematic){c=this.toiEvents.erase(p);let P=_;P.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=P;continue}else{if(_.frozen1=f.sweepFrozen,_.frozen2=z.sweepFrozen,_.frozen1){let P=_.s1;_.s1=_.s2,_.s2=P,_.frozen1=!1,_.frozen2=!0}if(gn.staticSweep(_,e,0,j._nape.Config.collisionSlopCCD),_.toi<0){c=this.toiEvents.erase(p);let P=_;P.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=P;continue}}_.toi>=0&&(_.toi<r||!a&&_.kinematic)&&(l=_,r=_.toi,a=_.kinematic,o=p),p=c,c=c.next}if(l==null)break;this.toiEvents.erase(o),n=l.toi;let h=l.s1.body,u=l.s2.body;if(!h.sweepFrozen){let _=n*e,f=_-h.sweepTime;if(f!=0){h.sweepTime=_;let P=f;if(h.posx+=h.velx*P,h.posy+=h.vely*P,h.angvel!=0){let k=h.sweep_angvel*f;if(h.rot+=k,k*k>1e-4)h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot);else{let m=k*k,b=1-.5*m,C=1-m*m/8,v=(b*h.axisx+k*h.axisy)*C;h.axisy=(b*h.axisy-k*h.axisx)*C,h.axisx=v}}}let z=l.s1;if(z.type==0||z.type===2)z.worldCOMx=h.posx+(h.axisy*z.localCOMx-h.axisx*z.localCOMy),z.worldCOMy=h.posy+(z.localCOMx*h.axisx+z.localCOMy*h.axisy);else{let P=z.polygon,k=P.lverts.next,m=P.gverts.next;for(;m!=null;){let E=m,M=k;k=k.next,E.x=h.posx+(h.axisy*M.x-h.axisx*M.y),E.y=h.posy+(M.x*h.axisx+M.y*h.axisy),m=m.next}let b=P.edges.head,C=P.gverts.next,v=C;for(C=C.next;C!=null;){let E=C,M=b.elt;b=b.next,M.gnormx=h.axisy*M.lnormx-h.axisx*M.lnormy,M.gnormy=M.lnormx*h.axisx+M.lnormy*h.axisy,M.gprojection=h.posx*M.gnormx+h.posy*M.gnormy+M.lprojection,M.tp0=v.y*M.gnormx-v.x*M.gnormy,M.tp1=E.y*M.gnormx-E.x*M.gnormy,v=E,C=C.next}let w=P.gverts.next,O=b.elt;b=b.next,O.gnormx=h.axisy*O.lnormx-h.axisx*O.lnormy,O.gnormy=O.lnormx*h.axisx+O.lnormy*h.axisy,O.gprojection=h.posx*O.gnormx+h.posy*O.gnormy+O.lprojection,O.tp0=v.y*O.gnormx-v.x*O.gnormy,O.tp1=w.y*O.gnormx-w.x*O.gnormy}}if(!u.sweepFrozen){let _=n*e,f=_-u.sweepTime;if(f!=0){u.sweepTime=_;let P=f;if(u.posx+=u.velx*P,u.posy+=u.vely*P,u.angvel!=0){let k=u.sweep_angvel*f;if(u.rot+=k,k*k>1e-4)u.axisx=Math.sin(u.rot),u.axisy=Math.cos(u.rot);else{let m=k*k,b=1-.5*m,C=1-m*m/8,v=(b*u.axisx+k*u.axisy)*C;u.axisy=(b*u.axisy-k*u.axisx)*C,u.axisx=v}}}let z=l.s2;if(z.type==0||z.type===2)z.worldCOMx=u.posx+(u.axisy*z.localCOMx-u.axisx*z.localCOMy),z.worldCOMy=u.posy+(z.localCOMx*u.axisx+z.localCOMy*u.axisy);else{let P=z.polygon,k=P.lverts.next,m=P.gverts.next;for(;m!=null;){let E=m,M=k;k=k.next,E.x=u.posx+(u.axisy*M.x-u.axisx*M.y),E.y=u.posy+(M.x*u.axisx+M.y*u.axisy),m=m.next}let b=P.edges.head,C=P.gverts.next,v=C;for(C=C.next;C!=null;){let E=C,M=b.elt;b=b.next,M.gnormx=u.axisy*M.lnormx-u.axisx*M.lnormy,M.gnormy=M.lnormx*u.axisx+M.lnormy*u.axisy,M.gprojection=u.posx*M.gnormx+u.posy*M.gnormy+M.lprojection,M.tp0=v.y*M.gnormx-v.x*M.gnormy,M.tp1=E.y*M.gnormx-E.x*M.gnormy,v=E,C=C.next}let w=P.gverts.next,O=b.elt;b=b.next,O.gnormx=u.axisy*O.lnormx-u.axisx*O.lnormy,O.gnormy=O.lnormx*u.axisx+O.lnormy*u.axisy,O.gprojection=u.posx*O.gnormx+u.posy*O.gnormy+O.lprojection,O.tp0=v.y*O.gnormx-v.x*O.gnormy,O.tp1=w.y*O.gnormx-w.x*O.gnormy}}let x=l.arbiter==null,y=this.narrowPhase(l.s1,l.s2,!0,l.arbiter,!0);if(y==null)l.arbiter!=null&&l.arbiter.pair!=null&&(l.arbiter.pair.arb=null,l.arbiter.pair=null);else if(!this.presteparb(y,e,!0)&&y.type==Ie.COL&&y.active&&(y.immState&1)!=0){let _=y.colarb,f=_.nx*_.c1.jnAcc-_.ny*_.c1.jtAcc,z=_.ny*_.c1.jnAcc+_.nx*_.c1.jtAcc,P=_.b1.imass;_.b1.velx-=f*P,_.b1.vely-=z*P,_.b1.angvel-=_.b1.iinertia*(z*_.c1.r1x-f*_.c1.r1y);let k=_.b2.imass;if(_.b2.velx+=f*k,_.b2.vely+=z*k,_.b2.angvel+=_.b2.iinertia*(z*_.c1.r2x-f*_.c1.r2y),_.hc2){let oe=_.nx*_.c2.jnAcc-_.ny*_.c2.jtAcc,he=_.ny*_.c2.jnAcc+_.nx*_.c2.jtAcc,pe=_.b1.imass;_.b1.velx-=oe*pe,_.b1.vely-=he*pe,_.b1.angvel-=_.b1.iinertia*(he*_.c2.r1x-oe*_.c2.r1y);let ce=_.b2.imass;_.b2.velx+=oe*ce,_.b2.vely+=he*ce,_.b2.angvel+=_.b2.iinertia*(he*_.c2.r2x-oe*_.c2.r2y)}_.b2.angvel+=_.jrAcc*_.b2.iinertia,_.b1.angvel-=_.jrAcc*_.b1.iinertia;let m=y.colarb,b=m.k1x+m.b2.velx-m.c1.r2y*m.b2.angvel-(m.b1.velx-m.c1.r1y*m.b1.angvel),C=m.k1y+m.b2.vely+m.c1.r2x*m.b2.angvel-(m.b1.vely+m.c1.r1x*m.b1.angvel),v=(C*m.nx-b*m.ny+m.surfacex)*m.c1.tMass,w=m.c1.friction*m.c1.jnAcc,O=m.c1.jtAcc,E=O-v;E>w?E=w:E<-w&&(E=-w),v=E-O,m.c1.jtAcc=E;let M=-m.ny*v,N=m.nx*v;if(m.b2.velx+=M*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=M*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=m.rt1b*v*m.b2.iinertia,m.b1.angvel-=m.rt1a*v*m.b1.iinertia,m.hc2){let oe=m.k2x+m.b2.velx-m.c2.r2y*m.b2.angvel-(m.b1.velx-m.c2.r1y*m.b1.angvel),he=m.k2y+m.b2.vely+m.c2.r2x*m.b2.angvel-(m.b1.vely+m.c2.r1x*m.b1.angvel);v=(he*m.nx-oe*m.ny+m.surfacex)*m.c2.tMass,w=m.c2.friction*m.c2.jnAcc,O=m.c2.jtAcc,E=O-v,E>w?E=w:E<-w&&(E=-w),v=E-O,m.c2.jtAcc=E,M=-m.ny*v,N=m.nx*v,m.b2.velx+=M*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=M*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=m.rt2b*v*m.b2.iinertia,m.b1.angvel-=m.rt2a*v*m.b1.iinertia,b=m.k1x+m.b2.velx-m.c1.r2y*m.b2.angvel-(m.b1.velx-m.c1.r1y*m.b1.angvel),C=m.k1y+m.b2.vely+m.c1.r2x*m.b2.angvel-(m.b1.vely+m.c1.r1x*m.b1.angvel),oe=m.k2x+m.b2.velx-m.c2.r2y*m.b2.angvel-(m.b1.velx-m.c2.r1y*m.b1.angvel),he=m.k2y+m.b2.vely+m.c2.r2x*m.b2.angvel-(m.b1.vely+m.c2.r1x*m.b1.angvel);let pe=m.c1.jnAcc,ce=m.c2.jnAcc,te=b*m.nx+C*m.ny+m.surfacey+m.c1.bounce-(m.Ka*pe+m.Kb*ce),ue=oe*m.nx+he*m.ny+m.surfacey+m.c2.bounce-(m.Kb*pe+m.Kc*ce),xe=-(m.kMassa*te+m.kMassb*ue),_e=-(m.kMassb*te+m.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,m.c1.jnAcc=xe,m.c2.jnAcc=_e):(xe=-m.c1.nMass*te,xe>=0&&m.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,m.c1.jnAcc=xe,m.c2.jnAcc=0):(_e=-m.c2.nMass*ue,_e>=0&&m.Kb*_e+te>=0?(te=-pe,ue=_e-ce,m.c1.jnAcc=0,m.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,m.c1.jnAcc=m.c2.jnAcc=0):(te=0,ue=0))),v=te+ue,M=m.nx*v,N=m.ny*v,m.b2.velx+=M*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=M*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=(m.rn1b*te+m.rn2b*ue)*m.b2.iinertia,m.b1.angvel-=(m.rn1a*te+m.rn2a*ue)*m.b1.iinertia}else m.radius!=0&&(v=(m.b2.angvel-m.b1.angvel)*m.rMass,w=m.rfric*m.c1.jnAcc,O=m.jrAcc,m.jrAcc-=v,m.jrAcc>w?m.jrAcc=w:m.jrAcc<-w&&(m.jrAcc=-w),v=m.jrAcc-O,m.b2.angvel+=v*m.b2.iinertia,m.b1.angvel-=v*m.b1.iinertia),b=m.k1x+m.b2.velx-m.c1.r2y*m.b2.angvel-(m.b1.velx-m.c1.r1y*m.b1.angvel),C=m.k1y+m.b2.vely+m.c1.r2x*m.b2.angvel-(m.b1.vely+m.c1.r1x*m.b1.angvel),v=(m.c1.bounce+(m.nx*b+m.ny*C)+m.surfacey)*m.c1.nMass,O=m.c1.jnAcc,E=O-v,E<0&&(E=0),v=E-O,m.c1.jnAcc=E,M=m.nx*v,N=m.ny*v,m.b2.velx+=M*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=M*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=m.rn1b*v*m.b2.iinertia,m.b1.angvel-=m.rn1a*v*m.b1.iinertia;let Z=y.colarb,S=Z.k1x+Z.b2.velx-Z.c1.r2y*Z.b2.angvel-(Z.b1.velx-Z.c1.r1y*Z.b1.angvel),A=Z.k1y+Z.b2.vely+Z.c1.r2x*Z.b2.angvel-(Z.b1.vely+Z.c1.r1x*Z.b1.angvel),F=(A*Z.nx-S*Z.ny+Z.surfacex)*Z.c1.tMass,B=Z.c1.friction*Z.c1.jnAcc,G=Z.c1.jtAcc,q=G-F;q>B?q=B:q<-B&&(q=-B),F=q-G,Z.c1.jtAcc=q;let R=-Z.ny*F,T=Z.nx*F;if(Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=Z.rt1b*F*Z.b2.iinertia,Z.b1.angvel-=Z.rt1a*F*Z.b1.iinertia,Z.hc2){let oe=Z.k2x+Z.b2.velx-Z.c2.r2y*Z.b2.angvel-(Z.b1.velx-Z.c2.r1y*Z.b1.angvel),he=Z.k2y+Z.b2.vely+Z.c2.r2x*Z.b2.angvel-(Z.b1.vely+Z.c2.r1x*Z.b1.angvel);F=(he*Z.nx-oe*Z.ny+Z.surfacex)*Z.c2.tMass,B=Z.c2.friction*Z.c2.jnAcc,G=Z.c2.jtAcc,q=G-F,q>B?q=B:q<-B&&(q=-B),F=q-G,Z.c2.jtAcc=q,R=-Z.ny*F,T=Z.nx*F,Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=Z.rt2b*F*Z.b2.iinertia,Z.b1.angvel-=Z.rt2a*F*Z.b1.iinertia,S=Z.k1x+Z.b2.velx-Z.c1.r2y*Z.b2.angvel-(Z.b1.velx-Z.c1.r1y*Z.b1.angvel),A=Z.k1y+Z.b2.vely+Z.c1.r2x*Z.b2.angvel-(Z.b1.vely+Z.c1.r1x*Z.b1.angvel),oe=Z.k2x+Z.b2.velx-Z.c2.r2y*Z.b2.angvel-(Z.b1.velx-Z.c2.r1y*Z.b1.angvel),he=Z.k2y+Z.b2.vely+Z.c2.r2x*Z.b2.angvel-(Z.b1.vely+Z.c2.r1x*Z.b1.angvel);let pe=Z.c1.jnAcc,ce=Z.c2.jnAcc,te=S*Z.nx+A*Z.ny+Z.surfacey+Z.c1.bounce-(Z.Ka*pe+Z.Kb*ce),ue=oe*Z.nx+he*Z.ny+Z.surfacey+Z.c2.bounce-(Z.Kb*pe+Z.Kc*ce),xe=-(Z.kMassa*te+Z.kMassb*ue),_e=-(Z.kMassb*te+Z.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,Z.c1.jnAcc=xe,Z.c2.jnAcc=_e):(xe=-Z.c1.nMass*te,xe>=0&&Z.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,Z.c1.jnAcc=xe,Z.c2.jnAcc=0):(_e=-Z.c2.nMass*ue,_e>=0&&Z.Kb*_e+te>=0?(te=-pe,ue=_e-ce,Z.c1.jnAcc=0,Z.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,Z.c1.jnAcc=Z.c2.jnAcc=0):(te=0,ue=0))),F=te+ue,R=Z.nx*F,T=Z.ny*F,Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=(Z.rn1b*te+Z.rn2b*ue)*Z.b2.iinertia,Z.b1.angvel-=(Z.rn1a*te+Z.rn2a*ue)*Z.b1.iinertia}else Z.radius!=0&&(F=(Z.b2.angvel-Z.b1.angvel)*Z.rMass,B=Z.rfric*Z.c1.jnAcc,G=Z.jrAcc,Z.jrAcc-=F,Z.jrAcc>B?Z.jrAcc=B:Z.jrAcc<-B&&(Z.jrAcc=-B),F=Z.jrAcc-G,Z.b2.angvel+=F*Z.b2.iinertia,Z.b1.angvel-=F*Z.b1.iinertia),S=Z.k1x+Z.b2.velx-Z.c1.r2y*Z.b2.angvel-(Z.b1.velx-Z.c1.r1y*Z.b1.angvel),A=Z.k1y+Z.b2.vely+Z.c1.r2x*Z.b2.angvel-(Z.b1.vely+Z.c1.r1x*Z.b1.angvel),F=(Z.c1.bounce+(Z.nx*S+Z.ny*A)+Z.surfacey)*Z.c1.nMass,G=Z.c1.jnAcc,q=G-F,q<0&&(q=0),F=q-G,Z.c1.jnAcc=q,R=Z.nx*F,T=Z.ny*F,Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=Z.rn1b*F*Z.b2.iinertia,Z.b1.angvel-=Z.rn1a*F*Z.b1.iinertia;let V=y.colarb,K=V.k1x+V.b2.velx-V.c1.r2y*V.b2.angvel-(V.b1.velx-V.c1.r1y*V.b1.angvel),$=V.k1y+V.b2.vely+V.c1.r2x*V.b2.angvel-(V.b1.vely+V.c1.r1x*V.b1.angvel),Y=($*V.nx-K*V.ny+V.surfacex)*V.c1.tMass,X=V.c1.friction*V.c1.jnAcc,ee=V.c1.jtAcc,J=ee-Y;J>X?J=X:J<-X&&(J=-X),Y=J-ee,V.c1.jtAcc=J;let L=-V.ny*Y,D=V.nx*Y;if(V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=V.rt1b*Y*V.b2.iinertia,V.b1.angvel-=V.rt1a*Y*V.b1.iinertia,V.hc2){let oe=V.k2x+V.b2.velx-V.c2.r2y*V.b2.angvel-(V.b1.velx-V.c2.r1y*V.b1.angvel),he=V.k2y+V.b2.vely+V.c2.r2x*V.b2.angvel-(V.b1.vely+V.c2.r1x*V.b1.angvel);Y=(he*V.nx-oe*V.ny+V.surfacex)*V.c2.tMass,X=V.c2.friction*V.c2.jnAcc,ee=V.c2.jtAcc,J=ee-Y,J>X?J=X:J<-X&&(J=-X),Y=J-ee,V.c2.jtAcc=J,L=-V.ny*Y,D=V.nx*Y,V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=V.rt2b*Y*V.b2.iinertia,V.b1.angvel-=V.rt2a*Y*V.b1.iinertia,K=V.k1x+V.b2.velx-V.c1.r2y*V.b2.angvel-(V.b1.velx-V.c1.r1y*V.b1.angvel),$=V.k1y+V.b2.vely+V.c1.r2x*V.b2.angvel-(V.b1.vely+V.c1.r1x*V.b1.angvel),oe=V.k2x+V.b2.velx-V.c2.r2y*V.b2.angvel-(V.b1.velx-V.c2.r1y*V.b1.angvel),he=V.k2y+V.b2.vely+V.c2.r2x*V.b2.angvel-(V.b1.vely+V.c2.r1x*V.b1.angvel);let pe=V.c1.jnAcc,ce=V.c2.jnAcc,te=K*V.nx+$*V.ny+V.surfacey+V.c1.bounce-(V.Ka*pe+V.Kb*ce),ue=oe*V.nx+he*V.ny+V.surfacey+V.c2.bounce-(V.Kb*pe+V.Kc*ce),xe=-(V.kMassa*te+V.kMassb*ue),_e=-(V.kMassb*te+V.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,V.c1.jnAcc=xe,V.c2.jnAcc=_e):(xe=-V.c1.nMass*te,xe>=0&&V.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,V.c1.jnAcc=xe,V.c2.jnAcc=0):(_e=-V.c2.nMass*ue,_e>=0&&V.Kb*_e+te>=0?(te=-pe,ue=_e-ce,V.c1.jnAcc=0,V.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,V.c1.jnAcc=V.c2.jnAcc=0):(te=0,ue=0))),Y=te+ue,L=V.nx*Y,D=V.ny*Y,V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=(V.rn1b*te+V.rn2b*ue)*V.b2.iinertia,V.b1.angvel-=(V.rn1a*te+V.rn2a*ue)*V.b1.iinertia}else V.radius!=0&&(Y=(V.b2.angvel-V.b1.angvel)*V.rMass,X=V.rfric*V.c1.jnAcc,ee=V.jrAcc,V.jrAcc-=Y,V.jrAcc>X?V.jrAcc=X:V.jrAcc<-X&&(V.jrAcc=-X),Y=V.jrAcc-ee,V.b2.angvel+=Y*V.b2.iinertia,V.b1.angvel-=Y*V.b1.iinertia),K=V.k1x+V.b2.velx-V.c1.r2y*V.b2.angvel-(V.b1.velx-V.c1.r1y*V.b1.angvel),$=V.k1y+V.b2.vely+V.c1.r2x*V.b2.angvel-(V.b1.vely+V.c1.r1x*V.b1.angvel),Y=(V.c1.bounce+(V.nx*K+V.ny*$)+V.surfacey)*V.c1.nMass,ee=V.c1.jnAcc,J=ee-Y,J<0&&(J=0),Y=J-ee,V.c1.jnAcc=J,L=V.nx*Y,D=V.ny*Y,V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=V.rn1b*Y*V.b2.iinertia,V.b1.angvel-=V.rn1a*Y*V.b1.iinertia;let I=y.colarb,U=I.k1x+I.b2.velx-I.c1.r2y*I.b2.angvel-(I.b1.velx-I.c1.r1y*I.b1.angvel),H=I.k1y+I.b2.vely+I.c1.r2x*I.b2.angvel-(I.b1.vely+I.c1.r1x*I.b1.angvel),W=(H*I.nx-U*I.ny+I.surfacex)*I.c1.tMass,ne=I.c1.friction*I.c1.jnAcc,re=I.c1.jtAcc,se=re-W;se>ne?se=ne:se<-ne&&(se=-ne),W=se-re,I.c1.jtAcc=se;let ie=-I.ny*W,ae=I.nx*W;if(I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=I.rt1b*W*I.b2.iinertia,I.b1.angvel-=I.rt1a*W*I.b1.iinertia,I.hc2){let oe=I.k2x+I.b2.velx-I.c2.r2y*I.b2.angvel-(I.b1.velx-I.c2.r1y*I.b1.angvel),he=I.k2y+I.b2.vely+I.c2.r2x*I.b2.angvel-(I.b1.vely+I.c2.r1x*I.b1.angvel);W=(he*I.nx-oe*I.ny+I.surfacex)*I.c2.tMass,ne=I.c2.friction*I.c2.jnAcc,re=I.c2.jtAcc,se=re-W,se>ne?se=ne:se<-ne&&(se=-ne),W=se-re,I.c2.jtAcc=se,ie=-I.ny*W,ae=I.nx*W,I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=I.rt2b*W*I.b2.iinertia,I.b1.angvel-=I.rt2a*W*I.b1.iinertia,U=I.k1x+I.b2.velx-I.c1.r2y*I.b2.angvel-(I.b1.velx-I.c1.r1y*I.b1.angvel),H=I.k1y+I.b2.vely+I.c1.r2x*I.b2.angvel-(I.b1.vely+I.c1.r1x*I.b1.angvel),oe=I.k2x+I.b2.velx-I.c2.r2y*I.b2.angvel-(I.b1.velx-I.c2.r1y*I.b1.angvel),he=I.k2y+I.b2.vely+I.c2.r2x*I.b2.angvel-(I.b1.vely+I.c2.r1x*I.b1.angvel);let pe=I.c1.jnAcc,ce=I.c2.jnAcc,te=U*I.nx+H*I.ny+I.surfacey+I.c1.bounce-(I.Ka*pe+I.Kb*ce),ue=oe*I.nx+he*I.ny+I.surfacey+I.c2.bounce-(I.Kb*pe+I.Kc*ce),xe=-(I.kMassa*te+I.kMassb*ue),_e=-(I.kMassb*te+I.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,I.c1.jnAcc=xe,I.c2.jnAcc=_e):(xe=-I.c1.nMass*te,xe>=0&&I.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,I.c1.jnAcc=xe,I.c2.jnAcc=0):(_e=-I.c2.nMass*ue,_e>=0&&I.Kb*_e+te>=0?(te=-pe,ue=_e-ce,I.c1.jnAcc=0,I.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,I.c1.jnAcc=I.c2.jnAcc=0):(te=0,ue=0))),W=te+ue,ie=I.nx*W,ae=I.ny*W,I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=(I.rn1b*te+I.rn2b*ue)*I.b2.iinertia,I.b1.angvel-=(I.rn1a*te+I.rn2a*ue)*I.b1.iinertia}else I.radius!=0&&(W=(I.b2.angvel-I.b1.angvel)*I.rMass,ne=I.rfric*I.c1.jnAcc,re=I.jrAcc,I.jrAcc-=W,I.jrAcc>ne?I.jrAcc=ne:I.jrAcc<-ne&&(I.jrAcc=-ne),W=I.jrAcc-re,I.b2.angvel+=W*I.b2.iinertia,I.b1.angvel-=W*I.b1.iinertia),U=I.k1x+I.b2.velx-I.c1.r2y*I.b2.angvel-(I.b1.velx-I.c1.r1y*I.b1.angvel),H=I.k1y+I.b2.vely+I.c1.r2x*I.b2.angvel-(I.b1.vely+I.c1.r1x*I.b1.angvel),W=(I.c1.bounce+(I.nx*U+I.ny*H)+I.surfacey)*I.c1.nMass,re=I.c1.jnAcc,se=re-W,se<0&&(se=0),W=se-re,I.c1.jnAcc=se,ie=I.nx*W,ae=I.ny*W,I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=I.rn1b*W*I.b2.iinertia,I.b1.angvel-=I.rn1a*W*I.b1.iinertia;h.sweep_angvel=h.angvel%t,u.sweep_angvel=u.angvel%t}if(y!=null&&y.active&&(y.immState&1)!=0&&y.type==Ie.COL){if(!h.sweepFrozen&&h.type!=3)if(h.sweepFrozen=!0,l.failed)h.angvel=h.sweep_angvel=0;else if(l.slipped){let _=h;_.sweep_angvel*=j._nape.Config.angularCCDSlipScale,h.angvel=_.sweep_angvel}else h.angvel=h.sweep_angvel;if(!u.sweepFrozen&&u.type!=3)if(u.sweepFrozen=!0,l.failed)u.angvel=u.sweep_angvel=0;else if(l.slipped){let _=u;_.sweep_angvel*=j._nape.Config.angularCCDSlipScale,u.angvel=_.sweep_angvel}else u.angvel=u.sweep_angvel}let d=l;d.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=d}for(;this.toiEvents.head!=null;){let r=this.toiEvents.pop_unsafe();r.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=r}let s=this.kinematics.head;for(;s!=null;){let l=s.elt,r=e-l.sweepTime;if(r!=0){l.sweepTime=e;let a=r;if(l.posx+=l.velx*a,l.posy+=l.vely*a,l.angvel!=0){let o=l.sweep_angvel*r;if(l.rot+=o,o*o>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let p=o*o,c=1-.5*p,h=1-p*p/8,u=(c*l.axisx+o*l.axisy)*h;l.axisy=(c*l.axisy-o*l.axisx)*h,l.axisx=u}}}l.sweepTime=0,s=s.next}let i=this.live.head;for(;i!=null;){let l=i.elt;if(!l.sweepFrozen){let r=e-l.sweepTime;if(r!=0){l.sweepTime=e;let a=r;if(l.posx+=l.velx*a,l.posy+=l.vely*a,l.angvel!=0){let o=l.sweep_angvel*r;if(l.rot+=o,o*o>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let p=o*o,c=1-.5*p,h=1-p*p/8,u=(c*l.axisx+o*l.axisy)*h;l.axisy=(c*l.axisy-o*l.axisx)*h,l.axisx=u}}}}l.sweepTime=0,i=i.next}}continuousEvent(e,t,n,s,i){if(e.body.sweepFrozen&&t.body.sweepFrozen||e.body.disableCCD||t.body.disableCCD)return s;let l;if(s!=null&&s.colarb==null)l=!0;else{let o=e.body,p=t.body,c;c=!1;let h=o.constraints.head;for(;h!=null;){let y=h.elt;if(y.ignore&&y.pair_exists(o.id,p.id)){c=!0;break}h=h.next}let u,x;if(c)x=!1;else{let y=e;for(;y!=null&&y.group==null;)y.ishape!=null?y=y.ishape.body:y.icompound!=null?y=y.icompound.compound:y=y.ibody.compound;let d=y==null?null:y.group,_;if(d==null)_=!1;else{let f=t;for(;f!=null&&f.group==null;)f.ishape!=null?f=f.ishape.body:f.icompound!=null?f=f.icompound.compound:f=f.ibody.compound;let z=f==null?null:f.group;if(z==null)_=!1;else{let P=!1;for(;d!=null&&z!=null;){if(d==z){P=d.ignore;break}d.depth<z.depth?z=z.group:d=d.group}_=P}}x=!_}if(x){let y;if(e.sensorEnabled||t.sensorEnabled){let d=e.filter,_=t.filter;y=(d.sensorMask&_.sensorGroup)!=0&&(_.sensorMask&d.sensorGroup)!=0}else y=!1;if(y)u=2;else{let d;if(e.fluidEnabled||t.fluidEnabled){let _=e.filter,f=t.filter;d=(_.fluidMask&f.fluidGroup)!=0&&(f.fluidMask&_.fluidGroup)!=0}else d=!1;if(d&&!(o.imass==0&&p.imass==0&&o.iinertia==0&&p.iinertia==0))u=0;else{let _=e.filter,f=t.filter;u=(_.collisionMask&f.collisionGroup)!=0&&(f.collisionMask&_.collisionGroup)!=0&&!(o.imass==0&&p.imass==0&&o.iinertia==0&&p.iinertia==0)?1:-1}}}else u=-1;l=u<=0}if(l)return s;let r=e.body,a=t.body;if(n||r.bullet||a.bullet){let o;j._zpp.geom.ZPP_ToiEvent.zpp_pool==null?o=new j._zpp.geom.ZPP_ToiEvent:(o=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=o.next,o.next=null),o.failed=!1,o.s1=o.s2=null,o.arbiter=null;let p=r.type==3||a.type==3;if(n&&!p)e.body.type!=2?(o.s2=e,o.s1=t):(o.s1=e,o.s2=t),o.kinematic=!1,gn.staticSweep(o,this.pre_dt,0,j._nape.Config.collisionSlopCCD);else if(o.s1=e,o.s2=t,o.kinematic=p,o.s1.body.sweepFrozen||o.s2.body.sweepFrozen){if(o.s1.body.sweepFrozen){let c=o.s1;o.s1=o.s2,o.s2=c,o.frozen1=!1,o.frozen2=!0}gn.staticSweep(o,this.pre_dt,0,j._nape.Config.collisionSlopCCD)}else gn.dynamicSweep(o,this.pre_dt,0,j._nape.Config.collisionSlopCCD,!1);if(n&&o.toi<0||o.failed){let c=o;c.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=c}else this.toiEvents.add(o),o.frozen1=o.s1.body.sweepFrozen,o.frozen2=o.s2.body.sweepFrozen,o.arbiter=s!=null?s.colarb:null}return s}bodyCbWake(e){if(e.type==2&&e.cbSet!=null)if(this.midstep){let t=e.cbSet.bodylisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=2){t=t.next;continue}let s=this.push_callback(n);s.event=2,s.body=e,t=t.next}}else e.component.woken=!0}bodyCbSleep(e){if(e.type==2&&e.cbSet!=null){let t=e.cbSet.bodylisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=3){t=t.next;continue}let s=this.push_callback(n);s.event=3,s.body=e,t=t.next}}}constraintCbWake(e){if(e.cbSet!=null)if(this.midstep){let t=e.cbSet.conlisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=2){t=t.next;continue}let s=this.push_callback(n);s.event=2,s.constraint=e,t=t.next}}else e.component.woken=!0}constraintCbSleep(e){if(e.cbSet!=null){let t=e.cbSet.conlisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=3){t=t.next;continue}let s=this.push_callback(n);s.event=3,s.constraint=e,t=t.next}}}constraintCbBreak(e){if(e.cbSet!=null){let t=e.cbSet.conlisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=4){t=t.next;continue}let s=this.push_callback(n);s.event=4,s.constraint=e,t=t.next}}}nullListenerType(e,t){let n=new j._zpp.util.ZNPList_ZPP_Interactor,s=e.interactors.head;for(;s!=null;){let i=s.elt;n.add(i),s=s.next}if(e!=t){let i=t.interactors.head;for(;i!=null;){let l=i.elt;n.add(l),i=i.next}}for(;n.head!=null;){let i=n.pop_unsafe();if(i.icompound!=null){let l=i.icompound,r=l.bodies.head;for(;r!=null;){let o=r.elt;n.add(o),r=r.next}let a=l.compounds.head;for(;a!=null;){let o=a.elt;n.add(o),a=a.next}}else{let l=i.ibody!=null?i.ibody:i.ishape.body,r=i.ishape!=null?i.ishape:null,a=l.arbiters.head;for(;a!=null;){let o=a.elt;if(o.present==0){a=a.next;continue}if(r!=null&&!(o.ws1==r||o.ws2==r)){a=a.next;continue}this.MRCA_chains(o.ws1,o.ws2);let p=this.mrca1.head;for(;p!=null;){let c=p.elt;if(c.cbSet!=e&&c.cbSet!=t){p=p.next;continue}let h=this.mrca2.head;for(;h!=null;){let u=h.elt;if(c.cbSet==e&&u.cbSet!=t||c.cbSet==t&&u.cbSet!=e){h=h.next;continue}let x=j._zpp.phys.ZPP_Interactor.get(c,u);if(x!=null){for(;x.arbiters.head!=null;){let y=x.arbiters.pop_unsafe();y.present--}this.remove_callbackset(x)}h=h.next}p=p.next}a=a.next}}}}nullInteractorType(e,t){if(t==null&&(t=e),e.icompound!=null){let n=e.icompound,s=n.bodies.head;for(;s!=null;){let l=s.elt;this.nullInteractorType(l,t),s=s.next}let i=n.compounds.head;for(;i!=null;){let l=i.elt;this.nullInteractorType(l,t),i=i.next}}else{let n=e.ibody!=null?e.ibody:e.ishape.body,s=e.ishape!=null?e.ishape:null,i=n.arbiters.head;for(;i!=null;){let l=i.elt;if(l.present==0){i=i.next;continue}if(s!=null&&!(l.ws1==s||l.ws2==s)){i=i.next;continue}this.MRCA_chains(l.ws1,l.ws2);let r=this.mrca1.head;for(;r!=null;){let a=r.elt,o=this.mrca2.head;for(;o!=null;){let p=o.elt;if(a!=t&&p!=t){o=o.next;continue}let c=j._zpp.phys.ZPP_Interactor.get(a,p);c!=null&&(l.present--,c.remove_arb(l),c.arbiters.head==null&&this.remove_callbackset(c)),o=o.next}r=r.next}i=i.next}}}freshListenerType(e,t){let n=new j._zpp.util.ZNPList_ZPP_Interactor,s=e.interactors.head;for(;s!=null;){let i=s.elt;n.add(i),s=s.next}if(e!=t){let i=t.interactors.head;for(;i!=null;){let l=i.elt;n.add(l),i=i.next}}for(;n.head!=null;){let i=n.pop_unsafe();if(i.icompound!=null){let l=i.icompound,r=l.bodies.head;for(;r!=null;){let o=r.elt;n.add(o),r=r.next}let a=l.compounds.head;for(;a!=null;){let o=a.elt;n.add(o),a=a.next}}else{let l=i.ibody!=null?i.ibody:i.ishape.body,r=i.ishape!=null?i.ishape:null,a=l.arbiters.head;for(;a!=null;){let o=a.elt;if(!o.presentable){a=a.next;continue}if(r!=null&&!(o.ws1==r||o.ws2==r)){a=a.next;continue}this.MRCA_chains(o.ws1,o.ws2);let p=this.mrca1.head;for(;p!=null;){let c=p.elt;if(c.cbSet!=e&&c.cbSet!=t){p=p.next;continue}let h=this.mrca2.head;for(;h!=null;){let u=h.elt;if(c.cbSet==e&&u.cbSet!=t||c.cbSet==t&&u.cbSet!=e){h=h.next;continue}let x=j._zpp.phys.ZPP_Interactor.get(c,u);x==null&&(x=Wt.get(c,u),this.add_callbackset(x));let y,d;d=!1;let _=x.arbiters.head;for(;_!=null;){if(_.elt==o){d=!0;break}_=_.next}if(d)y=!1;else{let f=x.arbiters,z;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?z=new j._zpp.util.ZNPNode_ZPP_Arbiter:(z=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=z.next,z.next=null),z.elt=o;let P=z;P.next=f.head,f.head=P,f.modified=!0,f.length++,y=!0}y&&o.present++,h=h.next}p=p.next}a=a.next}}}}freshInteractorType(e,t){if(t==null&&(t=e),e.icompound!=null){let n=e.icompound,s=n.bodies.head;for(;s!=null;){let l=s.elt;this.freshInteractorType(l,t),s=s.next}let i=n.compounds.head;for(;i!=null;){let l=i.elt;this.freshInteractorType(l,t),i=i.next}}else{let n=e.ibody!=null?e.ibody:e.ishape.body,s=e.ishape!=null?e.ishape:null,i=n.arbiters.head;for(;i!=null;){let l=i.elt;if(!l.presentable){i=i.next;continue}if(s!=null&&!(l.ws1==s||l.ws2==s)){i=i.next;continue}this.MRCA_chains(l.ws1,l.ws2);let r=this.mrca1.head;for(;r!=null;){let a=r.elt,o=this.mrca2.head;for(;o!=null;){let p=o.elt;if(a!=t&&p!=t){o=o.next;continue}let c=a.cbSet,h=p.cbSet;c.validate(),h.validate();let u=c.manager,x=null,d=(c.cbpairs.length<h.cbpairs.length?c.cbpairs:h.cbpairs).head;for(;d!=null;){let _=d.elt;if(_.a==c&&_.b==h||_.a==h&&_.b==c){x=_;break}d=d.next}if(x==null){let _;Ne.zpp_pool==null?_=new Ne:(_=Ne.zpp_pool,Ne.zpp_pool=_.next,_.next=null),_.zip_listeners=!0,_t.setlt(c,h)?(_.a=c,_.b=h):(_.a=h,_.b=c),x=_,c.cbpairs.add(x),h!=c&&h.cbpairs.add(x)}if(x.zip_listeners&&(x.zip_listeners=!1,x.__validate()),x.listeners.head!=null){let _=j._zpp.phys.ZPP_Interactor.get(a,p);_==null&&(_=Wt.get(a,p),this.add_callbackset(_));let f,z;z=!1;let P=_.arbiters.head;for(;P!=null;){if(P.elt==l){z=!0;break}P=P.next}if(z)f=!1;else{let k=_.arbiters,m;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_Arbiter:(m=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=m.next,m.next=null),m.elt=l;let b=m;b.next=k.head,k.head=b,k.modified=!0,k.length++,f=!0}f&&l.present++}o=o.next}r=r.next}i=i.next}}}wakeCompound(e){let t=e.bodies.head;for(;t!=null;){let l=t.elt;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1)),t=t.next}let n=e.constraints.head;for(;n!=null;){let i=n.elt;this.wake_constraint(i),n=n.next}let s=e.compounds.head;for(;s!=null;){let i=s.elt;this.wakeCompound(i),s=s.next}}wakeIsland(e){for(;e.comps.head!=null;){let n=e.comps.pop_unsafe();if(n.waket=this.stamp+(this.midstep?0:1),n.isBody){let s=n.body;this.live.add(s);let i=s.arbiters.head;for(;i!=null;){let l=i.elt;if(l.sleeping)if(l.sleeping=!1,l.up_stamp+=this.stamp-l.sleep_stamp,l.type==Ie.COL){let r=l.colarb;if(r.stat){let a=this.c_arbiters_true,o;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(o=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=o.next,o.next=null),o.elt=r;let p=o;p.next=a.head,a.head=p,a.modified=!0,a.length++}else{let a=this.c_arbiters_false,o;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(o=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=o.next,o.next=null),o.elt=r;let p=o;p.next=a.head,a.head=p,a.modified=!0,a.length++}}else if(l.type==Ie.FLUID){let r=this.f_arbiters,a=l.fluidarb,o;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(o=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}else{let r=this.s_arbiters,a=l.sensorarb,o;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(o=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}i=i.next}if(this.bodyCbWake(s),n.sleeping=!1,n.island=null,n.parent=n,n.rank=0,s.type!=1){let l=s.shapes.head;for(;l!=null;){let r=l.elt;r.node!=null&&this.bphase.sync(r),l=l.next}}}else{let s=n.constraint,i=this.live_constraints,l;j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_Constraint:(l=j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool,j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool=l.next,l.next=null),l.elt=s;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++,this.constraintCbWake(s),n.sleeping=!1,n.island=null,n.parent=n,n.rank=0}}let t=e;t.next=xt.zpp_pool,xt.zpp_pool=t}non_inlined_wake(e,t){t==null&&(t=!1);let n=e;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,t))}really_wake(e,t){if(t==null&&(t=!1),e.component.island==null){if(e.component.sleeping=!1,e.type==3||e.type==1){let i=this.staticsleep,l;j._zpp.util.ZNPNode_ZPP_Body.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_Body:(l=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++}else{let i=this.live,l;j._zpp.util.ZNPNode_ZPP_Body.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_Body:(l=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++}let n=e.constraints.head;for(;n!=null;){let i=n.elt;i.space==this&&this.wake_constraint(i),n=n.next}let s=e.arbiters.head;for(;s!=null;){let i=s.elt;if(i.sleeping)if(i.sleeping=!1,i.up_stamp+=this.stamp+(this.midstep?0:1)-i.sleep_stamp,i.type==Ie.COL){let l=i.colarb;if(l.stat){let r=this.c_arbiters_true,a;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(a=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=a.next,a.next=null),a.elt=l;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}else{let r=this.c_arbiters_false,a;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(a=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=a.next,a.next=null),a.elt=l;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}}else if(i.type==Ie.FLUID){let l=this.f_arbiters,r=i.fluidarb,a;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(a=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=a.next,a.next=null),a.elt=r;let o=a;o.next=l.head,l.head=o,l.modified=!0,l.length++}else{let l=this.s_arbiters,r=i.sensorarb,a;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(a=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=a.next,a.next=null),a.elt=r;let o=a;o.next=l.head,l.head=o,l.modified=!0,l.length++}if(i.type!=Ie.SENSOR&&!i.cleared&&i.up_stamp>=this.stamp&&(i.immState&1)!=0){if(i.b1.type==2&&i.b1.component.sleeping){let l=i.b1;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1))}if(i.b2.type==2&&i.b2.component.sleeping){let l=i.b2;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1))}}s=s.next}if(!t&&e.type==2&&this.bodyCbWake(e),!t&&!this.bphase.is_sweep&&e.type!=1){let i=e.shapes.head;for(;i!=null;){let l=i.elt;l.node!=null&&this.bphase.sync(l),i=i.next}}}else this.wakeIsland(e.component.island)}wake_constraint(e,t){if(t==null&&(t=!1),e.active)if(e.component.waket=this.stamp+(this.midstep?0:1),e.component.sleeping){if(e.component.island==null){e.component.sleeping=!1;let n=this.live_constraints,s;j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool==null?s=new j._zpp.util.ZNPNode_ZPP_Constraint:(s=j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool,j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool=s.next,s.next=null),s.elt=e;let i=s;i.next=n.head,n.head=i,n.modified=!0,n.length++,e.wake_connected(),t||this.constraintCbWake(e)}else this.wakeIsland(e.component.island);return!0}else return!1;else return!1}doForests(e){let t=this.c_arbiters_false.head;for(;t!=null;){let i=t.elt;if(!i.cleared&&i.up_stamp==this.stamp&&(i.immState&1)!=0&&i.b1.type==2&&i.b2.type==2){let l;if(i.b1.component==i.b1.component.parent)l=i.b1.component;else{let a=i.b1.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}l=a}let r;if(i.b2.component==i.b2.component.parent)r=i.b2.component;else{let a=i.b2.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}r=a}l!=r&&(l.rank<r.rank?l.parent=r:l.rank>r.rank?r.parent=l:(r.parent=l,l.rank++))}t=t.next}let n=this.f_arbiters.head;for(;n!=null;){let i=n.elt;if(!i.cleared&&i.up_stamp==this.stamp&&(i.immState&1)!=0&&i.b1.type==2&&i.b2.type==2){let l;if(i.b1.component==i.b1.component.parent)l=i.b1.component;else{let a=i.b1.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}l=a}let r;if(i.b2.component==i.b2.component.parent)r=i.b2.component;else{let a=i.b2.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}r=a}l!=r&&(l.rank<r.rank?l.parent=r:l.rank>r.rank?r.parent=l:(r.parent=l,l.rank++))}n=n.next}let s=this.live_constraints.head;for(;s!=null;)s.elt.forest(),s=s.next;for(;this.live.head!=null;){let i=this.live,l=i.head.elt;i.pop();let r=l,a=r.component,o;if(a==a.parent)o=a;else{let x=a,y=null;for(;x!=x.parent;){let d=x.parent;x.parent=y,y=x,x=d}for(;y!=null;){let d=y.parent;y.parent=x,y=d}o=x}if(o.island==null){xt.zpp_pool==null?o.island=new xt:(o.island=xt.zpp_pool,xt.zpp_pool=o.island.next,o.island.next=null),o.island.waket=0;let x=this.islands,y=o.island;y._inuse=!0;let d=y;d.next=x.next,x.next=d,x.modified=!0,x.length++,o.island.sleep=!0}a.island=o.island;let p=a.island.comps,c;j._zpp.util.ZNPNode_ZPP_Component.zpp_pool==null?c=new j._zpp.util.ZNPNode_ZPP_Component:(c=j._zpp.util.ZNPNode_ZPP_Component.zpp_pool,j._zpp.util.ZNPNode_ZPP_Component.zpp_pool=c.next,c.next=null),c.elt=a;let h=c;h.next=p.head,p.head=h,p.modified=!0,p.length++;let u=r.atRest(e);a.island.sleep=a.island.sleep&&u,a.waket>a.island.waket&&(a.island.waket=a.waket)}for(;this.live_constraints.head!=null;){let i=this.live_constraints,l=i.head.elt;i.pop();let a=l.component,o;if(a==a.parent)o=a;else{let u=a,x=null;for(;u!=u.parent;){let y=u.parent;u.parent=x,x=u,u=y}for(;x!=null;){let y=x.parent;x.parent=u,x=y}o=u}a.island=o.island;let p=a.island.comps,c;j._zpp.util.ZNPNode_ZPP_Component.zpp_pool==null?c=new j._zpp.util.ZNPNode_ZPP_Component:(c=j._zpp.util.ZNPNode_ZPP_Component.zpp_pool,j._zpp.util.ZNPNode_ZPP_Component.zpp_pool=c.next,c.next=null),c.elt=a;let h=c;h.next=p.head,p.head=h,p.modified=!0,p.length++,a.waket>a.island.waket&&(a.island.waket=a.waket)}for(;this.islands.next!=null;){let i=this.islands,l=i.next;i.pop();let r=l;if(r.sleep){let a=r.comps.head;for(;a!=null;){let o=a.elt;if(o.isBody){let p=o.body;p.velx=0,p.vely=0,p.angvel=0,o.sleeping=!0;let c=p.shapes.head;for(;c!=null;){let h=c.elt;this.bphase.sync(h),c=c.next}this.bodyCbSleep(p)}else{let p=o.constraint;this.constraintCbSleep(p),o.sleeping=!0}a=a.next}}else{for(;r.comps.head!=null;){let o=r.comps,p=o.head.elt;o.pop();let c=p;if(c.waket=r.waket,c.isBody){let h=this.live,u=c.body,x;j._zpp.util.ZNPNode_ZPP_Body.zpp_pool==null?x=new j._zpp.util.ZNPNode_ZPP_Body:(x=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=x.next,x.next=null),x.elt=u;let y=x;y.next=h.head,h.head=y,h.modified=!0,h.length++}else{let h=this.live_constraints,u=c.constraint,x;j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool==null?x=new j._zpp.util.ZNPNode_ZPP_Constraint:(x=j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool,j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool=x.next,x.next=null),x.elt=u;let y=x;y.next=h.head,h.head=y,h.modified=!0,h.length++}c.sleeping=!1,c.island=null,c.parent=c,c.rank=0}let a=r;a.next=xt.zpp_pool,xt.zpp_pool=a}}}sleepArbiters(){let e=null,t=this.c_arbiters_true,n=t.head,s=this.c_arbiters_false!=null;for(s&&n==null&&(s=!1,n=this.c_arbiters_false.head,t=this.c_arbiters_false,e=null);n!=null;){let u=n.elt;if(u.b1.component.sleeping&&u.b2.component.sleeping){u.sleep_stamp=this.stamp,u.sleeping=!0;let x,y;e==null?(x=t.head,y=x.next,t.head=y,t.head==null&&(t.pushmod=!0)):(x=e.next,y=x.next,e.next=y,y==null&&(t.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=d,t.modified=!0,t.length--,t.pushmod=!0,n=y,s&&n==null&&(s=!1,n=this.c_arbiters_false.head,t=this.c_arbiters_false,e=null);continue}e=n,n=n.next,s&&n==null&&(s=!1,n=this.c_arbiters_false.head,t=this.c_arbiters_false,e=null)}let i=null,l=this.f_arbiters,r=l.head,a=!1;for(a&&r==null&&(a=!1,l=null,i=null);r!=null;){let u=r.elt;if(u.b1.component.sleeping&&u.b2.component.sleeping){u.sleep_stamp=this.stamp,u.sleeping=!0;let x,y;i==null?(x=l.head,y=x.next,l.head=y,l.head==null&&(l.pushmod=!0)):(x=i.next,y=x.next,i.next=y,y==null&&(l.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=d,l.modified=!0,l.length--,l.pushmod=!0,r=y,a&&r==null&&(a=!1,l=null,i=null);continue}i=r,r=r.next,a&&r==null&&(a=!1,l=null,i=null)}let o=null,p=this.s_arbiters,c=p.head,h=!1;for(h&&c==null&&(h=!1,p=null,o=null);c!=null;){let u=c.elt;if(u.b1.component.sleeping&&u.b2.component.sleeping){u.sleep_stamp=this.stamp,u.sleeping=!0;let x,y;o==null?(x=p.head,y=x.next,p.head=y,p.head==null&&(p.pushmod=!0)):(x=o.next,y=x.next,o.next=y,y==null&&(p.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=d,p.modified=!0,p.length--,p.pushmod=!0,c=y,h&&c==null&&(h=!1,p=null,o=null);continue}o=c,c=c.next,h&&c==null&&(h=!1,p=null,o=null)}}static_validation(e){if(e.shapes.head!=null){if(e.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(e.zip_aabb){e.zip_aabb=!1,e.aabb.minx=1/0,e.aabb.miny=1/0,e.aabb.maxx=-1/0,e.aabb.maxy=-1/0;let n=e.shapes.head;for(;n!=null;){let s=n.elt;if(s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let r=s.circle;if(r.zip_worldCOM&&r.body!=null){if(r.zip_worldCOM=!1,r.zip_localCOM){if(r.zip_localCOM=!1,r.type==1){let c=r.polygon;if(c.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(c.lverts.next.next==null)c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;else if(c.lverts.next.next.next==null){c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;let h=1;c.localCOMx+=c.lverts.next.next.x*h,c.localCOMy+=c.lverts.next.next.y*h;let u=.5;c.localCOMx*=u,c.localCOMy*=u}else{c.localCOMx=0,c.localCOMy=0;let h=0,u=c.lverts.next,x=u;u=u.next;let y=u;for(u=u.next;u!=null;){let k=u;h+=y.x*(k.y-x.y);let m=k.y*y.x-k.x*y.y;c.localCOMx+=(y.x+k.x)*m,c.localCOMy+=(y.y+k.y)*m,x=y,y=k,u=u.next}u=c.lverts.next;let d=u;h+=y.x*(d.y-x.y);let _=d.y*y.x-d.x*y.y;c.localCOMx+=(y.x+d.x)*_,c.localCOMy+=(y.y+d.y)*_,x=y,y=d,u=u.next;let f=u;h+=y.x*(f.y-x.y);let z=f.y*y.x-f.x*y.y;c.localCOMx+=(y.x+f.x)*z,c.localCOMy+=(y.y+f.y)*z,h=1/(3*h);let P=h;c.localCOMx*=P,c.localCOMy*=P}}r.wrap_localCOM!=null&&(r.wrap_localCOM.zpp_inner.x=r.localCOMx,r.wrap_localCOM.zpp_inner.y=r.localCOMy)}let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot)),r.worldCOMx=r.body.posx+(r.body.axisy*r.localCOMx-r.body.axisx*r.localCOMy),r.worldCOMy=r.body.posy+(r.localCOMx*r.body.axisx+r.localCOMy*r.body.axisy)}let a=r.radius,o=r.radius;r.aabb.minx=r.worldCOMx-a,r.aabb.miny=r.worldCOMy-o,r.aabb.maxx=r.worldCOMx+a,r.aabb.maxy=r.worldCOMy+o}else if(s.type===2)s.capsule.__validate_aabb();else{let r=s.polygon;if(r.zip_gverts&&r.body!=null){r.zip_gverts=!1,r.validate_lverts();let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot));let c=r.lverts.next,h=r.gverts.next;for(;h!=null;){let u=h,x=c;c=c.next,u.x=r.body.posx+(r.body.axisy*x.x-r.body.axisx*x.y),u.y=r.body.posy+(x.x*r.body.axisx+x.y*r.body.axisy),h=h.next}}if(r.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let a=r.gverts.next;r.aabb.minx=a.x,r.aabb.miny=a.y,r.aabb.maxx=a.x,r.aabb.maxy=a.y;let o=r.gverts.next.next;for(;o!=null;){let p=o;p.x<r.aabb.minx&&(r.aabb.minx=p.x),p.x>r.aabb.maxx&&(r.aabb.maxx=p.x),p.y<r.aabb.miny&&(r.aabb.miny=p.y),p.y>r.aabb.maxy&&(r.aabb.maxy=p.y),o=o.next}}let i=e.aabb,l=s.aabb;l.minx<i.minx&&(i.minx=l.minx),l.maxx>i.maxx&&(i.maxx=l.maxx),l.miny<i.miny&&(i.miny=l.miny),l.maxy>i.maxy&&(i.maxy=l.maxy),n=n.next}}}if(e.validate_mass(),e.validate_inertia(),e.velx!=0||e.vely!=0||e.angvel!=0)throw new Error("Error: Static body cannot have any real velocity, only kinematic or surface velocities");let t=e.shapes.head;for(;t!=null;){let n=t.elt;if(n.type==1){let s=n.polygon;s.zip_sanitation&&(s.zip_sanitation=!1,s.splice_collinear_real());let i=n.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new j._nape.shape.ValidationResult,Q.internal=!1),i!=Q.ValidationResult_VALID)throw new Error("Error: Cannot simulate with an invalid Polygon : "+n.polygon.outer.toString()+" is invalid : "+i.toString());let l=n.polygon;if(l.zip_gaxi&&l.body!=null){l.zip_gaxi=!1,l.validate_laxi();let r=l.body;if(r.zip_axis&&(r.zip_axis=!1,r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot)),l.zip_gverts&&l.body!=null){l.zip_gverts=!1,l.validate_lverts();let u=l.body;u.zip_axis&&(u.zip_axis=!1,u.axisx=Math.sin(u.rot),u.axisy=Math.cos(u.rot));let x=l.lverts.next,y=l.gverts.next;for(;y!=null;){let d=y,_=x;x=x.next,d.x=l.body.posx+(l.body.axisy*_.x-l.body.axisx*_.y),d.y=l.body.posy+(_.x*l.body.axisx+_.y*l.body.axisy),y=y.next}}let a=l.edges.head,o=l.gverts.next,p=o;for(o=o.next;o!=null;){let u=o,x=a.elt;a=a.next,x.gp0=p,x.gp1=u,x.gnormx=l.body.axisy*x.lnormx-l.body.axisx*x.lnormy,x.gnormy=x.lnormx*l.body.axisx+x.lnormy*l.body.axisy,x.gprojection=l.body.posx*x.gnormx+l.body.posy*x.gnormy+x.lprojection,x.wrap_gnorm!=null&&(x.wrap_gnorm.zpp_inner.x=x.gnormx,x.wrap_gnorm.zpp_inner.y=x.gnormy),x.tp0=x.gp0.y*x.gnormx-x.gp0.x*x.gnormy,x.tp1=x.gp1.y*x.gnormx-x.gp1.x*x.gnormy,p=u,o=o.next}let c=l.gverts.next,h=a.elt;a=a.next,h.gp0=p,h.gp1=c,h.gnormx=l.body.axisy*h.lnormx-l.body.axisx*h.lnormy,h.gnormy=h.lnormx*l.body.axisx+h.lnormy*l.body.axisy,h.gprojection=l.body.posx*h.gnormx+l.body.posy*h.gnormy+h.lprojection,h.wrap_gnorm!=null&&(h.wrap_gnorm.zpp_inner.x=h.gnormx,h.wrap_gnorm.zpp_inner.y=h.gnormy),h.tp0=h.gp0.y*h.gnormx-h.gp0.x*h.gnormy,h.tp1=h.gp1.y*h.gnormx-h.gp1.x*h.gnormy}}t=t.next}e.sweepFrozen=!0}validation(){let e=this.cbsets;if(!e.cbsets.empty()){let i=e.cbsets.parent;for(;i.prev!=null;)i=i.prev;for(;i!=null;)if(i.data.validate(),i.next!=null)for(i=i.next;i.prev!=null;)i=i.prev;else{for(;i.parent!=null&&i==i.parent.next;)i=i.parent;i=i.parent}}let t=this.live.head;for(;t!=null;){let i=t.elt;i.sweepRadius=0;let l=i.shapes.head;for(;l!=null;){let a=l.elt;if(a.type==1){let o=a.polygon;o.zip_sanitation&&(o.zip_sanitation=!1,o.splice_collinear_real());let p=a.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new j._nape.shape.ValidationResult,Q.internal=!1),p!=Q.ValidationResult_VALID)throw new Error("Error: Cannot simulate with an invalid Polygon : "+a.polygon.outer.toString()+" is invalid : "+p.toString());let c=a.polygon;if(c.zip_gaxi&&c.body!=null){c.zip_gaxi=!1,c.validate_laxi();let h=c.body;if(h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot)),c.zip_gverts&&c.body!=null){c.zip_gverts=!1,c.validate_lverts();let f=c.body;f.zip_axis&&(f.zip_axis=!1,f.axisx=Math.sin(f.rot),f.axisy=Math.cos(f.rot));let z=c.lverts.next,P=c.gverts.next;for(;P!=null;){let k=P,m=z;z=z.next,k.x=c.body.posx+(c.body.axisy*m.x-c.body.axisx*m.y),k.y=c.body.posy+(m.x*c.body.axisx+m.y*c.body.axisy),P=P.next}}let u=c.edges.head,x=c.gverts.next,y=x;for(x=x.next;x!=null;){let f=x,z=u.elt;u=u.next,z.gp0=y,z.gp1=f,z.gnormx=c.body.axisy*z.lnormx-c.body.axisx*z.lnormy,z.gnormy=z.lnormx*c.body.axisx+z.lnormy*c.body.axisy,z.gprojection=c.body.posx*z.gnormx+c.body.posy*z.gnormy+z.lprojection,z.wrap_gnorm!=null&&(z.wrap_gnorm.zpp_inner.x=z.gnormx,z.wrap_gnorm.zpp_inner.y=z.gnormy),z.tp0=z.gp0.y*z.gnormx-z.gp0.x*z.gnormy,z.tp1=z.gp1.y*z.gnormx-z.gp1.x*z.gnormy,y=f,x=x.next}let d=c.gverts.next,_=u.elt;u=u.next,_.gp0=y,_.gp1=d,_.gnormx=c.body.axisy*_.lnormx-c.body.axisx*_.lnormy,_.gnormy=_.lnormx*c.body.axisx+_.lnormy*c.body.axisy,_.gprojection=c.body.posx*_.gnormx+c.body.posy*_.gnormy+_.lprojection,_.wrap_gnorm!=null&&(_.wrap_gnorm.zpp_inner.x=_.gnormx,_.wrap_gnorm.zpp_inner.y=_.gnormy),_.tp0=_.gp0.y*_.gnormx-_.gp0.x*_.gnormy,_.tp1=_.gp1.y*_.gnormx-_.gp1.x*_.gnormy}}a.validate_sweepRadius(),a.sweepRadius>i.sweepRadius&&(i.sweepRadius=a.sweepRadius),l=l.next}if(i.validate_mass(),i.validate_inertia(),i.shapes.head!=null){if(i.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(i.zip_aabb){i.zip_aabb=!1,i.aabb.minx=1/0,i.aabb.miny=1/0,i.aabb.maxx=-1/0,i.aabb.maxy=-1/0;let a=i.shapes.head;for(;a!=null;){let o=a.elt;if(o.zip_aabb&&o.body!=null)if(o.zip_aabb=!1,o.type==0){let h=o.circle;if(h.zip_worldCOM&&h.body!=null){if(h.zip_worldCOM=!1,h.zip_localCOM){if(h.zip_localCOM=!1,h.type==1){let d=h.polygon;if(d.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(d.lverts.next.next==null)d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;else if(d.lverts.next.next.next==null){d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;let _=1;d.localCOMx+=d.lverts.next.next.x*_,d.localCOMy+=d.lverts.next.next.y*_;let f=.5;d.localCOMx*=f,d.localCOMy*=f}else{d.localCOMx=0,d.localCOMy=0;let _=0,f=d.lverts.next,z=f;f=f.next;let P=f;for(f=f.next;f!=null;){let w=f;_+=P.x*(w.y-z.y);let O=w.y*P.x-w.x*P.y;d.localCOMx+=(P.x+w.x)*O,d.localCOMy+=(P.y+w.y)*O,z=P,P=w,f=f.next}f=d.lverts.next;let k=f;_+=P.x*(k.y-z.y);let m=k.y*P.x-k.x*P.y;d.localCOMx+=(P.x+k.x)*m,d.localCOMy+=(P.y+k.y)*m,z=P,P=k,f=f.next;let b=f;_+=P.x*(b.y-z.y);let C=b.y*P.x-b.x*P.y;d.localCOMx+=(P.x+b.x)*C,d.localCOMy+=(P.y+b.y)*C,_=1/(3*_);let v=_;d.localCOMx*=v,d.localCOMy*=v}}h.wrap_localCOM!=null&&(h.wrap_localCOM.zpp_inner.x=h.localCOMx,h.wrap_localCOM.zpp_inner.y=h.localCOMy)}let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot)),h.worldCOMx=h.body.posx+(h.body.axisy*h.localCOMx-h.body.axisx*h.localCOMy),h.worldCOMy=h.body.posy+(h.localCOMx*h.body.axisx+h.localCOMy*h.body.axisy)}let u=h.radius,x=h.radius;h.aabb.minx=h.worldCOMx-u,h.aabb.miny=h.worldCOMy-x,h.aabb.maxx=h.worldCOMx+u,h.aabb.maxy=h.worldCOMy+x}else if(o.type===2)o.capsule.__validate_aabb();else{let h=o.polygon;if(h.zip_gverts&&h.body!=null){h.zip_gverts=!1,h.validate_lverts();let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot));let d=h.lverts.next,_=h.gverts.next;for(;_!=null;){let f=_,z=d;d=d.next,f.x=h.body.posx+(h.body.axisy*z.x-h.body.axisx*z.y),f.y=h.body.posy+(z.x*h.body.axisx+z.y*h.body.axisy),_=_.next}}if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let u=h.gverts.next;h.aabb.minx=u.x,h.aabb.miny=u.y,h.aabb.maxx=u.x,h.aabb.maxy=u.y;let x=h.gverts.next.next;for(;x!=null;){let y=x;y.x<h.aabb.minx&&(h.aabb.minx=y.x),y.x>h.aabb.maxx&&(h.aabb.maxx=y.x),y.y<h.aabb.miny&&(h.aabb.miny=y.y),y.y>h.aabb.maxy&&(h.aabb.maxy=y.y),x=x.next}}let p=i.aabb,c=o.aabb;c.minx<p.minx&&(p.minx=c.minx),c.maxx>p.maxx&&(p.maxx=c.maxx),c.miny<p.miny&&(p.miny=c.miny),c.maxy>p.maxy&&(p.maxy=c.maxy),a=a.next}}i.validate_worldCOM()}if(i.validate_gravMass(),i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),!i.nomove&&i.type==2&&i.mass==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 mass unless allowMovement is false");if(!i.norotate&&i.type==2&&i.inertia==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 inertia unless allowRotation is false");if(i.component.woken&&i.cbSet!=null){let a=i.cbSet.bodylisteners.head;for(;a!=null;){let o=a.elt;if(o.event!=2){a=a.next;continue}let p=this.push_callback(o);p.event=2,p.body=i,a=a.next}}i.component.woken=!1;let r=i.shapes.head;for(;r!=null;){let a=r.elt;this.bphase.sync(a),r=r.next}t=t.next}let n=this.kinematics.head;for(;n!=null;){let i=n.elt;i.sweepRadius=0;let l=i.shapes.head;for(;l!=null;){let a=l.elt;if(a.type==1){let o=a.polygon;o.zip_sanitation&&(o.zip_sanitation=!1,o.splice_collinear_real());let p=a.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new j._nape.shape.ValidationResult,Q.internal=!1),p!=Q.ValidationResult_VALID)throw new Error("Error: Cannot simulate with an invalid Polygon : "+a.polygon.outer.toString()+" is invalid : "+p.toString());let c=a.polygon;if(c.zip_gaxi&&c.body!=null){c.zip_gaxi=!1,c.validate_laxi();let h=c.body;if(h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot)),c.zip_gverts&&c.body!=null){c.zip_gverts=!1,c.validate_lverts();let f=c.body;f.zip_axis&&(f.zip_axis=!1,f.axisx=Math.sin(f.rot),f.axisy=Math.cos(f.rot));let z=c.lverts.next,P=c.gverts.next;for(;P!=null;){let k=P,m=z;z=z.next,k.x=c.body.posx+(c.body.axisy*m.x-c.body.axisx*m.y),k.y=c.body.posy+(m.x*c.body.axisx+m.y*c.body.axisy),P=P.next}}let u=c.edges.head,x=c.gverts.next,y=x;for(x=x.next;x!=null;){let f=x,z=u.elt;u=u.next,z.gp0=y,z.gp1=f,z.gnormx=c.body.axisy*z.lnormx-c.body.axisx*z.lnormy,z.gnormy=z.lnormx*c.body.axisx+z.lnormy*c.body.axisy,z.gprojection=c.body.posx*z.gnormx+c.body.posy*z.gnormy+z.lprojection,z.wrap_gnorm!=null&&(z.wrap_gnorm.zpp_inner.x=z.gnormx,z.wrap_gnorm.zpp_inner.y=z.gnormy),z.tp0=z.gp0.y*z.gnormx-z.gp0.x*z.gnormy,z.tp1=z.gp1.y*z.gnormx-z.gp1.x*z.gnormy,y=f,x=x.next}let d=c.gverts.next,_=u.elt;u=u.next,_.gp0=y,_.gp1=d,_.gnormx=c.body.axisy*_.lnormx-c.body.axisx*_.lnormy,_.gnormy=_.lnormx*c.body.axisx+_.lnormy*c.body.axisy,_.gprojection=c.body.posx*_.gnormx+c.body.posy*_.gnormy+_.lprojection,_.wrap_gnorm!=null&&(_.wrap_gnorm.zpp_inner.x=_.gnormx,_.wrap_gnorm.zpp_inner.y=_.gnormy),_.tp0=_.gp0.y*_.gnormx-_.gp0.x*_.gnormy,_.tp1=_.gp1.y*_.gnormx-_.gp1.x*_.gnormy}}a.validate_sweepRadius(),a.sweepRadius>i.sweepRadius&&(i.sweepRadius=a.sweepRadius),l=l.next}if(i.validate_mass(),i.validate_inertia(),i.shapes.head!=null){if(i.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(i.zip_aabb){i.zip_aabb=!1,i.aabb.minx=1/0,i.aabb.miny=1/0,i.aabb.maxx=-1/0,i.aabb.maxy=-1/0;let a=i.shapes.head;for(;a!=null;){let o=a.elt;if(o.zip_aabb&&o.body!=null)if(o.zip_aabb=!1,o.type==0){let h=o.circle;if(h.zip_worldCOM&&h.body!=null){if(h.zip_worldCOM=!1,h.zip_localCOM){if(h.zip_localCOM=!1,h.type==1){let d=h.polygon;if(d.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(d.lverts.next.next==null)d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;else if(d.lverts.next.next.next==null){d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;let _=1;d.localCOMx+=d.lverts.next.next.x*_,d.localCOMy+=d.lverts.next.next.y*_;let f=.5;d.localCOMx*=f,d.localCOMy*=f}else{d.localCOMx=0,d.localCOMy=0;let _=0,f=d.lverts.next,z=f;f=f.next;let P=f;for(f=f.next;f!=null;){let w=f;_+=P.x*(w.y-z.y);let O=w.y*P.x-w.x*P.y;d.localCOMx+=(P.x+w.x)*O,d.localCOMy+=(P.y+w.y)*O,z=P,P=w,f=f.next}f=d.lverts.next;let k=f;_+=P.x*(k.y-z.y);let m=k.y*P.x-k.x*P.y;d.localCOMx+=(P.x+k.x)*m,d.localCOMy+=(P.y+k.y)*m,z=P,P=k,f=f.next;let b=f;_+=P.x*(b.y-z.y);let C=b.y*P.x-b.x*P.y;d.localCOMx+=(P.x+b.x)*C,d.localCOMy+=(P.y+b.y)*C,_=1/(3*_);let v=_;d.localCOMx*=v,d.localCOMy*=v}}h.wrap_localCOM!=null&&(h.wrap_localCOM.zpp_inner.x=h.localCOMx,h.wrap_localCOM.zpp_inner.y=h.localCOMy)}let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot)),h.worldCOMx=h.body.posx+(h.body.axisy*h.localCOMx-h.body.axisx*h.localCOMy),h.worldCOMy=h.body.posy+(h.localCOMx*h.body.axisx+h.localCOMy*h.body.axisy)}let u=h.radius,x=h.radius;h.aabb.minx=h.worldCOMx-u,h.aabb.miny=h.worldCOMy-x,h.aabb.maxx=h.worldCOMx+u,h.aabb.maxy=h.worldCOMy+x}else if(o.type===2)o.capsule.__validate_aabb();else{let h=o.polygon;if(h.zip_gverts&&h.body!=null){h.zip_gverts=!1,h.validate_lverts();let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot));let d=h.lverts.next,_=h.gverts.next;for(;_!=null;){let f=_,z=d;d=d.next,f.x=h.body.posx+(h.body.axisy*z.x-h.body.axisx*z.y),f.y=h.body.posy+(z.x*h.body.axisx+z.y*h.body.axisy),_=_.next}}if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let u=h.gverts.next;h.aabb.minx=u.x,h.aabb.miny=u.y,h.aabb.maxx=u.x,h.aabb.maxy=u.y;let x=h.gverts.next.next;for(;x!=null;){let y=x;y.x<h.aabb.minx&&(h.aabb.minx=y.x),y.x>h.aabb.maxx&&(h.aabb.maxx=y.x),y.y<h.aabb.miny&&(h.aabb.miny=y.y),y.y>h.aabb.maxy&&(h.aabb.maxy=y.y),x=x.next}}let p=i.aabb,c=o.aabb;c.minx<p.minx&&(p.minx=c.minx),c.maxx>p.maxx&&(p.maxx=c.maxx),c.miny<p.miny&&(p.miny=c.miny),c.maxy>p.maxy&&(p.maxy=c.maxy),a=a.next}}i.validate_worldCOM()}if(i.validate_gravMass(),i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),!i.nomove&&i.type==2&&i.mass==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 mass unless allowMovement is false");if(!i.norotate&&i.type==2&&i.inertia==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 inertia unless allowRotation is false");let r=i.shapes.head;for(;r!=null;){let a=r.elt;this.bphase.sync(a),r=r.next}n=n.next}let s=this.live_constraints.head;for(;s!=null;){let i=s.elt;if(i.active){if(i.validate(),i.component.woken&&i.cbSet!=null){let l=i.cbSet.conlisteners.head;for(;l!=null;){let r=l.elt;if(r.event!=2){l=l.next;continue}let a=this.push_callback(r);a.event=2,a.constraint=i,l=l.next}}i.component.woken=!1}s=s.next}}updateVel(e){let t=null,n=1-e*this.global_lin_drag,s=1-e*this.global_ang_drag,i=this.live.head;for(;i!=null;){let l=i.elt;if(l.smass!=0){let r=e*l.imass;l.velx=n*l.velx+(l.forcex+this.gravityx*l.gravMass)*r,l.vely=n*l.vely+(l.forcey+this.gravityy*l.gravMass)*r}if(l.sinertia!=0){let r=0,a=0;r=l.worldCOMx-l.posx,a=l.worldCOMy-l.posy;let o=l.torque+(this.gravityy*r-this.gravityx*a)*l.gravMass;l.angvel=s*l.angvel+o*e*l.iinertia}t=i,i=i.next}}updatePos(e){let t=2*Math.PI/e,n=this.live.head;for(;n!=null;){let i=n.elt;i.pre_posx=i.posx,i.pre_posy=i.posy,i.pre_rot=i.rot,i.sweepTime=0,i.sweep_angvel=i.angvel%t;let l=e-i.sweepTime;if(l!=0){i.sweepTime=e;let r=l;if(i.posx+=i.velx*r,i.posy+=i.vely*r,i.angvel!=0){let a=i.sweep_angvel*l;if(i.rot+=a,a*a>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let o=a*a,p=1-.5*o,c=1-o*o/8,h=(p*i.axisx+a*i.axisy)*c;i.axisy=(p*i.axisy-a*i.axisx)*c,i.axisx=h}}}if(i.disableCCD)i.sweepFrozen=!0,i.bullet=!1;else{let r=j._nape.Config.staticCCDLinearThreshold*i.sweepRadius,a=j._nape.Config.staticCCDAngularThreshold;if((i.velx*i.velx+i.vely*i.vely)*e*e>r*r||i.angvel*i.angvel*e*e>a*a||i.type==3){let o=i.sweep_angvel;o<0&&(o=-o);let p=1/o,c=i.shapes.head;for(;c!=null;){let h=c.elt,u=h.aabb,x=u.minx,y=u.miny,d=u.maxx,_=u.maxy,f=o*e*h.sweepCoef*.008333333333333333|0;f>8&&(f=8);let z=o*e/f,P=e-i.sweepTime;if(P!=0){i.sweepTime=e;let b=P;if(i.posx+=i.velx*b,i.posy+=i.vely*b,i.angvel!=0){let C=i.sweep_angvel*P;if(i.rot+=C,C*C>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let v=C*C,w=1-.5*v,O=1-v*v/8,E=(w*i.axisx+C*i.axisy)*O;i.axisy=(w*i.axisy-C*i.axisx)*O,i.axisx=E}}}if(h.type==0){let b=h.circle;b.worldCOMx=b.body.posx+(b.body.axisy*b.localCOMx-b.body.axisx*b.localCOMy),b.worldCOMy=b.body.posy+(b.localCOMx*b.body.axisx+b.localCOMy*b.body.axisy),b.aabb.minx=b.worldCOMx-b.radius,b.aabb.miny=b.worldCOMy-b.radius,b.aabb.maxx=b.worldCOMx+b.radius,b.aabb.maxy=b.worldCOMy+b.radius}else if(h.type===2)h.capsule.__validate_aabb();else{let b=h.polygon,C=b.lverts.next,v=b.gverts.next,w=C;C=C.next,v.x=b.body.posx+(b.body.axisy*w.x-b.body.axisx*w.y),v.y=b.body.posy+(w.x*b.body.axisx+w.y*b.body.axisy),b.aabb.minx=v.x,b.aabb.miny=v.y,b.aabb.maxx=v.x,b.aabb.maxy=v.y;let O=b.gverts.next.next;for(;O!=null;){let E=O,M=C;C=C.next,E.x=b.body.posx+(b.body.axisy*M.x-b.body.axisx*M.y),E.y=b.body.posy+(M.x*b.body.axisx+M.y*b.body.axisy),E.x<b.aabb.minx&&(b.aabb.minx=E.x),E.x>b.aabb.maxx&&(b.aabb.maxx=E.x),E.y<b.aabb.miny&&(b.aabb.miny=E.y),E.y>b.aabb.maxy&&(b.aabb.maxy=E.y),O=O.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy;let k=1,m=f;for(;k<m;){let b=k++,C=z*b*p,v=C-i.sweepTime;if(v!=0){i.sweepTime=C;let w=v;if(i.posx+=i.velx*w,i.posy+=i.vely*w,i.angvel!=0){let O=i.sweep_angvel*v;if(i.rot+=O,O*O>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let E=O*O,M=1-.5*E,N=1-E*E/8,Z=(M*i.axisx+O*i.axisy)*N;i.axisy=(M*i.axisy-O*i.axisx)*N,i.axisx=Z}}}if(h.type==0){let w=h.circle;w.worldCOMx=w.body.posx+(w.body.axisy*w.localCOMx-w.body.axisx*w.localCOMy),w.worldCOMy=w.body.posy+(w.localCOMx*w.body.axisx+w.localCOMy*w.body.axisy),w.aabb.minx=w.worldCOMx-w.radius,w.aabb.miny=w.worldCOMy-w.radius,w.aabb.maxx=w.worldCOMx+w.radius,w.aabb.maxy=w.worldCOMy+w.radius}else if(h.type===2)h.capsule.__validate_aabb();else{let w=h.polygon,O=w.lverts.next,E=w.gverts.next,M=O;O=O.next,E.x=w.body.posx+(w.body.axisy*M.x-w.body.axisx*M.y),E.y=w.body.posy+(M.x*w.body.axisx+M.y*w.body.axisy),w.aabb.minx=E.x,w.aabb.miny=E.y,w.aabb.maxx=E.x,w.aabb.maxy=E.y;let N=w.gverts.next.next;for(;N!=null;){let Z=N,S=O;O=O.next,Z.x=w.body.posx+(w.body.axisy*S.x-w.body.axisx*S.y),Z.y=w.body.posy+(S.x*w.body.axisx+S.y*w.body.axisy),Z.x<w.aabb.minx&&(w.aabb.minx=Z.x),Z.x>w.aabb.maxx&&(w.aabb.maxx=Z.x),Z.y<w.aabb.miny&&(w.aabb.miny=Z.y),Z.y>w.aabb.maxy&&(w.aabb.maxy=Z.y),N=N.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy}this.bphase.sync(h),c=c.next}if(i.sweepFrozen=!1,i.type==2&&i.bulletEnabled){let h=j._nape.Config.bulletCCDLinearThreshold*i.sweepRadius,u=j._nape.Config.bulletCCDAngularThreshold;((i.velx*i.velx+i.vely*i.vely)*e*e>h*h||i.angvel*i.angvel*e*e>u*u)&&(i.bullet=!0)}}else i.sweepFrozen=!0,i.bullet=!1}n=n.next}let s=this.kinematics.head;for(;s!=null;){let i=s.elt;i.pre_posx=i.posx,i.pre_posy=i.posy,i.pre_rot=i.rot,i.sweepTime=0,i.sweep_angvel=i.angvel%t;let l=e-i.sweepTime;if(l!=0){i.sweepTime=e;let r=l;if(i.posx+=i.velx*r,i.posy+=i.vely*r,i.angvel!=0){let a=i.sweep_angvel*l;if(i.rot+=a,a*a>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let o=a*a,p=1-.5*o,c=1-o*o/8,h=(p*i.axisx+a*i.axisy)*c;i.axisy=(p*i.axisy-a*i.axisx)*c,i.axisx=h}}}if(i.disableCCD)i.sweepFrozen=!0,i.bullet=!1;else{let r=j._nape.Config.staticCCDLinearThreshold*i.sweepRadius,a=j._nape.Config.staticCCDAngularThreshold;if((i.velx*i.velx+i.vely*i.vely)*e*e>r*r||i.angvel*i.angvel*e*e>a*a||i.type==3){let o=i.sweep_angvel;o<0&&(o=-o);let p=1/o,c=i.shapes.head;for(;c!=null;){let h=c.elt,u=h.aabb,x=u.minx,y=u.miny,d=u.maxx,_=u.maxy,f=o*e*h.sweepCoef*.008333333333333333|0;f>8&&(f=8);let z=o*e/f,P=e-i.sweepTime;if(P!=0){i.sweepTime=e;let b=P;if(i.posx+=i.velx*b,i.posy+=i.vely*b,i.angvel!=0){let C=i.sweep_angvel*P;if(i.rot+=C,C*C>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let v=C*C,w=1-.5*v,O=1-v*v/8,E=(w*i.axisx+C*i.axisy)*O;i.axisy=(w*i.axisy-C*i.axisx)*O,i.axisx=E}}}if(h.type==0){let b=h.circle;b.worldCOMx=b.body.posx+(b.body.axisy*b.localCOMx-b.body.axisx*b.localCOMy),b.worldCOMy=b.body.posy+(b.localCOMx*b.body.axisx+b.localCOMy*b.body.axisy),b.aabb.minx=b.worldCOMx-b.radius,b.aabb.miny=b.worldCOMy-b.radius,b.aabb.maxx=b.worldCOMx+b.radius,b.aabb.maxy=b.worldCOMy+b.radius}else if(h.type===2)h.capsule.__validate_aabb();else{let b=h.polygon,C=b.lverts.next,v=b.gverts.next,w=C;C=C.next,v.x=b.body.posx+(b.body.axisy*w.x-b.body.axisx*w.y),v.y=b.body.posy+(w.x*b.body.axisx+w.y*b.body.axisy),b.aabb.minx=v.x,b.aabb.miny=v.y,b.aabb.maxx=v.x,b.aabb.maxy=v.y;let O=b.gverts.next.next;for(;O!=null;){let E=O,M=C;C=C.next,E.x=b.body.posx+(b.body.axisy*M.x-b.body.axisx*M.y),E.y=b.body.posy+(M.x*b.body.axisx+M.y*b.body.axisy),E.x<b.aabb.minx&&(b.aabb.minx=E.x),E.x>b.aabb.maxx&&(b.aabb.maxx=E.x),E.y<b.aabb.miny&&(b.aabb.miny=E.y),E.y>b.aabb.maxy&&(b.aabb.maxy=E.y),O=O.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy;let k=1,m=f;for(;k<m;){let b=k++,C=z*b*p,v=C-i.sweepTime;if(v!=0){i.sweepTime=C;let w=v;if(i.posx+=i.velx*w,i.posy+=i.vely*w,i.angvel!=0){let O=i.sweep_angvel*v;if(i.rot+=O,O*O>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let E=O*O,M=1-.5*E,N=1-E*E/8,Z=(M*i.axisx+O*i.axisy)*N;i.axisy=(M*i.axisy-O*i.axisx)*N,i.axisx=Z}}}if(h.type==0){let w=h.circle;w.worldCOMx=w.body.posx+(w.body.axisy*w.localCOMx-w.body.axisx*w.localCOMy),w.worldCOMy=w.body.posy+(w.localCOMx*w.body.axisx+w.localCOMy*w.body.axisy),w.aabb.minx=w.worldCOMx-w.radius,w.aabb.miny=w.worldCOMy-w.radius,w.aabb.maxx=w.worldCOMx+w.radius,w.aabb.maxy=w.worldCOMy+w.radius}else{let w=h.polygon,O=w.lverts.next,E=w.gverts.next,M=O;O=O.next,E.x=w.body.posx+(w.body.axisy*M.x-w.body.axisx*M.y),E.y=w.body.posy+(M.x*w.body.axisx+M.y*w.body.axisy),w.aabb.minx=E.x,w.aabb.miny=E.y,w.aabb.maxx=E.x,w.aabb.maxy=E.y;let N=w.gverts.next.next;for(;N!=null;){let Z=N,S=O;O=O.next,Z.x=w.body.posx+(w.body.axisy*S.x-w.body.axisx*S.y),Z.y=w.body.posy+(S.x*w.body.axisx+S.y*w.body.axisy),Z.x<w.aabb.minx&&(w.aabb.minx=Z.x),Z.x>w.aabb.maxx&&(w.aabb.maxx=Z.x),Z.y<w.aabb.miny&&(w.aabb.miny=Z.y),Z.y>w.aabb.maxy&&(w.aabb.maxy=Z.y),N=N.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy}this.bphase.sync(h),c=c.next}if(i.sweepFrozen=!1,i.type==2&&i.bulletEnabled){let h=j._nape.Config.bulletCCDLinearThreshold*i.sweepRadius,u=j._nape.Config.bulletCCDAngularThreshold;((i.velx*i.velx+i.vely*i.vely)*e*e>h*h||i.angvel*i.angvel*e*e>u*u)&&(i.bullet=!0)}}else i.sweepFrozen=!0,i.bullet=!1}s=s.next}}presteparb(e,t,n){if(n==null&&(n=!1),!e.cleared&&e.b1.component.sleeping&&e.b2.component.sleeping)return e.sleep_stamp=this.stamp,e.sleeping=!0,!0;if(!e.cleared||e.present!=0||e.intchange){let i=!n&&e.up_stamp==this.stamp-1&&!e.cleared&&!e.intchange,l=e.fresh&&!e.cleared&&!e.intchange;if(i&&(e.endGenerated=this.stamp),l||i||e.cleared||e.intchange){let r=e.ws1,a=e.ws2,o=this.mrca1;for(;o.head!=null;){let x=o.head;o.head=x.next;let y=x;y.elt=null,y.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y,o.head==null&&(o.pushmod=!0),o.modified=!0,o.length--}o.pushmod=!0;let p=this.mrca2;for(;p.head!=null;){let x=p.head;p.head=x.next;let y=x;y.elt=null,y.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y,p.head==null&&(p.pushmod=!0),p.modified=!0,p.length--}if(p.pushmod=!0,r.cbSet!=null){let x=this.mrca1,y;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?y=new j._zpp.util.ZNPNode_ZPP_Interactor:(y=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y.next,y.next=null),y.elt=r;let d=y;d.next=x.head,x.head=d,x.modified=!0,x.length++}if(r.body.cbSet!=null){let x=this.mrca1,y=r.body,d;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?d=new j._zpp.util.ZNPNode_ZPP_Interactor:(d=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=d.next,d.next=null),d.elt=y;let _=d;_.next=x.head,x.head=_,x.modified=!0,x.length++}if(a.cbSet!=null){let x=this.mrca2,y;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?y=new j._zpp.util.ZNPNode_ZPP_Interactor:(y=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y.next,y.next=null),y.elt=a;let d=y;d.next=x.head,x.head=d,x.modified=!0,x.length++}if(a.body.cbSet!=null){let x=this.mrca2,y=a.body,d;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?d=new j._zpp.util.ZNPNode_ZPP_Interactor:(d=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=d.next,d.next=null),d.elt=y;let _=d;_.next=x.head,x.head=_,x.modified=!0,x.length++}let c=r.body.compound,h=a.body.compound;for(;c!=h;){let x=c==null?0:c.depth,y=h==null?0:h.depth;if(x<y){if(h.cbSet!=null){let d=this.mrca2,_;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?_=new j._zpp.util.ZNPNode_ZPP_Interactor:(_=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=_.next,_.next=null),_.elt=h;let f=_;f.next=d.head,d.head=f,d.modified=!0,d.length++}h=h.compound}else{if(c.cbSet!=null){let d=this.mrca1,_;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?_=new j._zpp.util.ZNPNode_ZPP_Interactor:(_=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=_.next,_.next=null),_.elt=c;let f=_;f.next=d.head,d.head=f,d.modified=!0,d.length++}c=c.compound}}let u=this.mrca1.head;for(;u!=null;){let x=u.elt,y=this.mrca2.head;for(;y!=null;){let d=y.elt,_=x.cbSet,f=d.cbSet,z=_.manager,P=null,m=(_.cbpairs.length<f.cbpairs.length?_.cbpairs:f.cbpairs).head;for(;m!=null;){let C=m.elt;if(C.a==_&&C.b==f||C.a==f&&C.b==_){P=C;break}m=m.next}if(P==null){let C;Ne.zpp_pool==null?C=new Ne:(C=Ne.zpp_pool,Ne.zpp_pool=C.next,C.next=null),C.zip_listeners=!0,_t.setlt(_,f)?(C.a=_,C.b=f):(C.a=f,C.b=_),P=C,_.cbpairs.add(P),f!=_&&f.cbpairs.add(P)}if(P.zip_listeners&&(P.zip_listeners=!1,P.__validate()),P.listeners.head==null){y=y.next;continue}let b=j._zpp.phys.ZPP_Interactor.get(x,d);if(l||e.intchange){b==null&&(b=Wt.get(x,d),this.add_callbackset(b));let C=_.manager,v=null,O=(_.cbpairs.length<f.cbpairs.length?_.cbpairs:f.cbpairs).head;for(;O!=null;){let S=O.elt;if(S.a==_&&S.b==f||S.a==f&&S.b==_){v=S;break}O=O.next}if(v==null){let S;Ne.zpp_pool==null?S=new Ne:(S=Ne.zpp_pool,Ne.zpp_pool=S.next,S.next=null),S.zip_listeners=!0,_t.setlt(_,f)?(S.a=_,S.b=f):(S.a=f,S.b=_),v=S,_.cbpairs.add(v),f!=_&&f.cbpairs.add(v)}v.zip_listeners&&(v.zip_listeners=!1,v.__validate());let E=v.listeners.head;for(;E!=null;){let S=E.elt;if(S.event==0&&(S.itype&e.type)!=0&&b.empty_arb(S.itype)){let A=this.push_callback(S);A.event=0;let F=b.int1,B=b.int2,G,q=S.options1,R=F.cbTypes;if(q.nonemptyintersection(R,q.includes)&&!q.nonemptyintersection(R,q.excludes)){let T=S.options2,V=B.cbTypes;G=T.nonemptyintersection(V,T.includes)&&!T.nonemptyintersection(V,T.excludes)}else G=!1;G?(A.int1=F,A.int2=B):(A.int1=B,A.int2=F),A.set=b}E=E.next}let M,N;N=!1;let Z=b.arbiters.head;for(;Z!=null;){if(Z.elt==e){N=!0;break}Z=Z.next}if(N)M=!1;else{let S=b.arbiters,A;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?A=new j._zpp.util.ZNPNode_ZPP_Arbiter:(A=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=A.next,A.next=null),A.elt=e;let F=A;F.next=S.head,S.head=F,S.modified=!0,S.length++,M=!0}M&&e.present++}else{e.present--,b.remove_arb(e);let C=_.manager,v=null,O=(_.cbpairs.length<f.cbpairs.length?_.cbpairs:f.cbpairs).head;for(;O!=null;){let M=O.elt;if(M.a==_&&M.b==f||M.a==f&&M.b==_){v=M;break}O=O.next}if(v==null){let M;Ne.zpp_pool==null?M=new Ne:(M=Ne.zpp_pool,Ne.zpp_pool=M.next,M.next=null),M.zip_listeners=!0,_t.setlt(_,f)?(M.a=_,M.b=f):(M.a=f,M.b=_),v=M,_.cbpairs.add(v),f!=_&&f.cbpairs.add(v)}v.zip_listeners&&(v.zip_listeners=!1,v.__validate());let E=v.listeners.head;for(;E!=null;){let M=E.elt;if(M.event==1&&(M.itype&e.type)!=0&&b.empty_arb(M.itype)){let N=this.push_callback(M);N.event=1;let Z=b.int1,S=b.int2,A,F=M.options1,B=Z.cbTypes;if(F.nonemptyintersection(B,F.includes)&&!F.nonemptyintersection(B,F.excludes)){let G=M.options2,q=S.cbTypes;A=G.nonemptyintersection(q,G.includes)&&!G.nonemptyintersection(q,G.excludes)}else A=!1;A?(N.int1=Z,N.int2=S):(N.int1=S,N.int2=Z),N.set=b}E=E.next}b.arbiters.head==null&&this.remove_callbackset(b)}y=y.next}u=u.next}}e.fresh=!1,e.intchange=!1}if(e.cleared||e.up_stamp+(e.type==Ie.COL?j._nape.Config.arbiterExpirationDelay:0)<this.stamp){if(e.type==Ie.SENSOR){let i=e.sensorarb;if(!i.cleared){let r=i.b1.arbiters,a=null,o=r.head,p=!1;for(;o!=null;){if(o.elt==i){let y,d;a==null?(y=r.head,d=y.next,r.head=d,r.head==null&&(r.pushmod=!0)):(y=a.next,d=y.next,a.next=d,d==null&&(r.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,r.modified=!0,r.length--,r.pushmod=!0,p=!0;break}a=o,o=o.next}let c=i.b2.arbiters,h=null,u=c.head,x=!1;for(;u!=null;){if(u.elt==i){let y,d;h==null?(y=c.head,d=y.next,c.head=d,c.head==null&&(c.pushmod=!0)):(y=h.next,d=y.next,h.next=d,d==null&&(c.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,c.modified=!0,c.length--,c.pushmod=!0,x=!0;break}h=u,u=u.next}i.pair!=null&&(i.pair.arb=null,i.pair=null)}i.b1=i.b2=null,i.active=!1,i.intchange=!1;let l=i;l.next=Ot.zpp_pool,Ot.zpp_pool=l}else if(e.type==Ie.FLUID){let i=e.fluidarb;if(!i.cleared){let r=i.b1.arbiters,a=null,o=r.head,p=!1;for(;o!=null;){if(o.elt==i){let y,d;a==null?(y=r.head,d=y.next,r.head=d,r.head==null&&(r.pushmod=!0)):(y=a.next,d=y.next,a.next=d,d==null&&(r.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,r.modified=!0,r.length--,r.pushmod=!0,p=!0;break}a=o,o=o.next}let c=i.b2.arbiters,h=null,u=c.head,x=!1;for(;u!=null;){if(u.elt==i){let y,d;h==null?(y=c.head,d=y.next,c.head=d,c.head==null&&(c.pushmod=!0)):(y=h.next,d=y.next,h.next=d,d==null&&(c.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,c.modified=!0,c.length--,c.pushmod=!0,x=!0;break}h=u,u=u.next}i.pair!=null&&(i.pair.arb=null,i.pair=null)}i.b1=i.b2=null,i.active=!1,i.intchange=!1;let l=i;l.next=Pt.zpp_pool,Pt.zpp_pool=l,i.pre_dt=-1}else{let i=e.colarb;if(!i.cleared){let r=i.b1.arbiters,a=null,o=r.head,p=!1;for(;o!=null;){if(o.elt==i){let y,d;a==null?(y=r.head,d=y.next,r.head=d,r.head==null&&(r.pushmod=!0)):(y=a.next,d=y.next,a.next=d,d==null&&(r.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,r.modified=!0,r.length--,r.pushmod=!0,p=!0;break}a=o,o=o.next}let c=i.b2.arbiters,h=null,u=c.head,x=!1;for(;u!=null;){if(u.elt==i){let y,d;h==null?(y=c.head,d=y.next,c.head=d,c.head==null&&(c.pushmod=!0)):(y=h.next,d=y.next,h.next=d,d==null&&(c.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,c.modified=!0,c.length--,c.pushmod=!0,x=!0;break}h=u,u=u.next}i.pair!=null&&(i.pair.arb=null,i.pair=null)}for(i.b1=i.b2=null,i.active=!1,i.intchange=!1;i.contacts.next!=null;){let r=i.contacts,a=r.next;r.pop();let o=a;o.arbiter=null,o.next=we.zpp_pool,we.zpp_pool=o;let p=i.innards,c=p.next;p.next=c.next,c._inuse=!1,p.next==null&&(p.pushmod=!0),p.modified=!0,p.length--}let l=i;l.userdef_dyn_fric=!1,l.userdef_stat_fric=!1,l.userdef_restitution=!1,l.userdef_rfric=!1,l.__ref_edge1=l.__ref_edge2=null,l.next=ut.zpp_pool,ut.zpp_pool=l,i.pre_dt=-1}return!0}let s=e.active;if(e.active=e.presentable=e.up_stamp==this.stamp,(e.immState&1)!=0){if(e.active&&e.type!=Ie.SENSOR)if(e.colarb!=null){let i=e.colarb;i.invalidated&&(i.invalidated=!1,i.userdef_restitution||(i.s1.material.elasticity<=-1/0||i.s2.material.elasticity<=-1/0?i.restitution=0:i.s1.material.elasticity>=1/0||i.s2.material.elasticity>=1/0?i.restitution=1:i.restitution=(i.s1.material.elasticity+i.s2.material.elasticity)/2,i.restitution<0&&(i.restitution=0),i.restitution>1&&(i.restitution=1)),i.userdef_dyn_fric||(i.dyn_fric=Math.sqrt(i.s1.material.dynamicFriction*i.s2.material.dynamicFriction)),i.userdef_stat_fric||(i.stat_fric=Math.sqrt(i.s1.material.staticFriction*i.s2.material.staticFriction)),i.userdef_rfric||(i.rfric=Math.sqrt(i.s1.material.rollingFriction*i.s2.material.rollingFriction))),i.pre_dt==-1&&(i.pre_dt=t);let l=t/i.pre_dt;i.pre_dt=t;let r=i.b1.smass+i.b2.smass;i.hc2=!1;let a=!0,p=i.b1.type!=2||i.b2.type!=2?i.continuous?j._nape.Config.contactContinuousStaticBiasCoef:j._nape.Config.contactStaticBiasCoef:i.continuous?j._nape.Config.contactContinuousBiasCoef:j._nape.Config.contactBiasCoef;i.biasCoef=p,i.continuous=!1;let c=null,h=null,u=i.innards.next,x=i.contacts.next;for(;x!=null;){let d=x;if(d.stamp+j._nape.Config.arbiterExpirationDelay<i.stamp){let z=i.contacts,P,k;c==null?(P=z.next,k=P.next,z.next=k,z.next==null&&(z.pushmod=!0)):(P=c.next,k=P.next,c.next=k,k==null&&(z.pushmod=!0)),P._inuse=!1,z.modified=!0,z.length--,z.pushmod=!0,x=k;let m=i.innards,b,C;h==null?(b=m.next,C=b.next,m.next=C,m.next==null&&(m.pushmod=!0)):(b=h.next,C=b.next,h.next=C,C==null&&(m.pushmod=!0)),b._inuse=!1,m.modified=!0,m.length--,m.pushmod=!0,u=C;let v=d;v.arbiter=null,v.next=we.zpp_pool,we.zpp_pool=v;continue}let _=d.inner,f=d.active;if(d.active=d.stamp==i.stamp,d.active){a?(a=!1,i.c1=_,i.oc1=d):(i.hc2=!0,i.c2=_,i.oc2=d),_.r2x=d.px-i.b2.posx,_.r2y=d.py-i.b2.posy,_.r1x=d.px-i.b1.posx,_.r1y=d.py-i.b1.posy;let z=_.r2x*i.nx+_.r2y*i.ny,P=r+i.b2.sinertia*(z*z),k=_.r1x*i.nx+_.r1y*i.ny;P+=i.b1.sinertia*(k*k),_.tMass=P<j._nape.Config.epsilon*j._nape.Config.epsilon?0:1/P;let m=i.ny*_.r2x-i.nx*_.r2y,b=r+i.b2.sinertia*(m*m),C=i.ny*_.r1x-i.nx*_.r1y;b+=i.b1.sinertia*(C*C),_.nMass=b<j._nape.Config.epsilon*j._nape.Config.epsilon?0:1/b;let v=0,w=0,O=i.b2.angvel+i.b2.kinangvel;v=i.b2.velx+i.b2.kinvelx-_.r2y*O,w=i.b2.vely+i.b2.kinvely+_.r2x*O,O=i.b1.angvel+i.b1.kinangvel,v-=i.b1.velx+i.b1.kinvelx-_.r1y*O,w-=i.b1.vely+i.b1.kinvely+_.r1x*O;let E=i.nx*v+i.ny*w;d.elasticity=i.restitution,_.bounce=E*d.elasticity,_.bounce>-j._nape.Config.elasticThreshold&&(_.bounce=0),E=w*i.nx-v*i.ny;let M=j._nape.Config.staticFrictionThreshold;E*E>M*M?_.friction=i.dyn_fric:_.friction=i.stat_fric,_.jnAcc*=l,_.jtAcc*=l}f!=d.active&&(i.contacts.modified=!0),c=x,h=u,u=u.next,x=x.next}if(i.hc2){if(i.hpc2=!0,i.oc1.posOnly){let d=i.c1;i.c1=i.c2,i.c2=d;let _=i.oc1;i.oc1=i.oc2,i.oc2=_,i.hc2=!1}else i.oc2.posOnly&&(i.hc2=!1);i.oc1.posOnly&&(a=!0)}else i.hpc2=!1;if(i.jrAcc*=l,a||(i.rn1a=i.ny*i.c1.r1x-i.nx*i.c1.r1y,i.rt1a=i.c1.r1x*i.nx+i.c1.r1y*i.ny,i.rn1b=i.ny*i.c1.r2x-i.nx*i.c1.r2y,i.rt1b=i.c1.r2x*i.nx+i.c1.r2y*i.ny,i.k1x=i.b2.kinvelx-i.c1.r2y*i.b2.kinangvel-(i.b1.kinvelx-i.c1.r1y*i.b1.kinangvel),i.k1y=i.b2.kinvely+i.c1.r2x*i.b2.kinangvel-(i.b1.kinvely+i.c1.r1x*i.b1.kinangvel)),i.hc2)if(i.rn2a=i.ny*i.c2.r1x-i.nx*i.c2.r1y,i.rt2a=i.c2.r1x*i.nx+i.c2.r1y*i.ny,i.rn2b=i.ny*i.c2.r2x-i.nx*i.c2.r2y,i.rt2b=i.c2.r2x*i.nx+i.c2.r2y*i.ny,i.k2x=i.b2.kinvelx-i.c2.r2y*i.b2.kinangvel-(i.b1.kinvelx-i.c2.r1y*i.b1.kinangvel),i.k2y=i.b2.kinvely+i.c2.r2x*i.b2.kinangvel-(i.b1.kinvely+i.c2.r1x*i.b1.kinangvel),i.kMassa=r+i.b1.sinertia*i.rn1a*i.rn1a+i.b2.sinertia*i.rn1b*i.rn1b,i.kMassb=r+i.b1.sinertia*i.rn1a*i.rn2a+i.b2.sinertia*i.rn1b*i.rn2b,i.kMassc=r+i.b1.sinertia*i.rn2a*i.rn2a+i.b2.sinertia*i.rn2b*i.rn2b,i.kMassa*i.kMassa+2*i.kMassb*i.kMassb+i.kMassc*i.kMassc<j._nape.Config.illConditionedThreshold*(i.kMassa*i.kMassc-i.kMassb*i.kMassb)){i.Ka=i.kMassa,i.Kb=i.kMassb,i.Kc=i.kMassc;let _=i.kMassa*i.kMassc-i.kMassb*i.kMassb;if(_!=_)i.kMassa=i.kMassb=i.kMassc=0;else if(_==0){let f=0;i.kMassa!=0?i.kMassa=1/i.kMassa:(i.kMassa=0,f|=1),i.kMassc!=0?i.kMassc=1/i.kMassc:(i.kMassc=0,f|=2),i.kMassb=0}else{_=1/_;let f=i.kMassc*_;i.kMassc=i.kMassa*_,i.kMassa=f,i.kMassb*=-_}}else{if(i.hc2=!1,i.oc2.dist<i.oc1.dist){let _=i.c1;i.c1=i.c2,i.c2=_}i.oc2.active=!1,i.contacts.modified=!0}i.surfacex=i.b2.svelx,i.surfacey=i.b2.svely;let y=1;i.surfacex+=i.b1.svelx*y,i.surfacey+=i.b1.svely*y,i.surfacex=-i.surfacex,i.surfacey=-i.surfacey,i.rMass=i.b1.sinertia+i.b2.sinertia,i.rMass!=0&&(i.rMass=1/i.rMass),a&&(e.active=!1)}else{let i=e.fluidarb;i.pre_dt==-1&&(i.pre_dt=t);let l=t/i.pre_dt;i.pre_dt=t,i.r1x=i.centroidx-i.b1.posx,i.r1y=i.centroidy-i.b1.posy,i.r2x=i.centroidx-i.b2.posx,i.r2y=i.centroidy-i.b2.posy;let r=0,a=0;i.ws1.fluidEnabled&&i.ws1.fluidProperties.wrap_gravity!=null?(r=i.ws1.fluidProperties.gravityx,a=i.ws1.fluidProperties.gravityy):(r=this.gravityx,a=this.gravityy);let o=0,p=0;i.ws2.fluidEnabled&&i.ws2.fluidProperties.wrap_gravity!=null?(o=i.ws2.fluidProperties.gravityx,p=i.ws2.fluidProperties.gravityy):(o=this.gravityx,p=this.gravityy);let c=0,h=0;if(i.ws1.fluidEnabled&&i.ws2.fluidEnabled){let y=i.overlap*i.ws1.fluidProperties.density,d=i.overlap*i.ws2.fluidProperties.density;if(y>d){let _=y+d;c-=r*_,h-=a*_}else if(y<d){let _=y+d;c+=o*_,h+=p*_}else{let _=0,f=0;_=r+o,f=a+p;let z=.5;if(_*=z,f*=z,i.ws1.worldCOMx*_+i.ws1.worldCOMy*f>i.ws2.worldCOMx*_+i.ws2.worldCOMy*f){let P=y+d;c-=_*P,h-=f*P}else{let P=y+d;c+=_*P,h+=f*P}}}else if(i.ws1.fluidEnabled){let d=i.overlap*i.ws1.fluidProperties.density;c-=r*d,h-=a*d}else if(i.ws2.fluidEnabled){let d=i.overlap*i.ws2.fluidProperties.density;c+=o*d,h+=p*d}let u=t;if(c*=u,h*=u,i.buoyx=c,i.buoyy=h,i.b1.type==2){let y=i.b1.imass;i.b1.velx-=c*y,i.b1.vely-=h*y,i.b1.angvel-=(h*i.r1x-c*i.r1y)*i.b1.iinertia}if(i.b2.type==2){let y=i.b2.imass;i.b2.velx+=c*y,i.b2.vely+=h*y,i.b2.angvel+=(h*i.r2x-c*i.r2y)*i.b2.iinertia}if((!i.ws1.fluidEnabled||i.ws1.fluidProperties.viscosity==0)&&(!i.ws2.fluidEnabled||i.ws2.fluidProperties.viscosity==0))i.nodrag=!0,i.dampx=0,i.dampy=0,i.adamp=0;else{i.nodrag=!1;let y=0;if(i.ws1.fluidEnabled&&(i.ws2.validate_angDrag(),y+=i.ws1.fluidProperties.viscosity*i.ws2.angDrag*i.overlap/i.ws2.area),i.ws2.fluidEnabled&&(i.ws1.validate_angDrag(),y+=i.ws2.fluidProperties.viscosity*i.ws1.angDrag*i.overlap/i.ws1.area),y!=0){let z=i.b1.sinertia+i.b2.sinertia;z!=0?i.wMass=1/z:i.wMass=0,y*=4e-4;let P=2*Math.PI*y;i.agamma=1/(t*P*(2+P*t));let k=1/(1+i.agamma),m=t*P*P*i.agamma;i.agamma*=k,i.wMass*=k}else i.wMass=0,i.agamma=0;let d=i.b2.velx+i.b2.kinvelx-i.r2y*(i.b2.angvel+i.b2.kinangvel)-(i.b1.velx+i.b1.kinvelx-i.r1y*(i.b2.angvel+i.b2.kinangvel)),_=i.b2.vely+i.b2.kinvely+i.r2x*(i.b2.angvel+i.b2.kinangvel)-(i.b1.vely+i.b1.kinvely+i.r1x*(i.b1.angvel+i.b1.kinangvel));if(!(d*d+_*_<j._nape.Config.epsilon*j._nape.Config.epsilon)){let z=d*d+_*_,k=1/Math.sqrt(z);d*=k,_*=k,i.nx=d,i.ny=_}let f=0;if(i.ws1.fluidEnabled){let z=-i.ws1.fluidProperties.viscosity*i.overlap/i.ws2.area;if(i.ws2.type==0)f-=z*i.ws2.circle.radius*j._nape.Config.fluidLinearDrag/(2*i.ws2.circle.radius*Math.PI);else if(i.ws2.type===2){let P=i.ws2.capsule.radius;f-=z*P*j._nape.Config.fluidLinearDrag/(2*P*Math.PI)}else{let P=i.ws2.polygon,k=0,m=0,b=P.edges.head;for(;b!=null;){let C=b.elt;k+=C.length;let v=z*C.length*(C.gnormx*i.nx+C.gnormy*i.ny);v>0&&(v*=-j._nape.Config.fluidVacuumDrag,v=v),m-=v*.5*j._nape.Config.fluidLinearDrag,b=b.next}f+=m/k}}if(i.ws2.fluidEnabled){let z=-i.ws2.fluidProperties.viscosity*i.overlap/i.ws1.area;if(i.ws1.type==0)f-=z*i.ws1.circle.radius*j._nape.Config.fluidLinearDrag/(2*i.ws1.circle.radius*Math.PI);else if(i.ws1.type===2){let P=i.ws1.capsule.radius;f-=z*P*j._nape.Config.fluidLinearDrag/(2*P*Math.PI)}else{let P=i.ws1.polygon,k=0,m=0,b=P.edges.head;for(;b!=null;){let C=b.elt;k+=C.length;let v=z*C.length*(C.gnormx*i.nx+C.gnormy*i.ny);v>0&&(v*=-j._nape.Config.fluidVacuumDrag,v=v),m-=v*.5*j._nape.Config.fluidLinearDrag,b=b.next}f+=m/k}}if(f!=0){let z=i.b1.smass+i.b2.smass,P=0,k=0,m=0;if(P=z,k=0,m=z,i.b1.sinertia!=0){let E=i.r1x*i.b1.sinertia,M=i.r1y*i.b1.sinertia;P+=M*i.r1y,k+=-M*i.r1x,m+=E*i.r1x}if(i.b2.sinertia!=0){let E=i.r2x*i.b2.sinertia,M=i.r2y*i.b2.sinertia;P+=M*i.r2y,k+=-M*i.r2x,m+=E*i.r2x}let b=P*m-k*k;if(b!=b)m=0,k=m,P=k;else if(b==0){let E=0;P!=0?P=1/P:(P=0,E|=1),m!=0?m=1/m:(m=0,E|=2),k=0}else{b=1/b;let E=m*b;m=P*b,P=E,k*=-b}i.vMassa=P,i.vMassb=k,i.vMassc=m;let C,v=2*Math.PI*f;i.lgamma=1/(t*v*(2+v*t));let w=1/(1+i.lgamma);C=t*v*v*i.lgamma,i.lgamma*=w;let O=w;i.vMassa*=O,i.vMassb*=O,i.vMassc*=O}else i.vMassa=0,i.vMassb=0,i.vMassc=0,i.lgamma=0}let x=l;i.dampx*=x,i.dampy*=x,i.adamp*=l}}else if(e.colarb!=null){let i=e.colarb,l=!0,r=null,a=null,o=i.innards.next;i.hc2=!1;let p=i.contacts.next;for(;p!=null;){let c=p;if(c.stamp+j._nape.Config.arbiterExpirationDelay<i.stamp){let x=i.contacts,y,d;r==null?(y=x.next,d=y.next,x.next=d,x.next==null&&(x.pushmod=!0)):(y=r.next,d=y.next,r.next=d,d==null&&(x.pushmod=!0)),y._inuse=!1,x.modified=!0,x.length--,x.pushmod=!0,p=d;let _=i.innards,f,z;a==null?(f=_.next,z=f.next,_.next=z,_.next==null&&(_.pushmod=!0)):(f=a.next,z=f.next,a.next=z,z==null&&(_.pushmod=!0)),f._inuse=!1,_.modified=!0,_.length--,_.pushmod=!0,o=z;let P=c;P.arbiter=null,P.next=we.zpp_pool,we.zpp_pool=P;continue}let h=c.inner,u=c.active;c.active=c.stamp==i.stamp,c.active&&(l?(l=!1,i.c1=h,i.oc1=c):(i.hc2=!0,i.c2=h,i.oc2=c)),u!=c.active&&(i.contacts.modified=!0),r=p,a=o,o=o.next,p=p.next}if(i.hc2){if(i.hpc2=!0,i.oc1.posOnly){let c=i.c1;i.c1=i.c2,i.c2=c;let h=i.oc1;i.oc1=i.oc2,i.oc2=h,i.hc2=!1}else i.oc2.posOnly&&(i.hc2=!1);i.oc1.posOnly&&(l=!0)}else i.hpc2=!1;l&&(e.active=!1)}return s!=e.active&&(e.b1.arbiters.modified=!0,e.b2.arbiters.modified=!0,this.c_arbiters_true.modified=this.c_arbiters_false.modified=!0,this.s_arbiters.modified=this.f_arbiters.modified=!0),!1}prestep(e){let t=null,n=this.live_constraints.head;for(;n!=null;){let d=n.elt;if(d.preStep(e)){n=this.live_constraints.erase(t),d.broken(),this.constraintCbBreak(d),d.removeOnBreak?(d.component.sleeping=!0,this.midstep=!1,d.compound!=null?d.compound.wrap_constraints.remove(d.outer):this.wrap_constraints.remove(d.outer),this.midstep=!0):d.active=!1,d.clearcache();continue}t=n,n=n.next}let s=null,i=this.c_arbiters_true,l=i.head,r=this.c_arbiters_false!=null;for(r&&l==null&&(r=!1,l=this.c_arbiters_false.head,i=this.c_arbiters_false,s=null);l!=null;){let d=l.elt;if(this.presteparb(d,e)){let _,f;s==null?(_=i.head,f=_.next,i.head=f,i.head==null&&(i.pushmod=!0)):(_=s.next,f=_.next,s.next=f,f==null&&(i.pushmod=!0));let z=_;z.elt=null,z.next=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=z,i.modified=!0,i.length--,i.pushmod=!0,l=f,r&&l==null&&(r=!1,l=this.c_arbiters_false.head,i=this.c_arbiters_false,s=null);continue}s=l,l=l.next,r&&l==null&&(r=!1,l=this.c_arbiters_false.head,i=this.c_arbiters_false,s=null)}let a=null,o=this.f_arbiters,p=o.head,c=!1;for(c&&p==null&&(c=!1,o=null,a=null);p!=null;){let d=p.elt;if(this.presteparb(d,e)){let _,f;a==null?(_=o.head,f=_.next,o.head=f,o.head==null&&(o.pushmod=!0)):(_=a.next,f=_.next,a.next=f,f==null&&(o.pushmod=!0));let z=_;z.elt=null,z.next=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=z,o.modified=!0,o.length--,o.pushmod=!0,p=f,c&&p==null&&(c=!1,o=null,a=null);continue}a=p,p=p.next,c&&p==null&&(c=!1,o=null,a=null)}let h=null,u=this.s_arbiters,x=u.head,y=!1;for(y&&x==null&&(y=!1,u=null,h=null);x!=null;){let d=x.elt;if(this.presteparb(d,e)){let _,f;h==null?(_=u.head,f=_.next,u.head=f,u.head==null&&(u.pushmod=!0)):(_=h.next,f=_.next,h.next=f,f==null&&(u.pushmod=!0));let z=_;z.elt=null,z.next=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=z,u.modified=!0,u.length--,u.pushmod=!0,x=f,y&&x==null&&(y=!1,u=null,h=null);continue}h=x,x=x.next,y&&x==null&&(y=!1,u=null,h=null)}}warmStart(){let e=this.f_arbiters.head;for(;e!=null;){let i=e.elt;if(i.active&&(i.immState&1)!=0){let l=i.b1.imass;i.b1.velx-=i.dampx*l,i.b1.vely-=i.dampy*l;let r=i.b2.imass;i.b2.velx+=i.dampx*r,i.b2.vely+=i.dampy*r,i.b1.angvel-=i.b1.iinertia*(i.dampy*i.r1x-i.dampx*i.r1y),i.b2.angvel+=i.b2.iinertia*(i.dampy*i.r2x-i.dampx*i.r2y),i.b1.angvel-=i.adamp*i.b1.iinertia,i.b2.angvel+=i.adamp*i.b2.iinertia}e=e.next}let t=this.c_arbiters_false.head,n=!0;for(t==null&&(t=this.c_arbiters_true.head,n=!1);t!=null;){let i=t.elt;if(i.active&&(i.immState&1)!=0){let l=i.nx*i.c1.jnAcc-i.ny*i.c1.jtAcc,r=i.ny*i.c1.jnAcc+i.nx*i.c1.jtAcc,a=i.b1.imass;i.b1.velx-=l*a,i.b1.vely-=r*a,i.b1.angvel-=i.b1.iinertia*(r*i.c1.r1x-l*i.c1.r1y);let o=i.b2.imass;if(i.b2.velx+=l*o,i.b2.vely+=r*o,i.b2.angvel+=i.b2.iinertia*(r*i.c1.r2x-l*i.c1.r2y),i.hc2){let p=i.nx*i.c2.jnAcc-i.ny*i.c2.jtAcc,c=i.ny*i.c2.jnAcc+i.nx*i.c2.jtAcc,h=i.b1.imass;i.b1.velx-=p*h,i.b1.vely-=c*h,i.b1.angvel-=i.b1.iinertia*(c*i.c2.r1x-p*i.c2.r1y);let u=i.b2.imass;i.b2.velx+=p*u,i.b2.vely+=c*u,i.b2.angvel+=i.b2.iinertia*(c*i.c2.r2x-p*i.c2.r2y)}i.b2.angvel+=i.jrAcc*i.b2.iinertia,i.b1.angvel-=i.jrAcc*i.b1.iinertia}t=t.next,n&&t==null&&(t=this.c_arbiters_true.head,n=!1)}let s=this.live_constraints.head;for(;s!=null;)s.elt.warmStart(),s=s.next}iterateVel(e){let t=0,n=e;for(;t<n;){let s=t++,i=this.f_arbiters.head;for(;i!=null;){let p=i.elt;if(p.active&&(p.immState&1)!=0&&!p.nodrag){let c=p.b1.angvel+p.b1.kinangvel,h=p.b2.angvel+p.b2.kinangvel,u=p.b1.velx+p.b1.kinvelx-p.r1y*c-(p.b2.velx+p.b2.kinvelx-p.r2y*h),x=p.b1.vely+p.b1.kinvely+p.r1x*c-(p.b2.vely+p.b2.kinvely+p.r2x*h),y=p.vMassa*u+p.vMassb*x;x=p.vMassb*u+p.vMassc*x,u=y;let d=p.lgamma;u-=p.dampx*d,x-=p.dampy*d;let _=1;p.dampx+=u*_,p.dampy+=x*_;let f=p.b1.imass;p.b1.velx-=u*f,p.b1.vely-=x*f;let z=p.b2.imass;p.b2.velx+=u*z,p.b2.vely+=x*z,p.b1.angvel-=p.b1.iinertia*(x*p.r1x-u*p.r1y),p.b2.angvel+=p.b2.iinertia*(x*p.r2x-u*p.r2y);let P=(c-h)*p.wMass-p.adamp*p.agamma;p.adamp+=P,p.b1.angvel-=P*p.b1.iinertia,p.b2.angvel+=P*p.b2.iinertia}i=i.next}let l=null,r=this.live_constraints.head;for(;r!=null;){let p=r.elt;if(p.applyImpulseVel()){r=this.live_constraints.erase(l),p.broken(),this.constraintCbBreak(p),p.removeOnBreak?(p.component.sleeping=!0,this.midstep=!1,p.compound!=null?p.compound.wrap_constraints.remove(p.outer):this.wrap_constraints.remove(p.outer),this.midstep=!0):p.active=!1,p.clearcache();continue}l=r,r=r.next}let a=this.c_arbiters_false.head,o=!0;for(a==null&&(a=this.c_arbiters_true.head,o=!1);a!=null;){let p=a.elt;if(p.active&&(p.immState&1)!=0){let c=p.k1x+p.b2.velx-p.c1.r2y*p.b2.angvel-(p.b1.velx-p.c1.r1y*p.b1.angvel),h=p.k1y+p.b2.vely+p.c1.r2x*p.b2.angvel-(p.b1.vely+p.c1.r1x*p.b1.angvel),u=(h*p.nx-c*p.ny+p.surfacex)*p.c1.tMass,x=p.c1.friction*p.c1.jnAcc,y=p.c1.jtAcc,d=y-u;d>x?d=x:d<-x&&(d=-x),u=d-y,p.c1.jtAcc=d;let _=-p.ny*u,f=p.nx*u;if(p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=p.rt1b*u*p.b2.iinertia,p.b1.angvel-=p.rt1a*u*p.b1.iinertia,p.hc2){let z=p.k2x+p.b2.velx-p.c2.r2y*p.b2.angvel-(p.b1.velx-p.c2.r1y*p.b1.angvel),P=p.k2y+p.b2.vely+p.c2.r2x*p.b2.angvel-(p.b1.vely+p.c2.r1x*p.b1.angvel);u=(P*p.nx-z*p.ny+p.surfacex)*p.c2.tMass,x=p.c2.friction*p.c2.jnAcc,y=p.c2.jtAcc,d=y-u,d>x?d=x:d<-x&&(d=-x),u=d-y,p.c2.jtAcc=d,_=-p.ny*u,f=p.nx*u,p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=p.rt2b*u*p.b2.iinertia,p.b1.angvel-=p.rt2a*u*p.b1.iinertia,c=p.k1x+p.b2.velx-p.c1.r2y*p.b2.angvel-(p.b1.velx-p.c1.r1y*p.b1.angvel),h=p.k1y+p.b2.vely+p.c1.r2x*p.b2.angvel-(p.b1.vely+p.c1.r1x*p.b1.angvel),z=p.k2x+p.b2.velx-p.c2.r2y*p.b2.angvel-(p.b1.velx-p.c2.r1y*p.b1.angvel),P=p.k2y+p.b2.vely+p.c2.r2x*p.b2.angvel-(p.b1.vely+p.c2.r1x*p.b1.angvel);let k=p.c1.jnAcc,m=p.c2.jnAcc,b=c*p.nx+h*p.ny+p.surfacey+p.c1.bounce-(p.Ka*k+p.Kb*m),C=z*p.nx+P*p.ny+p.surfacey+p.c2.bounce-(p.Kb*k+p.Kc*m),v=-(p.kMassa*b+p.kMassb*C),w=-(p.kMassb*b+p.kMassc*C);v>=0&&w>=0?(b=v-k,C=w-m,p.c1.jnAcc=v,p.c2.jnAcc=w):(v=-p.c1.nMass*b,v>=0&&p.Kb*v+C>=0?(b=v-k,C=-m,p.c1.jnAcc=v,p.c2.jnAcc=0):(w=-p.c2.nMass*C,w>=0&&p.Kb*w+b>=0?(b=-k,C=w-m,p.c1.jnAcc=0,p.c2.jnAcc=w):b>=0&&C>=0?(b=-k,C=-m,p.c1.jnAcc=p.c2.jnAcc=0):(b=0,C=0))),u=b+C,_=p.nx*u,f=p.ny*u,p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=(p.rn1b*b+p.rn2b*C)*p.b2.iinertia,p.b1.angvel-=(p.rn1a*b+p.rn2a*C)*p.b1.iinertia}else p.radius!=0&&(u=(p.b2.angvel-p.b1.angvel)*p.rMass,x=p.rfric*p.c1.jnAcc,y=p.jrAcc,p.jrAcc-=u,p.jrAcc>x?p.jrAcc=x:p.jrAcc<-x&&(p.jrAcc=-x),u=p.jrAcc-y,p.b2.angvel+=u*p.b2.iinertia,p.b1.angvel-=u*p.b1.iinertia),c=p.k1x+p.b2.velx-p.c1.r2y*p.b2.angvel-(p.b1.velx-p.c1.r1y*p.b1.angvel),h=p.k1y+p.b2.vely+p.c1.r2x*p.b2.angvel-(p.b1.vely+p.c1.r1x*p.b1.angvel),u=(p.c1.bounce+(p.nx*c+p.ny*h)+p.surfacey)*p.c1.nMass,y=p.c1.jnAcc,d=y-u,d<0&&(d=0),u=d-y,p.c1.jnAcc=d,_=p.nx*u,f=p.ny*u,p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=p.rn1b*u*p.b2.iinertia,p.b1.angvel-=p.rn1a*u*p.b1.iinertia}a=a.next,o&&a==null&&(a=this.c_arbiters_true.head,o=!1)}}}iteratePos(e){let t=0,n=e;for(;t<n;){let s=t++,i=null,l=this.live_constraints.head;for(;l!=null;){let o=l.elt;if(!o.__velocity&&o.stiff&&o.applyImpulsePos()){l=this.live_constraints.erase(i),o.broken(),this.constraintCbBreak(o),o.removeOnBreak?(o.component.sleeping=!0,this.midstep=!1,o.compound!=null?o.compound.wrap_constraints.remove(o.outer):this.wrap_constraints.remove(o.outer),this.midstep=!0):o.active=!1,o.clearcache();continue}i=l,l=l.next}let r=this.c_arbiters_false.head,a=!0;for(r==null&&(r=this.c_arbiters_true.head,a=!1);r!=null;){let o=r.elt;if(o.active&&(o.immState&1)!=0)if(o.ptype==2){let p=o.c1,c=0,h=0;c=o.b2.axisy*p.lr2x-o.b2.axisx*p.lr2y,h=p.lr2x*o.b2.axisx+p.lr2y*o.b2.axisy;let u=1;c+=o.b2.posx*u,h+=o.b2.posy*u;let x=0,y=0;x=o.b1.axisy*p.lr1x-o.b1.axisx*p.lr1y,y=p.lr1x*o.b1.axisx+p.lr1y*o.b1.axisy;let d=1;x+=o.b1.posx*d,y+=o.b1.posy*d;let _=0,f=0;_=c-x,f=h-y;let z=Math.sqrt(_*_+f*f),P=o.radius-j._nape.Config.collisionSlop,k=z-P;if(_*o.nx+f*o.ny<0&&(_=-_,f=-f,k-=o.radius),k<0)if(z<j._nape.Config.epsilon)o.b1.smass!=0?o.b1.posx+=j._nape.Config.epsilon*10:o.b2.posx+=j._nape.Config.epsilon*10;else{let m=1/z;_*=m,f*=m;let b=.5*(x+c),C=.5*(y+h),v=z-P;x=b-o.b1.posx,y=C-o.b1.posy,c=b-o.b2.posx,h=C-o.b2.posy;let w=f*x-_*y,O=f*c-_*h,E=o.b2.smass+O*O*o.b2.sinertia+o.b1.smass+w*w*o.b1.sinertia;if(E!=0){let M=-o.biasCoef*v/E,N=0,Z=0,S=M;N=_*S,Z=f*S;let A=o.b1.imass;o.b1.posx-=N*A,o.b1.posy-=Z*A;let F=o.b1,B=-w*o.b1.iinertia*M;if(F.rot+=B,B*B>1e-4)F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot);else{let T=B*B,V=1-.5*T,K=1-T*T/8,$=(V*F.axisx+B*F.axisy)*K;F.axisy=(V*F.axisy-B*F.axisx)*K,F.axisx=$}let G=o.b2.imass;o.b2.posx+=N*G,o.b2.posy+=Z*G;let q=o.b2,R=O*o.b2.iinertia*M;if(q.rot+=R,R*R>1e-4)q.axisx=Math.sin(q.rot),q.axisy=Math.cos(q.rot);else{let T=R*R,V=1-.5*T,K=1-T*T/8,$=(V*q.axisx+R*q.axisy)*K;q.axisy=(V*q.axisy-R*q.axisx)*K,q.axisx=$}}}}else{let p=0,c=0,h,u=0,x=0,y=0,d=0;if(o.ptype==0){p=o.b1.axisy*o.lnormx-o.b1.axisx*o.lnormy,c=o.lnormx*o.b1.axisx+o.lnormy*o.b1.axisy,h=o.lproj+(p*o.b1.posx+c*o.b1.posy),u=o.b2.axisy*o.c1.lr1x-o.b2.axisx*o.c1.lr1y,x=o.c1.lr1x*o.b2.axisx+o.c1.lr1y*o.b2.axisy;let z=1;if(u+=o.b2.posx*z,x+=o.b2.posy*z,o.hpc2){y=o.b2.axisy*o.c2.lr1x-o.b2.axisx*o.c2.lr1y,d=o.c2.lr1x*o.b2.axisx+o.c2.lr1y*o.b2.axisy;let P=1;y+=o.b2.posx*P,d+=o.b2.posy*P}}else{p=o.b2.axisy*o.lnormx-o.b2.axisx*o.lnormy,c=o.lnormx*o.b2.axisx+o.lnormy*o.b2.axisy,h=o.lproj+(p*o.b2.posx+c*o.b2.posy),u=o.b1.axisy*o.c1.lr1x-o.b1.axisx*o.c1.lr1y,x=o.c1.lr1x*o.b1.axisx+o.c1.lr1y*o.b1.axisy;let z=1;if(u+=o.b1.posx*z,x+=o.b1.posy*z,o.hpc2){y=o.b1.axisy*o.c2.lr1x-o.b1.axisx*o.c2.lr1y,d=o.c2.lr1x*o.b1.axisx+o.c2.lr1y*o.b1.axisy;let P=1;y+=o.b1.posx*P,d+=o.b1.posy*P}}let _=u*p+x*c-h-o.radius;_+=j._nape.Config.collisionSlop;let f=0;if(o.hpc2&&(f=y*p+d*c-h-o.radius,f+=j._nape.Config.collisionSlop),_<0||f<0){o.rev&&(p=-p,c=-c);let z=0,P=0;z=u-o.b1.posx,P=x-o.b1.posy;let k=0,m=0;k=u-o.b2.posx,m=x-o.b2.posy;let b=0,C=0,v=0,w=0;if(o.hpc2){b=y-o.b1.posx,C=d-o.b1.posy,v=y-o.b2.posx,w=d-o.b2.posy;let O=c*z-p*P,E=c*k-p*m,M=c*b-p*C,N=c*v-p*w,Z=o.b1.smass+o.b2.smass;o.kMassa=Z+o.b1.sinertia*O*O+o.b2.sinertia*E*E,o.kMassb=Z+o.b1.sinertia*O*M+o.b2.sinertia*E*N,o.kMassc=Z+o.b1.sinertia*M*M+o.b2.sinertia*N*N;let S=0,A=0,F=0;S=o.kMassa,A=o.kMassb,F=o.kMassc;let B=_*o.biasCoef,G=f*o.biasCoef;for(;;){let q=0,R=0;q=B,R=G,q=-q,R=-R;let T=o.kMassa*o.kMassc-o.kMassb*o.kMassb;if(T!=T)R=0,q=R;else if(T==0)o.kMassa!=0?q/=o.kMassa:q=0,o.kMassc!=0?R/=o.kMassc:R=0;else{T=1/T;let $=T*(o.kMassc*q-o.kMassb*R);R=T*(o.kMassa*R-o.kMassb*q),q=$}if(q>=0&&R>=0){let $=(q+R)*o.b1.imass;o.b1.posx-=p*$,o.b1.posy-=c*$;let Y=o.b1,X=-o.b1.iinertia*(O*q+M*R);if(Y.rot+=X,X*X>1e-4)Y.axisx=Math.sin(Y.rot),Y.axisy=Math.cos(Y.rot);else{let D=X*X,I=1-.5*D,U=1-D*D/8,H=(I*Y.axisx+X*Y.axisy)*U;Y.axisy=(I*Y.axisy-X*Y.axisx)*U,Y.axisx=H}let ee=(q+R)*o.b2.imass;o.b2.posx+=p*ee,o.b2.posy+=c*ee;let J=o.b2,L=o.b2.iinertia*(E*q+N*R);if(J.rot+=L,L*L>1e-4)J.axisx=Math.sin(J.rot),J.axisy=Math.cos(J.rot);else{let D=L*L,I=1-.5*D,U=1-D*D/8,H=(I*J.axisx+L*J.axisy)*U;J.axisy=(I*J.axisy-L*J.axisx)*U,J.axisx=H}break}q=-B/S,R=0;let V=A*q+G;if(q>=0&&V>=0){let $=(q+R)*o.b1.imass;o.b1.posx-=p*$,o.b1.posy-=c*$;let Y=o.b1,X=-o.b1.iinertia*(O*q+M*R);if(Y.rot+=X,X*X>1e-4)Y.axisx=Math.sin(Y.rot),Y.axisy=Math.cos(Y.rot);else{let D=X*X,I=1-.5*D,U=1-D*D/8,H=(I*Y.axisx+X*Y.axisy)*U;Y.axisy=(I*Y.axisy-X*Y.axisx)*U,Y.axisx=H}let ee=(q+R)*o.b2.imass;o.b2.posx+=p*ee,o.b2.posy+=c*ee;let J=o.b2,L=o.b2.iinertia*(E*q+N*R);if(J.rot+=L,L*L>1e-4)J.axisx=Math.sin(J.rot),J.axisy=Math.cos(J.rot);else{let D=L*L,I=1-.5*D,U=1-D*D/8,H=(I*J.axisx+L*J.axisy)*U;J.axisy=(I*J.axisy-L*J.axisx)*U,J.axisx=H}break}q=0,R=-G/F;let K=A*R+B;if(R>=0&&K>=0){let $=(q+R)*o.b1.imass;o.b1.posx-=p*$,o.b1.posy-=c*$;let Y=o.b1,X=-o.b1.iinertia*(O*q+M*R);if(Y.rot+=X,X*X>1e-4)Y.axisx=Math.sin(Y.rot),Y.axisy=Math.cos(Y.rot);else{let D=X*X,I=1-.5*D,U=1-D*D/8,H=(I*Y.axisx+X*Y.axisy)*U;Y.axisy=(I*Y.axisy-X*Y.axisx)*U,Y.axisx=H}let ee=(q+R)*o.b2.imass;o.b2.posx+=p*ee,o.b2.posy+=c*ee;let J=o.b2,L=o.b2.iinertia*(E*q+N*R);if(J.rot+=L,L*L>1e-4)J.axisx=Math.sin(J.rot),J.axisy=Math.cos(J.rot);else{let D=L*L,I=1-.5*D,U=1-D*D/8,H=(I*J.axisx+L*J.axisy)*U;J.axisy=(I*J.axisy-L*J.axisx)*U,J.axisx=H}break}break}}else{let O=c*z-p*P,E=c*k-p*m,M=o.b2.smass+E*E*o.b2.sinertia+o.b1.smass+O*O*o.b1.sinertia;if(M!=0){let N=-o.biasCoef*_/M,Z=0,S=0,A=N;Z=p*A,S=c*A;let F=o.b1.imass;o.b1.posx-=Z*F,o.b1.posy-=S*F;let B=o.b1,G=-O*o.b1.iinertia*N;if(B.rot+=G,G*G>1e-4)B.axisx=Math.sin(B.rot),B.axisy=Math.cos(B.rot);else{let V=G*G,K=1-.5*V,$=1-V*V/8,Y=(K*B.axisx+G*B.axisy)*$;B.axisy=(K*B.axisy-G*B.axisx)*$,B.axisx=Y}let q=o.b2.imass;o.b2.posx+=Z*q,o.b2.posy+=S*q;let R=o.b2,T=E*o.b2.iinertia*N;if(R.rot+=T,T*T>1e-4)R.axisx=Math.sin(R.rot),R.axisy=Math.cos(R.rot);else{let V=T*T,K=1-.5*V,$=1-V*V/8,Y=(K*R.axisx+T*R.axisy)*$;R.axisy=(K*R.axisy-T*R.axisx)*$,R.axisx=Y}}}}}r=r.next,a&&r==null&&(r=this.c_arbiters_true.head,a=!1)}}}group_ignore(e,t){let n=e;for(;n!=null&&n.group==null;)n.ishape!=null?n=n.ishape.body:n.icompound!=null?n=n.icompound.compound:n=n.ibody.compound;let s=n==null?null:n.group;if(s==null)return!1;{let i=t;for(;i!=null&&i.group==null;)i.ishape!=null?i=i.ishape.body:i.icompound!=null?i=i.icompound.compound:i=i.ibody.compound;let l=i==null?null:i.group;if(l==null)return!1;{let r=!1;for(;s!=null&&l!=null;){if(s==l){r=s.ignore;break}s.depth<l.depth?l=l.group:s=s.group}return r}}}interactionType(e,t,n,s){let i;i=!1;let l=n.constraints.head;for(;l!=null;){let a=l.elt;if(a.ignore&&a.pair_exists(n.id,s.id)){i=!0;break}l=l.next}let r;if(i)r=!1;else{let a=e;for(;a!=null&&a.group==null;)a.ishape!=null?a=a.ishape.body:a.icompound!=null?a=a.icompound.compound:a=a.ibody.compound;let o=a==null?null:a.group,p;if(o==null)p=!1;else{let c=t;for(;c!=null&&c.group==null;)c.ishape!=null?c=c.ishape.body:c.icompound!=null?c=c.icompound.compound:c=c.ibody.compound;let h=c==null?null:c.group;if(h==null)p=!1;else{let u=!1;for(;o!=null&&h!=null;){if(o==h){u=o.ignore;break}o.depth<h.depth?h=h.group:o=o.group}p=u}}r=!p}if(r){let a;if(e.sensorEnabled||t.sensorEnabled){let o=e.filter,p=t.filter;a=(o.sensorMask&p.sensorGroup)!=0&&(p.sensorMask&o.sensorGroup)!=0}else a=!1;if(a)return 2;{let o;if(e.fluidEnabled||t.fluidEnabled){let p=e.filter,c=t.filter;o=(p.fluidMask&c.fluidGroup)!=0&&(c.fluidMask&p.fluidGroup)!=0}else o=!1;if(o&&!(n.imass==0&&s.imass==0&&n.iinertia==0&&s.iinertia==0))return 0;{let p=e.filter,c=t.filter;return(p.collisionMask&c.collisionGroup)!=0&&(c.collisionMask&p.collisionGroup)!=0&&!(n.imass==0&&s.imass==0&&n.iinertia==0&&s.iinertia==0)?1:-1}}}else return-1}narrowPhase(e,t,n,s,i){let l=null,r=e.body,a=t.body,o;o=!1;let p=r.constraints.head;for(;p!=null;){let u=p.elt;if(u.ignore&&u.pair_exists(r.id,a.id)){o=!0;break}p=p.next}let c,h;if(o)h=!1;else{let u=e;for(;u!=null&&u.group==null;)u.ishape!=null?u=u.ishape.body:u.icompound!=null?u=u.icompound.compound:u=u.ibody.compound;let x=u==null?null:u.group,y;if(x==null)y=!1;else{let d=t;for(;d!=null&&d.group==null;)d.ishape!=null?d=d.ishape.body:d.icompound!=null?d=d.icompound.compound:d=d.ibody.compound;let _=d==null?null:d.group;if(_==null)y=!1;else{let f=!1;for(;x!=null&&_!=null;){if(x==_){f=x.ignore;break}x.depth<_.depth?_=_.group:x=x.group}y=f}}h=!y}if(h){let u;if(e.sensorEnabled||t.sensorEnabled){let x=e.filter,y=t.filter;u=(x.sensorMask&y.sensorGroup)!=0&&(y.sensorMask&x.sensorGroup)!=0}else u=!1;if(u)c=2;else{let x;if(e.fluidEnabled||t.fluidEnabled){let y=e.filter,d=t.filter;x=(y.fluidMask&d.fluidGroup)!=0&&(d.fluidMask&y.fluidGroup)!=0}else x=!1;if(x&&!(r.imass==0&&a.imass==0&&r.iinertia==0&&a.iinertia==0))c=0;else{let y=e.filter,d=t.filter;c=(y.collisionMask&d.collisionGroup)!=0&&(d.collisionMask&y.collisionGroup)!=0&&!(r.imass==0&&a.imass==0&&r.iinertia==0&&a.iinertia==0)?1:-1}}}else c=-1;if(c!=-1){let u,x;e.type>t.type?(u=t,x=e):e.type==t.type?e.id<t.id?(u=e,x=t):(x=e,u=t):(u=e,x=t);let y=u==t;if(c==0){let d;if(s==null){let k=null,b=(r.arbiters.length<a.arbiters.length?r:a).arbiters.head;for(;b!=null;){let C=b.elt;if(C.id==u.id&&C.di==x.id){k=C;break}b=b.next}d=k}else d=s;let _=d==null,f,z=!1;if(_)Pt.zpp_pool==null?f=new Pt:(f=Pt.zpp_pool,Pt.zpp_pool=f.next,f.next=null);else if(d.fluidarb==null){d.cleared=!0;{let m=d.b1.arbiters,b=null,C=m.head,v=!1;for(;C!=null;){if(C.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=C,C=C.next}}{let m=d.b2.arbiters,b=null,C=m.head,v=!1;for(;C!=null;){if(C.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=C,C=C.next}}d.pair!=null&&(d.pair.arb=null,d.pair=null),d.active=!1,this.f_arbiters.modified=!0,Pt.zpp_pool==null?f=new Pt:(f=Pt.zpp_pool,Pt.zpp_pool=f.next,f.next=null),f.intchange=!0,_=!0,z=!0}else f=d.fluidarb;let P=4;if(_||f.stamp!=this.stamp||i)if(f.stamp=this.stamp,Ee.flowCollide(u,x,f)){if(_){let k=x.id;f.b1=e.body,f.ws1=e,f.b2=t.body,f.ws2=t,f.id=u.id,f.di=k;let m=f.b1.arbiters,b;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?b=new j._zpp.util.ZNPNode_ZPP_Arbiter:(b=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=b.next,b.next=null),b.elt=f;let C=b;C.next=m.head,m.head=C,m.modified=!0,m.length++;let v=f.b2.arbiters,w;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?w=new j._zpp.util.ZNPNode_ZPP_Arbiter:(w=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=w.next,w.next=null),w.elt=f;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++,f.active=!0,f.present=0,f.cleared=!1,f.sleeping=!1,f.fresh=!1,f.presentable=!1,f.nx=0,f.ny=1,f.dampx=0,f.dampy=0,f.adamp=0;let E=this.f_arbiters,M;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?M=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(M=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=M.next,M.next=null),M.elt=f;let N=M;N.next=E.head,E.head=N,E.modified=!0,E.length++,f.fresh=!z}else f.fresh=f.up_stamp<this.stamp-1||f.endGenerated==this.stamp&&i;if(f.up_stamp=f.stamp,f.fresh||(f.immState&4)==0){f.immState=1;let k=!1,m=f.ws1.id>f.ws2.id?f.ws2:f.ws1,b=f.ws1.id>f.ws2.id?f.ws1:f.ws2,C=this.mrca1;for(;C.head!=null;){let M=C.head;C.head=M.next;let N=M;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,C.head==null&&(C.pushmod=!0),C.modified=!0,C.length--}C.pushmod=!0;let v=this.mrca2;for(;v.head!=null;){let M=v.head;v.head=M.next;let N=M;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,v.head==null&&(v.pushmod=!0),v.modified=!0,v.length--}if(v.pushmod=!0,m.cbSet!=null){let M=this.mrca1,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=m;let Z=N;Z.next=M.head,M.head=Z,M.modified=!0,M.length++}if(m.body.cbSet!=null){let M=this.mrca1,N=m.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=M.head,M.head=S,M.modified=!0,M.length++}if(b.cbSet!=null){let M=this.mrca2,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=b;let Z=N;Z.next=M.head,M.head=Z,M.modified=!0,M.length++}if(b.body.cbSet!=null){let M=this.mrca2,N=b.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=M.head,M.head=S,M.modified=!0,M.length++}let w=m.body.compound,O=b.body.compound;for(;w!=O;){let M=w==null?0:w.depth,N=O==null?0:O.depth;if(M<N){if(O.cbSet!=null){let Z=this.mrca2,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=O;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}O=O.compound}else{if(w.cbSet!=null){let Z=this.mrca1,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=w;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}w=w.compound}}let E=this.mrca1.head;for(;E!=null;){let M=E.elt,N=this.mrca2.head;for(;N!=null;){let Z=N.elt,S=M.cbSet,A=Z.cbSet,F=S.manager,B=null,q=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;q!=null;){let L=q.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){B=L;break}q=q.next}if(B==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),B=L,S.cbpairs.add(B),A!=S&&A.cbpairs.add(B)}if(B.zip_listeners&&(B.zip_listeners=!1,B.__validate()),B.listeners.head==null){N=N.next;continue}let R=null,T=null,V=this.prelisteners;for(;V.head!=null;){let L=V.head;V.head=L.next;let D=L;D.elt=null,D.next=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=D,V.head==null&&(V.pushmod=!0),V.modified=!0,V.length--}V.pushmod=!0;let K=null,$=S.manager,Y=null,ee=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;ee!=null;){let L=ee.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){Y=L;break}ee=ee.next}if(Y==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),Y=L,S.cbpairs.add(Y),A!=S&&A.cbpairs.add(Y)}Y.zip_listeners&&(Y.zip_listeners=!1,Y.__validate());let J=Y.listeners.head;for(;J!=null;){let L=J.elt;if(L.event==5&&(L.itype&P)!=0){let D=this.prelisteners,I;j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?I=new j._zpp.util.ZNPNode_ZPP_InteractionListener:(I=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=I.next,I.next=null),I.elt=L;let U=I;K==null?(U.next=D.head,D.head=U):(U.next=K.next,K.next=U),D.pushmod=D.modified=!0,D.length++,K=U,k=k||!L.pure}J=J.next}if(this.prelisteners.head==null){N=N.next;continue}if(R=j._zpp.phys.ZPP_Interactor.get(M,Z),R==null&&(T=Wt.get(M,Z),this.add_callbackset(T)),R==null||(R.FLUIDstamp!=this.stamp||i)&&(R.FLUIDstate&4)==0){if(T!=null&&(R=T),R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7?(R.COLLISIONstamp=this.stamp,R.SENSORstamp=this.stamp,R.FLUIDstamp=this.stamp):R.FLUIDstamp=this.stamp,U=U.next}f.mutable=!0,f.wrap_position!=null&&(f.wrap_position.zpp_inner._immutable=!1);let L=f.active;f.active=!0;let D=!1;this.precb.zpp_inner.pre_arbiter=f,this.precb.zpp_inner.set=R;let I=this.prelisteners.head;for(;I!=null;){let U=I.elt;this.precb.zpp_inner.listener=U;let H=this.precb.zpp_inner,W=R.int1,ne=R.int2,re,se=U.options1,ie=W.cbTypes;if(se.nonemptyintersection(ie,se.includes)&&!se.nonemptyintersection(ie,se.excludes)){let oe=U.options2,he=ne.cbTypes;re=oe.nonemptyintersection(he,oe.includes)&&!oe.nonemptyintersection(he,oe.excludes)}else re=!1;re?(H.int1=W,H.int2=ne):(H.int1=ne,H.int2=W),this.precb.zpp_inner.pre_swapped=M!=this.precb.zpp_inner.int1;let ae=U.handlerp(this.precb);if(ae!=null){let oe;Q.PreFlag_ACCEPT==null&&(Q.internal=!0,Q.PreFlag_ACCEPT=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT?oe=5:(Q.PreFlag_ACCEPT_ONCE==null&&(Q.internal=!0,Q.PreFlag_ACCEPT_ONCE=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT_ONCE?oe=1:(Q.PreFlag_IGNORE==null&&(Q.internal=!0,Q.PreFlag_IGNORE=new j._nape.callbacks.PreFlag,Q.internal=!1),oe=ae==Q.PreFlag_IGNORE?6:2)),f.immState=oe}I=I.next}if(f.mutable=!1,f.wrap_position!=null&&(f.wrap_position.zpp_inner._immutable=!0),f.active=L,R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7&&(R.COLLISIONstate=f.immState,R.SENSORstate=f.immState),R.FLUIDstate=f.immState,U=U.next}}else R==null?(f.immState&4)==0&&(f.immState=1):f.immState=R.FLUIDstate;N=N.next}E=E.next}if(k&&(f.immState&4)==0){if(f.b1.type==2){let M=f.b1;M.world||(M.component.waket=this.stamp+(this.midstep?0:1),M.type==3&&(M.kinematicDelaySleep=!0),M.component.sleeping&&this.really_wake(M,!1))}if(f.b1.type==2){let M=f.b2;M.world||(M.component.waket=this.stamp+(this.midstep?0:1),M.type==3&&(M.kinematicDelaySleep=!0),M.component.sleeping&&this.really_wake(M,!1))}}}if((f.immState&1)!=0){if(f.b1.type==2&&f.b1.component.sleeping){let k=f.b1;k.world||(k.component.waket=this.stamp+(this.midstep?0:1),k.type==3&&(k.kinematicDelaySleep=!0),k.component.sleeping&&this.really_wake(k,!1))}if(f.b2.type==2&&f.b2.component.sleeping){let k=f.b2;k.world||(k.component.waket=this.stamp+(this.midstep?0:1),k.type==3&&(k.kinematicDelaySleep=!0),k.component.sleeping&&this.really_wake(k,!1))}}if(f.sleeping){f.sleeping=!1;let k=this.f_arbiters,m;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(m=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=m.next,m.next=null),m.elt=f;let b=m;b.next=k.head,k.head=b,k.modified=!0,k.length++}l=f}else if(_){let k=f;k.next=Pt.zpp_pool,Pt.zpp_pool=k,l=null}else l=f;else l=f}else if(c==1){let d=n?this.c_arbiters_true:this.c_arbiters_false,_;if(s==null){let m=null,C=(r.arbiters.length<a.arbiters.length?r:a).arbiters.head;for(;C!=null;){let v=C.elt;if(v.id==u.id&&v.di==x.id){m=v;break}C=C.next}_=m}else _=s;let f=_==null,z,P=!1;if(f)ut.zpp_pool==null?z=new ut:(z=ut.zpp_pool,ut.zpp_pool=z.next,z.next=null),z.stat=n;else if(_.colarb==null){_.cleared=!0;{let b=_.b1.arbiters,C=null,v=b.head,w=!1;for(;v!=null;){if(v.elt==_){let O,E;C==null?(O=b.head,E=O.next,b.head=E,b.head==null&&(b.pushmod=!0)):(O=C.next,E=O.next,C.next=E,E==null&&(b.pushmod=!0));let M=O;M.elt=null,M.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=M,b.modified=!0,b.length--,b.pushmod=!0,w=!0;break}C=v,v=v.next}}{let b=_.b2.arbiters,C=null,v=b.head,w=!1;for(;v!=null;){if(v.elt==_){let O,E;C==null?(O=b.head,E=O.next,b.head=E,b.head==null&&(b.pushmod=!0)):(O=C.next,E=O.next,C.next=E,E==null&&(b.pushmod=!0));let M=O;M.elt=null,M.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=M,b.modified=!0,b.length--,b.pushmod=!0,w=!0;break}C=v,v=v.next}}_.pair!=null&&(_.pair.arb=null,_.pair=null),_.active=!1,this.f_arbiters.modified=!0,ut.zpp_pool==null?z=new ut:(z=ut.zpp_pool,ut.zpp_pool=z.next,z.next=null),z.intchange=!0,z.stat=n,f=!0,P=!0}else z=_.colarb,y=u!=z.s1,z.stat!=n&&(z.stat=n,z.sleeping||((n?this.c_arbiters_false:this.c_arbiters_true).remove(z),d.add(z)));let k=1;if(f||z.stamp!=this.stamp||i)if(z.stamp=this.stamp,Ee.contactCollide(u,x,z,y)){if(f){let m=x.id;z.b1=e.body,z.ws1=e,z.b2=t.body,z.ws2=t,z.id=u.id,z.di=m;let b=z.b1.arbiters,C;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?C=new j._zpp.util.ZNPNode_ZPP_Arbiter:(C=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=C.next,C.next=null),C.elt=z;let v=C;v.next=b.head,b.head=v,b.modified=!0,b.length++;let w=z.b2.arbiters,O;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?O=new j._zpp.util.ZNPNode_ZPP_Arbiter:(O=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=O.next,O.next=null),O.elt=z;let E=O;E.next=w.head,w.head=E,w.modified=!0,w.length++,z.active=!0,z.present=0,z.cleared=!1,z.sleeping=!1,z.fresh=!1,z.presentable=!1,z.s1=e,z.s2=t,z.userdef_restitution||(z.s1.material.elasticity<=-1/0||z.s2.material.elasticity<=-1/0?z.restitution=0:z.s1.material.elasticity>=1/0||z.s2.material.elasticity>=1/0?z.restitution=1:z.restitution=(z.s1.material.elasticity+z.s2.material.elasticity)/2,z.restitution<0&&(z.restitution=0),z.restitution>1&&(z.restitution=1)),z.userdef_dyn_fric||(z.dyn_fric=Math.sqrt(z.s1.material.dynamicFriction*z.s2.material.dynamicFriction)),z.userdef_stat_fric||(z.stat_fric=Math.sqrt(z.s1.material.staticFriction*z.s2.material.staticFriction)),z.userdef_rfric||(z.rfric=Math.sqrt(z.s1.material.rollingFriction*z.s2.material.rollingFriction));let M;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?M=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(M=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=M.next,M.next=null),M.elt=z;let N=M;N.next=d.head,d.head=N,d.modified=!0,d.length++,z.fresh=!P}else z.fresh=z.up_stamp<this.stamp-1||z.endGenerated==this.stamp&&i;if(z.up_stamp=z.stamp,z.fresh||(z.immState&4)==0){z.immState=1;let m=!1,b=z.ws1.id>z.ws2.id?z.ws2:z.ws1,C=z.ws1.id>z.ws2.id?z.ws1:z.ws2,v=this.mrca1;for(;v.head!=null;){let N=v.head;v.head=N.next;let Z=N;Z.elt=null,Z.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z,v.head==null&&(v.pushmod=!0),v.modified=!0,v.length--}v.pushmod=!0;let w=this.mrca2;for(;w.head!=null;){let N=w.head;w.head=N.next;let Z=N;Z.elt=null,Z.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z,w.head==null&&(w.pushmod=!0),w.modified=!0,w.length--}if(w.pushmod=!0,b.cbSet!=null){let N=this.mrca1,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=b;let S=Z;S.next=N.head,N.head=S,N.modified=!0,N.length++}if(b.body.cbSet!=null){let N=this.mrca1,Z=b.body,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=Z;let A=S;A.next=N.head,N.head=A,N.modified=!0,N.length++}if(C.cbSet!=null){let N=this.mrca2,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=C;let S=Z;S.next=N.head,N.head=S,N.modified=!0,N.length++}if(C.body.cbSet!=null){let N=this.mrca2,Z=C.body,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=Z;let A=S;A.next=N.head,N.head=A,N.modified=!0,N.length++}let O=b.body.compound,E=C.body.compound;for(;O!=E;){let N=O==null?0:O.depth,Z=E==null?0:E.depth;if(N<Z){if(E.cbSet!=null){let S=this.mrca2,A;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?A=new j._zpp.util.ZNPNode_ZPP_Interactor:(A=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=A.next,A.next=null),A.elt=E;let F=A;F.next=S.head,S.head=F,S.modified=!0,S.length++}E=E.compound}else{if(O.cbSet!=null){let S=this.mrca1,A;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?A=new j._zpp.util.ZNPNode_ZPP_Interactor:(A=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=A.next,A.next=null),A.elt=O;let F=A;F.next=S.head,S.head=F,S.modified=!0,S.length++}O=O.compound}}let M=this.mrca1.head;for(;M!=null;){let N=M.elt,Z=this.mrca2.head;for(;Z!=null;){let S=Z.elt,A=N.cbSet,F=S.cbSet,B=A.manager,G=null,R=(A.cbpairs.length<F.cbpairs.length?A.cbpairs:F.cbpairs).head;for(;R!=null;){let D=R.elt;if(D.a==A&&D.b==F||D.a==F&&D.b==A){G=D;break}R=R.next}if(G==null){let D;Ne.zpp_pool==null?D=new Ne:(D=Ne.zpp_pool,Ne.zpp_pool=D.next,D.next=null),D.zip_listeners=!0,_t.setlt(A,F)?(D.a=A,D.b=F):(D.a=F,D.b=A),G=D,A.cbpairs.add(G),F!=A&&F.cbpairs.add(G)}if(G.zip_listeners&&(G.zip_listeners=!1,G.__validate()),G.listeners.head==null){Z=Z.next;continue}let T=null,V=null,K=this.prelisteners;for(;K.head!=null;){let D=K.head;K.head=D.next;let I=D;I.elt=null,I.next=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=I,K.head==null&&(K.pushmod=!0),K.modified=!0,K.length--}K.pushmod=!0;let $=null,Y=A.manager,X=null,J=(A.cbpairs.length<F.cbpairs.length?A.cbpairs:F.cbpairs).head;for(;J!=null;){let D=J.elt;if(D.a==A&&D.b==F||D.a==F&&D.b==A){X=D;break}J=J.next}if(X==null){let D;Ne.zpp_pool==null?D=new Ne:(D=Ne.zpp_pool,Ne.zpp_pool=D.next,D.next=null),D.zip_listeners=!0,_t.setlt(A,F)?(D.a=A,D.b=F):(D.a=F,D.b=A),X=D,A.cbpairs.add(X),F!=A&&F.cbpairs.add(X)}X.zip_listeners&&(X.zip_listeners=!1,X.__validate());let L=X.listeners.head;for(;L!=null;){let D=L.elt;if(D.event==5&&(D.itype&k)!=0){let I=this.prelisteners,U;j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?U=new j._zpp.util.ZNPNode_ZPP_InteractionListener:(U=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=U.next,U.next=null),U.elt=D;let H=U;$==null?(H.next=I.head,I.head=H):(H.next=$.next,$.next=H),I.pushmod=I.modified=!0,I.length++,$=H,m=m||!D.pure}L=L.next}if(this.prelisteners.head==null){Z=Z.next;continue}if(T=j._zpp.phys.ZPP_Interactor.get(N,S),T==null&&(V=Wt.get(N,S),this.add_callbackset(V)),T==null||(T.COLLISIONstamp!=this.stamp||i)&&(T.COLLISIONstate&4)==0){if(V!=null&&(T=V),T!=null){let ie=this.prelisteners.head;for(;ie!=null;)ie.elt.itype==7?(T.COLLISIONstamp=this.stamp,T.SENSORstamp=this.stamp,T.FLUIDstamp=this.stamp):T.COLLISIONstamp=this.stamp,ie=ie.next}z.mutable=!0,z.wrap_normal!=null&&(z.wrap_normal.zpp_inner._immutable=!1),z.wrap_contacts!=null&&(z.wrap_contacts.zpp_inner.immutable=!1);let D=z.active;z.active=!0;let I=!1,U=!0,H=null,W=null,ne=z.innards.next;z.hc2=!1;let re=z.contacts.next;for(;re!=null;){let ie=re;if(ie.stamp+j._nape.Config.arbiterExpirationDelay<z.stamp){let he=z.contacts,pe,ce;H==null?(pe=he.next,ce=pe.next,he.next=ce,he.next==null&&(he.pushmod=!0)):(pe=H.next,ce=pe.next,H.next=ce,ce==null&&(he.pushmod=!0)),pe._inuse=!1,he.modified=!0,he.length--,he.pushmod=!0,re=ce;let te=z.innards,ue,xe;W==null?(ue=te.next,xe=ue.next,te.next=xe,te.next==null&&(te.pushmod=!0)):(ue=W.next,xe=ue.next,W.next=xe,xe==null&&(te.pushmod=!0)),ue._inuse=!1,te.modified=!0,te.length--,te.pushmod=!0,ne=xe;let _e=ie;_e.arbiter=null,_e.next=we.zpp_pool,we.zpp_pool=_e;continue}let ae=ie.inner,oe=ie.active;ie.active=ie.stamp==z.stamp,ie.active&&(U?(U=!1,z.c1=ae,z.oc1=ie):(z.hc2=!0,z.c2=ae,z.oc2=ie)),oe!=ie.active&&(z.contacts.modified=!0),H=re,W=ne,ne=ne.next,re=re.next}if(z.hc2){if(z.hpc2=!0,z.oc1.posOnly){let ie=z.c1;z.c1=z.c2,z.c2=ie;let ae=z.oc1;z.oc1=z.oc2,z.oc2=ae,z.hc2=!1}else z.oc2.posOnly&&(z.hc2=!1);z.oc1.posOnly&&(U=!0)}else z.hpc2=!1;this.precb.zpp_inner.pre_arbiter=z,this.precb.zpp_inner.set=T;let se=this.prelisteners.head;for(;se!=null;){let ie=se.elt;this.precb.zpp_inner.listener=ie;let ae=this.precb.zpp_inner,oe=T.int1,he=T.int2,pe,ce=ie.options1,te=oe.cbTypes;if(ce.nonemptyintersection(te,ce.includes)&&!ce.nonemptyintersection(te,ce.excludes)){let xe=ie.options2,_e=he.cbTypes;pe=xe.nonemptyintersection(_e,xe.includes)&&!xe.nonemptyintersection(_e,xe.excludes)}else pe=!1;pe?(ae.int1=oe,ae.int2=he):(ae.int1=he,ae.int2=oe),this.precb.zpp_inner.pre_swapped=N!=this.precb.zpp_inner.int1;let ue=ie.handlerp(this.precb);if(ue!=null){let xe;Q.PreFlag_ACCEPT==null&&(Q.internal=!0,Q.PreFlag_ACCEPT=new j._nape.callbacks.PreFlag,Q.internal=!1),ue==Q.PreFlag_ACCEPT?xe=5:(Q.PreFlag_ACCEPT_ONCE==null&&(Q.internal=!0,Q.PreFlag_ACCEPT_ONCE=new j._nape.callbacks.PreFlag,Q.internal=!1),ue==Q.PreFlag_ACCEPT_ONCE?xe=1:(Q.PreFlag_IGNORE==null&&(Q.internal=!0,Q.PreFlag_IGNORE=new j._nape.callbacks.PreFlag,Q.internal=!1),xe=ue==Q.PreFlag_IGNORE?6:2)),z.immState=xe}se=se.next}if(z.mutable=!1,z.wrap_normal!=null&&(z.wrap_normal.zpp_inner._immutable=!0),z.wrap_contacts!=null&&(z.wrap_contacts.zpp_inner.immutable=!0),z.active=D,T!=null){let ie=this.prelisteners.head;for(;ie!=null;)ie.elt.itype==7?(T.COLLISIONstate=z.immState,T.SENSORstate=z.immState,T.FLUIDstate=z.immState):T.COLLISIONstate=z.immState,ie=ie.next}}else T==null?(z.immState&4)==0&&(z.immState=1):z.immState=T.COLLISIONstate;Z=Z.next}M=M.next}if(m&&(z.immState&4)==0){if(z.b1.type==2){let N=z.b1;N.world||(N.component.waket=this.stamp+(this.midstep?0:1),N.type==3&&(N.kinematicDelaySleep=!0),N.component.sleeping&&this.really_wake(N,!1))}if(z.b1.type==2){let N=z.b2;N.world||(N.component.waket=this.stamp+(this.midstep?0:1),N.type==3&&(N.kinematicDelaySleep=!0),N.component.sleeping&&this.really_wake(N,!1))}}}if((z.immState&1)!=0){if(z.b1.type==2&&z.b1.component.sleeping){let m=z.b1;m.world||(m.component.waket=this.stamp+(this.midstep?0:1),m.type==3&&(m.kinematicDelaySleep=!0),m.component.sleeping&&this.really_wake(m,!1))}if(z.b2.type==2&&z.b2.component.sleeping){let m=z.b2;m.world||(m.component.waket=this.stamp+(this.midstep?0:1),m.type==3&&(m.kinematicDelaySleep=!0),m.component.sleeping&&this.really_wake(m,!1))}}if(z.sleeping){z.sleeping=!1;let m;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(m=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=m.next,m.next=null),m.elt=z;let b=m;b.next=d.head,d.head=b,d.modified=!0,d.length++}l=z}else if(f){let m=z;m.userdef_dyn_fric=!1,m.userdef_stat_fric=!1,m.userdef_restitution=!1,m.userdef_rfric=!1,m.__ref_edge1=m.__ref_edge2=null,m.next=ut.zpp_pool,ut.zpp_pool=m,l=null}else l=z;else l=z}else{let d;if(s==null){let k=null,b=(r.arbiters.length<a.arbiters.length?r:a).arbiters.head;for(;b!=null;){let C=b.elt;if(C.id==u.id&&C.di==x.id){k=C;break}b=b.next}d=k}else d=s;let _=d==null,f,z=!1;if(_)Ot.zpp_pool==null?f=new Ot:(f=Ot.zpp_pool,Ot.zpp_pool=f.next,f.next=null);else if(d.sensorarb==null){d.cleared=!0;{let m=d.b1.arbiters,b=null,C=m.head,v=!1;for(;C!=null;){if(C.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=C,C=C.next}}{let m=d.b2.arbiters,b=null,C=m.head,v=!1;for(;C!=null;){if(C.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=C,C=C.next}}d.pair!=null&&(d.pair.arb=null,d.pair=null),d.active=!1,this.f_arbiters.modified=!0,Ot.zpp_pool==null?f=new Ot:(f=Ot.zpp_pool,Ot.zpp_pool=f.next,f.next=null),f.intchange=!0,_=!0,z=!0}else f=d.sensorarb;let P=2;if(_||f.stamp!=this.stamp||i)if(f.stamp=this.stamp,Ee.testCollide(u,x)){if(_){let k=x.id;f.b1=e.body,f.ws1=e,f.b2=t.body,f.ws2=t,f.id=u.id,f.di=k;let m=f.b1.arbiters,b;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?b=new j._zpp.util.ZNPNode_ZPP_Arbiter:(b=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=b.next,b.next=null),b.elt=f;let C=b;C.next=m.head,m.head=C,m.modified=!0,m.length++;let v=f.b2.arbiters,w;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?w=new j._zpp.util.ZNPNode_ZPP_Arbiter:(w=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=w.next,w.next=null),w.elt=f;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++,f.active=!0,f.present=0,f.cleared=!1,f.sleeping=!1,f.fresh=!1,f.presentable=!1;let E=this.s_arbiters,M;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?M=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(M=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=M.next,M.next=null),M.elt=f;let N=M;N.next=E.head,E.head=N,E.modified=!0,E.length++,f.fresh=!z}else f.fresh=f.up_stamp<this.stamp-1||f.endGenerated==this.stamp&&i;if(f.up_stamp=f.stamp,f.fresh||(f.immState&4)==0){f.immState=1;let k=!1,m=f.ws1.id>f.ws2.id?f.ws2:f.ws1,b=f.ws1.id>f.ws2.id?f.ws1:f.ws2,C=this.mrca1;for(;C.head!=null;){let M=C.head;C.head=M.next;let N=M;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,C.head==null&&(C.pushmod=!0),C.modified=!0,C.length--}C.pushmod=!0;let v=this.mrca2;for(;v.head!=null;){let M=v.head;v.head=M.next;let N=M;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,v.head==null&&(v.pushmod=!0),v.modified=!0,v.length--}if(v.pushmod=!0,m.cbSet!=null){let M=this.mrca1,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=m;let Z=N;Z.next=M.head,M.head=Z,M.modified=!0,M.length++}if(m.body.cbSet!=null){let M=this.mrca1,N=m.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=M.head,M.head=S,M.modified=!0,M.length++}if(b.cbSet!=null){let M=this.mrca2,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=b;let Z=N;Z.next=M.head,M.head=Z,M.modified=!0,M.length++}if(b.body.cbSet!=null){let M=this.mrca2,N=b.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=M.head,M.head=S,M.modified=!0,M.length++}let w=m.body.compound,O=b.body.compound;for(;w!=O;){let M=w==null?0:w.depth,N=O==null?0:O.depth;if(M<N){if(O.cbSet!=null){let Z=this.mrca2,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=O;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}O=O.compound}else{if(w.cbSet!=null){let Z=this.mrca1,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=w;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}w=w.compound}}let E=this.mrca1.head;for(;E!=null;){let M=E.elt,N=this.mrca2.head;for(;N!=null;){let Z=N.elt,S=M.cbSet,A=Z.cbSet,F=S.manager,B=null,q=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;q!=null;){let L=q.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){B=L;break}q=q.next}if(B==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),B=L,S.cbpairs.add(B),A!=S&&A.cbpairs.add(B)}if(B.zip_listeners&&(B.zip_listeners=!1,B.__validate()),B.listeners.head==null){N=N.next;continue}let R=null,T=null,V=this.prelisteners;for(;V.head!=null;){let L=V.head;V.head=L.next;let D=L;D.elt=null,D.next=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=D,V.head==null&&(V.pushmod=!0),V.modified=!0,V.length--}V.pushmod=!0;let K=null,$=S.manager,Y=null,ee=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;ee!=null;){let L=ee.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){Y=L;break}ee=ee.next}if(Y==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),Y=L,S.cbpairs.add(Y),A!=S&&A.cbpairs.add(Y)}Y.zip_listeners&&(Y.zip_listeners=!1,Y.__validate());let J=Y.listeners.head;for(;J!=null;){let L=J.elt;if(L.event==5&&(L.itype&P)!=0){let D=this.prelisteners,I;j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?I=new j._zpp.util.ZNPNode_ZPP_InteractionListener:(I=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=I.next,I.next=null),I.elt=L;let U=I;K==null?(U.next=D.head,D.head=U):(U.next=K.next,K.next=U),D.pushmod=D.modified=!0,D.length++,K=U,k=k||!L.pure}J=J.next}if(this.prelisteners.head==null){N=N.next;continue}if(R=j._zpp.phys.ZPP_Interactor.get(M,Z),R==null&&(T=Wt.get(M,Z),this.add_callbackset(T)),R==null||(R.SENSORstamp!=this.stamp||i)&&(R.SENSORstate&4)==0){if(T!=null&&(R=T),R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7?(R.COLLISIONstamp=this.stamp,R.SENSORstamp=this.stamp,R.FLUIDstamp=this.stamp):R.SENSORstamp=this.stamp,U=U.next}let L=f.active;f.active=!0;let D=!1;this.precb.zpp_inner.pre_arbiter=f,this.precb.zpp_inner.set=R;let I=this.prelisteners.head;for(;I!=null;){let U=I.elt;this.precb.zpp_inner.listener=U;let H=this.precb.zpp_inner,W=R.int1,ne=R.int2,re,se=U.options1,ie=W.cbTypes;if(se.nonemptyintersection(ie,se.includes)&&!se.nonemptyintersection(ie,se.excludes)){let oe=U.options2,he=ne.cbTypes;re=oe.nonemptyintersection(he,oe.includes)&&!oe.nonemptyintersection(he,oe.excludes)}else re=!1;re?(H.int1=W,H.int2=ne):(H.int1=ne,H.int2=W),this.precb.zpp_inner.pre_swapped=M!=this.precb.zpp_inner.int1;let ae=U.handlerp(this.precb);if(ae!=null){let oe;Q.PreFlag_ACCEPT==null&&(Q.internal=!0,Q.PreFlag_ACCEPT=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT?oe=5:(Q.PreFlag_ACCEPT_ONCE==null&&(Q.internal=!0,Q.PreFlag_ACCEPT_ONCE=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT_ONCE?oe=1:(Q.PreFlag_IGNORE==null&&(Q.internal=!0,Q.PreFlag_IGNORE=new j._nape.callbacks.PreFlag,Q.internal=!1),oe=ae==Q.PreFlag_IGNORE?6:2)),f.immState=oe}I=I.next}if(f.active=L,R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7?(R.COLLISIONstate=f.immState,R.SENSORstate=f.immState,R.FLUIDstate=f.immState):R.SENSORstate=f.immState,U=U.next}}else R==null?(f.immState&4)==0&&(f.immState=1):f.immState=R.SENSORstate;N=N.next}E=E.next}if(k&&(f.immState&4)==0){if(f.b1.type!=1){let M=f.b1;M.world||(M.component.waket=this.stamp+(this.midstep?0:1),M.type==3&&(M.kinematicDelaySleep=!0),M.component.sleeping&&this.really_wake(M,!1))}if(f.b2.type!=1){let M=f.b2;M.world||(M.component.waket=this.stamp+(this.midstep?0:1),M.type==3&&(M.kinematicDelaySleep=!0),M.component.sleeping&&this.really_wake(M,!1))}}}if(f.sleeping){f.sleeping=!1;let k=this.s_arbiters,m;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(m=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=m.next,m.next=null),m.elt=f;let b=m;b.next=k.head,k.head=b,k.modified=!0,k.length++}l=f}else if(_){let k=f;k.next=Ot.zpp_pool,Ot.zpp_pool=k,l=null}else l=f;else l=f}}return l}MRCA_chains(e,t){let n=this.mrca1;for(;n.head!=null;){let r=n.head;n.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,n.head==null&&(n.pushmod=!0),n.modified=!0,n.length--}n.pushmod=!0;let s=this.mrca2;for(;s.head!=null;){let r=s.head;s.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,s.head==null&&(s.pushmod=!0),s.modified=!0,s.length--}if(s.pushmod=!0,e.cbSet!=null){let r=this.mrca1,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=e;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(e.body.cbSet!=null){let r=this.mrca1,a=e.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}if(t.cbSet!=null){let r=this.mrca2,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=t;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(t.body.cbSet!=null){let r=this.mrca2,a=t.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}let i=e.body.compound,l=t.body.compound;for(;i!=l;){let r=i==null?0:i.depth,a=l==null?0:l.depth;if(r<a){if(l.cbSet!=null){let o=this.mrca2,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=l;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}l=l.compound}else{if(i.cbSet!=null){let o=this.mrca1,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=i;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}i=i.compound}}}inlined_MRCA_chains(e,t){let n=this.mrca1;for(;n.head!=null;){let r=n.head;n.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,n.head==null&&(n.pushmod=!0),n.modified=!0,n.length--}n.pushmod=!0;let s=this.mrca2;for(;s.head!=null;){let r=s.head;s.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,s.head==null&&(s.pushmod=!0),s.modified=!0,s.length--}if(s.pushmod=!0,e.cbSet!=null){let r=this.mrca1,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=e;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(e.body.cbSet!=null){let r=this.mrca1,a=e.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}if(t.cbSet!=null){let r=this.mrca2,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=t;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(t.body.cbSet!=null){let r=this.mrca2,a=t.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}let i=e.body.compound,l=t.body.compound;for(;i!=l;){let r=i==null?0:i.depth,a=l==null?0:l.depth;if(r<a){if(l.cbSet!=null){let o=this.mrca2,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=l;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}l=l.compound}else{if(i.cbSet!=null){let o=this.mrca1,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=i;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}i=i.compound}}}};j._zpp=null,j._nape=null;var ci=j;var Tn=class{constructor(){this.aabb=null;this.shape=null;this.prev=null;this.next=null}free(){this.prev=null,this.shape=null,this.aabb=null}alloc(){}gt(e){return this.aabb.minx>e.aabb.minx}};Tn.zpp_pool=null;var tn=class tn extends ei{constructor(t){super();this.failed=null;this.list=null;this.space=t,this.is_sweep=!0,this.sweep=this}__insert(t){let n;Tn.zpp_pool==null?n=new Tn:(n=Tn.zpp_pool,Tn.zpp_pool=n.next,n.next=null),t.sweep=n,n.shape=t,n.aabb=t.aabb,n.next=this.list,this.list!=null&&(this.list.prev=n),this.list=n}__remove(t){let n=t.sweep;n.prev==null?this.list=n.next:n.prev.next=n.next,n.next!=null&&(n.next.prev=n.prev),t.sweep=null;let s=n;s.prev=null,s.shape=null,s.aabb=null,s.next=Tn.zpp_pool,Tn.zpp_pool=s}__sync(t){if(!this.space.continuous&&t.zip_aabb&&t.body!=null)if(t.zip_aabb=!1,t.type==0){let n=t.circle;if(n.zip_worldCOM&&n.body!=null){if(n.zip_worldCOM=!1,n.zip_localCOM){if(n.zip_localCOM=!1,n.type==1){let r=n.polygon;if(r.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(r.lverts.next.next==null)r.localCOMx=r.lverts.next.x,r.localCOMy=r.lverts.next.y;else if(r.lverts.next.next.next==null){r.localCOMx=r.lverts.next.x,r.localCOMy=r.lverts.next.y;let a=1;r.localCOMx+=r.lverts.next.next.x*a,r.localCOMy+=r.lverts.next.next.y*a;let o=.5;r.localCOMx*=o,r.localCOMy*=o}else{r.localCOMx=0,r.localCOMy=0;let a=0,o=r.lverts.next,p=o;o=o.next;let c=o;for(o=o.next;o!=null;){let _=o;a+=c.x*(_.y-p.y);let f=_.y*c.x-_.x*c.y;r.localCOMx+=(c.x+_.x)*f,r.localCOMy+=(c.y+_.y)*f,p=c,c=_,o=o.next}o=r.lverts.next;let h=o;a+=c.x*(h.y-p.y);let u=h.y*c.x-h.x*c.y;r.localCOMx+=(c.x+h.x)*u,r.localCOMy+=(c.y+h.y)*u,p=c,c=h,o=o.next;let x=o;a+=c.x*(x.y-p.y);let y=x.y*c.x-x.x*c.y;r.localCOMx+=(c.x+x.x)*y,r.localCOMy+=(c.y+x.y)*y,a=1/(3*a);let d=a;r.localCOMx*=d,r.localCOMy*=d}}n.wrap_localCOM!=null&&(n.wrap_localCOM.zpp_inner.x=n.localCOMx,n.wrap_localCOM.zpp_inner.y=n.localCOMy)}let l=n.body;l.zip_axis&&(l.zip_axis=!1,l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot)),n.worldCOMx=n.body.posx+(n.body.axisy*n.localCOMx-n.body.axisx*n.localCOMy),n.worldCOMy=n.body.posy+(n.localCOMx*n.body.axisx+n.localCOMy*n.body.axisy)}let s=n.radius,i=n.radius;n.aabb.minx=n.worldCOMx-s,n.aabb.miny=n.worldCOMy-i,n.aabb.maxx=n.worldCOMx+s,n.aabb.maxy=n.worldCOMy+i}else{let n=t.polygon;if(n.zip_gverts&&n.body!=null){n.zip_gverts=!1,n.validate_lverts();let l=n.body;l.zip_axis&&(l.zip_axis=!1,l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot));let r=n.lverts.next,a=n.gverts.next;for(;a!=null;){let o=a,p=r;r=r.next,o.x=n.body.posx+(n.body.axisy*p.x-n.body.axisx*p.y),o.y=n.body.posy+(p.x*n.body.axisx+p.y*n.body.axisy),a=a.next}}if(n.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let s=n.gverts.next;n.aabb.minx=s.x,n.aabb.miny=s.y,n.aabb.maxx=s.x,n.aabb.maxy=s.y;let i=n.gverts.next.next;for(;i!=null;){let l=i;l.x<n.aabb.minx&&(n.aabb.minx=l.x),l.x>n.aabb.maxx&&(n.aabb.maxx=l.x),l.y<n.aabb.miny&&(n.aabb.miny=l.y),l.y>n.aabb.maxy&&(n.aabb.maxy=l.y),i=i.next}}}sync_broadphase(){if(this.space.validation(),this.list!=null){let t=this.list.next;for(;t!=null;){let n=t.next,s=t.prev;if(s!=null&&t.aabb.minx>s.aabb.minx){t=n;continue}for(;s.prev!=null&&s.prev.aabb.minx>t.aabb.minx;)s=s.prev;let i=t.prev;i.next=t.next,t.next!=null&&(t.next.prev=i),s.prev==null?(t.prev=null,this.list=t,t.next=s,s.prev=t):(t.prev=s.prev,s.prev=t,t.prev.next=t,t.next=s),t=n}}}sync_broadphase_fast(){let t=this.list.next;for(;t!=null;){let n=t.next,s=t.prev;if(s!=null&&t.aabb.minx>s.aabb.minx){t=n;continue}for(;s.prev!=null&&s.prev.aabb.minx>t.aabb.minx;)s=s.prev;let i=t.prev;i.next=t.next,t.next!=null&&(t.next.prev=i),s.prev==null?(t.prev=null,this.list=t,t.next=s,s.prev=t):(t.prev=s.prev,s.prev=t,t.prev.next=t,t.next=s),t=n}}broadphase(t,n){if(this.list!=null){let s=this.list.next;for(;s!=null;){let l=s.next,r=s.prev;if(r!=null&&s.aabb.minx>r.aabb.minx){s=l;continue}for(;r.prev!=null&&r.prev.aabb.minx>s.aabb.minx;)r=r.prev;let a=s.prev;a.next=s.next,s.next!=null&&(s.next.prev=a),r.prev==null?(s.prev=null,this.list=s,s.next=r,r.prev=s):(s.prev=r.prev,r.prev=s,s.prev.next=s,s.next=r),s=l}let i=this.list;for(;i!=null;){let l=i.next,r=i.shape,a=r.body,o=i.aabb.maxx;for(;l!=null&&!(l.aabb.minx>o);){let p=l.shape,c=p.body;if(c==a){l=l.next;continue}if(a.type==1&&c.type==1){l=l.next;continue}if(a.component.sleeping&&c.component.sleeping){l=l.next;continue}let h=r.aabb,u=p.aabb;u.miny>h.maxy||h.miny>u.maxy||(n?t.narrowPhase(r,p,a.type!=2||c.type!=2,null,!1):t.continuousEvent(r,p,a.type!=2||c.type!=2,null,!1)),l=l.next}i=i.next}}}clear(){for(;this.list!=null;)this.list.shape.removedFromSpace(),this.__remove(this.list.shape)}shapesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new tn._nape.shape.ShapeList,o=this.list;for(;o!=null&&o.aabb.minx>t;)o=o.next;for(;o!=null&&o.aabb.minx<=t;){if(o.aabb.maxx>=t&&o.aabb.miny<=n&&o.aabb.maxy>=n){let c=o.shape,h;if(s!=null){let u=c.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(c.type==0?Ee.circleContains(c.circle,r)&&a.push(c.outer):Ee.polyContains(c.polygon,r)&&a.push(c.outer))}o=o.next}let p=r;return p.outer!=null&&(p.outer.zpp_inner=null,p.outer=null),p._isimmutable=null,p._validate=null,p._invalidate=null,p.next=le.zpp_pool,le.zpp_pool=p,a}bodiesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new tn._nape.phys.BodyList,o=this.list;for(;o!=null&&o.aabb.minx>t;)o=o.next;for(;o!=null&&o.aabb.minx<=t;){if(o.aabb.maxx>=t&&o.aabb.miny<=n&&o.aabb.maxy>=n){let c=o.shape,h=c.body.outer;if(!a.has(h)){let u;if(s!=null){let x=c.filter;u=(x.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(c.type==0?Ee.circleContains(c.circle,r)&&a.push(h):Ee.polyContains(c.polygon,r)&&a.push(h))}}o=o.next}let p=r;return p.outer!=null&&(p.outer.zpp_inner=null,p.outer=null),p._isimmutable=null,p._validate=null,p._invalidate=null,p.next=le.zpp_pool,le.zpp_pool=p,a}shapesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new tn._nape.shape.ShapeList,o=this.list;for(;o!=null&&o.aabb.maxx<r.minx;)o=o.next;for(;o!=null&&o.aabb.minx<=r.maxx;){let p=o.shape,c;if(i!=null){let h=p.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;if(c)if(n)if(s)Ee.containTest(this.aabbShape.zpp_inner,p)&&a.push(p.outer);else{let h=o.aabb;if(h.minx>=r.minx&&h.miny>=r.miny&&h.maxx<=r.maxx&&h.maxy<=r.maxy)a.push(p.outer);else{let u=o.aabb;r.miny<=u.maxy&&u.miny<=r.maxy&&r.minx<=u.maxx&&u.minx<=r.maxx&&Ee.testCollide_safe(p,this.aabbShape.zpp_inner)&&a.push(p.outer)}}else{let h;if(s){let u=o.aabb;h=u.minx>=r.minx&&u.miny>=r.miny&&u.maxx<=r.maxx&&u.maxy<=r.maxy}else{let u=o.aabb;h=r.miny<=u.maxy&&u.miny<=r.maxy&&r.minx<=u.maxx&&u.minx<=r.maxx}h&&a.push(p.outer)}o=o.next}return a}bodiesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new tn._nape.phys.BodyList;this.failed==null&&(this.failed=new tn._nape.phys.BodyList);let o=this.list;for(;o!=null&&o.aabb.maxx<r.minx;)o=o.next;for(;o!=null&&o.aabb.minx<=r.maxx;){let p=o.shape,c=p.body.outer,h=o.aabb;if(r.miny<=h.maxy&&h.miny<=r.maxy&&r.minx<=h.maxx&&h.minx<=r.maxx){let u;if(i!=null){let x=p.filter;u=(x.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(n)if(s){if(!this.failed.has(c)){let x=Ee.containTest(this.aabbShape.zpp_inner,p);!a.has(c)&&x?a.push(c):x||(a.remove(c),this.failed.push(c))}}else!a.has(c)&&Ee.testCollide_safe(p,this.aabbShape.zpp_inner)&&a.push(c);else if(s){if(!this.failed.has(c)){let x=p.aabb,y=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy;!a.has(c)&&y?a.push(c):y||(a.remove(c),this.failed.push(c))}}else{let x;if(a.has(c))x=!1;else{let y=p.aabb;x=y.minx>=r.minx&&y.miny>=r.miny&&y.maxx<=r.maxx&&y.maxy<=r.maxy}x&&a.push(c)}}o=o.next}return this.failed.clear(),a}shapesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new tn._nape.shape.ShapeList,p=this.list;for(;p!=null&&p.aabb.maxx<a.minx;)p=p.next;for(;p!=null&&p.aabb.minx<=a.maxx;){let c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx){let h=p.shape,u;if(l!=null){let x=h.filter;u=(x.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(i?Ee.containTest(this.circShape.zpp_inner,h)&&o.push(h.outer):Ee.testCollide_safe(h,this.circShape.zpp_inner)&&o.push(h.outer))}p=p.next}return o}bodiesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new tn._nape.phys.BodyList;this.failed==null&&(this.failed=new tn._nape.phys.BodyList);let p=this.list;for(;p!=null&&p.aabb.maxx<a.minx;)p=p.next;for(;p!=null&&p.aabb.minx<=a.maxx;){let c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx){let h=p.shape,u=h.body.outer,x;if(l!=null){let y=h.filter;x=(y.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&y.collisionGroup)!=0}else x=!0;if(x)if(i){if(!this.failed.has(u)){let y=Ee.containTest(this.circShape.zpp_inner,h);!o.has(u)&&y?o.push(u):y||(o.remove(u),this.failed.push(u))}}else!o.has(u)&&Ee.testCollide_safe(h,this.circShape.zpp_inner)&&o.push(u)}p=p.next}return this.failed.clear(),o}shapesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new tn._nape.shape.ShapeList,a=this.list;for(;a!=null&&a.aabb.maxx<l.minx;)a=a.next;for(;a!=null&&a.aabb.minx<=l.maxx;){let o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx){let p=a.shape,c;if(s!=null){let h=p.filter;c=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else c=!0;c&&(n?Ee.containTest(t,p)&&r.push(p.outer):Ee.testCollide_safe(p,t)&&r.push(p.outer))}a=a.next}return r}bodiesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new tn._nape.phys.BodyList;this.failed==null&&(this.failed=new tn._nape.phys.BodyList);let a=this.list;for(;a!=null&&a.aabb.maxx<l.minx;)a=a.next;for(;a!=null&&a.aabb.minx<=l.maxx;){let o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx){let p=a.shape,c=p.body.outer,h;if(s!=null){let u=p.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;if(h)if(n){if(!this.failed.has(c)){let u=Ee.containTest(t,p);!r.has(c)&&u?r.push(c):u||(r.remove(c),this.failed.push(c))}}else!r.has(c)&&Ee.testCollide_safe(t,p)&&r.push(c)}a=a.next}return this.failed.clear(),r}rayCast(t,n,s){this.sync_broadphase(),t.validate_dir();let i=t.rayAABB(),l=t.maxdist,r=null;if(t.dirx==0){let o=this.list;for(;o!=null&&o.aabb.minx<=i.minx;){let p,c=o.aabb;if(i.miny<=c.maxy&&c.miny<=i.maxy&&i.minx<=c.maxx&&c.minx<=i.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;if(p){let h=t.aabbsect(o.aabb);if(h>=0&&h<l){let u=o.shape.type==0?t.circlesect(o.shape.circle,n,l):t.polysect(o.shape.polygon,n,l);if(u!=null){if(u.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(l=u.zpp_inner.toiDistance,r!=null){if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");r.zpp_inner.free()}r=u}}}o=o.next}}else if(t.dirx<0){let o=this.list,p=null;for(;o!=null&&o.aabb.minx<=i.maxx;)p=o,o=o.next;for(o=p;o!=null;){let c,h=o.aabb;if(i.miny<=h.maxy&&h.miny<=i.maxy&&i.minx<=h.maxx&&h.minx<=i.maxx)if(s!=null){let u=o.shape.filter;c=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else c=!0;else c=!1;if(c){let u=t.aabbsect(o.aabb);if(u>=0&&u<l){let x=o.shape.type==0?t.circlesect(o.shape.circle,n,l):t.polysect(o.shape.polygon,n,l);if(x!=null){if(x.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(l=x.zpp_inner.toiDistance,r!=null){if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");r.zpp_inner.free()}r=x}}}o=o.prev}}else{let o=this.list;for(;o!=null&&o.aabb.minx<=i.maxx&&o.aabb.minx<t.originx+t.dirx*l;){let p,c=o.aabb;if(i.miny<=c.maxy&&c.miny<=i.maxy&&i.minx<=c.maxx&&c.minx<=i.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;if(p){let h=t.aabbsect(o.aabb);if(h>=0&&h<l){let u=o.shape.type==0?t.circlesect(o.shape.circle,n,l):t.polysect(o.shape.polygon,n,l);if(u!=null){if(u.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(l=u.zpp_inner.toiDistance,r!=null){if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");r.zpp_inner.free()}r=u}}}o=o.next}}let a=i;return a.outer!=null&&(a.outer.zpp_inner=null,a.outer=null),a.wrap_min=a.wrap_max=null,a._invalidate=null,a._validate=null,a.next=fe.zpp_pool,fe.zpp_pool=a,r}rayMultiCast(t,n,s,i){this.sync_broadphase(),t.validate_dir();let l=t.rayAABB(),r=i??new tn._nape.geom.RayResultList;if(t.dirx==0){let o=this.list;for(;o!=null&&o.aabb.minx<=l.minx;){let p,c=o.aabb;if(l.miny<=c.maxy&&c.miny<=l.maxy&&l.minx<=c.maxx&&c.minx<=l.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;p&&t.aabbsect(o.aabb)>=0&&(o.shape.type==0?t.circlesect2(o.shape.circle,n,r):t.polysect2(o.shape.polygon,n,r)),o=o.next}}else if(t.dirx<0){let o=this.list,p=null;for(;o!=null&&o.aabb.minx<=l.maxx;)p=o,o=o.next;for(o=p;o!=null;){let c,h=o.aabb;if(l.miny<=h.maxy&&h.miny<=l.maxy&&l.minx<=h.maxx&&h.minx<=l.maxx)if(s!=null){let u=o.shape.filter;c=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else c=!0;else c=!1;c&&t.aabbsect(o.aabb)>=0&&(o.shape.type==0?t.circlesect2(o.shape.circle,n,r):t.polysect2(o.shape.polygon,n,r)),o=o.prev}}else{let o=this.list;for(;o!=null&&o.aabb.minx<=l.maxx;){let p,c=o.aabb;if(l.miny<=c.maxy&&c.miny<=l.maxy&&l.minx<=c.maxx&&c.minx<=l.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;p&&t.aabbsect(o.aabb)>=0&&(o.shape.type==0?t.circlesect2(o.shape.circle,n,r):t.polysect2(o.shape.polygon,n,r)),o=o.next}}let a=l;return a.outer!=null&&(a.outer.zpp_inner=null,a.outer=null),a.wrap_min=a.wrap_max=null,a._invalidate=null,a._validate=null,a.next=fe.zpp_pool,fe.zpp_pool=a,r}};tn._zpp=null,tn._nape=null;var Ms=tn;function Yl(){let g={},e={};return g.callbacks={},g.constraint={},g.dynamics={},g.geom={},g.phys={},g.shape={},g.space={},g.util={},e.ZPP_Const=Rn,e.ZPP_ID=_n,e.callbacks||(e.callbacks={}),Tt._nape=g,Tt._zpp=e,e.callbacks.ZPP_Callback=Tt,_t._zpp=e,e.callbacks.ZPP_CbSet=_t,Ne._zpp=e,e.callbacks.ZPP_CbSetPair=Ne,e.util||(e.util={}),Kl(e),an._zpp=e,e.callbacks.ZPP_CbType=an,e.util.ZPP_Flags=Q,Lt._nape=g,Lt._zpp=e,e.callbacks.ZPP_Listener=Lt,e.callbacks.ZPP_BodyListener=al,e.callbacks.ZPP_ConstraintListener=pl,e.callbacks.ZPP_InteractionListener=cl,Ps._nape=g,Ps._zpp=e,e.callbacks.ZPP_OptionType=Ps,e.constraint||(e.constraint={}),Me._nape=g,Me._zpp=e,e.constraint.ZPP_Constraint=Me,e.constraint.ZPP_AngleJoint=Je,e.constraint.ZPP_CopyHelper=Jn,e.constraint.ZPP_DistanceJoint=_i,e.constraint.ZPP_LineJoint=yi,e.constraint.ZPP_MotorJoint=mi,e.constraint.ZPP_PivotJoint=fi,e.constraint.ZPP_PulleyJoint=bi,e.constraint.ZPP_UserConstraint=hl,e.constraint.ZPP_UserBody=ws,e.constraint.ZPP_WeldJoint=zi,e.dynamics||(e.dynamics={}),Ie._nape=g,Ie._zpp=e,e.dynamics.ZPP_Arbiter=Ie,e.dynamics.ZPP_SensorArbiter=Ot,Pt._nape=g,Pt._zpp=e,e.dynamics.ZPP_FluidArbiter=Pt,ut._nape=g,ut._zpp=e,e.dynamics.ZPP_ColArbiter=ut,e.dynamics.ZPP_IContact=Pi,we._nape=g,we._zpp=e,e.dynamics.ZPP_Contact=we,st._nape=g,st._zpp=e,e.dynamics.ZPP_InteractionFilter=st,Rs._zpp=e,e.dynamics.ZPP_InteractionGroup=Rs,Xn._nape=g,Xn._zpp=e,e.dynamics.ZPP_SpaceArbiterList=Xn,e.geom||(e.geom={}),fe._nape=g,fe._zpp=e,e.geom.ZPP_AABB=fe,e.geom.ZPP_Collide=Ee,e.geom.ZPP_Convex=ul,e.geom.ZPP_ConvexRayResult=mn,e.geom.ZPP_CutVert=Qe,e.geom.ZPP_CutInt=lt,e.geom.ZPP_Cutter=xl,e.geom.ZPP_Geom=vs,e.geom.ZPP_GeomVert=ge,ge._createVec2Fn=function(){return new g.geom.Vec2},e.geom.ZPP_GeomPoly=dl,e.geom.ZPP_MarchSpan=In,e.geom.ZPP_MarchPair=jn,Gs._init(e,g),e.geom.ZPP_MarchingSquares=Gs,Js._nape=g,e.geom.ZPP_Mat23=Js,e.geom.ZPP_MatMN=Ri,e.geom.ZPP_Monotone=_l,e.geom.ZPP_PartitionVertex=Ge,e.geom.ZPP_PartitionedPoly=Gi,e.geom.ZPP_Ray=yl,e.geom.ZPP_SimpleVert=ke,e.geom.ZPP_SimpleSeg=Vt,e.geom.ZPP_SimpleEvent=Ce,e.geom.ZPP_SimpleSweep=Wi,e.geom.ZPP_Simple=ml,e.geom.ZPP_SimplifyV=vn,e.geom.ZPP_SimplifyP=Le,e.geom.ZPP_Simplify=fl,e.geom.ZPP_ToiEvent=qs,e.geom.ZPP_SweepDistance=gn,e.geom.ZPP_PartitionPair=St,e.geom.ZPP_Triangular=bl,e.geom.ZPP_Vec2=le,ri._zpp=e,e.geom.ZPP_Vec3=ri,e.geom.ZPP_VecMath=zl,e.phys||(e.phys={}),e.phys.ZPP_Interactor=Ut,Ut._init(e,g),Cn._init(e,g),e.phys.ZPP_Body=Cn,qn._nape=g,qn._zpp=e,qn._init(),e.phys.ZPP_Compound=qn,Mn._nape=g,Mn._zpp=e,e.phys.ZPP_FluidProperties=Mn,Oe._nape=g,Oe._zpp=e,e.phys.ZPP_Material=Oe,e.shape||(e.shape={}),ai._nape=g,ai._zpp=e,ai._init(),e.shape.ZPP_Shape=ai,Hn._nape=g,Hn._zpp=e,Hn._init(),e.shape.ZPP_Circle=Hn,ot._nape=g,ot._zpp=e,e.shape.ZPP_Edge=ot,Qn._nape=g,Qn._zpp=e,Qn._init(),e.shape.ZPP_Polygon=Qn,$n._nape=g,$n._zpp=e,$n._init(),e.shape.ZPP_Capsule=$n,e.space||(e.space={}),ei._zpp=e,ei._nape=g,e.space.ZPP_Broadphase=ei,e.space.ZPP_AABBNode=Ae,e.space.ZPP_AABBPair=tt,e.space.ZPP_AABBTree=$e,Cs._zpp=e,Cs._nape=g,e.space.ZPP_DynAABBPhase=Cs,xt._zpp=e,e.space.ZPP_Island=xt,e.space.ZPP_Component=Ws,Wt._zpp=e,e.space.ZPP_CallbackSet=Wt,Xi._zpp=e,e.space.ZPP_CbSetManager=Xi,ci._zpp=e,ci._nape=g,e.space.ZPP_Space=ci,e.space.ZPP_SweepData=Tn,Ms._zpp=e,Ms._nape=g,e.space.ZPP_SweepPhase=Ms,e.util.ZNPArray2_Float=xs,e.util.ZNPArray2_ZPP_GeomVert=ds,e.util.ZNPArray2_ZPP_MarchPair=_s,e.util.Hashable2_Boolfalse=Te,e.util.FastHash2_Hashable2_Boolfalse=Bi,e.util.ZPP_Math=ol,e.util.ZPP_PubPool=ye,e.callbacks.ZPP_InteractionListener._initStatics(e),e.geom.ZPP_Collide._initStatics(e),e.space.ZPP_AABBTree._initStatics(),g.__zpp=e,g}var Pl;function me(){return Pl||(Pl=Yl()),Pl}var Xl=!1;function Hl(){if(Xl)return;let g=Pl;if(!g?.callbacks?.CbEvent||!g?.callbacks?.CbType||!g?.callbacks?.ListenerType||!g?.dynamics?.ArbiterType||!g?.phys?.BodyType||!g?.shape?.ShapeType)return;Xl=!0;let e=g.__zpp;e.callbacks.ZPP_CbType._initEnums(g),e.callbacks.ZPP_Listener._initEnums(g,e.util.ZPP_Flags),e.dynamics.ZPP_Arbiter._initEnums(g,e.util.ZPP_Flags),e.phys.ZPP_Body._initEnums(g,e.util.ZPP_Flags),e.shape.ZPP_Shape._initEnums(g,e.util.ZPP_Flags)}var Ql=new WeakMap;function Ze(g,e){if(!g)return null;let t=Ql.get(g);return t||(t=e(g),Ql.set(g,t)),t}var je=class g{constructor(e=0,t=0){this.zpp_pool=null;this.zpp_disp=!1;if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let n;le.zpp_pool==null?n=new le:(n=le.zpp_pool,le.zpp_pool=n.next,n.next=null),n.weak=!1,n._immutable=!1,n.x=e,n.y=t,this.zpp_inner=n,n.outer=this}get _inner(){return this}_checkDisposed(){if(this.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!")}_checkImmutable(){this.zpp_inner.immutable()}_validate(){this.zpp_inner.validate()}_invalidate(){this.zpp_inner.invalidate()}static _disposeWeak(e){e.zpp_inner.weak&&e.dispose()}_setXY(e,t){if(this._checkDisposed(),this._checkImmutable(),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");this._validate(),(this.zpp_inner.x!==e||this.zpp_inner.y!==t)&&(this.zpp_inner.x=e,this.zpp_inner.y=t,this._invalidate())}static _poolGet(e,t,n){let s;if(ye.poolVec2==null?s=new g:(s=ye.poolVec2,ye.poolVec2=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s===ye.nextVec2&&(ye.nextVec2=null)),s.zpp_inner==null){let i;le.zpp_pool==null?i=new le:(i=le.zpp_pool,le.zpp_pool=i.next,i.next=null),i.weak=!1,i._immutable=!1,i.x=e,i.y=t,s.zpp_inner=i,i.outer=s}else s.zpp_inner.immutable(),s.zpp_inner.validate(),(s.zpp_inner.x!==e||s.zpp_inner.y!==t)&&(s.zpp_inner.x=e,s.zpp_inner.y=t,s.zpp_inner.invalidate());return s.zpp_inner.weak=n,s}static _wrap(e){return e instanceof g?e:e?e instanceof le?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,n.zpp_pool=null,n.zpp_disp=!1,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}static get(e=0,t=0,n=!1){if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");return g._poolGet(e,t,n)}static weak(e=0,t=0){if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");return g._poolGet(e,t,!0)}static fromPolar(e,t,n=!1){if(e!==e)throw new Error("Error: Vec2::length cannot be NaN");if(t!==t)throw new Error("Error: Vec2::angle cannot be NaN");let s=e*Math.cos(t),i=e*Math.sin(t);return g._poolGet(s,i,n)}static fromAngle(e,t=!1){return g.fromPolar(1,e,t)}static lerp(e,t,n,s=!1){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null)throw new Error("Error: Cannot lerp with null Vec2");if(n!==n)throw new Error("Error: Cannot lerp with NaN t");e.zpp_inner.validate(),t.zpp_inner.validate();let i=e.zpp_inner.x+n*(t.zpp_inner.x-e.zpp_inner.x),l=e.zpp_inner.y+n*(t.zpp_inner.y-e.zpp_inner.y),r=g._poolGet(i,l,s);return g._disposeWeak(e),g._disposeWeak(t),r}static eq(e,t,n=0){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null){let r=e==null&&t==null;return e!=null&&g._disposeWeak(e),t!=null&&g._disposeWeak(t),r}e.zpp_inner.validate(),t.zpp_inner.validate();let s=e.zpp_inner.x-t.zpp_inner.x,i=e.zpp_inner.y-t.zpp_inner.y,l=(s<0?-s:s)<=n&&(i<0?-i:i)<=n;return g._disposeWeak(e),g._disposeWeak(t),l}static dsq(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null)throw new Error("Error: Cannot compute squared distance between null Vec2");e.zpp_inner.validate();let n=e.zpp_inner.x,s=e.zpp_inner.y;t.zpp_inner.validate();let i=t.zpp_inner.x,l=t.zpp_inner.y,r=n-i,a=s-l,o=r*r+a*a;return g._disposeWeak(e),g._disposeWeak(t),o}static distance(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null)throw new Error("Error: Cannot compute squared distance between null Vec2");e.zpp_inner.validate();let n=e.zpp_inner.x,s=e.zpp_inner.y;t.zpp_inner.validate();let i=t.zpp_inner.x,l=t.zpp_inner.y,r=n-i,a=s-l,o=Math.sqrt(r*r+a*a);return g._disposeWeak(e),g._disposeWeak(t),o}get x(){return this._checkDisposed(),this._validate(),this.zpp_inner.x}set x(e){if(this._checkDisposed(),this._checkImmutable(),this._validate(),this.zpp_inner.x!==e){if(e!==e)throw new Error("Error: Vec2::x cannot be NaN");this.zpp_inner.x=e,this._invalidate()}}get y(){return this._checkDisposed(),this._validate(),this.zpp_inner.y}set y(e){if(this._checkDisposed(),this._checkImmutable(),this._validate(),this.zpp_inner.y!==e){if(e!==e)throw new Error("Error: Vec2::y cannot be NaN");this.zpp_inner.y=e,this._invalidate()}}get length(){this._checkDisposed(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y;return Math.sqrt(e*e+t*t)}set length(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Vec2::length cannot be NaN");this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y,s=t*t+n*n;if(s===0)throw new Error("Error: Cannot set length of a zero vector");let i=e/Math.sqrt(s);this._setXY(t*i,n*i),this._invalidate()}get angle(){this._checkDisposed(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y;return e===t&&e===0?0:Math.atan2(t,e)}set angle(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Vec2::angle cannot be NaN");this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y,s=Math.sqrt(t*t+n*n),i=s*Math.cos(e),l=s*Math.sin(e);this._setXY(i,l)}lsq(){this._checkDisposed(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y;return e*e+t*t}set(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),e==null)throw new Error("Error: Cannot assign null Vec2");e.zpp_inner.validate();let t=e.zpp_inner.x,n=e.zpp_inner.y;return this._setXY(t,n),g._disposeWeak(e),this}setxy(e,t){return this._checkDisposed(),this._checkImmutable(),this._setXY(e,t),this}clone(){return this.copy()}equals(e,t=0){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)return!1;this._validate(),e.zpp_inner.validate();let n=this.zpp_inner.x-e.zpp_inner.x,s=this.zpp_inner.y-e.zpp_inner.y;return(n<0?-n:n)<=t&&(s<0?-s:s)<=t}copy(e=!1){this._checkDisposed(),this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y;return g._poolGet(t,n,e)}rotate(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Cannot rotate Vec2 by NaN");if(e%(Math.PI*2)!==0){let t=Math.sin(e),n=Math.cos(e),s=n*this.zpp_inner.x-t*this.zpp_inner.y;this.zpp_inner.y=this.zpp_inner.x*t+this.zpp_inner.y*n,this.zpp_inner.x=s,this._invalidate()}return this}reflect(e,t=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");this._validate();let n=this.zpp_inner.x,s=this.zpp_inner.y;if(Math.sqrt(n*n+s*s)===0)throw new Error("Error: Cannot reflect in zero vector");let i=g._poolGet(n,s,!0);i.normalise();let l=e.sub(i.muleq(2*i.dot(e)),t);return g._disposeWeak(e),l}normalise(){this._checkDisposed(),this._checkImmutable(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y,n=e*e+t*t;if(Math.sqrt(n)===0)throw new Error("Error: Cannot normalise vector of length 0");let s=1/Math.sqrt(n);return this._setXY(e*s,t*s),this._invalidate(),this}unit(e=!1){this._checkDisposed(),this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y,s=t*t+n*n;if(Math.sqrt(s)===0)throw new Error("Error: Cannot normalise vector of length 0");let i=1/Math.sqrt(s);return g._poolGet(t*i,n*i,e)}add(e,t=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot add null vectors");this._validate(),e.zpp_inner.validate();let n=this.zpp_inner.x+e.zpp_inner.x,s=this.zpp_inner.y+e.zpp_inner.y,i=g._poolGet(n,s,t);return g._disposeWeak(e),i}addMul(e,t,n=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot add null vectors");this._validate(),e.zpp_inner.validate();let s=this.zpp_inner.x+e.zpp_inner.x*t,i=this.zpp_inner.y+e.zpp_inner.y*t,l=g._poolGet(s,i,n);return g._disposeWeak(e),l}sub(e,t=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot subtract null vectors");this._validate(),e.zpp_inner.validate();let n=this.zpp_inner.x-e.zpp_inner.x,s=this.zpp_inner.y-e.zpp_inner.y,i=g._poolGet(n,s,t);return g._disposeWeak(e),i}mul(e,t=!1){if(this._checkDisposed(),e!==e)throw new Error("Error: Cannot multiply with NaN");this._validate();let n=this.zpp_inner.x*e,s=this.zpp_inner.y*e;return g._poolGet(n,s,t)}addeq(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),e==null)throw new Error("Error: Cannot add null vectors");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x+e.zpp_inner.x,n=this.zpp_inner.y+e.zpp_inner.y;return this._setXY(t,n),g._disposeWeak(e),this}subeq(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),e==null)throw new Error("Error: Cannot subtract null vectors");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x-e.zpp_inner.x,n=this.zpp_inner.y-e.zpp_inner.y;return this._setXY(t,n),g._disposeWeak(e),this}muleq(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Cannot multiply with NaN");this._validate();let t=this.zpp_inner.x*e,n=this.zpp_inner.y*e;return this._setXY(t,n),this}dot(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot take dot product with null vector");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x*e.zpp_inner.x+this.zpp_inner.y*e.zpp_inner.y;return g._disposeWeak(e),t}cross(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot take cross product with null vector");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x*e.zpp_inner.y-this.zpp_inner.y*e.zpp_inner.x;return g._disposeWeak(e),t}perp(e=!1){this._checkDisposed(),this._validate();let t=-this.zpp_inner.y,n=this.zpp_inner.x;return g._poolGet(t,n,e)}dispose(){if(this.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),this.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let e=this.zpp_inner;e.outer=null,this.zpp_inner=null,this.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=this:ye.poolVec2=this,ye.nextVec2=this,this.zpp_disp=!0,e.free(),e.next=le.zpp_pool,le.zpp_pool=e}toString(){return this._checkDisposed(),this._validate(),this.zpp_inner.toString()}};le._wrapFn=g=>Ze(g,e=>{let t=Object.create(je.prototype);return t.zpp_inner=e,t.zpp_pool=null,t.zpp_disp=!1,e.outer=t,t});var Go=me();Go.geom.Vec2=je;var hi=class g{constructor(e=0,t=0,n=0){this.zpp_pool=null;this.zpp_disp=!1;let s=new ri;this.zpp_inner=s,s.outer=this,s.x=e,s.y=t,s.z=n}get _inner(){return this}_checkDisposed(){if(this.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!")}_checkImmutable(){if(this.zpp_inner.immutable)throw new Error("Error: Vec3 is immutable")}static _wrap(e){return e instanceof g?e:e?e instanceof ri?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,n.zpp_pool=null,n.zpp_disp=!1,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}static get(e=0,t=0,n=0){let s;return ye.poolVec3==null?s=new g:(s=ye.poolVec3,ye.poolVec3=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s===ye.nextVec3&&(ye.nextVec3=null)),s.setxyz(e,t,n),s.zpp_inner.immutable=!1,s.zpp_inner._validate=null,s}get x(){return this._checkDisposed(),this.zpp_inner.validate(),this.zpp_inner.x}set x(e){this._checkDisposed(),this._checkImmutable(),this.zpp_inner.x=e}get y(){return this._checkDisposed(),this.zpp_inner.validate(),this.zpp_inner.y}set y(e){this._checkDisposed(),this._checkImmutable(),this.zpp_inner.y=e}get z(){return this._checkDisposed(),this.zpp_inner.validate(),this.zpp_inner.z}set z(e){this._checkDisposed(),this._checkImmutable(),this.zpp_inner.z=e}get length(){this._checkDisposed(),this.zpp_inner.validate();let{x:e,y:t,z:n}=this.zpp_inner;return Math.sqrt(e*e+t*t+n*n)}set length(e){if(this._checkDisposed(),e!==e)throw new Error("Error: Vec3::length cannot be NaN");this.zpp_inner.validate();let{x:t,y:n,z:s}=this.zpp_inner,i=t*t+n*n+s*s;if(i===0)throw new Error("Error: Cannot set length of a zero vector");let l=e/Math.sqrt(i);this._checkImmutable(),this.zpp_inner.x=t*l,this.zpp_inner.y=n*l,this.zpp_inner.z=s*l}lsq(){this._checkDisposed(),this.zpp_inner.validate();let{x:e,y:t,z:n}=this.zpp_inner;return e*e+t*t+n*n}set(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot assign null Vec3");return e.zpp_inner.validate(),this.setxyz(e.zpp_inner.x,e.zpp_inner.y,e.zpp_inner.z)}setxyz(e,t,n){return this._checkDisposed(),this._checkImmutable(),this.zpp_inner.x=e,this._checkImmutable(),this.zpp_inner.y=t,this._checkImmutable(),this.zpp_inner.z=n,this}equals(e,t=0){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");if(e==null)return!1;this.zpp_inner.validate(),e.zpp_inner.validate();let n=this.zpp_inner.x-e.zpp_inner.x,s=this.zpp_inner.y-e.zpp_inner.y,i=this.zpp_inner.z-e.zpp_inner.z;return(n<0?-n:n)<=t&&(s<0?-s:s)<=t&&(i<0?-i:i)<=t}clone(){return this._checkDisposed(),this.zpp_inner.validate(),g.get(this.zpp_inner.x,this.zpp_inner.y,this.zpp_inner.z)}xy(e=!1){return this._checkDisposed(),this.zpp_inner.validate(),je.get(this.zpp_inner.x,this.zpp_inner.y,e)}dispose(){if(this.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");if(this.zpp_inner.immutable)throw new Error("Error: This Vec3 is not disposable");this.zpp_pool=null,ye.nextVec3!=null?ye.nextVec3.zpp_pool=this:ye.poolVec3=this,ye.nextVec3=this,this.zpp_disp=!0}toString(){return this._checkDisposed(),this.zpp_inner.validate(),"{ x: "+this.zpp_inner.x+" y: "+this.zpp_inner.y+" z: "+this.zpp_inner.z+" }"}};ri._wrapFn=g=>Ze(g,e=>{let t=Object.create(hi.prototype);return t.zpp_inner=e,t.zpp_pool=null,t.zpp_disp=!1,e.outer=t,t});var Ks=class g{get _inner(){return this}constructor(e=0,t=0,n=0,s=0){if(e!==e||t!==t)throw new Error("Error: AABB position cannot be NaN");if(n!==n||s!==s)throw new Error("Error: AABB dimensions cannot be NaN");let i;fe.zpp_pool==null?i=new fe:(i=fe.zpp_pool,fe.zpp_pool=i.next,i.next=null),i.minx=e,i.miny=t,i.maxx=e+n,i.maxy=t+s,this.zpp_inner=i,i.outer=this}static fromPoints(e){if(e==null||e.length===0)throw new Error("Error: AABB::fromPoints requires at least one point");let t=e[0];if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t==null)throw new Error("Error: AABB::fromPoints cannot contain null Vec2");t.zpp_inner.validate();let n=t.zpp_inner.x,s=t.zpp_inner.y,i=n,l=s;for(let r=1;r<e.length;r++){let a=e[r];if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(a==null)throw new Error("Error: AABB::fromPoints cannot contain null Vec2");a.zpp_inner.validate();let o=a.zpp_inner.x,p=a.zpp_inner.y;o<n&&(n=o),p<s&&(s=p),o>i&&(i=o),p>l&&(l=p)}return new g(n,s,i-n,l-s)}static _wrap(e){return e instanceof g?e:e?e instanceof fe?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get x(){return this.zpp_inner.validate(),this.zpp_inner.minx}set x(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.minx!=e){if(e!==e)throw new Error("Error: AABB::x cannot be NaN");this.zpp_inner.maxx+=e-this.zpp_inner.minx,this.zpp_inner.minx=e,this.zpp_inner.invalidate()}}get y(){return this.zpp_inner.validate(),this.zpp_inner.miny}set y(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.miny!=e){if(e!==e)throw new Error("Error: AABB::y cannot be NaN");this.zpp_inner.maxy+=e-this.zpp_inner.miny,this.zpp_inner.miny=e,this.zpp_inner.invalidate()}}get width(){return this.zpp_inner.validate(),this.zpp_inner.maxx-this.zpp_inner.minx}set width(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.maxx-this.zpp_inner.minx!=e){if(e!==e)throw new Error("Error: AABB::width cannot be NaN");if(e<0)throw new Error("Error: AABB::width ("+e+") must be >= 0");this.zpp_inner.validate(),this.zpp_inner.maxx=this.zpp_inner.minx+e,this.zpp_inner.invalidate()}}get height(){return this.zpp_inner.validate(),this.zpp_inner.maxy-this.zpp_inner.miny}set height(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.maxy-this.zpp_inner.miny!=e){if(e!==e)throw new Error("Error: AABB::height cannot be NaN");if(e<0)throw new Error("Error: AABB::height ("+e+") must be >= 0");this.zpp_inner.validate(),this.zpp_inner.maxy=this.zpp_inner.miny+e,this.zpp_inner.invalidate()}}get min(){return this.zpp_inner.getmin(),this.zpp_inner.wrap_min}set min(e){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(e==null)throw new Error("Error: Cannot assign null to AABB::min");this.zpp_inner.validate();let t=this.zpp_inner.minx;if(this.zpp_inner.validate(),t!=this.zpp_inner.minx)throw new Error("Error: AABB::min components cannot be NaN");this.zpp_inner.validate();let n=this.zpp_inner.miny;if(this.zpp_inner.validate(),n!=this.zpp_inner.miny)throw new Error("Error: AABB::min components cannot be NaN");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let s=e.zpp_inner.x;this.zpp_inner.getmax();let i=this.zpp_inner.wrap_max;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(i.zpp_inner._validate!=null&&i.zpp_inner._validate(),s>i.zpp_inner.x)throw new Error("Error: Assignment would cause negative width");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let l=e.zpp_inner.y;this.zpp_inner.getmin();let r=this.zpp_inner.wrap_max;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(r.zpp_inner._validate!=null&&r.zpp_inner._validate(),l>r.zpp_inner.y)throw new Error("Error: Assignment would cause negative height");let a=this.zpp_inner.wrap_min;this._assignVec2(a,e),e.zpp_inner.weak&&this._disposeVec2(e)}get max(){return this.zpp_inner.getmax(),this.zpp_inner.wrap_max}set max(e){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(e==null)throw new Error("Error: Cannot assign null to AABB::max");this.zpp_inner.validate();let t=this.zpp_inner.minx;if(this.zpp_inner.validate(),t!=this.zpp_inner.minx)throw new Error("Error: AABB::max components cannot be NaN");this.zpp_inner.validate();let n=this.zpp_inner.miny;if(this.zpp_inner.validate(),n!=this.zpp_inner.miny)throw new Error("Error: AABB::max components cannot be NaN");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let s=e.zpp_inner.x;this.zpp_inner.getmin();let i=this.zpp_inner.wrap_min;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(i.zpp_inner._validate!=null&&i.zpp_inner._validate(),s<i.zpp_inner.x)throw new Error("Error: Assignment would cause negative width");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let l=e.zpp_inner.y;this.zpp_inner.getmin();let r=this.zpp_inner.wrap_min;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(r.zpp_inner._validate!=null&&r.zpp_inner._validate(),l<r.zpp_inner.y)throw new Error("Error: Assignment would cause negative height");let a=this.zpp_inner.wrap_max;this._assignVec2(a,e),e.zpp_inner.weak&&this._disposeVec2(e)}_assignVec2(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let n=e.zpp_inner;if(n._immutable)throw new Error("Error: Vec2 is immutable");if(n._isimmutable!=null&&n._isimmutable(),t==null)throw new Error("Error: Cannot assign null Vec2");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");t.zpp_inner._validate!=null&&t.zpp_inner._validate();let s=t.zpp_inner.x;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");t.zpp_inner._validate!=null&&t.zpp_inner._validate();let i=t.zpp_inner.y;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=e.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let r;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e.zpp_inner._validate!=null&&e.zpp_inner._validate(),e.zpp_inner.x==s){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate(),r=e.zpp_inner.y==i}else r=!1;r||(e.zpp_inner.x=s,e.zpp_inner.y=i,e.zpp_inner._invalidate!=null&&e.zpp_inner._invalidate(e.zpp_inner))}_disposeVec2(e){let n=me().zpp_nape;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=e.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");if(s._isimmutable!=null&&s._isimmutable(),e.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let i=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null;let l=e;l.zpp_pool=null,n.util.ZPP_PubPool.nextVec2!=null?n.util.ZPP_PubPool.nextVec2.zpp_pool=l:n.util.ZPP_PubPool.poolVec2=l,n.util.ZPP_PubPool.nextVec2=l,l.zpp_disp=!0;let r=i;r.outer!=null&&(r.outer.zpp_inner=null,r.outer=null),r._isimmutable=null,r._validate=null,r._invalidate=null,r.next=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r}clone(){return this.copy()}equals(e,t=0){if(e==null)return!1;this.zpp_inner.validate(),e.zpp_inner.validate();let n=this.zpp_inner.minx-e.zpp_inner.minx,s=this.zpp_inner.miny-e.zpp_inner.miny,i=this.zpp_inner.maxx-e.zpp_inner.maxx,l=this.zpp_inner.maxy-e.zpp_inner.maxy;return(n<0?-n:n)<=t&&(s<0?-s:s)<=t&&(i<0?-i:i)<=t&&(l<0?-l:l)<=t}copy(){this.zpp_inner.validate();let e=this.zpp_inner;return fe.get(e.minx,e.miny,e.maxx,e.maxy).wrapper()}toString(){return this.zpp_inner.validate(),this.zpp_inner.toString()}};fe._wrapFn=g=>Ze(g,e=>{let t=Object.create(Ks.prototype);return t.zpp_inner=e,e.outer=t,t});var wl=class{constructor(e,t){this._inner=e,this._wrap=t}get length(){return this._inner.length}at(e){return this._wrap(this._inner.at(e))}add(e){this._inner.add(e._inner??e)}remove(e){this._inner.remove(e._inner??e)}has(e){return this._inner.has(e._inner??e)}clear(){this._inner.clear()}get empty(){return this._inner.empty()}push(e){this._inner.push(e._inner??e)}pop(){return this._wrap(this._inner.pop())}shift(){return this._wrap(this._inner.shift())}unshift(e){this._inner.unshift(e._inner??e)}*[Symbol.iterator](){for(let e=0;e<this.length;e++)yield this.at(e)}toArray(){return[...this]}forEach(e){for(let t=0;t<this.length;t++)e(this.at(t),t)}toString(){return this._inner.toString()}};var Nn=class g{get _inner(){return this}constructor(e=1,t=1){let n;if(Mn.zpp_pool==null?n=new Mn:(n=Mn.zpp_pool,Mn.zpp_pool=n.next,n.next=null),this.zpp_inner=n,n.outer=this,e!=n.density*1e3){if(e!==e)throw new Error("Error: FluidProperties::density cannot be NaN");n.density=e/1e3,n.invalidate()}if(t!=n.viscosity){if(t!==t)throw new Error("Error: FluidProperties::viscosity cannot be NaN");if(t<0)throw new Error("Error: FluidProperties::viscosity ("+t+") must be >= 0");n.viscosity=t/1,n.invalidate()}}static _wrap(e){return e instanceof g?e:e?e instanceof Mn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get density(){return this.zpp_inner.density*1e3}set density(e){if(e!=this.zpp_inner.density*1e3){if(e!==e)throw new Error("Error: FluidProperties::density cannot be NaN");this.zpp_inner.density=e/1e3,this.zpp_inner.invalidate()}}get viscosity(){return this.zpp_inner.viscosity}set viscosity(e){if(e!=this.zpp_inner.viscosity){if(e!==e)throw new Error("Error: FluidProperties::viscosity cannot be NaN");if(e<0)throw new Error("Error: FluidProperties::viscosity ("+e+") must be >= 0");this.zpp_inner.viscosity=e/1,this.zpp_inner.invalidate()}}get gravity(){return this.zpp_inner.wrap_gravity}set gravity(e){let n=me().zpp_nape;if(e==null){if(this.zpp_inner.wrap_gravity!=null){this.zpp_inner.wrap_gravity.zpp_inner._inuse=!1;let s=this.zpp_inner.wrap_gravity;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");if(i._isimmutable!=null&&i._isimmutable(),s.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let l=s.zpp_inner;s.zpp_inner.outer=null,s.zpp_inner=null;let r=s;r.zpp_pool=null,n.util.ZPP_PubPool.nextVec2!=null?n.util.ZPP_PubPool.nextVec2.zpp_pool=r:n.util.ZPP_PubPool.poolVec2=r,n.util.ZPP_PubPool.nextVec2=r,r.zpp_disp=!0;let a=l;a.outer!=null&&(a.outer.zpp_inner=null,a.outer=null),a._isimmutable=null,a._validate=null,a._invalidate=null,a.next=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=a,this.zpp_inner.wrap_gravity=null}}else{if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");this.zpp_inner.wrap_gravity==null&&this.zpp_inner.getgravity();let s=this.zpp_inner.wrap_gravity;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");if(i._isimmutable!=null&&i._isimmutable(),e==null)throw new Error("Error: Cannot assign null Vec2");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=e.zpp_inner;l._validate!=null&&l._validate();let r=e.zpp_inner.x;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let a=e.zpp_inner;a._validate!=null&&a._validate();let o=e.zpp_inner.y;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=s.zpp_inner;if(p._immutable)throw new Error("Error: Vec2 is immutable");if(p._isimmutable!=null&&p._isimmutable(),r!=r||o!=o)throw new Error("Error: Vec2 components cannot be NaN");let c;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let h=s.zpp_inner;if(h._validate!=null&&h._validate(),s.zpp_inner.x==r){if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=s.zpp_inner;u._validate!=null&&u._validate(),c=s.zpp_inner.y==o}else c=!1;if(!c){s.zpp_inner.x=r,s.zpp_inner.y=o;let u=s.zpp_inner;u._invalidate!=null&&u._invalidate(u)}if(e.zpp_inner.weak){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=e.zpp_inner;if(u._immutable)throw new Error("Error: Vec2 is immutable");if(u._isimmutable!=null&&u._isimmutable(),e.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let x=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null;let y=e;y.zpp_pool=null,n.util.ZPP_PubPool.nextVec2!=null?n.util.ZPP_PubPool.nextVec2.zpp_pool=y:n.util.ZPP_PubPool.poolVec2=y,n.util.ZPP_PubPool.nextVec2=y,y.zpp_disp=!0;let d=x;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d._isimmutable=null,d._validate=null,d._invalidate=null,d.next=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=d}}}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get shapes(){if(this.zpp_inner.wrap_shapes==null){let e=me();this.zpp_inner.wrap_shapes=e.zpp_nape.util.ZPP_ShapeList.get(this.zpp_inner.shapes,!0)}return this.zpp_inner.wrap_shapes}copy(){let t=me().zpp_nape,n=new g(this.zpp_inner.density*1e3,this.zpp_inner.viscosity);this.zpp_inner.userData!=null&&(n.zpp_inner.userData={...this.zpp_inner.userData});let s=this.zpp_inner.wrap_gravity;if(s==null){if(n.zpp_inner.wrap_gravity!=null){n.zpp_inner.wrap_gravity.zpp_inner._inuse=!1;let i=n.zpp_inner.wrap_gravity;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),i.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let r=i.zpp_inner;i.zpp_inner.outer=null,i.zpp_inner=null;let a=i;a.zpp_pool=null,t.util.ZPP_PubPool.nextVec2!=null?t.util.ZPP_PubPool.nextVec2.zpp_pool=a:t.util.ZPP_PubPool.poolVec2=a,t.util.ZPP_PubPool.nextVec2=a,a.zpp_disp=!0;let o=r;o.outer!=null&&(o.outer.zpp_inner=null,o.outer=null),o._isimmutable=null,o._validate=null,o._invalidate=null,o.next=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=o,n.zpp_inner.wrap_gravity=null}}else{if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");n.zpp_inner.wrap_gravity==null&&n.zpp_inner.getgravity();let i=n.zpp_inner.wrap_gravity;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),s==null)throw new Error("Error: Cannot assign null Vec2");if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=s.zpp_inner;r._validate!=null&&r._validate();let a=s.zpp_inner.x;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=s.zpp_inner;o._validate!=null&&o._validate();let p=s.zpp_inner.y;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let c=i.zpp_inner;if(c._immutable)throw new Error("Error: Vec2 is immutable");if(c._isimmutable!=null&&c._isimmutable(),a!=a||p!=p)throw new Error("Error: Vec2 components cannot be NaN");let h;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=i.zpp_inner;if(u._validate!=null&&u._validate(),i.zpp_inner.x==a){if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let x=i.zpp_inner;x._validate!=null&&x._validate(),h=i.zpp_inner.y==p}else h=!1;if(!h){i.zpp_inner.x=a,i.zpp_inner.y=p;let x=i.zpp_inner;x._invalidate!=null&&x._invalidate(x)}if(s.zpp_inner.weak){if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let x=s.zpp_inner;if(x._immutable)throw new Error("Error: Vec2 is immutable");if(x._isimmutable!=null&&x._isimmutable(),s.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let y=s.zpp_inner;s.zpp_inner.outer=null,s.zpp_inner=null;let d=s;d.zpp_pool=null,t.util.ZPP_PubPool.nextVec2!=null?t.util.ZPP_PubPool.nextVec2.zpp_pool=d:t.util.ZPP_PubPool.poolVec2=d,t.util.ZPP_PubPool.nextVec2=d,d.zpp_disp=!0;let _=y;_.outer!=null&&(_.outer.zpp_inner=null,_.outer=null),_._isimmutable=null,_._validate=null,_._invalidate=null,_.next=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=_}}return n}toString(){return"{ density: "+this.zpp_inner.density*1e3+" viscosity: "+this.zpp_inner.viscosity+" gravity: "+String(this.zpp_inner.wrap_gravity)+" }"}};Mn._wrapFn=g=>Ze(g,e=>{let t=Object.create(Nn.prototype);return t.zpp_inner=e,e.outer=t,t});var Jo=me();Jo.phys.FluidProperties=Nn;var Ys,vl,gl;function $l(g){Ys=g}var Xs=class Xs{constructor(){this._inner=void 0,this.zpp_inner_i=null}static _wrap(e){return e?e instanceof Xs?e:e.isBody&&e.isBody()&&Ys?Ys(e):e.isShape&&e.isShape()&&vl?vl(e):e.isCompound&&e.isCompound()&&gl?gl(e):Ze(e,t=>{let n=Object.create(Xs.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i??t,n}):null}get id(){return this.zpp_inner_i.id}get userData(){return this.zpp_inner_i.userData==null&&(this.zpp_inner_i.userData={}),this.zpp_inner_i.userData}get group(){return this.zpp_inner_i.group==null?null:this.zpp_inner_i.group.outer}set group(e){this.zpp_inner_i.immutable_midstep("Interactor::group"),this.zpp_inner_i.setGroup(e==null?null:e.zpp_inner)}get cbTypes(){return this.zpp_inner_i.wrap_cbTypes==null&&this.zpp_inner_i.setupcbTypes(),this.zpp_inner_i.wrap_cbTypes}get castBody(){if(this.zpp_inner_i.ibody!=null){let e=this.zpp_inner_i.ibody.outer;return Ys?Ys(e):e}return null}get castShape(){if(this.zpp_inner_i.ishape!=null){let e=this.zpp_inner_i.ishape.outer;return vl?vl(e):e}return null}get castCompound(){if(this.zpp_inner_i.icompound!=null){let e=this.zpp_inner_i.icompound.outer;return gl?gl(e):e}return null}isShape(){return this.zpp_inner_i.ishape!=null}isBody(){return this.zpp_inner_i.ibody!=null}isCompound(){return this.zpp_inner_i.icompound!=null}toString(){return""}};Xs.zpp_internalAlloc=!1;var gi=Xs;var Hs,Qs,$s;function eo(g){Hs=g}function to(g){Qs=g}function no(g){$s=g}var ti=class g extends gi{constructor(){super()}static _wrap(e){if(!e)return null;let t=e.isCircle?e.isCircle()?0:e.isPolygon?.()?1:-1:e.zpp_inner?.type??-1;return t===0&&Hs?Hs(e):t===1&&Qs?Qs(e):t===2&&$s?$s(e):e.outer?e.outer:Ze(e,n=>{let s=Object.create(g.prototype);return s._inner=n,s.zpp_inner=n.zpp_inner??n,s.zpp_inner_i=n.zpp_inner_i??n,s})}get type(){return ai.types[this.zpp_inner.type]}isCircle(){return this.zpp_inner.type===0}isPolygon(){return this.zpp_inner.type===1}isCapsule(){return this.zpp_inner.type===2}get body(){let e=this.zpp_inner;return e.body!=null?e.body.outer:null}set body(e){let t=this.zpp_inner;t.immutable_midstep("Shape::body");let n=t.body!=null?t.body.outer:null;if(n!==e&&(t.body!=null&&n.zpp_inner.wrap_shapes.remove(this),e!=null)){let s=e.zpp_inner.wrap_shapes;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}}get castCircle(){let e=this.zpp_inner;if(e.type===0){let t=e.circle.outer_zn;return Hs?Hs(t):t}return null}get castPolygon(){let e=this.zpp_inner;if(e.type===1){let t=e.polygon.outer_zn;return Qs?Qs(t):t}return null}get castCapsule(){let e=this.zpp_inner;if(e.type===2){let t=e.capsule.outer_zn;return $s?$s(t):t}return null}get worldCOM(){let e=this.zpp_inner;return e.wrap_worldCOM==null&&this._setupWorldCOM(),e.wrap_worldCOM}get localCOM(){let e=this.zpp_inner;return e.wrap_localCOM==null&&(e.type===0?e.circle.setupLocalCOM():e.type===1?e.polygon.setupLocalCOM():e.capsule.setupLocalCOM()),e.wrap_localCOM}set localCOM(e){let t=this.zpp_inner;if(t.immutable_midstep("Body::localCOM"),e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e==null)throw new Error("Error: Shape::localCOM cannot be null");t.wrap_localCOM==null&&(t.type===0?t.circle.setupLocalCOM():t.type===1?t.polygon.setupLocalCOM():t.capsule.setupLocalCOM()),t.wrap_localCOM.set(e),e.zpp_inner.weak&&e.dispose()}get area(){let e=this.zpp_inner;return e.validate_area_inertia(),e.area}get inertia(){let e=this.zpp_inner;return e.validate_area_inertia(),e.inertia}get angDrag(){let e=this.zpp_inner;return e.validate_angDrag(),e.angDrag}get material(){return this.zpp_inner.material.wrapper()}set material(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::material"),e==null)throw new Error("Error: Cannot assign null as Shape material");t.setMaterial(e.zpp_inner)}get filter(){return this.zpp_inner.filter.wrapper()}set filter(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::filter"),e==null)throw new Error("Error: Cannot assign null as Shape filter");t.setFilter(e.zpp_inner)}get fluidProperties(){let e=this.zpp_inner;return e.immutable_midstep("Shape::fluidProperties"),e.fluidProperties==null&&e.setFluid(new Nn().zpp_inner),e.fluidProperties.wrapper()}set fluidProperties(e){let t=this.zpp_inner;if(e==null)throw new Error("Error: Cannot assign null as Shape fluidProperties, disable fluids by setting fluidEnabled to false");t.setFluid(e.zpp_inner),t.immutable_midstep("Shape::fluidProperties"),t.fluidProperties==null&&t.setFluid(new Nn().zpp_inner)}get cbTypes(){this.zpp_inner_i.wrap_cbTypes==null&&this.zpp_inner_i.setupcbTypes();let e=this.zpp_inner_i.wrap_cbTypes;return{_inner:e,add(t){e.add(t._inner)},remove(t){e.remove(t._inner)},has(t){return e.has(t._inner)},clear(){e.clear()},get length(){return e.length}}}get fluidEnabled(){return this.zpp_inner.fluidEnabled}set fluidEnabled(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::fluidEnabled"),t.fluidEnabled=e,e&&t.fluidProperties==null){let n=new Nn;t.setFluid(n.zpp_inner),t.immutable_midstep("Shape::fluidProperties"),t.fluidProperties==null&&t.setFluid(new Nn().zpp_inner),t.fluidProperties.wrapper()}t.wake()}get sensorEnabled(){return this.zpp_inner.sensorEnabled}set sensorEnabled(e){let t=this.zpp_inner;t.immutable_midstep("Shape::sensorEnabled"),t.sensorEnabled=e,t.wake()}get bounds(){return this.zpp_inner.aabb.wrapper()}translate(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::translate()"),e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e==null)throw new Error("Error: Cannot displace Shape by null Vec2");if(e.lsq()>0){let n=e.zpp_inner;n._validate!=null&&n._validate();let s=n.x;n._validate!=null&&n._validate();let i=n.y;(t.type===0?t.circle:t.type===1?t.polygon:t.capsule).__translate(s,i)}return e.zpp_inner.weak&&e.dispose(),this}scale(e,t){let n=this.zpp_inner,s=me();if(n.immutable_midstep("Shape::scale()"),n.body!=null&&n.body.space!=null&&n.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e!==e||t!==t)throw new Error("Error: Cannot scale Shape by NaN");if(e===0||t===0)throw new Error("Error: Cannot Scale shape by a factor of 0");if(n.type===0){let i=e*e-t*t;if(i*i<s.Config.epsilon*s.Config.epsilon)n.circle.__scale(e,t);else throw new Error("Error: Cannot perform a non equal scaling on a Circle")}else n.type===1?n.polygon.__scale(e,t):n.capsule.__scale(e,t);return this}rotate(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::rotate()"),t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e!==e)throw new Error("Error: Cannot rotate Shape by NaN");if(e%(2*Math.PI)!==0){let s=Math.cos(e),i=Math.sin(e);t.type===0?t.circle.__rotate(i,s):t.type===1?t.polygon.__rotate(i,s):t.capsule.__rotate(i,s)}return this}transform(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::transform()"),t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e==null)throw new Error("Error: Cannot transform Shape by null matrix");let n=e._inner??e;if(n.singular())throw new Error("Error: Cannot transform Shape by a singular matrix");if(t.type===0)if(n.equiorthogonal())t.circle.__transform(n);else throw new Error("Error: Cannot transform Circle by a non equiorthogonal matrix");else t.type===1?t.polygon.__transform(n):t.capsule.__transform(n);return this}contains(e){let t=this.zpp_inner;if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Cannot check null point for containment");if((t.body!=null?t.body.outer:null)==null)throw new Error("Error: Shape is not well defined without a Body");vs.validateShape(t);let n=e.zpp_inner;n._validate!=null&&n._validate();let s=Ee.shapeContains(t,n);return n.weak&&e.dispose(),s}copy(){let e=this.zpp_inner.copy();return e instanceof g?e:g._wrap(e)}toString(){let e=this.zpp_inner;return(e.type===0?"Circle":e.type===1?"Polygon":"Capsule")+"#"+this.zpp_inner_i.id}_setupWorldCOM(){let e=me(),t=this.zpp_inner,n=t.worldCOMx,s=t.worldCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(ye.poolVec2==null?i=new e.geom.Vec2:(i=ye.poolVec2,ye.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i===ye.nextVec2&&(ye.nextVec2=null)),i.zpp_inner==null){let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,t.wrap_worldCOM=i,t.wrap_worldCOM.zpp_inner._inuse=!0,t.wrap_worldCOM.zpp_inner._immutable=!0,t.wrap_worldCOM.zpp_inner._validate=t.getworldCOM.bind(t)}};var Tl=class{constructor(){this.user_length=0;this.zip_length=!1;this.push_ite=null;this.at_ite=null;this.at_index=0;this.reverse_flag=!1;this.dontremove=!1;this.subber=null;this.post_adder=null;this.adder=null;this._modifiable=null;this._validate=null;this._invalidate=null;this._invalidated=!1;this.immutable=!1;this.inner=null;this.outer=null;this._invalidated=!0}valmod(){this.validate(),this.inner.modified&&(this.inner.pushmod&&(this.push_ite=null),this.at_ite=null,this.inner.modified=!1,this.inner.pushmod=!1,this.zip_length=!0)}modified(){this.zip_length=!0,this.at_ite=null,this.push_ite=null}modify_test(){this._modifiable!=null&&this._modifiable()}validate(){this._invalidated&&(this._invalidated=!1,this._validate!=null&&this._validate())}invalidate(){this._invalidated=!0,this._invalidate!=null&&this._invalidate(this)}};function On(g,e,t,n){let s=me(),i=s.__zpp;class l extends Tl{constructor(){super(),this.inner=new i.util[g]}static get(a,o=!1){let p=new s[e][t];return p.zpp_inner.inner=a,o&&(p.zpp_inner.immutable=!0),p.zpp_inner.zip_length=!0,p}}return l.internal=!1,i.util[n]=l,l}var Ll=null,qo=null,Dl=null;Ll=On("ZNPList_ZPP_Constraint","constraint","ConstraintList","ZPP_ConstraintList");On("ZNPList_ZPP_Body","phys","BodyList","ZPP_BodyList");qo=On("ZNPList_ZPP_Interactor","phys","InteractorList","ZPP_InteractorList");On("ZNPList_ZPP_Compound","phys","CompoundList","ZPP_CompoundList");On("ZNPList_ZPP_Listener","callbacks","ListenerList","ZPP_ListenerList");On("ZNPList_ZPP_CbType","callbacks","CbTypeList","ZPP_CbTypeList");On("ZNPList_ZPP_GeomPoly","geom","GeomPolyList","ZPP_GeomPolyList");On("ZNPList_RayResult","geom","RayResultList","ZPP_RayResultList");On("ZNPList_ConvexResult","geom","ConvexResultList","ZPP_ConvexResultList");On("ZNPList_ZPP_Edge","shape","EdgeList","ZPP_EdgeList");On("ZNPList_ZPP_Shape","shape","ShapeList","ZPP_ShapeList");On("ZNPList_ZPP_InteractionGroup","dynamics","InteractionGroupList","ZPP_InteractionGroupList");Dl=On("ZNPList_ZPP_Arbiter","dynamics","ArbiterList","ZPP_ArbiterList");function Un(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function Wn(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function Ln(g){if(g!=null&&g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!")}function Sn(g){g.zpp_inner.weak&&g.dispose()}function Zs(g,e,t,n,s){if(Ln(t),t==null)throw new Error("Error: Body::"+g+" cannot be null");return e==null&&n!=null&&(n(),e=s()),e.set(t),e}function Cl(g,e,t){return je.get(g,e,t)}function nn(g,e){return Q[g]==null&&(Q.internal=!0,Q[g]=e(),Q.internal=!1),Q[g]}var We=class g extends gi{constructor(t,n){super();this.debugDraw=!0;let s=new Cn;this.zpp_inner=s,s.outer=this,s.outer_i=this,this.zpp_inner_i=s,this._inner=this,n!=null?(Ln(n),s.posx=Un(n),s.posy=Wn(n)):(s.posx=0,s.posy=0);let i=me(),l;if(t==null?l=nn("BodyType_DYNAMIC",()=>new i.phys.BodyType):l=t,s.immutable_midstep("Body::type"),s.world)throw new Error("Error: Space::world is immutable");if(Cn.types[s.type]!==l){if(l==null)throw new Error("Error: Cannot use null BodyType");let r=io(l,i);r===1&&s.space!=null&&(s.velx=0,s.vely=0,s.angvel=0),s.invalidate_type(),s.space!=null?s.space.transmitType(s,r):s.type=r}n!=null&&Sn(n),s.insert_cbtype(an.ANY_BODY.zpp_inner)}static _wrap(t){return t?t instanceof g?t:t instanceof Cn?Ze(t,n=>{let s=Object.create(g.prototype);return s.zpp_inner=n,n.outer=s,n.outer_i=s,s.zpp_inner_i=n,s._inner=s,s.debugDraw=!0,s}):t.zpp_inner?g._wrap(t.zpp_inner):Ze(t,n=>{let s=Object.create(g.prototype);return s._inner=n,s}):null}get type(){return Cn.types[this.zpp_inner.type]}set type(t){let n=this.zpp_inner;if(n.immutable_midstep("Body::type"),n.world)throw new Error("Error: Space::world is immutable");if(Cn.types[n.type]!==t){if(t==null)throw new Error("Error: Cannot use null BodyType");let s=me(),i=io(t,s);i===1&&n.space!=null&&(n.velx=0,n.vely=0,n.angvel=0),n.invalidate_type(),n.space!=null?n.space.transmitType(n,i):n.type=i}}isStatic(){return this.zpp_inner.type===1}isDynamic(){return this.zpp_inner.type===2}isKinematic(){return this.zpp_inner.type===3}get position(){return this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition(),this.zpp_inner.wrap_pos}set position(t){Zs("position",this.zpp_inner.wrap_pos,t,()=>this.zpp_inner.setupPosition(),()=>this.zpp_inner.wrap_pos),this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition()}get rotation(){return this.zpp_inner.rot}set rotation(t){let n=this.zpp_inner;if(n.immutable_midstep("Body::rotation"),n.world)throw new Error("Error: Space::world is immutable");if(n.type===1&&n.space!=null)throw new Error("Error: Static objects cannot be rotated once inside a Space");if(n.rot!==t){if(t!==t)throw new Error("Error: Body::rotation cannot be NaN");n.rot=t,n.invalidate_rot(),n.wake()}}get velocity(){return this.zpp_inner.wrap_vel==null&&this.zpp_inner.setupVelocity(),this.zpp_inner.wrap_vel}set velocity(t){Zs("velocity",this.zpp_inner.wrap_vel,t,()=>this.zpp_inner.setupVelocity(),()=>this.zpp_inner.wrap_vel),this.zpp_inner.wrap_vel==null&&this.zpp_inner.setupVelocity()}get angularVel(){return this.zpp_inner.angvel}set angularVel(t){let n=this.zpp_inner;if(n.world)throw new Error("Error: Space::world is immutable");if(n.angvel!==t){if(t!==t)throw new Error("Error: Body::angularVel cannot be NaN");if(n.type===1)throw new Error("Error: A static object cannot be given a velocity");n.angvel=t,n.wake()}}get kinematicVel(){return this.zpp_inner.wrap_kinvel==null&&this.zpp_inner.setupkinvel(),this.zpp_inner.wrap_kinvel}set kinematicVel(t){Zs("kinematicVel",this.zpp_inner.wrap_kinvel,t,()=>this.zpp_inner.setupkinvel(),()=>this.zpp_inner.wrap_kinvel),this.zpp_inner.wrap_kinvel==null&&this.zpp_inner.setupkinvel()}get kinAngVel(){return this.zpp_inner.kinangvel}set kinAngVel(t){let n=this.zpp_inner;if(n.world)throw new Error("Error: Space::world is immutable");if(n.kinangvel!==t){if(t!==t)throw new Error("Error: Body::kinAngVel cannot be NaN");n.kinangvel=t,n.wake()}}get surfaceVel(){return this.zpp_inner.wrap_svel==null&&this.zpp_inner.setupsvel(),this.zpp_inner.wrap_svel}set surfaceVel(t){Zs("surfaceVel",this.zpp_inner.wrap_svel,t,()=>this.zpp_inner.setupsvel(),()=>this.zpp_inner.wrap_svel),this.zpp_inner.wrap_svel==null&&this.zpp_inner.setupsvel()}get force(){return this.zpp_inner.wrap_force==null&&this.zpp_inner.setupForce(),this.zpp_inner.wrap_force}set force(t){Zs("force",this.zpp_inner.wrap_force,t,()=>this.zpp_inner.setupForce(),()=>this.zpp_inner.wrap_force),this.zpp_inner.wrap_force==null&&this.zpp_inner.setupForce()}get torque(){return this.zpp_inner.torque}set torque(t){let n=this.zpp_inner;if(n.world)throw new Error("Error: Space::world is immutable");if(n.type!==2)throw new Error("Error: Non-dynamic body cannot have torque applied.");if(t!==t)throw new Error("Error: Body::torque cannot be NaN");n.torque!==t&&(n.torque=t,n.wake())}get mass(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no mass");if(this.zpp_inner.validate_mass(),this.zpp_inner.massMode===0&&this.zpp_inner.shapes.head==null)throw new Error("Error: Given current mass mode, Body::mass only makes sense if it contains shapes");return this.zpp_inner.cmass}set mass(t){if(this.zpp_inner.immutable_midstep("Body::mass"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: Mass cannot be NaN");if(t<=0)throw new Error("Error: Mass must be strictly positive");if(t>=1/0)throw new Error("Error: Mass cannot be infinite, use allowMovement = false instead");this.zpp_inner.massMode=1,this.zpp_inner.cmass=t,this.zpp_inner.invalidate_mass()}get inertia(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no inertia");if(this.zpp_inner.validate_inertia(),this.zpp_inner.inertiaMode===0&&this.zpp_inner.shapes.head==null)throw new Error("Error: Given current inertia mode flag, Body::inertia only makes sense if Body contains Shapes");return this.zpp_inner.cinertia}set inertia(t){if(this.zpp_inner.immutable_midstep("Body::inertia"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: Inertia cannot be NaN");if(t<=0)throw new Error("Error: Inertia must be strictly positive");if(t>=1/0)throw new Error("Error: Inertia cannot be infinite, use allowRotation = false instead");this.zpp_inner.inertiaMode=1,this.zpp_inner.cinertia=t,this.zpp_inner.invalidate_inertia()}get constraintMass(){return this.zpp_inner.world||this.zpp_inner.validate_mass(),this.zpp_inner.smass}get constraintInertia(){return this.zpp_inner.world||this.zpp_inner.validate_inertia(),this.zpp_inner.sinertia}get gravMass(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no gravMass");if(this.zpp_inner.validate_gravMass(),this.zpp_inner.shapes.head==null&&this.zpp_inner.massMode===0&&this.zpp_inner.gravMassMode!==1)throw new Error("Error: Given current mass/gravMass modes; Body::gravMass only makes sense if it contains Shapes");return this.zpp_inner.gravMass}set gravMass(t){if(this.zpp_inner.immutable_midstep("Body::gravMass"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: gravMass cannot be NaN");this.zpp_inner.gravMassMode=1,this.zpp_inner.gravMass=t,this.zpp_inner.invalidate_gravMass()}get gravMassScale(){if(this.zpp_inner.validate_gravMassScale(),this.zpp_inner.shapes.head==null&&this.zpp_inner.massMode===0&&this.zpp_inner.gravMassMode!==2)throw new Error("Error: Given current mass/gravMass modes; Body::gravMassScale only makes sense if it contains Shapes");return this.zpp_inner.gravMassScale}set gravMassScale(t){if(this.zpp_inner.immutable_midstep("Body::gravMassScale"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: gravMassScale cannot be NaN");this.zpp_inner.gravMassMode=2,this.zpp_inner.gravMassScale=t,this.zpp_inner.invalidate_gravMassScale()}get isBullet(){return this.zpp_inner.bulletEnabled}set isBullet(t){this.zpp_inner.bulletEnabled=t}get disableCCD(){return this.zpp_inner.disableCCD}set disableCCD(t){this.zpp_inner.disableCCD=t}get allowMovement(){return!this.zpp_inner.nomove}set allowMovement(t){this.zpp_inner.immutable_midstep("Body::"+(t==null?"null":""+t)),!this.zpp_inner.nomove!==t&&(this.zpp_inner.nomove=!t,this.zpp_inner.invalidate_mass())}get allowRotation(){return!this.zpp_inner.norotate}set allowRotation(t){this.zpp_inner.immutable_midstep("Body::"+(t==null?"null":""+t)),!this.zpp_inner.norotate!==t&&(this.zpp_inner.norotate=!t,this.zpp_inner.invalidate_inertia())}get isSleeping(){if(this.zpp_inner.space==null)throw new Error("Error: isSleeping makes no sense if the object is not contained within a Space");return this.zpp_inner.component.sleeping}get shapes(){return new wl(this.zpp_inner.wrap_shapes,ti._wrap)}get space(){return this.zpp_inner.space==null?null:ni._wrap(this.zpp_inner.space.outer)}set space(t){let n=t!=null?t._inner??t:null;if(this.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Body belonging to a Compound, only the root Compound space can be set");if(this.zpp_inner.immutable_midstep("Body::space"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let s=this.zpp_inner.space==null?null:this.zpp_inner.space.outer;if(s!==n&&(s!=null&&(this.zpp_inner.component.woken=!1,s.zpp_inner.wrap_bodies.remove(this)),n!=null)){let i=n.zpp_inner.wrap_bodies;i.zpp_inner.reverse_flag?i.push(this):i.unshift(this)}}get compound(){return this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer}set compound(t){let n=this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer;if(n!==t&&(n?.zpp_inner.wrap_bodies.remove(this),t!=null)){let s=t.zpp_inner.wrap_bodies;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}}get bounds(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no bounds");return Ks._wrap(this.zpp_inner.aabb.wrapper())}get constraintVelocity(){return this.zpp_inner.wrapcvel==null&&this.zpp_inner.setup_cvel(),this.zpp_inner.wrapcvel}get localCOM(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no localCOM");if(this.zpp_inner.wrap_localCOM==null){let t=je.get(this.zpp_inner.localCOMx,this.zpp_inner.localCOMy);this.zpp_inner.wrap_localCOM=t,t.zpp_inner._inuse=!0,t.zpp_inner._immutable=!0,t.zpp_inner._validate=()=>this.zpp_inner.getlocalCOM()}return this.zpp_inner.wrap_localCOM}get worldCOM(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no worldCOM");if(this.zpp_inner.wrap_worldCOM==null){let t=je.get(this.zpp_inner.worldCOMx,this.zpp_inner.worldCOMy);this.zpp_inner.wrap_worldCOM=t,t.zpp_inner._inuse=!0,t.zpp_inner._immutable=!0,t.zpp_inner._validate=()=>this.zpp_inner.getworldCOM()}return this.zpp_inner.wrap_worldCOM}get massMode(){let t=me(),n=nn("MassMode_DEFAULT",()=>new t.phys.MassMode),s=nn("MassMode_FIXED",()=>new t.phys.MassMode);return[n,s][this.zpp_inner.massMode]}set massMode(t){let n=me();if(this.zpp_inner.immutable_midstep("Body::massMode"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: cannot use null massMode");let s=nn("MassMode_DEFAULT",()=>new n.phys.MassMode);this.zpp_inner.massMode=t===s?0:1,this.zpp_inner.invalidate_mass()}get inertiaMode(){let t=me(),n=nn("InertiaMode_DEFAULT",()=>new t.phys.InertiaMode),s=nn("InertiaMode_FIXED",()=>new t.phys.InertiaMode);return[n,s][this.zpp_inner.inertiaMode]}set inertiaMode(t){let n=me();if(this.zpp_inner.immutable_midstep("Body::inertiaMode"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot use null InertiaMode");let s=nn("InertiaMode_FIXED",()=>new n.phys.InertiaMode);this.zpp_inner.inertiaMode=t===s?1:0,this.zpp_inner.invalidate_inertia()}get gravMassMode(){let t=me(),n=nn("GravMassMode_DEFAULT",()=>new t.phys.GravMassMode),s=nn("GravMassMode_FIXED",()=>new t.phys.GravMassMode),i=nn("GravMassMode_SCALED",()=>new t.phys.GravMassMode);return[n,s,i][this.zpp_inner.gravMassMode]}set gravMassMode(t){let n=me();if(this.zpp_inner.immutable_midstep("Body::gravMassMode"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot use null gravMassMode");let s=nn("GravMassMode_SCALED",()=>new n.phys.GravMassMode);if(t===s)this.zpp_inner.gravMassMode=2;else{let i=nn("GravMassMode_DEFAULT",()=>new n.phys.GravMassMode);this.zpp_inner.gravMassMode=t===i?0:1}this.zpp_inner.invalidate_gravMass()}copy(){if(this.zpp_inner.world)throw new Error("Error: Space::world cannot be copied");return this.zpp_inner.copy()}toString(){let t=this.zpp_inner;return(t.world?"(space::world":"("+(t.type===2?"dynamic":t.type===1?"static":"kinematic"))+")#"+this.zpp_inner_i.id}integrate(t){if(t!==t)throw new Error("Cannot integrate by NaN time");if(this.zpp_inner.immutable_midstep("Body::space"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t===0)return this;let n=this.zpp_inner;n.sweepTime=0,n.sweep_angvel=n.angvel;let s=t-n.sweepTime;if(s!==0&&(n.sweepTime=t,n.posx+=n.velx*s,n.posy+=n.vely*s,n.angvel!==0)){let i=n.sweep_angvel*s;if(n.rot+=i,i*i>1e-4)n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot);else{let l=i*i,r=1-.5*l,a=1-l*l/8,o=(r*n.axisx+i*n.axisy)*a;n.axisy=(r*n.axisy-i*n.axisx)*a,n.axisx=o}}return so(n),n.zip_worldCOM=!0,n.zip_axis=!0,so(n),n.zip_worldCOM=!0,n.sweepTime=0,this}localPointToWorld(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t),i=Wn(t),l=this.zpp_inner.axisy*s-this.zpp_inner.axisx*i,r=s*this.zpp_inner.axisx+i*this.zpp_inner.axisy;return Sn(t),Cl(l+this.zpp_inner.posx,r+this.zpp_inner.posy,n)}worldPointToLocal(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t)-this.zpp_inner.posx,i=Wn(t)-this.zpp_inner.posy,l=s*this.zpp_inner.axisy+i*this.zpp_inner.axisx,r=i*this.zpp_inner.axisy-s*this.zpp_inner.axisx;return Sn(t),Cl(l,r,n)}localVectorToWorld(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t),i=Wn(t),l=this.zpp_inner.axisy*s-this.zpp_inner.axisx*i,r=s*this.zpp_inner.axisx+i*this.zpp_inner.axisy;return Sn(t),Cl(l,r,n)}worldVectorToLocal(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t),i=Wn(t),l=s*this.zpp_inner.axisy+i*this.zpp_inner.axisx,r=i*this.zpp_inner.axisy-s*this.zpp_inner.axisx;return Sn(t),Cl(l,r,n)}applyImpulse(t,n,s=!1){if(Ln(t),n!=null&&Ln(n),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot apply null impulse to Body");if(s&&this.isSleeping)return Sn(t),n!=null&&Sn(n),this;this.zpp_inner.validate_mass();let i=this.zpp_inner.imass,l=Un(t),r=Wn(t);if(this.zpp_inner.velx+=l*i,this.zpp_inner.vely+=r*i,n!=null){let a=Un(n)-this.zpp_inner.posx,o=Wn(n)-this.zpp_inner.posy;this.zpp_inner.validate_inertia(),this.zpp_inner.angvel+=(r*a-l*o)*this.zpp_inner.iinertia,Sn(n)}return s||this.zpp_inner.type===2&&this.zpp_inner.wake(),Sn(t),this}applyAngularImpulse(t,n=!1){if(this.zpp_inner.world)throw new Error("Error: Space::world is immutable");return n&&this.isSleeping?this:(this.zpp_inner.validate_inertia(),this.zpp_inner.angvel+=t*this.zpp_inner.iinertia,n||this.zpp_inner.type===2&&this.zpp_inner.wake(),this)}setVelocityFromTarget(t,n,s){if(Ln(t),t==null)throw new Error("Cannot set velocity for null target position");if(s===0)throw new Error("deltaTime cannot be 0 for setVelocityFromTarget");let i=1/s;this.zpp_inner.wrap_vel==null&&this.zpp_inner.setupVelocity(),this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition();let l=t.sub(this.zpp_inner.wrap_pos,!0).muleq(i);this.zpp_inner.wrap_vel.set(l);let r=(n-this.zpp_inner.rot)*i;if(this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(this.zpp_inner.angvel!==r){if(r!==r)throw new Error("Error: Body::angularVel cannot be NaN");if(this.zpp_inner.type===1)throw new Error("Error: A static object cannot be given a velocity");this.zpp_inner.angvel=r,this.zpp_inner.wake()}return Sn(t),this}translateShapes(t){if(this.zpp_inner.immutable_midstep("Body::translateShapes()"),Ln(t),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot displace by null Vec2");let n=t.zpp_inner.weak;t.zpp_inner.weak=!1;let s=this.zpp_inner.shapes.head;for(;s!=null;)s.elt.outer.translate(t),s=s.next;return t.zpp_inner.weak=n,Sn(t),this}rotateShapes(t){if(this.zpp_inner.immutable_midstep("Body::rotateShapes()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;)n.elt.outer.rotate(t),n=n.next;return this}scaleShapes(t,n){if(this.zpp_inner.immutable_midstep("Body::scaleShapes()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let s=this.zpp_inner.shapes.head;for(;s!=null;)s.elt.outer.scale(t,n),s=s.next;return this}transformShapes(t){if(this.zpp_inner.immutable_midstep("Body::transformShapes()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;)n.elt.outer.transform(t),n=n.next;return this}align(){if(this.zpp_inner.immutable_midstep("Body::align()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(this.zpp_inner.shapes.head==null)throw new Error("Error: Cannot align empty Body");this.zpp_inner.validate_localCOM();let t=je.get(-this.zpp_inner.localCOMx,-this.zpp_inner.localCOMy);this.translateShapes(t);let n=this.localVectorToWorld(t);return this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition(),this.zpp_inner.wrap_pos.subeq(n),this.zpp_inner.pre_posx<1/0&&(this.zpp_inner.pre_posx-=Un(n),this.zpp_inner.pre_posy-=Wn(n)),t.dispose(),n.dispose(),this}rotate(t,n){if(Ln(t),t==null)throw new Error("Error: Cannot rotate about a null Vec2");if(n!==n)throw new Error("Error: Cannot rotate by NaN radians");let s=t.zpp_inner.weak;t.zpp_inner.weak=!1,this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition();let i=this.zpp_inner.wrap_pos.sub(t);i.rotate(n);let l=t.add(i,!0);Zs("position",this.zpp_inner.wrap_pos,l,()=>this.zpp_inner.setupPosition(),()=>this.zpp_inner.wrap_pos),this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition(),i.dispose();{let r=this.zpp_inner.rot+n,a=this.zpp_inner;if(a.immutable_midstep("Body::rotation"),a.world)throw new Error("Error: Space::world is immutable");if(a.type===1&&a.space!=null)throw new Error("Error: Static objects cannot be rotated once inside a Space");if(a.rot!==r){if(r!==r)throw new Error("Error: Body::rotation cannot be NaN");a.rot=r,a.invalidate_rot(),a.wake()}}return t.zpp_inner.weak=s,Sn(t),this}setShapeMaterials(t){if(this.zpp_inner.immutable_midstep("Body::setShapeMaterials()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;){let s=n.elt.outer;if(s.zpp_inner.immutable_midstep("Shape::material"),t==null)throw new Error("Error: Cannot assign null as Shape material");s.zpp_inner.setMaterial(t.zpp_inner),s.zpp_inner.material.wrapper(),n=n.next}return this}setShapeFilters(t){if(this.zpp_inner.immutable_midstep("Body::setShapeFilters()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;){let s=n.elt.outer;if(s.zpp_inner.immutable_midstep("Shape::filter"),t==null)throw new Error("Error: Cannot assign null as Shape filter");s.zpp_inner.setFilter(t.zpp_inner),s.zpp_inner.filter.wrapper(),n=n.next}return this}setShapeFluidProperties(t){if(this.zpp_inner.immutable_midstep("Body::setShapeFluidProperties()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=me(),s=this.zpp_inner.shapes.head;for(;s!=null;){let i=s.elt.outer;if(t==null)throw new Error("Error: Cannot assign null as Shape fluidProperties, disable fluids by setting fluidEnabled to false");i.zpp_inner.setFluid(t.zpp_inner),i.zpp_inner.immutable_midstep("Shape::fluidProperties"),i.zpp_inner.fluidProperties==null&&i.zpp_inner.setFluid(new n.phys.FluidProperties().zpp_inner),i.zpp_inner.fluidProperties.wrapper(),s=s.next}return this}contains(t){if(Ln(t),t==null)throw new Error("Error: Cannot check containment of null point");let n=t.zpp_inner.weak;t.zpp_inner.weak=!1;let s=!1,i=this.zpp_inner.shapes.head;for(;i!=null;){if(i.elt.outer.contains(t)){s=!0;break}i=i.next}return t.zpp_inner.weak=n,Sn(t),s}connectedBodies(t=-1,n=null){return this.zpp_inner.connectedBodies(t,n)}interactingBodies(t=null,n=-1,s=null){let i;if(t==null)i=Ie.COL|Ie.SENSOR|Ie.FLUID;else{let l=me(),r=nn("InteractionType_COLLISION",()=>new l.callbacks.InteractionType);if(t===r)i=Ie.COL;else{let a=nn("InteractionType_SENSOR",()=>new l.callbacks.InteractionType);i=t===a?Ie.SENSOR:Ie.FLUID}}return this.zpp_inner.interactingBodies(i,s)}normalImpulse(t=null,n=!1){return this._arbiterImpulseQuery(Ie.COL,s=>s.collisionArbiter.normalImpulse(this,n),t)}tangentImpulse(t=null,n=!1){return this._arbiterImpulseQuery(Ie.COL,s=>s.collisionArbiter.tangentImpulse(this,n),t)}totalContactsImpulse(t=null,n=!1){return this._arbiterImpulseQuery(Ie.COL,s=>s.collisionArbiter.totalImpulse(this,n),t)}rollingImpulse(t=null,n=!1){let s=0,l=this._getArbiters().iterator();for(;;){l.zpp_inner.zpp_inner.valmod();let r=l.zpp_inner.zpp_gl();if(l.zpp_critical=!0,l.zpp_i>=r){l.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=l,l.zpp_inner=null;break}l.zpp_critical=!1;let a=l.zpp_inner.at(l.zpp_i++),o=a.zpp_inner;o.type===Ie.COL&&(t!=null&&o.b2!==t.zpp_inner&&o.b1!==t.zpp_inner||(s+=a.collisionArbiter.rollingImpulse(this,n)))}return s}buoyancyImpulse(t=null){return this._arbiterImpulseQuery(Ie.FLUID,n=>n.fluidArbiter.buoyancyImpulse(this),t)}dragImpulse(t=null){return this._arbiterImpulseQuery(Ie.FLUID,n=>n.fluidArbiter.dragImpulse(this),t)}totalFluidImpulse(t=null){return this._arbiterImpulseQuery(Ie.FLUID,n=>n.fluidArbiter.totalImpulse(this),t)}constraintsImpulse(){let t=0,n=0,s=0,i=this.zpp_inner.constraints.head;for(;i!=null;){let r=i.elt.outer.bodyImpulse(this),a=r.zpp_inner;a._validate!=null&&a._validate(),t+=a.x,a._validate!=null&&a._validate(),n+=a.y,a._validate!=null&&a._validate(),s+=a.z,r.dispose(),i=i.next}return hi.get(t,n,s)}totalImpulse(t=null,n=!1){let s=0,i=0,l=0,a=this._getArbiters().iterator();for(;;){a.zpp_inner.zpp_inner.valmod();let p=a.zpp_inner.zpp_gl();if(a.zpp_critical=!0,a.zpp_i>=p){a.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=a,a.zpp_inner=null;break}a.zpp_critical=!1;let h=a.zpp_inner.at(a.zpp_i++).zpp_inner;if(h.type===Ie.SENSOR||t!=null&&h.b2!==t.zpp_inner&&h.b1!==t.zpp_inner)continue;let u=h.wrapper().totalImpulse(this,n),x=u.zpp_inner;x._validate!=null&&x._validate(),s+=x.x,x._validate!=null&&x._validate(),i+=x.y,x._validate!=null&&x._validate(),l+=x.z,u.dispose()}let o=this.zpp_inner.constraints.head;for(;o!=null;){let p=o.elt;if(p.outer.active){let c=p.outer.bodyImpulse(this),h=c.zpp_inner;h._validate!=null&&h._validate(),s+=h.x,h._validate!=null&&h._validate(),i+=h.y,h._validate!=null&&h._validate(),l+=h.z,c.dispose()}o=o.next}return hi.get(s,i,l)}crushFactor(){if(this.zpp_inner.space==null)throw new Error("Error: Makes no sense to see how much an object not taking part in a simulation is being crushed");let t=0,n=je.get(0,0),i=this._getArbiters().iterator();for(;;){i.zpp_inner.zpp_inner.valmod();let x=i.zpp_inner.zpp_gl();if(i.zpp_critical=!0,i.zpp_i>=x){i.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=i,i.zpp_inner=null;break}i.zpp_critical=!1;let d=i.zpp_inner.at(i.zpp_i++).totalImpulse(this),_=d.xy();n.addeq(_);let f=Un(_),z=Wn(_);t+=Math.sqrt(f*f+z*z),_.dispose(),d.dispose()}let r=this._getConstraints();r.zpp_inner.valmod();let a=me().constraint.ConstraintIterator.get(r);for(;;){a.zpp_inner.zpp_inner.valmod();let x=a.zpp_inner;x.zpp_inner.valmod(),x.zpp_inner.zip_length&&(x.zpp_inner.zip_length=!1,x.zpp_inner.user_length=x.zpp_inner.inner.length);let y=x.zpp_inner.user_length;if(a.zpp_critical=!0,a.zpp_i>=y){a.zpp_next=me().constraint.ConstraintIterator.zpp_pool,me().constraint.ConstraintIterator.zpp_pool=a,a.zpp_inner=null;break}a.zpp_critical=!1;let _=a.zpp_inner.at(a.zpp_i++).bodyImpulse(this),f=_.xy();n.addeq(f);let z=Un(f),P=Wn(f);t+=Math.sqrt(z*z+P*P),f.dispose(),_.dispose()}let o=Un(n),p=Wn(n),c=Math.sqrt(o*o+p*p),h=this.mass,u=(t-c)/(h*this.zpp_inner.space.pre_dt);return n.dispose(),u}_getArbiters(){return this.zpp_inner.wrap_arbiters==null&&(this.zpp_inner.wrap_arbiters=Dl.get(this.zpp_inner.arbiters,!0)),this.zpp_inner.wrap_arbiters}_getConstraints(){return this.zpp_inner.wrap_constraints==null&&(this.zpp_inner.wrap_constraints=Ll.get(this.zpp_inner.constraints,!0)),this.zpp_inner.wrap_constraints}_arbiterImpulseQuery(t,n,s){let i=0,l=0,r=0,o=this._getArbiters().iterator();for(;;){o.zpp_inner.zpp_inner.valmod();let p=o.zpp_inner.zpp_gl();if(o.zpp_critical=!0,o.zpp_i>=p){o.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=o,o.zpp_inner=null;break}o.zpp_critical=!1;let c=o.zpp_inner.at(o.zpp_i++),h=c.zpp_inner;if(h.type!==t||s!=null&&h.b2!==s.zpp_inner&&h.b1!==s.zpp_inner)continue;let u=n(c),x=u.zpp_inner;x._validate!=null&&x._validate(),i+=x.x,x._validate!=null&&x._validate(),l+=x.y,x._validate!=null&&x._validate(),r+=x.z,u.dispose()}return hi.get(i,l,r)}};function io(g,e){let t=nn("BodyType_DYNAMIC",()=>new e.phys.BodyType);if(g===t)return 2;let n=nn("BodyType_KINEMATIC",()=>new e.phys.BodyType);return g===n?3:1}function so(g){let e=g.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}}var Uo=me();Uo.phys.Body=We;$l(g=>We._wrap(g));var Ci={SHAPES:1,JOINTS:2,CONTACTS:4,AABB:8,CENTER_OF_MASS:16,VELOCITIES:32,ALL:63};var ni=class g{constructor(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let n=e==null?null:e.zpp_inner;this.zpp_inner=new ci(n,t),this.zpp_inner.outer=this,e!=null&&e.zpp_inner?.weak&&e.dispose()}get _inner(){return this}static _wrap(e){return e?e instanceof g?e:e instanceof ci?e.outer?e.outer:Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?.outer?e.zpp_inner.outer:Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n}):null}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get gravity(){return this.zpp_inner.wrap_gravity==null&&this.zpp_inner.getgravity(),this.zpp_inner.wrap_gravity}set gravity(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Space::gravity cannot be null");this.zpp_inner.wrap_gravity==null&&this.zpp_inner.getgravity(),this.zpp_inner.wrap_gravity.set(e),e.zpp_inner?.weak&&e.dispose()}get broadphase(){return this.zpp_inner.bphase.is_sweep?(Q.Broadphase_SWEEP_AND_PRUNE==null&&(Q.internal=!0,Q.Broadphase_SWEEP_AND_PRUNE=new(me()).space.Broadphase,Q.internal=!1),Q.Broadphase_SWEEP_AND_PRUNE):(Q.Broadphase_DYNAMIC_AABB_TREE==null&&(Q.internal=!0,Q.Broadphase_DYNAMIC_AABB_TREE=new(me()).space.Broadphase,Q.internal=!1),Q.Broadphase_DYNAMIC_AABB_TREE)}get sortContacts(){return this.zpp_inner.sortcontacts}set sortContacts(e){this.zpp_inner.sortcontacts=e}get worldAngularDrag(){return this.zpp_inner.global_ang_drag}set worldAngularDrag(e){if(e!==e)throw new Error("Error: Space::worldAngularDrag cannot be NaN");this.zpp_inner.global_ang_drag=e}get worldLinearDrag(){return this.zpp_inner.global_lin_drag}set worldLinearDrag(e){if(e!==e)throw new Error("Error: Space::worldLinearDrag cannot be NaN");this.zpp_inner.global_lin_drag=e}get compounds(){return this.zpp_inner.wrap_compounds}get bodies(){return this.zpp_inner.wrap_bodies}get liveBodies(){return this.zpp_inner.wrap_live}get constraints(){return this.zpp_inner.wrap_constraints}get liveConstraints(){return this.zpp_inner.wrap_livecon}get world(){return We._wrap(this.zpp_inner.__static)}get arbiters(){if(this.zpp_inner.wrap_arbiters==null){let e=new Xn;e.space=this.zpp_inner,this.zpp_inner.wrap_arbiters=e}return this.zpp_inner.wrap_arbiters}get listeners(){return this.zpp_inner.wrap_listeners}get timeStamp(){return this.zpp_inner.stamp}get elapsedTime(){return this.zpp_inner.time}step(e,t=10,n=10){if(e!==e)throw new Error("Error: deltaTime cannot be NaN");if(e<=0)throw new Error("Error: deltaTime must be strictly positive");if(t<=0)throw new Error("Error: must use atleast one velocity iteration");if(n<=0)throw new Error("Error: must use atleast one position iteration");this.zpp_inner.step(e,t,n)}clear(){if(this.zpp_inner.midstep)throw new Error("Error: Space::clear() cannot be called during space step()");this.zpp_inner.clear()}visitBodies(e){if(e==null)throw new Error("Error: lambda cannot be null for Space::visitBodies");let t=me(),n=this.zpp_inner.wrap_bodies;n.zpp_inner.valmod();let s=t.phys.BodyIterator.get(n);for(;;){s.zpp_inner.zpp_inner.valmod();let r=s.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(s.zpp_critical=!0,s.zpp_i>=a){s.zpp_next=t.phys.BodyIterator.zpp_pool,t.phys.BodyIterator.zpp_pool=s,s.zpp_inner=null;break}s.zpp_critical=!1,e(s.zpp_inner.at(s.zpp_i++))}let i=this.zpp_inner.wrap_compounds;i.zpp_inner.valmod();let l=t.phys.CompoundIterator.get(i);for(;;){l.zpp_inner.zpp_inner.valmod();let r=l.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(l.zpp_critical=!0,l.zpp_i>=a){l.zpp_next=t.phys.CompoundIterator.zpp_pool,t.phys.CompoundIterator.zpp_pool=l,l.zpp_inner=null;break}l.zpp_critical=!1,l.zpp_inner.at(l.zpp_i++).visitBodies(e)}}visitConstraints(e){if(e==null)throw new Error("Error: lambda cannot be null for Space::visitConstraints");let t=me(),n=this.zpp_inner.wrap_constraints;n.zpp_inner.valmod();let s=t.constraint.ConstraintIterator.get(n);for(;;){s.zpp_inner.zpp_inner.valmod();let r=s.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(s.zpp_critical=!0,s.zpp_i>=a){s.zpp_next=t.constraint.ConstraintIterator.zpp_pool,t.constraint.ConstraintIterator.zpp_pool=s,s.zpp_inner=null;break}s.zpp_critical=!1,e(s.zpp_inner.at(s.zpp_i++))}let i=this.zpp_inner.wrap_compounds;i.zpp_inner.valmod();let l=t.phys.CompoundIterator.get(i);for(;;){l.zpp_inner.zpp_inner.valmod();let r=l.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(l.zpp_critical=!0,l.zpp_i>=a){l.zpp_next=t.phys.CompoundIterator.zpp_pool,t.phys.CompoundIterator.zpp_pool=l,l.zpp_inner=null;break}l.zpp_critical=!1,l.zpp_inner.at(l.zpp_i++).visitConstraints(e)}}visitCompounds(e){if(e==null)throw new Error("Error: lambda cannot be null for Space::visitCompounds");let t=me(),n=this.zpp_inner.wrap_compounds;n.zpp_inner.valmod();let s=t.phys.CompoundIterator.get(n);for(;;){s.zpp_inner.zpp_inner.valmod();let i=s.zpp_inner;i.zpp_inner.valmod(),i.zpp_inner.zip_length&&(i.zpp_inner.zip_length=!1,i.zpp_inner.user_length=i.zpp_inner.inner.length);let l=i.zpp_inner.user_length;if(s.zpp_critical=!0,s.zpp_i>=l){s.zpp_next=t.phys.CompoundIterator.zpp_pool,t.phys.CompoundIterator.zpp_pool=s,s.zpp_inner=null;break}s.zpp_critical=!1;let r=s.zpp_inner.at(s.zpp_i++);e(r),r.visitCompounds(e)}}interactionType(e,t){if(e==null||t==null)throw new Error("Error: Cannot evaluate interaction type for null shapes");let n=e.zpp_inner,s=t.zpp_inner;if((n.body!=null?n.body.outer:null)==null||(s.body!=null?s.body.outer:null)==null)throw new Error("Error: Cannot evaluate interaction type for shapes not part of a Body");let i=n.body,l=s.body;if(i.type==1&&l.type==1||i.outer==l.outer)return null;let r=!1,a=i.constraints.head;for(;a!=null;){let u=a.elt;if(u.ignore&&u.pair_exists(i.id,l.id)){r=!0;break}a=a.next}let o;if(r)o=!1;else{let u=n;for(;u!=null&&u.group==null;)u.ishape!=null?u=u.ishape.body:u.icompound!=null?u=u.icompound.compound:u=u.ibody.compound;let x=u==null?null:u.group,y;if(x==null)y=!1;else{let d=s;for(;d!=null&&d.group==null;)d.ishape!=null?d=d.ishape.body:d.icompound!=null?d=d.icompound.compound:d=d.ibody.compound;let _=d==null?null:d.group;if(_==null)y=!1;else{let f=!1;for(;x!=null&&_!=null;){if(x==_){f=x.ignore;break}x.depth<_.depth?_=_.group:x=x.group}y=f}}o=!y}if(!o)return null;let p=n.filter,c=s.filter,h=i.imass==0&&l.imass==0&&i.iinertia==0&&l.iinertia==0;return(n.sensorEnabled||s.sensorEnabled)&&(p.sensorMask&c.sensorGroup)!=0&&(c.sensorMask&p.sensorGroup)!=0?(Q.InteractionType_SENSOR==null&&(Q.internal=!0,Q.InteractionType_SENSOR=new(me()).callbacks.InteractionType,Q.internal=!1),Q.InteractionType_SENSOR):(n.fluidEnabled||s.fluidEnabled)&&(p.fluidMask&c.fluidGroup)!=0&&(c.fluidMask&p.fluidGroup)!=0&&!h?(Q.InteractionType_FLUID==null&&(Q.internal=!0,Q.InteractionType_FLUID=new(me()).callbacks.InteractionType,Q.internal=!1),Q.InteractionType_FLUID):(p.collisionMask&c.collisionGroup)!=0&&(c.collisionMask&p.collisionGroup)!=0&&!h?(Q.InteractionType_COLLISION==null&&(Q.internal=!0,Q.InteractionType_COLLISION=new(me()).callbacks.InteractionType,Q.internal=!1),Q.InteractionType_COLLISION):null}shapesUnderPoint(e,t,n){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate shapes under a null point :)");let s=e.zpp_inner;s._validate!=null&&s._validate();let i=s.x;s._validate!=null&&s._validate();let l=s.y,r=t==null?null:t.zpp_inner??t,a=this.zpp_inner.shapesUnderPoint(i,l,r,n);return s.weak&&e.dispose(),a}bodiesUnderPoint(e,t,n){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate objects under a null point :)");let s=e.zpp_inner;s._validate!=null&&s._validate();let i=s.x;s._validate!=null&&s._validate();let l=s.y,r=t==null?null:t.zpp_inner??t,a=this.zpp_inner.bodiesUnderPoint(i,l,r,n);return s.weak&&e.dispose(),a}shapesInAABB(e,t=!1,n=!0,s,i){if(e==null)throw new Error("Error: Cannot evaluate shapes in a null AABB :)");let l=e.zpp_inner;if(l._validate!=null&&l._validate(),l.maxx-l.minx==0||l.maxy-l.miny==0)throw new Error("Error: Cannot evaluate shapes in degenerate AABB :/");let r=s==null?null:s.zpp_inner??s;return this.zpp_inner.shapesInAABB(e,n,t,r,i)}bodiesInAABB(e,t=!1,n=!0,s,i){if(e==null)throw new Error("Error: Cannot evaluate objects in a null AABB :)");let l=e.zpp_inner;if(l._validate!=null&&l._validate(),l.maxx-l.minx==0||l.maxy-l.miny==0)throw new Error("Error: Cannot evaluate objects in degenerate AABB :/");let r=s==null?null:s.zpp_inner??s;return this.zpp_inner.bodiesInAABB(e,n,t,r,i)}shapesInCircle(e,t,n=!1,s,i){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate shapes at null circle :)");if(t!==t)throw new Error("Error: Circle radius cannot be NaN");if(t<=0)throw new Error("Error: Circle radius must be strictly positive");let l=s==null?null:s.zpp_inner??s,r=this.zpp_inner.shapesInCircle(e,t,n,l,i);return e.zpp_inner?.weak&&e.dispose(),r}bodiesInCircle(e,t,n=!1,s,i){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate objects at null circle :)");if(t!==t)throw new Error("Error: Circle radius cannot be NaN");if(t<=0)throw new Error("Error: Circle radius must be strictly positive");let l=s==null?null:s.zpp_inner??s,r=this.zpp_inner.bodiesInCircle(e,t,n,l,i);return e.zpp_inner?.weak&&e.dispose(),r}shapesInShape(e,t=!1,n,s){if(e==null)throw new Error("Error: Cannot evaluate shapes in a null shapes :)");let i=e.zpp_inner;if((i.body!=null?i.body.outer:null)==null)throw new Error("Error: Query shape needs to be inside a Body to be well defined :)");if(i.type==1){let r=i.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new(me()).shape.ValidationResult,Q.internal=!1),r!=Q.ValidationResult_VALID)throw new Error("Error: Polygon query shape is invalid : "+r.toString())}let l=n==null?null:n.zpp_inner??n;return this.zpp_inner.shapesInShape(i,t,l,s)}bodiesInShape(e,t=!1,n,s){if(e==null)throw new Error("Error: Cannot evaluate bodies in a null shapes :)");let i=e.zpp_inner;if((i.body!=null?i.body.outer:null)==null)throw new Error("Error: Query shape needs to be inside a Body to be well defined :)");if(i.type==1){let r=i.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new(me()).shape.ValidationResult,Q.internal=!1),r!=Q.ValidationResult_VALID)throw new Error("Error: Polygon query shape is invalid : "+r.toString())}let l=n==null?null:n.zpp_inner??n;return this.zpp_inner.bodiesInShape(i,t,l,s)}shapesInBody(e,t,n){if(e==null)throw new Error("Error: Cannot evaluate shapes in null body");let s=me(),i=n??new s.shape.ShapeList,l=e.zpp_inner.wrap_shapes;l.zpp_inner.valmod();let r=s.shape.ShapeIterator.get(l);for(;;){r.zpp_inner.zpp_inner.valmod();let a=r.zpp_inner;a.zpp_inner.valmod(),a.zpp_inner.zip_length&&(a.zpp_inner.zip_length=!1,a.zpp_inner.user_length=a.zpp_inner.inner.length);let o=a.zpp_inner.user_length;if(r.zpp_critical=!0,r.zpp_i>=o){r.zpp_next=s.shape.ShapeIterator.zpp_pool,s.shape.ShapeIterator.zpp_pool=r,r.zpp_inner=null;break}r.zpp_critical=!1;let p=r.zpp_inner.at(r.zpp_i++);this.shapesInShape(p,!1,t,i)}return i}bodiesInBody(e,t,n){if(e==null)throw new Error("Error: Cannot evaluate shapes in null body");let s=me(),i=n??new s.phys.BodyList,l=e.zpp_inner.wrap_shapes;l.zpp_inner.valmod();let r=s.shape.ShapeIterator.get(l);for(;;){r.zpp_inner.zpp_inner.valmod();let a=r.zpp_inner;a.zpp_inner.valmod(),a.zpp_inner.zip_length&&(a.zpp_inner.zip_length=!1,a.zpp_inner.user_length=a.zpp_inner.inner.length);let o=a.zpp_inner.user_length;if(r.zpp_critical=!0,r.zpp_i>=o){r.zpp_next=s.shape.ShapeIterator.zpp_pool,s.shape.ShapeIterator.zpp_pool=r,r.zpp_inner=null;break}r.zpp_critical=!1;let p=r.zpp_inner.at(r.zpp_i++);this.bodiesInShape(p,!1,t,i)}return i}convexCast(e,t,n=!1,s){if(e==null)throw new Error("Error: Cannot cast null shape :)");let i=e.zpp_inner;if((i.body!=null?i.body.outer:null)==null)throw new Error("Error: Shape must belong to a body to be cast.");if(t<0||t!==t)throw new Error("Error: deltaTime must be positive");return this.zpp_inner.convexCast(i,t,s,n)}convexMultiCast(e,t,n=!1,s,i){if(e==null)throw new Error("Error: Cannot cast null shape :)");let l=e.zpp_inner;if((l.body!=null?l.body.outer:null)==null)throw new Error("Error: Shape must belong to a body to be cast.");if(t<0||t!==t)throw new Error("Error: deltaTime must be positive");return this.zpp_inner.convexMultiCast(l,t,s,n,i)}rayCast(e,t=!1,n){if(e==null)throw new Error("Error: Cannot cast null ray :)");return this.zpp_inner.rayCast(e,t,n)}rayMultiCast(e,t=!1,n,s){if(e==null)throw new Error("Error: Cannot cast null ray :)");return this.zpp_inner.rayMultiCast(e,t,n,s)}debugDraw(e,t=Ci.ALL){if(e==null)throw new Error("Error: drawer cannot be null for Space::debugDraw");let n=(t&Ci.SHAPES)!==0,s=(t&Ci.JOINTS)!==0,i=(t&Ci.CONTACTS)!==0,l=(t&Ci.AABB)!==0,r=(t&Ci.CENTER_OF_MASS)!==0,a=(t&Ci.VELOCITIES)!==0,o=4283417591,p=4287669422,c=4294948685,h=4289058471,u=4293874512,x=1157627903,y=4294961979,d=4291728344;if(this.visitBodies(_=>{let f=_.zpp_inner,z=f.type===2,k=f.type===1?p:z?o:c;if(n){let m=f.shapes.head;for(;m!=null;){let b=m.elt;if(b.type===0){let C=b.circle;b.zip_worldCOM&&b.validate_worldCOM();let v=b.worldCOMx,w=b.worldCOMy,O=C.radius,E=f.rot,M=v+Math.cos(E)*O,N=w+Math.sin(E)*O,Z={x:v,y:w},S={x:M,y:N};z?e.drawSolidCircle(Z,O,S,k):e.drawCircle(Z,O,k)}else if(b.type===1){let C=b.polygon;C.zip_gverts&&C.validate_gverts();let v=[],w=C.gverts.next;for(;w!=null;)v.push({x:w.x,y:w.y}),w=w.next;v.length>=3&&(z?e.drawSolidPolygon(v,k):e.drawPolygon(v,k))}else if(b.type===2){let C=b.capsule;b.zip_aabb&&b.validate_aabb();let v={x:C.spine1x,y:C.spine1y},w={x:C.spine2x,y:C.spine2y};z?e.drawSolidCapsule(v,w,C.radius,k):e.drawCapsule(v,w,C.radius,k)}m=m.next}}if(l&&!f.world){let m=f.aabb,b=m.minx,C=m.miny,v=m.maxx,w=m.maxy;e.drawSegment({x:b,y:C},{x:v,y:C},x),e.drawSegment({x:v,y:C},{x:v,y:w},x),e.drawSegment({x:v,y:w},{x:b,y:w},x),e.drawSegment({x:b,y:w},{x:b,y:C},x)}if(r&&!f.world&&(f.validate_worldCOM(),e.drawPoint({x:f.worldCOMx,y:f.worldCOMy},y)),a&&!f.world&&z){let m=f.posx,b=f.posy;e.drawSegment({x:m,y:b},{x:m+f.velx,y:b+f.vely},d)}}),s&&this.visitConstraints(_=>{if(!_.debugDraw)return;let f=_.zpp_inner,z=f.b1,P=f.b2,k=f.a1worldx??(z!=null?z.posx:0),m=f.a1worldy??(z!=null?z.posy:0),b=f.a2worldx??(P!=null?P.posx:0),C=f.a2worldy??(P!=null?P.posy:0);e.drawSegment({x:k,y:m},{x:b,y:C},h),e.drawPoint({x:k,y:m},h),e.drawPoint({x:b,y:C},h)}),i){let _=f=>{if(f==null)return;let z=f.head;for(;z!=null;){let P=z.elt;if(P!=null){let k=P.nx,m=P.ny,b=P.contacts?.next;for(;b!=null;){let C=b.px,v=b.py;e.drawPoint({x:C,y:v},u),e.drawSegment({x:C,y:v},{x:C+k*8,y:v+m*8},u),b=b.next}}z=z.next}};_(this.zpp_inner.c_arbiters_true),_(this.zpp_inner.c_arbiters_false)}}toString(){return`Space(bodies=${this.bodies.length})`}};var Dn=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate BodyType derp!")}static get STATIC(){return Q.BodyType_STATIC==null&&(Q.internal=!0,Q.BodyType_STATIC=new g,Q.internal=!1),Q.BodyType_STATIC}static get DYNAMIC(){return Q.BodyType_DYNAMIC==null&&(Q.internal=!0,Q.BodyType_DYNAMIC=new g,Q.internal=!1),Q.BodyType_DYNAMIC}static get KINEMATIC(){return Q.BodyType_KINEMATIC==null&&(Q.internal=!0,Q.BodyType_KINEMATIC=new g,Q.internal=!1),Q.BodyType_KINEMATIC}toString(){return this===Q.BodyType_STATIC?"STATIC":this===Q.BodyType_DYNAMIC?"DYNAMIC":this===Q.BodyType_KINEMATIC?"KINEMATIC":""}},Wo=me();Wo.phys.BodyType=Dn;Hl();var Hi=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate MassMode derp!")}static get DEFAULT(){return Q.MassMode_DEFAULT==null&&(Q.internal=!0,Q.MassMode_DEFAULT=new g,Q.internal=!1),Q.MassMode_DEFAULT}static get FIXED(){return Q.MassMode_FIXED==null&&(Q.internal=!0,Q.MassMode_FIXED=new g,Q.internal=!1),Q.MassMode_FIXED}toString(){return this===Q.MassMode_DEFAULT?"DEFAULT":this===Q.MassMode_FIXED?"FIXED":""}},Ko=me();Ko.phys.MassMode=Hi;var Qi=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate InertiaMode derp!")}static get DEFAULT(){return Q.InertiaMode_DEFAULT==null&&(Q.internal=!0,Q.InertiaMode_DEFAULT=new g,Q.internal=!1),Q.InertiaMode_DEFAULT}static get FIXED(){return Q.InertiaMode_FIXED==null&&(Q.internal=!0,Q.InertiaMode_FIXED=new g,Q.internal=!1),Q.InertiaMode_FIXED}toString(){return this===Q.InertiaMode_DEFAULT?"DEFAULT":this===Q.InertiaMode_FIXED?"FIXED":""}},Yo=me();Yo.phys.InertiaMode=Qi;var ui=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate GravMassMode derp!")}static get DEFAULT(){return Q.GravMassMode_DEFAULT==null&&(Q.internal=!0,Q.GravMassMode_DEFAULT=new g,Q.internal=!1),Q.GravMassMode_DEFAULT}static get FIXED(){return Q.GravMassMode_FIXED==null&&(Q.internal=!0,Q.GravMassMode_FIXED=new g,Q.internal=!1),Q.GravMassMode_FIXED}static get SCALED(){return Q.GravMassMode_SCALED==null&&(Q.internal=!0,Q.GravMassMode_SCALED=new g,Q.internal=!1),Q.GravMassMode_SCALED}toString(){return this===Q.GravMassMode_DEFAULT?"DEFAULT":this===Q.GravMassMode_FIXED?"FIXED":this===Q.GravMassMode_SCALED?"SCALED":""}},Xo=me();Xo.phys.GravMassMode=ui;var Mi=class g extends ti{constructor(e=50,t,n,s){super();let i=me(),l=new Hn;if(this.zpp_inner_zn=l,this.zpp_inner=l,this.zpp_inner_i=l,l.outer=this,l.outer_zn=this,l.outer_i=this,this._inner=this,e!==l.radius){if(e!==e)throw new Error("Error: Circle::radius cannot be NaN");if(e<i.Config.epsilon)throw new Error("Error: Circle::radius ("+e+") must be > Config.epsilon");if(e>Rn.FMAX)throw new Error("Error: Circle::radius ("+e+") must be < PR(Const).FMAX");l.radius=e,l.invalidate_radius()}if(t!=null){if(t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=t.zpp_inner;r._validate!=null&&r._validate(),l.localCOMx=r.x,r._validate!=null&&r._validate(),l.localCOMy=r.y,r.weak&&t.dispose()}else l.localCOMx=0,l.localCOMy=0;n==null?Oe.zpp_pool!=null?(l.material=Oe.zpp_pool,Oe.zpp_pool=l.material.next,l.material.next=null):l.material=new Oe:(l.immutable_midstep("Shape::material"),l.setMaterial(n.zpp_inner),l.material.wrapper()),s==null?st.zpp_pool!=null?(l.filter=st.zpp_pool,st.zpp_pool=l.filter.next,l.filter.next=null):l.filter=new st:(l.immutable_midstep("Shape::filter"),l.setFilter(s.zpp_inner),l.filter.wrapper()),l.insert_cbtype(an.ANY_SHAPE.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof Hn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner_zn=t,n.zpp_inner=t,n.zpp_inner_i=t,t.outer=n,t.outer_zn=n,t.outer_i=n,n._inner=n,n}):e.zpp_inner_zn?g._wrap(e.zpp_inner_zn):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i,n}):null}get radius(){return this.zpp_inner_zn.radius}set radius(e){let t=this.zpp_inner_zn,n=me();if(this.zpp_inner.immutable_midstep("Circle::radius"),t.body!=null&&t.body.type===1&&t.body.space!=null)throw new Error("Error: Cannot modifiy radius of Circle contained in static object once added to space");if(e!==t.radius){if(e!==e)throw new Error("Error: Circle::radius cannot be NaN");if(e<n.Config.epsilon)throw new Error("Error: Circle::radius ("+e+") must be > Config.epsilon");if(e>Rn.FMAX)throw new Error("Error: Circle::radius ("+e+") must be < PR(Const).FMAX");t.radius=e,t.invalidate_radius()}}};eo(g=>Mi._wrap(g));var Ho=me();Ho.shape.Circle=Mi;var Zi=class g extends ti{constructor(e,t,n){super();let s=me();if(e==null)throw new Error("Error: localVerts cannot be null");let i=new Qn;if(this.zpp_inner_zn=i,this.zpp_inner=i,this.zpp_inner_i=i,i.outer=this,i.outer_zn=this,i.outer_i=this,this._inner=this,Array.isArray(e)){for(let l of e){if(l==null)throw new Error("Error: Array<Vec2> contains null objects");if(!(l instanceof je))throw new Error("Error: Array<Vec2> contains non Vec2 objects");if(l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");i.wrap_lverts==null&&i.getlverts();let r=l.zpp_inner;r._validate!=null&&r._validate();let a=r.x;r._validate!=null&&r._validate();let o=r.y,p=new je(a,o);i.wrap_lverts.push(p)}for(let l=e.length-1;l>=0;l--)e[l].zpp_inner?.weak&&(e[l].dispose(),e.splice(l,1))}else if(e instanceof s.geom.Vec2List){let l=e,r=l.iterator();for(;;){r.zpp_inner.zpp_inner.valmod();let c=r.zpp_inner.zpp_gl();if(r.zpp_critical=!0,r.zpp_i>=c){r.zpp_next=s.geom.Vec2Iterator.zpp_pool,s.geom.Vec2Iterator.zpp_pool=r,r.zpp_inner=null;break}r.zpp_critical=!1;let h=r.zpp_inner.at(r.zpp_i++);if(h==null)throw new Error("Error: Vec2List contains null objects");if(h.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");i.wrap_lverts==null&&i.getlverts();let u=h.zpp_inner;u._validate!=null&&u._validate();let x=u.x;u._validate!=null&&u._validate();let y=u.y,d=new je(x,y);i.wrap_lverts.push(d)}l.zpp_inner._validate!=null&&l.zpp_inner._validate();let a=l.zpp_inner.inner,o=null,p=a.head;for(;p!=null;){let c=p.elt;c.outer?.zpp_inner?.weak?(p=a.erase(o),c.outer.zpp_inner.weak&&c.outer.dispose()):(o=p,p=p.next)}}else if(e instanceof s.geom.GeomPoly){let l=e.zpp_inner.vertices;if(l!=null){let r=l;do{i.wrap_lverts==null&&i.getlverts();let a=new je(r.x,r.y);i.wrap_lverts.push(a),r=r.next}while(r!==l)}}else throw new Error("Error: Invalid type for polygon object, should be Array<Vec2>, Vec2List, GeomPoly or for flash10+ flash.Vector<Vec2>");t==null?Oe.zpp_pool!=null?(i.material=Oe.zpp_pool,Oe.zpp_pool=i.material.next,i.material.next=null):i.material=new Oe:(i.immutable_midstep("Shape::material"),i.setMaterial(t.zpp_inner),i.material.wrapper()),n==null?st.zpp_pool!=null?(i.filter=st.zpp_pool,st.zpp_pool=i.filter.next,i.filter.next=null):i.filter=new st:(i.immutable_midstep("Shape::filter"),i.setFilter(n.zpp_inner),i.filter.wrapper()),i.insert_cbtype(an.ANY_SHAPE.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof Qn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner_zn=t,n.zpp_inner=t,n.zpp_inner_i=t,t.outer=n,t.outer_zn=n,t.outer_i=n,n._inner=n,n}):e.zpp_inner_zn?g._wrap(e.zpp_inner_zn):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i,n}):null}static rect(e,t,n,s,i=!1){if(e!==e||t!==t||n!==n||s!==s)throw new Error("Error: Polygon.rect cannot accept NaN arguments");let l=new je(e,t);l.zpp_inner.weak=i;let r=new je(e+n,t);r.zpp_inner.weak=i;let a=new je(e+n,t+s);a.zpp_inner.weak=i;let o=new je(e,t+s);return o.zpp_inner.weak=i,[l,r,a,o]}static box(e,t=e,n=!1){if(e!==e||t!==t)throw new Error("Error: Polygon.box cannot accept NaN arguments");return g.rect(-e/2,-t/2,e,t,n)}static regular(e,t,n,s=0,i=!1){if(e!==e||t!==t||s!==s)throw new Error("Error: Polygon.regular cannot accept NaN arguments");let l=[],r=Math.PI*2/n;for(let a=0;a<n;a++){let o=a*r+s,p=Math.cos(o)*e,c=Math.sin(o)*t,h=new je(p,c);h.zpp_inner.weak=i,l.push(h)}return l}get localVerts(){return this.zpp_inner_zn.wrap_lverts==null&&this.zpp_inner_zn.getlverts(),this.zpp_inner_zn.wrap_lverts}get worldVerts(){return this.zpp_inner_zn.wrap_gverts==null&&this.zpp_inner_zn.getgverts(),this.zpp_inner_zn.wrap_gverts}get edges(){return this.zpp_inner_zn.wrap_edges==null&&this.zpp_inner_zn.getedges(),this.zpp_inner_zn.wrap_edges}validity(){return this.zpp_inner_zn.valid()}};to(g=>Zi._wrap(g));var Qo=me();Qo.shape.Polygon=Zi;var ki=class g extends ti{constructor(e=100,t=40,n,s,i){super();let l=me();if(e!==e||t!==t)throw new Error("Error: Capsule dimensions cannot be NaN");if(t<=0)throw new Error("Error: Capsule height ("+t+") must be > 0");if(e<t)throw new Error("Error: Capsule width ("+e+") must be >= height ("+t+")");let r=t/2,a=(e-t)/2,o=new $n;if(this.zpp_inner_zn=o,this.zpp_inner=o,this.zpp_inner_i=o,o.outer=this,o.outer_zn=this,o.outer_i=this,this._inner=this,r<l.Config.epsilon)throw new Error("Error: Capsule radius ("+r+") must be > Config.epsilon");if(r>Rn.FMAX)throw new Error("Error: Capsule radius ("+r+") must be < PR(Const).FMAX");if(o.radius=r,o.halfLength=a,o.invalidate_radius(),a>0&&o.invalidate_halfLength(),n!=null){if(n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=n.zpp_inner;p._validate!=null&&p._validate(),o.localCOMx=p.x,p._validate!=null&&p._validate(),o.localCOMy=p.y,p.weak&&n.dispose()}else o.localCOMx=0,o.localCOMy=0;s==null?Oe.zpp_pool!=null?(o.material=Oe.zpp_pool,Oe.zpp_pool=o.material.next,o.material.next=null):o.material=new Oe:(o.immutable_midstep("Shape::material"),o.setMaterial(s.zpp_inner),o.material.wrapper()),i==null?st.zpp_pool!=null?(o.filter=st.zpp_pool,st.zpp_pool=o.filter.next,o.filter.next=null):o.filter=new st:(o.immutable_midstep("Shape::filter"),o.setFilter(i.zpp_inner),o.filter.wrapper()),o.insert_cbtype(an.ANY_SHAPE.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof $n?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner_zn=t,n.zpp_inner=t,n.zpp_inner_i=t,t.outer=n,t.outer_zn=n,t.outer_i=n,n._inner=n,n}):e.zpp_inner_zn?g._wrap(e.zpp_inner_zn):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i,n}):null}get radius(){return this.zpp_inner_zn.radius}set radius(e){let t=this.zpp_inner_zn,n=me();if(this.zpp_inner.immutable_midstep("Capsule::radius"),t.body!=null&&t.body.type===1&&t.body.space!=null)throw new Error("Error: Cannot modify radius of Capsule contained in static object once added to space");if(e!==t.radius){if(e!==e)throw new Error("Error: Capsule::radius cannot be NaN");if(e<n.Config.epsilon)throw new Error("Error: Capsule::radius ("+e+") must be > Config.epsilon");if(e>Rn.FMAX)throw new Error("Error: Capsule::radius ("+e+") must be < PR(Const).FMAX");t.radius=e,t.invalidate_radius()}}get halfLength(){return this.zpp_inner_zn.halfLength}set halfLength(e){let t=this.zpp_inner_zn;if(this.zpp_inner.immutable_midstep("Capsule::halfLength"),t.body!=null&&t.body.type===1&&t.body.space!=null)throw new Error("Error: Cannot modify halfLength of Capsule contained in static object once added to space");if(e!==t.halfLength){if(e!==e)throw new Error("Error: Capsule::halfLength cannot be NaN");if(e<0)throw new Error("Error: Capsule::halfLength ("+e+") must be >= 0");t.halfLength=e,t.invalidate_halfLength()}}get width(){return 2*(this.zpp_inner_zn.halfLength+this.zpp_inner_zn.radius)}get height(){return 2*this.zpp_inner_zn.radius}};no(g=>ki._wrap(g));var $o=me();$o.shape.Capsule=ki;var $i=class g{get _inner(){return this}constructor(e=0,t=1,n=2,s=1,i=.001){let l;if(Oe.zpp_pool==null?l=new Oe:(l=Oe.zpp_pool,Oe.zpp_pool=l.next,l.next=null),this.zpp_inner=l,l.outer=this,e!==l.elasticity){if(e!==e)throw new Error("Error: Material::elasticity cannot be NaN");l.elasticity=e,l.invalidate(Oe.WAKE|Oe.ARBITERS)}if(t!==l.dynamicFriction){if(t!==t)throw new Error("Error: Material::dynamicFriction cannot be NaN");if(t<0)throw new Error("Error: Material::dynamicFriction cannot be negative");l.dynamicFriction=t,l.invalidate(Oe.WAKE|Oe.ANGDRAG|Oe.ARBITERS)}if(n!==l.staticFriction){if(n!==n)throw new Error("Error: Material::staticFriction cannot be NaN");if(n<0)throw new Error("Error: Material::staticFriction cannot be negative");l.staticFriction=n,l.invalidate(Oe.WAKE|Oe.ARBITERS)}if(s!==l.density*1e3){if(s!==s)throw new Error("Error: Material::density cannot be NaN");if(s<0)throw new Error("Error: Material::density must be positive");l.density=s/1e3,l.invalidate(Oe.WAKE|Oe.PROPS)}if(i!==l.rollingFriction){if(i!==i)throw new Error("Error: Material::rollingFriction cannot be NaN");if(i<0)throw new Error("Error: Material::rollingFriction cannot be negative");l.rollingFriction=i,l.invalidate(Oe.WAKE|Oe.ARBITERS)}}static _wrap(e){return e instanceof g?e:e?e instanceof Oe?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get elasticity(){return this.zpp_inner.elasticity}set elasticity(e){if(e!==this.zpp_inner.elasticity){if(e!==e)throw new Error("Error: Material::elasticity cannot be NaN");this.zpp_inner.elasticity=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ARBITERS)}}get dynamicFriction(){return this.zpp_inner.dynamicFriction}set dynamicFriction(e){if(e!==this.zpp_inner.dynamicFriction){if(e!==e)throw new Error("Error: Material::dynamicFriction cannot be NaN");if(e<0)throw new Error("Error: Material::dynamicFriction cannot be negative");this.zpp_inner.dynamicFriction=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ANGDRAG|Oe.ARBITERS)}}get staticFriction(){return this.zpp_inner.staticFriction}set staticFriction(e){if(e!==this.zpp_inner.staticFriction){if(e!==e)throw new Error("Error: Material::staticFriction cannot be NaN");if(e<0)throw new Error("Error: Material::staticFriction cannot be negative");this.zpp_inner.staticFriction=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ARBITERS)}}get density(){return this.zpp_inner.density*1e3}set density(e){if(e!==this.zpp_inner.density*1e3){if(e!==e)throw new Error("Error: Material::density cannot be NaN");if(e<0)throw new Error("Error: Material::density must be positive");this.zpp_inner.density=e/1e3,this.zpp_inner.invalidate(Oe.WAKE|Oe.PROPS)}}get rollingFriction(){return this.zpp_inner.rollingFriction}set rollingFriction(e){if(e!==this.zpp_inner.rollingFriction){if(e!==e)throw new Error("Error: Material::rollingFriction cannot be NaN");if(e<0)throw new Error("Error: Material::rollingFriction cannot be negative");this.zpp_inner.rollingFriction=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ARBITERS)}}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}copy(){let e=new g(this.zpp_inner.elasticity,this.zpp_inner.dynamicFriction,this.zpp_inner.staticFriction,this.zpp_inner.density*1e3,this.zpp_inner.rollingFriction);return this.zpp_inner.userData!=null&&(e.zpp_inner.userData={...this.zpp_inner.userData}),e}toString(){return"{ elasticity: "+this.zpp_inner.elasticity+" dynamicFriction: "+this.zpp_inner.dynamicFriction+" staticFriction: "+this.zpp_inner.staticFriction+" density: "+this.zpp_inner.density*1e3+" rollingFriction: "+this.zpp_inner.rollingFriction+" }"}static wood(){return new g(.4,.2,.38,.7,.005)}static steel(){return new g(.2,.57,.74,7.8,.001)}static ice(){return new g(.3,.03,.1,.9,1e-4)}static rubber(){return new g(.8,1,1.4,1.5,.01)}static glass(){return new g(.4,.4,.94,2.6,.002)}static sand(){return new g(-1,.45,.6,1.6,16)}};Oe._wrapFn=g=>Ze(g,e=>{let t=Object.create($i.prototype);return t.zpp_inner=e,e.outer=t,t});var es=class g{get _inner(){return this}constructor(e=1,t=-1,n=1,s=-1,i=1,l=-1){let r;st.zpp_pool==null?r=new st:(r=st.zpp_pool,st.zpp_pool=r.next,r.next=null),this.zpp_inner=r,r.outer=this,r.collisionGroup!=e&&(r.collisionGroup=e,r.invalidate()),r.collisionMask!=t&&(r.collisionMask=t,r.invalidate()),r.sensorGroup!=n&&(r.sensorGroup=n,r.invalidate()),r.sensorMask!=s&&(r.sensorMask=s,r.invalidate()),r.fluidGroup!=i&&(r.fluidGroup=i,r.invalidate()),r.fluidMask!=l&&(r.fluidMask=l,r.invalidate())}static _wrap(e){return e instanceof g?e:e?e instanceof st?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get collisionGroup(){return this.zpp_inner.collisionGroup}set collisionGroup(e){this.zpp_inner.collisionGroup!=e&&(this.zpp_inner.collisionGroup=e,this.zpp_inner.invalidate())}get collisionMask(){return this.zpp_inner.collisionMask}set collisionMask(e){this.zpp_inner.collisionMask!=e&&(this.zpp_inner.collisionMask=e,this.zpp_inner.invalidate())}get sensorGroup(){return this.zpp_inner.sensorGroup}set sensorGroup(e){this.zpp_inner.sensorGroup!=e&&(this.zpp_inner.sensorGroup=e,this.zpp_inner.invalidate())}get sensorMask(){return this.zpp_inner.sensorMask}set sensorMask(e){this.zpp_inner.sensorMask!=e&&(this.zpp_inner.sensorMask=e,this.zpp_inner.invalidate())}get fluidGroup(){return this.zpp_inner.fluidGroup}set fluidGroup(e){this.zpp_inner.fluidGroup!=e&&(this.zpp_inner.fluidGroup=e,this.zpp_inner.invalidate())}get fluidMask(){return this.zpp_inner.fluidMask}set fluidMask(e){this.zpp_inner.fluidMask!=e&&(this.zpp_inner.fluidMask=e,this.zpp_inner.invalidate())}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get shapes(){if(this.zpp_inner.wrap_shapes==null){let e=me();this.zpp_inner.wrap_shapes=e.zpp_nape.util.ZPP_ShapeList.get(this.zpp_inner.shapes,!0)}return this.zpp_inner.wrap_shapes}shouldCollide(e){if(e==null)throw new Error("Error: filter argument cannot be null for shouldCollide");return this.zpp_inner.shouldCollide(e.zpp_inner)}shouldSense(e){if(e==null)throw new Error("Error: filter argument cannot be null for shouldSense");return this.zpp_inner.shouldSense(e.zpp_inner)}shouldFlow(e){if(e==null)throw new Error("Error: filter argument cannot be null for shouldFlow");return this.zpp_inner.shouldFlow(e.zpp_inner)}copy(){return new g(this.zpp_inner.collisionGroup,this.zpp_inner.collisionMask,this.zpp_inner.sensorGroup,this.zpp_inner.sensorMask,this.zpp_inner.fluidGroup,this.zpp_inner.fluidMask)}toString(){let e=(t,n)=>{let s="",i="0123456789ABCDEF",l=t;do s=i.charAt(l&15)+s,l>>>=4;while(l>0);for(;s.length<n;)s="0"+s;return s};return"{ collision: "+e(this.zpp_inner.collisionGroup,8)+"~"+e(this.zpp_inner.collisionMask,8)+" sensor: "+e(this.zpp_inner.sensorGroup,8)+"~"+e(this.zpp_inner.sensorMask,8)+" fluid: "+e(this.zpp_inner.fluidGroup,8)+"~"+e(this.zpp_inner.fluidMask,8)+" }"}};st._wrapFn=g=>Ze(g,e=>{let t=Object.create(es.prototype);return t.zpp_inner=e,e.outer=t,t});var Ei=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate Broadphase derp!")}static get DYNAMIC_AABB_TREE(){return Q.Broadphase_DYNAMIC_AABB_TREE==null&&(Q.internal=!0,Q.Broadphase_DYNAMIC_AABB_TREE=new g,Q.internal=!1),Q.Broadphase_DYNAMIC_AABB_TREE}static get SWEEP_AND_PRUNE(){return Q.Broadphase_SWEEP_AND_PRUNE==null&&(Q.internal=!0,Q.Broadphase_SWEEP_AND_PRUNE=new g,Q.internal=!1),Q.Broadphase_SWEEP_AND_PRUNE}toString(){return this===Q.Broadphase_DYNAMIC_AABB_TREE?"DYNAMIC_AABB_TREE":this===Q.Broadphase_SWEEP_AND_PRUNE?"SWEEP_AND_PRUNE":""}};var ts=class ts{constructor(){this.debugDraw=!0;this._inner=this}static _wrap(e){return e==null?null:e instanceof ts?e:e.zpp_inner?.outer instanceof ts?e.zpp_inner.outer:Ze(e,t=>{let n=Object.create(ts.prototype);return n.zpp_inner=t.zpp_inner??t,n._inner=t,n.zpp_inner.outer=n,n.debugDraw=t.debugDraw??!0,n})}get space(){return this.zpp_inner.space==null?null:this.zpp_inner.space.outer}set space(e){if(this.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Constraint belonging to a Compound, only the root Compound space can be set");if((this.zpp_inner.space==null?null:this.zpp_inner.space.outer)!=e)if(this.zpp_inner.component!=null&&(this.zpp_inner.component.woken=!1),this.zpp_inner.clearcache(),this.zpp_inner.space!=null&&this.zpp_inner.space.wrap_constraints.remove(this),e!=null){let s=(e._inner?.zpp_inner??e.zpp_inner).wrap_constraints;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}else this.zpp_inner.space=null}get compound(){return this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer}set compound(e){let t=this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer;if(t!=e&&(t?.zpp_inner.wrap_constraints.remove(this),e!=null)){let s=e.zpp_inner.wrap_constraints;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}}get active(){return this.zpp_inner.active}set active(e){this.zpp_inner.active!=e&&(this.zpp_inner.component!=null&&(this.zpp_inner.component.woken=!1),this.zpp_inner.clearcache(),e?(this.zpp_inner.active=e,this.zpp_inner.activate(),this.zpp_inner.space!=null&&(this.zpp_inner.component!=null&&(this.zpp_inner.component.sleeping=!0),this.zpp_inner.space.wake_constraint(this.zpp_inner,!0))):(this.zpp_inner.space!=null&&(this.zpp_inner.wake(),this.zpp_inner.space.live_constraints.remove(this.zpp_inner)),this.zpp_inner.active=e,this.zpp_inner.deactivate()))}get ignore(){return this.zpp_inner.ignore}set ignore(e){this.zpp_inner.ignore!=e&&(this.zpp_inner.ignore=e,this.zpp_inner.wake())}get stiff(){return this.zpp_inner.stiff}set stiff(e){this.zpp_inner.stiff!=e&&(this.zpp_inner.stiff=e,this.zpp_inner.wake())}get frequency(){return this.zpp_inner.frequency}set frequency(e){if(e!==e)throw new Error("Error: Constraint::Frequency cannot be NaN");if(e<=0)throw new Error("Error: Constraint::Frequency must be >0");this.zpp_inner.frequency!=e&&(this.zpp_inner.frequency=e,this.zpp_inner.stiff||this.zpp_inner.wake())}get damping(){return this.zpp_inner.damping}set damping(e){if(e!==e)throw new Error("Error: Constraint::Damping cannot be Nan");if(e<0)throw new Error("Error: Constraint::Damping must be >=0");this.zpp_inner.damping!=e&&(this.zpp_inner.damping=e,this.zpp_inner.stiff||this.zpp_inner.wake())}get maxForce(){return this.zpp_inner.maxForce}set maxForce(e){if(e!==e)throw new Error("Error: Constraint::maxForce cannot be NaN");if(e<0)throw new Error("Error: Constraint::maxForce must be >=0");this.zpp_inner.maxForce!=e&&(this.zpp_inner.maxForce=e,this.zpp_inner.wake())}get maxError(){return this.zpp_inner.maxError}set maxError(e){if(e!==e)throw new Error("Error: Constraint::maxError cannot be NaN");if(e<0)throw new Error("Error: Constraint::maxError must be >=0");this.zpp_inner.maxError!=e&&(this.zpp_inner.maxError=e,this.zpp_inner.wake())}get breakUnderForce(){return this.zpp_inner.breakUnderForce}set breakUnderForce(e){this.zpp_inner.breakUnderForce!=e&&(this.zpp_inner.breakUnderForce=e,this.zpp_inner.wake())}get breakUnderError(){return this.zpp_inner.breakUnderError}set breakUnderError(e){this.zpp_inner.breakUnderError!=e&&(this.zpp_inner.breakUnderError=e,this.zpp_inner.wake())}get removeOnBreak(){return this.zpp_inner.removeOnBreak}set removeOnBreak(e){this.zpp_inner.removeOnBreak=e}get isSleeping(){if(this.zpp_inner.space==null||!this.zpp_inner.active)throw new Error("Error: isSleeping only makes sense if constraint is active and inside a space");return this.zpp_inner.component.sleeping}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get cbTypes(){return this.zpp_inner.wrap_cbTypes==null&&this.zpp_inner.setupcbTypes(),this.zpp_inner.wrap_cbTypes}impulse(){return null}bodyImpulse(e){return null}visitBodies(e){}copy(){return ts._wrap(this.zpp_inner.copy())}toString(){return"{Constraint}"}};ts.zpp_internalAlloc=!1;var sn=ts;function lo(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function oo(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function Ml(g){g.zpp_inner.weak&&g.dispose()}var ns=class g extends sn{constructor(e,t,n,s){super();let i=new fi;if(this.zpp_inner=i,i.outer=this,i.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");if(i.a1localx=lo(n),i.a1localy=oo(n),Ml(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");i.a2localx=lo(s),i.a2localy=oo(s),Ml(s)}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof fi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),Ml(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),Ml(e)}impulse(){let e=me(),t=new e.geom.MatMN(2,1);return t.zpp_inner.x[0]=this.zpp_inner.jAccx,t.zpp_inner.x[1]=this.zpp_inner.jAccy,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};fi._wrapFn=g=>Ze(g,e=>{let t=Object.create(ns.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});function ro(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function ao(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function Zl(g){g.zpp_inner.weak&&g.dispose()}var is=class g extends sn{constructor(e,t,n,s,i,l){super();let r=new _i;if(this.zpp_inner=r,r.outer=this,r.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");let a=ro(n),o=ao(n);if(r.a1localx=a,r.a1localy=o,Zl(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");let p=ro(s),c=ao(s);if(r.a2localx=p,r.a2localy=c,Zl(s),this.zpp_inner.immutable_midstep("DistanceJoint::jointMin"),i!==i)throw new Error("Error: DistanceJoint::jointMin cannot be NaN");if(i<0)throw new Error("Error: DistanceJoint::jointMin must be >= 0");if(r.jointMin!=i&&(r.jointMin=i,r.wake()),this.zpp_inner.immutable_midstep("DistanceJoint::jointMax"),l!==l)throw new Error("Error: DistanceJoint::jointMax cannot be NaN");if(l<0)throw new Error("Error: DistanceJoint::jointMax must be >= 0");r.jointMax!=l&&(r.jointMax=l,r.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof _i?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),Zl(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),Zl(e)}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("DistanceJoint::jointMin"),e!==e)throw new Error("Error: DistanceJoint::jointMin cannot be NaN");if(e<0)throw new Error("Error: DistanceJoint::jointMin must be >= 0");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("DistanceJoint::jointMax"),e!==e)throw new Error("Error: DistanceJoint::jointMax cannot be NaN");if(e<0)throw new Error("Error: DistanceJoint::jointMax must be >= 0");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}isSlack(){if(this.zpp_inner.b1==null||this.zpp_inner.b2==null)throw new Error("Error: Cannot compute slack for DistanceJoint if either body is null.");return this.zpp_inner.is_slack()}impulse(){let e=me(),t=new e.geom.MatMN(1,1);if(0>=t.zpp_inner.m||0>=t.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return t.zpp_inner.x[0*t.zpp_inner.n]=this.zpp_inner.jAcc,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get(0,0,0)}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};_i._wrapFn=g=>Ze(g,e=>{let t=Object.create(is.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var ss=class g extends sn{constructor(e,t,n,s,i=1){super();let l=new Je;if(this.zpp_inner=l,l.outer=this,l.outer_zn=this,this._setBody1(e),this._setBody2(t),this.zpp_inner.immutable_midstep("AngleJoint::jointMin"),n!==n)throw new Error("Error: AngleJoint::jointMin cannot be NaN");if(l.jointMin!=n&&(l.jointMin=n,l.wake()),this.zpp_inner.immutable_midstep("AngleJoint::jointMax"),s!==s)throw new Error("Error: AngleJoint::jointMax cannot be NaN");if(l.jointMax!=s&&(l.jointMax=s,l.wake()),this.zpp_inner.immutable_midstep("AngleJoint::ratio"),i!==i)throw new Error("Error: AngleJoint::ratio cannot be NaN");l.ratio!=i&&(l.ratio=i,l.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof Je?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("AngleJoint::jointMin"),e!==e)throw new Error("Error: AngleJoint::jointMin cannot be NaN");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("AngleJoint::jointMax"),e!==e)throw new Error("Error: AngleJoint::jointMax cannot be NaN");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}get ratio(){return this.zpp_inner.ratio}set ratio(e){if(this.zpp_inner.immutable_midstep("AngleJoint::ratio"),e!==e)throw new Error("Error: AngleJoint::ratio cannot be NaN");this.zpp_inner.ratio!=e&&(this.zpp_inner.ratio=e,this.zpp_inner.wake())}isSlack(){if(this.zpp_inner.b1==null||this.zpp_inner.b2==null)throw new Error("Error: Cannot compute slack for AngleJoint if either body is null.");return this.zpp_inner.is_slack()}impulse(){let e=me(),t=new e.geom.MatMN(1,1);if(0>=t.zpp_inner.m||0>=t.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return t.zpp_inner.x[0*t.zpp_inner.n]=this.zpp_inner.jAcc,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get(0,0,0)}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};Je._wrapFn=g=>Ze(g,e=>{let t=Object.create(ss.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var ls=class g extends sn{constructor(e,t,n=0,s=1){super();let i=new mi;if(this.zpp_inner=i,i.outer=this,i.outer_zn=this,this._setBody1(e),this._setBody2(t),this.zpp_inner.immutable_midstep("MotorJoint::rate"),n!==n)throw new Error("Error: MotorJoint::rate cannot be NaN");if(i.rate!=n&&(i.rate=n,i.wake()),this.zpp_inner.immutable_midstep("MotorJoint::ratio"),s!==s)throw new Error("Error: MotorJoint::ratio cannot be NaN");i.ratio!=s&&(i.ratio=s,i.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof mi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get rate(){return this.zpp_inner.rate}set rate(e){if(this.zpp_inner.immutable_midstep("MotorJoint::rate"),e!==e)throw new Error("Error: MotorJoint::rate cannot be NaN");this.zpp_inner.rate!=e&&(this.zpp_inner.rate=e,this.zpp_inner.wake())}get ratio(){return this.zpp_inner.ratio}set ratio(e){if(this.zpp_inner.immutable_midstep("MotorJoint::ratio"),e!==e)throw new Error("Error: MotorJoint::ratio cannot be NaN");this.zpp_inner.ratio!=e&&(this.zpp_inner.ratio=e,this.zpp_inner.wake())}impulse(){let e=me(),t=new e.geom.MatMN(1,1);if(0>=t.zpp_inner.m||0>=t.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return t.zpp_inner.x[0*t.zpp_inner.n]=this.zpp_inner.jAcc,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};mi._wrapFn=g=>Ze(g,e=>{let t=Object.create(ls.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});function Fl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function Rl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function ks(g){g.zpp_inner.weak&&g.dispose()}var os=class g extends sn{constructor(e,t,n,s,i,l,r){super();let a=new yi;if(this.zpp_inner=a,a.outer=this,a.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");if(a.a1localx=Fl(n),a.a1localy=Rl(n),ks(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");if(a.a2localx=Fl(s),a.a2localy=Rl(s),ks(s),i?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(i==null)throw new Error("Error: Constraint::direction cannot be null");if(a.nlocalx=Fl(i),a.nlocaly=Rl(i),a.zip_n=!0,ks(i),this.zpp_inner.immutable_midstep("LineJoint::jointMin"),l!==l)throw new Error("Error: AngleJoint::jointMin cannot be NaN");if(a.jointMin!=l&&(a.jointMin=l,a.wake()),this.zpp_inner.immutable_midstep("LineJoint::jointMax"),r!==r)throw new Error("Error: AngleJoint::jointMax cannot be NaN");a.jointMax!=r&&(a.jointMax=r,a.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof yi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),ks(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),ks(e)}get direction(){return this.zpp_inner.wrap_n==null&&this.zpp_inner.setup_n(),this.zpp_inner.wrap_n}set direction(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::direction cannot be null");this.zpp_inner.wrap_n==null&&this.zpp_inner.setup_n(),this.zpp_inner.wrap_n.set(e),ks(e)}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("LineJoint::jointMin"),e!==e)throw new Error("Error: AngleJoint::jointMin cannot be NaN");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("LineJoint::jointMax"),e!==e)throw new Error("Error: AngleJoint::jointMax cannot be NaN");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}impulse(){let e=me(),t=new e.geom.MatMN(2,1);return t.zpp_inner.x[0]=this.zpp_inner.jAccx,t.zpp_inner.x[1]=this.zpp_inner.jAccy,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};yi._wrapFn=g=>Ze(g,e=>{let t=Object.create(os.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var el=class g{get _inner(){return this}constructor(e,t){if(e<=0||t<=0)throw new Error("Error: MatMN::dimensions cannot be < 1");this.zpp_inner=new Ri(e,t),this.zpp_inner.outer=this}static _wrap(e){return e instanceof g?e:e?e instanceof Ri?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get rows(){return this.zpp_inner.m}get cols(){return this.zpp_inner.n}x(e,t){if(e<0||t<0||e>=this.zpp_inner.m||t>=this.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return this.zpp_inner.x[e*this.zpp_inner.n+t]}setx(e,t,n){if(e<0||t<0||e>=this.zpp_inner.m||t>=this.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return this.zpp_inner.x[e*this.zpp_inner.n+t]=n}equals(e,t=0){if(e==null||this.zpp_inner.m!==e.zpp_inner.m||this.zpp_inner.n!==e.zpp_inner.n)return!1;for(let n=0;n<this.zpp_inner.x.length;n++){let s=this.zpp_inner.x[n]-e.zpp_inner.x[n];if((s<0?-s:s)>t)return!1}return!0}clone(){let e=new g(this.zpp_inner.m,this.zpp_inner.n);for(let t=0;t<this.zpp_inner.x.length;t++)e.zpp_inner.x[t]=this.zpp_inner.x[t];return e}toString(){let e="{ ",t=!0;for(let n=0;n<this.zpp_inner.m;n++){t||(e+="; "),t=!1;for(let s=0;s<this.zpp_inner.n;s++){if(n<0||s<0||n>=this.zpp_inner.m||s>=this.zpp_inner.n)throw new Error("Error: MatMN indices out of range");e+=this.zpp_inner.x[n*this.zpp_inner.n+s]+" "}}return e+="}",e}transpose(){let e=new g(this.zpp_inner.n,this.zpp_inner.m);for(let t=0;t<this.zpp_inner.m;t++)for(let n=0;n<this.zpp_inner.n;n++)e.zpp_inner.x[n*e.zpp_inner.n+t]=this.zpp_inner.x[t*this.zpp_inner.n+n];return e}mul(e){let t=e;if(this.zpp_inner.n!==t.zpp_inner.m)throw new Error("Error: Matrix dimensions aren't compatible");let n=new g(this.zpp_inner.m,t.zpp_inner.n);for(let s=0;s<this.zpp_inner.m;s++)for(let i=0;i<t.zpp_inner.n;i++){let l=0;for(let r=0;r<this.zpp_inner.n;r++)l+=this.zpp_inner.x[s*this.zpp_inner.n+r]*t.zpp_inner.x[r*t.zpp_inner.n+i];n.zpp_inner.x[s*n.zpp_inner.n+i]=l}return n}},er=me();er.geom.MatMN=el;function tl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function nl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function il(g){g.zpp_inner.weak&&g.dispose()}var rs=class g extends sn{constructor(e,t,n,s,i,l,r,a,o,p,c=1){super();let h=new bi;if(this.zpp_inner=h,h.outer=this,h.outer_zn=this,this._setBody1(e),this._setBody2(t),this._setBody3(n),this._setBody4(s),this._setAnchorInit(i,"anchor1",(u,x)=>{h.a1localx=u,h.a1localy=x}),this._setAnchorInit(l,"anchor2",(u,x)=>{h.a2localx=u,h.a2localy=x}),this._setAnchorInit(r,"anchor3",(u,x)=>{h.a3localx=u,h.a3localy=x}),this._setAnchorInit(a,"anchor4",(u,x)=>{h.a4localx=u,h.a4localy=x}),h.immutable_midstep("PulleyJoint::jointMin"),o!==o)throw new Error("Error: PulleyJoint::jointMin cannot be NaN");if(o<0)throw new Error("Error: PulleyJoint::jointMin must be >= 0");if(h.jointMin!=o&&(h.jointMin=o,h.wake()),h.immutable_midstep("PulleyJoint::jointMax"),p!==p)throw new Error("Error: PulleyJoint::jointMax cannot be NaN");if(p<0)throw new Error("Error: PulleyJoint::jointMax must be >= 0");if(h.jointMax!=p&&(h.jointMax=p,h.wake()),h.immutable_midstep("PulleyJoint::ratio"),c!==c)throw new Error("Error: PulleyJoint::ratio cannot be NaN");h.ratio!=c&&(h.ratio=c,h.wake())}_setAnchorInit(e,t,n){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::"+t+" cannot be null");n(tl(e),nl(e)),il(e)}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof bi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}get body3(){return this.zpp_inner.b3==null?null:We._wrap(this.zpp_inner.b3)}set body3(e){this._setBody3(e)}get body4(){return this.zpp_inner.b4==null?null:We._wrap(this.zpp_inner.b4)}set body4(e){this._setBody4(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b3!=this.zpp_inner.b1&&this.zpp_inner.b4!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&this.zpp_inner.b3!=t&&this.zpp_inner.b4!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b3!=this.zpp_inner.b2&&this.zpp_inner.b4!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&this.zpp_inner.b3!=t&&this.zpp_inner.b4!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}_setBody3(e){this.zpp_inner.immutable_midstep("Constraint::body3");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b3&&(this.zpp_inner.b3!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b3&&this.zpp_inner.b2!=this.zpp_inner.b3&&this.zpp_inner.b4!=this.zpp_inner.b3&&this.zpp_inner.b3.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b3.wake()),this.zpp_inner.b3=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&this.zpp_inner.b2!=t&&this.zpp_inner.b4!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}_setBody4(e){this.zpp_inner.immutable_midstep("Constraint::body4");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b4&&(this.zpp_inner.b4!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b4&&this.zpp_inner.b2!=this.zpp_inner.b4&&this.zpp_inner.b3!=this.zpp_inner.b4&&this.zpp_inner.b4.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b4.wake()),this.zpp_inner.b4=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&this.zpp_inner.b2!=t&&this.zpp_inner.b3!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),tl(e),nl(e),this.zpp_inner.wrap_a1.set(e),il(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),tl(e),nl(e),this.zpp_inner.wrap_a2.set(e),il(e)}get anchor3(){return this.zpp_inner.wrap_a3==null&&this.zpp_inner.setup_a3(),this.zpp_inner.wrap_a3}set anchor3(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor3 cannot be null");this.zpp_inner.wrap_a3==null&&this.zpp_inner.setup_a3(),tl(e),nl(e),this.zpp_inner.wrap_a3.set(e),il(e)}get anchor4(){return this.zpp_inner.wrap_a4==null&&this.zpp_inner.setup_a4(),this.zpp_inner.wrap_a4}set anchor4(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor4 cannot be null");this.zpp_inner.wrap_a4==null&&this.zpp_inner.setup_a4(),tl(e),nl(e),this.zpp_inner.wrap_a4.set(e),il(e)}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("PulleyJoint::jointMin"),e!==e)throw new Error("Error: PulleyJoint::jointMin cannot be NaN");if(e<0)throw new Error("Error: PulleyJoint::jointMin must be >= 0");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("PulleyJoint::jointMax"),e!==e)throw new Error("Error: PulleyJoint::jointMax cannot be NaN");if(e<0)throw new Error("Error: PulleyJoint::jointMax must be >= 0");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}get ratio(){return this.zpp_inner.ratio}set ratio(e){if(this.zpp_inner.immutable_midstep("PulleyJoint::ratio"),e!==e)throw new Error("Error: PulleyJoint::ratio cannot be NaN");this.zpp_inner.ratio!=e&&(this.zpp_inner.ratio=e,this.zpp_inner.wake())}isSlack(){if(this.zpp_inner.b1==null||this.zpp_inner.b2==null||this.zpp_inner.b3==null||this.zpp_inner.b4==null)throw new Error("Error: Cannot compute slack for PulleyJoint if either body is null.");return this.zpp_inner.slack}impulse(){let e=new el(1,1);if(0>=e.zpp_inner.m||0>=e.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return e.zpp_inner.x[0*e.zpp_inner.n]=this.zpp_inner.jAcc,e}bodyImpulse(e){if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let t=this.zpp_inner.b1?.outer??null,n=this.zpp_inner.b2?.outer??null,s=this.zpp_inner.b3?.outer??null,i=this.zpp_inner.b4?.outer??null;if(e!=t&&e!=n&&e!=s&&e!=i)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):hi.get(0,0,0)}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1?.outer??null,n=this.zpp_inner.b2?.outer??null,s=this.zpp_inner.b3?.outer??null,i=this.zpp_inner.b4?.outer??null;t!=null&&e(t),n!=null&&n!=t&&e(n),s!=null&&s!=t&&s!=n&&e(s),i!=null&&i!=t&&i!=n&&i!=s&&e(i)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};bi._wrapFn=g=>Ze(g,e=>{let t=Object.create(rs.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});function po(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function co(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function kl(g){g.zpp_inner.weak&&g.dispose()}var as=class g extends sn{constructor(e,t,n,s,i=0){super();let l=new zi;if(this.zpp_inner=l,l.outer=this,l.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");if(l.a1localx=po(n),l.a1localy=co(n),kl(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");if(l.a2localx=po(s),l.a2localy=co(s),kl(s),this.zpp_inner.immutable_midstep("WeldJoint::phase"),i!==i)throw new Error("Error: WeldJoint::phase cannot be NaN");l.phase!=i&&(l.phase=i,l.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof zi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),kl(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),kl(e)}get phase(){return this.zpp_inner.phase}set phase(e){if(this.zpp_inner.immutable_midstep("WeldJoint::phase"),e!==e)throw new Error("Error: WeldJoint::phase cannot be NaN");this.zpp_inner.phase!=e&&(this.zpp_inner.phase=e,this.zpp_inner.wake())}impulse(){let e=me(),t=new e.geom.MatMN(3,1);return t.zpp_inner.x[0]=this.zpp_inner.jAccx,t.zpp_inner.x[1]=this.zpp_inner.jAccy,t.zpp_inner.x[2]=this.zpp_inner.jAccz,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};zi._wrapFn=g=>Ze(g,e=>{let t=Object.create(as.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var ii=class g extends gi{constructor(){super();let e=new qn;this.zpp_inner=e,e.outer=this,e.outer_i=this,this.zpp_inner_i=e,this._inner=this,e.insert_cbtype(an.ANY_COMPOUND.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof qn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_i=n,n.zpp_inner_i=t,n._inner=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n}):null}get bodies(){return this.zpp_inner.wrap_bodies}get constraints(){return this.zpp_inner.wrap_constraints}get compounds(){return this.zpp_inner.wrap_compounds}get compound(){return this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer}set compound(e){this.zpp_inner.immutable_midstep("Compound::compound");let t=this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer;if(t!==e&&(t?.zpp_inner.wrap_compounds.remove(this),e!=null)){let n=e.zpp_inner.wrap_compounds;n.zpp_inner.reverse_flag?n.push(this):n.unshift(this)}}get space(){return this.zpp_inner.space==null?null:ni._wrap(this.zpp_inner.space.outer)}set space(e){if(this.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of an inner Compound, only the root Compound space can be set");this.zpp_inner.immutable_midstep("Compound::space");let t=this.zpp_inner.space==null?null:this.zpp_inner.space.outer;if(t!==e?._inner&&(t?.zpp_inner.wrap_compounds.remove(this),e!=null)){let n=e._inner.zpp_inner.wrap_compounds;n.zpp_inner.reverse_flag?n.push(this):n.unshift(this)}}copy(){return this.zpp_inner.copy()}breakApart(){this.zpp_inner.breakApart()}visitBodies(e){if(e==null)throw new Error("Error: lambda cannot be null for Compound::visitBodies");let t=this.zpp_inner.wrap_bodies,n=t.length;for(let l=0;l<n;l++)e(t.at(l));let s=this.zpp_inner.wrap_compounds,i=s.length;for(let l=0;l<i;l++)s.at(l).visitBodies(e)}visitConstraints(e){if(e==null)throw new Error("Error: lambda cannot be null for Compound::visitConstraints");let t=this.zpp_inner.wrap_constraints,n=t.length;for(let l=0;l<n;l++)e(t.at(l));let s=this.zpp_inner.wrap_compounds,i=s.length;for(let l=0;l<i;l++)s.at(l).visitConstraints(e)}visitCompounds(e){if(e==null)throw new Error("Error: lambda cannot be null for Compound::visitConstraints");let t=this.zpp_inner.wrap_compounds,n=t.length;for(let s=0;s<n;s++){let i=t.at(s);e(i),i.visitCompounds(e)}}COM(e=!1){let t=new je(0,0),n=0;if(this.visitBodies(s=>{if(s.zpp_inner.wrap_shapes.zpp_inner.inner.head!=null){if(s.zpp_inner.world)throw new Error("Error: Space::world has no worldCOM");s.zpp_inner.wrap_worldCOM==null&&s.zpp_inner.getworldCOM();let l=s.zpp_inner.wrap_worldCOM;if(s.zpp_inner.world)throw new Error("Error: Space::world has no mass");if(s.zpp_inner.validate_mass(),s.zpp_inner.massMode==0&&s.zpp_inner.shapes.head==null)throw new Error("Error: Given current mass mode, Body::mass only makes sense if it contains shapes");let r=s.zpp_inner.cmass;t.addeq(l.mul(r,!0)),n+=r}}),n===0)throw new Error("Error: COM of an empty Compound is undefined silly");return t.muleq(1/n),e&&(t.zpp_inner.weak=!0),t}translate(e){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot translate by null Vec2");let t=e.zpp_inner.weak;return e.zpp_inner.weak=!1,this.visitBodies(n=>{n.zpp_inner.wrap_pos==null&&n.zpp_inner.setupPosition(),n.zpp_inner.wrap_pos.addeq(e)}),e.zpp_inner.weak=t,e.zpp_inner.weak&&e.dispose(),this}rotate(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot rotate about a null Vec2");if(t!==t)throw new Error("Error: Cannot rotate by NaN radians");let n=e.zpp_inner.weak;return e.zpp_inner.weak=!1,this.visitBodies(s=>{s.rotate(e,t)}),e.zpp_inner.weak=n,e.zpp_inner.weak&&e.dispose(),this}toString(){return"Compound"+this.zpp_inner.id}};qn._wrapFn=g=>Ze(g,e=>{let t=Object.create(ii.prototype);return t.zpp_inner=e,e.outer=t,e.outer_i=t,t.zpp_inner_i=e,t._inner=t,t});Object.defineProperty(ii.prototype,"bodies",{get:function(){return this.zpp_inner.wrap_bodies},configurable:!0});Object.defineProperty(ii.prototype,"constraints",{get:function(){return this.zpp_inner.wrap_constraints},configurable:!0});Object.defineProperty(ii.prototype,"compounds",{get:function(){return this.zpp_inner.wrap_compounds},configurable:!0});function Ni(g){return je.get(g.x,g.y)}function hn(g){return je.weak(g.x,g.y)}function tr(g){return new $i(g.elasticity,g.dynamicFriction,g.staticFriction,g.density,g.rollingFriction)}function nr(g){let e=new es;return e.collisionGroup=g.collisionGroup,e.collisionMask=g.collisionMask,e.sensorGroup=g.sensorGroup,e.sensorMask=g.sensorMask,e.fluidGroup=g.fluidGroup,e.fluidMask=g.fluidMask,e}function ir(g){let e=new Nn(g.density,g.viscosity);return g.gravity!=null&&(e.gravity=Ni(g.gravity)),e}function sr(g){let e=tr(g.material),t=nr(g.filter),n;if(g.type==="circle"){let s=Ni(g.localCOM);n=new Mi(g.radius,s,e,t)}else if(g.type==="capsule"){let s=Ni(g.localCOM);n=new ki(g.width,g.height,s,e,t)}else{let s=g.localVerts.map(i=>Ni(i));n=new Zi(s,e,t)}return n.sensorEnabled=g.sensorEnabled,n.fluidEnabled=g.fluidEnabled,g.fluidEnabled&&g.fluidProperties!=null&&(n.fluidProperties=ir(g.fluidProperties)),n}function lr(g){let e=g.type==="STATIC"?Dn.STATIC:g.type==="KINEMATIC"?Dn.KINEMATIC:Dn.DYNAMIC,t=new We(e,hn(g.position));t.rotation=g.rotation,g.type!=="STATIC"&&(t.velocity=Ni(g.velocity),t.angularVel=g.angularVel),t.kinematicVel=Ni(g.kinematicVel),t.kinAngVel=g.kinAngVel,t.surfaceVel=Ni(g.surfaceVel),g.type==="DYNAMIC"&&(t.force=Ni(g.force),t.torque=g.torque),g.massMode==="FIXED"&&g.mass!=null?t.mass=g.mass:g.massMode==="DEFAULT"&&(t.massMode=Hi.DEFAULT),g.inertiaMode==="FIXED"&&g.inertia!=null?t.inertia=g.inertia:g.inertiaMode==="DEFAULT"&&(t.inertiaMode=Qi.DEFAULT),g.gravMassMode==="SCALED"?(t.gravMassMode=ui.SCALED,t.gravMassScale=g.gravMassScale):g.gravMassMode==="FIXED"&&(t.gravMassMode=ui.FIXED),t.allowMovement=g.allowMovement,t.allowRotation=g.allowRotation,t.isBullet=g.bullet;for(let n of g.shapes)sr(n).body=t;return g.userData!=null&&Object.assign(t.userData,g.userData),t}function ps(g,e){g.active=e.active,g.ignore=e.ignore,g.stiff=e.stiff,g.frequency=e.frequency,g.damping=e.damping,g.maxForce=e.maxForce,g.maxError=e.maxError,g.breakUnderForce=e.breakUnderForce,g.breakUnderError=e.breakUnderError,g.removeOnBreak=e.removeOnBreak,e.userData!=null&&Object.assign(g.userData,e.userData)}function or(g,e){let t=g.body1Id!=null?e[g.body1Id]??null:null,n=g.body2Id!=null?e[g.body2Id]??null:null;switch(g.type){case"PivotJoint":{let s=new ns(t,n,hn(g.anchor1),hn(g.anchor2));return ps(s,g),s}case"DistanceJoint":{let s=new is(t,n,hn(g.anchor1),hn(g.anchor2),g.jointMin,g.jointMax);return ps(s,g),s}case"AngleJoint":{let s=new ss(t,n,g.jointMin,g.jointMax,g.ratio);return ps(s,g),s}case"MotorJoint":{let s=new ls(t,n,g.rate,g.ratio);return ps(s,g),s}case"LineJoint":{let s=new os(t,n,hn(g.anchor1),hn(g.anchor2),hn(g.direction),g.jointMin,g.jointMax);return ps(s,g),s}case"PulleyJoint":{let s=new rs(t,n,null,null,hn(g.anchor1),hn(g.anchor2),hn(g.anchor3),hn(g.anchor4),g.jointMin,g.jointMax,g.ratio);return ps(s,g),s}case"WeldJoint":{let s=new as(t,n,hn(g.anchor1),hn(g.anchor2),g.phase);return ps(s,g),s}}}function ho(g){if(g.version!==1)throw new Error(`nape-js serialization: unsupported snapshot version ${g.version} (expected ${1})`);let e=g.broadphase==="SWEEP_AND_PRUNE"?Ei.SWEEP_AND_PRUNE:Ei.DYNAMIC_AABB_TREE,t=new ni(hn(g.gravity),e);t.worldLinearDrag=g.worldLinearDrag,t.worldAngularDrag=g.worldAngularDrag,t.sortContacts=g.sortContacts;let n=g.bodies.map(lr),s=g.constraints.map(r=>or(r,n)),i=new Set,l=new Set;for(let r of g.compounds){let a=new ii;for(let o of r.bodyIds)n[o].compound=a,i.add(o);for(let o of r.constraintIndices)s[o].compound=a,l.add(o);a.space=t}for(let r=0;r<n.length;r++)i.has(r)||(n[r].space=t);for(let r=0;r<s.length;r++)l.has(r)||(s[r].space=t);return t}var El=class{constructor(e=4096){this.pos=0;this.buf=new ArrayBuffer(e),this.view=new DataView(this.buf)}ensure(e){let t=this.pos+e;if(t<=this.buf.byteLength)return;let n=this.buf.byteLength;for(;n<t;)n*=2;let s=new ArrayBuffer(n);new Uint8Array(s).set(new Uint8Array(this.buf)),this.buf=s,this.view=new DataView(this.buf)}writeUint8(e){this.ensure(1),this.view.setUint8(this.pos,e),this.pos+=1}writeUint16(e){this.ensure(2),this.view.setUint16(this.pos,e,!0),this.pos+=2}writeUint32(e){this.ensure(4),this.view.setUint32(this.pos,e,!0),this.pos+=4}writeInt32(e){this.ensure(4),this.view.setInt32(this.pos,e,!0),this.pos+=4}writeFloat64(e){this.ensure(8),this.view.setFloat64(this.pos,e,!0),this.pos+=8}writeBool(e){this.writeUint8(e?1:0)}finish(){return new Uint8Array(this.buf,0,this.pos)}};var rr=1312903237,Es=1,ar=0,pr=1,cr=2,hr=3,ur=4,xr=5,dr=6;function _r(g,e){g.writeFloat64(e.elasticity),g.writeFloat64(e.dynamicFriction),g.writeFloat64(e.staticFriction),g.writeFloat64(e.density),g.writeFloat64(e.rollingFriction)}function yr(g,e){g.writeInt32(e.collisionGroup),g.writeInt32(e.collisionMask),g.writeInt32(e.sensorGroup),g.writeInt32(e.sensorMask),g.writeInt32(e.fluidGroup),g.writeInt32(e.fluidMask)}function mr(g,e){if(e==null)return;g.writeFloat64(e.density),g.writeFloat64(e.viscosity);let t=e.gravity;g.writeBool(t!=null),t!=null&&(g.writeFloat64(t.x),g.writeFloat64(t.y))}function fr(g,e){if(e.isCircle()){g.writeUint8(0);let i=e;g.writeFloat64(i.radius);let l=e.localCOM;g.writeFloat64(l.x),g.writeFloat64(l.y)}else if(e.isCapsule()){g.writeUint8(2);let i=e;g.writeFloat64(i.width),g.writeFloat64(i.height);let l=e.localCOM;g.writeFloat64(l.x),g.writeFloat64(l.y)}else{g.writeUint8(1);let l=e.localVerts,r=l.length;g.writeUint16(r);for(let a=0;a<r;a++){let o=l.at(a);g.writeFloat64(o.x),g.writeFloat64(o.y)}}_r(g,e.material),yr(g,e.filter);let t=e.fluidEnabled,n=t&&e.fluidProperties!=null,s=(e.sensorEnabled?1:0)|(t?2:0)|(n?4:0);g.writeUint8(s),n&&mr(g,e.fluidProperties)}function br(g,e){let t=e.zpp_inner;g.writeUint8(t.type),g.writeFloat64(e.position.x),g.writeFloat64(e.position.y),g.writeFloat64(e.rotation),g.writeFloat64(e.velocity.x),g.writeFloat64(e.velocity.y),g.writeFloat64(e.angularVel),g.writeFloat64(e.kinematicVel.x),g.writeFloat64(e.kinematicVel.y),g.writeFloat64(e.kinAngVel),g.writeFloat64(e.surfaceVel.x),g.writeFloat64(e.surfaceVel.y),g.writeFloat64(e.force.x),g.writeFloat64(e.force.y),g.writeFloat64(t.type===2?e.torque:0),g.writeUint8(t.massMode),g.writeFloat64(t.massMode===1?t.cmass:0),g.writeUint8(t.inertiaMode),g.writeFloat64(t.inertiaMode===1?t.cinertia:0),g.writeUint8(t.gravMassMode),g.writeFloat64(t.gravMassScale);let n=(e.allowMovement?1:0)|(e.allowRotation?2:0)|(e.isBullet?4:0);g.writeUint8(n);let s=e.shapes,i=s.length;g.writeUint16(i);for(let l=0;l<i;l++)fr(g,s.at(l))}var uo={PivotJoint:ar,DistanceJoint:pr,AngleJoint:cr,MotorJoint:hr,LineJoint:ur,PulleyJoint:xr,WeldJoint:dr};function cs(g,e,t,n,s){let i=n!=null?t.get(n.zpp_inner.id)??-1:-1,l=s!=null?t.get(s.zpp_inner.id)??-1:-1;g.writeInt32(i),g.writeInt32(l);let r=e.zpp_inner,a=(r.active?1:0)|(r.ignore?2:0)|(r.stiff?4:0)|(r.breakUnderForce?8:0)|(r.breakUnderError?16:0)|(r.removeOnBreak?32:0);g.writeUint8(a),g.writeFloat64(r.frequency),g.writeFloat64(r.damping),g.writeFloat64(r.maxForce),g.writeFloat64(r.maxError)}function zr(g,e,t){let n=e.constructor?.name??"",s=uo[n];if(s===void 0)return!1;switch(g.writeUint8(s),n){case"PivotJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y);break}case"DistanceJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax);break}case"AngleJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax),g.writeFloat64(i.ratio);break}case"MotorJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.rate),g.writeFloat64(i.ratio);break}case"LineJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.direction.x),g.writeFloat64(i.direction.y),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax);break}case"PulleyJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.anchor3.x),g.writeFloat64(i.anchor3.y),g.writeFloat64(i.anchor4.x),g.writeFloat64(i.anchor4.y),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax),g.writeFloat64(i.ratio);break}case"WeldJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.phase);break}}return!0}function xo(g){let e=new El,t=[],n=new Map,s=new Map;function i(d){let _=d.zpp_inner.id;if(n.has(_))return;let f=t.length;s.set(d,f),n.set(_,f),t.push(d)}let l=g.bodies,r=l.length;for(let d=0;d<r;d++)i(l.at(d));let a=g.compounds,o=a.length;for(let d=0;d<o;d++){let f=a.at(d).bodies,z=f.length;for(let P=0;P<z;P++)i(f.at(P))}let p=[],c=new Map;function h(d){if(c.has(d))return;let _=d.constructor?.name??"";uo[_]!==void 0&&(c.set(d,p.length),p.push(d))}let u=g.constraints,x=u.length;for(let d=0;d<x;d++)h(u.at(d));for(let d=0;d<o;d++){let f=a.at(d).constraints,z=f.length;for(let P=0;P<z;P++)h(f.at(P))}e.writeUint32(rr),e.writeUint16(Es),e.writeUint32(t.length),e.writeUint32(p.length),e.writeUint32(o);let y=g.gravity;e.writeFloat64(y.x),e.writeFloat64(y.y),e.writeFloat64(g.worldLinearDrag),e.writeFloat64(g.worldAngularDrag),e.writeBool(g.sortContacts),e.writeUint8(g.zpp_inner.bphase.is_sweep?0:1);for(let d=0;d<t.length;d++)br(e,t[d]);for(let d=0;d<p.length;d++)zr(e,p[d],n);for(let d=0;d<o;d++){let _=a.at(d),f=_.bodies,z=f.length;e.writeUint16(z);for(let b=0;b<z;b++){let C=f.at(b),v=s.get(C)??0;e.writeUint32(v)}let P=_.constraints,k=P.length,m=0;for(let b=0;b<k;b++){let C=P.at(b);c.has(C)&&m++}e.writeUint16(m);for(let b=0;b<k;b++){let C=P.at(b),v=c.get(C);v!=null&&e.writeUint32(v)}e.writeUint16(0)}return e.finish()}var Nl=class{constructor(e){this.pos=0;this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}readUint8(){let e=this.view.getUint8(this.pos);return this.pos+=1,e}readUint16(){let e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}readUint32(){let e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}readInt32(){let e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}readFloat64(){let e=this.view.getFloat64(this.pos,!0);return this.pos+=8,e}readBool(){return this.readUint8()!==0}};var _o=1312903237,Pr=0,wr=1,vr=2,gr=3,Cr=4,Mr=5,Zr=6,kr={1:Dn.STATIC,2:Dn.DYNAMIC,3:Dn.KINEMATIC};function Gl(g){let e=g.readFloat64(),t=g.readFloat64(),n=g.readFloat64(),s=g.readFloat64(),i=g.readFloat64();return new $i(e,t,n,s,i)}function Jl(g){let e=new es;return e.collisionGroup=g.readInt32(),e.collisionMask=g.readInt32(),e.sensorGroup=g.readInt32(),e.sensorMask=g.readInt32(),e.fluidGroup=g.readInt32(),e.fluidMask=g.readInt32(),e}function Er(g){let e=g.readFloat64(),t=g.readFloat64(),n=new Nn(e,t);return g.readBool()&&(n.gravity=je.get(g.readFloat64(),g.readFloat64())),n}function Nr(g){let e=g.readUint8(),t;if(e===0){let i=g.readFloat64(),l=g.readFloat64(),r=g.readFloat64(),a=Gl(g),o=Jl(g);t=new Mi(i,je.weak(l,r),a,o)}else if(e===2){let i=g.readFloat64(),l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=Gl(g),p=Jl(g);t=new ki(i,l,je.weak(r,a),o,p)}else{let i=g.readUint16(),l=[];for(let o=0;o<i;o++)l.push(je.get(g.readFloat64(),g.readFloat64()));let r=Gl(g),a=Jl(g);t=new Zi(l,r,a)}let n=g.readUint8();return t.sensorEnabled=(n&1)!==0,t.fluidEnabled=(n&2)!==0,(n&4)!==0&&(t.fluidProperties=Er(g)),t}function Or(g){let e=g.readUint8(),t=kr[e]??Dn.DYNAMIC,n=g.readFloat64(),s=g.readFloat64(),i=g.readFloat64(),l=new We(t,je.weak(n,s));l.rotation=i;let r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64();e!==1&&(l.velocity=je.get(r,a),l.angularVel=o),l.kinematicVel=je.get(g.readFloat64(),g.readFloat64()),l.kinAngVel=g.readFloat64(),l.surfaceVel=je.get(g.readFloat64(),g.readFloat64());let p=g.readFloat64(),c=g.readFloat64(),h=g.readFloat64();e===2&&(l.force=je.get(p,c),l.torque=h);let u=g.readUint8(),x=g.readFloat64();u===1&&x!==0?l.mass=x:u===0&&(l.massMode=Hi.DEFAULT);let y=g.readUint8(),d=g.readFloat64();y===1&&d!==0?l.inertia=d:y===0&&(l.inertiaMode=Qi.DEFAULT);let _=g.readUint8(),f=g.readFloat64();_===2?(l.gravMassMode=ui.SCALED,l.gravMassScale=f):_===1&&(l.gravMassMode=ui.FIXED);let z=g.readUint8();l.allowMovement=(z&1)!==0,l.allowRotation=(z&2)!==0,l.isBullet=(z&4)!==0;let P=g.readUint16();for(let k=0;k<P;k++)Nr(g).body=l;return l}function Sr(g){let e=g.readInt32(),t=g.readInt32(),n=g.readUint8(),s=g.readFloat64(),i=g.readFloat64(),l=g.readFloat64(),r=g.readFloat64();return{body1Id:e,body2Id:t,active:(n&1)!==0,ignore:(n&2)!==0,stiff:(n&4)!==0,breakUnderForce:(n&8)!==0,breakUnderError:(n&16)!==0,removeOnBreak:(n&32)!==0,frequency:s,damping:i,maxForce:l,maxError:r}}function hs(g,e){g.active=e.active,g.ignore=e.ignore,g.stiff=e.stiff,g.frequency=e.frequency,g.damping=e.damping,g.maxForce=e.maxForce,g.maxError=e.maxError,g.breakUnderForce=e.breakUnderForce,g.breakUnderError=e.breakUnderError,g.removeOnBreak=e.removeOnBreak}function Ar(g,e){let t=g.readUint8(),n=Sr(g),s=n.body1Id>=0?e[n.body1Id]??null:null,i=n.body2Id>=0?e[n.body2Id]??null:null;switch(t){case Pr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=new ns(s,i,je.weak(l,r),je.weak(a,o));return hs(p,n),p}case wr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=g.readFloat64(),h=new is(s,i,je.weak(l,r),je.weak(a,o),p,c);return hs(h,n),h}case vr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=new ss(s,i,l,r,a);return hs(o,n),o}case gr:{let l=g.readFloat64(),r=g.readFloat64(),a=new ls(s,i,l,r);return hs(a,n),a}case Cr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=g.readFloat64(),h=g.readFloat64(),u=g.readFloat64(),x=new os(s,i,je.weak(l,r),je.weak(a,o),je.weak(p,c),h,u);return hs(x,n),x}case Mr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=g.readFloat64(),h=g.readFloat64(),u=g.readFloat64(),x=g.readFloat64(),y=g.readFloat64(),d=g.readFloat64(),_=new rs(s,i,null,null,je.weak(l,r),je.weak(a,o),je.weak(p,c),je.weak(h,u),x,y,d);return hs(_,n),_}case Zr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=new as(s,i,je.weak(l,r),je.weak(a,o),p);return hs(c,n),c}default:throw new Error(`nape-js binary: unknown constraint type tag ${t}`)}}function yo(g){let e=new Nl(g),t=e.readUint32();if(t!==_o)throw new Error(`nape-js binary: invalid magic bytes 0x${t.toString(16)} (expected 0x${_o.toString(16)})`);let n=e.readUint16();if(n!==Es)throw new Error(`nape-js binary: unsupported version ${n} (expected ${Es})`);let s=e.readUint32(),i=e.readUint32(),l=e.readUint32(),r=e.readFloat64(),a=e.readFloat64(),o=e.readFloat64(),p=e.readFloat64(),c=e.readBool(),u=e.readUint8()===0?Ei.SWEEP_AND_PRUNE:Ei.DYNAMIC_AABB_TREE,x=new ni(je.weak(r,a),u);x.worldLinearDrag=o,x.worldAngularDrag=p,x.sortContacts=c;let y=new Array(s);for(let z=0;z<s;z++)y[z]=Or(e);let d=new Array(i);for(let z=0;z<i;z++)d[z]=Ar(e,y);let _=new Set,f=new Set;for(let z=0;z<l;z++){let P=new ii,k=e.readUint16();for(let C=0;C<k;C++){let v=e.readUint32();y[v].compound=P,_.add(v)}let m=e.readUint16();for(let C=0;C<m;C++){let v=e.readUint32();d[v].compound=P,f.add(v)}let b=e.readUint16();for(let C=0;C<b;C++)e.readUint32();P.space=x}for(let z=0;z<s;z++)_.has(z)||(y[z].space=x);for(let z=0;z<i;z++)f.has(z)||(d[z].space=x);return x}0&&(module.exports={BINARY_SNAPSHOT_VERSION,SNAPSHOT_VERSION,spaceFromBinary,spaceFromJSON,spaceToBinary,spaceToJSON});
1
+ "use strict";var Vl=Object.defineProperty;var mo=Object.getOwnPropertyDescriptor;var fo=Object.getOwnPropertyNames;var bo=Object.prototype.hasOwnProperty;var zo=(g,e)=>{for(var t in e)Vl(g,t,{get:e[t],enumerable:!0})},Po=(g,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fo(e))!bo.call(g,s)&&s!==t&&Vl(g,s,{get:()=>e[s],enumerable:!(n=mo(e,s))||n.enumerable});return g};var wo=g=>Po(Vl({},"__esModule",{value:!0}),g);var Vr={};zo(Vr,{BINARY_SNAPSHOT_VERSION:()=>Es,SNAPSHOT_VERSION:()=>Ns,spaceFromBinary:()=>yo,spaceFromJSON:()=>ho,spaceToBinary:()=>xo,spaceToJSON:()=>Wl});module.exports=wo(Vr);var Ns=1;function ht(g){return{x:g.x,y:g.y}}function Ul(g){if(g==null)return null;try{let e=JSON.stringify(g);return e==="{}"?null:JSON.parse(e)}catch{return null}}function vo(g){return{elasticity:g.elasticity,dynamicFriction:g.dynamicFriction,staticFriction:g.staticFriction,density:g.density,rollingFriction:g.rollingFriction}}function go(g){return{collisionGroup:g.collisionGroup,collisionMask:g.collisionMask,sensorGroup:g.sensorGroup,sensorMask:g.sensorMask,fluidGroup:g.fluidGroup,fluidMask:g.fluidMask}}function Co(g){if(g==null)return null;let e=g.gravity;return{density:g.density,viscosity:g.viscosity,gravity:e!=null?ht(e):null}}function Mo(g){let e=vo(g.material),t=go(g.filter),n=g.fluidEnabled,s=n?Co(g.fluidProperties):null,i=g.sensorEnabled;if(g.isCircle()){let l=g,r=g.localCOM;return{type:"circle",radius:l.radius,localCOM:ht(r),material:e,filter:t,sensorEnabled:i,fluidEnabled:n,fluidProperties:s}}else if(g.isCapsule()){let l=g,r=g.localCOM;return{type:"capsule",width:l.width,height:l.height,localCOM:ht(r),material:e,filter:t,sensorEnabled:i,fluidEnabled:n,fluidProperties:s}}else{let r=g.localVerts,a=[],o=r.length;for(let p=0;p<o;p++)a.push(ht(r.at(p)));return{type:"polygon",localVerts:a,material:e,filter:t,sensorEnabled:i,fluidEnabled:n,fluidProperties:s}}}var Zo={1:"STATIC",2:"DYNAMIC",3:"KINEMATIC"},ko={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},Eo={0:"DEFAULT",1:"FIXED",2:"FIXED_GROUP"},No={0:"DEFAULT",1:"FIXED",2:"SCALED"};function Oo(g,e){let t=g.zpp_inner,n=ko[t.massMode]??"DEFAULT",s=Eo[t.inertiaMode]??"DEFAULT",i=No[t.gravMassMode]??"DEFAULT",l=[],r=g.shapes,a=r.length;for(let o=0;o<a;o++)l.push(Mo(r.at(o)));return{id:e,type:Zo[t.type]??"DYNAMIC",position:ht(g.position),rotation:g.rotation,velocity:ht(g.velocity),angularVel:g.angularVel,kinematicVel:ht(g.kinematicVel),kinAngVel:g.kinAngVel,surfaceVel:ht(g.surfaceVel),force:ht(g.force),torque:t.type===2?g.torque:0,massMode:n,mass:n==="FIXED"?t.cmass:null,inertiaMode:s,inertia:s==="FIXED"?t.cinertia:null,gravMassMode:i,gravMassScale:t.gravMassScale,allowMovement:g.allowMovement,allowRotation:g.allowRotation,bullet:g.isBullet,shapes:l,userData:Ul(t.userData)}}function Vi(g,e,t,n){let s=g.zpp_inner,i=t!=null?e.get(t.zpp_inner.id)??null:null,l=n!=null?e.get(n.zpp_inner.id)??null:null;return{body1Id:i,body2Id:l,active:s.active,ignore:s.ignore,stiff:s.stiff,frequency:s.frequency,damping:s.damping,maxForce:s.maxForce,maxError:s.maxError,breakUnderForce:s.breakUnderForce,breakUnderError:s.breakUnderError,removeOnBreak:s.removeOnBreak,userData:Ul(s.userData)}}function So(g,e){switch(g.constructor?.name??""){case"PivotJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"PivotJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2)}}case"DistanceJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"DistanceJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),jointMin:n.jointMin,jointMax:n.jointMax}}case"AngleJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"AngleJoint",jointMin:n.jointMin,jointMax:n.jointMax,ratio:n.ratio}}case"MotorJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"MotorJoint",rate:n.rate,ratio:n.ratio}}case"LineJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"LineJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),direction:ht(n.direction),jointMin:n.jointMin,jointMax:n.jointMax}}case"PulleyJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"PulleyJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),anchor3:ht(n.anchor3),anchor4:ht(n.anchor4),jointMin:n.jointMin,jointMax:n.jointMax,ratio:n.ratio}}case"WeldJoint":{let n=g;return{...Vi(g,e,n.body1,n.body2),type:"WeldJoint",anchor1:ht(n.anchor1),anchor2:ht(n.anchor2),phase:n.phase}}default:return null}}function Wl(g){let e=[],t=new Map,n=new Map;function s(f){let z=f.zpp_inner.id;if(n.has(z))return;let P=e.length;t.set(f,P),n.set(z,P),e.push(Oo(f,P))}let i=g.bodies,l=i.length;for(let f=0;f<l;f++)s(i.at(f));let r=g.compounds,a=r.length;for(let f=0;f<a;f++){let P=r.at(f).bodies,k=P.length;for(let m=0;m<k;m++)s(P.at(m))}let o=[],p=new Map;function c(f){if(p.has(f))return;let z=So(f,n);z!=null&&(p.set(f,o.length),o.push(z))}let h=g.constraints,u=h.length;for(let f=0;f<u;f++)c(h.at(f));for(let f=0;f<a;f++){let P=r.at(f).constraints,k=P.length;for(let m=0;m<k;m++)c(P.at(m))}let x=[];for(let f=0;f<a;f++){let z=r.at(f),P=[],k=z.bodies,m=k.length;for(let w=0;w<m;w++){let O=k.at(w),E=t.get(O);E!=null&&P.push(E)}let b=[],M=z.constraints,v=M.length;for(let w=0;w<v;w++){let O=M.at(w),E=p.get(O);E!=null&&b.push(E)}x.push({bodyIds:P,constraintIndices:b,childIndices:[]})}let d=g.zpp_inner.bphase.is_sweep?"SWEEP_AND_PRUNE":"DYNAMIC_AABB_TREE",_=g.gravity;return{version:1,gravity:ht(_),worldLinearDrag:g.worldLinearDrag,worldAngularDrag:g.worldAngularDrag,sortContacts:g.sortContacts,broadphase:d,bodies:e,constraints:o,compounds:x}}var Rn=class{static POSINF(){return 1/0}static NEGINF(){return-1/0}};Rn.FMAX=1e100;var gt=class gt{static Constraint(){return gt._Constraint++}static Interactor(){return gt._Interactor++}static CbType(){return gt._CbType++}static CbSet(){return gt._CbSet++}static Listener(){return gt._Listener++}static ZPP_SimpleVert(){return gt._ZPP_SimpleVert++}static ZPP_SimpleSeg(){return gt._ZPP_SimpleSeg++}static Space(){return gt._Space++}static InteractionGroup(){return gt._InteractionGroup++}};gt._Constraint=0,gt._Interactor=0,gt._CbType=0,gt._CbSet=0,gt._Listener=0,gt._ZPP_SimpleVert=0,gt._ZPP_SimpleSeg=0,gt._Space=0,gt._InteractionGroup=0;var _n=gt;var Q=class{};Q.GravMassMode_DEFAULT=null,Q.GravMassMode_FIXED=null,Q.GravMassMode_SCALED=null,Q.InertiaMode_DEFAULT=null,Q.InertiaMode_FIXED=null,Q.MassMode_DEFAULT=null,Q.MassMode_FIXED=null,Q.BodyType_STATIC=null,Q.BodyType_DYNAMIC=null,Q.BodyType_KINEMATIC=null,Q.ListenerType_BODY=null,Q.ListenerType_CONSTRAINT=null,Q.ListenerType_INTERACTION=null,Q.ListenerType_PRE=null,Q.PreFlag_ACCEPT=null,Q.PreFlag_IGNORE=null,Q.PreFlag_ACCEPT_ONCE=null,Q.PreFlag_IGNORE_ONCE=null,Q.CbEvent_BEGIN=null,Q.CbEvent_ONGOING=null,Q.CbEvent_END=null,Q.CbEvent_WAKE=null,Q.CbEvent_SLEEP=null,Q.CbEvent_BREAK=null,Q.CbEvent_PRE=null,Q.InteractionType_COLLISION=null,Q.InteractionType_SENSOR=null,Q.InteractionType_FLUID=null,Q.InteractionType_ANY=null,Q.Winding_UNDEFINED=null,Q.Winding_CLOCKWISE=null,Q.Winding_ANTICLOCKWISE=null,Q.ValidationResult_VALID=null,Q.ValidationResult_DEGENERATE=null,Q.ValidationResult_CONCAVE=null,Q.ValidationResult_SELF_INTERSECTING=null,Q.ShapeType_CIRCLE=null,Q.ShapeType_POLYGON=null,Q.ShapeType_CAPSULE=null,Q.Broadphase_DYNAMIC_AABB_TREE=null,Q.Broadphase_SWEEP_AND_PRUNE=null,Q.ArbiterType_COLLISION=null,Q.ArbiterType_SENSOR=null,Q.ArbiterType_FLUID=null,Q.internal=!1,Q.id_ImmState_ACCEPT=1,Q.id_ImmState_IGNORE=2,Q.id_ImmState_ALWAYS=4,Q.id_GravMassMode_DEFAULT=0,Q.id_GravMassMode_FIXED=1,Q.id_GravMassMode_SCALED=2,Q.id_InertiaMode_DEFAULT=0,Q.id_InertiaMode_FIXED=1,Q.id_MassMode_DEFAULT=0,Q.id_MassMode_FIXED=1,Q.id_BodyType_STATIC=1,Q.id_BodyType_DYNAMIC=2,Q.id_BodyType_KINEMATIC=3,Q.id_ListenerType_BODY=0,Q.id_ListenerType_CONSTRAINT=1,Q.id_ListenerType_INTERACTION=2,Q.id_ListenerType_PRE=3,Q.id_PreFlag_ACCEPT=1,Q.id_PreFlag_IGNORE=2,Q.id_PreFlag_ACCEPT_ONCE=3,Q.id_PreFlag_IGNORE_ONCE=4,Q.id_CbEvent_BEGIN=0,Q.id_CbEvent_END=1,Q.id_CbEvent_WAKE=2,Q.id_CbEvent_SLEEP=3,Q.id_CbEvent_BREAK=4,Q.id_CbEvent_PRE=5,Q.id_CbEvent_ONGOING=6,Q.id_InteractionType_COLLISION=1,Q.id_InteractionType_SENSOR=2,Q.id_InteractionType_FLUID=4,Q.id_InteractionType_ANY=7,Q.id_Winding_UNDEFINED=0,Q.id_Winding_CLOCKWISE=1,Q.id_Winding_ANTICLOCKWISE=2,Q.id_ValidationResult_VALID=0,Q.id_ValidationResult_DEGENERATE=1,Q.id_ValidationResult_CONCAVE=2,Q.id_ValidationResult_SELF_INTERSECTING=3,Q.id_ShapeType_CIRCLE=0,Q.id_ShapeType_POLYGON=1,Q.id_ShapeType_CAPSULE=2,Q.id_Broadphase_DYNAMIC_AABB_TREE=0,Q.id_Broadphase_SWEEP_AND_PRUNE=1,Q.id_ArbiterType_COLLISION=1,Q.id_ArbiterType_SENSOR=2,Q.id_ArbiterType_FLUID=4;var ol=class{static sqrt(e){return Math.sqrt(e)}static invsqrt(e){return 1/Math.sqrt(e)}static sqr(e){return e*e}static clamp2(e,t){let n=-t;return e<n?n:e>t?t:e}static clamp(e,t,n){return e<t?t:e>n?n:e}};var ye=class{};ye.poolGeomPoly=null,ye.nextGeomPoly=null,ye.poolVec2=null,ye.nextVec2=null,ye.poolVec3=null,ye.nextVec3=null;var Os=class{constructor(e,t){this.list=[];this.width=0;this.width=e,this.list=[]}resize(e,t,n){this.width=e;let s=e*t;for(let i=0;i<s;i++)this.list[i]=n}get(e,t){return this.list[t*this.width+e]}set(e,t,n){return this.list[t*this.width+e]=n}},xs=class extends Os{},ds=class extends Os{},_s=class extends Os{};var Pn=class Pn{constructor(){this.value=!1;this.next=null;this.hnext=null;this.id=0;this.di=0}static _alloc(){if(Pn.zpp_pool==null)return new Pn;let e=Pn.zpp_pool;return Pn.zpp_pool=e.next,e.next=null,e}static get(e,t,n){let s=Pn._alloc();return s.id=e,s.di=t,s.value=n,s}static getpersist(e,t){let n=Pn._alloc();return n.id=e,n.di=t,n}static ordered_get(e,t,n){if(e<=t){let s=Pn._alloc();return s.id=e,s.di=t,s.value=n,s}else{let s=Pn._alloc();return s.id=t,s.di=e,s.value=n,s}}static ordered_get_persist(e,t){if(e<=t){let n=Pn._alloc();return n.id=e,n.di=t,n}else{let n=Pn._alloc();return n.id=t,n.di=e,n}}free(){}alloc(){}};Pn.zpp_pool=null;var Te=Pn;var Ao=1048576,Ii=1048575,ji=106039,Bi=class{constructor(){this.cnt=0;this.cnt=0,this.table=new Array(Ao).fill(null)}empty(){return this.cnt==0}clear(){for(let e=0;e<this.table.length;e++){let t=this.table[e];if(t!=null){for(;t!=null;){let n=t.hnext;t.hnext=null,t=n}this.table[e]=null}}}get(e,t){let n=this.table[e*ji+t&Ii];if(n==null)return null;if(n.id==e&&n.di==t)return n;for(;n=n.hnext,n!=null&&(n.id!=e||n.di!=t););return n}ordered_get(e,t){if(e>t){let s=e;e=t,t=s}let n=this.table[e*ji+t&Ii];if(n==null)return null;if(n.id==e&&n.di==t)return n;for(;n=n.hnext,n!=null&&(n.id!=e||n.di!=t););return n}has(e,t){let n=this.table[e*ji+t&Ii];if(n==null)return!1;if(n.id==e&&n.di==t)return!0;for(;n=n.hnext,n!=null&&(n.id!=e||n.di!=t););return n!=null}maybeAdd(e){let t=e.id*ji+e.di&Ii,n=this.table[t],s=!0;n==null?(this.table[t]=e,e.hnext=null):s&&(e.hnext=n.hnext,n.hnext=e),s&&this.cnt++}add(e){let t=e.id*ji+e.di&Ii,n=this.table[t];n==null?(this.table[t]=e,e.hnext=null):(e.hnext=n.hnext,n.hnext=e),this.cnt++}remove(e){let t=e.id*ji+e.di&Ii,n=this.table[t];if(n==e)this.table[t]=n.hnext;else if(n!=null){let s;for(;s=n,n=n.hnext,n!=null&&n!=e;);s.hnext=n.hnext}e.hnext=null,this.cnt--}hash(e,t){return e*ji+t&Ii}};var Ss=class{constructor(){this.elt=null;this.next=null}alloc(){}free(){this.elt=null}elem(){return this.elt}};Ss.zpp_pool=null;var dt=class{constructor(){this.head=null;this.length=0;this.modified=!1;this.pushmod=!1}_allocNode(){let e=this.constructor._NodeClass,t;return e.zpp_pool==null?t=new e:(t=e.zpp_pool,e.zpp_pool=t.next,t.next=null),t}_freeNode(e){let t=this.constructor._NodeClass;e.elt=null,e.next=t.zpp_pool,t.zpp_pool=e}begin(){return this.head}setbegin(e){this.head=e,this.modified=!0,this.pushmod=!0}add(e){let t=this._allocNode();return t.elt=e,t.next=this.head,this.head=t,this.modified=!0,this.length++,e}addAll(e){let t=e.head;for(;t!=null;)this.add(t.elt),t=t.next}insert(e,t){let n=this._allocNode();return n.elt=t,e==null?(n.next=this.head,this.head=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.head;this.head=e.next,this._freeNode(e),this.head==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.head.elt;return this.pop(),e}erase(e){let t,n;return e==null?(t=this.head,n=t.next,this.head=n,this.head==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),this._freeNode(t),this.modified=!0,this.length--,this.pushmod=!0,n}remove(e){let t=null,n=this.head;for(;n!=null;){if(n.elt==e){this.erase(t);break}t=n,n=n.next}}try_remove(e){let t=null,n=this.head,s=!1;for(;n!=null;){if(n.elt==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){for(;this.head!=null;){let e=this.head;this.head=e.next,this._freeNode(e),this.head==null&&(this.pushmod=!0),this.modified=!0,this.length--}this.pushmod=!0}reverse(){let e=this.head,t=null;for(;e!=null;){let n=e.next;e.next=t,this.head=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.head==null}size(){return this.length}has(e){let t=this.head;for(;t!=null;){if(t.elt==e)return!0;t=t.next}return!1}front(){return this.head.elt}back(){let e=this.head,t=e;for(;t!=null;)e=t,t=t.next;return e.elt}iterator_at(e){let t=this.head;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t!=null?t.elt:null}};dt.prototype.inlined_add=dt.prototype.add;dt.prototype.inlined_insert=dt.prototype.insert;dt.prototype.inlined_pop=dt.prototype.pop;dt.prototype.inlined_pop_unsafe=dt.prototype.pop_unsafe;dt.prototype.inlined_erase=dt.prototype.erase;dt.prototype.inlined_remove=dt.prototype.remove;dt.prototype.inlined_try_remove=dt.prototype.try_remove;dt.prototype.inlined_clear=dt.prototype.clear;dt.prototype.inlined_has=dt.prototype.has;var As=class{constructor(){this.colour=0;this.parent=null;this.next=null;this.prev=null;this.data=null;this.swapped=null;this.lt=null}_allocNode(){let e=this.constructor,t;return e.zpp_pool==null?t=new e:(t=e.zpp_pool,e.zpp_pool=t.next,t.next=null),t}_freeNode(e){let t=this.constructor;e.data=null,e.lt=null,e.swapped=null,e.next=t.zpp_pool,t.zpp_pool=e}free(){this.data=null,this.lt=null,this.swapped=null}alloc(){}verify(){if(!this.empty()){let e=this.parent;for(;e.prev!=null;)e=e.prev;for(;e!=null;){let t=e.data,n=!0;if(!this.empty()){let s=this.parent;for(;s.prev!=null;)s=s.prev;for(;s!=null;){let i=s.data;if(n){if(t==i)n=!1;else if(!this.lt(i,t)&&this.lt(t,i))return!1}else if(!this.lt(t,i)&&this.lt(i,t))return!1;if(s.next!=null)for(s=s.next;s.prev!=null;)s=s.prev;else{for(;s.parent!=null&&s==s.parent.next;)s=s.parent;s=s.parent}}}if(e.next!=null)for(e=e.next;e.prev!=null;)e=e.prev;else{for(;e.parent!=null&&e==e.parent.next;)e=e.parent;e=e.parent}}}return!0}empty(){return this.parent==null}singular(){return this.parent!=null&&this.parent.prev==null?this.parent.next==null:!1}size(){let e=0;if(!this.empty()){let t=this.parent;for(;t.prev!=null;)t=t.prev;for(;t!=null;)if(++e,t.next!=null)for(t=t.next;t.prev!=null;)t=t.prev;else{for(;t.parent!=null&&t==t.parent.next;)t=t.parent;t=t.parent}}return e}has(e){return this.find(e)!=null}find(e){let t=this.parent;for(;t!=null&&t.data!=e;)this.lt(e,t.data)?t=t.prev:t=t.next;return t}has_weak(e){return this.find_weak(e)!=null}find_weak(e){let t=this.parent;for(;t!=null;)if(this.lt(e,t.data))t=t.prev;else if(this.lt(t.data,e))t=t.next;else break;return t}lower_bound(e){let t=null;if(!this.empty()){let n=this.parent;for(;n.prev!=null;)n=n.prev;for(;n!=null;){if(!this.lt(n.data,e)){t=n.data;break}if(n.next!=null)for(n=n.next;n.prev!=null;)n=n.prev;else{for(;n.parent!=null&&n==n.parent.next;)n=n.parent;n=n.parent}}}return t}first(){let e=this.parent;for(;e.prev!=null;)e=e.prev;return e.data}pop_front(){let e=this.parent;for(;e.prev!=null;)e=e.prev;let t=e.data;return this.remove_node(e),t}remove(e){this.remove_node(this.find(e))}successor_node(e){if(e.next!=null)for(e=e.next;e.prev!=null;)e=e.prev;else{let t=e;for(e=e.parent;e!=null&&e.prev!=t;)t=e,e=e.parent}return e}predecessor_node(e){if(e.prev!=null)for(e=e.prev;e.next!=null;)e=e.next;else{let t=e;for(e=e.parent;e!=null&&e.next!=t;)t=e,e=e.parent}return e}successor(e){let t=this.successor_node(this.find(e));return t==null?null:t.data}predecessor(e){let t=this.predecessor_node(this.find(e));return t==null?null:t.data}remove_node(e){if(e.next!=null&&e.prev!=null){let s=e.next;for(;s.prev!=null;)s=s.prev;let i=e.data;e.data=s.data,s.data=i,this.swapped!=null&&this.swapped(e.data,s.data),e=s}let t=e.prev==null?e.next:e.prev;if(e.colour==1){if(e.prev!=null||e.next!=null)t.colour=1;else if(e.parent!=null){let s=e.parent;for(;;){s.colour++,s.prev.colour--,s.next.colour--;let i=s.prev;if(i.colour==-1){this.__fix_neg_red(i);break}else if(i.colour==0){if(i.prev!=null&&i.prev.colour==0){this.__fix_dbl_red(i.prev);break}if(i.next!=null&&i.next.colour==0){this.__fix_dbl_red(i.next);break}}let l=s.next;if(l.colour==-1){this.__fix_neg_red(l);break}else if(l.colour==0){if(l.prev!=null&&l.prev.colour==0){this.__fix_dbl_red(l.prev);break}if(l.next!=null&&l.next.colour==0){this.__fix_dbl_red(l.next);break}}if(s.colour==2)if(s.parent==null)s.colour=1;else{s=s.parent;continue}break}}}let n=e.parent;n==null?this.parent=t:n.prev==e?n.prev=t:n.next=t,t!=null&&(t.parent=n),e.parent=e.prev=e.next=null,this._freeNode(e)}clear(){if(this.parent!=null){let e=this.parent;for(;e!=null;)if(e.prev!=null)e=e.prev;else if(e.next!=null)e=e.next;else{let t=e.parent;t!=null&&(e==t.prev?t.prev=null:t.next=null,e.parent=null),this._freeNode(e),e=t}this.parent=null}}clear_with(e){if(this.parent==null)return;let t=this.parent;for(;t!=null;)if(t.prev!=null)t=t.prev;else if(t.next!=null)t=t.next;else{e(t.data);let n=t.parent;n!=null&&(t==n.prev?n.prev=null:n.next=null,t.parent=null),this._freeNode(t),t=n}this.parent=null}clear_node(e,t){t(e.data);let n=e.parent;return n!=null&&(e==n.prev?n.prev=null:n.next=null,e.parent=null),this._freeNode(e),n}__fix_neg_red(e){let t=e.parent,n;if(t.prev==e){let s=e.prev,i=e.next,l=i.prev,r=i.next;s.colour=0,e.colour=t.colour=1,e.next=l,l!=null&&(l.parent=e);let a=t.data;t.data=i.data,i.data=a,this.swapped!=null&&this.swapped(t.data,i.data),i.prev=r,r!=null&&(r.parent=i),i.next=t.next,t.next!=null&&(t.next.parent=i),t.next=i,i!=null&&(i.parent=t),n=s}else{let s=e.next,i=e.prev,l=i.next,r=i.prev;s.colour=0,e.colour=t.colour=1,e.prev=l,l!=null&&(l.parent=e);let a=t.data;t.data=i.data,i.data=a,this.swapped!=null&&this.swapped(t.data,i.data),i.next=r,r!=null&&(r.parent=i),i.prev=t.prev,t.prev!=null&&(t.prev.parent=i),t.prev=i,i!=null&&(i.parent=t),n=s}n.prev!=null&&n.prev.colour==0?this.__fix_dbl_red(n.prev):n.next!=null&&n.next.colour==0&&this.__fix_dbl_red(n.next)}__fix_dbl_red(e){for(;;){let t=e.parent,n=t.parent;if(n==null){t.colour=1;break}let s,i,l,r,a,o,p;t==n.prev?(l=n,p=n.next,e==t.prev?(s=e,i=t,r=e.prev,a=e.next,o=t.next):(s=t,i=e,r=t.prev,a=e.prev,o=e.next)):(s=n,r=n.prev,e==t.prev?(i=e,l=t,a=e.prev,o=e.next,p=t.next):(i=t,l=e,a=t.prev,o=e.prev,p=e.next));let c=n.parent;if(c==null?this.parent=i:c.prev==n?c.prev=i:c.next=i,i!=null&&(i.parent=c),s.prev=r,r!=null&&(r.parent=s),s.next=a,a!=null&&(a.parent=s),i.prev=s,s!=null&&(s.parent=i),i.next=l,l!=null&&(l.parent=i),l.prev=o,o!=null&&(o.parent=l),l.next=p,p!=null&&(p.parent=l),i.colour=n.colour-1,s.colour=1,l.colour=1,i==this.parent)this.parent.colour=1;else if(i.colour==0&&i.parent.colour==0){e=i;continue}break}}try_insert_bool(e){let t=null;if(this.parent==null)t=this._allocNode(),t.data=e,this.parent=t;else{let n=this.parent;for(;;)if(this.lt(e,n.data))if(n.prev==null){t=this._allocNode(),t.data=e,n.prev=t,t.parent=n;break}else n=n.prev;else if(this.lt(n.data,e))if(n.next==null){t=this._allocNode(),t.data=e,n.next=t,t.parent=n;break}else n=n.next;else break}return t==null?!1:(t.parent==null?t.colour=1:(t.colour=0,t.parent.colour==0&&this.__fix_dbl_red(t)),!0)}try_insert(e){let t=null,n=null;if(this.parent==null)t=this._allocNode(),t.data=e,this.parent=t;else for(n=this.parent;;)if(this.lt(e,n.data))if(n.prev==null){t=this._allocNode(),t.data=e,n.prev=t,t.parent=n;break}else n=n.prev;else if(this.lt(n.data,e))if(n.next==null){t=this._allocNode(),t.data=e,n.next=t,t.parent=n;break}else n=n.next;else break;return t==null?n:(t.parent==null?t.colour=1:(t.colour=0,t.parent.colour==0&&this.__fix_dbl_red(t)),t)}insert(e){let t=this._allocNode();if(t.data=e,this.parent==null)this.parent=t;else{let n=this.parent;for(;;)if(this.lt(t.data,n.data))if(n.prev==null){n.prev=t,t.parent=n;break}else n=n.prev;else if(n.next==null){n.next=t,t.parent=n;break}else n=n.next}return t.parent==null?t.colour=1:(t.colour=0,t.parent.colour==0&&this.__fix_dbl_red(t)),t}};As.zpp_pool=null;var di=null,rl=null,ys=null,Il=null,Vo=null,jl=null,ms=null,Qt=null,fs=null,Kn=null,bs=null,zs=null,Bl=null,Io=null,jo=null,Bo=null,To=null,Lo=null,Do=null,Fo=null,Ro=null;function qe(g){let e=class extends Ss{};return e.zpp_pool=null,e}function Ue(g,e){let t=class extends dt{};return t._NodeClass=e,t}function xi(g){let e=class extends As{};return e.zpp_pool=null,e}function Kl(g){g.util||(g.util={}),g.util.ZNPNode_ZPP_CbType=qe("ZPP_CbType"),g.util.ZNPNode_ZPP_CallbackSet=qe("ZPP_CallbackSet"),g.util.ZNPNode_ZPP_Shape=qe("ZPP_Shape"),g.util.ZNPNode_ZPP_Body=qe("ZPP_Body"),g.util.ZNPNode_ZPP_Constraint=qe("ZPP_Constraint"),g.util.ZNPNode_ZPP_Compound=qe("ZPP_Compound"),g.util.ZNPNode_ZPP_Arbiter=qe("ZPP_Arbiter"),g.util.ZNPNode_ZPP_InteractionListener=qe("ZPP_InteractionListener"),g.util.ZNPNode_ZPP_CbSet=qe("ZPP_CbSet"),g.util.ZNPNode_ZPP_Interactor=qe("ZPP_Interactor"),g.util.ZNPNode_ZPP_BodyListener=qe("ZPP_BodyListener"),g.util.ZNPNode_ZPP_CbSetPair=qe("ZPP_CbSetPair"),g.util.ZNPNode_ZPP_ConstraintListener=qe("ZPP_ConstraintListener"),g.util.ZNPNode_ZPP_CutInt=qe("ZPP_CutInt"),g.util.ZNPNode_ZPP_CutVert=qe("ZPP_CutVert"),g.util.ZNPNode_ZPP_PartitionVertex=qe("ZPP_PartitionVertex"),g.util.ZNPNode_ZPP_SimplifyP=qe("ZPP_SimplifyP"),g.util.ZNPNode_ZPP_PartitionedPoly=qe("ZPP_PartitionedPoly"),g.util.ZNPNode_ZPP_GeomVert=qe("ZPP_GeomVert"),g.util.ZNPNode_ZPP_SimpleVert=qe("ZPP_SimpleVert"),g.util.ZNPNode_ZPP_SimpleEvent=qe("ZPP_SimpleEvent"),g.util.ZNPNode_ZPP_Vec2=qe("ZPP_Vec2"),g.util.ZNPNode_ZPP_AABBPair=qe("ZPP_AABBPair"),g.util.ZNPNode_ZPP_Edge=qe("ZPP_Edge"),g.util.ZNPNode_ZPP_AABBNode=qe("ZPP_AABBNode"),g.util.ZNPNode_ZPP_Component=qe("ZPP_Component"),g.util.ZNPNode_ZPP_FluidArbiter=qe("ZPP_FluidArbiter"),g.util.ZNPNode_ZPP_SensorArbiter=qe("ZPP_SensorArbiter"),g.util.ZNPNode_ZPP_Listener=qe("ZPP_Listener"),g.util.ZNPNode_ZPP_ColArbiter=qe("ZPP_ColArbiter"),g.util.ZNPNode_ZPP_InteractionGroup=qe("ZPP_InteractionGroup"),g.util.ZNPNode_ZPP_ToiEvent=qe("ZPP_ToiEvent"),g.util.ZNPNode_ConvexResult=qe("ConvexResult"),g.util.ZNPNode_ZPP_GeomPoly=qe("ZPP_GeomPoly"),g.util.ZNPNode_RayResult=qe("RayResult");let e=g.util;jo=g.util.ZNPList_ZPP_InteractionListener=Ue("ZPP_InteractionListener",e.ZNPNode_ZPP_InteractionListener),Bo=g.util.ZNPList_ZPP_BodyListener=Ue("ZPP_BodyListener",e.ZNPNode_ZPP_BodyListener),To=g.util.ZNPList_ZPP_ConstraintListener=Ue("ZPP_ConstraintListener",e.ZNPNode_ZPP_ConstraintListener),Lo=g.util.ZNPList_ZPP_Constraint=Ue("ZPP_Constraint",e.ZNPNode_ZPP_Constraint),Do=g.util.ZNPList_ZPP_Interactor=Ue("ZPP_Interactor",e.ZNPNode_ZPP_Interactor),Fo=g.util.ZNPList_ZPP_CbSet=Ue("ZPP_CbSet",e.ZNPNode_ZPP_CbSet),Io=g.util.ZNPList_ZPP_CbType=Ue("ZPP_CbType",e.ZNPNode_ZPP_CbType),g.util.ZNPList_ZPP_Vec2=Ue("ZPP_Vec2",e.ZNPNode_ZPP_Vec2),Vo=g.util.ZNPList_ZPP_Vec2,g.util.ZNPList_ZPP_CallbackSet=Ue("ZPP_CallbackSet",e.ZNPNode_ZPP_CallbackSet),g.util.ZNPList_ZPP_Shape=Ue("ZPP_Shape",e.ZNPNode_ZPP_Shape),g.util.ZNPList_ZPP_Body=Ue("ZPP_Body",e.ZNPNode_ZPP_Body),g.util.ZNPList_ZPP_Compound=Ue("ZPP_Compound",e.ZNPNode_ZPP_Compound),g.util.ZNPList_ZPP_Arbiter=Ue("ZPP_Arbiter",e.ZNPNode_ZPP_Arbiter),Ro=g.util.ZNPList_ZPP_CbSetPair=Ue("ZPP_CbSetPair",e.ZNPNode_ZPP_CbSetPair),g.util.ZNPList_ZPP_CutInt=Ue("ZPP_CutInt",e.ZNPNode_ZPP_CutInt),g.util.ZNPList_ZPP_CutVert=Ue("ZPP_CutVert",e.ZNPNode_ZPP_CutVert),g.util.ZNPList_ZPP_PartitionVertex=Ue("ZPP_PartitionVertex",e.ZNPNode_ZPP_PartitionVertex),di=g.util.ZNPList_ZPP_PartitionVertex,g.util.ZNPList_ZPP_SimplifyP=Ue("ZPP_SimplifyP",e.ZNPNode_ZPP_SimplifyP),Il=g.util.ZNPList_ZPP_SimplifyP,g.util.ZNPList_ZPP_PartitionedPoly=Ue("ZPP_PartitionedPoly",e.ZNPNode_ZPP_PartitionedPoly),rl=g.util.ZNPList_ZPP_PartitionedPoly,g.util.ZNPList_ZPP_GeomVert=Ue("ZPP_GeomVert",e.ZNPNode_ZPP_GeomVert),ys=g.util.ZNPList_ZPP_GeomVert,g.util.ZNPList_ZPP_SimpleVert=Ue("ZPP_SimpleVert",e.ZNPNode_ZPP_SimpleVert),Bl=g.util.ZNPList_ZPP_SimpleEvent=Ue("ZPP_SimpleEvent",e.ZNPNode_ZPP_SimpleEvent),g.util.ZNPList_ZPP_AABBPair=Ue("ZPP_AABBPair",e.ZNPNode_ZPP_AABBPair),g.util.ZNPList_ZPP_Edge=Ue("ZPP_Edge",e.ZNPNode_ZPP_Edge),g.util.ZNPList_ZPP_AABBNode=Ue("ZPP_AABBNode",e.ZNPNode_ZPP_AABBNode),g.util.ZNPList_ZPP_Component=Ue("ZPP_Component",e.ZNPNode_ZPP_Component),g.util.ZNPList_ZPP_FluidArbiter=Ue("ZPP_FluidArbiter",e.ZNPNode_ZPP_FluidArbiter),g.util.ZNPList_ZPP_SensorArbiter=Ue("ZPP_SensorArbiter",e.ZNPNode_ZPP_SensorArbiter),g.util.ZNPList_ZPP_Listener=Ue("ZPP_Listener",e.ZNPNode_ZPP_Listener),g.util.ZNPList_ZPP_ColArbiter=Ue("ZPP_ColArbiter",e.ZNPNode_ZPP_ColArbiter),g.util.ZNPList_ZPP_InteractionGroup=Ue("ZPP_InteractionGroup",e.ZNPNode_ZPP_InteractionGroup),g.util.ZNPList_ZPP_ToiEvent=Ue("ZPP_ToiEvent",e.ZNPNode_ZPP_ToiEvent),g.util.ZNPList_ConvexResult=Ue("ConvexResult",e.ZNPNode_ConvexResult),g.util.ZNPList_ZPP_GeomPoly=Ue("ZPP_GeomPoly",e.ZNPNode_ZPP_GeomPoly),g.util.ZNPList_RayResult=Ue("RayResult",e.ZNPNode_RayResult),ms=g.util.ZNPNode_RayResult,jl=g.util.ZNPList_ZPP_SimpleVert,g.util.ZPP_Set_ZPP_Body=xi("ZPP_Body"),g.util.ZPP_Set_ZPP_CbSetPair=xi("ZPP_CbSetPair"),g.util.ZPP_Set_ZPP_PartitionVertex=xi("ZPP_PartitionVertex"),bs=g.util.ZPP_Set_ZPP_PartitionVertex,g.util.ZPP_Set_ZPP_PartitionPair=xi("ZPP_PartitionPair"),zs=g.util.ZPP_Set_ZPP_PartitionPair,g.util.ZPP_Set_ZPP_SimpleVert=xi("ZPP_SimpleVert"),Qt=g.util.ZPP_Set_ZPP_SimpleVert,g.util.ZPP_Set_ZPP_SimpleSeg=xi("ZPP_SimpleSeg"),fs=g.util.ZPP_Set_ZPP_SimpleSeg,g.util.ZPP_Set_ZPP_SimpleEvent=xi("ZPP_SimpleEvent"),Kn=g.util.ZPP_Set_ZPP_SimpleEvent,g.util.ZPP_Set_ZPP_CbSet=xi("ZPP_CbSet")}var zt=class zt{constructor(){this.outer_body=null;this.outer_con=null;this.outer_int=null;this.event=0;this.listener=null;this.space=null;this.index=0;this.next=null;this.prev=null;this.length=0;this.int1=null;this.int2=null;this.set=null;this.wrap_arbiters=null;this.pre_arbiter=null;this.pre_swapped=!1;this.body=null;this.constraint=null}wrapper_body(){return this.outer_body==null&&(zt.internal=!0,this.outer_body=zt._createBodyCb(),zt.internal=!1,this.outer_body.zpp_inner=this),this.outer_body}wrapper_con(){return this.outer_con==null&&(zt.internal=!0,this.outer_con=zt._createConCb(),zt.internal=!1,this.outer_con.zpp_inner=this),this.outer_con}wrapper_int(){let e=zt._zpp;return this.outer_int==null&&(zt.internal=!0,this.outer_int=zt._createIntCb(),zt.internal=!1,this.outer_int.zpp_inner=this),this.wrap_arbiters==null?this.wrap_arbiters=e.util.ZPP_ArbiterList.get(this.set.arbiters,!0):this.wrap_arbiters.zpp_inner.inner=this.set.arbiters,this.wrap_arbiters.zpp_inner.zip_length=!0,this.wrap_arbiters.zpp_inner.at_ite=null,this.outer_int}push(e){this.prev!=null?this.prev.next=e:this.next=e,e.prev=this.prev,e.next=null,this.prev=e,this.length++}push_rev(e){this.next!=null?this.next.prev=e:this.prev=e,e.next=this.next,e.prev=null,this.next=e,this.length++}pop(){let e=this.next;return this.next=e.next,this.next==null?this.prev=null:this.next.prev=null,this.length--,e}pop_rev(){let e=this.prev;return this.prev=e.prev,this.prev==null?this.next=null:this.prev.next=null,this.length--,e}empty(){return this.next==null}clear(){for(;!this.empty();)this.pop()}splice(e){let t=e.next;return e.prev==null?(this.next=e.next,this.next!=null?this.next.prev=null:this.prev=null):(e.prev.next=e.next,e.next!=null?e.next.prev=e.prev:this.prev=e.prev),this.length--,t}rotateL(){this.push(this.pop())}rotateR(){this.push_rev(this.pop_rev())}cycleNext(e){return e.next==null?this.next:e.next}cyclePrev(e){return e.prev==null?this.prev:e.prev}at(e){let t=this.next;for(;e--!=0;)t=t.next;return t}rev_at(e){let t=this.prev;for(;e--!=0;)t=t.prev;return t}free(){this.int1=this.int2=null,this.body=null,this.constraint=null,this.listener=null,this.wrap_arbiters!=null&&(this.wrap_arbiters.zpp_inner.inner=null),this.set=null}alloc(){}genarbs(){let e=zt._zpp;this.wrap_arbiters==null?this.wrap_arbiters=e.util.ZPP_ArbiterList.get(this.set.arbiters,!0):this.wrap_arbiters.zpp_inner.inner=this.set.arbiters,this.wrap_arbiters.zpp_inner.zip_length=!0,this.wrap_arbiters.zpp_inner.at_ite=null}};zt._nape=null,zt._zpp=null,zt.internal=!1,zt.zpp_pool=null,zt._createBodyCb=null,zt._createConCb=null,zt._createIntCb=null,zt._createPreCb=null;var Tt=zt;var Jt=class Jt{constructor(){this.count=0;this.next=null;this.id=0;this.manager=null;this.cbpairs=null;this.zip_listeners=!1;this.zip_bodylisteners=!1;this.zip_conlisteners=!1;this.interactors=null;this.wrap_interactors=null;this.constraints=null;this.wrap_constraints=null;let e=Jt._zpp;this.cbTypes=new e.util.ZNPList_ZPP_CbType,this.listeners=new e.util.ZNPList_ZPP_InteractionListener,this.zip_listeners=!0,this.bodylisteners=new e.util.ZNPList_ZPP_BodyListener,this.zip_bodylisteners=!0,this.conlisteners=new e.util.ZNPList_ZPP_ConstraintListener,this.zip_conlisteners=!0,this.constraints=new e.util.ZNPList_ZPP_Constraint,this.interactors=new e.util.ZNPList_ZPP_Interactor,this.id=e.ZPP_ID.CbSet(),this.cbpairs=new e.util.ZNPList_ZPP_CbSetPair}static setlt(e,t){let n=e.cbTypes.head,s=t.cbTypes.head;for(;n!=null&&s!=null;){let i=n.elt,l=s.elt;if(i.id<l.id)return!0;if(l.id<i.id)return!1;n=n.next,s=s.next}return s!=null?n==null:!1}static get(e){let t;Jt.zpp_pool==null?t=new Jt:(t=Jt.zpp_pool,Jt.zpp_pool=t.next,t.next=null);let n=null,s=e.head;for(;s!=null;){let i=s.elt;n=t.cbTypes.insert(n,i),i.cbsets.add(t),s=s.next}return t}static compatible(e,t,n){let s,i=e.options1,l=t.cbTypes;if(i.nonemptyintersection(l,i.includes)&&!i.nonemptyintersection(l,i.excludes)){let r=e.options2,a=n.cbTypes;s=r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)}else s=!1;if(s)return!0;{let r=e.options2,a=t.cbTypes;if(r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)){let o=e.options1,p=n.cbTypes;return o.nonemptyintersection(p,o.includes)?!o.nonemptyintersection(p,o.excludes):!1}else return!1}}static findOrCreatePair(e,t){let n=Jt._zpp,s=null,l=(e.cbpairs.length<t.cbpairs.length?e.cbpairs:t.cbpairs).head;for(;l!=null;){let r=l.elt;if(r.a==e&&r.b==t||r.a==t&&r.b==e){s=r;break}l=l.next}if(s==null){let r;n.callbacks.ZPP_CbSetPair.zpp_pool==null?r=new n.callbacks.ZPP_CbSetPair:(r=n.callbacks.ZPP_CbSetPair.zpp_pool,n.callbacks.ZPP_CbSetPair.zpp_pool=r.next,r.next=null),r.zip_listeners=!0,Jt.setlt(e,t)?(r.a=e,r.b=t):(r.a=t,r.b=e),s=r,e.cbpairs.add(s),t!=e&&t.cbpairs.add(s)}return s.zip_listeners&&(s.zip_listeners=!1,s.__validate()),s}static empty_intersection(e,t){return Jt.findOrCreatePair(e,t).listeners.head==null}static single_intersection(e,t,n){let i=Jt.findOrCreatePair(e,t).listeners.head;return i!=null&&i.elt==n?i.next==null:!1}static find_all(e,t,n,s){let l=Jt.findOrCreatePair(e,t).listeners.head;for(;l!=null;){let r=l.elt;r.event==n&&s(r),l=l.next}}increment(){this.count++}decrement(){return--this.count==0}invalidate_pairs(){let e=this.cbpairs.head;for(;e!=null;){let t=e.elt;t.zip_listeners=!0,e=e.next}}invalidate_listeners(){this.zip_listeners=!0,this.invalidate_pairs()}validate_listeners(){this.zip_listeners&&(this.zip_listeners=!1,this.realvalidate_listeners())}realvalidate_listeners(){let e=Jt._zpp;this.listeners.clear();let t=this.cbTypes.head;for(;t!=null;){let n=t.elt,s=null,i=this.listeners.head,l=n.listeners.head;for(;l!=null;){let r=l.elt;if(i!=null&&i.elt==r)l=l.next,s=i,i=i.next;else{let a;if(i!=null){let o=i.elt;a=r.precedence>o.precedence||r.precedence==o.precedence&&r.id>o.id}else a=!0;if(a){if(r.space==this.manager.space){let o=this.listeners,p;e.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?p=new e.util.ZNPNode_ZPP_InteractionListener:(p=e.util.ZNPNode_ZPP_InteractionListener.zpp_pool,e.util.ZNPNode_ZPP_InteractionListener.zpp_pool=p.next,p.next=null),p.elt=r;let c=p;s==null?(c.next=o.head,o.head=c):(c.next=s.next,s.next=c),o.pushmod=o.modified=!0,o.length++,s=c}l=l.next}else s=i,i=i.next}}t=t.next}}invalidate_bodylisteners(){this.zip_bodylisteners=!0}validate_bodylisteners(){this.zip_bodylisteners&&(this.zip_bodylisteners=!1,this.realvalidate_bodylisteners())}realvalidate_bodylisteners(){let e=Jt._zpp;this.bodylisteners.clear();let t=this.cbTypes.head;for(;t!=null;){let n=t.elt,s=null,i=this.bodylisteners.head,l=n.bodylisteners.head;for(;l!=null;){let r=l.elt;if(i!=null&&i.elt==r)l=l.next,s=i,i=i.next;else{let a;if(i!=null){let o=i.elt;a=r.precedence>o.precedence||r.precedence==o.precedence&&r.id>o.id}else a=!0;if(a){let o=r.options;if(!o.nonemptyintersection(this.cbTypes,o.excludes)&&r.space==this.manager.space){let p=this.bodylisteners,c;e.util.ZNPNode_ZPP_BodyListener.zpp_pool==null?c=new e.util.ZNPNode_ZPP_BodyListener:(c=e.util.ZNPNode_ZPP_BodyListener.zpp_pool,e.util.ZNPNode_ZPP_BodyListener.zpp_pool=c.next,c.next=null),c.elt=r;let h=c;s==null?(h.next=p.head,p.head=h):(h.next=s.next,s.next=h),p.pushmod=p.modified=!0,p.length++,s=h}l=l.next}else s=i,i=i.next}}t=t.next}}invalidate_conlisteners(){this.zip_conlisteners=!0}validate_conlisteners(){this.zip_conlisteners&&(this.zip_conlisteners=!1,this.realvalidate_conlisteners())}realvalidate_conlisteners(){let e=Jt._zpp;this.conlisteners.clear();let t=this.cbTypes.head;for(;t!=null;){let n=t.elt,s=null,i=this.conlisteners.head,l=n.conlisteners.head;for(;l!=null;){let r=l.elt;if(i!=null&&i.elt==r)l=l.next,s=i,i=i.next;else{let a;if(i!=null){let o=i.elt;a=r.precedence>o.precedence||r.precedence==o.precedence&&r.id>o.id}else a=!0;if(a){let o=r.options;if(!o.nonemptyintersection(this.cbTypes,o.excludes)&&r.space==this.manager.space){let p=this.conlisteners,c;e.util.ZNPNode_ZPP_ConstraintListener.zpp_pool==null?c=new e.util.ZNPNode_ZPP_ConstraintListener:(c=e.util.ZNPNode_ZPP_ConstraintListener.zpp_pool,e.util.ZNPNode_ZPP_ConstraintListener.zpp_pool=c.next,c.next=null),c.elt=r;let h=c;s==null?(h.next=p.head,p.head=h):(h.next=s.next,s.next=h),p.pushmod=p.modified=!0,p.length++,s=h}l=l.next}else s=i,i=i.next}}t=t.next}}validate(){this.zip_listeners&&(this.zip_listeners=!1,this.realvalidate_listeners()),this.zip_bodylisteners&&(this.zip_bodylisteners=!1,this.realvalidate_bodylisteners()),this.zip_conlisteners&&(this.zip_conlisteners=!1,this.realvalidate_conlisteners())}addConstraint(e){this.constraints.add(e)}addInteractor(e){this.interactors.add(e)}remConstraint(e){this.constraints.remove(e)}remInteractor(e){this.interactors.remove(e)}free(){for(this.listeners.clear(),this.zip_listeners=!0,this.bodylisteners.clear(),this.zip_bodylisteners=!0,this.conlisteners.clear(),this.zip_conlisteners=!0;this.cbTypes.head!=null;)this.cbTypes.pop_unsafe().cbsets.remove(this)}alloc(){}};Jt._zpp=null,Jt.zpp_pool=null;var _t=Jt;var Gn=class Gn{constructor(){this.a=null;this.b=null;this.next=null;this.zip_listeners=!1;this.listeners=null;let e=Gn._zpp;this.listeners=new e.util.ZNPList_ZPP_InteractionListener}static get(e,t){let n=Gn._zpp,s;return Gn.zpp_pool==null?s=new Gn:(s=Gn.zpp_pool,Gn.zpp_pool=s.next,s.next=null),s.zip_listeners=!0,n.callbacks.ZPP_CbSet.setlt(e,t)?(s.a=e,s.b=t):(s.a=t,s.b=e),s}static setlt(e,t){let n=Gn._zpp;return n.callbacks.ZPP_CbSet.setlt(e.a,t.a)?!0:e.a==t.a?n.callbacks.ZPP_CbSet.setlt(e.b,t.b):!1}free(){this.a=this.b=null,this.listeners.clear()}alloc(){this.zip_listeners=!0}compatible(e){let t,n=e.options1,s=this.a.cbTypes;if(n.nonemptyintersection(s,n.includes)&&!n.nonemptyintersection(s,n.excludes)){let i=e.options2,l=this.b.cbTypes;t=i.nonemptyintersection(l,i.includes)&&!i.nonemptyintersection(l,i.excludes)}else t=!1;if(t)return!0;{let i=e.options2,l=this.a.cbTypes;if(i.nonemptyintersection(l,i.includes)&&!i.nonemptyintersection(l,i.excludes)){let r=e.options1,a=this.b.cbTypes;return r.nonemptyintersection(a,r.includes)?!r.nonemptyintersection(a,r.excludes):!1}else return!1}}invalidate(){this.zip_listeners=!0}validate(){this.zip_listeners&&(this.zip_listeners=!1,this.__validate())}__validate(){this.listeners.clear();let e=this.a.listeners.head,t=this.b.listeners.head;for(;e!=null&&t!=null;){let n=e.elt,s=t.elt;if(n==s){let i,l,r=n.options1,a=this.a.cbTypes;if(r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)){let o=n.options2,p=this.b.cbTypes;l=o.nonemptyintersection(p,o.includes)&&!o.nonemptyintersection(p,o.excludes)}else l=!1;if(l)i=!0;else{let o=n.options2,p=this.a.cbTypes;if(o.nonemptyintersection(p,o.includes)&&!o.nonemptyintersection(p,o.excludes)){let c=n.options1,h=this.b.cbTypes;i=c.nonemptyintersection(h,c.includes)&&!c.nonemptyintersection(h,c.excludes)}else i=!1}i&&this.listeners.add(n),e=e.next,t=t.next}else n.precedence>s.precedence||n.precedence==s.precedence&&n.id>s.id?e=e.next:t=t.next}}empty_intersection(){return this.listeners.head==null}single_intersection(e){let t=this.listeners.head;return t!=null&&t.elt==e?t.next==null:!1}forall(e,t){let n=this.listeners.head;for(;n!=null;){let s=n.elt;s.event==e&&t(s),n=n.next}}};Gn._zpp=null,Gn.zpp_pool=null;var Ne=Gn;var rn=class rn{constructor(){this.outer=null;this.userData=null;this.id=0;this.cbsets=null;this.interactors=null;this.wrap_interactors=null;this.constraints=null;this.wrap_constraints=null;this.listeners=null;this.bodylisteners=null;this.conlisteners=null;let e=rn._zpp;this.id=e.ZPP_ID.CbType(),this.listeners=new e.util.ZNPList_ZPP_InteractionListener,this.bodylisteners=new e.util.ZNPList_ZPP_BodyListener,this.conlisteners=new e.util.ZNPList_ZPP_ConstraintListener,this.constraints=new e.util.ZNPList_ZPP_Constraint,this.interactors=new e.util.ZNPList_ZPP_Interactor,this.cbsets=new e.util.ZNPList_ZPP_CbSet}static _initEnums(e){rn.ANY_SHAPE=new e.callbacks.CbType,rn.ANY_BODY=new e.callbacks.CbType,rn.ANY_COMPOUND=new e.callbacks.CbType,rn.ANY_CONSTRAINT=new e.callbacks.CbType}static setlt(e,t){return e.id<t.id}addInteractor(e){this.interactors.add(e)}remInteractor(e){this.interactors.remove(e)}addConstraint(e){this.constraints.add(e)}remConstraint(e){this.constraints.remove(e)}addint(e){let t=rn._zpp,n=null,s=this.listeners.head;for(;s!=null;){let a=s.elt;if(e.precedence>a.precedence||e.precedence===a.precedence&&e.id>a.id)break;n=s,s=s.next}let i=this.listeners,l;t.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?l=new t.util.ZNPNode_ZPP_InteractionListener:(l=t.util.ZNPNode_ZPP_InteractionListener.zpp_pool,t.util.ZNPNode_ZPP_InteractionListener.zpp_pool=l.next,l.next=null),l.elt=e,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++;let r=this.cbsets.head;for(;r!=null;)r.elt.zip_listeners=!0,r.elt.invalidate_pairs(),r=r.next}removeint(e){this.listeners.remove(e);let t=this.cbsets.head;for(;t!=null;)t.elt.zip_listeners=!0,t.elt.invalidate_pairs(),t=t.next}invalidateint(){let e=this.cbsets.head;for(;e!=null;)e.elt.zip_listeners=!0,e.elt.invalidate_pairs(),e=e.next}addbody(e){let t=rn._zpp,n=null,s=this.bodylisteners.head;for(;s!=null;){let a=s.elt;if(e.precedence>a.precedence||e.precedence===a.precedence&&e.id>a.id)break;n=s,s=s.next}let i=this.bodylisteners,l;t.util.ZNPNode_ZPP_BodyListener.zpp_pool==null?l=new t.util.ZNPNode_ZPP_BodyListener:(l=t.util.ZNPNode_ZPP_BodyListener.zpp_pool,t.util.ZNPNode_ZPP_BodyListener.zpp_pool=l.next,l.next=null),l.elt=e,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++;let r=this.cbsets.head;for(;r!=null;)r.elt.zip_bodylisteners=!0,r=r.next}removebody(e){this.bodylisteners.remove(e);let t=this.cbsets.head;for(;t!=null;)t.elt.zip_bodylisteners=!0,t=t.next}invalidatebody(){let e=this.cbsets.head;for(;e!=null;)e.elt.zip_bodylisteners=!0,e=e.next}addconstraint(e){let t=rn._zpp,n=null,s=this.conlisteners.head;for(;s!=null;){let a=s.elt;if(e.precedence>a.precedence||e.precedence===a.precedence&&e.id>a.id)break;n=s,s=s.next}let i=this.conlisteners,l;t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool==null?l=new t.util.ZNPNode_ZPP_ConstraintListener:(l=t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool,t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool=l.next,l.next=null),l.elt=e,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++;let r=this.cbsets.head;for(;r!=null;)r.elt.zip_conlisteners=!0,r=r.next}removeconstraint(e){this.conlisteners.remove(e);let t=this.cbsets.head;for(;t!=null;)t.elt.zip_conlisteners=!0,t=t.next}invalidateconstraint(){let e=this.cbsets.head;for(;e!=null;)e.elt.zip_conlisteners=!0,e=e.next}};rn._zpp=null,rn.ANY_SHAPE=null,rn.ANY_BODY=null,rn.ANY_COMPOUND=null,rn.ANY_CONSTRAINT=null;var an=rn;var li=class li{constructor(){this.space=null;this.interaction=null;this.constraint=null;this.body=null;this.precedence=0;this.event=0;this.type=0;this.id=0;this.outer=null;this.id=_n.Listener()}static setlt(e,t){return e.precedence<=t.precedence?e.precedence==t.precedence?e.id>t.id:!1:!0}swapEvent(e){}invalidate_precedence(){}addedToSpace(){}removedFromSpace(){}static _initEnums(e,t){let n=()=>{t.internal=!0;let i=new e.callbacks.ListenerType;return t.internal=!1,i};t.ListenerType_BODY==null&&(t.ListenerType_BODY=n()),t.ListenerType_CONSTRAINT==null&&(t.ListenerType_CONSTRAINT=n()),t.ListenerType_INTERACTION==null&&(t.ListenerType_INTERACTION=n()),t.ListenerType_PRE==null&&(t.ListenerType_PRE=n()),li.types=[t.ListenerType_BODY,t.ListenerType_CONSTRAINT,t.ListenerType_INTERACTION,t.ListenerType_PRE];let s=()=>{t.internal=!0;let i=new e.callbacks.CbEvent;return t.internal=!1,i};t.CbEvent_BEGIN==null&&(t.CbEvent_BEGIN=s()),t.CbEvent_END==null&&(t.CbEvent_END=s()),t.CbEvent_WAKE==null&&(t.CbEvent_WAKE=s()),t.CbEvent_SLEEP==null&&(t.CbEvent_SLEEP=s()),t.CbEvent_BREAK==null&&(t.CbEvent_BREAK=s()),t.CbEvent_PRE==null&&(t.CbEvent_PRE=s()),t.CbEvent_ONGOING==null&&(t.CbEvent_ONGOING=s()),li.events=[t.CbEvent_BEGIN,t.CbEvent_END,t.CbEvent_WAKE,t.CbEvent_SLEEP,t.CbEvent_BREAK,t.CbEvent_PRE,t.CbEvent_ONGOING]}};li._nape=null,li._zpp=null,li.internal=!1,li.types=[],li.events=[];var Lt=li;var al=class extends Lt{constructor(t,n,s){super();this.handler=null;this.options=null;this.outer_zn=null;this.event=n,this.handler=s,this.body=this,this.type=0,this.options=t.zpp_inner}immutable_options(){if(this.space!=null&&this.space.midstep)throw new Error("Error: Cannot change listener type options during space.step()")}addedToSpace(){let t=Lt._zpp;this.options.handler=(s,i,l)=>this.cbtype_change(s,i,l);let n=this.options.includes.head;for(;n!=null;){let s=n.elt,i=null,l=s.bodylisteners.head;for(;l!=null;){let c=l.elt;if(this.precedence>c.precedence||this.precedence==c.precedence&&this.id>c.id)break;i=l,l=l.next}let r=s.bodylisteners,a;t.util.ZNPNode_ZPP_BodyListener.zpp_pool==null?a=new t.util.ZNPNode_ZPP_BodyListener:(a=t.util.ZNPNode_ZPP_BodyListener.zpp_pool,t.util.ZNPNode_ZPP_BodyListener.zpp_pool=a.next,a.next=null),a.elt=this;let o=a;i==null?(o.next=r.head,r.head=o):(o.next=i.next,i.next=o),r.pushmod=r.modified=!0,r.length++;let p=s.cbsets.head;for(;p!=null;){let c=p.elt;c.zip_bodylisteners=!0,p=p.next}n=n.next}}removedFromSpace(){let t=this.options.includes.head;for(;t!=null;){let n=t.elt;n.bodylisteners.remove(this);let s=n.cbsets.head;for(;s!=null;){let i=s.elt;i.zip_bodylisteners=!0,s=s.next}t=t.next}this.options.handler=null}cbtype_change(t,n,s){this.removedFromSpace();let i=this.options;n?s?i.effect_change(t,!0,!0):i.includes.remove(t):s?i.effect_change(t,!1,!0):i.excludes.remove(t),this.addedToSpace()}invalidate_precedence(){this.space!=null&&(this.removedFromSpace(),this.addedToSpace())}swapEvent(t){if(t!=2&&t!=3)throw new Error("Error: BodyListener event must be either WAKE or SLEEP only");this.removedFromSpace(),this.event=t,this.addedToSpace()}};var pl=class extends Lt{constructor(t,n,s){super();this.handler=null;this.options=null;this.outer_zn=null;this.event=n,this.handler=s,this.constraint=this,this.type=1,this.options=t.zpp_inner}immutable_options(){if(this.space!=null&&this.space.midstep)throw new Error("Error: Cannot change listener type options during space.step()")}addedToSpace(){let t=Lt._zpp;this.options.handler=(s,i,l)=>this.cbtype_change(s,i,l);let n=this.options.includes.head;for(;n!=null;){let s=n.elt,i=null,l=s.conlisteners.head;for(;l!=null;){let c=l.elt;if(this.precedence>c.precedence||this.precedence==c.precedence&&this.id>c.id)break;i=l,l=l.next}let r=s.conlisteners,a;t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool==null?a=new t.util.ZNPNode_ZPP_ConstraintListener:(a=t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool,t.util.ZNPNode_ZPP_ConstraintListener.zpp_pool=a.next,a.next=null),a.elt=this;let o=a;i==null?(o.next=r.head,r.head=o):(o.next=i.next,i.next=o),r.pushmod=r.modified=!0,r.length++;let p=s.cbsets.head;for(;p!=null;){let c=p.elt;c.zip_conlisteners=!0,p=p.next}n=n.next}}removedFromSpace(){let t=this.options.includes.head;for(;t!=null;){let n=t.elt;n.conlisteners.remove(this);let s=n.cbsets.head;for(;s!=null;){let i=s.elt;i.zip_conlisteners=!0,s=s.next}t=t.next}this.options.handler=null}cbtype_change(t,n,s){this.removedFromSpace();let i=this.options;n?s?i.effect_change(t,!0,!0):i.includes.remove(t):s?i.effect_change(t,!1,!0):i.excludes.remove(t),this.addedToSpace()}invalidate_precedence(){this.space!=null&&(this.removedFromSpace(),this.addedToSpace())}swapEvent(t){if(t!=2&&t!=3&&t!=4)throw new Error("Error: ConstraintListener event must be either WAKE or SLEEP only");this.removedFromSpace(),this.event=t,this.addedToSpace()}};var Ct=class Ct extends Lt{constructor(t,n,s,i){super();this.outer_zni=null;this.outer_znp=null;this.itype=0;this.handleri=null;this.allowSleepingCallbacks=!1;this.pure=!1;this.handlerp=null;this.type=i,this.interaction=this,this.event=s,this.options1=t.zpp_inner,this.options2=n.zpp_inner,this.allowSleepingCallbacks=!1}setInteractionType(t){this.itype=t}wake(){let t=this.options1.includes.head,n=this.options2.includes.head;for(;t!=null&&n!=null;){let s=t.elt,i=n.elt;if(s==i){let l=s.interactors.head;for(;l!=null;)l.elt.wake(),l=l.next;t=t.next,n=n.next}else if(s.id<i.id){let l=s.interactors.head;for(;l!=null;)l.elt.wake(),l=l.next;t=t.next}else{let l=i.interactors.head;for(;l!=null;)l.elt.wake(),l=l.next;n=n.next}}for(;t!=null;){let s=t.elt.interactors.head;for(;s!=null;)s.elt.wake(),s=s.next;t=t.next}for(;n!=null;){let s=n.elt.interactors.head;for(;s!=null;)s.elt.wake(),s=s.next;n=n.next}}CbSetset(t,n,s){let i=Lt._zpp,l=Ct.UCbSet,r=Ct.VCbSet,a=Ct.WCbSet,o=t.head,p=n.head;for(;o!=null&&p!=null;){let c=o.elt,h=p.elt;if(c==h){let u=this._allocCbSetNode(i);u.elt=c,u.next=a.head,a.head=u,a.modified=!0,a.length++,o=o.next,p=p.next}else if(i.callbacks.ZPP_CbSet.setlt(c,h)){let u=this._allocCbSetNode(i);u.elt=c,u.next=l.head,l.head=u,l.modified=!0,l.length++,o=o.next}else{let u=this._allocCbSetNode(i);u.elt=h,u.next=r.head,r.head=u,r.modified=!0,r.length++,p=p.next}}for(;o!=null;){let c=this._allocCbSetNode(i);c.elt=o.elt,c.next=l.head,l.head=c,l.modified=!0,l.length++,o=o.next}for(;p!=null;){let c=this._allocCbSetNode(i);c.elt=p.elt,c.next=r.head,r.head=c,r.modified=!0,r.length++,p=p.next}for(;l.head!=null;){let c=l.pop_unsafe(),h=n.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;r.head!=null;){let c=r.pop_unsafe(),h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;a.head!=null;){let c=a.pop_unsafe();s(c,c);let h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}}CbTypeset(t,n,s){let i=Lt._zpp,l=Ct.UCbType,r=Ct.VCbType,a=Ct.WCbType,o=t.head,p=n.head;for(;o!=null&&p!=null;){let c=o.elt,h=p.elt;if(c==h){let u=this._allocCbTypeNode(i);u.elt=c,u.next=a.head,a.head=u,a.modified=!0,a.length++,o=o.next,p=p.next}else if(c.id<h.id){let u=this._allocCbTypeNode(i);u.elt=c,u.next=l.head,l.head=u,l.modified=!0,l.length++,o=o.next}else{let u=this._allocCbTypeNode(i);u.elt=h,u.next=r.head,r.head=u,r.modified=!0,r.length++,p=p.next}}for(;o!=null;){let c=this._allocCbTypeNode(i);c.elt=o.elt,c.next=l.head,l.head=c,l.modified=!0,l.length++,o=o.next}for(;p!=null;){let c=this._allocCbTypeNode(i);c.elt=p.elt,c.next=r.head,r.head=c,r.modified=!0,r.length++,p=p.next}for(;l.head!=null;){let c=l.pop_unsafe(),h=n.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;r.head!=null;){let c=r.pop_unsafe(),h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}for(;a.head!=null;){let c=a.pop_unsafe();s(c,c);let h=a.head;for(;h!=null;)s(c,h.elt),h=h.next}}with_uniquesets(t){let n=Lt._zpp,s;if(n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool==null?s=new n.util.ZPP_Set_ZPP_CbSetPair:(s=n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool,n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool=s.next,s.next=null),s.lt=n.callbacks.ZPP_CbSetPair.setlt,this.CbTypeset(this.options1.includes,this.options2.includes,(l,r)=>{this.CbSetset(l.cbsets,r.cbsets,(a,o)=>{if(a.validate(),o.validate(),n.callbacks.ZPP_CbSet.single_intersection(a,o,this)){let p;n.callbacks.ZPP_CbSetPair.zpp_pool==null?p=new n.callbacks.ZPP_CbSetPair:(p=n.callbacks.ZPP_CbSetPair.zpp_pool,n.callbacks.ZPP_CbSetPair.zpp_pool=p.next,p.next=null),p.zip_listeners=!0,n.callbacks.ZPP_CbSet.setlt(a,o)?(p.a=a,p.b=o):(p.a=o,p.b=a),s.try_insert(p)}})}),s.parent!=null){let l=s.parent;for(;l!=null;)if(l.prev!=null)l=l.prev;else if(l.next!=null)l=l.next;else{let r=l.data;t?this.space.freshListenerType(r.a,r.b):this.space.nullListenerType(r.a,r.b);let a=r;a.a=a.b=null,a.listeners.clear(),a.next=n.callbacks.ZPP_CbSetPair.zpp_pool,n.callbacks.ZPP_CbSetPair.zpp_pool=a;let o=l.parent;o!=null&&(l==o.prev?o.prev=null:o.next=null,l.parent=null);let p=l;p.data=null,p.lt=null,p.swapped=null,p.next=n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool,n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool=p,l=o}s.parent=null}let i=s;i.data=null,i.lt=null,i.swapped=null,i.next=n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool,n.util.ZPP_Set_ZPP_CbSetPair.zpp_pool=i}with_union(t){let n=this.options1.includes.head,s=this.options2.includes.head;for(;n!=null&&s!=null;){let i=n.elt,l=s.elt;i==l?(t(i),n=n.next,s=s.next):i.id<l.id?(t(i),n=n.next):(t(l),s=s.next)}for(;n!=null;)t(n.elt),n=n.next;for(;s!=null;)t(s.elt),s=s.next}addedToSpace(){let t=Lt._zpp,n=this.type==3;this.with_union(s=>{let i=null,l=s.listeners.head;for(;l!=null;){let c=l.elt;if(this.precedence>c.precedence||this.precedence==c.precedence&&this.id>c.id)break;i=l,l=l.next}let r=s.listeners,a;t.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?a=new t.util.ZNPNode_ZPP_InteractionListener:(a=t.util.ZNPNode_ZPP_InteractionListener.zpp_pool,t.util.ZNPNode_ZPP_InteractionListener.zpp_pool=a.next,a.next=null),a.elt=this;let o=a;i==null?(o.next=r.head,r.head=o):(o.next=i.next,i.next=o),r.pushmod=r.modified=!0,r.length++;let p=s.cbsets.head;for(;p!=null;){let c=p.elt;c.zip_listeners=!0,c.invalidate_pairs(),p=p.next}if(n){let c=s.interactors.head;for(;c!=null;)c.elt.wake(),c=c.next}}),this.options1.handler=(s,i,l)=>this.cbtype_change1(s,i,l),this.options2.handler=(s,i,l)=>this.cbtype_change2(s,i,l),this.with_uniquesets(!0)}removedFromSpace(){this.with_uniquesets(!1);let t=this.type==3;this.with_union(n=>{n.listeners.remove(this);let s=n.cbsets.head;for(;s!=null;){let i=s.elt;i.zip_listeners=!0,i.invalidate_pairs(),s=s.next}if(t){let i=n.interactors.head;for(;i!=null;)i.elt.wake(),i=i.next}}),this.options1.handler=null,this.options2.handler=null}invalidate_precedence(){this.space!=null&&(this.removedFromSpace(),this.addedToSpace())}cbtype_change1(t,n,s){this.cbtype_change(this.options1,t,n,s)}cbtype_change2(t,n,s){this.cbtype_change(this.options2,t,n,s)}cbtype_change(t,n,s,i){this.removedFromSpace(),s?i?t.effect_change(n,!0,!0):t.includes.remove(n):i?t.effect_change(n,!1,!0):t.excludes.remove(n),this.addedToSpace()}swapEvent(t){if(this.type==3)throw new Error("Error: PreListener event can only be PRE");if(t!=0&&t!=1&&t!=6)throw new Error("Error: InteractionListener event must be either BEGIN, END, ONGOING");this.removedFromSpace(),this.event=t,this.addedToSpace()}_allocCbSetNode(t){let n;return t.util.ZNPNode_ZPP_CbSet.zpp_pool==null?n=new t.util.ZNPNode_ZPP_CbSet:(n=t.util.ZNPNode_ZPP_CbSet.zpp_pool,t.util.ZNPNode_ZPP_CbSet.zpp_pool=n.next,n.next=null),n}_allocCbTypeNode(t){let n;return t.util.ZNPNode_ZPP_CbType.zpp_pool==null?n=new t.util.ZNPNode_ZPP_CbType:(n=t.util.ZNPNode_ZPP_CbType.zpp_pool,t.util.ZNPNode_ZPP_CbType.zpp_pool=n.next,n.next=null),n}static _initStatics(t){Ct.UCbSet=new t.util.ZNPList_ZPP_CbSet,Ct.VCbSet=new t.util.ZNPList_ZPP_CbSet,Ct.WCbSet=new t.util.ZNPList_ZPP_CbSet,Ct.UCbType=new t.util.ZNPList_ZPP_CbType,Ct.VCbType=new t.util.ZNPList_ZPP_CbType,Ct.WCbType=new t.util.ZNPList_ZPP_CbType}};Ct.UCbSet=null,Ct.VCbSet=null,Ct.WCbSet=null,Ct.UCbType=null,Ct.VCbType=null,Ct.WCbType=null;var cl=Ct;var Yn=class Yn{constructor(){this.outer=null;this.handler=null;this.includes=null;this.excludes=null;this.wrap_includes=null;this.wrap_excludes=null;let e=Yn._zpp;this.includes=new e.util.ZNPList_ZPP_CbType,this.excludes=new e.util.ZNPList_ZPP_CbType}static argument(e){let t=Yn._nape;return e==null?new t.callbacks.OptionType:e instanceof t.callbacks.OptionType?e:new t.callbacks.OptionType().including(e)}setup_includes(){let e=Yn._zpp;this.wrap_includes=e.util.ZPP_CbTypeList.get(this.includes,!0)}setup_excludes(){let e=Yn._zpp;this.wrap_excludes=e.util.ZPP_CbTypeList.get(this.excludes,!0)}excluded(e){return this.nonemptyintersection(e,this.excludes)}included(e){return this.nonemptyintersection(e,this.includes)}compatible(e){return this.nonemptyintersection(e,this.includes)?!this.nonemptyintersection(e,this.excludes):!1}nonemptyintersection(e,t){let n=!1,s=e.head,i=t.head;for(;i!=null&&s!=null;){let l=i.elt,r=s.elt;if(l===r){n=!0;break}else l.id<r.id?i=i.next:s=s.next}return n}insertOrdered(e,t){let n=Yn._zpp,s=null,i=e.head;for(;i!=null;){let r=i.elt;if(t.id<r.id)break;s=i,i=i.next}let l;n.util.ZNPNode_ZPP_CbType.zpp_pool==null?l=new n.util.ZNPNode_ZPP_CbType:(l=n.util.ZNPNode_ZPP_CbType.zpp_pool,n.util.ZNPNode_ZPP_CbType.zpp_pool=l.next,l.next=null),l.elt=t,s==null?(l.next=e.head,e.head=l):(l.next=s.next,s.next=l),e.pushmod=e.modified=!0,e.length++}effect_change(e,t,n){t?n?this.insertOrdered(this.includes,e):this.includes.remove(e):n?this.insertOrdered(this.excludes,e):this.excludes.remove(e)}append_type(e,t){e===this.includes?this.includes.has(t)||(this.excludes.has(t)?this.handler!=null?this.handler(t,!1,!1):this.excludes.remove(t):this.handler!=null?this.handler(t,!0,!0):this.insertOrdered(this.includes,t)):this.excludes.has(t)||(this.includes.has(t)?this.handler!=null?this.handler(t,!0,!1):this.includes.remove(t):this.handler!=null?this.handler(t,!1,!0):this.insertOrdered(this.excludes,t))}set(e){if(e!==this){for(;this.includes.head!=null;)this.append_type(this.excludes,this.includes.head.elt);for(;this.excludes.head!=null;)this.append_type(this.includes,this.excludes.head.elt);let t=e.excludes.head;for(;t!=null;){let s=t.elt;this.append_type(this.excludes,s),t=t.next}let n=e.includes.head;for(;n!=null;){let s=n.elt;this.append_type(this.includes,s),n=n.next}}return this}append(e,t){let n=Yn._nape;if(t==null)throw new Error("Error: Cannot append null, only CbType and CbType list values");if(t instanceof n.callbacks.CbType){let s=t;this.append_type(e,s.zpp_inner)}else if(t instanceof n.callbacks.CbTypeList){let s=t;s.zpp_inner.valmod();let i=n.callbacks.CbTypeIterator.get(s);for(;;){i.zpp_inner.zpp_inner.valmod();let l=i.zpp_inner;l.zpp_inner.valmod(),l.zpp_inner.zip_length&&(l.zpp_inner.zip_length=!1,l.zpp_inner.user_length=l.zpp_inner.inner.length);let r=l.zpp_inner.user_length;i.zpp_critical=!0;let a;if(i.zpp_i<r?a=!0:(i.zpp_next=n.callbacks.CbTypeIterator.zpp_pool,n.callbacks.CbTypeIterator.zpp_pool=i,i.zpp_inner=null,a=!1),!a)break;i.zpp_critical=!1;let o=i.zpp_inner.at(i.zpp_i++);this.append_type(e,o.zpp_inner)}}else if(t instanceof Array){let s=t,i=0;for(;i<s.length;){let l=s[i];if(++i,!(l instanceof n.callbacks.CbType))throw new Error("Error: Cannot append non-CbType or CbType list value");let r=l;this.append_type(e,r.zpp_inner)}}else throw new Error("Error: Cannot append non-CbType or CbType list value")}};Yn._nape=null,Yn._zpp=null;var Ps=Yn;var wn=class wn{constructor(){this.outer=null;this.id=0;this.userData=null;this.compound=null;this.space=null;this.active=!1;this.stiff=!1;this.frequency=0;this.damping=0;this.maxForce=0;this.maxError=0;this.breakUnderForce=!1;this.breakUnderError=!1;this.removeOnBreak=!1;this.component=null;this.ignore=!1;this.__velocity=!1;this.cbTypes=null;this.cbSet=null;this.wrap_cbTypes=null;this.pre_dt=-1;this._initBase()}_initBase(){let e=wn._zpp;this.id=_n.Constraint(),this.stiff=!0,this.active=!0,this.ignore=!1,this.frequency=10,this.damping=1,this.maxForce=1/0,this.maxError=1/0,this.breakUnderForce=!1,this.removeOnBreak=!0,this.pre_dt=-1,this.cbTypes=new e.util.ZNPList_ZPP_CbType}clear(){}activeBodies(){}inactiveBodies(){}clearcache(){}validate(){}wake_connected(){}forest(){}broken(){}warmStart(){}draw(e){}pair_exists(e,t){return!1}preStep(e){return!1}applyImpulseVel(){return!1}applyImpulsePos(){return!1}copy(e,t){return null}immutable_midstep(e){if(this.space!=null&&this.space.midstep)throw new Error("Error: Constraint::"+e+" cannot be set during space step()")}setupcbTypes(){let e=wn._zpp;this.wrap_cbTypes=e.util.ZPP_CbTypeList.get(this.cbTypes),this.wrap_cbTypes.zpp_inner.adder=this.wrap_cbTypes_adder.bind(this),this.wrap_cbTypes.zpp_inner.subber=this.wrap_cbTypes_subber.bind(this),this.wrap_cbTypes.zpp_inner.dontremove=!0,this.wrap_cbTypes.zpp_inner._modifiable=this.immutable_cbTypes.bind(this)}immutable_cbTypes(){this.immutable_midstep("Constraint::cbTypes")}wrap_cbTypes_subber(e){let t=e.zpp_inner;this.cbTypes.has(t)&&(this.space!=null&&(this.dealloc_cbSet(),t.constraints.remove(this)),this.cbTypes.remove(t),this.space!=null&&(this.alloc_cbSet(),this.wake()))}wrap_cbTypes_adder(e){return this.insert_cbtype(e.zpp_inner),!1}insert_cbtype(e){let t=wn._zpp;if(!this.cbTypes.has(e)){this.space!=null&&(this.dealloc_cbSet(),e.constraints.add(this));let n=null,s=this.cbTypes.head;for(;s!=null;){let a=s.elt;if(e.id<a.id)break;n=s,s=s.next}let i=this.cbTypes,l;t.util.ZNPNode_ZPP_CbType.zpp_pool==null?l=new t.util.ZNPNode_ZPP_CbType:(l=t.util.ZNPNode_ZPP_CbType.zpp_pool,t.util.ZNPNode_ZPP_CbType.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;n==null?(r.next=i.head,i.head=r):(r.next=n.next,n.next=r),i.pushmod=i.modified=!0,i.length++,this.space!=null&&(this.alloc_cbSet(),this.wake())}}alloc_cbSet(){(this.cbSet=this.space.cbsets.get(this.cbTypes))!=null&&(this.cbSet.count++,this.cbSet.constraints.add(this))}dealloc_cbSet(){let e=wn._zpp;if(this.cbSet!=null){if(this.cbSet.constraints.remove(this),--this.cbSet.count==0){this.space.cbsets.remove(this.cbSet);let t=this.cbSet;for(t.listeners.clear(),t.zip_listeners=!0,t.bodylisteners.clear(),t.zip_bodylisteners=!0,t.conlisteners.clear(),t.zip_conlisteners=!0;t.cbTypes.head!=null;)t.cbTypes.pop_unsafe().cbsets.remove(t);t.next=e.callbacks.ZPP_CbSet.zpp_pool,e.callbacks.ZPP_CbSet.zpp_pool=t}this.cbSet=null}}activate(){this.space!=null&&this.activeInSpace()}deactivate(){this.space!=null&&this.inactiveOrOutSpace()}addedToSpace(){this.active&&this.activeInSpace(),this.activeBodies();let e=this.cbTypes.head;for(;e!=null;)e.elt.constraints.add(this),e=e.next}removedFromSpace(){this.active&&this.inactiveOrOutSpace(),this.inactiveBodies();let e=this.cbTypes.head;for(;e!=null;)e.elt.constraints.remove(this),e=e.next}activeInSpace(){let e=wn._zpp;this.alloc_cbSet(),e.space.ZPP_Component.zpp_pool==null?this.component=new e.space.ZPP_Component:(this.component=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=this.component.next,this.component.next=null),this.component.isBody=!1,this.component.constraint=this}inactiveOrOutSpace(){let e=wn._zpp;this.dealloc_cbSet();let t=this.component;t.body=null,t.constraint=null,t.next=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=t,this.component=null}wake(){this.space!=null&&this.space.wake_constraint(this)}copyto(e){let t=wn._nape,n=this.outer;n.zpp_inner.wrap_cbTypes==null&&n.zpp_inner.setupcbTypes();let s=n.zpp_inner.wrap_cbTypes;s.zpp_inner.valmod();let i=t.callbacks.CbTypeIterator.get(s);for(;;){i.zpp_inner.zpp_inner.valmod();let y=i.zpp_inner;y.zpp_inner.valmod(),y.zpp_inner.zip_length&&(y.zpp_inner.zip_length=!1,y.zpp_inner.user_length=y.zpp_inner.inner.length);let d=y.zpp_inner.user_length;i.zpp_critical=!0;let _;if(i.zpp_i<d?_=!0:(i.zpp_next=t.callbacks.CbTypeIterator.zpp_pool,t.callbacks.CbTypeIterator.zpp_pool=i,i.zpp_inner=null,_=!1),!_)break;i.zpp_critical=!1;let f=i.zpp_inner.at(i.zpp_i++);e.zpp_inner.wrap_cbTypes==null&&e.zpp_inner.setupcbTypes();let z=e.zpp_inner.wrap_cbTypes;z.zpp_inner.reverse_flag?z.push(f):z.unshift(f)}e.zpp_inner.removeOnBreak=n.zpp_inner.removeOnBreak;let l=n.zpp_inner.breakUnderError;e.zpp_inner.breakUnderError!=l&&(e.zpp_inner.breakUnderError=l,e.zpp_inner.wake());let r=n.zpp_inner.breakUnderForce;e.zpp_inner.breakUnderForce!=r&&(e.zpp_inner.breakUnderForce=r,e.zpp_inner.wake());let a=n.zpp_inner.maxError;if(a!==a)throw new Error("Error: Constraint::maxError cannot be NaN");if(a<0)throw new Error("Error: Constraint::maxError must be >=0");e.zpp_inner.maxError!=a&&(e.zpp_inner.maxError=a,e.zpp_inner.wake());let o=n.zpp_inner.maxForce;if(o!==o)throw new Error("Error: Constraint::maxForce cannot be NaN");if(o<0)throw new Error("Error: Constraint::maxForce must be >=0");e.zpp_inner.maxForce!=o&&(e.zpp_inner.maxForce=o,e.zpp_inner.wake());let p=n.zpp_inner.damping;if(p!==p)throw new Error("Error: Constraint::Damping cannot be Nan");if(p<0)throw new Error("Error: Constraint::Damping must be >=0");e.zpp_inner.damping!=p&&(e.zpp_inner.damping=p,e.zpp_inner.stiff||e.zpp_inner.wake());let c=n.zpp_inner.frequency;if(c!==c)throw new Error("Error: Constraint::Frequency cannot be NaN");if(c<=0)throw new Error("Error: Constraint::Frequency must be >0");e.zpp_inner.frequency!=c&&(e.zpp_inner.frequency=c,e.zpp_inner.stiff||e.zpp_inner.wake());let h=n.zpp_inner.stiff;e.zpp_inner.stiff!=h&&(e.zpp_inner.stiff=h,e.zpp_inner.wake());let u=n.zpp_inner.ignore;e.zpp_inner.ignore!=u&&(e.zpp_inner.ignore=u,e.zpp_inner.wake());let x=n.zpp_inner.active;e.zpp_inner.active!=x&&(e.zpp_inner.component!=null&&(e.zpp_inner.component.woken=!1),e.zpp_inner.clearcache(),x?(e.zpp_inner.active=x,e.zpp_inner.activate(),e.zpp_inner.space!=null&&(e.zpp_inner.component!=null&&(e.zpp_inner.component.sleeping=!0),e.zpp_inner.space.wake_constraint(e.zpp_inner,!0))):(e.zpp_inner.space!=null&&(e.zpp_inner.wake(),e.zpp_inner.space.live_constraints.remove(e.zpp_inner)),e.zpp_inner.active=x,e.zpp_inner.deactivate()))}static _findRoot(e){if(e==e.parent)return e;let t=e,n=null;for(;t!=t.parent;){let s=t.parent;t.parent=n,n=t,t=s}for(;n!=null;){let s=n.parent;n.parent=t,n=s}return t}static _unionComponents(e,t){let n=wn._findRoot(e),s=wn._findRoot(t);n!=s&&(n.rank<s.rank?n.parent=s:n.rank>s.rank?s.parent=n:(s.parent=n,n.rank++))}};wn._nape=null,wn._zpp=null;var Me=wn;var Jn=class g{constructor(){this.id=0;this.bc=null;this.cb=null}static dict(e,t){let n=new g;return n.id=e,n.bc=t,n}static todo(e,t){let n=new g;return n.id=e,n.cb=t,n}};var Vs=class Vs extends Me{constructor(){super();this.outer_zn=null;this.ratio=0;this.jointMin=0;this.jointMax=0;this.slack=!1;this.equal=!1;this.scale=0;this.b1=null;this.b2=null;this.kMass=0;this.jAcc=0;this.jMax=0;this.gamma=0;this.bias=0;this.stepped=!1;this.ratio=1,this.jAcc=0,this.slack=!1,this.jMax=1/0,this.stepped=!1}is_slack(){let t=this.ratio*this.b2.rot-this.b1.rot;return this.equal?(this.scale=1,!1):t<this.jointMin?(this.scale=-1,!1):t>this.jointMax?(this.scale=1,!1):(this.scale=0,!0)}bodyImpulse(t){let n=me();return this.stepped?t==this.b1?n.geom.Vec3.get(0,0,-this.scale*this.jAcc):n.geom.Vec3.get(0,0,this.ratio*this.scale*this.jAcc):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}copy(t,n){let s=Vs._createFn(null,null,this.jointMin,this.jointMax,this.ratio);if(this.copyto(s),t!=null&&this.b1!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b1.id){i=r.bc;break}}i!=null?s.zpp_inner.b1=i.zpp_inner:n.push(Jn.todo(this.b1.id,r=>{s.zpp_inner.b1=r.zpp_inner}))}if(t!=null&&this.b2!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b2.id){i=r.bc;break}}i!=null?s.zpp_inner.b2=i.zpp_inner:n.push(Jn.todo(this.b2.id,r=>{s.zpp_inner.b2=r.zpp_inner}))}return s}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: AngleJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: AngleJoint must have jointMin <= jointMax");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){if(this.b1.type==2){let t;if(this.b1.component==this.b1.component.parent)t=this.b1.component;else{let s=this.b1.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}if(this.b2.type==2){let t;if(this.b2.component==this.b2.component.parent)t=this.b2.component;else{let s=this.b2.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAcc=0,this.pre_dt=-1,this.slack=!1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.equal=this.jointMin==this.jointMax;let s=this.ratio*this.b2.rot-this.b1.rot;this.equal?(s-=this.jointMax,this.slack=!1,this.scale=1):s<this.jointMin?(s=this.jointMin-s,this.scale=-1,this.slack=!1):s>this.jointMax?(s-=this.jointMax,this.scale=1,this.slack=!1):(this.scale=0,s=0,this.slack=!0);let i=s;if(!this.slack){if(this.kMass=this.b1.sinertia+this.ratio*this.ratio*this.b2.sinertia,this.kMass!=0?this.kMass=1/this.kMass:this.jAcc=0,this.stiff)this.bias=0,this.gamma=0;else{if(this.breakUnderError&&i*i>this.maxError*this.maxError)return!0;let l=2*Math.PI*this.frequency;this.gamma=1/(t*l*(2*this.damping+l*t));let r=1/(1+this.gamma),a=t*l*l*this.gamma;this.gamma*=r,this.kMass*=r,this.bias=-i*a,this.bias<-this.maxError?this.bias=-this.maxError:this.bias>this.maxError&&(this.bias=this.maxError)}this.jAcc*=n,this.jMax=this.maxForce*t}return!1}warmStart(){this.slack||(this.b1.angvel-=this.scale*this.b1.iinertia*this.jAcc,this.b2.angvel+=this.ratio*this.scale*this.b2.iinertia*this.jAcc)}applyImpulseVel(){if(this.slack)return!1;let t=this.scale*(this.ratio*(this.b2.angvel+this.b2.kinangvel)-this.b1.angvel-this.b1.kinangvel),n=this.kMass*(this.bias-t)-this.jAcc*this.gamma,s=this.jAcc;return this.jAcc+=n,!this.equal&&this.jAcc>0&&(this.jAcc=0),this.breakUnderForce&&(this.jAcc>this.jMax||this.jAcc<-this.jMax)?!0:(this.stiff||(this.jAcc>this.jMax?this.jAcc=this.jMax:this.jAcc<-this.jMax&&(this.jAcc=-this.jMax)),n=this.jAcc-s,this.b1.angvel-=this.scale*this.b1.iinertia*n,this.b2.angvel+=this.ratio*this.scale*this.b2.iinertia*n,!1)}applyImpulsePos(){let t=this.ratio*this.b2.rot-this.b1.rot,n;this.equal?(t-=this.jointMax,n=!1,this.scale=1):t<this.jointMin?(t=this.jointMin-t,this.scale=-1,n=!1):t>this.jointMax?(t-=this.jointMax,this.scale=1,n=!1):(this.scale=0,t=0,n=!0);let s=t;if(!n){if(this.breakUnderError&&s*s>this.maxError*this.maxError)return!0;let l=-(s*.5)*this.kMass;if(this.equal||l<0){let r=this.b1,a=-this.scale*l*this.b1.iinertia;if(r.rot+=a,a*a>1e-4)r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot);else{let c=a*a,h=1-.5*c,u=1-c*c/8,x=(h*r.axisx+a*r.axisy)*u;r.axisy=(h*r.axisy-a*r.axisx)*u,r.axisx=x}let o=this.b2,p=this.ratio*this.scale*l*this.b2.iinertia;if(o.rot+=p,p*p>1e-4)o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot);else{let c=p*p,h=1-.5*c,u=1-c*c/8,x=(h*o.axisx+p*o.axisy)*u;o.axisy=(h*o.axisy-p*o.axisx)*u,o.axisx=x}}}return!1}draw(t){}static _rotateBody(t,n){if(t.rot+=n,n*n>1e-4)t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot);else{let s=n*n,i=1-.5*s,l=1-s*s/8,r=(i*t.axisx+n*t.axisy)*l;t.axisy=(i*t.axisy-n*t.axisx)*l,t.axisx=r}}static _copyBody(t,n,s,i,l){if(t!=null&&s!=null){let r=null;for(let a=0;a<t.length;a++){let o=t[a];if(o.id==s.id){r=o.bc;break}}r!=null?i.zpp_inner_zn[l]=r.zpp_inner:n.push(Jn.todo(s.id,function(a){i.zpp_inner_zn[l]=a.zpp_inner}))}}};Vs._wrapFn=null,Vs._createFn=null;var Je=Vs;var Nt=class Nt{constructor(){this.x=0;this.y=0;this.next=null;this.length=0;this.modified=!1;this.pushmod=!1;this._inuse=!1;this.weak=!1;this.outer=null;this._immutable=!1;this._isimmutable=null;this._validate=null;this._invalidate=null}static get(e,t,n){n==null&&(n=!1);let s;return Nt.zpp_pool==null?s=new Nt:(s=Nt.zpp_pool,Nt.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=n,s.x=e,s.y=t,s}validate(){this._validate!=null&&this._validate()}invalidate(){this._invalidate!=null&&this._invalidate(this)}immutable(){if(this._immutable)throw new Error("Error: Vec2 is immutable");this._isimmutable!=null&&this._isimmutable()}wrapper(){if(this.outer==null)if(Nt._wrapFn)this.outer=Nt._wrapFn(this);else{this.outer=new Nt._nape.geom.Vec2;let e=this.outer.zpp_inner;e.outer!=null&&(e.outer.zpp_inner=null,e.outer=null),e._isimmutable=null,e._validate=null,e._invalidate=null,e.next=Nt.zpp_pool,Nt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer!=null&&(this.outer.zpp_inner=null,this.outer=null),this._isimmutable=null,this._validate=null,this._invalidate=null}alloc(){this.weak=!1}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){return e._inuse=!0,e.next=this.next,this.next=e,this.modified=!0,this.length++,e}inlined_add(e){return e._inuse=!0,e.next=this.next,this.next=e,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;)this.add(t),t=t.next}insert(e,t){return t._inuse=!0,e==null?(t.next=this.next,this.next=t):(t.next=e.next,e.next=t),this.pushmod=this.modified=!0,this.length++,t}inlined_insert(e,t){return t._inuse=!0,e==null?(t.next=this.next,this.next=t):(t.next=e.next,e.next=t),this.pushmod=this.modified=!0,this.length++,t}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e){let s;t==null?(s=this.next,this.next=s.next,this.next==null&&(this.pushmod=!0)):(s=t.next,t.next=s.next,s.next==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e)return this.erase(t),!0;t=n,n=n.next}return!1}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e){let s;t==null?(s=this.next,this.next=s.next,this.next==null&&(this.pushmod=!0)):(s=t.next,t.next=s.next,s.next==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next;for(;n!=null;){if(n===e){let s;return t==null?(s=this.next,this.next=s.next,this.next==null&&(this.pushmod=!0)):(s=t.next,t.next=s.next,s.next==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,!0}t=n,n=n.next}return!1}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=this.next;for(;t!=null;){if(t===e)return!0;t=t.next}return!1}inlined_has(e){let t=this.next;for(;t!=null;){if(t===e)return!0;t=t.next}return!1}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}copy(){let e=this.x,t=this.y,n;return Nt.zpp_pool==null?n=new Nt:(n=Nt.zpp_pool,Nt.zpp_pool=n.next,n.next=null),n.weak=!1,n._immutable=!1,n.x=e,n.y=t,n}toString(){return"{ x: "+this.x+" y: "+this.y+" }"}};Nt.zpp_pool=null,Nt._nape=null,Nt._zpp=null,Nt._wrapFn=null;var le=Nt;var Ti=class Ti extends Me{constructor(){super();this.outer_zn=null;this.jointMin=0;this.jointMax=0;this.slack=!1;this.equal=!1;this.nx=0;this.ny=0;this.cx1=0;this.cx2=0;this.b1=null;this.b2=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a1=null;this.wrap_a2=null;this.kMass=0;this.jAcc=0;this.jMax=1/0;this.gamma=0;this.bias=0;this.stepped=!1;this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0,this.jAcc=0,this.jMax=1/0,this.stepped=!1,this.cx1=this.cx2=0}is_slack(){let t;this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let n=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),s=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),i=n*n+s*s;return i<Me._nape.Config.epsilon?t=!0:(i=Math.sqrt(i),this.equal||i<this.jointMin||i>this.jointMax?t=!1:t=!0),t}bodyImpulse(t){let n=Me._nape;return this.stepped?t==this.b1?n.geom.Vec3.get(-this.jAcc*this.nx,-this.jAcc*this.ny,-this.cx1*this.jAcc):n.geom.Vec3.get(this.jAcc*this.nx,this.jAcc*this.ny,this.cx2*this.jAcc):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){this.wrap_a1=Ti._setupAnchorVec2(this.a1localx,this.a1localy,this.validate_a1.bind(this),this.invalidate_a1.bind(this))}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){this.wrap_a2=Ti._setupAnchorVec2(this.a2localx,this.a2localy,this.validate_a2.bind(this),this.invalidate_a2.bind(this))}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=Ti._createFn(null,null,i,l.zpp_inner_zn.wrap_a2,this.jointMin,this.jointMax);return this.copyto(r),Je._copyBody(t,n,this.b1,r,"b1"),Je._copyBody(t,n,this.b2,r,"b2"),r}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: DistanceJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: DistanceJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: DistanceJoint must have jointMin <= jointMax");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAcc=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.equal=this.jointMin==this.jointMax,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,this.nx=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),this.ny=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely);let s=this.nx*this.nx+this.ny*this.ny;if(s<Me._nape.Config.epsilon)this.nx=0,this.ny=0,s=0,this.slack=!0;else{s=Math.sqrt(s);let l=1/s;this.nx*=l,this.ny*=l,this.equal?(s-=this.jointMax,this.slack=!1):s<this.jointMin?(s=this.jointMin-s,this.nx=-this.nx,this.ny=-this.ny,this.slack=!1):s>this.jointMax?(s-=this.jointMax,this.slack=!1):(this.nx=0,this.ny=0,s=0,this.slack=!0)}let i=s;if(!this.slack){if(this.cx1=this.ny*this.a1relx-this.nx*this.a1rely,this.cx2=this.ny*this.a2relx-this.nx*this.a2rely,this.kMass=this.b1.smass+this.b2.smass+this.cx1*this.cx1*this.b1.sinertia+this.cx2*this.cx2*this.b2.sinertia,this.kMass!=0?this.kMass=1/this.kMass:this.jAcc=0,this.stiff)this.bias=0,this.gamma=0;else{if(this.breakUnderError&&i*i>this.maxError*this.maxError)return!0;let l=2*Math.PI*this.frequency;this.gamma=1/(t*l*(2*this.damping+l*t));let r=1/(1+this.gamma),a=t*l*l*this.gamma;this.gamma*=r,this.kMass*=r,this.bias=-i*a,this.bias<-this.maxError?this.bias=-this.maxError:this.bias>this.maxError&&(this.bias=this.maxError)}this.jAcc*=n,this.jMax=this.maxForce*t}return!1}warmStart(){if(!this.slack){let t=this.b1.imass*this.jAcc;this.b1.velx-=this.nx*t,this.b1.vely-=this.ny*t;let n=this.b2.imass*this.jAcc;this.b2.velx+=this.nx*n,this.b2.vely+=this.ny*n,this.b1.angvel-=this.cx1*this.b1.iinertia*this.jAcc,this.b2.angvel+=this.cx2*this.b2.iinertia*this.jAcc}}applyImpulseVel(){if(this.slack)return!1;let t=this.nx*(this.b2.velx+this.b2.kinvelx-this.b1.velx-this.b1.kinvelx)+this.ny*(this.b2.vely+this.b2.kinvely-this.b1.vely-this.b1.kinvely)+(this.b2.angvel+this.b2.kinangvel)*this.cx2-(this.b1.angvel+this.b1.kinangvel)*this.cx1,n=this.kMass*(this.bias-t)-this.jAcc*this.gamma,s=this.jAcc;if(this.jAcc+=n,!this.equal&&this.jAcc>0&&(this.jAcc=0),this.breakUnderForce&&this.jAcc<-this.jMax)return!0;this.stiff||this.jAcc<-this.jMax&&(this.jAcc=-this.jMax),n=this.jAcc-s;let i=this.b1.imass*n;this.b1.velx-=this.nx*i,this.b1.vely-=this.ny*i;let l=this.b2.imass*n;return this.b2.velx+=this.nx*l,this.b2.vely+=this.ny*l,this.b1.angvel-=this.cx1*this.b1.iinertia*n,this.b2.angvel+=this.cx2*this.b2.iinertia*n,!1}applyImpulsePos(){let t,n=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,s=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,i=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,l=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,r,a=this.b2.posx+i-(this.b1.posx+n),o=this.b2.posy+l-(this.b1.posy+s),p=a*a+o*o;if(p<Me._nape.Config.epsilon)a=0,o=0,p=0,r=!0;else{p=Math.sqrt(p);let h=1/p;a*=h,o*=h,this.equal?(p-=this.jointMax,r=!1):p<this.jointMin?(p=this.jointMin-p,a=-a,o=-o,r=!1):p>this.jointMax?(p-=this.jointMax,r=!1):(a=0,o=0,p=0,r=!0)}let c=p;if(!r){if(this.breakUnderError&&c*c>this.maxError*this.maxError)return!0;if(c*c<Me._nape.Config.constraintLinearSlop*Me._nape.Config.constraintLinearSlop)return!1;if(c*=.5,c*c>6){let y=this.b1.smass+this.b2.smass;if(y>Me._nape.Config.epsilon){let d=.75/y;if(t=-c*d,this.equal||t<0){let _=t*this.b1.imass;this.b1.posx-=a*_,this.b1.posy-=o*_;let f=t*this.b2.imass;this.b2.posx+=a*f,this.b2.posy+=o*f,a=this.b2.posx+i-(this.b1.posx+n),o=this.b2.posy+l-(this.b1.posy+s);let z=a*a+o*o;if(z<Me._nape.Config.epsilon)a=0,o=0,z=0;else{z=Math.sqrt(z);let P=1/z;a*=P,o*=P,this.equal?z-=this.jointMax:z<this.jointMin?(z=this.jointMin-z,a=-a,o=-o):z>this.jointMax?z-=this.jointMax:(a=0,o=0,z=0)}c=z,c*=.5}}}let h=o*n-a*s,u=o*i-a*l,x=this.b1.smass+this.b2.smass+h*h*this.b1.sinertia+u*u*this.b2.sinertia;if(x!=0&&(x=1/x),t=-c*x,this.equal||t<0){let y=this.b1.imass*t;this.b1.posx-=a*y,this.b1.posy-=o*y;let d=this.b2.imass*t;this.b2.posx+=a*d,this.b2.posy+=o*d,Je._rotateBody(this.b1,-h*this.b1.iinertia*t),Je._rotateBody(this.b2,u*this.b2.iinertia*t)}}return!1}draw(t){}static _setupAnchorVec2(t,n,s,i){let l=Me._nape,r=t,a=n;if(a==null&&(a=0),r==null&&(r=0),r!=r||a!=a)throw new Error("Error: Vec2 components cannot be NaN");let o;if(ye.poolVec2==null?o=new l.geom.Vec2:(o=ye.poolVec2,ye.poolVec2=o.zpp_pool,o.zpp_pool=null,o.zpp_disp=!1,o==ye.nextVec2&&(ye.nextVec2=null)),o.zpp_inner==null){let p;le.zpp_pool==null?p=new le:(p=le.zpp_pool,le.zpp_pool=p.next,p.next=null),p.weak=!1,p._immutable=!1,p.x=r,p.y=a,o.zpp_inner=p,o.zpp_inner.outer=o}else{if(o!=null&&o.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=o.zpp_inner;if(p._immutable)throw new Error("Error: Vec2 is immutable");if(p._isimmutable!=null&&p._isimmutable(),r!=r||a!=a)throw new Error("Error: Vec2 components cannot be NaN");let c;if(o!=null&&o.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let h=o.zpp_inner;if(h._validate!=null&&h._validate(),o.zpp_inner.x==r){if(o!=null&&o.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=o.zpp_inner;u._validate!=null&&u._validate(),c=o.zpp_inner.y==a}else c=!1;if(!c){o.zpp_inner.x=r,o.zpp_inner.y=a;let u=o.zpp_inner;u._invalidate!=null&&u._invalidate(u)}}return o.zpp_inner.weak=!1,o.zpp_inner._inuse=!0,o.zpp_inner._validate=s,o.zpp_inner._invalidate=i,o}};Ti._wrapFn=null,Ti._createFn=null;var _i=Ti;var Is=class Is extends Me{constructor(){super();this.outer_zn=null;this.scale=0;this.jointMin=0;this.jointMax=0;this.equal=!1;this.dot1=0;this.dot2=0;this.cx1=0;this.cx2=0;this.b1=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.b2=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.zip_n=null;this.nlocalx=0;this.nlocaly=0;this.nrelx=0;this.nrely=0;this.wrap_n=null;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.jAccx=0;this.jAccy=0;this.jMax=null;this.gamma=null;this.biasx=0;this.biasy=0;this.stepped=!1;this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0,this.nlocalx=0,this.nlocaly=0,this.nrelx=0,this.nrely=0,this.jAccx=0,this.jAccy=0,this.jMax=1/0,this.jointMin=-1/0,this.jointMax=1/0,this.stepped=!1}_setupVec2(t,n,s,i){let l=Me._nape,r=Me._zpp;if(n==null&&(n=0),t==null&&(t=0),t!==t||n!==n)throw new Error("Error: Vec2 components cannot be NaN");let a;if(r.util.ZPP_PubPool.poolVec2==null?a=new l.geom.Vec2:(a=r.util.ZPP_PubPool.poolVec2,r.util.ZPP_PubPool.poolVec2=a.zpp_pool,a.zpp_pool=null,a.zpp_disp=!1,a==r.util.ZPP_PubPool.nextVec2&&(r.util.ZPP_PubPool.nextVec2=null)),a.zpp_inner==null){let o;r.geom.ZPP_Vec2.zpp_pool==null?o=new r.geom.ZPP_Vec2:(o=r.geom.ZPP_Vec2.zpp_pool,r.geom.ZPP_Vec2.zpp_pool=o.next,o.next=null),o.weak=!1,o._immutable=!1,o.x=t,o.y=n,a.zpp_inner=o,a.zpp_inner.outer=a}else{if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=a.zpp_inner;if(o._immutable)throw new Error("Error: Vec2 is immutable");if(o._isimmutable!=null&&o._isimmutable(),t!==t||n!==n)throw new Error("Error: Vec2 components cannot be NaN");if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=a.zpp_inner;p._validate!=null&&p._validate();let c;if(a.zpp_inner.x==t){if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let h=a.zpp_inner;h._validate!=null&&h._validate(),c=a.zpp_inner.y==n}else c=!1;if(!c){a.zpp_inner.x=t,a.zpp_inner.y=n;let h=a.zpp_inner;h._invalidate!=null&&h._invalidate(h)}}return a.zpp_inner.weak=!1,a.zpp_inner._inuse=!0,a.zpp_inner._validate=s,a.zpp_inner._invalidate=i,a}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){this.wrap_a1=this._setupVec2(this.a1localx,this.a1localy,this.validate_a1.bind(this),this.invalidate_a1.bind(this))}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){this.wrap_a2=this._setupVec2(this.a2localx,this.a2localy,this.validate_a2.bind(this),this.invalidate_a2.bind(this))}validate_n(){this.wrap_n.zpp_inner.x=this.nlocalx,this.wrap_n.zpp_inner.y=this.nlocaly}invalidate_n(t){this.immutable_midstep("Constraint::n"),this.nlocalx=t.x,this.nlocaly=t.y,this.zip_n=!0,this.wake()}setup_n(){this.wrap_n=this._setupVec2(this.nlocalx,this.nlocaly,this.validate_n.bind(this),this.invalidate_n.bind(this))}validate_norm(){if(this.zip_n){this.zip_n=!1;let t=this.nlocalx*this.nlocalx+this.nlocaly*this.nlocaly,s=1/Math.sqrt(t);this.nlocalx*=s,this.nlocaly*=s}}bodyImpulse(t){let n=Me._nape;if(this.stepped){let s=this.scale*this.nrelx*this.jAccy-this.nrely*this.jAccx,i=this.nrelx*this.jAccx+this.scale*this.nrely*this.jAccy;return t==this.b1?n.geom.Vec3.get(-s,-i,this.scale*this.cx1*i-this.dot1*s):n.geom.Vec3.get(s,i,this.scale*this.cx1*i-this.dot1*s)}else return n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=l.zpp_inner_zn.wrap_a2,a=this.outer_zn;a.zpp_inner_zn.wrap_n==null&&a.zpp_inner_zn.setup_n();let o=Is._createFn(null,null,i,r,a.zpp_inner_zn.wrap_n,this.jointMin,this.jointMax);return this.copyto(o),Je._copyBody(t,n,this.b1,o,"b1"),Je._copyBody(t,n,this.b2,o,"b2"),o}validate(){let t=Me._nape;if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: DistanceJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: DistanceJoint must have jointMin <= jointMax");if(this.nlocalx*this.nlocalx+this.nlocaly*this.nlocaly<t.Config.epsilon)throw new Error("Error: DistanceJoint direction must be non-degenerate");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAccx=0,this.jAccy=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.equal=this.jointMin==this.jointMax,this.stepped=!0,this.validate_norm(),this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.nrelx=this.b1.axisy*this.nlocalx-this.b1.axisx*this.nlocaly,this.nrely=this.nlocalx*this.b1.axisx+this.nlocaly*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let s=this.b2.posx+this.a2relx-this.b1.posx-this.a1relx,i=this.b2.posy+this.a2rely-this.b1.posy-this.a1rely,l=i*this.nrelx-s*this.nrely,r=this.nrelx*s+this.nrely*i;this.equal?(r-=this.jointMin,this.scale=1):r>this.jointMax?(r-=this.jointMax,this.scale=1):r<this.jointMin?(r=this.jointMin-r,this.scale=-1):(r=0,this.scale=0);let a=s+this.a1relx,o=i+this.a1rely;this.dot1=this.nrelx*a+this.nrely*o,this.cx1=o*this.nrelx-a*this.nrely,this.dot2=this.nrelx*this.a2relx+this.nrely*this.a2rely,this.cx2=this.a2rely*this.nrelx-this.a2relx*this.nrely,this.kMassa=this.b1.smass+this.b2.smass+this.dot1*this.dot1*this.b1.sinertia+this.dot2*this.dot2*this.b2.sinertia,this.kMassb=-this.scale*(this.dot1*this.cx1*this.b1.sinertia+this.dot2*this.cx2*this.b2.sinertia),this.kMassc=this.scale*this.scale*(this.b1.smass+this.b2.smass+this.cx1*this.cx1*this.b1.sinertia+this.cx2*this.cx2*this.b2.sinertia);let p=this.kMassa*this.kMassc-this.kMassb*this.kMassb,c;if(p!==p)this.kMassa=this.kMassb=this.kMassc=0,c=3;else if(p==0){let u=0;this.kMassa!=0?this.kMassa=1/this.kMassa:(this.kMassa=0,u|=1),this.kMassc!=0?this.kMassc=1/this.kMassc:(this.kMassc=0,u|=2),this.kMassb=0,c=u}else{let u=1/p,x=this.kMassc*u;this.kMassc=this.kMassa*u,this.kMassa=x,this.kMassb*=-u,c=0}if((c&1)!=0&&(this.jAccx=0),(c&2)!=0&&(this.jAccy=0),this.stiff)this.gamma=0,this.biasx=0,this.biasy=0;else{if(this.breakUnderError&&l*l+r*r>this.maxError*this.maxError)return!0;let u=2*Math.PI*this.frequency;this.gamma=1/(t*u*(2*this.damping+u*t));let x=1/(1+this.gamma),y=t*u*u*this.gamma;this.gamma*=x;let d=x;this.kMassa*=d,this.kMassb*=d,this.kMassc*=d,this.biasx=l,this.biasy=r;let _=-y;this.biasx*=_,this.biasy*=_;let f=this.maxError,z=this.biasx*this.biasx+this.biasy*this.biasy;if(z>f*f){let P=f*(1/Math.sqrt(z));this.biasx*=P,this.biasy*=P}}let h=n;return this.jAccx*=h,this.jAccy*=h,this.jMax=this.maxForce*t,!1}warmStart(){let t=this.scale*this.nrelx*this.jAccy-this.nrely*this.jAccx,n=this.nrelx*this.jAccx+this.scale*this.nrely*this.jAccy,s=this.b1.imass;this.b1.velx-=t*s,this.b1.vely-=n*s;let i=this.b2.imass;this.b2.velx+=t*i,this.b2.vely+=n*i,this.b1.angvel+=(this.scale*this.cx1*this.jAccy-this.dot1*this.jAccx)*this.b1.iinertia,this.b2.angvel+=(this.dot2*this.jAccx-this.scale*this.cx2*this.jAccy)*this.b2.iinertia}applyImpulseVel(){let t=this.b2.velx-this.b1.velx,n=this.b2.vely-this.b1.vely;t+=this.b2.kinvelx-this.b1.kinvelx,n+=this.b2.kinvely-this.b1.kinvely;let s=n*this.nrelx-t*this.nrely+(this.b2.angvel+this.b2.kinangvel)*this.dot2-(this.b1.angvel+this.b1.kinangvel)*this.dot1,i=this.scale*(this.nrelx*t+this.nrely*n-(this.b2.angvel+this.b2.kinangvel)*this.cx2+(this.b1.angvel+this.b1.kinangvel)*this.cx1),l=this.biasx-s,r=this.biasy-i,a=this.kMassa*l+this.kMassb*r;r=this.kMassb*l+this.kMassc*r,l=a;let o=this.gamma;l-=this.jAccx*o,r-=this.jAccy*o;let p=this.jAccx,c=this.jAccy;if(this.jAccx+=l,this.jAccy+=r,this.jAccy>0&&(this.jAccy=0),this.breakUnderForce){if(this.jAccx*this.jAccx+this.jAccy*this.jAccy>this.jMax*this.jMax)return!0}else if(!this.stiff){let f=this.jMax,z=this.jAccx*this.jAccx+this.jAccy*this.jAccy;if(z>f*f){let P=f*(1/Math.sqrt(z));this.jAccx*=P,this.jAccy*=P}}let h=this.jAccx-p,u=this.jAccy-c,x=this.scale*this.nrelx*u-this.nrely*h,y=this.nrelx*h+this.scale*this.nrely*u,d=this.b1.imass;this.b1.velx-=x*d,this.b1.vely-=y*d;let _=this.b2.imass;return this.b2.velx+=x*_,this.b2.vely+=y*_,this.b1.angvel+=(this.scale*this.cx1*u-this.dot1*h)*this.b1.iinertia,this.b2.angvel+=(this.dot2*h-this.scale*this.cx2*u)*this.b2.iinertia,!1}applyImpulsePos(){let t=Me._nape,n=this.b1.axisy*this.nlocalx-this.b1.axisx*this.nlocaly,s=this.nlocalx*this.b1.axisx+this.nlocaly*this.b1.axisy,i=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,l=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,r=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,a=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,o=this.b2.posx+r-this.b1.posx-i,p=this.b2.posy+a-this.b1.posy-l,c,h=p*n-o*s,u=n*o+s*p;if(this.equal?(u-=this.jointMin,c=1):u>this.jointMax?(u-=this.jointMax,c=1):u<this.jointMin?(u=this.jointMin-u,c=-1):(u=0,c=0),this.breakUnderError&&h*h+u*u>this.maxError*this.maxError)return!0;if(h*h+u*u<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop)return!1;let x,y,d=.5;if(h*=d,u*=d,h*h+u*u>6){let Z=this.b1.smass+this.b2.smass;if(Z>t.Config.epsilon){let S=.8/Z,A=S*(s*h-c*n*u),F=S*(n*h*c-s*h),B=this.b1.imass;this.b1.posx-=A*B,this.b1.posy-=F*B;let G=this.b2.imass;this.b2.posx+=A*G,this.b2.posy+=F*G,o=this.b2.posx+r-this.b1.posx-i,p=this.b2.posy+a-this.b1.posy-l,h=p*n-o*s,u=n*o+s*p,this.equal?(u-=this.jointMin,c=1):u>this.jointMax?(u-=this.jointMax,c=1):u<this.jointMin?(u=this.jointMin-u,c=-1):(u=0,c=0);let J=.5;h*=J,u*=J}}let _=o+i,f=p+l,z=n*_+s*f,P=f*n-_*s,k=n*r+s*a,m=a*n-r*s,b=this.b1.smass+this.b2.smass+z*z*this.b1.sinertia+k*k*this.b2.sinertia,M=-c*(z*P*this.b1.sinertia+k*m*this.b2.sinertia),v=c*c*(this.b1.smass+this.b2.smass+P*P*this.b1.sinertia+m*m*this.b2.sinertia);x=-h,y=-u;let w=b*v-M*M;if(w!==w)y=0,x=y;else if(w==0)b!=0?x/=b:x=0,v!=0?y/=v:y=0;else{let Z=1/w,S=Z*(v*x-M*y);y=Z*(b*y-M*x),x=S}y>0&&(y=0);let O=c*n*y-s*x,E=n*x+c*s*y,C=this.b1.imass;this.b1.posx-=O*C,this.b1.posy-=E*C;let N=this.b2.imass;return this.b2.posx+=O*N,this.b2.posy+=E*N,Je._rotateBody(this.b1,(c*P*y-z*x)*this.b1.iinertia),Je._rotateBody(this.b2,(k*x-c*m*y)*this.b2.iinertia),!1}draw(t){}};Is._wrapFn=null,Is._createFn=null;var yi=Is;var js=class js extends Me{constructor(){super();this.outer_zn=null;this.ratio=0;this.rate=0;this.b1=null;this.b2=null;this.kMass=0;this.jAcc=0;this.jMax=0;this.stepped=!1;this.jAcc=0,this.stepped=!1,this.__velocity=!0}bodyImpulse(t){let n=me();return this.stepped?t==this.b1?n.geom.Vec3.get(0,0,-this.jAcc):n.geom.Vec3.get(0,0,this.ratio*this.jAcc):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}copy(t,n){let s=js._createFn(null,null,this.rate,this.ratio);if(this.copyto(s),t!=null&&this.b1!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b1.id){i=r.bc;break}}i!=null?s.zpp_inner.b1=i.zpp_inner:n.push(Jn.todo(this.b1.id,r=>{s.zpp_inner.b1=r.zpp_inner}))}if(t!=null&&this.b2!=null){let i=null,l=0;for(;l<t.length;){let r=t[l];if(++l,r.id==this.b2.id){i=r.bc;break}}i!=null?s.zpp_inner.b2=i.zpp_inner:n.push(Jn.todo(this.b2.id,r=>{s.zpp_inner.b2=r.zpp_inner}))}return s}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: MotorJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){if(this.b1.type==2){let t;if(this.b1.component==this.b1.component.parent)t=this.b1.component;else{let s=this.b1.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}if(this.b2.type==2){let t;if(this.b2.component==this.b2.component.parent)t=this.b2.component;else{let s=this.b2.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}t=s}let n;if(this.component==this.component.parent)n=this.component;else{let s=this.component,i=null;for(;s!=s.parent;){let l=s.parent;s.parent=i,i=s,s=l}for(;i!=null;){let l=i.parent;i.parent=s,i=l}n=s}t!=n&&(t.rank<n.rank?t.parent=n:t.rank>n.rank?n.parent=t:(n.parent=t,t.rank++))}}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAcc=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;return this.pre_dt=t,this.stepped=!0,this.kMass=this.b1.sinertia+this.ratio*this.ratio*this.b2.sinertia,this.kMass=1/this.kMass,this.jAcc*=n,this.jMax=this.maxForce*t,!1}warmStart(){this.b1.angvel-=this.b1.iinertia*this.jAcc,this.b2.angvel+=this.ratio*this.b2.iinertia*this.jAcc}applyImpulseVel(){let t=this.ratio*(this.b2.angvel+this.b2.kinangvel)-this.b1.angvel-this.b1.kinangvel-this.rate,n=-this.kMass*t,s=this.jAcc;if(this.jAcc+=n,this.breakUnderForce){if(this.jAcc>this.jMax||this.jAcc<-this.jMax)return!0}else this.jAcc<-this.jMax?this.jAcc=-this.jMax:this.jAcc>this.jMax&&(this.jAcc=this.jMax);return n=this.jAcc-s,this.b1.angvel-=this.b1.iinertia*n,this.b2.angvel+=this.ratio*this.b2.iinertia*n,!1}applyImpulsePos(){return!1}};js._wrapFn=null,js._createFn=null;var mi=js;var Bs=class Bs extends Me{constructor(){super();this.outer_zn=null;this.b1=null;this.b2=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.jAccx=0;this.jAccy=0;this.jMax=1/0;this.gamma=0;this.biasx=0;this.biasy=0;this.stepped=!1;this.stepped=!1,this.jAccx=0,this.jAccy=0,this.jMax=1/0,this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0}bodyImpulse(t){let n=Me._nape;return this.stepped?t==this.b1?n.geom.Vec3.get(-this.jAccx,-this.jAccy,-(this.jAccy*this.a1relx-this.jAccx*this.a1rely)):n.geom.Vec3.get(this.jAccx,this.jAccy,this.jAccy*this.a2relx-this.jAccx*this.a2rely):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){let t=Me._nape,n=Me._zpp,s=this.a1localx,i=this.a1localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a1=l,this.wrap_a1.zpp_inner._inuse=!0,this.wrap_a1.zpp_inner._validate=this.validate_a1.bind(this),this.wrap_a1.zpp_inner._invalidate=this.invalidate_a1.bind(this)}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){let t=Me._nape,n=Me._zpp,s=this.a2localx,i=this.a2localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a2=l,this.wrap_a2.zpp_inner._inuse=!0,this.wrap_a2.zpp_inner._validate=this.validate_a2.bind(this),this.wrap_a2.zpp_inner._invalidate=this.invalidate_a2.bind(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=Bs._createFn(null,null,i,l.zpp_inner_zn.wrap_a2);return this.copyto(r),Je._copyBody(t,n,this.b1,r,"b1"),Je._copyBody(t,n,this.b2,r,"b2"),r}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: PivotJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: PivotJoint cannot be simulated with body1 == body2 (body1=body2="+this.b1.outer.toString()+")");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned (body1="+this.b1.outer.toString()+", body2="+this.b2.outer.toString()+")");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic (body1="+this.b1.outer.toString()+", body2="+this.b2.outer.toString()+")")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAccx=0,this.jAccy=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let s=this.b1.smass+this.b2.smass;if(this.kMassa=s,this.kMassb=0,this.kMassc=s,this.b1.sinertia!=0){let a=this.a1relx*this.b1.sinertia,o=this.a1rely*this.b1.sinertia;this.kMassa+=o*this.a1rely,this.kMassb+=-o*this.a1relx,this.kMassc+=a*this.a1relx}if(this.b2.sinertia!=0){let a=this.a2relx*this.b2.sinertia,o=this.a2rely*this.b2.sinertia;this.kMassa+=o*this.a2rely,this.kMassb+=-o*this.a2relx,this.kMassc+=a*this.a2relx}let i=this.kMassa*this.kMassc-this.kMassb*this.kMassb,l;if(i!=i)this.kMassa=this.kMassb=this.kMassc=0,l=3;else if(i==0){let a=0;this.kMassa!=0?this.kMassa=1/this.kMassa:(this.kMassa=0,a|=1),this.kMassc!=0?this.kMassc=1/this.kMassc:(this.kMassc=0,a|=2),this.kMassb=0,l=a}else{let a=1/i,o=this.kMassc*a;this.kMassc=this.kMassa*a,this.kMassa=o,this.kMassb*=-a,l=0}if((l&1)!=0&&(this.jAccx=0),(l&2)!=0&&(this.jAccy=0),this.stiff)this.biasx=0,this.biasy=0,this.gamma=0;else{let a=2*Math.PI*this.frequency;this.gamma=1/(t*a*(2*this.damping+a*t));let o=1/(1+this.gamma),p=t*a*a*this.gamma;this.gamma*=o;let c=o;if(this.kMassa*=c,this.kMassb*=c,this.kMassc*=c,this.biasx=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),this.biasy=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),this.breakUnderError&&this.biasx*this.biasx+this.biasy*this.biasy>this.maxError*this.maxError)return!0;let h=-p;this.biasx*=h,this.biasy*=h;let u=this.maxError,x=this.biasx*this.biasx+this.biasy*this.biasy;if(x>u*u){let y=u*(1/Math.sqrt(x));this.biasx*=y,this.biasy*=y}}let r=n;return this.jAccx*=r,this.jAccy*=r,this.jMax=this.maxForce*t,!1}warmStart(){let t=this.b1.imass;this.b1.velx-=this.jAccx*t,this.b1.vely-=this.jAccy*t;let n=this.b2.imass;this.b2.velx+=this.jAccx*n,this.b2.vely+=this.jAccy*n,this.b1.angvel-=(this.jAccy*this.a1relx-this.jAccx*this.a1rely)*this.b1.iinertia,this.b2.angvel+=(this.jAccy*this.a2relx-this.jAccx*this.a2rely)*this.b2.iinertia}applyImpulseVel(){let t=this.b2.velx+this.b2.kinvelx-this.a2rely*(this.b2.angvel+this.b2.kinangvel)-(this.b1.velx+this.b1.kinvelx-this.a1rely*(this.b1.angvel+this.b1.kinangvel)),n=this.b2.vely+this.b2.kinvely+this.a2relx*(this.b2.angvel+this.b2.kinangvel)-(this.b1.vely+this.b1.kinvely+this.a1relx*(this.b1.angvel+this.b1.kinangvel)),s=this.biasx-t,i=this.biasy-n,l=this.kMassa*s+this.kMassb*i;i=this.kMassb*s+this.kMassc*i,s=l;let r=this.gamma;s-=this.jAccx*r,i-=this.jAccy*r;let a=this.jAccx,o=this.jAccy,p=1;if(this.jAccx+=s*p,this.jAccy+=i*p,this.breakUnderForce){if(this.jAccx*this.jAccx+this.jAccy*this.jAccy>this.jMax*this.jMax)return!0}else if(!this.stiff){let u=this.jMax,x=this.jAccx*this.jAccx+this.jAccy*this.jAccy;if(x>u*u){let y=u*(1/Math.sqrt(x));this.jAccx*=y,this.jAccy*=y}}s=this.jAccx-a,i=this.jAccy-o;let c=this.b1.imass;this.b1.velx-=s*c,this.b1.vely-=i*c;let h=this.b2.imass;return this.b2.velx+=s*h,this.b2.vely+=i*h,this.b1.angvel-=(i*this.a1relx-s*this.a1rely)*this.b1.iinertia,this.b2.angvel+=(i*this.a2relx-s*this.a2rely)*this.b2.iinertia,!1}applyImpulsePos(){let t=Me._nape,n=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,s=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,i=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,l=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s);if(this.breakUnderError&&r*r+a*a>this.maxError*this.maxError)return!0;if(r*r+a*a<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop)return!1;let o=.5;r*=o,a*=o;let p,c;if(r*r+a*a>6){let b=this.b1.smass+this.b2.smass;if(b>t.Config.epsilon){let M=.75/b;p=-r*M,c=-a*M;let v=20,w=p*p+c*c;if(w>v*v){let N=v*(1/Math.sqrt(w));p*=N,c*=N}let O=this.b1.imass;this.b1.posx-=p*O,this.b1.posy-=c*O;let E=this.b2.imass;this.b2.posx+=p*E,this.b2.posy+=c*E,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s);let C=.5;r*=C,a*=C}}let h=this.b1.smass+this.b2.smass,u=h,x=0,y=h;if(this.b1.sinertia!=0){let b=n*this.b1.sinertia,M=s*this.b1.sinertia;u+=M*s,x+=-M*n,y+=b*n}if(this.b2.sinertia!=0){let b=i*this.b2.sinertia,M=l*this.b2.sinertia;u+=M*l,x+=-M*i,y+=b*i}p=-r,c=-a;let d=6,_=p*p+c*c;if(_>d*d){let b=d*(1/Math.sqrt(_));p*=b,c*=b}let f=u*y-x*x;if(f!=f)c=0,p=0;else if(f==0)u!=0?p/=u:p=0,y!=0?c/=y:c=0;else{let b=1/f,M=b*(y*p-x*c);c=b*(u*c-x*p),p=M}let z=this.b1.imass;this.b1.posx-=p*z,this.b1.posy-=c*z;let P=this.b2.imass;this.b2.posx+=p*P,this.b2.posy+=c*P;let k=-(c*n-p*s)*this.b1.iinertia;Je._rotateBody(this.b1,k);let m=(c*i-p*l)*this.b2.iinertia;return Je._rotateBody(this.b2,m),!1}draw(t){}};Bs._wrapFn=null,Bs._createFn=null;var fi=Bs;var Ts=class Ts extends Me{constructor(){super();this.outer_zn=null;this.ratio=1;this.jointMin=0;this.jointMax=0;this.slack=!1;this.equal=!1;this.n12x=0;this.n12y=0;this.n34x=0;this.n34y=0;this.cx1=0;this.cx2=0;this.cx3=0;this.cx4=0;this.b1=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.b2=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.b3=null;this.a3localx=0;this.a3localy=0;this.a3relx=0;this.a3rely=0;this.wrap_a3=null;this.b4=null;this.a4localx=0;this.a4localy=0;this.a4relx=0;this.a4rely=0;this.wrap_a4=null;this.kMass=0;this.jAcc=0;this.jMax=1/0;this.gamma=0;this.bias=0;this.stepped=!1;this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0,this.a3localx=0,this.a3localy=0,this.a3relx=0,this.a3rely=0,this.a4localx=0,this.a4localy=0,this.a4relx=0,this.a4rely=0,this.n12x=1,this.n12y=0,this.n34x=1,this.n34y=0,this.jAcc=0,this.jMax=1/0,this.stepped=!1,this.cx1=this.cx2=this.cx3=this.cx4=0}is_slack(){let t;this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,this.a3relx=this.b3.axisy*this.a3localx-this.b3.axisx*this.a3localy,this.a3rely=this.a3localx*this.b3.axisx+this.a3localy*this.b3.axisy,this.a4relx=this.b4.axisy*this.a4localx-this.b4.axisx*this.a4localy,this.a4rely=this.a4localx*this.b4.axisx+this.a4localy*this.b4.axisy;let n=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),s=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),i=this.b4.posx+this.a4relx-(this.b3.posx+this.a3relx),l=this.b4.posy+this.a4rely-(this.b3.posy+this.a3rely),r=Math.sqrt(n*n+s*s),a=Math.sqrt(i*i+l*l),o=r+this.ratio*a;return this.equal||o<this.jointMin||o>this.jointMax?t=!1:t=!0,t}bodyImpulse(t){let n=Me._nape;if(this.stepped){let s=n.geom.Vec3.get();return t==this.b1&&(s.zpp_inner.x=s.zpp_inner.x-this.jAcc*this.n12x,s.zpp_inner.y=s.zpp_inner.y-this.jAcc*this.n12y,s.zpp_inner.z=s.zpp_inner.z-this.cx1*this.jAcc),t==this.b2&&(s.zpp_inner.x=s.zpp_inner.x+this.jAcc*this.n12x,s.zpp_inner.y=s.zpp_inner.y+this.jAcc*this.n12y,s.zpp_inner.z=s.zpp_inner.z+this.cx2*this.jAcc),t==this.b3&&(s.zpp_inner.x=s.zpp_inner.x-this.jAcc*this.n34x,s.zpp_inner.y=s.zpp_inner.y-this.jAcc*this.n34y,s.zpp_inner.z=s.zpp_inner.z-this.cx3*this.jAcc),t==this.b4&&(s.zpp_inner.x=s.zpp_inner.x+this.jAcc*this.n34x,s.zpp_inner.y=s.zpp_inner.y+this.jAcc*this.n34y,s.zpp_inner.z=s.zpp_inner.z+this.cx4*this.jAcc),s}else return n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this),this.b3!=this.b1&&this.b3!=this.b2&&this.b3!=null&&this.b3.constraints.add(this),this.b4!=this.b1&&this.b4!=this.b2&&this.b4!=this.b3&&this.b4!=null&&this.b4.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this),this.b3!=this.b1&&this.b3!=this.b2&&this.b3!=null&&this.b3.constraints.remove(this),this.b4!=this.b1&&this.b4!=this.b2&&this.b4!=this.b3&&this.b4!=null&&this.b4.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){let t=Me._nape,n=Me._zpp,s=this.a1localx,i=this.a1localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a1=l,this.wrap_a1.zpp_inner._inuse=!0,this.wrap_a1.zpp_inner._validate=this.validate_a1.bind(this),this.wrap_a1.zpp_inner._invalidate=this.invalidate_a1.bind(this)}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){let t=Me._nape,n=Me._zpp,s=this.a2localx,i=this.a2localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a2=l,this.wrap_a2.zpp_inner._inuse=!0,this.wrap_a2.zpp_inner._validate=this.validate_a2.bind(this),this.wrap_a2.zpp_inner._invalidate=this.invalidate_a2.bind(this)}validate_a3(){this.wrap_a3.zpp_inner.x=this.a3localx,this.wrap_a3.zpp_inner.y=this.a3localy}invalidate_a3(t){this.immutable_midstep("Constraint::a3"),this.a3localx=t.x,this.a3localy=t.y,this.wake()}setup_a3(){let t=Me._nape,n=Me._zpp,s=this.a3localx,i=this.a3localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a3=l,this.wrap_a3.zpp_inner._inuse=!0,this.wrap_a3.zpp_inner._validate=this.validate_a3.bind(this),this.wrap_a3.zpp_inner._invalidate=this.invalidate_a3.bind(this)}validate_a4(){this.wrap_a4.zpp_inner.x=this.a4localx,this.wrap_a4.zpp_inner.y=this.a4localy}invalidate_a4(t){this.immutable_midstep("Constraint::a4"),this.a4localx=t.x,this.a4localy=t.y,this.wake()}setup_a4(){let t=Me._nape,n=Me._zpp,s=this.a4localx,i=this.a4localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a4=l,this.wrap_a4.zpp_inner._inuse=!0,this.wrap_a4.zpp_inner._validate=this.validate_a4.bind(this),this.wrap_a4.zpp_inner._invalidate=this.invalidate_a4.bind(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=l.zpp_inner_zn.wrap_a2,a=this.outer_zn;a.zpp_inner_zn.wrap_a3==null&&a.zpp_inner_zn.setup_a3();let o=a.zpp_inner_zn.wrap_a3,p=this.outer_zn;p.zpp_inner_zn.wrap_a4==null&&p.zpp_inner_zn.setup_a4();let c=Ts._createFn(null,null,null,null,i,r,o,p.zpp_inner_zn.wrap_a4,this.jointMin,this.jointMax,this.ratio);return this.copyto(c),Je._copyBody(t,n,this.b1,c,"b1"),Je._copyBody(t,n,this.b2,c,"b2"),Je._copyBody(t,n,this.b3,c,"b3"),Je._copyBody(t,n,this.b4,c,"b4"),c}validate(){if(this.b1==null||this.b2==null||this.b3==null||this.b4==null)throw new Error("Error: PulleyJoint cannot be simulated with null bodies");if(this.b1==this.b2||this.b3==this.b4)throw new Error("Error: PulleyJoint cannot have body1==body2 or body3==body4");if(this.b1.space!=this.space||this.b2.space!=this.space||this.b3.space!=this.space||this.b4.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.jointMin>this.jointMax)throw new Error("Error: PulleyJoint must have jointMin <= jointMax");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: PulleyJoint cannot have both bodies in a linked pair non-dynamic");if(this.b3.type!=2&&this.b4.type!=2)throw new Error("Error: PulleyJoint cannot have both bodies in a linked pair non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake(),this.b3!=null&&this.b3.type==2&&this.b3.wake(),this.b4!=null&&this.b4.type==2&&this.b4.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component),this.b3.type==2&&Me._unionComponents(this.b3.component,this.component),this.b4.type==2&&Me._unionComponents(this.b4.component,this.component)}pair_exists(t,n){return this.b1.id==t&&(this.b2.id==n||this.b3.id==n||this.b4.id==n)||this.b2.id==t&&(this.b3.id==n||this.b4.id==n||this.b1.id==n)||this.b3.id==t&&(this.b4.id==n||this.b1.id==n||this.b2.id==n)?!0:this.b4.id==t?this.b1.id==n||this.b2.id==n?!0:this.b3.id==n:!1}clearcache(){this.jAcc=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.equal=this.jointMin==this.jointMax,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,this.a3relx=this.b3.axisy*this.a3localx-this.b3.axisx*this.a3localy,this.a3rely=this.a3localx*this.b3.axisx+this.a3localy*this.b3.axisy,this.a4relx=this.b4.axisy*this.a4localx-this.b4.axisx*this.a4localy,this.a4rely=this.a4localx*this.b4.axisx+this.a4localy*this.b4.axisy;let s=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),i=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),l=this.b4.posx+this.a4relx-(this.b3.posx+this.a3relx),r=this.b4.posy+this.a4rely-(this.b3.posy+this.a3rely),a=Math.sqrt(s*s+i*i),o=Math.sqrt(l*l+r*r);if(a!=0){let h=1/a;this.n12x=s*h,this.n12y=i*h}if(o!=0){let h=1/o;this.n34x=l*h,this.n34y=r*h;let u=this.ratio;this.n34x*=u,this.n34y*=u}else{let h=this.ratio/Math.sqrt(this.n34x*this.n34x+this.n34y*this.n34y);this.n34x*=h,this.n34y*=h}let p=a+this.ratio*o;this.equal?(p-=this.jointMax,this.slack=!1):p<this.jointMin?(p=this.jointMin-p,this.n12x=-this.n12x,this.n12y=-this.n12y,this.n34x=-this.n34x,this.n34y=-this.n34y,this.slack=!1):p>this.jointMax?(p-=this.jointMax,this.slack=!1):(this.n12x=0,this.n12y=0,this.n34x=0,this.n34y=0,p=0,this.slack=!0);let c=p;if(!this.slack){this.cx1=this.n12y*this.a1relx-this.n12x*this.a1rely,this.cx2=this.n12y*this.a2relx-this.n12x*this.a2rely,this.cx3=this.n34y*this.a3relx-this.n34x*this.a3rely,this.cx4=this.n34y*this.a4relx-this.n34x*this.a4rely;let h=this.ratio*this.ratio,u=this.b1.smass+this.b2.smass+h*(this.b3.smass+this.b4.smass)+this.b1.sinertia*this.cx1*this.cx1+this.b2.sinertia*this.cx2*this.cx2+this.b3.sinertia*this.cx3*this.cx3+this.b4.sinertia*this.cx4*this.cx4;if(this.b1==this.b4&&(u-=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b1.smass+this.cx1*this.cx4*this.b1.sinertia)),this.b1==this.b3&&(u+=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b1.smass+this.cx1*this.cx3*this.b1.sinertia)),this.b2==this.b3&&(u-=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b2.smass+this.cx2*this.cx3*this.b2.sinertia)),this.b2==this.b4&&(u+=2*((this.n12x*this.n34x+this.n12y*this.n34y)*this.b2.smass+this.cx2*this.cx4*this.b2.sinertia)),this.kMass=u,this.kMass!=0?this.kMass=1/this.kMass:this.jAcc=0,this.stiff)this.bias=0,this.gamma=0;else{if(this.breakUnderError&&c*c>this.maxError*this.maxError)return!0;let x=2*Math.PI*this.frequency;this.gamma=1/(t*x*(2*this.damping+x*t));let y=1/(1+this.gamma),d=t*x*x*this.gamma;this.gamma*=y,this.kMass*=y,this.bias=-c*d,this.bias<-this.maxError?this.bias=-this.maxError:this.bias>this.maxError&&(this.bias=this.maxError)}this.jAcc*=n,this.jMax=this.maxForce*t}return!1}warmStart(){if(!this.slack){let t=this.b1.imass*this.jAcc;this.b1.velx-=this.n12x*t,this.b1.vely-=this.n12y*t;let n=this.b2.imass*this.jAcc;this.b2.velx+=this.n12x*n,this.b2.vely+=this.n12y*n;let s=this.b3.imass*this.jAcc;this.b3.velx-=this.n34x*s,this.b3.vely-=this.n34y*s;let i=this.b4.imass*this.jAcc;this.b4.velx+=this.n34x*i,this.b4.vely+=this.n34y*i,this.b1.angvel-=this.cx1*this.b1.iinertia*this.jAcc,this.b2.angvel+=this.cx2*this.b2.iinertia*this.jAcc,this.b3.angvel-=this.cx3*this.b3.iinertia*this.jAcc,this.b4.angvel+=this.cx4*this.b4.iinertia*this.jAcc}}applyImpulseVel(){if(this.slack)return!1;let t=this.n12x*(this.b2.velx+this.b2.kinvelx-this.b1.velx-this.b1.kinvelx)+this.n12y*(this.b2.vely+this.b2.kinvely-this.b1.vely-this.b1.kinvely)+this.n34x*(this.b4.velx+this.b4.kinvelx-this.b3.velx-this.b3.kinvelx)+this.n34y*(this.b4.vely+this.b4.kinvely-this.b3.vely-this.b3.kinvely)+(this.b2.angvel+this.b2.kinangvel)*this.cx2-(this.b1.angvel+this.b1.kinangvel)*this.cx1+(this.b4.angvel+this.b4.kinangvel)*this.cx4-(this.b3.angvel+this.b3.kinangvel)*this.cx3,n=this.kMass*(this.bias-t)-this.jAcc*this.gamma,s=this.jAcc;if(this.jAcc+=n,!this.equal&&this.jAcc>0&&(this.jAcc=0),this.breakUnderForce&&this.jAcc<-this.jMax)return!0;this.stiff||this.jAcc<-this.jMax&&(this.jAcc=-this.jMax),n=this.jAcc-s;let i=this.b1.imass*n;this.b1.velx-=this.n12x*i,this.b1.vely-=this.n12y*i;let l=this.b2.imass*n;this.b2.velx+=this.n12x*l,this.b2.vely+=this.n12y*l;let r=this.b3.imass*n;this.b3.velx-=this.n34x*r,this.b3.vely-=this.n34y*r;let a=this.b4.imass*n;return this.b4.velx+=this.n34x*a,this.b4.vely+=this.n34y*a,this.b1.angvel-=this.cx1*this.b1.iinertia*n,this.b2.angvel+=this.cx2*this.b2.iinertia*n,this.b3.angvel-=this.cx3*this.b3.iinertia*n,this.b4.angvel+=this.cx4*this.b4.iinertia*n,!1}applyImpulsePos(){let t=Me._nape,n,s=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,i=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,l=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,r=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,a=this.b3.axisy*this.a3localx-this.b3.axisx*this.a3localy,o=this.a3localx*this.b3.axisx+this.a3localy*this.b3.axisy,p=this.b4.axisy*this.a4localx-this.b4.axisx*this.a4localy,c=this.a4localx*this.b4.axisx+this.a4localy*this.b4.axisy,h,u=this.n12x,x=this.n12y,y=this.n34x,d=this.n34y,_=this.b2.posx+l-(this.b1.posx+s),f=this.b2.posy+r-(this.b1.posy+i),z=this.b4.posx+p-(this.b3.posx+a),P=this.b4.posy+c-(this.b3.posy+o),k=Math.sqrt(_*_+f*f),m=Math.sqrt(z*z+P*P);if(k!=0){let v=1/k;u=_*v,x=f*v}if(m!=0){let v=1/m;y=z*v,d=P*v;let w=this.ratio;y*=w,d*=w}else{let v=this.ratio/Math.sqrt(y*y+d*d);y*=v,d*=v}let b=k+this.ratio*m;this.equal?(b-=this.jointMax,h=!1):b<this.jointMin?(b=this.jointMin-b,u=-u,x=-x,y=-y,d=-d,h=!1):b>this.jointMax?(b-=this.jointMax,h=!1):(u=0,x=0,y=0,d=0,b=0,h=!0);let M=b;if(!h){if(this.breakUnderError&&M*M>this.maxError*this.maxError)return!0;if(M*M<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop)return!1;if(M*=.5,M*M>6){let S=this.b1.smass+this.b2.smass;if(S>t.Config.epsilon){let A=.75/S;if(n=-M*A,this.equal||n<0){let F=n*this.b1.imass;this.b1.posx-=u*F,this.b1.posy-=x*F;let B=n*this.b2.imass;this.b2.posx+=u*B,this.b2.posy+=x*B;let G=n*this.b3.imass;this.b3.posx-=y*G,this.b3.posy-=d*G;let J=n*this.b4.imass;this.b4.posx+=y*J,this.b4.posy+=d*J;let R=this.b2.posx+l-(this.b1.posx+s),T=this.b2.posy+r-(this.b1.posy+i),V=this.b4.posx+p-(this.b3.posx+a),W=this.b4.posy+c-(this.b3.posy+o),$=Math.sqrt(R*R+T*T),Y=Math.sqrt(V*V+W*W);if($!=0){let ee=1/$;u=R*ee,x=T*ee}if(Y!=0){let ee=1/Y;y=V*ee,d=W*ee;let q=this.ratio;y*=q,d*=q}else{let ee=this.ratio/Math.sqrt(y*y+d*d);y*=ee,d*=ee}let X=$+this.ratio*Y;this.equal?X-=this.jointMax:X<this.jointMin?(X=this.jointMin-X,u=-u,x=-x,y=-y,d=-d):X>this.jointMax?X-=this.jointMax:(u=0,x=0,y=0,d=0,X=0),M=X,M*=.5}}}let v=x*s-u*i,w=x*l-u*r,O=d*a-y*o,E=d*p-y*c,C=this.ratio*this.ratio,N=this.b1.smass+this.b2.smass+C*(this.b3.smass+this.b4.smass)+this.b1.sinertia*v*v+this.b2.sinertia*w*w+this.b3.sinertia*O*O+this.b4.sinertia*E*E;this.b1==this.b4&&(N-=2*((u*y+x*d)*this.b1.smass+v*E*this.b1.sinertia)),this.b1==this.b3&&(N+=2*((u*y+x*d)*this.b1.smass+v*O*this.b1.sinertia)),this.b2==this.b3&&(N-=2*((u*y+x*d)*this.b2.smass+w*O*this.b2.sinertia)),this.b2==this.b4&&(N+=2*((u*y+x*d)*this.b2.smass+w*E*this.b2.sinertia));let Z=N;if(Z!=0&&(Z=1/Z),n=-M*Z,this.equal||n<0){let S=this.b1.imass*n;this.b1.posx-=u*S,this.b1.posy-=x*S;let A=this.b2.imass*n;this.b2.posx+=u*A,this.b2.posy+=x*A;let F=this.b3.imass*n;this.b3.posx-=y*F,this.b3.posy-=d*F;let B=this.b4.imass*n;this.b4.posx+=y*B,this.b4.posy+=d*B,Je._rotateBody(this.b1,-v*this.b1.iinertia*n),Je._rotateBody(this.b2,w*this.b2.iinertia*n),Je._rotateBody(this.b3,-O*this.b3.iinertia*n),Je._rotateBody(this.b4,E*this.b4.iinertia*n)}}return!1}draw(t){}};Ts._wrapFn=null,Ts._createFn=null;var bi=Ts;var ws=class{constructor(e,t){this.cnt=0;this.body=null;this.cnt=e,this.body=t}};var hl=class extends Me{constructor(t,n){super();this.outer_zn=null;this.bodies=null;this.dim=0;this.jAcc=null;this.bias=null;this.stepped=!1;this.L=null;this.y=null;this.soft=0;this.gamma=0;this.velonly=!1;this.jMax=0;this.Keff=null;this.vec3=null;this.J=null;this.jOld=null;this.bodies=[],this.dim=t,this.velonly=n,this.jAcc=[],this.bias=[],this.L=[],this.J=[],this.jOld=[],this.y=[],this.Keff=[],this.vec3=Me._nape.geom.Vec3.get(0,0,0);for(let s=0;s<t;s++){let i=this.bias[s]=this.J[s]=this.jOld[s]=this.y[s]=0;this.jAcc[s]=i;for(let l=0;l<t;l++)this.L[s*t+l]=0}this.stepped=!1}bindVec2_invalidate(t){this.outer_zn.__invalidate()}addBody(t){let n=null;for(let s of this.bodies)if(s.body===t){n=s;break}n===null?(this.bodies.push(new ws(1,t)),this.active&&this.space!=null&&t?.constraints.add(this)):n.cnt++}remBody(t){let n=null,s=this.bodies.length|0,i=0;for(;i<s;){let l=this.bodies[i];if(l.body===t){l.cnt--,l.cnt===0&&(s>0&&(this.bodies[i]=this.bodies[s-1]),this.bodies.pop(),this.active&&this.space!=null&&t?.constraints.remove(this)),n=l;break}++i}return n!=null}bodyImpulse(t){for(let s=0;s<this.dim;s++)this.J[s]=this.jAcc[s];let n=Me._nape.geom.Vec3.get(0,0,0);return this.stepped&&this.outer_zn.__impulse(this.J,t.outer,n),n}activeBodies(){for(let t of this.bodies)t.body!=null&&t.body.constraints.add(this)}inactiveBodies(){for(let t of this.bodies)t.body!=null&&t.body.constraints.remove(this)}copy(t,n){let s=this.outer_zn.__copy();throw this.copyto(s),new Error("not done yet")}validate(){for(let t of this.bodies)if(t.body.space!==this.space)throw new Error("Error: Constraints must have each body within the same sapce to which the constraint has been assigned");this.outer_zn.__validate()}wake_connected(){for(let t of this.bodies)t.body.type===2&&t.body.wake()}forest(){for(let t of this.bodies)if(t.body.type===2){let n;if(t.body.component===t.body.component.parent)n=t.body.component;else{let i=t.body.component,l=null;for(;i!==i.parent;){let r=i.parent;i.parent=l,l=i,i=r}for(;l!=null;){let r=l.parent;l.parent=i,l=r}n=i}let s;if(this.component===this.component.parent)s=this.component;else{let i=this.component,l=null;for(;i!==i.parent;){let r=i.parent;i.parent=l,l=i,i=r}for(;l!=null;){let r=l.parent;l.parent=i,l=r}s=i}n!==s&&(n.rank<s.rank?n.parent=s:n.rank>s.rank?s.parent=n:(s.parent=n,n.rank++))}}pair_exists(t,n){let s=!1,i=this.bodies.length|0;for(let l=0;l<i;l++){let r=this.bodies[l].body;for(let a=l+1;a<i;a++){let o=this.bodies[a].body;if(r.id===t&&o.id===n||r.id===n&&o.id===t){s=!0;break}}if(s)break}return s}broken(){this.outer_zn.__broken()}clearcache(){for(let t=0;t<this.dim;t++)this.jAcc[t]=0;this.pre_dt=-1}lsq(t){let n=0;for(let s=0;s<this.dim;s++)n+=t[s]*t[s];return n}_clamp(t,n){let s=this.lsq(t);if(s>n*n){let i=n/Math.sqrt(s);for(let l=0;l<this.dim;l++)t[l]*=i}}solve(t){let n=0;for(let s=0;s<this.dim;s++){let i=0;for(let r=0;r<s-1;r++)i+=this.L[s*this.dim+r]*this.L[s*this.dim+r];let l=Math.sqrt(t[n++]-i);if(this.L[s*this.dim+s]=l,l!==0){l=1/l;for(let r=s+1;r<this.dim;r++){let a=0;for(let o=0;o<s-1;o++)a+=this.L[r*this.dim+o]*this.L[s*this.dim+o];this.L[r*this.dim+s]=l*(t[n++]-a)}}else{for(let r=s+1;r<this.dim;r++)this.L[r*this.dim+s]=0;n+=this.dim-s-1}}return this.L}transform(t,n){for(let s=0;s<this.dim;s++){let i=n[s],l=t[s*this.dim+s];if(l!==0){for(let r=0;r<s;r++)i-=t[s*this.dim+r]*this.y[r];this.y[s]=i/l}else this.y[s]=0}for(let s=0;s<this.dim;s++){let i=this.dim-1-s,l=t[i*this.dim+i];if(l!==0){let r=this.y[i];for(let a=i+1;a<this.dim;a++)r-=t[a*this.dim+i]*n[a];n[i]=r/l}else n[i]=0}}preStep(t){this.pre_dt===-1&&(this.pre_dt=t);let n=t/this.pre_dt;if(this.pre_dt=t,this.stepped=!0,this.outer_zn.__prepare(),this.outer_zn.__eff_mass(this.Keff),this.L=this.solve(this.Keff),!this.stiff&&!this.velonly){let s=2*Math.PI*this.frequency;this.gamma=1/(t*s*(2*this.damping+s*t));let i=1/(1+this.gamma),l=t*s*s*this.gamma;if(this.gamma*=i,this.soft=i,this.outer_zn.__position(this.bias),this.breakUnderError&&this.lsq(this.bias)>this.maxError*this.maxError)return!0;for(let r=0;r<this.dim;r++)this.bias[r]*=-l;this._clamp(this.bias,this.maxError)}else{for(let s=0;s<this.dim;s++)this.bias[s]=0;this.gamma=0,this.soft=1}for(let s=0;s<this.dim;s++)this.jAcc[s]*=n;return this.jMax=this.maxForce*t,!1}warmStart(){for(let t of this.bodies){let n=t.body;this.outer_zn.__impulse(this.jAcc,n.outer,this.vec3);let s=n.imass,i=n,l=i.velx,r=this.vec3;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let a=r.zpp_inner;a._validate!=null&&a._validate(),i.velx=l+r.zpp_inner.x*s;let o=n,p=o.vely,c=this.vec3;if(c!=null&&c.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let h=c.zpp_inner;h._validate!=null&&h._validate(),o.vely=p+c.zpp_inner.y*s;let u=n,x=u.angvel,y=this.vec3;if(y!=null&&y.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let d=y.zpp_inner;d._validate!=null&&d._validate(),u.angvel=x+y.zpp_inner.z*n.iinertia}}applyImpulseVel(){this.outer_zn.__velocity(this.J);for(let t=0;t<this.dim;t++)this.J[t]=this.bias[t]-this.J[t];this.transform(this.L,this.J);for(let t=0;t<this.dim;t++)this.jOld[t]=this.jAcc[t],this.jAcc[t]+=this.J[t]=this.J[t]*this.soft-this.jAcc[t]*this.gamma;if(this.outer_zn.__clamp(this.jAcc),(this.breakUnderForce||!this.stiff)&&this.lsq(this.jAcc)>this.jMax*this.jMax){if(this.breakUnderForce)return!0;this.stiff||this._clamp(this.jAcc,this.jMax)}for(let t=0;t<this.dim;t++)this.J[t]=this.jAcc[t]-this.jOld[t];for(let t of this.bodies){let n=t.body;this.outer_zn.__impulse(this.J,n.outer,this.vec3);let s=n.imass,i=n,l=i.velx,r=this.vec3;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let a=r.zpp_inner;a._validate!=null&&a._validate(),i.velx=l+r.zpp_inner.x*s;let o=n,p=o.vely,c=this.vec3;if(c!=null&&c.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let h=c.zpp_inner;h._validate!=null&&h._validate(),o.vely=p+c.zpp_inner.y*s;let u=n,x=u.angvel,y=this.vec3;if(y!=null&&y.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let d=y.zpp_inner;d._validate!=null&&d._validate(),u.angvel=x+y.zpp_inner.z*n.iinertia}return!1}applyImpulsePos(){if(this.velonly)return!1;this.outer_zn.__prepare(),this.outer_zn.__position(this.J);let t=this.lsq(this.J);if(this.breakUnderError&&t>this.maxError*this.maxError)return!0;if(t<Me._nape.Config.constraintLinearSlop*Me._nape.Config.constraintLinearSlop)return!1;for(let n=0;n<this.dim;n++)this.J[n]*=-1;this.outer_zn.__eff_mass(this.Keff),this.transform(this.solve(this.Keff),this.J),this.outer_zn.__clamp(this.J);for(let n of this.bodies){let s=n.body;this.outer_zn.__impulse(this.J,s.outer,this.vec3);let i=s.imass,l=s,r=l.posx,a=this.vec3;if(a!=null&&a.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let o=a.zpp_inner;o._validate!=null&&o._validate(),l.posx=r+a.zpp_inner.x*i;let p=s,c=p.posy,h=this.vec3;if(h!=null&&h.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let u=h.zpp_inner;u._validate!=null&&u._validate(),p.posy=c+h.zpp_inner.y*i;let x=this.vec3;if(x!=null&&x.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");let y=x.zpp_inner;y._validate!=null&&y._validate();let d=x.zpp_inner.z*s.iinertia;if(s.rot+=d,d*d>1e-4)s.axisx=Math.sin(s.rot),s.axisy=Math.cos(s.rot);else{let _=d*d,f=1-.5*_,z=1-_*_/8,P=(f*s.axisx+d*s.axisy)*z;s.axisy=(f*s.axisy-d*s.axisx)*z,s.axisx=P}}return!1}draw(t){this.outer_zn.__draw(t)}};var Ls=class Ls extends Me{constructor(){super();this.outer_zn=null;this.b1=null;this.b2=null;this.a1localx=0;this.a1localy=0;this.a1relx=0;this.a1rely=0;this.wrap_a1=null;this.a2localx=0;this.a2localy=0;this.a2relx=0;this.a2rely=0;this.wrap_a2=null;this.phase=0;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.kMassd=0;this.kMasse=0;this.kMassf=0;this.jAccx=0;this.jAccy=0;this.jAccz=0;this.jMax=1/0;this.gamma=0;this.biasx=0;this.biasy=0;this.biasz=0;this.stepped=!1;this.phase=0,this.jAccx=0,this.jAccy=0,this.jAccz=0,this.jMax=1/0,this.stepped=!1,this.a1localx=0,this.a1localy=0,this.a1relx=0,this.a1rely=0,this.a2localx=0,this.a2localy=0,this.a2relx=0,this.a2rely=0}bodyImpulse(t){let n=Me._nape;return this.stepped?t==this.b1?n.geom.Vec3.get(-this.jAccx,-this.jAccy,-(this.jAccy*this.a1relx-this.jAccx*this.a1rely+this.jAccz)):n.geom.Vec3.get(this.jAccx,this.jAccy,this.jAccy*this.a2relx-this.jAccx*this.a2rely+this.jAccz):n.geom.Vec3.get(0,0,0)}activeBodies(){this.b1!=null&&this.b1.constraints.add(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.add(this)}inactiveBodies(){this.b1!=null&&this.b1.constraints.remove(this),this.b2!=this.b1&&this.b2!=null&&this.b2.constraints.remove(this)}validate_a1(){this.wrap_a1.zpp_inner.x=this.a1localx,this.wrap_a1.zpp_inner.y=this.a1localy}invalidate_a1(t){this.immutable_midstep("Constraint::a1"),this.a1localx=t.x,this.a1localy=t.y,this.wake()}setup_a1(){let t=Me._nape,n=Me._zpp,s=this.a1localx,i=this.a1localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a1=l,this.wrap_a1.zpp_inner._inuse=!0,this.wrap_a1.zpp_inner._validate=this.validate_a1.bind(this),this.wrap_a1.zpp_inner._invalidate=this.invalidate_a1.bind(this)}validate_a2(){this.wrap_a2.zpp_inner.x=this.a2localx,this.wrap_a2.zpp_inner.y=this.a2localy}invalidate_a2(t){this.immutable_midstep("Constraint::a2"),this.a2localx=t.x,this.a2localy=t.y,this.wake()}setup_a2(){let t=Me._nape,n=Me._zpp,s=this.a2localx,i=this.a2localy;if(i==null&&(i=0),s==null&&(s=0),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let l;if(n.util.ZPP_PubPool.poolVec2==null?l=new t.geom.Vec2:(l=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;n.geom.ZPP_Vec2.zpp_pool==null?r=new n.geom.ZPP_Vec2:(r=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_a2=l,this.wrap_a2.zpp_inner._inuse=!0,this.wrap_a2.zpp_inner._validate=this.validate_a2.bind(this),this.wrap_a2.zpp_inner._invalidate=this.invalidate_a2.bind(this)}copy(t,n){let s=this.outer_zn;s.zpp_inner_zn.wrap_a1==null&&s.zpp_inner_zn.setup_a1();let i=s.zpp_inner_zn.wrap_a1,l=this.outer_zn;l.zpp_inner_zn.wrap_a2==null&&l.zpp_inner_zn.setup_a2();let r=Ls._createFn(null,null,i,l.zpp_inner_zn.wrap_a2);return this.copyto(r),Je._copyBody(t,n,this.b1,r,"b1"),Je._copyBody(t,n,this.b2,r,"b2"),r}validate(){if(this.b1==null||this.b2==null)throw new Error("Error: AngleJoint cannot be simulated null bodies");if(this.b1==this.b2)throw new Error("Error: WeldJoint cannot be simulated with body1 == body2");if(this.b1.space!=this.space||this.b2.space!=this.space)throw new Error("Error: Constraints must have each body within the same space to which the constraint has been assigned");if(this.b1.type!=2&&this.b2.type!=2)throw new Error("Error: Constraints cannot have both bodies non-dynamic")}wake_connected(){this.b1!=null&&this.b1.type==2&&this.b1.wake(),this.b2!=null&&this.b2.type==2&&this.b2.wake()}forest(){this.b1.type==2&&Me._unionComponents(this.b1.component,this.component),this.b2.type==2&&Me._unionComponents(this.b2.component,this.component)}pair_exists(t,n){return this.b1.id==t&&this.b2.id==n?!0:this.b1.id==n?this.b2.id==t:!1}clearcache(){this.jAccx=0,this.jAccy=0,this.jAccz=0,this.pre_dt=-1}preStep(t){this.pre_dt==-1&&(this.pre_dt=t);let n=t/this.pre_dt;this.pre_dt=t,this.stepped=!0,this.a1relx=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,this.a1rely=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,this.a2relx=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,this.a2rely=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy;let s=this.b1.smass+this.b2.smass;if(this.kMassa=s,this.kMassb=0,this.kMassd=s,this.kMassc=0,this.kMasse=0,this.kMassf=0,this.b1.sinertia!=0){let r=this.a1relx*this.b1.sinertia,a=this.a1rely*this.b1.sinertia;this.kMassa+=a*this.a1rely,this.kMassb+=-a*this.a1relx,this.kMassd+=r*this.a1relx,this.kMassc+=-a,this.kMasse+=r,this.kMassf+=this.b1.sinertia}if(this.b2.sinertia!=0){let r=this.a2relx*this.b2.sinertia,a=this.a2rely*this.b2.sinertia;this.kMassa+=a*this.a2rely,this.kMassb+=-a*this.a2relx,this.kMassd+=r*this.a2relx,this.kMassc+=-a,this.kMasse+=r,this.kMassf+=this.b2.sinertia}let i=this.kMassa*(this.kMassd*this.kMassf-this.kMasse*this.kMasse)+this.kMassb*(this.kMassc*this.kMasse-this.kMassb*this.kMassf)+this.kMassc*(this.kMassb*this.kMasse-this.kMassc*this.kMassd),l;if(i!=i)this.kMassa=0,this.kMassb=0,this.kMassd=0,this.kMassc=0,this.kMasse=0,this.kMassf=0,l=7;else if(i==0){let r=0;this.kMassa!=0?this.kMassa=1/this.kMassa:(this.kMassa=0,r|=1),this.kMassd!=0?this.kMassd=1/this.kMassd:(this.kMassd=0,r|=2),this.kMassf!=0?this.kMassf=1/this.kMassf:(this.kMassf=0,r|=4),this.kMassb=this.kMassc=this.kMasse=0,l=r}else{let r=1/i,a=r*(this.kMassd*this.kMassf-this.kMasse*this.kMasse),o=r*(this.kMasse*this.kMassc-this.kMassb*this.kMassf),p=r*(this.kMassa*this.kMassf-this.kMassc*this.kMassc),c=r*(this.kMassb*this.kMasse-this.kMassc*this.kMassd),h=r*(this.kMassb*this.kMassc-this.kMassa*this.kMasse),u=r*(this.kMassa*this.kMassd-this.kMassb*this.kMassb);this.kMassa=a,this.kMassb=o,this.kMassd=p,this.kMassc=c,this.kMasse=h,this.kMassf=u,l=0}if((l&1)!=0&&(this.jAccx=0),(l&2)!=0&&(this.jAccy=0),(l&4)!=0&&(this.jAccz=0),this.stiff)this.biasx=0,this.biasy=0,this.biasz=0,this.gamma=0;else{let r=2*Math.PI*this.frequency;this.gamma=1/(t*r*(2*this.damping+r*t));let a=1/(1+this.gamma),o=t*r*r*this.gamma;this.gamma*=a;let p=a;if(this.kMassa*=p,this.kMassb*=p,this.kMassd*=p,this.kMassc*=p,this.kMasse*=p,this.kMassf*=p,this.biasx=this.b2.posx+this.a2relx-(this.b1.posx+this.a1relx),this.biasy=this.b2.posy+this.a2rely-(this.b1.posy+this.a1rely),this.biasz=this.b2.rot-this.b1.rot-this.phase,this.breakUnderError&&this.biasx*this.biasx+this.biasy*this.biasy+this.biasz*this.biasz>this.maxError*this.maxError)return!0;let c=-o;this.biasx*=c,this.biasy*=c,this.biasz*=c;let h=this.maxError,u=this.biasx*this.biasx+this.biasy*this.biasy+this.biasz*this.biasz;if(u>h*h){let x=h*(1/Math.sqrt(u));this.biasx*=x,this.biasy*=x,this.biasz*=x}}return this.jAccx*=n,this.jAccy*=n,this.jAccz*=n,this.jMax=this.maxForce*t,!1}warmStart(){let t=this.b1.imass;this.b1.velx-=this.jAccx*t,this.b1.vely-=this.jAccy*t;let n=this.b2.imass;this.b2.velx+=this.jAccx*n,this.b2.vely+=this.jAccy*n,this.b1.angvel-=(this.jAccy*this.a1relx-this.jAccx*this.a1rely+this.jAccz)*this.b1.iinertia,this.b2.angvel+=(this.jAccy*this.a2relx-this.jAccx*this.a2rely+this.jAccz)*this.b2.iinertia}applyImpulseVel(){let t=this.b2.velx+this.b2.kinvelx-this.a2rely*(this.b2.angvel+this.b2.kinangvel)-(this.b1.velx+this.b1.kinvelx-this.a1rely*(this.b1.angvel+this.b1.kinangvel)),n=this.b2.vely+this.b2.kinvely+this.a2relx*(this.b2.angvel+this.b2.kinangvel)-(this.b1.vely+this.b1.kinvely+this.a1relx*(this.b1.angvel+this.b1.kinangvel)),s=this.b2.angvel+this.b2.kinangvel-this.b1.angvel-this.b1.kinangvel,i=this.biasx-t,l=this.biasy-n,r=this.biasz-s,a=this.kMassa*i+this.kMassb*l+this.kMassc*r,o=this.kMassb*i+this.kMassd*l+this.kMasse*r;r=this.kMassc*i+this.kMasse*l+this.kMassf*r,i=a,l=o,i-=this.jAccx*this.gamma,l-=this.jAccy*this.gamma,r-=this.jAccz*this.gamma;let p=this.jAccx,c=this.jAccy,h=this.jAccz;if(this.jAccx+=i,this.jAccy+=l,this.jAccz+=r,this.breakUnderForce){if(this.jAccx*this.jAccx+this.jAccy*this.jAccy+this.jAccz*this.jAccz>this.jMax*this.jMax)return!0}else if(!this.stiff){let y=this.jMax,d=this.jAccx*this.jAccx+this.jAccy*this.jAccy+this.jAccz*this.jAccz;if(d>y*y){let _=y*(1/Math.sqrt(d));this.jAccx*=_,this.jAccy*=_,this.jAccz*=_}}i=this.jAccx-p,l=this.jAccy-c,r=this.jAccz-h;let u=this.b1.imass;this.b1.velx-=i*u,this.b1.vely-=l*u;let x=this.b2.imass;return this.b2.velx+=i*x,this.b2.vely+=l*x,this.b1.angvel-=(l*this.a1relx-i*this.a1rely+r)*this.b1.iinertia,this.b2.angvel+=(l*this.a2relx-i*this.a2rely+r)*this.b2.iinertia,!1}applyImpulsePos(){let t=Me._nape,n=this.b1.axisy*this.a1localx-this.b1.axisx*this.a1localy,s=this.a1localx*this.b1.axisx+this.a1localy*this.b1.axisy,i=this.b2.axisy*this.a2localx-this.b2.axisx*this.a2localy,l=this.a2localx*this.b2.axisx+this.a2localy*this.b2.axisy,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s),o=this.b2.rot-this.b1.rot-this.phase,p,c,h;if(this.breakUnderError&&r*r+a*a+o*o>this.maxError*this.maxError)return!0;let u=!0;r*r+a*a<t.Config.constraintLinearSlop*t.Config.constraintLinearSlop&&(u=!1,r=0,a=0);let x=t.Config.constraintAngularSlop;if(o*o<x*x)if(u)o=0;else return!1;if(r*=.5,a*=.5,o*=.5,r*r+a*a>6){let A=this.b1.smass+this.b2.smass;if(A>t.Config.epsilon){let F=.75/A;p=-r*F,c=-a*F;let B=20,G=p*p+c*c;if(G>B*B){let T=B*(1/Math.sqrt(G));p*=T,c*=T}let J=this.b1.imass;this.b1.posx-=p*J,this.b1.posy-=c*J;let R=this.b2.imass;this.b2.posx+=p*R,this.b2.posy+=c*R,r=this.b2.posx+i-(this.b1.posx+n),a=this.b2.posy+l-(this.b1.posy+s),o=this.b2.rot-this.b1.rot-this.phase,r*=.5,a*=.5,o*=.5}}let y=this.b1.smass+this.b2.smass,d=y,_=0,f=y,z=0,P=0,k=0;if(this.b1.sinertia!=0){let A=n*this.b1.sinertia,F=s*this.b1.sinertia;d+=F*s,_+=-F*n,f+=A*n,z+=-F,P+=A,k+=this.b1.sinertia}if(this.b2.sinertia!=0){let A=i*this.b2.sinertia,F=l*this.b2.sinertia;d+=F*l,_+=-F*i,f+=A*i,z+=-F,P+=A,k+=this.b2.sinertia}p=-r,c=-a,h=-o;let m=6,b=p*p+c*c;if(b>m*m){let A=m*(1/Math.sqrt(b));p*=A,c*=A}let v=h<-.25,w=d*(f*k-P*P)+_*(z*P-_*k)+z*(_*P-z*f);if(w!=w)h=0,c=h,p=c;else if(w==0)d!=0?p/=d:p=0,f!=0?c/=f:c=0,k!=0?h/=k:h=0;else{let A=1/w,F=P*z-_*k,B=_*P-z*f,G=_*z-d*P,J=A*(p*(f*k-P*P)+c*F+h*B),R=A*(p*F+c*(d*k-z*z)+h*G);h=A*(p*B+c*G+h*(d*f-_*_)),p=J,c=R}let O=this.b1.imass;this.b1.posx-=p*O,this.b1.posy-=c*O;let E=this.b2.imass;this.b2.posx+=p*E,this.b2.posy+=c*E;let C=this.b1,N=-(c*n-p*s+h)*this.b1.iinertia;Je._rotateBody(C,N);let Z=this.b2,S=(c*i-p*l+h)*this.b2.iinertia;return Je._rotateBody(Z,S),!1}draw(t){}};Ls._wrapFn=null,Ls._createFn=null;var zi=Ls;var it=class it{constructor(){this.outer=null;this.hnext=null;this.id=0;this.di=0;this.stamp=0;this.up_stamp=0;this.sleep_stamp=0;this.endGenerated=0;this.active=!1;this.cleared=!1;this.sleeping=!1;this.present=0;this.intchange=!1;this.presentable=!1;this.continuous=!1;this.fresh=!1;this.immState=0;this.invalidated=!1;this.b1=null;this.b2=null;this.ws1=null;this.ws2=null;this.pair=null;this.type=0;this.colarb=null;this.fluidarb=null;this.sensorarb=null;this.sensorarb=null,this.fluidarb=null,this.colarb=null,this.type=0,this.pair=null,this.ws2=null,this.ws1=null,this.b2=null,this.b1=null,this.invalidated=!1,this.immState=0,this.fresh=!1,this.continuous=!1,this.presentable=!1,this.intchange=!1,this.present=0,this.sleeping=!1,this.cleared=!1,this.active=!1,this.endGenerated=0,this.sleep_stamp=0,this.up_stamp=0,this.stamp=0,this.di=0,this.id=0,this.hnext=null,this.outer=null}static _initEnums(e,t){let n=()=>{t.internal=!0;let s=new e.dynamics.ArbiterType;return t.internal=!1,s};t.ArbiterType_COLLISION==null&&(t.ArbiterType_COLLISION=n()),t.ArbiterType_SENSOR==null&&(t.ArbiterType_SENSOR=n()),t.ArbiterType_FLUID==null&&(t.ArbiterType_FLUID=n()),it.types=[null,t.ArbiterType_COLLISION,t.ArbiterType_SENSOR,null,t.ArbiterType_FLUID]}wrapper(){if(this.outer==null){let e=it._nape;it.internal=!0,this.type==it.COL?(this.colarb.outer_zn=it._createColArb(),this.outer=this.colarb.outer_zn):this.type==it.FLUID?(this.fluidarb.outer_zn=it._createFluidArb(),this.outer=this.fluidarb.outer_zn):this.outer=new e.dynamics.Arbiter,this.outer.zpp_inner=this,it.internal=!1}return this.outer}inactiveme(){return!this.active}acting(){return this.active?(this.immState&1)!=0:!1}swap_features(){let e=this.b1;this.b1=this.b2,this.b2=e,e=this.ws1,this.ws1=this.ws2,this.ws2=e,e=this.colarb.s1,this.colarb.s1=this.colarb.s2,this.colarb.s2=e}lazyRetire(e,t){let n=it._zpp;this.cleared=!0,(t==null||this.b2==t)&&it._removeFromArbiterList(this.b1.arbiters,this,n),(t==null||this.b1==t)&&it._removeFromArbiterList(this.b2.arbiters,this,n),this.pair!=null&&(this.pair.arb=null,this.pair=null),this.active=!1,e.f_arbiters.modified=!0}sup_assign(e,t,n,s){let i=it._zpp;this.b1=e.body,this.ws1=e,this.b2=t.body,this.ws2=t,this.id=n,this.di=s,it._addToArbiterList(this.b1.arbiters,this,i),it._addToArbiterList(this.b2.arbiters,this,i),this.active=!0,this.present=0,this.cleared=!1,this.sleeping=!1,this.fresh=!1,this.presentable=!1}sup_retire(){let e=it._zpp;this.cleared||(it._removeFromArbiterList(this.b1.arbiters,this,e),it._removeFromArbiterList(this.b2.arbiters,this,e),this.pair!=null&&(this.pair.arb=null,this.pair=null)),this.b1=this.b2=null,this.active=!1,this.intchange=!1}static _removeFromArbiterList(e,t,n){let s=null,i=e.head;for(;i!=null;){if(i.elt==t){let l,r;s==null?(l=e.head,r=l.next,e.head=r,e.head==null&&(e.pushmod=!0)):(l=s.next,r=l.next,s.next=r,r==null&&(e.pushmod=!0));let a=l;a.elt=null,a.next=n.util.ZNPNode_ZPP_Arbiter.zpp_pool,n.util.ZNPNode_ZPP_Arbiter.zpp_pool=a,e.modified=!0,e.length--,e.pushmod=!0;break}s=i,i=i.next}}static _addToArbiterList(e,t,n){let s;n.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?s=new n.util.ZNPNode_ZPP_Arbiter:(s=n.util.ZNPNode_ZPP_Arbiter.zpp_pool,n.util.ZNPNode_ZPP_Arbiter.zpp_pool=s.next,s.next=null),s.elt=t;let i=s;i.next=e.head,e.head=i,e.modified=!0,e.length++}};it._nape=null,it._zpp=null,it.internal=!1,it._createColArb=null,it._createFluidArb=null,it.COL=1,it.FLUID=4,it.SENSOR=2,it.types=[];var Ie=it;var Ds=class Ds extends Ie{constructor(){super(),this.next=null,this.type=Ie.SENSOR,this.sensorarb=this}alloc(){}free(){}assign(e,t,n,s){this.sup_assign(e,t,n,s)}retire(){this.sup_retire(),this.next=Ds.zpp_pool,Ds.zpp_pool=this}makemutable(){}makeimmutable(){}};Ds.zpp_pool=null;var Ot=Ds;var Fs=class Fs extends Ie{constructor(){super();this.outer_zn=null;this.centroidx=0;this.centroidy=0;this.overlap=0;this.r1x=0;this.r1y=0;this.r2x=0;this.r2y=0;this.nodrag=!1;this.wMass=0;this.adamp=0;this.agamma=0;this.vMassa=0;this.vMassb=0;this.vMassc=0;this.dampx=0;this.dampy=0;this.lgamma=0;this.nx=0;this.ny=0;this.buoyx=0;this.buoyy=0;this.wrap_position=null;this.mutable=!1;this.pre_dt=0;this.pre_dt=0,this.mutable=!1,this.wrap_position=null,this.buoyy=0,this.buoyx=0,this.ny=0,this.nx=0,this.lgamma=0,this.dampy=0,this.dampx=0,this.vMassc=0,this.vMassb=0,this.vMassa=0,this.agamma=0,this.adamp=0,this.wMass=0,this.nodrag=!1,this.r2y=0,this.r2x=0,this.r1y=0,this.r1x=0,this.overlap=0,this.centroidy=0,this.centroidx=0,this.next=null,this.outer_zn=null,this.type=Ie.FLUID,this.fluidarb=this,this.buoyx=0,this.buoyy=0,this.pre_dt=-1}alloc(){}free(){}position_validate(){if(!this.active)throw new Error("Error: Arbiter not currently in use");this.wrap_position.zpp_inner.x=this.centroidx,this.wrap_position.zpp_inner.y=this.centroidy}position_invalidate(t){this.centroidx=t.x,this.centroidy=t.y}getposition(){let t=Ie._zpp,n=Ie._nape,s;if(t.util.ZPP_PubPool.poolVec2==null?s=new n.geom.Vec2:(s=t.util.ZPP_PubPool.poolVec2,t.util.ZPP_PubPool.poolVec2=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s==t.util.ZPP_PubPool.nextVec2&&(t.util.ZPP_PubPool.nextVec2=null)),s.zpp_inner==null){let i;t.geom.ZPP_Vec2.zpp_pool==null?i=new t.geom.ZPP_Vec2:(i=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=i.next,i.next=null),i.weak=!1,i._immutable=!1,i.x=0,i.y=0,s.zpp_inner=i,s.zpp_inner.outer=s}else{if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");i._isimmutable!=null&&i._isimmutable();let l;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=s.zpp_inner;if(r._validate!=null&&r._validate(),s.zpp_inner.x==0){if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let a=s.zpp_inner;a._validate!=null&&a._validate(),l=s.zpp_inner.y==0}else l=!1;if(!l){s.zpp_inner.x=0,s.zpp_inner.y=0;let a=s.zpp_inner;a._invalidate!=null&&a._invalidate(a)}}s.zpp_inner.weak=!1,this.wrap_position=s,this.wrap_position.zpp_inner._inuse=!0,this.wrap_position.zpp_inner._immutable=!this.mutable,this.wrap_position.zpp_inner._validate=this.position_validate.bind(this),this.wrap_position.zpp_inner._invalidate=this.position_invalidate.bind(this)}assign(t,n,s,i){this.sup_assign(t,n,s,i),this.nx=0,this.ny=1,this.dampx=0,this.dampy=0,this.adamp=0}retire(){this.sup_retire(),this.next=Fs.zpp_pool,Fs.zpp_pool=this,this.pre_dt=-1}makemutable(){this.mutable=!0,this.wrap_position!=null&&(this.wrap_position.zpp_inner._immutable=!1)}makeimmutable(){this.mutable=!1,this.wrap_position!=null&&(this.wrap_position.zpp_inner._immutable=!0)}inject(t,n,s){this.overlap=t,this.centroidx=n,this.centroidy=s}preStep(t,n){let s=Ie._nape;this.pre_dt==-1&&(this.pre_dt=n);let i=n/this.pre_dt;this.pre_dt=n,this.r1x=this.centroidx-this.b1.posx,this.r1y=this.centroidy-this.b1.posy,this.r2x=this.centroidx-this.b2.posx,this.r2y=this.centroidy-this.b2.posy;let l,r;this.ws1.fluidEnabled&&this.ws1.fluidProperties.wrap_gravity!=null?(l=this.ws1.fluidProperties.gravityx,r=this.ws1.fluidProperties.gravityy):(l=t.gravityx,r=t.gravityy);let a,o;this.ws2.fluidEnabled&&this.ws2.fluidProperties.wrap_gravity!=null?(a=this.ws2.fluidProperties.gravityx,o=this.ws2.fluidProperties.gravityy):(a=t.gravityx,o=t.gravityy);let p=0,c=0;if(this.ws1.fluidEnabled&&this.ws2.fluidEnabled){let h=this.overlap*this.ws1.fluidProperties.density,u=this.overlap*this.ws2.fluidProperties.density;if(h>u){let x=h+u;p-=l*x,c-=r*x}else if(h<u){let x=h+u;p+=a*x,c+=o*x}else{let x=l+a,y=r+o,d=.5;if(x*=d,y*=d,this.ws1.worldCOMx*x+this.ws1.worldCOMy*y>this.ws2.worldCOMx*x+this.ws2.worldCOMy*y){let _=h+u;p-=x*_,c-=y*_}else{let _=h+u;p+=x*_,c+=y*_}}}else if(this.ws1.fluidEnabled){let h=this.overlap*this.ws1.fluidProperties.density;p-=l*h,c-=r*h}else if(this.ws2.fluidEnabled){let h=this.overlap*this.ws2.fluidProperties.density;p+=a*h,c+=o*h}if(p*=n,c*=n,this.buoyx=p,this.buoyy=c,this.b1.type==2&&(this.b1.velx-=p*this.b1.imass,this.b1.vely-=c*this.b1.imass,this.b1.angvel-=(c*this.r1x-p*this.r1y)*this.b1.iinertia),this.b2.type==2&&(this.b2.velx+=p*this.b2.imass,this.b2.vely+=c*this.b2.imass,this.b2.angvel+=(c*this.r2x-p*this.r2y)*this.b2.iinertia),(!this.ws1.fluidEnabled||this.ws1.fluidProperties.viscosity==0)&&(!this.ws2.fluidEnabled||this.ws2.fluidProperties.viscosity==0))this.nodrag=!0,this.dampx=0,this.dampy=0,this.adamp=0;else{this.nodrag=!1;let h=0;if(this.ws1.fluidEnabled&&(this.ws2.validate_angDrag(),h+=this.ws1.fluidProperties.viscosity*this.ws2.angDrag*this.overlap/this.ws2.area),this.ws2.fluidEnabled&&(this.ws1.validate_angDrag(),h+=this.ws2.fluidProperties.viscosity*this.ws1.angDrag*this.overlap/this.ws1.area),h!=0){let d=this.b1.sinertia+this.b2.sinertia;d!=0?this.wMass=1/d:this.wMass=0,h*=4e-4;let _=2*Math.PI*h;this.agamma=1/(n*_*(2+_*n));let f=1/(1+this.agamma);this.agamma*=f,this.wMass*=f}else this.wMass=0,this.agamma=0;let u=this.b2.velx+this.b2.kinvelx-this.r2y*(this.b2.angvel+this.b2.kinangvel)-(this.b1.velx+this.b1.kinvelx-this.r1y*(this.b2.angvel+this.b2.kinangvel)),x=this.b2.vely+this.b2.kinvely+this.r2x*(this.b2.angvel+this.b2.kinangvel)-(this.b1.vely+this.b1.kinvely+this.r1x*(this.b1.angvel+this.b1.kinangvel));if(!(u*u+x*x<s.Config.epsilon*s.Config.epsilon)){let d=u*u+x*x,_=1/Math.sqrt(d);this.nx=u*_,this.ny=x*_}let y=0;if(this.ws1.fluidEnabled){let d=-this.ws1.fluidProperties.viscosity*this.overlap/this.ws2.area;if(this.ws2.type==0)y-=d*this.ws2.circle.radius*s.Config.fluidLinearDrag/(2*this.ws2.circle.radius*Math.PI);else{let _=this.ws2.polygon,f=0,z=0,P=_.edges.head;for(;P!=null;){let k=P.elt;f+=k.length;let m=d*k.length*(k.gnormx*this.nx+k.gnormy*this.ny);m>0&&(m*=-s.Config.fluidVacuumDrag),z-=m*.5*s.Config.fluidLinearDrag,P=P.next}y+=z/f}}if(this.ws2.fluidEnabled){let d=-this.ws2.fluidProperties.viscosity*this.overlap/this.ws1.area;if(this.ws1.type==0)y-=d*this.ws1.circle.radius*s.Config.fluidLinearDrag/(2*this.ws1.circle.radius*Math.PI);else{let _=this.ws1.polygon,f=0,z=0,P=_.edges.head;for(;P!=null;){let k=P.elt;f+=k.length;let m=d*k.length*(k.gnormx*this.nx+k.gnormy*this.ny);m>0&&(m*=-s.Config.fluidVacuumDrag),z-=m*.5*s.Config.fluidLinearDrag,P=P.next}y+=z/f}}if(y!=0){let d=this.b1.smass+this.b2.smass,_=d,f=0,z=d;if(this.b1.sinertia!=0){let b=this.r1x*this.b1.sinertia,M=this.r1y*this.b1.sinertia;_+=M*this.r1y,f+=-M*this.r1x,z+=b*this.r1x}if(this.b2.sinertia!=0){let b=this.r2x*this.b2.sinertia,M=this.r2y*this.b2.sinertia;_+=M*this.r2y,f+=-M*this.r2x,z+=b*this.r2x}let P=_*z-f*f;if(P!==P)z=0,f=z,_=f;else if(P==0)_!=0?_=1/_:_=0,z!=0?z=1/z:z=0,f=0;else{let b=1/P,M=z*b;z=_*b,_=M,f*=-b}this.vMassa=_,this.vMassb=f,this.vMassc=z;let k=2*Math.PI*y;this.lgamma=1/(n*k*(2+k*n));let m=1/(1+this.lgamma);this.lgamma*=m,this.vMassa*=m,this.vMassb*=m,this.vMassc*=m}else this.vMassa=0,this.vMassb=0,this.vMassc=0,this.lgamma=0}this.dampx*=i,this.dampy*=i,this.adamp*=i}warmStart(){this.b1.velx-=this.dampx*this.b1.imass,this.b1.vely-=this.dampy*this.b1.imass,this.b2.velx+=this.dampx*this.b2.imass,this.b2.vely+=this.dampy*this.b2.imass,this.b1.angvel-=this.b1.iinertia*(this.dampy*this.r1x-this.dampx*this.r1y),this.b2.angvel+=this.b2.iinertia*(this.dampy*this.r2x-this.dampx*this.r2y),this.b1.angvel-=this.adamp*this.b1.iinertia,this.b2.angvel+=this.adamp*this.b2.iinertia}applyImpulseVel(){if(!this.nodrag){let t=this.b1.angvel+this.b1.kinangvel,n=this.b2.angvel+this.b2.kinangvel,s=this.b1.velx+this.b1.kinvelx-this.r1y*t-(this.b2.velx+this.b2.kinvelx-this.r2y*n),i=this.b1.vely+this.b1.kinvely+this.r1x*t-(this.b2.vely+this.b2.kinvely+this.r2x*n),l=this.vMassa*s+this.vMassb*i;i=this.vMassb*s+this.vMassc*i,s=l,s-=this.dampx*this.lgamma,i-=this.dampy*this.lgamma,this.dampx+=s,this.dampy+=i,this.b1.velx-=s*this.b1.imass,this.b1.vely-=i*this.b1.imass,this.b2.velx+=s*this.b2.imass,this.b2.vely+=i*this.b2.imass,this.b1.angvel-=this.b1.iinertia*(i*this.r1x-s*this.r1y),this.b2.angvel+=this.b2.iinertia*(i*this.r2x-s*this.r2y);let r=(t-n)*this.wMass-this.adamp*this.agamma;this.adamp+=r,this.b1.angvel-=r*this.b1.iinertia,this.b2.angvel+=r*this.b2.iinertia}}};Fs.zpp_pool=null;var Pt=Fs;var Pi=class{constructor(){this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.r1x=0;this.r1y=0;this.r2x=0;this.r2y=0;this.nMass=0;this.tMass=0;this.bounce=0;this.friction=0;this.jnAcc=0;this.jtAcc=0;this.lr1x=0;this.lr1y=0;this.lr2x=0;this.lr2y=0}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}};var yn=class yn{constructor(){this.outer=null;this.px=0;this.py=0;this.wrap_position=null;this.arbiter=null;this.active=!1;this.posOnly=!1;this.stamp=0;this.hash=0;this.fresh=!1;this.dist=0;this.elasticity=0;this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.length=0,this.pushmod=!1,this.modified=!1,this._inuse=!1,this.next=null,this.elasticity=0,this.dist=0,this.fresh=!1,this.hash=0,this.stamp=0,this.posOnly=!1,this.active=!1,this.inner=null,this.arbiter=null,this.wrap_position=null,this.py=0,this.px=0,this.outer=null,this.inner=new Pi}wrapper(){return this.outer==null&&(yn._wrapFn?this.outer=yn._wrapFn(this):(yn.internal=!0,this.outer=new yn._nape.dynamics.Contact,yn.internal=!1,this.outer.zpp_inner=this)),this.outer}position_validate(){if(this.inactiveme())throw new Error("Error: Contact not currently in use");this.wrap_position.zpp_inner.x=this.px,this.wrap_position.zpp_inner.y=this.py}getposition(){let e=yn._zpp,t=yn._nape,n;if(e.util.ZPP_PubPool.poolVec2==null?n=new t.geom.Vec2:(n=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),n.zpp_inner==null){let s;e.geom.ZPP_Vec2.zpp_pool==null?s=new e.geom.ZPP_Vec2:(s=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=0,s.y=0,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");s._isimmutable!=null&&s._isimmutable();let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x==0){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y==0}else i=!1;if(!i){n.zpp_inner.x=0,n.zpp_inner.y=0;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.wrap_position=n,this.wrap_position.zpp_inner._inuse=!0,this.wrap_position.zpp_inner._immutable=!0,this.wrap_position.zpp_inner._validate=this.position_validate.bind(this)}inactiveme(){return!(this.active&&this.arbiter!=null&&this.arbiter.active)}free(){this.arbiter=null}alloc(){}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}};yn._nape=null,yn._zpp=null,yn.zpp_pool=null,yn.internal=!1,yn._wrapFn=null;var we=yn;var wt=class wt extends Ie{constructor(){super();this.outer_zn=null;this.dyn_fric=0;this.stat_fric=0;this.restitution=0;this.rfric=0;this.userdef_dyn_fric=!1;this.userdef_stat_fric=!1;this.userdef_restitution=!1;this.userdef_rfric=!1;this.s1=null;this.s2=null;this.wrap_contacts=null;this.nx=0;this.ny=0;this.wrap_normal=null;this.kMassa=0;this.kMassb=0;this.kMassc=0;this.Ka=0;this.Kb=0;this.Kc=0;this.rMass=0;this.jrAcc=0;this.rn1a=0;this.rt1a=0;this.rn1b=0;this.rt1b=0;this.rn2a=0;this.rt2a=0;this.rn2b=0;this.rt2b=0;this.k1x=0;this.k1y=0;this.k2x=0;this.k2y=0;this.surfacex=0;this.surfacey=0;this.ptype=null;this.lnormx=0;this.lnormy=0;this.lproj=0;this.radius=0;this.rev=!1;this.biasCoef=0;this.__ref_edge1=null;this.__ref_edge2=null;this.__ref_vertex=0;this.c1=null;this.oc1=null;this.c2=null;this.oc2=null;this.hc2=!1;this.hpc2=!1;this.stat=!1;this.mutable=!1;this.pre_dt=0;this.pre_dt=0,this.mutable=!1,this.stat=!1,this.next=null,this.hpc2=!1,this.hc2=!1,this.oc2=null,this.c2=null,this.oc1=null,this.c1=null,this.__ref_vertex=0,this.__ref_edge2=null,this.__ref_edge1=null,this.biasCoef=0,this.rev=!1,this.radius=0,this.lproj=0,this.lnormy=0,this.lnormx=0,this.surfacey=0,this.surfacex=0,this.k2y=0,this.k2x=0,this.k1y=0,this.k1x=0,this.rt2b=0,this.rn2b=0,this.rt2a=0,this.rn2a=0,this.rt1b=0,this.rn1b=0,this.rt1a=0,this.rn1a=0,this.jrAcc=0,this.rMass=0,this.Kc=0,this.Kb=0,this.Ka=0,this.kMassc=0,this.kMassb=0,this.kMassa=0,this.wrap_normal=null,this.ny=0,this.nx=0,this.innards=null,this.wrap_contacts=null,this.contacts=null,this.s2=null,this.s1=null,this.userdef_rfric=!1,this.userdef_restitution=!1,this.userdef_stat_fric=!1,this.userdef_dyn_fric=!1,this.rfric=0,this.restitution=0,this.stat_fric=0,this.dyn_fric=0,this.outer_zn=null,this.pre_dt=-1,this.contacts=new we,this.innards=new Pi,this.type=Ie.COL,this.colarb=this}alloc(){}free(){this.userdef_dyn_fric=!1,this.userdef_stat_fric=!1,this.userdef_restitution=!1,this.userdef_rfric=!1,this.__ref_edge1=this.__ref_edge2=null}normal_validate(){if(this.cleared)throw new Error("Error: Arbiter not currently in use");this.wrap_normal.zpp_inner.x=this.nx,this.wrap_normal.zpp_inner.y=this.ny,this.ws1.id>this.ws2.id&&(this.wrap_normal.zpp_inner.x=-this.wrap_normal.zpp_inner.x,this.wrap_normal.zpp_inner.y=-this.wrap_normal.zpp_inner.y)}getnormal(){let t=Ie._zpp,n=Ie._nape,s=0,i=0,l;if(t.util.ZPP_PubPool.poolVec2==null?l=new n.geom.Vec2:(l=t.util.ZPP_PubPool.poolVec2,t.util.ZPP_PubPool.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l==t.util.ZPP_PubPool.nextVec2&&(t.util.ZPP_PubPool.nextVec2=null)),l.zpp_inner==null){let r;t.geom.ZPP_Vec2.zpp_pool==null?r=new t.geom.ZPP_Vec2:(r=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=s,r.y=i,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),s!==s||i!==i)throw new Error("Error: Vec2 components cannot be NaN");let a;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=l.zpp_inner;if(o._validate!=null&&o._validate(),l.zpp_inner.x==s){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate(),a=l.zpp_inner.y==i}else a=!1;if(!a){l.zpp_inner.x=s,l.zpp_inner.y=i;let p=l.zpp_inner;p._invalidate!=null&&p._invalidate(p)}}l.zpp_inner.weak=!1,this.wrap_normal=l,this.wrap_normal.zpp_inner._immutable=!0,this.wrap_normal.zpp_inner._inuse=!0,this.wrap_normal.zpp_inner._validate=this.normal_validate.bind(this)}injectContact(t,n,s,i,l,r,a=!1){let o=null,p=this.contacts.next;for(;p!=null;){if(r==p.hash){o=p;break}p=p.next}if(o==null){we.zpp_pool==null?o=new we:(o=we.zpp_pool,we.zpp_pool=o.next,o.next=null);let c=o.inner;c.jnAcc=c.jtAcc=0,o.hash=r,o.fresh=!0,o.arbiter=this,this.jrAcc=0,o._inuse=!0,o.next=this.contacts.next,this.contacts.next=o,this.contacts.modified=!0,this.contacts.length++,this.innards.add(c)}else o.fresh=!1;return o.px=t,o.py=n,this.nx=s,this.ny=i,o.dist=l,o.stamp=this.stamp,o.posOnly=a,o}assign(t,n,s,i){this.sup_assign(t,n,s,i),this.s1=t,this.s2=n,this._calcFrictionRestitution()}calcProperties(){this._calcFrictionRestitution()}validate_props(){this.invalidated&&(this.invalidated=!1,this._calcFrictionRestitution())}_calcFrictionRestitution(){this.userdef_restitution||(this.s1.material.elasticity<=-1/0||this.s2.material.elasticity<=-1/0?this.restitution=0:this.s1.material.elasticity>=1/0||this.s2.material.elasticity>=1/0?this.restitution=1:this.restitution=(this.s1.material.elasticity+this.s2.material.elasticity)/2,this.restitution<0&&(this.restitution=0),this.restitution>1&&(this.restitution=1)),this.userdef_dyn_fric||(this.dyn_fric=Math.sqrt(this.s1.material.dynamicFriction*this.s2.material.dynamicFriction)),this.userdef_stat_fric||(this.stat_fric=Math.sqrt(this.s1.material.staticFriction*this.s2.material.staticFriction)),this.userdef_rfric||(this.rfric=Math.sqrt(this.s1.material.rollingFriction*this.s2.material.rollingFriction))}retire(){for(this.sup_retire();this.contacts.next!=null;){let t=this.contacts.next;this.contacts.pop(),t.arbiter=null,t.next=we.zpp_pool,we.zpp_pool=t;let n=this.innards.next;this.innards.next=n.next,n._inuse=!1,this.innards.next==null&&(this.innards.pushmod=!0),this.innards.modified=!0,this.innards.length--}this.free(),this.next=wt.zpp_pool,wt.zpp_pool=this,this.pre_dt=-1}makemutable(){this.mutable=!0,this.wrap_normal!=null&&(this.wrap_normal.zpp_inner._immutable=!1),this.wrap_contacts!=null&&(this.wrap_contacts.zpp_inner.immutable=!1)}makeimmutable(){this.mutable=!1,this.wrap_normal!=null&&(this.wrap_normal.zpp_inner._immutable=!0),this.wrap_contacts!=null&&(this.wrap_contacts.zpp_inner.immutable=!0)}contacts_adder(t){throw new Error("Error: Cannot add new contacts, information required is far too specific and detailed :)")}contacts_subber(t){let n=null,s=null,i=this.innards.next,l=this.contacts.next;for(;l!=null;){if(l==t.zpp_inner){this.contacts.erase(n),this.innards.erase(s),l.arbiter=null,l.next=we.zpp_pool,we.zpp_pool=l;break}n=l,s=i,i=i.next,l=l.next}}setupcontacts(){let t=Ie._zpp;this.wrap_contacts=t.util.ZPP_ContactList.get(this.contacts,!0),this.wrap_contacts.zpp_inner.immutable=!this.mutable,this.wrap_contacts.zpp_inner.adder=this.contacts_adder.bind(this),this.wrap_contacts.zpp_inner.dontremove=!0,this.wrap_contacts.zpp_inner.subber=this.contacts_subber.bind(this)}cleanupContacts(){let t=Ie._nape,n=!0,s=null,i=null,l=this.innards.next;this.hc2=!1;let r=this.contacts.next;for(;r!=null;){let a=r;if(a.stamp+t.Config.arbiterExpirationDelay<this.stamp){r=wt._eraseFromList(this.contacts,s),l=wt._eraseFromList(this.innards,i),a.arbiter=null,a.next=we.zpp_pool,we.zpp_pool=a;continue}let o=a.inner,p=a.active;a.active=a.stamp==this.stamp,a.active&&(n?(n=!1,this.c1=o,this.oc1=a):(this.hc2=!0,this.c2=o,this.oc2=a)),p!=a.active&&(this.contacts.modified=!0),s=r,i=l,l=l.next,r=r.next}if(this.hc2){if(this.hpc2=!0,this.oc1.posOnly){let a=this.c1;this.c1=this.c2,this.c2=a,a=this.oc1,this.oc1=this.oc2,this.oc2=a,this.hc2=!1}else this.oc2.posOnly&&(this.hc2=!1);this.oc1.posOnly&&(n=!0)}else this.hpc2=!1;return n}preStep(t){let n=Ie._nape;this.validate_props(),this.pre_dt==-1&&(this.pre_dt=t);let s=t/this.pre_dt;this.pre_dt=t;let i=this.b1.smass+this.b2.smass;this.hc2=!1;let l=!0,a=this.b1.type!=2||this.b2.type!=2?this.continuous?n.Config.contactContinuousStaticBiasCoef:n.Config.contactStaticBiasCoef:this.continuous?n.Config.contactContinuousBiasCoef:n.Config.contactBiasCoef;this.biasCoef=a,this.continuous=!1;let o=null,p=null,c=this.innards.next,h=this.contacts.next;for(;h!=null;){let u=h;if(u.stamp+n.Config.arbiterExpirationDelay<this.stamp){h=wt._eraseFromList(this.contacts,o),c=wt._eraseFromList(this.innards,p),u.arbiter=null,u.next=we.zpp_pool,we.zpp_pool=u;continue}let x=u.inner,y=u.active;if(u.active=u.stamp==this.stamp,u.active){l?(l=!1,this.c1=x,this.oc1=u):(this.hc2=!0,this.c2=x,this.oc2=u),x.r2x=u.px-this.b2.posx,x.r2y=u.py-this.b2.posy,x.r1x=u.px-this.b1.posx,x.r1y=u.py-this.b1.posy;let d=x.r2x*this.nx+x.r2y*this.ny,_=i+this.b2.sinertia*(d*d);d=x.r1x*this.nx+x.r1y*this.ny,_+=this.b1.sinertia*(d*d),x.tMass=_<n.Config.epsilon*n.Config.epsilon?0:1/_,d=this.ny*x.r2x-this.nx*x.r2y;let f=i+this.b2.sinertia*(d*d);d=this.ny*x.r1x-this.nx*x.r1y,f+=this.b1.sinertia*(d*d),x.nMass=f<n.Config.epsilon*n.Config.epsilon?0:1/f;let z=this.b2.angvel+this.b2.kinangvel,P=this.b2.velx+this.b2.kinvelx-x.r2y*z,k=this.b2.vely+this.b2.kinvely+x.r2x*z;z=this.b1.angvel+this.b1.kinangvel,P-=this.b1.velx+this.b1.kinvelx-x.r1y*z,k-=this.b1.vely+this.b1.kinvely+x.r1x*z;let m=this.nx*P+this.ny*k;u.elasticity=this.restitution,x.bounce=m*u.elasticity,x.bounce>-n.Config.elasticThreshold&&(x.bounce=0);let b=k*this.nx-P*this.ny,M=n.Config.staticFrictionThreshold;b*b>M*M?x.friction=this.dyn_fric:x.friction=this.stat_fric,x.jnAcc*=s,x.jtAcc*=s}y!=u.active&&(this.contacts.modified=!0),o=h,p=c,c=c.next,h=h.next}if(this.hc2){if(this.hpc2=!0,this.oc1.posOnly){let u=this.c1;this.c1=this.c2,this.c2=u,u=this.oc1,this.oc1=this.oc2,this.oc2=u,this.hc2=!1}else this.oc2.posOnly&&(this.hc2=!1);this.oc1.posOnly&&(l=!0)}else this.hpc2=!1;if(this.jrAcc*=s,l||(this.rn1a=this.ny*this.c1.r1x-this.nx*this.c1.r1y,this.rt1a=this.c1.r1x*this.nx+this.c1.r1y*this.ny,this.rn1b=this.ny*this.c1.r2x-this.nx*this.c1.r2y,this.rt1b=this.c1.r2x*this.nx+this.c1.r2y*this.ny,this.k1x=this.b2.kinvelx-this.c1.r2y*this.b2.kinangvel-(this.b1.kinvelx-this.c1.r1y*this.b1.kinangvel),this.k1y=this.b2.kinvely+this.c1.r2x*this.b2.kinangvel-(this.b1.kinvely+this.c1.r1x*this.b1.kinangvel)),this.hc2)if(this.rn2a=this.ny*this.c2.r1x-this.nx*this.c2.r1y,this.rt2a=this.c2.r1x*this.nx+this.c2.r1y*this.ny,this.rn2b=this.ny*this.c2.r2x-this.nx*this.c2.r2y,this.rt2b=this.c2.r2x*this.nx+this.c2.r2y*this.ny,this.k2x=this.b2.kinvelx-this.c2.r2y*this.b2.kinangvel-(this.b1.kinvelx-this.c2.r1y*this.b1.kinangvel),this.k2y=this.b2.kinvely+this.c2.r2x*this.b2.kinangvel-(this.b1.kinvely+this.c2.r1x*this.b1.kinangvel),this.kMassa=i+this.b1.sinertia*this.rn1a*this.rn1a+this.b2.sinertia*this.rn1b*this.rn1b,this.kMassb=i+this.b1.sinertia*this.rn1a*this.rn2a+this.b2.sinertia*this.rn1b*this.rn2b,this.kMassc=i+this.b1.sinertia*this.rn2a*this.rn2a+this.b2.sinertia*this.rn2b*this.rn2b,this.kMassa*this.kMassa+2*this.kMassb*this.kMassb+this.kMassc*this.kMassc<n.Config.illConditionedThreshold*(this.kMassa*this.kMassc-this.kMassb*this.kMassb)){this.Ka=this.kMassa,this.Kb=this.kMassb,this.Kc=this.kMassc;let x=this.kMassa*this.kMassc-this.kMassb*this.kMassb;if(x!==x)this.kMassa=this.kMassb=this.kMassc=0;else if(x==0)this.kMassa!=0?this.kMassa=1/this.kMassa:this.kMassa=0,this.kMassc!=0?this.kMassc=1/this.kMassc:this.kMassc=0,this.kMassb=0;else{let y=1/x,d=this.kMassc*y;this.kMassc=this.kMassa*y,this.kMassa=d,this.kMassb*=-y}}else{if(this.hc2=!1,this.oc2.dist<this.oc1.dist){let x=this.c1;this.c1=this.c2,this.c2=x}this.oc2.active=!1,this.contacts.modified=!0}return this.surfacex=this.b2.svelx,this.surfacey=this.b2.svely,this.surfacex+=this.b1.svelx,this.surfacey+=this.b1.svely,this.surfacex=-this.surfacex,this.surfacey=-this.surfacey,this.rMass=this.b1.sinertia+this.b2.sinertia,this.rMass!=0&&(this.rMass=1/this.rMass),l}warmStart(){let t=this.nx*this.c1.jnAcc-this.ny*this.c1.jtAcc,n=this.ny*this.c1.jnAcc+this.nx*this.c1.jtAcc;this.b1.velx-=t*this.b1.imass,this.b1.vely-=n*this.b1.imass,this.b1.angvel-=this.b1.iinertia*(n*this.c1.r1x-t*this.c1.r1y),this.b2.velx+=t*this.b2.imass,this.b2.vely+=n*this.b2.imass,this.b2.angvel+=this.b2.iinertia*(n*this.c1.r2x-t*this.c1.r2y),this.hc2&&(t=this.nx*this.c2.jnAcc-this.ny*this.c2.jtAcc,n=this.ny*this.c2.jnAcc+this.nx*this.c2.jtAcc,this.b1.velx-=t*this.b1.imass,this.b1.vely-=n*this.b1.imass,this.b1.angvel-=this.b1.iinertia*(n*this.c2.r1x-t*this.c2.r1y),this.b2.velx+=t*this.b2.imass,this.b2.vely+=n*this.b2.imass,this.b2.angvel+=this.b2.iinertia*(n*this.c2.r2x-t*this.c2.r2y)),this.b2.angvel+=this.jrAcc*this.b2.iinertia,this.b1.angvel-=this.jrAcc*this.b1.iinertia}applyImpulseVel(){let t=this.k1x+this.b2.velx-this.c1.r2y*this.b2.angvel-(this.b1.velx-this.c1.r1y*this.b1.angvel),n=this.k1y+this.b2.vely+this.c1.r2x*this.b2.angvel-(this.b1.vely+this.c1.r1x*this.b1.angvel),s=(n*this.nx-t*this.ny+this.surfacex)*this.c1.tMass,i=this.c1.friction*this.c1.jnAcc,l=this.c1.jtAcc,r=l-s;r>i?r=i:r<-i&&(r=-i),s=r-l,this.c1.jtAcc=r;let a=-this.ny*s,o=this.nx*s;if(this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=this.rt1b*s*this.b2.iinertia,this.b1.angvel-=this.rt1a*s*this.b1.iinertia,this.hc2){let p=this.k2x+this.b2.velx-this.c2.r2y*this.b2.angvel-(this.b1.velx-this.c2.r1y*this.b1.angvel),c=this.k2y+this.b2.vely+this.c2.r2x*this.b2.angvel-(this.b1.vely+this.c2.r1x*this.b1.angvel);s=(c*this.nx-p*this.ny+this.surfacex)*this.c2.tMass,i=this.c2.friction*this.c2.jnAcc,l=this.c2.jtAcc,r=l-s,r>i?r=i:r<-i&&(r=-i),s=r-l,this.c2.jtAcc=r,a=-this.ny*s,o=this.nx*s,this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=this.rt2b*s*this.b2.iinertia,this.b1.angvel-=this.rt2a*s*this.b1.iinertia,t=this.k1x+this.b2.velx-this.c1.r2y*this.b2.angvel-(this.b1.velx-this.c1.r1y*this.b1.angvel),n=this.k1y+this.b2.vely+this.c1.r2x*this.b2.angvel-(this.b1.vely+this.c1.r1x*this.b1.angvel),p=this.k2x+this.b2.velx-this.c2.r2y*this.b2.angvel-(this.b1.velx-this.c2.r1y*this.b1.angvel),c=this.k2y+this.b2.vely+this.c2.r2x*this.b2.angvel-(this.b1.vely+this.c2.r1x*this.b1.angvel);let h=this.c1.jnAcc,u=this.c2.jnAcc,x=t*this.nx+n*this.ny+this.surfacey+this.c1.bounce-(this.Ka*h+this.Kb*u),y=p*this.nx+c*this.ny+this.surfacey+this.c2.bounce-(this.Kb*h+this.Kc*u),d=-(this.kMassa*x+this.kMassb*y),_=-(this.kMassb*x+this.kMassc*y);d>=0&&_>=0?(x=d-h,y=_-u,this.c1.jnAcc=d,this.c2.jnAcc=_):(d=-this.c1.nMass*x,d>=0&&this.Kb*d+y>=0?(x=d-h,y=-u,this.c1.jnAcc=d,this.c2.jnAcc=0):(_=-this.c2.nMass*y,_>=0&&this.Kb*_+x>=0?(x=-h,y=_-u,this.c1.jnAcc=0,this.c2.jnAcc=_):x>=0&&y>=0?(x=-h,y=-u,this.c1.jnAcc=this.c2.jnAcc=0):(x=0,y=0))),s=x+y,a=this.nx*s,o=this.ny*s,this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=(this.rn1b*x+this.rn2b*y)*this.b2.iinertia,this.b1.angvel-=(this.rn1a*x+this.rn2a*y)*this.b1.iinertia}else this.radius!=0&&(s=(this.b2.angvel-this.b1.angvel)*this.rMass,i=this.rfric*this.c1.jnAcc,l=this.jrAcc,this.jrAcc-=s,this.jrAcc>i?this.jrAcc=i:this.jrAcc<-i&&(this.jrAcc=-i),s=this.jrAcc-l,this.b2.angvel+=s*this.b2.iinertia,this.b1.angvel-=s*this.b1.iinertia),t=this.k1x+this.b2.velx-this.c1.r2y*this.b2.angvel-(this.b1.velx-this.c1.r1y*this.b1.angvel),n=this.k1y+this.b2.vely+this.c1.r2x*this.b2.angvel-(this.b1.vely+this.c1.r1x*this.b1.angvel),s=(this.c1.bounce+(this.nx*t+this.ny*n)+this.surfacey)*this.c1.nMass,l=this.c1.jnAcc,r=l-s,r<0&&(r=0),s=r-l,this.c1.jnAcc=r,a=this.nx*s,o=this.ny*s,this.b2.velx+=a*this.b2.imass,this.b2.vely+=o*this.b2.imass,this.b1.velx-=a*this.b1.imass,this.b1.vely-=o*this.b1.imass,this.b2.angvel+=this.rn1b*s*this.b2.iinertia,this.b1.angvel-=this.rn1a*s*this.b1.iinertia}applyImpulsePos(){let t=Ie._nape;this.ptype==2?this._applyImpulsePosCircle(t):this._applyImpulsePosEdge(t)}_applyImpulsePosCircle(t){let n=this.c1,s=this.b2.axisy*n.lr2x-this.b2.axisx*n.lr2y,i=n.lr2x*this.b2.axisx+n.lr2y*this.b2.axisy;s+=this.b2.posx,i+=this.b2.posy;let l=this.b1.axisy*n.lr1x-this.b1.axisx*n.lr1y,r=n.lr1x*this.b1.axisx+n.lr1y*this.b1.axisy;l+=this.b1.posx,r+=this.b1.posy;let a=s-l,o=i-r,p=Math.sqrt(a*a+o*o),c=this.radius-t.Config.collisionSlop,h=p-c;if(a*this.nx+o*this.ny<0&&(a=-a,o=-o,h-=this.radius),h<0)if(p<t.Config.epsilon)this.b1.smass!=0?this.b1.posx+=t.Config.epsilon*10:this.b2.posx+=t.Config.epsilon*10;else{let u=1/p;a*=u,o*=u;let x=.5*(l+s),y=.5*(r+i),d=p-c;l=x-this.b1.posx,r=y-this.b1.posy,s=x-this.b2.posx,i=y-this.b2.posy;let _=o*l-a*r,f=o*s-a*i,z=this.b2.smass+f*f*this.b2.sinertia+this.b1.smass+_*_*this.b1.sinertia;if(z!=0){let P=-this.biasCoef*d/z,k=a*P,m=o*P;this.b1.posx-=k*this.b1.imass,this.b1.posy-=m*this.b1.imass,wt._rotateBody(this.b1,-_*this.b1.iinertia*P),this.b2.posx+=k*this.b2.imass,this.b2.posy+=m*this.b2.imass,wt._rotateBody(this.b2,f*this.b2.iinertia*P)}}}_applyImpulsePosEdge(t){let n,s,i,l,r,a=0,o=0;this.ptype==0?(n=this.b1.axisy*this.lnormx-this.b1.axisx*this.lnormy,s=this.lnormx*this.b1.axisx+this.lnormy*this.b1.axisy,i=this.lproj+(n*this.b1.posx+s*this.b1.posy),l=this.b2.axisy*this.c1.lr1x-this.b2.axisx*this.c1.lr1y,r=this.c1.lr1x*this.b2.axisx+this.c1.lr1y*this.b2.axisy,l+=this.b2.posx,r+=this.b2.posy,this.hpc2&&(a=this.b2.axisy*this.c2.lr1x-this.b2.axisx*this.c2.lr1y,o=this.c2.lr1x*this.b2.axisx+this.c2.lr1y*this.b2.axisy,a+=this.b2.posx,o+=this.b2.posy)):(n=this.b2.axisy*this.lnormx-this.b2.axisx*this.lnormy,s=this.lnormx*this.b2.axisx+this.lnormy*this.b2.axisy,i=this.lproj+(n*this.b2.posx+s*this.b2.posy),l=this.b1.axisy*this.c1.lr1x-this.b1.axisx*this.c1.lr1y,r=this.c1.lr1x*this.b1.axisx+this.c1.lr1y*this.b1.axisy,l+=this.b1.posx,r+=this.b1.posy,this.hpc2&&(a=this.b1.axisy*this.c2.lr1x-this.b1.axisx*this.c2.lr1y,o=this.c2.lr1x*this.b1.axisx+this.c2.lr1y*this.b1.axisy,a+=this.b1.posx,o+=this.b1.posy));let p=l*n+r*s-i-this.radius;p+=t.Config.collisionSlop;let c=0;if(this.hpc2&&(c=a*n+o*s-i-this.radius,c+=t.Config.collisionSlop),p<0||c<0){this.rev&&(n=-n,s=-s);let h=l-this.b1.posx,u=r-this.b1.posy,x=l-this.b2.posx,y=r-this.b2.posy;if(this.hpc2){let d=a-this.b1.posx,_=o-this.b1.posy,f=a-this.b2.posx,z=o-this.b2.posy,P=s*h-n*u,k=s*x-n*y,m=s*d-n*_,b=s*f-n*z,M=this.b1.smass+this.b2.smass;this.kMassa=M+this.b1.sinertia*P*P+this.b2.sinertia*k*k,this.kMassb=M+this.b1.sinertia*P*m+this.b2.sinertia*k*b,this.kMassc=M+this.b1.sinertia*m*m+this.b2.sinertia*b*b;let v=this.kMassa,w=this.kMassb,O=this.kMassc,E=p*this.biasCoef,C=c*this.biasCoef;for(;;){let N=-E,Z=-C,S=this.kMassa*this.kMassc-this.kMassb*this.kMassb;if(S!==S)N=0,Z=0;else if(S==0)this.kMassa!=0?N/=this.kMassa:N=0,this.kMassc!=0?Z/=this.kMassc:Z=0;else{let A=1/S,F=A*(this.kMassc*N-this.kMassb*Z);Z=A*(this.kMassa*Z-this.kMassb*N),N=F}if(N>=0&&Z>=0){wt._applyPosImpulse2(this.b1,this.b2,n,s,N,Z,P,m,k,b);break}if(N=-E/v,Z=0,N>=0&&w*N+C>=0){wt._applyPosImpulse2(this.b1,this.b2,n,s,N,Z,P,m,k,b);break}if(N=0,Z=-C/O,Z>=0&&w*Z+E>=0){wt._applyPosImpulse2(this.b1,this.b2,n,s,N,Z,P,m,k,b);break}break}}else{let d=s*h-n*u,_=s*x-n*y,f=this.b2.smass+_*_*this.b2.sinertia+this.b1.smass+d*d*this.b1.sinertia;if(f!=0){let z=-this.biasCoef*p/f,P=n*z,k=s*z;this.b1.posx-=P*this.b1.imass,this.b1.posy-=k*this.b1.imass,wt._rotateBody(this.b1,-d*this.b1.iinertia*z),this.b2.posx+=P*this.b2.imass,this.b2.posy+=k*this.b2.imass,wt._rotateBody(this.b2,_*this.b2.iinertia*z)}}}}static _eraseFromList(t,n){let s,i;return n==null?(s=t.next,i=s.next,t.next=i,t.next==null&&(t.pushmod=!0)):(s=n.next,i=s.next,n.next=i,i==null&&(t.pushmod=!0)),s._inuse=!1,t.modified=!0,t.length--,t.pushmod=!0,i}static _rotateBody(t,n){if(t.rot+=n,n*n>1e-4)t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot);else{let s=n*n,i=1-.5*s,l=1-s*s/8,r=(i*t.axisx+n*t.axisy)*l;t.axisy=(i*t.axisy-n*t.axisx)*l,t.axisx=r}}static _applyPosImpulse2(t,n,s,i,l,r,a,o,p,c){let h=(l+r)*t.imass;t.posx-=s*h,t.posy-=i*h,wt._rotateBody(t,-t.iinertia*(a*l+o*r));let u=(l+r)*n.imass;n.posx+=s*u,n.posy+=i*u,wt._rotateBody(n,n.iinertia*(p*l+c*r))}};wt.FACE1=0,wt.FACE2=1,wt.CIRCLE=2,wt.zpp_pool=null;var ut=wt;var qt=class qt{constructor(){this.collisionGroup=1;this.collisionMask=-1;this.sensorGroup=1;this.sensorMask=-1;this.fluidGroup=1;this.fluidMask=-1;this.shapes=null;this.wrap_shapes=null;this.outer=null;this.userData=null;this.next=null;this.shapes=new qt._zpp.util.ZNPList_ZPP_Shape}wrapper(){if(this.outer==null)if(qt._wrapFn)this.outer=qt._wrapFn(this);else{this.outer=new qt._nape.dynamics.InteractionFilter;let e=this.outer.zpp_inner;e.outer=null,e.next=qt.zpp_pool,qt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer=null}alloc(){}feature_cons(){this.shapes=new qt._zpp.util.ZNPList_ZPP_Shape}addShape(e){this.shapes.add(e)}remShape(e){this.shapes.remove(e)}copy(){let e;return qt.zpp_pool==null?e=new qt:(e=qt.zpp_pool,qt.zpp_pool=e.next,e.next=null),e.collisionGroup=this.collisionGroup,e.collisionMask=this.collisionMask,e.sensorGroup=this.sensorGroup,e.sensorMask=this.sensorMask,e.fluidGroup=this.fluidGroup,e.fluidMask=this.fluidMask,e}shouldCollide(e){return(this.collisionMask&e.collisionGroup)!==0&&(e.collisionMask&this.collisionGroup)!==0}shouldSense(e){return(this.sensorMask&e.sensorGroup)!==0&&(e.sensorMask&this.sensorGroup)!==0}shouldFlow(e){return(this.fluidMask&e.fluidGroup)!==0&&(e.fluidMask&this.fluidGroup)!==0}invalidate(){let e=this.shapes.head;for(;e!=null;)e.elt.invalidate_filter(),e=e.next}};qt.zpp_pool=null,qt._nape=null,qt._zpp=null,qt._wrapFn=null;var st=qt;var Li=class Li{constructor(){this.outer=null;this.ignore=!1;this.group=null;this.groups=null;this.wrap_groups=null;this.interactors=null;this.wrap_interactors=null;this.depth=0;let e=Li._zpp;this.groups=new e.util.ZNPList_ZPP_InteractionGroup,this.interactors=new e.util.ZNPList_ZPP_Interactor}setGroup(e){this.group!==e&&(this.group!=null&&(this.group.groups.remove(this),this.depth=0,this.group.invalidate(!0)),this.group=e,e!=null?(e.groups.add(this),this.depth=e.depth+1,e.invalidate(!0)):this.invalidate(!0))}invalidate(e){if(e==null&&(e=!1),!(e||this.ignore))return;let t=this.interactors.head;for(;t!=null;){let s=t.elt;s.ibody!=null?s.ibody.wake():s.ishape!=null?s.ishape.body.wake():s.icompound.wake(),t=t.next}let n=this.groups.head;for(;n!=null;)n.elt.invalidate(e),n=n.next}addGroup(e){this.groups.add(e),e.depth=this.depth+1}remGroup(e){this.groups.remove(e),e.depth=0}addInteractor(e){this.interactors.add(e)}remInteractor(e,t){this.interactors.remove(e)}};Li.SHAPE=1,Li.BODY=2,Li._zpp=null,Li._wrapFn=null;var Rs=Li;var Xn=class{constructor(){this.zpp_inner=null;this.space=null;this._length=0;this.zip_length=!1;this.lengths=[];this.ite_0=null;this.ite_1=null;this.ite_2=null;this.ite_3=null;this.at_index_0=0;this.at_index_1=0;this.at_index_2=0;this.at_index_3=0;this.at_index_0=0,this.at_index_1=0,this.at_index_2=0,this.at_index_3=0,this.zip_length=!0,this._length=0,this.lengths=[],this.lengths.push(0),this.lengths.push(0),this.lengths.push(0),this.lengths.push(0)}zpp_gl(){if(this.zpp_vm(),this.zip_length){this._length=0;let e=0,t=0,n=this.space.c_arbiters_true.head;for(;n!=null;)n.elt.active&&++t,n=n.next;this.lengths[e++]=t,this._length+=t;let s=0,i=this.space.c_arbiters_false.head;for(;i!=null;)i.elt.active&&++s,i=i.next;this.lengths[e++]=s,this._length+=s;let l=0,r=this.space.f_arbiters.head;for(;r!=null;)r.elt.active&&++l,r=r.next;this.lengths[e++]=l,this._length+=l;let a=0,o=this.space.s_arbiters.head;for(;o!=null;)o.elt.active&&++a,o=o.next;this.lengths[e++]=a,this._length+=a,this.zip_length=!1}return this._length}zpp_vm(){let e=!1;this.space.c_arbiters_true.modified&&(e=!0,this.space.c_arbiters_true.modified=!1),this.space.c_arbiters_false.modified&&(e=!0,this.space.c_arbiters_false.modified=!1),this.space.f_arbiters.modified&&(e=!0,this.space.f_arbiters.modified=!1),this.space.s_arbiters.modified&&(e=!0,this.space.s_arbiters.modified=!1),e&&(this.zip_length=!0,this._length=0,this.ite_0=null,this.ite_1=null,this.ite_2=null,this.ite_3=null)}push(e){throw new Error("Error: ArbiterList is immutable")}pop(){throw new Error("Error: ArbiterList is immutable")}unshift(e){throw new Error("Error: ArbiterList is immutable")}shift(){throw new Error("Error: ArbiterList is immutable")}remove(e){throw new Error("Error: ArbiterList is immutable")}clear(){throw new Error("Error: ArbiterList is immutable")}at(e){if(this.zpp_vm(),e<0||e>=this.zpp_gl())throw new Error("Error: Index out of bounds");let t=null,n=0;if(t==null)if(e<n+this.lengths[0]){let s=e-n;if(s<this.at_index_0||this.ite_0==null)for(this.at_index_0=0,this.ite_0=this.space.c_arbiters_true.head;!this.ite_0.elt.active;)this.ite_0=this.ite_0.next;for(;this.at_index_0!=s;)for(this.at_index_0++,this.ite_0=this.ite_0.next;!this.ite_0.elt.active;)this.ite_0=this.ite_0.next;t=this.ite_0.elt.wrapper()}else n+=this.lengths[0];if(t==null)if(e<n+this.lengths[1]){let s=e-n;if(s<this.at_index_1||this.ite_1==null)for(this.at_index_1=0,this.ite_1=this.space.c_arbiters_false.head;!this.ite_1.elt.active;)this.ite_1=this.ite_1.next;for(;this.at_index_1!=s;)for(this.at_index_1++,this.ite_1=this.ite_1.next;!this.ite_1.elt.active;)this.ite_1=this.ite_1.next;t=this.ite_1.elt.wrapper()}else n+=this.lengths[1];if(t==null)if(e<n+this.lengths[2]){let s=e-n;if(s<this.at_index_2||this.ite_2==null)for(this.at_index_2=0,this.ite_2=this.space.f_arbiters.head;!this.ite_2.elt.active;)this.ite_2=this.ite_2.next;for(;this.at_index_2!=s;)for(this.at_index_2++,this.ite_2=this.ite_2.next;!this.ite_2.elt.active;)this.ite_2=this.ite_2.next;t=this.ite_2.elt.wrapper()}else n+=this.lengths[2];if(t==null)if(e<n+this.lengths[3]){let s=e-n;if(s<this.at_index_3||this.ite_3==null)for(this.at_index_3=0,this.ite_3=this.space.s_arbiters.head;!this.ite_3.elt.active;)this.ite_3=this.ite_3.next;for(;this.at_index_3!=s;)for(this.at_index_3++,this.ite_3=this.ite_3.next;!this.ite_3.elt.active;)this.ite_3=this.ite_3.next;t=this.ite_3.elt.wrapper()}else n+=this.lengths[3];return t}};Xn._nape=null,Xn._zpp=null;var Mt=class Mt{constructor(){this._invalidate=null;this._validate=null;this._immutable=!1;this.outer=null;this.next=null;this.minx=0;this.miny=0;this.maxx=0;this.maxy=0;this.wrap_min=null;this.wrap_max=null}static get(e,t,n,s){let i;return Mt.zpp_pool==null?i=new Mt:(i=Mt.zpp_pool,Mt.zpp_pool=i.next,i.next=null),i.minx=e,i.miny=t,i.maxx=n,i.maxy=s,i}validate(){this._validate!=null&&this._validate()}invalidate(){this._invalidate!=null&&this._invalidate(this)}wrapper(){if(this.outer==null)if(Mt._wrapFn)this.outer=Mt._wrapFn(this);else{this.outer=new Mt._nape.geom.AABB;let e=this.outer.zpp_inner;e.outer!=null&&(e.outer.zpp_inner=null,e.outer=null),e.wrap_min=e.wrap_max=null,e._invalidate=null,e._validate=null,e.next=Mt.zpp_pool,Mt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}alloc(){}free(){this.outer!=null&&(this.outer.zpp_inner=null,this.outer=null),this.wrap_min=this.wrap_max=null,this._invalidate=null,this._validate=null}copy(){return Mt.get(this.minx,this.miny,this.maxx,this.maxy)}width(){return this.maxx-this.minx}height(){return this.maxy-this.miny}perimeter(){return(this.maxx-this.minx+(this.maxy-this.miny))*2}static _makeVec2Wrapper(e,t){let n=Mt._zpp,s=Mt._nape;if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let i;if(n.util.ZPP_PubPool.poolVec2==null?i=new s.geom.Vec2:(i=n.util.ZPP_PubPool.poolVec2,n.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==n.util.ZPP_PubPool.nextVec2&&(n.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;n.geom.ZPP_Vec2.zpp_pool==null?l=new n.geom.ZPP_Vec2:(l=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=e,l.y=t,i.zpp_inner=l,i.zpp_inner.outer=i}else{if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");l._validate!=null&&l._validate(),(l.x!==e||l.y!==t)&&(l.x=e,l.y=t,l._invalidate!=null&&l._invalidate(l))}return i.zpp_inner.weak=!1,i}getmin(){this.wrap_min==null&&(this.wrap_min=Mt._makeVec2Wrapper(this.minx,this.miny),this.wrap_min.zpp_inner._inuse=!0,this._immutable?this.wrap_min.zpp_inner._immutable=!0:this.wrap_min.zpp_inner._invalidate=this.mod_min.bind(this),this.wrap_min.zpp_inner._validate=this.dom_min.bind(this))}dom_min(){this._validate!=null&&this._validate(),this.wrap_min.zpp_inner.x=this.minx,this.wrap_min.zpp_inner.y=this.miny}mod_min(e){(e.x!==this.minx||e.y!==this.miny)&&(this.minx=e.x,this.miny=e.y,this._invalidate!=null&&this._invalidate(this))}getmax(){this.wrap_max==null&&(this.wrap_max=Mt._makeVec2Wrapper(this.maxx,this.maxy),this.wrap_max.zpp_inner._inuse=!0,this._immutable?this.wrap_max.zpp_inner._immutable=!0:this.wrap_max.zpp_inner._invalidate=this.mod_max.bind(this),this.wrap_max.zpp_inner._validate=this.dom_max.bind(this))}dom_max(){this._validate!=null&&this._validate(),this.wrap_max.zpp_inner.x=this.maxx,this.wrap_max.zpp_inner.y=this.maxy}mod_max(e){(e.x!==this.maxx||e.y!==this.maxy)&&(this.maxx=e.x,this.maxy=e.y,this._invalidate!=null&&this._invalidate(this))}intersectX(e){return!(e.minx>this.maxx||this.minx>e.maxx)}intersectY(e){return!(e.miny>this.maxy||this.miny>e.maxy)}intersect(e){return e.miny<=this.maxy&&this.miny<=e.maxy&&e.minx<=this.maxx&&this.minx<=e.maxx}combine(e){e.minx<this.minx&&(this.minx=e.minx),e.maxx>this.maxx&&(this.maxx=e.maxx),e.miny<this.miny&&(this.miny=e.miny),e.maxy>this.maxy&&(this.maxy=e.maxy)}contains(e){return e.minx>=this.minx&&e.miny>=this.miny&&e.maxx<=this.maxx&&e.maxy<=this.maxy}containsPoint(e){return e.x>=this.minx&&e.x<=this.maxx&&e.y>=this.miny&&e.y<=this.maxy}setCombine(e,t){this.minx=e.minx<t.minx?e.minx:t.minx,this.miny=e.miny<t.miny?e.miny:t.miny,this.maxx=e.maxx>t.maxx?e.maxx:t.maxx,this.maxy=e.maxy>t.maxy?e.maxy:t.maxy}setExpand(e,t){this.minx=e.minx-t,this.miny=e.miny-t,this.maxx=e.maxx+t,this.maxy=e.maxy+t}setExpandPoint(e,t){e<this.minx&&(this.minx=e),e>this.maxx&&(this.maxx=e),t<this.miny&&(this.miny=t),t>this.maxy&&(this.maxy=t)}toString(){return"{ x: "+this.minx+" y: "+this.miny+" w: "+(this.maxx-this.minx)+" h: "+(this.maxy-this.miny)+" }"}};Mt.zpp_pool=null,Mt._nape=null,Mt._zpp=null,Mt._wrapFn=null;var fe=Mt;var be=class be{static _initStatics(e){be.flowpoly=new e.util.ZNPList_ZPP_Vec2,be.flowsegs=new e.util.ZNPList_ZPP_Vec2}static circleContains(e,t){let n=t.x-e.worldCOMx,s=t.y-e.worldCOMy;return n*n+s*s<e.radius*e.radius}static polyContains(e,t){let n;n=!0;let s=e.edges.head;for(;s!=null;){let i=s.elt;if(i.gnormx*t.x+i.gnormy*t.y<=i.gprojection){s=s.next;continue}else{n=!1;break}}return n}static shapeContains(e,t){return e.type==0?be.circleContains(e.circle,t):e.type==1?be.polyContains(e.polygon,t):be.capsuleContains(e.capsule,t)}static bodyContains(e,t){let n;n=!1;let s=e.shapes.head;for(;s!=null;){let i=s.elt;if(be.shapeContains(i,t)){n=!0;break}s=s.next}return n}static containTest(e,t){let n=e.aabb,s=t.aabb;if(s.minx>=n.minx&&s.miny>=n.miny&&s.maxx<=n.maxx&&s.maxy<=n.maxy)if(e.type==0)if(t.type==0){let i=e.circle.radius+-t.circle.radius,l=t.circle.worldCOMx-e.circle.worldCOMx,r=t.circle.worldCOMy-e.circle.worldCOMy;return l*l+r*r<=i*i}else if(t.type==1){let i;i=!0;let l=t.polygon.gverts.next;for(;l!=null;){let r=l,a=e.circle.radius,o=r.x-e.circle.worldCOMx,p=r.y-e.circle.worldCOMy;if(o*o+p*p<=a*a){l=l.next;continue}else{i=!1;break}}return i}else{let i=t.capsule,l=e.circle.radius-i.radius;if(l<0)return!1;let r=l*l,a=i.spine1x-e.circle.worldCOMx,o=i.spine1y-e.circle.worldCOMy;if(a*a+o*o>r)return!1;let p=i.spine2x-e.circle.worldCOMx,c=i.spine2y-e.circle.worldCOMy;return p*p+c*c<=r}else if(e.type==2)if(t.type==0){let i=e.capsule,l=be._closestT(i.spine1x,i.spine1y,i.spine2x,i.spine2y,t.circle.worldCOMx,t.circle.worldCOMy),r=i.spine1x+l*(i.spine2x-i.spine1x),a=i.spine1y+l*(i.spine2y-i.spine1y),o=i.radius-t.circle.radius;if(o<0)return!1;let p=t.circle.worldCOMx-r,c=t.circle.worldCOMy-a;return p*p+c*c<=o*o}else return!1;else if(t.type==0){let i;i=!0;let l=e.polygon.edges.head;for(;l!=null;){let r=l.elt;if(r.gnormx*t.circle.worldCOMx+r.gnormy*t.circle.worldCOMy+t.circle.radius<=r.gprojection){l=l.next;continue}else{i=!1;break}}return i}else{let i;i=!0;let l=e.polygon.edges.head;for(;l!=null;){let r=l.elt,a=-1e100,o=t.polygon.gverts.next;for(;o!=null;){let p=o,c=r.gnormx*p.x+r.gnormy*p.y;c>a&&(a=c),o=o.next}if(a<=r.gprojection){l=l.next;continue}else{i=!1;break}}return i}else return!1}static contactCollide(e,t,n,s){let i=me();if(t.type==2)return be._capsuleContactCollide(e,t,n,s,i);if(e.type==2)return be._capsuleContactCollide(t,e,n,!s,i);if(t.type==1)if(e.type==1){let l=!0,r=-1e100,a=-1e100,o=-1,p=null,c=null,h=e.polygon.edges.head;for(;h!=null;){let u=h.elt,x=1e100,y=t.polygon.gverts.next;for(;y!=null;){let d=y,_=u.gnormx*d.x+u.gnormy*d.y;if(_<x&&(x=_),x-u.gprojection<=r)break;y=y.next}if(x-=u.gprojection,x>=0){l=!1;break}x>r&&(r=x,p=u,o=1),h=h.next}if(l){let u=t.polygon.edges.head;for(;u!=null;){let x=u.elt,y=1e100,d=e.polygon.gverts.next;for(;d!=null;){let _=d,f=x.gnormx*_.x+x.gnormy*_.y;if(f<y&&(y=f),y-x.gprojection<=r)break;d=d.next}if(y-=x.gprojection,y>=0){l=!1;break}y>r&&(r=y,c=x,o=2),u=u.next}if(l){let x,y,d,_;o==1?(x=e.polygon,y=t.polygon,d=p,_=1):(x=t.polygon,y=e.polygon,d=c,_=-1);let f=null,z=1e100,P=y.edges.head;for(;P!=null;){let J=P.elt,R=d.gnormx*J.gnormx+d.gnormy*J.gnormy;R<z&&(z=R,f=J),P=P.next}let k=f.gp0.x,m=f.gp0.y,b=f.gp1.x,M=f.gp1.y,v=b-k,w=M-m,O=d.gnormy*k-d.gnormx*m,E=d.gnormy*b-d.gnormx*M,C=1/(E-O),N=(-d.tp1-O)*C;if(N>i.Config.epsilon){let J=N;k+=v*J,m+=w*J}let Z=(-d.tp0-E)*C;if(Z<-i.Config.epsilon){let J=Z;b+=v*J,M+=w*J}let S=_,A=d.gnormx*S,F=d.gnormy*S;n.lnormx=d.lnormx,n.lnormy=d.lnormy,n.lproj=d.lprojection,n.radius=0,n.rev=s!=(_==-1),n.ptype=n.rev?1:0;let B=k*d.gnormx+m*d.gnormy-d.gprojection,G=b*d.gnormx+M*d.gnormy-d.gprojection;if(B>0&&G>0)return!1;{s&&(A=-A,F=-F);let J=k-d.gnormx*B*.5,R=m-d.gnormy*B*.5,T=n.rev?1:0,V=B>0;V==null&&(V=!1);let W=null,$=n.contacts.next;for(;$!=null;){let K=$;if(T==K.hash){W=K;break}$=$.next}if(W==null){we.zpp_pool==null?W=new we:(W=we.zpp_pool,we.zpp_pool=W.next,W.next=null);let K=W.inner;K.jnAcc=K.jtAcc=0,W.hash=T,W.fresh=!0,W.arbiter=n,n.jrAcc=0;let ne=n.contacts;W._inuse=!0;let re=W;re.next=ne.next,ne.next=re,ne.modified=!0,ne.length++,n.innards.add(K)}else W.fresh=!1;W.px=J,W.py=R,n.nx=A,n.ny=F,W.dist=B,W.stamp=n.stamp,W.posOnly=V;let Y=W,X=1;k-=y.body.posx*X,m-=y.body.posy*X,Y.inner.lr1x=k*y.body.axisy+m*y.body.axisx,Y.inner.lr1y=m*y.body.axisy-k*y.body.axisx;let ee=b-d.gnormx*G*.5,q=M-d.gnormy*G*.5,L=n.rev?0:1,D=G>0;D==null&&(D=!1);let I=null,U=n.contacts.next;for(;U!=null;){let K=U;if(L==K.hash){I=K;break}U=U.next}if(I==null){we.zpp_pool==null?I=new we:(I=we.zpp_pool,we.zpp_pool=I.next,I.next=null);let K=I.inner;K.jnAcc=K.jtAcc=0,I.hash=L,I.fresh=!0,I.arbiter=n,n.jrAcc=0;let ne=n.contacts;I._inuse=!0;let re=I;re.next=ne.next,ne.next=re,ne.modified=!0,ne.length++,n.innards.add(K)}else I.fresh=!1;I.px=ee,I.py=q,n.nx=A,n.ny=F,I.dist=G,I.stamp=n.stamp,I.posOnly=D,Y=I;let H=1;return b-=y.body.posx*H,M-=y.body.posy*H,Y.inner.lr1x=b*y.body.axisy+M*y.body.axisx,Y.inner.lr1y=M*y.body.axisy-b*y.body.axisx,o==1?(n.__ref_edge1=d,n.__ref_edge2=f):(n.__ref_edge2=d,n.__ref_edge1=f),!0}}else return!1}else return!1}else{let l=-1e100,r=-1e100,a=!0,o=null,p=null,c=t.polygon.gverts.next,h=t.polygon.edges.head;for(;h!=null;){let u=h.elt,x=u.gnormx*e.circle.worldCOMx+u.gnormy*e.circle.worldCOMy-u.gprojection-e.circle.radius;if(x>0){a=!1;break}x>l&&(l=x,o=u,p=c),c=c.next,h=h.next}if(a){let u=p,x=p.next==null?t.polygon.gverts.next:p.next,y=e.circle.worldCOMy*o.gnormx-e.circle.worldCOMx*o.gnormy;if(y<=u.y*o.gnormx-u.x*o.gnormy){let d=e.circle.radius,_=u.x-e.circle.worldCOMx,f=u.y-e.circle.worldCOMy,z=_*_+f*f,P;if(z>d*d)P=null;else if(z<i.Config.epsilon*i.Config.epsilon){let k=e.circle.worldCOMx,m=e.circle.worldCOMy,b=null,M=n.contacts.next;for(;M!=null;){let v=M;if(v.hash==0){b=v;break}M=M.next}if(b==null){we.zpp_pool==null?b=new we:(b=we.zpp_pool,we.zpp_pool=b.next,b.next=null);let v=b.inner;v.jnAcc=v.jtAcc=0,b.hash=0,b.fresh=!0,b.arbiter=n,n.jrAcc=0;let w=n.contacts;b._inuse=!0;let O=b;O.next=w.next,w.next=O,w.modified=!0,w.length++,n.innards.add(v)}else b.fresh=!1;b.px=k,b.py=m,n.nx=1,n.ny=0,b.dist=-d,b.stamp=n.stamp,b.posOnly=!1,P=b}else{let k=1/Math.sqrt(z),m=k<i.Config.epsilon?1e100:1/k,b=.5+(e.circle.radius-.5*d)*k;if(s){let M=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let C=n.contacts;w._inuse=!0;let N=w;N.next=C.next,C.next=N,C.modified=!0,C.length++,n.innards.add(E)}else w.fresh=!1;w.px=M,w.py=v,n.nx=-_*k,n.ny=-f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}else{let M=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let C=n.contacts;w._inuse=!0;let N=w;N.next=C.next,C.next=N,C.modified=!0,C.length++,n.innards.add(E)}else w.fresh=!1;w.px=M,w.py=v,n.nx=_*k,n.ny=f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}}if(P!=null){let k=P.inner;n.ptype=2;let m=u.x-t.polygon.body.posx,b=u.y-t.polygon.body.posy;n.__ref_edge1=o,n.__ref_vertex=-1,s?(k.lr1x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr1y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr2x=e.circle.localCOMx,k.lr2y=e.circle.localCOMy):(k.lr2x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr2y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr1x=e.circle.localCOMx,k.lr1y=e.circle.localCOMy),n.radius=e.circle.radius}return P!=null}else if(y>=x.y*o.gnormx-x.x*o.gnormy){let d=e.circle.radius,_=x.x-e.circle.worldCOMx,f=x.y-e.circle.worldCOMy,z=_*_+f*f,P;if(z>d*d)P=null;else if(z<i.Config.epsilon*i.Config.epsilon){let k=e.circle.worldCOMx,m=e.circle.worldCOMy,b=null,M=n.contacts.next;for(;M!=null;){let v=M;if(v.hash==0){b=v;break}M=M.next}if(b==null){we.zpp_pool==null?b=new we:(b=we.zpp_pool,we.zpp_pool=b.next,b.next=null);let v=b.inner;v.jnAcc=v.jtAcc=0,b.hash=0,b.fresh=!0,b.arbiter=n,n.jrAcc=0;let w=n.contacts;b._inuse=!0;let O=b;O.next=w.next,w.next=O,w.modified=!0,w.length++,n.innards.add(v)}else b.fresh=!1;b.px=k,b.py=m,n.nx=1,n.ny=0,b.dist=-d,b.stamp=n.stamp,b.posOnly=!1,P=b}else{let k=1/Math.sqrt(z),m=k<i.Config.epsilon?1e100:1/k,b=.5+(e.circle.radius-.5*d)*k;if(s){let M=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let C=n.contacts;w._inuse=!0;let N=w;N.next=C.next,C.next=N,C.modified=!0,C.length++,n.innards.add(E)}else w.fresh=!1;w.px=M,w.py=v,n.nx=-_*k,n.ny=-f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}else{let M=e.circle.worldCOMx+_*b,v=e.circle.worldCOMy+f*b,w=null,O=n.contacts.next;for(;O!=null;){let E=O;if(E.hash==0){w=E;break}O=O.next}if(w==null){we.zpp_pool==null?w=new we:(w=we.zpp_pool,we.zpp_pool=w.next,w.next=null);let E=w.inner;E.jnAcc=E.jtAcc=0,w.hash=0,w.fresh=!0,w.arbiter=n,n.jrAcc=0;let C=n.contacts;w._inuse=!0;let N=w;N.next=C.next,C.next=N,C.modified=!0,C.length++,n.innards.add(E)}else w.fresh=!1;w.px=M,w.py=v,n.nx=_*k,n.ny=f*k,w.dist=m-d,w.stamp=n.stamp,w.posOnly=!1,P=w}}if(P!=null){let k=P.inner;n.ptype=2;let m=x.x-t.polygon.body.posx,b=x.y-t.polygon.body.posy;n.__ref_edge1=o,n.__ref_vertex=1,s?(k.lr1x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr1y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr2x=e.circle.localCOMx,k.lr2y=e.circle.localCOMy):(k.lr2x=m*t.polygon.body.axisy+b*t.polygon.body.axisx,k.lr2y=b*t.polygon.body.axisy-m*t.polygon.body.axisx,k.lr1x=e.circle.localCOMx,k.lr1y=e.circle.localCOMy),n.radius=e.circle.radius}return P!=null}else{let d=e.circle.radius+l*.5,_=o.gnormx*d,f=o.gnormy*d,z=e.circle.worldCOMx-_,P=e.circle.worldCOMy-f,k;if(s){let m=o.gnormx,b=o.gnormy,M=null,v=n.contacts.next;for(;v!=null;){let w=v;if(w.hash==0){M=w;break}v=v.next}if(M==null){we.zpp_pool==null?M=new we:(M=we.zpp_pool,we.zpp_pool=M.next,M.next=null);let w=M.inner;w.jnAcc=w.jtAcc=0,M.hash=0,M.fresh=!0,M.arbiter=n,n.jrAcc=0;let O=n.contacts;M._inuse=!0;let E=M;E.next=O.next,O.next=E,O.modified=!0,O.length++,n.innards.add(w)}else M.fresh=!1;M.px=z,M.py=P,n.nx=m,n.ny=b,M.dist=l,M.stamp=n.stamp,M.posOnly=!1,k=M}else{let m=-o.gnormx,b=-o.gnormy,M=null,v=n.contacts.next;for(;v!=null;){let w=v;if(w.hash==0){M=w;break}v=v.next}if(M==null){we.zpp_pool==null?M=new we:(M=we.zpp_pool,we.zpp_pool=M.next,M.next=null);let w=M.inner;w.jnAcc=w.jtAcc=0,M.hash=0,M.fresh=!0,M.arbiter=n,n.jrAcc=0;let O=n.contacts;M._inuse=!0;let E=M;E.next=O.next,O.next=E,O.modified=!0,O.length++,n.innards.add(w)}else M.fresh=!1;M.px=z,M.py=P,n.nx=m,n.ny=b,M.dist=l,M.stamp=n.stamp,M.posOnly=!1,k=M}return n.ptype=s?0:1,n.lnormx=o.lnormx,n.lnormy=o.lnormy,n.rev=!s,n.lproj=o.lprojection,n.radius=e.circle.radius,k.inner.lr1x=e.circle.localCOMx,k.inner.lr1y=e.circle.localCOMy,n.__ref_edge1=o,n.__ref_vertex=0,!0}}else return!1}else{let l=e.circle.radius+t.circle.radius,r=t.circle.worldCOMx-e.circle.worldCOMx,a=t.circle.worldCOMy-e.circle.worldCOMy,o=r*r+a*a,p;if(o>l*l)p=null;else if(o<i.Config.epsilon*i.Config.epsilon){let c=e.circle.worldCOMx,h=e.circle.worldCOMy,u=null,x=n.contacts.next;for(;x!=null;){let y=x;if(y.hash==0){u=y;break}x=x.next}if(u==null){we.zpp_pool==null?u=new we:(u=we.zpp_pool,we.zpp_pool=u.next,u.next=null);let y=u.inner;y.jnAcc=y.jtAcc=0,u.hash=0,u.fresh=!0,u.arbiter=n,n.jrAcc=0;let d=n.contacts;u._inuse=!0;let _=u;_.next=d.next,d.next=_,d.modified=!0,d.length++,n.innards.add(y)}else u.fresh=!1;u.px=c,u.py=h,n.nx=1,n.ny=0,u.dist=-l,u.stamp=n.stamp,u.posOnly=!1,p=u}else{let c=1/Math.sqrt(o),h=c<i.Config.epsilon?1e100:1/c,u=.5+(e.circle.radius-.5*l)*c;if(s){let x=e.circle.worldCOMx+r*u,y=e.circle.worldCOMy+a*u,d=null,_=n.contacts.next;for(;_!=null;){let f=_;if(f.hash==0){d=f;break}_=_.next}if(d==null){we.zpp_pool==null?d=new we:(d=we.zpp_pool,we.zpp_pool=d.next,d.next=null);let f=d.inner;f.jnAcc=f.jtAcc=0,d.hash=0,d.fresh=!0,d.arbiter=n,n.jrAcc=0;let z=n.contacts;d._inuse=!0;let P=d;P.next=z.next,z.next=P,z.modified=!0,z.length++,n.innards.add(f)}else d.fresh=!1;d.px=x,d.py=y,n.nx=-r*c,n.ny=-a*c,d.dist=h-l,d.stamp=n.stamp,d.posOnly=!1,p=d}else{let x=e.circle.worldCOMx+r*u,y=e.circle.worldCOMy+a*u,d=null,_=n.contacts.next;for(;_!=null;){let f=_;if(f.hash==0){d=f;break}_=_.next}if(d==null){we.zpp_pool==null?d=new we:(d=we.zpp_pool,we.zpp_pool=d.next,d.next=null);let f=d.inner;f.jnAcc=f.jtAcc=0,d.hash=0,d.fresh=!0,d.arbiter=n,n.jrAcc=0;let z=n.contacts;d._inuse=!0;let P=d;P.next=z.next,z.next=P,z.modified=!0,z.length++,n.innards.add(f)}else d.fresh=!1;d.px=x,d.py=y,n.nx=r*c,n.ny=a*c,d.dist=h-l,d.stamp=n.stamp,d.posOnly=!1,p=d}}if(p!=null){let c=p.inner;return s?(c.lr1x=t.circle.localCOMx,c.lr1y=t.circle.localCOMy,c.lr2x=e.circle.localCOMx,c.lr2y=e.circle.localCOMy):(c.lr1x=e.circle.localCOMx,c.lr1y=e.circle.localCOMy,c.lr2x=t.circle.localCOMx,c.lr2y=t.circle.localCOMy),n.radius=e.circle.radius+t.circle.radius,n.ptype=2,!0}else return!1}}static testCollide_safe(e,t){let n=me();if(e.type>t.type){let s=e;e=t,t=s}return be.testCollide(e,t)}static testCollide(e,t){let n=me();if(t.type==2)return be._capsuleTestCollide(e,t);if(t.type==1)if(e.type==1){let s=!0,i=e.polygon.edges.head;for(;i!=null;){let l=i.elt,r=1e100,a=t.polygon.gverts.next;for(;a!=null;){let o=a,p=l.gnormx*o.x+l.gnormy*o.y;p<r&&(r=p),a=a.next}if(r-=l.gprojection,r>0){s=!1;break}i=i.next}if(s){let l=t.polygon.edges.head;for(;l!=null;){let r=l.elt,a=1e100,o=e.polygon.gverts.next;for(;o!=null;){let p=o,c=r.gnormx*p.x+r.gnormy*p.y;c<a&&(a=c),o=o.next}if(a-=r.gprojection,a>0){s=!1;break}l=l.next}return s}else return!1}else{let s=null,i=null,l=!0,r=-1e100,a=t.polygon.gverts.next,o=t.polygon.edges.head;for(;o!=null;){let p=o.elt,c=p.gnormx*e.circle.worldCOMx+p.gnormy*e.circle.worldCOMy-p.gprojection-e.circle.radius;if(c>0){l=!1;break}c>r&&(r=c,s=p,i=a),a=a.next,o=o.next}if(l){let p=i,c=i.next==null?t.polygon.gverts.next:i.next,h=e.circle.worldCOMy*s.gnormx-e.circle.worldCOMx*s.gnormy;if(h<=p.y*s.gnormx-p.x*s.gnormy){let u=e.circle.radius,x=p.x-e.circle.worldCOMx,y=p.y-e.circle.worldCOMy;return x*x+y*y<=u*u}else if(h>=c.y*s.gnormx-c.x*s.gnormy){let u=e.circle.radius,x=c.x-e.circle.worldCOMx,y=c.y-e.circle.worldCOMy;return x*x+y*y<=u*u}else return!0}else return!1}else{let s=e.circle.radius+t.circle.radius,i=t.circle.worldCOMx-e.circle.worldCOMx,l=t.circle.worldCOMy-e.circle.worldCOMy;return i*i+l*l<=s*s}}static flowCollide(e,t,n){let s=me();if(e.type==2||t.type==2)return be._capsuleFlowCollide(e,t,n,s);if(t.type==1)if(e.type==1){let i=[],l=[],r=!0,a=!0,o=e.polygon.edges.head;for(;o!=null;){let p=o.elt,c=1e100,h=0,u=t.polygon.gverts.next;for(;u!=null;){let x=u,y=p.gnormx*x.x+p.gnormy*x.y;y<c&&(c=y),y>=p.gprojection+s.Config.epsilon&&(l[h]=!0,a=!1),++h,u=u.next}if(c-=p.gprojection,c>0){r=!1;break}o=o.next}if(a){let p=t.polygon;if(p.zip_worldCOM&&p.body!=null){if(p.zip_worldCOM=!1,p.zip_localCOM){if(p.zip_localCOM=!1,p.type==1){let h=p.polygon;if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(h.lverts.next.next==null)h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;else if(h.lverts.next.next.next==null){h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;let u=1;h.localCOMx+=h.lverts.next.next.x*u,h.localCOMy+=h.lverts.next.next.y*u;let x=.5;h.localCOMx*=x,h.localCOMy*=x}else{h.localCOMx=0,h.localCOMy=0;let u=0,x=h.lverts.next,y=x;x=x.next;let d=x;for(x=x.next;x!=null;){let m=x;u+=d.x*(m.y-y.y);let b=m.y*d.x-m.x*d.y;h.localCOMx+=(d.x+m.x)*b,h.localCOMy+=(d.y+m.y)*b,y=d,d=m,x=x.next}x=h.lverts.next;let _=x;u+=d.x*(_.y-y.y);let f=_.y*d.x-_.x*d.y;h.localCOMx+=(d.x+_.x)*f,h.localCOMy+=(d.y+_.y)*f,y=d,d=_,x=x.next;let z=x;u+=d.x*(z.y-y.y);let P=z.y*d.x-z.x*d.y;h.localCOMx+=(d.x+z.x)*P,h.localCOMy+=(d.y+z.y)*P,u=1/(3*u);let k=u;h.localCOMx*=k,h.localCOMy*=k}}p.wrap_localCOM!=null&&(p.wrap_localCOM.zpp_inner.x=p.localCOMx,p.wrap_localCOM.zpp_inner.y=p.localCOMy)}let c=p.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),p.worldCOMx=p.body.posx+(p.body.axisy*p.localCOMx-p.body.axisx*p.localCOMy),p.worldCOMy=p.body.posy+(p.localCOMx*p.body.axisx+p.localCOMy*p.body.axisy)}return n.overlap=t.polygon.area,n.centroidx=t.polygon.worldCOMx,n.centroidy=t.polygon.worldCOMy,!0}else if(r){a=!0;let p=t.polygon.edges.head;for(;p!=null;){let c=p.elt,h=1e100,u=0,x=e.polygon.gverts.next;for(;x!=null;){let y=x,d=c.gnormx*y.x+c.gnormy*y.y;d<h&&(h=d),d>=c.gprojection+s.Config.epsilon&&(i[u]=!0,a=!1),++u,x=x.next}if(h-=c.gprojection,h>0){r=!1;break}p=p.next}if(a){let c=e.polygon;if(c.zip_worldCOM&&c.body!=null){if(c.zip_worldCOM=!1,c.zip_localCOM){if(c.zip_localCOM=!1,c.type==1){let u=c.polygon;if(u.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(u.lverts.next.next==null)u.localCOMx=u.lverts.next.x,u.localCOMy=u.lverts.next.y;else if(u.lverts.next.next.next==null){u.localCOMx=u.lverts.next.x,u.localCOMy=u.lverts.next.y;let x=1;u.localCOMx+=u.lverts.next.next.x*x,u.localCOMy+=u.lverts.next.next.y*x;let y=.5;u.localCOMx*=y,u.localCOMy*=y}else{u.localCOMx=0,u.localCOMy=0;let x=0,y=u.lverts.next,d=y;y=y.next;let _=y;for(y=y.next;y!=null;){let b=y;x+=_.x*(b.y-d.y);let M=b.y*_.x-b.x*_.y;u.localCOMx+=(_.x+b.x)*M,u.localCOMy+=(_.y+b.y)*M,d=_,_=b,y=y.next}y=u.lverts.next;let f=y;x+=_.x*(f.y-d.y);let z=f.y*_.x-f.x*_.y;u.localCOMx+=(_.x+f.x)*z,u.localCOMy+=(_.y+f.y)*z,d=_,_=f,y=y.next;let P=y;x+=_.x*(P.y-d.y);let k=P.y*_.x-P.x*_.y;u.localCOMx+=(_.x+P.x)*k,u.localCOMy+=(_.y+P.y)*k,x=1/(3*x);let m=x;u.localCOMx*=m,u.localCOMy*=m}}c.wrap_localCOM!=null&&(c.wrap_localCOM.zpp_inner.x=c.localCOMx,c.wrap_localCOM.zpp_inner.y=c.localCOMy)}let h=c.body;h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot)),c.worldCOMx=c.body.posx+(c.body.axisy*c.localCOMx-c.body.axisx*c.localCOMy),c.worldCOMy=c.body.posy+(c.localCOMx*c.body.axisx+c.localCOMy*c.body.axisy)}return n.overlap=e.polygon.area,n.centroidx=e.polygon.worldCOMx,n.centroidy=e.polygon.worldCOMy,!0}else if(r){for(;be.flowpoly.head!=null;){let P=be.flowpoly.pop_unsafe();if(!P._inuse){let k=P;k.outer!=null&&(k.outer.zpp_inner=null,k.outer=null),k._isimmutable=null,k._validate=null,k._invalidate=null,k.next=le.zpp_pool,le.zpp_pool=k}}let c=null,h=!1,u=e.polygon.gverts.next,x=0,y=t.polygon.gverts.next,d=0,_=0,f=t.polygon.edgeCnt;for(;_<f;){let P=_++;if(l[P])y=y.next;else{d=P;break}}if(y==null){y=t.polygon.gverts.next,h=!0;let P=0,k=e.polygon.edgeCnt;for(;P<k;){let m=P++;if(i[m])u=u.next;else{x=m;break}}u==null?u=e.polygon.gverts.next:(be.flowpoly.add(u),c=be.flowpoly.head.elt)}else be.flowpoly.add(y),c=be.flowpoly.head.elt;let z=1;if(be.flowpoly.head==null){let P=!0,k=e.polygon.gverts.next,m=k,b=k.next;for(;b!=null;){let M=b,v=2,w=!0,O=t.polygon.gverts.next,E=O,C=O.next;for(;C!=null;){let N=C,Z=0,S=m.x-E.x,A=m.y-E.y,F=M.x-m.x,B=M.y-m.y,G=N.x-E.x,J=N.y-E.y,R=B*G-F*J,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(J*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let W=(B*S-F*A)*R;W>s.Config.epsilon&&W<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O),O=C,E=N,C=C.next}if(w)for(;;){C=t.polygon.gverts.next;let N=C,Z=0,S=m.x-E.x,A=m.y-E.y,F=M.x-m.x,B=M.y-m.y,G=N.x-E.x,J=N.y-E.y,R=B*G-F*J,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(J*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let W=(B*S-F*A)*R;W>s.Config.epsilon&&W<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O);break}if(v!=2){let N=v,Z=m.x+(M.x-m.x)*N,S=m.y+(M.y-m.y)*N,A;le.zpp_pool==null?A=new le:(A=le.zpp_pool,le.zpp_pool=A.next,A.next=null),A.weak=!1,A._immutable=!1,A.x=Z,A.y=S,c=A,be.flowpoly.add(c),h=!0,u=k,P=!1;break}k=b,m=M,b=b.next}if(P)for(;;){b=e.polygon.gverts.next;let M=b,v=2,w=!0,O=t.polygon.gverts.next,E=O,C=O.next;for(;C!=null;){let N=C,Z=0,S=m.x-E.x,A=m.y-E.y,F=M.x-m.x,B=M.y-m.y,G=N.x-E.x,J=N.y-E.y,R=B*G-F*J,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(J*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let W=(B*S-F*A)*R;W>s.Config.epsilon&&W<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O),O=C,E=N,C=C.next}if(w)for(;;){C=t.polygon.gverts.next;let N=C,Z=0,S=m.x-E.x,A=m.y-E.y,F=M.x-m.x,B=M.y-m.y,G=N.x-E.x,J=N.y-E.y,R=B*G-F*J,T;if(R*R>s.Config.epsilon*s.Config.epsilon){R=1/R;let V=(J*S-G*A)*R;if(V>s.Config.epsilon&&V<1-s.Config.epsilon){let W=(B*S-F*A)*R;W>s.Config.epsilon&&W<1-s.Config.epsilon?(Z=V,T=!0):T=!1}else T=!1}else T=!1;T&&Z<v&&(v=Z,y=O);break}if(v!=2){let N=v,Z=m.x+(M.x-m.x)*N,S=m.y+(M.y-m.y)*N,A;le.zpp_pool==null?A=new le:(A=le.zpp_pool,le.zpp_pool=A.next,A.next=null),A.weak=!1,A._immutable=!1,A.x=Z,A.y=S,c=A,be.flowpoly.add(c),h=!0,u=k;break}break}z=2}for(;;)if(h)if(u=u.next,++x,u==null&&(u=e.polygon.gverts.next,x=0),i[x]){let P=be.flowpoly.head.elt,k=u,m=y,b=y.next;b==null&&(b=t.polygon.gverts.next);let M=-1,v=null,w=0,O=0,E=b,C=b;for(;;){let T=C,V=0,W=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,q=k.y-P.y,L=X*ee-Y*q,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(q*W-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*W-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=M)if(v=y,w=d,++O==z){M=V,C=E;break}else M=V;m=T,y=C,++d,d>=t.polygon.edgeCnt&&(d=0),C=C.next,C==null&&(C=t.polygon.gverts.next);break}for(;C!=E;){let T=C,V=0,W=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,q=k.y-P.y,L=X*ee-Y*q,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(q*W-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*W-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=M)if(v=y,w=d,++O==z){M=V;break}else M=V;m=T,y=C,++d,d>=t.polygon.edgeCnt&&(d=0),C=C.next,C==null&&(C=t.polygon.gverts.next)}if(v==null)break;let N=v,Z=v.next;Z==null&&(Z=t.polygon.gverts.next);let S=Z,A=M,F=N.x+(S.x-N.x)*A,B=N.y+(S.y-N.y)*A,G;if(c!=null){let T=F-c.x,V=B-c.y;G=T*T+V*V<s.Config.epsilon}else G=!1;if(G)break;let J=be.flowpoly,R;le.zpp_pool==null?R=new le:(R=le.zpp_pool,le.zpp_pool=R.next,R.next=null),R.weak=!1,R._immutable=!1,R.x=F,R.y=B,J.add(R),c==null&&(c=be.flowpoly.head.elt),y=v,d=w,h=!h,z=2}else{let P=u,k;if(c!=null){let m=P.x-c.x,b=P.y-c.y;k=m*m+b*b<s.Config.epsilon}else k=!1;if(k)break;be.flowpoly.add(P),c==null&&(c=be.flowpoly.head.elt),z=1}else if(y=y.next,++d,y==null&&(y=t.polygon.gverts.next,d=0),l[d]){let P=be.flowpoly.head.elt,k=y,m=u,b=u.next;b==null&&(b=e.polygon.gverts.next);let M=-1,v=null,w=0,O=0,E=b,C=b;for(;;){let T=C,V=0,W=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,q=k.y-P.y,L=X*ee-Y*q,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(q*W-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*W-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=M)if(v=u,w=x,++O==z){M=V,C=E;break}else M=V;m=T,u=C,++x,x>=e.polygon.edgeCnt&&(x=0),C=C.next,C==null&&(C=e.polygon.gverts.next);break}for(;C!=E;){let T=C,V=0,W=m.x-P.x,$=m.y-P.y,Y=T.x-m.x,X=T.y-m.y,ee=k.x-P.x,q=k.y-P.y,L=X*ee-Y*q,D;if(L*L>s.Config.epsilon*s.Config.epsilon){L=1/L;let I=(q*W-ee*$)*L;if(I>s.Config.epsilon&&I<1-s.Config.epsilon){let U=(X*W-Y*$)*L;U>s.Config.epsilon&&U<1-s.Config.epsilon?(V=I,D=!0):D=!1}else D=!1}else D=!1;if(D&&V>=M)if(v=u,w=x,++O==z){M=V;break}else M=V;m=T,u=C,++x,x>=e.polygon.edgeCnt&&(x=0),C=C.next,C==null&&(C=e.polygon.gverts.next)}if(v==null)break;let N=v,Z=v.next;Z==null&&(Z=e.polygon.gverts.next);let S=Z,A=M,F=N.x+(S.x-N.x)*A,B=N.y+(S.y-N.y)*A,G;if(c!=null){let T=F-c.x,V=B-c.y;G=T*T+V*V<s.Config.epsilon}else G=!1;if(G)break;let J=be.flowpoly,R;le.zpp_pool==null?R=new le:(R=le.zpp_pool,le.zpp_pool=R.next,R.next=null),R.weak=!1,R._immutable=!1,R.x=F,R.y=B,J.add(R),c==null&&(c=be.flowpoly.head.elt),u=v,x=w,h=!h,z=2}else{let P=y,k;if(c!=null){let m=P.x-c.x,b=P.y-c.y;k=m*m+b*b<s.Config.epsilon}else k=!1;if(k)break;be.flowpoly.add(P),c==null&&(c=be.flowpoly.head.elt),z=1}if(be.flowpoly.head!=null&&be.flowpoly.head.next!=null&&be.flowpoly.head.next.next!=null){let P=0,k=0,m=0,b=be.flowpoly.head,M=b.elt;b=b.next;let v=b.elt;for(b=b.next;b!=null;){let S=b.elt;P+=v.x*(S.y-M.y);let A=S.y*v.x-S.x*v.y;k+=(v.x+S.x)*A,m+=(v.y+S.y)*A,M=v,v=S,b=b.next}b=be.flowpoly.head;let w=b.elt;P+=v.x*(w.y-M.y);let O=w.y*v.x-w.x*v.y;k+=(v.x+w.x)*O,m+=(v.y+w.y)*O,M=v,v=w,b=b.next;let E=b.elt;P+=v.x*(E.y-M.y);let C=E.y*v.x-E.x*v.y;k+=(v.x+E.x)*C,m+=(v.y+E.y)*C,P*=.5;let Z=1/(6*P);return k*=Z,m*=Z,n.overlap=-P,n.centroidx=k,n.centroidy=m,!0}else return!1}else return!1}else return!1}else{let i=[],l=!0,r=null,a=null,o=-1e100,p=!0,c=t.polygon.gverts.next,h=0,u=t.polygon.edges.head;for(;u!=null;){let x=u.elt,y=x.gnormx*e.circle.worldCOMx+x.gnormy*e.circle.worldCOMy;if(y>x.gprojection+e.circle.radius){p=!1;break}else y+e.circle.radius>x.gprojection+s.Config.epsilon&&(l=!1,i[h]=!0);y-=x.gprojection+e.circle.radius,y>o&&(o=y,r=x,a=c),c=c.next,++h,u=u.next}if(p){if(l)return n.overlap=e.circle.area,n.centroidx=e.circle.worldCOMx,n.centroidy=e.circle.worldCOMy,!0;{let x=a,y=a.next==null?t.polygon.gverts.next:a.next,d=e.circle.worldCOMy*r.gnormx-e.circle.worldCOMx*r.gnormy,_;if(d<=x.y*r.gnormx-x.x*r.gnormy){let f=e.circle.radius,z=x.x-e.circle.worldCOMx,P=x.y-e.circle.worldCOMy;_=z*z+P*P<=f*f}else if(d>=y.y*r.gnormx-y.x*r.gnormy){let f=e.circle.radius,z=y.x-e.circle.worldCOMx,P=y.y-e.circle.worldCOMy;_=z*z+P*P<=f*f}else _=!0;if(_){let f=[],z=0,P=!0,k=null,m=0,b=t.polygon.gverts.next;for(;b!=null;){let M=b,v=M.x-e.circle.worldCOMx,w=M.y-e.circle.worldCOMy,O=v*v+w*w;(f[z]=O<=e.circle.radius*e.circle.radius)?(m=z,k=b):P=!1,++z,b=b.next}if(P){let M=t.polygon;if(M.zip_worldCOM&&M.body!=null){if(M.zip_worldCOM=!1,M.zip_localCOM){if(M.zip_localCOM=!1,M.type==1){let w=M.polygon;if(w.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(w.lverts.next.next==null)w.localCOMx=w.lverts.next.x,w.localCOMy=w.lverts.next.y;else if(w.lverts.next.next.next==null){w.localCOMx=w.lverts.next.x,w.localCOMy=w.lverts.next.y;let O=1;w.localCOMx+=w.lverts.next.next.x*O,w.localCOMy+=w.lverts.next.next.y*O;let E=.5;w.localCOMx*=E,w.localCOMy*=E}else{w.localCOMx=0,w.localCOMy=0;let O=0,E=w.lverts.next,C=E;E=E.next;let N=E;for(E=E.next;E!=null;){let G=E;O+=N.x*(G.y-C.y);let J=G.y*N.x-G.x*N.y;w.localCOMx+=(N.x+G.x)*J,w.localCOMy+=(N.y+G.y)*J,C=N,N=G,E=E.next}E=w.lverts.next;let Z=E;O+=N.x*(Z.y-C.y);let S=Z.y*N.x-Z.x*N.y;w.localCOMx+=(N.x+Z.x)*S,w.localCOMy+=(N.y+Z.y)*S,C=N,N=Z,E=E.next;let A=E;O+=N.x*(A.y-C.y);let F=A.y*N.x-A.x*N.y;w.localCOMx+=(N.x+A.x)*F,w.localCOMy+=(N.y+A.y)*F,O=1/(3*O);let B=O;w.localCOMx*=B,w.localCOMy*=B}}M.wrap_localCOM!=null&&(M.wrap_localCOM.zpp_inner.x=M.localCOMx,M.wrap_localCOM.zpp_inner.y=M.localCOMy)}let v=M.body;v.zip_axis&&(v.zip_axis=!1,v.axisx=Math.sin(v.rot),v.axisy=Math.cos(v.rot)),M.worldCOMx=M.body.posx+(M.body.axisy*M.localCOMx-M.body.axisx*M.localCOMy),M.worldCOMy=M.body.posy+(M.localCOMx*M.body.axisx+M.localCOMy*M.body.axisy)}return n.overlap=t.polygon.area,n.centroidx=t.polygon.worldCOMx,n.centroidy=t.polygon.worldCOMy,!0}else{for(;be.flowpoly.head!=null;){let w=be.flowpoly.pop_unsafe();if(!w._inuse){let O=w;O.outer!=null&&(O.outer.zpp_inner=null,O.outer=null),O._isimmutable=null,O._validate=null,O._invalidate=null,O.next=le.zpp_pool,le.zpp_pool=O}}be.flowsegs.clear();let M=null,v=1;for(k==null?(k=t.polygon.gverts.next,v=2):(M=k,be.flowpoly.add(M));v!=0;)if(v==1)if(k=k.next,k==null&&(k=t.polygon.gverts.next),++m,m>=t.polygon.edgeCnt&&(m=0),f[m]){let w=M.x-k.x,O=M.y-k.y;if(w*w+O*O<s.Config.epsilon)break;be.flowpoly.add(k)}else{let w=be.flowpoly.head.elt,O=k,E=O.x-w.x,C=O.y-w.y,N=w.x-e.circle.worldCOMx,Z=w.y-e.circle.worldCOMy,S=E*E+C*C,A=2*(N*E+Z*C),F=N*N+Z*Z-e.circle.radius*e.circle.radius,B=Math.sqrt(A*A-4*S*F);S=1/(2*S);let G=(-A-B)*S,J=G<s.Config.epsilon?(-A+B)*S:G,R=0,T=0,V=J;R=w.x+(O.x-w.x)*V,T=w.y+(O.y-w.y)*V;let W=M.x-R,$=M.y-T;if(W*W+$*$<s.Config.epsilon)break;let Y=be.flowpoly,X;le.zpp_pool==null?X=new le:(X=le.zpp_pool,le.zpp_pool=X.next,X.next=null),X.weak=!1,X._immutable=!1,X.x=R,X.y=T,Y.add(X),v=2}else if(v==2){let w=k.next;w==null&&(w=t.polygon.gverts.next);let O=k;v=0;let E=w,C=w;for(;;){let N=C,Z=m+1;if(Z==t.polygon.edgeCnt&&(Z=0),i[m])if(f[Z]){let S=N.x-O.x,A=N.y-O.y,F=O.x-e.circle.worldCOMx,B=O.y-e.circle.worldCOMy,G=S*S+A*A,J=2*(F*S+B*A),R=F*F+B*B-e.circle.radius*e.circle.radius,T=Math.sqrt(J*J-4*G*R);G=1/(2*G);let V=(-J-T)*G,W=V<s.Config.epsilon?(-J+T)*G:V,$=0,Y=0,X=W;$=O.x+(N.x-O.x)*X,Y=O.y+(N.y-O.y)*X;let ee=M.x-$,q=M.y-Y;if(ee*ee+q*q<s.Config.epsilon){v=0,C=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=$,L.y=Y;let D=L;be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D),be.flowpoly.add(D),v=1,C=E;break}else{let S=0,A=0,F=N.x-O.x,B=N.y-O.y,G=O.x-e.circle.worldCOMx,J=O.y-e.circle.worldCOMy,R=F*F+B*B,T=2*(G*F+J*B),V=G*G+J*J-e.circle.radius*e.circle.radius,W=T*T-4*R*V,$;if(W*W<s.Config.epsilon?(W<0?S=10:(A=-T/(2*R),S=A),$=!1):(W=Math.sqrt(W),R=1/(2*R),S=(-T-W)*R,A=(-T+W)*R,$=!0),S<1-s.Config.epsilon&&A>s.Config.epsilon){let Y=0,X=0,ee=S;Y=O.x+(N.x-O.x)*ee,X=O.y+(N.y-O.y)*ee;let q;if(M!=null){let I=M.x-Y,U=M.y-X;q=I*I+U*U<s.Config.epsilon}else q=!1;if(q){v=0,C=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=Y,L.y=X;let D=L;if(be.flowpoly.head!=null&&(be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D)),be.flowpoly.add(D),M==null&&(M=be.flowpoly.head.elt),$){let I=0,U=0,H=A;I=O.x+(N.x-O.x)*H,U=O.y+(N.y-O.y)*H;let K=be.flowpoly,ne;le.zpp_pool==null?ne=new le:(ne=le.zpp_pool,le.zpp_pool=ne.next,ne.next=null),ne.weak=!1,ne._immutable=!1,ne.x=I,ne.y=U,K.add(ne)}}}O=N,k=C,m=Z,C=C.next,C==null&&(C=t.polygon.gverts.next);break}for(;C!=E;){let N=C,Z=m+1;if(Z==t.polygon.edgeCnt&&(Z=0),i[m])if(f[Z]){let S=N.x-O.x,A=N.y-O.y,F=O.x-e.circle.worldCOMx,B=O.y-e.circle.worldCOMy,G=S*S+A*A,J=2*(F*S+B*A),R=F*F+B*B-e.circle.radius*e.circle.radius,T=Math.sqrt(J*J-4*G*R);G=1/(2*G);let V=(-J-T)*G,W=V<s.Config.epsilon?(-J+T)*G:V,$=0,Y=0,X=W;$=O.x+(N.x-O.x)*X,Y=O.y+(N.y-O.y)*X;let ee=M.x-$,q=M.y-Y;if(ee*ee+q*q<s.Config.epsilon){v=0,C=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=$,L.y=Y;let D=L;be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D),be.flowpoly.add(D),v=1,C=E;break}else{let S=0,A=0,F=N.x-O.x,B=N.y-O.y,G=O.x-e.circle.worldCOMx,J=O.y-e.circle.worldCOMy,R=F*F+B*B,T=2*(G*F+J*B),V=G*G+J*J-e.circle.radius*e.circle.radius,W=T*T-4*R*V,$;if(W*W<s.Config.epsilon?(W<0?S=10:(A=-T/(2*R),S=A),$=!1):(W=Math.sqrt(W),R=1/(2*R),S=(-T-W)*R,A=(-T+W)*R,$=!0),S<1-s.Config.epsilon&&A>s.Config.epsilon){let Y=0,X=0,ee=S;Y=O.x+(N.x-O.x)*ee,X=O.y+(N.y-O.y)*ee;let q;if(M!=null){let I=M.x-Y,U=M.y-X;q=I*I+U*U<s.Config.epsilon}else q=!1;if(q){v=0,C=E;break}let L;le.zpp_pool==null?L=new le:(L=le.zpp_pool,le.zpp_pool=L.next,L.next=null),L.weak=!1,L._immutable=!1,L.x=Y,L.y=X;let D=L;if(be.flowpoly.head!=null&&(be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(D)),be.flowpoly.add(D),M==null&&(M=be.flowpoly.head.elt),$){let I=0,U=0,H=A;I=O.x+(N.x-O.x)*H,U=O.y+(N.y-O.y)*H;let K=be.flowpoly,ne;le.zpp_pool==null?ne=new le:(ne=le.zpp_pool,le.zpp_pool=ne.next,ne.next=null),ne.weak=!1,ne._immutable=!1,ne.x=I,ne.y=U,K.add(ne)}}}O=N,k=C,m=Z,C=C.next,C==null&&(C=t.polygon.gverts.next)}}if(be.flowpoly.head==null)return!1;if(be.flowpoly.head.next==null){let w=!0,O=t.polygon.edges.head;for(;O!=null;){let E=O.elt;if(E.gnormx*e.circle.worldCOMx+E.gnormy*e.circle.worldCOMy>E.gprojection){w=!1;break}O=O.next}return w?(n.overlap=e.circle.area,n.centroidx=e.circle.worldCOMx,n.centroidy=e.circle.worldCOMy,!0):!1}else{let w=0,O=0,E=0;if(be.flowpoly.head.next.next!=null){let N=0,Z=0,S=0;N=0;let A=be.flowpoly.head,F=A.elt;A=A.next;let B=A.elt;for(A=A.next;A!=null;){let Y=A.elt;N+=B.x*(Y.y-F.y);let X=Y.y*B.x-Y.x*B.y;Z+=(B.x+Y.x)*X,S+=(B.y+Y.y)*X,F=B,B=Y,A=A.next}A=be.flowpoly.head;let G=A.elt;N+=B.x*(G.y-F.y);let J=G.y*B.x-G.x*B.y;Z+=(B.x+G.x)*J,S+=(B.y+G.y)*J,F=B,B=G,A=A.next;let R=A.elt;N+=B.x*(R.y-F.y);let T=R.y*B.x-R.x*B.y;Z+=(B.x+R.x)*T,S+=(B.y+R.y)*T,N*=.5;let W=1/(6*N);Z*=W,S*=W;let $=-N;w+=Z*$,O+=S*$,E-=N}else be.flowsegs.add(be.flowpoly.head.elt),be.flowsegs.add(be.flowpoly.head.next.elt);for(;be.flowsegs.head!=null;){let N=be.flowsegs.pop_unsafe(),Z=be.flowsegs.pop_unsafe(),S=Z.x-N.x,A=Z.y-N.y,F=S,B=A,G=F*F+B*B,R=1/Math.sqrt(G);F*=R,B*=R;let T=F;F=-B,B=T;let V=N.x+Z.x,W=N.y+Z.y,$=.5;V*=$,W*=$;let Y=1;V-=e.circle.worldCOMx*Y,W-=e.circle.worldCOMy*Y;let X=F*V+B*W,ee=0,q=0,L=X,D=L/e.circle.radius,I=Math.sqrt(1-D*D),U=Math.acos(D);ee=e.circle.radius*(e.circle.radius*U-L*I),q=.6666666666666666*e.circle.radius*I*I*I/(U-D*I),V=e.circle.worldCOMx,W=e.circle.worldCOMy;let H=q;V+=F*H,W+=B*H;let K=ee;w+=V*K,O+=W*K,E+=ee}let C=1/E;return w*=C,O*=C,n.overlap=E,n.centroidx=w,n.centroidy=O,!0}}}else return!1}}else return!1}else{let i=e.circle,l=t.circle,r=l.worldCOMx-i.worldCOMx,a=l.worldCOMy-i.worldCOMy,o=i.radius+l.radius,p=r*r+a*a;if(p>o*o)return!1;if(p<s.Config.epsilon*s.Config.epsilon)return i.radius<l.radius?(n.overlap=i.area,n.centroidx=i.worldCOMx,n.centroidy=i.worldCOMy):(n.overlap=l.area,n.centroidx=l.worldCOMx,n.centroidy=l.worldCOMy),!0;{let c=Math.sqrt(p),h=1/c,u=.5*(c-(l.radius*l.radius-i.radius*i.radius)*h);if(u<=-i.radius)n.overlap=i.area,n.centroidx=i.worldCOMx,n.centroidy=i.worldCOMy;else{let x=c-u;if(x<=-l.radius)n.overlap=l.area,n.centroidx=l.worldCOMx,n.centroidy=l.worldCOMy;else{let y=0,d=0,_=0,f=0,z=u,P=z/i.radius,k=Math.sqrt(1-P*P),m=Math.acos(P);y=i.radius*(i.radius*m-z*k),d=.6666666666666666*i.radius*k*k*k/(m-P*k);let b=x,M=b/l.radius,v=Math.sqrt(1-M*M),w=Math.acos(M);_=l.radius*(l.radius*w-b*v),f=.6666666666666666*l.radius*v*v*v/(w-M*v);let O=y+_,E=(d*y+(c-f)*_)/O*h;n.overlap=O,n.centroidx=i.worldCOMx+r*E,n.centroidy=i.worldCOMy+a*E}}return!0}}}static capsuleContains(e,t){let n=be._closestT(e.spine1x,e.spine1y,e.spine2x,e.spine2y,t.x,t.y),s=e.spine1x+n*(e.spine2x-e.spine1x),i=e.spine1y+n*(e.spine2y-e.spine1y),l=t.x-s,r=t.y-i;return l*l+r*r<e.radius*e.radius}static _closestT(e,t,n,s,i,l){let r=n-e,a=s-t,o=r*r+a*a;if(o<1e-12)return 0;let p=((i-e)*r+(l-t)*a)/o;return p<0&&(p=0),p>1&&(p=1),p}static _closestTT(e,t,n,s,i,l,r,a){let o=n-e,p=s-t,c=r-i,h=a-l,u=e-i,x=t-l,y=o*o+p*p,d=c*c+h*h,_=c*u+h*x,f,z;if(y<1e-12&&d<1e-12)return[0,0];if(y<1e-12)return f=0,z=_/d,z<0&&(z=0),z>1&&(z=1),[f,z];let P=o*u+p*x;if(d<1e-12)return z=0,f=-P/y,f<0&&(f=0),f>1&&(f=1),[f,z];let k=o*c+p*h,m=y*d-k*k;return m>1e-12?(f=(k*_-P*d)/m,f<0&&(f=0),f>1&&(f=1)):f=0,z=(k*f+_)/d,z<0?(z=0,f=-P/y,f<0&&(f=0),f>1&&(f=1)):z>1&&(z=1,f=(k-P)/y,f<0&&(f=0),f>1&&(f=1)),[f,z]}static _getOrCreateContact(e,t,n){let s=null,i=e.contacts.next;for(;i!=null;){if(t==i.hash){s=i;break}i=i.next}if(s==null){we.zpp_pool==null?s=new we:(s=we.zpp_pool,we.zpp_pool=s.next,s.next=null);let l=s.inner;l.jnAcc=l.jtAcc=0,s.hash=t,s.fresh=!0,s.arbiter=e,e.jrAcc=0;let r=e.contacts;s._inuse=!0;let a=s;a.next=r.next,r.next=a,r.modified=!0,r.length++,e.innards.add(l)}else s.fresh=!1;return s}static _capsuleContactCollide(e,t,n,s,i){let l=t.capsule;return e.type==0?be._circleCapsuleContact(e.circle,l,n,s,i):e.type==1?be._polyCapsuleContact(e.polygon,l,n,s,i):be._capsuleCapsuleContact(e.capsule,l,n,s,i)}static _circleCapsuleContact(e,t,n,s,i){let l=be._closestT(t.spine1x,t.spine1y,t.spine2x,t.spine2y,e.worldCOMx,e.worldCOMy),r=t.spine1x+l*(t.spine2x-t.spine1x),a=t.spine1y+l*(t.spine2y-t.spine1y),o=e.radius+t.radius,p=e.worldCOMx-r,c=e.worldCOMy-a,h=p*p+c*c;if(h>o*o)return!1;let u;if(h<i.Config.epsilon*i.Config.epsilon){let x=(e.worldCOMx+r)*.5,y=(e.worldCOMy+a)*.5;u=be._getOrCreateContact(n,0,n.stamp),u.px=x,u.py=y,n.nx=1,n.ny=0,u.dist=-o,u.stamp=n.stamp,u.posOnly=!1}else{let x=1/Math.sqrt(h),y=x<i.Config.epsilon?1e100:1/x,d=.5+(e.radius-.5*o)*x,_=e.worldCOMx-p*d,f=e.worldCOMy-c*d;u=be._getOrCreateContact(n,0,n.stamp),u.px=_,u.py=f,s?(n.nx=p*x,n.ny=c*x):(n.nx=-p*x,n.ny=-c*x),u.dist=y-o,u.stamp=n.stamp,u.posOnly=!1}if(u!=null){let x=u.inner,y=t.localCOMx+(2*l-1)*t.halfLength;return s?(x.lr1x=y,x.lr1y=t.localCOMy,x.lr2x=e.localCOMx,x.lr2y=e.localCOMy):(x.lr1x=e.localCOMx,x.lr1y=e.localCOMy,x.lr2x=y,x.lr2y=t.localCOMy),n.radius=o,n.ptype=2,!0}return!1}static _capsuleCapsuleContact(e,t,n,s,i){let[l,r]=be._closestTT(e.spine1x,e.spine1y,e.spine2x,e.spine2y,t.spine1x,t.spine1y,t.spine2x,t.spine2y),a=e.spine1x+l*(e.spine2x-e.spine1x),o=e.spine1y+l*(e.spine2y-e.spine1y),p=t.spine1x+r*(t.spine2x-t.spine1x),c=t.spine1y+r*(t.spine2y-t.spine1y),h=e.radius+t.radius,u=p-a,x=c-o,y=u*u+x*x;if(y>h*h)return!1;let d;if(y<i.Config.epsilon*i.Config.epsilon){let _=(a+p)*.5,f=(o+c)*.5;d=be._getOrCreateContact(n,0,n.stamp),d.px=_,d.py=f,n.nx=1,n.ny=0,d.dist=-h,d.stamp=n.stamp,d.posOnly=!1}else{let _=1/Math.sqrt(y),f=_<i.Config.epsilon?1e100:1/_,z=.5+(e.radius-.5*h)*_,P=a+u*z,k=o+x*z;d=be._getOrCreateContact(n,0,n.stamp),d.px=P,d.py=k,s?(n.nx=-u*_,n.ny=-x*_):(n.nx=u*_,n.ny=x*_),d.dist=f-h,d.stamp=n.stamp,d.posOnly=!1}if(d!=null){let _=d.inner,f=e.localCOMx+(2*l-1)*e.halfLength,z=t.localCOMx+(2*r-1)*t.halfLength;s?(_.lr1x=z,_.lr1y=t.localCOMy,_.lr2x=f,_.lr2y=e.localCOMy):(_.lr1x=f,_.lr1y=e.localCOMy,_.lr2x=z,_.lr2y=t.localCOMy);let P=e.spine2x-e.spine1x,k=e.spine2y-e.spine1y,m=t.spine2x-t.spine1x,b=t.spine2y-t.spine1y,M=P*b-k*m,v=P*P+k*k,w=m*m+b*b;if(M*M<.01*v*w&&v>1e-12&&w>1e-12){let O=l<.5?1:0,E=e.spine1x+O*(e.spine2x-e.spine1x),C=e.spine1y+O*(e.spine2y-e.spine1y),N=be._closestT(t.spine1x,t.spine1y,t.spine2x,t.spine2y,E,C),Z=t.spine1x+N*(t.spine2x-t.spine1x),S=t.spine1y+N*(t.spine2y-t.spine1y),A=Z-E,F=S-C,B=A*A+F*F;if(B<=h*h&&B>i.Config.epsilon*i.Config.epsilon){let G=1/Math.sqrt(B),J=1/G,R=.5+(e.radius-.5*h)*G,T=be._getOrCreateContact(n,1,n.stamp);T.px=E+A*R,T.py=C+F*R,T.dist=J-h,T.stamp=n.stamp,T.posOnly=!1;let V=T.inner,W=e.localCOMx+(2*O-1)*e.halfLength,$=t.localCOMx+(2*N-1)*t.halfLength;s?(V.lr1x=$,V.lr1y=t.localCOMy,V.lr2x=W,V.lr2y=e.localCOMy):(V.lr1x=W,V.lr1y=e.localCOMy,V.lr2x=$,V.lr2y=t.localCOMy)}}return n.radius=h,n.ptype=2,!0}return!1}static _polyCapsuleContact(e,t,n,s,i){let l=-1e100,r=null,a=null,o=0,p=!0,c=e.gverts.next,h=e.edges.head;for(;h!=null;){let f=h.elt,z=f.gnormx*t.spine1x+f.gnormy*t.spine1y,P=f.gnormx*t.spine2x+f.gnormy*t.spine2y,m=(z<P?z:P)-f.gprojection-t.radius;if(m>0){p=!1;break}m>l&&(l=m,r=f,a=c,o=z<P?0:1),c=c.next,h=h.next}if(!p)return!1;let u=t.spine1x+o*(t.spine2x-t.spine1x),x=t.spine1y+o*(t.spine2y-t.spine1y),y=a,d=a.next==null?e.gverts.next:a.next,_=x*r.gnormx-u*r.gnormy;if(_<=y.y*r.gnormx-y.x*r.gnormy){let f=y.x-u,z=y.y-x,P=f*f+z*z;if(P>t.radius*t.radius)return!1;if(P<i.Config.epsilon*i.Config.epsilon){let N=be._getOrCreateContact(n,0,n.stamp);N.px=u,N.py=x,n.nx=s?-r.gnormx:r.gnormx,n.ny=s?-r.gnormy:r.gnormy,N.dist=-t.radius,N.stamp=n.stamp,N.posOnly=!1;let Z=N.inner,S=t.localCOMx+(2*o-1)*t.halfLength;return s?(Z.lr1x=S,Z.lr1y=t.localCOMy,Z.lr2x=0,Z.lr2y=0):(Z.lr1x=0,Z.lr1y=0,Z.lr2x=S,Z.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,!0}let k=1/Math.sqrt(P),m=1/k,b=f*k,M=z*k,v=u+b*t.radius,w=x+M*t.radius,O=be._getOrCreateContact(n,0,n.stamp);O.px=v,O.py=w,n.nx=s?-b:b,n.ny=s?-M:M,O.dist=m-t.radius,O.stamp=n.stamp,O.posOnly=!1;let E=O.inner,C=t.localCOMx+(2*o-1)*t.halfLength;return s?(E.lr1x=C,E.lr1y=t.localCOMy,E.lr2x=0,E.lr2y=0):(E.lr1x=0,E.lr1y=0,E.lr2x=C,E.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,n.__ref_edge1=r,n.__ref_vertex=0,!0}else if(_>=d.y*r.gnormx-d.x*r.gnormy){let f=d.x-u,z=d.y-x,P=f*f+z*z;if(P>t.radius*t.radius)return!1;if(P<i.Config.epsilon*i.Config.epsilon){let N=be._getOrCreateContact(n,0,n.stamp);N.px=u,N.py=x,n.nx=s?-r.gnormx:r.gnormx,n.ny=s?-r.gnormy:r.gnormy,N.dist=-t.radius,N.stamp=n.stamp,N.posOnly=!1;let Z=N.inner,S=t.localCOMx+(2*o-1)*t.halfLength;return s?(Z.lr1x=S,Z.lr1y=t.localCOMy,Z.lr2x=0,Z.lr2y=0):(Z.lr1x=0,Z.lr1y=0,Z.lr2x=S,Z.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,!0}let k=1/Math.sqrt(P),m=1/k,b=f*k,M=z*k,v=u+b*t.radius,w=x+M*t.radius,O=be._getOrCreateContact(n,0,n.stamp);O.px=v,O.py=w,n.nx=s?-b:b,n.ny=s?-M:M,O.dist=m-t.radius,O.stamp=n.stamp,O.posOnly=!1;let E=O.inner,C=t.localCOMx+(2*o-1)*t.halfLength;return s?(E.lr1x=C,E.lr1y=t.localCOMy,E.lr2x=0,E.lr2y=0):(E.lr1x=0,E.lr1y=0,E.lr2x=C,E.lr2y=t.localCOMy),n.radius=t.radius,n.ptype=0,n.__ref_edge1=r,n.__ref_vertex=0,!0}else{n.nx=s?-r.gnormx:r.gnormx,n.ny=s?-r.gnormy:r.gnormy;let f=be._getOrCreateContact(n,0,n.stamp);f.px=u+r.gnormx*(l*.5+t.radius),f.py=x+r.gnormy*(l*.5+t.radius),f.dist=l,f.stamp=n.stamp,f.posOnly=!1;let z=f.inner,P=t.localCOMx+(2*o-1)*t.halfLength;s?(z.lr1x=P,z.lr1y=t.localCOMy,z.lr2x=0,z.lr2y=0):(z.lr1x=0,z.lr1y=0,z.lr2x=P,z.lr2y=t.localCOMy);let k=1-o,m=t.spine1x+k*(t.spine2x-t.spine1x),b=t.spine1y+k*(t.spine2y-t.spine1y),M=b*r.gnormx-m*r.gnormy,v=y.y*r.gnormx-y.x*r.gnormy,w=d.y*r.gnormx-d.x*r.gnormy;if(M>v&&M<w){let E=r.gnormx*m+r.gnormy*b-r.gprojection-t.radius;if(E<=0){let C=be._getOrCreateContact(n,1,n.stamp);C.px=m+r.gnormx*(E*.5+t.radius),C.py=b+r.gnormy*(E*.5+t.radius),C.dist=E,C.stamp=n.stamp,C.posOnly=!1;let N=C.inner,Z=t.localCOMx+(2*k-1)*t.halfLength;s?(N.lr1x=Z,N.lr1y=t.localCOMy,N.lr2x=0,N.lr2y=0):(N.lr1x=0,N.lr1y=0,N.lr2x=Z,N.lr2y=t.localCOMy)}}return n.radius=t.radius,n.lproj=r.lprojection,n.ptype=1,n.__ref_edge1=r,n.__ref_vertex=0,!0}}static _capsuleTestCollide(e,t){let n=t.capsule;if(e.type==0){let s=be._closestT(n.spine1x,n.spine1y,n.spine2x,n.spine2y,e.circle.worldCOMx,e.circle.worldCOMy),i=n.spine1x+s*(n.spine2x-n.spine1x),l=n.spine1y+s*(n.spine2y-n.spine1y),r=e.circle.radius+n.radius,a=e.circle.worldCOMx-i,o=e.circle.worldCOMy-l;return a*a+o*o<=r*r}else if(e.type==1){let s=e.polygon.edges.head;for(;s!=null;){let a=s.elt,o=a.gnormx*n.spine1x+a.gnormy*n.spine1y,p=a.gnormx*n.spine2x+a.gnormy*n.spine2y;if((o<p?o:p)-a.gprojection-n.radius>0)return!1;s=s.next}let i=n.spine2x-n.spine1x,l=n.spine2y-n.spine1y,r=i*i+l*l;if(r>1e-12){let a=-l,o=i,p=Math.sqrt(r),c=a/p,h=o/p,u=c*n.spine1x+h*n.spine1y,x=1e100,y=-1e100,d=e.polygon.gverts.next;for(;d!=null;){let _=c*d.x+h*d.y;_<x&&(x=_),_>y&&(y=_),d=d.next}if(x>u+n.radius||y<u-n.radius)return!1}return!0}else{let s=e.capsule,[i,l]=be._closestTT(s.spine1x,s.spine1y,s.spine2x,s.spine2y,n.spine1x,n.spine1y,n.spine2x,n.spine2y),r=s.spine1x+i*(s.spine2x-s.spine1x),a=s.spine1y+i*(s.spine2y-s.spine1y),o=n.spine1x+l*(n.spine2x-n.spine1x),p=n.spine1y+l*(n.spine2y-n.spine1y),c=s.radius+n.radius,h=o-r,u=p-a;return h*h+u*u<=c*c}}static _capsuleFlowCollide(e,t,n,s){let i=e.type==2?e.capsule:t.capsule,l=e.type==2?t:e,r=i.area||Math.PI*i.radius*i.radius+4*i.halfLength*i.radius;if(l.type==2){let u=l.type==2?l.capsule:l,[x,y]=be._closestTT(i.spine1x,i.spine1y,i.spine2x,i.spine2y,u.spine1x,u.spine1y,u.spine2x,u.spine2y),d=i.spine1x+x*(i.spine2x-i.spine1x),_=i.spine1y+x*(i.spine2y-i.spine1y),f=u.spine1x+y*(u.spine2x-u.spine1x),z=u.spine1y+y*(u.spine2y-u.spine1y),P=f-d,k=z-_,m=Math.sqrt(P*P+k*k),b=i.radius+u.radius;if(m>=b)return!1;let M=b-m;return n.overlap=M*Math.min(2*i.radius,2*u.radius)*.5,n.buoyx=(d+f)*.5,n.buoyy=(_+z)*.5,!0}if(l.type==0){let u=l.circle||l.circle,x=be._closestT(i.spine1x,i.spine1y,i.spine2x,i.spine2y,u.worldCOMx,u.worldCOMy),y=i.spine1x+x*(i.spine2x-i.spine1x),d=i.spine1y+x*(i.spine2y-i.spine1y),_=u.worldCOMx-y,f=u.worldCOMy-d,z=Math.sqrt(_*_+f*f),P=i.radius+u.radius;if(z>=P)return!1;let k=P-z;return n.overlap=k*Math.min(2*i.radius,2*u.radius)*.5,n.buoyx=(y+u.worldCOMx)*.5,n.buoyy=(d+u.worldCOMy)*.5,!0}let a=l.polygon||l.polygon,o=1e100,p=0,c=0,h=a.edges.head;for(;h!=null;){let u=h.elt,x=u.gnormx*i.spine1x+u.gnormy*i.spine1y,y=u.gnormx*i.spine2x+u.gnormy*i.spine2y,d=x<y?x:y,_=u.gprojection+i.radius-d;if(_<0)return!1;_<o&&(o=_,p=u.gnormx,c=u.gnormy),h=h.next}return n.overlap=o*2*i.radius*.5,n.buoyx=i.worldCOMx,n.buoyy=i.worldCOMy,!0}};be.flowpoly=null,be.flowsegs=null;var Ee=be;var ul=class g{static isinner(e,t,n){let s=e.x-t.x,i=e.y-t.y,l=n.x-t.x;return(n.y-t.y)*s-l*i>=0}static optimise(e){let t=e.vertices,n=e.vertices;if(t!=null){let l=t;for(;l.sort(),l=l.next,l!=n;);}let s=e.vertices,i=e.vertices;if(s!=null){let l=s;for(;;){let r=l,a=r.prev,o=null,p=r.diagonals.head;for(;p!=null;){let c=p.elt,h=p.next==null?r.next:p.next.elt;if(!g.isinner(h,r,a)){o=p,a=c,p=p.next;continue}let u=!0,x=c,y=x.prev,d=null,_=x.diagonals.head;for(;_!=null;){let f=_.elt;if(f==r){let z=_.next==null?x.next:_.next.elt;u=g.isinner(z,x,y);break}y=f,d=_,_=_.next}if(u){p=r.diagonals.erase(o),x.diagonals.erase(d);continue}a=c,o=p,p=p.next}if(l=l.next,l==i)break}}}};var nt=class nt{constructor(){this.normal=null;this.shape=null;this.convex=null;this.position=null;this.ray=null;this.inner=!1;this.next=null;this.toiDistance=0}static getRay(e,t,n,s){let i;nt.rayPool==null?(nt.internal=!0,i=nt._createRayResult(),i.zpp_inner=new nt,i.zpp_inner.ray=i,nt.internal=!1):(i=nt.rayPool.ray,nt.rayPool=nt.rayPool.next,i.zpp_inner.next=null);let l=i.zpp_inner;return l.normal=e,e.zpp_inner._immutable=!0,l.toiDistance=t,l.inner=n,l.shape=s,i}static getConvex(e,t,n,s){let i;nt.convexPool==null?(nt.internal=!0,i=nt._createConvexResult(),i.zpp_inner=new nt,i.zpp_inner.convex=i,nt.internal=!1):(i=nt.convexPool.convex,nt.convexPool=nt.convexPool.next,i.zpp_inner.next=null);let l=i.zpp_inner;return l.normal=e,l.position=t,e.zpp_inner._immutable=!0,t.zpp_inner._immutable=!0,l.toiDistance=n,l.shape=s,i}disposed(){if(this.next!=null)throw new Error("Error: This object has been disposed of and cannot be used")}free(){nt._disposeVec2(this.normal),this.position!=null&&nt._disposeVec2(this.position),this.shape=null,this.toiDistance=0,this.convex!=null?(this.next=nt.convexPool,nt.convexPool=this):(this.next=nt.rayPool,nt.rayPool=this)}static _disposeVec2(e){if(e.zpp_inner._immutable=!1,e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let t=e.zpp_inner;if(t._immutable)throw new Error("Error: Vec2 is immutable");if(t._isimmutable!=null&&t._isimmutable(),t._inuse)throw new Error("Error: This Vec2 is not disposable");let n=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null,e.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=e:ye.poolVec2=e,ye.nextVec2=e,e.zpp_disp=!0,n.outer!=null&&(n.outer.zpp_inner=null,n.outer=null),n._isimmutable=null,n._validate=null,n._invalidate=null,n.next=le.zpp_pool,le.zpp_pool=n}};nt.rayPool=null,nt.convexPool=null,nt.internal=!1,nt._createRayResult=null,nt._createConvexResult=null;var mn=nt;var Di=class Di{constructor(){this.prev=null;this.next=null;this.posx=0;this.posy=0;this.vert=null;this.value=0;this.positive=!1;this.parent=null;this.rank=0;this.used=!1}static path(e){let t;return Di.zpp_pool==null?t=new Di:(t=Di.zpp_pool,Di.zpp_pool=t.next,t.next=null),t.vert=e,t.parent=t,t.rank=0,t.used=!1,t}alloc(){}free(){this.vert=null,this.parent=null}};Di.zpp_pool=null;var Qe=Di;var Fi=class Fi{constructor(){this.next=null;this.time=0;this.virtualint=!1;this.vertex=!1;this.path0=null;this.end=null;this.start=null;this.path1=null}static get(e,t,n,s,i,l=!1,r=!1){let a;return Fi.zpp_pool==null?a=new Fi:(a=Fi.zpp_pool,Fi.zpp_pool=a.next,a.next=null),a.virtualint=l,a.end=t,a.start=n,a.path0=s,a.path1=i,a.time=e,a.vertex=r,a}alloc(){}free(){this.end=this.start=null,this.path0=this.path1=null}};Fi.zpp_pool=null;var lt=Fi;var oi=class oi{constructor(){this.x=0;this.y=0;this.prev=null;this.next=null;this.wrap=null;this.forced=!1}static get(e,t){let n;return oi.zpp_pool==null?n=new oi:(n=oi.zpp_pool,oi.zpp_pool=n.next,n.next=null),n.forced=!1,n.x=e,n.y=t,n}alloc(){this.forced=!1}free(){if(this.wrap!=null){this.wrap.zpp_inner._inuse=!1;let e=this.wrap;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let t=e.zpp_inner;if(t._immutable)throw new Error("Error: Vec2 is immutable");if(t._isimmutable!=null&&t._isimmutable(),e.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let n=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null;let s=e;s.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=s:ye.poolVec2=s,ye.nextVec2=s,s.zpp_disp=!0;let i=n;i.outer!=null&&(i.outer.zpp_inner=null,i.outer=null),i._isimmutable=null,i._validate=null,i._invalidate=null,i.next=le.zpp_pool,le.zpp_pool=i,this.wrap=null}this.prev=this.next=null}wrapper(){if(this.wrap==null){let e=this.x,t=this.y;if(t==null&&(t=0),e==null&&(e=0),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let n;if(ye.poolVec2==null?n=oi._createVec2Fn():(n=ye.poolVec2,ye.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n===ye.nextVec2&&(ye.nextVec2=null)),n.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=e,s.y=t,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");if(s._isimmutable!=null&&s._isimmutable(),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x===e){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y===t}else i=!1;if(!i){n.zpp_inner.x=e,n.zpp_inner.y=t;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.wrap=n,this.wrap.zpp_inner._inuse=!0,this.wrap.zpp_inner._invalidate=s=>this.modwrap(s),this.wrap.zpp_inner._validate=()=>this.getwrap()}return this.wrap}modwrap(e){this.x=e.x,this.y=e.y}getwrap(){this.wrap.zpp_inner.x=this.x,this.wrap.zpp_inner.y=this.y}};oi.zpp_pool=null,oi._createVec2Fn=null;var ge=oi;var et=class et{static run(e,t,n,s,i,l){let r=me(),a=r.__zpp;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=t.zpp_inner;o._validate!=null&&o._validate();let p=t.zpp_inner.x;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let c=t.zpp_inner;c._validate!=null&&c._validate();let h=t.zpp_inner.y;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=n.zpp_inner;u._validate!=null&&u._validate();let x=n.zpp_inner.x-p;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let y=n.zpp_inner;y._validate!=null&&y._validate();let d=n.zpp_inner.y-h,_=s?0:-1/0,f=i?1:1/0,z=-(h*x-p*d),P=null,k=!1,m=e;for(;;){let T;Qe.zpp_pool==null?T=new Qe:(T=Qe.zpp_pool,Qe.zpp_pool=T.next,T.next=null),T.vert=m,T.posx=m.x,T.posy=m.y,T.value=T.posy*x-T.posx*d+z,T.positive=T.value>0,T.value==0&&(k=!0);let V=T;if(P==null?V.prev=V.next=V:(V.prev=P,V.next=P.next,P.next.prev=V,P.next=V),P=V,m=m.next,m==e)break}if(k){let T=null,V=P,W=P;if(V!=null){let U=V;for(;;){let H=U;if(H.value!=0){T=H;break}if(U=U.next,U==W)break}}let $,Y;$=x,Y=d;let X=$*$+Y*Y,q=1/Math.sqrt(X);$*=q,Y*=q;let L=$;$=-Y,Y=L;let D=null,I=T;for(;;){if(I.value!=0&&(D==null||I==D.next)){if(D=I,I=I.next,I==T)break;continue}let U=D.value*I.value;if(U==0){if(I=I.next,I==T)break;continue}let H=D.next,K;if(U>0)K=D.positive;else{let se=H.next,ie,ae;ie=H.posx+se.posx,ae=H.posy+se.posy;let oe=.5;ie*=oe,ae*=oe;let he=ie+$*1e-8,pe=ae+Y*1e-8,ce=!1,te=e,ue=e;if(te!=null){let xe=te;for(;;){let _e=xe,ve=_e.prev;if((_e.y<pe&&ve.y>=pe||ve.y<pe&&_e.y>=pe)&&(_e.x<=he||ve.x<=he)&&_e.x+(pe-_e.y)/(ve.y-_e.y)*(ve.x-_e.x)<he&&(ce=!ce),xe=xe.next,xe==ue)break}}K=ce}let ne=H,re=I;if(ne!=null){let se=ne;for(;;){let ie=se;if(ie.positive=K,se=se.next,se==re)break}}if(D=I,I=I.next,I==T)break}for(;!(I.value!=0&&(D==null||I==D.next));){let U=D.value*I.value;if(U==0)break;let H=D.next,K;if(U>0)K=D.positive;else{let se=H.next,ie,ae;ie=H.posx+se.posx,ae=H.posy+se.posy;let oe=.5;ie*=oe,ae*=oe;let he=ie+$*1e-8,pe=ae+Y*1e-8,ce=!1,te=e,ue=e;if(te!=null){let xe=te;for(;;){let _e=xe,ve=_e.prev;if((_e.y<pe&&ve.y>=pe||ve.y<pe&&_e.y>=pe)&&(_e.x<=he||ve.x<=he)&&_e.x+(pe-_e.y)/(ve.y-_e.y)*(ve.x-_e.x)<he&&(ce=!ce),xe=xe.next,xe==ue)break}}K=ce}let ne=H,re=I;if(ne!=null){let se=ne;for(;;){let ie=se;if(ie.positive=K,se=se.next,se==re)break}}break}}et.ints==null&&(et.ints=new a.util.ZNPList_ZPP_CutInt),et.paths==null&&(et.paths=new a.util.ZNPList_ZPP_CutVert);let b=null,M=P.posx,v=P.posy,w;ge.zpp_pool==null?w=new ge:(w=ge.zpp_pool,ge.zpp_pool=w.next,w.next=null),w.forced=!1,w.x=M,w.y=v;let O=w;O.prev=O.next=O,b=O;let E=b,C;Qe.zpp_pool==null?C=new Qe:(C=Qe.zpp_pool,Qe.zpp_pool=C.next,C.next=null),C.vert=b,C.parent=C,C.rank=0,C.used=!1;let N=C;et.paths.add(N);let Z=P;for(;;){let T=Z.next,V=T.posx,W=T.posy,$;ge.zpp_pool==null?$=new ge:($=ge.zpp_pool,ge.zpp_pool=$.next,$.next=null),$.forced=!1,$.x=V,$.y=W;let Y=$;if(Z.positive==T.positive){let X=Y;b==null?(X.prev=X.next=X,b=X):(X.next=b,X.prev=b.prev,b.prev.next=X,b.prev=X)}else{let X=T.posx-Z.posx,ee=T.posy-Z.posy,q=d*X-x*ee;q=1/q;let L=p-Z.posx,D=h-Z.posy,I=(ee*L-X*D)*q;if(I<_||I>f){let U=et.ints,H=!0;H==null&&(H=!1);let K;lt.zpp_pool==null?K=new lt:(K=lt.zpp_pool,lt.zpp_pool=K.next,K.next=null),K.virtualint=H,K.end=null,K.start=null,K.path0=null,K.path1=null,K.time=I,K.vertex=!1,U.add(K);let ne=Y;b==null?(ne.prev=ne.next=ne,b=ne):(ne.next=b,ne.prev=b.prev,b.prev.next=ne,b.prev=ne)}else if(Z.value==0){let U=b.prev;b=null;let H=U.x,K=U.y,ne;ge.zpp_pool==null?ne=new ge:(ne=ge.zpp_pool,ge.zpp_pool=ne.next,ne.next=null),ne.forced=!1,ne.x=H,ne.y=K;let re=ne;re.prev=re.next=re,b=re;let se=Y;b==null?(se.prev=se.next=se,b=se):(se.next=b,se.prev=b.prev,b.prev.next=se,b.prev=se);let ie=et.paths.head.elt,ae=et.paths,oe;Qe.zpp_pool==null?oe=new Qe:(oe=Qe.zpp_pool,Qe.zpp_pool=oe.next,oe.next=null),oe.vert=b,oe.parent=oe,oe.rank=0,oe.used=!1,ae.add(oe);let he=et.paths.head.elt,pe=et.ints,ce=!0;ce==null&&(ce=!1);let te;lt.zpp_pool==null?te=new lt:(te=lt.zpp_pool,lt.zpp_pool=te.next,te.next=null),te.virtualint=ce,te.end=U,te.start=b,te.path0=ie,te.path1=he,te.time=I,te.vertex=!1,pe.add(te)}else if(T.value==0){let U=Y;b==null?(U.prev=U.next=U,b=U):(U.next=b,U.prev=b.prev,b.prev.next=U,b.prev=U);let H=b.prev;b=null;let K=T.posx,ne=T.posy,re;ge.zpp_pool==null?re=new ge:(re=ge.zpp_pool,ge.zpp_pool=re.next,re.next=null),re.forced=!1,re.x=K,re.y=ne;let se=re;se.prev=se.next=se,b=se;let ie=et.paths.head.elt,ae=et.paths,oe;Qe.zpp_pool==null?oe=new Qe:(oe=Qe.zpp_pool,Qe.zpp_pool=oe.next,oe.next=null),oe.vert=b,oe.parent=oe,oe.rank=0,oe.used=!1,ae.add(oe);let he=et.paths.head.elt,pe=et.ints,ce=!0;ce==null&&(ce=!1);let te;lt.zpp_pool==null?te=new lt:(te=lt.zpp_pool,lt.zpp_pool=te.next,te.next=null),te.virtualint=ce,te.end=H,te.start=b,te.path0=ie,te.path1=he,te.time=I,te.vertex=!1,pe.add(te)}else{let U=(d*L-x*D)*q,H,K;H=Z.posx,K=Z.posy;let ne=U;H+=X*ne,K+=ee*ne;let re;ge.zpp_pool==null?re=new ge:(re=ge.zpp_pool,ge.zpp_pool=re.next,re.next=null),re.forced=!1,re.x=H,re.y=K;let se=re;b==null?(se.prev=se.next=se,b=se):(se.next=b,se.prev=b.prev,b.prev.next=se,b.prev=se);let ie=b.prev;b=null;let ae;ge.zpp_pool==null?ae=new ge:(ae=ge.zpp_pool,ge.zpp_pool=ae.next,ae.next=null),ae.forced=!1,ae.x=H,ae.y=K;let oe=ae;oe.prev=oe.next=oe,b=oe;let he=Y;b==null?(he.prev=he.next=he,b=he):(he.next=b,he.prev=b.prev,b.prev.next=he,b.prev=he);let pe=et.paths.head.elt,ce=et.paths,te;Qe.zpp_pool==null?te=new Qe:(te=Qe.zpp_pool,Qe.zpp_pool=te.next,te.next=null),te.vert=b,te.parent=te,te.rank=0,te.used=!1,ce.add(te);let ue=et.paths.head.elt,xe=et.ints,_e=!1;_e==null&&(_e=!1);let ve;lt.zpp_pool==null?ve=new lt:(ve=lt.zpp_pool,lt.zpp_pool=ve.next,ve.next=null),ve.virtualint=_e,ve.end=ie,ve.start=b,ve.path0=pe,ve.path1=ue,ve.time=I,ve.vertex=!1,xe.add(ve)}}if(Z=Z.next,Z==P)break}let S=b.prev;S.next.prev=E.prev,E.prev.next=S.next,S.next=E,E.prev=S;let A=et.paths.head.elt,F;if(N==N.parent)F=N;else{let T=N,V=null;for(;T!=T.parent;){let W=T.parent;T.parent=V,V=T,T=W}for(;V!=null;){let W=V.parent;V.parent=T,V=W}F=T}let B;if(A==A.parent)B=A;else{let T=A,V=null;for(;T!=T.parent;){let W=T.parent;T.parent=V,V=T,T=W}for(;V!=null;){let W=V.parent;V.parent=T,V=W}B=T}F!=B&&(F.rank<B.rank?F.parent=B:F.rank>B.rank?B.parent=F:(B.parent=F,F.rank++));let G=et.ints;if(G.head!=null&&G.head.next!=null){let T=G.head,V,W,$,Y,X=1,ee,q,L;for(;;){for(ee=0,W=T,T=null,V=T;W!=null;){for(++ee,$=W,q=0,L=X;$!=null&&q<X;)++q,$=$.next;for(;q>0||L>0&&$!=null;)q==0?(Y=$,$=$.next,--L):L==0||$==null||W.elt.time<$.elt.time?(Y=W,W=W.next,--q):(Y=$,$=$.next,--L),V!=null?V.next=Y:T=Y,V=Y;W=$}if(V.next=null,X<<=1,!(ee>1))break}G.head=T,G.modified=!0,G.pushmod=!0}for(;et.ints.head!=null;){let T=et.ints.pop_unsafe(),V=et.ints.pop_unsafe();if(!T.virtualint&&!V.virtualint){T.end.next.prev=V.start.prev,V.start.prev.next=T.end.next,T.end.next=V.start,V.start.prev=T.end,V.end.next.prev=T.start.prev,T.start.prev.next=V.end.next,V.end.next=T.start,T.start.prev=V.end;let Y;if(T.path0==T.path0.parent)Y=T.path0;else{let L=T.path0,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}Y=L}let X;if(V.path1==V.path1.parent)X=V.path1;else{let L=V.path1,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}X=L}Y!=X&&(Y.rank<X.rank?Y.parent=X:Y.rank>X.rank?X.parent=Y:(X.parent=Y,Y.rank++));let ee;if(T.path1==T.path1.parent)ee=T.path1;else{let L=T.path1,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}ee=L}let q;if(V.path0==V.path0.parent)q=V.path0;else{let L=V.path0,D=null;for(;L!=L.parent;){let I=L.parent;L.parent=D,D=L,L=I}for(;D!=null;){let I=D.parent;D.parent=L,D=I}q=L}ee!=q&&(ee.rank<q.rank?ee.parent=q:ee.rank>q.rank?q.parent=ee:(q.parent=ee,ee.rank++))}else if(T.virtualint&&!V.virtualint){let Y;if(V.end!=null&&V.end.prev==V.end){V.end.next=V.end.prev=null;let q=V.end;if(q.wrap!=null){q.wrap.zpp_inner._inuse=!1;let L=q.wrap;if(L!=null&&L.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=L.zpp_inner;if(D._immutable)throw new Error("Error: Vec2 is immutable");if(D._isimmutable!=null&&D._isimmutable(),L.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let I=L.zpp_inner;L.zpp_inner.outer=null,L.zpp_inner=null;let U=L;U.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=U:ye.poolVec2=U,ye.nextVec2=U,U.zpp_disp=!0;let H=I;H.outer!=null&&(H.outer.zpp_inner=null,H.outer=null),H._isimmutable=null,H._validate=null,H._invalidate=null,H.next=le.zpp_pool,le.zpp_pool=H,q.wrap=null}q.prev=q.next=null,q.next=ge.zpp_pool,ge.zpp_pool=q,Y=null}else{let q=V.end.prev;V.end.prev.next=V.end.next,V.end.next.prev=V.end.prev,V.end.next=V.end.prev=null;let L=V.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,V.end=null,Y=q}if(V.end=Y,!V.vertex)if(V.end!=V.path0.vert){V.start.x=V.end.x,V.start.y=V.end.y;let q;if(V.end!=null&&V.end.prev==V.end){V.end.next=V.end.prev=null;let L=V.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,q=null}else{let L=V.end.prev;V.end.prev.next=V.end.next,V.end.next.prev=V.end.prev,V.end.next=V.end.prev=null;let D=V.end;if(D.wrap!=null){D.wrap.zpp_inner._inuse=!1;let I=D.wrap;if(I!=null&&I.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let U=I.zpp_inner;if(U._immutable)throw new Error("Error: Vec2 is immutable");if(U._isimmutable!=null&&U._isimmutable(),I.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let H=I.zpp_inner;I.zpp_inner.outer=null,I.zpp_inner=null;let K=I;K.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=K:ye.poolVec2=K,ye.nextVec2=K,K.zpp_disp=!0;let ne=H;ne.outer!=null&&(ne.outer.zpp_inner=null,ne.outer=null),ne._isimmutable=null,ne._validate=null,ne._invalidate=null,ne.next=le.zpp_pool,le.zpp_pool=ne,D.wrap=null}D.prev=D.next=null,D.next=ge.zpp_pool,ge.zpp_pool=D,V.end=null,q=L}V.end=q}else{let q=V.start.next;if(V.start.x=q.x,V.start.y=q.y,q!=null&&q.prev==q){q.next=q.prev=null;let L=q;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}else{q.prev.next=q.next,q.next.prev=q.prev,q.next=q.prev=null;let L=q;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}}V.end.next.prev=V.start.prev,V.start.prev.next=V.end.next,V.end.next=V.start,V.start.prev=V.end;let X;if(V.path0==V.path0.parent)X=V.path0;else{let q=V.path0,L=null;for(;q!=q.parent;){let D=q.parent;q.parent=L,L=q,q=D}for(;L!=null;){let D=L.parent;L.parent=q,L=D}X=q}let ee;if(V.path1==V.path1.parent)ee=V.path1;else{let q=V.path1,L=null;for(;q!=q.parent;){let D=q.parent;q.parent=L,L=q,q=D}for(;L!=null;){let D=L.parent;L.parent=q,L=D}ee=q}X!=ee&&(X.rank<ee.rank?X.parent=ee:X.rank>ee.rank?ee.parent=X:(ee.parent=X,X.rank++))}else if(V.virtualint&&!T.virtualint){let Y;if(T.end!=null&&T.end.prev==T.end){T.end.next=T.end.prev=null;let q=T.end;if(q.wrap!=null){q.wrap.zpp_inner._inuse=!1;let L=q.wrap;if(L!=null&&L.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=L.zpp_inner;if(D._immutable)throw new Error("Error: Vec2 is immutable");if(D._isimmutable!=null&&D._isimmutable(),L.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let I=L.zpp_inner;L.zpp_inner.outer=null,L.zpp_inner=null;let U=L;U.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=U:ye.poolVec2=U,ye.nextVec2=U,U.zpp_disp=!0;let H=I;H.outer!=null&&(H.outer.zpp_inner=null,H.outer=null),H._isimmutable=null,H._validate=null,H._invalidate=null,H.next=le.zpp_pool,le.zpp_pool=H,q.wrap=null}q.prev=q.next=null,q.next=ge.zpp_pool,ge.zpp_pool=q,Y=null}else{let q=T.end.prev;T.end.prev.next=T.end.next,T.end.next.prev=T.end.prev,T.end.next=T.end.prev=null;let L=T.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,T.end=null,Y=q}if(T.end=Y,!T.vertex)if(T.end!=T.path0.vert){T.start.x=T.end.x,T.start.y=T.end.y;let q;if(T.end!=null&&T.end.prev==T.end){T.end.next=T.end.prev=null;let L=T.end;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L,q=null}else{let L=T.end.prev;T.end.prev.next=T.end.next,T.end.next.prev=T.end.prev,T.end.next=T.end.prev=null;let D=T.end;if(D.wrap!=null){D.wrap.zpp_inner._inuse=!1;let I=D.wrap;if(I!=null&&I.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let U=I.zpp_inner;if(U._immutable)throw new Error("Error: Vec2 is immutable");if(U._isimmutable!=null&&U._isimmutable(),I.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let H=I.zpp_inner;I.zpp_inner.outer=null,I.zpp_inner=null;let K=I;K.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=K:ye.poolVec2=K,ye.nextVec2=K,K.zpp_disp=!0;let ne=H;ne.outer!=null&&(ne.outer.zpp_inner=null,ne.outer=null),ne._isimmutable=null,ne._validate=null,ne._invalidate=null,ne.next=le.zpp_pool,le.zpp_pool=ne,D.wrap=null}D.prev=D.next=null,D.next=ge.zpp_pool,ge.zpp_pool=D,T.end=null,q=L}T.end=q}else{let q=T.start.next;if(T.start.x=q.x,T.start.y=q.y,q!=null&&q.prev==q){q.next=q.prev=null;let L=q;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}else{q.prev.next=q.next,q.next.prev=q.prev,q.next=q.prev=null;let L=q;if(L.wrap!=null){L.wrap.zpp_inner._inuse=!1;let D=L.wrap;if(D!=null&&D.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let I=D.zpp_inner;if(I._immutable)throw new Error("Error: Vec2 is immutable");if(I._isimmutable!=null&&I._isimmutable(),D.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let U=D.zpp_inner;D.zpp_inner.outer=null,D.zpp_inner=null;let H=D;H.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=H:ye.poolVec2=H,ye.nextVec2=H,H.zpp_disp=!0;let K=U;K.outer!=null&&(K.outer.zpp_inner=null,K.outer=null),K._isimmutable=null,K._validate=null,K._invalidate=null,K.next=le.zpp_pool,le.zpp_pool=K,L.wrap=null}L.prev=L.next=null,L.next=ge.zpp_pool,ge.zpp_pool=L}}T.end.next.prev=T.start.prev,T.start.prev.next=T.end.next,T.end.next=T.start,T.start.prev=T.end;let X;if(T.path0==T.path0.parent)X=T.path0;else{let q=T.path0,L=null;for(;q!=q.parent;){let D=q.parent;q.parent=L,L=q,q=D}for(;L!=null;){let D=L.parent;L.parent=q,L=D}X=q}let ee;if(T.path1==T.path1.parent)ee=T.path1;else{let q=T.path1,L=null;for(;q!=q.parent;){let D=q.parent;q.parent=L,L=q,q=D}for(;L!=null;){let D=L.parent;L.parent=q,L=D}ee=q}X!=ee&&(X.rank<ee.rank?X.parent=ee:X.rank>ee.rank?ee.parent=X:(ee.parent=X,X.rank++))}let W=T;W.end=W.start=null,W.path0=W.path1=null,W.next=lt.zpp_pool,lt.zpp_pool=W;let $=V;$.end=$.start=null,$.path0=$.path1=null,$.next=lt.zpp_pool,lt.zpp_pool=$}let J=l??new r.geom.GeomPolyList,R=et.paths.head;for(;R!=null;){let T=R.elt,V;if(T==T.parent)V=T;else{let Y=T,X=null;for(;Y!=Y.parent;){let ee=Y.parent;Y.parent=X,X=Y,Y=ee}for(;X!=null;){let ee=X.parent;X.parent=Y,X=ee}V=Y}if(V.used){R=R.next;continue}V.used=!0;let W=V.vert,$=!0;for(;V.vert!=null&&($||W!=V.vert);)if($=!1,W.x==W.next.x&&W.y==W.next.y)if(W==V.vert&&(V.vert=W.next==W?null:W.next,$=!0),W!=null&&W.prev==W)W.next=W.prev=null,W=null;else{let Y=W.next;W.prev.next=W.next,W.next.prev=W.prev,W.next=W.prev=null,W=Y}else W=W.next;if(V.vert!=null){let Y=r.geom.GeomPoly.get();Y.zpp_inner.vertices=V.vert,J.zpp_inner.reverse_flag?J.push(Y):J.unshift(Y)}R=R.next}for(;et.paths.head!=null;){let V=et.paths.pop_unsafe();V.vert=null,V.parent=null,V.next=Qe.zpp_pool,Qe.zpp_pool=V}for(;P!=null;)if(P!=null&&P.prev==P){P.next=P.prev=null;let T=P;T.vert=null,T.parent=null,T.next=Qe.zpp_pool,Qe.zpp_pool=T,P=null}else{let T=P.next;P.prev.next=P.next,P.next.prev=P.prev,P.next=P.prev=null;let V=P;V.vert=null,V.parent=null,V.next=Qe.zpp_pool,Qe.zpp_pool=V,P=T}return J}};et.ints=null,et.paths=null;var xl=et;var vs=class g{static validateShape(e){if(e.type==1){let t=e.polygon;if(t.zip_gaxi&&t.body!=null){t.zip_gaxi=!1,t.validate_laxi();let n=t.body;if(n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let o=t.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=t.lverts.next,c=t.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=t.body.posx+(t.body.axisy*u.x-t.body.axisx*u.y),h.y=t.body.posy+(u.x*t.body.axisx+u.y*t.body.axisy),c=c.next}}let s=t.edges.head,i=t.gverts.next,l=i;for(i=i.next;i!=null;){let o=i,p=s.elt;s=s.next,p.gp0=l,p.gp1=o,p.gnormx=t.body.axisy*p.lnormx-t.body.axisx*p.lnormy,p.gnormy=p.lnormx*t.body.axisx+p.lnormy*t.body.axisy,p.gprojection=t.body.posx*p.gnormx+t.body.posy*p.gnormy+p.lprojection,p.wrap_gnorm!=null&&(p.wrap_gnorm.zpp_inner.x=p.gnormx,p.wrap_gnorm.zpp_inner.y=p.gnormy),p.tp0=p.gp0.y*p.gnormx-p.gp0.x*p.gnormy,p.tp1=p.gp1.y*p.gnormx-p.gp1.x*p.gnormy,l=o,i=i.next}let r=t.gverts.next,a=s.elt;a.gp0=l,a.gp1=r,a.gnormx=t.body.axisy*a.lnormx-t.body.axisx*a.lnormy,a.gnormy=a.lnormx*t.body.axisx+a.lnormy*t.body.axisy,a.gprojection=t.body.posx*a.gnormx+t.body.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy}}if(e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let t=e.circle;g._validateWorldCOM(t);let n=t.radius,s=t.radius;t.aabb.minx=t.worldCOMx-n,t.aabb.miny=t.worldCOMy-s,t.aabb.maxx=t.worldCOMx+n,t.aabb.maxy=t.worldCOMy+s}else if(e.type==2)e.capsule.__validate_aabb();else{let t=e.polygon;if(t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot));let l=t.lverts.next,r=t.gverts.next;for(;r!=null;){let a=r,o=l;l=l.next,a.x=t.body.posx+(t.body.axisy*o.x-t.body.axisx*o.y),a.y=t.body.posy+(o.x*t.body.axisx+o.y*t.body.axisy),r=r.next}}if(t.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let n=t.gverts.next;t.aabb.minx=n.x,t.aabb.miny=n.y,t.aabb.maxx=n.x,t.aabb.maxy=n.y;let s=t.gverts.next.next;for(;s!=null;){let i=s;i.x<t.aabb.minx&&(t.aabb.minx=i.x),i.x>t.aabb.maxx&&(t.aabb.maxx=i.x),i.y<t.aabb.miny&&(t.aabb.miny=i.y),i.y>t.aabb.maxy&&(t.aabb.maxy=i.y),s=s.next}}if(e.zip_worldCOM&&e.body!=null){e.zip_worldCOM=!1,e.zip_localCOM&&(e.zip_localCOM=!1,e.type==1&&g._computePolygonLocalCOM(e.polygon),e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy));let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}static _validateWorldCOM(e){if(e.zip_worldCOM&&e.body!=null){e.zip_worldCOM=!1,e.zip_localCOM&&(e.zip_localCOM=!1,e.type==1&&g._computePolygonLocalCOM(e.polygon),e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy));let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}static _computePolygonLocalCOM(e){if(e.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(e.lverts.next.next==null)e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y;else if(e.lverts.next.next.next==null){e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y;let t=1;e.localCOMx+=e.lverts.next.next.x*t,e.localCOMy+=e.lverts.next.next.y*t;let n=.5;e.localCOMx*=n,e.localCOMy*=n}else{e.localCOMx=0,e.localCOMy=0;let t=0,n=e.lverts.next,s=n;n=n.next;let i=n;for(n=n.next;n!=null;){let c=n;t+=i.x*(c.y-s.y);let h=c.y*i.x-c.x*i.y;e.localCOMx+=(i.x+c.x)*h,e.localCOMy+=(i.y+c.y)*h,s=i,i=c,n=n.next}n=e.lverts.next;let l=n;t+=i.x*(l.y-s.y);let r=l.y*i.x-l.x*i.y;e.localCOMx+=(i.x+l.x)*r,e.localCOMy+=(i.y+l.y)*r,s=i,i=l,n=n.next;let a=n;t+=i.x*(a.y-s.y);let o=a.y*i.x-a.x*i.y;e.localCOMx+=(i.x+a.x)*o,e.localCOMy+=(i.y+a.y)*o,t=1/(3*t);let p=t;e.localCOMx*=p,e.localCOMy*=p}}};var dl=class{constructor(e=null){this.outer=null;this.vertices=null;this.outer=e}};var In=class{constructor(){this.rank=0;this.out=!1;this.next=null;this.parent=this}free(){this.parent=this}alloc(){this.out=!1,this.rank=0}};In.zpp_pool=null;var jn=class{constructor(){this.p1=null;this.key1=0;this.okey1=0;this.p2=null;this.key2=0;this.okey2=0;this.pr=null;this.keyr=0;this.okeyr=0;this.pd=null;this.span1=null;this.span2=null;this.spanr=null;this.next=null}free(){this.p1=this.p2=this.pr=this.pd=null,this.span1=this.span2=this.spanr=null}alloc(){}};jn.zpp_pool=null;var Pe=class Pe{static _init(e,t){Pe._zpp=e,Pe._nape=t,Pe.me=new Pe,Pe.look_march=[-1,224,56,216,14,-1,54,214,131,99,-1,91,141,109,181,85]}static _allocVert(e,t){let n;return ge.zpp_pool==null?n=new ge:(n=ge.zpp_pool,ge.zpp_pool=n.next,n.next=null),n.forced=!1,n.x=e,n.y=t,n}static _freeVert(e){if(e.wrap!=null){e.wrap.zpp_inner._inuse=!1;let t=e.wrap;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let n=t.zpp_inner;if(n._immutable)throw new Error("Error: Vec2 is immutable");if(n._isimmutable!=null&&n._isimmutable(),t.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let s=t.zpp_inner;t.zpp_inner.outer=null,t.zpp_inner=null;let i=t;i.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=i:ye.poolVec2=i,ye.nextVec2=i,i.zpp_disp=!0;let l=s;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l._isimmutable=null,l._validate=null,l._invalidate=null,l.next=le.zpp_pool,le.zpp_pool=l,e.wrap=null}e.prev=e.next=null,e.next=ge.zpp_pool,ge.zpp_pool=e}static _allocSpan(){let e;return In.zpp_pool==null?e=new In:(e=In.zpp_pool,In.zpp_pool=e.next,e.next=null),e.out=!1,e.rank=0,e}static _allocPair(){let e;return jn.zpp_pool==null?e=new jn:(e=jn.zpp_pool,jn.zpp_pool=e.next,e.next=null),e}static _freePair(e){e.p1=e.p2=e.pr=e.pd=null,e.span1=e.span2=e.spanr=null,e.next=jn.zpp_pool,jn.zpp_pool=e}static _findRoot(e){if(e==e.parent)return e;let t=e,n=null;for(;t!=t.parent;){let s=t.parent;t.parent=n,n=t,t=s}for(;n!=null;){let s=n.parent;n.parent=t,n=s}return t}static _union(e,t){let n=Pe._findRoot(e),s=Pe._findRoot(t);n!=s&&(n.rank<s.rank?n.parent=s:n.rank>s.rank?s.parent=n:(s.parent=n,n.rank++))}static _pushVert(e,t){return e==null?t.prev=t.next=t:(t.prev=e,t.next=e.next,e.next.prev=t,e.next=t),t}static _isDegenKey(e){return e==1||e==4||e==16||e==64||e==3||e==12||e==48||e==192||e==129||e==6||e==24||e==96||e==5||e==20||e==80||e==65||e==17||e==68}static ISO(e,t,n){return e(t,n)}static run(e,t,n,s,i,l,r,a,o){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=l.zpp_inner;p._validate!=null&&p._validate();let c=(s-t)/l.zpp_inner.x,h=c|0;if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");p=l.zpp_inner,p._validate!=null&&p._validate();let u=(i-n)/l.zpp_inner.y,x=u|0;c!=h&&++h,u!=x&&++x,a&&(Pe.map==null?Pe.map=new _s(h,x):Pe.map.resize(h,x,null)),Pe.isos==null?Pe.isos=new xs(h+1,x+1):Pe.isos.resize(h+1,x+1,0);for(let _=0;_<x+1;_++){let f;if(_==0)f=n;else if(_<=x){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let z=l.zpp_inner;z._validate!=null&&z._validate(),f=n+l.zpp_inner.y*_}else f=i;for(let z=0;z<h+1;z++){let P;if(z==0)P=t;else if(z<=h){if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let b=l.zpp_inner;b._validate!=null&&b._validate(),P=t+l.zpp_inner.x*z}else P=s;let k=Pe.isos,m=e(P,f);k.list[_*k.width+z]=m}}Pe.ints==null?Pe.ints=new ds(h+1,(x<<1)+1):Pe.ints.resize(h+1,(x<<1)+1,null);let y=null;a&&(y=Pe._allocSpan(),y.next=null);let d=n;for(let _=0;_<x;_++){let f=d,z;if(_==x-1)z=i;else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let m=l.zpp_inner;m._validate!=null&&m._validate(),z=n+l.zpp_inner.y*(_+1)}d=z;let P=t,k=null;for(let m=0;m<h;m++){let b=P,M;if(m==h-1)M=s;else{if(l!=null&&l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let N=l.zpp_inner;N._validate!=null&&N._validate(),M=t+l.zpp_inner.x*(m+1)}P=M;let v=m==0||!a,w=_==0||!a,O=m==h-1||!a,E=_==x-1||!a,C=Pe.me.marchSquare(e,Pe.isos,Pe.ints,b,f,M,z,m,_,v,w,O,E,r);if(C==null){k=null;continue}if(a){let N=C.p2!=null&&C.okey2!=14?C.p2:C.p1;C.pd=((N==C.p2?C.okey2:C.okey1)&128)==0?N.prev:N.prev.prev;let Z=Pe.map;Z.list[_*Z.width+m]=C;let S;if(k!=null){let B=C.key1,G=B&1|(B&192)>>5,J=0;(G&1)!=0&&++J,(G&2)!=0&&++J,(G&4)!=0&&++J,S=J>=2}else S=!1;S?(Pe.me.combLR(k,C),C.span1=k.spanr):(C.span1=Pe._allocSpan(),C.span1.next=y,y=C.span1),C.p2!=null?(C.span2=Pe._allocSpan(),C.span2.next=y,y=C.span2,C.spanr=C.span2):C.spanr=C.span1;let A=(C.keyr&28)>>2,F=0;(A&1)!=0&&++F,(A&2)!=0&&++F,(A&4)!=0&&++F,F>=2?k=C:k=null}else Pe.me.output(o,C.p1),C.p2!=null&&Pe.me.output(o,C.p2),Pe._freePair(C)}}if(a){for(let _=1;_<x;_++){let f=null;for(let z=0;z<h;z++){let P=Pe.map,k=P.list[_*P.width+z];if(k==null){f=null;continue}let b=(k.p2!=null&&k.okey2==14?k.okey2:k.okey1)&7,M=0;if((b&1)!=0&&++M,(b&2)!=0&&++M,(b&4)!=0&&++M,M<2){f=null;continue}let v=Pe.map,w=v.list[(_-1)*v.width+z];if(w==null){f=null;continue}let E=((w.p2!=null&&w.okey2==56?w.okey2:w.okey1)&112)>>4,C=0;if((E&1)!=0&&++C,(E&2)!=0&&++C,(E&4)!=0&&++C,C<2){f=null;continue}let N=w.p2!=null&&w.okey2==56?w.span2:w.span1,Z=k.p2!=null&&k.okey2==14?k.span2:k.span1,S=Pe._findRoot(N),A=Pe._findRoot(Z);S==A?f!=Z&&Pe.me.combUD_virtual(w,k):(Pe._union(N,Z),Pe.me.combUD(w,k)),f=((Z==k.span2?k.okey2:k.okey1)&4)!=0?Z:null}}for(let _=0;_<x;_++)for(let f=0;f<h;f++){let z=Pe.map,P=z.list[_*z.width+f];if(P==null)continue;let k=Pe._findRoot(P.span1);k.out||(k.out=!0,Pe.me.output(o,P.p1)),P.p2!=null&&(k=Pe._findRoot(P.span2),k.out||(k.out=!0,Pe.me.output(o,P.p2))),Pe._freePair(P),z.list[_*z.width+f]=null}for(;y!=null;){let _=y;y=_.next;let f=_;f.parent=f,f.next=In.zpp_pool,In.zpp_pool=f}}}output(e,t){let n=Pe._nape,s;if(t==null||t.next==t||t.next==t.prev)s=!0;else{let r=0,a=t,o=t;if(a!=null){let c=a;for(;;){let h=c;if(r+=h.x*(h.next.y-h.prev.y),c=c.next,c==o)break}}let p=r*.5;s=p*p<n.Config.epsilon*n.Config.epsilon}if(s){for(;t!=null;)if(t!=null&&t.prev==t)t.next=t.prev=null,t=null;else{let r=t.next;t.prev.next=t.next,t.next.prev=t.prev,t.next=t.prev=null,t=r}return}let i=n.geom.GeomPoly.get();i.zpp_inner.vertices=t;let l=e;l.zpp_inner.reverse_flag?l.push(i):l.unshift(i)}linkright(e,t){let n=t&7;return n==0?e:n==3?e.next.next:e.next}linkleft(e,t){return(t&1)==0?e.prev:e}linkdown(e,t){return(t&128)==0?e.prev:e.prev.prev}linkup(e,t){return e}combLR(e,t){let n=e.pr,s=e.okeyr&7,i=s==0?n:s==3?n.next.next:n.next,l=t.p1,r=(t.okey1&1)==0?l.prev:l,a=i.next,o=r.prev;(e.keyr&4)!=0?(t.pr==t.p1&&(t.pr=i.prev),t.p1=i.prev,i.prev.next=r.next,r.next.prev=i.prev,Pe._freeVert(i)):(i.next=r.next,r.next.prev=i),Pe._freeVert(r),(e.keyr&16)!=0?(t.pd=a.next,a.next.prev=o.prev,o.prev.next=a.next,Pe._freeVert(a)):(a.prev=o.prev,o.prev.next=a),Pe._freeVert(o)}combUD(e,t){let n=e.pd,s=t.p2!=null&&t.key2==14?t.p2:t.p1,i=n.prev,l=s.next;s.next=n.next,n.next.prev=s,Pe._freeVert(n),l.prev=i.prev,i.prev.next=l,i==e.p1&&(e.p1=l),Pe._freeVert(i)}combUD_virtual(e,t){let n=e.pd,s=t.p2!=null&&t.key2==14?t.p2:t.p1,i=n.prev,l=s.next;n.forced=s.forced=i.forced=l.forced=!0}combLeft(e){let t=e&1|(e&192)>>5,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}combRight(e){let t=(e&28)>>2,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}combUp(e){let t=e&7,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}combDown(e){let t=(e&112)>>4,n=0;return(t&1)!=0&&++n,(t&2)!=0&&++n,(t&4)!=0&&++n,n>=2}comb(e){let t=0;return(e&1)!=0&&++t,(e&2)!=0&&++t,(e&4)!=0&&++t,t>=2}_buildPoly(e,t,n,s,i,l,r,a,o,p,c,h,u,x,y,d,_,f,z){let P=null;for(let k=0;k<8;k++)if((e&1<<k)!=0){let m;if(k==0)m=Pe._allocVert(s,i),(x||y)&&(m.forced=!0);else if(k==2)m=Pe._allocVert(l,i),(d||y)&&(m.forced=!0);else if(k==4)m=Pe._allocVert(l,r),(d||_)&&(m.forced=!0);else if(k==6)m=Pe._allocVert(s,r),(x||_)&&(m.forced=!0);else if(k==1){if(m=n.list[(o<<1)*n.width+a],m==null){let b=this.xlerp(s,l,i,p,c,f,z);m=Pe._allocVert(b,i),n.list[(o<<1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);y&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&1)!=0||m.x==l&&(e&4)!=0)&&(e^=2)}else if(k==5){if(m=n.list[((o<<1)+2)*n.width+a],m==null){let b=this.xlerp(s,l,r,u,h,f,z);m=Pe._allocVert(b,r),n.list[((o<<1)+2)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);_&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&64)!=0||m.x==l&&(e&16)!=0)&&(e^=32)}else if(k==3){if(m=n.list[((o<<1)+1)*n.width+(a+1)],m==null){let b=this.ylerp(i,r,l,c,h,f,z);m=Pe._allocVert(l,b),n.list[((o<<1)+1)*n.width+(a+1)]=m}else m=Pe._allocVert(m.x,m.y);d&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&4)!=0||m.y==r&&(e&16)!=0)&&(e^=8)}else{if(m=n.list[((o<<1)+1)*n.width+a],m==null){let b=this.ylerp(i,r,s,p,u,f,z);m=Pe._allocVert(s,b),n.list[((o<<1)+1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);x&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&1)!=0||m.y==r&&(e&64)!=0)&&(e^=128)}P=Pe._pushVert(P,m)}return P!=null&&(P=P.next),{head:P,val:e}}marchSquare(e,t,n,s,i,l,r,a,o,p,c,h,u,x){let y=0,d=t.list[o*t.width+a];d<0&&(y|=8);let _=t.list[o*t.width+(a+1)];_<0&&(y|=4);let f=t.list[(o+1)*t.width+(a+1)];f<0&&(y|=2);let z=t.list[(o+1)*t.width+a];if(z<0&&(y|=1),y==0)return null;let P=Pe._allocPair();if(y!=10&&y!=5){let k=Pe.look_march[y];P.okey1=k;let m=this._buildPoly(k,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=m.head,k=m.val,P.key1=k,Pe._isDegenKey(k)&&(k=0,P.key1=0,P.p1=null),k==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}else{let k=e(.5*(s+l),.5*(i+r))<0;if(y==10)if(k){let m=187;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}else{let m=131;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);if(P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m!=0){let M=56;P.okey2=M,M=this._buildPoly2(M,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x,P).val,P.key2=M,Pe._isDegenKey(M)&&(M=0,P.key2=0,P.p2=null),M==0?(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1):(P.pr=P.p2,P.okeyr=P.okey2,P.keyr=P.key2)}else{let M=56;P.okey1=M;let v=this._buildPoly(M,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=v.head,M=v.val,P.key1=M,Pe._isDegenKey(M)&&(M=0,P.key1=0,P.p1=null),M==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}}else if(k){let m=238;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}else{let m=224;P.okey1=m;let b=this._buildPoly(m,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);if(P.p1=b.head,m=b.val,P.key1=m,Pe._isDegenKey(m)&&(m=0,P.key1=0,P.p1=null),m!=0){let M=14;P.okey2=M,M=this._buildPoly2(M,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x,P).val,P.key2=M,Pe._isDegenKey(M)&&(M=0,P.key2=0,P.p2=null),M==0?(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1):(P.pr=P.p2,P.okeyr=P.okey2,P.keyr=P.key2)}else{let M=14;P.okey1=M;let v=this._buildPoly(M,t,n,s,i,l,r,a,o,d,_,f,z,p,c,h,u,e,x);P.p1=v.head,M=v.val,P.key1=M,Pe._isDegenKey(M)&&(M=0,P.key1=0,P.p1=null),M==0?P=null:(P.pr=P.p1,P.okeyr=P.okey1,P.keyr=P.key1)}}}return P}_buildPoly2(e,t,n,s,i,l,r,a,o,p,c,h,u,x,y,d,_,f,z,P){for(let k=0;k<8;k++)if((e&1<<k)!=0){let m;if(k==0)m=Pe._allocVert(s,i),(x||y)&&(m.forced=!0);else if(k==2)m=Pe._allocVert(l,i),(d||y)&&(m.forced=!0);else if(k==4)m=Pe._allocVert(l,r),(d||_)&&(m.forced=!0);else if(k==6)m=Pe._allocVert(s,r),(x||_)&&(m.forced=!0);else if(k==1){if(m=n.list[(o<<1)*n.width+a],m==null){let M=this.xlerp(s,l,i,p,c,f,z);m=Pe._allocVert(M,i),n.list[(o<<1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);y&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&1)!=0||m.x==l&&(e&4)!=0)&&(e^=2)}else if(k==5){if(m=n.list[((o<<1)+2)*n.width+a],m==null){let M=this.xlerp(s,l,r,u,h,f,z);m=Pe._allocVert(M,r),n.list[((o<<1)+2)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);_&&(m.forced=!0),(m.x==s||m.x==l)&&(m.x==s&&(e&64)!=0||m.x==l&&(e&16)!=0)&&(e^=32)}else if(k==3){if(m=n.list[((o<<1)+1)*n.width+(a+1)],m==null){let M=this.ylerp(i,r,l,c,h,f,z);m=Pe._allocVert(l,M),n.list[((o<<1)+1)*n.width+(a+1)]=m}else m=Pe._allocVert(m.x,m.y);d&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&4)!=0||m.y==r&&(e&16)!=0)&&(e^=8)}else{if(m=n.list[((o<<1)+1)*n.width+a],m==null){let M=this.ylerp(i,r,s,p,u,f,z);m=Pe._allocVert(s,M),n.list[((o<<1)+1)*n.width+a]=m}else m=Pe._allocVert(m.x,m.y);x&&(m.forced=!0),(m.y==i||m.y==r)&&(m.y==i&&(e&1)!=0||m.y==r&&(e&64)!=0)&&(e^=128)}let b=m;P.p2==null?P.p2=b.prev=b.next=b:(b.prev=P.p2,b.next=P.p2.next,P.p2.next.prev=b,P.p2.next=b),P.p2=b}return P.p2!=null&&(P.p2=P.p2.next),{val:e}}lerp(e,t,n,s){let i=Pe._nape;if(n==0)return e;if(s==0)return t;{let l=n-s,r=l*l<i.Config.epsilon*i.Config.epsilon?.5:n/l;return r<0?r=0:r>1&&(r=1),e+r*(t-e)}}xlerp(e,t,n,s,i,l,r){let a=Pe._nape,o;if(s==0)o=e;else if(i==0)o=t;else{let p=s-i,c=p*p<a.Config.epsilon*a.Config.epsilon?.5:s/p;c<0?c=0:c>1&&(c=1),o=e+c*(t-e)}for(;r--!=0&&e<o&&o<t;){let p=l(o,n);if(p==0)break;if(s*p<0?(t=o,i=p):(e=o,s=p),s==0)o=e;else if(i==0)o=t;else{let c=s-i,h=c*c<a.Config.epsilon*a.Config.epsilon?.5:s/c;h<0?h=0:h>1&&(h=1),o=e+h*(t-e)}}return o}ylerp(e,t,n,s,i,l,r){let a=Pe._nape,o;if(s==0)o=e;else if(i==0)o=t;else{let p=s-i,c=p*p<a.Config.epsilon*a.Config.epsilon?.5:s/p;c<0?c=0:c>1&&(c=1),o=e+c*(t-e)}for(;r--!=0&&e<o&&o<t;){let p=l(n,o);if(p==0)break;if(s*p<0?(t=o,i=p):(e=o,s=p),s==0)o=e;else if(i==0)o=t;else{let c=s-i,h=c*c<a.Config.epsilon*a.Config.epsilon?.5:s/c;h<0?h=0:h>1&&(h=1),o=e+h*(t-e)}}return o}};Pe.isos=null,Pe.ints=null,Pe.map=null,Pe._zpp=null,Pe._nape=null;var Gs=Pe;var pn=class pn{constructor(){this.outer=null;this.a=0;this.b=0;this.c=0;this.d=0;this.tx=0;this.ty=0;this._invalidate=null;this.next=null}static get(){let e;return pn.zpp_pool==null?e=new pn:(e=pn.zpp_pool,pn.zpp_pool=e.next,e.next=null),e}static identity(){let e=pn.get();return e.setas(1,0,0,1,0,0),e}wrapper(){if(this.outer==null)if(pn._wrapFn)this.outer=pn._wrapFn(this);else{this.outer=new pn._nape.geom.Mat23;let e=this.outer.zpp_inner;e.next=pn.zpp_pool,pn.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}invalidate(){this._invalidate!=null&&this._invalidate()}set(e){this.setas(e.a,e.b,e.c,e.d,e.tx,e.ty)}setas(e,t,n,s,i,l){this.tx=i,this.ty=l,this.a=e,this.b=t,this.c=n,this.d=s}free(){}alloc(){}};pn._nape=null,pn._wrapFn=null,pn.zpp_pool=null;var Js=pn;var Ri=class{constructor(e,t){this.outer=null;this.m=0;this.n=0;this.m=e,this.n=t,this.x=[];let n=0,s=e*t;for(;n<s;)n++,this.x.push(0)}};var yt=class yt{constructor(){this.node=null;this.prev=null;this.next=null;this.rightchain=!1;this.helper=null;this.type=0;this.diagonals=null;this.forced=!1;this.y=0;this.x=0;this.mag=0;this.id=0;this.id=yt.nextId++,this.diagonals=new di}static get(e){let t;return yt.zpp_pool==null?t=new yt:(t=yt.zpp_pool,yt.zpp_pool=t.next,t.next=null),t.x=e.x,t.y=e.y,t}static rightdistance(e,t){let n=e.next.y>e.y,s=e.next.x-e.x,i=e.next.y-e.y,l=t.x-e.x,r=t.y-e.y;return(n?-1:1)*(r*s-l*i)}static vert_lt(e,t){if(t==e||t==e.next)return!0;if(e.y==e.next.y){let n=e.x,s=e.next.x;return(n<s?n:s)<=t.x}else return yt.rightdistance(e,t)<=0}static edge_swap(e,t){let n=e.node;e.node=t.node,t.node=n}static edge_lt(e,t){if(e==t&&e.next==t.next)return!1;if(e==t.next)return!yt.vert_lt(e,t);if(t==e.next)return yt.vert_lt(t,e);if(e.y==e.next.y)if(t.y==t.next.y){let n=e.x,s=e.next.x,i=t.x,l=t.next.x;return(n>s?n:s)>(i>l?i:l)}else return yt.rightdistance(t,e)>0?!0:yt.rightdistance(t,e.next)>0;else{let n=yt.rightdistance(e,t),s=yt.rightdistance(e,t.next);if(n==0&&s==0){let r=e.x,a=e.next.x,o=t.x,p=t.next.x;return(r>a?r:a)>(o>p?o:p)}if(n*s>=0)return n<0?!0:s<0;let i=yt.rightdistance(t,e),l=yt.rightdistance(t,e.next);return i*l>=0?i>0?!0:l>0:!1}}alloc(){}free(){this.helper=null}copy(){let e;return yt.zpp_pool==null?e=new yt:(e=yt.zpp_pool,yt.zpp_pool=e.next,e.next=null),e.x=this.x,e.y=this.y,e.forced=this.forced,e}sort(){let e=this.prev.x-this.x,t=this.prev.y-this.y,n=this.next.x-this.x,s=this.next.y-this.y,i=s*e-n*t,l=i>0?-1:i==0?0:1,r=this.diagonals;if(r.head!=null&&r.head.next!=null){let a=r.head,o,p,c,h,u=1,x,y,d;for(;;){for(x=0,p=a,a=null,o=a;p!=null;){for(++x,c=p,y=0,d=u;c!=null&&y<u;)++y,c=c.next;for(;y>0||d>0&&c!=null;){if(y==0)h=c,c=c.next,--d;else if(d==0||c==null)h=p,p=p.next,--y;else{let _;if(l==1){e=p.elt.x-this.x,t=p.elt.y-this.y,n=c.elt.x-this.x,s=c.elt.y-this.y;let f=s*e-n*t;_=(f>0?-1:f==0?0:1)==1}else{e=this.prev.x-this.x,t=this.prev.y-this.y,n=p.elt.x-this.x,s=p.elt.y-this.y;let f=s*e-n*t,z=f>0?-1:f==0?0:1;e=this.prev.x-this.x,t=this.prev.y-this.y,n=c.elt.x-this.x,s=c.elt.y-this.y;let P=s*e-n*t,k=P>0?-1:P==0?0:1;if(z*k==1||z*k==0&&(z==1||k==1)){e=p.elt.x-this.x,t=p.elt.y-this.y,n=c.elt.x-this.x,s=c.elt.y-this.y;let m=s*e-n*t;_=(m>0?-1:m==0?0:1)==1}else if(z==-1||k==-1)_=k==-1;else if(z==0&&k==0){e=this.x-this.prev.x,t=this.y-this.prev.y,n=p.elt.x-this.x,s=p.elt.y-this.y;let m=e*n+t*s;n=c.elt.x-this.x,s=c.elt.y-this.y;let b=e*n+t*s;_=m<0&&b>0?!0:!(b<0&&m>0)}else _=!0}_?(h=p,p=p.next,--y):(h=c,c=c.next,--d)}o!=null?o.next=h:a=h,o=h}p=c}if(o.next=null,u<<=1,!(x>1))break}r.head=a,r.modified=!0,r.pushmod=!0}}};yt.zpp_pool=null,yt.nextId=0;var Ge=yt;var cn=class cn{constructor(e){this.next=null;this.vertices=null;this.init(e)}static getSharedPP(){return cn.sharedPPList==null&&(cn.sharedPPList=new rl),cn.sharedPPList}static getShared(){return cn.sharedGVList==null&&(cn.sharedGVList=new ys),cn.sharedGVList}eq(e,t){let n=e.x-t.x,s=e.y-t.y;return n*n+s*s<me().Config.epsilon*me().Config.epsilon}alloc(){}free(){}init(e){if(e==null)return;let t=0,n=e,s=e;if(n!=null){let r=n;for(;;){let a=r;if(t+=a.x*(a.next.y-a.prev.y),r=r.next,r==s)break}}let i=t*.5>0,l=e;for(;;){let r;if(i){let a;Ge.zpp_pool==null?a=new Ge:(a=Ge.zpp_pool,Ge.zpp_pool=a.next,a.next=null),a.x=l.x,a.y=l.y;let o=a;this.vertices==null?this.vertices=o.prev=o.next=o:(o.prev=this.vertices,o.next=this.vertices.next,this.vertices.next.prev=o,this.vertices.next=o),r=o}else{let a;Ge.zpp_pool==null?a=new Ge:(a=Ge.zpp_pool,Ge.zpp_pool=a.next,a.next=null),a.x=l.x,a.y=l.y;let o=a;this.vertices==null?this.vertices=o.prev=o.next=o:(o.next=this.vertices,o.prev=this.vertices.prev,this.vertices.prev.next=o,this.vertices.prev=o),r=o}if(this.vertices=r,this.vertices.forced=l.forced,l=l.next,l==e)break}this.remove_collinear_vertices()}remove_collinear_vertices(){let e=this.vertices,t=!0;for(;t||e!=this.vertices;)if(t=!1,this.eq(e,e.next)){if(e==this.vertices&&(this.vertices=e.next,t=!0),e.forced&&(e.next.forced=!0),e!=null&&e.prev==e){e.next=e.prev=null;let s=e;s.helper=null,s.next=Ge.zpp_pool,Ge.zpp_pool=s,e=null,e=null}else{let s=e.next;e.prev.next=e.next,e.next.prev=e.prev,e.next=e.prev=null;let i=e;i.helper=null,i.next=Ge.zpp_pool,Ge.zpp_pool=i,e=s}if(e==null){this.vertices=null;break}}else e=e.next;if(this.vertices==null)return!0;let n;for(;;){for(n=!1,e=this.vertices,t=!0;t||e!=this.vertices;){t=!1;let s=e.prev,i=e.x-s.x,l=e.y-s.y,r=e.next.x-e.x,o=(e.next.y-e.y)*i-r*l;if(o*o>=me().Config.epsilon*me().Config.epsilon)e=e.next;else{if(e==this.vertices&&(this.vertices=e.next,t=!0),e!=null&&e.prev==e){e.next=e.prev=null;let p=e;p.helper=null,p.next=Ge.zpp_pool,Ge.zpp_pool=p,e=null,e=null}else{let p=e.next;e.prev.next=e.next,e.next.prev=e.prev,e.next=e.prev=null;let c=e;c.helper=null,c.next=Ge.zpp_pool,Ge.zpp_pool=c,e=p}if(n=!0,e==null){n=!1,this.vertices=null;break}}}if(!n)break}return this.vertices==null}add_diagonal(e,t){e.diagonals.add(t),t.diagonals.add(e),e.forced=t.forced=!0}extract_partitions(e){if(e==null&&(e=new rl),this.vertices!=null){let t=this.vertices,n=this.vertices;if(t!=null){let l=t;for(;l.sort(),l=l.next,l!=n;);}for(this.pull_partitions(this.vertices,e);this.vertices!=null;){let l;if(this.vertices!=null&&this.vertices.prev==this.vertices){this.vertices.next=this.vertices.prev=null;let r=this.vertices;r.helper=null,r.next=Ge.zpp_pool,Ge.zpp_pool=r,l=this.vertices=null}else{let r=this.vertices.next;this.vertices.prev.next=this.vertices.next,this.vertices.next.prev=this.vertices.prev,this.vertices.next=this.vertices.prev=null;let a=this.vertices;a.helper=null,a.next=Ge.zpp_pool,Ge.zpp_pool=a,this.vertices=null,l=r}this.vertices=l}let s=null,i=e.head;for(;i!=null;){if(i.elt.remove_collinear_vertices()){e.erase(s);continue}s=i,i=i.next}}return e}pull_partitions(e,t){let n;cn.zpp_pool==null?n=new cn:(n=cn.zpp_pool,cn.zpp_pool=n.next,n.next=null);let s=e;for(;;){let a;Ge.zpp_pool==null?a=new Ge:(a=Ge.zpp_pool,Ge.zpp_pool=a.next,a.next=null),a.x=s.x,a.y=s.y,a.forced=s.forced;let o=a;if(n.vertices==null?n.vertices=o.prev=o.next=o:(o.prev=n.vertices,o.next=n.vertices.next,n.vertices.next.prev=o,n.vertices.next=o),n.vertices=o,n.vertices.forced=s.forced,s.diagonals.head!=null){let p=s.diagonals,c=p.head.elt;if(p.pop(),c==e)break;s=this.pull_partitions(s,t)}else s=s.next;if(s==e)break}let i=0,l=n.vertices,r=n.vertices;if(l!=null){let a=l;for(;;){let o=a;if(i+=o.x*(o.next.y-o.prev.y),a=a.next,a==r)break}}return i*.5!=0&&t.add(n),s}extract(e){if(e==null&&(e=new ys),this.vertices!=null){let t=this.vertices,n=this.vertices;if(t!=null){let s=t;for(;s.sort(),s=s.next,s!=n;);}for(this.pull(this.vertices,e);this.vertices!=null;){let s;if(this.vertices!=null&&this.vertices.prev==this.vertices){this.vertices.next=this.vertices.prev=null;let i=this.vertices;i.helper=null,i.next=Ge.zpp_pool,Ge.zpp_pool=i,s=this.vertices=null}else{let i=this.vertices.next;this.vertices.prev.next=this.vertices.next,this.vertices.next.prev=this.vertices.prev,this.vertices.next=this.vertices.prev=null;let l=this.vertices;l.helper=null,l.next=Ge.zpp_pool,Ge.zpp_pool=l,this.vertices=null,s=i}this.vertices=s}}return e}pull(e,t){let n=null,s=e;for(;;){let o=s.x,p=s.y,c;ge.zpp_pool==null?c=new ge:(c=ge.zpp_pool,ge.zpp_pool=c.next,c.next=null),c.forced=!1,c.x=o,c.y=p;let h=c;if(n==null?h.prev=h.next=h:(h.prev=n,h.next=n.next,n.next.prev=h,n.next=h),n=h,n.forced=s.forced,s.diagonals.head!=null){let u=s.diagonals,x=u.head.elt;if(u.pop(),x==e)break;s=this.pull(s,t)}else s=s.next;if(s==e)break}let i=0,l=n,r=n;if(l!=null){let o=l;for(;;){let p=o;if(i+=p.x*(p.next.y-p.prev.y),o=o.next,o==r)break}}let a=i*.5;if(a*a>=me().Config.epsilon*me().Config.epsilon){let o=n,p=!0;for(;p||o!=n;){p=!1;let c=o.x-o.next.x,h=o.y-o.next.y;if(c*c+h*h<me().Config.epsilon*me().Config.epsilon){if(o==n&&(n=o.next,p=!0),o.forced&&(o.next.forced=!0),o!=null&&o.prev==o)o.next=o.prev=null,o=null;else{let u=o.next;o.prev.next=o.next,o.next.prev=o.prev,o.next=o.prev=null,o=u}if(o==null){n=null;break}}else o=o.next}if(n!=null){let c;for(;;){for(c=!1,o=n,p=!0;p||o!=n;){p=!1;let h=o.prev,u=o.x-h.x,x=o.y-h.y,y=o.next.x-o.x,_=(o.next.y-o.y)*u-y*x;if(_*_>=me().Config.epsilon*me().Config.epsilon)o=o.next;else{if(o==n&&(n=o.next,p=!0),o!=null&&o.prev==o)o.next=o.prev=null,o=null;else{let f=o.next;o.prev.next=o.next,o.next.prev=o.prev,o.next=o.prev=null,o=f}if(c=!0,o==null){c=!1,n=null;break}}}if(!c)break}}n!=null&&t.add(n)}return s}};cn.zpp_pool=null,cn.sharedPPList=null,cn.sharedGVList=null;var Gi=cn;var Fe=class Fe{static bisector(e){let t=e.prev,n=e.next,s=e.x-t.x,i=e.y-t.y,l=n.x-e.x,r=n.y-e.y,a;le.zpp_pool==null?a=new le:(a=le.zpp_pool,le.zpp_pool=a.next,a.next=null),a.weak=!1,a._immutable=!1,a.x=-i-r,a.y=s+l;let o=a,p=o.x*o.x+o.y*o.y,h=1/Math.sqrt(p);return o.x*=h,o.y*=h,r*s-l*i<0&&(o.x=-o.x,o.y=-o.y),o}static below(e,t){if(e.y<t.y)return!0;if(e.y>t.y)return!1;if(e.x<t.x)return!0;if(e.x>t.x)return!1;{let n=Fe.bisector(e),s=Fe.bisector(t),i=1;n.x+=e.x*i,n.y+=e.y*i;let l=1;s.x+=t.x*l,s.y+=t.y*l;let r=n.x<s.x||n.x==s.x&&n.y<s.y;return n.outer!=null&&(n.outer.zpp_inner=null,n.outer=null),n._isimmutable=null,n._validate=null,n._invalidate=null,n.next=le.zpp_pool,le.zpp_pool=n,s.outer!=null&&(s.outer.zpp_inner=null,s.outer=null),s._isimmutable=null,s._validate=null,s._invalidate=null,s.next=le.zpp_pool,le.zpp_pool=s,r}}static above(e,t){return Fe.below(t,e)}static left_vertex(e){let t=e.prev;return t.y>e.y?!0:t.y==e.y?e.next.y<e.y:!1}static isMonotone(e){let t=e,n=e,s=e.next,i=e;if(s!=null){let a=s;for(;;){let o=a;if(o.y<t.y&&(t=o),o.y>n.y&&(n=o),a=a.next,a==i)break}}let l=!0,r=t;if(n!=t.next){let a=t.next,o=n;if(a!=null){let p=a;for(;;){let c=p;if(c.y<r.y){l=!1;break}if(r=c,p=p.next,p==o)break}}}if(!l)return!1;if(r=t,n!=t.prev){let a=t.prev,o=n;if(a!=null){let p=a;for(;;){let c=p;if(c.y<r.y){l=!1;break}if(r=c,p=p.prev,p==o)break}}}return l}static getShared(){return Fe.sharedPPoly==null&&(Fe.sharedPPoly=new Gi),Fe.sharedPPoly}static decompose(e,t){if(t==null?t=new Gi(e):t.init(e),t.vertices==null)return t;Fe.queue==null&&(Fe.queue=new di);let n=t.vertices,s=t.vertices;if(n!=null){let l=n;for(;;){let r=l;Fe.queue.add(r);let a=r.next.x-r.x,o=r.next.y-r.y,p=r.prev.x-r.x,h=(r.prev.y-r.y)*a-p*o>0;if(r.type=Fe.below(r.prev,r)?Fe.below(r.next,r)?h?0:3:4:Fe.below(r,r.next)?h?1:2:4,l=l.next,l==s)break}}let i=Fe.queue;if(i.head!=null&&i.head.next!=null){let l=i.head,r,a,o,p,c=1,h,u,x;for(;;){for(h=0,a=l,l=null,r=l;a!=null;){for(++h,o=a,u=0,x=c;o!=null&&u<c;)++u,o=o.next;for(;u>0||x>0&&o!=null;)u==0?(p=o,o=o.next,--x):x==0||o==null||Fe.above(a.elt,o.elt)?(p=a,a=a.next,--u):(p=o,o=o.next,--x),r!=null?r.next=p:l=p,r=p;a=o}if(r.next=null,c<<=1,!(h>1))break}i.head=l,i.modified=!0,i.pushmod=!0}for(Fe.edges==null&&(bs.zpp_pool==null?Fe.edges=new bs:(Fe.edges=bs.zpp_pool,bs.zpp_pool=Fe.edges.next,Fe.edges.next=null),Fe.edges.lt=Ge.edge_lt,Fe.edges.swapped=Ge.edge_swap);Fe.queue.head!=null;){let l=Fe.queue.pop_unsafe();switch(l.type){case 0:l.helper=l,l.node=Fe.edges.insert(l);break;case 1:{let r=l.prev;if(r.helper==null)throw new Error("Fatal error (1): Polygon is not weakly-simple and clockwise");r.helper.type==2&&t.add_diagonal(l,r.helper),Fe.edges.remove_node(r.node),r.helper=null;break}case 2:{let r=l.prev;if(r.helper==null)throw new Error("Fatal error (3): Polygon is not weakly-simple and clockwise");r.helper.type==2&&t.add_diagonal(l,r.helper),Fe.edges.remove_node(r.node),r.helper=null;let a=null;if(!Fe.edges.empty()){let p=Fe.edges.parent;for(;p.prev!=null;)p=p.prev;for(;p!=null;){let c=p.data;if(!Ge.vert_lt(c,l)){a=c;break}if(p.next!=null)for(p=p.next;p.prev!=null;)p=p.prev;else{for(;p.parent!=null&&p==p.parent.next;)p=p.parent;p=p.parent}}}let o=a;if(o!=null){if(o.helper==null)throw new Error("Fatal error (4): Polygon is not weakly-simple and clockwise");o.helper.type==2&&t.add_diagonal(l,o.helper),o.helper=l}break}case 3:{let r=null;if(!Fe.edges.empty()){let o=Fe.edges.parent;for(;o.prev!=null;)o=o.prev;for(;o!=null;){let p=o.data;if(!Ge.vert_lt(p,l)){r=p;break}if(o.next!=null)for(o=o.next;o.prev!=null;)o=o.prev;else{for(;o.parent!=null&&o==o.parent.next;)o=o.parent;o=o.parent}}}let a=r;if(a!=null){if(a.helper==null)throw new Error("Fatal error (2): Polygon is not weakly-simple and clockwise");t.add_diagonal(l,a.helper),a.helper=l}l.node=Fe.edges.insert(l),l.helper=l;break}case 4:{let r=l.prev;if(Fe.left_vertex(l)){if(r.helper==null)throw new Error("Fatal error (5): Polygon is not weakly-simple and clockwise");r.helper.type==2&&t.add_diagonal(l,r.helper),Fe.edges.remove_node(r.node),r.helper=null,l.node=Fe.edges.insert(l),l.helper=l}else{let a=null;if(!Fe.edges.empty()){let p=Fe.edges.parent;for(;p.prev!=null;)p=p.prev;for(;p!=null;){let c=p.data;if(!Ge.vert_lt(c,l)){a=c;break}if(p.next!=null)for(p=p.next;p.prev!=null;)p=p.prev;else{for(;p.parent!=null&&p==p.parent.next;)p=p.parent;p=p.parent}}}let o=a;if(o==null||o.helper==null)throw new Error("Fatal error (6): Polygon is not weakly-simple and clockwise");o.helper.type==2&&t.add_diagonal(l,o.helper),o.helper=l}break}}}return t}};Fe.queue=null,Fe.edges=null,Fe.sharedPPoly=null;var _l=Fe;var Ji=class Ji{constructor(){this.node=null;this.di=0;this.id=0;this.b=null;this.a=null;this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null}static get(e,t){let n;return Ji.zpp_pool==null?n=new Ji:(n=Ji.zpp_pool,Ji.zpp_pool=n.next,n.next=null),n.a=e,n.b=t,e.id<t.id?(n.id=e.id,n.di=t.id):(n.id=t.id,n.di=e.id),n}static edge_swap(e,t){let n=e.node;e.node=t.node,t.node=n}static edge_lt(e,t){return e.id>=t.id?e.id==t.id?e.di<t.di:!1:!0}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}free(){this.a=this.b=null,this.node=null}alloc(){}};Ji.zpp_pool=null;var St=Ji;var At=class At{constructor(){this.zip_dir=!1;this.absnormaly=0;this.absnormalx=0;this.normaly=0;this.normalx=0;this.idiry=0;this.idirx=0;this.diry=0;this.dirx=0;this.originy=0;this.originx=0;this.userData=null;this.maxdist=0;this.direction=null;this.origin=null;let e=me(),t;if(ye.poolVec2==null?t=new e.geom.Vec2:(t=ye.poolVec2,ye.poolVec2=t.zpp_pool,t.zpp_pool=null,t.zpp_disp=!1,t==ye.nextVec2&&(ye.nextVec2=null)),t.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=0,s.y=0,t.zpp_inner=s,t.zpp_inner.outer=t}else{if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=t.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");s._isimmutable!=null&&s._isimmutable();let i;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=t.zpp_inner;if(l._validate!=null&&l._validate(),t.zpp_inner.x==0){if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=t.zpp_inner;r._validate!=null&&r._validate(),i=t.zpp_inner.y==0}else i=!1;if(!i){t.zpp_inner.x=0,t.zpp_inner.y=0;let r=t.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}t.zpp_inner.weak=!1,this.origin=t,this.origin.zpp_inner._invalidate=s=>this.origin_invalidate(s);let n;if(ye.poolVec2==null?n=new e.geom.Vec2:(n=ye.poolVec2,ye.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n==ye.nextVec2&&(ye.nextVec2=null)),n.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=0,s.y=0,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");s._isimmutable!=null&&s._isimmutable();let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x==0){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y==0}else i=!1;if(!i){n.zpp_inner.x=0,n.zpp_inner.y=0;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.direction=n,this.direction.zpp_inner._invalidate=s=>this.direction_invalidate(s),this.originx=0,this.originy=0,this.dirx=0,this.diry=0,this.zip_dir=!1}origin_invalidate(e){this.originx=e.x,this.originy=e.y}direction_invalidate(e){this.dirx=e.x,this.diry=e.y,this.zip_dir=!0}invalidate_dir(){this.zip_dir=!0}validate_dir(){if(this.zip_dir){this.zip_dir=!1;let e=me();if(this.dirx*this.dirx+this.diry*this.diry<e.Config.epsilon)throw new Error("Error: Ray::direction is degenerate");let t=this.dirx*this.dirx+this.diry*this.diry,n=1/Math.sqrt(t);this.dirx*=n,this.diry*=n,this.idirx=1/this.dirx,this.idiry=1/this.diry,this.normalx=-this.diry,this.normaly=this.dirx;let s=this.normalx;this.absnormalx=s<0?-s:s;let i=this.normaly;this.absnormaly=i<0?-i:i}}rayAABB(){let e=this.originx,t=e,n=this.originy,s=n;if(this.maxdist>=1/0?(this.dirx>0?t=1/0:this.dirx<0&&(t=-1/0),this.diry>0?s=1/0:this.diry<0&&(s=-1/0)):(t+=this.maxdist*this.dirx,s+=this.maxdist*this.diry),t<e){let l=e;e=t,t=l}if(s<n){let l=n;n=s,s=l}let i;return fe.zpp_pool==null?i=new fe:(i=fe.zpp_pool,fe.zpp_pool=i.next,i.next=null),i.minx=e,i.miny=n,i.maxx=t,i.maxy=s,i}aabbtest(e){let t=this.normalx*(this.originx-.5*(e.minx+e.maxx))+this.normaly*(this.originy-.5*(e.miny+e.maxy)),n=this.absnormalx*.5*(e.maxx-e.minx)+this.absnormaly*.5*(e.maxy-e.miny),s=t;return(s<0?-s:s)<n}aabbsect(e){let t=this.originx>=e.minx&&this.originx<=e.maxx,n=this.originy>=e.miny&&this.originy<=e.maxy;if(t&&n)return 0;{let s=-1;for(;!(this.dirx>=0&&this.originx>=e.maxx)&&!(this.dirx<=0&&this.originx<=e.minx||this.diry>=0&&this.originy>=e.maxy||this.diry<=0&&this.originy<=e.miny);){if(this.dirx>0){let i=(e.minx-this.originx)*this.idirx;if(i>=0&&i<=this.maxdist){let l=this.originy+i*this.diry;if(l>=e.miny&&l<=e.maxy){s=i;break}}}else if(this.dirx<0){let i=(e.maxx-this.originx)*this.idirx;if(i>=0&&i<=this.maxdist){let l=this.originy+i*this.diry;if(l>=e.miny&&l<=e.maxy){s=i;break}}}if(this.diry>0){let i=(e.miny-this.originy)*this.idiry;if(i>=0&&i<=this.maxdist){let l=this.originx+i*this.dirx;if(l>=e.minx&&l<=e.maxx){s=i;break}}}else if(this.diry<0){let i=(e.maxy-this.originy)*this.idiry;if(i>=0&&i<=this.maxdist){let l=this.originx+i*this.dirx;if(l>=e.minx&&l<=e.maxx){s=i;break}}}break}return s}}static _allocVec2(e,t){let n=me();if(e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let s;if(ye.poolVec2==null?s=new n.geom.Vec2:(s=ye.poolVec2,ye.poolVec2=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s==ye.nextVec2&&(ye.nextVec2=null)),s.zpp_inner==null){let i;le.zpp_pool==null?i=new le:(i=le.zpp_pool,le.zpp_pool=i.next,i.next=null),i.weak=!1,i._immutable=!1,i.x=e,i.y=t,s.zpp_inner=i,s.zpp_inner.outer=s}else{if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");if(i._isimmutable!=null&&i._isimmutable(),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let l;s.zpp_inner._validate!=null&&s.zpp_inner._validate(),s.zpp_inner.x==e?(s.zpp_inner._validate!=null&&s.zpp_inner._validate(),l=s.zpp_inner.y==t):l=!1,l||(s.zpp_inner.x=e,s.zpp_inner.y=t,s.zpp_inner._invalidate!=null&&s.zpp_inner._invalidate(s.zpp_inner))}return s.zpp_inner.weak=!1,s}static _validateWorldCOM(e){if(e.zip_worldCOM&&e.body!=null){if(e.zip_worldCOM=!1,e.zip_localCOM){if(e.zip_localCOM=!1,e.type==1){let n=e.polygon;if(n.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(n.lverts.next.next==null)n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;else if(n.lverts.next.next.next==null){n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;let s=1;n.localCOMx+=n.lverts.next.next.x*s,n.localCOMy+=n.lverts.next.next.y*s;let i=.5;n.localCOMx*=i,n.localCOMy*=i}else{n.localCOMx=0,n.localCOMy=0;let s=0,i=n.lverts.next,l=i;i=i.next;let r=i;for(i=i.next;i!=null;){let u=i;s+=r.x*(u.y-l.y);let x=u.y*r.x-u.x*r.y;n.localCOMx+=(r.x+u.x)*x,n.localCOMy+=(r.y+u.y)*x,l=r,r=u,i=i.next}i=n.lverts.next;let a=i;s+=r.x*(a.y-l.y);let o=a.y*r.x-a.x*r.y;n.localCOMx+=(r.x+a.x)*o,n.localCOMy+=(r.y+a.y)*o,l=r,r=a,i=i.next;let p=i;s+=r.x*(p.y-l.y);let c=p.y*r.x-p.x*r.y;n.localCOMx+=(r.x+p.x)*c,n.localCOMy+=(r.y+p.y)*c,s=1/(3*s);let h=s;n.localCOMx*=h,n.localCOMy*=h}}e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy)}let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}_circleNormal(e,t,n){let s=this.originx+this.dirx*e,i=this.originy+this.diry*e;s-=t.worldCOMx,i-=t.worldCOMy;let l=s*s+i*i,r=1/Math.sqrt(l);return s*=r,i*=r,n&&(s=-s,i=-i),{nx:s,ny:i}}static _insertSorted(e,t){let n=null,s=e.zpp_inner.inner.head;for(;s!=null;){let r=s.elt;if(t.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(t.zpp_inner.toiDistance<r.zpp_inner.toiDistance)break;n=s,s=s.next}let i=e.zpp_inner.inner,l;ms.zpp_pool==null?l=new ms:(l=ms.zpp_pool,ms.zpp_pool=l.next,l.next=null),l.elt=t,n==null?(l.next=i.head,i.head=l):(l.next=n.next,n.next=l),i.pushmod=i.modified=!0,i.length++}circlesect(e,t,n){At._validateWorldCOM(e);let s=this.originx-e.worldCOMx,i=this.originy-e.worldCOMy,l=this.dirx*this.dirx+this.diry*this.diry,r=2*(s*this.dirx+i*this.diry),a=s*s+i*i-e.radius*e.radius,o=r*r-4*l*a;if(o==0){let p=-r/2*l;if((!t||a>0)&&p>0&&p<n&&p<=this.maxdist){let c=this._circleNormal(p,e,a<=0),h=At._allocVec2(c.nx,c.ny);return mn.getRay(h,p,a<=0,e.outer)}else return null}else{o=Math.sqrt(o),l=1/(2*l);let p=(-r-o)*l,c=(-r+o)*l;if(p>0)if(p<n&&p<=this.maxdist){let h=this._circleNormal(p,e,!1),u=At._allocVec2(h.nx,h.ny);return mn.getRay(u,p,!1,e.outer)}else return null;else if(c>0&&t)if(c<n&&c<=this.maxdist){let h=this._circleNormal(c,e,!0),u=At._allocVec2(h.nx,h.ny);return mn.getRay(u,c,!0,e.outer)}else return null;else return null}}circlesect2(e,t,n){At._validateWorldCOM(e);let s=this.originx-e.worldCOMx,i=this.originy-e.worldCOMy,l=this.dirx*this.dirx+this.diry*this.diry,r=2*(s*this.dirx+i*this.diry),a=s*s+i*i-e.radius*e.radius,o=r*r-4*l*a;if(o==0){let p=-r/2*l;if((!t||a>0)&&p>0&&p<=this.maxdist){let c=this._circleNormal(p,e,a<=0),h=At._allocVec2(c.nx,c.ny),u=mn.getRay(h,p,a<=0,e.outer);At._insertSorted(n,u)}}else{o=Math.sqrt(o),l=1/(2*l);let p=(-r-o)*l,c=(-r+o)*l;if(p>0&&p<=this.maxdist){let h=this._circleNormal(p,e,!1),u=At._allocVec2(h.nx,h.ny),x=mn.getRay(u,p,!1,e.outer);At._insertSorted(n,x)}if(c>0&&c<=this.maxdist&&t){let h=this._circleNormal(c,e,!0),u=At._allocVec2(h.nx,h.ny),x=mn.getRay(u,c,!0,e.outer);At._insertSorted(n,x)}}}polysect(e,t,n){let s=me(),i=n,l=null,r=e.edges.head,a=!0,o=e.gverts.next,p=o,c=o.next;for(;c!=null;){let h=c,u=r.elt;if(t||u.gnormx*this.dirx+u.gnormy*this.diry<0){let x=h.x-p.x,y=h.y-p.y,d=p.x-this.originx,_=p.y-this.originy,f=y*this.dirx-x*this.diry;if(f*f>s.Config.epsilon){f=1/f;let z=(y*d-x*_)*f;if(z>0&&z<i&&z<=this.maxdist){let P=(this.diry*d-this.dirx*_)*f;P>-s.Config.epsilon&&P<1+s.Config.epsilon&&(i=z,l=r.elt)}}}r=r.next,p=h,c=c.next}if(a){c=e.gverts.next;let h=c,u=r.elt;if(t||u.gnormx*this.dirx+u.gnormy*this.diry<0){let x=h.x-p.x,y=h.y-p.y,d=p.x-this.originx,_=p.y-this.originy,f=y*this.dirx-x*this.diry;if(f*f>s.Config.epsilon){f=1/f;let z=(y*d-x*_)*f;if(z>0&&z<i&&z<=this.maxdist){let P=(this.diry*d-this.dirx*_)*f;P>-s.Config.epsilon&&P<1+s.Config.epsilon&&(i=z,l=r.elt)}}}}if(l!=null){let h=l.gnormx,u=l.gnormy,x=h*this.dirx+u*this.diry>0;x&&(h=-h,u=-u);let y=At._allocVec2(h,u);return mn.getRay(y,i,x,e.outer)}else return null}polysect2(e,t,n){let s=me(),i=1/0,l=-1,r=null,a=null,o=e.edges.head,p=!0,c=e.gverts.next,h=c,u=c.next;for(;u!=null;){let x=u,y=o.elt;if(t||y.gnormx*this.dirx+y.gnormy*this.diry<0){let d=x.x-h.x,_=x.y-h.y,f=h.x-this.originx,z=h.y-this.originy,P=_*this.dirx-d*this.diry;if(P*P>s.Config.epsilon){P=1/P;let k=(_*f-d*z)*P;if(k>0&&k<=this.maxdist&&(k<i||k>l)){let m=(this.diry*f-this.dirx*z)*P;m>-s.Config.epsilon&&m<1+s.Config.epsilon&&(k<i&&(i=k,r=o.elt),k>l&&(l=k,a=o.elt))}}}o=o.next,h=x,u=u.next}if(p){u=e.gverts.next;let x=u,y=o.elt;if(t||y.gnormx*this.dirx+y.gnormy*this.diry<0){let d=x.x-h.x,_=x.y-h.y,f=h.x-this.originx,z=h.y-this.originy,P=_*this.dirx-d*this.diry;if(P*P>s.Config.epsilon){P=1/P;let k=(_*f-d*z)*P;if(k>0&&k<=this.maxdist&&(k<i||k>l)){let m=(this.diry*f-this.dirx*z)*P;m>-s.Config.epsilon&&m<1+s.Config.epsilon&&(k<i&&(i=k,r=o.elt),k>l&&(l=k,a=o.elt))}}}}if(r!=null){let x=r.gnormx,y=r.gnormy,d=x*this.dirx+y*this.diry>0;d&&(x=-x,y=-y);let _=At._allocVec2(x,y),f=mn.getRay(_,i,d,e.outer);At._insertSorted(n,f)}if(a!=null&&r!=a){let x=a.gnormx,y=a.gnormy,d=x*this.dirx+y*this.diry>0;d&&(x=-x,y=-y);let _=At._allocVec2(x,y),f=mn.getRay(_,l,d,e.outer);At._insertSorted(n,f)}}};At.internal=!1;var yl=At;var wi=class wi{constructor(){this.forced=!1;this.x=0;this.y=0;this.links=null;this.id=0;this.next=null;this.node=null;this.id=_n.ZPP_SimpleVert(),Qt.zpp_pool==null?this.links=new Qt:(this.links=Qt.zpp_pool,Qt.zpp_pool=this.links.next,this.links.next=null),this.links.lt=wi.less_xy}static less_xy(e,t){return e.y<t.y?!0:e.y==t.y?e.x<t.x:!1}static swap_nodes(e,t){let n=e.node;e.node=t.node,t.node=n}static get(e,t){let n;return wi.zpp_pool==null?n=new wi:(n=wi.zpp_pool,wi.zpp_pool=n.next,n.next=null),n.x=e,n.y=t,n}free(){this.links.clear(),this.node=null,this.forced=!1}alloc(){}};wi.zpp_pool=null;var ke=wi;var qi=class qi{constructor(){this.left=null;this.right=null;this.vertices=null;this.id=0;this.next=null;this.prev=null;this.node=null;this.id=_n.ZPP_SimpleSeg(),Qt.zpp_pool==null?this.vertices=new Qt:(this.vertices=Qt.zpp_pool,Qt.zpp_pool=this.vertices.next,this.vertices.next=null),this.vertices.lt=(e,t)=>this.less_xy(e,t)}static get(e,t){let n;return qi.zpp_pool==null?n=new qi:(n=qi.zpp_pool,qi.zpp_pool=n.next,n.next=null),n.left=e,n.right=t,n.vertices.insert(e),n.vertices.insert(t),n}free(){this.left=this.right=null,this.prev=null,this.node=null,this.vertices.clear()}alloc(){}less_xy(e,t){return e.x<t.x?!0:e.x==t.x?e.y<t.y:!1}};qi.zpp_pool=null;var Vt=qi;var Ui=class Ui{constructor(){this.type=0;this.vertex=null;this.segment=null;this.segment2=null;this.node=null;this.next=null}static swap_nodes(e,t){let n=e.node;e.node=t.node,t.node=n}static less_xy(e,t){return e.vertex.x<t.vertex.x?!0:e.vertex.x>t.vertex.x?!1:e.vertex.y<t.vertex.y?!0:e.vertex.y>t.vertex.y?!1:e.type<t.type}static get(e){let t;return Ui.zpp_pool==null?t=new Ui:(t=Ui.zpp_pool,Ui.zpp_pool=t.next,t.next=null),t.vertex=e,t}free(){this.vertex=null,this.segment=this.segment2=null,this.node=null}alloc(){}};Ui.zpp_pool=null;var Ce=Ui;var Wi=class{constructor(){this.sweepx=0;this.tree=null;fs.zpp_pool==null?this.tree=new fs:(this.tree=fs.zpp_pool,fs.zpp_pool=this.tree.next,this.tree.next=null),this.tree.lt=(e,t)=>this.edge_lt(e,t),this.tree.swapped=(e,t)=>this.swap_nodes(e,t)}swap_nodes(e,t){let n=e.node;e.node=t.node,t.node=n}edge_lt(e,t){let n=e.left,s=e.right,i=t.left,l=t.right,r,a,o,p,c;if(e.left==t.left&&e.right==t.right)return!1;if(e.left==t.right)return n.x==s.x?n.y<s.y?n.y>i.y:s.y>i.y:(c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y,(c?a*o-r*p:p*r-o*a)<0);if(e.right==t.left){let h;return i.x==l.x?h=i.y<l.y?i.y>n.y:l.y>n.y:(c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=n.x-i.x,p=n.y-i.y,h=(c?a*o-r*p:p*r-o*a)<0),!h}else{if(e.left==t.left)return n.x==s.x?n.y<s.y?n.y>l.y:s.y>l.y:(c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=l.x-n.x,p=l.y-n.y,(c?a*o-r*p:p*r-o*a)<0);if(e.right==t.right)return n.x==s.x?n.y<s.y?n.y>i.y:s.y>i.y:(c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y,(c?a*o-r*p:p*r-o*a)<0)}if(n.x==s.x)if(i.x==l.x){let h=n.y<s.y?s:n,u=i.y<l.y?l:i;return h.y>u.y}else{c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=n.x-i.x,p=n.y-i.y;let h=c?a*o-r*p:p*r-o*a;c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=s.x-i.x,p=s.y-i.y;let u=c?a*o-r*p:p*r-o*a;return h*u>=0?h>=0:this.sweepx>=n.x}else if(i.x==l.x){c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y;let h=c?a*o-r*p:p*r-o*a;c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=l.x-n.x,p=l.y-n.y;let u=c?a*o-r*p:p*r-o*a;return h*u>=0?h<0:this.sweepx<i.x}else{c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=i.x-n.x,p=i.y-n.y;let h=(c?a*o-r*p:p*r-o*a)<0;c=s.x<n.x,r=s.x-n.x,a=s.y-n.y,o=l.x-n.x,p=l.y-n.y;let u=(c?a*o-r*p:p*r-o*a)<0;if(h==u)return h;{c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=n.x-i.x,p=n.y-i.y;let x=(c?a*o-r*p:p*r-o*a)>=0;c=l.x<i.x,r=l.x-i.x,a=l.y-i.y,o=s.x-i.x,p=s.y-i.y;let y=(c?a*o-r*p:p*r-o*a)>=0;if(x==y)return x;let d=(this.sweepx-n.x)/(s.x-n.x)*(s.y-n.y)+n.y,_=(this.sweepx-i.x)/(l.x-i.x)*(l.y-i.y)+i.y;return d>_}}}clear(){this.tree.clear()}add(e){e.node=this.tree.insert(e);let t=this.tree.successor_node(e.node),n=this.tree.predecessor_node(e.node);return t!=null&&(e.next=t.data,t.data.prev=e),n!=null&&(e.prev=n.data,n.data.next=e),e}remove(e){let t=this.tree.successor_node(e.node),n=this.tree.predecessor_node(e.node);t!=null&&(t.data.prev=e.prev),n!=null&&(n.data.next=e.next),this.tree.remove_node(e.node),e.node=null}intersect(e,t){if(e==null||t==null)return!1;if(e.left==t.left||e.left==t.right||e.right==t.left||e.right==t.right)return!1;{let n=e.left,s=e.right,i=t.left,l=t.right,r=(i.x-n.x)*(s.y-n.y)-(s.x-n.x)*(i.y-n.y),a=(l.x-n.x)*(s.y-n.y)-(s.x-n.x)*(l.y-n.y);if(r*a>0)return!1;{let o=(n.x-i.x)*(l.y-i.y)-(l.x-i.x)*(n.y-i.y),p=(s.x-i.x)*(l.y-i.y)-(l.x-i.x)*(s.y-i.y);return!(o*p>0)}}}intersection(e,t){if(e==null||t==null)return null;if(e.left==t.left||e.left==t.right||e.right==t.left||e.right==t.right)return null;{let n=e.left,s=e.right,i=t.left,l=t.right,r=s.x-n.x,a=s.y-n.y,o=l.x-i.x,p=l.y-i.y,c=p*r-o*a;if(c==0)return null;c=1/c;let h=i.x-n.x,u=i.y-n.y,x=(p*h-o*u)*c;if(x<0||x>1)return null;let y=(a*h-r*u)*c;if(y<0||y>1)return null;let d;if(y==0||y==1||x==0||x==1){let z=y==0;if(y==1&&z)throw new Error("corner case 1a");if(y==1&&(z=!0),x==0&&z)throw new Error("corner case 1b");if(x==0&&(z=!0),x==1&&z)throw new Error("corner case 1c");d=y==0?i:y==1?l:x==0?n:s}else{let z=.5*(n.x+r*x+i.x+o*y),P=.5*(n.y+a*x+i.y+p*y),k;ke.zpp_pool==null?k=new ke:(k=ke.zpp_pool,ke.zpp_pool=k.next,k.next=null),k.x=z,k.y=P,d=k}let _;Ce.zpp_pool==null?_=new Ce:(_=Ce.zpp_pool,Ce.zpp_pool=_.next,_.next=null),_.vertex=d;let f=_;return f.type=0,f.segment=e,f.segment2=t,f}}};var de=class de{static decompose(e,t){de.sweep==null&&(de.sweep=new Wi,de.inthash=new Bi),de.vertices==null&&(Qt.zpp_pool==null?de.vertices=new Qt:(de.vertices=Qt.zpp_pool,Qt.zpp_pool=de.vertices.next,de.vertices.next=null),de.vertices.lt=ke.less_xy,de.vertices.swapped=ke.swap_nodes),de.queue==null&&(Kn.zpp_pool==null?de.queue=new Kn:(de.queue=Kn.zpp_pool,Kn.zpp_pool=de.queue.next,de.queue.next=null),de.queue.lt=Ce.less_xy,de.queue.swapped=Ce.swap_nodes);let n=null,s=null,i=e,l=e;if(i!=null){let x=i;for(;;){let y=x,d=y.x,_=y.y,f;ke.zpp_pool==null?f=new ke:(f=ke.zpp_pool,ke.zpp_pool=f.next,f.next=null),f.x=d,f.y=_;let z=f,P=de.vertices.parent;for(;P!=null;)if(de.vertices.lt(z,P.data))P=P.prev;else if(de.vertices.lt(P.data,z))P=P.next;else break;let k=P;if(k!=null){let m=z;m.links.clear(),m.node=null,m.forced=!1,m.next=ke.zpp_pool,ke.zpp_pool=m,z=k.data}else z.node=de.vertices.insert(z);if(s!=null){let m;Ce.zpp_pool==null?m=new Ce:(m=Ce.zpp_pool,Ce.zpp_pool=m.next,m.next=null),m.vertex=s;let b=m,M;Ce.zpp_pool==null?M=new Ce:(M=Ce.zpp_pool,Ce.zpp_pool=M.next,M.next=null),M.vertex=z;let v=M,w;Ce.less_xy(b,v)?(b.type=1,v.type=2,w=Vt.get(s,z)):(b.type=2,v.type=1,w=Vt.get(z,s)),b.segment=v.segment=w,de.queue.insert(b),de.queue.insert(v),s.links.insert(z),z.links.insert(s)}if(s=z,n==null&&(n=z),x=x.next,x==l)break}}let r;Ce.zpp_pool==null?r=new Ce:(r=Ce.zpp_pool,Ce.zpp_pool=r.next,r.next=null),r.vertex=s;let a=r,o;Ce.zpp_pool==null?o=new Ce:(o=Ce.zpp_pool,Ce.zpp_pool=o.next,o.next=null),o.vertex=n;let p=o,c;for(Ce.less_xy(a,p)?(a.type=1,p.type=2,c=Vt.get(s,n)):(a.type=2,p.type=1,c=Vt.get(n,s)),a.segment=p.segment=c,de.queue.insert(a),de.queue.insert(p),s.links.insert(n),n.links.insert(s),de.ints==null&&(Kn.zpp_pool==null?de.ints=new Kn:(de.ints=Kn.zpp_pool,Kn.zpp_pool=de.ints.next,de.ints.next=null),de.ints.lt=Ce.less_xy);!de.queue.empty();){let x=de.queue.pop_front();if(de.sweep.sweepx=x.vertex.x,x.type==1){let d=x.segment;if(de.sweep.add(d),d.next!=null&&d!=null&&!(d.next.id<d.id?de.inthash.has(d.next.id,d.id):de.inthash.has(d.id,d.next.id))){let _=de.sweep.intersection(d.next,d);if(_!=null)if(_.vertex.x>=de.sweep.sweepx){let f=de.queue.parent;for(;f!=null;)if(de.queue.lt(_,f.data))f=f.prev;else if(de.queue.lt(f.data,_))f=f.next;else break;let z=f;if(z==null){let P=de.ints.parent;for(;P!=null;)if(de.ints.lt(_,P.data))P=P.prev;else if(de.ints.lt(P.data,_))P=P.next;else break;let k=P;if(k!=null){let m=_.vertex;m.links.clear(),m.node=null,m.forced=!1,m.next=ke.zpp_pool,ke.zpp_pool=m,_.vertex=k.data.vertex,k.data=_,de.queue.insert(_)}else de.queue.insert(_),de.ints.insert(_);if(d.next.id<d.id){let m=de.inthash,b=d.next.id,M=d.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=M;let w=v;w.value=!0,m.add(w)}else{let m=de.inthash,b=d.id,M=d.next.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=M;let w=v;w.value=!0,m.add(w)}}else{let P=z.data;if(P.segment!=_.segment||_.segment2!=P.segment2)throw new Error("corner case 2, shiiiit.");let k=_.vertex;k.links.clear(),k.node=null,k.forced=!1,k.next=ke.zpp_pool,ke.zpp_pool=k;let m=_;m.vertex=null,m.segment=m.segment2=null,m.node=null,m.next=Ce.zpp_pool,Ce.zpp_pool=m}}else{let f=_.vertex;f.links.clear(),f.node=null,f.forced=!1,f.next=ke.zpp_pool,ke.zpp_pool=f;let z=_;z.vertex=null,z.segment=z.segment2=null,z.node=null,z.next=Ce.zpp_pool,Ce.zpp_pool=z}}if(d!=null&&d.prev!=null&&!(d.id<d.prev.id?de.inthash.has(d.id,d.prev.id):de.inthash.has(d.prev.id,d.id))){let _=de.sweep.intersection(d,d.prev);if(_!=null)if(_.vertex.x>=de.sweep.sweepx){let f=de.queue.parent;for(;f!=null;)if(de.queue.lt(_,f.data))f=f.prev;else if(de.queue.lt(f.data,_))f=f.next;else break;let z=f;if(z==null){let P=de.ints.parent;for(;P!=null;)if(de.ints.lt(_,P.data))P=P.prev;else if(de.ints.lt(P.data,_))P=P.next;else break;let k=P;if(k!=null){let m=_.vertex;m.links.clear(),m.node=null,m.forced=!1,m.next=ke.zpp_pool,ke.zpp_pool=m,_.vertex=k.data.vertex,k.data=_,de.queue.insert(_)}else de.queue.insert(_),de.ints.insert(_);if(d.id<d.prev.id){let m=de.inthash,b=d.id,M=d.prev.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=M;let w=v;w.value=!0,m.add(w)}else{let m=de.inthash,b=d.prev.id,M=d.id,v;Te.zpp_pool==null?v=new Te:(v=Te.zpp_pool,Te.zpp_pool=v.next,v.next=null),v.id=b,v.di=M;let w=v;w.value=!0,m.add(w)}}else{let P=z.data;if(P.segment!=_.segment||_.segment2!=P.segment2)throw new Error("corner case 2, shiiiit.");let k=_.vertex;k.links.clear(),k.node=null,k.forced=!1,k.next=ke.zpp_pool,ke.zpp_pool=k;let m=_;m.vertex=null,m.segment=m.segment2=null,m.node=null,m.next=Ce.zpp_pool,Ce.zpp_pool=m}}else{let f=_.vertex;f.links.clear(),f.node=null,f.forced=!1,f.next=ke.zpp_pool,ke.zpp_pool=f;let z=_;z.vertex=null,z.segment=z.segment2=null,z.node=null,z.next=Ce.zpp_pool,Ce.zpp_pool=z}}}else if(x.type==2){let d=x.segment;if(d.node!=null){let _=d.next,f=d.prev;de.sweep.remove(d);let z=d;if(z.left=z.right=null,z.prev=null,z.node=null,z.vertices.clear(),z.next=Vt.zpp_pool,Vt.zpp_pool=z,_!=null&&f!=null&&!(_.id<f.id?de.inthash.has(_.id,f.id):de.inthash.has(f.id,_.id))){let P=de.sweep.intersection(_,f);if(P!=null)if(P.vertex.x>=de.sweep.sweepx){let k=de.queue.parent;for(;k!=null;)if(de.queue.lt(P,k.data))k=k.prev;else if(de.queue.lt(k.data,P))k=k.next;else break;let m=k;if(m==null){let b=de.ints.parent;for(;b!=null;)if(de.ints.lt(P,b.data))b=b.prev;else if(de.ints.lt(b.data,P))b=b.next;else break;let M=b;if(M!=null){let v=P.vertex;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v,P.vertex=M.data.vertex,M.data=P,de.queue.insert(P)}else de.queue.insert(P),de.ints.insert(P);if(_.id<f.id){let v=de.inthash,w=_.id,O=f.id,E;Te.zpp_pool==null?E=new Te:(E=Te.zpp_pool,Te.zpp_pool=E.next,E.next=null),E.id=w,E.di=O;let C=E;C.value=!0,v.add(C)}else{let v=de.inthash,w=f.id,O=_.id,E;Te.zpp_pool==null?E=new Te:(E=Te.zpp_pool,Te.zpp_pool=E.next,E.next=null),E.id=w,E.di=O;let C=E;C.value=!0,v.add(C)}}else{let b=m.data;if(b.segment!=P.segment||P.segment2!=b.segment2)throw new Error("corner case 2, shiiiit.");let M=P.vertex;M.links.clear(),M.node=null,M.forced=!1,M.next=ke.zpp_pool,ke.zpp_pool=M;let v=P;v.vertex=null,v.segment=v.segment2=null,v.node=null,v.next=Ce.zpp_pool,Ce.zpp_pool=v}}else{let k=P.vertex;k.links.clear(),k.node=null,k.forced=!1,k.next=ke.zpp_pool,ke.zpp_pool=k;let m=P;m.vertex=null,m.segment=m.segment2=null,m.node=null,m.next=Ce.zpp_pool,Ce.zpp_pool=m}}}}else{let d=x.vertex,_=d.node==null,f=x.segment,z=x.segment2;if(z.next!=f){let M=f;f=z,z=M}let P=f.vertices.parent;for(;P!=null;)if(f.vertices.lt(d,P.data))P=P.prev;else if(f.vertices.lt(P.data,d))P=P.next;else break;let k=P==null,m=z.vertices.parent;for(;m!=null;)if(z.vertices.lt(d,m.data))m=m.prev;else if(z.vertices.lt(m.data,d))m=m.next;else break;let b=m==null;if(k){let M=f.vertices.insert(d),v=d==f.left?d:f.vertices.predecessor_node(M).data,w=d==f.right?d:f.vertices.successor_node(M).data;v.links.remove(w),d!=v&&v.links.insert(d),w.links.remove(v),d!=w&&w.links.insert(d),d!=v&&d.links.insert(v),d!=w&&d.links.insert(w)}if(b){let M=z.vertices.insert(d),v=d==z.left?d:z.vertices.predecessor_node(M).data,w=d==z.right?d:z.vertices.successor_node(M).data;v.links.remove(w),d!=v&&v.links.insert(d),w.links.remove(v),d!=w&&w.links.insert(d),d!=v&&d.links.insert(v),d!=w&&d.links.insert(w)}if(_&&(d.node=de.vertices.insert(d)),d.forced=!0,_){let M=f.node,v=z.node;M.data=z,v.data=f,f.node=v,z.node=M,z.next=f.next,f.next=z,f.prev=z.prev,z.prev=f,f.prev!=null&&(f.prev.next=f),z.next!=null&&(z.next.prev=z)}if(z.next!=null&&z!=null&&!(z.next.id<z.id?de.inthash.has(z.next.id,z.id):de.inthash.has(z.id,z.next.id))){let M=de.sweep.intersection(z.next,z);if(M!=null)if(M.vertex.x>=de.sweep.sweepx){let v=de.queue.parent;for(;v!=null;)if(de.queue.lt(M,v.data))v=v.prev;else if(de.queue.lt(v.data,M))v=v.next;else break;let w=v;if(w==null){let O=de.ints.parent;for(;O!=null;)if(de.ints.lt(M,O.data))O=O.prev;else if(de.ints.lt(O.data,M))O=O.next;else break;let E=O;if(E!=null){let C=M.vertex;C.links.clear(),C.node=null,C.forced=!1,C.next=ke.zpp_pool,ke.zpp_pool=C,M.vertex=E.data.vertex,E.data=M,de.queue.insert(M)}else de.queue.insert(M),de.ints.insert(M);if(z.next.id<z.id){let C=de.inthash,N=z.next.id,Z=z.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,C.add(A)}else{let C=de.inthash,N=z.id,Z=z.next.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,C.add(A)}}else{let O=w.data;if(O.segment!=M.segment||M.segment2!=O.segment2)throw new Error("corner case 2, shiiiit.");let E=M.vertex;E.links.clear(),E.node=null,E.forced=!1,E.next=ke.zpp_pool,ke.zpp_pool=E;let C=M;C.vertex=null,C.segment=C.segment2=null,C.node=null,C.next=Ce.zpp_pool,Ce.zpp_pool=C}}else{let v=M.vertex;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v;let w=M;w.vertex=null,w.segment=w.segment2=null,w.node=null,w.next=Ce.zpp_pool,Ce.zpp_pool=w}}if(f!=null&&f.prev!=null&&!(f.id<f.prev.id?de.inthash.has(f.id,f.prev.id):de.inthash.has(f.prev.id,f.id))){let M=de.sweep.intersection(f,f.prev);if(M!=null)if(M.vertex.x>=de.sweep.sweepx){let v=de.queue.parent;for(;v!=null;)if(de.queue.lt(M,v.data))v=v.prev;else if(de.queue.lt(v.data,M))v=v.next;else break;let w=v;if(w==null){let O=de.ints.parent;for(;O!=null;)if(de.ints.lt(M,O.data))O=O.prev;else if(de.ints.lt(O.data,M))O=O.next;else break;let E=O;if(E!=null){let C=M.vertex;C.links.clear(),C.node=null,C.forced=!1,C.next=ke.zpp_pool,ke.zpp_pool=C,M.vertex=E.data.vertex,E.data=M,de.queue.insert(M)}else de.queue.insert(M),de.ints.insert(M);if(f.id<f.prev.id){let C=de.inthash,N=f.id,Z=f.prev.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,C.add(A)}else{let C=de.inthash,N=f.prev.id,Z=f.id,S;Te.zpp_pool==null?S=new Te:(S=Te.zpp_pool,Te.zpp_pool=S.next,S.next=null),S.id=N,S.di=Z;let A=S;A.value=!0,C.add(A)}}else{let O=w.data;if(O.segment!=M.segment||M.segment2!=O.segment2)throw new Error("corner case 2, shiiiit.");let E=M.vertex;E.links.clear(),E.node=null,E.forced=!1,E.next=ke.zpp_pool,ke.zpp_pool=E;let C=M;C.vertex=null,C.segment=C.segment2=null,C.node=null,C.next=Ce.zpp_pool,Ce.zpp_pool=C}}else{let v=M.vertex;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v;let w=M;w.vertex=null,w.segment=w.segment2=null,w.node=null,w.next=Ce.zpp_pool,Ce.zpp_pool=w}}de.ints.remove(x)}let y=x;y.vertex=null,y.segment=y.segment2=null,y.node=null,y.next=Ce.zpp_pool,Ce.zpp_pool=y}let h=0,u=de.inthash.table.length;for(;h<u;){let x=h++,y=de.inthash.table[x];if(y!=null){for(;y!=null;){let d=y.hnext;y.hnext=null;let _=y;_.next=Te.zpp_pool,Te.zpp_pool=_,y=d}de.inthash.table[x]=null}}for(t==null&&(t=new ys);!de.vertices.empty();)de.clip_polygon(de.vertices,t);return t}static clip_polygon(e,t){let n=null,s=e.first(),i=s,l=s.links.parent,r=l.prev==null?l.next:l.prev,a=l.data,o=r.data,p=s.x-a.x,c=s.y-a.y,h=o.x-s.x;(o.y-s.y)*p-h*c<0&&(o=a);let x=s.x,y=s.y,d;ge.zpp_pool==null?d=new ge:(d=ge.zpp_pool,ge.zpp_pool=d.next,d.next=null),d.forced=!1,d.x=x,d.y=y;let _=d;if(n==null)_.prev=_.next=_;else{let z=n,P=z.next;_.prev=z,_.next=P,P.prev=_,z.next=_}for(n=_,n.forced=s.forced;;){if(s.links.remove(o),o.links.remove(s),o==i){if(s.links.empty()){e.remove(s);let b=s;b.links.clear(),b.node=null,b.forced=!1,b.next=ke.zpp_pool,ke.zpp_pool=b}break}let z=o.x,P=o.y,k;ge.zpp_pool==null?k=new ge:(k=ge.zpp_pool,ge.zpp_pool=k.next,k.next=null),k.forced=!1,k.x=z,k.y=P;let m=k;if(n==null)m.prev=m.next=m;else{let b=n,M=b.next;m.prev=b,m.next=M,M.prev=m,b.next=m}if(n=m,n.forced=o.forced,o.links.singular()){if(s.links.empty()){e.remove(s);let b=s;b.links.clear(),b.node=null,b.forced=!1,b.next=ke.zpp_pool,ke.zpp_pool=b}s=o,o=o.links.parent.data}else{let b=null,M=0;if(!o.links.empty()){let v=o.links.parent;for(;v.prev!=null;)v=v.prev;for(;v!=null;){let w=v.data;if(b==null){b=w;let O=o.x-s.x,E=o.y-s.y,C=w.x-o.x;M=(w.y-o.y)*O-C*E}else{let O=o.x-s.x,E=o.y-s.y,C=w.x-o.x,Z=(w.y-o.y)*O-C*E;if(Z>0&&M<=0)b=w,M=Z;else if(M*Z>=0){let S=o.x-w.x,A=o.y-w.y,F=b.x-o.x;(b.y-o.y)*S-F*A>0&&(b=w,M=Z)}}if(v.next!=null)for(v=v.next;v.prev!=null;)v=v.prev;else{for(;v.parent!=null&&v==v.parent.next;)v=v.parent;v=v.parent}}}if(s.links.empty()){e.remove(s);let v=s;v.links.clear(),v.node=null,v.forced=!1,v.next=ke.zpp_pool,ke.zpp_pool=v}s=o,o=b}}e.remove(i);let f=i;f.links.clear(),f.node=null,f.forced=!1,f.next=ke.zpp_pool,ke.zpp_pool=f,t.add(n)}static isSimple(e){de.sweep==null&&(de.sweep=new Wi,de.inthash=new Bi);let t=de.list_vertices;t==null&&(t=de.list_vertices=new jl);let n=e,s=e;if(n!=null){let d=n;for(;;){let _=d,f=_.x,z=_.y,P;if(ke.zpp_pool==null?P=new ke:(P=ke.zpp_pool,ke.zpp_pool=P.next,P.next=null),P.x=f,P.y=z,t.add(P),d=d.next,d==s)break}}let i=de.list_queue;i==null&&(i=de.list_queue=new Bl);let l=t.head,r=l.elt;for(l=l.next;l!=null;){let d=l.elt,_;Ce.zpp_pool==null?_=new Ce:(_=Ce.zpp_pool,Ce.zpp_pool=_.next,_.next=null),_.vertex=r;let f=i.add(_),z;Ce.zpp_pool==null?z=new Ce:(z=Ce.zpp_pool,Ce.zpp_pool=z.next,z.next=null),z.vertex=d;let P=i.add(z),k;Ce.less_xy(f,P)?(f.type=1,P.type=2,k=Vt.get(r,d)):(f.type=2,P.type=1,k=Vt.get(d,r)),f.segment=P.segment=k,r=d,l=l.next}let a=t.head.elt,o;Ce.zpp_pool==null?o=new Ce:(o=Ce.zpp_pool,Ce.zpp_pool=o.next,o.next=null),o.vertex=r;let p=i.add(o),c;Ce.zpp_pool==null?c=new Ce:(c=Ce.zpp_pool,Ce.zpp_pool=c.next,c.next=null),c.vertex=a;let h=i.add(c),u;Ce.less_xy(p,h)?(p.type=1,h.type=2,u=Vt.get(r,a)):(p.type=2,h.type=1,u=Vt.get(a,r)),p.segment=h.segment=u;let x=i;if(x.head!=null&&x.head.next!=null){let d=x.head,_,f,z,P,k=1,m,b,M;for(;;){for(m=0,f=d,d=null,_=null;f!=null;){for(++m,z=f,b=0,M=k;z!=null&&b<k;)++b,z=z.next;for(;b>0||M>0&&z!=null;)b==0?(P=z,z=z.next,--M):M==0||z==null||Ce.less_xy(f.elt,z.elt)?(P=f,f=f.next,--b):(P=z,z=z.next,--M),_!=null?_.next=P:d=P,_=P;f=z}if(_.next=null,k<<=1,!(m>1))break}x.head=d,x.modified=!0,x.pushmod=!0}let y=!0;for(;i.head!=null;){let d=i.pop_unsafe(),_=d.segment;if(d.type==1){if(de.sweep.add(_),de.sweep.intersect(_,_.next)||de.sweep.intersect(_,_.prev)){y=!1;break}}else if(d.type==2){if(de.sweep.intersect(_.prev,_.next)){y=!1;break}de.sweep.remove(_);let z=_;z.left=z.right=null,z.prev=null,z.node=null,z.vertices.clear(),z.next=Vt.zpp_pool,Vt.zpp_pool=z}let f=d;f.vertex=null,f.segment=f.segment2=null,f.node=null,f.next=Ce.zpp_pool,Ce.zpp_pool=f}for(;i.head!=null;){let d=i.pop_unsafe();if(d.type==2){let f=d.segment;f.left=f.right=null,f.prev=null,f.node=null,f.vertices.clear(),f.next=Vt.zpp_pool,Vt.zpp_pool=f}let _=d;_.vertex=null,_.segment=_.segment2=null,_.node=null,_.next=Ce.zpp_pool,Ce.zpp_pool=_}for(de.sweep.clear();t.head!=null;){let d=t.pop_unsafe();d.links.clear(),d.node=null,d.forced=!1,d.next=ke.zpp_pool,ke.zpp_pool=d}return y}};de.sweep=null,de.inthash=null,de.vertices=null,de.queue=null,de.ints=null,de.list_vertices=null,de.list_queue=null;var ml=de;var Ki=class Ki{constructor(){this.x=0;this.y=0;this.next=null;this.prev=null;this.flag=!1;this.forced=!1}static get(e){let t;return Ki.zpp_pool==null?t=new Ki:(t=Ki.zpp_pool,Ki.zpp_pool=t.next,t.next=null),t.x=e.x,t.y=e.y,t.flag=!1,t}free(){}alloc(){}};Ki.zpp_pool=null;var vn=Ki;var Yi=class Yi{constructor(){this.next=null;this.min=null;this.max=null}static get(e,t){let n;return Yi.zpp_pool==null?n=new Yi:(n=Yi.zpp_pool,Yi.zpp_pool=n.next,n.next=null),n.min=e,n.max=t,n}free(){this.min=null,this.max=null}alloc(){}};Yi.zpp_pool=null;var Le=Yi;var It=class It{static lessval(e,t){return e.x-t.x+(e.y-t.y)}static less(e,t){return e.x-t.x+(e.y-t.y)<0}static distance(e,t,n){let s=n.x-t.x,i=n.y-t.y,l=e.x-t.x,r=e.y-t.y;if(s*s+i*i==0)return l*l+r*r;{let o=(l*s+r*i)/(s*s+i*i);if(o<=0)return l*l+r*r;if(o>=1){let p=e.x-n.x,c=e.y-n.y;return p*p+c*c}else{let p=o;return l-=s*p,r-=i*p,l*l+r*r}}}static simplify(e,t){let n=null,s=null,i=null;t*=t,It.stack==null&&(It.stack=new Il);let l=null,r=null,a=e;for(;;){let p;vn.zpp_pool==null?p=new vn:(p=vn.zpp_pool,vn.zpp_pool=p.next,p.next=null),p.x=a.x,p.y=a.y,p.flag=!1;let c=p;if(c.forced=a.forced,c.forced){if(c.flag=!0,l!=null){let u=It.stack,x;Le.zpp_pool==null?x=new Le:(x=Le.zpp_pool,Le.zpp_pool=x.next,x.next=null),x.min=l,x.max=c,u.add(x)}else r=c;l=c}let h=c;if(n==null?h.prev=h.next=h:(h.prev=n,h.next=n.next,n.next.prev=h,n.next=h),n=h,s==null?(s=n,i=n):(n.x-s.x+(n.y-s.y)<0&&(s=n),i.x-n.x+(i.y-n.y)<0&&(i=n)),a=a.next,a==e)break}if(It.stack.head==null)if(r==null){s.flag=i.flag=!0;let p=It.stack,c;Le.zpp_pool==null?c=new Le:(c=Le.zpp_pool,Le.zpp_pool=c.next,c.next=null),c.min=s,c.max=i,p.add(c);let h=It.stack,u;Le.zpp_pool==null?u=new Le:(u=Le.zpp_pool,Le.zpp_pool=u.next,u.next=null),u.min=i,u.max=s,h.add(u)}else{let p=s.x-r.x+(s.y-r.y);p<0&&(p=-p);let c=i.x-r.x+(i.y-r.y);if(c<0&&(c=-c),p>c){s.flag=r.flag=!0;let h=It.stack,u;Le.zpp_pool==null?u=new Le:(u=Le.zpp_pool,Le.zpp_pool=u.next,u.next=null),u.min=s,u.max=r,h.add(u);let x=It.stack,y;Le.zpp_pool==null?y=new Le:(y=Le.zpp_pool,Le.zpp_pool=y.next,y.next=null),y.min=r,y.max=s,x.add(y)}else{i.flag=r.flag=!0;let h=It.stack,u;Le.zpp_pool==null?u=new Le:(u=Le.zpp_pool,Le.zpp_pool=u.next,u.next=null),u.min=i,u.max=r,h.add(u);let x=It.stack,y;Le.zpp_pool==null?y=new Le:(y=Le.zpp_pool,Le.zpp_pool=y.next,y.next=null),y.min=r,y.max=i,x.add(y)}}else{let p=It.stack,c;Le.zpp_pool==null?c=new Le:(c=Le.zpp_pool,Le.zpp_pool=c.next,c.next=null),c.min=l,c.max=r,p.add(c)}for(;It.stack.head!=null;){let p=It.stack.pop_unsafe(),c=p.min,h=p.max,u=p;u.min=u.max=null,u.next=Le.zpp_pool,Le.zpp_pool=u;let x=t,y=null,d=c.next;for(;d!=h;){let _=It.distance(d,c,h);_>x&&(x=_,y=d),d=d.next}if(y!=null){y.flag=!0;let _=It.stack,f;Le.zpp_pool==null?f=new Le:(f=Le.zpp_pool,Le.zpp_pool=f.next,f.next=null),f.min=c,f.max=y,_.add(f);let z=It.stack,P;Le.zpp_pool==null?P=new Le:(P=Le.zpp_pool,Le.zpp_pool=P.next,P.next=null),P.min=y,P.max=h,z.add(P)}}let o=null;for(;n!=null;){if(n.flag){let p=n.x,c=n.y,h;ge.zpp_pool==null?h=new ge:(h=ge.zpp_pool,ge.zpp_pool=h.next,h.next=null),h.forced=!1,h.x=p,h.y=c;let u=h;o==null?u.prev=u.next=u:(u.prev=o,u.next=o.next,o.next.prev=u,o.next=u),o=u,o.forced=n.forced}if(n!=null&&n.prev==n)n.next=n.prev=null,n.next=vn.zpp_pool,vn.zpp_pool=n,n=null;else{let p=n.next;n.prev.next=n.next,n.next.prev=n.prev,n.next=n.prev=null,n.next=vn.zpp_pool,vn.zpp_pool=n,n=p}}return o}};It.stack=null;var fl=It;var qs=class{constructor(){this.next=null;this.toi=0;this.s1=null;this.s2=null;this.arbiter=null;this.frozen1=!1;this.frozen2=!1;this.slipped=!1;this.failed=!1;this.kinematic=!1;this.c1=new le,this.c2=new le,this.axis=new le}alloc(){this.failed=!1,this.s1=this.s2=null,this.arbiter=null}free(){}};qs.zpp_pool=null;function at(g){return g.type===0||g.type===2}function Dt(g){return g.type===0?g.circle.radius:g.capsule.halfLength+g.capsule.radius}var gn=class{static dynamicSweep(e,t,n,s,i){let l=me();i==null&&(i=!1);let r=e.s1,a=e.s2,o=r.body,p=a.body,c=0,h=0;c=p.velx-o.velx,h=p.vely-o.vely;let u=o.angvel;u<0&&(u=-u);let x=p.angvel;x<0&&(x=-x);let y=r.sweepCoef*u+a.sweepCoef*x;if(!i&&!e.kinematic&&c*c+h*h<l.Config.dynamicSweepLinearThreshold*l.Config.dynamicSweepLinearThreshold&&y<l.Config.dynamicSweepAngularThreshold){e.toi=-1,e.failed=!0;return}let d=e.c1,_=e.c2,f=e.axis,z=n,P=0;for(;;){let Z=z*t,S=Z-o.sweepTime;if(S!=0){o.sweepTime=Z;let Y=S;if(o.posx+=o.velx*Y,o.posy+=o.vely*Y,o.angvel!=0){let X=o.sweep_angvel*S;if(o.rot+=X,X*X>1e-4)o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot);else{let ee=X*X,q=1-.5*ee,L=1-ee*ee/8,D=(q*o.axisx+X*o.axisy)*L;o.axisy=(q*o.axisy-X*o.axisx)*L,o.axisx=D}}}if(r.type==0||r.type===2)r.worldCOMx=o.posx+(o.axisy*r.localCOMx-o.axisx*r.localCOMy),r.worldCOMy=o.posy+(r.localCOMx*o.axisx+r.localCOMy*o.axisy);else{let Y=r.polygon,X=Y.lverts.next,ee=Y.gverts.next;for(;ee!=null;){let H=ee,K=X;X=X.next,H.x=o.posx+(o.axisy*K.x-o.axisx*K.y),H.y=o.posy+(K.x*o.axisx+K.y*o.axisy),ee=ee.next}let q=Y.edges.head,L=Y.gverts.next,D=L;for(L=L.next;L!=null;){let H=L,K=q.elt;q=q.next,K.gnormx=o.axisy*K.lnormx-o.axisx*K.lnormy,K.gnormy=K.lnormx*o.axisx+K.lnormy*o.axisy,K.gprojection=o.posx*K.gnormx+o.posy*K.gnormy+K.lprojection,K.tp0=D.y*K.gnormx-D.x*K.gnormy,K.tp1=H.y*K.gnormx-H.x*K.gnormy,D=H,L=L.next}let I=Y.gverts.next,U=q.elt;q=q.next,U.gnormx=o.axisy*U.lnormx-o.axisx*U.lnormy,U.gnormy=U.lnormx*o.axisx+U.lnormy*o.axisy,U.gprojection=o.posx*U.gnormx+o.posy*U.gnormy+U.lprojection,U.tp0=D.y*U.gnormx-D.x*U.gnormy,U.tp1=I.y*U.gnormx-I.x*U.gnormy}let A=z*t,F=A-p.sweepTime;if(F!=0){p.sweepTime=A;let Y=F;if(p.posx+=p.velx*Y,p.posy+=p.vely*Y,p.angvel!=0){let X=p.sweep_angvel*F;if(p.rot+=X,X*X>1e-4)p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot);else{let ee=X*X,q=1-.5*ee,L=1-ee*ee/8,D=(q*p.axisx+X*p.axisy)*L;p.axisy=(q*p.axisy-X*p.axisx)*L,p.axisx=D}}}if(a.type==0||a.type===2)a.worldCOMx=p.posx+(p.axisy*a.localCOMx-p.axisx*a.localCOMy),a.worldCOMy=p.posy+(a.localCOMx*p.axisx+a.localCOMy*p.axisy);else{let Y=a.polygon,X=Y.lverts.next,ee=Y.gverts.next;for(;ee!=null;){let H=ee,K=X;X=X.next,H.x=p.posx+(p.axisy*K.x-p.axisx*K.y),H.y=p.posy+(K.x*p.axisx+K.y*p.axisy),ee=ee.next}let q=Y.edges.head,L=Y.gverts.next,D=L;for(L=L.next;L!=null;){let H=L,K=q.elt;q=q.next,K.gnormx=p.axisy*K.lnormx-p.axisx*K.lnormy,K.gnormy=K.lnormx*p.axisx+K.lnormy*p.axisy,K.gprojection=p.posx*K.gnormx+p.posy*K.gnormy+K.lprojection,K.tp0=D.y*K.gnormx-D.x*K.gnormy,K.tp1=H.y*K.gnormx-H.x*K.gnormy,D=H,L=L.next}let I=Y.gverts.next,U=q.elt;q=q.next,U.gnormx=p.axisy*U.lnormx-p.axisx*U.lnormy,U.gnormy=U.lnormx*p.axisx+U.lnormy*p.axisy,U.gprojection=p.posx*U.gnormx+p.posy*U.gnormy+U.lprojection,U.tp0=D.y*U.gnormx-D.x*U.gnormy,U.tp1=I.y*U.gnormx-I.x*U.gnormy}let B=r,G=a,J=d,R=_;var k;if(at(B)&&at(G)){let Y=B.circle||B.capsule,X=G.circle||G.capsule,ee=Dt(B),q=Dt(G);var m;let L=0,D=0;L=X.worldCOMx-Y.worldCOMx,D=X.worldCOMy-Y.worldCOMy;let I=Math.sqrt(L*L+D*D);if(m=I-(ee+q),m<1e100){if(I==0)L=1,D=0;else{let K=1/I;L*=K,D*=K}let U=ee;J.x=Y.worldCOMx+L*U,J.y=Y.worldCOMy+D*U;let H=-q;R.x=X.worldCOMx+L*H,R.y=X.worldCOMy+D*H,f.x=L,f.y=D}k=m}else{let Y=!1;if(at(B)&&G.type==1){let X=B;B=G,G=X;let ee=J;J=R,R=ee,Y=!0}if(B.type==1&&at(G)){let X=B.polygon,ee=G.circle||G.capsule,q=Dt(G),L=-1e100,D=null,I=X.edges.head;for(;I!=null;){let U=I.elt,H=U.gnormx*ee.worldCOMx+U.gnormy*ee.worldCOMy-U.gprojection-q;if(H>1e100){L=H;break}H>0?H>L&&(L=H,D=U):L<0&&H>L&&(L=H,D=U),I=I.next}if(L<1e100){let U=D.gp0,H=D.gp1,K=ee.worldCOMy*D.gnormx-ee.worldCOMx*D.gnormy;if(K<=U.y*D.gnormx-U.x*D.gnormy){let ne=0,re=0;ne=ee.worldCOMx-U.x,re=ee.worldCOMy-U.y;let se=Math.sqrt(ne*ne+re*re);if(L=se-q,L<1e100){if(se==0)ne=1,re=0;else{let oe=1/se;ne*=oe,re*=oe}let ie=0;J.x=U.x+ne*ie,J.y=U.y+re*ie;let ae=-q;R.x=ee.worldCOMx+ne*ae,R.y=ee.worldCOMy+re*ae,f.x=ne,f.y=re}}else if(K>=H.y*D.gnormx-H.x*D.gnormy){let ne=0,re=0;ne=ee.worldCOMx-H.x,re=ee.worldCOMy-H.y;let se=Math.sqrt(ne*ne+re*re);if(L=se-q,L<1e100){if(se==0)ne=1,re=0;else{let oe=1/se;ne*=oe,re*=oe}let ie=0;J.x=H.x+ne*ie,J.y=H.y+re*ie;let ae=-q;R.x=ee.worldCOMx+ne*ae,R.y=ee.worldCOMy+re*ae,f.x=ne,f.y=re}}else{let ne=-q;R.x=ee.worldCOMx+D.gnormx*ne,R.y=ee.worldCOMy+D.gnormy*ne;let re=-L;J.x=R.x+D.gnormx*re,J.y=R.y+D.gnormy*re,f.x=D.gnormx,f.y=D.gnormy}}Y&&(f.x=-f.x,f.y=-f.y),k=L}else{let X=B.polygon,ee=G.polygon,q=-1e100,L=null,D=null,I=0,U=X.edges.head;for(;U!=null;){let H=U.elt,K=1e100,ne=ee.gverts.next;for(;ne!=null;){let re=ne,se=H.gnormx*re.x+H.gnormy*re.y;se<K&&(K=se),ne=ne.next}if(K-=H.gprojection,K>1e100){q=K;break}K>0?K>q&&(q=K,L=H,I=1):q<0&&K>q&&(q=K,L=H,I=1),U=U.next}if(q<1e100){let H=ee.edges.head;for(;H!=null;){let K=H.elt,ne=1e100,re=X.gverts.next;for(;re!=null;){let se=re,ie=K.gnormx*se.x+K.gnormy*se.y;ie<ne&&(ne=ie),re=re.next}if(ne-=K.gprojection,ne>1e100){q=ne;break}ne>0?ne>q&&(q=ne,D=K,I=2):q<0&&ne>q&&(q=ne,D=K,I=2),H=H.next}if(q<1e100){var b,M,v;if(I==1)b=X,M=ee,v=L;else{b=ee,M=X,v=D;let se=J;J=R,R=se,Y=!Y}let K=null,ne=1e100,re=M.edges.head;for(;re!=null;){let se=re.elt,ie=v.gnormx*se.gnormx+v.gnormy*se.gnormy;ie<ne&&(ne=ie,K=se),re=re.next}if(Y?(f.x=-v.gnormx,f.y=-v.gnormy):(f.x=v.gnormx,f.y=v.gnormy),q>=0){let se=v.gp0,ie=v.gp1,ae=K.gp0,oe=K.gp1,he=0,pe=0,ce=0,te=0;he=ie.x-se.x,pe=ie.y-se.y,ce=oe.x-ae.x,te=oe.y-ae.y;let ue=1/(he*he+pe*pe),xe=1/(ce*ce+te*te),_e=-(he*(se.x-ae.x)+pe*(se.y-ae.y))*ue,ve=-(he*(se.x-oe.x)+pe*(se.y-oe.y))*ue,Se=-(ce*(ae.x-se.x)+te*(ae.y-se.y))*xe,Ve=-(ce*(ae.x-ie.x)+te*(ae.y-ie.y))*xe;_e<0?_e=0:_e>1&&(_e=1),ve<0?ve=0:ve>1&&(ve=1),Se<0?Se=0:Se>1&&(Se=1),Ve<0?Ve=0:Ve>1&&(Ve=1);let Ke=0,Xe=0,He=_e;Ke=se.x+he*He,Xe=se.y+pe*He;let Re=0,ft=0,vt=ve;Re=se.x+he*vt,ft=se.y+pe*vt;let pt=0,ct=0,rt=Se;pt=ae.x+ce*rt,ct=ae.y+te*rt;let Ye=0,bt=0,Bt=Ve;Ye=ae.x+ce*Bt,bt=ae.y+te*Bt;let Rt=0,kt=0;Rt=Ke-ae.x,kt=Xe-ae.y;let Et=Rt*Rt+kt*kt,bn=0,Kt=0;bn=Re-oe.x,Kt=ft-oe.y;let un=bn*bn+Kt*Kt,ln=0,xn=0;ln=pt-se.x,xn=ct-se.y;let Yt=ln*ln+xn*xn,zn=0,Xt=0;zn=Ye-ie.x,Xt=bt-ie.y;let dn=zn*zn+Xt*Xt,Gt=0,Ht=0,on=null;Et<un?(Gt=Ke,Ht=Xe,on=ae):(Gt=Re,Ht=ft,on=oe,Et=un);let si=0,Fn=0,An=null;if(Yt<dn?(si=pt,Fn=ct,An=se):(si=Ye,Fn=bt,An=ie,Yt=dn),Et<Yt?(J.x=Gt,J.y=Ht,R.x=on.x,R.y=on.y,q=Math.sqrt(Et)):(R.x=si,R.y=Fn,J.x=An.x,J.y=An.y,q=Math.sqrt(Yt)),q!=0){f.x=R.x-J.x,f.y=R.y-J.y;let Vn=1/q;f.x*=Vn,f.y*=Vn,Y&&(f.x=-f.x,f.y=-f.y)}k=q}else{let se=0,ie=0;se=K.gp0.x,ie=K.gp0.y;let ae=0,oe=0;ae=K.gp1.x,oe=K.gp1.y;let he=0,pe=0;he=ae-se,pe=oe-ie;let ce=v.gnormy*se-v.gnormx*ie,te=v.gnormy*ae-v.gnormx*oe,ue=1/(te-ce),xe=(-v.tp1-ce)*ue;if(xe>l.Config.epsilon){let Ve=xe;se+=he*Ve,ie+=pe*Ve}let _e=(-v.tp0-te)*ue;if(_e<-l.Config.epsilon){let Ve=_e;ae+=he*Ve,oe+=pe*Ve}let ve=se*v.gnormx+ie*v.gnormy-v.gprojection,Se=ae*v.gnormx+oe*v.gnormy-v.gprojection;if(ve<Se){R.x=se,R.y=ie;let Ve=-ve;J.x=R.x+v.gnormx*Ve,J.y=R.y+v.gnormy*Ve,k=ve}else{R.x=ae,R.y=oe;let Ve=-Se;J.x=R.x+v.gnormx*Ve,J.y=R.y+v.gnormy*Ve,k=Se}}}else k=1e100}else k=1e100}}let T=k+s,V=c*f.x+h*f.y;if(T<l.Config.distanceThresholdCCD){if(i)break;let Y=0,X=0;Y=d.x-o.posx,X=d.y-o.posy;let ee=0,q=0;ee=_.x-p.posx,q=_.y-p.posy;let L=V-o.sweep_angvel*(f.y*Y-f.x*X)+p.sweep_angvel*(f.y*ee-f.x*q);if(L>0&&(e.slipped=!0),L<=0||T<l.Config.distanceThresholdCCD*.5)break}let W=(y-V)*t;if(W<=0){z=-1;break}let $=T/W;if($<1e-6&&($=1e-6),z+=$,z>=1){z=1;let Y=z*t,X=Y-o.sweepTime;if(X!=0){o.sweepTime=Y;let ne=X;if(o.posx+=o.velx*ne,o.posy+=o.vely*ne,o.angvel!=0){let re=o.sweep_angvel*X;if(o.rot+=re,re*re>1e-4)o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot);else{let se=re*re,ie=1-.5*se,ae=1-se*se/8,oe=(ie*o.axisx+re*o.axisy)*ae;o.axisy=(ie*o.axisy-re*o.axisx)*ae,o.axisx=oe}}}if(r.type==0||r.type===2)r.worldCOMx=o.posx+(o.axisy*r.localCOMx-o.axisx*r.localCOMy),r.worldCOMy=o.posy+(r.localCOMx*o.axisx+r.localCOMy*o.axisy);else{let ne=r.polygon,re=ne.lverts.next,se=ne.gverts.next;for(;se!=null;){let ce=se,te=re;re=re.next,ce.x=o.posx+(o.axisy*te.x-o.axisx*te.y),ce.y=o.posy+(te.x*o.axisx+te.y*o.axisy),se=se.next}let ie=ne.edges.head,ae=ne.gverts.next,oe=ae;for(ae=ae.next;ae!=null;){let ce=ae,te=ie.elt;ie=ie.next,te.gnormx=o.axisy*te.lnormx-o.axisx*te.lnormy,te.gnormy=te.lnormx*o.axisx+te.lnormy*o.axisy,te.gprojection=o.posx*te.gnormx+o.posy*te.gnormy+te.lprojection,te.tp0=oe.y*te.gnormx-oe.x*te.gnormy,te.tp1=ce.y*te.gnormx-ce.x*te.gnormy,oe=ce,ae=ae.next}let he=ne.gverts.next,pe=ie.elt;ie=ie.next,pe.gnormx=o.axisy*pe.lnormx-o.axisx*pe.lnormy,pe.gnormy=pe.lnormx*o.axisx+pe.lnormy*o.axisy,pe.gprojection=o.posx*pe.gnormx+o.posy*pe.gnormy+pe.lprojection,pe.tp0=oe.y*pe.gnormx-oe.x*pe.gnormy,pe.tp1=he.y*pe.gnormx-he.x*pe.gnormy}let ee=z*t,q=ee-p.sweepTime;if(q!=0){p.sweepTime=ee;let ne=q;if(p.posx+=p.velx*ne,p.posy+=p.vely*ne,p.angvel!=0){let re=p.sweep_angvel*q;if(p.rot+=re,re*re>1e-4)p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot);else{let se=re*re,ie=1-.5*se,ae=1-se*se/8,oe=(ie*p.axisx+re*p.axisy)*ae;p.axisy=(ie*p.axisy-re*p.axisx)*ae,p.axisx=oe}}}if(a.type==0||a.type===2)a.worldCOMx=p.posx+(p.axisy*a.localCOMx-p.axisx*a.localCOMy),a.worldCOMy=p.posy+(a.localCOMx*p.axisx+a.localCOMy*p.axisy);else{let ne=a.polygon,re=ne.lverts.next,se=ne.gverts.next;for(;se!=null;){let ce=se,te=re;re=re.next,ce.x=p.posx+(p.axisy*te.x-p.axisx*te.y),ce.y=p.posy+(te.x*p.axisx+te.y*p.axisy),se=se.next}let ie=ne.edges.head,ae=ne.gverts.next,oe=ae;for(ae=ae.next;ae!=null;){let ce=ae,te=ie.elt;ie=ie.next,te.gnormx=p.axisy*te.lnormx-p.axisx*te.lnormy,te.gnormy=te.lnormx*p.axisx+te.lnormy*p.axisy,te.gprojection=p.posx*te.gnormx+p.posy*te.gnormy+te.lprojection,te.tp0=oe.y*te.gnormx-oe.x*te.gnormy,te.tp1=ce.y*te.gnormx-ce.x*te.gnormy,oe=ce,ae=ae.next}let he=ne.gverts.next,pe=ie.elt;ie=ie.next,pe.gnormx=p.axisy*pe.lnormx-p.axisx*pe.lnormy,pe.gnormy=pe.lnormx*p.axisx+pe.lnormy*p.axisy,pe.gprojection=p.posx*pe.gnormx+p.posy*pe.gnormy+pe.lprojection,pe.tp0=oe.y*pe.gnormx-oe.x*pe.gnormy,pe.tp1=he.y*pe.gnormx-he.x*pe.gnormy}let L=r,D=a,I=d,U=_;var w;if(at(L)&&at(D)){let ne=L.circle||L.capsule,re=D.circle||D.capsule,se=Dt(L),ie=Dt(D);var O;let ae=0,oe=0;ae=re.worldCOMx-ne.worldCOMx,oe=re.worldCOMy-ne.worldCOMy;let he=Math.sqrt(ae*ae+oe*oe);if(O=he-(se+ie),O<1e100){if(he==0)ae=1,oe=0;else{let te=1/he;ae*=te,oe*=te}let pe=se;I.x=ne.worldCOMx+ae*pe,I.y=ne.worldCOMy+oe*pe;let ce=-ie;U.x=re.worldCOMx+ae*ce,U.y=re.worldCOMy+oe*ce,f.x=ae,f.y=oe}w=O}else{let ne=!1;if(at(L)&&D.type==1){let re=L;L=D,D=re;let se=I;I=U,U=se,ne=!0}if(L.type==1&&at(D)){let re=L.polygon,se=D.circle||D.capsule,ie=Dt(D),ae=-1e100,oe=null,he=re.edges.head;for(;he!=null;){let pe=he.elt,ce=pe.gnormx*se.worldCOMx+pe.gnormy*se.worldCOMy-pe.gprojection-ie;if(ce>1e100){ae=ce;break}ce>0?ce>ae&&(ae=ce,oe=pe):ae<0&&ce>ae&&(ae=ce,oe=pe),he=he.next}if(ae<1e100){let pe=oe.gp0,ce=oe.gp1,te=se.worldCOMy*oe.gnormx-se.worldCOMx*oe.gnormy;if(te<=pe.y*oe.gnormx-pe.x*oe.gnormy){let ue=0,xe=0;ue=se.worldCOMx-pe.x,xe=se.worldCOMy-pe.y;let _e=Math.sqrt(ue*ue+xe*xe);if(ae=_e-ie,ae<1e100){if(_e==0)ue=1,xe=0;else{let Ve=1/_e;ue*=Ve,xe*=Ve}let ve=0;I.x=pe.x+ue*ve,I.y=pe.y+xe*ve;let Se=-ie;U.x=se.worldCOMx+ue*Se,U.y=se.worldCOMy+xe*Se,f.x=ue,f.y=xe}}else if(te>=ce.y*oe.gnormx-ce.x*oe.gnormy){let ue=0,xe=0;ue=se.worldCOMx-ce.x,xe=se.worldCOMy-ce.y;let _e=Math.sqrt(ue*ue+xe*xe);if(ae=_e-ie,ae<1e100){if(_e==0)ue=1,xe=0;else{let Ve=1/_e;ue*=Ve,xe*=Ve}let ve=0;I.x=ce.x+ue*ve,I.y=ce.y+xe*ve;let Se=-ie;U.x=se.worldCOMx+ue*Se,U.y=se.worldCOMy+xe*Se,f.x=ue,f.y=xe}}else{let ue=-ie;U.x=se.worldCOMx+oe.gnormx*ue,U.y=se.worldCOMy+oe.gnormy*ue;let xe=-ae;I.x=U.x+oe.gnormx*xe,I.y=U.y+oe.gnormy*xe,f.x=oe.gnormx,f.y=oe.gnormy}}ne&&(f.x=-f.x,f.y=-f.y),w=ae}else{let re=L.polygon,se=D.polygon,ie=-1e100,ae=null,oe=null,he=0,pe=re.edges.head;for(;pe!=null;){let ce=pe.elt,te=1e100,ue=se.gverts.next;for(;ue!=null;){let xe=ue,_e=ce.gnormx*xe.x+ce.gnormy*xe.y;_e<te&&(te=_e),ue=ue.next}if(te-=ce.gprojection,te>1e100){ie=te;break}te>0?te>ie&&(ie=te,ae=ce,he=1):ie<0&&te>ie&&(ie=te,ae=ce,he=1),pe=pe.next}if(ie<1e100){let ce=se.edges.head;for(;ce!=null;){let te=ce.elt,ue=1e100,xe=re.gverts.next;for(;xe!=null;){let _e=xe,ve=te.gnormx*_e.x+te.gnormy*_e.y;ve<ue&&(ue=ve),xe=xe.next}if(ue-=te.gprojection,ue>1e100){ie=ue;break}ue>0?ue>ie&&(ie=ue,oe=te,he=2):ie<0&&ue>ie&&(ie=ue,oe=te,he=2),ce=ce.next}if(ie<1e100){var E,C,N;if(he==1)E=re,C=se,N=ae;else{E=se,C=re,N=oe;let _e=I;I=U,U=_e,ne=!ne}let te=null,ue=1e100,xe=C.edges.head;for(;xe!=null;){let _e=xe.elt,ve=N.gnormx*_e.gnormx+N.gnormy*_e.gnormy;ve<ue&&(ue=ve,te=_e),xe=xe.next}if(ne?(f.x=-N.gnormx,f.y=-N.gnormy):(f.x=N.gnormx,f.y=N.gnormy),ie>=0){let _e=N.gp0,ve=N.gp1,Se=te.gp0,Ve=te.gp1,Ke=0,Xe=0,He=0,Re=0;Ke=ve.x-_e.x,Xe=ve.y-_e.y,He=Ve.x-Se.x,Re=Ve.y-Se.y;let ft=1/(Ke*Ke+Xe*Xe),vt=1/(He*He+Re*Re),pt=-(Ke*(_e.x-Se.x)+Xe*(_e.y-Se.y))*ft,ct=-(Ke*(_e.x-Ve.x)+Xe*(_e.y-Ve.y))*ft,rt=-(He*(Se.x-_e.x)+Re*(Se.y-_e.y))*vt,Ye=-(He*(Se.x-ve.x)+Re*(Se.y-ve.y))*vt;pt<0?pt=0:pt>1&&(pt=1),ct<0?ct=0:ct>1&&(ct=1),rt<0?rt=0:rt>1&&(rt=1),Ye<0?Ye=0:Ye>1&&(Ye=1);let bt=0,Bt=0,Rt=pt;bt=_e.x+Ke*Rt,Bt=_e.y+Xe*Rt;let kt=0,Et=0,bn=ct;kt=_e.x+Ke*bn,Et=_e.y+Xe*bn;let Kt=0,un=0,ln=rt;Kt=Se.x+He*ln,un=Se.y+Re*ln;let xn=0,Yt=0,zn=Ye;xn=Se.x+He*zn,Yt=Se.y+Re*zn;let Xt=0,dn=0;Xt=bt-Se.x,dn=Bt-Se.y;let Gt=Xt*Xt+dn*dn,Ht=0,on=0;Ht=kt-Ve.x,on=Et-Ve.y;let si=Ht*Ht+on*on,Fn=0,An=0;Fn=Kt-_e.x,An=un-_e.y;let Vn=Fn*Fn+An*An,Oi=0,Si=0;Oi=xn-ve.x,Si=Yt-ve.y;let Ai=Oi*Oi+Si*Si,us=0,Ol=0,sl=null;Gt<si?(us=bt,Ol=Bt,sl=Se):(us=kt,Ol=Et,sl=Ve,Gt=si);let Sl=0,Al=0,ll=null;if(Vn<Ai?(Sl=Kt,Al=un,ll=_e):(Sl=xn,Al=Yt,ll=ve,Vn=Ai),Gt<Vn?(I.x=us,I.y=Ol,U.x=sl.x,U.y=sl.y,ie=Math.sqrt(Gt)):(U.x=Sl,U.y=Al,I.x=ll.x,I.y=ll.y,ie=Math.sqrt(Vn)),ie!=0){f.x=U.x-I.x,f.y=U.y-I.y;let ql=1/ie;f.x*=ql,f.y*=ql,ne&&(f.x=-f.x,f.y=-f.y)}w=ie}else{let _e=0,ve=0;_e=te.gp0.x,ve=te.gp0.y;let Se=0,Ve=0;Se=te.gp1.x,Ve=te.gp1.y;let Ke=0,Xe=0;Ke=Se-_e,Xe=Ve-ve;let He=N.gnormy*_e-N.gnormx*ve,Re=N.gnormy*Se-N.gnormx*Ve,ft=1/(Re-He),vt=(-N.tp1-He)*ft;if(vt>l.Config.epsilon){let Ye=vt;_e+=Ke*Ye,ve+=Xe*Ye}let pt=(-N.tp0-Re)*ft;if(pt<-l.Config.epsilon){let Ye=pt;Se+=Ke*Ye,Ve+=Xe*Ye}let ct=_e*N.gnormx+ve*N.gnormy-N.gprojection,rt=Se*N.gnormx+Ve*N.gnormy-N.gprojection;if(ct<rt){U.x=_e,U.y=ve;let Ye=-ct;I.x=U.x+N.gnormx*Ye,I.y=U.y+N.gnormy*Ye,w=ct}else{U.x=Se,U.y=Ve;let Ye=-rt;I.x=U.x+N.gnormx*Ye,I.y=U.y+N.gnormy*Ye,w=rt}}}else w=1e100}else w=1e100}}let H=w+s,K=c*f.x+h*f.y;if(H<l.Config.distanceThresholdCCD){if(i)break;let ne=0,re=0;ne=d.x-o.posx,re=d.y-o.posy;let se=0,ie=0;se=_.x-p.posx,ie=_.y-p.posy;let ae=K-o.sweep_angvel*(f.y*ne-f.x*re)+p.sweep_angvel*(f.y*se-f.x*ie);if(ae>0&&(e.slipped=!0),ae<=0||H<l.Config.distanceThresholdCCD*.5)break}z=-1;break}if(++P>=40){T>s&&(e.failed=!0);break}}e.toi=z}static staticSweep(e,t,n,s){let i=me(),l=e.s1,r=e.s2,a=l.body,o=r.body,p=0,c=0;p=-a.velx,c=-a.vely;let h=a.sweep_angvel;h<0&&(h=-h);let u=l.sweepCoef*h,x=e.c1,y=e.c2,d=e.axis,_=n,f=0;for(;;){let C=_*t,N=C-a.sweepTime;if(N!=0){a.sweepTime=C;let T=N;if(a.posx+=a.velx*T,a.posy+=a.vely*T,a.angvel!=0){let V=a.sweep_angvel*N;if(a.rot+=V,V*V>1e-4)a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot);else{let W=V*V,$=1-.5*W,Y=1-W*W/8,X=($*a.axisx+V*a.axisy)*Y;a.axisy=($*a.axisy-V*a.axisx)*Y,a.axisx=X}}}if(l.type==0||l.type===2)l.worldCOMx=a.posx+(a.axisy*l.localCOMx-a.axisx*l.localCOMy),l.worldCOMy=a.posy+(l.localCOMx*a.axisx+l.localCOMy*a.axisy);else{let T=l.polygon,V=T.lverts.next,W=T.gverts.next;for(;W!=null;){let L=W,D=V;V=V.next,L.x=a.posx+(a.axisy*D.x-a.axisx*D.y),L.y=a.posy+(D.x*a.axisx+D.y*a.axisy),W=W.next}let $=T.edges.head,Y=T.gverts.next,X=Y;for(Y=Y.next;Y!=null;){let L=Y,D=$.elt;$=$.next,D.gnormx=a.axisy*D.lnormx-a.axisx*D.lnormy,D.gnormy=D.lnormx*a.axisx+D.lnormy*a.axisy,D.gprojection=a.posx*D.gnormx+a.posy*D.gnormy+D.lprojection,D.tp0=X.y*D.gnormx-X.x*D.gnormy,D.tp1=L.y*D.gnormx-L.x*D.gnormy,X=L,Y=Y.next}let ee=T.gverts.next,q=$.elt;$=$.next,q.gnormx=a.axisy*q.lnormx-a.axisx*q.lnormy,q.gnormy=q.lnormx*a.axisx+q.lnormy*a.axisy,q.gprojection=a.posx*q.gnormx+a.posy*q.gnormy+q.lprojection,q.tp0=X.y*q.gnormx-X.x*q.gnormy,q.tp1=ee.y*q.gnormx-ee.x*q.gnormy}let Z=l,S=r,A=x,F=y;var z;if(at(Z)&&at(S)){let T=Z.circle||Z.capsule,V=S.circle||S.capsule,W=Dt(Z),$=Dt(S);var P;let Y=0,X=0;Y=V.worldCOMx-T.worldCOMx,X=V.worldCOMy-T.worldCOMy;let ee=Math.sqrt(Y*Y+X*X);if(P=ee-(T.radius+V.radius),P<1e100){if(ee==0)Y=1,X=0;else{let D=1/ee;Y*=D,X*=D}let q=T.radius;A.x=T.worldCOMx+Y*q,A.y=T.worldCOMy+X*q;let L=-V.radius;F.x=V.worldCOMx+Y*L,F.y=V.worldCOMy+X*L,d.x=Y,d.y=X}z=P}else{let T=!1;if(at(Z)&&S.type==1){let V=Z;Z=S,S=V;let W=A;A=F,F=W,T=!0}if(Z.type==1&&at(S)){let V=Z.polygon,W=S.circle||S.capsule,$=Dt(S),Y=-1e100,X=null,ee=V.edges.head;for(;ee!=null;){let q=ee.elt,L=q.gnormx*W.worldCOMx+q.gnormy*W.worldCOMy-q.gprojection-$;if(L>1e100){Y=L;break}L>0?L>Y&&(Y=L,X=q):Y<0&&L>Y&&(Y=L,X=q),ee=ee.next}if(Y<1e100){let q=X.gp0,L=X.gp1,D=W.worldCOMy*X.gnormx-W.worldCOMx*X.gnormy;if(D<=q.y*X.gnormx-q.x*X.gnormy){let I=0,U=0;I=W.worldCOMx-q.x,U=W.worldCOMy-q.y;let H=Math.sqrt(I*I+U*U);if(Y=H-$,Y<1e100){if(H==0)I=1,U=0;else{let re=1/H;I*=re,U*=re}let K=0;A.x=q.x+I*K,A.y=q.y+U*K;let ne=-$;F.x=W.worldCOMx+I*ne,F.y=W.worldCOMy+U*ne,d.x=I,d.y=U}}else if(D>=L.y*X.gnormx-L.x*X.gnormy){let I=0,U=0;I=W.worldCOMx-L.x,U=W.worldCOMy-L.y;let H=Math.sqrt(I*I+U*U);if(Y=H-$,Y<1e100){if(H==0)I=1,U=0;else{let re=1/H;I*=re,U*=re}let K=0;A.x=L.x+I*K,A.y=L.y+U*K;let ne=-$;F.x=W.worldCOMx+I*ne,F.y=W.worldCOMy+U*ne,d.x=I,d.y=U}}else{let I=-$;F.x=W.worldCOMx+X.gnormx*I,F.y=W.worldCOMy+X.gnormy*I;let U=-Y;A.x=F.x+X.gnormx*U,A.y=F.y+X.gnormy*U,d.x=X.gnormx,d.y=X.gnormy}}T&&(d.x=-d.x,d.y=-d.y),z=Y}else{let V=Z.polygon,W=S.polygon,$=-1e100,Y=null,X=null,ee=0,q=V.edges.head;for(;q!=null;){let L=q.elt,D=1e100,I=W.gverts.next;for(;I!=null;){let U=I,H=L.gnormx*U.x+L.gnormy*U.y;H<D&&(D=H),I=I.next}if(D-=L.gprojection,D>1e100){$=D;break}D>0?D>$&&($=D,Y=L,ee=1):$<0&&D>$&&($=D,Y=L,ee=1),q=q.next}if($<1e100){let L=W.edges.head;for(;L!=null;){let D=L.elt,I=1e100,U=V.gverts.next;for(;U!=null;){let H=U,K=D.gnormx*H.x+D.gnormy*H.y;K<I&&(I=K),U=U.next}if(I-=D.gprojection,I>1e100){$=I;break}I>0?I>$&&($=I,X=D,ee=2):$<0&&I>$&&($=I,X=D,ee=2),L=L.next}if($<1e100){var k,m,b;if(ee==1)k=V,m=W,b=Y;else{k=W,m=V,b=X;let H=A;A=F,F=H,T=!T}let D=null,I=1e100,U=m.edges.head;for(;U!=null;){let H=U.elt,K=b.gnormx*H.gnormx+b.gnormy*H.gnormy;K<I&&(I=K,D=H),U=U.next}if(T?(d.x=-b.gnormx,d.y=-b.gnormy):(d.x=b.gnormx,d.y=b.gnormy),$>=0){let H=b.gp0,K=b.gp1,ne=D.gp0,re=D.gp1,se=0,ie=0,ae=0,oe=0;se=K.x-H.x,ie=K.y-H.y,ae=re.x-ne.x,oe=re.y-ne.y;let he=1/(se*se+ie*ie),pe=1/(ae*ae+oe*oe),ce=-(se*(H.x-ne.x)+ie*(H.y-ne.y))*he,te=-(se*(H.x-re.x)+ie*(H.y-re.y))*he,ue=-(ae*(ne.x-H.x)+oe*(ne.y-H.y))*pe,xe=-(ae*(ne.x-K.x)+oe*(ne.y-K.y))*pe;ce<0?ce=0:ce>1&&(ce=1),te<0?te=0:te>1&&(te=1),ue<0?ue=0:ue>1&&(ue=1),xe<0?xe=0:xe>1&&(xe=1);let _e=0,ve=0,Se=ce;_e=H.x+se*Se,ve=H.y+ie*Se;let Ve=0,Ke=0,Xe=te;Ve=H.x+se*Xe,Ke=H.y+ie*Xe;let He=0,Re=0,ft=ue;He=ne.x+ae*ft,Re=ne.y+oe*ft;let vt=0,pt=0,ct=xe;vt=ne.x+ae*ct,pt=ne.y+oe*ct;let rt=0,Ye=0;rt=_e-ne.x,Ye=ve-ne.y;let bt=rt*rt+Ye*Ye,Bt=0,Rt=0;Bt=Ve-re.x,Rt=Ke-re.y;let kt=Bt*Bt+Rt*Rt,Et=0,bn=0;Et=He-H.x,bn=Re-H.y;let Kt=Et*Et+bn*bn,un=0,ln=0;un=vt-K.x,ln=pt-K.y;let xn=un*un+ln*ln,Yt=0,zn=0,Xt=null;bt<kt?(Yt=_e,zn=ve,Xt=ne):(Yt=Ve,zn=Ke,Xt=re,bt=kt);let dn=0,Gt=0,Ht=null;if(Kt<xn?(dn=He,Gt=Re,Ht=H):(dn=vt,Gt=pt,Ht=K,Kt=xn),bt<Kt?(A.x=Yt,A.y=zn,F.x=Xt.x,F.y=Xt.y,$=Math.sqrt(bt)):(F.x=dn,F.y=Gt,A.x=Ht.x,A.y=Ht.y,$=Math.sqrt(Kt)),$!=0){d.x=F.x-A.x,d.y=F.y-A.y;let on=1/$;d.x*=on,d.y*=on,T&&(d.x=-d.x,d.y=-d.y)}z=$}else{let H=0,K=0;H=D.gp0.x,K=D.gp0.y;let ne=0,re=0;ne=D.gp1.x,re=D.gp1.y;let se=0,ie=0;se=ne-H,ie=re-K;let ae=b.gnormy*H-b.gnormx*K,oe=b.gnormy*ne-b.gnormx*re,he=1/(oe-ae),pe=(-b.tp1-ae)*he;if(pe>i.Config.epsilon){let xe=pe;H+=se*xe,K+=ie*xe}let ce=(-b.tp0-oe)*he;if(ce<-i.Config.epsilon){let xe=ce;ne+=se*xe,re+=ie*xe}let te=H*b.gnormx+K*b.gnormy-b.gprojection,ue=ne*b.gnormx+re*b.gnormy-b.gprojection;if(te<ue){F.x=H,F.y=K;let xe=-te;A.x=F.x+b.gnormx*xe,A.y=F.y+b.gnormy*xe,z=te}else{F.x=ne,F.y=re;let xe=-ue;A.x=F.x+b.gnormx*xe,A.y=F.y+b.gnormy*xe,z=ue}}}else z=1e100}else z=1e100}}let B=z+s,G=p*d.x+c*d.y;if(B<i.Config.distanceThresholdCCD){let T=0,V=0;T=x.x-a.posx,V=x.y-a.posy;let W=G-a.sweep_angvel*(d.y*T-d.x*V);if(W>0&&(e.slipped=!0),W<=0||B<i.Config.distanceThresholdCCD*.5)break}let J=(u-G)*t;if(J<=0){_=-1;break}let R=B/J;if(R<1e-6&&(R=1e-6),_+=R,_>=1){_=1;let T=_*t,V=T-a.sweepTime;if(V!=0){a.sweepTime=T;let L=V;if(a.posx+=a.velx*L,a.posy+=a.vely*L,a.angvel!=0){let D=a.sweep_angvel*V;if(a.rot+=D,D*D>1e-4)a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot);else{let I=D*D,U=1-.5*I,H=1-I*I/8,K=(U*a.axisx+D*a.axisy)*H;a.axisy=(U*a.axisy-D*a.axisx)*H,a.axisx=K}}}if(l.type==0||l.type===2)l.worldCOMx=a.posx+(a.axisy*l.localCOMx-a.axisx*l.localCOMy),l.worldCOMy=a.posy+(l.localCOMx*a.axisx+l.localCOMy*a.axisy);else{let L=l.polygon,D=L.lverts.next,I=L.gverts.next;for(;I!=null;){let se=I,ie=D;D=D.next,se.x=a.posx+(a.axisy*ie.x-a.axisx*ie.y),se.y=a.posy+(ie.x*a.axisx+ie.y*a.axisy),I=I.next}let U=L.edges.head,H=L.gverts.next,K=H;for(H=H.next;H!=null;){let se=H,ie=U.elt;U=U.next,ie.gnormx=a.axisy*ie.lnormx-a.axisx*ie.lnormy,ie.gnormy=ie.lnormx*a.axisx+ie.lnormy*a.axisy,ie.gprojection=a.posx*ie.gnormx+a.posy*ie.gnormy+ie.lprojection,ie.tp0=K.y*ie.gnormx-K.x*ie.gnormy,ie.tp1=se.y*ie.gnormx-se.x*ie.gnormy,K=se,H=H.next}let ne=L.gverts.next,re=U.elt;U=U.next,re.gnormx=a.axisy*re.lnormx-a.axisx*re.lnormy,re.gnormy=re.lnormx*a.axisx+re.lnormy*a.axisy,re.gprojection=a.posx*re.gnormx+a.posy*re.gnormy+re.lprojection,re.tp0=K.y*re.gnormx-K.x*re.gnormy,re.tp1=ne.y*re.gnormx-ne.x*re.gnormy}let W=l,$=r,Y=x,X=y;var M;if(at(W)&&at($)){let L=W.circle||W.capsule,D=$.circle||$.capsule,I=Dt(W),U=Dt($);var v;let H=0,K=0;H=D.worldCOMx-L.worldCOMx,K=D.worldCOMy-L.worldCOMy;let ne=Math.sqrt(H*H+K*K);if(v=ne-(I+U),v<1e100){if(ne==0)H=1,K=0;else{let ie=1/ne;H*=ie,K*=ie}let re=I;Y.x=L.worldCOMx+H*re,Y.y=L.worldCOMy+K*re;let se=-U;X.x=D.worldCOMx+H*se,X.y=D.worldCOMy+K*se,d.x=H,d.y=K}M=v}else{let L=!1;if(at(W)&&$.type==1){let D=W;W=$,$=D;let I=Y;Y=X,X=I,L=!0}if(W.type==1&&at($)){let D=W.polygon,I=$.circle||$.capsule,U=Dt($),H=-1e100,K=null,ne=D.edges.head;for(;ne!=null;){let re=ne.elt,se=re.gnormx*I.worldCOMx+re.gnormy*I.worldCOMy-re.gprojection-U;if(se>1e100){H=se;break}se>0?se>H&&(H=se,K=re):H<0&&se>H&&(H=se,K=re),ne=ne.next}if(H<1e100){let re=K.gp0,se=K.gp1,ie=I.worldCOMy*K.gnormx-I.worldCOMx*K.gnormy;if(ie<=re.y*K.gnormx-re.x*K.gnormy){let ae=0,oe=0;ae=I.worldCOMx-re.x,oe=I.worldCOMy-re.y;let he=Math.sqrt(ae*ae+oe*oe);if(H=he-U,H<1e100){if(he==0)ae=1,oe=0;else{let te=1/he;ae*=te,oe*=te}let pe=0;Y.x=re.x+ae*pe,Y.y=re.y+oe*pe;let ce=-U;X.x=I.worldCOMx+ae*ce,X.y=I.worldCOMy+oe*ce,d.x=ae,d.y=oe}}else if(ie>=se.y*K.gnormx-se.x*K.gnormy){let ae=0,oe=0;ae=I.worldCOMx-se.x,oe=I.worldCOMy-se.y;let he=Math.sqrt(ae*ae+oe*oe);if(H=he-U,H<1e100){if(he==0)ae=1,oe=0;else{let te=1/he;ae*=te,oe*=te}let pe=0;Y.x=se.x+ae*pe,Y.y=se.y+oe*pe;let ce=-U;X.x=I.worldCOMx+ae*ce,X.y=I.worldCOMy+oe*ce,d.x=ae,d.y=oe}}else{let ae=-U;X.x=I.worldCOMx+K.gnormx*ae,X.y=I.worldCOMy+K.gnormy*ae;let oe=-H;Y.x=X.x+K.gnormx*oe,Y.y=X.y+K.gnormy*oe,d.x=K.gnormx,d.y=K.gnormy}}L&&(d.x=-d.x,d.y=-d.y),M=H}else{let D=W.polygon,I=$.polygon,U=-1e100,H=null,K=null,ne=0,re=D.edges.head;for(;re!=null;){let se=re.elt,ie=1e100,ae=I.gverts.next;for(;ae!=null;){let oe=ae,he=se.gnormx*oe.x+se.gnormy*oe.y;he<ie&&(ie=he),ae=ae.next}if(ie-=se.gprojection,ie>1e100){U=ie;break}ie>0?ie>U&&(U=ie,H=se,ne=1):U<0&&ie>U&&(U=ie,H=se,ne=1),re=re.next}if(U<1e100){let se=I.edges.head;for(;se!=null;){let ie=se.elt,ae=1e100,oe=D.gverts.next;for(;oe!=null;){let he=oe,pe=ie.gnormx*he.x+ie.gnormy*he.y;pe<ae&&(ae=pe),oe=oe.next}if(ae-=ie.gprojection,ae>1e100){U=ae;break}ae>0?ae>U&&(U=ae,K=ie,ne=2):U<0&&ae>U&&(U=ae,K=ie,ne=2),se=se.next}if(U<1e100){var w,O,E;if(ne==1)w=D,O=I,E=H;else{w=I,O=D,E=K;let he=Y;Y=X,X=he,L=!L}let ie=null,ae=1e100,oe=O.edges.head;for(;oe!=null;){let he=oe.elt,pe=E.gnormx*he.gnormx+E.gnormy*he.gnormy;pe<ae&&(ae=pe,ie=he),oe=oe.next}if(L?(d.x=-E.gnormx,d.y=-E.gnormy):(d.x=E.gnormx,d.y=E.gnormy),U>=0){let he=E.gp0,pe=E.gp1,ce=ie.gp0,te=ie.gp1,ue=0,xe=0,_e=0,ve=0;ue=pe.x-he.x,xe=pe.y-he.y,_e=te.x-ce.x,ve=te.y-ce.y;let Se=1/(ue*ue+xe*xe),Ve=1/(_e*_e+ve*ve),Ke=-(ue*(he.x-ce.x)+xe*(he.y-ce.y))*Se,Xe=-(ue*(he.x-te.x)+xe*(he.y-te.y))*Se,He=-(_e*(ce.x-he.x)+ve*(ce.y-he.y))*Ve,Re=-(_e*(ce.x-pe.x)+ve*(ce.y-pe.y))*Ve;Ke<0?Ke=0:Ke>1&&(Ke=1),Xe<0?Xe=0:Xe>1&&(Xe=1),He<0?He=0:He>1&&(He=1),Re<0?Re=0:Re>1&&(Re=1);let ft=0,vt=0,pt=Ke;ft=he.x+ue*pt,vt=he.y+xe*pt;let ct=0,rt=0,Ye=Xe;ct=he.x+ue*Ye,rt=he.y+xe*Ye;let bt=0,Bt=0,Rt=He;bt=ce.x+_e*Rt,Bt=ce.y+ve*Rt;let kt=0,Et=0,bn=Re;kt=ce.x+_e*bn,Et=ce.y+ve*bn;let Kt=0,un=0;Kt=ft-ce.x,un=vt-ce.y;let ln=Kt*Kt+un*un,xn=0,Yt=0;xn=ct-te.x,Yt=rt-te.y;let zn=xn*xn+Yt*Yt,Xt=0,dn=0;Xt=bt-he.x,dn=Bt-he.y;let Gt=Xt*Xt+dn*dn,Ht=0,on=0;Ht=kt-pe.x,on=Et-pe.y;let si=Ht*Ht+on*on,Fn=0,An=0,Vn=null;ln<zn?(Fn=ft,An=vt,Vn=ce):(Fn=ct,An=rt,Vn=te,ln=zn);let Oi=0,Si=0,Ai=null;if(Gt<si?(Oi=bt,Si=Bt,Ai=he):(Oi=kt,Si=Et,Ai=pe,Gt=si),ln<Gt?(Y.x=Fn,Y.y=An,X.x=Vn.x,X.y=Vn.y,U=Math.sqrt(ln)):(X.x=Oi,X.y=Si,Y.x=Ai.x,Y.y=Ai.y,U=Math.sqrt(Gt)),U!=0){d.x=X.x-Y.x,d.y=X.y-Y.y;let us=1/U;d.x*=us,d.y*=us,L&&(d.x=-d.x,d.y=-d.y)}M=U}else{let he=0,pe=0;he=ie.gp0.x,pe=ie.gp0.y;let ce=0,te=0;ce=ie.gp1.x,te=ie.gp1.y;let ue=0,xe=0;ue=ce-he,xe=te-pe;let _e=E.gnormy*he-E.gnormx*pe,ve=E.gnormy*ce-E.gnormx*te,Se=1/(ve-_e),Ve=(-E.tp1-_e)*Se;if(Ve>i.Config.epsilon){let Re=Ve;he+=ue*Re,pe+=xe*Re}let Ke=(-E.tp0-ve)*Se;if(Ke<-i.Config.epsilon){let Re=Ke;ce+=ue*Re,te+=xe*Re}let Xe=he*E.gnormx+pe*E.gnormy-E.gprojection,He=ce*E.gnormx+te*E.gnormy-E.gprojection;if(Xe<He){X.x=he,X.y=pe;let Re=-Xe;Y.x=X.x+E.gnormx*Re,Y.y=X.y+E.gnormy*Re,M=Xe}else{X.x=ce,X.y=te;let Re=-He;Y.x=X.x+E.gnormx*Re,Y.y=X.y+E.gnormy*Re,M=He}}}else M=1e100}else M=1e100}}let ee=M+s,q=p*d.x+c*d.y;if(ee<i.Config.distanceThresholdCCD){let L=0,D=0;L=x.x-a.posx,D=x.y-a.posy;let I=q-a.sweep_angvel*(d.y*L-d.x*D);if(I>0&&(e.slipped=!0),I<=0||ee<i.Config.distanceThresholdCCD*.5)break}_=-1;break}if(++f>=40){B>s&&(e.failed=!0);break}}e.toi=_}static distanceBody(e,t,n,s){let i=me(),l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1;let r;le.zpp_pool==null?r=new le:(r=le.zpp_pool,le.zpp_pool=r.next,r.next=null),r.weak=!1;let a;le.zpp_pool==null?a=new le:(a=le.zpp_pool,le.zpp_pool=a.next,a.next=null),a.weak=!1;let o=1e100,p=e.shapes.head;for(;p!=null;){let z=p.elt,P=t.shapes.head;for(;P!=null;){let k=P.elt,m=z,b=k,M=l,v=r,w=o;w==null&&(w=1e100);var c;if(at(m)&&at(b)){let O=m.circle||m.capsule,E=b.circle||b.capsule,C=Dt(m),N=Dt(b);var h;let Z=0,S=0;Z=E.worldCOMx-O.worldCOMx,S=E.worldCOMy-O.worldCOMy;let A=Math.sqrt(Z*Z+S*S);if(h=A-(C+N),h<w){if(A==0)Z=1,S=0;else{let G=1/A;Z*=G,S*=G}let F=C;M.x=O.worldCOMx+Z*F,M.y=O.worldCOMy+S*F;let B=-N;v.x=E.worldCOMx+Z*B,v.y=E.worldCOMy+S*B,a.x=Z,a.y=S}c=h}else{let O=!1;if(at(m)&&b.type==1){let E=m;m=b,b=E;let C=M;M=v,v=C,O=!0}if(m.type==1&&at(b)){let E=m.polygon,C=b.circle||b.capsule,N=Dt(b),Z=-1e100,S=null,A=E.edges.head;for(;A!=null;){let F=A.elt,B=F.gnormx*C.worldCOMx+F.gnormy*C.worldCOMy-F.gprojection-N;if(B>w){Z=B;break}B>0?B>Z&&(Z=B,S=F):Z<0&&B>Z&&(Z=B,S=F),A=A.next}if(Z<w){let F=S.gp0,B=S.gp1,G=C.worldCOMy*S.gnormx-C.worldCOMx*S.gnormy;if(G<=F.y*S.gnormx-F.x*S.gnormy){let J=0,R=0;J=C.worldCOMx-F.x,R=C.worldCOMy-F.y;let T=Math.sqrt(J*J+R*R);if(Z=T-N,Z<w){if(T==0)J=1,R=0;else{let $=1/T;J*=$,R*=$}let V=0;M.x=F.x+J*V,M.y=F.y+R*V;let W=-N;v.x=C.worldCOMx+J*W,v.y=C.worldCOMy+R*W,a.x=J,a.y=R}}else if(G>=B.y*S.gnormx-B.x*S.gnormy){let J=0,R=0;J=C.worldCOMx-B.x,R=C.worldCOMy-B.y;let T=Math.sqrt(J*J+R*R);if(Z=T-N,Z<w){if(T==0)J=1,R=0;else{let $=1/T;J*=$,R*=$}let V=0;M.x=B.x+J*V,M.y=B.y+R*V;let W=-N;v.x=C.worldCOMx+J*W,v.y=C.worldCOMy+R*W,a.x=J,a.y=R}}else{let J=-N;v.x=C.worldCOMx+S.gnormx*J,v.y=C.worldCOMy+S.gnormy*J;let R=-Z;M.x=v.x+S.gnormx*R,M.y=v.y+S.gnormy*R,a.x=S.gnormx,a.y=S.gnormy}}O&&(a.x=-a.x,a.y=-a.y),c=Z}else{let E=m.polygon,C=b.polygon,N=-1e100,Z=null,S=null,A=0,F=E.edges.head;for(;F!=null;){let B=F.elt,G=1e100,J=C.gverts.next;for(;J!=null;){let R=J,T=B.gnormx*R.x+B.gnormy*R.y;T<G&&(G=T),J=J.next}if(G-=B.gprojection,G>w){N=G;break}G>0?G>N&&(N=G,Z=B,A=1):N<0&&G>N&&(N=G,Z=B,A=1),F=F.next}if(N<w){let B=C.edges.head;for(;B!=null;){let G=B.elt,J=1e100,R=E.gverts.next;for(;R!=null;){let T=R,V=G.gnormx*T.x+G.gnormy*T.y;V<J&&(J=V),R=R.next}if(J-=G.gprojection,J>w){N=J;break}J>0?J>N&&(N=J,S=G,A=2):N<0&&J>N&&(N=J,S=G,A=2),B=B.next}if(N<w){var u,x,y;if(A==1)u=E,x=C,y=Z;else{u=C,x=E,y=S;let T=M;M=v,v=T,O=!O}let G=null,J=1e100,R=x.edges.head;for(;R!=null;){let T=R.elt,V=y.gnormx*T.gnormx+y.gnormy*T.gnormy;V<J&&(J=V,G=T),R=R.next}if(O?(a.x=-y.gnormx,a.y=-y.gnormy):(a.x=y.gnormx,a.y=y.gnormy),N>=0){let T=y.gp0,V=y.gp1,W=G.gp0,$=G.gp1,Y=0,X=0,ee=0,q=0;Y=V.x-T.x,X=V.y-T.y,ee=$.x-W.x,q=$.y-W.y;let L=1/(Y*Y+X*X),D=1/(ee*ee+q*q),I=-(Y*(T.x-W.x)+X*(T.y-W.y))*L,U=-(Y*(T.x-$.x)+X*(T.y-$.y))*L,H=-(ee*(W.x-T.x)+q*(W.y-T.y))*D,K=-(ee*(W.x-V.x)+q*(W.y-V.y))*D;I<0?I=0:I>1&&(I=1),U<0?U=0:U>1&&(U=1),H<0?H=0:H>1&&(H=1),K<0?K=0:K>1&&(K=1);let ne=0,re=0,se=I;ne=T.x+Y*se,re=T.y+X*se;let ie=0,ae=0,oe=U;ie=T.x+Y*oe,ae=T.y+X*oe;let he=0,pe=0,ce=H;he=W.x+ee*ce,pe=W.y+q*ce;let te=0,ue=0,xe=K;te=W.x+ee*xe,ue=W.y+q*xe;let _e=0,ve=0;_e=ne-W.x,ve=re-W.y;let Se=_e*_e+ve*ve,Ve=0,Ke=0;Ve=ie-$.x,Ke=ae-$.y;let Xe=Ve*Ve+Ke*Ke,He=0,Re=0;He=he-T.x,Re=pe-T.y;let ft=He*He+Re*Re,vt=0,pt=0;vt=te-V.x,pt=ue-V.y;let ct=vt*vt+pt*pt,rt=0,Ye=0,bt=null;Se<Xe?(rt=ne,Ye=re,bt=W):(rt=ie,Ye=ae,bt=$,Se=Xe);let Bt=0,Rt=0,kt=null;if(ft<ct?(Bt=he,Rt=pe,kt=T):(Bt=te,Rt=ue,kt=V,ft=ct),Se<ft?(M.x=rt,M.y=Ye,v.x=bt.x,v.y=bt.y,N=Math.sqrt(Se)):(v.x=Bt,v.y=Rt,M.x=kt.x,M.y=kt.y,N=Math.sqrt(ft)),N!=0){a.x=v.x-M.x,a.y=v.y-M.y;let Et=1/N;a.x*=Et,a.y*=Et,O&&(a.x=-a.x,a.y=-a.y)}c=N}else{let T=0,V=0;T=G.gp0.x,V=G.gp0.y;let W=0,$=0;W=G.gp1.x,$=G.gp1.y;let Y=0,X=0;Y=W-T,X=$-V;let ee=y.gnormy*T-y.gnormx*V,q=y.gnormy*W-y.gnormx*$,L=1/(q-ee),D=(-y.tp1-ee)*L;if(D>i.Config.epsilon){let K=D;T+=Y*K,V+=X*K}let I=(-y.tp0-q)*L;if(I<-i.Config.epsilon){let K=I;W+=Y*K,$+=X*K}let U=T*y.gnormx+V*y.gnormy-y.gprojection,H=W*y.gnormx+$*y.gnormy-y.gprojection;if(U<H){v.x=T,v.y=V;let K=-U;M.x=v.x+y.gnormx*K,M.y=v.y+y.gnormy*K,c=U}else{v.x=W,v.y=$;let K=-H;M.x=v.x+y.gnormx*K,M.y=v.y+y.gnormy*K,c=H}}}else c=w}else c=w}}c<o&&(o=c,n.x=l.x,n.y=l.y,s.x=r.x,s.y=r.y),P=P.next}p=p.next}let d=l;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d._isimmutable=null,d._validate=null,d._invalidate=null,d.next=le.zpp_pool,le.zpp_pool=d;let _=r;_.outer!=null&&(_.outer.zpp_inner=null,_.outer=null),_._isimmutable=null,_._validate=null,_._invalidate=null,_.next=le.zpp_pool,le.zpp_pool=_;let f=a;return f.outer!=null&&(f.outer.zpp_inner=null,f.outer=null),f._isimmutable=null,f._validate=null,f._invalidate=null,f.next=le.zpp_pool,le.zpp_pool=f,o}static distance(e,t,n,s,i,l){let r=me();if(l==null&&(l=1e100),at(e)&&at(t)){let a=e.circle||e.capsule,o=t.circle||t.capsule,p=Dt(e),c=Dt(t),h,u=0,x=0;u=o.worldCOMx-a.worldCOMx,x=o.worldCOMy-a.worldCOMy;let y=Math.sqrt(u*u+x*x);if(h=y-(p+c),h<l){if(y==0)u=1,x=0;else{let f=1/y;u*=f,x*=f}let d=p;n.x=a.worldCOMx+u*d,n.y=a.worldCOMy+x*d;let _=-c;s.x=o.worldCOMx+u*_,s.y=o.worldCOMy+x*_,i.x=u,i.y=x}return h}else{let a=!1;if(at(e)&&t.type==1){let o=e;e=t,t=o;let p=n;n=s,s=p,a=!0}if(e.type==1&&at(t)){let o=e.polygon,p=t.circle||t.capsule,c=Dt(t),h=-1e100,u=null,x=o.edges.head;for(;x!=null;){let y=x.elt,d=y.gnormx*p.worldCOMx+y.gnormy*p.worldCOMy-y.gprojection-c;if(d>l){h=d;break}d>0?d>h&&(h=d,u=y):h<0&&d>h&&(h=d,u=y),x=x.next}if(h<l){let y=u.gp0,d=u.gp1,_=p.worldCOMy*u.gnormx-p.worldCOMx*u.gnormy;if(_<=y.y*u.gnormx-y.x*u.gnormy){let f=0,z=0;f=p.worldCOMx-y.x,z=p.worldCOMy-y.y;let P=Math.sqrt(f*f+z*z);if(h=P-c,h<l){if(P==0)f=1,z=0;else{let b=1/P;f*=b,z*=b}let k=0;n.x=y.x+f*k,n.y=y.y+z*k;let m=-c;s.x=p.worldCOMx+f*m,s.y=p.worldCOMy+z*m,i.x=f,i.y=z}}else if(_>=d.y*u.gnormx-d.x*u.gnormy){let f=0,z=0;f=p.worldCOMx-d.x,z=p.worldCOMy-d.y;let P=Math.sqrt(f*f+z*z);if(h=P-c,h<l){if(P==0)f=1,z=0;else{let b=1/P;f*=b,z*=b}let k=0;n.x=d.x+f*k,n.y=d.y+z*k;let m=-c;s.x=p.worldCOMx+f*m,s.y=p.worldCOMy+z*m,i.x=f,i.y=z}}else{let f=-c;s.x=p.worldCOMx+u.gnormx*f,s.y=p.worldCOMy+u.gnormy*f;let z=-h;n.x=s.x+u.gnormx*z,n.y=s.y+u.gnormy*z,i.x=u.gnormx,i.y=u.gnormy}}return a&&(i.x=-i.x,i.y=-i.y),h}else{let o=e.polygon,p=t.polygon,c=-1e100,h=null,u=null,x=0,y=o.edges.head;for(;y!=null;){let d=y.elt,_=1e100,f=p.gverts.next;for(;f!=null;){let z=f,P=d.gnormx*z.x+d.gnormy*z.y;P<_&&(_=P),f=f.next}if(_-=d.gprojection,_>l){c=_;break}_>0?_>c&&(c=_,h=d,x=1):c<0&&_>c&&(c=_,h=d,x=1),y=y.next}if(c<l){let d=p.edges.head;for(;d!=null;){let _=d.elt,f=1e100,z=o.gverts.next;for(;z!=null;){let P=z,k=_.gnormx*P.x+_.gnormy*P.y;k<f&&(f=k),z=z.next}if(f-=_.gprojection,f>l){c=f;break}f>0?f>c&&(c=f,u=_,x=2):c<0&&f>c&&(c=f,u=_,x=2),d=d.next}if(c<l){let _,f,z;if(x==1)_=o,f=p,z=h;else{_=p,f=o,z=u;let b=n;n=s,s=b,a=!a}let P=null,k=1e100,m=f.edges.head;for(;m!=null;){let b=m.elt,M=z.gnormx*b.gnormx+z.gnormy*b.gnormy;M<k&&(k=M,P=b),m=m.next}if(a?(i.x=-z.gnormx,i.y=-z.gnormy):(i.x=z.gnormx,i.y=z.gnormy),c>=0){let b=z.gp0,M=z.gp1,v=P.gp0,w=P.gp1,O=0,E=0,C=0,N=0;O=M.x-b.x,E=M.y-b.y,C=w.x-v.x,N=w.y-v.y;let Z=1/(O*O+E*E),S=1/(C*C+N*N),A=-(O*(b.x-v.x)+E*(b.y-v.y))*Z,F=-(O*(b.x-w.x)+E*(b.y-w.y))*Z,B=-(C*(v.x-b.x)+N*(v.y-b.y))*S,G=-(C*(v.x-M.x)+N*(v.y-M.y))*S;A<0?A=0:A>1&&(A=1),F<0?F=0:F>1&&(F=1),B<0?B=0:B>1&&(B=1),G<0?G=0:G>1&&(G=1);let J=0,R=0,T=A;J=b.x+O*T,R=b.y+E*T;let V=0,W=0,$=F;V=b.x+O*$,W=b.y+E*$;let Y=0,X=0,ee=B;Y=v.x+C*ee,X=v.y+N*ee;let q=0,L=0,D=G;q=v.x+C*D,L=v.y+N*D;let I=0,U=0;I=J-v.x,U=R-v.y;let H=I*I+U*U,K=0,ne=0;K=V-w.x,ne=W-w.y;let re=K*K+ne*ne,se=0,ie=0;se=Y-b.x,ie=X-b.y;let ae=se*se+ie*ie,oe=0,he=0;oe=q-M.x,he=L-M.y;let pe=oe*oe+he*he,ce=0,te=0,ue=null;H<re?(ce=J,te=R,ue=v):(ce=V,te=W,ue=w,H=re);let xe=0,_e=0,ve=null;if(ae<pe?(xe=Y,_e=X,ve=b):(xe=q,_e=L,ve=M,ae=pe),H<ae?(n.x=ce,n.y=te,s.x=ue.x,s.y=ue.y,c=Math.sqrt(H)):(s.x=xe,s.y=_e,n.x=ve.x,n.y=ve.y,c=Math.sqrt(ae)),c!=0){i.x=s.x-n.x,i.y=s.y-n.y;let Se=1/c;i.x*=Se,i.y*=Se,a&&(i.x=-i.x,i.y=-i.y)}return c}else{let b=0,M=0;b=P.gp0.x,M=P.gp0.y;let v=0,w=0;v=P.gp1.x,w=P.gp1.y;let O=0,E=0;O=v-b,E=w-M;let C=z.gnormy*b-z.gnormx*M,N=z.gnormy*v-z.gnormx*w,Z=1/(N-C),S=(-z.tp1-C)*Z;if(S>r.Config.epsilon){let G=S;b+=O*G,M+=E*G}let A=(-z.tp0-N)*Z;if(A<-r.Config.epsilon){let G=A;v+=O*G,w+=E*G}let F=b*z.gnormx+M*z.gnormy-z.gprojection,B=v*z.gnormx+w*z.gnormy-z.gprojection;if(F<B){s.x=b,s.y=M;let G=-F;return n.x=s.x+z.gnormx*G,n.y=s.y+z.gnormy*G,F}else{s.x=v,s.y=w;let G=-B;return n.x=s.x+z.gnormx*G,n.y=s.y+z.gnormy*G,B}}}else return l}else return l}}}};var De=class De{static lt(e,t){return e.y<t.y?!0:e.y==t.y?e.x<t.x:!1}static right_turn(e,t,n){let s=n.x-t.x,i=n.y-t.y,l=t.x-e.x;return(t.y-e.y)*s-l*i}static delaunay(e,t,n,s){let i=n.x-t.x,l=n.y-t.y,r=t.x-e.x,a=t.y-e.y,o,p,c;return a*i-r*l>=0?c=!0:(i=s.x-n.x,l=s.y-n.y,r=n.x-t.x,a=n.y-t.y,c=a*i-r*l>=0),c?p=!0:(i=e.x-s.x,l=e.y-s.y,r=s.x-n.x,a=s.y-n.y,p=a*i-r*l>=0),p?o=!0:(i=t.x-e.x,l=t.y-e.y,r=e.x-s.x,a=e.y-s.y,o=a*i-r*l>=0),o?!0:t.x*(n.y*s.mag-n.mag*s.y)-n.x*(t.y*s.mag-t.mag*s.y)+s.x*(t.y*n.mag-t.mag*n.y)-(e.x*(n.y*s.mag-n.mag*s.y)-n.x*(e.y*s.mag-e.mag*s.y)+s.x*(e.y*n.mag-e.mag*n.y))+(e.x*(t.y*s.mag-t.mag*s.y)-t.x*(e.y*s.mag-e.mag*s.y)+s.x*(e.y*t.mag-e.mag*t.y))-(e.x*(t.y*n.mag-t.mag*n.y)-t.x*(e.y*n.mag-e.mag*n.y)+n.x*(e.y*t.mag-e.mag*t.y))>0}static optimise(e){let t=e.vertices,n=e.vertices;if(t!=null){let a=t;for(;;){let o=a;if(o.sort(),o.mag=o.x*o.x+o.y*o.y,a=a.next,a==n)break}}De.edgeSet==null&&(zs.zpp_pool==null?De.edgeSet=new zs:(De.edgeSet=zs.zpp_pool,zs.zpp_pool=De.edgeSet.next,De.edgeSet.next=null),De.edgeSet.lt=St.edge_lt,De.edgeSet.swapped=St.edge_swap);let s;St.zpp_pool==null?s=new St:(s=St.zpp_pool,St.zpp_pool=s.next,s.next=null);let i=e.vertices,l=e.vertices;if(i!=null){let a=i;for(;;){let o=a,p=o.next;o.diagonals.reverse();let c=o.diagonals.head;for(;c!=null;){let h=c.elt;if(h.id<o.id){p=h,c=c.next;continue}let u=c.next==null?o.prev:c.next.elt;if(!De.delaunay(o,p,h,u)){let x;St.zpp_pool==null?x=new St:(x=St.zpp_pool,St.zpp_pool=x.next,x.next=null),x.a=o,x.b=h,o.id<h.id?(x.id=o.id,x.di=h.id):(x.id=h.id,x.di=o.id);let y=x;s.add(y),y.node=De.edgeSet.insert(y)}p=h,c=c.next}if(a=a.next,a==l)break}}for(;s.next!=null;){let a=s.pop_unsafe(),o=a.a,p=a.b,c=o.next,h=null,u=o.diagonals.head;for(;u!=null;){let y=u.elt;if(y==p){u=u.next,h=u==null?o.prev:u.elt;break}c=y,u=u.next}if(o.diagonals.remove(p),p.diagonals.remove(o),p==c.next)c.diagonals.add(h);else{let y=c.diagonals.head;for(;y!=null;){if(y.elt==p){c.diagonals.insert(y,h);break}y=y.next}}if(o==h.next)h.diagonals.add(c);else{let y=h.diagonals.head;for(;y!=null;){if(y.elt==o){h.diagonals.insert(y,c);break}y=y.next}}De.edgeSet.remove_node(a.node);let x=a;x.a=x.b=null,x.node=null,x.next=St.zpp_pool,St.zpp_pool=x}let r=s;r.a=r.b=null,r.node=null,r.next=St.zpp_pool,St.zpp_pool=r}static triangulate(e){let t=e.vertices,n=e.vertices,s=e.vertices.next,i=e.vertices;if(s!=null){let o=s;for(;;){let p=o;if((p.y<t.y||p.y==t.y&&p.x<t.x)&&(t=p),(n.y<p.y||n.y==p.y&&n.x<p.x)&&(n=p),o=o.next,o==i)break}}De.queue==null&&(De.queue=new di);let l=n.prev,r=n.next;for(De.queue.add(n);l!=t||r!=t;)l==t||r!=t&&(l.y<r.y||l.y==r.y&&l.x<r.x)?(De.queue.add(r),r.rightchain=!1,r=r.next):(De.queue.add(l),l.rightchain=!0,l=l.prev);De.queue.add(t),De.stack==null&&(De.stack=new di),De.stack.add(De.queue.pop_unsafe());let a=De.queue.pop_unsafe();for(De.stack.add(a);;){let o=De.queue.pop_unsafe();if(De.queue.head==null)break;if(o.rightchain!=De.stack.head.elt.rightchain){for(;;){let p=De.stack.pop_unsafe();if(De.stack.head==null)break;e.add_diagonal(p,o)}De.stack.add(a)}else{let p=De.stack.pop_unsafe();for(;De.stack.head!=null;){let c=De.stack.head.elt,h=o.x-p.x,u=o.y-p.y,x=p.x-c.x,d=(p.y-c.y)*h-x*u;if(o.rightchain&&d>=0||!o.rightchain&&d<=0)break;e.add_diagonal(c,o),p=c,De.stack.pop()}De.stack.add(p)}De.stack.add(o),a=o}if(De.stack.head!=null)for(De.stack.pop();De.stack.head!=null;){let o=De.stack.pop_unsafe();if(De.stack.head==null)break;e.add_diagonal(n,o)}return e}};De.queue=null,De.stack=null,De.edgeSet=null;var bl=De;var gs=class gs{constructor(){this.outer=null;this.x=0;this.y=0;this.z=0;this.immutable=!1;this._validate=null}validate(){this._validate!=null&&this._validate()}wrapper(){return this.outer==null&&gs._wrapFn&&(this.outer=gs._wrapFn(this)),this.outer}};gs._zpp=null,gs._wrapFn=null;var ri=gs;var zl=class{static vec_dsq(e,t,n,s){let i=e-n,l=t-s;return i*i+l*l}static vec_distance(e,t,n,s){let i=e-n,l=t-s;return Math.sqrt(i*i+l*l)}};var fn=class fn{constructor(){this.outer_i=null;this.id=0;this.userData=null;this.ishape=null;this.ibody=null;this.icompound=null;this.wrap_cbTypes=null;this.cbSet=null;this.cbTypes=null;this.group=null;this.cbsets=null;fn.initFields(this)}static initFields(e){let t=fn._zpp;e.wrap_cbTypes=null,e.cbSet=null,e.cbTypes=null,e.group=null,e.cbsets=null,e.icompound=null,e.ibody=null,e.ishape=null,e.userData=null,e.id=0,e.outer_i=null,e.id=_n.Interactor(),e.cbsets=new t.util.ZNPList_ZPP_CallbackSet,e.cbTypes=new t.util.ZNPList_ZPP_CbType}static get(e,t){let n=e.id<t.id?e.id:t.id,s=e.id<t.id?t.id:e.id,i=e.cbsets.length<t.cbsets.length?e.cbsets:t.cbsets,l=null,r=i.head;for(;r!=null;){let a=r.elt;if(a.id==n&&a.di==s){l=a;break}r=r.next}return l}static int_callback(e,t,n){let s=e.int1,i=e.int2,l,r=t.options1,a=s.cbTypes;if(r.nonemptyintersection(a,r.includes)&&!r.nonemptyintersection(a,r.excludes)){let o=t.options2,p=i.cbTypes;l=o.nonemptyintersection(p,o.includes)&&!o.nonemptyintersection(p,o.excludes)}else l=!1;l?(n.int1=s,n.int2=i):(n.int1=i,n.int2=s)}isShape(){return this.ishape!=null}isBody(){return this.ibody!=null}isCompound(){return this.icompound!=null}__iaddedToSpace(){this.group!=null&&this.group.interactors.add(this);let e=this.cbTypes.head;for(;e!=null;)e.elt.interactors.add(this),e=e.next;this.alloc_cbSet()}__iremovedFromSpace(){this.group!=null&&this.group.interactors.remove(this);let e=this.cbTypes.head;for(;e!=null;)e.elt.interactors.remove(this),e=e.next;this.dealloc_cbSet()}wake(){if(this.ishape!=null){let e=this.ishape.body;e!=null&&e.space!=null&&e.space.non_inlined_wake(e)}else this.ibody!=null?this.ibody.space!=null&&this.ibody.space.non_inlined_wake(this.ibody):this.icompound.space!=null&&this.icompound.space.wakeCompound(this.icompound)}_getSpace(){return this.ishape!=null?this.ishape.body==null?null:this.ishape.body.space:this.ibody!=null?this.ibody.space:this.icompound.space}getSpace(){return this._getSpace()}setupcbTypes(){let e=fn._zpp;this.wrap_cbTypes=e.util.ZPP_CbTypeList.get(this.cbTypes),this.wrap_cbTypes.zpp_inner.adder=this.wrap_cbTypes_adder.bind(this),this.wrap_cbTypes.zpp_inner.subber=this.wrap_cbTypes_subber.bind(this),this.wrap_cbTypes.zpp_inner.dontremove=!0,this.wrap_cbTypes.zpp_inner._modifiable=this.immutable_cbTypes.bind(this)}immutable_cbTypes(){this.immutable_midstep("Interactor::cbTypes")}wrap_cbTypes_subber(e){let t=e.zpp_inner;if(this.cbTypes.has(t)){let n=this._getSpace();n!=null&&(this.dealloc_cbSet(),t.interactors.remove(this)),this.cbTypes.remove(t),n!=null&&(this.alloc_cbSet(),this.wake())}}wrap_cbTypes_adder(e){return this.insert_cbtype(e.zpp_inner),!1}insert_cbtype(e){let t=fn._zpp;if(!this.cbTypes.has(e)){let n=this._getSpace();n!=null&&(this.dealloc_cbSet(),e.interactors.add(this));let s=null,i=this.cbTypes.head;for(;i!=null;){let o=i.elt;if(e.id<o.id)break;s=i,i=i.next}let l=this.cbTypes,r;t.util.ZNPNode_ZPP_CbType.zpp_pool==null?r=new t.util.ZNPNode_ZPP_CbType:(r=t.util.ZNPNode_ZPP_CbType.zpp_pool,t.util.ZNPNode_ZPP_CbType.zpp_pool=r.next,r.next=null),r.elt=e;let a=r;s==null?(a.next=l.head,l.head=a):(a.next=s.next,s.next=a),l.pushmod=l.modified=!0,l.length++,n!=null&&(this.alloc_cbSet(),this.wake())}}alloc_cbSet(){let e=this._getSpace();(this.cbSet=e.cbsets.get(this.cbTypes))!=null&&(this.cbSet.count++,this.cbSet.interactors.add(this),this.cbSet.validate(),e.freshInteractorType(this))}dealloc_cbSet(){let e=this._getSpace();if(this.cbSet!=null){if(this.cbSet.interactors.remove(this),e.nullInteractorType(this),--this.cbSet.count==0){e.cbsets.remove(this.cbSet);let t=this.cbSet;for(t.listeners.clear(),t.zip_listeners=!0,t.bodylisteners.clear(),t.zip_bodylisteners=!0,t.conlisteners.clear(),t.zip_conlisteners=!0;t.cbTypes.head!=null;)t.cbTypes.pop_unsafe().cbsets.remove(t);t.next=_t.zpp_pool,_t.zpp_pool=t}this.cbSet=null}}setGroup(e){if(this.group!=e){let t=this._getSpace()!=null;t&&this.group!=null&&this.group.interactors.remove(this),this.group=e,t&&e!=null&&e.interactors.add(this),t&&(this.ishape!=null?this.ishape.body.wake():this.ibody!=null?this.ibody.wake():this.icompound.wake())}}immutable_midstep(e){if(this.ibody!=null){let t=this.ibody;if(t.space!=null&&t.space.midstep)throw new Error("Error: "+e+" cannot be set during a space step()")}else this.ishape!=null?this.ishape.__immutable_midstep(e):this.icompound.__imutable_midstep(e)}lookup_group(){let e=this;for(;e!=null&&e.group==null;)e.ishape!=null?e=e.ishape.body:e.icompound!=null?e=e.icompound.compound:e=e.ibody.compound;return e==null?null:e.group}copyto(e){let t=fn._nape;e.zpp_inner_i.group=this.group;let n=this.outer_i;n.zpp_inner_i.wrap_cbTypes==null&&n.zpp_inner_i.setupcbTypes();let s=n.zpp_inner_i.wrap_cbTypes;s.zpp_inner.valmod();let i=t.callbacks.CbTypeIterator.get(s);for(;;){i.zpp_inner.zpp_inner.valmod();let l=i.zpp_inner;l.zpp_inner.valmod(),l.zpp_inner.zip_length&&(l.zpp_inner.zip_length=!1,l.zpp_inner.user_length=l.zpp_inner.inner.length);let r=l.zpp_inner.user_length;i.zpp_critical=!0;let a;if(i.zpp_i<r?a=!0:(i.zpp_next=t.callbacks.CbTypeIterator.zpp_pool,t.callbacks.CbTypeIterator.zpp_pool=i,i.zpp_inner=null,a=!1),!a)break;i.zpp_critical=!1;let o=i.zpp_inner.at(i.zpp_i++);e.zpp_inner_i.wrap_cbTypes==null&&e.zpp_inner_i.setupcbTypes();let p=e.zpp_inner_i.wrap_cbTypes;p.zpp_inner.reverse_flag?p.push(o):p.unshift(o)}this.userData!=null&&(e.zpp_inner_i.userData=Object.assign({},this.userData))}static _init(e,t){fn._initialized||(fn._initialized=!0,fn._zpp=e,fn._nape=t)}};fn._nape=null,fn._zpp=null,fn._initialized=!1;var Ut=fn;var Be=class Be{constructor(){this.outer_i=null;this.id=0;this.userData=null;this.ishape=null;this.ibody=null;this.icompound=null;this.wrap_cbTypes=null;this.cbSet=null;this.cbTypes=null;this.group=null;this.cbsets=null;this.outer=null;this.world=!1;this.type=0;this.compound=null;this.shapes=null;this.wrap_shapes=null;this.space=null;this.arbiters=null;this.wrap_arbiters=null;this.constraints=null;this.wrap_constraints=null;this.component=null;this.graph_depth=0;this.sweepTime=0;this.sweep_angvel=0;this.sweepFrozen=!1;this.sweepRadius=0;this.bullet=!1;this.bulletEnabled=!1;this.disableCCD=!1;this.pre_posx=0;this.pre_posy=0;this.posx=0;this.posy=0;this.wrap_pos=null;this.velx=0;this.vely=0;this.wrap_vel=null;this.forcex=0;this.forcey=0;this.wrap_force=null;this.kinvelx=0;this.kinvely=0;this.wrap_kinvel=null;this.svelx=0;this.svely=0;this.wrap_svel=null;this.wrapcvel=null;this.angvel=0;this.torque=0;this.kinangvel=0;this.pre_rot=0;this.rot=0;this.axisx=0;this.axisy=0;this.zip_axis=!1;this.kinematicDelaySleep=!1;this.mass=0;this.zip_mass=!1;this.massMode=0;this.imass=0;this.smass=0;this.cmass=0;this.nomove=!1;this.gravMass=0;this.zip_gravMass=!1;this.gravMassMode=0;this.gravMassScale=0;this.zip_gravMassScale=!1;this.inertiaMode=0;this.inertia=0;this.zip_inertia=!1;this.cinertia=0;this.iinertia=0;this.sinertia=0;this.norotate=!1;this.aabb=null;this.zip_aabb=!1;this.localCOMx=0;this.localCOMy=0;this.zip_localCOM=!1;this.worldCOMx=0;this.worldCOMy=0;this.zip_worldCOM=!1;this.wrap_localCOM=null;this.wrap_worldCOM=null;let e=Be._zpp;Ut.initFields(this),this.ibody=this,this.world=!1,this.bulletEnabled=!1,this.sweepTime=0,this.sweep_angvel=0,this.norotate=this.nomove=!1,this.disableCCD=!1,this.posx=0,this.posy=0,this.rot=0,this.axisx=0,this.axisy=1,this.svelx=0,this.svely=0,this.velx=0,this.vely=0,this.kinvelx=0,this.kinvely=0,this.forcex=0,this.forcey=0,this.torque=this.angvel=this.kinangvel=0,this.pre_posx=1/0,this.pre_posy=1/0,this.pre_rot=1/0,this.localCOMx=0,this.localCOMy=0,this.worldCOMx=0,this.worldCOMy=0,this.zip_aabb=!0;let t;fe.zpp_pool==null?t=new fe:(t=fe.zpp_pool,fe.zpp_pool=t.next,t.next=null),t.minx=0,t.miny=0,t.maxx=0,t.maxy=0,this.aabb=t,this.aabb._immutable=!0,this.aabb._validate=this.aabb_validate.bind(this),this.massMode=0,this.gravMassMode=0,this.gravMassScale=1,this.inertiaMode=0,this.arbiters=new e.util.ZNPList_ZPP_Arbiter,this.constraints=new e.util.ZNPList_ZPP_Constraint,this.shapes=new e.util.ZNPList_ZPP_Shape,this.wrap_shapes=e.util.ZPP_ShapeList.get(this.shapes),this.wrap_shapes.zpp_inner.adder=this.shapes_adder.bind(this),this.wrap_shapes.zpp_inner.subber=this.shapes_subber.bind(this),this.wrap_shapes.zpp_inner._invalidate=this.shapes_invalidate.bind(this),this.wrap_shapes.zpp_inner._modifiable=this.shapes_modifiable.bind(this),this.kinematicDelaySleep=!1}static bodysetlt(e,t){return e.id<t.id}static __static(){let e=Be._nape,t=Be._zpp;t.util.ZPP_Flags.BodyType_STATIC==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.BodyType_STATIC=new e.phys.BodyType,t.util.ZPP_Flags.internal=!1);let n=new e.phys.Body(t.util.ZPP_Flags.BodyType_STATIC),s=n.zpp_inner;return s.world=!0,s.wrap_shapes.zpp_inner.immutable=!0,s.smass=s.imass=s.cmass=s.mass=s.gravMass=0,s.sinertia=s.iinertia=s.cinertia=s.inertia=0,s.cbTypes.clear(),n}isStatic(){return this.type===1}isDynamic(){return this.type===2}isKinematic(){return this.type===3}invalidate_type(){this.invalidate_mass(),this.invalidate_inertia()}invalidate_shapes(){this.zip_aabb=!0,this.zip_localCOM=!0,this.zip_worldCOM=!0,this.invalidate_mass(),this.invalidate_inertia()}init_bodysetlist(){if(Be.bodyset==null){let e=Be._zpp;Be.bodyset=new e.util.ZPP_Set_ZPP_Body,Be.bodyset.lt=Be.bodysetlt,Be.bodystack=new e.util.ZNPList_ZPP_Body}}connectedBodies_cont(e){Be.bodyset.try_insert_bool(e.zpp_inner)&&(Be.bodystack.add(e.zpp_inner),e.zpp_inner.graph_depth=Be.cur_graph_depth+1)}connectedBodies(e,t){let n=Be._nape;Be.bodyset==null&&this.init_bodysetlist();let s=t??new n.phys.BodyList;for(Be.bodystack.add(this),Be.bodyset.insert(this),this.graph_depth=0;Be.bodystack.head!=null;){let l=Be.bodystack.pop_unsafe();if(l.graph_depth===e)continue;Be.cur_graph_depth=l.graph_depth;let r=l.constraints.head;for(;r!=null;)r.elt.outer.visitBodies(this.connectedBodies_cont.bind(this)),r=r.next}let i=Be.bodyset;if(i.parent!=null){let l=i.parent;for(;l!=null;)if(l.prev!=null)l=l.prev;else if(l.next!=null)l=l.next;else{let r=l.data;if(r!==this){let p=r.outer;s.zpp_inner.reverse_flag?s.push(p):s.unshift(p)}let a=l.parent;a!=null&&(l===a.prev?a.prev=null:a.next=null,l.parent=null);let o=l;o.data=null,o.lt=null,o.next=Be._zpp.util.ZPP_Set_ZPP_Body.zpp_pool,Be._zpp.util.ZPP_Set_ZPP_Body.zpp_pool=o,l=a}i.parent=null}return s}interactingBodies(e,t){let n=Be._nape,s=Be._zpp;Be.bodyset==null&&this.init_bodysetlist();let i=t??new n.phys.BodyList,l=this.arbiters.head;for(;l!=null;){let a=l.elt;if(!a.sleeping&&(e===4||a.type===e)){let o=a.b1===this?a.b2:a.b1;if(Be.bodyset.try_insert_bool(o)){let p=o.outer;i.zpp_inner.reverse_flag?i.push(p):i.unshift(p)}}l=l.next}let r=Be.bodyset;if(r.parent!=null){let a=r.parent;for(;a!=null;)if(a.prev!=null)a=a.prev;else if(a.next!=null)a=a.next;else{let o=a.parent;o!=null&&(a===o.prev?o.prev=null:o.next=null,a.parent=null);let p=a;p.data=null,p.lt=null,p.next=s.util.ZPP_Set_ZPP_Body.zpp_pool,s.util.ZPP_Set_ZPP_Body.zpp_pool=p,a=o}r.parent=null}return i}atRest(e){let t=Be._nape;if(this.type!==2)return this.component.sleeping;let n=t.Config.linearSleepThreshold*t.Config.linearSleepThreshold,s;if(this.velx*this.velx+this.vely*this.vely>n)s=!1;else{let i=this.posx-this.pre_posx,l=this.posy-this.pre_posy;if(i*i+l*l>.25*n*e*e)s=!1;else{let r=this.aabb.maxx-this.aabb.minx,a=this.aabb.maxy-this.aabb.miny,o=r*r+a*a,p=t.Config.angularSleepThreshold*t.Config.angularSleepThreshold;if(4*this.angvel*this.angvel*o>p)s=!1;else{let c=this.rot-this.pre_rot;s=!(c*c*o>p*e*e)}}}return s||(this.component.waket=this.space.stamp),this.component.waket+t.Config.sleepDelay<this.space.stamp}refreshArbiters(){let e=this.arbiters.head;for(;e!=null;){let t=e.elt;t.invalidated=!0,e=e.next}}sweepIntegrate(e){let t=e-this.sweepTime;if(t!==0&&(this.sweepTime=e,this.posx+=this.velx*t,this.posy+=this.vely*t,this.angvel!==0)){let n=this.sweep_angvel*t;if(this.rot+=n,n*n>1e-4)this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot);else{let s=n*n,i=1-.5*s,l=1-s*s/8,r=(i*this.axisx+n*this.axisy)*l;this.axisy=(i*this.axisy-n*this.axisx)*l,this.axisx=r}}}sweepValidate(e){if(e.type===0)e.worldCOMx=this.posx+(this.axisy*e.localCOMx-this.axisx*e.localCOMy),e.worldCOMy=this.posy+(e.localCOMx*this.axisx+e.localCOMy*this.axisy);else{let t=e.polygon,n=t.lverts.next,s=t.gverts.next;for(;s!=null;){let p=s,c=n;n=n.next,p.x=this.posx+(this.axisy*c.x-this.axisx*c.y),p.y=this.posy+(c.x*this.axisx+c.y*this.axisy),s=s.next}let i=t.edges.head,l=t.gverts.next,r=l;for(l=l.next;l!=null;){let p=l,c=i.elt;i=i.next,c.gnormx=this.axisy*c.lnormx-this.axisx*c.lnormy,c.gnormy=c.lnormx*this.axisx+c.lnormy*this.axisy,c.gprojection=this.posx*c.gnormx+this.posy*c.gnormy+c.lprojection,c.tp0=r.y*c.gnormx-r.x*c.gnormy,c.tp1=p.y*c.gnormx-p.x*c.gnormy,r=p,l=l.next}let a=t.gverts.next,o=i.elt;o.gnormx=this.axisy*o.lnormx-this.axisx*o.lnormy,o.gnormy=o.lnormx*this.axisx+o.lnormy*this.axisy,o.gprojection=this.posx*o.gnormx+this.posy*o.gnormy+o.lprojection,o.tp0=r.y*o.gnormx-r.x*o.gnormy,o.tp1=a.y*o.gnormx-a.x*o.gnormy}}invalidate_pos(){let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}this.zip_worldCOM=!0}pos_invalidate(e){if(this.immutable_midstep("Body::position"),this.type===1&&this.space!=null)throw new Error("Error: Cannot move a static object once inside a Space");this.posx===e.x&&this.posy===e.y||(this.posx=e.x,this.posy=e.y,this.invalidate_pos(),this.wake())}pos_validate(){this.wrap_pos.zpp_inner.x=this.posx,this.wrap_pos.zpp_inner.y=this.posy}vel_invalidate(e){if(this.type===1)throw new Error("Error: Static body cannot have its velocity set.");this.velx=e.x,this.vely=e.y,this.wake()}vel_validate(){this.wrap_vel.zpp_inner.x=this.velx,this.wrap_vel.zpp_inner.y=this.vely}kinvel_invalidate(e){this.kinvelx=e.x,this.kinvely=e.y,this.wake()}kinvel_validate(){this.wrap_kinvel.zpp_inner.x=this.kinvelx,this.wrap_kinvel.zpp_inner.y=this.kinvely}svel_invalidate(e){this.svelx=e.x,this.svely=e.y,this.wake()}svel_validate(){this.wrap_svel.zpp_inner.x=this.svelx,this.wrap_svel.zpp_inner.y=this.svely}force_invalidate(e){if(this.type!==2)throw new Error("Error: Non-dynamic body cannot have force applied.");this.forcex=e.x,this.forcey=e.y,this.wake()}force_validate(){this.wrap_force.zpp_inner.x=this.forcex,this.wrap_force.zpp_inner.y=this.forcey}_setupVec2Wrapper(e,t,n,s){let i=Be._nape;if(e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let l;if(ye.poolVec2==null?l=new i.geom.Vec2:(l=ye.poolVec2,ye.poolVec2=l.zpp_pool,l.zpp_pool=null,l.zpp_disp=!1,l===ye.nextVec2&&(ye.nextVec2=null)),l.zpp_inner==null){let r;le.zpp_pool==null?r=new le:(r=le.zpp_pool,le.zpp_pool=r.next,r.next=null),r.weak=!1,r._immutable=!1,r.x=e,r.y=t,l.zpp_inner=r,l.zpp_inner.outer=l}else{if(l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=l.zpp_inner;if(r._immutable)throw new Error("Error: Vec2 is immutable");if(r._isimmutable!=null&&r._isimmutable(),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let a;l.zpp_inner._validate!=null&&l.zpp_inner._validate(),l.zpp_inner.x===e?(l.zpp_inner._validate!=null&&l.zpp_inner._validate(),a=l.zpp_inner.y===t):a=!1,a||(l.zpp_inner.x=e,l.zpp_inner.y=t,l.zpp_inner._invalidate!=null&&l.zpp_inner._invalidate(l.zpp_inner))}return l.zpp_inner.weak=!1,l}setupPosition(){this.wrap_pos=this._setupVec2Wrapper(this.posx,this.posy,null,null),this.wrap_pos.zpp_inner._inuse=!0,this.world?this.wrap_pos.zpp_inner._immutable=!0:(this.wrap_pos.zpp_inner._invalidate=this.pos_invalidate.bind(this),this.wrap_pos.zpp_inner._validate=this.pos_validate.bind(this))}setupVelocity(){this.wrap_vel=this._setupVec2Wrapper(this.velx,this.vely,null,null),this.wrap_vel.zpp_inner._inuse=!0,this.world?this.wrap_vel.zpp_inner._immutable=!0:(this.wrap_vel.zpp_inner._invalidate=this.vel_invalidate.bind(this),this.wrap_vel.zpp_inner._validate=this.vel_validate.bind(this))}setupkinvel(){this.wrap_kinvel=this._setupVec2Wrapper(this.kinvelx,this.kinvely,null,null),this.wrap_kinvel.zpp_inner._inuse=!0,this.world?this.wrap_kinvel.zpp_inner._immutable=!0:(this.wrap_kinvel.zpp_inner._invalidate=this.kinvel_invalidate.bind(this),this.wrap_kinvel.zpp_inner._validate=this.kinvel_validate.bind(this))}setupsvel(){this.wrap_svel=this._setupVec2Wrapper(this.svelx,this.svely,null,null),this.wrap_svel.zpp_inner._inuse=!0,this.world?this.wrap_svel.zpp_inner._immutable=!0:(this.wrap_svel.zpp_inner._invalidate=this.svel_invalidate.bind(this),this.wrap_svel.zpp_inner._validate=this.svel_validate.bind(this))}setupForce(){this.wrap_force=this._setupVec2Wrapper(this.forcex,this.forcey,null,null),this.wrap_force.zpp_inner._inuse=!0,this.world?this.wrap_force.zpp_inner._immutable=!0:(this.wrap_force.zpp_inner._invalidate=this.force_invalidate.bind(this),this.wrap_force.zpp_inner._validate=this.force_validate.bind(this))}cvel_validate(){this.wrapcvel.zpp_inner.x=this.velx+this.kinvelx,this.wrapcvel.zpp_inner.y=this.vely+this.kinvely}setup_cvel(){this.wrapcvel=this._setupVec2Wrapper(this.velx+this.kinvelx,this.vely+this.kinvely,null,null),this.wrapcvel.zpp_inner._inuse=!0,this.wrapcvel.zpp_inner._immutable=!0,this.wrapcvel.zpp_inner._validate=this.cvel_validate.bind(this)}invalidate_rot(){this.zip_axis=!0;let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}this.zip_worldCOM=!0}validate_axis(){this.zip_axis&&(this.zip_axis=!1,this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot))}quick_validate_axis(){this.zip_axis&&(this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot))}delta_rot(e){if(e*e>1e-4)this.axisx=Math.sin(this.rot),this.axisy=Math.cos(this.rot);else{let t=e*e,n=1-.5*t,s=1-t*t/8,i=(n*this.axisx+e*this.axisy)*s;this.axisy=(n*this.axisy-e*this.axisx)*s,this.axisx=i}this.zip_axis=!1}invalidate_mass(){this.zip_mass=!0,this.invalidate_gravMass()}validate_mass(){if(this.zip_mass||this.massMode===0&&!1){if(this.zip_mass=!1,this.massMode===0){this.cmass=0;let t=this.shapes.head;for(;t!=null;){let n=t.elt;n.refmaterial.density=n.material.density,n.validate_area_inertia(),this.cmass+=n.area*n.material.density,t=t.next}}this.type===2&&!this.nomove?(this.mass=this.cmass,this.imass=this.smass=1/this.mass):(this.mass=1/0,this.imass=this.smass=0)}}invalidate_gravMass(){this.gravMassMode!==1&&(this.zip_gravMass=!0),this.gravMassMode!==2&&(this.zip_gravMassScale=!0),this.wake()}validate_gravMass(){this.zip_gravMass&&(this.zip_gravMass=!1,this.validate_mass(),this.gravMassMode===0?(this.validate_mass(),this.gravMass=this.cmass):this.gravMassMode===2&&(this.validate_mass(),this.gravMass=this.cmass*this.gravMassScale))}invalidate_gravMassScale(){this.gravMassMode!==2?this.zip_gravMassScale=!0:this.invalidate_gravMass()}validate_gravMassScale(){this.zip_gravMassScale&&(this.zip_gravMassScale=!1,this.gravMassMode===0?this.gravMassScale=1:this.gravMassMode===1&&(this.validate_mass(),this.gravMassScale=this.gravMass/this.cmass))}invalidate_inertia(){this.zip_inertia=!0,this.wake()}validate_inertia(){if(this.zip_inertia||this.inertiaMode===0&&!1){if(this.zip_inertia=!1,this.inertiaMode===0){this.cinertia=0;let t=this.shapes.head;for(;t!=null;){let n=t.elt;n.refmaterial.density=n.material.density,n.validate_area_inertia(),this.cinertia+=n.inertia*n.area*n.material.density,t=t.next}}this.type===2&&!this.norotate?(this.inertia=this.cinertia,this.sinertia=this.iinertia=1/this.inertia):(this.inertia=1/0,this.sinertia=this.iinertia=0)}}invalidate_wake(){this.wake()}invalidate_aabb(){this.zip_aabb=!0}validate_aabb(){if(this.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(this.zip_aabb){this.zip_aabb=!1,this.aabb.minx=1/0,this.aabb.miny=1/0,this.aabb.maxx=-1/0,this.aabb.maxy=-1/0;let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.zip_aabb&&t.body!=null&&(t.zip_aabb=!1,t.type===0?this._validateCircleAABB(t.circle):this._validatePolygonAABB(t.polygon)),t.aabb.minx<this.aabb.minx&&(this.aabb.minx=t.aabb.minx),t.aabb.maxx>this.aabb.maxx&&(this.aabb.maxx=t.aabb.maxx),t.aabb.miny<this.aabb.miny&&(this.aabb.miny=t.aabb.miny),t.aabb.maxy>this.aabb.maxy&&(this.aabb.maxy=t.aabb.maxy),e=e.next}}}_validateCircleAABB(e){e.zip_worldCOM&&e.body!=null&&(e.zip_worldCOM=!1,e.zip_localCOM&&(e.zip_localCOM=!1,e.type===1&&this._computePolygonLocalCOM(e.polygon),e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy)),this.validate_axis(),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy));let t=e.radius;e.aabb.minx=e.worldCOMx-t,e.aabb.miny=e.worldCOMy-t,e.aabb.maxx=e.worldCOMx+t,e.aabb.maxy=e.worldCOMy+t}_validatePolygonAABB(e){if(e.zip_gverts&&e.body!=null){e.zip_gverts=!1,e.validate_lverts(),this.validate_axis();let s=e.lverts.next,i=e.gverts.next;for(;i!=null;){let l=i,r=s;s=s.next,l.x=e.body.posx+(e.body.axisy*r.x-e.body.axisx*r.y),l.y=e.body.posy+(r.x*e.body.axisx+r.y*e.body.axisy),i=i.next}}if(e.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let t=e.gverts.next;e.aabb.minx=t.x,e.aabb.miny=t.y,e.aabb.maxx=t.x,e.aabb.maxy=t.y;let n=e.gverts.next.next;for(;n!=null;){let s=n;s.x<e.aabb.minx&&(e.aabb.minx=s.x),s.x>e.aabb.maxx&&(e.aabb.maxx=s.x),s.y<e.aabb.miny&&(e.aabb.miny=s.y),s.y>e.aabb.maxy&&(e.aabb.maxy=s.y),n=n.next}}aabb_validate(){if(this.shapes.head==null)throw new Error("Error: bounds only makes sense when Body has shapes");this.validate_aabb()}invalidate_localCOM(){this.zip_localCOM=!0,this.zip_worldCOM=!0}invalidate_worldCOM(){this.zip_worldCOM=!0}_computePolygonLocalCOM(e){if(e.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(e.lverts.next.next==null)e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y;else if(e.lverts.next.next.next==null)e.localCOMx=e.lverts.next.x,e.localCOMy=e.lverts.next.y,e.localCOMx+=e.lverts.next.next.x,e.localCOMy+=e.lverts.next.next.y,e.localCOMx*=.5,e.localCOMy*=.5;else{e.localCOMx=0,e.localCOMy=0;let t=0,n=e.lverts.next,s=n;n=n.next;let i=n;for(n=n.next;n!=null;){let p=n;t+=i.x*(p.y-s.y);let c=p.y*i.x-p.x*i.y;e.localCOMx+=(i.x+p.x)*c,e.localCOMy+=(i.y+p.y)*c,s=i,i=p,n=n.next}n=e.lverts.next;let l=n;t+=i.x*(l.y-s.y);let r=l.y*i.x-l.x*i.y;e.localCOMx+=(i.x+l.x)*r,e.localCOMy+=(i.y+l.y)*r,s=i,i=l,n=n.next;let a=n;t+=i.x*(a.y-s.y);let o=a.y*i.x-a.x*i.y;e.localCOMx+=(i.x+a.x)*o,e.localCOMy+=(i.y+a.y)*o,t=1/(3*t),e.localCOMx*=t,e.localCOMy*=t}}validate_localCOM(){if(this.zip_localCOM){this.zip_localCOM=!1;let e=0,t=0,n=0,s=this.shapes.head;for(;s!=null;){let i=s.elt;i.zip_localCOM&&(i.zip_localCOM=!1,i.type===1&&this._computePolygonLocalCOM(i.polygon),i.wrap_localCOM!=null&&(i.wrap_localCOM.zpp_inner.x=i.localCOMx,i.wrap_localCOM.zpp_inner.y=i.localCOMy)),i.validate_area_inertia();let l=i.area*i.material.density;e+=i.localCOMx*l,t+=i.localCOMy*l,n+=i.area*i.material.density,s=s.next}if(n!==0){let i=1/n;this.localCOMx=e*i,this.localCOMy=t*i}this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy),this.zip_mass&&this.massMode===0&&(this.zip_mass=!1,this.cmass=n,this.type===2?(this.mass=this.cmass,this.imass=this.smass=1/this.mass):(this.mass=1/0,this.imass=this.smass=0))}}validate_worldCOM(){this.zip_worldCOM&&(this.zip_worldCOM=!1,this.validate_localCOM(),this.validate_axis(),this.worldCOMx=this.posx+(this.axisy*this.localCOMx-this.axisx*this.localCOMy),this.worldCOMy=this.posy+(this.localCOMx*this.axisx+this.localCOMy*this.axisy)),this.wrap_worldCOM!=null&&(this.wrap_worldCOM.zpp_inner.x=this.worldCOMx,this.wrap_worldCOM.zpp_inner.y=this.worldCOMy)}getlocalCOM(){if(this.shapes.head==null)throw new Error("Error: Body has no shapes so cannot compute its localCOM");this.validate_localCOM()}getworldCOM(){if(this.shapes.head==null)throw new Error("Error: Body has no shapes so cannot compute its worldCOM");this.validate_worldCOM()}__immutable_midstep(){if(this.world)throw new Error("Error: Space::world is immutable")}clear(){if(this.space!=null)throw new Error("Error: Cannot clear a Body if it is currently being used by a Space!");if(this.constraints.head!=null)throw new Error("Error: Cannot clear a Body if it is currently being used by a constraint!");for(;this.shapes.head!=null;){let t=this.shapes.pop_unsafe();t.removedFromBody(),t.body=null}this.invalidate_shapes(),this.pre_posx=0,this.pre_posy=0,this.posx=0,this.posy=0,this.velx=0,this.vely=0,this.forcex=0,this.forcey=0,this.kinvelx=0,this.kinvely=0,this.svelx=0,this.svely=0,this.angvel=this.torque=this.kinangvel=this.pre_rot=this.rot=0;let e=this.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}for(this.zip_worldCOM=!0,this.zip_axis=!0,e=this.shapes.head;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}this.zip_worldCOM=!0,this.axisx=0,this.axisy=1,this.zip_axis=!1,this.massMode=0,this.gravMassMode=0,this.gravMassScale=1,this.inertiaMode=0,this.norotate=!1,this.nomove=!1}shapes_adder(e){if(e.zpp_inner.body!==this){if(e.zpp_inner.body!=null&&e.zpp_inner.body.wrap_shapes.remove(e),e.zpp_inner.body=this,e.zpp_inner.addedToBody(),this.space!=null){let t=this.space,n=e.zpp_inner,s=n.body;s.world||(s.component.waket=t.stamp+(t.midstep?0:1),s.type===3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&t.really_wake(s,!1)),t.bphase.insert(n),n.addedToSpace()}return e.zpp_inner.type===1&&(e.zpp_inner.polygon.invalidate_gaxi(),e.zpp_inner.polygon.invalidate_gverts()),!0}else return!1}shapes_subber(e){this.space!=null&&this.space.removed_shape(e.zpp_inner),e.zpp_inner.body=null,e.zpp_inner.removedFromBody()}shapes_invalidate(e){this.invalidate_shapes()}shapes_modifiable(){if(this.immutable_midstep("Body::shapes"),this.type===1&&this.space!=null)throw new Error("Error: Cannot modifiy shapes of static object once added to Space")}addedToSpace(){let e=Be._zpp,t;e.space.ZPP_Component.zpp_pool==null?t=new e.space.ZPP_Component:(t=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=t.next,t.next=null),t.isBody=!0,t.body=this,this.component=t,this.__iaddedToSpace()}removedFromSpace(){let e=Be._zpp;for(;this.arbiters.head!=null;){let n=this.arbiters.pop_unsafe(),s=this.space;n.cleared=!0,n.b2===this&&this._removeArbiterFromList(n.b1.arbiters,n,e),n.b1===this&&this._removeArbiterFromList(n.b2.arbiters,n,e),n.pair!=null&&(n.pair.arb=null,n.pair=null),n.active=!1,s.f_arbiters.modified=!0}let t=this.component;t.body=null,t.constraint=null,t.next=e.space.ZPP_Component.zpp_pool,e.space.ZPP_Component.zpp_pool=t,this.component=null,this.__iremovedFromSpace()}_removeArbiterFromList(e,t,n){let s=null,i=e.head;for(;i!=null;){if(i.elt===t){let l;s==null?(l=e.head,e.head=l.next,e.head==null&&(e.pushmod=!0)):(l=s.next,s.next=l.next,l.next==null&&(e.pushmod=!0));let r=l;r.elt=null,r.next=n.util.ZNPNode_ZPP_Arbiter.zpp_pool,n.util.ZNPNode_ZPP_Arbiter.zpp_pool=r,e.modified=!0,e.length--,e.pushmod=!0;break}s=i,i=i.next}}copy(){let e=Be._nape,t=new e.phys.Body().zpp_inner;t.type=this.type,t.bulletEnabled=this.bulletEnabled,t.disableCCD=this.disableCCD;let n=this.shapes.head;for(;n!=null;){let s=n.elt,i=t.outer.zpp_inner.wrap_shapes,l=s.outer.copy();i.zpp_inner.reverse_flag?i.push(l):i.unshift(l),n=n.next}if(t.posx=this.posx,t.posy=this.posy,t.velx=this.velx,t.vely=this.vely,t.forcex=this.forcex,t.forcey=this.forcey,t.rot=this.rot,t.angvel=this.angvel,t.torque=this.torque,t.kinvelx=this.kinvelx,t.kinvely=this.kinvely,t.kinangvel=this.kinangvel,t.svelx=this.svelx,t.svely=this.svely,!this.zip_axis)t.axisx=this.axisx,t.axisy=this.axisy;else{t.zip_axis=!0;let s=t.shapes.head;for(;s!=null;){let i=s.elt;i.type===1&&(i.polygon.invalidate_gverts(),i.polygon.invalidate_gaxi()),i.invalidate_worldCOM(),s=s.next}t.zip_worldCOM=!0}return t.rot=this.rot,t.massMode=this.massMode,t.gravMassMode=this.gravMassMode,t.inertiaMode=this.inertiaMode,t.norotate=this.norotate,t.nomove=this.nomove,t.cmass=this.cmass,t.cinertia=this.cinertia,this.zip_mass?t.invalidate_mass():t.mass=this.mass,this.zip_gravMass?t.invalidate_gravMass():t.gravMass=this.gravMass,this.zip_gravMassScale?t.invalidate_gravMassScale():t.gravMassScale=this.gravMassScale,this.zip_inertia?t.invalidate_inertia():t.inertia=this.inertia,this.zip_aabb?t.zip_aabb=!0:(t.aabb.minx=this.aabb.minx,t.aabb.miny=this.aabb.miny,t.aabb.maxx=this.aabb.maxx,t.aabb.maxy=this.aabb.maxy),this.zip_localCOM?(t.zip_localCOM=!0,t.zip_worldCOM=!0):(t.localCOMx=this.localCOMx,t.localCOMy=this.localCOMy),this.zip_worldCOM?t.zip_worldCOM=!0:(t.worldCOMx=this.worldCOMx,t.worldCOMy=this.worldCOMy),this.copyto(t.outer),t.outer}static _init(e,t){if(!Be._initialized){Be._initialized=!0,Be._zpp=e,Be._nape=t;for(let n of Object.getOwnPropertyNames(Ut.prototype))n!=="constructor"&&!(n in Be.prototype)&&(Be.prototype[n]=Ut.prototype[n])}}static _initEnums(e,t){let n=()=>{t.internal=!0;let s=new e.phys.BodyType;return t.internal=!1,s};t.BodyType_STATIC==null&&(t.BodyType_STATIC=n()),t.BodyType_DYNAMIC==null&&(t.BodyType_DYNAMIC=n()),t.BodyType_KINEMATIC==null&&(t.BodyType_KINEMATIC=n()),Be.types=[null,t.BodyType_STATIC,t.BodyType_DYNAMIC,t.BodyType_KINEMATIC]}};Be._nape=null,Be._zpp=null,Be.types=[],Be.bodystack=null,Be.bodyset=null,Be.cur_graph_depth=0,Be._initialized=!1;var Cn=Be;var $t=class $t{constructor(){this.outer_i=null;this.id=0;this.userData=null;this.ishape=null;this.ibody=null;this.icompound=null;this.wrap_cbTypes=null;this.cbSet=null;this.cbTypes=null;this.group=null;this.cbsets=null;this.outer=null;this.bodies=null;this.constraints=null;this.compounds=null;this.wrap_bodies=null;this.wrap_constraints=null;this.wrap_compounds=null;this.depth=0;this.compound=null;this.space=null;let e=$t._zpp;Ut.initFields(this),this.icompound=this,this.depth=1,this.bodies=new e.util.ZNPList_ZPP_Body,this.wrap_bodies=e.util.ZPP_BodyList.get(this.bodies),this.wrap_bodies.zpp_inner.adder=this.bodies_adder.bind(this),this.wrap_bodies.zpp_inner.subber=this.bodies_subber.bind(this),this.wrap_bodies.zpp_inner._modifiable=this.bodies_modifiable.bind(this),this.constraints=new e.util.ZNPList_ZPP_Constraint,this.wrap_constraints=e.util.ZPP_ConstraintList.get(this.constraints),this.wrap_constraints.zpp_inner.adder=this.constraints_adder.bind(this),this.wrap_constraints.zpp_inner.subber=this.constraints_subber.bind(this),this.wrap_constraints.zpp_inner._modifiable=this.constraints_modifiable.bind(this),this.compounds=new e.util.ZNPList_ZPP_Compound,this.wrap_compounds=e.util.ZPP_CompoundList.get(this.compounds),this.wrap_compounds.zpp_inner.adder=this.compounds_adder.bind(this),this.wrap_compounds.zpp_inner.subber=this.compounds_subber.bind(this),this.wrap_compounds.zpp_inner._modifiable=this.compounds_modifiable.bind(this)}__imutable_midstep(e){if(this.space!=null&&this.space.midstep)throw new Error("Error: "+e+" cannot be set during space step()")}addedToSpace(){this.__iaddedToSpace()}removedFromSpace(){this.__iremovedFromSpace()}breakApart(){for(this.space!=null&&(this.__iremovedFromSpace(),this.space.nullInteractorType(this)),this.compound!=null?this.compound.compounds.remove(this):this.space!=null&&this.space.compounds.remove(this);this.bodies.head!=null;){let e=this.bodies.pop_unsafe();(e.compound=this.compound)!=null?this.compound.bodies.add(e):this.space!=null&&this.space.bodies.add(e),this.space!=null&&this.space.freshInteractorType(e)}for(;this.constraints.head!=null;){let e=this.constraints.pop_unsafe();(e.compound=this.compound)!=null?this.compound.constraints.add(e):this.space!=null&&this.space.constraints.add(e)}for(;this.compounds.head!=null;){let e=this.compounds.pop_unsafe();(e.compound=this.compound)!=null?this.compound.compounds.add(e):this.space!=null&&this.space.compounds.add(e),this.space!=null&&this.space.freshInteractorType(e)}this.compound=null,this.space=null}static _zppOf(e){return e.zpp_inner??e._inner?.zpp_inner??e._inner}bodies_adder(e){let t=$t._zppOf(e);return t.compound!==this?(t.compound!=null?t.compound.wrap_bodies.remove(e):t.space!=null&&t.space.wrap_bodies.remove(e),t.compound=this,this.space!=null&&this.space.addBody(t),!0):!1}bodies_subber(e){let t=$t._zppOf(e);t.compound=null,this.space!=null&&this.space.remBody(t)}bodies_modifiable(){this.immutable_midstep("Compound::bodies")}constraints_adder(e){let t=$t._zppOf(e);return t.compound!==this?(t.compound!=null?t.compound.wrap_constraints.remove(e):t.space!=null&&t.space.wrap_constraints.remove(e),t.compound=this,this.space!=null&&this.space.addConstraint(t),!0):!1}constraints_subber(e){let t=$t._zppOf(e);t.compound=null,this.space!=null&&this.space.remConstraint(t)}constraints_modifiable(){this.immutable_midstep("Compound::constraints")}compounds_adder(e){let t=$t._zppOf(e),n=this;for(;n!=null&&n!==t;)n=n.compound;if(n===t)throw new Error("Error: Assignment would cause a cycle in the Compound tree: assigning "+e.toString()+".compound = "+this.outer.toString());return t.compound!==this?(t.compound!=null?t.compound.wrap_compounds.remove(e):t.space!=null&&t.space.wrap_compounds.remove(e),t.compound=this,t.depth=this.depth+1,this.space!=null&&this.space.addCompound(t),!0):!1}compounds_subber(e){let t=$t._zppOf(e);t.compound=null,t.depth=1,this.space!=null&&this.space.remCompound(t)}compounds_modifiable(){this.immutable_midstep("Compound::compounds")}copy(e,t){let n=$t._nape,s=$t._zpp,i=e==null;e==null&&(e=[]),t==null&&(t=[]);let l=new n.phys.Compound,r=this.compounds.head;for(;r!=null;){let c=r.elt.copy(e,t);if(c.zpp_inner.immutable_midstep("Compound::compound"),(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!==l&&((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!=null&&(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer).zpp_inner.wrap_compounds.remove(c),l!=null)){let h=l.zpp_inner.wrap_compounds;h.zpp_inner.reverse_flag?h.push(c):h.unshift(c)}r=r.next}let a=this.bodies.head;for(;a!=null;){let p=a.elt,c=p.outer.copy();if(e.push(s.constraint.ZPP_CopyHelper.dict(p.id,c)),(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!==l&&((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!=null&&(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer).zpp_inner.wrap_bodies.remove(c),l!=null)){let h=l.zpp_inner.wrap_bodies;h.zpp_inner.reverse_flag?h.push(c):h.unshift(c)}a=a.next}let o=this.constraints.head;for(;o!=null;){let c=o.elt.copy(e,t);if((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!==l&&((c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer)!=null&&(c.zpp_inner.compound==null?null:c.zpp_inner.compound.outer).zpp_inner.wrap_constraints.remove(c),l!=null)){let h=l.zpp_inner.wrap_constraints;h.zpp_inner.reverse_flag?h.push(c):h.unshift(c)}o=o.next}if(i)for(;t.length>0;){let p=t.pop();for(let c=0;c<e.length;c++){let h=e[c];if(h.id===p.id){p.cb(h.bc);break}}}return this.copyto(l),l}static _init(){for(let e of Object.getOwnPropertyNames(Ut.prototype))e!=="constructor"&&!Object.prototype.hasOwnProperty.call($t.prototype,e)&&($t.prototype[e]=Ut.prototype[e])}};$t._nape=null,$t._zpp=null,$t._wrapFn=null;var qn=$t;var jt=class jt{constructor(){this.viscosity=1;this.density=1;this.gravityx=0;this.gravityy=0;this.wrap_gravity=null;this.shapes=null;this.wrap_shapes=null;this.outer=null;this.userData=null;this.next=null;this.shapes=new jt._zpp.util.ZNPList_ZPP_Shape}wrapper(){if(this.outer==null)if(jt._wrapFn)this.outer=jt._wrapFn(this);else{this.outer=new jt._nape.phys.FluidProperties;let e=this.outer.zpp_inner;e.outer=null,e.next=jt.zpp_pool,jt.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer=null}alloc(){}feature_cons(){this.shapes=new jt._zpp.util.ZNPList_ZPP_Shape}addShape(e){this.shapes.add(e)}remShape(e){this.shapes.remove(e)}copy(){let e;return jt.zpp_pool==null?e=new jt:(e=jt.zpp_pool,jt.zpp_pool=e.next,e.next=null),e.viscosity=this.viscosity,e.density=this.density,e}gravity_invalidate(e){this.gravityx=e.x,this.gravityy=e.y,this.invalidate()}gravity_validate(){this.wrap_gravity.zpp_inner.x=this.gravityx,this.wrap_gravity.zpp_inner.y=this.gravityy}getgravity(){let e=jt._zpp,t=jt._nape,n=this.gravityx??0,s=this.gravityy??0;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else{if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let r=!1;l._validate!=null&&l._validate(),(l.x!==n||l.y!==s)&&(r=!0),r&&(l.x=n,l.y=s,l._invalidate!=null&&l._invalidate(l))}i.zpp_inner.weak=!1,this.wrap_gravity=i,this.wrap_gravity.zpp_inner._inuse=!0,this.wrap_gravity.zpp_inner._invalidate=this.gravity_invalidate.bind(this),this.wrap_gravity.zpp_inner._validate=this.gravity_validate.bind(this)}invalidate(){let e=this.shapes.head;for(;e!=null;)e.elt.invalidate_fluidprops(),e=e.next}};jt.zpp_pool=null,jt._nape=null,jt._zpp=null,jt._wrapFn=null;var Mn=jt;var Ft=class Ft{constructor(){this.elasticity=0;this.dynamicFriction=1;this.staticFriction=2;this.density=.001;this.rollingFriction=.01;this.shapes=null;this.wrap_shapes=null;this.outer=null;this.userData=null;this.next=null;this.shapes=new Ft._zpp.util.ZNPList_ZPP_Shape}wrapper(){if(this.outer==null)if(Ft._wrapFn)this.outer=Ft._wrapFn(this);else{this.outer=new Ft._nape.phys.Material;let e=this.outer.zpp_inner;e.outer=null,e.next=Ft.zpp_pool,Ft.zpp_pool=e,this.outer.zpp_inner=this}return this.outer}free(){this.outer=null}alloc(){}feature_cons(){this.shapes=new Ft._zpp.util.ZNPList_ZPP_Shape}addShape(e){this.shapes.add(e)}remShape(e){this.shapes.remove(e)}copy(){let e=new Ft;return e.dynamicFriction=this.dynamicFriction,e.staticFriction=this.staticFriction,e.density=this.density,e.elasticity=this.elasticity,e.rollingFriction=this.rollingFriction,e}set(e){this.dynamicFriction=e.dynamicFriction,this.staticFriction=e.staticFriction,this.density=e.density,this.elasticity=e.elasticity,this.rollingFriction=e.rollingFriction}invalidate(e){let t=this.shapes.head;for(;t!=null;)t.elt.invalidate_material(e),t=t.next}};Ft.zpp_pool=null,Ft.WAKE=1,Ft.PROPS=2,Ft.ANGDRAG=4,Ft.ARBITERS=8,Ft._nape=null,Ft._zpp=null,Ft._wrapFn=null;var Oe=Ft;var Zn=class Zn{constructor(e){this.outer=null;this.body=null;this.type=0;this.area=0;this.zip_area_inertia=!1;this.inertia=0;this.angDrag=0;this.zip_angDrag=!1;this.localCOMx=0;this.localCOMy=0;this.zip_localCOM=!1;this.worldCOMx=0;this.worldCOMy=0;this.zip_worldCOM=!1;this.wrap_localCOM=null;this.wrap_worldCOM=null;this.sweepRadius=0;this.zip_sweepRadius=!1;this.sweepCoef=0;this.circle=null;this.polygon=null;this.capsule=null;this.refmaterial=null;this.material=null;this.filter=null;this.fluidProperties=null;this.fluidEnabled=!1;this.sensorEnabled=!1;this.sweep=null;this.node=null;this.pairs=null;this.aabb=null;this.zip_aabb=!1;this.ishape=null;this.userData=null;e!==void 0&&this._initShape(e)}static _initEnums(e,t){let n=()=>{t.internal=!0;let s=new e.shape.ShapeType;return t.internal=!1,s};t.ShapeType_CIRCLE==null&&(t.ShapeType_CIRCLE=n()),t.ShapeType_POLYGON==null&&(t.ShapeType_POLYGON=n()),t.ShapeType_CAPSULE==null&&(t.ShapeType_CAPSULE=n()),Zn.types=[t.ShapeType_CIRCLE,t.ShapeType_POLYGON,t.ShapeType_CAPSULE]}_initShape(e){let t=Zn._zpp;Ut.initFields(this),this.pairs=new t.util.ZNPList_ZPP_AABBPair,this.ishape=this,this.type=e;let n;fe.zpp_pool==null?n=new fe:(n=fe.zpp_pool,fe.zpp_pool=n.next,n.next=null),n.minx=0,n.miny=0,n.maxx=0,n.maxy=0,this.aabb=n,this.aabb._immutable=!0,this.aabb._validate=this.aabb_validate.bind(this),this.zip_area_inertia=this.zip_angDrag=this.zip_localCOM=this.zip_sweepRadius=!0,this.localCOMx=0,this.localCOMy=0,this.worldCOMx=0,this.worldCOMy=0,this.fluidEnabled=!1,this.sensorEnabled=!1,this.fluidProperties=null,this.body=null,this.refmaterial=new Oe,this.sweepRadius=this.sweepCoef=0}static _init(){if(!Zn._initialized){Zn._initialized=!0;for(let e of Object.getOwnPropertyNames(Ut.prototype))e!=="constructor"&&!Object.prototype.hasOwnProperty.call(Zn.prototype,e)&&(Zn.prototype[e]=Ut.prototype[e])}}isCircle(){return this.type===0}isPolygon(){return this.type===1}isCapsule(){return this.type===2}invalidate_sweepRadius(){this.zip_sweepRadius=!0}validate_sweepRadius(){this.zip_sweepRadius&&(this.zip_sweepRadius=!1,this.type===0?this.circle.__validate_sweepRadius():this.type===1?this.polygon.__validate_sweepRadius():this.capsule.__validate_sweepRadius())}clear(){this.type===0?this.circle.__clear():this.type===1?this.polygon.__clear():this.capsule.__clear()}validate_aabb(){this.zip_aabb&&this.body!=null&&(this.zip_aabb=!1,this.type===0?this.circle.__validate_aabb():this.type===1?this.polygon.__validate_aabb():this.capsule.__validate_aabb())}force_validate_aabb(){this.type===0?this.circle._force_validate_aabb():this.type===1?this.polygon._force_validate_aabb():this.capsule._force_validate_aabb()}invalidate_aabb(){this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0)}validate_area_inertia(){this.zip_area_inertia&&(this.zip_area_inertia=!1,this.type===0?this.circle.__validate_area_inertia():this.type===1?this.polygon.__validate_area_inertia():this.capsule.__validate_area_inertia())}validate_angDrag(){(this.zip_angDrag||this.refmaterial.dynamicFriction!==this.material.dynamicFriction)&&(this.zip_angDrag=!1,this.refmaterial.dynamicFriction=this.material.dynamicFriction,this.type===0?this.circle.__validate_angDrag():this.type===1?this.polygon.__validate_angDrag():this.capsule.__validate_angDrag())}validate_localCOM(){this.zip_localCOM&&(this.zip_localCOM=!1,this.type===1&&this.polygon.__validate_localCOM(),this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy))}validate_worldCOM(){if(this.zip_worldCOM&&this.body!=null){this.zip_worldCOM=!1,this.validate_localCOM();let e=this.body;e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot)),this.worldCOMx=e.posx+(e.axisy*this.localCOMx-e.axisx*this.localCOMy),this.worldCOMy=e.posy+(this.localCOMx*e.axisx+this.localCOMy*e.axisy)}}getworldCOM(){if(this.body==null)throw new Error("Error: worldCOM only makes sense when Shape belongs to a Body");this.validate_worldCOM(),this.wrap_worldCOM.zpp_inner.x=this.worldCOMx,this.wrap_worldCOM.zpp_inner.y=this.worldCOMy}invalidate_area_inertia(){this.zip_area_inertia=!0,this.body!=null&&(this.body.zip_localCOM=!0,this.body.zip_worldCOM=!0,this.body.invalidate_mass(),this.body.invalidate_inertia())}invalidate_angDrag(){this.zip_angDrag=!0}invalidate_localCOM(){this.zip_localCOM=!0,this.invalidate_area_inertia(),(this.type===0||this.type===2)&&(this.zip_sweepRadius=!0),this.invalidate_angDrag(),this.invalidate_worldCOM(),this.body!=null&&(this.body.zip_localCOM=!0,this.body.zip_worldCOM=!0)}invalidate_worldCOM(){this.zip_worldCOM=!0,this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0)}invalidate_material(e){(e&Oe.WAKE)!==0&&this.wake(),(e&Oe.ARBITERS)!==0&&this.body!=null&&this.body.refreshArbiters(),(e&Oe.PROPS)!==0&&this.body!=null&&(this.body.zip_localCOM=!0,this.body.zip_worldCOM=!0,this.body.invalidate_mass(),this.body.invalidate_inertia()),(e&Oe.ANGDRAG)!==0&&this.invalidate_angDrag(),this.refmaterial.set(this.material)}invalidate_filter(){this.wake()}invalidate_fluidprops(){this.fluidEnabled&&this.wake()}aabb_validate(){if(this.body==null)throw new Error("Error: bounds only makes sense when Shape belongs to a Body");this.validate_aabb()}setMaterial(e){this.material!==e&&(this.body!=null&&this.body.space!=null&&this.material!=null&&this.material.shapes.remove(this),this.material=e,this.body!=null&&this.body.space!=null&&e.shapes.add(this),this.wake(),this.body!=null&&this.body.refreshArbiters())}setFilter(e){this.filter!==e&&(this.body!=null&&this.body.space!=null&&this.filter!=null&&this.filter.shapes.remove(this),this.filter=e,this.body!=null&&this.body.space!=null&&e.shapes.add(this),this.wake())}setFluid(e){this.fluidProperties!==e&&(this.body!=null&&this.body.space!=null&&this.fluidProperties!=null&&this.fluidProperties.shapes.remove(this),this.fluidProperties=e,this.body!=null&&this.body.space!=null&&e.shapes.add(this),this.fluidEnabled&&this.wake())}__immutable_midstep(e){if(this.body!=null&&this.body.space!=null&&this.body.space.midstep)throw new Error("Error: "+e+" cannot be set during a space step()")}addedToBody(){this.invalidate_worldCOM(),this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0)}removedFromBody(){}addedToSpace(){this.__iaddedToSpace(),this.material.shapes.add(this),this.filter.shapes.add(this),this.fluidProperties!=null&&this.fluidProperties.shapes.add(this)}removedFromSpace(){this.__iremovedFromSpace(),this.material.shapes.remove(this),this.filter.shapes.remove(this),this.fluidProperties!=null&&this.fluidProperties.shapes.remove(this)}copy(){let e=Zn._zpp,t=this.type===0?this.circle.__copy():this.type===1?this.polygon.__copy():this.capsule.__copy();this.zip_area_inertia?t.invalidate_area_inertia():(t.area=this.area,t.inertia=this.inertia),this.zip_sweepRadius?t.zip_sweepRadius=!0:(t.sweepRadius=this.sweepRadius,t.sweepCoef=this.sweepCoef),this.zip_angDrag?t.invalidate_angDrag():t.angDrag=this.angDrag,this.zip_aabb?(t.zip_aabb=!0,t.body!=null&&(t.body.zip_aabb=!0)):(t.aabb.minx=this.aabb.minx,t.aabb.miny=this.aabb.miny,t.aabb.maxx=this.aabb.maxx,t.aabb.maxy=this.aabb.maxy);let n=t.material;n.outer=null,n.next=Oe.zpp_pool,Oe.zpp_pool=n;let s=t.filter;return s.outer=null,s.next=e.dynamics.ZPP_InteractionFilter.zpp_pool,e.dynamics.ZPP_InteractionFilter.zpp_pool=s,t.material=this.material,t.filter=this.filter,this.fluidProperties!=null&&(t.fluidProperties=this.fluidProperties),t.fluidEnabled=this.fluidEnabled,t.sensorEnabled=this.sensorEnabled,this.userData!=null&&(t.userData=Object.assign({},this.userData)),this.copyto(t.outer),t.outer}};Zn._nape=null,Zn._zpp=null,Zn.types=[],Zn._initialized=!1;var ai=Zn;var kn=class kn{constructor(){this.radius=0;this.outer_zn=null;this.radius=0,this.outer_zn=null,this._initShape(0),this.circle=this,this.zip_localCOM=!1}static _init(){if(kn._initialized)return;kn._initialized=!0;let t=kn._zpp.shape.ZPP_Shape.prototype,n=kn.prototype;for(let s in t)Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[s]);for(let s of Object.getOwnPropertyNames(t))s!=="constructor"&&!Object.prototype.hasOwnProperty.call(n,s)&&(n[s]=t[s])}__clear(){}invalidate_radius(){this.invalidate_area_inertia(),this.invalidate_angDrag(),this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0),this.body!=null&&this.body.wake()}localCOM_validate(){this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy}localCOM_invalidate(e){this.localCOMx=e.x,this.localCOMy=e.y,this.invalidate_localCOM(),this.body!=null&&this.body.wake()}localCOM_immutable(){if(this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modify localCOM of Circle added to a static Body whilst within a Space")}setupLocalCOM(){let e=kn._zpp,t=kn._nape,n=this.localCOMx,s=this.localCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_localCOM=i,this.wrap_localCOM.zpp_inner._inuse=!0,this.wrap_localCOM.zpp_inner._validate=this.localCOM_validate.bind(this),this.wrap_localCOM.zpp_inner._invalidate=this.localCOM_invalidate.bind(this),this.wrap_localCOM.zpp_inner._isimmutable=this.localCOM_immutable.bind(this)}__validate_aabb(){if(this.zip_worldCOM&&this.body!=null){this.zip_worldCOM=!1,this.zip_localCOM&&(this.zip_localCOM=!1,this.type===1&&this.polygon.__validate_localCOM(),this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy));let n=this.body;n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),this.worldCOMx=n.posx+(n.axisy*this.localCOMx-n.axisx*this.localCOMy),this.worldCOMy=n.posy+(this.localCOMx*n.axisx+this.localCOMy*n.axisy)}let e=this.radius,t=this.radius;this.aabb.minx=this.worldCOMx-e,this.aabb.miny=this.worldCOMy-t,this.aabb.maxx=this.worldCOMx+e,this.aabb.maxy=this.worldCOMy+t}_force_validate_aabb(){let e=this.body;this.worldCOMx=e.posx+(e.axisy*this.localCOMx-e.axisx*this.localCOMy),this.worldCOMy=e.posy+(this.localCOMx*e.axisx+this.localCOMy*e.axisy),this.aabb.minx=this.worldCOMx-this.radius,this.aabb.miny=this.worldCOMy-this.radius,this.aabb.maxx=this.worldCOMx+this.radius,this.aabb.maxy=this.worldCOMy+this.radius}__validate_sweepRadius(){this.sweepCoef=Math.sqrt(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy),this.sweepRadius=this.sweepCoef+this.radius}__validate_area_inertia(){let e=this.radius*this.radius;this.area=e*Math.PI,this.inertia=e*.5+(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy)}__validate_angDrag(){let e=kn._nape,t=this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy,n=this.radius*this.radius,s=this.material.dynamicFriction*e.Config.fluidAngularDragFriction;this.angDrag=(t+2*n)*s+.5*e.Config.fluidAngularDrag*(1+e.Config.fluidVacuumDrag)*t,this.angDrag/=2*(t+.5*n)}__scale(e,t){let n=((e<0?-e:e)+(t<0?-t:t))/2;this.radius*=n<0?-n:n,this.invalidate_radius(),this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0&&(this.localCOMx*=e,this.localCOMy*=t,this.invalidate_localCOM())}__translate(e,t){this.localCOMx+=e,this.localCOMy+=t,this.invalidate_localCOM()}__rotate(e,t){if(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0){let n=t*this.localCOMx-e*this.localCOMy,s=this.localCOMx*e+this.localCOMy*t;this.localCOMx=n,this.localCOMy=s,this.invalidate_localCOM()}}__transform(e){let t=e.zpp_inner.a*e.zpp_inner.d-e.zpp_inner.b*e.zpp_inner.c;t<0&&(t=-t),this.radius*=Math.sqrt(t);let n=e.zpp_inner.a*this.localCOMx+e.zpp_inner.b*this.localCOMy+e.zpp_inner.tx;this.localCOMy=e.zpp_inner.c*this.localCOMx+e.zpp_inner.d*this.localCOMy+e.zpp_inner.ty,this.localCOMx=n,this.invalidate_radius(),this.invalidate_localCOM()}__copy(){let e=kn._nape,t=new e.shape.Circle(this.radius).zpp_inner_zn;return t.localCOMx=this.localCOMx,t.localCOMy=this.localCOMy,t.zip_localCOM=!1,t}};kn._nape=null,kn._zpp=null,kn._initialized=!1;var Hn=kn;var en=class en{constructor(){this.next=null;this.polygon=null;this.outer=null;this.lnormx=0;this.lnormy=0;this.wrap_lnorm=null;this.gnormx=0;this.gnormy=0;this.wrap_gnorm=null;this.length=0;this.lprojection=0;this.gprojection=0;this.lp0=null;this.gp0=null;this.lp1=null;this.gp1=null;this.tp0=0;this.tp1=0;this.lnormx=0,this.lnormy=0,this.gnormx=0,this.gnormy=0,this.length=0,this.lprojection=0,this.gprojection=0}free(){this.polygon=null}alloc(){}wrapper(){return this.outer==null&&(en._wrapFn?this.outer=en._wrapFn(this):(en.internal=!0,this.outer=new en._nape.shape.Edge,en.internal=!1,this.outer.zpp_inner=this)),this.outer}lnorm_validate(){if(this.polygon==null)throw new Error("Error: Edge not currently in use");this.polygon.validate_laxi(),this.wrap_lnorm.zpp_inner.x=this.lnormx,this.wrap_lnorm.zpp_inner.y=this.lnormy}gnorm_validate(){if(this.polygon==null)throw new Error("Error: Edge not currently in use");if(this.polygon.body==null)throw new Error("Error: Edge worldNormal only makes sense if the parent Polygon is contained within a rigid body");this.polygon.validate_gaxi(),this.wrap_gnorm.zpp_inner.x=this.gnormx,this.wrap_gnorm.zpp_inner.y=this.gnormy}getlnorm(){let e=en._zpp,t=en._nape,n=this.lnormx,s=this.lnormy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_lnorm=i,this.wrap_lnorm.zpp_inner._immutable=!0,this.wrap_lnorm.zpp_inner._validate=this.lnorm_validate.bind(this)}getgnorm(){let e=en._zpp,t=en._nape,n=this.gnormx,s=this.gnormy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_gnorm=i,this.wrap_gnorm.zpp_inner._immutable=!0,this.wrap_gnorm.zpp_inner._validate=this.gnorm_validate.bind(this)}};en.zpp_pool=null,en.internal=!1,en._nape=null,en._zpp=null,en._wrapFn=null;var ot=en;var mt=class mt{constructor(){this.outer_zn=null;this.lverts=null;this.wrap_lverts=null;this.gverts=null;this.wrap_gverts=null;this.edges=null;this.wrap_edges=null;this.edgeCnt=0;this.reverse_flag=!1;this.zip_lverts=!1;this.zip_laxi=!1;this.zip_gverts=!1;this.zip_gaxi=!1;this.zip_valid=!1;this.zip_sanitation=!1;this.validation=null;this.zip_sanitation=!1,this.zip_valid=!1,this.zip_gaxi=!1,this.zip_gverts=!1,this.zip_laxi=!1,this.zip_lverts=!1,this.reverse_flag=!1,this.edgeCnt=0,this.wrap_edges=null,this.edges=null,this.wrap_gverts=null,this.gverts=null,this.wrap_lverts=null,this.lverts=null,this.outer_zn=null;let e=mt._zpp;this._initShape(1),this.polygon=this,this.lverts=new e.geom.ZPP_Vec2,this.gverts=new e.geom.ZPP_Vec2,this.edges=new e.util.ZNPList_ZPP_Edge,this.edgeCnt=0}static _init(){if(mt._initialized)return;mt._initialized=!0;let t=mt._zpp.shape.ZPP_Shape.prototype,n=mt.prototype;for(let s in t)Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[s]);for(let s of Object.getOwnPropertyNames(t))s!=="constructor"&&!Object.prototype.hasOwnProperty.call(n,s)&&(n[s]=t[s])}__clear(){}lverts_pa_invalidate(e){this.invalidate_lverts()}lverts_pa_immutable(){if(this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modify local vertex of Polygon added to a static body whilst within a Space")}gverts_pa_validate(){if(this.body==null)throw new Error("Error: World vertex only makes sense when Polygon is contained in a rigid body");this._validateGverts()}lverts_post_adder(e){let t=mt._zpp;e.zpp_inner._invalidate=this.lverts_pa_invalidate.bind(this),e.zpp_inner._isimmutable=this.lverts_pa_immutable.bind(this);let n=null,s=null,i=this.lverts.next;for(;i!=null&&i!==e.zpp_inner;)n=n==null?this.gverts.next:n.next,s=s==null?this.edges.head:s.next,i=i.next;let l;if(t.geom.ZPP_Vec2.zpp_pool==null?l=new t.geom.ZPP_Vec2:(l=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!0,l.x=0,l.y=0,this.gverts.insert(n,l),this.lverts.next.next!=null)if(this.lverts.next.next.next==null){let r;ot.zpp_pool==null?r=new ot:(r=ot.zpp_pool,ot.zpp_pool=r.next,r.next=null),r.polygon=this,this.edges.add(r);let a;ot.zpp_pool==null?a=new ot:(a=ot.zpp_pool,ot.zpp_pool=a.next,a.next=null),a.polygon=this,this.edges.add(a),this.edgeCnt+=2}else{let r;ot.zpp_pool==null?r=new ot:(r=ot.zpp_pool,ot.zpp_pool=r.next,r.next=null),r.polygon=this,this.edges.insert(s,r),this.edgeCnt++}l._validate=this.gverts_pa_validate.bind(this)}lverts_subber(e){this.cleanup_lvert(e.zpp_inner)}lverts_invalidate(e){this.invalidate_lverts()}lverts_validate(){this.validate_lverts()}lverts_modifiable(){if(this.immutable_midstep("Polygon::localVerts"),this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modifiy shapes of static object once added to Space")}gverts_validate(){this._validateGverts()}edges_validate(){this.validate_lverts()}getlverts(){let e=mt._zpp;this.wrap_lverts=e.util.ZPP_MixVec2List.get(this.lverts),this.wrap_lverts.zpp_inner.post_adder=this.lverts_post_adder.bind(this),this.wrap_lverts.zpp_inner.subber=this.lverts_subber.bind(this),this.wrap_lverts.zpp_inner._invalidate=this.lverts_invalidate.bind(this),this.wrap_lverts.zpp_inner._validate=this.lverts_validate.bind(this),this.wrap_lverts.zpp_inner._modifiable=this.lverts_modifiable.bind(this),this.wrap_lverts.zpp_inner.reverse_flag=this.reverse_flag}getgverts(){let e=mt._zpp;this.wrap_gverts=e.util.ZPP_MixVec2List.get(this.gverts,!0),this.wrap_gverts.zpp_inner.reverse_flag=this.reverse_flag,this.wrap_gverts.zpp_inner._validate=this.gverts_validate.bind(this)}getedges(){let e=mt._zpp;this.wrap_edges=e.util.ZPP_EdgeList.get(this.edges,!0),this.wrap_edges.zpp_inner.reverse_flag=this.reverse_flag,this.wrap_edges.zpp_inner._validate=this.edges_validate.bind(this)}invalidate_lverts(){this.invalidate_laxi(),this.invalidate_area_inertia(),this.invalidate_angDrag(),this.invalidate_localCOM(),this.invalidate_gverts(),this.zip_lverts=!0,this.zip_valid=!0,this.zip_sanitation=!0,this.body!=null&&this.body.wake()}invalidate_laxi(){this.invalidate_gaxi(),this.zip_sweepRadius=!0,this.zip_laxi=!0}invalidate_gverts(){this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0),this.zip_gverts=!0}invalidate_gaxi(){this.zip_gaxi=!0}validate_lverts(){this.zip_lverts&&(this.zip_lverts=!1,this.lverts.length>2&&(this.validate_area_inertia(),this.area<0&&(this.reverse_vertices(),this.area=-this.area)))}validate_laxi(){if(this.zip_laxi){this.zip_laxi=!1,this.validate_lverts();let t=this.edges.head,n=this.lverts.next,s=n;for(n=n.next;n!=null;){let h=n,u=t.elt;t=t.next,u.lp0=s,u.lp1=h;let x=s.x-h.x,y=s.y-h.y,d=Math.sqrt(x*x+y*y);u.length=d;let _=1/d;x*=_,y*=_;let f=x;x=-y,y=f,u.lprojection=x*s.x+y*s.y,u.lnormx=x,u.lnormy=y,u.wrap_lnorm!=null&&(u.wrap_lnorm.zpp_inner.x=x,u.wrap_lnorm.zpp_inner.y=y),s=h,n=n.next}let i=this.lverts.next,l=t.elt;l.lp0=s,l.lp1=i;let r=s.x-i.x,a=s.y-i.y,o=Math.sqrt(r*r+a*a);l.length=o;let p=1/o;r*=p,a*=p;let c=r;r=-a,a=c,l.lprojection=r*s.x+a*s.y,l.lnormx=r,l.lnormy=a,l.wrap_lnorm!=null&&(l.wrap_lnorm.zpp_inner.x=r,l.wrap_lnorm.zpp_inner.y=a)}}validate_gverts(){this._validateGverts()}validate_gaxi(){if(this.zip_gaxi&&this.body!=null){this.zip_gaxi=!1,this.validate_laxi();let e=this.body;e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot)),this._validateGverts();let t=this.edges.head,n=this.gverts.next,s=n;for(n=n.next;n!=null;){let r=n,a=t.elt;t=t.next,a.gp0=s,a.gp1=r,a.gnormx=e.axisy*a.lnormx-e.axisx*a.lnormy,a.gnormy=a.lnormx*e.axisx+a.lnormy*e.axisy,a.gprojection=e.posx*a.gnormx+e.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy,s=r,n=n.next}let i=this.gverts.next,l=t.elt;l.gp0=s,l.gp1=i,l.gnormx=e.axisy*l.lnormx-e.axisx*l.lnormy,l.gnormy=l.lnormx*e.axisx+l.lnormy*e.axisy,l.gprojection=e.posx*l.gnormx+e.posy*l.gnormy+l.lprojection,l.wrap_gnorm!=null&&(l.wrap_gnorm.zpp_inner.x=l.gnormx,l.wrap_gnorm.zpp_inner.y=l.gnormy),l.tp0=l.gp0.y*l.gnormx-l.gp0.x*l.gnormy,l.tp1=l.gp1.y*l.gnormx-l.gp1.x*l.gnormy}}_validateGverts(){if(this.zip_gverts&&this.body!=null){this.zip_gverts=!1,this.validate_lverts();let e=this.body;e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot));let t=this.lverts.next,n=this.gverts.next;for(;n!=null;){let s=n,i=t;t=t.next,s.x=e.posx+(e.axisy*i.x-e.axisx*i.y),s.y=e.posy+(i.x*e.axisx+i.y*e.axisy),n=n.next}}}cleanup_lvert(e){let t=mt._zpp,n=null,s=null,i=this.lverts.next;for(;i!=null&&i!==e;)n=n==null?this.gverts.next:n.next,s=s==null?this.edges.head:s.next,i=i.next;let l=n==null?this.gverts.next:n.next;this.gverts.erase(n);let r=l;if(r.outer!=null&&(r.outer.zpp_inner=null,r.outer=null),r._isimmutable=null,r._validate=null,r._invalidate=null,r.next=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=r,this.edgeCnt===2){let a=this.edges.pop_unsafe();a.polygon=null,a.next=ot.zpp_pool,ot.zpp_pool=a,a=this.edges.pop_unsafe(),a.polygon=null,a.next=ot.zpp_pool,ot.zpp_pool=a,this.edgeCnt=0}else if(this.edgeCnt!==0){let a=s==null?this.edges.head.elt:s.next.elt;this.edges.erase(s),a.polygon=null,a.next=ot.zpp_pool,ot.zpp_pool=a,this.edgeCnt--}}splice_collinear(){this.zip_sanitation&&(this.zip_sanitation=!1,this.splice_collinear_real())}splice_collinear_real(){let e=mt._nape;if(this.lverts.next==null||this.lverts.next.next==null||this.lverts.next.next.next==null)return;let t=null,n=this.lverts.next;for(;n!=null;){let i=n.next==null?this.lverts.next:n.next,l=n.x-i.x,r=n.y-i.y;l*l+r*r<e.Config.epsilon*e.Config.epsilon?(this.cleanup_lvert(n),n=this.lverts.erase(t)):(t=n,n=n.next)}if(this.lverts.next==null)return;let s;for(;;){s=!1;let i=this.lverts.next;for(;i!=null;){let l=i.next==null?this.lverts.next:i.next,r=l.next==null?this.lverts.next:l.next,a=l.x-i.x,o=l.y-i.y,p=r.x-l.x,h=(r.y-l.y)*a-p*o;h*h>=e.Config.epsilon*e.Config.epsilon||(this.cleanup_lvert(l),this.lverts.erase(i.next==null?null:i),s=!0),i=i.next}if(!s)break}}reverse_vertices(){this.lverts.reverse(),this.gverts.reverse(),this.edges.reverse();let e=this.edges.iterator_at(this.edgeCnt-1),t=this.edges.pop_unsafe();this.edges.insert(e,t),this.reverse_flag=!this.reverse_flag,this.wrap_lverts!=null&&(this.wrap_lverts.zpp_inner.reverse_flag=this.reverse_flag),this.wrap_gverts!=null&&(this.wrap_gverts.zpp_inner.reverse_flag=this.reverse_flag),this.wrap_edges!=null&&(this.wrap_edges.zpp_inner.reverse_flag=this.reverse_flag)}valid(){let e=mt._nape,t=mt._zpp;if(this.zip_valid){if(this.zip_valid=!1,this.zip_sanitation&&(this.zip_sanitation=!1,this.splice_collinear_real()),this.lverts.length<3)return t.util.ZPP_Flags.ValidationResult_DEGENERATE==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_DEGENERATE=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_DEGENERATE;if(this.validate_lverts(),this.validate_area_inertia(),this.area<e.Config.epsilon)return t.util.ZPP_Flags.ValidationResult_DEGENERATE==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_DEGENERATE=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_DEGENERATE;{let n=!1,s=!1,i=!0,l=this.lverts.next,r=l;l=l.next;let a=l;for(l=l.next;l!=null;){let o=l,p=o.x-a.x,c=o.y-a.y,h=a.x-r.x,x=(a.y-r.y)*p-h*c;if(x>e.Config.epsilon?s=!0:x<-e.Config.epsilon&&(n=!0),s&&n){i=!1;break}r=a,a=o,l=l.next}if(i){l=this.lverts.next;let o=l,p=o.x-a.x,c=o.y-a.y,h=a.x-r.x,x=(a.y-r.y)*p-h*c;if(x>e.Config.epsilon?s=!0:x<-e.Config.epsilon&&(n=!0),!(s&&n)){r=a,a=o,l=l.next;let y=l,d=y.x-a.x,_=y.y-a.y,f=a.x-r.x,P=(a.y-r.y)*d-f*_;P>e.Config.epsilon?s=!0:P<-e.Config.epsilon&&(n=!0)}}if(s&&n)return t.util.ZPP_Flags.ValidationResult_CONCAVE==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_CONCAVE=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_CONCAVE;{let o=!0,p=this.lverts.next,c=p;for(p=p.next;p!=null&&o;){let h=p,u=this.lverts.next,x=u.next;for(;x!=null&&o;){let y=x;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e)),u=y,x=x.next}if(o){let y=this.lverts.next;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e))}c=h,p=p.next}if(o){let h=this.lverts.next,u=this.lverts.next,x=u.next;for(;x!=null&&o;){let y=x;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e)),u=y,x=x.next}if(o){let y=this.lverts.next;c!==u&&c!==y&&h!==u&&h!==y&&(o=this._checkNoIntersection(c,h,u,y,e))}}return o?(t.util.ZPP_Flags.ValidationResult_VALID==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_VALID=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_VALID):(t.util.ZPP_Flags.ValidationResult_SELF_INTERSECTING==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.ValidationResult_SELF_INTERSECTING=new e.shape.ValidationResult,t.util.ZPP_Flags.internal=!1),this.validation=t.util.ZPP_Flags.ValidationResult_SELF_INTERSECTING)}}}else return this.validation}_checkNoIntersection(e,t,n,s,i){let l=e.x-n.x,r=e.y-n.y,a=t.x-e.x,o=t.y-e.y,p=s.x-n.x,c=s.y-n.y,h=o*p-a*c;if(h*h>i.Config.epsilon){h=1/h;let u=(c*l-p*r)*h;if(u>i.Config.epsilon&&u<1-i.Config.epsilon){let x=(o*l-a*r)*h;if(x>i.Config.epsilon&&x<1-i.Config.epsilon)return!1}}return!0}__validate_aabb(){if(this._validateGverts(),this.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let e=this.gverts.next;this.aabb.minx=e.x,this.aabb.miny=e.y,this.aabb.maxx=e.x,this.aabb.maxy=e.y;let t=this.gverts.next.next;for(;t!=null;){let n=t;n.x<this.aabb.minx&&(this.aabb.minx=n.x),n.x>this.aabb.maxx&&(this.aabb.maxx=n.x),n.y<this.aabb.miny&&(this.aabb.miny=n.y),n.y>this.aabb.maxy&&(this.aabb.maxy=n.y),t=t.next}}_force_validate_aabb(){let e=this.body,t=this.lverts.next,n=this.gverts.next,s=t;t=t.next,n.x=e.posx+(e.axisy*s.x-e.axisx*s.y),n.y=e.posy+(s.x*e.axisx+s.y*e.axisy),this.aabb.minx=n.x,this.aabb.miny=n.y,this.aabb.maxx=n.x,this.aabb.maxy=n.y;let i=this.gverts.next.next;for(;i!=null;){let l=i,r=t;t=t.next,l.x=e.posx+(e.axisy*r.x-e.axisx*r.y),l.y=e.posy+(r.x*e.axisx+r.y*e.axisy),l.x<this.aabb.minx&&(this.aabb.minx=l.x),l.x>this.aabb.maxx&&(this.aabb.maxx=l.x),l.y<this.aabb.miny&&(this.aabb.miny=l.y),l.y>this.aabb.maxy&&(this.aabb.maxy=l.y),i=i.next}}__validate_sweepRadius(){let e=0,t=0;this.validate_laxi();let n=this.lverts.next;for(;n!=null;){let i=n,l=i.x*i.x+i.y*i.y;l>e&&(e=l),n=n.next}let s=this.edges.head;for(;s!=null;){let i=s.elt;if(i.lprojection<t&&(t=i.lprojection,t<0))break;s=s.next}t<0&&(t=0),this.sweepRadius=Math.sqrt(e),this.sweepCoef=this.sweepRadius-t}__validate_area_inertia(){if(this.lverts.next==null||this.lverts.next.next==null||this.lverts.next.next.next==null)this.area=0,this.inertia=0;else{this.area=0;let e=0,t=0,n=this.lverts.next,s=n;n=n.next;let i=n;for(n=n.next;n!=null;){let p=n,c=i.y*s.x-i.x*s.y,h=i.x*i.x+i.y*i.y+(i.x*s.x+i.y*s.y)+(s.x*s.x+s.y*s.y);e+=c*h,t+=c,this.area+=i.x*(p.y-s.y),s=i,i=p,n=n.next}n=this.lverts.next;let l=n,r=i.y*s.x-i.x*s.y,a=i.x*i.x+i.y*i.y+(i.x*s.x+i.y*s.y)+(s.x*s.x+s.y*s.y);e+=r*a,t+=r,this.area+=i.x*(l.y-s.y),s=i,i=l,n=n.next;let o=n;r=i.y*s.x-i.x*s.y,a=i.x*i.x+i.y*i.y+(i.x*s.x+i.y*s.y)+(s.x*s.x+s.y*s.y),e+=r*a,t+=r,this.area+=i.x*(o.y-s.y),this.inertia=e/(6*t),this.area*=.5,this.area<0&&(this.area=-this.area,this.reverse_vertices())}}__validate_angDrag(){let e=mt._nape;if(this.lverts.length<3)throw new Error("Error: Polygon's with less than 3 vertices have no meaningful angDrag");this.validate_area_inertia(),this.validate_laxi();let t=0,n=this.edges.head,s=0,i=this.lverts.next,l=i,r=i.next;for(;r!=null;){let a=r,o=n.elt;n=n.next,s+=o.length;let p=a.x-l.x,c=a.y-l.y;t+=o.length*e.Config.fluidAngularDragFriction*this.material.dynamicFriction*o.lprojection*o.lprojection;let h=-(l.y*o.lnormx-l.x*o.lnormy)/(c*o.lnormx-p*o.lnormy);if(h>0){let u=h>1?1:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*l.x-o.lnormx*l.y,_=o.lnormy*x-o.lnormx*y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*u*o.length*e.Config.fluidAngularDrag}if(h<1){let u=h<0?0:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*x-o.lnormx*y,_=o.lnormy*a.x-o.lnormx*a.y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*e.Config.fluidVacuumDrag*(1-u)*o.length*e.Config.fluidAngularDrag}l=a,r=r.next}{let a=this.lverts.next,o=n.elt;s+=o.length;let p=a.x-l.x,c=a.y-l.y;t+=o.length*e.Config.fluidAngularDragFriction*this.material.dynamicFriction*o.lprojection*o.lprojection;let h=-(l.y*o.lnormx-l.x*o.lnormy)/(c*o.lnormx-p*o.lnormy);if(h>0){let u=h>1?1:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*l.x-o.lnormx*l.y,_=o.lnormy*x-o.lnormx*y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*u*o.length*e.Config.fluidAngularDrag}if(h<1){let u=h<0?0:h,x=l.x,y=l.y;x+=p*u,y+=c*u;let d=o.lnormy*x-o.lnormx*y,_=o.lnormy*a.x-o.lnormx*a.y,f=(_*_*_-d*d*d)/(3*(_-d));t+=f*e.Config.fluidVacuumDrag*(1-u)*o.length*e.Config.fluidAngularDrag}}this.angDrag=t/(this.inertia*s)}__validate_localCOM(){if(this.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(this.lverts.next.next==null)this.localCOMx=this.lverts.next.x,this.localCOMy=this.lverts.next.y;else if(this.lverts.next.next.next==null)this.localCOMx=this.lverts.next.x,this.localCOMy=this.lverts.next.y,this.localCOMx+=this.lverts.next.next.x,this.localCOMy+=this.lverts.next.next.y,this.localCOMx*=.5,this.localCOMy*=.5;else{this.localCOMx=0,this.localCOMy=0;let e=0,t=this.lverts.next,n=t;t=t.next;let s=t;for(t=t.next;t!=null;){let a=t;e+=s.x*(a.y-n.y);let o=a.y*s.x-a.x*s.y;this.localCOMx+=(s.x+a.x)*o,this.localCOMy+=(s.y+a.y)*o,n=s,s=a,t=t.next}t=this.lverts.next;let i=t;e+=s.x*(i.y-n.y);let l=i.y*s.x-i.x*s.y;this.localCOMx+=(s.x+i.x)*l,this.localCOMy+=(s.y+i.y)*l,n=s,s=i,t=t.next;let r=t;e+=s.x*(r.y-n.y),l=r.y*s.x-r.x*s.y,this.localCOMx+=(s.x+r.x)*l,this.localCOMy+=(s.y+r.y)*l,e=1/(3*e),this.localCOMx*=e,this.localCOMy*=e}}localCOM_validate(){if(this.lverts.next==null)throw new Error("Error: An empty polygon does not have any meaningful localCOM");this.validate_localCOM()}localCOM_invalidate(e){this.validate_localCOM();let t=e.x-this.localCOMx,n=e.y-this.localCOMy,s=this.lverts.next;for(;s!=null;)s.x+=t,s.y+=n,s=s.next;this.invalidate_lverts()}setupLocalCOM(){let e=mt._zpp,t=mt._nape,n=this.localCOMx,s=this.localCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_localCOM=i,this.wrap_localCOM.zpp_inner._inuse=!0,this.wrap_localCOM.zpp_inner._validate=this.localCOM_validate.bind(this),this.wrap_localCOM.zpp_inner._invalidate=this.localCOM_invalidate.bind(this)}__translate(e,t){let n=this.lverts.next;for(;n!=null;)n.x+=e,n.y+=t,n=n.next;this.invalidate_lverts()}__scale(e,t){let n=this.lverts.next;for(;n!=null;)n.x*=e,n.y*=t,n=n.next;this.invalidate_lverts()}__rotate(e,t){let n=this.lverts.next;for(;n!=null;){let s=t*n.x-e*n.y,i=n.x*e+n.y*t;n.x=s,n.y=i,n=n.next}this.invalidate_lverts()}__transform(e){let t=this.lverts.next;for(;t!=null;){let n=e.zpp_inner.a*t.x+e.zpp_inner.b*t.y+e.zpp_inner.tx;t.y=e.zpp_inner.c*t.x+e.zpp_inner.d*t.y+e.zpp_inner.ty,t.x=n,t=t.next}this.invalidate_lverts()}__copy(){let e=mt._nape;this.outer_zn.zpp_inner_zn.wrap_lverts==null&&this.outer_zn.zpp_inner_zn.getlverts();let t=this.outer_zn.zpp_inner_zn.wrap_lverts,n=[],s=t.iterator();for(;s.hasNext();)n.push(s.next());return new e.shape.Polygon(n).zpp_inner_zn}};mt._nape=null,mt._zpp=null,mt._initialized=!1;var Qn=mt;var En=class En{constructor(){this.radius=0;this.halfLength=0;this.outer_zn=null;this.spine1x=0;this.spine1y=0;this.spine2x=0;this.spine2y=0;this.radius=0,this.halfLength=0,this.outer_zn=null,this._initShape(2),this.capsule=this,this.zip_localCOM=!1}static _init(){if(En._initialized)return;En._initialized=!0;let t=En._zpp.shape.ZPP_Shape.prototype,n=En.prototype;for(let s in t)Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[s]);for(let s of Object.getOwnPropertyNames(t))s!=="constructor"&&!Object.prototype.hasOwnProperty.call(n,s)&&(n[s]=t[s])}__clear(){}invalidate_radius(){this.invalidate_area_inertia(),this.invalidate_angDrag(),this.zip_aabb=!0,this.body!=null&&(this.body.zip_aabb=!0,this.body.wake())}invalidate_halfLength(){this.invalidate_area_inertia(),this.invalidate_angDrag(),this.zip_aabb=!0,this.zip_sweepRadius=!0,this.body!=null&&(this.body.zip_aabb=!0,this.body.wake())}localCOM_validate(){this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy}localCOM_invalidate(e){this.localCOMx=e.x,this.localCOMy=e.y,this.invalidate_localCOM(),this.body!=null&&this.body.wake()}localCOM_immutable(){if(this.body!=null&&this.body.type===1&&this.body.space!=null)throw new Error("Error: Cannot modify localCOM of Capsule added to a static Body whilst within a Space")}setupLocalCOM(){let e=En._zpp,t=En._nape,n=this.localCOMx,s=this.localCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(e.util.ZPP_PubPool.poolVec2==null?i=new t.geom.Vec2:(i=e.util.ZPP_PubPool.poolVec2,e.util.ZPP_PubPool.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i==e.util.ZPP_PubPool.nextVec2&&(e.util.ZPP_PubPool.nextVec2=null)),i.zpp_inner==null){let l;e.geom.ZPP_Vec2.zpp_pool==null?l=new e.geom.ZPP_Vec2:(l=e.geom.ZPP_Vec2.zpp_pool,e.geom.ZPP_Vec2.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,this.wrap_localCOM=i,this.wrap_localCOM.zpp_inner._inuse=!0,this.wrap_localCOM.zpp_inner._validate=this.localCOM_validate.bind(this),this.wrap_localCOM.zpp_inner._invalidate=this.localCOM_invalidate.bind(this),this.wrap_localCOM.zpp_inner._isimmutable=this.localCOM_immutable.bind(this)}__validate_aabb(){if(this.zip_worldCOM&&this.body!=null){this.zip_worldCOM=!1,this.zip_localCOM&&(this.zip_localCOM=!1,this.wrap_localCOM!=null&&(this.wrap_localCOM.zpp_inner.x=this.localCOMx,this.wrap_localCOM.zpp_inner.y=this.localCOMy));let c=this.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),this.worldCOMx=c.posx+(c.axisy*this.localCOMx-c.axisx*this.localCOMy),this.worldCOMy=c.posy+(this.localCOMx*c.axisx+this.localCOMy*c.axisy)}let e=this.body;if(e!=null){e.zip_axis&&(e.zip_axis=!1,e.axisx=Math.sin(e.rot),e.axisy=Math.cos(e.rot));let c=e.axisy*this.halfLength,h=e.axisx*this.halfLength;this.spine1x=this.worldCOMx-c,this.spine1y=this.worldCOMy-h,this.spine2x=this.worldCOMx+c,this.spine2y=this.worldCOMy+h}let t=this.radius,n=this.spine1x-t,s=this.spine2x-t,i=this.spine1y-t,l=this.spine2y-t,r=this.spine1x+t,a=this.spine2x+t,o=this.spine1y+t,p=this.spine2y+t;this.aabb.minx=n<s?n:s,this.aabb.miny=i<l?i:l,this.aabb.maxx=r>a?r:a,this.aabb.maxy=o>p?o:p}_force_validate_aabb(){let e=this.body;this.worldCOMx=e.posx+(e.axisy*this.localCOMx-e.axisx*this.localCOMy),this.worldCOMy=e.posy+(this.localCOMx*e.axisx+this.localCOMy*e.axisy);let t=e.axisy*this.halfLength,n=e.axisx*this.halfLength;this.spine1x=this.worldCOMx-t,this.spine1y=this.worldCOMy-n,this.spine2x=this.worldCOMx+t,this.spine2y=this.worldCOMy+n;let s=this.radius,i=this.spine1x-s,l=this.spine2x-s,r=this.spine1y-s,a=this.spine2y-s,o=this.spine1x+s,p=this.spine2x+s,c=this.spine1y+s,h=this.spine2y+s;this.aabb.minx=i<l?i:l,this.aabb.miny=r<a?r:a,this.aabb.maxx=o>p?o:p,this.aabb.maxy=c>h?c:h}__validate_sweepRadius(){let e=Math.sqrt(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy);this.sweepCoef=e+this.halfLength,this.sweepRadius=this.sweepCoef+this.radius}__validate_area_inertia(){let e=this.radius,t=this.halfLength,n=e*e;this.area=Math.PI*n+4*t*e;let s=2*t*(2*e)*(2*e*(2*e)+2*t*(2*t))/12,i=Math.PI*n*(n*.5+t*t);this.inertia=(s+i)/this.area+(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy)}__validate_angDrag(){let e=En._nape,t=this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy,n=this.radius*this.radius,s=this.halfLength*this.halfLength,i=this.material.dynamicFriction*e.Config.fluidAngularDragFriction;this.angDrag=(t+2*n+s)*i+.5*e.Config.fluidAngularDrag*(1+e.Config.fluidVacuumDrag)*t,this.angDrag/=2*(t+.5*n+s/3)}__scale(e,t){let n=((e<0?-e:e)+(t<0?-t:t))/2,s=n<0?-n:n;this.radius*=s,this.halfLength*=s,this.invalidate_radius(),this.invalidate_halfLength(),this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0&&(this.localCOMx*=e,this.localCOMy*=t,this.invalidate_localCOM())}__translate(e,t){this.localCOMx+=e,this.localCOMy+=t,this.invalidate_localCOM()}__rotate(e,t){if(this.localCOMx*this.localCOMx+this.localCOMy*this.localCOMy>0){let n=t*this.localCOMx-e*this.localCOMy,s=this.localCOMx*e+this.localCOMy*t;this.localCOMx=n,this.localCOMy=s,this.invalidate_localCOM()}}__transform(e){let t=e.zpp_inner.a*e.zpp_inner.d-e.zpp_inner.b*e.zpp_inner.c;t<0&&(t=-t);let n=Math.sqrt(t);this.radius*=n,this.halfLength*=n;let s=e.zpp_inner.a*this.localCOMx+e.zpp_inner.b*this.localCOMy+e.zpp_inner.tx;this.localCOMy=e.zpp_inner.c*this.localCOMx+e.zpp_inner.d*this.localCOMy+e.zpp_inner.ty,this.localCOMx=s,this.invalidate_radius(),this.invalidate_halfLength(),this.invalidate_localCOM()}__copy(){let e=En._nape,t=2*(this.halfLength+this.radius),n=2*this.radius,s=new e.shape.Capsule(t,n).zpp_inner_zn;return s.localCOMx=this.localCOMx,s.localCOMy=this.localCOMy,s.zip_localCOM=!1,s}};En._nape=null,En._zpp=null,En._initialized=!1;var $n=En;var vi=class vi{constructor(){this.space=null;this.is_sweep=!1;this.sweep=null;this.dynab=null;this.aabbShape=null;this.matrix=null;this.circShape=null}static _initFields(e){e.space=null,e.is_sweep=!1,e.sweep=null,e.dynab=null,e.aabbShape=null,e.matrix=null,e.circShape=null}insert(e){this.is_sweep?this.sweep.__insert(e):this.dynab.__insert(e)}remove(e){this.is_sweep?this.sweep.__remove(e):this.dynab.__remove(e)}sync(e){if(this.is_sweep){if(!this.sweep.space.continuous&&e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let t=e.circle;if(t.zip_worldCOM&&t.body!=null){if(t.zip_worldCOM=!1,t.zip_localCOM){if(t.zip_localCOM=!1,t.type==1){let l=t.polygon;if(l.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(l.lverts.next.next==null)l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;else if(l.lverts.next.next.next==null){l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;let r=1;l.localCOMx+=l.lverts.next.next.x*r,l.localCOMy+=l.lverts.next.next.y*r;let a=.5;l.localCOMx*=a,l.localCOMy*=a}else{l.localCOMx=0,l.localCOMy=0;let r=0,a=l.lverts.next,o=a;a=a.next;let p=a;for(a=a.next;a!=null;){let d=a;r+=p.x*(d.y-o.y);let _=d.y*p.x-d.x*p.y;l.localCOMx+=(p.x+d.x)*_,l.localCOMy+=(p.y+d.y)*_,o=p,p=d,a=a.next}a=l.lverts.next;let c=a;r+=p.x*(c.y-o.y);let h=c.y*p.x-c.x*p.y;l.localCOMx+=(p.x+c.x)*h,l.localCOMy+=(p.y+c.y)*h,o=p,p=c,a=a.next;let u=a;r+=p.x*(u.y-o.y);let x=u.y*p.x-u.x*p.y;l.localCOMx+=(p.x+u.x)*x,l.localCOMy+=(p.y+u.y)*x,r=1/(3*r);let y=r;l.localCOMx*=y,l.localCOMy*=y}}t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy)}let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}let n=t.radius,s=t.radius;t.aabb.minx=t.worldCOMx-n,t.aabb.miny=t.worldCOMy-s,t.aabb.maxx=t.worldCOMx+n,t.aabb.maxy=t.worldCOMy+s}else{let t=e.polygon;if(t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot));let l=t.lverts.next,r=t.gverts.next;for(;r!=null;){let a=r,o=l;l=l.next,a.x=t.body.posx+(t.body.axisy*o.x-t.body.axisx*o.y),a.y=t.body.posy+(o.x*t.body.axisx+o.y*t.body.axisy),r=r.next}}if(t.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let n=t.gverts.next;t.aabb.minx=n.x,t.aabb.miny=n.y,t.aabb.maxx=n.x,t.aabb.maxy=n.y;let s=t.gverts.next.next;for(;s!=null;){let i=s;i.x<t.aabb.minx&&(t.aabb.minx=i.x),i.x>t.aabb.maxx&&(t.aabb.maxx=i.x),i.y<t.aabb.miny&&(t.aabb.miny=i.y),i.y>t.aabb.maxy&&(t.aabb.maxy=i.y),s=s.next}}}else{let t=this.dynab,n=e.node;if(!n.synced){if(!t.space.continuous&&e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let i=e.circle;if(i.zip_worldCOM&&i.body!=null){if(i.zip_worldCOM=!1,i.zip_localCOM){if(i.zip_localCOM=!1,i.type==1){let o=i.polygon;if(o.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(o.lverts.next.next==null)o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;else if(o.lverts.next.next.next==null){o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;let p=1;o.localCOMx+=o.lverts.next.next.x*p,o.localCOMy+=o.lverts.next.next.y*p;let c=.5;o.localCOMx*=c,o.localCOMy*=c}else{o.localCOMx=0,o.localCOMy=0;let p=0,c=o.lverts.next,h=c;c=c.next;let u=c;for(c=c.next;c!=null;){let z=c;p+=u.x*(z.y-h.y);let P=z.y*u.x-z.x*u.y;o.localCOMx+=(u.x+z.x)*P,o.localCOMy+=(u.y+z.y)*P,h=u,u=z,c=c.next}c=o.lverts.next;let x=c;p+=u.x*(x.y-h.y);let y=x.y*u.x-x.x*u.y;o.localCOMx+=(u.x+x.x)*y,o.localCOMy+=(u.y+x.y)*y,h=u,u=x,c=c.next;let d=c;p+=u.x*(d.y-h.y);let _=d.y*u.x-d.x*u.y;o.localCOMx+=(u.x+d.x)*_,o.localCOMy+=(u.y+d.y)*_,p=1/(3*p);let f=p;o.localCOMx*=f,o.localCOMy*=f}}i.wrap_localCOM!=null&&(i.wrap_localCOM.zpp_inner.x=i.localCOMx,i.wrap_localCOM.zpp_inner.y=i.localCOMy)}let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot)),i.worldCOMx=i.body.posx+(i.body.axisy*i.localCOMx-i.body.axisx*i.localCOMy),i.worldCOMy=i.body.posy+(i.localCOMx*i.body.axisx+i.localCOMy*i.body.axisy)}let l=i.radius,r=i.radius;i.aabb.minx=i.worldCOMx-l,i.aabb.miny=i.worldCOMy-r,i.aabb.maxx=i.worldCOMx+l,i.aabb.maxy=i.worldCOMy+r}else{let i=e.polygon;if(i.zip_gverts&&i.body!=null){i.zip_gverts=!1,i.validate_lverts();let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot));let o=i.lverts.next,p=i.gverts.next;for(;p!=null;){let c=p,h=o;o=o.next,c.x=i.body.posx+(i.body.axisy*h.x-i.body.axisx*h.y),c.y=i.body.posy+(h.x*i.body.axisx+h.y*i.body.axisy),p=p.next}}if(i.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let l=i.gverts.next;i.aabb.minx=l.x,i.aabb.miny=l.y,i.aabb.maxx=l.x,i.aabb.maxy=l.y;let r=i.gverts.next.next;for(;r!=null;){let a=r;a.x<i.aabb.minx&&(i.aabb.minx=a.x),a.x>i.aabb.maxx&&(i.aabb.maxx=a.x),a.y<i.aabb.miny&&(i.aabb.miny=a.y),a.y>i.aabb.maxy&&(i.aabb.maxy=a.y),r=r.next}}let s;if(n.dyn==(e.body.type==1?!1:!e.body.component.sleeping)){let i=n.aabb,l=e.aabb;s=!(l.minx>=i.minx&&l.miny>=i.miny&&l.maxx<=i.maxx&&l.maxy<=i.maxy)}else s=!0;s&&(n.synced=!0,n.snext=t.syncs,t.syncs=n)}}}broadphase(e,t){}clear(){}shapesUnderPoint(e,t,n,s){return null}bodiesUnderPoint(e,t,n,s){return null}updateAABBShape(e){let t=vi._zpp,n=vi._nape;if(this.aabbShape==null){t.util.ZPP_Flags.BodyType_STATIC==null&&(t.util.ZPP_Flags.internal=!0,t.util.ZPP_Flags.BodyType_STATIC=new n.phys.BodyType,t.util.ZPP_Flags.internal=!1);let r=new n.phys.Body(t.util.ZPP_Flags.BodyType_STATIC).zpp_inner.wrap_shapes,a=this.aabbShape=new n.shape.Polygon(n.shape.Polygon.rect(e.minx,e.miny,e.maxx-e.minx,e.maxy-e.miny));r.zpp_inner.reverse_flag?r.push(a):r.unshift(a)}else{let l=this.aabbShape.zpp_inner.aabb,r=(e.maxx-e.minx)/(l.maxx-l.minx),a=(e.maxy-e.miny)/(l.maxy-l.miny);this.matrix==null&&(this.matrix=new n.geom.Mat23);let o=this.matrix;if(r!==r)throw new Error("Error: Mat23::a cannot be NaN");o.zpp_inner.a=r;let p=o.zpp_inner;p._invalidate!=null&&p._invalidate();let c=this.matrix,h=this.matrix;h.zpp_inner.c=0;let u=h.zpp_inner;u._invalidate!=null&&u._invalidate();let x=h.zpp_inner.c;if(x!==x)throw new Error("Error: Mat23::b cannot be NaN");c.zpp_inner.b=x;let y=c.zpp_inner;y._invalidate!=null&&y._invalidate();let d=this.matrix;if(a!==a)throw new Error("Error: Mat23::d cannot be NaN");d.zpp_inner.d=a;let _=d.zpp_inner;_._invalidate!=null&&_._invalidate();let f=this.matrix,z=e.minx-r*l.minx;if(z!==z)throw new Error("Error: Mat23::tx cannot be NaN");f.zpp_inner.tx=z;let P=f.zpp_inner;P._invalidate!=null&&P._invalidate();let k=this.matrix,m=e.miny-a*l.miny;if(m!==m)throw new Error("Error: Mat23::ty cannot be NaN");k.zpp_inner.ty=m;let b=k.zpp_inner;b._invalidate!=null&&b._invalidate(),this.aabbShape.transform(this.matrix)}let s=this.aabbShape.zpp_inner;if(s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let l=s.circle;if(l.zip_worldCOM&&l.body!=null){if(l.zip_worldCOM=!1,l.zip_localCOM){if(l.zip_localCOM=!1,l.type==1){let p=l.polygon;if(p.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(p.lverts.next.next==null)p.localCOMx=p.lverts.next.x,p.localCOMy=p.lverts.next.y;else if(p.lverts.next.next.next==null){p.localCOMx=p.lverts.next.x,p.localCOMy=p.lverts.next.y;let c=1;p.localCOMx+=p.lverts.next.next.x*c,p.localCOMy+=p.lverts.next.next.y*c;let h=.5;p.localCOMx*=h,p.localCOMy*=h}else{p.localCOMx=0,p.localCOMy=0;let c=0,h=p.lverts.next,u=h;h=h.next;let x=h;for(h=h.next;h!=null;){let P=h;c+=x.x*(P.y-u.y);let k=P.y*x.x-P.x*x.y;p.localCOMx+=(x.x+P.x)*k,p.localCOMy+=(x.y+P.y)*k,u=x,x=P,h=h.next}h=p.lverts.next;let y=h;c+=x.x*(y.y-u.y);let d=y.y*x.x-y.x*x.y;p.localCOMx+=(x.x+y.x)*d,p.localCOMy+=(x.y+y.y)*d,u=x,x=y,h=h.next;let _=h;c+=x.x*(_.y-u.y);let f=_.y*x.x-_.x*x.y;p.localCOMx+=(x.x+_.x)*f,p.localCOMy+=(x.y+_.y)*f,c=1/(3*c);let z=c;p.localCOMx*=z,p.localCOMy*=z}}l.wrap_localCOM!=null&&(l.wrap_localCOM.zpp_inner.x=l.localCOMx,l.wrap_localCOM.zpp_inner.y=l.localCOMy)}let o=l.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot)),l.worldCOMx=l.body.posx+(l.body.axisy*l.localCOMx-l.body.axisx*l.localCOMy),l.worldCOMy=l.body.posy+(l.localCOMx*l.body.axisx+l.localCOMy*l.body.axisy)}let r=l.radius,a=l.radius;l.aabb.minx=l.worldCOMx-r,l.aabb.miny=l.worldCOMy-a,l.aabb.maxx=l.worldCOMx+r,l.aabb.maxy=l.worldCOMy+a}else{let l=s.polygon;if(l.zip_gverts&&l.body!=null){l.zip_gverts=!1,l.validate_lverts();let o=l.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=l.lverts.next,c=l.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=l.body.posx+(l.body.axisy*u.x-l.body.axisx*u.y),h.y=l.body.posy+(u.x*l.body.axisx+u.y*l.body.axisy),c=c.next}}if(l.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let r=l.gverts.next;l.aabb.minx=r.x,l.aabb.miny=r.y,l.aabb.maxx=r.x,l.aabb.maxy=r.y;let a=l.gverts.next.next;for(;a!=null;){let o=a;o.x<l.aabb.minx&&(l.aabb.minx=o.x),o.x>l.aabb.maxx&&(l.aabb.maxx=o.x),o.y<l.aabb.miny&&(l.aabb.miny=o.y),o.y>l.aabb.maxy&&(l.aabb.maxy=o.y),a=a.next}}let i=this.aabbShape.zpp_inner.polygon;if(i.zip_gaxi&&i.body!=null){i.zip_gaxi=!1,i.validate_laxi();let l=i.body;if(l.zip_axis&&(l.zip_axis=!1,l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot)),i.zip_gverts&&i.body!=null){i.zip_gverts=!1,i.validate_lverts();let h=i.body;h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot));let u=i.lverts.next,x=i.gverts.next;for(;x!=null;){let y=x,d=u;u=u.next,y.x=i.body.posx+(i.body.axisy*d.x-i.body.axisx*d.y),y.y=i.body.posy+(d.x*i.body.axisx+d.y*i.body.axisy),x=x.next}}let r=i.edges.head,a=i.gverts.next,o=a;for(a=a.next;a!=null;){let h=a,u=r.elt;r=r.next,u.gp0=o,u.gp1=h,u.gnormx=i.body.axisy*u.lnormx-i.body.axisx*u.lnormy,u.gnormy=u.lnormx*i.body.axisx+u.lnormy*i.body.axisy,u.gprojection=i.body.posx*u.gnormx+i.body.posy*u.gnormy+u.lprojection,u.wrap_gnorm!=null&&(u.wrap_gnorm.zpp_inner.x=u.gnormx,u.wrap_gnorm.zpp_inner.y=u.gnormy),u.tp0=u.gp0.y*u.gnormx-u.gp0.x*u.gnormy,u.tp1=u.gp1.y*u.gnormx-u.gp1.x*u.gnormy,o=h,a=a.next}let p=i.gverts.next,c=r.elt;r=r.next,c.gp0=o,c.gp1=p,c.gnormx=i.body.axisy*c.lnormx-i.body.axisx*c.lnormy,c.gnormy=c.lnormx*i.body.axisx+c.lnormy*i.body.axisy,c.gprojection=i.body.posx*c.gnormx+i.body.posy*c.gnormy+c.lprojection,c.wrap_gnorm!=null&&(c.wrap_gnorm.zpp_inner.x=c.gnormx,c.wrap_gnorm.zpp_inner.y=c.gnormy),c.tp0=c.gp0.y*c.gnormx-c.gp0.x*c.gnormy,c.tp1=c.gp1.y*c.gnormx-c.gp1.x*c.gnormy}}shapesInAABB(e,t,n,s,i){return null}bodiesInAABB(e,t,n,s,i){return null}updateCircShape(e,t,n){let s=vi._zpp,i=vi._nape;if(this.circShape==null){s.util.ZPP_Flags.BodyType_STATIC==null&&(s.util.ZPP_Flags.internal=!0,s.util.ZPP_Flags.BodyType_STATIC=new i.phys.BodyType,s.util.ZPP_Flags.internal=!1);let a=new i.phys.Body(s.util.ZPP_Flags.BodyType_STATIC).zpp_inner.wrap_shapes,o=e,p=t;if(p==null&&(p=0),o==null&&(o=0),o!==o||p!==p)throw new Error("Error: Vec2 components cannot be NaN");let c;if(s.util.ZPP_PubPool.poolVec2==null?c=new i.geom.Vec2:(c=s.util.ZPP_PubPool.poolVec2,s.util.ZPP_PubPool.poolVec2=c.zpp_pool,c.zpp_pool=null,c.zpp_disp=!1,c==s.util.ZPP_PubPool.nextVec2&&(s.util.ZPP_PubPool.nextVec2=null)),c.zpp_inner==null){let u;s.geom.ZPP_Vec2.zpp_pool==null?u=new s.geom.ZPP_Vec2:(u=s.geom.ZPP_Vec2.zpp_pool,s.geom.ZPP_Vec2.zpp_pool=u.next,u.next=null),u.weak=!1,u._immutable=!1,u.x=o,u.y=p,c.zpp_inner=u,c.zpp_inner.outer=c}else{if(c!=null&&c.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=c.zpp_inner;if(u._immutable)throw new Error("Error: Vec2 is immutable");if(u._isimmutable!=null&&u._isimmutable(),o!==o||p!==p)throw new Error("Error: Vec2 components cannot be NaN");let x;if(c!=null&&c.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let y=c.zpp_inner;if(y._validate!=null&&y._validate(),c.zpp_inner.x==o){if(c!=null&&c.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let d=c.zpp_inner;d._validate!=null&&d._validate(),x=c.zpp_inner.y==p}else x=!1;if(!x){c.zpp_inner.x=o,c.zpp_inner.y=p;let d=c.zpp_inner;d._invalidate!=null&&d._invalidate(d)}}c.zpp_inner.weak=!1;let h=this.circShape=new i.shape.Circle(n,c);a.zpp_inner.reverse_flag?a.push(h):a.unshift(h)}else{let r=this.circShape.zpp_inner.circle,a=n/r.radius;this.matrix==null&&(this.matrix=new i.geom.Mat23);let o=this.matrix,p=this.matrix;if(a!==a)throw new Error("Error: Mat23::d cannot be NaN");p.zpp_inner.d=a;let c=p.zpp_inner;c._invalidate!=null&&c._invalidate();let h=p.zpp_inner.d;if(h!==h)throw new Error("Error: Mat23::a cannot be NaN");o.zpp_inner.a=h;let u=o.zpp_inner;u._invalidate!=null&&u._invalidate();let x=this.matrix,y=this.matrix;y.zpp_inner.c=0;let d=y.zpp_inner;d._invalidate!=null&&d._invalidate();let _=y.zpp_inner.c;if(_!==_)throw new Error("Error: Mat23::b cannot be NaN");x.zpp_inner.b=_;let f=x.zpp_inner;f._invalidate!=null&&f._invalidate();let z=this.matrix,P=e-a*r.localCOMx;if(P!==P)throw new Error("Error: Mat23::tx cannot be NaN");z.zpp_inner.tx=P;let k=z.zpp_inner;k._invalidate!=null&&k._invalidate();let m=this.matrix,b=t-a*r.localCOMy;if(b!==b)throw new Error("Error: Mat23::ty cannot be NaN");m.zpp_inner.ty=b;let M=m.zpp_inner;M._invalidate!=null&&M._invalidate(),this.circShape.transform(this.matrix)}let l=this.circShape.zpp_inner;if(l.zip_aabb&&l.body!=null)if(l.zip_aabb=!1,l.type==0){let r=l.circle;if(r.zip_worldCOM&&r.body!=null){if(r.zip_worldCOM=!1,r.zip_localCOM){if(r.zip_localCOM=!1,r.type==1){let c=r.polygon;if(c.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(c.lverts.next.next==null)c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;else if(c.lverts.next.next.next==null){c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;let h=1;c.localCOMx+=c.lverts.next.next.x*h,c.localCOMy+=c.lverts.next.next.y*h;let u=.5;c.localCOMx*=u,c.localCOMy*=u}else{c.localCOMx=0,c.localCOMy=0;let h=0,u=c.lverts.next,x=u;u=u.next;let y=u;for(u=u.next;u!=null;){let k=u;h+=y.x*(k.y-x.y);let m=k.y*y.x-k.x*y.y;c.localCOMx+=(y.x+k.x)*m,c.localCOMy+=(y.y+k.y)*m,x=y,y=k,u=u.next}u=c.lverts.next;let d=u;h+=y.x*(d.y-x.y);let _=d.y*y.x-d.x*y.y;c.localCOMx+=(y.x+d.x)*_,c.localCOMy+=(y.y+d.y)*_,x=y,y=d,u=u.next;let f=u;h+=y.x*(f.y-x.y);let z=f.y*y.x-f.x*y.y;c.localCOMx+=(y.x+f.x)*z,c.localCOMy+=(y.y+f.y)*z,h=1/(3*h);let P=h;c.localCOMx*=P,c.localCOMy*=P}}r.wrap_localCOM!=null&&(r.wrap_localCOM.zpp_inner.x=r.localCOMx,r.wrap_localCOM.zpp_inner.y=r.localCOMy)}let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot)),r.worldCOMx=r.body.posx+(r.body.axisy*r.localCOMx-r.body.axisx*r.localCOMy),r.worldCOMy=r.body.posy+(r.localCOMx*r.body.axisx+r.localCOMy*r.body.axisy)}let a=r.radius,o=r.radius;r.aabb.minx=r.worldCOMx-a,r.aabb.miny=r.worldCOMy-o,r.aabb.maxx=r.worldCOMx+a,r.aabb.maxy=r.worldCOMy+o}else{let r=l.polygon;if(r.zip_gverts&&r.body!=null){r.zip_gverts=!1,r.validate_lverts();let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot));let c=r.lverts.next,h=r.gverts.next;for(;h!=null;){let u=h,x=c;c=c.next,u.x=r.body.posx+(r.body.axisy*x.x-r.body.axisx*x.y),u.y=r.body.posy+(x.x*r.body.axisx+x.y*r.body.axisy),h=h.next}}if(r.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let a=r.gverts.next;r.aabb.minx=a.x,r.aabb.miny=a.y,r.aabb.maxx=a.x,r.aabb.maxy=a.y;let o=r.gverts.next.next;for(;o!=null;){let p=o;p.x<r.aabb.minx&&(r.aabb.minx=p.x),p.x>r.aabb.maxx&&(r.aabb.maxx=p.x),p.y<r.aabb.miny&&(r.aabb.miny=p.y),p.y>r.aabb.maxy&&(r.aabb.maxy=p.y),o=o.next}}}shapesInCircle(e,t,n,s,i,l){return null}bodiesInCircle(e,t,n,s,i,l){return null}validateShape(e){if(e.type==1){let t=e.polygon;if(t.zip_gaxi&&t.body!=null){t.zip_gaxi=!1,t.validate_laxi();let n=t.body;if(n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let o=t.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=t.lverts.next,c=t.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=t.body.posx+(t.body.axisy*u.x-t.body.axisx*u.y),h.y=t.body.posy+(u.x*t.body.axisx+u.y*t.body.axisy),c=c.next}}let s=t.edges.head,i=t.gverts.next,l=i;for(i=i.next;i!=null;){let o=i,p=s.elt;s=s.next,p.gp0=l,p.gp1=o,p.gnormx=t.body.axisy*p.lnormx-t.body.axisx*p.lnormy,p.gnormy=p.lnormx*t.body.axisx+p.lnormy*t.body.axisy,p.gprojection=t.body.posx*p.gnormx+t.body.posy*p.gnormy+p.lprojection,p.wrap_gnorm!=null&&(p.wrap_gnorm.zpp_inner.x=p.gnormx,p.wrap_gnorm.zpp_inner.y=p.gnormy),p.tp0=p.gp0.y*p.gnormx-p.gp0.x*p.gnormy,p.tp1=p.gp1.y*p.gnormx-p.gp1.x*p.gnormy,l=o,i=i.next}let r=t.gverts.next,a=s.elt;s=s.next,a.gp0=l,a.gp1=r,a.gnormx=t.body.axisy*a.lnormx-t.body.axisx*a.lnormy,a.gnormy=a.lnormx*t.body.axisx+a.lnormy*t.body.axisy,a.gprojection=t.body.posx*a.gnormx+t.body.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy}}if(e.zip_aabb&&e.body!=null)if(e.zip_aabb=!1,e.type==0){let t=e.circle;if(t.zip_worldCOM&&t.body!=null){if(t.zip_worldCOM=!1,t.zip_localCOM){if(t.zip_localCOM=!1,t.type==1){let l=t.polygon;if(l.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(l.lverts.next.next==null)l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;else if(l.lverts.next.next.next==null){l.localCOMx=l.lverts.next.x,l.localCOMy=l.lverts.next.y;let r=1;l.localCOMx+=l.lverts.next.next.x*r,l.localCOMy+=l.lverts.next.next.y*r;let a=.5;l.localCOMx*=a,l.localCOMy*=a}else{l.localCOMx=0,l.localCOMy=0;let r=0,a=l.lverts.next,o=a;a=a.next;let p=a;for(a=a.next;a!=null;){let d=a;r+=p.x*(d.y-o.y);let _=d.y*p.x-d.x*p.y;l.localCOMx+=(p.x+d.x)*_,l.localCOMy+=(p.y+d.y)*_,o=p,p=d,a=a.next}a=l.lverts.next;let c=a;r+=p.x*(c.y-o.y);let h=c.y*p.x-c.x*p.y;l.localCOMx+=(p.x+c.x)*h,l.localCOMy+=(p.y+c.y)*h,o=p,p=c,a=a.next;let u=a;r+=p.x*(u.y-o.y);let x=u.y*p.x-u.x*p.y;l.localCOMx+=(p.x+u.x)*x,l.localCOMy+=(p.y+u.y)*x,r=1/(3*r);let y=r;l.localCOMx*=y,l.localCOMy*=y}}t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy)}let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}let n=t.radius,s=t.radius;t.aabb.minx=t.worldCOMx-n,t.aabb.miny=t.worldCOMy-s,t.aabb.maxx=t.worldCOMx+n,t.aabb.maxy=t.worldCOMy+s}else{let t=e.polygon;if(t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let i=t.body;i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot));let l=t.lverts.next,r=t.gverts.next;for(;r!=null;){let a=r,o=l;l=l.next,a.x=t.body.posx+(t.body.axisy*o.x-t.body.axisx*o.y),a.y=t.body.posy+(o.x*t.body.axisx+o.y*t.body.axisy),r=r.next}}if(t.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let n=t.gverts.next;t.aabb.minx=n.x,t.aabb.miny=n.y,t.aabb.maxx=n.x,t.aabb.maxy=n.y;let s=t.gverts.next.next;for(;s!=null;){let i=s;i.x<t.aabb.minx&&(t.aabb.minx=i.x),i.x>t.aabb.maxx&&(t.aabb.maxx=i.x),i.y<t.aabb.miny&&(t.aabb.miny=i.y),i.y>t.aabb.maxy&&(t.aabb.maxy=i.y),s=s.next}}if(e.zip_worldCOM&&e.body!=null){if(e.zip_worldCOM=!1,e.zip_localCOM){if(e.zip_localCOM=!1,e.type==1){let n=e.polygon;if(n.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(n.lverts.next.next==null)n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;else if(n.lverts.next.next.next==null){n.localCOMx=n.lverts.next.x,n.localCOMy=n.lverts.next.y;let s=1;n.localCOMx+=n.lverts.next.next.x*s,n.localCOMy+=n.lverts.next.next.y*s;let i=.5;n.localCOMx*=i,n.localCOMy*=i}else{n.localCOMx=0,n.localCOMy=0;let s=0,i=n.lverts.next,l=i;i=i.next;let r=i;for(i=i.next;i!=null;){let u=i;s+=r.x*(u.y-l.y);let x=u.y*r.x-u.x*r.y;n.localCOMx+=(r.x+u.x)*x,n.localCOMy+=(r.y+u.y)*x,l=r,r=u,i=i.next}i=n.lverts.next;let a=i;s+=r.x*(a.y-l.y);let o=a.y*r.x-a.x*r.y;n.localCOMx+=(r.x+a.x)*o,n.localCOMy+=(r.y+a.y)*o,l=r,r=a,i=i.next;let p=i;s+=r.x*(p.y-l.y);let c=p.y*r.x-p.x*r.y;n.localCOMx+=(r.x+p.x)*c,n.localCOMy+=(r.y+p.y)*c,s=1/(3*s);let h=s;n.localCOMx*=h,n.localCOMy*=h}}e.wrap_localCOM!=null&&(e.wrap_localCOM.zpp_inner.x=e.localCOMx,e.wrap_localCOM.zpp_inner.y=e.localCOMy)}let t=e.body;t.zip_axis&&(t.zip_axis=!1,t.axisx=Math.sin(t.rot),t.axisy=Math.cos(t.rot)),e.worldCOMx=e.body.posx+(e.body.axisy*e.localCOMx-e.body.axisx*e.localCOMy),e.worldCOMy=e.body.posy+(e.localCOMx*e.body.axisx+e.localCOMy*e.body.axisy)}}shapesInShape(e,t,n,s){return null}bodiesInShape(e,t,n,s){return null}rayCast(e,t,n){return null}rayMultiCast(e,t,n,s){return null}};vi._zpp=null,vi._nape=null;var ei=vi;var Ae=class{constructor(){this.aabb=null;this.shape=null;this.dyn=!1;this.parent=null;this.child1=null;this.child2=null;this.height=-1;this.rayt=0;this.next=null;this.mnext=null;this.moved=!1;this.snext=null;this.synced=!1;this.first_sync=!1}alloc(){fe.zpp_pool==null?this.aabb=new fe:(this.aabb=fe.zpp_pool,fe.zpp_pool=this.aabb.next,this.aabb.next=null),this.moved=!1,this.synced=!1,this.first_sync=!1}free(){this.height=-1;let e=this.aabb;e.outer!=null&&(e.outer.zpp_inner=null,e.outer=null),e.wrap_min=e.wrap_max=null,e._invalidate=null,e._validate=null,e.next=fe.zpp_pool,fe.zpp_pool=e,this.child1=this.child2=this.parent=null,this.next=null,this.snext=null,this.mnext=null}isLeaf(){return this.child1==null}};Ae.zpp_pool=null;var tt=class{constructor(){this.n1=null;this.n2=null;this.first=!1;this.sleeping=!1;this.id=0;this.di=0;this.arb=null;this.next=null}alloc(){}free(){this.n1=this.n2=null,this.sleeping=!1}};tt.zpp_pool=null;var Zt=class Zt{constructor(){this.root=null}static _initStatics(){Zt.tmpaabb=new fe}clear(){if(this.root==null)return;let e=null;for(this.root.next=e,e=this.root;e!=null;){let t=e;e=t.next,t.next=null;let n=t;n.child1==null?(n.shape.node=null,n.shape.removedFromSpace(),n.shape=null):(n.child1!=null&&(n.child1.next=e,e=n.child1),n.child2!=null&&(n.child2.next=e,e=n.child2));let s=n;s.height=-1;let i=s.aabb;i.outer!=null&&(i.outer.zpp_inner=null,i.outer=null),i.wrap_min=i.wrap_max=null,i._invalidate=null,i._validate=null,i.next=fe.zpp_pool,fe.zpp_pool=i,s.child1=s.child2=s.parent=null,s.next=null,s.snext=null,s.mnext=null,s.next=Ae.zpp_pool,Ae.zpp_pool=s}this.root=null}insertLeaf(e){if(this.root==null)this.root=e,this.root.parent=null;else{let t=e.aabb,n=this.root;for(;n.child1!=null;){let o=n.child1,p=n.child2,c=n.aabb,h=(c.maxx-c.minx+(c.maxy-c.miny))*2,u=Zt.tmpaabb,x=n.aabb;u.minx=x.minx<t.minx?x.minx:t.minx,u.miny=x.miny<t.miny?x.miny:t.miny,u.maxx=x.maxx>t.maxx?x.maxx:t.maxx,u.maxy=x.maxy>t.maxy?x.maxy:t.maxy;let y=Zt.tmpaabb,d=(y.maxx-y.minx+(y.maxy-y.miny))*2,_=2*d,f=2*(d-h),z=Zt.tmpaabb,P=o.aabb;z.minx=t.minx<P.minx?t.minx:P.minx,z.miny=t.miny<P.miny?t.miny:P.miny,z.maxx=t.maxx>P.maxx?t.maxx:P.maxx,z.maxy=t.maxy>P.maxy?t.maxy:P.maxy;let k;if(o.child1==null){let v=Zt.tmpaabb;k=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=o.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;k=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}let m=Zt.tmpaabb,b=p.aabb;m.minx=t.minx<b.minx?t.minx:b.minx,m.miny=t.miny<b.miny?t.miny:b.miny,m.maxx=t.maxx>b.maxx?t.maxx:b.maxx,m.maxy=t.maxy>b.maxy?t.maxy:b.maxy;let M;if(p.child1==null){let v=Zt.tmpaabb;M=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=p.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;M=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}if(_<k&&_<M)break;n=k<M?o:p}let s=n,i=s.parent,l;Ae.zpp_pool==null?l=new Ae:(l=Ae.zpp_pool,Ae.zpp_pool=l.next,l.next=null),fe.zpp_pool==null?l.aabb=new fe:(l.aabb=fe.zpp_pool,fe.zpp_pool=l.aabb.next,l.aabb.next=null),l.moved=!1,l.synced=!1,l.first_sync=!1,l.parent=i;let r=l.aabb,a=s.aabb;for(r.minx=t.minx<a.minx?t.minx:a.minx,r.miny=t.miny<a.miny?t.miny:a.miny,r.maxx=t.maxx>a.maxx?t.maxx:a.maxx,r.maxy=t.maxy>a.maxy?t.maxy:a.maxy,l.height=s.height+1,i!=null?(i.child1==s?i.child1=l:i.child2=l,l.child1=s,l.child2=e,s.parent=l,e.parent=l):(l.child1=s,l.child2=e,s.parent=l,e.parent=l,this.root=l),n=e.parent;n!=null;){if(n.child1==null||n.height<2)n=n;else{let d=n.child1,_=n.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=n,_.parent=n.parent,n.parent=_,_.parent!=null?_.parent.child1==n?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,n.child2=P,P.parent=n;let k=n.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=n.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;n.height=1+(O>E?O:E);let C=n.height,N=z.height;_.height=1+(C>N?C:N)}else{_.child2=P,n.child2=z,z.parent=n;let k=n.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=n.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;n.height=1+(O>E?O:E);let C=n.height,N=P.height;_.height=1+(C>N?C:N)}n=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=n,d.parent=n.parent,n.parent=d,d.parent!=null?d.parent.child1==n?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,n.child1=P,P.parent=n;let k=n.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=n.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;n.height=1+(O>E?O:E);let C=n.height,N=z.height;d.height=1+(C>N?C:N)}else{d.child2=P,n.child1=z,z.parent=n;let k=n.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=n.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;n.height=1+(O>E?O:E);let C=n.height,N=P.height;d.height=1+(C>N?C:N)}n=d}else n=n}let o=n.child1,p=n.child2,c=o.height,h=p.height;n.height=1+(c>h?c:h);let u=n.aabb,x=o.aabb,y=p.aabb;u.minx=x.minx<y.minx?x.minx:y.minx,u.miny=x.miny<y.miny?x.miny:y.miny,u.maxx=x.maxx>y.maxx?x.maxx:y.maxx,u.maxy=x.maxy>y.maxy?x.maxy:y.maxy,n=n.parent}}}inlined_insertLeaf(e){if(this.root==null)this.root=e,this.root.parent=null;else{let t=e.aabb,n=this.root;for(;n.child1!=null;){let o=n.child1,p=n.child2,c=n.aabb,h=(c.maxx-c.minx+(c.maxy-c.miny))*2,u=Zt.tmpaabb,x=n.aabb;u.minx=x.minx<t.minx?x.minx:t.minx,u.miny=x.miny<t.miny?x.miny:t.miny,u.maxx=x.maxx>t.maxx?x.maxx:t.maxx,u.maxy=x.maxy>t.maxy?x.maxy:t.maxy;let y=Zt.tmpaabb,d=(y.maxx-y.minx+(y.maxy-y.miny))*2,_=2*d,f=2*(d-h),z=Zt.tmpaabb,P=o.aabb;z.minx=t.minx<P.minx?t.minx:P.minx,z.miny=t.miny<P.miny?t.miny:P.miny,z.maxx=t.maxx>P.maxx?t.maxx:P.maxx,z.maxy=t.maxy>P.maxy?t.maxy:P.maxy;let k;if(o.child1==null){let v=Zt.tmpaabb;k=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=o.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;k=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}let m=Zt.tmpaabb,b=p.aabb;m.minx=t.minx<b.minx?t.minx:b.minx,m.miny=t.miny<b.miny?t.miny:b.miny,m.maxx=t.maxx>b.maxx?t.maxx:b.maxx,m.maxy=t.maxy>b.maxy?t.maxy:b.maxy;let M;if(p.child1==null){let v=Zt.tmpaabb;M=(v.maxx-v.minx+(v.maxy-v.miny))*2+f}else{let v=p.aabb,w=(v.maxx-v.minx+(v.maxy-v.miny))*2,O=Zt.tmpaabb;M=(O.maxx-O.minx+(O.maxy-O.miny))*2-w+f}if(_<k&&_<M)break;n=k<M?o:p}let s=n,i=s.parent,l;Ae.zpp_pool==null?l=new Ae:(l=Ae.zpp_pool,Ae.zpp_pool=l.next,l.next=null),fe.zpp_pool==null?l.aabb=new fe:(l.aabb=fe.zpp_pool,fe.zpp_pool=l.aabb.next,l.aabb.next=null),l.moved=!1,l.synced=!1,l.first_sync=!1,l.parent=i;let r=l.aabb,a=s.aabb;for(r.minx=t.minx<a.minx?t.minx:a.minx,r.miny=t.miny<a.miny?t.miny:a.miny,r.maxx=t.maxx>a.maxx?t.maxx:a.maxx,r.maxy=t.maxy>a.maxy?t.maxy:a.maxy,l.height=s.height+1,i!=null?(i.child1==s?i.child1=l:i.child2=l,l.child1=s,l.child2=e,s.parent=l,e.parent=l):(l.child1=s,l.child2=e,s.parent=l,e.parent=l,this.root=l),n=e.parent;n!=null;){if(n.child1==null||n.height<2)n=n;else{let d=n.child1,_=n.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=n,_.parent=n.parent,n.parent=_,_.parent!=null?_.parent.child1==n?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,n.child2=P,P.parent=n;let k=n.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=n.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;n.height=1+(O>E?O:E);let C=n.height,N=z.height;_.height=1+(C>N?C:N)}else{_.child2=P,n.child2=z,z.parent=n;let k=n.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=n.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;n.height=1+(O>E?O:E);let C=n.height,N=P.height;_.height=1+(C>N?C:N)}n=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=n,d.parent=n.parent,n.parent=d,d.parent!=null?d.parent.child1==n?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,n.child1=P,P.parent=n;let k=n.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=n.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;n.height=1+(O>E?O:E);let C=n.height,N=z.height;d.height=1+(C>N?C:N)}else{d.child2=P,n.child1=z,z.parent=n;let k=n.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=n.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;n.height=1+(O>E?O:E);let C=n.height,N=P.height;d.height=1+(C>N?C:N)}n=d}else n=n}let o=n.child1,p=n.child2,c=o.height,h=p.height;n.height=1+(c>h?c:h);let u=n.aabb,x=o.aabb,y=p.aabb;u.minx=x.minx<y.minx?x.minx:y.minx,u.miny=x.miny<y.miny?x.miny:y.miny,u.maxx=x.maxx>y.maxx?x.maxx:y.maxx,u.maxy=x.maxy>y.maxy?x.maxy:y.maxy,n=n.parent}}}removeLeaf(e){if(e==this.root)this.root=null;else{let t=e.parent,n=t.parent,s=t.child1==e?t.child2:t.child1;if(n!=null){n.child1==t?n.child1=s:n.child2=s,s.parent=n;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i;let r=n;for(;r!=null;){if(r.child1==null||r.height<2)r=r;else{let d=r.child1,_=r.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=r,_.parent=r.parent,r.parent=_,_.parent!=null?_.parent.child1==r?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,r.child2=P,P.parent=r;let k=r.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=r.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;r.height=1+(O>E?O:E);let C=r.height,N=z.height;_.height=1+(C>N?C:N)}else{_.child2=P,r.child2=z,z.parent=r;let k=r.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=r.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;r.height=1+(O>E?O:E);let C=r.height,N=P.height;_.height=1+(C>N?C:N)}r=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=r,d.parent=r.parent,r.parent=d,d.parent!=null?d.parent.child1==r?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,r.child1=P,P.parent=r;let k=r.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=r.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;r.height=1+(O>E?O:E);let C=r.height,N=z.height;d.height=1+(C>N?C:N)}else{d.child2=P,r.child1=z,z.parent=r;let k=r.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=r.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;r.height=1+(O>E?O:E);let C=r.height,N=P.height;d.height=1+(C>N?C:N)}r=d}else r=r}let a=r,o=a.child1,p=a.child2,c=a.aabb,h=o.aabb,u=p.aabb;c.minx=h.minx<u.minx?h.minx:u.minx,c.miny=h.miny<u.miny?h.miny:u.miny,c.maxx=h.maxx>u.maxx?h.maxx:u.maxx,c.maxy=h.maxy>u.maxy?h.maxy:u.maxy;let x=o.height,y=p.height;a.height=1+(x>y?x:y),r=a.parent}}else{this.root=s,s.parent=null;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i}}}inlined_removeLeaf(e){if(e==this.root){this.root=null;return}else{let t=e.parent,n=t.parent,s=t.child1==e?t.child2:t.child1;if(n!=null){n.child1==t?n.child1=s:n.child2=s,s.parent=n;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i;let r=n;for(;r!=null;){if(r.child1==null||r.height<2)r=r;else{let d=r.child1,_=r.child2,f=_.height-d.height;if(f>1){let z=_.child1,P=_.child2;if(_.child1=r,_.parent=r.parent,r.parent=_,_.parent!=null?_.parent.child1==r?_.parent.child1=_:_.parent.child2=_:this.root=_,z.height>P.height){_.child2=z,r.child2=P,P.parent=r;let k=r.aabb,m=d.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=r.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=P.height;r.height=1+(O>E?O:E);let C=r.height,N=z.height;_.height=1+(C>N?C:N)}else{_.child2=P,r.child2=z,z.parent=r;let k=r.aabb,m=d.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=_.aabb,v=r.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=d.height,E=z.height;r.height=1+(O>E?O:E);let C=r.height,N=P.height;_.height=1+(C>N?C:N)}r=_}else if(f<-1){let z=d.child1,P=d.child2;if(d.child1=r,d.parent=r.parent,r.parent=d,d.parent!=null?d.parent.child1==r?d.parent.child1=d:d.parent.child2=d:this.root=d,z.height>P.height){d.child2=z,r.child1=P,P.parent=r;let k=r.aabb,m=_.aabb,b=P.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=r.aabb,w=z.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=P.height;r.height=1+(O>E?O:E);let C=r.height,N=z.height;d.height=1+(C>N?C:N)}else{d.child2=P,r.child1=z,z.parent=r;let k=r.aabb,m=_.aabb,b=z.aabb;k.minx=m.minx<b.minx?m.minx:b.minx,k.miny=m.miny<b.miny?m.miny:b.miny,k.maxx=m.maxx>b.maxx?m.maxx:b.maxx,k.maxy=m.maxy>b.maxy?m.maxy:b.maxy;let M=d.aabb,v=r.aabb,w=P.aabb;M.minx=v.minx<w.minx?v.minx:w.minx,M.miny=v.miny<w.miny?v.miny:w.miny,M.maxx=v.maxx>w.maxx?v.maxx:w.maxx,M.maxy=v.maxy>w.maxy?v.maxy:w.maxy;let O=_.height,E=z.height;r.height=1+(O>E?O:E);let C=r.height,N=P.height;d.height=1+(C>N?C:N)}r=d}else r=r}let a=r,o=a.child1,p=a.child2,c=a.aabb,h=o.aabb,u=p.aabb;c.minx=h.minx<u.minx?h.minx:u.minx,c.miny=h.miny<u.miny?h.miny:u.miny,c.maxx=h.maxx>u.maxx?h.maxx:u.maxx,c.maxy=h.maxy>u.maxy?h.maxy:u.maxy;let x=o.height,y=p.height;a.height=1+(x>y?x:y),r=a.parent}}else{this.root=s,s.parent=null;let i=t;i.height=-1;let l=i.aabb;l.outer!=null&&(l.outer.zpp_inner=null,l.outer=null),l.wrap_min=l.wrap_max=null,l._invalidate=null,l._validate=null,l.next=fe.zpp_pool,fe.zpp_pool=l,i.child1=i.child2=i.parent=null,i.next=null,i.snext=null,i.mnext=null,i.next=Ae.zpp_pool,Ae.zpp_pool=i}}}balance(e){if(e.child1==null||e.height<2)return e;{let t=e.child1,n=e.child2,s=n.height-t.height;if(s>1){let i=n.child1,l=n.child2;if(n.child1=e,n.parent=e.parent,e.parent=n,n.parent!=null?n.parent.child1==e?n.parent.child1=n:n.parent.child2=n:this.root=n,i.height>l.height){n.child2=i,e.child2=l,l.parent=e;let r=e.aabb,a=t.aabb,o=l.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=n.aabb,c=e.aabb,h=i.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=t.height,x=l.height;e.height=1+(u>x?u:x);let y=e.height,d=i.height;n.height=1+(y>d?y:d)}else{n.child2=l,e.child2=i,i.parent=e;let r=e.aabb,a=t.aabb,o=i.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=n.aabb,c=e.aabb,h=l.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=t.height,x=i.height;e.height=1+(u>x?u:x);let y=e.height,d=l.height;n.height=1+(y>d?y:d)}return n}else if(s<-1){let i=t.child1,l=t.child2;if(t.child1=e,t.parent=e.parent,e.parent=t,t.parent!=null?t.parent.child1==e?t.parent.child1=t:t.parent.child2=t:this.root=t,i.height>l.height){t.child2=i,e.child1=l,l.parent=e;let r=e.aabb,a=n.aabb,o=l.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=t.aabb,c=e.aabb,h=i.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=n.height,x=l.height;e.height=1+(u>x?u:x);let y=e.height,d=i.height;t.height=1+(y>d?y:d)}else{t.child2=l,e.child1=i,i.parent=e;let r=e.aabb,a=n.aabb,o=i.aabb;r.minx=a.minx<o.minx?a.minx:o.minx,r.miny=a.miny<o.miny?a.miny:o.miny,r.maxx=a.maxx>o.maxx?a.maxx:o.maxx,r.maxy=a.maxy>o.maxy?a.maxy:o.maxy;let p=t.aabb,c=e.aabb,h=l.aabb;p.minx=c.minx<h.minx?c.minx:h.minx,p.miny=c.miny<h.miny?c.miny:h.miny,p.maxx=c.maxx>h.maxx?c.maxx:h.maxx,p.maxy=c.maxy>h.maxy?c.maxy:h.maxy;let u=n.height,x=i.height;e.height=1+(u>x?u:x);let y=e.height,d=l.height;t.height=1+(y>d?y:d)}return t}else return e}}};Zt.tmpaabb=null;var $e=Zt;var ze=class ze extends ei{constructor(t){super();this.pairs=null;this.syncs=null;this.moves=null;this.treeStack=null;this.treeStack2=null;this.failed=null;this.openlist=null;this.space=t,this.is_sweep=!1,this.dynab=this,this.stree=new $e,this.dtree=new $e}dyn(t){return t.body.type==1?!1:!t.body.component.sleeping}__insert(t){let n;Ae.zpp_pool==null?n=new Ae:(n=Ae.zpp_pool,Ae.zpp_pool=n.next,n.next=null),fe.zpp_pool==null?n.aabb=new fe:(n.aabb=fe.zpp_pool,fe.zpp_pool=n.aabb.next,n.aabb.next=null),n.moved=!1,n.synced=!1,n.first_sync=!1,n.shape=t,t.node=n,n.synced=!0,n.first_sync=!0,n.snext=this.syncs,this.syncs=n}__remove(t){let n=t.node;if(n.first_sync||(n.dyn?this.dtree.removeLeaf(n):this.stree.removeLeaf(n)),t.node=null,n.synced){let a=null,o=this.syncs;for(;o!=null&&o!=n;)a=o,o=o.snext;a==null?this.syncs=o.snext:a.snext=o.snext,o.snext=null,n.synced=!1}if(n.moved){let a=null,o=this.moves;for(;o!=null&&o!=n;)a=o,o=o.mnext;a==null?this.moves=o.mnext:a.mnext=o.mnext,o.mnext=null,n.moved=!1}let s=null,i=this.pairs;for(;i!=null;){let a=i.next;if(i.n1==n||i.n2==n){s==null?this.pairs=a:s.next=a,i.arb!=null&&(i.arb.pair=null),i.arb=null,i.n1.shape.pairs.remove(i),i.n2.shape.pairs.remove(i);let o=i;o.n1=o.n2=null,o.sleeping=!1,o.next=tt.zpp_pool,tt.zpp_pool=o,i=a;continue}s=i,i=a}for(;t.pairs.head!=null;){let a=t.pairs.pop_unsafe();a.n1==n?a.n2.shape.pairs.remove(a):a.n1.shape.pairs.remove(a),a.arb!=null&&(a.arb.pair=null),a.arb=null;let o=a;o.n1=o.n2=null,o.sleeping=!1,o.next=tt.zpp_pool,tt.zpp_pool=o}let l=n;l.height=-1;let r=l.aabb;r.outer!=null&&(r.outer.zpp_inner=null,r.outer=null),r.wrap_min=r.wrap_max=null,r._invalidate=null,r._validate=null,r.next=fe.zpp_pool,fe.zpp_pool=r,l.child1=l.child2=l.parent=null,l.next=null,l.snext=null,l.mnext=null,l.next=Ae.zpp_pool,Ae.zpp_pool=l}__sync(t){let n=t.node;if(!n.synced){if(!this.space.continuous&&t.zip_aabb&&t.body!=null)if(t.zip_aabb=!1,t.type==0){let i=t.circle;if(i.zip_worldCOM&&i.body!=null){if(i.zip_worldCOM=!1,i.zip_localCOM){if(i.zip_localCOM=!1,i.type==1){let o=i.polygon;if(o.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(o.lverts.next.next==null)o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;else if(o.lverts.next.next.next==null){o.localCOMx=o.lverts.next.x,o.localCOMy=o.lverts.next.y;let p=1;o.localCOMx+=o.lverts.next.next.x*p,o.localCOMy+=o.lverts.next.next.y*p;let c=.5;o.localCOMx*=c,o.localCOMy*=c}else{o.localCOMx=0,o.localCOMy=0;let p=0,c=o.lverts.next,h=c;c=c.next;let u=c;for(c=c.next;c!=null;){let z=c;p+=u.x*(z.y-h.y);let P=z.y*u.x-z.x*u.y;o.localCOMx+=(u.x+z.x)*P,o.localCOMy+=(u.y+z.y)*P,h=u,u=z,c=c.next}c=o.lverts.next;let x=c;p+=u.x*(x.y-h.y);let y=x.y*u.x-x.x*u.y;o.localCOMx+=(u.x+x.x)*y,o.localCOMy+=(u.y+x.y)*y,h=u,u=x,c=c.next;let d=c;p+=u.x*(d.y-h.y);let _=d.y*u.x-d.x*u.y;o.localCOMx+=(u.x+d.x)*_,o.localCOMy+=(u.y+d.y)*_,p=1/(3*p);let f=p;o.localCOMx*=f,o.localCOMy*=f}}i.wrap_localCOM!=null&&(i.wrap_localCOM.zpp_inner.x=i.localCOMx,i.wrap_localCOM.zpp_inner.y=i.localCOMy)}let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot)),i.worldCOMx=i.body.posx+(i.body.axisy*i.localCOMx-i.body.axisx*i.localCOMy),i.worldCOMy=i.body.posy+(i.localCOMx*i.body.axisx+i.localCOMy*i.body.axisy)}let l=i.radius,r=i.radius;i.aabb.minx=i.worldCOMx-l,i.aabb.miny=i.worldCOMy-r,i.aabb.maxx=i.worldCOMx+l,i.aabb.maxy=i.worldCOMy+r}else{let i=t.polygon;if(i.zip_gverts&&i.body!=null){i.zip_gverts=!1,i.validate_lverts();let a=i.body;a.zip_axis&&(a.zip_axis=!1,a.axisx=Math.sin(a.rot),a.axisy=Math.cos(a.rot));let o=i.lverts.next,p=i.gverts.next;for(;p!=null;){let c=p,h=o;o=o.next,c.x=i.body.posx+(i.body.axisy*h.x-i.body.axisx*h.y),c.y=i.body.posy+(h.x*i.body.axisx+h.y*i.body.axisy),p=p.next}}if(i.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let l=i.gverts.next;i.aabb.minx=l.x,i.aabb.miny=l.y,i.aabb.maxx=l.x,i.aabb.maxy=l.y;let r=i.gverts.next.next;for(;r!=null;){let a=r;a.x<i.aabb.minx&&(i.aabb.minx=a.x),a.x>i.aabb.maxx&&(i.aabb.maxx=a.x),a.y<i.aabb.miny&&(i.aabb.miny=a.y),a.y>i.aabb.maxy&&(i.aabb.maxy=a.y),r=r.next}}let s;if(n.dyn==(t.body.type==1?!1:!t.body.component.sleeping)){let i=n.aabb,l=t.aabb;s=!(l.minx>=i.minx&&l.miny>=i.miny&&l.maxx<=i.maxx&&l.maxy<=i.maxy)}else s=!0;s&&(n.synced=!0,n.snext=this.syncs,this.syncs=n)}}sync_broadphase(){if(this.space.validation(),this.syncs!=null)if(this.moves==null){let t=this.syncs;for(;t!=null;){let s=t.shape;if(t.first_sync)t.first_sync=!1;else{let a=t.dyn?this.dtree:this.stree;if(t==a.root)a.root=null;else{let o=t.parent,p=o.parent,c=o.child1==t?o.child2:o.child1;if(p!=null){p.child1==o?p.child1=c:p.child2=c,c.parent=p;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h;let x=p;for(;x!=null;){if(x.child1==null||x.height<2)x=x;else{let m=x.child1,b=x.child2,M=b.height-m.height;if(M>1){let v=b.child1,w=b.child2;if(b.child1=x,b.parent=x.parent,x.parent=b,b.parent!=null?b.parent.child1==x?b.parent.child1=b:b.parent.child2=b:a.root=b,v.height>w.height){b.child2=v,x.child2=w,w.parent=x;let O=x.aabb,E=m.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,x.child2=v,v.parent=x;let O=x.aabb,E=m.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;b.height=1+(B>G?B:G)}x=b}else if(M<-1){let v=m.child1,w=m.child2;if(m.child1=x,m.parent=x.parent,x.parent=m,m.parent!=null?m.parent.child1==x?m.parent.child1=m:m.parent.child2=m:a.root=m,v.height>w.height){m.child2=v,x.child1=w,w.parent=x;let O=x.aabb,E=b.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,x.child1=v,v.parent=x;let O=x.aabb,E=b.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;m.height=1+(B>G?B:G)}x=m}else x=x}let y=x.child1,d=x.child2,_=x.aabb,f=y.aabb,z=d.aabb;_.minx=f.minx<z.minx?f.minx:z.minx,_.miny=f.miny<z.miny?f.miny:z.miny,_.maxx=f.maxx>z.maxx?f.maxx:z.maxx,_.maxy=f.maxy>z.maxy?f.maxy:z.maxy;let P=y.height,k=d.height;x.height=1+(P>k?P:k),x=x.parent}}else{a.root=c,c.parent=null;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h}}}let i=t.aabb;if(!this.space.continuous&&s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let a=s.circle;if(a.zip_worldCOM&&a.body!=null){if(a.zip_worldCOM=!1,a.zip_localCOM){if(a.zip_localCOM=!1,a.type==1){let h=a.polygon;if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(h.lverts.next.next==null)h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;else if(h.lverts.next.next.next==null){h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;let u=1;h.localCOMx+=h.lverts.next.next.x*u,h.localCOMy+=h.lverts.next.next.y*u;let x=.5;h.localCOMx*=x,h.localCOMy*=x}else{h.localCOMx=0,h.localCOMy=0;let u=0,x=h.lverts.next,y=x;x=x.next;let d=x;for(x=x.next;x!=null;){let m=x;u+=d.x*(m.y-y.y);let b=m.y*d.x-m.x*d.y;h.localCOMx+=(d.x+m.x)*b,h.localCOMy+=(d.y+m.y)*b,y=d,d=m,x=x.next}x=h.lverts.next;let _=x;u+=d.x*(_.y-y.y);let f=_.y*d.x-_.x*d.y;h.localCOMx+=(d.x+_.x)*f,h.localCOMy+=(d.y+_.y)*f,y=d,d=_,x=x.next;let z=x;u+=d.x*(z.y-y.y);let P=z.y*d.x-z.x*d.y;h.localCOMx+=(d.x+z.x)*P,h.localCOMy+=(d.y+z.y)*P,u=1/(3*u);let k=u;h.localCOMx*=k,h.localCOMy*=k}}a.wrap_localCOM!=null&&(a.wrap_localCOM.zpp_inner.x=a.localCOMx,a.wrap_localCOM.zpp_inner.y=a.localCOMy)}let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),a.worldCOMx=a.body.posx+(a.body.axisy*a.localCOMx-a.body.axisx*a.localCOMy),a.worldCOMy=a.body.posy+(a.localCOMx*a.body.axisx+a.localCOMy*a.body.axisy)}let o=a.radius,p=a.radius;a.aabb.minx=a.worldCOMx-o,a.aabb.miny=a.worldCOMy-p,a.aabb.maxx=a.worldCOMx+o,a.aabb.maxy=a.worldCOMy+p}else{let a=s.polygon;if(a.zip_gverts&&a.body!=null){a.zip_gverts=!1,a.validate_lverts();let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot));let h=a.lverts.next,u=a.gverts.next;for(;u!=null;){let x=u,y=h;h=h.next,x.x=a.body.posx+(a.body.axisy*y.x-a.body.axisx*y.y),x.y=a.body.posy+(y.x*a.body.axisx+y.y*a.body.axisy),u=u.next}}if(a.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let o=a.gverts.next;a.aabb.minx=o.x,a.aabb.miny=o.y,a.aabb.maxx=o.x,a.aabb.maxy=o.y;let p=a.gverts.next.next;for(;p!=null;){let c=p;c.x<a.aabb.minx&&(a.aabb.minx=c.x),c.x>a.aabb.maxx&&(a.aabb.maxx=c.x),c.y<a.aabb.miny&&(a.aabb.miny=c.y),c.y>a.aabb.maxy&&(a.aabb.maxy=c.y),p=p.next}}let l=s.aabb;i.minx=l.minx-3,i.miny=l.miny-3,i.maxx=l.maxx+3,i.maxy=l.maxy+3;let r=(t.dyn=s.body.type==1?!1:!s.body.component.sleeping)?this.dtree:this.stree;if(r.root==null)r.root=t,r.root.parent=null;else{let a=t.aabb,o=r.root;for(;o.child1!=null;){let y=o.child1,d=o.child2,_=o.aabb,f=(_.maxx-_.minx+(_.maxy-_.miny))*2,z=$e.tmpaabb,P=o.aabb;z.minx=P.minx<a.minx?P.minx:a.minx,z.miny=P.miny<a.miny?P.miny:a.miny,z.maxx=P.maxx>a.maxx?P.maxx:a.maxx,z.maxy=P.maxy>a.maxy?P.maxy:a.maxy;let k=$e.tmpaabb,m=(k.maxx-k.minx+(k.maxy-k.miny))*2,b=2*m,M=2*(m-f),v=$e.tmpaabb,w=y.aabb;v.minx=a.minx<w.minx?a.minx:w.minx,v.miny=a.miny<w.miny?a.miny:w.miny,v.maxx=a.maxx>w.maxx?a.maxx:w.maxx,v.maxy=a.maxy>w.maxy?a.maxy:w.maxy;let O;if(y.child1==null){let Z=$e.tmpaabb;O=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+M}else{let Z=y.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;O=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+M}let E=$e.tmpaabb,C=d.aabb;E.minx=a.minx<C.minx?a.minx:C.minx,E.miny=a.miny<C.miny?a.miny:C.miny,E.maxx=a.maxx>C.maxx?a.maxx:C.maxx,E.maxy=a.maxy>C.maxy?a.maxy:C.maxy;let N;if(d.child1==null){let Z=$e.tmpaabb;N=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+M}else{let Z=d.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;N=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+M}if(b<O&&b<N)break;o=O<N?y:d}let p=o,c=p.parent,h;Ae.zpp_pool==null?h=new Ae:(h=Ae.zpp_pool,Ae.zpp_pool=h.next,h.next=null),fe.zpp_pool==null?h.aabb=new fe:(h.aabb=fe.zpp_pool,fe.zpp_pool=h.aabb.next,h.aabb.next=null),h.moved=!1,h.synced=!1,h.first_sync=!1,h.parent=c;let u=h.aabb,x=p.aabb;for(u.minx=a.minx<x.minx?a.minx:x.minx,u.miny=a.miny<x.miny?a.miny:x.miny,u.maxx=a.maxx>x.maxx?a.maxx:x.maxx,u.maxy=a.maxy>x.maxy?a.maxy:x.maxy,h.height=p.height+1,c!=null?(c.child1==p?c.child1=h:c.child2=h,h.child1=p,h.child2=t,p.parent=h,t.parent=h):(h.child1=p,h.child2=t,p.parent=h,t.parent=h,r.root=h),o=t.parent;o!=null;){if(o.child1==null||o.height<2)o=o;else{let m=o.child1,b=o.child2,M=b.height-m.height;if(M>1){let v=b.child1,w=b.child2;if(b.child1=o,b.parent=o.parent,o.parent=b,b.parent!=null?b.parent.child1==o?b.parent.child1=b:b.parent.child2=b:r.root=b,v.height>w.height){b.child2=v,o.child2=w,w.parent=o;let O=o.aabb,E=m.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,o.child2=v,v.parent=o;let O=o.aabb,E=m.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;b.height=1+(B>G?B:G)}o=b}else if(M<-1){let v=m.child1,w=m.child2;if(m.child1=o,m.parent=o.parent,o.parent=m,m.parent!=null?m.parent.child1==o?m.parent.child1=m:m.parent.child2=m:r.root=m,v.height>w.height){m.child2=v,o.child1=w,w.parent=o;let O=o.aabb,E=b.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,o.child1=v,v.parent=o;let O=o.aabb,E=b.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;m.height=1+(B>G?B:G)}o=m}else o=o}let y=o.child1,d=o.child2,_=y.height,f=d.height;o.height=1+(_>f?_:f);let z=o.aabb,P=y.aabb,k=d.aabb;z.minx=P.minx<k.minx?P.minx:k.minx,z.miny=P.miny<k.miny?P.miny:k.miny,z.maxx=P.maxx>k.maxx?P.maxx:k.maxx,z.maxy=P.maxy>k.maxy?P.maxy:k.maxy,o=o.parent}}t.synced=!1,t.moved=!0,t.mnext=t.snext,t.snext=null,t=t.mnext}let n=this.syncs;this.syncs=this.moves,this.moves=n}else for(;this.syncs!=null;){let t=this.syncs;this.syncs=t.snext,t.snext=null;let n=t,s=n.shape;if(n.first_sync)n.first_sync=!1;else{let a=n.dyn?this.dtree:this.stree;if(n==a.root)a.root=null;else{let o=n.parent,p=o.parent,c=o.child1==n?o.child2:o.child1;if(p!=null){p.child1==o?p.child1=c:p.child2=c,c.parent=p;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h;let x=p;for(;x!=null;){if(x.child1==null||x.height<2)x=x;else{let m=x.child1,b=x.child2,M=b.height-m.height;if(M>1){let v=b.child1,w=b.child2;if(b.child1=x,b.parent=x.parent,x.parent=b,b.parent!=null?b.parent.child1==x?b.parent.child1=b:b.parent.child2=b:a.root=b,v.height>w.height){b.child2=v,x.child2=w,w.parent=x;let O=x.aabb,E=m.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,x.child2=v,v.parent=x;let O=x.aabb,E=m.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;b.height=1+(B>G?B:G)}x=b}else if(M<-1){let v=m.child1,w=m.child2;if(m.child1=x,m.parent=x.parent,x.parent=m,m.parent!=null?m.parent.child1==x?m.parent.child1=m:m.parent.child2=m:a.root=m,v.height>w.height){m.child2=v,x.child1=w,w.parent=x;let O=x.aabb,E=b.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=x.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;x.height=1+(A>F?A:F);let B=x.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,x.child1=v,v.parent=x;let O=x.aabb,E=b.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=x.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;x.height=1+(A>F?A:F);let B=x.height,G=w.height;m.height=1+(B>G?B:G)}x=m}else x=x}let y=x.child1,d=x.child2,_=x.aabb,f=y.aabb,z=d.aabb;_.minx=f.minx<z.minx?f.minx:z.minx,_.miny=f.miny<z.miny?f.miny:z.miny,_.maxx=f.maxx>z.maxx?f.maxx:z.maxx,_.maxy=f.maxy>z.maxy?f.maxy:z.maxy;let P=y.height,k=d.height;x.height=1+(P>k?P:k),x=x.parent}}else{a.root=c,c.parent=null;let h=o;h.height=-1;let u=h.aabb;u.outer!=null&&(u.outer.zpp_inner=null,u.outer=null),u.wrap_min=u.wrap_max=null,u._invalidate=null,u._validate=null,u.next=fe.zpp_pool,fe.zpp_pool=u,h.child1=h.child2=h.parent=null,h.next=null,h.snext=null,h.mnext=null,h.next=Ae.zpp_pool,Ae.zpp_pool=h}}}let i=n.aabb;if(!this.space.continuous&&s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let a=s.circle;if(a.zip_worldCOM&&a.body!=null){if(a.zip_worldCOM=!1,a.zip_localCOM){if(a.zip_localCOM=!1,a.type==1){let h=a.polygon;if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(h.lverts.next.next==null)h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;else if(h.lverts.next.next.next==null){h.localCOMx=h.lverts.next.x,h.localCOMy=h.lverts.next.y;let u=1;h.localCOMx+=h.lverts.next.next.x*u,h.localCOMy+=h.lverts.next.next.y*u;let x=.5;h.localCOMx*=x,h.localCOMy*=x}else{h.localCOMx=0,h.localCOMy=0;let u=0,x=h.lverts.next,y=x;x=x.next;let d=x;for(x=x.next;x!=null;){let m=x;u+=d.x*(m.y-y.y);let b=m.y*d.x-m.x*d.y;h.localCOMx+=(d.x+m.x)*b,h.localCOMy+=(d.y+m.y)*b,y=d,d=m,x=x.next}x=h.lverts.next;let _=x;u+=d.x*(_.y-y.y);let f=_.y*d.x-_.x*d.y;h.localCOMx+=(d.x+_.x)*f,h.localCOMy+=(d.y+_.y)*f,y=d,d=_,x=x.next;let z=x;u+=d.x*(z.y-y.y);let P=z.y*d.x-z.x*d.y;h.localCOMx+=(d.x+z.x)*P,h.localCOMy+=(d.y+z.y)*P,u=1/(3*u);let k=u;h.localCOMx*=k,h.localCOMy*=k}}a.wrap_localCOM!=null&&(a.wrap_localCOM.zpp_inner.x=a.localCOMx,a.wrap_localCOM.zpp_inner.y=a.localCOMy)}let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot)),a.worldCOMx=a.body.posx+(a.body.axisy*a.localCOMx-a.body.axisx*a.localCOMy),a.worldCOMy=a.body.posy+(a.localCOMx*a.body.axisx+a.localCOMy*a.body.axisy)}let o=a.radius,p=a.radius;a.aabb.minx=a.worldCOMx-o,a.aabb.miny=a.worldCOMy-p,a.aabb.maxx=a.worldCOMx+o,a.aabb.maxy=a.worldCOMy+p}else{let a=s.polygon;if(a.zip_gverts&&a.body!=null){a.zip_gverts=!1,a.validate_lverts();let c=a.body;c.zip_axis&&(c.zip_axis=!1,c.axisx=Math.sin(c.rot),c.axisy=Math.cos(c.rot));let h=a.lverts.next,u=a.gverts.next;for(;u!=null;){let x=u,y=h;h=h.next,x.x=a.body.posx+(a.body.axisy*y.x-a.body.axisx*y.y),x.y=a.body.posy+(y.x*a.body.axisx+y.y*a.body.axisy),u=u.next}}if(a.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let o=a.gverts.next;a.aabb.minx=o.x,a.aabb.miny=o.y,a.aabb.maxx=o.x,a.aabb.maxy=o.y;let p=a.gverts.next.next;for(;p!=null;){let c=p;c.x<a.aabb.minx&&(a.aabb.minx=c.x),c.x>a.aabb.maxx&&(a.aabb.maxx=c.x),c.y<a.aabb.miny&&(a.aabb.miny=c.y),c.y>a.aabb.maxy&&(a.aabb.maxy=c.y),p=p.next}}let l=s.aabb;i.minx=l.minx-3,i.miny=l.miny-3,i.maxx=l.maxx+3,i.maxy=l.maxy+3;let r=(n.dyn=s.body.type==1?!1:!s.body.component.sleeping)?this.dtree:this.stree;if(r.root==null)r.root=n,r.root.parent=null;else{let a=n.aabb,o=r.root;for(;o.child1!=null;){let y=o.child1,d=o.child2,_=o.aabb,f=(_.maxx-_.minx+(_.maxy-_.miny))*2,z=$e.tmpaabb,P=o.aabb;z.minx=P.minx<a.minx?P.minx:a.minx,z.miny=P.miny<a.miny?P.miny:a.miny,z.maxx=P.maxx>a.maxx?P.maxx:a.maxx,z.maxy=P.maxy>a.maxy?P.maxy:a.maxy;let k=$e.tmpaabb,m=(k.maxx-k.minx+(k.maxy-k.miny))*2,b=2*m,M=2*(m-f),v=$e.tmpaabb,w=y.aabb;v.minx=a.minx<w.minx?a.minx:w.minx,v.miny=a.miny<w.miny?a.miny:w.miny,v.maxx=a.maxx>w.maxx?a.maxx:w.maxx,v.maxy=a.maxy>w.maxy?a.maxy:w.maxy;let O;if(y.child1==null){let Z=$e.tmpaabb;O=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+M}else{let Z=y.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;O=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+M}let E=$e.tmpaabb,C=d.aabb;E.minx=a.minx<C.minx?a.minx:C.minx,E.miny=a.miny<C.miny?a.miny:C.miny,E.maxx=a.maxx>C.maxx?a.maxx:C.maxx,E.maxy=a.maxy>C.maxy?a.maxy:C.maxy;let N;if(d.child1==null){let Z=$e.tmpaabb;N=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2+M}else{let Z=d.aabb,S=(Z.maxx-Z.minx+(Z.maxy-Z.miny))*2,A=$e.tmpaabb;N=(A.maxx-A.minx+(A.maxy-A.miny))*2-S+M}if(b<O&&b<N)break;o=O<N?y:d}let p=o,c=p.parent,h;Ae.zpp_pool==null?h=new Ae:(h=Ae.zpp_pool,Ae.zpp_pool=h.next,h.next=null),fe.zpp_pool==null?h.aabb=new fe:(h.aabb=fe.zpp_pool,fe.zpp_pool=h.aabb.next,h.aabb.next=null),h.moved=!1,h.synced=!1,h.first_sync=!1,h.parent=c;let u=h.aabb,x=p.aabb;for(u.minx=a.minx<x.minx?a.minx:x.minx,u.miny=a.miny<x.miny?a.miny:x.miny,u.maxx=a.maxx>x.maxx?a.maxx:x.maxx,u.maxy=a.maxy>x.maxy?a.maxy:x.maxy,h.height=p.height+1,c!=null?(c.child1==p?c.child1=h:c.child2=h,h.child1=p,h.child2=n,p.parent=h,n.parent=h):(h.child1=p,h.child2=n,p.parent=h,n.parent=h,r.root=h),o=n.parent;o!=null;){if(o.child1==null||o.height<2)o=o;else{let m=o.child1,b=o.child2,M=b.height-m.height;if(M>1){let v=b.child1,w=b.child2;if(b.child1=o,b.parent=o.parent,o.parent=b,b.parent!=null?b.parent.child1==o?b.parent.child1=b:b.parent.child2=b:r.root=b,v.height>w.height){b.child2=v,o.child2=w,w.parent=o;let O=o.aabb,E=m.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;b.height=1+(B>G?B:G)}else{b.child2=w,o.child2=v,v.parent=o;let O=o.aabb,E=m.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=b.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=m.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;b.height=1+(B>G?B:G)}o=b}else if(M<-1){let v=m.child1,w=m.child2;if(m.child1=o,m.parent=o.parent,o.parent=m,m.parent!=null?m.parent.child1==o?m.parent.child1=m:m.parent.child2=m:r.root=m,v.height>w.height){m.child2=v,o.child1=w,w.parent=o;let O=o.aabb,E=b.aabb,C=w.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=o.aabb,S=v.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=w.height;o.height=1+(A>F?A:F);let B=o.height,G=v.height;m.height=1+(B>G?B:G)}else{m.child2=w,o.child1=v,v.parent=o;let O=o.aabb,E=b.aabb,C=v.aabb;O.minx=E.minx<C.minx?E.minx:C.minx,O.miny=E.miny<C.miny?E.miny:C.miny,O.maxx=E.maxx>C.maxx?E.maxx:C.maxx,O.maxy=E.maxy>C.maxy?E.maxy:C.maxy;let N=m.aabb,Z=o.aabb,S=w.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=b.height,F=v.height;o.height=1+(A>F?A:F);let B=o.height,G=w.height;m.height=1+(B>G?B:G)}o=m}else o=o}let y=o.child1,d=o.child2,_=y.height,f=d.height;o.height=1+(_>f?_:f);let z=o.aabb,P=y.aabb,k=d.aabb;z.minx=P.minx<k.minx?P.minx:k.minx,z.miny=P.miny<k.miny?P.miny:k.miny,z.maxx=P.maxx>k.maxx?P.maxx:k.maxx,z.maxy=P.maxy>k.maxy?P.maxy:k.maxy,o=o.parent}}n.synced=!1,n.moved||(n.moved=!0,n.mnext=this.moves,this.moves=n)}}broadphase(t,n){let s=this.syncs;for(;s!=null;){let r=s.shape;if(s.first_sync)s.first_sync=!1;else{let c=s.dyn?this.dtree:this.stree;if(s==c.root)c.root=null;else{let h=s.parent,u=h.parent,x=h.child1==s?h.child2:h.child1;if(u!=null){u.child1==h?u.child1=x:u.child2=x,x.parent=u;let y=h;y.height=-1;let d=y.aabb;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d.wrap_min=d.wrap_max=null,d._invalidate=null,d._validate=null,d.next=fe.zpp_pool,fe.zpp_pool=d,y.child1=y.child2=y.parent=null,y.next=null,y.snext=null,y.mnext=null,y.next=Ae.zpp_pool,Ae.zpp_pool=y;let _=u;for(;_!=null;){if(_.child1==null||_.height<2)_=_;else{let v=_.child1,w=_.child2,O=w.height-v.height;if(O>1){let E=w.child1,C=w.child2;if(w.child1=_,w.parent=_.parent,_.parent=w,w.parent!=null?w.parent.child1==_?w.parent.child1=w:w.parent.child2=w:c.root=w,E.height>C.height){w.child2=E,_.child2=C,C.parent=_;let N=_.aabb,Z=v.aabb,S=C.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=_.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,J=C.height;_.height=1+(G>J?G:J);let R=_.height,T=E.height;w.height=1+(R>T?R:T)}else{w.child2=C,_.child2=E,E.parent=_;let N=_.aabb,Z=v.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=_.aabb,B=C.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,J=E.height;_.height=1+(G>J?G:J);let R=_.height,T=C.height;w.height=1+(R>T?R:T)}_=w}else if(O<-1){let E=v.child1,C=v.child2;if(v.child1=_,v.parent=_.parent,_.parent=v,v.parent!=null?v.parent.child1==_?v.parent.child1=v:v.parent.child2=v:c.root=v,E.height>C.height){v.child2=E,_.child1=C,C.parent=_;let N=_.aabb,Z=w.aabb,S=C.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=_.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,J=C.height;_.height=1+(G>J?G:J);let R=_.height,T=E.height;v.height=1+(R>T?R:T)}else{v.child2=C,_.child1=E,E.parent=_;let N=_.aabb,Z=w.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=_.aabb,B=C.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,J=E.height;_.height=1+(G>J?G:J);let R=_.height,T=C.height;v.height=1+(R>T?R:T)}_=v}else _=_}let f=_.child1,z=_.child2,P=_.aabb,k=f.aabb,m=z.aabb;P.minx=k.minx<m.minx?k.minx:m.minx,P.miny=k.miny<m.miny?k.miny:m.miny,P.maxx=k.maxx>m.maxx?k.maxx:m.maxx,P.maxy=k.maxy>m.maxy?k.maxy:m.maxy;let b=f.height,M=z.height;_.height=1+(b>M?b:M),_=_.parent}}else{c.root=x,x.parent=null;let y=h;y.height=-1;let d=y.aabb;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d.wrap_min=d.wrap_max=null,d._invalidate=null,d._validate=null,d.next=fe.zpp_pool,fe.zpp_pool=d,y.child1=y.child2=y.parent=null,y.next=null,y.snext=null,y.mnext=null,y.next=Ae.zpp_pool,Ae.zpp_pool=y}}}let a=s.aabb;if(!t.continuous&&r.zip_aabb&&r.body!=null)if(r.zip_aabb=!1,r.type==0){let c=r.circle;if(c.zip_worldCOM&&c.body!=null){if(c.zip_worldCOM=!1,c.zip_localCOM){if(c.zip_localCOM=!1,c.type==1){let y=c.polygon;if(y.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(y.lverts.next.next==null)y.localCOMx=y.lverts.next.x,y.localCOMy=y.lverts.next.y;else if(y.lverts.next.next.next==null){y.localCOMx=y.lverts.next.x,y.localCOMy=y.lverts.next.y;let d=1;y.localCOMx+=y.lverts.next.next.x*d,y.localCOMy+=y.lverts.next.next.y*d;let _=.5;y.localCOMx*=_,y.localCOMy*=_}else{y.localCOMx=0,y.localCOMy=0;let d=0,_=y.lverts.next,f=_;_=_.next;let z=_;for(_=_.next;_!=null;){let v=_;d+=z.x*(v.y-f.y);let w=v.y*z.x-v.x*z.y;y.localCOMx+=(z.x+v.x)*w,y.localCOMy+=(z.y+v.y)*w,f=z,z=v,_=_.next}_=y.lverts.next;let P=_;d+=z.x*(P.y-f.y);let k=P.y*z.x-P.x*z.y;y.localCOMx+=(z.x+P.x)*k,y.localCOMy+=(z.y+P.y)*k,f=z,z=P,_=_.next;let m=_;d+=z.x*(m.y-f.y);let b=m.y*z.x-m.x*z.y;y.localCOMx+=(z.x+m.x)*b,y.localCOMy+=(z.y+m.y)*b,d=1/(3*d);let M=d;y.localCOMx*=M,y.localCOMy*=M}}c.wrap_localCOM!=null&&(c.wrap_localCOM.zpp_inner.x=c.localCOMx,c.wrap_localCOM.zpp_inner.y=c.localCOMy)}let x=c.body;x.zip_axis&&(x.zip_axis=!1,x.axisx=Math.sin(x.rot),x.axisy=Math.cos(x.rot)),c.worldCOMx=c.body.posx+(c.body.axisy*c.localCOMx-c.body.axisx*c.localCOMy),c.worldCOMy=c.body.posy+(c.localCOMx*c.body.axisx+c.localCOMy*c.body.axisy)}let h=c.radius,u=c.radius;c.aabb.minx=c.worldCOMx-h,c.aabb.miny=c.worldCOMy-u,c.aabb.maxx=c.worldCOMx+h,c.aabb.maxy=c.worldCOMy+u}else{let c=r.polygon;if(c.zip_gverts&&c.body!=null){c.zip_gverts=!1,c.validate_lverts();let x=c.body;x.zip_axis&&(x.zip_axis=!1,x.axisx=Math.sin(x.rot),x.axisy=Math.cos(x.rot));let y=c.lverts.next,d=c.gverts.next;for(;d!=null;){let _=d,f=y;y=y.next,_.x=c.body.posx+(c.body.axisy*f.x-c.body.axisx*f.y),_.y=c.body.posy+(f.x*c.body.axisx+f.y*c.body.axisy),d=d.next}}if(c.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let h=c.gverts.next;c.aabb.minx=h.x,c.aabb.miny=h.y,c.aabb.maxx=h.x,c.aabb.maxy=h.y;let u=c.gverts.next.next;for(;u!=null;){let x=u;x.x<c.aabb.minx&&(c.aabb.minx=x.x),x.x>c.aabb.maxx&&(c.aabb.maxx=x.x),x.y<c.aabb.miny&&(c.aabb.miny=x.y),x.y>c.aabb.maxy&&(c.aabb.maxy=x.y),u=u.next}}let o=r.aabb;a.minx=o.minx-3,a.miny=o.miny-3,a.maxx=o.maxx+3,a.maxy=o.maxy+3;let p=(s.dyn=r.body.type==1?!1:!r.body.component.sleeping)?this.dtree:this.stree;if(p.root==null)p.root=s,p.root.parent=null;else{let c=s.aabb,h=p.root;for(;h.child1!=null;){let f=h.child1,z=h.child2,P=h.aabb,k=(P.maxx-P.minx+(P.maxy-P.miny))*2,m=$e.tmpaabb,b=h.aabb;m.minx=b.minx<c.minx?b.minx:c.minx,m.miny=b.miny<c.miny?b.miny:c.miny,m.maxx=b.maxx>c.maxx?b.maxx:c.maxx,m.maxy=b.maxy>c.maxy?b.maxy:c.maxy;let M=$e.tmpaabb,v=(M.maxx-M.minx+(M.maxy-M.miny))*2,w=2*v,O=2*(v-k),E=$e.tmpaabb,C=f.aabb;E.minx=c.minx<C.minx?c.minx:C.minx,E.miny=c.miny<C.miny?c.miny:C.miny,E.maxx=c.maxx>C.maxx?c.maxx:C.maxx,E.maxy=c.maxy>C.maxy?c.maxy:C.maxy;let N;if(f.child1==null){let F=$e.tmpaabb;N=(F.maxx-F.minx+(F.maxy-F.miny))*2+O}else{let F=f.aabb,B=(F.maxx-F.minx+(F.maxy-F.miny))*2,G=$e.tmpaabb;N=(G.maxx-G.minx+(G.maxy-G.miny))*2-B+O}let Z=$e.tmpaabb,S=z.aabb;Z.minx=c.minx<S.minx?c.minx:S.minx,Z.miny=c.miny<S.miny?c.miny:S.miny,Z.maxx=c.maxx>S.maxx?c.maxx:S.maxx,Z.maxy=c.maxy>S.maxy?c.maxy:S.maxy;let A;if(z.child1==null){let F=$e.tmpaabb;A=(F.maxx-F.minx+(F.maxy-F.miny))*2+O}else{let F=z.aabb,B=(F.maxx-F.minx+(F.maxy-F.miny))*2,G=$e.tmpaabb;A=(G.maxx-G.minx+(G.maxy-G.miny))*2-B+O}if(w<N&&w<A)break;h=N<A?f:z}let u=h,x=u.parent,y;Ae.zpp_pool==null?y=new Ae:(y=Ae.zpp_pool,Ae.zpp_pool=y.next,y.next=null),fe.zpp_pool==null?y.aabb=new fe:(y.aabb=fe.zpp_pool,fe.zpp_pool=y.aabb.next,y.aabb.next=null),y.moved=!1,y.synced=!1,y.first_sync=!1,y.parent=x;let d=y.aabb,_=u.aabb;for(d.minx=c.minx<_.minx?c.minx:_.minx,d.miny=c.miny<_.miny?c.miny:_.miny,d.maxx=c.maxx>_.maxx?c.maxx:_.maxx,d.maxy=c.maxy>_.maxy?c.maxy:_.maxy,y.height=u.height+1,x!=null?(x.child1==u?x.child1=y:x.child2=y,y.child1=u,y.child2=s,u.parent=y,s.parent=y):(y.child1=u,y.child2=s,u.parent=y,s.parent=y,p.root=y),h=s.parent;h!=null;){if(h.child1==null||h.height<2)h=h;else{let v=h.child1,w=h.child2,O=w.height-v.height;if(O>1){let E=w.child1,C=w.child2;if(w.child1=h,w.parent=h.parent,h.parent=w,w.parent!=null?w.parent.child1==h?w.parent.child1=w:w.parent.child2=w:p.root=w,E.height>C.height){w.child2=E,h.child2=C,C.parent=h;let N=h.aabb,Z=v.aabb,S=C.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=h.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,J=C.height;h.height=1+(G>J?G:J);let R=h.height,T=E.height;w.height=1+(R>T?R:T)}else{w.child2=C,h.child2=E,E.parent=h;let N=h.aabb,Z=v.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=w.aabb,F=h.aabb,B=C.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=v.height,J=E.height;h.height=1+(G>J?G:J);let R=h.height,T=C.height;w.height=1+(R>T?R:T)}h=w}else if(O<-1){let E=v.child1,C=v.child2;if(v.child1=h,v.parent=h.parent,h.parent=v,v.parent!=null?v.parent.child1==h?v.parent.child1=v:v.parent.child2=v:p.root=v,E.height>C.height){v.child2=E,h.child1=C,C.parent=h;let N=h.aabb,Z=w.aabb,S=C.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=h.aabb,B=E.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,J=C.height;h.height=1+(G>J?G:J);let R=h.height,T=E.height;v.height=1+(R>T?R:T)}else{v.child2=C,h.child1=E,E.parent=h;let N=h.aabb,Z=w.aabb,S=E.aabb;N.minx=Z.minx<S.minx?Z.minx:S.minx,N.miny=Z.miny<S.miny?Z.miny:S.miny,N.maxx=Z.maxx>S.maxx?Z.maxx:S.maxx,N.maxy=Z.maxy>S.maxy?Z.maxy:S.maxy;let A=v.aabb,F=h.aabb,B=C.aabb;A.minx=F.minx<B.minx?F.minx:B.minx,A.miny=F.miny<B.miny?F.miny:B.miny,A.maxx=F.maxx>B.maxx?F.maxx:B.maxx,A.maxy=F.maxy>B.maxy?F.maxy:B.maxy;let G=w.height,J=E.height;h.height=1+(G>J?G:J);let R=h.height,T=C.height;v.height=1+(R>T?R:T)}h=v}else h=h}let f=h.child1,z=h.child2,P=f.height,k=z.height;h.height=1+(P>k?P:k);let m=h.aabb,b=f.aabb,M=z.aabb;m.minx=b.minx<M.minx?b.minx:M.minx,m.miny=b.miny<M.miny?b.miny:M.miny,m.maxx=b.maxx>M.maxx?b.maxx:M.maxx,m.maxy=b.maxy>M.maxy?b.maxy:M.maxy,h=h.parent}}s.synced=!1,s=s.snext}for(;this.syncs!=null;){let r=this.syncs;this.syncs=r.snext,r.snext=null;let a=r;if(a.moved)continue;a.moved=!1;let o=a.shape;if(o.body.component.sleeping)continue;let c=a.aabb,h=null;for(this.dtree.root!=null&&(this.dtree.root.next=h,h=this.dtree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let M=b;M.next=m.head,m.head=M,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}for(this.stree.root!=null&&(this.stree.root.next=h,h=this.stree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let M=b;M.next=m.head,m.head=M,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}}for(;this.moves!=null;){let r=this.moves;this.moves=r.mnext,r.mnext=null;let a=r;a.moved=!1;let o=a.shape;if(o.body.component.sleeping)continue;let c=a.aabb,h=null;for(this.dtree.root!=null&&(this.dtree.root.next=h,h=this.dtree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let M=b;M.next=m.head,m.head=M,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}for(this.stree.root!=null&&(this.stree.root.next=h,h=this.stree.root);h!=null;){let u=h;h=u.next,u.next=null;let x=u;if(x!=a)if(x.child1==null){let y=x.shape;if(y.body!=o.body&&!(y.body.type==1&&o.body.type==1)){let d=x.aabb;if(d.miny<=c.maxy&&c.miny<=d.maxy&&d.minx<=c.maxx&&c.minx<=d.maxx){let _,f;o.id<y.id?(_=o.id,f=y.id):(_=y.id,f=o.id);let z=o.pairs.length<y.pairs.length?o:y,P=null,k=z.pairs.head;for(;k!=null;){let E=k.elt;if(E.id==_&&E.di==f){P=E;break}k=k.next}if(P!=null){P.sleeping&&(P.sleeping=!1,P.next=this.pairs,this.pairs=P,P.first=!0);continue}tt.zpp_pool==null?P=new tt:(P=tt.zpp_pool,tt.zpp_pool=P.next,P.next=null),P.n1=a,P.n2=x,P.id=_,P.di=f,P.next=this.pairs,this.pairs=P,P.first=!0;let m=o.pairs,b;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?b=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(b=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=b.next,b.next=null),b.elt=P;let M=b;M.next=m.head,m.head=M,m.modified=!0,m.length++;let v=y.pairs,w;ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool==null?w=new ze._zpp.util.ZNPNode_ZPP_AABBPair:(w=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w.next,w.next=null),w.elt=P;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++}}}else{let y=x.aabb;y.miny<=c.maxy&&c.miny<=y.maxy&&y.minx<=c.maxx&&c.minx<=y.maxx&&(x.child1!=null&&(x.child1.next=h,h=x.child1),x.child2!=null&&(x.child2.next=h,h=x.child2))}}}let i=null,l=this.pairs;for(;l!=null;){let r;if(l.first)r=!1;else{let x=l.n1.aabb,y=l.n2.aabb;r=!(y.miny<=x.maxy&&x.miny<=y.maxy&&y.minx<=x.maxx&&x.minx<=y.maxx)}if(r){i==null?this.pairs=l.next:i.next=l.next;let x=l.n1.shape.pairs,y=null,d=x.head,_=!1;for(;d!=null;){if(d.elt==l){let M,v;y==null?(M=x.head,v=M.next,x.head=v,x.head==null&&(x.pushmod=!0)):(M=y.next,v=M.next,y.next=v,v==null&&(x.pushmod=!0));let w=M;w.elt=null,w.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w,x.modified=!0,x.length--,x.pushmod=!0,_=!0;break}y=d,d=d.next}let f=l.n2.shape.pairs,z=null,P=f.head,k=!1;for(;P!=null;){if(P.elt==l){let M,v;z==null?(M=f.head,v=M.next,f.head=v,f.head==null&&(f.pushmod=!0)):(M=z.next,v=M.next,z.next=v,v==null&&(f.pushmod=!0));let w=M;w.elt=null,w.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=w,f.modified=!0,f.length--,f.pushmod=!0,k=!0;break}z=P,P=P.next}let m=l.next;l.arb!=null&&(l.arb.pair=null),l.arb=null;let b=l;b.n1=b.n2=null,b.sleeping=!1,b.next=tt.zpp_pool,tt.zpp_pool=b,l=m;continue}let a=l.n1.shape,o=a.body,p=l.n2.shape,c=p.body;if(!l.first&&(o.component.sleeping||o.type==1)&&(c.component.sleeping||c.type==1)){l.sleeping=!0,i==null?this.pairs=l.next:i.next=l.next,l=l.next;continue}l.first=!1;let h=a.aabb,u=p.aabb;if(u.miny<=h.maxy&&h.miny<=u.maxy&&u.minx<=h.maxx&&h.minx<=u.maxx){let x=l.arb;n?l.arb=t.narrowPhase(a,p,o.type!=2||c.type!=2,l.arb,!1):l.arb=t.continuousEvent(a,p,o.type!=2||c.type!=2,l.arb,!1),l.arb==null?x!=null&&(x.pair=null):l.arb.pair=l}i=l,l=l.next}}clear(){for(;this.syncs!=null;){let t=this.syncs.snext;this.syncs.snext=null,this.syncs.first_sync&&(this.syncs.shape.node=null,this.syncs.shape.removedFromSpace(),this.syncs.shape=null),this.syncs=t}for(;this.moves!=null;){let t=this.moves.mnext;this.moves.mnext=null,this.moves.first_sync&&(this.moves.shape.node=null,this.moves.shape.removedFromSpace(),this.moves.shape=null),this.moves=t}for(;this.pairs!=null;){let t=this.pairs.next;this.pairs.arb!=null&&(this.pairs.arb.pair=null),this.pairs.arb=null;let n=this.pairs.n1.shape.pairs,s=this.pairs,i=null,l=n.head,r=!1;for(;l!=null;){if(l.elt==s){let x,y;i==null?(x=n.head,y=x.next,n.head=y,n.head==null&&(n.pushmod=!0)):(x=i.next,y=x.next,i.next=y,y==null&&(n.pushmod=!0));let d=x;d.elt=null,d.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=d,n.modified=!0,n.length--,n.pushmod=!0,r=!0;break}i=l,l=l.next}let a=this.pairs.n2.shape.pairs,o=this.pairs,p=null,c=a.head,h=!1;for(;c!=null;){if(c.elt==o){let x,y;p==null?(x=a.head,y=x.next,a.head=y,a.head==null&&(a.pushmod=!0)):(x=p.next,y=x.next,p.next=y,y==null&&(a.pushmod=!0));let d=x;d.elt=null,d.next=ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBPair.zpp_pool=d,a.modified=!0,a.length--,a.pushmod=!0,h=!0;break}p=c,c=c.next}let u=this.pairs;u.n1=u.n2=null,u.sleeping=!1,u.next=tt.zpp_pool,tt.zpp_pool=u,this.pairs=t}this.dtree.clear(),this.stree.clear()}shapesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h;if(s!=null){let u=p.shape.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(p.shape.outer):Ee.polyContains(p.shape.polygon,r)&&a.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h;if(s!=null){let u=p.shape.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(p.shape.outer):Ee.polyContains(p.shape.polygon,r)&&a.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}let o=r;return o.outer!=null&&(o.outer.zpp_inner=null,o.outer=null),o._isimmutable=null,o._validate=null,o._invalidate=null,o.next=le.zpp_pool,le.zpp_pool=o,a}bodiesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new ze._nape.phys.BodyList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h=p.shape.body.outer;if(!a.has(h)){let u;if(s!=null){let x=p.shape.filter;u=(x.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(h):Ee.polyContains(p.shape.polygon,r)&&a.push(h))}}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(r.x>=c.minx&&r.x<=c.maxx&&r.y>=c.miny&&r.y<=c.maxy)if(p.child1==null){let h=p.shape.body.outer;if(!a.has(h)){let u;if(s!=null){let x=p.shape.filter;u=(x.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(p.shape.type==0?Ee.circleContains(p.shape.circle,r)&&a.push(h):Ee.polyContains(p.shape.polygon,r)&&a.push(h))}}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}let o=r;return o.outer!=null&&(o.outer.zpp_inner=null,o.outer=null),o._isimmutable=null,o._validate=null,o._invalidate=null,o.next=le.zpp_pool,le.zpp_pool=o,a}shapesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;c&&a.push(o.shape.outer)}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;h&&a.push(c.shape.outer)}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h;if(i!=null){let u=o.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h)if(n)if(s)Ee.containTest(this.aabbShape.zpp_inner,o.shape)&&a.push(o.shape.outer);else{let u=o.shape.aabb;(u.minx>=r.minx&&u.miny>=r.miny&&u.maxx<=r.maxx&&u.maxy<=r.maxy||Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner))&&a.push(o.shape.outer)}else{let u;if(s){let x=o.shape.aabb;u=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy}else u=!0;u&&a.push(o.shape.outer)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;c&&a.push(o.shape.outer)}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;h&&a.push(c.shape.outer)}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h;if(i!=null){let u=o.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h)if(n)if(s)Ee.containTest(this.aabbShape.zpp_inner,o.shape)&&a.push(o.shape.outer);else{let u=o.shape.aabb;(u.minx>=r.minx&&u.miny>=r.miny&&u.maxx<=r.maxx&&u.maxy<=r.maxy||Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner))&&a.push(o.shape.outer)}else{let u;if(s){let x=o.shape.aabb;u=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy}else u=!0;u&&a.push(o.shape.outer)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}return a}bodiesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new ze._nape.phys.BodyList;if(this.failed==null&&(this.failed=new ze._nape.phys.BodyList),this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;if(c){let h=o.shape.body.outer;a.has(h)||a.push(h)}}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h){let u=c.shape.body.outer;a.has(u)||a.push(u)}}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h=o.shape.body.outer,u;if(i!=null){let x=o.shape.filter;u=(x.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(n)if(s){if(!this.failed.has(h)){let x=Ee.containTest(this.aabbShape.zpp_inner,o.shape);!a.has(h)&&x?a.push(h):x||(a.remove(h),this.failed.push(h))}}else!a.has(h)&&Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner)&&a.push(h);else if(s){if(!this.failed.has(h)){let x=o.shape.aabb,y=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy;!a.has(h)&&y?a.push(h):y||(a.remove(h),this.failed.push(h))}}else{let x;if(a.has(h))x=!1;else{let y=o.shape.aabb;x=y.minx>=r.minx&&y.miny>=r.miny&&y.maxx<=r.maxx&&y.maxy<=r.maxy}x&&a.push(h)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let o=this.treeStack.pop_unsafe(),p=o.aabb;if(p.minx>=r.minx&&p.miny>=r.miny&&p.maxx<=r.maxx&&p.maxy<=r.maxy)if(o.child1==null){let c;if(i!=null){let h=o.shape.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;if(c){let h=o.shape.body.outer;a.has(h)||a.push(h)}}else for(this.treeStack2==null&&(this.treeStack2=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack2.add(o);this.treeStack2.head!=null;){let c=this.treeStack2.pop_unsafe();if(c.child1==null){let h;if(i!=null){let u=c.shape.filter;h=(u.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&u.collisionGroup)!=0}else h=!0;if(h){let u=c.shape.body.outer;a.has(u)||a.push(u)}}else c.child1!=null&&this.treeStack2.add(c.child1),c.child2!=null&&this.treeStack2.add(c.child2)}else{let c=o.aabb;if(r.miny<=c.maxy&&c.miny<=r.maxy&&r.minx<=c.maxx&&c.minx<=r.maxx)if(o.child1==null){let h=o.shape.body.outer,u;if(i!=null){let x=o.shape.filter;u=(x.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(n)if(s){if(!this.failed.has(h)){let x=Ee.containTest(this.aabbShape.zpp_inner,o.shape);!a.has(h)&&x?a.push(h):x||(a.remove(h),this.failed.push(h))}}else!a.has(h)&&Ee.testCollide_safe(o.shape,this.aabbShape.zpp_inner)&&a.push(h);else if(s){if(!this.failed.has(h)){let x=o.shape.aabb,y=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy;!a.has(h)&&y?a.push(h):y||(a.remove(h),this.failed.push(h))}}else{let x;if(a.has(h))x=!1;else{let y=o.shape.aabb;x=y.minx>=r.minx&&y.miny>=r.miny&&y.maxx<=r.maxx&&y.maxy<=r.maxy}x&&a.push(h)}}else o.child1!=null&&this.treeStack.add(o.child1),o.child2!=null&&this.treeStack.add(o.child2)}}return this.failed.clear(),a}shapesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h;if(l!=null){let u=p.shape.filter;h=(u.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(i?Ee.containTest(this.circShape.zpp_inner,p.shape)&&o.push(p.shape.outer):Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h;if(l!=null){let u=p.shape.filter;h=(u.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(i?Ee.containTest(this.circShape.zpp_inner,p.shape)&&o.push(p.shape.outer):Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(p.shape.outer))}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}return o}bodiesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new ze._nape.phys.BodyList;if(this.failed==null&&(this.failed=new ze._nape.phys.BodyList),this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h=p.shape.body.outer,u;if(l!=null){let x=p.shape.filter;u=(x.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(i){if(!this.failed.has(h)){let x=Ee.containTest(this.circShape.zpp_inner,p.shape);!o.has(h)&&x?o.push(h):x||(o.remove(h),this.failed.push(h))}}else!o.has(h)&&Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(h)}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let p=this.treeStack.pop_unsafe(),c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx)if(p.child1==null){let h=p.shape.body.outer,u;if(l!=null){let x=p.shape.filter;u=(x.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(i){if(!this.failed.has(h)){let x=Ee.containTest(this.circShape.zpp_inner,p.shape);!o.has(h)&&x?o.push(h):x||(o.remove(h),this.failed.push(h))}}else!o.has(h)&&Ee.testCollide_safe(p.shape,this.circShape.zpp_inner)&&o.push(h)}else p.child1!=null&&this.treeStack.add(p.child1),p.child2!=null&&this.treeStack.add(p.child2)}return this.failed.clear(),o}shapesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new ze._nape.shape.ShapeList;if(this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p;if(s!=null){let c=a.shape.filter;p=(c.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&c.collisionGroup)!=0}else p=!0;p&&(n?Ee.containTest(t,a.shape)&&r.push(a.shape.outer):Ee.testCollide_safe(a.shape,t)&&r.push(a.shape.outer))}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p;if(s!=null){let c=a.shape.filter;p=(c.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&c.collisionGroup)!=0}else p=!0;p&&(n?Ee.containTest(t,a.shape)&&r.push(a.shape.outer):Ee.testCollide_safe(a.shape,t)&&r.push(a.shape.outer))}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}return r}bodiesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new ze._nape.phys.BodyList;if(this.failed==null&&(this.failed=new ze._nape.phys.BodyList),this.stree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.stree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p=a.shape.body.outer,c;if(s!=null){let h=a.shape.filter;c=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else c=!0;if(c)if(n){if(!this.failed.has(p)){let h=Ee.containTest(t,a.shape);!r.has(p)&&h?r.push(p):h||(r.remove(p),this.failed.push(p))}}else!r.has(p)&&Ee.testCollide_safe(a.shape,t)&&r.push(p)}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}if(this.dtree.root!=null)for(this.treeStack==null&&(this.treeStack=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.treeStack.add(this.dtree.root);this.treeStack.head!=null;){let a=this.treeStack.pop_unsafe(),o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx)if(a.child1==null){let p=a.shape.body.outer,c;if(s!=null){let h=a.shape.filter;c=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else c=!0;if(c)if(n){if(!this.failed.has(p)){let h=Ee.containTest(t,a.shape);!r.has(p)&&h?r.push(p):h||(r.remove(p),this.failed.push(p))}}else!r.has(p)&&Ee.testCollide_safe(a.shape,t)&&r.push(p)}else a.child1!=null&&this.treeStack.add(a.child1),a.child2!=null&&this.treeStack.add(a.child2)}return this.failed.clear(),r}rayCast(t,n,s){this.openlist==null&&(this.openlist=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.sync_broadphase(),t.validate_dir();let i=t.maxdist;if(this.dtree.root!=null&&t.aabbtest(this.dtree.root.aabb)){let r=t.aabbsect(this.dtree.root.aabb);if(r>=0&&r<i){this.dtree.root.rayt=r;let a=null,o=this.openlist.head;for(;o!=null;){let x=o.elt;if(this.dtree.root.rayt<x.rayt)break;a=o,o=o.next}let p=this.openlist,c=this.dtree.root,h;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?h=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(h=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=h.next,h.next=null),h.elt=c;let u=h;a==null?(u.next=p.head,p.head=u):(u.next=a.next,a.next=u),p.pushmod=p.modified=!0,p.length++}}if(this.stree.root!=null&&t.aabbtest(this.stree.root.aabb)){let r=t.aabbsect(this.stree.root.aabb);if(r>=0&&r<i){this.stree.root.rayt=r;let a=null,o=this.openlist.head;for(;o!=null;){let x=o.elt;if(this.stree.root.rayt<x.rayt)break;a=o,o=o.next}let p=this.openlist,c=this.stree.root,h;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?h=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(h=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=h.next,h.next=null),h.elt=c;let u=h;a==null?(u.next=p.head,p.head=u):(u.next=a.next,a.next=u),p.pushmod=p.modified=!0,p.length++}}let l=null;for(;this.openlist.head!=null;){let r=this.openlist.pop_unsafe();if(r.rayt>=i)break;if(r.child1==null){let a=r.shape,o;if(s!=null){let p=a.filter;o=(p.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&p.collisionGroup)!=0}else o=!0;if(o){let p=a.type==0?t.circlesect(a.circle,n,i):t.aabbtest(a.aabb)?t.polysect(a.polygon,n,i):null;if(p!=null){if(p.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(i=p.zpp_inner.toiDistance,l!=null){if(l.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");l.zpp_inner.free()}l=p}}}else{if(r.child1!=null&&t.aabbtest(r.child1.aabb)){let a=t.aabbsect(r.child1.aabb);if(a>=0&&a<i){r.child1.rayt=a;let o=null,p=this.openlist.head;for(;p!=null;){let y=p.elt;if(r.child1.rayt<y.rayt)break;o=p,p=p.next}let c=this.openlist,h=r.child1,u;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?u=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(u=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=u.next,u.next=null),u.elt=h;let x=u;o==null?(x.next=c.head,c.head=x):(x.next=o.next,o.next=x),c.pushmod=c.modified=!0,c.length++}}if(r.child2!=null&&t.aabbtest(r.child2.aabb)){let a=t.aabbsect(r.child2.aabb);if(a>=0&&a<i){r.child2.rayt=a;let o=null,p=this.openlist.head;for(;p!=null;){let y=p.elt;if(r.child2.rayt<y.rayt)break;o=p,p=p.next}let c=this.openlist,h=r.child2,u;ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool==null?u=new ze._zpp.util.ZNPNode_ZPP_AABBNode:(u=ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool,ze._zpp.util.ZNPNode_ZPP_AABBNode.zpp_pool=u.next,u.next=null),u.elt=h;let x=u;o==null?(x.next=c.head,c.head=x):(x.next=o.next,o.next=x),c.pushmod=c.modified=!0,c.length++}}}}return this.openlist.clear(),l}rayMultiCast(t,n,s,i){this.openlist==null&&(this.openlist=new ze._zpp.util.ZNPList_ZPP_AABBNode),this.sync_broadphase(),t.validate_dir();let l=t.maxdist>=1/0,r=i??new ze._nape.geom.RayResultList;if(this.dtree.root!=null&&t.aabbtest(this.dtree.root.aabb))if(l)this.openlist.add(this.dtree.root);else{let a=t.aabbsect(this.dtree.root.aabb);a>=0&&a<t.maxdist&&this.openlist.add(this.dtree.root)}if(this.stree.root!=null&&t.aabbtest(this.stree.root.aabb))if(l)this.openlist.add(this.stree.root);else{let a=t.aabbsect(this.stree.root.aabb);a>=0&&a<t.maxdist&&this.openlist.add(this.stree.root)}for(;this.openlist.head!=null;){let a=this.openlist.pop_unsafe();if(a.child1==null){let o=a.shape,p;if(s!=null){let c=o.filter;p=(c.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&c.collisionGroup)!=0}else p=!0;p&&(o.type==0?t.circlesect2(o.circle,n,r):t.aabbtest(o.aabb)&&t.polysect2(o.polygon,n,r))}else{if(a.child1!=null&&t.aabbtest(a.child1.aabb))if(l)this.openlist.add(a.child1);else{let o=t.aabbsect(a.child1.aabb);o>=0&&o<t.maxdist&&this.openlist.add(a.child1)}if(a.child2!=null&&t.aabbtest(a.child2.aabb))if(l)this.openlist.add(a.child2);else{let o=t.aabbsect(a.child2.aabb);o>=0&&o<t.maxdist&&this.openlist.add(a.child2)}}}return this.openlist.clear(),r}};ze._zpp=null,ze._nape=null,ze.FATTEN=3,ze.VEL_STEPS=2;var Cs=ze;var Us=class Us{constructor(){this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.comps=null;this.sleep=!1;this.waket=0;this.comps=new Us._zpp.util.ZNPList_ZPP_Component}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}free(){}alloc(){this.waket=0}};Us.zpp_pool=null,Us._zpp=null;var xt=Us;var Ws=class{constructor(){this.next=null;this.parent=this;this.rank=0;this.isBody=!1;this.body=null;this.constraint=null;this.island=null;this.sleeping=!1;this.waket=0;this.woken=!1;this._inuse=!1}free(){this.body=null,this.constraint=null}alloc(){}reset(){this.sleeping=!1,this.island=null,this.parent=this,this.rank=0}};Ws.zpp_pool=null;var Bn=class Bn{constructor(){this.id=0;this.di=0;this.int1=null;this.int2=null;this.arbiters=null;this.COLLISIONstate=null;this.COLLISIONstamp=null;this.SENSORstate=null;this.SENSORstamp=null;this.FLUIDstate=null;this.FLUIDstamp=null;this.length=0;this.pushmod=!1;this.modified=!1;this._inuse=!1;this.next=null;this.freed=!1;this.lazydel=!1;this.arbiters=new Bn._zpp.util.ZNPList_ZPP_Arbiter}static get(e,t){let n;return Bn.zpp_pool==null?n=new Bn:(n=Bn.zpp_pool,Bn.zpp_pool=n.next,n.next=null),n.freed=!1,n.lazydel=!1,n.COLLISIONstate=1,n.COLLISIONstamp=0,n.SENSORstate=1,n.SENSORstamp=0,n.FLUIDstate=1,n.FLUIDstamp=0,e.id<t.id?(n.int1=e,n.int2=t):(n.int1=t,n.int2=e),n.id=n.int1.id,n.di=n.int2.id,n}elem(){return this}begin(){return this.next}setbegin(e){this.next=e,this.modified=!0,this.pushmod=!0}add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}inlined_add(e){e._inuse=!0;let t=e;return t.next=this.next,this.next=t,this.modified=!0,this.length++,e}addAll(e){let t=e.next;for(;t!=null;){let n=t;this.add(n),t=t.next}}insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}inlined_insert(e,t){t._inuse=!0;let n=t;return e==null?(n.next=this.next,this.next=n):(n.next=e.next,e.next=n),this.pushmod=this.modified=!0,this.length++,n}pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}inlined_pop(){let e=this.next;this.next=e.next,e._inuse=!1,this.next==null&&(this.pushmod=!0),this.modified=!0,this.length--}pop_unsafe(){let e=this.next;return this.pop(),e}inlined_pop_unsafe(){let e=this.next;return this.pop(),e}remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){this.erase(t),s=!0;break}t=n,n=n.next}return s}inlined_remove(e){let t=null,n=this.next;for(;n!=null;){if(n==e){let s,i;t==null?(s=this.next,i=s.next,this.next=i,this.next==null&&(this.pushmod=!0)):(s=t.next,i=s.next,t.next=i,i==null&&(this.pushmod=!0)),s._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0;break}t=n,n=n.next}}inlined_try_remove(e){let t=null,n=this.next,s=!1;for(;n!=null;){if(n==e){let i,l;t==null?(i=this.next,l=i.next,this.next=l,this.next==null&&(this.pushmod=!0)):(i=t.next,l=i.next,t.next=l,l==null&&(this.pushmod=!0)),i._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,s=!0;break}t=n,n=n.next}return s}erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}inlined_erase(e){let t,n;return e==null?(t=this.next,n=t.next,this.next=n,this.next==null&&(this.pushmod=!0)):(t=e.next,n=t.next,e.next=n,n==null&&(this.pushmod=!0)),t._inuse=!1,this.modified=!0,this.length--,this.pushmod=!0,n}splice(e,t){for(;t-- >0&&e.next!=null;)this.erase(e);return e.next}clear(){}inlined_clear(){}reverse(){let e=this.next,t=null;for(;e!=null;){let n=e.next;e.next=t,this.next=e,t=e,e=n}this.modified=!0,this.pushmod=!0}empty(){return this.next==null}size(){return this.length}has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}inlined_has(e){let t=!1,n=this.next;for(;n!=null;){if(n==e){t=!0;break}n=n.next}return t}front(){return this.next}back(){let e=this.next,t=e;for(;t!=null;)e=t,t=t.next;return e}iterator_at(e){let t=this.next;for(;e-- >0&&t!=null;)t=t.next;return t}at(e){let t=this.iterator_at(e);return t??null}free(){this.int1=this.int2=null,this.id=this.di=-1,this.freed=!0}alloc(){this.freed=!1,this.lazydel=!1,this.COLLISIONstate=1,this.COLLISIONstamp=0,this.SENSORstate=1,this.SENSORstamp=0,this.FLUIDstate=1,this.FLUIDstamp=0}add_arb(e){let t=!1,n=this.arbiters.head;for(;n!=null;){if(n.elt==e){t=!0;break}n=n.next}if(t)return!1;{let s=this.arbiters,i,l=Bn._zpp.util.ZNPNode_ZPP_Arbiter;l.zpp_pool==null?i=new l:(i=l.zpp_pool,l.zpp_pool=i.next,i.next=null),i.elt=e;let r=i;return r.next=s.head,s.head=r,s.modified=!0,s.length++,!0}}try_remove_arb(e){let t=this.arbiters,n=null,s=t.head,i=!1;for(;s!=null;){if(s.elt==e){let l,r;n==null?(l=t.head,r=l.next,t.head=r,t.head==null&&(t.pushmod=!0)):(l=n.next,r=l.next,n.next=r,r==null&&(t.pushmod=!0));let a=l;a.elt=null;let o=Bn._zpp.util.ZNPNode_ZPP_Arbiter;a.next=o.zpp_pool,o.zpp_pool=a,t.modified=!0,t.length--,t.pushmod=!0,i=!0;break}n=s,s=s.next}return i}remove_arb(e){let t=this.arbiters,n=null,s=t.head;for(;s!=null;){if(s.elt==e){let i,l;n==null?(i=t.head,l=i.next,t.head=l,t.head==null&&(t.pushmod=!0)):(i=n.next,l=i.next,n.next=l,l==null&&(t.pushmod=!0));let r=i;r.elt=null;let a=Bn._zpp.util.ZNPNode_ZPP_Arbiter;r.next=a.zpp_pool,a.zpp_pool=r,t.modified=!0,t.length--,t.pushmod=!0;break}n=s,s=s.next}}empty_arb(e){let t=!0,n=this.arbiters.head;for(;n!=null;)if((n.elt.type&e)==0){n=n.next;continue}else{t=!1;break}return t}really_empty(){return this.arbiters.head==null}sleeping(){let e=!0,t=this.arbiters.head;for(;t!=null;)if(t.elt.sleeping){t=t.next;continue}else{e=!1;break}return e}};Bn.zpp_pool=null,Bn._zpp=null;var Wt=Bn;var pi=class pi{constructor(e){this.cbsets=null;this.space=null;let t=pi._zpp.util.ZPP_Set_ZPP_CbSet;t.zpp_pool==null?this.cbsets=new t:(this.cbsets=t.zpp_pool,t.zpp_pool=this.cbsets.next,this.cbsets.next=null),this.cbsets.lt=pi._zpp.callbacks.ZPP_CbSet.setlt,this.space=e}get(e){if(e.head==null)return null;let t=pi._zpp.callbacks.ZPP_CbSet,n;t.zpp_pool==null?n=new t:(n=t.zpp_pool,t.zpp_pool=n.next,n.next=null);let s=n.cbTypes;n.cbTypes=e;let i=this.cbsets.find_weak(n),l;if(i!=null)l=i.data;else{let a=t.get(e);this.cbsets.insert(a),a.manager=this,l=a}n.cbTypes=s;let r=n;for(r.listeners.clear(),r.zip_listeners=!0,r.bodylisteners.clear(),r.zip_bodylisteners=!0,r.conlisteners.clear(),r.zip_conlisteners=!0;r.cbTypes.head!=null;)r.cbTypes.pop_unsafe().cbsets.remove(r);return r.next=t.zpp_pool,t.zpp_pool=r,l}remove(e){let t=pi._zpp.callbacks.ZPP_CbSetPair;for(this.cbsets.remove(e);e.cbpairs.head!=null;){let n=e.cbpairs.pop_unsafe();n.a!=n.b&&(e==n.a?n.b.cbpairs.remove(n):n.a.cbpairs.remove(n));let s=n;s.a=s.b=null,s.listeners.clear(),s.next=t.zpp_pool,t.zpp_pool=s}e.manager=null}clear(){}validate(){if(!this.cbsets.empty()){let e=this.cbsets.parent;for(;e.prev!=null;)e=e.prev;for(;e!=null;)if(e.data.validate(),e.next!=null)for(e=e.next;e.prev!=null;)e=e.prev;else{for(;e.parent!=null&&e==e.parent.next;)e=e.parent;e=e.parent}}}pair(e,t){let n=pi._zpp.callbacks.ZPP_CbSet,s=pi._zpp.callbacks.ZPP_CbSetPair,i=null,r=(e.cbpairs.length<t.cbpairs.length?e.cbpairs:t.cbpairs).head;for(;r!=null;){let a=r.elt;if(a.a==e&&a.b==t||a.a==t&&a.b==e){i=a;break}r=r.next}if(i==null){let a;s.zpp_pool==null?a=new s:(a=s.zpp_pool,s.zpp_pool=a.next,a.next=null),a.zip_listeners=!0,n.setlt(e,t)?(a.a=e,a.b=t):(a.a=t,a.b=e),i=a,e.cbpairs.add(i),t!=e&&t.cbpairs.add(i)}return i.zip_listeners&&(i.zip_listeners=!1,i.__validate()),i}valid_listener(e){return e.space==this.space}};pi._zpp=null;var Xi=pi;var j=class j{constructor(e,t){this.outer=null;this.userData=null;this.gravityx=null;this.gravityy=null;this.wrap_gravity=null;this.bodies=null;this.wrap_bodies=null;this.compounds=null;this.wrap_compounds=null;this.constraints=null;this.wrap_constraints=null;this.kinematics=null;this.bphase=null;this.__static=null;this.global_lin_drag=null;this.global_ang_drag=null;this.stamp=null;this.midstep=null;this.time=null;this.sortcontacts=null;this.c_arbiters_true=null;this.c_arbiters_false=null;this.f_arbiters=null;this.s_arbiters=null;this.wrap_arbiters=null;this.live=null;this.wrap_live=null;this.live_constraints=null;this.wrap_livecon=null;this.staticsleep=null;this.islands=null;this.listeners=null;this.wrap_listeners=null;this.callbacks=null;this.callbackset_list=null;this.cbsets=null;this.convexShapeList=null;this.pre_dt=null;this.toiEvents=null;this.continuous=null;this.precb=null;this.prelisteners=null;this.mrca1=null;this.mrca2=null;this.prelisteners=null,this.precb=null,this.continuous=!1,this.toiEvents=null,this.pre_dt=0,this.convexShapeList=null,this.cbsets=null,this.callbackset_list=null,this.callbacks=null,this.wrap_listeners=null,this.listeners=null,this.islands=null,this.staticsleep=null,this.wrap_livecon=null,this.live_constraints=null,this.wrap_live=null,this.live=null,this.wrap_arbiters=null,this.s_arbiters=null,this.f_arbiters=null,this.c_arbiters_false=null,this.c_arbiters_true=null,this.sortcontacts=!1,this.time=0,this.midstep=!1,this.stamp=0,this.global_ang_drag=0,this.global_lin_drag=0,this.__static=null,this.bphase=null,this.kinematics=null,this.wrap_constraints=null,this.constraints=null,this.wrap_compounds=null,this.compounds=null,this.wrap_bodies=null,this.bodies=null,this.wrap_gravity=null,this.gravityy=0,this.gravityx=0,this.userData=null,this.outer=null,this.toiEvents=new j._zpp.util.ZNPList_ZPP_ToiEvent,this.global_lin_drag=.015,this.global_ang_drag=.015,Tt.internal=!0,this.precb=Tt._createPreCb(),this.precb.zpp_inner=new Tt,Tt.internal=!1,this.sortcontacts=!0,this.pre_dt=0;let n;t!=null?(Q.Broadphase_DYNAMIC_AABB_TREE==null&&(Q.internal=!0,Q.Broadphase_DYNAMIC_AABB_TREE=new j._nape.space.Broadphase,Q.internal=!1),n=t==Q.Broadphase_DYNAMIC_AABB_TREE):n=!0,n?this.bphase=new j._zpp.space.ZPP_DynAABBPhase(this):(Q.Broadphase_SWEEP_AND_PRUNE==null&&(Q.internal=!0,Q.Broadphase_SWEEP_AND_PRUNE=new j._nape.space.Broadphase,Q.internal=!1),t==Q.Broadphase_SWEEP_AND_PRUNE&&(this.bphase=new j._zpp.space.ZPP_SweepPhase(this))),this.time=0;let s=this;e!=null?(this.gravityx=e.x,this.gravityy=e.y):(this.gravityx=0,this.gravityy=0),this.bodies=new j._zpp.util.ZNPList_ZPP_Body,this.wrap_bodies=j._zpp.util.ZPP_BodyList.get(this.bodies),this.wrap_bodies.zpp_inner.adder=i=>this.bodies_adder(i),this.wrap_bodies.zpp_inner.subber=i=>this.bodies_subber(i),this.wrap_bodies.zpp_inner._modifiable=()=>this.bodies_modifiable(),this.compounds=new j._zpp.util.ZNPList_ZPP_Compound,this.wrap_compounds=j._zpp.util.ZPP_CompoundList.get(this.compounds),this.wrap_compounds.zpp_inner.adder=i=>this.compounds_adder(i),this.wrap_compounds.zpp_inner.subber=i=>this.compounds_subber(i),this.wrap_compounds.zpp_inner._modifiable=()=>this.compounds_modifiable(),this.kinematics=new j._zpp.util.ZNPList_ZPP_Body,this.c_arbiters_true=new j._zpp.util.ZNPList_ZPP_ColArbiter,this.c_arbiters_false=new j._zpp.util.ZNPList_ZPP_ColArbiter,this.f_arbiters=new j._zpp.util.ZNPList_ZPP_FluidArbiter,this.s_arbiters=new j._zpp.util.ZNPList_ZPP_SensorArbiter,this.islands=new xt,this.live=new j._zpp.util.ZNPList_ZPP_Body,this.wrap_live=j._zpp.util.ZPP_BodyList.get(this.live,!0),this.staticsleep=new j._zpp.util.ZNPList_ZPP_Body,this.constraints=new j._zpp.util.ZNPList_ZPP_Constraint,this.wrap_constraints=j._zpp.util.ZPP_ConstraintList.get(this.constraints),this.wrap_constraints.zpp_inner.adder=i=>this.constraints_adder(i),this.wrap_constraints.zpp_inner.subber=i=>this.constraints_subber(i),this.wrap_constraints.zpp_inner._modifiable=()=>this.constraints_modifiable(),this.live_constraints=new j._zpp.util.ZNPList_ZPP_Constraint,this.wrap_livecon=j._zpp.util.ZPP_ConstraintList.get(this.live_constraints,!0),this.__static=Cn.__static(),this.__static.zpp_inner.space=this,this.callbacks=new Tt,this.midstep=!1,this.listeners=new j._zpp.util.ZNPList_ZPP_Listener,this.wrap_listeners=j._zpp.util.ZPP_ListenerList.get(this.listeners),this.wrap_listeners.zpp_inner.adder=i=>this.listeners_adder(i),this.wrap_listeners.zpp_inner.subber=i=>this.listeners_subber(i),this.wrap_listeners.zpp_inner._modifiable=()=>this.listeners_modifiable(),this.callbackset_list=new Wt,this.mrca1=new j._zpp.util.ZNPList_ZPP_Interactor,this.mrca2=new j._zpp.util.ZNPList_ZPP_Interactor,this.prelisteners=new j._zpp.util.ZNPList_ZPP_InteractionListener,this.cbsets=new Xi(this)}getgravity(){let e=this.gravityx,t=this.gravityy;if(t==null&&(t=0),e==null&&(e=0),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let n;if(j._zpp.util.ZPP_PubPool.poolVec2==null?n=new j._nape.geom.Vec2:(n=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=n.zpp_pool,n.zpp_pool=null,n.zpp_disp=!1,n==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),n.zpp_inner==null){let s;le.zpp_pool==null?s=new le:(s=le.zpp_pool,le.zpp_pool=s.next,s.next=null),s.weak=!1,s._immutable=!1,s.x=e,s.y=t,n.zpp_inner=s,n.zpp_inner.outer=n}else{if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=n.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");if(s._isimmutable!=null&&s._isimmutable(),e!=e||t!=t)throw new Error("Error: Vec2 components cannot be NaN");let i;if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=n.zpp_inner;if(l._validate!=null&&l._validate(),n.zpp_inner.x==e){if(n!=null&&n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=n.zpp_inner;r._validate!=null&&r._validate(),i=n.zpp_inner.y==t}else i=!1;if(!i){n.zpp_inner.x=e,n.zpp_inner.y=t;let r=n.zpp_inner;r._invalidate!=null&&r._invalidate(r)}}n.zpp_inner.weak=!1,this.wrap_gravity=n,this.wrap_gravity.zpp_inner._inuse=!0,this.wrap_gravity.zpp_inner._invalidate=s=>this.gravity_invalidate(s),this.wrap_gravity.zpp_inner._validate=()=>this.gravity_validate()}gravity_invalidate(e){if(this.midstep)throw new Error("Error: Space::gravity cannot be set during space step");this.gravityx=e.x,this.gravityy=e.y;let t=new j._zpp.util.ZNPList_ZPP_Compound,n=this.bodies.head;for(;n!=null;){let l=n.elt;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1)),n=n.next}let s=this.compounds.head;for(;s!=null;){let i=s.elt;t.add(i),s=s.next}for(;t.head!=null;){let i=t.pop_unsafe(),l=i.bodies.head;for(;l!=null;){let o=l.elt;o.world||(o.component.waket=this.stamp+(this.midstep?0:1),o.type==3&&(o.kinematicDelaySleep=!0),o.component.sleeping&&this.really_wake(o,!1)),l=l.next}let r=i.compounds.head;for(;r!=null;){let a=r.elt;t.add(a),r=r.next}}}gravity_validate(){this.wrap_gravity.zpp_inner.x=this.gravityx,this.wrap_gravity.zpp_inner.y=this.gravityy}clear(){for(;this.listeners.head!=null;){let t=this.listeners.pop_unsafe();this.remListener(t)}for(;this.callbackset_list.next!=null;){let t=this.callbackset_list.pop_unsafe();t.arbiters.clear();let n=t;n.int1=n.int2=null,n.id=n.di=-1,n.freed=!0,n.next=Wt.zpp_pool,Wt.zpp_pool=n}for(;this.c_arbiters_true.head!=null;){let t=this.c_arbiters_true.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}for(t.b1=t.b2=null,t.active=!1,t.intchange=!1;t.contacts.next!=null;){let s=t.contacts,i=s.next;s.pop();let l=i;l.arbiter=null,l.next=we.zpp_pool,we.zpp_pool=l;let r=t.innards,a=r.next;r.next=a.next,a._inuse=!1,r.next==null&&(r.pushmod=!0),r.modified=!0,r.length--}let n=t;n.userdef_dyn_fric=!1,n.userdef_stat_fric=!1,n.userdef_restitution=!1,n.userdef_rfric=!1,n.__ref_edge1=n.__ref_edge2=null,n.next=ut.zpp_pool,ut.zpp_pool=n,t.pre_dt=-1}for(;this.c_arbiters_false.head!=null;){let t=this.c_arbiters_false.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}for(t.b1=t.b2=null,t.active=!1,t.intchange=!1;t.contacts.next!=null;){let s=t.contacts,i=s.next;s.pop();let l=i;l.arbiter=null,l.next=we.zpp_pool,we.zpp_pool=l;let r=t.innards,a=r.next;r.next=a.next,a._inuse=!1,r.next==null&&(r.pushmod=!0),r.modified=!0,r.length--}let n=t;n.userdef_dyn_fric=!1,n.userdef_stat_fric=!1,n.userdef_restitution=!1,n.userdef_rfric=!1,n.__ref_edge1=n.__ref_edge2=null,n.next=ut.zpp_pool,ut.zpp_pool=n,t.pre_dt=-1}for(;this.s_arbiters.head!=null;){let t=this.s_arbiters.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}t.b1=t.b2=null,t.active=!1,t.intchange=!1;let n=t;n.next=Ot.zpp_pool,Ot.zpp_pool=n}for(;this.f_arbiters.head!=null;){let t=this.f_arbiters.pop_unsafe();if(!t.cleared){let s=t.b1.arbiters,i=null,l=s.head,r=!1;for(;l!=null;){if(l.elt==t){let h,u;i==null?(h=s.head,u=h.next,s.head=u,s.head==null&&(s.pushmod=!0)):(h=i.next,u=h.next,i.next=u,u==null&&(s.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,s.modified=!0,s.length--,s.pushmod=!0,r=!0;break}i=l,l=l.next}let a=t.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==t){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}t.pair!=null&&(t.pair.arb=null,t.pair=null)}t.b1=t.b2=null,t.active=!1,t.intchange=!1;let n=t;n.next=Pt.zpp_pool,Pt.zpp_pool=n,t.pre_dt=-1}for(this.bphase.clear();this.bodies.head!=null;){let t=this.bodies.pop_unsafe();if(t.component!=null){let n=t.component.island;if(n!=null){for(;n.comps.head!=null;){let i=n.comps.pop_unsafe();i.sleeping=!1,i.island=null,i.parent=i,i.rank=0}let s=n;s.next=xt.zpp_pool,xt.zpp_pool=s}}t.removedFromSpace(),t.space=null}for(;this.constraints.head!=null;){let t=this.constraints.pop_unsafe();if(t.component!=null){let n=t.component.island;if(n!=null){for(;n.comps.head!=null;){let i=n.comps.pop_unsafe();i.sleeping=!1,i.island=null,i.parent=i,i.rank=0}let s=n;s.next=xt.zpp_pool,xt.zpp_pool=s}}t.removedFromSpace(),t.space=null}this.kinematics.clear();let e=new j._zpp.util.ZNPList_ZPP_Compound;for(;this.compounds.head!=null;){let t=this.compounds.pop_unsafe();e.add(t)}for(;e.head!=null;){let t=e.pop_unsafe();t.removedFromSpace(),t.space=null;let n=t.bodies.head;for(;n!=null;){let l=n.elt;if(l.component!=null){let r=l.component.island;if(r!=null){for(;r.comps.head!=null;){let o=r.comps.pop_unsafe();o.sleeping=!1,o.island=null,o.parent=o,o.rank=0}let a=r;a.next=xt.zpp_pool,xt.zpp_pool=a}}l.removedFromSpace(),l.space=null,n=n.next}let s=t.constraints.head;for(;s!=null;){let l=s.elt;if(l.component!=null){let r=l.component.island;if(r!=null){for(;r.comps.head!=null;){let o=r.comps.pop_unsafe();o.sleeping=!1,o.island=null,o.parent=o,o.rank=0}let a=r;a.next=xt.zpp_pool,xt.zpp_pool=a}}l.removedFromSpace(),l.space=null,s=s.next}let i=t.compounds.head;for(;i!=null;){let l=i.elt;e.add(l),i=i.next}}this.staticsleep.clear(),this.live.clear(),this.live_constraints.clear(),this.stamp=0,this.time=0,this.mrca1.clear(),this.mrca2.clear(),this.prelisteners.clear(),this.cbsets.clear()}bodies_adder(e){if(e.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Body belonging to a Compound, only the root Compound space can be set");return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.outer.zpp_inner.wrap_bodies.remove(e),this.addBody(e.zpp_inner),!0):!1}bodies_subber(e){this.remBody(e.zpp_inner)}bodies_modifiable(){if(this.midstep)throw new Error("Error: Space::bodies cannot be set during space step()")}compounds_adder(e){if(e.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of an inner Compound, only the root Compound space can be set");return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.wrap_compounds.remove(e),this.addCompound(e.zpp_inner),!0):!1}compounds_subber(e){this.remCompound(e.zpp_inner)}compounds_modifiable(){if(this.midstep)throw new Error("Error: Space::compounds cannot be set during space step()")}constraints_adder(e){if(e.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Constraint belonging to a Compound, only the root Compound space can be set");return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.outer.zpp_inner.wrap_constraints.remove(e),this.addConstraint(e.zpp_inner),!0):!1}constraints_subber(e){this.remConstraint(e.zpp_inner)}constraints_modifiable(){if(this.midstep)throw new Error("Error: Space::constraints cannot be set during space step()")}listeners_adder(e){return e.zpp_inner.space!=this?(e.zpp_inner.space!=null&&e.zpp_inner.space.outer.zpp_inner.wrap_listeners.remove(e),this.addListener(e.zpp_inner),!0):!1}listeners_subber(e){this.remListener(e.zpp_inner)}listeners_modifiable(){if(this.midstep)throw new Error("Error: Space::listeners cannot be set during space step()")}revoke_listener(e){}unrevoke_listener(e){}addListener(e){e.space=this,e.addedToSpace();let t=e.interaction!=null}remListener(e){let t=e.interaction!=null;e.removedFromSpace(),e.space=null}add_callbackset(e){let t=e.int1.cbsets,n;j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool==null?n=new j._zpp.util.ZNPNode_ZPP_CallbackSet:(n=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=n.next,n.next=null),n.elt=e;let s=n;s.next=t.head,t.head=s,t.modified=!0,t.length++;let i=e.int2.cbsets,l;j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_CallbackSet:(l=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++;let a=this.callbackset_list;e._inuse=!0;let o=e;o.next=a.next,a.next=o,a.modified=!0,a.length++}remove_callbackset(e){e.lazydel=!0;let t=e.int1.cbsets,n=null,s=t.head,i=!1;for(;s!=null;){if(s.elt==e){let p,c;n==null?(p=t.head,c=p.next,t.head=c,t.head==null&&(t.pushmod=!0)):(p=n.next,c=p.next,n.next=c,c==null&&(t.pushmod=!0));let h=p;h.elt=null,h.next=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=h,t.modified=!0,t.length--,t.pushmod=!0,i=!0;break}n=s,s=s.next}let l=e.int2.cbsets,r=null,a=l.head,o=!1;for(;a!=null;){if(a.elt==e){let p,c;r==null?(p=l.head,c=p.next,l.head=c,l.head==null&&(l.pushmod=!0)):(p=r.next,c=p.next,r.next=c,c==null&&(l.pushmod=!0));let h=p;h.elt=null,h.next=j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool,j._zpp.util.ZNPNode_ZPP_CallbackSet.zpp_pool=h,l.modified=!0,l.length--,l.pushmod=!0,o=!0;break}r=a,a=a.next}}transmitType(e,t){let n=e;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,!1)),e.type==2?this.live.remove(e):e.type==3?(this.kinematics.remove(e),this.staticsleep.remove(e)):e.type==1&&this.staticsleep.remove(e),e.type=t,e.type==3&&this.kinematics.add(e),e.type==1&&this.static_validation(e),e.component.sleeping=!0;let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0))}added_shape(e,t){if(t==null&&(t=!1),!t){let n=e.body;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,!1))}this.bphase.insert(e),e.addedToSpace()}removed_shape(e,t){t==null&&(t=!1);let n=e.body;t||n.wake();let s=null,i=n.arbiters.head;for(;i!=null;){let l=i.elt;if(l.ws1==e||l.ws2==e){if(l.present!=0){this.MRCA_chains(l.ws1,l.ws2);let a=this.mrca1.head;for(;a!=null;){let o=a.elt,p=this.mrca2.head;for(;p!=null;){let c=p.elt,h=o.cbSet,u=c.cbSet;h.validate(),u.validate();let x=h.manager,y=null,_=(h.cbpairs.length<u.cbpairs.length?h.cbpairs:u.cbpairs).head;for(;_!=null;){let M=_.elt;if(M.a==h&&M.b==u||M.a==u&&M.b==h){y=M;break}_=_.next}if(y==null){let M;Ne.zpp_pool==null?M=new Ne:(M=Ne.zpp_pool,Ne.zpp_pool=M.next,M.next=null),M.zip_listeners=!0,_t.setlt(h,u)?(M.a=h,M.b=u):(M.a=u,M.b=h),y=M,h.cbpairs.add(y),u!=h&&u.cbpairs.add(y)}if(y.zip_listeners&&(y.zip_listeners=!1,y.__validate()),y.listeners.head==null){p=p.next;continue}let f=j._zpp.phys.ZPP_Interactor.get(o,c);f.remove_arb(l),l.present--;let z=h.manager,P=null,m=(h.cbpairs.length<u.cbpairs.length?h.cbpairs:u.cbpairs).head;for(;m!=null;){let M=m.elt;if(M.a==h&&M.b==u||M.a==u&&M.b==h){P=M;break}m=m.next}if(P==null){let M;Ne.zpp_pool==null?M=new Ne:(M=Ne.zpp_pool,Ne.zpp_pool=M.next,M.next=null),M.zip_listeners=!0,_t.setlt(h,u)?(M.a=h,M.b=u):(M.a=u,M.b=h),P=M,h.cbpairs.add(P),u!=h&&u.cbpairs.add(P)}P.zip_listeners&&(P.zip_listeners=!1,P.__validate());let b=P.listeners.head;for(;b!=null;){let M=b.elt;if(M.event==1&&(M.itype&l.type)!=0&&f.empty_arb(M.itype)){let v=this.push_callback(M);v.event=1;let w=f.int1,O=f.int2,E,C=M.options1,N=w.cbTypes;if(C.nonemptyintersection(N,C.includes)&&!C.nonemptyintersection(N,C.excludes)){let Z=M.options2,S=O.cbTypes;E=Z.nonemptyintersection(S,Z.includes)&&!Z.nonemptyintersection(S,Z.excludes)}else E=!1;E?(v.int1=w,v.int2=O):(v.int1=O,v.int2=w),v.set=f}b=b.next}f.arbiters.head==null&&this.remove_callbackset(f),p=p.next}a=a.next}}if(l.b1!=n&&l.b1.type==2){let a=l.b1;a.world||(a.component.waket=this.stamp+(this.midstep?0:1),a.type==3&&(a.kinematicDelaySleep=!0),a.component.sleeping&&this.really_wake(a,!1))}if(l.b2!=n&&l.b2.type==2){let a=l.b2;a.world||(a.component.waket=this.stamp+(this.midstep?0:1),a.type==3&&(a.kinematicDelaySleep=!0),a.component.sleeping&&this.really_wake(a,!1))}if(l.cleared=!0,n==null||l.b2==n){let a=l.b1.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==l){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}}if(n==null||l.b1==n){let a=l.b2.arbiters,o=null,p=a.head,c=!1;for(;p!=null;){if(p.elt==l){let h,u;o==null?(h=a.head,u=h.next,a.head=u,a.head==null&&(a.pushmod=!0)):(h=o.next,u=h.next,o.next=u,u==null&&(a.pushmod=!0));let x=h;x.elt=null,x.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=x,a.modified=!0,a.length--,a.pushmod=!0,c=!0;break}o=p,p=p.next}}l.pair!=null&&(l.pair.arb=null,l.pair=null),l.active=!1,this.f_arbiters.modified=!0,i=n.arbiters.erase(s);continue}s=i,i=i.next}this.bphase.remove(e),e.removedFromSpace()}addConstraint(e){e.space=this,e.addedToSpace(),e.active&&(e.component.sleeping=!0,this.wake_constraint(e,!0))}remConstraint(e){e.active&&(this.wake_constraint(e,!0),this.live_constraints.remove(e)),e.removedFromSpace(),e.space=null}addCompound(e){e.space=this,e.addedToSpace();let t=e.bodies.head;for(;t!=null;){let i=t.elt;this.addBody(i),t=t.next}let n=e.constraints.head;for(;n!=null;){let i=n.elt;this.addConstraint(i),n=n.next}let s=e.compounds.head;for(;s!=null;){let i=s.elt;this.addCompound(i),s=s.next}}remCompound(e){let t=e.bodies.head;for(;t!=null;){let i=t.elt;this.remBody(i),t=t.next}let n=e.constraints.head;for(;n!=null;){let i=n.elt;this.remConstraint(i),n=n.next}let s=e.compounds.head;for(;s!=null;){let i=s.elt;this.remCompound(i),s=s.next}e.removedFromSpace(),e.space=null}addBody(e,t){t==null&&(t=-1),e.space=this,e.addedToSpace(),e.component.sleeping=!0;let n=e;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,!0));let s=e.shapes.head;for(;s!=null;){let i=s.elt,l=!0;if(l==null&&(l=!1),!l){let r=i.body;r.world||(r.component.waket=this.stamp+(this.midstep?0:1),r.type==3&&(r.kinematicDelaySleep=!0),r.component.sleeping&&this.really_wake(r,!1))}this.bphase.insert(i),i.addedToSpace(),s=s.next}e.type==1?this.static_validation(e):e.type!=2&&t!=3&&this.kinematics.add(e)}remBody(e,t){if(t==null&&(t=-1),e.type==1){let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0)),this.staticsleep.remove(e)}else if(e.type==2){let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0)),this.live.remove(e)}else{t!=3&&this.kinematics.remove(e);let s=e;s.world||(s.component.waket=this.stamp+(this.midstep?0:1),s.type==3&&(s.kinematicDelaySleep=!0),s.component.sleeping&&this.really_wake(s,!0)),this.staticsleep.remove(e)}let n=e.shapes.head;for(;n!=null;){let s=n.elt;this.removed_shape(s,!0),n=n.next}e.removedFromSpace(),e.space=null}shapesUnderPoint(e,t,n,s){return this.bphase.shapesUnderPoint(e,t,n,s)}bodiesUnderPoint(e,t,n,s){return this.bphase.bodiesUnderPoint(e,t,n,s)}shapesInAABB(e,t,n,s,i){return this.bphase.shapesInAABB(e.zpp_inner,t,n,s,i)}bodiesInAABB(e,t,n,s,i){return this.bphase.bodiesInAABB(e.zpp_inner,t,n,s,i)}shapesInCircle(e,t,n,s,i){let l=this.bphase;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=e.zpp_inner;r._validate!=null&&r._validate();let a=e.zpp_inner.x;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=e.zpp_inner;return o._validate!=null&&o._validate(),l.shapesInCircle(a,e.zpp_inner.y,t,n,s,i)}bodiesInCircle(e,t,n,s,i){let l=this.bphase;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=e.zpp_inner;r._validate!=null&&r._validate();let a=e.zpp_inner.x;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=e.zpp_inner;return o._validate!=null&&o._validate(),l.bodiesInCircle(a,e.zpp_inner.y,t,n,s,i)}shapesInShape(e,t,n,s){return this.bphase.shapesInShape(e,t,n,s)}bodiesInShape(e,t,n,s){return this.bphase.bodiesInShape(e,t,n,s)}rayCast(e,t,n){return this.bphase.rayCast(e.zpp_inner,t,n==null?null:n.zpp_inner)}rayMultiCast(e,t,n,s){return this.bphase.rayMultiCast(e.zpp_inner,t,n==null?null:n.zpp_inner,s)}convexCast(e,t,n,s){let i;if(j._zpp.geom.ZPP_ToiEvent.zpp_pool==null?i=new j._zpp.geom.ZPP_ToiEvent:(i=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=i.next,i.next=null),i.failed=!1,i.s1=i.s2=null,i.arbiter=null,e.type==0){let A=e.circle;if(A.zip_worldCOM&&A.body!=null){if(A.zip_worldCOM=!1,A.zip_localCOM){if(A.zip_localCOM=!1,A.type==1){let B=A.polygon;if(B.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(B.lverts.next.next==null)B.localCOMx=B.lverts.next.x,B.localCOMy=B.lverts.next.y;else if(B.lverts.next.next.next==null){B.localCOMx=B.lverts.next.x,B.localCOMy=B.lverts.next.y;let G=1;B.localCOMx+=B.lverts.next.next.x*G,B.localCOMy+=B.lverts.next.next.y*G;let J=.5;B.localCOMx*=J,B.localCOMy*=J}else{B.localCOMx=0,B.localCOMy=0;let G=0,J=B.lverts.next,R=J;J=J.next;let T=J;for(J=J.next;J!=null;){let ee=J;G+=T.x*(ee.y-R.y);let q=ee.y*T.x-ee.x*T.y;B.localCOMx+=(T.x+ee.x)*q,B.localCOMy+=(T.y+ee.y)*q,R=T,T=ee,J=J.next}J=B.lverts.next;let V=J;G+=T.x*(V.y-R.y);let W=V.y*T.x-V.x*T.y;B.localCOMx+=(T.x+V.x)*W,B.localCOMy+=(T.y+V.y)*W,R=T,T=V,J=J.next;let $=J;G+=T.x*($.y-R.y);let Y=$.y*T.x-$.x*T.y;B.localCOMx+=(T.x+$.x)*Y,B.localCOMy+=(T.y+$.y)*Y,G=1/(3*G);let X=G;B.localCOMx*=X,B.localCOMy*=X}}A.wrap_localCOM!=null&&(A.wrap_localCOM.zpp_inner.x=A.localCOMx,A.wrap_localCOM.zpp_inner.y=A.localCOMy)}let F=A.body;F.zip_axis&&(F.zip_axis=!1,F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot)),A.worldCOMx=A.body.posx+(A.body.axisy*A.localCOMx-A.body.axisx*A.localCOMy),A.worldCOMy=A.body.posy+(A.localCOMx*A.body.axisx+A.localCOMy*A.body.axisy)}}else if(e.type===2){let A=e.capsule;if(A.zip_worldCOM&&A.body!=null){A.zip_worldCOM=!1,A.zip_localCOM&&(A.zip_localCOM=!1,A.wrap_localCOM!=null&&(A.wrap_localCOM.zpp_inner.x=A.localCOMx,A.wrap_localCOM.zpp_inner.y=A.localCOMy));let F=A.body;F.zip_axis&&(F.zip_axis=!1,F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot)),A.worldCOMx=A.body.posx+(A.body.axisy*A.localCOMx-A.body.axisx*A.localCOMy),A.worldCOMy=A.body.posy+(A.localCOMx*A.body.axisx+A.localCOMy*A.body.axisy)}}else{let A=e.polygon;if(A.zip_gaxi&&A.body!=null){A.zip_gaxi=!1,A.validate_laxi();let F=A.body;if(F.zip_axis&&(F.zip_axis=!1,F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot)),A.zip_gverts&&A.body!=null){A.zip_gverts=!1,A.validate_lverts();let V=A.body;V.zip_axis&&(V.zip_axis=!1,V.axisx=Math.sin(V.rot),V.axisy=Math.cos(V.rot));let W=A.lverts.next,$=A.gverts.next;for(;$!=null;){let Y=$,X=W;W=W.next,Y.x=A.body.posx+(A.body.axisy*X.x-A.body.axisx*X.y),Y.y=A.body.posy+(X.x*A.body.axisx+X.y*A.body.axisy),$=$.next}}let B=A.edges.head,G=A.gverts.next,J=G;for(G=G.next;G!=null;){let V=G,W=B.elt;B=B.next,W.gp0=J,W.gp1=V,W.gnormx=A.body.axisy*W.lnormx-A.body.axisx*W.lnormy,W.gnormy=W.lnormx*A.body.axisx+W.lnormy*A.body.axisy,W.gprojection=A.body.posx*W.gnormx+A.body.posy*W.gnormy+W.lprojection,W.wrap_gnorm!=null&&(W.wrap_gnorm.zpp_inner.x=W.gnormx,W.wrap_gnorm.zpp_inner.y=W.gnormy),W.tp0=W.gp0.y*W.gnormx-W.gp0.x*W.gnormy,W.tp1=W.gp1.y*W.gnormx-W.gp1.x*W.gnormy,J=V,G=G.next}let R=A.gverts.next,T=B.elt;B=B.next,T.gp0=J,T.gp1=R,T.gnormx=A.body.axisy*T.lnormx-A.body.axisx*T.lnormy,T.gnormy=T.lnormx*A.body.axisx+T.lnormy*A.body.axisy,T.gprojection=A.body.posx*T.gnormx+A.body.posy*T.gnormy+T.lprojection,T.wrap_gnorm!=null&&(T.wrap_gnorm.zpp_inner.x=T.gnormx,T.wrap_gnorm.zpp_inner.y=T.gnormy),T.tp0=T.gp0.y*T.gnormx-T.gp0.x*T.gnormy,T.tp1=T.gp1.y*T.gnormx-T.gp1.x*T.gnormy}}let l=e.body,r=l.posx,a=l.posy;l.sweepTime=0,l.sweep_angvel=l.angvel;let o=t-l.sweepTime;if(o!=0){l.sweepTime=t;let A=o;if(l.posx+=l.velx*A,l.posy+=l.vely*A,l.angvel!=0){let F=l.sweep_angvel*o;if(l.rot+=F,F*F>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let B=F*F,G=1-.5*B,J=1-B*B/8,R=(G*l.axisx+F*l.axisy)*J;l.axisy=(G*l.axisy-F*l.axisx)*J,l.axisx=R}}}let p=l.posx,c=l.posy;e.validate_sweepRadius();let h=e.sweepRadius,u;fe.zpp_pool==null?u=new fe:(u=fe.zpp_pool,fe.zpp_pool=u.next,u.next=null);let x=r,y=p;u.minx=(x<y?x:y)-h;let d=r,_=p;u.maxx=(d>_?d:_)+h;let f=a,z=c;u.miny=(f<z?f:z)-h;let P=a,k=c;u.maxy=(P>k?P:k)+h;let m=this.convexShapeList=this.bphase.shapesInAABB(u,!1,!1,n==null?null:n.zpp_inner,this.convexShapeList),b=u;b.outer!=null&&(b.outer.zpp_inner=null,b.outer=null),b.wrap_min=b.wrap_max=null,b._invalidate=null,b._validate=null,b.next=fe.zpp_pool,fe.zpp_pool=b;let M=0,v=0;M=0,v=0;let w=0,O=0;w=0,O=0;let E=null,C=t+1;m.zpp_inner.valmod();let N=j._nape.shape.ShapeIterator.get(m);for(;;){N.zpp_inner.zpp_inner.valmod();let A=N.zpp_inner;A.zpp_inner.valmod(),A.zpp_inner.zip_length&&(A.zpp_inner.zip_length=!1,A.zpp_inner.user_length=A.zpp_inner.inner.length);let F=A.zpp_inner.user_length;N.zpp_critical=!0;let B;if(N.zpp_i<F?B=!0:(N.zpp_next=j._nape.shape.ShapeIterator.zpp_pool,j._nape.shape.ShapeIterator.zpp_pool=N,N.zpp_inner=null,B=!1),!B)break;N.zpp_critical=!1;let G=N.zpp_inner.at(N.zpp_i++);if(G!=e.outer&&(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null)!=l.outer){if(i.s1=e,i.s2=G.zpp_inner,s){G.zpp_inner.validate_sweepRadius(),(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner.sweep_angvel=(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner.angvel,(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner.sweepTime=0,gn.dynamicSweep(i,t,0,0,!0);let J=(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner,R=0-J.sweepTime;if(R!=0){J.sweepTime=0;let W=R;if(J.posx+=J.velx*W,J.posy+=J.vely*W,J.angvel!=0){let $=J.sweep_angvel*R;if(J.rot+=$,$*$>1e-4)J.axisx=Math.sin(J.rot),J.axisy=Math.cos(J.rot);else{let Y=$*$,X=1-.5*Y,ee=1-Y*Y/8,q=(X*J.axisx+$*J.axisy)*ee;J.axisy=(X*J.axisy-$*J.axisx)*ee,J.axisx=q}}}let T=(G.zpp_inner.body!=null?G.zpp_inner.body.outer:null).zpp_inner,V=G.zpp_inner;if(V.type==0||V.type===2)V.worldCOMx=T.posx+(T.axisy*V.localCOMx-T.axisx*V.localCOMy),V.worldCOMy=T.posy+(V.localCOMx*T.axisx+V.localCOMy*T.axisy);else{let W=V.polygon,$=W.lverts.next,Y=W.gverts.next;for(;Y!=null;){let I=Y,U=$;$=$.next,I.x=T.posx+(T.axisy*U.x-T.axisx*U.y),I.y=T.posy+(U.x*T.axisx+U.y*T.axisy),Y=Y.next}let X=W.edges.head,ee=W.gverts.next,q=ee;for(ee=ee.next;ee!=null;){let I=ee,U=X.elt;X=X.next,U.gnormx=T.axisy*U.lnormx-T.axisx*U.lnormy,U.gnormy=U.lnormx*T.axisx+U.lnormy*T.axisy,U.gprojection=T.posx*U.gnormx+T.posy*U.gnormy+U.lprojection,U.tp0=q.y*U.gnormx-q.x*U.gnormy,U.tp1=I.y*U.gnormx-I.x*U.gnormy,q=I,ee=ee.next}let L=W.gverts.next,D=X.elt;X=X.next,D.gnormx=T.axisy*D.lnormx-T.axisx*D.lnormy,D.gnormy=D.lnormx*T.axisx+D.lnormy*T.axisy,D.gprojection=T.posx*D.gnormx+T.posy*D.gnormy+D.lprojection,D.tp0=q.y*D.gnormx-q.x*D.gnormy,D.tp1=L.y*D.gnormx-L.x*D.gnormy}}else gn.staticSweep(i,t,0,0);i.toi*=t,i.toi>0&&i.toi<C&&(C=i.toi,M=i.axis.x,v=i.axis.y,w=i.c2.x,O=i.c2.y,E=G)}}m.clear();let Z=i;Z.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=Z;let S=0-l.sweepTime;if(S!=0){l.sweepTime=0;let A=S;if(l.posx+=l.velx*A,l.posy+=l.vely*A,l.angvel!=0){let F=l.sweep_angvel*S;if(l.rot+=F,F*F>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let B=F*F,G=1-.5*B,J=1-B*B/8,R=(G*l.axisx+F*l.axisy)*J;l.axisy=(G*l.axisy-F*l.axisx)*J,l.axisx=R}}}if(e.type==0||e.type===2)e.worldCOMx=l.posx+(l.axisy*e.localCOMx-l.axisx*e.localCOMy),e.worldCOMy=l.posy+(e.localCOMx*l.axisx+e.localCOMy*l.axisy);else{let A=e.polygon,F=A.lverts.next,B=A.gverts.next;for(;B!=null;){let W=B,$=F;F=F.next,W.x=l.posx+(l.axisy*$.x-l.axisx*$.y),W.y=l.posy+($.x*l.axisx+$.y*l.axisy),B=B.next}let G=A.edges.head,J=A.gverts.next,R=J;for(J=J.next;J!=null;){let W=J,$=G.elt;G=G.next,$.gnormx=l.axisy*$.lnormx-l.axisx*$.lnormy,$.gnormy=$.lnormx*l.axisx+$.lnormy*l.axisy,$.gprojection=l.posx*$.gnormx+l.posy*$.gnormy+$.lprojection,$.tp0=R.y*$.gnormx-R.x*$.gnormy,$.tp1=W.y*$.gnormx-W.x*$.gnormy,R=W,J=J.next}let T=A.gverts.next,V=G.elt;G=G.next,V.gnormx=l.axisy*V.lnormx-l.axisx*V.lnormy,V.gnormy=V.lnormx*l.axisx+V.lnormy*l.axisy,V.gprojection=l.posx*V.gnormx+l.posy*V.gnormy+V.lprojection,V.tp0=R.y*V.gnormx-R.x*V.gnormy,V.tp1=T.y*V.gnormx-T.x*V.gnormy}if(C<=t){let A=-M,F=-v;if(F==null&&(F=0),A==null&&(A=0),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let B;if(j._zpp.util.ZPP_PubPool.poolVec2==null?B=new j._nape.geom.Vec2:(B=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=B.zpp_pool,B.zpp_pool=null,B.zpp_disp=!1,B==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),B.zpp_inner==null){let T;le.zpp_pool==null?T=new le:(T=le.zpp_pool,le.zpp_pool=T.next,T.next=null),T.weak=!1,T._immutable=!1,T.x=A,T.y=F,B.zpp_inner=T,B.zpp_inner.outer=B}else{if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let T=B.zpp_inner;if(T._immutable)throw new Error("Error: Vec2 is immutable");if(T._isimmutable!=null&&T._isimmutable(),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let V;if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let W=B.zpp_inner;if(W._validate!=null&&W._validate(),B.zpp_inner.x==A){if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let $=B.zpp_inner;$._validate!=null&&$._validate(),V=B.zpp_inner.y==F}else V=!1;if(!V){B.zpp_inner.x=A,B.zpp_inner.y=F;let $=B.zpp_inner;$._invalidate!=null&&$._invalidate($)}}B.zpp_inner.weak=!1;let G=w,J=O;if(J==null&&(J=0),G==null&&(G=0),G!=G||J!=J)throw new Error("Error: Vec2 components cannot be NaN");let R;if(j._zpp.util.ZPP_PubPool.poolVec2==null?R=new j._nape.geom.Vec2:(R=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=R.zpp_pool,R.zpp_pool=null,R.zpp_disp=!1,R==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),R.zpp_inner==null){let T;le.zpp_pool==null?T=new le:(T=le.zpp_pool,le.zpp_pool=T.next,T.next=null),T.weak=!1,T._immutable=!1,T.x=G,T.y=J,R.zpp_inner=T,R.zpp_inner.outer=R}else{if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let T=R.zpp_inner;if(T._immutable)throw new Error("Error: Vec2 is immutable");if(T._isimmutable!=null&&T._isimmutable(),G!=G||J!=J)throw new Error("Error: Vec2 components cannot be NaN");let V;if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let W=R.zpp_inner;if(W._validate!=null&&W._validate(),R.zpp_inner.x==G){if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let $=R.zpp_inner;$._validate!=null&&$._validate(),V=R.zpp_inner.y==J}else V=!1;if(!V){R.zpp_inner.x=G,R.zpp_inner.y=J;let $=R.zpp_inner;$._invalidate!=null&&$._invalidate($)}}return R.zpp_inner.weak=!1,j._zpp.geom.ZPP_ConvexRayResult.getConvex(B,R,C,E)}else return null}prepareCast(e){if(e.type==0){let t=e.circle;if(t.zip_worldCOM&&t.body!=null){if(t.zip_worldCOM=!1,t.zip_localCOM){if(t.zip_localCOM=!1,t.type==1){let s=t.polygon;if(s.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(s.lverts.next.next==null)s.localCOMx=s.lverts.next.x,s.localCOMy=s.lverts.next.y;else if(s.lverts.next.next.next==null){s.localCOMx=s.lverts.next.x,s.localCOMy=s.lverts.next.y;let i=1;s.localCOMx+=s.lverts.next.next.x*i,s.localCOMy+=s.lverts.next.next.y*i;let l=.5;s.localCOMx*=l,s.localCOMy*=l}else{s.localCOMx=0,s.localCOMy=0;let i=0,l=s.lverts.next,r=l;l=l.next;let a=l;for(l=l.next;l!=null;){let x=l;i+=a.x*(x.y-r.y);let y=x.y*a.x-x.x*a.y;s.localCOMx+=(a.x+x.x)*y,s.localCOMy+=(a.y+x.y)*y,r=a,a=x,l=l.next}l=s.lverts.next;let o=l;i+=a.x*(o.y-r.y);let p=o.y*a.x-o.x*a.y;s.localCOMx+=(a.x+o.x)*p,s.localCOMy+=(a.y+o.y)*p,r=a,a=o,l=l.next;let c=l;i+=a.x*(c.y-r.y);let h=c.y*a.x-c.x*a.y;s.localCOMx+=(a.x+c.x)*h,s.localCOMy+=(a.y+c.y)*h,i=1/(3*i);let u=i;s.localCOMx*=u,s.localCOMy*=u}}t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy)}let n=t.body;n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}}else if(e.type===2){let t=e.capsule;if(t.zip_worldCOM&&t.body!=null){t.zip_worldCOM=!1,t.zip_localCOM&&(t.zip_localCOM=!1,t.wrap_localCOM!=null&&(t.wrap_localCOM.zpp_inner.x=t.localCOMx,t.wrap_localCOM.zpp_inner.y=t.localCOMy));let n=t.body;n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.worldCOMx=t.body.posx+(t.body.axisy*t.localCOMx-t.body.axisx*t.localCOMy),t.worldCOMy=t.body.posy+(t.localCOMx*t.body.axisx+t.localCOMy*t.body.axisy)}}else{let t=e.polygon;if(t.zip_gaxi&&t.body!=null){t.zip_gaxi=!1,t.validate_laxi();let n=t.body;if(n.zip_axis&&(n.zip_axis=!1,n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot)),t.zip_gverts&&t.body!=null){t.zip_gverts=!1,t.validate_lverts();let o=t.body;o.zip_axis&&(o.zip_axis=!1,o.axisx=Math.sin(o.rot),o.axisy=Math.cos(o.rot));let p=t.lverts.next,c=t.gverts.next;for(;c!=null;){let h=c,u=p;p=p.next,h.x=t.body.posx+(t.body.axisy*u.x-t.body.axisx*u.y),h.y=t.body.posy+(u.x*t.body.axisx+u.y*t.body.axisy),c=c.next}}let s=t.edges.head,i=t.gverts.next,l=i;for(i=i.next;i!=null;){let o=i,p=s.elt;s=s.next,p.gp0=l,p.gp1=o,p.gnormx=t.body.axisy*p.lnormx-t.body.axisx*p.lnormy,p.gnormy=p.lnormx*t.body.axisx+p.lnormy*t.body.axisy,p.gprojection=t.body.posx*p.gnormx+t.body.posy*p.gnormy+p.lprojection,p.wrap_gnorm!=null&&(p.wrap_gnorm.zpp_inner.x=p.gnormx,p.wrap_gnorm.zpp_inner.y=p.gnormy),p.tp0=p.gp0.y*p.gnormx-p.gp0.x*p.gnormy,p.tp1=p.gp1.y*p.gnormx-p.gp1.x*p.gnormy,l=o,i=i.next}let r=t.gverts.next,a=s.elt;s=s.next,a.gp0=l,a.gp1=r,a.gnormx=t.body.axisy*a.lnormx-t.body.axisx*a.lnormy,a.gnormy=a.lnormx*t.body.axisx+a.lnormy*t.body.axisy,a.gprojection=t.body.posx*a.gnormx+t.body.posy*a.gnormy+a.lprojection,a.wrap_gnorm!=null&&(a.wrap_gnorm.zpp_inner.x=a.gnormx,a.wrap_gnorm.zpp_inner.y=a.gnormy),a.tp0=a.gp0.y*a.gnormx-a.gp0.x*a.gnormy,a.tp1=a.gp1.y*a.gnormx-a.gp1.x*a.gnormy}}}convexMultiCast(e,t,n,s,i){let l;if(j._zpp.geom.ZPP_ToiEvent.zpp_pool==null?l=new j._zpp.geom.ZPP_ToiEvent:(l=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=l.next,l.next=null),l.failed=!1,l.s1=l.s2=null,l.arbiter=null,e.type==0){let C=e.circle;if(C.zip_worldCOM&&C.body!=null){if(C.zip_worldCOM=!1,C.zip_localCOM){if(C.zip_localCOM=!1,C.type==1){let Z=C.polygon;if(Z.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(Z.lverts.next.next==null)Z.localCOMx=Z.lverts.next.x,Z.localCOMy=Z.lverts.next.y;else if(Z.lverts.next.next.next==null){Z.localCOMx=Z.lverts.next.x,Z.localCOMy=Z.lverts.next.y;let S=1;Z.localCOMx+=Z.lverts.next.next.x*S,Z.localCOMy+=Z.lverts.next.next.y*S;let A=.5;Z.localCOMx*=A,Z.localCOMy*=A}else{Z.localCOMx=0,Z.localCOMy=0;let S=0,A=Z.lverts.next,F=A;A=A.next;let B=A;for(A=A.next;A!=null;){let W=A;S+=B.x*(W.y-F.y);let $=W.y*B.x-W.x*B.y;Z.localCOMx+=(B.x+W.x)*$,Z.localCOMy+=(B.y+W.y)*$,F=B,B=W,A=A.next}A=Z.lverts.next;let G=A;S+=B.x*(G.y-F.y);let J=G.y*B.x-G.x*B.y;Z.localCOMx+=(B.x+G.x)*J,Z.localCOMy+=(B.y+G.y)*J,F=B,B=G,A=A.next;let R=A;S+=B.x*(R.y-F.y);let T=R.y*B.x-R.x*B.y;Z.localCOMx+=(B.x+R.x)*T,Z.localCOMy+=(B.y+R.y)*T,S=1/(3*S);let V=S;Z.localCOMx*=V,Z.localCOMy*=V}}C.wrap_localCOM!=null&&(C.wrap_localCOM.zpp_inner.x=C.localCOMx,C.wrap_localCOM.zpp_inner.y=C.localCOMy)}let N=C.body;N.zip_axis&&(N.zip_axis=!1,N.axisx=Math.sin(N.rot),N.axisy=Math.cos(N.rot)),C.worldCOMx=C.body.posx+(C.body.axisy*C.localCOMx-C.body.axisx*C.localCOMy),C.worldCOMy=C.body.posy+(C.localCOMx*C.body.axisx+C.localCOMy*C.body.axisy)}}else if(e.type===2){let C=e.capsule;if(C.zip_worldCOM&&C.body!=null){C.zip_worldCOM=!1,C.zip_localCOM&&(C.zip_localCOM=!1,C.wrap_localCOM!=null&&(C.wrap_localCOM.zpp_inner.x=C.localCOMx,C.wrap_localCOM.zpp_inner.y=C.localCOMy));let N=C.body;N.zip_axis&&(N.zip_axis=!1,N.axisx=Math.sin(N.rot),N.axisy=Math.cos(N.rot)),C.worldCOMx=C.body.posx+(C.body.axisy*C.localCOMx-C.body.axisx*C.localCOMy),C.worldCOMy=C.body.posy+(C.localCOMx*C.body.axisx+C.localCOMy*C.body.axisy)}}else{let C=e.polygon;if(C.zip_gaxi&&C.body!=null){C.zip_gaxi=!1,C.validate_laxi();let N=C.body;if(N.zip_axis&&(N.zip_axis=!1,N.axisx=Math.sin(N.rot),N.axisy=Math.cos(N.rot)),C.zip_gverts&&C.body!=null){C.zip_gverts=!1,C.validate_lverts();let G=C.body;G.zip_axis&&(G.zip_axis=!1,G.axisx=Math.sin(G.rot),G.axisy=Math.cos(G.rot));let J=C.lverts.next,R=C.gverts.next;for(;R!=null;){let T=R,V=J;J=J.next,T.x=C.body.posx+(C.body.axisy*V.x-C.body.axisx*V.y),T.y=C.body.posy+(V.x*C.body.axisx+V.y*C.body.axisy),R=R.next}}let Z=C.edges.head,S=C.gverts.next,A=S;for(S=S.next;S!=null;){let G=S,J=Z.elt;Z=Z.next,J.gp0=A,J.gp1=G,J.gnormx=C.body.axisy*J.lnormx-C.body.axisx*J.lnormy,J.gnormy=J.lnormx*C.body.axisx+J.lnormy*C.body.axisy,J.gprojection=C.body.posx*J.gnormx+C.body.posy*J.gnormy+J.lprojection,J.wrap_gnorm!=null&&(J.wrap_gnorm.zpp_inner.x=J.gnormx,J.wrap_gnorm.zpp_inner.y=J.gnormy),J.tp0=J.gp0.y*J.gnormx-J.gp0.x*J.gnormy,J.tp1=J.gp1.y*J.gnormx-J.gp1.x*J.gnormy,A=G,S=S.next}let F=C.gverts.next,B=Z.elt;Z=Z.next,B.gp0=A,B.gp1=F,B.gnormx=C.body.axisy*B.lnormx-C.body.axisx*B.lnormy,B.gnormy=B.lnormx*C.body.axisx+B.lnormy*C.body.axisy,B.gprojection=C.body.posx*B.gnormx+C.body.posy*B.gnormy+B.lprojection,B.wrap_gnorm!=null&&(B.wrap_gnorm.zpp_inner.x=B.gnormx,B.wrap_gnorm.zpp_inner.y=B.gnormy),B.tp0=B.gp0.y*B.gnormx-B.gp0.x*B.gnormy,B.tp1=B.gp1.y*B.gnormx-B.gp1.x*B.gnormy}}let r=e.body,a=r.posx,o=r.posy;r.sweepTime=0,r.sweep_angvel=r.angvel;let p=t-r.sweepTime;if(p!=0){r.sweepTime=t;let C=p;if(r.posx+=r.velx*C,r.posy+=r.vely*C,r.angvel!=0){let N=r.sweep_angvel*p;if(r.rot+=N,N*N>1e-4)r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot);else{let Z=N*N,S=1-.5*Z,A=1-Z*Z/8,F=(S*r.axisx+N*r.axisy)*A;r.axisy=(S*r.axisy-N*r.axisx)*A,r.axisx=F}}}let c=r.posx,h=r.posy;e.validate_sweepRadius();let u=e.sweepRadius,x;fe.zpp_pool==null?x=new fe:(x=fe.zpp_pool,fe.zpp_pool=x.next,x.next=null);let y=a,d=c;x.minx=(y<d?y:d)-u;let _=a,f=c;x.maxx=(_>f?_:f)+u;let z=o,P=h;x.miny=(z<P?z:P)-u;let k=o,m=h;x.maxy=(k>m?k:m)+u;let b=this.convexShapeList=this.bphase.shapesInAABB(x,!1,!1,n==null?null:n.zpp_inner,this.convexShapeList),M=x;M.outer!=null&&(M.outer.zpp_inner=null,M.outer=null),M.wrap_min=M.wrap_max=null,M._invalidate=null,M._validate=null,M.next=fe.zpp_pool,fe.zpp_pool=M;let v=i??new j._nape.geom.ConvexResultList;b.zpp_inner.valmod();let w=j._nape.shape.ShapeIterator.get(b);for(;;){w.zpp_inner.zpp_inner.valmod();let C=w.zpp_inner;C.zpp_inner.valmod(),C.zpp_inner.zip_length&&(C.zpp_inner.zip_length=!1,C.zpp_inner.user_length=C.zpp_inner.inner.length);let N=C.zpp_inner.user_length;w.zpp_critical=!0;let Z;if(w.zpp_i<N?Z=!0:(w.zpp_next=j._nape.shape.ShapeIterator.zpp_pool,j._nape.shape.ShapeIterator.zpp_pool=w,w.zpp_inner=null,Z=!1),!Z)break;w.zpp_critical=!1;let S=w.zpp_inner.at(w.zpp_i++);if(S!=e.outer&&(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null)!=r.outer){if(l.s1=e,l.s2=S.zpp_inner,s){S.zpp_inner.validate_sweepRadius(),(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner.sweep_angvel=(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner.angvel,(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner.sweepTime=0,gn.dynamicSweep(l,t,0,0,!0);let A=(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner,F=0-A.sweepTime;if(F!=0){A.sweepTime=0;let J=F;if(A.posx+=A.velx*J,A.posy+=A.vely*J,A.angvel!=0){let R=A.sweep_angvel*F;if(A.rot+=R,R*R>1e-4)A.axisx=Math.sin(A.rot),A.axisy=Math.cos(A.rot);else{let T=R*R,V=1-.5*T,W=1-T*T/8,$=(V*A.axisx+R*A.axisy)*W;A.axisy=(V*A.axisy-R*A.axisx)*W,A.axisx=$}}}let B=(S.zpp_inner.body!=null?S.zpp_inner.body.outer:null).zpp_inner,G=S.zpp_inner;if(G.type==0||G.type===2)G.worldCOMx=B.posx+(B.axisy*G.localCOMx-B.axisx*G.localCOMy),G.worldCOMy=B.posy+(G.localCOMx*B.axisx+G.localCOMy*B.axisy);else{let J=G.polygon,R=J.lverts.next,T=J.gverts.next;for(;T!=null;){let ee=T,q=R;R=R.next,ee.x=B.posx+(B.axisy*q.x-B.axisx*q.y),ee.y=B.posy+(q.x*B.axisx+q.y*B.axisy),T=T.next}let V=J.edges.head,W=J.gverts.next,$=W;for(W=W.next;W!=null;){let ee=W,q=V.elt;V=V.next,q.gnormx=B.axisy*q.lnormx-B.axisx*q.lnormy,q.gnormy=q.lnormx*B.axisx+q.lnormy*B.axisy,q.gprojection=B.posx*q.gnormx+B.posy*q.gnormy+q.lprojection,q.tp0=$.y*q.gnormx-$.x*q.gnormy,q.tp1=ee.y*q.gnormx-ee.x*q.gnormy,$=ee,W=W.next}let Y=J.gverts.next,X=V.elt;V=V.next,X.gnormx=B.axisy*X.lnormx-B.axisx*X.lnormy,X.gnormy=X.lnormx*B.axisx+X.lnormy*B.axisy,X.gprojection=B.posx*X.gnormx+B.posy*X.gnormy+X.lprojection,X.tp0=$.y*X.gnormx-$.x*X.gnormy,X.tp1=Y.y*X.gnormx-Y.x*X.gnormy}}else gn.staticSweep(l,t,0,0);if(l.toi*=t,l.toi>0){let A=-l.axis.x,F=-l.axis.y;if(F==null&&(F=0),A==null&&(A=0),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let B;if(j._zpp.util.ZPP_PubPool.poolVec2==null?B=new j._nape.geom.Vec2:(B=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=B.zpp_pool,B.zpp_pool=null,B.zpp_disp=!1,B==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),B.zpp_inner==null){let ee;le.zpp_pool==null?ee=new le:(ee=le.zpp_pool,le.zpp_pool=ee.next,ee.next=null),ee.weak=!1,ee._immutable=!1,ee.x=A,ee.y=F,B.zpp_inner=ee,B.zpp_inner.outer=B}else{if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let ee=B.zpp_inner;if(ee._immutable)throw new Error("Error: Vec2 is immutable");if(ee._isimmutable!=null&&ee._isimmutable(),A!=A||F!=F)throw new Error("Error: Vec2 components cannot be NaN");let q;if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let L=B.zpp_inner;if(L._validate!=null&&L._validate(),B.zpp_inner.x==A){if(B!=null&&B.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=B.zpp_inner;D._validate!=null&&D._validate(),q=B.zpp_inner.y==F}else q=!1;if(!q){B.zpp_inner.x=A,B.zpp_inner.y=F;let D=B.zpp_inner;D._invalidate!=null&&D._invalidate(D)}}B.zpp_inner.weak=!1;let G=l.c2.x,J=l.c2.y;if(J==null&&(J=0),G==null&&(G=0),G!=G||J!=J)throw new Error("Error: Vec2 components cannot be NaN");let R;if(j._zpp.util.ZPP_PubPool.poolVec2==null?R=new j._nape.geom.Vec2:(R=j._zpp.util.ZPP_PubPool.poolVec2,j._zpp.util.ZPP_PubPool.poolVec2=R.zpp_pool,R.zpp_pool=null,R.zpp_disp=!1,R==j._zpp.util.ZPP_PubPool.nextVec2&&(j._zpp.util.ZPP_PubPool.nextVec2=null)),R.zpp_inner==null){let ee;le.zpp_pool==null?ee=new le:(ee=le.zpp_pool,le.zpp_pool=ee.next,ee.next=null),ee.weak=!1,ee._immutable=!1,ee.x=G,ee.y=J,R.zpp_inner=ee,R.zpp_inner.outer=R}else{if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let ee=R.zpp_inner;if(ee._immutable)throw new Error("Error: Vec2 is immutable");if(ee._isimmutable!=null&&ee._isimmutable(),G!=G||J!=J)throw new Error("Error: Vec2 components cannot be NaN");let q;if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let L=R.zpp_inner;if(L._validate!=null&&L._validate(),R.zpp_inner.x==G){if(R!=null&&R.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let D=R.zpp_inner;D._validate!=null&&D._validate(),q=R.zpp_inner.y==J}else q=!1;if(!q){R.zpp_inner.x=G,R.zpp_inner.y=J;let D=R.zpp_inner;D._invalidate!=null&&D._invalidate(D)}}R.zpp_inner.weak=!1;let T=j._zpp.geom.ZPP_ConvexRayResult.getConvex(B,R,l.toi,S),V=null,W=v.zpp_inner.inner.head;for(;W!=null;){let ee=W.elt;if(T.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(ee.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(T.zpp_inner.toiDistance<ee.zpp_inner.toiDistance)break;V=W,W=W.next}let $=v.zpp_inner.inner,Y;j._zpp.util.ZNPNode_ConvexResult.zpp_pool==null?Y=new j._zpp.util.ZNPNode_ConvexResult:(Y=j._zpp.util.ZNPNode_ConvexResult.zpp_pool,j._zpp.util.ZNPNode_ConvexResult.zpp_pool=Y.next,Y.next=null),Y.elt=T;let X=Y;V==null?(X.next=$.head,$.head=X):(X.next=V.next,V.next=X),$.pushmod=$.modified=!0,$.length++}}}b.clear();let O=l;O.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=O;let E=0-r.sweepTime;if(E!=0){r.sweepTime=0;let C=E;if(r.posx+=r.velx*C,r.posy+=r.vely*C,r.angvel!=0){let N=r.sweep_angvel*E;if(r.rot+=N,N*N>1e-4)r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot);else{let Z=N*N,S=1-.5*Z,A=1-Z*Z/8,F=(S*r.axisx+N*r.axisy)*A;r.axisy=(S*r.axisy-N*r.axisx)*A,r.axisx=F}}}if(e.type==0||e.type===2)e.worldCOMx=r.posx+(r.axisy*e.localCOMx-r.axisx*e.localCOMy),e.worldCOMy=r.posy+(e.localCOMx*r.axisx+e.localCOMy*r.axisy);else{let C=e.polygon,N=C.lverts.next,Z=C.gverts.next;for(;Z!=null;){let J=Z,R=N;N=N.next,J.x=r.posx+(r.axisy*R.x-r.axisx*R.y),J.y=r.posy+(R.x*r.axisx+R.y*r.axisy),Z=Z.next}let S=C.edges.head,A=C.gverts.next,F=A;for(A=A.next;A!=null;){let J=A,R=S.elt;S=S.next,R.gnormx=r.axisy*R.lnormx-r.axisx*R.lnormy,R.gnormy=R.lnormx*r.axisx+R.lnormy*r.axisy,R.gprojection=r.posx*R.gnormx+r.posy*R.gnormy+R.lprojection,R.tp0=F.y*R.gnormx-F.x*R.gnormy,R.tp1=J.y*R.gnormx-J.x*R.gnormy,F=J,A=A.next}let B=C.gverts.next,G=S.elt;S=S.next,G.gnormx=r.axisy*G.lnormx-r.axisx*G.lnormy,G.gnormy=G.lnormx*r.axisx+G.lnormy*r.axisy,G.gprojection=r.posx*G.gnormx+r.posy*G.gnormy+G.lprojection,G.tp0=F.y*G.gnormx-F.x*G.gnormy,G.tp1=B.y*G.gnormx-B.x*G.gnormy}return v}push_callback(e){let t;return Tt.zpp_pool==null?t=new Tt:(t=Tt.zpp_pool,Tt.zpp_pool=t.next,t.next=null),this.callbacks.push(t),t.listener=e,t}step(e,t,n){if(this.midstep)throw new Error("Error: ... REALLY?? you're going to call space.step() inside of space.step()? COME ON!!");if(this.time+=e,this.pre_dt=e,this.midstep=!0,this.stamp++,this.validation(),this.bphase.broadphase(this,!0),this.prestep(e),this.sortcontacts){let h=this.c_arbiters_false;if(h.head!=null&&h.head.next!=null){let u=h.head,x=null,y=null,d=null,_=null,f=1,z,P,k;for(;;){for(z=0,y=u,u=null,x=u;y!=null;){for(++z,d=y,P=0,k=f;d!=null&&P<f;)++P,d=d.next;for(;P>0||k>0&&d!=null;)P==0?(_=d,d=d.next,--k):k==0||d==null||!(y.elt.active&&d.elt.active)||y.elt.oc1.dist<d.elt.oc1.dist?(_=y,y=y.next,--P):(_=d,d=d.next,--k),x!=null?x.next=_:u=_,x=_;y=d}if(x.next=null,f<<=1,!(z>1))break}h.head=u,h.modified=!0,h.pushmod=!0}}this.updateVel(e),this.warmStart(),this.iterateVel(t);let s=this.kinematics.head;for(;s!=null;){let h=s.elt;h.pre_posx=h.posx,h.pre_posy=h.posy,h.pre_rot=h.rot,s=s.next}let i=this.live.head;for(;i!=null;){let h=i.elt;h.pre_posx=h.posx,h.pre_posy=h.posy,h.pre_rot=h.rot,i=i.next}this.updatePos(e),this.continuous=!0,this.continuousCollisions(e),this.continuous=!1,this.iteratePos(n);let l=this.kinematics.head;for(;l!=null;){let h=l.elt,u=!(h.posx==h.pre_posx&&h.posy==h.pre_posy),x=h.pre_rot!=h.rot;if(u){let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}if(x){h.zip_axis=!0;let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}l=l.next}let r=this.live.head;for(;r!=null;){let h=r.elt,u=!(h.posx==h.pre_posx&&h.posy==h.pre_posy),x=h.pre_rot!=h.rot;if(u){let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}if(x){h.zip_axis=!0;let y=h.shapes.head;for(;y!=null;){let d=y.elt;d.type==1&&(d.polygon.invalidate_gverts(),d.polygon.invalidate_gaxi()),d.invalidate_worldCOM(),y=y.next}h.zip_worldCOM=!0}r=r.next}let a=null,o=this.staticsleep.head;for(;o!=null;){let h=o.elt;if(h.type!=3||h.velx==0&&h.vely==0&&h.angvel==0){if(h.kinematicDelaySleep){h.kinematicDelaySleep=!1,o=o.next;continue}h.component.sleeping=!0;let u=this.staticsleep,x,y;a==null?(x=u.head,y=x.next,u.head=y,u.head==null&&(u.pushmod=!0)):(x=a.next,y=x.next,a.next=y,y==null&&(u.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=d,u.modified=!0,u.length--,u.pushmod=!0,o=y;continue}a=o,o=o.next}this.doForests(e),this.sleepArbiters(),this.midstep=!1;let p=null,c=this.callbackset_list.next;for(;c!=null;){let h=c;if(h.arbiters.head==null){let b=this.callbackset_list,M,v;p==null?(M=b.next,v=M.next,b.next=v,b.next==null&&(b.pushmod=!0)):(M=p.next,v=M.next,p.next=v,v==null&&(b.pushmod=!0)),M._inuse=!1,b.modified=!0,b.length--,b.pushmod=!0,c=v;let w=h;w.int1=w.int2=null,w.id=w.di=-1,w.freed=!0,w.next=Wt.zpp_pool,Wt.zpp_pool=w;continue}let u;u=!0;let x=h.arbiters.head;for(;x!=null;)if(x.elt.sleeping){x=x.next;continue}else{u=!1;break}let y=u,d=h.int1.cbSet,_=h.int2.cbSet,f=d.manager,z=null,k=(d.cbpairs.length<_.cbpairs.length?d.cbpairs:_.cbpairs).head;for(;k!=null;){let b=k.elt;if(b.a==d&&b.b==_||b.a==_&&b.b==d){z=b;break}k=k.next}if(z==null){let b;Ne.zpp_pool==null?b=new Ne:(b=Ne.zpp_pool,Ne.zpp_pool=b.next,b.next=null),b.zip_listeners=!0,_t.setlt(d,_)?(b.a=d,b.b=_):(b.a=_,b.b=d),z=b,d.cbpairs.add(z),_!=d&&_.cbpairs.add(z)}z.zip_listeners&&(z.zip_listeners=!1,z.__validate());let m=z.listeners.head;for(;m!=null;){let b=m.elt;if(b.event==6&&(!y||b.allowSleepingCallbacks)&&!h.empty_arb(b.itype)){let M=this.push_callback(b);M.event=6;let v=h.int1,w=h.int2,O,E=b.options1,C=v.cbTypes;if(E.nonemptyintersection(C,E.includes)&&!E.nonemptyintersection(C,E.excludes)){let N=b.options2,Z=w.cbTypes;O=N.nonemptyintersection(Z,N.includes)&&!N.nonemptyintersection(Z,N.excludes)}else O=!1;O?(M.int1=v,M.int2=w):(M.int1=w,M.int2=v),M.set=h}m=m.next}p=c,c=c.next}for(;!this.callbacks.empty();){let h=this.callbacks.pop();h.listener.type==0?h.listener.body.handler(h.wrapper_body()):h.listener.type==1?h.listener.constraint.handler(h.wrapper_con()):h.listener.type==2&&h.listener.interaction.handleri(h.wrapper_int());let u=h;u.int1=u.int2=null,u.body=null,u.constraint=null,u.listener=null,u.wrap_arbiters!=null&&(u.wrap_arbiters.zpp_inner.inner=null),u.set=null,u.next=Tt.zpp_pool,Tt.zpp_pool=u}}continuousCollisions(e){let t=2*Math.PI/e;this.bphase.broadphase(this,!1);let n=0;for(;n<1&&this.toiEvents.head!=null;){let l=null,r=2,a=!1,o=null,p=null,c=this.toiEvents.head;for(;c!=null;){let _=c.elt,f=_.s1.body,z=_.s2.body;if(f.sweepFrozen&&z.sweepFrozen)if(_.toi!=0&&Ee.testCollide_safe(_.s1,_.s2))_.toi=0;else{c=this.toiEvents.erase(p);let P=_;P.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=P;continue}if(_.frozen1!=f.sweepFrozen||_.frozen2!=z.sweepFrozen)if(_.kinematic){c=this.toiEvents.erase(p);let P=_;P.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=P;continue}else{if(_.frozen1=f.sweepFrozen,_.frozen2=z.sweepFrozen,_.frozen1){let P=_.s1;_.s1=_.s2,_.s2=P,_.frozen1=!1,_.frozen2=!0}if(gn.staticSweep(_,e,0,j._nape.Config.collisionSlopCCD),_.toi<0){c=this.toiEvents.erase(p);let P=_;P.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=P;continue}}_.toi>=0&&(_.toi<r||!a&&_.kinematic)&&(l=_,r=_.toi,a=_.kinematic,o=p),p=c,c=c.next}if(l==null)break;this.toiEvents.erase(o),n=l.toi;let h=l.s1.body,u=l.s2.body;if(!h.sweepFrozen){let _=n*e,f=_-h.sweepTime;if(f!=0){h.sweepTime=_;let P=f;if(h.posx+=h.velx*P,h.posy+=h.vely*P,h.angvel!=0){let k=h.sweep_angvel*f;if(h.rot+=k,k*k>1e-4)h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot);else{let m=k*k,b=1-.5*m,M=1-m*m/8,v=(b*h.axisx+k*h.axisy)*M;h.axisy=(b*h.axisy-k*h.axisx)*M,h.axisx=v}}}let z=l.s1;if(z.type==0||z.type===2)z.worldCOMx=h.posx+(h.axisy*z.localCOMx-h.axisx*z.localCOMy),z.worldCOMy=h.posy+(z.localCOMx*h.axisx+z.localCOMy*h.axisy);else{let P=z.polygon,k=P.lverts.next,m=P.gverts.next;for(;m!=null;){let E=m,C=k;k=k.next,E.x=h.posx+(h.axisy*C.x-h.axisx*C.y),E.y=h.posy+(C.x*h.axisx+C.y*h.axisy),m=m.next}let b=P.edges.head,M=P.gverts.next,v=M;for(M=M.next;M!=null;){let E=M,C=b.elt;b=b.next,C.gnormx=h.axisy*C.lnormx-h.axisx*C.lnormy,C.gnormy=C.lnormx*h.axisx+C.lnormy*h.axisy,C.gprojection=h.posx*C.gnormx+h.posy*C.gnormy+C.lprojection,C.tp0=v.y*C.gnormx-v.x*C.gnormy,C.tp1=E.y*C.gnormx-E.x*C.gnormy,v=E,M=M.next}let w=P.gverts.next,O=b.elt;b=b.next,O.gnormx=h.axisy*O.lnormx-h.axisx*O.lnormy,O.gnormy=O.lnormx*h.axisx+O.lnormy*h.axisy,O.gprojection=h.posx*O.gnormx+h.posy*O.gnormy+O.lprojection,O.tp0=v.y*O.gnormx-v.x*O.gnormy,O.tp1=w.y*O.gnormx-w.x*O.gnormy}}if(!u.sweepFrozen){let _=n*e,f=_-u.sweepTime;if(f!=0){u.sweepTime=_;let P=f;if(u.posx+=u.velx*P,u.posy+=u.vely*P,u.angvel!=0){let k=u.sweep_angvel*f;if(u.rot+=k,k*k>1e-4)u.axisx=Math.sin(u.rot),u.axisy=Math.cos(u.rot);else{let m=k*k,b=1-.5*m,M=1-m*m/8,v=(b*u.axisx+k*u.axisy)*M;u.axisy=(b*u.axisy-k*u.axisx)*M,u.axisx=v}}}let z=l.s2;if(z.type==0||z.type===2)z.worldCOMx=u.posx+(u.axisy*z.localCOMx-u.axisx*z.localCOMy),z.worldCOMy=u.posy+(z.localCOMx*u.axisx+z.localCOMy*u.axisy);else{let P=z.polygon,k=P.lverts.next,m=P.gverts.next;for(;m!=null;){let E=m,C=k;k=k.next,E.x=u.posx+(u.axisy*C.x-u.axisx*C.y),E.y=u.posy+(C.x*u.axisx+C.y*u.axisy),m=m.next}let b=P.edges.head,M=P.gverts.next,v=M;for(M=M.next;M!=null;){let E=M,C=b.elt;b=b.next,C.gnormx=u.axisy*C.lnormx-u.axisx*C.lnormy,C.gnormy=C.lnormx*u.axisx+C.lnormy*u.axisy,C.gprojection=u.posx*C.gnormx+u.posy*C.gnormy+C.lprojection,C.tp0=v.y*C.gnormx-v.x*C.gnormy,C.tp1=E.y*C.gnormx-E.x*C.gnormy,v=E,M=M.next}let w=P.gverts.next,O=b.elt;b=b.next,O.gnormx=u.axisy*O.lnormx-u.axisx*O.lnormy,O.gnormy=O.lnormx*u.axisx+O.lnormy*u.axisy,O.gprojection=u.posx*O.gnormx+u.posy*O.gnormy+O.lprojection,O.tp0=v.y*O.gnormx-v.x*O.gnormy,O.tp1=w.y*O.gnormx-w.x*O.gnormy}}let x=l.arbiter==null,y=this.narrowPhase(l.s1,l.s2,!0,l.arbiter,!0);if(y==null)l.arbiter!=null&&l.arbiter.pair!=null&&(l.arbiter.pair.arb=null,l.arbiter.pair=null);else if(!this.presteparb(y,e,!0)&&y.type==Ie.COL&&y.active&&(y.immState&1)!=0){let _=y.colarb,f=_.nx*_.c1.jnAcc-_.ny*_.c1.jtAcc,z=_.ny*_.c1.jnAcc+_.nx*_.c1.jtAcc,P=_.b1.imass;_.b1.velx-=f*P,_.b1.vely-=z*P,_.b1.angvel-=_.b1.iinertia*(z*_.c1.r1x-f*_.c1.r1y);let k=_.b2.imass;if(_.b2.velx+=f*k,_.b2.vely+=z*k,_.b2.angvel+=_.b2.iinertia*(z*_.c1.r2x-f*_.c1.r2y),_.hc2){let oe=_.nx*_.c2.jnAcc-_.ny*_.c2.jtAcc,he=_.ny*_.c2.jnAcc+_.nx*_.c2.jtAcc,pe=_.b1.imass;_.b1.velx-=oe*pe,_.b1.vely-=he*pe,_.b1.angvel-=_.b1.iinertia*(he*_.c2.r1x-oe*_.c2.r1y);let ce=_.b2.imass;_.b2.velx+=oe*ce,_.b2.vely+=he*ce,_.b2.angvel+=_.b2.iinertia*(he*_.c2.r2x-oe*_.c2.r2y)}_.b2.angvel+=_.jrAcc*_.b2.iinertia,_.b1.angvel-=_.jrAcc*_.b1.iinertia;let m=y.colarb,b=m.k1x+m.b2.velx-m.c1.r2y*m.b2.angvel-(m.b1.velx-m.c1.r1y*m.b1.angvel),M=m.k1y+m.b2.vely+m.c1.r2x*m.b2.angvel-(m.b1.vely+m.c1.r1x*m.b1.angvel),v=(M*m.nx-b*m.ny+m.surfacex)*m.c1.tMass,w=m.c1.friction*m.c1.jnAcc,O=m.c1.jtAcc,E=O-v;E>w?E=w:E<-w&&(E=-w),v=E-O,m.c1.jtAcc=E;let C=-m.ny*v,N=m.nx*v;if(m.b2.velx+=C*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=C*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=m.rt1b*v*m.b2.iinertia,m.b1.angvel-=m.rt1a*v*m.b1.iinertia,m.hc2){let oe=m.k2x+m.b2.velx-m.c2.r2y*m.b2.angvel-(m.b1.velx-m.c2.r1y*m.b1.angvel),he=m.k2y+m.b2.vely+m.c2.r2x*m.b2.angvel-(m.b1.vely+m.c2.r1x*m.b1.angvel);v=(he*m.nx-oe*m.ny+m.surfacex)*m.c2.tMass,w=m.c2.friction*m.c2.jnAcc,O=m.c2.jtAcc,E=O-v,E>w?E=w:E<-w&&(E=-w),v=E-O,m.c2.jtAcc=E,C=-m.ny*v,N=m.nx*v,m.b2.velx+=C*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=C*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=m.rt2b*v*m.b2.iinertia,m.b1.angvel-=m.rt2a*v*m.b1.iinertia,b=m.k1x+m.b2.velx-m.c1.r2y*m.b2.angvel-(m.b1.velx-m.c1.r1y*m.b1.angvel),M=m.k1y+m.b2.vely+m.c1.r2x*m.b2.angvel-(m.b1.vely+m.c1.r1x*m.b1.angvel),oe=m.k2x+m.b2.velx-m.c2.r2y*m.b2.angvel-(m.b1.velx-m.c2.r1y*m.b1.angvel),he=m.k2y+m.b2.vely+m.c2.r2x*m.b2.angvel-(m.b1.vely+m.c2.r1x*m.b1.angvel);let pe=m.c1.jnAcc,ce=m.c2.jnAcc,te=b*m.nx+M*m.ny+m.surfacey+m.c1.bounce-(m.Ka*pe+m.Kb*ce),ue=oe*m.nx+he*m.ny+m.surfacey+m.c2.bounce-(m.Kb*pe+m.Kc*ce),xe=-(m.kMassa*te+m.kMassb*ue),_e=-(m.kMassb*te+m.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,m.c1.jnAcc=xe,m.c2.jnAcc=_e):(xe=-m.c1.nMass*te,xe>=0&&m.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,m.c1.jnAcc=xe,m.c2.jnAcc=0):(_e=-m.c2.nMass*ue,_e>=0&&m.Kb*_e+te>=0?(te=-pe,ue=_e-ce,m.c1.jnAcc=0,m.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,m.c1.jnAcc=m.c2.jnAcc=0):(te=0,ue=0))),v=te+ue,C=m.nx*v,N=m.ny*v,m.b2.velx+=C*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=C*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=(m.rn1b*te+m.rn2b*ue)*m.b2.iinertia,m.b1.angvel-=(m.rn1a*te+m.rn2a*ue)*m.b1.iinertia}else m.radius!=0&&(v=(m.b2.angvel-m.b1.angvel)*m.rMass,w=m.rfric*m.c1.jnAcc,O=m.jrAcc,m.jrAcc-=v,m.jrAcc>w?m.jrAcc=w:m.jrAcc<-w&&(m.jrAcc=-w),v=m.jrAcc-O,m.b2.angvel+=v*m.b2.iinertia,m.b1.angvel-=v*m.b1.iinertia),b=m.k1x+m.b2.velx-m.c1.r2y*m.b2.angvel-(m.b1.velx-m.c1.r1y*m.b1.angvel),M=m.k1y+m.b2.vely+m.c1.r2x*m.b2.angvel-(m.b1.vely+m.c1.r1x*m.b1.angvel),v=(m.c1.bounce+(m.nx*b+m.ny*M)+m.surfacey)*m.c1.nMass,O=m.c1.jnAcc,E=O-v,E<0&&(E=0),v=E-O,m.c1.jnAcc=E,C=m.nx*v,N=m.ny*v,m.b2.velx+=C*m.b2.imass,m.b2.vely+=N*m.b2.imass,m.b1.velx-=C*m.b1.imass,m.b1.vely-=N*m.b1.imass,m.b2.angvel+=m.rn1b*v*m.b2.iinertia,m.b1.angvel-=m.rn1a*v*m.b1.iinertia;let Z=y.colarb,S=Z.k1x+Z.b2.velx-Z.c1.r2y*Z.b2.angvel-(Z.b1.velx-Z.c1.r1y*Z.b1.angvel),A=Z.k1y+Z.b2.vely+Z.c1.r2x*Z.b2.angvel-(Z.b1.vely+Z.c1.r1x*Z.b1.angvel),F=(A*Z.nx-S*Z.ny+Z.surfacex)*Z.c1.tMass,B=Z.c1.friction*Z.c1.jnAcc,G=Z.c1.jtAcc,J=G-F;J>B?J=B:J<-B&&(J=-B),F=J-G,Z.c1.jtAcc=J;let R=-Z.ny*F,T=Z.nx*F;if(Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=Z.rt1b*F*Z.b2.iinertia,Z.b1.angvel-=Z.rt1a*F*Z.b1.iinertia,Z.hc2){let oe=Z.k2x+Z.b2.velx-Z.c2.r2y*Z.b2.angvel-(Z.b1.velx-Z.c2.r1y*Z.b1.angvel),he=Z.k2y+Z.b2.vely+Z.c2.r2x*Z.b2.angvel-(Z.b1.vely+Z.c2.r1x*Z.b1.angvel);F=(he*Z.nx-oe*Z.ny+Z.surfacex)*Z.c2.tMass,B=Z.c2.friction*Z.c2.jnAcc,G=Z.c2.jtAcc,J=G-F,J>B?J=B:J<-B&&(J=-B),F=J-G,Z.c2.jtAcc=J,R=-Z.ny*F,T=Z.nx*F,Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=Z.rt2b*F*Z.b2.iinertia,Z.b1.angvel-=Z.rt2a*F*Z.b1.iinertia,S=Z.k1x+Z.b2.velx-Z.c1.r2y*Z.b2.angvel-(Z.b1.velx-Z.c1.r1y*Z.b1.angvel),A=Z.k1y+Z.b2.vely+Z.c1.r2x*Z.b2.angvel-(Z.b1.vely+Z.c1.r1x*Z.b1.angvel),oe=Z.k2x+Z.b2.velx-Z.c2.r2y*Z.b2.angvel-(Z.b1.velx-Z.c2.r1y*Z.b1.angvel),he=Z.k2y+Z.b2.vely+Z.c2.r2x*Z.b2.angvel-(Z.b1.vely+Z.c2.r1x*Z.b1.angvel);let pe=Z.c1.jnAcc,ce=Z.c2.jnAcc,te=S*Z.nx+A*Z.ny+Z.surfacey+Z.c1.bounce-(Z.Ka*pe+Z.Kb*ce),ue=oe*Z.nx+he*Z.ny+Z.surfacey+Z.c2.bounce-(Z.Kb*pe+Z.Kc*ce),xe=-(Z.kMassa*te+Z.kMassb*ue),_e=-(Z.kMassb*te+Z.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,Z.c1.jnAcc=xe,Z.c2.jnAcc=_e):(xe=-Z.c1.nMass*te,xe>=0&&Z.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,Z.c1.jnAcc=xe,Z.c2.jnAcc=0):(_e=-Z.c2.nMass*ue,_e>=0&&Z.Kb*_e+te>=0?(te=-pe,ue=_e-ce,Z.c1.jnAcc=0,Z.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,Z.c1.jnAcc=Z.c2.jnAcc=0):(te=0,ue=0))),F=te+ue,R=Z.nx*F,T=Z.ny*F,Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=(Z.rn1b*te+Z.rn2b*ue)*Z.b2.iinertia,Z.b1.angvel-=(Z.rn1a*te+Z.rn2a*ue)*Z.b1.iinertia}else Z.radius!=0&&(F=(Z.b2.angvel-Z.b1.angvel)*Z.rMass,B=Z.rfric*Z.c1.jnAcc,G=Z.jrAcc,Z.jrAcc-=F,Z.jrAcc>B?Z.jrAcc=B:Z.jrAcc<-B&&(Z.jrAcc=-B),F=Z.jrAcc-G,Z.b2.angvel+=F*Z.b2.iinertia,Z.b1.angvel-=F*Z.b1.iinertia),S=Z.k1x+Z.b2.velx-Z.c1.r2y*Z.b2.angvel-(Z.b1.velx-Z.c1.r1y*Z.b1.angvel),A=Z.k1y+Z.b2.vely+Z.c1.r2x*Z.b2.angvel-(Z.b1.vely+Z.c1.r1x*Z.b1.angvel),F=(Z.c1.bounce+(Z.nx*S+Z.ny*A)+Z.surfacey)*Z.c1.nMass,G=Z.c1.jnAcc,J=G-F,J<0&&(J=0),F=J-G,Z.c1.jnAcc=J,R=Z.nx*F,T=Z.ny*F,Z.b2.velx+=R*Z.b2.imass,Z.b2.vely+=T*Z.b2.imass,Z.b1.velx-=R*Z.b1.imass,Z.b1.vely-=T*Z.b1.imass,Z.b2.angvel+=Z.rn1b*F*Z.b2.iinertia,Z.b1.angvel-=Z.rn1a*F*Z.b1.iinertia;let V=y.colarb,W=V.k1x+V.b2.velx-V.c1.r2y*V.b2.angvel-(V.b1.velx-V.c1.r1y*V.b1.angvel),$=V.k1y+V.b2.vely+V.c1.r2x*V.b2.angvel-(V.b1.vely+V.c1.r1x*V.b1.angvel),Y=($*V.nx-W*V.ny+V.surfacex)*V.c1.tMass,X=V.c1.friction*V.c1.jnAcc,ee=V.c1.jtAcc,q=ee-Y;q>X?q=X:q<-X&&(q=-X),Y=q-ee,V.c1.jtAcc=q;let L=-V.ny*Y,D=V.nx*Y;if(V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=V.rt1b*Y*V.b2.iinertia,V.b1.angvel-=V.rt1a*Y*V.b1.iinertia,V.hc2){let oe=V.k2x+V.b2.velx-V.c2.r2y*V.b2.angvel-(V.b1.velx-V.c2.r1y*V.b1.angvel),he=V.k2y+V.b2.vely+V.c2.r2x*V.b2.angvel-(V.b1.vely+V.c2.r1x*V.b1.angvel);Y=(he*V.nx-oe*V.ny+V.surfacex)*V.c2.tMass,X=V.c2.friction*V.c2.jnAcc,ee=V.c2.jtAcc,q=ee-Y,q>X?q=X:q<-X&&(q=-X),Y=q-ee,V.c2.jtAcc=q,L=-V.ny*Y,D=V.nx*Y,V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=V.rt2b*Y*V.b2.iinertia,V.b1.angvel-=V.rt2a*Y*V.b1.iinertia,W=V.k1x+V.b2.velx-V.c1.r2y*V.b2.angvel-(V.b1.velx-V.c1.r1y*V.b1.angvel),$=V.k1y+V.b2.vely+V.c1.r2x*V.b2.angvel-(V.b1.vely+V.c1.r1x*V.b1.angvel),oe=V.k2x+V.b2.velx-V.c2.r2y*V.b2.angvel-(V.b1.velx-V.c2.r1y*V.b1.angvel),he=V.k2y+V.b2.vely+V.c2.r2x*V.b2.angvel-(V.b1.vely+V.c2.r1x*V.b1.angvel);let pe=V.c1.jnAcc,ce=V.c2.jnAcc,te=W*V.nx+$*V.ny+V.surfacey+V.c1.bounce-(V.Ka*pe+V.Kb*ce),ue=oe*V.nx+he*V.ny+V.surfacey+V.c2.bounce-(V.Kb*pe+V.Kc*ce),xe=-(V.kMassa*te+V.kMassb*ue),_e=-(V.kMassb*te+V.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,V.c1.jnAcc=xe,V.c2.jnAcc=_e):(xe=-V.c1.nMass*te,xe>=0&&V.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,V.c1.jnAcc=xe,V.c2.jnAcc=0):(_e=-V.c2.nMass*ue,_e>=0&&V.Kb*_e+te>=0?(te=-pe,ue=_e-ce,V.c1.jnAcc=0,V.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,V.c1.jnAcc=V.c2.jnAcc=0):(te=0,ue=0))),Y=te+ue,L=V.nx*Y,D=V.ny*Y,V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=(V.rn1b*te+V.rn2b*ue)*V.b2.iinertia,V.b1.angvel-=(V.rn1a*te+V.rn2a*ue)*V.b1.iinertia}else V.radius!=0&&(Y=(V.b2.angvel-V.b1.angvel)*V.rMass,X=V.rfric*V.c1.jnAcc,ee=V.jrAcc,V.jrAcc-=Y,V.jrAcc>X?V.jrAcc=X:V.jrAcc<-X&&(V.jrAcc=-X),Y=V.jrAcc-ee,V.b2.angvel+=Y*V.b2.iinertia,V.b1.angvel-=Y*V.b1.iinertia),W=V.k1x+V.b2.velx-V.c1.r2y*V.b2.angvel-(V.b1.velx-V.c1.r1y*V.b1.angvel),$=V.k1y+V.b2.vely+V.c1.r2x*V.b2.angvel-(V.b1.vely+V.c1.r1x*V.b1.angvel),Y=(V.c1.bounce+(V.nx*W+V.ny*$)+V.surfacey)*V.c1.nMass,ee=V.c1.jnAcc,q=ee-Y,q<0&&(q=0),Y=q-ee,V.c1.jnAcc=q,L=V.nx*Y,D=V.ny*Y,V.b2.velx+=L*V.b2.imass,V.b2.vely+=D*V.b2.imass,V.b1.velx-=L*V.b1.imass,V.b1.vely-=D*V.b1.imass,V.b2.angvel+=V.rn1b*Y*V.b2.iinertia,V.b1.angvel-=V.rn1a*Y*V.b1.iinertia;let I=y.colarb,U=I.k1x+I.b2.velx-I.c1.r2y*I.b2.angvel-(I.b1.velx-I.c1.r1y*I.b1.angvel),H=I.k1y+I.b2.vely+I.c1.r2x*I.b2.angvel-(I.b1.vely+I.c1.r1x*I.b1.angvel),K=(H*I.nx-U*I.ny+I.surfacex)*I.c1.tMass,ne=I.c1.friction*I.c1.jnAcc,re=I.c1.jtAcc,se=re-K;se>ne?se=ne:se<-ne&&(se=-ne),K=se-re,I.c1.jtAcc=se;let ie=-I.ny*K,ae=I.nx*K;if(I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=I.rt1b*K*I.b2.iinertia,I.b1.angvel-=I.rt1a*K*I.b1.iinertia,I.hc2){let oe=I.k2x+I.b2.velx-I.c2.r2y*I.b2.angvel-(I.b1.velx-I.c2.r1y*I.b1.angvel),he=I.k2y+I.b2.vely+I.c2.r2x*I.b2.angvel-(I.b1.vely+I.c2.r1x*I.b1.angvel);K=(he*I.nx-oe*I.ny+I.surfacex)*I.c2.tMass,ne=I.c2.friction*I.c2.jnAcc,re=I.c2.jtAcc,se=re-K,se>ne?se=ne:se<-ne&&(se=-ne),K=se-re,I.c2.jtAcc=se,ie=-I.ny*K,ae=I.nx*K,I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=I.rt2b*K*I.b2.iinertia,I.b1.angvel-=I.rt2a*K*I.b1.iinertia,U=I.k1x+I.b2.velx-I.c1.r2y*I.b2.angvel-(I.b1.velx-I.c1.r1y*I.b1.angvel),H=I.k1y+I.b2.vely+I.c1.r2x*I.b2.angvel-(I.b1.vely+I.c1.r1x*I.b1.angvel),oe=I.k2x+I.b2.velx-I.c2.r2y*I.b2.angvel-(I.b1.velx-I.c2.r1y*I.b1.angvel),he=I.k2y+I.b2.vely+I.c2.r2x*I.b2.angvel-(I.b1.vely+I.c2.r1x*I.b1.angvel);let pe=I.c1.jnAcc,ce=I.c2.jnAcc,te=U*I.nx+H*I.ny+I.surfacey+I.c1.bounce-(I.Ka*pe+I.Kb*ce),ue=oe*I.nx+he*I.ny+I.surfacey+I.c2.bounce-(I.Kb*pe+I.Kc*ce),xe=-(I.kMassa*te+I.kMassb*ue),_e=-(I.kMassb*te+I.kMassc*ue);xe>=0&&_e>=0?(te=xe-pe,ue=_e-ce,I.c1.jnAcc=xe,I.c2.jnAcc=_e):(xe=-I.c1.nMass*te,xe>=0&&I.Kb*xe+ue>=0?(te=xe-pe,ue=-ce,I.c1.jnAcc=xe,I.c2.jnAcc=0):(_e=-I.c2.nMass*ue,_e>=0&&I.Kb*_e+te>=0?(te=-pe,ue=_e-ce,I.c1.jnAcc=0,I.c2.jnAcc=_e):te>=0&&ue>=0?(te=-pe,ue=-ce,I.c1.jnAcc=I.c2.jnAcc=0):(te=0,ue=0))),K=te+ue,ie=I.nx*K,ae=I.ny*K,I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=(I.rn1b*te+I.rn2b*ue)*I.b2.iinertia,I.b1.angvel-=(I.rn1a*te+I.rn2a*ue)*I.b1.iinertia}else I.radius!=0&&(K=(I.b2.angvel-I.b1.angvel)*I.rMass,ne=I.rfric*I.c1.jnAcc,re=I.jrAcc,I.jrAcc-=K,I.jrAcc>ne?I.jrAcc=ne:I.jrAcc<-ne&&(I.jrAcc=-ne),K=I.jrAcc-re,I.b2.angvel+=K*I.b2.iinertia,I.b1.angvel-=K*I.b1.iinertia),U=I.k1x+I.b2.velx-I.c1.r2y*I.b2.angvel-(I.b1.velx-I.c1.r1y*I.b1.angvel),H=I.k1y+I.b2.vely+I.c1.r2x*I.b2.angvel-(I.b1.vely+I.c1.r1x*I.b1.angvel),K=(I.c1.bounce+(I.nx*U+I.ny*H)+I.surfacey)*I.c1.nMass,re=I.c1.jnAcc,se=re-K,se<0&&(se=0),K=se-re,I.c1.jnAcc=se,ie=I.nx*K,ae=I.ny*K,I.b2.velx+=ie*I.b2.imass,I.b2.vely+=ae*I.b2.imass,I.b1.velx-=ie*I.b1.imass,I.b1.vely-=ae*I.b1.imass,I.b2.angvel+=I.rn1b*K*I.b2.iinertia,I.b1.angvel-=I.rn1a*K*I.b1.iinertia;h.sweep_angvel=h.angvel%t,u.sweep_angvel=u.angvel%t}if(y!=null&&y.active&&(y.immState&1)!=0&&y.type==Ie.COL){if(!h.sweepFrozen&&h.type!=3)if(h.sweepFrozen=!0,l.failed)h.angvel=h.sweep_angvel=0;else if(l.slipped){let _=h;_.sweep_angvel*=j._nape.Config.angularCCDSlipScale,h.angvel=_.sweep_angvel}else h.angvel=h.sweep_angvel;if(!u.sweepFrozen&&u.type!=3)if(u.sweepFrozen=!0,l.failed)u.angvel=u.sweep_angvel=0;else if(l.slipped){let _=u;_.sweep_angvel*=j._nape.Config.angularCCDSlipScale,u.angvel=_.sweep_angvel}else u.angvel=u.sweep_angvel}let d=l;d.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=d}for(;this.toiEvents.head!=null;){let r=this.toiEvents.pop_unsafe();r.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=r}let s=this.kinematics.head;for(;s!=null;){let l=s.elt,r=e-l.sweepTime;if(r!=0){l.sweepTime=e;let a=r;if(l.posx+=l.velx*a,l.posy+=l.vely*a,l.angvel!=0){let o=l.sweep_angvel*r;if(l.rot+=o,o*o>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let p=o*o,c=1-.5*p,h=1-p*p/8,u=(c*l.axisx+o*l.axisy)*h;l.axisy=(c*l.axisy-o*l.axisx)*h,l.axisx=u}}}l.sweepTime=0,s=s.next}let i=this.live.head;for(;i!=null;){let l=i.elt;if(!l.sweepFrozen){let r=e-l.sweepTime;if(r!=0){l.sweepTime=e;let a=r;if(l.posx+=l.velx*a,l.posy+=l.vely*a,l.angvel!=0){let o=l.sweep_angvel*r;if(l.rot+=o,o*o>1e-4)l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot);else{let p=o*o,c=1-.5*p,h=1-p*p/8,u=(c*l.axisx+o*l.axisy)*h;l.axisy=(c*l.axisy-o*l.axisx)*h,l.axisx=u}}}}l.sweepTime=0,i=i.next}}continuousEvent(e,t,n,s,i){if(e.body.sweepFrozen&&t.body.sweepFrozen||e.body.disableCCD||t.body.disableCCD)return s;let l;if(s!=null&&s.colarb==null)l=!0;else{let o=e.body,p=t.body,c;c=!1;let h=o.constraints.head;for(;h!=null;){let y=h.elt;if(y.ignore&&y.pair_exists(o.id,p.id)){c=!0;break}h=h.next}let u,x;if(c)x=!1;else{let y=e;for(;y!=null&&y.group==null;)y.ishape!=null?y=y.ishape.body:y.icompound!=null?y=y.icompound.compound:y=y.ibody.compound;let d=y==null?null:y.group,_;if(d==null)_=!1;else{let f=t;for(;f!=null&&f.group==null;)f.ishape!=null?f=f.ishape.body:f.icompound!=null?f=f.icompound.compound:f=f.ibody.compound;let z=f==null?null:f.group;if(z==null)_=!1;else{let P=!1;for(;d!=null&&z!=null;){if(d==z){P=d.ignore;break}d.depth<z.depth?z=z.group:d=d.group}_=P}}x=!_}if(x){let y;if(e.sensorEnabled||t.sensorEnabled){let d=e.filter,_=t.filter;y=(d.sensorMask&_.sensorGroup)!=0&&(_.sensorMask&d.sensorGroup)!=0}else y=!1;if(y)u=2;else{let d;if(e.fluidEnabled||t.fluidEnabled){let _=e.filter,f=t.filter;d=(_.fluidMask&f.fluidGroup)!=0&&(f.fluidMask&_.fluidGroup)!=0}else d=!1;if(d&&!(o.imass==0&&p.imass==0&&o.iinertia==0&&p.iinertia==0))u=0;else{let _=e.filter,f=t.filter;u=(_.collisionMask&f.collisionGroup)!=0&&(f.collisionMask&_.collisionGroup)!=0&&!(o.imass==0&&p.imass==0&&o.iinertia==0&&p.iinertia==0)?1:-1}}}else u=-1;l=u<=0}if(l)return s;let r=e.body,a=t.body;if(n||r.bullet||a.bullet){let o;j._zpp.geom.ZPP_ToiEvent.zpp_pool==null?o=new j._zpp.geom.ZPP_ToiEvent:(o=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=o.next,o.next=null),o.failed=!1,o.s1=o.s2=null,o.arbiter=null;let p=r.type==3||a.type==3;if(n&&!p)e.body.type!=2?(o.s2=e,o.s1=t):(o.s1=e,o.s2=t),o.kinematic=!1,gn.staticSweep(o,this.pre_dt,0,j._nape.Config.collisionSlopCCD);else if(o.s1=e,o.s2=t,o.kinematic=p,o.s1.body.sweepFrozen||o.s2.body.sweepFrozen){if(o.s1.body.sweepFrozen){let c=o.s1;o.s1=o.s2,o.s2=c,o.frozen1=!1,o.frozen2=!0}gn.staticSweep(o,this.pre_dt,0,j._nape.Config.collisionSlopCCD)}else gn.dynamicSweep(o,this.pre_dt,0,j._nape.Config.collisionSlopCCD,!1);if(n&&o.toi<0||o.failed){let c=o;c.next=j._zpp.geom.ZPP_ToiEvent.zpp_pool,j._zpp.geom.ZPP_ToiEvent.zpp_pool=c}else this.toiEvents.add(o),o.frozen1=o.s1.body.sweepFrozen,o.frozen2=o.s2.body.sweepFrozen,o.arbiter=s!=null?s.colarb:null}return s}bodyCbWake(e){if(e.type==2&&e.cbSet!=null)if(this.midstep){let t=e.cbSet.bodylisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=2){t=t.next;continue}let s=this.push_callback(n);s.event=2,s.body=e,t=t.next}}else e.component.woken=!0}bodyCbSleep(e){if(e.type==2&&e.cbSet!=null){let t=e.cbSet.bodylisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=3){t=t.next;continue}let s=this.push_callback(n);s.event=3,s.body=e,t=t.next}}}constraintCbWake(e){if(e.cbSet!=null)if(this.midstep){let t=e.cbSet.conlisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=2){t=t.next;continue}let s=this.push_callback(n);s.event=2,s.constraint=e,t=t.next}}else e.component.woken=!0}constraintCbSleep(e){if(e.cbSet!=null){let t=e.cbSet.conlisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=3){t=t.next;continue}let s=this.push_callback(n);s.event=3,s.constraint=e,t=t.next}}}constraintCbBreak(e){if(e.cbSet!=null){let t=e.cbSet.conlisteners.head;for(;t!=null;){let n=t.elt;if(n.event!=4){t=t.next;continue}let s=this.push_callback(n);s.event=4,s.constraint=e,t=t.next}}}nullListenerType(e,t){let n=new j._zpp.util.ZNPList_ZPP_Interactor,s=e.interactors.head;for(;s!=null;){let i=s.elt;n.add(i),s=s.next}if(e!=t){let i=t.interactors.head;for(;i!=null;){let l=i.elt;n.add(l),i=i.next}}for(;n.head!=null;){let i=n.pop_unsafe();if(i.icompound!=null){let l=i.icompound,r=l.bodies.head;for(;r!=null;){let o=r.elt;n.add(o),r=r.next}let a=l.compounds.head;for(;a!=null;){let o=a.elt;n.add(o),a=a.next}}else{let l=i.ibody!=null?i.ibody:i.ishape.body,r=i.ishape!=null?i.ishape:null,a=l.arbiters.head;for(;a!=null;){let o=a.elt;if(o.present==0){a=a.next;continue}if(r!=null&&!(o.ws1==r||o.ws2==r)){a=a.next;continue}this.MRCA_chains(o.ws1,o.ws2);let p=this.mrca1.head;for(;p!=null;){let c=p.elt;if(c.cbSet!=e&&c.cbSet!=t){p=p.next;continue}let h=this.mrca2.head;for(;h!=null;){let u=h.elt;if(c.cbSet==e&&u.cbSet!=t||c.cbSet==t&&u.cbSet!=e){h=h.next;continue}let x=j._zpp.phys.ZPP_Interactor.get(c,u);if(x!=null){for(;x.arbiters.head!=null;){let y=x.arbiters.pop_unsafe();y.present--}this.remove_callbackset(x)}h=h.next}p=p.next}a=a.next}}}}nullInteractorType(e,t){if(t==null&&(t=e),e.icompound!=null){let n=e.icompound,s=n.bodies.head;for(;s!=null;){let l=s.elt;this.nullInteractorType(l,t),s=s.next}let i=n.compounds.head;for(;i!=null;){let l=i.elt;this.nullInteractorType(l,t),i=i.next}}else{let n=e.ibody!=null?e.ibody:e.ishape.body,s=e.ishape!=null?e.ishape:null,i=n.arbiters.head;for(;i!=null;){let l=i.elt;if(l.present==0){i=i.next;continue}if(s!=null&&!(l.ws1==s||l.ws2==s)){i=i.next;continue}this.MRCA_chains(l.ws1,l.ws2);let r=this.mrca1.head;for(;r!=null;){let a=r.elt,o=this.mrca2.head;for(;o!=null;){let p=o.elt;if(a!=t&&p!=t){o=o.next;continue}let c=j._zpp.phys.ZPP_Interactor.get(a,p);c!=null&&(l.present--,c.remove_arb(l),c.arbiters.head==null&&this.remove_callbackset(c)),o=o.next}r=r.next}i=i.next}}}freshListenerType(e,t){let n=new j._zpp.util.ZNPList_ZPP_Interactor,s=e.interactors.head;for(;s!=null;){let i=s.elt;n.add(i),s=s.next}if(e!=t){let i=t.interactors.head;for(;i!=null;){let l=i.elt;n.add(l),i=i.next}}for(;n.head!=null;){let i=n.pop_unsafe();if(i.icompound!=null){let l=i.icompound,r=l.bodies.head;for(;r!=null;){let o=r.elt;n.add(o),r=r.next}let a=l.compounds.head;for(;a!=null;){let o=a.elt;n.add(o),a=a.next}}else{let l=i.ibody!=null?i.ibody:i.ishape.body,r=i.ishape!=null?i.ishape:null,a=l.arbiters.head;for(;a!=null;){let o=a.elt;if(!o.presentable){a=a.next;continue}if(r!=null&&!(o.ws1==r||o.ws2==r)){a=a.next;continue}this.MRCA_chains(o.ws1,o.ws2);let p=this.mrca1.head;for(;p!=null;){let c=p.elt;if(c.cbSet!=e&&c.cbSet!=t){p=p.next;continue}let h=this.mrca2.head;for(;h!=null;){let u=h.elt;if(c.cbSet==e&&u.cbSet!=t||c.cbSet==t&&u.cbSet!=e){h=h.next;continue}let x=j._zpp.phys.ZPP_Interactor.get(c,u);x==null&&(x=Wt.get(c,u),this.add_callbackset(x));let y,d;d=!1;let _=x.arbiters.head;for(;_!=null;){if(_.elt==o){d=!0;break}_=_.next}if(d)y=!1;else{let f=x.arbiters,z;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?z=new j._zpp.util.ZNPNode_ZPP_Arbiter:(z=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=z.next,z.next=null),z.elt=o;let P=z;P.next=f.head,f.head=P,f.modified=!0,f.length++,y=!0}y&&o.present++,h=h.next}p=p.next}a=a.next}}}}freshInteractorType(e,t){if(t==null&&(t=e),e.icompound!=null){let n=e.icompound,s=n.bodies.head;for(;s!=null;){let l=s.elt;this.freshInteractorType(l,t),s=s.next}let i=n.compounds.head;for(;i!=null;){let l=i.elt;this.freshInteractorType(l,t),i=i.next}}else{let n=e.ibody!=null?e.ibody:e.ishape.body,s=e.ishape!=null?e.ishape:null,i=n.arbiters.head;for(;i!=null;){let l=i.elt;if(!l.presentable){i=i.next;continue}if(s!=null&&!(l.ws1==s||l.ws2==s)){i=i.next;continue}this.MRCA_chains(l.ws1,l.ws2);let r=this.mrca1.head;for(;r!=null;){let a=r.elt,o=this.mrca2.head;for(;o!=null;){let p=o.elt;if(a!=t&&p!=t){o=o.next;continue}let c=a.cbSet,h=p.cbSet;c.validate(),h.validate();let u=c.manager,x=null,d=(c.cbpairs.length<h.cbpairs.length?c.cbpairs:h.cbpairs).head;for(;d!=null;){let _=d.elt;if(_.a==c&&_.b==h||_.a==h&&_.b==c){x=_;break}d=d.next}if(x==null){let _;Ne.zpp_pool==null?_=new Ne:(_=Ne.zpp_pool,Ne.zpp_pool=_.next,_.next=null),_.zip_listeners=!0,_t.setlt(c,h)?(_.a=c,_.b=h):(_.a=h,_.b=c),x=_,c.cbpairs.add(x),h!=c&&h.cbpairs.add(x)}if(x.zip_listeners&&(x.zip_listeners=!1,x.__validate()),x.listeners.head!=null){let _=j._zpp.phys.ZPP_Interactor.get(a,p);_==null&&(_=Wt.get(a,p),this.add_callbackset(_));let f,z;z=!1;let P=_.arbiters.head;for(;P!=null;){if(P.elt==l){z=!0;break}P=P.next}if(z)f=!1;else{let k=_.arbiters,m;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_Arbiter:(m=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=m.next,m.next=null),m.elt=l;let b=m;b.next=k.head,k.head=b,k.modified=!0,k.length++,f=!0}f&&l.present++}o=o.next}r=r.next}i=i.next}}}wakeCompound(e){let t=e.bodies.head;for(;t!=null;){let l=t.elt;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1)),t=t.next}let n=e.constraints.head;for(;n!=null;){let i=n.elt;this.wake_constraint(i),n=n.next}let s=e.compounds.head;for(;s!=null;){let i=s.elt;this.wakeCompound(i),s=s.next}}wakeIsland(e){for(;e.comps.head!=null;){let n=e.comps.pop_unsafe();if(n.waket=this.stamp+(this.midstep?0:1),n.isBody){let s=n.body;this.live.add(s);let i=s.arbiters.head;for(;i!=null;){let l=i.elt;if(l.sleeping)if(l.sleeping=!1,l.up_stamp+=this.stamp-l.sleep_stamp,l.type==Ie.COL){let r=l.colarb;if(r.stat){let a=this.c_arbiters_true,o;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(o=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=o.next,o.next=null),o.elt=r;let p=o;p.next=a.head,a.head=p,a.modified=!0,a.length++}else{let a=this.c_arbiters_false,o;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(o=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=o.next,o.next=null),o.elt=r;let p=o;p.next=a.head,a.head=p,a.modified=!0,a.length++}}else if(l.type==Ie.FLUID){let r=this.f_arbiters,a=l.fluidarb,o;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(o=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}else{let r=this.s_arbiters,a=l.sensorarb,o;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(o=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}i=i.next}if(this.bodyCbWake(s),n.sleeping=!1,n.island=null,n.parent=n,n.rank=0,s.type!=1){let l=s.shapes.head;for(;l!=null;){let r=l.elt;r.node!=null&&this.bphase.sync(r),l=l.next}}}else{let s=n.constraint,i=this.live_constraints,l;j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_Constraint:(l=j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool,j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool=l.next,l.next=null),l.elt=s;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++,this.constraintCbWake(s),n.sleeping=!1,n.island=null,n.parent=n,n.rank=0}}let t=e;t.next=xt.zpp_pool,xt.zpp_pool=t}non_inlined_wake(e,t){t==null&&(t=!1);let n=e;n.world||(n.component.waket=this.stamp+(this.midstep?0:1),n.type==3&&(n.kinematicDelaySleep=!0),n.component.sleeping&&this.really_wake(n,t))}really_wake(e,t){if(t==null&&(t=!1),e.component.island==null){if(e.component.sleeping=!1,e.type==3||e.type==1){let i=this.staticsleep,l;j._zpp.util.ZNPNode_ZPP_Body.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_Body:(l=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++}else{let i=this.live,l;j._zpp.util.ZNPNode_ZPP_Body.zpp_pool==null?l=new j._zpp.util.ZNPNode_ZPP_Body:(l=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=l.next,l.next=null),l.elt=e;let r=l;r.next=i.head,i.head=r,i.modified=!0,i.length++}let n=e.constraints.head;for(;n!=null;){let i=n.elt;i.space==this&&this.wake_constraint(i),n=n.next}let s=e.arbiters.head;for(;s!=null;){let i=s.elt;if(i.sleeping)if(i.sleeping=!1,i.up_stamp+=this.stamp+(this.midstep?0:1)-i.sleep_stamp,i.type==Ie.COL){let l=i.colarb;if(l.stat){let r=this.c_arbiters_true,a;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(a=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=a.next,a.next=null),a.elt=l;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}else{let r=this.c_arbiters_false,a;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(a=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=a.next,a.next=null),a.elt=l;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}}else if(i.type==Ie.FLUID){let l=this.f_arbiters,r=i.fluidarb,a;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(a=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=a.next,a.next=null),a.elt=r;let o=a;o.next=l.head,l.head=o,l.modified=!0,l.length++}else{let l=this.s_arbiters,r=i.sensorarb,a;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(a=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=a.next,a.next=null),a.elt=r;let o=a;o.next=l.head,l.head=o,l.modified=!0,l.length++}if(i.type!=Ie.SENSOR&&!i.cleared&&i.up_stamp>=this.stamp&&(i.immState&1)!=0){if(i.b1.type==2&&i.b1.component.sleeping){let l=i.b1;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1))}if(i.b2.type==2&&i.b2.component.sleeping){let l=i.b2;l.world||(l.component.waket=this.stamp+(this.midstep?0:1),l.type==3&&(l.kinematicDelaySleep=!0),l.component.sleeping&&this.really_wake(l,!1))}}s=s.next}if(!t&&e.type==2&&this.bodyCbWake(e),!t&&!this.bphase.is_sweep&&e.type!=1){let i=e.shapes.head;for(;i!=null;){let l=i.elt;l.node!=null&&this.bphase.sync(l),i=i.next}}}else this.wakeIsland(e.component.island)}wake_constraint(e,t){if(t==null&&(t=!1),e.active)if(e.component.waket=this.stamp+(this.midstep?0:1),e.component.sleeping){if(e.component.island==null){e.component.sleeping=!1;let n=this.live_constraints,s;j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool==null?s=new j._zpp.util.ZNPNode_ZPP_Constraint:(s=j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool,j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool=s.next,s.next=null),s.elt=e;let i=s;i.next=n.head,n.head=i,n.modified=!0,n.length++,e.wake_connected(),t||this.constraintCbWake(e)}else this.wakeIsland(e.component.island);return!0}else return!1;else return!1}doForests(e){let t=this.c_arbiters_false.head;for(;t!=null;){let i=t.elt;if(!i.cleared&&i.up_stamp==this.stamp&&(i.immState&1)!=0&&i.b1.type==2&&i.b2.type==2){let l;if(i.b1.component==i.b1.component.parent)l=i.b1.component;else{let a=i.b1.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}l=a}let r;if(i.b2.component==i.b2.component.parent)r=i.b2.component;else{let a=i.b2.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}r=a}l!=r&&(l.rank<r.rank?l.parent=r:l.rank>r.rank?r.parent=l:(r.parent=l,l.rank++))}t=t.next}let n=this.f_arbiters.head;for(;n!=null;){let i=n.elt;if(!i.cleared&&i.up_stamp==this.stamp&&(i.immState&1)!=0&&i.b1.type==2&&i.b2.type==2){let l;if(i.b1.component==i.b1.component.parent)l=i.b1.component;else{let a=i.b1.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}l=a}let r;if(i.b2.component==i.b2.component.parent)r=i.b2.component;else{let a=i.b2.component,o=null;for(;a!=a.parent;){let p=a.parent;a.parent=o,o=a,a=p}for(;o!=null;){let p=o.parent;o.parent=a,o=p}r=a}l!=r&&(l.rank<r.rank?l.parent=r:l.rank>r.rank?r.parent=l:(r.parent=l,l.rank++))}n=n.next}let s=this.live_constraints.head;for(;s!=null;)s.elt.forest(),s=s.next;for(;this.live.head!=null;){let i=this.live,l=i.head.elt;i.pop();let r=l,a=r.component,o;if(a==a.parent)o=a;else{let x=a,y=null;for(;x!=x.parent;){let d=x.parent;x.parent=y,y=x,x=d}for(;y!=null;){let d=y.parent;y.parent=x,y=d}o=x}if(o.island==null){xt.zpp_pool==null?o.island=new xt:(o.island=xt.zpp_pool,xt.zpp_pool=o.island.next,o.island.next=null),o.island.waket=0;let x=this.islands,y=o.island;y._inuse=!0;let d=y;d.next=x.next,x.next=d,x.modified=!0,x.length++,o.island.sleep=!0}a.island=o.island;let p=a.island.comps,c;j._zpp.util.ZNPNode_ZPP_Component.zpp_pool==null?c=new j._zpp.util.ZNPNode_ZPP_Component:(c=j._zpp.util.ZNPNode_ZPP_Component.zpp_pool,j._zpp.util.ZNPNode_ZPP_Component.zpp_pool=c.next,c.next=null),c.elt=a;let h=c;h.next=p.head,p.head=h,p.modified=!0,p.length++;let u=r.atRest(e);a.island.sleep=a.island.sleep&&u,a.waket>a.island.waket&&(a.island.waket=a.waket)}for(;this.live_constraints.head!=null;){let i=this.live_constraints,l=i.head.elt;i.pop();let a=l.component,o;if(a==a.parent)o=a;else{let u=a,x=null;for(;u!=u.parent;){let y=u.parent;u.parent=x,x=u,u=y}for(;x!=null;){let y=x.parent;x.parent=u,x=y}o=u}a.island=o.island;let p=a.island.comps,c;j._zpp.util.ZNPNode_ZPP_Component.zpp_pool==null?c=new j._zpp.util.ZNPNode_ZPP_Component:(c=j._zpp.util.ZNPNode_ZPP_Component.zpp_pool,j._zpp.util.ZNPNode_ZPP_Component.zpp_pool=c.next,c.next=null),c.elt=a;let h=c;h.next=p.head,p.head=h,p.modified=!0,p.length++,a.waket>a.island.waket&&(a.island.waket=a.waket)}for(;this.islands.next!=null;){let i=this.islands,l=i.next;i.pop();let r=l;if(r.sleep){let a=r.comps.head;for(;a!=null;){let o=a.elt;if(o.isBody){let p=o.body;p.velx=0,p.vely=0,p.angvel=0,o.sleeping=!0;let c=p.shapes.head;for(;c!=null;){let h=c.elt;this.bphase.sync(h),c=c.next}this.bodyCbSleep(p)}else{let p=o.constraint;this.constraintCbSleep(p),o.sleeping=!0}a=a.next}}else{for(;r.comps.head!=null;){let o=r.comps,p=o.head.elt;o.pop();let c=p;if(c.waket=r.waket,c.isBody){let h=this.live,u=c.body,x;j._zpp.util.ZNPNode_ZPP_Body.zpp_pool==null?x=new j._zpp.util.ZNPNode_ZPP_Body:(x=j._zpp.util.ZNPNode_ZPP_Body.zpp_pool,j._zpp.util.ZNPNode_ZPP_Body.zpp_pool=x.next,x.next=null),x.elt=u;let y=x;y.next=h.head,h.head=y,h.modified=!0,h.length++}else{let h=this.live_constraints,u=c.constraint,x;j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool==null?x=new j._zpp.util.ZNPNode_ZPP_Constraint:(x=j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool,j._zpp.util.ZNPNode_ZPP_Constraint.zpp_pool=x.next,x.next=null),x.elt=u;let y=x;y.next=h.head,h.head=y,h.modified=!0,h.length++}c.sleeping=!1,c.island=null,c.parent=c,c.rank=0}let a=r;a.next=xt.zpp_pool,xt.zpp_pool=a}}}sleepArbiters(){let e=null,t=this.c_arbiters_true,n=t.head,s=this.c_arbiters_false!=null;for(s&&n==null&&(s=!1,n=this.c_arbiters_false.head,t=this.c_arbiters_false,e=null);n!=null;){let u=n.elt;if(u.b1.component.sleeping&&u.b2.component.sleeping){u.sleep_stamp=this.stamp,u.sleeping=!0;let x,y;e==null?(x=t.head,y=x.next,t.head=y,t.head==null&&(t.pushmod=!0)):(x=e.next,y=x.next,e.next=y,y==null&&(t.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=d,t.modified=!0,t.length--,t.pushmod=!0,n=y,s&&n==null&&(s=!1,n=this.c_arbiters_false.head,t=this.c_arbiters_false,e=null);continue}e=n,n=n.next,s&&n==null&&(s=!1,n=this.c_arbiters_false.head,t=this.c_arbiters_false,e=null)}let i=null,l=this.f_arbiters,r=l.head,a=!1;for(a&&r==null&&(a=!1,l=null,i=null);r!=null;){let u=r.elt;if(u.b1.component.sleeping&&u.b2.component.sleeping){u.sleep_stamp=this.stamp,u.sleeping=!0;let x,y;i==null?(x=l.head,y=x.next,l.head=y,l.head==null&&(l.pushmod=!0)):(x=i.next,y=x.next,i.next=y,y==null&&(l.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=d,l.modified=!0,l.length--,l.pushmod=!0,r=y,a&&r==null&&(a=!1,l=null,i=null);continue}i=r,r=r.next,a&&r==null&&(a=!1,l=null,i=null)}let o=null,p=this.s_arbiters,c=p.head,h=!1;for(h&&c==null&&(h=!1,p=null,o=null);c!=null;){let u=c.elt;if(u.b1.component.sleeping&&u.b2.component.sleeping){u.sleep_stamp=this.stamp,u.sleeping=!0;let x,y;o==null?(x=p.head,y=x.next,p.head=y,p.head==null&&(p.pushmod=!0)):(x=o.next,y=x.next,o.next=y,y==null&&(p.pushmod=!0));let d=x;d.elt=null,d.next=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=d,p.modified=!0,p.length--,p.pushmod=!0,c=y,h&&c==null&&(h=!1,p=null,o=null);continue}o=c,c=c.next,h&&c==null&&(h=!1,p=null,o=null)}}static_validation(e){if(e.shapes.head!=null){if(e.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(e.zip_aabb){e.zip_aabb=!1,e.aabb.minx=1/0,e.aabb.miny=1/0,e.aabb.maxx=-1/0,e.aabb.maxy=-1/0;let n=e.shapes.head;for(;n!=null;){let s=n.elt;if(s.zip_aabb&&s.body!=null)if(s.zip_aabb=!1,s.type==0){let r=s.circle;if(r.zip_worldCOM&&r.body!=null){if(r.zip_worldCOM=!1,r.zip_localCOM){if(r.zip_localCOM=!1,r.type==1){let c=r.polygon;if(c.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(c.lverts.next.next==null)c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;else if(c.lverts.next.next.next==null){c.localCOMx=c.lverts.next.x,c.localCOMy=c.lverts.next.y;let h=1;c.localCOMx+=c.lverts.next.next.x*h,c.localCOMy+=c.lverts.next.next.y*h;let u=.5;c.localCOMx*=u,c.localCOMy*=u}else{c.localCOMx=0,c.localCOMy=0;let h=0,u=c.lverts.next,x=u;u=u.next;let y=u;for(u=u.next;u!=null;){let k=u;h+=y.x*(k.y-x.y);let m=k.y*y.x-k.x*y.y;c.localCOMx+=(y.x+k.x)*m,c.localCOMy+=(y.y+k.y)*m,x=y,y=k,u=u.next}u=c.lverts.next;let d=u;h+=y.x*(d.y-x.y);let _=d.y*y.x-d.x*y.y;c.localCOMx+=(y.x+d.x)*_,c.localCOMy+=(y.y+d.y)*_,x=y,y=d,u=u.next;let f=u;h+=y.x*(f.y-x.y);let z=f.y*y.x-f.x*y.y;c.localCOMx+=(y.x+f.x)*z,c.localCOMy+=(y.y+f.y)*z,h=1/(3*h);let P=h;c.localCOMx*=P,c.localCOMy*=P}}r.wrap_localCOM!=null&&(r.wrap_localCOM.zpp_inner.x=r.localCOMx,r.wrap_localCOM.zpp_inner.y=r.localCOMy)}let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot)),r.worldCOMx=r.body.posx+(r.body.axisy*r.localCOMx-r.body.axisx*r.localCOMy),r.worldCOMy=r.body.posy+(r.localCOMx*r.body.axisx+r.localCOMy*r.body.axisy)}let a=r.radius,o=r.radius;r.aabb.minx=r.worldCOMx-a,r.aabb.miny=r.worldCOMy-o,r.aabb.maxx=r.worldCOMx+a,r.aabb.maxy=r.worldCOMy+o}else if(s.type===2)s.capsule.__validate_aabb();else{let r=s.polygon;if(r.zip_gverts&&r.body!=null){r.zip_gverts=!1,r.validate_lverts();let p=r.body;p.zip_axis&&(p.zip_axis=!1,p.axisx=Math.sin(p.rot),p.axisy=Math.cos(p.rot));let c=r.lverts.next,h=r.gverts.next;for(;h!=null;){let u=h,x=c;c=c.next,u.x=r.body.posx+(r.body.axisy*x.x-r.body.axisx*x.y),u.y=r.body.posy+(x.x*r.body.axisx+x.y*r.body.axisy),h=h.next}}if(r.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let a=r.gverts.next;r.aabb.minx=a.x,r.aabb.miny=a.y,r.aabb.maxx=a.x,r.aabb.maxy=a.y;let o=r.gverts.next.next;for(;o!=null;){let p=o;p.x<r.aabb.minx&&(r.aabb.minx=p.x),p.x>r.aabb.maxx&&(r.aabb.maxx=p.x),p.y<r.aabb.miny&&(r.aabb.miny=p.y),p.y>r.aabb.maxy&&(r.aabb.maxy=p.y),o=o.next}}let i=e.aabb,l=s.aabb;l.minx<i.minx&&(i.minx=l.minx),l.maxx>i.maxx&&(i.maxx=l.maxx),l.miny<i.miny&&(i.miny=l.miny),l.maxy>i.maxy&&(i.maxy=l.maxy),n=n.next}}}if(e.validate_mass(),e.validate_inertia(),e.velx!=0||e.vely!=0||e.angvel!=0)throw new Error("Error: Static body cannot have any real velocity, only kinematic or surface velocities");let t=e.shapes.head;for(;t!=null;){let n=t.elt;if(n.type==1){let s=n.polygon;s.zip_sanitation&&(s.zip_sanitation=!1,s.splice_collinear_real());let i=n.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new j._nape.shape.ValidationResult,Q.internal=!1),i!=Q.ValidationResult_VALID)throw new Error("Error: Cannot simulate with an invalid Polygon : "+n.polygon.outer.toString()+" is invalid : "+i.toString());let l=n.polygon;if(l.zip_gaxi&&l.body!=null){l.zip_gaxi=!1,l.validate_laxi();let r=l.body;if(r.zip_axis&&(r.zip_axis=!1,r.axisx=Math.sin(r.rot),r.axisy=Math.cos(r.rot)),l.zip_gverts&&l.body!=null){l.zip_gverts=!1,l.validate_lverts();let u=l.body;u.zip_axis&&(u.zip_axis=!1,u.axisx=Math.sin(u.rot),u.axisy=Math.cos(u.rot));let x=l.lverts.next,y=l.gverts.next;for(;y!=null;){let d=y,_=x;x=x.next,d.x=l.body.posx+(l.body.axisy*_.x-l.body.axisx*_.y),d.y=l.body.posy+(_.x*l.body.axisx+_.y*l.body.axisy),y=y.next}}let a=l.edges.head,o=l.gverts.next,p=o;for(o=o.next;o!=null;){let u=o,x=a.elt;a=a.next,x.gp0=p,x.gp1=u,x.gnormx=l.body.axisy*x.lnormx-l.body.axisx*x.lnormy,x.gnormy=x.lnormx*l.body.axisx+x.lnormy*l.body.axisy,x.gprojection=l.body.posx*x.gnormx+l.body.posy*x.gnormy+x.lprojection,x.wrap_gnorm!=null&&(x.wrap_gnorm.zpp_inner.x=x.gnormx,x.wrap_gnorm.zpp_inner.y=x.gnormy),x.tp0=x.gp0.y*x.gnormx-x.gp0.x*x.gnormy,x.tp1=x.gp1.y*x.gnormx-x.gp1.x*x.gnormy,p=u,o=o.next}let c=l.gverts.next,h=a.elt;a=a.next,h.gp0=p,h.gp1=c,h.gnormx=l.body.axisy*h.lnormx-l.body.axisx*h.lnormy,h.gnormy=h.lnormx*l.body.axisx+h.lnormy*l.body.axisy,h.gprojection=l.body.posx*h.gnormx+l.body.posy*h.gnormy+h.lprojection,h.wrap_gnorm!=null&&(h.wrap_gnorm.zpp_inner.x=h.gnormx,h.wrap_gnorm.zpp_inner.y=h.gnormy),h.tp0=h.gp0.y*h.gnormx-h.gp0.x*h.gnormy,h.tp1=h.gp1.y*h.gnormx-h.gp1.x*h.gnormy}}t=t.next}e.sweepFrozen=!0}validation(){let e=this.cbsets;if(!e.cbsets.empty()){let i=e.cbsets.parent;for(;i.prev!=null;)i=i.prev;for(;i!=null;)if(i.data.validate(),i.next!=null)for(i=i.next;i.prev!=null;)i=i.prev;else{for(;i.parent!=null&&i==i.parent.next;)i=i.parent;i=i.parent}}let t=this.live.head;for(;t!=null;){let i=t.elt;i.sweepRadius=0;let l=i.shapes.head;for(;l!=null;){let a=l.elt;if(a.type==1){let o=a.polygon;o.zip_sanitation&&(o.zip_sanitation=!1,o.splice_collinear_real());let p=a.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new j._nape.shape.ValidationResult,Q.internal=!1),p!=Q.ValidationResult_VALID)throw new Error("Error: Cannot simulate with an invalid Polygon : "+a.polygon.outer.toString()+" is invalid : "+p.toString());let c=a.polygon;if(c.zip_gaxi&&c.body!=null){c.zip_gaxi=!1,c.validate_laxi();let h=c.body;if(h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot)),c.zip_gverts&&c.body!=null){c.zip_gverts=!1,c.validate_lverts();let f=c.body;f.zip_axis&&(f.zip_axis=!1,f.axisx=Math.sin(f.rot),f.axisy=Math.cos(f.rot));let z=c.lverts.next,P=c.gverts.next;for(;P!=null;){let k=P,m=z;z=z.next,k.x=c.body.posx+(c.body.axisy*m.x-c.body.axisx*m.y),k.y=c.body.posy+(m.x*c.body.axisx+m.y*c.body.axisy),P=P.next}}let u=c.edges.head,x=c.gverts.next,y=x;for(x=x.next;x!=null;){let f=x,z=u.elt;u=u.next,z.gp0=y,z.gp1=f,z.gnormx=c.body.axisy*z.lnormx-c.body.axisx*z.lnormy,z.gnormy=z.lnormx*c.body.axisx+z.lnormy*c.body.axisy,z.gprojection=c.body.posx*z.gnormx+c.body.posy*z.gnormy+z.lprojection,z.wrap_gnorm!=null&&(z.wrap_gnorm.zpp_inner.x=z.gnormx,z.wrap_gnorm.zpp_inner.y=z.gnormy),z.tp0=z.gp0.y*z.gnormx-z.gp0.x*z.gnormy,z.tp1=z.gp1.y*z.gnormx-z.gp1.x*z.gnormy,y=f,x=x.next}let d=c.gverts.next,_=u.elt;u=u.next,_.gp0=y,_.gp1=d,_.gnormx=c.body.axisy*_.lnormx-c.body.axisx*_.lnormy,_.gnormy=_.lnormx*c.body.axisx+_.lnormy*c.body.axisy,_.gprojection=c.body.posx*_.gnormx+c.body.posy*_.gnormy+_.lprojection,_.wrap_gnorm!=null&&(_.wrap_gnorm.zpp_inner.x=_.gnormx,_.wrap_gnorm.zpp_inner.y=_.gnormy),_.tp0=_.gp0.y*_.gnormx-_.gp0.x*_.gnormy,_.tp1=_.gp1.y*_.gnormx-_.gp1.x*_.gnormy}}a.validate_sweepRadius(),a.sweepRadius>i.sweepRadius&&(i.sweepRadius=a.sweepRadius),l=l.next}if(i.validate_mass(),i.validate_inertia(),i.shapes.head!=null){if(i.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(i.zip_aabb){i.zip_aabb=!1,i.aabb.minx=1/0,i.aabb.miny=1/0,i.aabb.maxx=-1/0,i.aabb.maxy=-1/0;let a=i.shapes.head;for(;a!=null;){let o=a.elt;if(o.zip_aabb&&o.body!=null)if(o.zip_aabb=!1,o.type==0){let h=o.circle;if(h.zip_worldCOM&&h.body!=null){if(h.zip_worldCOM=!1,h.zip_localCOM){if(h.zip_localCOM=!1,h.type==1){let d=h.polygon;if(d.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(d.lverts.next.next==null)d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;else if(d.lverts.next.next.next==null){d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;let _=1;d.localCOMx+=d.lverts.next.next.x*_,d.localCOMy+=d.lverts.next.next.y*_;let f=.5;d.localCOMx*=f,d.localCOMy*=f}else{d.localCOMx=0,d.localCOMy=0;let _=0,f=d.lverts.next,z=f;f=f.next;let P=f;for(f=f.next;f!=null;){let w=f;_+=P.x*(w.y-z.y);let O=w.y*P.x-w.x*P.y;d.localCOMx+=(P.x+w.x)*O,d.localCOMy+=(P.y+w.y)*O,z=P,P=w,f=f.next}f=d.lverts.next;let k=f;_+=P.x*(k.y-z.y);let m=k.y*P.x-k.x*P.y;d.localCOMx+=(P.x+k.x)*m,d.localCOMy+=(P.y+k.y)*m,z=P,P=k,f=f.next;let b=f;_+=P.x*(b.y-z.y);let M=b.y*P.x-b.x*P.y;d.localCOMx+=(P.x+b.x)*M,d.localCOMy+=(P.y+b.y)*M,_=1/(3*_);let v=_;d.localCOMx*=v,d.localCOMy*=v}}h.wrap_localCOM!=null&&(h.wrap_localCOM.zpp_inner.x=h.localCOMx,h.wrap_localCOM.zpp_inner.y=h.localCOMy)}let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot)),h.worldCOMx=h.body.posx+(h.body.axisy*h.localCOMx-h.body.axisx*h.localCOMy),h.worldCOMy=h.body.posy+(h.localCOMx*h.body.axisx+h.localCOMy*h.body.axisy)}let u=h.radius,x=h.radius;h.aabb.minx=h.worldCOMx-u,h.aabb.miny=h.worldCOMy-x,h.aabb.maxx=h.worldCOMx+u,h.aabb.maxy=h.worldCOMy+x}else if(o.type===2)o.capsule.__validate_aabb();else{let h=o.polygon;if(h.zip_gverts&&h.body!=null){h.zip_gverts=!1,h.validate_lverts();let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot));let d=h.lverts.next,_=h.gverts.next;for(;_!=null;){let f=_,z=d;d=d.next,f.x=h.body.posx+(h.body.axisy*z.x-h.body.axisx*z.y),f.y=h.body.posy+(z.x*h.body.axisx+z.y*h.body.axisy),_=_.next}}if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let u=h.gverts.next;h.aabb.minx=u.x,h.aabb.miny=u.y,h.aabb.maxx=u.x,h.aabb.maxy=u.y;let x=h.gverts.next.next;for(;x!=null;){let y=x;y.x<h.aabb.minx&&(h.aabb.minx=y.x),y.x>h.aabb.maxx&&(h.aabb.maxx=y.x),y.y<h.aabb.miny&&(h.aabb.miny=y.y),y.y>h.aabb.maxy&&(h.aabb.maxy=y.y),x=x.next}}let p=i.aabb,c=o.aabb;c.minx<p.minx&&(p.minx=c.minx),c.maxx>p.maxx&&(p.maxx=c.maxx),c.miny<p.miny&&(p.miny=c.miny),c.maxy>p.maxy&&(p.maxy=c.maxy),a=a.next}}i.validate_worldCOM()}if(i.validate_gravMass(),i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),!i.nomove&&i.type==2&&i.mass==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 mass unless allowMovement is false");if(!i.norotate&&i.type==2&&i.inertia==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 inertia unless allowRotation is false");if(i.component.woken&&i.cbSet!=null){let a=i.cbSet.bodylisteners.head;for(;a!=null;){let o=a.elt;if(o.event!=2){a=a.next;continue}let p=this.push_callback(o);p.event=2,p.body=i,a=a.next}}i.component.woken=!1;let r=i.shapes.head;for(;r!=null;){let a=r.elt;this.bphase.sync(a),r=r.next}t=t.next}let n=this.kinematics.head;for(;n!=null;){let i=n.elt;i.sweepRadius=0;let l=i.shapes.head;for(;l!=null;){let a=l.elt;if(a.type==1){let o=a.polygon;o.zip_sanitation&&(o.zip_sanitation=!1,o.splice_collinear_real());let p=a.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new j._nape.shape.ValidationResult,Q.internal=!1),p!=Q.ValidationResult_VALID)throw new Error("Error: Cannot simulate with an invalid Polygon : "+a.polygon.outer.toString()+" is invalid : "+p.toString());let c=a.polygon;if(c.zip_gaxi&&c.body!=null){c.zip_gaxi=!1,c.validate_laxi();let h=c.body;if(h.zip_axis&&(h.zip_axis=!1,h.axisx=Math.sin(h.rot),h.axisy=Math.cos(h.rot)),c.zip_gverts&&c.body!=null){c.zip_gverts=!1,c.validate_lverts();let f=c.body;f.zip_axis&&(f.zip_axis=!1,f.axisx=Math.sin(f.rot),f.axisy=Math.cos(f.rot));let z=c.lverts.next,P=c.gverts.next;for(;P!=null;){let k=P,m=z;z=z.next,k.x=c.body.posx+(c.body.axisy*m.x-c.body.axisx*m.y),k.y=c.body.posy+(m.x*c.body.axisx+m.y*c.body.axisy),P=P.next}}let u=c.edges.head,x=c.gverts.next,y=x;for(x=x.next;x!=null;){let f=x,z=u.elt;u=u.next,z.gp0=y,z.gp1=f,z.gnormx=c.body.axisy*z.lnormx-c.body.axisx*z.lnormy,z.gnormy=z.lnormx*c.body.axisx+z.lnormy*c.body.axisy,z.gprojection=c.body.posx*z.gnormx+c.body.posy*z.gnormy+z.lprojection,z.wrap_gnorm!=null&&(z.wrap_gnorm.zpp_inner.x=z.gnormx,z.wrap_gnorm.zpp_inner.y=z.gnormy),z.tp0=z.gp0.y*z.gnormx-z.gp0.x*z.gnormy,z.tp1=z.gp1.y*z.gnormx-z.gp1.x*z.gnormy,y=f,x=x.next}let d=c.gverts.next,_=u.elt;u=u.next,_.gp0=y,_.gp1=d,_.gnormx=c.body.axisy*_.lnormx-c.body.axisx*_.lnormy,_.gnormy=_.lnormx*c.body.axisx+_.lnormy*c.body.axisy,_.gprojection=c.body.posx*_.gnormx+c.body.posy*_.gnormy+_.lprojection,_.wrap_gnorm!=null&&(_.wrap_gnorm.zpp_inner.x=_.gnormx,_.wrap_gnorm.zpp_inner.y=_.gnormy),_.tp0=_.gp0.y*_.gnormx-_.gp0.x*_.gnormy,_.tp1=_.gp1.y*_.gnormx-_.gp1.x*_.gnormy}}a.validate_sweepRadius(),a.sweepRadius>i.sweepRadius&&(i.sweepRadius=a.sweepRadius),l=l.next}if(i.validate_mass(),i.validate_inertia(),i.shapes.head!=null){if(i.shapes.head==null)throw new Error("Error: Body bounds only makes sense if it contains shapes");if(i.zip_aabb){i.zip_aabb=!1,i.aabb.minx=1/0,i.aabb.miny=1/0,i.aabb.maxx=-1/0,i.aabb.maxy=-1/0;let a=i.shapes.head;for(;a!=null;){let o=a.elt;if(o.zip_aabb&&o.body!=null)if(o.zip_aabb=!1,o.type==0){let h=o.circle;if(h.zip_worldCOM&&h.body!=null){if(h.zip_worldCOM=!1,h.zip_localCOM){if(h.zip_localCOM=!1,h.type==1){let d=h.polygon;if(d.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(d.lverts.next.next==null)d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;else if(d.lverts.next.next.next==null){d.localCOMx=d.lverts.next.x,d.localCOMy=d.lverts.next.y;let _=1;d.localCOMx+=d.lverts.next.next.x*_,d.localCOMy+=d.lverts.next.next.y*_;let f=.5;d.localCOMx*=f,d.localCOMy*=f}else{d.localCOMx=0,d.localCOMy=0;let _=0,f=d.lverts.next,z=f;f=f.next;let P=f;for(f=f.next;f!=null;){let w=f;_+=P.x*(w.y-z.y);let O=w.y*P.x-w.x*P.y;d.localCOMx+=(P.x+w.x)*O,d.localCOMy+=(P.y+w.y)*O,z=P,P=w,f=f.next}f=d.lverts.next;let k=f;_+=P.x*(k.y-z.y);let m=k.y*P.x-k.x*P.y;d.localCOMx+=(P.x+k.x)*m,d.localCOMy+=(P.y+k.y)*m,z=P,P=k,f=f.next;let b=f;_+=P.x*(b.y-z.y);let M=b.y*P.x-b.x*P.y;d.localCOMx+=(P.x+b.x)*M,d.localCOMy+=(P.y+b.y)*M,_=1/(3*_);let v=_;d.localCOMx*=v,d.localCOMy*=v}}h.wrap_localCOM!=null&&(h.wrap_localCOM.zpp_inner.x=h.localCOMx,h.wrap_localCOM.zpp_inner.y=h.localCOMy)}let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot)),h.worldCOMx=h.body.posx+(h.body.axisy*h.localCOMx-h.body.axisx*h.localCOMy),h.worldCOMy=h.body.posy+(h.localCOMx*h.body.axisx+h.localCOMy*h.body.axisy)}let u=h.radius,x=h.radius;h.aabb.minx=h.worldCOMx-u,h.aabb.miny=h.worldCOMy-x,h.aabb.maxx=h.worldCOMx+u,h.aabb.maxy=h.worldCOMy+x}else if(o.type===2)o.capsule.__validate_aabb();else{let h=o.polygon;if(h.zip_gverts&&h.body!=null){h.zip_gverts=!1,h.validate_lverts();let y=h.body;y.zip_axis&&(y.zip_axis=!1,y.axisx=Math.sin(y.rot),y.axisy=Math.cos(y.rot));let d=h.lverts.next,_=h.gverts.next;for(;_!=null;){let f=_,z=d;d=d.next,f.x=h.body.posx+(h.body.axisy*z.x-h.body.axisx*z.y),f.y=h.body.posy+(z.x*h.body.axisx+z.y*h.body.axisy),_=_.next}}if(h.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let u=h.gverts.next;h.aabb.minx=u.x,h.aabb.miny=u.y,h.aabb.maxx=u.x,h.aabb.maxy=u.y;let x=h.gverts.next.next;for(;x!=null;){let y=x;y.x<h.aabb.minx&&(h.aabb.minx=y.x),y.x>h.aabb.maxx&&(h.aabb.maxx=y.x),y.y<h.aabb.miny&&(h.aabb.miny=y.y),y.y>h.aabb.maxy&&(h.aabb.maxy=y.y),x=x.next}}let p=i.aabb,c=o.aabb;c.minx<p.minx&&(p.minx=c.minx),c.maxx>p.maxx&&(p.maxx=c.maxx),c.miny<p.miny&&(p.miny=c.miny),c.maxy>p.maxy&&(p.maxy=c.maxy),a=a.next}}i.validate_worldCOM()}if(i.validate_gravMass(),i.zip_axis&&(i.zip_axis=!1,i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot)),!i.nomove&&i.type==2&&i.mass==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 mass unless allowMovement is false");if(!i.norotate&&i.type==2&&i.inertia==0)throw new Error("Error: Dynamic Body cannot be simulated with 0 inertia unless allowRotation is false");let r=i.shapes.head;for(;r!=null;){let a=r.elt;this.bphase.sync(a),r=r.next}n=n.next}let s=this.live_constraints.head;for(;s!=null;){let i=s.elt;if(i.active){if(i.validate(),i.component.woken&&i.cbSet!=null){let l=i.cbSet.conlisteners.head;for(;l!=null;){let r=l.elt;if(r.event!=2){l=l.next;continue}let a=this.push_callback(r);a.event=2,a.constraint=i,l=l.next}}i.component.woken=!1}s=s.next}}updateVel(e){let t=null,n=1-e*this.global_lin_drag,s=1-e*this.global_ang_drag,i=this.live.head;for(;i!=null;){let l=i.elt;if(l.smass!=0){let r=e*l.imass;l.velx=n*l.velx+(l.forcex+this.gravityx*l.gravMass)*r,l.vely=n*l.vely+(l.forcey+this.gravityy*l.gravMass)*r}if(l.sinertia!=0){let r=0,a=0;r=l.worldCOMx-l.posx,a=l.worldCOMy-l.posy;let o=l.torque+(this.gravityy*r-this.gravityx*a)*l.gravMass;l.angvel=s*l.angvel+o*e*l.iinertia}t=i,i=i.next}}updatePos(e){let t=2*Math.PI/e,n=this.live.head;for(;n!=null;){let i=n.elt;i.pre_posx=i.posx,i.pre_posy=i.posy,i.pre_rot=i.rot,i.sweepTime=0,i.sweep_angvel=i.angvel%t;let l=e-i.sweepTime;if(l!=0){i.sweepTime=e;let r=l;if(i.posx+=i.velx*r,i.posy+=i.vely*r,i.angvel!=0){let a=i.sweep_angvel*l;if(i.rot+=a,a*a>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let o=a*a,p=1-.5*o,c=1-o*o/8,h=(p*i.axisx+a*i.axisy)*c;i.axisy=(p*i.axisy-a*i.axisx)*c,i.axisx=h}}}if(i.disableCCD)i.sweepFrozen=!0,i.bullet=!1;else{let r=j._nape.Config.staticCCDLinearThreshold*i.sweepRadius,a=j._nape.Config.staticCCDAngularThreshold;if((i.velx*i.velx+i.vely*i.vely)*e*e>r*r||i.angvel*i.angvel*e*e>a*a||i.type==3){let o=i.sweep_angvel;o<0&&(o=-o);let p=1/o,c=i.shapes.head;for(;c!=null;){let h=c.elt,u=h.aabb,x=u.minx,y=u.miny,d=u.maxx,_=u.maxy,f=o*e*h.sweepCoef*.008333333333333333|0;f>8&&(f=8);let z=o*e/f,P=e-i.sweepTime;if(P!=0){i.sweepTime=e;let b=P;if(i.posx+=i.velx*b,i.posy+=i.vely*b,i.angvel!=0){let M=i.sweep_angvel*P;if(i.rot+=M,M*M>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let v=M*M,w=1-.5*v,O=1-v*v/8,E=(w*i.axisx+M*i.axisy)*O;i.axisy=(w*i.axisy-M*i.axisx)*O,i.axisx=E}}}if(h.type==0){let b=h.circle;b.worldCOMx=b.body.posx+(b.body.axisy*b.localCOMx-b.body.axisx*b.localCOMy),b.worldCOMy=b.body.posy+(b.localCOMx*b.body.axisx+b.localCOMy*b.body.axisy),b.aabb.minx=b.worldCOMx-b.radius,b.aabb.miny=b.worldCOMy-b.radius,b.aabb.maxx=b.worldCOMx+b.radius,b.aabb.maxy=b.worldCOMy+b.radius}else if(h.type===2)h.capsule.__validate_aabb();else{let b=h.polygon,M=b.lverts.next,v=b.gverts.next,w=M;M=M.next,v.x=b.body.posx+(b.body.axisy*w.x-b.body.axisx*w.y),v.y=b.body.posy+(w.x*b.body.axisx+w.y*b.body.axisy),b.aabb.minx=v.x,b.aabb.miny=v.y,b.aabb.maxx=v.x,b.aabb.maxy=v.y;let O=b.gverts.next.next;for(;O!=null;){let E=O,C=M;M=M.next,E.x=b.body.posx+(b.body.axisy*C.x-b.body.axisx*C.y),E.y=b.body.posy+(C.x*b.body.axisx+C.y*b.body.axisy),E.x<b.aabb.minx&&(b.aabb.minx=E.x),E.x>b.aabb.maxx&&(b.aabb.maxx=E.x),E.y<b.aabb.miny&&(b.aabb.miny=E.y),E.y>b.aabb.maxy&&(b.aabb.maxy=E.y),O=O.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy;let k=1,m=f;for(;k<m;){let b=k++,M=z*b*p,v=M-i.sweepTime;if(v!=0){i.sweepTime=M;let w=v;if(i.posx+=i.velx*w,i.posy+=i.vely*w,i.angvel!=0){let O=i.sweep_angvel*v;if(i.rot+=O,O*O>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let E=O*O,C=1-.5*E,N=1-E*E/8,Z=(C*i.axisx+O*i.axisy)*N;i.axisy=(C*i.axisy-O*i.axisx)*N,i.axisx=Z}}}if(h.type==0){let w=h.circle;w.worldCOMx=w.body.posx+(w.body.axisy*w.localCOMx-w.body.axisx*w.localCOMy),w.worldCOMy=w.body.posy+(w.localCOMx*w.body.axisx+w.localCOMy*w.body.axisy),w.aabb.minx=w.worldCOMx-w.radius,w.aabb.miny=w.worldCOMy-w.radius,w.aabb.maxx=w.worldCOMx+w.radius,w.aabb.maxy=w.worldCOMy+w.radius}else if(h.type===2)h.capsule.__validate_aabb();else{let w=h.polygon,O=w.lverts.next,E=w.gverts.next,C=O;O=O.next,E.x=w.body.posx+(w.body.axisy*C.x-w.body.axisx*C.y),E.y=w.body.posy+(C.x*w.body.axisx+C.y*w.body.axisy),w.aabb.minx=E.x,w.aabb.miny=E.y,w.aabb.maxx=E.x,w.aabb.maxy=E.y;let N=w.gverts.next.next;for(;N!=null;){let Z=N,S=O;O=O.next,Z.x=w.body.posx+(w.body.axisy*S.x-w.body.axisx*S.y),Z.y=w.body.posy+(S.x*w.body.axisx+S.y*w.body.axisy),Z.x<w.aabb.minx&&(w.aabb.minx=Z.x),Z.x>w.aabb.maxx&&(w.aabb.maxx=Z.x),Z.y<w.aabb.miny&&(w.aabb.miny=Z.y),Z.y>w.aabb.maxy&&(w.aabb.maxy=Z.y),N=N.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy}this.bphase.sync(h),c=c.next}if(i.sweepFrozen=!1,i.type==2&&i.bulletEnabled){let h=j._nape.Config.bulletCCDLinearThreshold*i.sweepRadius,u=j._nape.Config.bulletCCDAngularThreshold;((i.velx*i.velx+i.vely*i.vely)*e*e>h*h||i.angvel*i.angvel*e*e>u*u)&&(i.bullet=!0)}}else i.sweepFrozen=!0,i.bullet=!1}n=n.next}let s=this.kinematics.head;for(;s!=null;){let i=s.elt;i.pre_posx=i.posx,i.pre_posy=i.posy,i.pre_rot=i.rot,i.sweepTime=0,i.sweep_angvel=i.angvel%t;let l=e-i.sweepTime;if(l!=0){i.sweepTime=e;let r=l;if(i.posx+=i.velx*r,i.posy+=i.vely*r,i.angvel!=0){let a=i.sweep_angvel*l;if(i.rot+=a,a*a>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let o=a*a,p=1-.5*o,c=1-o*o/8,h=(p*i.axisx+a*i.axisy)*c;i.axisy=(p*i.axisy-a*i.axisx)*c,i.axisx=h}}}if(i.disableCCD)i.sweepFrozen=!0,i.bullet=!1;else{let r=j._nape.Config.staticCCDLinearThreshold*i.sweepRadius,a=j._nape.Config.staticCCDAngularThreshold;if((i.velx*i.velx+i.vely*i.vely)*e*e>r*r||i.angvel*i.angvel*e*e>a*a||i.type==3){let o=i.sweep_angvel;o<0&&(o=-o);let p=1/o,c=i.shapes.head;for(;c!=null;){let h=c.elt,u=h.aabb,x=u.minx,y=u.miny,d=u.maxx,_=u.maxy,f=o*e*h.sweepCoef*.008333333333333333|0;f>8&&(f=8);let z=o*e/f,P=e-i.sweepTime;if(P!=0){i.sweepTime=e;let b=P;if(i.posx+=i.velx*b,i.posy+=i.vely*b,i.angvel!=0){let M=i.sweep_angvel*P;if(i.rot+=M,M*M>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let v=M*M,w=1-.5*v,O=1-v*v/8,E=(w*i.axisx+M*i.axisy)*O;i.axisy=(w*i.axisy-M*i.axisx)*O,i.axisx=E}}}if(h.type==0){let b=h.circle;b.worldCOMx=b.body.posx+(b.body.axisy*b.localCOMx-b.body.axisx*b.localCOMy),b.worldCOMy=b.body.posy+(b.localCOMx*b.body.axisx+b.localCOMy*b.body.axisy),b.aabb.minx=b.worldCOMx-b.radius,b.aabb.miny=b.worldCOMy-b.radius,b.aabb.maxx=b.worldCOMx+b.radius,b.aabb.maxy=b.worldCOMy+b.radius}else if(h.type===2)h.capsule.__validate_aabb();else{let b=h.polygon,M=b.lverts.next,v=b.gverts.next,w=M;M=M.next,v.x=b.body.posx+(b.body.axisy*w.x-b.body.axisx*w.y),v.y=b.body.posy+(w.x*b.body.axisx+w.y*b.body.axisy),b.aabb.minx=v.x,b.aabb.miny=v.y,b.aabb.maxx=v.x,b.aabb.maxy=v.y;let O=b.gverts.next.next;for(;O!=null;){let E=O,C=M;M=M.next,E.x=b.body.posx+(b.body.axisy*C.x-b.body.axisx*C.y),E.y=b.body.posy+(C.x*b.body.axisx+C.y*b.body.axisy),E.x<b.aabb.minx&&(b.aabb.minx=E.x),E.x>b.aabb.maxx&&(b.aabb.maxx=E.x),E.y<b.aabb.miny&&(b.aabb.miny=E.y),E.y>b.aabb.maxy&&(b.aabb.maxy=E.y),O=O.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy;let k=1,m=f;for(;k<m;){let b=k++,M=z*b*p,v=M-i.sweepTime;if(v!=0){i.sweepTime=M;let w=v;if(i.posx+=i.velx*w,i.posy+=i.vely*w,i.angvel!=0){let O=i.sweep_angvel*v;if(i.rot+=O,O*O>1e-4)i.axisx=Math.sin(i.rot),i.axisy=Math.cos(i.rot);else{let E=O*O,C=1-.5*E,N=1-E*E/8,Z=(C*i.axisx+O*i.axisy)*N;i.axisy=(C*i.axisy-O*i.axisx)*N,i.axisx=Z}}}if(h.type==0){let w=h.circle;w.worldCOMx=w.body.posx+(w.body.axisy*w.localCOMx-w.body.axisx*w.localCOMy),w.worldCOMy=w.body.posy+(w.localCOMx*w.body.axisx+w.localCOMy*w.body.axisy),w.aabb.minx=w.worldCOMx-w.radius,w.aabb.miny=w.worldCOMy-w.radius,w.aabb.maxx=w.worldCOMx+w.radius,w.aabb.maxy=w.worldCOMy+w.radius}else{let w=h.polygon,O=w.lverts.next,E=w.gverts.next,C=O;O=O.next,E.x=w.body.posx+(w.body.axisy*C.x-w.body.axisx*C.y),E.y=w.body.posy+(C.x*w.body.axisx+C.y*w.body.axisy),w.aabb.minx=E.x,w.aabb.miny=E.y,w.aabb.maxx=E.x,w.aabb.maxy=E.y;let N=w.gverts.next.next;for(;N!=null;){let Z=N,S=O;O=O.next,Z.x=w.body.posx+(w.body.axisy*S.x-w.body.axisx*S.y),Z.y=w.body.posy+(S.x*w.body.axisx+S.y*w.body.axisy),Z.x<w.aabb.minx&&(w.aabb.minx=Z.x),Z.x>w.aabb.maxx&&(w.aabb.maxx=Z.x),Z.y<w.aabb.miny&&(w.aabb.miny=Z.y),Z.y>w.aabb.maxy&&(w.aabb.maxy=Z.y),N=N.next}}x<u.minx?u.minx=x:x=u.minx,y<u.miny?u.miny=y:y=u.miny,d>u.maxx?u.maxx=d:d=u.maxx,_>u.maxy?u.maxy=_:_=u.maxy}this.bphase.sync(h),c=c.next}if(i.sweepFrozen=!1,i.type==2&&i.bulletEnabled){let h=j._nape.Config.bulletCCDLinearThreshold*i.sweepRadius,u=j._nape.Config.bulletCCDAngularThreshold;((i.velx*i.velx+i.vely*i.vely)*e*e>h*h||i.angvel*i.angvel*e*e>u*u)&&(i.bullet=!0)}}else i.sweepFrozen=!0,i.bullet=!1}s=s.next}}presteparb(e,t,n){if(n==null&&(n=!1),!e.cleared&&e.b1.component.sleeping&&e.b2.component.sleeping)return e.sleep_stamp=this.stamp,e.sleeping=!0,!0;if(!e.cleared||e.present!=0||e.intchange){let i=!n&&e.up_stamp==this.stamp-1&&!e.cleared&&!e.intchange,l=e.fresh&&!e.cleared&&!e.intchange;if(i&&(e.endGenerated=this.stamp),l||i||e.cleared||e.intchange){let r=e.ws1,a=e.ws2,o=this.mrca1;for(;o.head!=null;){let x=o.head;o.head=x.next;let y=x;y.elt=null,y.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y,o.head==null&&(o.pushmod=!0),o.modified=!0,o.length--}o.pushmod=!0;let p=this.mrca2;for(;p.head!=null;){let x=p.head;p.head=x.next;let y=x;y.elt=null,y.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y,p.head==null&&(p.pushmod=!0),p.modified=!0,p.length--}if(p.pushmod=!0,r.cbSet!=null){let x=this.mrca1,y;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?y=new j._zpp.util.ZNPNode_ZPP_Interactor:(y=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y.next,y.next=null),y.elt=r;let d=y;d.next=x.head,x.head=d,x.modified=!0,x.length++}if(r.body.cbSet!=null){let x=this.mrca1,y=r.body,d;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?d=new j._zpp.util.ZNPNode_ZPP_Interactor:(d=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=d.next,d.next=null),d.elt=y;let _=d;_.next=x.head,x.head=_,x.modified=!0,x.length++}if(a.cbSet!=null){let x=this.mrca2,y;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?y=new j._zpp.util.ZNPNode_ZPP_Interactor:(y=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=y.next,y.next=null),y.elt=a;let d=y;d.next=x.head,x.head=d,x.modified=!0,x.length++}if(a.body.cbSet!=null){let x=this.mrca2,y=a.body,d;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?d=new j._zpp.util.ZNPNode_ZPP_Interactor:(d=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=d.next,d.next=null),d.elt=y;let _=d;_.next=x.head,x.head=_,x.modified=!0,x.length++}let c=r.body.compound,h=a.body.compound;for(;c!=h;){let x=c==null?0:c.depth,y=h==null?0:h.depth;if(x<y){if(h.cbSet!=null){let d=this.mrca2,_;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?_=new j._zpp.util.ZNPNode_ZPP_Interactor:(_=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=_.next,_.next=null),_.elt=h;let f=_;f.next=d.head,d.head=f,d.modified=!0,d.length++}h=h.compound}else{if(c.cbSet!=null){let d=this.mrca1,_;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?_=new j._zpp.util.ZNPNode_ZPP_Interactor:(_=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=_.next,_.next=null),_.elt=c;let f=_;f.next=d.head,d.head=f,d.modified=!0,d.length++}c=c.compound}}let u=this.mrca1.head;for(;u!=null;){let x=u.elt,y=this.mrca2.head;for(;y!=null;){let d=y.elt,_=x.cbSet,f=d.cbSet,z=_.manager,P=null,m=(_.cbpairs.length<f.cbpairs.length?_.cbpairs:f.cbpairs).head;for(;m!=null;){let M=m.elt;if(M.a==_&&M.b==f||M.a==f&&M.b==_){P=M;break}m=m.next}if(P==null){let M;Ne.zpp_pool==null?M=new Ne:(M=Ne.zpp_pool,Ne.zpp_pool=M.next,M.next=null),M.zip_listeners=!0,_t.setlt(_,f)?(M.a=_,M.b=f):(M.a=f,M.b=_),P=M,_.cbpairs.add(P),f!=_&&f.cbpairs.add(P)}if(P.zip_listeners&&(P.zip_listeners=!1,P.__validate()),P.listeners.head==null){y=y.next;continue}let b=j._zpp.phys.ZPP_Interactor.get(x,d);if(l||e.intchange){b==null&&(b=Wt.get(x,d),this.add_callbackset(b));let M=_.manager,v=null,O=(_.cbpairs.length<f.cbpairs.length?_.cbpairs:f.cbpairs).head;for(;O!=null;){let S=O.elt;if(S.a==_&&S.b==f||S.a==f&&S.b==_){v=S;break}O=O.next}if(v==null){let S;Ne.zpp_pool==null?S=new Ne:(S=Ne.zpp_pool,Ne.zpp_pool=S.next,S.next=null),S.zip_listeners=!0,_t.setlt(_,f)?(S.a=_,S.b=f):(S.a=f,S.b=_),v=S,_.cbpairs.add(v),f!=_&&f.cbpairs.add(v)}v.zip_listeners&&(v.zip_listeners=!1,v.__validate());let E=v.listeners.head;for(;E!=null;){let S=E.elt;if(S.event==0&&(S.itype&e.type)!=0&&b.empty_arb(S.itype)){let A=this.push_callback(S);A.event=0;let F=b.int1,B=b.int2,G,J=S.options1,R=F.cbTypes;if(J.nonemptyintersection(R,J.includes)&&!J.nonemptyintersection(R,J.excludes)){let T=S.options2,V=B.cbTypes;G=T.nonemptyintersection(V,T.includes)&&!T.nonemptyintersection(V,T.excludes)}else G=!1;G?(A.int1=F,A.int2=B):(A.int1=B,A.int2=F),A.set=b}E=E.next}let C,N;N=!1;let Z=b.arbiters.head;for(;Z!=null;){if(Z.elt==e){N=!0;break}Z=Z.next}if(N)C=!1;else{let S=b.arbiters,A;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?A=new j._zpp.util.ZNPNode_ZPP_Arbiter:(A=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=A.next,A.next=null),A.elt=e;let F=A;F.next=S.head,S.head=F,S.modified=!0,S.length++,C=!0}C&&e.present++}else{e.present--,b.remove_arb(e);let M=_.manager,v=null,O=(_.cbpairs.length<f.cbpairs.length?_.cbpairs:f.cbpairs).head;for(;O!=null;){let C=O.elt;if(C.a==_&&C.b==f||C.a==f&&C.b==_){v=C;break}O=O.next}if(v==null){let C;Ne.zpp_pool==null?C=new Ne:(C=Ne.zpp_pool,Ne.zpp_pool=C.next,C.next=null),C.zip_listeners=!0,_t.setlt(_,f)?(C.a=_,C.b=f):(C.a=f,C.b=_),v=C,_.cbpairs.add(v),f!=_&&f.cbpairs.add(v)}v.zip_listeners&&(v.zip_listeners=!1,v.__validate());let E=v.listeners.head;for(;E!=null;){let C=E.elt;if(C.event==1&&(C.itype&e.type)!=0&&b.empty_arb(C.itype)){let N=this.push_callback(C);N.event=1;let Z=b.int1,S=b.int2,A,F=C.options1,B=Z.cbTypes;if(F.nonemptyintersection(B,F.includes)&&!F.nonemptyintersection(B,F.excludes)){let G=C.options2,J=S.cbTypes;A=G.nonemptyintersection(J,G.includes)&&!G.nonemptyintersection(J,G.excludes)}else A=!1;A?(N.int1=Z,N.int2=S):(N.int1=S,N.int2=Z),N.set=b}E=E.next}b.arbiters.head==null&&this.remove_callbackset(b)}y=y.next}u=u.next}}e.fresh=!1,e.intchange=!1}if(e.cleared||e.up_stamp+(e.type==Ie.COL?j._nape.Config.arbiterExpirationDelay:0)<this.stamp){if(e.type==Ie.SENSOR){let i=e.sensorarb;if(!i.cleared){let r=i.b1.arbiters,a=null,o=r.head,p=!1;for(;o!=null;){if(o.elt==i){let y,d;a==null?(y=r.head,d=y.next,r.head=d,r.head==null&&(r.pushmod=!0)):(y=a.next,d=y.next,a.next=d,d==null&&(r.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,r.modified=!0,r.length--,r.pushmod=!0,p=!0;break}a=o,o=o.next}let c=i.b2.arbiters,h=null,u=c.head,x=!1;for(;u!=null;){if(u.elt==i){let y,d;h==null?(y=c.head,d=y.next,c.head=d,c.head==null&&(c.pushmod=!0)):(y=h.next,d=y.next,h.next=d,d==null&&(c.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,c.modified=!0,c.length--,c.pushmod=!0,x=!0;break}h=u,u=u.next}i.pair!=null&&(i.pair.arb=null,i.pair=null)}i.b1=i.b2=null,i.active=!1,i.intchange=!1;let l=i;l.next=Ot.zpp_pool,Ot.zpp_pool=l}else if(e.type==Ie.FLUID){let i=e.fluidarb;if(!i.cleared){let r=i.b1.arbiters,a=null,o=r.head,p=!1;for(;o!=null;){if(o.elt==i){let y,d;a==null?(y=r.head,d=y.next,r.head=d,r.head==null&&(r.pushmod=!0)):(y=a.next,d=y.next,a.next=d,d==null&&(r.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,r.modified=!0,r.length--,r.pushmod=!0,p=!0;break}a=o,o=o.next}let c=i.b2.arbiters,h=null,u=c.head,x=!1;for(;u!=null;){if(u.elt==i){let y,d;h==null?(y=c.head,d=y.next,c.head=d,c.head==null&&(c.pushmod=!0)):(y=h.next,d=y.next,h.next=d,d==null&&(c.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,c.modified=!0,c.length--,c.pushmod=!0,x=!0;break}h=u,u=u.next}i.pair!=null&&(i.pair.arb=null,i.pair=null)}i.b1=i.b2=null,i.active=!1,i.intchange=!1;let l=i;l.next=Pt.zpp_pool,Pt.zpp_pool=l,i.pre_dt=-1}else{let i=e.colarb;if(!i.cleared){let r=i.b1.arbiters,a=null,o=r.head,p=!1;for(;o!=null;){if(o.elt==i){let y,d;a==null?(y=r.head,d=y.next,r.head=d,r.head==null&&(r.pushmod=!0)):(y=a.next,d=y.next,a.next=d,d==null&&(r.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,r.modified=!0,r.length--,r.pushmod=!0,p=!0;break}a=o,o=o.next}let c=i.b2.arbiters,h=null,u=c.head,x=!1;for(;u!=null;){if(u.elt==i){let y,d;h==null?(y=c.head,d=y.next,c.head=d,c.head==null&&(c.pushmod=!0)):(y=h.next,d=y.next,h.next=d,d==null&&(c.pushmod=!0));let _=y;_.elt=null,_.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=_,c.modified=!0,c.length--,c.pushmod=!0,x=!0;break}h=u,u=u.next}i.pair!=null&&(i.pair.arb=null,i.pair=null)}for(i.b1=i.b2=null,i.active=!1,i.intchange=!1;i.contacts.next!=null;){let r=i.contacts,a=r.next;r.pop();let o=a;o.arbiter=null,o.next=we.zpp_pool,we.zpp_pool=o;let p=i.innards,c=p.next;p.next=c.next,c._inuse=!1,p.next==null&&(p.pushmod=!0),p.modified=!0,p.length--}let l=i;l.userdef_dyn_fric=!1,l.userdef_stat_fric=!1,l.userdef_restitution=!1,l.userdef_rfric=!1,l.__ref_edge1=l.__ref_edge2=null,l.next=ut.zpp_pool,ut.zpp_pool=l,i.pre_dt=-1}return!0}let s=e.active;if(e.active=e.presentable=e.up_stamp==this.stamp,(e.immState&1)!=0){if(e.active&&e.type!=Ie.SENSOR)if(e.colarb!=null){let i=e.colarb;i.invalidated&&(i.invalidated=!1,i.userdef_restitution||(i.s1.material.elasticity<=-1/0||i.s2.material.elasticity<=-1/0?i.restitution=0:i.s1.material.elasticity>=1/0||i.s2.material.elasticity>=1/0?i.restitution=1:i.restitution=(i.s1.material.elasticity+i.s2.material.elasticity)/2,i.restitution<0&&(i.restitution=0),i.restitution>1&&(i.restitution=1)),i.userdef_dyn_fric||(i.dyn_fric=Math.sqrt(i.s1.material.dynamicFriction*i.s2.material.dynamicFriction)),i.userdef_stat_fric||(i.stat_fric=Math.sqrt(i.s1.material.staticFriction*i.s2.material.staticFriction)),i.userdef_rfric||(i.rfric=Math.sqrt(i.s1.material.rollingFriction*i.s2.material.rollingFriction))),i.pre_dt==-1&&(i.pre_dt=t);let l=t/i.pre_dt;i.pre_dt=t;let r=i.b1.smass+i.b2.smass;i.hc2=!1;let a=!0,p=i.b1.type!=2||i.b2.type!=2?i.continuous?j._nape.Config.contactContinuousStaticBiasCoef:j._nape.Config.contactStaticBiasCoef:i.continuous?j._nape.Config.contactContinuousBiasCoef:j._nape.Config.contactBiasCoef;i.biasCoef=p,i.continuous=!1;let c=null,h=null,u=i.innards.next,x=i.contacts.next;for(;x!=null;){let d=x;if(d.stamp+j._nape.Config.arbiterExpirationDelay<i.stamp){let z=i.contacts,P,k;c==null?(P=z.next,k=P.next,z.next=k,z.next==null&&(z.pushmod=!0)):(P=c.next,k=P.next,c.next=k,k==null&&(z.pushmod=!0)),P._inuse=!1,z.modified=!0,z.length--,z.pushmod=!0,x=k;let m=i.innards,b,M;h==null?(b=m.next,M=b.next,m.next=M,m.next==null&&(m.pushmod=!0)):(b=h.next,M=b.next,h.next=M,M==null&&(m.pushmod=!0)),b._inuse=!1,m.modified=!0,m.length--,m.pushmod=!0,u=M;let v=d;v.arbiter=null,v.next=we.zpp_pool,we.zpp_pool=v;continue}let _=d.inner,f=d.active;if(d.active=d.stamp==i.stamp,d.active){a?(a=!1,i.c1=_,i.oc1=d):(i.hc2=!0,i.c2=_,i.oc2=d),_.r2x=d.px-i.b2.posx,_.r2y=d.py-i.b2.posy,_.r1x=d.px-i.b1.posx,_.r1y=d.py-i.b1.posy;let z=_.r2x*i.nx+_.r2y*i.ny,P=r+i.b2.sinertia*(z*z),k=_.r1x*i.nx+_.r1y*i.ny;P+=i.b1.sinertia*(k*k),_.tMass=P<j._nape.Config.epsilon*j._nape.Config.epsilon?0:1/P;let m=i.ny*_.r2x-i.nx*_.r2y,b=r+i.b2.sinertia*(m*m),M=i.ny*_.r1x-i.nx*_.r1y;b+=i.b1.sinertia*(M*M),_.nMass=b<j._nape.Config.epsilon*j._nape.Config.epsilon?0:1/b;let v=0,w=0,O=i.b2.angvel+i.b2.kinangvel;v=i.b2.velx+i.b2.kinvelx-_.r2y*O,w=i.b2.vely+i.b2.kinvely+_.r2x*O,O=i.b1.angvel+i.b1.kinangvel,v-=i.b1.velx+i.b1.kinvelx-_.r1y*O,w-=i.b1.vely+i.b1.kinvely+_.r1x*O;let E=i.nx*v+i.ny*w;d.elasticity=i.restitution,_.bounce=E*d.elasticity,_.bounce>-j._nape.Config.elasticThreshold&&(_.bounce=0),E=w*i.nx-v*i.ny;let C=j._nape.Config.staticFrictionThreshold;E*E>C*C?_.friction=i.dyn_fric:_.friction=i.stat_fric,_.jnAcc*=l,_.jtAcc*=l}f!=d.active&&(i.contacts.modified=!0),c=x,h=u,u=u.next,x=x.next}if(i.hc2){if(i.hpc2=!0,i.oc1.posOnly){let d=i.c1;i.c1=i.c2,i.c2=d;let _=i.oc1;i.oc1=i.oc2,i.oc2=_,i.hc2=!1}else i.oc2.posOnly&&(i.hc2=!1);i.oc1.posOnly&&(a=!0)}else i.hpc2=!1;if(i.jrAcc*=l,a||(i.rn1a=i.ny*i.c1.r1x-i.nx*i.c1.r1y,i.rt1a=i.c1.r1x*i.nx+i.c1.r1y*i.ny,i.rn1b=i.ny*i.c1.r2x-i.nx*i.c1.r2y,i.rt1b=i.c1.r2x*i.nx+i.c1.r2y*i.ny,i.k1x=i.b2.kinvelx-i.c1.r2y*i.b2.kinangvel-(i.b1.kinvelx-i.c1.r1y*i.b1.kinangvel),i.k1y=i.b2.kinvely+i.c1.r2x*i.b2.kinangvel-(i.b1.kinvely+i.c1.r1x*i.b1.kinangvel)),i.hc2)if(i.rn2a=i.ny*i.c2.r1x-i.nx*i.c2.r1y,i.rt2a=i.c2.r1x*i.nx+i.c2.r1y*i.ny,i.rn2b=i.ny*i.c2.r2x-i.nx*i.c2.r2y,i.rt2b=i.c2.r2x*i.nx+i.c2.r2y*i.ny,i.k2x=i.b2.kinvelx-i.c2.r2y*i.b2.kinangvel-(i.b1.kinvelx-i.c2.r1y*i.b1.kinangvel),i.k2y=i.b2.kinvely+i.c2.r2x*i.b2.kinangvel-(i.b1.kinvely+i.c2.r1x*i.b1.kinangvel),i.kMassa=r+i.b1.sinertia*i.rn1a*i.rn1a+i.b2.sinertia*i.rn1b*i.rn1b,i.kMassb=r+i.b1.sinertia*i.rn1a*i.rn2a+i.b2.sinertia*i.rn1b*i.rn2b,i.kMassc=r+i.b1.sinertia*i.rn2a*i.rn2a+i.b2.sinertia*i.rn2b*i.rn2b,i.kMassa*i.kMassa+2*i.kMassb*i.kMassb+i.kMassc*i.kMassc<j._nape.Config.illConditionedThreshold*(i.kMassa*i.kMassc-i.kMassb*i.kMassb)){i.Ka=i.kMassa,i.Kb=i.kMassb,i.Kc=i.kMassc;let _=i.kMassa*i.kMassc-i.kMassb*i.kMassb;if(_!=_)i.kMassa=i.kMassb=i.kMassc=0;else if(_==0){let f=0;i.kMassa!=0?i.kMassa=1/i.kMassa:(i.kMassa=0,f|=1),i.kMassc!=0?i.kMassc=1/i.kMassc:(i.kMassc=0,f|=2),i.kMassb=0}else{_=1/_;let f=i.kMassc*_;i.kMassc=i.kMassa*_,i.kMassa=f,i.kMassb*=-_}}else{if(i.hc2=!1,i.oc2.dist<i.oc1.dist){let _=i.c1;i.c1=i.c2,i.c2=_}i.oc2.active=!1,i.contacts.modified=!0}i.surfacex=i.b2.svelx,i.surfacey=i.b2.svely;let y=1;i.surfacex+=i.b1.svelx*y,i.surfacey+=i.b1.svely*y,i.surfacex=-i.surfacex,i.surfacey=-i.surfacey,i.rMass=i.b1.sinertia+i.b2.sinertia,i.rMass!=0&&(i.rMass=1/i.rMass),a&&(e.active=!1)}else{let i=e.fluidarb;i.pre_dt==-1&&(i.pre_dt=t);let l=t/i.pre_dt;i.pre_dt=t,i.r1x=i.centroidx-i.b1.posx,i.r1y=i.centroidy-i.b1.posy,i.r2x=i.centroidx-i.b2.posx,i.r2y=i.centroidy-i.b2.posy;let r=0,a=0;i.ws1.fluidEnabled&&i.ws1.fluidProperties.wrap_gravity!=null?(r=i.ws1.fluidProperties.gravityx,a=i.ws1.fluidProperties.gravityy):(r=this.gravityx,a=this.gravityy);let o=0,p=0;i.ws2.fluidEnabled&&i.ws2.fluidProperties.wrap_gravity!=null?(o=i.ws2.fluidProperties.gravityx,p=i.ws2.fluidProperties.gravityy):(o=this.gravityx,p=this.gravityy);let c=0,h=0;if(i.ws1.fluidEnabled&&i.ws2.fluidEnabled){let y=i.overlap*i.ws1.fluidProperties.density,d=i.overlap*i.ws2.fluidProperties.density;if(y>d){let _=y+d;c-=r*_,h-=a*_}else if(y<d){let _=y+d;c+=o*_,h+=p*_}else{let _=0,f=0;_=r+o,f=a+p;let z=.5;if(_*=z,f*=z,i.ws1.worldCOMx*_+i.ws1.worldCOMy*f>i.ws2.worldCOMx*_+i.ws2.worldCOMy*f){let P=y+d;c-=_*P,h-=f*P}else{let P=y+d;c+=_*P,h+=f*P}}}else if(i.ws1.fluidEnabled){let d=i.overlap*i.ws1.fluidProperties.density;c-=r*d,h-=a*d}else if(i.ws2.fluidEnabled){let d=i.overlap*i.ws2.fluidProperties.density;c+=o*d,h+=p*d}let u=t;if(c*=u,h*=u,i.buoyx=c,i.buoyy=h,i.b1.type==2){let y=i.b1.imass;i.b1.velx-=c*y,i.b1.vely-=h*y,i.b1.angvel-=(h*i.r1x-c*i.r1y)*i.b1.iinertia}if(i.b2.type==2){let y=i.b2.imass;i.b2.velx+=c*y,i.b2.vely+=h*y,i.b2.angvel+=(h*i.r2x-c*i.r2y)*i.b2.iinertia}if((!i.ws1.fluidEnabled||i.ws1.fluidProperties.viscosity==0)&&(!i.ws2.fluidEnabled||i.ws2.fluidProperties.viscosity==0))i.nodrag=!0,i.dampx=0,i.dampy=0,i.adamp=0;else{i.nodrag=!1;let y=0;if(i.ws1.fluidEnabled&&(i.ws2.validate_angDrag(),y+=i.ws1.fluidProperties.viscosity*i.ws2.angDrag*i.overlap/i.ws2.area),i.ws2.fluidEnabled&&(i.ws1.validate_angDrag(),y+=i.ws2.fluidProperties.viscosity*i.ws1.angDrag*i.overlap/i.ws1.area),y!=0){let z=i.b1.sinertia+i.b2.sinertia;z!=0?i.wMass=1/z:i.wMass=0,y*=4e-4;let P=2*Math.PI*y;i.agamma=1/(t*P*(2+P*t));let k=1/(1+i.agamma),m=t*P*P*i.agamma;i.agamma*=k,i.wMass*=k}else i.wMass=0,i.agamma=0;let d=i.b2.velx+i.b2.kinvelx-i.r2y*(i.b2.angvel+i.b2.kinangvel)-(i.b1.velx+i.b1.kinvelx-i.r1y*(i.b2.angvel+i.b2.kinangvel)),_=i.b2.vely+i.b2.kinvely+i.r2x*(i.b2.angvel+i.b2.kinangvel)-(i.b1.vely+i.b1.kinvely+i.r1x*(i.b1.angvel+i.b1.kinangvel));if(!(d*d+_*_<j._nape.Config.epsilon*j._nape.Config.epsilon)){let z=d*d+_*_,k=1/Math.sqrt(z);d*=k,_*=k,i.nx=d,i.ny=_}let f=0;if(i.ws1.fluidEnabled){let z=-i.ws1.fluidProperties.viscosity*i.overlap/i.ws2.area;if(i.ws2.type==0)f-=z*i.ws2.circle.radius*j._nape.Config.fluidLinearDrag/(2*i.ws2.circle.radius*Math.PI);else if(i.ws2.type===2){let P=i.ws2.capsule.radius;f-=z*P*j._nape.Config.fluidLinearDrag/(2*P*Math.PI)}else{let P=i.ws2.polygon,k=0,m=0,b=P.edges.head;for(;b!=null;){let M=b.elt;k+=M.length;let v=z*M.length*(M.gnormx*i.nx+M.gnormy*i.ny);v>0&&(v*=-j._nape.Config.fluidVacuumDrag,v=v),m-=v*.5*j._nape.Config.fluidLinearDrag,b=b.next}f+=m/k}}if(i.ws2.fluidEnabled){let z=-i.ws2.fluidProperties.viscosity*i.overlap/i.ws1.area;if(i.ws1.type==0)f-=z*i.ws1.circle.radius*j._nape.Config.fluidLinearDrag/(2*i.ws1.circle.radius*Math.PI);else if(i.ws1.type===2){let P=i.ws1.capsule.radius;f-=z*P*j._nape.Config.fluidLinearDrag/(2*P*Math.PI)}else{let P=i.ws1.polygon,k=0,m=0,b=P.edges.head;for(;b!=null;){let M=b.elt;k+=M.length;let v=z*M.length*(M.gnormx*i.nx+M.gnormy*i.ny);v>0&&(v*=-j._nape.Config.fluidVacuumDrag,v=v),m-=v*.5*j._nape.Config.fluidLinearDrag,b=b.next}f+=m/k}}if(f!=0){let z=i.b1.smass+i.b2.smass,P=0,k=0,m=0;if(P=z,k=0,m=z,i.b1.sinertia!=0){let E=i.r1x*i.b1.sinertia,C=i.r1y*i.b1.sinertia;P+=C*i.r1y,k+=-C*i.r1x,m+=E*i.r1x}if(i.b2.sinertia!=0){let E=i.r2x*i.b2.sinertia,C=i.r2y*i.b2.sinertia;P+=C*i.r2y,k+=-C*i.r2x,m+=E*i.r2x}let b=P*m-k*k;if(b!=b)m=0,k=m,P=k;else if(b==0){let E=0;P!=0?P=1/P:(P=0,E|=1),m!=0?m=1/m:(m=0,E|=2),k=0}else{b=1/b;let E=m*b;m=P*b,P=E,k*=-b}i.vMassa=P,i.vMassb=k,i.vMassc=m;let M,v=2*Math.PI*f;i.lgamma=1/(t*v*(2+v*t));let w=1/(1+i.lgamma);M=t*v*v*i.lgamma,i.lgamma*=w;let O=w;i.vMassa*=O,i.vMassb*=O,i.vMassc*=O}else i.vMassa=0,i.vMassb=0,i.vMassc=0,i.lgamma=0}let x=l;i.dampx*=x,i.dampy*=x,i.adamp*=l}}else if(e.colarb!=null){let i=e.colarb,l=!0,r=null,a=null,o=i.innards.next;i.hc2=!1;let p=i.contacts.next;for(;p!=null;){let c=p;if(c.stamp+j._nape.Config.arbiterExpirationDelay<i.stamp){let x=i.contacts,y,d;r==null?(y=x.next,d=y.next,x.next=d,x.next==null&&(x.pushmod=!0)):(y=r.next,d=y.next,r.next=d,d==null&&(x.pushmod=!0)),y._inuse=!1,x.modified=!0,x.length--,x.pushmod=!0,p=d;let _=i.innards,f,z;a==null?(f=_.next,z=f.next,_.next=z,_.next==null&&(_.pushmod=!0)):(f=a.next,z=f.next,a.next=z,z==null&&(_.pushmod=!0)),f._inuse=!1,_.modified=!0,_.length--,_.pushmod=!0,o=z;let P=c;P.arbiter=null,P.next=we.zpp_pool,we.zpp_pool=P;continue}let h=c.inner,u=c.active;c.active=c.stamp==i.stamp,c.active&&(l?(l=!1,i.c1=h,i.oc1=c):(i.hc2=!0,i.c2=h,i.oc2=c)),u!=c.active&&(i.contacts.modified=!0),r=p,a=o,o=o.next,p=p.next}if(i.hc2){if(i.hpc2=!0,i.oc1.posOnly){let c=i.c1;i.c1=i.c2,i.c2=c;let h=i.oc1;i.oc1=i.oc2,i.oc2=h,i.hc2=!1}else i.oc2.posOnly&&(i.hc2=!1);i.oc1.posOnly&&(l=!0)}else i.hpc2=!1;l&&(e.active=!1)}return s!=e.active&&(e.b1.arbiters.modified=!0,e.b2.arbiters.modified=!0,this.c_arbiters_true.modified=this.c_arbiters_false.modified=!0,this.s_arbiters.modified=this.f_arbiters.modified=!0),!1}prestep(e){let t=null,n=this.live_constraints.head;for(;n!=null;){let d=n.elt;if(d.preStep(e)){n=this.live_constraints.erase(t),d.broken(),this.constraintCbBreak(d),d.removeOnBreak?(d.component.sleeping=!0,this.midstep=!1,d.compound!=null?d.compound.wrap_constraints.remove(d.outer):this.wrap_constraints.remove(d.outer),this.midstep=!0):d.active=!1,d.clearcache();continue}t=n,n=n.next}let s=null,i=this.c_arbiters_true,l=i.head,r=this.c_arbiters_false!=null;for(r&&l==null&&(r=!1,l=this.c_arbiters_false.head,i=this.c_arbiters_false,s=null);l!=null;){let d=l.elt;if(this.presteparb(d,e)){let _,f;s==null?(_=i.head,f=_.next,i.head=f,i.head==null&&(i.pushmod=!0)):(_=s.next,f=_.next,s.next=f,f==null&&(i.pushmod=!0));let z=_;z.elt=null,z.next=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=z,i.modified=!0,i.length--,i.pushmod=!0,l=f,r&&l==null&&(r=!1,l=this.c_arbiters_false.head,i=this.c_arbiters_false,s=null);continue}s=l,l=l.next,r&&l==null&&(r=!1,l=this.c_arbiters_false.head,i=this.c_arbiters_false,s=null)}let a=null,o=this.f_arbiters,p=o.head,c=!1;for(c&&p==null&&(c=!1,o=null,a=null);p!=null;){let d=p.elt;if(this.presteparb(d,e)){let _,f;a==null?(_=o.head,f=_.next,o.head=f,o.head==null&&(o.pushmod=!0)):(_=a.next,f=_.next,a.next=f,f==null&&(o.pushmod=!0));let z=_;z.elt=null,z.next=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=z,o.modified=!0,o.length--,o.pushmod=!0,p=f,c&&p==null&&(c=!1,o=null,a=null);continue}a=p,p=p.next,c&&p==null&&(c=!1,o=null,a=null)}let h=null,u=this.s_arbiters,x=u.head,y=!1;for(y&&x==null&&(y=!1,u=null,h=null);x!=null;){let d=x.elt;if(this.presteparb(d,e)){let _,f;h==null?(_=u.head,f=_.next,u.head=f,u.head==null&&(u.pushmod=!0)):(_=h.next,f=_.next,h.next=f,f==null&&(u.pushmod=!0));let z=_;z.elt=null,z.next=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=z,u.modified=!0,u.length--,u.pushmod=!0,x=f,y&&x==null&&(y=!1,u=null,h=null);continue}h=x,x=x.next,y&&x==null&&(y=!1,u=null,h=null)}}warmStart(){let e=this.f_arbiters.head;for(;e!=null;){let i=e.elt;if(i.active&&(i.immState&1)!=0){let l=i.b1.imass;i.b1.velx-=i.dampx*l,i.b1.vely-=i.dampy*l;let r=i.b2.imass;i.b2.velx+=i.dampx*r,i.b2.vely+=i.dampy*r,i.b1.angvel-=i.b1.iinertia*(i.dampy*i.r1x-i.dampx*i.r1y),i.b2.angvel+=i.b2.iinertia*(i.dampy*i.r2x-i.dampx*i.r2y),i.b1.angvel-=i.adamp*i.b1.iinertia,i.b2.angvel+=i.adamp*i.b2.iinertia}e=e.next}let t=this.c_arbiters_false.head,n=!0;for(t==null&&(t=this.c_arbiters_true.head,n=!1);t!=null;){let i=t.elt;if(i.active&&(i.immState&1)!=0){let l=i.nx*i.c1.jnAcc-i.ny*i.c1.jtAcc,r=i.ny*i.c1.jnAcc+i.nx*i.c1.jtAcc,a=i.b1.imass;i.b1.velx-=l*a,i.b1.vely-=r*a,i.b1.angvel-=i.b1.iinertia*(r*i.c1.r1x-l*i.c1.r1y);let o=i.b2.imass;if(i.b2.velx+=l*o,i.b2.vely+=r*o,i.b2.angvel+=i.b2.iinertia*(r*i.c1.r2x-l*i.c1.r2y),i.hc2){let p=i.nx*i.c2.jnAcc-i.ny*i.c2.jtAcc,c=i.ny*i.c2.jnAcc+i.nx*i.c2.jtAcc,h=i.b1.imass;i.b1.velx-=p*h,i.b1.vely-=c*h,i.b1.angvel-=i.b1.iinertia*(c*i.c2.r1x-p*i.c2.r1y);let u=i.b2.imass;i.b2.velx+=p*u,i.b2.vely+=c*u,i.b2.angvel+=i.b2.iinertia*(c*i.c2.r2x-p*i.c2.r2y)}i.b2.angvel+=i.jrAcc*i.b2.iinertia,i.b1.angvel-=i.jrAcc*i.b1.iinertia}t=t.next,n&&t==null&&(t=this.c_arbiters_true.head,n=!1)}let s=this.live_constraints.head;for(;s!=null;)s.elt.warmStart(),s=s.next}iterateVel(e){let t=0,n=e;for(;t<n;){let s=t++,i=this.f_arbiters.head;for(;i!=null;){let p=i.elt;if(p.active&&(p.immState&1)!=0&&!p.nodrag){let c=p.b1.angvel+p.b1.kinangvel,h=p.b2.angvel+p.b2.kinangvel,u=p.b1.velx+p.b1.kinvelx-p.r1y*c-(p.b2.velx+p.b2.kinvelx-p.r2y*h),x=p.b1.vely+p.b1.kinvely+p.r1x*c-(p.b2.vely+p.b2.kinvely+p.r2x*h),y=p.vMassa*u+p.vMassb*x;x=p.vMassb*u+p.vMassc*x,u=y;let d=p.lgamma;u-=p.dampx*d,x-=p.dampy*d;let _=1;p.dampx+=u*_,p.dampy+=x*_;let f=p.b1.imass;p.b1.velx-=u*f,p.b1.vely-=x*f;let z=p.b2.imass;p.b2.velx+=u*z,p.b2.vely+=x*z,p.b1.angvel-=p.b1.iinertia*(x*p.r1x-u*p.r1y),p.b2.angvel+=p.b2.iinertia*(x*p.r2x-u*p.r2y);let P=(c-h)*p.wMass-p.adamp*p.agamma;p.adamp+=P,p.b1.angvel-=P*p.b1.iinertia,p.b2.angvel+=P*p.b2.iinertia}i=i.next}let l=null,r=this.live_constraints.head;for(;r!=null;){let p=r.elt;if(p.applyImpulseVel()){r=this.live_constraints.erase(l),p.broken(),this.constraintCbBreak(p),p.removeOnBreak?(p.component.sleeping=!0,this.midstep=!1,p.compound!=null?p.compound.wrap_constraints.remove(p.outer):this.wrap_constraints.remove(p.outer),this.midstep=!0):p.active=!1,p.clearcache();continue}l=r,r=r.next}let a=this.c_arbiters_false.head,o=!0;for(a==null&&(a=this.c_arbiters_true.head,o=!1);a!=null;){let p=a.elt;if(p.active&&(p.immState&1)!=0){let c=p.k1x+p.b2.velx-p.c1.r2y*p.b2.angvel-(p.b1.velx-p.c1.r1y*p.b1.angvel),h=p.k1y+p.b2.vely+p.c1.r2x*p.b2.angvel-(p.b1.vely+p.c1.r1x*p.b1.angvel),u=(h*p.nx-c*p.ny+p.surfacex)*p.c1.tMass,x=p.c1.friction*p.c1.jnAcc,y=p.c1.jtAcc,d=y-u;d>x?d=x:d<-x&&(d=-x),u=d-y,p.c1.jtAcc=d;let _=-p.ny*u,f=p.nx*u;if(p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=p.rt1b*u*p.b2.iinertia,p.b1.angvel-=p.rt1a*u*p.b1.iinertia,p.hc2){let z=p.k2x+p.b2.velx-p.c2.r2y*p.b2.angvel-(p.b1.velx-p.c2.r1y*p.b1.angvel),P=p.k2y+p.b2.vely+p.c2.r2x*p.b2.angvel-(p.b1.vely+p.c2.r1x*p.b1.angvel);u=(P*p.nx-z*p.ny+p.surfacex)*p.c2.tMass,x=p.c2.friction*p.c2.jnAcc,y=p.c2.jtAcc,d=y-u,d>x?d=x:d<-x&&(d=-x),u=d-y,p.c2.jtAcc=d,_=-p.ny*u,f=p.nx*u,p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=p.rt2b*u*p.b2.iinertia,p.b1.angvel-=p.rt2a*u*p.b1.iinertia,c=p.k1x+p.b2.velx-p.c1.r2y*p.b2.angvel-(p.b1.velx-p.c1.r1y*p.b1.angvel),h=p.k1y+p.b2.vely+p.c1.r2x*p.b2.angvel-(p.b1.vely+p.c1.r1x*p.b1.angvel),z=p.k2x+p.b2.velx-p.c2.r2y*p.b2.angvel-(p.b1.velx-p.c2.r1y*p.b1.angvel),P=p.k2y+p.b2.vely+p.c2.r2x*p.b2.angvel-(p.b1.vely+p.c2.r1x*p.b1.angvel);let k=p.c1.jnAcc,m=p.c2.jnAcc,b=c*p.nx+h*p.ny+p.surfacey+p.c1.bounce-(p.Ka*k+p.Kb*m),M=z*p.nx+P*p.ny+p.surfacey+p.c2.bounce-(p.Kb*k+p.Kc*m),v=-(p.kMassa*b+p.kMassb*M),w=-(p.kMassb*b+p.kMassc*M);v>=0&&w>=0?(b=v-k,M=w-m,p.c1.jnAcc=v,p.c2.jnAcc=w):(v=-p.c1.nMass*b,v>=0&&p.Kb*v+M>=0?(b=v-k,M=-m,p.c1.jnAcc=v,p.c2.jnAcc=0):(w=-p.c2.nMass*M,w>=0&&p.Kb*w+b>=0?(b=-k,M=w-m,p.c1.jnAcc=0,p.c2.jnAcc=w):b>=0&&M>=0?(b=-k,M=-m,p.c1.jnAcc=p.c2.jnAcc=0):(b=0,M=0))),u=b+M,_=p.nx*u,f=p.ny*u,p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=(p.rn1b*b+p.rn2b*M)*p.b2.iinertia,p.b1.angvel-=(p.rn1a*b+p.rn2a*M)*p.b1.iinertia}else p.radius!=0&&(u=(p.b2.angvel-p.b1.angvel)*p.rMass,x=p.rfric*p.c1.jnAcc,y=p.jrAcc,p.jrAcc-=u,p.jrAcc>x?p.jrAcc=x:p.jrAcc<-x&&(p.jrAcc=-x),u=p.jrAcc-y,p.b2.angvel+=u*p.b2.iinertia,p.b1.angvel-=u*p.b1.iinertia),c=p.k1x+p.b2.velx-p.c1.r2y*p.b2.angvel-(p.b1.velx-p.c1.r1y*p.b1.angvel),h=p.k1y+p.b2.vely+p.c1.r2x*p.b2.angvel-(p.b1.vely+p.c1.r1x*p.b1.angvel),u=(p.c1.bounce+(p.nx*c+p.ny*h)+p.surfacey)*p.c1.nMass,y=p.c1.jnAcc,d=y-u,d<0&&(d=0),u=d-y,p.c1.jnAcc=d,_=p.nx*u,f=p.ny*u,p.b2.velx+=_*p.b2.imass,p.b2.vely+=f*p.b2.imass,p.b1.velx-=_*p.b1.imass,p.b1.vely-=f*p.b1.imass,p.b2.angvel+=p.rn1b*u*p.b2.iinertia,p.b1.angvel-=p.rn1a*u*p.b1.iinertia}a=a.next,o&&a==null&&(a=this.c_arbiters_true.head,o=!1)}}}iteratePos(e){let t=0,n=e;for(;t<n;){let s=t++,i=null,l=this.live_constraints.head;for(;l!=null;){let o=l.elt;if(!o.__velocity&&o.stiff&&o.applyImpulsePos()){l=this.live_constraints.erase(i),o.broken(),this.constraintCbBreak(o),o.removeOnBreak?(o.component.sleeping=!0,this.midstep=!1,o.compound!=null?o.compound.wrap_constraints.remove(o.outer):this.wrap_constraints.remove(o.outer),this.midstep=!0):o.active=!1,o.clearcache();continue}i=l,l=l.next}let r=this.c_arbiters_false.head,a=!0;for(r==null&&(r=this.c_arbiters_true.head,a=!1);r!=null;){let o=r.elt;if(o.active&&(o.immState&1)!=0)if(o.ptype==2){let p=o.c1,c=0,h=0;c=o.b2.axisy*p.lr2x-o.b2.axisx*p.lr2y,h=p.lr2x*o.b2.axisx+p.lr2y*o.b2.axisy;let u=1;c+=o.b2.posx*u,h+=o.b2.posy*u;let x=0,y=0;x=o.b1.axisy*p.lr1x-o.b1.axisx*p.lr1y,y=p.lr1x*o.b1.axisx+p.lr1y*o.b1.axisy;let d=1;x+=o.b1.posx*d,y+=o.b1.posy*d;let _=0,f=0;_=c-x,f=h-y;let z=Math.sqrt(_*_+f*f),P=o.radius-j._nape.Config.collisionSlop,k=z-P;if(_*o.nx+f*o.ny<0&&(_=-_,f=-f,k-=o.radius),k<0)if(z<j._nape.Config.epsilon)o.b1.smass!=0?o.b1.posx+=j._nape.Config.epsilon*10:o.b2.posx+=j._nape.Config.epsilon*10;else{let m=1/z;_*=m,f*=m;let b=.5*(x+c),M=.5*(y+h),v=z-P;x=b-o.b1.posx,y=M-o.b1.posy,c=b-o.b2.posx,h=M-o.b2.posy;let w=f*x-_*y,O=f*c-_*h,E=o.b2.smass+O*O*o.b2.sinertia+o.b1.smass+w*w*o.b1.sinertia;if(E!=0){let C=-o.biasCoef*v/E,N=0,Z=0,S=C;N=_*S,Z=f*S;let A=o.b1.imass;o.b1.posx-=N*A,o.b1.posy-=Z*A;let F=o.b1,B=-w*o.b1.iinertia*C;if(F.rot+=B,B*B>1e-4)F.axisx=Math.sin(F.rot),F.axisy=Math.cos(F.rot);else{let T=B*B,V=1-.5*T,W=1-T*T/8,$=(V*F.axisx+B*F.axisy)*W;F.axisy=(V*F.axisy-B*F.axisx)*W,F.axisx=$}let G=o.b2.imass;o.b2.posx+=N*G,o.b2.posy+=Z*G;let J=o.b2,R=O*o.b2.iinertia*C;if(J.rot+=R,R*R>1e-4)J.axisx=Math.sin(J.rot),J.axisy=Math.cos(J.rot);else{let T=R*R,V=1-.5*T,W=1-T*T/8,$=(V*J.axisx+R*J.axisy)*W;J.axisy=(V*J.axisy-R*J.axisx)*W,J.axisx=$}}}}else{let p=0,c=0,h,u=0,x=0,y=0,d=0;if(o.ptype==0){p=o.b1.axisy*o.lnormx-o.b1.axisx*o.lnormy,c=o.lnormx*o.b1.axisx+o.lnormy*o.b1.axisy,h=o.lproj+(p*o.b1.posx+c*o.b1.posy),u=o.b2.axisy*o.c1.lr1x-o.b2.axisx*o.c1.lr1y,x=o.c1.lr1x*o.b2.axisx+o.c1.lr1y*o.b2.axisy;let z=1;if(u+=o.b2.posx*z,x+=o.b2.posy*z,o.hpc2){y=o.b2.axisy*o.c2.lr1x-o.b2.axisx*o.c2.lr1y,d=o.c2.lr1x*o.b2.axisx+o.c2.lr1y*o.b2.axisy;let P=1;y+=o.b2.posx*P,d+=o.b2.posy*P}}else{p=o.b2.axisy*o.lnormx-o.b2.axisx*o.lnormy,c=o.lnormx*o.b2.axisx+o.lnormy*o.b2.axisy,h=o.lproj+(p*o.b2.posx+c*o.b2.posy),u=o.b1.axisy*o.c1.lr1x-o.b1.axisx*o.c1.lr1y,x=o.c1.lr1x*o.b1.axisx+o.c1.lr1y*o.b1.axisy;let z=1;if(u+=o.b1.posx*z,x+=o.b1.posy*z,o.hpc2){y=o.b1.axisy*o.c2.lr1x-o.b1.axisx*o.c2.lr1y,d=o.c2.lr1x*o.b1.axisx+o.c2.lr1y*o.b1.axisy;let P=1;y+=o.b1.posx*P,d+=o.b1.posy*P}}let _=u*p+x*c-h-o.radius;_+=j._nape.Config.collisionSlop;let f=0;if(o.hpc2&&(f=y*p+d*c-h-o.radius,f+=j._nape.Config.collisionSlop),_<0||f<0){o.rev&&(p=-p,c=-c);let z=0,P=0;z=u-o.b1.posx,P=x-o.b1.posy;let k=0,m=0;k=u-o.b2.posx,m=x-o.b2.posy;let b=0,M=0,v=0,w=0;if(o.hpc2){b=y-o.b1.posx,M=d-o.b1.posy,v=y-o.b2.posx,w=d-o.b2.posy;let O=c*z-p*P,E=c*k-p*m,C=c*b-p*M,N=c*v-p*w,Z=o.b1.smass+o.b2.smass;o.kMassa=Z+o.b1.sinertia*O*O+o.b2.sinertia*E*E,o.kMassb=Z+o.b1.sinertia*O*C+o.b2.sinertia*E*N,o.kMassc=Z+o.b1.sinertia*C*C+o.b2.sinertia*N*N;let S=0,A=0,F=0;S=o.kMassa,A=o.kMassb,F=o.kMassc;let B=_*o.biasCoef,G=f*o.biasCoef;for(;;){let J=0,R=0;J=B,R=G,J=-J,R=-R;let T=o.kMassa*o.kMassc-o.kMassb*o.kMassb;if(T!=T)R=0,J=R;else if(T==0)o.kMassa!=0?J/=o.kMassa:J=0,o.kMassc!=0?R/=o.kMassc:R=0;else{T=1/T;let $=T*(o.kMassc*J-o.kMassb*R);R=T*(o.kMassa*R-o.kMassb*J),J=$}if(J>=0&&R>=0){let $=(J+R)*o.b1.imass;o.b1.posx-=p*$,o.b1.posy-=c*$;let Y=o.b1,X=-o.b1.iinertia*(O*J+C*R);if(Y.rot+=X,X*X>1e-4)Y.axisx=Math.sin(Y.rot),Y.axisy=Math.cos(Y.rot);else{let D=X*X,I=1-.5*D,U=1-D*D/8,H=(I*Y.axisx+X*Y.axisy)*U;Y.axisy=(I*Y.axisy-X*Y.axisx)*U,Y.axisx=H}let ee=(J+R)*o.b2.imass;o.b2.posx+=p*ee,o.b2.posy+=c*ee;let q=o.b2,L=o.b2.iinertia*(E*J+N*R);if(q.rot+=L,L*L>1e-4)q.axisx=Math.sin(q.rot),q.axisy=Math.cos(q.rot);else{let D=L*L,I=1-.5*D,U=1-D*D/8,H=(I*q.axisx+L*q.axisy)*U;q.axisy=(I*q.axisy-L*q.axisx)*U,q.axisx=H}break}J=-B/S,R=0;let V=A*J+G;if(J>=0&&V>=0){let $=(J+R)*o.b1.imass;o.b1.posx-=p*$,o.b1.posy-=c*$;let Y=o.b1,X=-o.b1.iinertia*(O*J+C*R);if(Y.rot+=X,X*X>1e-4)Y.axisx=Math.sin(Y.rot),Y.axisy=Math.cos(Y.rot);else{let D=X*X,I=1-.5*D,U=1-D*D/8,H=(I*Y.axisx+X*Y.axisy)*U;Y.axisy=(I*Y.axisy-X*Y.axisx)*U,Y.axisx=H}let ee=(J+R)*o.b2.imass;o.b2.posx+=p*ee,o.b2.posy+=c*ee;let q=o.b2,L=o.b2.iinertia*(E*J+N*R);if(q.rot+=L,L*L>1e-4)q.axisx=Math.sin(q.rot),q.axisy=Math.cos(q.rot);else{let D=L*L,I=1-.5*D,U=1-D*D/8,H=(I*q.axisx+L*q.axisy)*U;q.axisy=(I*q.axisy-L*q.axisx)*U,q.axisx=H}break}J=0,R=-G/F;let W=A*R+B;if(R>=0&&W>=0){let $=(J+R)*o.b1.imass;o.b1.posx-=p*$,o.b1.posy-=c*$;let Y=o.b1,X=-o.b1.iinertia*(O*J+C*R);if(Y.rot+=X,X*X>1e-4)Y.axisx=Math.sin(Y.rot),Y.axisy=Math.cos(Y.rot);else{let D=X*X,I=1-.5*D,U=1-D*D/8,H=(I*Y.axisx+X*Y.axisy)*U;Y.axisy=(I*Y.axisy-X*Y.axisx)*U,Y.axisx=H}let ee=(J+R)*o.b2.imass;o.b2.posx+=p*ee,o.b2.posy+=c*ee;let q=o.b2,L=o.b2.iinertia*(E*J+N*R);if(q.rot+=L,L*L>1e-4)q.axisx=Math.sin(q.rot),q.axisy=Math.cos(q.rot);else{let D=L*L,I=1-.5*D,U=1-D*D/8,H=(I*q.axisx+L*q.axisy)*U;q.axisy=(I*q.axisy-L*q.axisx)*U,q.axisx=H}break}break}}else{let O=c*z-p*P,E=c*k-p*m,C=o.b2.smass+E*E*o.b2.sinertia+o.b1.smass+O*O*o.b1.sinertia;if(C!=0){let N=-o.biasCoef*_/C,Z=0,S=0,A=N;Z=p*A,S=c*A;let F=o.b1.imass;o.b1.posx-=Z*F,o.b1.posy-=S*F;let B=o.b1,G=-O*o.b1.iinertia*N;if(B.rot+=G,G*G>1e-4)B.axisx=Math.sin(B.rot),B.axisy=Math.cos(B.rot);else{let V=G*G,W=1-.5*V,$=1-V*V/8,Y=(W*B.axisx+G*B.axisy)*$;B.axisy=(W*B.axisy-G*B.axisx)*$,B.axisx=Y}let J=o.b2.imass;o.b2.posx+=Z*J,o.b2.posy+=S*J;let R=o.b2,T=E*o.b2.iinertia*N;if(R.rot+=T,T*T>1e-4)R.axisx=Math.sin(R.rot),R.axisy=Math.cos(R.rot);else{let V=T*T,W=1-.5*V,$=1-V*V/8,Y=(W*R.axisx+T*R.axisy)*$;R.axisy=(W*R.axisy-T*R.axisx)*$,R.axisx=Y}}}}}r=r.next,a&&r==null&&(r=this.c_arbiters_true.head,a=!1)}}}group_ignore(e,t){let n=e;for(;n!=null&&n.group==null;)n.ishape!=null?n=n.ishape.body:n.icompound!=null?n=n.icompound.compound:n=n.ibody.compound;let s=n==null?null:n.group;if(s==null)return!1;{let i=t;for(;i!=null&&i.group==null;)i.ishape!=null?i=i.ishape.body:i.icompound!=null?i=i.icompound.compound:i=i.ibody.compound;let l=i==null?null:i.group;if(l==null)return!1;{let r=!1;for(;s!=null&&l!=null;){if(s==l){r=s.ignore;break}s.depth<l.depth?l=l.group:s=s.group}return r}}}interactionType(e,t,n,s){let i;i=!1;let l=n.constraints.head;for(;l!=null;){let a=l.elt;if(a.ignore&&a.pair_exists(n.id,s.id)){i=!0;break}l=l.next}let r;if(i)r=!1;else{let a=e;for(;a!=null&&a.group==null;)a.ishape!=null?a=a.ishape.body:a.icompound!=null?a=a.icompound.compound:a=a.ibody.compound;let o=a==null?null:a.group,p;if(o==null)p=!1;else{let c=t;for(;c!=null&&c.group==null;)c.ishape!=null?c=c.ishape.body:c.icompound!=null?c=c.icompound.compound:c=c.ibody.compound;let h=c==null?null:c.group;if(h==null)p=!1;else{let u=!1;for(;o!=null&&h!=null;){if(o==h){u=o.ignore;break}o.depth<h.depth?h=h.group:o=o.group}p=u}}r=!p}if(r){let a;if(e.sensorEnabled||t.sensorEnabled){let o=e.filter,p=t.filter;a=(o.sensorMask&p.sensorGroup)!=0&&(p.sensorMask&o.sensorGroup)!=0}else a=!1;if(a)return 2;{let o;if(e.fluidEnabled||t.fluidEnabled){let p=e.filter,c=t.filter;o=(p.fluidMask&c.fluidGroup)!=0&&(c.fluidMask&p.fluidGroup)!=0}else o=!1;if(o&&!(n.imass==0&&s.imass==0&&n.iinertia==0&&s.iinertia==0))return 0;{let p=e.filter,c=t.filter;return(p.collisionMask&c.collisionGroup)!=0&&(c.collisionMask&p.collisionGroup)!=0&&!(n.imass==0&&s.imass==0&&n.iinertia==0&&s.iinertia==0)?1:-1}}}else return-1}narrowPhase(e,t,n,s,i){let l=null,r=e.body,a=t.body,o;o=!1;let p=r.constraints.head;for(;p!=null;){let u=p.elt;if(u.ignore&&u.pair_exists(r.id,a.id)){o=!0;break}p=p.next}let c,h;if(o)h=!1;else{let u=e;for(;u!=null&&u.group==null;)u.ishape!=null?u=u.ishape.body:u.icompound!=null?u=u.icompound.compound:u=u.ibody.compound;let x=u==null?null:u.group,y;if(x==null)y=!1;else{let d=t;for(;d!=null&&d.group==null;)d.ishape!=null?d=d.ishape.body:d.icompound!=null?d=d.icompound.compound:d=d.ibody.compound;let _=d==null?null:d.group;if(_==null)y=!1;else{let f=!1;for(;x!=null&&_!=null;){if(x==_){f=x.ignore;break}x.depth<_.depth?_=_.group:x=x.group}y=f}}h=!y}if(h){let u;if(e.sensorEnabled||t.sensorEnabled){let x=e.filter,y=t.filter;u=(x.sensorMask&y.sensorGroup)!=0&&(y.sensorMask&x.sensorGroup)!=0}else u=!1;if(u)c=2;else{let x;if(e.fluidEnabled||t.fluidEnabled){let y=e.filter,d=t.filter;x=(y.fluidMask&d.fluidGroup)!=0&&(d.fluidMask&y.fluidGroup)!=0}else x=!1;if(x&&!(r.imass==0&&a.imass==0&&r.iinertia==0&&a.iinertia==0))c=0;else{let y=e.filter,d=t.filter;c=(y.collisionMask&d.collisionGroup)!=0&&(d.collisionMask&y.collisionGroup)!=0&&!(r.imass==0&&a.imass==0&&r.iinertia==0&&a.iinertia==0)?1:-1}}}else c=-1;if(c!=-1){let u,x;e.type>t.type?(u=t,x=e):e.type==t.type?e.id<t.id?(u=e,x=t):(x=e,u=t):(u=e,x=t);let y=u==t;if(c==0){let d;if(s==null){let k=null,b=(r.arbiters.length<a.arbiters.length?r:a).arbiters.head;for(;b!=null;){let M=b.elt;if(M.id==u.id&&M.di==x.id){k=M;break}b=b.next}d=k}else d=s;let _=d==null,f,z=!1;if(_)Pt.zpp_pool==null?f=new Pt:(f=Pt.zpp_pool,Pt.zpp_pool=f.next,f.next=null);else if(d.fluidarb==null){d.cleared=!0;{let m=d.b1.arbiters,b=null,M=m.head,v=!1;for(;M!=null;){if(M.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=M,M=M.next}}{let m=d.b2.arbiters,b=null,M=m.head,v=!1;for(;M!=null;){if(M.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=M,M=M.next}}d.pair!=null&&(d.pair.arb=null,d.pair=null),d.active=!1,this.f_arbiters.modified=!0,Pt.zpp_pool==null?f=new Pt:(f=Pt.zpp_pool,Pt.zpp_pool=f.next,f.next=null),f.intchange=!0,_=!0,z=!0}else f=d.fluidarb;let P=4;if(_||f.stamp!=this.stamp||i)if(f.stamp=this.stamp,Ee.flowCollide(u,x,f)){if(_){let k=x.id;f.b1=e.body,f.ws1=e,f.b2=t.body,f.ws2=t,f.id=u.id,f.di=k;let m=f.b1.arbiters,b;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?b=new j._zpp.util.ZNPNode_ZPP_Arbiter:(b=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=b.next,b.next=null),b.elt=f;let M=b;M.next=m.head,m.head=M,m.modified=!0,m.length++;let v=f.b2.arbiters,w;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?w=new j._zpp.util.ZNPNode_ZPP_Arbiter:(w=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=w.next,w.next=null),w.elt=f;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++,f.active=!0,f.present=0,f.cleared=!1,f.sleeping=!1,f.fresh=!1,f.presentable=!1,f.nx=0,f.ny=1,f.dampx=0,f.dampy=0,f.adamp=0;let E=this.f_arbiters,C;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?C=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(C=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=C.next,C.next=null),C.elt=f;let N=C;N.next=E.head,E.head=N,E.modified=!0,E.length++,f.fresh=!z}else f.fresh=f.up_stamp<this.stamp-1||f.endGenerated==this.stamp&&i;if(f.up_stamp=f.stamp,f.fresh||(f.immState&4)==0){f.immState=1;let k=!1,m=f.ws1.id>f.ws2.id?f.ws2:f.ws1,b=f.ws1.id>f.ws2.id?f.ws1:f.ws2,M=this.mrca1;for(;M.head!=null;){let C=M.head;M.head=C.next;let N=C;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,M.head==null&&(M.pushmod=!0),M.modified=!0,M.length--}M.pushmod=!0;let v=this.mrca2;for(;v.head!=null;){let C=v.head;v.head=C.next;let N=C;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,v.head==null&&(v.pushmod=!0),v.modified=!0,v.length--}if(v.pushmod=!0,m.cbSet!=null){let C=this.mrca1,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=m;let Z=N;Z.next=C.head,C.head=Z,C.modified=!0,C.length++}if(m.body.cbSet!=null){let C=this.mrca1,N=m.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=C.head,C.head=S,C.modified=!0,C.length++}if(b.cbSet!=null){let C=this.mrca2,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=b;let Z=N;Z.next=C.head,C.head=Z,C.modified=!0,C.length++}if(b.body.cbSet!=null){let C=this.mrca2,N=b.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=C.head,C.head=S,C.modified=!0,C.length++}let w=m.body.compound,O=b.body.compound;for(;w!=O;){let C=w==null?0:w.depth,N=O==null?0:O.depth;if(C<N){if(O.cbSet!=null){let Z=this.mrca2,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=O;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}O=O.compound}else{if(w.cbSet!=null){let Z=this.mrca1,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=w;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}w=w.compound}}let E=this.mrca1.head;for(;E!=null;){let C=E.elt,N=this.mrca2.head;for(;N!=null;){let Z=N.elt,S=C.cbSet,A=Z.cbSet,F=S.manager,B=null,J=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;J!=null;){let L=J.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){B=L;break}J=J.next}if(B==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),B=L,S.cbpairs.add(B),A!=S&&A.cbpairs.add(B)}if(B.zip_listeners&&(B.zip_listeners=!1,B.__validate()),B.listeners.head==null){N=N.next;continue}let R=null,T=null,V=this.prelisteners;for(;V.head!=null;){let L=V.head;V.head=L.next;let D=L;D.elt=null,D.next=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=D,V.head==null&&(V.pushmod=!0),V.modified=!0,V.length--}V.pushmod=!0;let W=null,$=S.manager,Y=null,ee=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;ee!=null;){let L=ee.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){Y=L;break}ee=ee.next}if(Y==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),Y=L,S.cbpairs.add(Y),A!=S&&A.cbpairs.add(Y)}Y.zip_listeners&&(Y.zip_listeners=!1,Y.__validate());let q=Y.listeners.head;for(;q!=null;){let L=q.elt;if(L.event==5&&(L.itype&P)!=0){let D=this.prelisteners,I;j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?I=new j._zpp.util.ZNPNode_ZPP_InteractionListener:(I=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=I.next,I.next=null),I.elt=L;let U=I;W==null?(U.next=D.head,D.head=U):(U.next=W.next,W.next=U),D.pushmod=D.modified=!0,D.length++,W=U,k=k||!L.pure}q=q.next}if(this.prelisteners.head==null){N=N.next;continue}if(R=j._zpp.phys.ZPP_Interactor.get(C,Z),R==null&&(T=Wt.get(C,Z),this.add_callbackset(T)),R==null||(R.FLUIDstamp!=this.stamp||i)&&(R.FLUIDstate&4)==0){if(T!=null&&(R=T),R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7?(R.COLLISIONstamp=this.stamp,R.SENSORstamp=this.stamp,R.FLUIDstamp=this.stamp):R.FLUIDstamp=this.stamp,U=U.next}f.mutable=!0,f.wrap_position!=null&&(f.wrap_position.zpp_inner._immutable=!1);let L=f.active;f.active=!0;let D=!1;this.precb.zpp_inner.pre_arbiter=f,this.precb.zpp_inner.set=R;let I=this.prelisteners.head;for(;I!=null;){let U=I.elt;this.precb.zpp_inner.listener=U;let H=this.precb.zpp_inner,K=R.int1,ne=R.int2,re,se=U.options1,ie=K.cbTypes;if(se.nonemptyintersection(ie,se.includes)&&!se.nonemptyintersection(ie,se.excludes)){let oe=U.options2,he=ne.cbTypes;re=oe.nonemptyintersection(he,oe.includes)&&!oe.nonemptyintersection(he,oe.excludes)}else re=!1;re?(H.int1=K,H.int2=ne):(H.int1=ne,H.int2=K),this.precb.zpp_inner.pre_swapped=C!=this.precb.zpp_inner.int1;let ae=U.handlerp(this.precb);if(ae!=null){let oe;Q.PreFlag_ACCEPT==null&&(Q.internal=!0,Q.PreFlag_ACCEPT=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT?oe=5:(Q.PreFlag_ACCEPT_ONCE==null&&(Q.internal=!0,Q.PreFlag_ACCEPT_ONCE=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT_ONCE?oe=1:(Q.PreFlag_IGNORE==null&&(Q.internal=!0,Q.PreFlag_IGNORE=new j._nape.callbacks.PreFlag,Q.internal=!1),oe=ae==Q.PreFlag_IGNORE?6:2)),f.immState=oe}I=I.next}if(f.mutable=!1,f.wrap_position!=null&&(f.wrap_position.zpp_inner._immutable=!0),f.active=L,R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7&&(R.COLLISIONstate=f.immState,R.SENSORstate=f.immState),R.FLUIDstate=f.immState,U=U.next}}else R==null?(f.immState&4)==0&&(f.immState=1):f.immState=R.FLUIDstate;N=N.next}E=E.next}if(k&&(f.immState&4)==0){if(f.b1.type==2){let C=f.b1;C.world||(C.component.waket=this.stamp+(this.midstep?0:1),C.type==3&&(C.kinematicDelaySleep=!0),C.component.sleeping&&this.really_wake(C,!1))}if(f.b1.type==2){let C=f.b2;C.world||(C.component.waket=this.stamp+(this.midstep?0:1),C.type==3&&(C.kinematicDelaySleep=!0),C.component.sleeping&&this.really_wake(C,!1))}}}if((f.immState&1)!=0){if(f.b1.type==2&&f.b1.component.sleeping){let k=f.b1;k.world||(k.component.waket=this.stamp+(this.midstep?0:1),k.type==3&&(k.kinematicDelaySleep=!0),k.component.sleeping&&this.really_wake(k,!1))}if(f.b2.type==2&&f.b2.component.sleeping){let k=f.b2;k.world||(k.component.waket=this.stamp+(this.midstep?0:1),k.type==3&&(k.kinematicDelaySleep=!0),k.component.sleeping&&this.really_wake(k,!1))}}if(f.sleeping){f.sleeping=!1;let k=this.f_arbiters,m;j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_FluidArbiter:(m=j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_FluidArbiter.zpp_pool=m.next,m.next=null),m.elt=f;let b=m;b.next=k.head,k.head=b,k.modified=!0,k.length++}l=f}else if(_){let k=f;k.next=Pt.zpp_pool,Pt.zpp_pool=k,l=null}else l=f;else l=f}else if(c==1){let d=n?this.c_arbiters_true:this.c_arbiters_false,_;if(s==null){let m=null,M=(r.arbiters.length<a.arbiters.length?r:a).arbiters.head;for(;M!=null;){let v=M.elt;if(v.id==u.id&&v.di==x.id){m=v;break}M=M.next}_=m}else _=s;let f=_==null,z,P=!1;if(f)ut.zpp_pool==null?z=new ut:(z=ut.zpp_pool,ut.zpp_pool=z.next,z.next=null),z.stat=n;else if(_.colarb==null){_.cleared=!0;{let b=_.b1.arbiters,M=null,v=b.head,w=!1;for(;v!=null;){if(v.elt==_){let O,E;M==null?(O=b.head,E=O.next,b.head=E,b.head==null&&(b.pushmod=!0)):(O=M.next,E=O.next,M.next=E,E==null&&(b.pushmod=!0));let C=O;C.elt=null,C.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=C,b.modified=!0,b.length--,b.pushmod=!0,w=!0;break}M=v,v=v.next}}{let b=_.b2.arbiters,M=null,v=b.head,w=!1;for(;v!=null;){if(v.elt==_){let O,E;M==null?(O=b.head,E=O.next,b.head=E,b.head==null&&(b.pushmod=!0)):(O=M.next,E=O.next,M.next=E,E==null&&(b.pushmod=!0));let C=O;C.elt=null,C.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=C,b.modified=!0,b.length--,b.pushmod=!0,w=!0;break}M=v,v=v.next}}_.pair!=null&&(_.pair.arb=null,_.pair=null),_.active=!1,this.f_arbiters.modified=!0,ut.zpp_pool==null?z=new ut:(z=ut.zpp_pool,ut.zpp_pool=z.next,z.next=null),z.intchange=!0,z.stat=n,f=!0,P=!0}else z=_.colarb,y=u!=z.s1,z.stat!=n&&(z.stat=n,z.sleeping||((n?this.c_arbiters_false:this.c_arbiters_true).remove(z),d.add(z)));let k=1;if(f||z.stamp!=this.stamp||i)if(z.stamp=this.stamp,Ee.contactCollide(u,x,z,y)){if(f){let m=x.id;z.b1=e.body,z.ws1=e,z.b2=t.body,z.ws2=t,z.id=u.id,z.di=m;let b=z.b1.arbiters,M;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?M=new j._zpp.util.ZNPNode_ZPP_Arbiter:(M=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=M.next,M.next=null),M.elt=z;let v=M;v.next=b.head,b.head=v,b.modified=!0,b.length++;let w=z.b2.arbiters,O;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?O=new j._zpp.util.ZNPNode_ZPP_Arbiter:(O=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=O.next,O.next=null),O.elt=z;let E=O;E.next=w.head,w.head=E,w.modified=!0,w.length++,z.active=!0,z.present=0,z.cleared=!1,z.sleeping=!1,z.fresh=!1,z.presentable=!1,z.s1=e,z.s2=t,z.userdef_restitution||(z.s1.material.elasticity<=-1/0||z.s2.material.elasticity<=-1/0?z.restitution=0:z.s1.material.elasticity>=1/0||z.s2.material.elasticity>=1/0?z.restitution=1:z.restitution=(z.s1.material.elasticity+z.s2.material.elasticity)/2,z.restitution<0&&(z.restitution=0),z.restitution>1&&(z.restitution=1)),z.userdef_dyn_fric||(z.dyn_fric=Math.sqrt(z.s1.material.dynamicFriction*z.s2.material.dynamicFriction)),z.userdef_stat_fric||(z.stat_fric=Math.sqrt(z.s1.material.staticFriction*z.s2.material.staticFriction)),z.userdef_rfric||(z.rfric=Math.sqrt(z.s1.material.rollingFriction*z.s2.material.rollingFriction));let C;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?C=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(C=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=C.next,C.next=null),C.elt=z;let N=C;N.next=d.head,d.head=N,d.modified=!0,d.length++,z.fresh=!P}else z.fresh=z.up_stamp<this.stamp-1||z.endGenerated==this.stamp&&i;if(z.up_stamp=z.stamp,z.fresh||(z.immState&4)==0){z.immState=1;let m=!1,b=z.ws1.id>z.ws2.id?z.ws2:z.ws1,M=z.ws1.id>z.ws2.id?z.ws1:z.ws2,v=this.mrca1;for(;v.head!=null;){let N=v.head;v.head=N.next;let Z=N;Z.elt=null,Z.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z,v.head==null&&(v.pushmod=!0),v.modified=!0,v.length--}v.pushmod=!0;let w=this.mrca2;for(;w.head!=null;){let N=w.head;w.head=N.next;let Z=N;Z.elt=null,Z.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z,w.head==null&&(w.pushmod=!0),w.modified=!0,w.length--}if(w.pushmod=!0,b.cbSet!=null){let N=this.mrca1,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=b;let S=Z;S.next=N.head,N.head=S,N.modified=!0,N.length++}if(b.body.cbSet!=null){let N=this.mrca1,Z=b.body,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=Z;let A=S;A.next=N.head,N.head=A,N.modified=!0,N.length++}if(M.cbSet!=null){let N=this.mrca2,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=M;let S=Z;S.next=N.head,N.head=S,N.modified=!0,N.length++}if(M.body.cbSet!=null){let N=this.mrca2,Z=M.body,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=Z;let A=S;A.next=N.head,N.head=A,N.modified=!0,N.length++}let O=b.body.compound,E=M.body.compound;for(;O!=E;){let N=O==null?0:O.depth,Z=E==null?0:E.depth;if(N<Z){if(E.cbSet!=null){let S=this.mrca2,A;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?A=new j._zpp.util.ZNPNode_ZPP_Interactor:(A=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=A.next,A.next=null),A.elt=E;let F=A;F.next=S.head,S.head=F,S.modified=!0,S.length++}E=E.compound}else{if(O.cbSet!=null){let S=this.mrca1,A;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?A=new j._zpp.util.ZNPNode_ZPP_Interactor:(A=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=A.next,A.next=null),A.elt=O;let F=A;F.next=S.head,S.head=F,S.modified=!0,S.length++}O=O.compound}}let C=this.mrca1.head;for(;C!=null;){let N=C.elt,Z=this.mrca2.head;for(;Z!=null;){let S=Z.elt,A=N.cbSet,F=S.cbSet,B=A.manager,G=null,R=(A.cbpairs.length<F.cbpairs.length?A.cbpairs:F.cbpairs).head;for(;R!=null;){let D=R.elt;if(D.a==A&&D.b==F||D.a==F&&D.b==A){G=D;break}R=R.next}if(G==null){let D;Ne.zpp_pool==null?D=new Ne:(D=Ne.zpp_pool,Ne.zpp_pool=D.next,D.next=null),D.zip_listeners=!0,_t.setlt(A,F)?(D.a=A,D.b=F):(D.a=F,D.b=A),G=D,A.cbpairs.add(G),F!=A&&F.cbpairs.add(G)}if(G.zip_listeners&&(G.zip_listeners=!1,G.__validate()),G.listeners.head==null){Z=Z.next;continue}let T=null,V=null,W=this.prelisteners;for(;W.head!=null;){let D=W.head;W.head=D.next;let I=D;I.elt=null,I.next=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=I,W.head==null&&(W.pushmod=!0),W.modified=!0,W.length--}W.pushmod=!0;let $=null,Y=A.manager,X=null,q=(A.cbpairs.length<F.cbpairs.length?A.cbpairs:F.cbpairs).head;for(;q!=null;){let D=q.elt;if(D.a==A&&D.b==F||D.a==F&&D.b==A){X=D;break}q=q.next}if(X==null){let D;Ne.zpp_pool==null?D=new Ne:(D=Ne.zpp_pool,Ne.zpp_pool=D.next,D.next=null),D.zip_listeners=!0,_t.setlt(A,F)?(D.a=A,D.b=F):(D.a=F,D.b=A),X=D,A.cbpairs.add(X),F!=A&&F.cbpairs.add(X)}X.zip_listeners&&(X.zip_listeners=!1,X.__validate());let L=X.listeners.head;for(;L!=null;){let D=L.elt;if(D.event==5&&(D.itype&k)!=0){let I=this.prelisteners,U;j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?U=new j._zpp.util.ZNPNode_ZPP_InteractionListener:(U=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=U.next,U.next=null),U.elt=D;let H=U;$==null?(H.next=I.head,I.head=H):(H.next=$.next,$.next=H),I.pushmod=I.modified=!0,I.length++,$=H,m=m||!D.pure}L=L.next}if(this.prelisteners.head==null){Z=Z.next;continue}if(T=j._zpp.phys.ZPP_Interactor.get(N,S),T==null&&(V=Wt.get(N,S),this.add_callbackset(V)),T==null||(T.COLLISIONstamp!=this.stamp||i)&&(T.COLLISIONstate&4)==0){if(V!=null&&(T=V),T!=null){let ie=this.prelisteners.head;for(;ie!=null;)ie.elt.itype==7?(T.COLLISIONstamp=this.stamp,T.SENSORstamp=this.stamp,T.FLUIDstamp=this.stamp):T.COLLISIONstamp=this.stamp,ie=ie.next}z.mutable=!0,z.wrap_normal!=null&&(z.wrap_normal.zpp_inner._immutable=!1),z.wrap_contacts!=null&&(z.wrap_contacts.zpp_inner.immutable=!1);let D=z.active;z.active=!0;let I=!1,U=!0,H=null,K=null,ne=z.innards.next;z.hc2=!1;let re=z.contacts.next;for(;re!=null;){let ie=re;if(ie.stamp+j._nape.Config.arbiterExpirationDelay<z.stamp){let he=z.contacts,pe,ce;H==null?(pe=he.next,ce=pe.next,he.next=ce,he.next==null&&(he.pushmod=!0)):(pe=H.next,ce=pe.next,H.next=ce,ce==null&&(he.pushmod=!0)),pe._inuse=!1,he.modified=!0,he.length--,he.pushmod=!0,re=ce;let te=z.innards,ue,xe;K==null?(ue=te.next,xe=ue.next,te.next=xe,te.next==null&&(te.pushmod=!0)):(ue=K.next,xe=ue.next,K.next=xe,xe==null&&(te.pushmod=!0)),ue._inuse=!1,te.modified=!0,te.length--,te.pushmod=!0,ne=xe;let _e=ie;_e.arbiter=null,_e.next=we.zpp_pool,we.zpp_pool=_e;continue}let ae=ie.inner,oe=ie.active;ie.active=ie.stamp==z.stamp,ie.active&&(U?(U=!1,z.c1=ae,z.oc1=ie):(z.hc2=!0,z.c2=ae,z.oc2=ie)),oe!=ie.active&&(z.contacts.modified=!0),H=re,K=ne,ne=ne.next,re=re.next}if(z.hc2){if(z.hpc2=!0,z.oc1.posOnly){let ie=z.c1;z.c1=z.c2,z.c2=ie;let ae=z.oc1;z.oc1=z.oc2,z.oc2=ae,z.hc2=!1}else z.oc2.posOnly&&(z.hc2=!1);z.oc1.posOnly&&(U=!0)}else z.hpc2=!1;this.precb.zpp_inner.pre_arbiter=z,this.precb.zpp_inner.set=T;let se=this.prelisteners.head;for(;se!=null;){let ie=se.elt;this.precb.zpp_inner.listener=ie;let ae=this.precb.zpp_inner,oe=T.int1,he=T.int2,pe,ce=ie.options1,te=oe.cbTypes;if(ce.nonemptyintersection(te,ce.includes)&&!ce.nonemptyintersection(te,ce.excludes)){let xe=ie.options2,_e=he.cbTypes;pe=xe.nonemptyintersection(_e,xe.includes)&&!xe.nonemptyintersection(_e,xe.excludes)}else pe=!1;pe?(ae.int1=oe,ae.int2=he):(ae.int1=he,ae.int2=oe),this.precb.zpp_inner.pre_swapped=N!=this.precb.zpp_inner.int1;let ue=ie.handlerp(this.precb);if(ue!=null){let xe;Q.PreFlag_ACCEPT==null&&(Q.internal=!0,Q.PreFlag_ACCEPT=new j._nape.callbacks.PreFlag,Q.internal=!1),ue==Q.PreFlag_ACCEPT?xe=5:(Q.PreFlag_ACCEPT_ONCE==null&&(Q.internal=!0,Q.PreFlag_ACCEPT_ONCE=new j._nape.callbacks.PreFlag,Q.internal=!1),ue==Q.PreFlag_ACCEPT_ONCE?xe=1:(Q.PreFlag_IGNORE==null&&(Q.internal=!0,Q.PreFlag_IGNORE=new j._nape.callbacks.PreFlag,Q.internal=!1),xe=ue==Q.PreFlag_IGNORE?6:2)),z.immState=xe}se=se.next}if(z.mutable=!1,z.wrap_normal!=null&&(z.wrap_normal.zpp_inner._immutable=!0),z.wrap_contacts!=null&&(z.wrap_contacts.zpp_inner.immutable=!0),z.active=D,T!=null){let ie=this.prelisteners.head;for(;ie!=null;)ie.elt.itype==7?(T.COLLISIONstate=z.immState,T.SENSORstate=z.immState,T.FLUIDstate=z.immState):T.COLLISIONstate=z.immState,ie=ie.next}}else T==null?(z.immState&4)==0&&(z.immState=1):z.immState=T.COLLISIONstate;Z=Z.next}C=C.next}if(m&&(z.immState&4)==0){if(z.b1.type==2){let N=z.b1;N.world||(N.component.waket=this.stamp+(this.midstep?0:1),N.type==3&&(N.kinematicDelaySleep=!0),N.component.sleeping&&this.really_wake(N,!1))}if(z.b1.type==2){let N=z.b2;N.world||(N.component.waket=this.stamp+(this.midstep?0:1),N.type==3&&(N.kinematicDelaySleep=!0),N.component.sleeping&&this.really_wake(N,!1))}}}if((z.immState&1)!=0){if(z.b1.type==2&&z.b1.component.sleeping){let m=z.b1;m.world||(m.component.waket=this.stamp+(this.midstep?0:1),m.type==3&&(m.kinematicDelaySleep=!0),m.component.sleeping&&this.really_wake(m,!1))}if(z.b2.type==2&&z.b2.component.sleeping){let m=z.b2;m.world||(m.component.waket=this.stamp+(this.midstep?0:1),m.type==3&&(m.kinematicDelaySleep=!0),m.component.sleeping&&this.really_wake(m,!1))}}if(z.sleeping){z.sleeping=!1;let m;j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_ColArbiter:(m=j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_ColArbiter.zpp_pool=m.next,m.next=null),m.elt=z;let b=m;b.next=d.head,d.head=b,d.modified=!0,d.length++}l=z}else if(f){let m=z;m.userdef_dyn_fric=!1,m.userdef_stat_fric=!1,m.userdef_restitution=!1,m.userdef_rfric=!1,m.__ref_edge1=m.__ref_edge2=null,m.next=ut.zpp_pool,ut.zpp_pool=m,l=null}else l=z;else l=z}else{let d;if(s==null){let k=null,b=(r.arbiters.length<a.arbiters.length?r:a).arbiters.head;for(;b!=null;){let M=b.elt;if(M.id==u.id&&M.di==x.id){k=M;break}b=b.next}d=k}else d=s;let _=d==null,f,z=!1;if(_)Ot.zpp_pool==null?f=new Ot:(f=Ot.zpp_pool,Ot.zpp_pool=f.next,f.next=null);else if(d.sensorarb==null){d.cleared=!0;{let m=d.b1.arbiters,b=null,M=m.head,v=!1;for(;M!=null;){if(M.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=M,M=M.next}}{let m=d.b2.arbiters,b=null,M=m.head,v=!1;for(;M!=null;){if(M.elt==d){let w,O;b==null?(w=m.head,O=w.next,m.head=O,m.head==null&&(m.pushmod=!0)):(w=b.next,O=w.next,b.next=O,O==null&&(m.pushmod=!0));let E=w;E.elt=null,E.next=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=E,m.modified=!0,m.length--,m.pushmod=!0,v=!0;break}b=M,M=M.next}}d.pair!=null&&(d.pair.arb=null,d.pair=null),d.active=!1,this.f_arbiters.modified=!0,Ot.zpp_pool==null?f=new Ot:(f=Ot.zpp_pool,Ot.zpp_pool=f.next,f.next=null),f.intchange=!0,_=!0,z=!0}else f=d.sensorarb;let P=2;if(_||f.stamp!=this.stamp||i)if(f.stamp=this.stamp,Ee.testCollide(u,x)){if(_){let k=x.id;f.b1=e.body,f.ws1=e,f.b2=t.body,f.ws2=t,f.id=u.id,f.di=k;let m=f.b1.arbiters,b;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?b=new j._zpp.util.ZNPNode_ZPP_Arbiter:(b=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=b.next,b.next=null),b.elt=f;let M=b;M.next=m.head,m.head=M,m.modified=!0,m.length++;let v=f.b2.arbiters,w;j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool==null?w=new j._zpp.util.ZNPNode_ZPP_Arbiter:(w=j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_Arbiter.zpp_pool=w.next,w.next=null),w.elt=f;let O=w;O.next=v.head,v.head=O,v.modified=!0,v.length++,f.active=!0,f.present=0,f.cleared=!1,f.sleeping=!1,f.fresh=!1,f.presentable=!1;let E=this.s_arbiters,C;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?C=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(C=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=C.next,C.next=null),C.elt=f;let N=C;N.next=E.head,E.head=N,E.modified=!0,E.length++,f.fresh=!z}else f.fresh=f.up_stamp<this.stamp-1||f.endGenerated==this.stamp&&i;if(f.up_stamp=f.stamp,f.fresh||(f.immState&4)==0){f.immState=1;let k=!1,m=f.ws1.id>f.ws2.id?f.ws2:f.ws1,b=f.ws1.id>f.ws2.id?f.ws1:f.ws2,M=this.mrca1;for(;M.head!=null;){let C=M.head;M.head=C.next;let N=C;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,M.head==null&&(M.pushmod=!0),M.modified=!0,M.length--}M.pushmod=!0;let v=this.mrca2;for(;v.head!=null;){let C=v.head;v.head=C.next;let N=C;N.elt=null,N.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N,v.head==null&&(v.pushmod=!0),v.modified=!0,v.length--}if(v.pushmod=!0,m.cbSet!=null){let C=this.mrca1,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=m;let Z=N;Z.next=C.head,C.head=Z,C.modified=!0,C.length++}if(m.body.cbSet!=null){let C=this.mrca1,N=m.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=C.head,C.head=S,C.modified=!0,C.length++}if(b.cbSet!=null){let C=this.mrca2,N;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?N=new j._zpp.util.ZNPNode_ZPP_Interactor:(N=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=N.next,N.next=null),N.elt=b;let Z=N;Z.next=C.head,C.head=Z,C.modified=!0,C.length++}if(b.body.cbSet!=null){let C=this.mrca2,N=b.body,Z;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?Z=new j._zpp.util.ZNPNode_ZPP_Interactor:(Z=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=Z.next,Z.next=null),Z.elt=N;let S=Z;S.next=C.head,C.head=S,C.modified=!0,C.length++}let w=m.body.compound,O=b.body.compound;for(;w!=O;){let C=w==null?0:w.depth,N=O==null?0:O.depth;if(C<N){if(O.cbSet!=null){let Z=this.mrca2,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=O;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}O=O.compound}else{if(w.cbSet!=null){let Z=this.mrca1,S;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?S=new j._zpp.util.ZNPNode_ZPP_Interactor:(S=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=S.next,S.next=null),S.elt=w;let A=S;A.next=Z.head,Z.head=A,Z.modified=!0,Z.length++}w=w.compound}}let E=this.mrca1.head;for(;E!=null;){let C=E.elt,N=this.mrca2.head;for(;N!=null;){let Z=N.elt,S=C.cbSet,A=Z.cbSet,F=S.manager,B=null,J=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;J!=null;){let L=J.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){B=L;break}J=J.next}if(B==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),B=L,S.cbpairs.add(B),A!=S&&A.cbpairs.add(B)}if(B.zip_listeners&&(B.zip_listeners=!1,B.__validate()),B.listeners.head==null){N=N.next;continue}let R=null,T=null,V=this.prelisteners;for(;V.head!=null;){let L=V.head;V.head=L.next;let D=L;D.elt=null,D.next=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=D,V.head==null&&(V.pushmod=!0),V.modified=!0,V.length--}V.pushmod=!0;let W=null,$=S.manager,Y=null,ee=(S.cbpairs.length<A.cbpairs.length?S.cbpairs:A.cbpairs).head;for(;ee!=null;){let L=ee.elt;if(L.a==S&&L.b==A||L.a==A&&L.b==S){Y=L;break}ee=ee.next}if(Y==null){let L;Ne.zpp_pool==null?L=new Ne:(L=Ne.zpp_pool,Ne.zpp_pool=L.next,L.next=null),L.zip_listeners=!0,_t.setlt(S,A)?(L.a=S,L.b=A):(L.a=A,L.b=S),Y=L,S.cbpairs.add(Y),A!=S&&A.cbpairs.add(Y)}Y.zip_listeners&&(Y.zip_listeners=!1,Y.__validate());let q=Y.listeners.head;for(;q!=null;){let L=q.elt;if(L.event==5&&(L.itype&P)!=0){let D=this.prelisteners,I;j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool==null?I=new j._zpp.util.ZNPNode_ZPP_InteractionListener:(I=j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool,j._zpp.util.ZNPNode_ZPP_InteractionListener.zpp_pool=I.next,I.next=null),I.elt=L;let U=I;W==null?(U.next=D.head,D.head=U):(U.next=W.next,W.next=U),D.pushmod=D.modified=!0,D.length++,W=U,k=k||!L.pure}q=q.next}if(this.prelisteners.head==null){N=N.next;continue}if(R=j._zpp.phys.ZPP_Interactor.get(C,Z),R==null&&(T=Wt.get(C,Z),this.add_callbackset(T)),R==null||(R.SENSORstamp!=this.stamp||i)&&(R.SENSORstate&4)==0){if(T!=null&&(R=T),R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7?(R.COLLISIONstamp=this.stamp,R.SENSORstamp=this.stamp,R.FLUIDstamp=this.stamp):R.SENSORstamp=this.stamp,U=U.next}let L=f.active;f.active=!0;let D=!1;this.precb.zpp_inner.pre_arbiter=f,this.precb.zpp_inner.set=R;let I=this.prelisteners.head;for(;I!=null;){let U=I.elt;this.precb.zpp_inner.listener=U;let H=this.precb.zpp_inner,K=R.int1,ne=R.int2,re,se=U.options1,ie=K.cbTypes;if(se.nonemptyintersection(ie,se.includes)&&!se.nonemptyintersection(ie,se.excludes)){let oe=U.options2,he=ne.cbTypes;re=oe.nonemptyintersection(he,oe.includes)&&!oe.nonemptyintersection(he,oe.excludes)}else re=!1;re?(H.int1=K,H.int2=ne):(H.int1=ne,H.int2=K),this.precb.zpp_inner.pre_swapped=C!=this.precb.zpp_inner.int1;let ae=U.handlerp(this.precb);if(ae!=null){let oe;Q.PreFlag_ACCEPT==null&&(Q.internal=!0,Q.PreFlag_ACCEPT=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT?oe=5:(Q.PreFlag_ACCEPT_ONCE==null&&(Q.internal=!0,Q.PreFlag_ACCEPT_ONCE=new j._nape.callbacks.PreFlag,Q.internal=!1),ae==Q.PreFlag_ACCEPT_ONCE?oe=1:(Q.PreFlag_IGNORE==null&&(Q.internal=!0,Q.PreFlag_IGNORE=new j._nape.callbacks.PreFlag,Q.internal=!1),oe=ae==Q.PreFlag_IGNORE?6:2)),f.immState=oe}I=I.next}if(f.active=L,R!=null){let U=this.prelisteners.head;for(;U!=null;)U.elt.itype==7?(R.COLLISIONstate=f.immState,R.SENSORstate=f.immState,R.FLUIDstate=f.immState):R.SENSORstate=f.immState,U=U.next}}else R==null?(f.immState&4)==0&&(f.immState=1):f.immState=R.SENSORstate;N=N.next}E=E.next}if(k&&(f.immState&4)==0){if(f.b1.type!=1){let C=f.b1;C.world||(C.component.waket=this.stamp+(this.midstep?0:1),C.type==3&&(C.kinematicDelaySleep=!0),C.component.sleeping&&this.really_wake(C,!1))}if(f.b2.type!=1){let C=f.b2;C.world||(C.component.waket=this.stamp+(this.midstep?0:1),C.type==3&&(C.kinematicDelaySleep=!0),C.component.sleeping&&this.really_wake(C,!1))}}}if(f.sleeping){f.sleeping=!1;let k=this.s_arbiters,m;j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool==null?m=new j._zpp.util.ZNPNode_ZPP_SensorArbiter:(m=j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool,j._zpp.util.ZNPNode_ZPP_SensorArbiter.zpp_pool=m.next,m.next=null),m.elt=f;let b=m;b.next=k.head,k.head=b,k.modified=!0,k.length++}l=f}else if(_){let k=f;k.next=Ot.zpp_pool,Ot.zpp_pool=k,l=null}else l=f;else l=f}}return l}MRCA_chains(e,t){let n=this.mrca1;for(;n.head!=null;){let r=n.head;n.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,n.head==null&&(n.pushmod=!0),n.modified=!0,n.length--}n.pushmod=!0;let s=this.mrca2;for(;s.head!=null;){let r=s.head;s.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,s.head==null&&(s.pushmod=!0),s.modified=!0,s.length--}if(s.pushmod=!0,e.cbSet!=null){let r=this.mrca1,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=e;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(e.body.cbSet!=null){let r=this.mrca1,a=e.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}if(t.cbSet!=null){let r=this.mrca2,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=t;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(t.body.cbSet!=null){let r=this.mrca2,a=t.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}let i=e.body.compound,l=t.body.compound;for(;i!=l;){let r=i==null?0:i.depth,a=l==null?0:l.depth;if(r<a){if(l.cbSet!=null){let o=this.mrca2,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=l;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}l=l.compound}else{if(i.cbSet!=null){let o=this.mrca1,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=i;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}i=i.compound}}}inlined_MRCA_chains(e,t){let n=this.mrca1;for(;n.head!=null;){let r=n.head;n.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,n.head==null&&(n.pushmod=!0),n.modified=!0,n.length--}n.pushmod=!0;let s=this.mrca2;for(;s.head!=null;){let r=s.head;s.head=r.next;let a=r;a.elt=null,a.next=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a,s.head==null&&(s.pushmod=!0),s.modified=!0,s.length--}if(s.pushmod=!0,e.cbSet!=null){let r=this.mrca1,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=e;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(e.body.cbSet!=null){let r=this.mrca1,a=e.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}if(t.cbSet!=null){let r=this.mrca2,a;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?a=new j._zpp.util.ZNPNode_ZPP_Interactor:(a=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=a.next,a.next=null),a.elt=t;let o=a;o.next=r.head,r.head=o,r.modified=!0,r.length++}if(t.body.cbSet!=null){let r=this.mrca2,a=t.body,o;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?o=new j._zpp.util.ZNPNode_ZPP_Interactor:(o=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=o.next,o.next=null),o.elt=a;let p=o;p.next=r.head,r.head=p,r.modified=!0,r.length++}let i=e.body.compound,l=t.body.compound;for(;i!=l;){let r=i==null?0:i.depth,a=l==null?0:l.depth;if(r<a){if(l.cbSet!=null){let o=this.mrca2,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=l;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}l=l.compound}else{if(i.cbSet!=null){let o=this.mrca1,p;j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool==null?p=new j._zpp.util.ZNPNode_ZPP_Interactor:(p=j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool,j._zpp.util.ZNPNode_ZPP_Interactor.zpp_pool=p.next,p.next=null),p.elt=i;let c=p;c.next=o.head,o.head=c,o.modified=!0,o.length++}i=i.compound}}}};j._zpp=null,j._nape=null;var ci=j;var Tn=class{constructor(){this.aabb=null;this.shape=null;this.prev=null;this.next=null}free(){this.prev=null,this.shape=null,this.aabb=null}alloc(){}gt(e){return this.aabb.minx>e.aabb.minx}};Tn.zpp_pool=null;var tn=class tn extends ei{constructor(t){super();this.failed=null;this.list=null;this.space=t,this.is_sweep=!0,this.sweep=this}__insert(t){let n;Tn.zpp_pool==null?n=new Tn:(n=Tn.zpp_pool,Tn.zpp_pool=n.next,n.next=null),t.sweep=n,n.shape=t,n.aabb=t.aabb,n.next=this.list,this.list!=null&&(this.list.prev=n),this.list=n}__remove(t){let n=t.sweep;n.prev==null?this.list=n.next:n.prev.next=n.next,n.next!=null&&(n.next.prev=n.prev),t.sweep=null;let s=n;s.prev=null,s.shape=null,s.aabb=null,s.next=Tn.zpp_pool,Tn.zpp_pool=s}__sync(t){if(!this.space.continuous&&t.zip_aabb&&t.body!=null)if(t.zip_aabb=!1,t.type==0){let n=t.circle;if(n.zip_worldCOM&&n.body!=null){if(n.zip_worldCOM=!1,n.zip_localCOM){if(n.zip_localCOM=!1,n.type==1){let r=n.polygon;if(r.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful localCOM");if(r.lverts.next.next==null)r.localCOMx=r.lverts.next.x,r.localCOMy=r.lverts.next.y;else if(r.lverts.next.next.next==null){r.localCOMx=r.lverts.next.x,r.localCOMy=r.lverts.next.y;let a=1;r.localCOMx+=r.lverts.next.next.x*a,r.localCOMy+=r.lverts.next.next.y*a;let o=.5;r.localCOMx*=o,r.localCOMy*=o}else{r.localCOMx=0,r.localCOMy=0;let a=0,o=r.lverts.next,p=o;o=o.next;let c=o;for(o=o.next;o!=null;){let _=o;a+=c.x*(_.y-p.y);let f=_.y*c.x-_.x*c.y;r.localCOMx+=(c.x+_.x)*f,r.localCOMy+=(c.y+_.y)*f,p=c,c=_,o=o.next}o=r.lverts.next;let h=o;a+=c.x*(h.y-p.y);let u=h.y*c.x-h.x*c.y;r.localCOMx+=(c.x+h.x)*u,r.localCOMy+=(c.y+h.y)*u,p=c,c=h,o=o.next;let x=o;a+=c.x*(x.y-p.y);let y=x.y*c.x-x.x*c.y;r.localCOMx+=(c.x+x.x)*y,r.localCOMy+=(c.y+x.y)*y,a=1/(3*a);let d=a;r.localCOMx*=d,r.localCOMy*=d}}n.wrap_localCOM!=null&&(n.wrap_localCOM.zpp_inner.x=n.localCOMx,n.wrap_localCOM.zpp_inner.y=n.localCOMy)}let l=n.body;l.zip_axis&&(l.zip_axis=!1,l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot)),n.worldCOMx=n.body.posx+(n.body.axisy*n.localCOMx-n.body.axisx*n.localCOMy),n.worldCOMy=n.body.posy+(n.localCOMx*n.body.axisx+n.localCOMy*n.body.axisy)}let s=n.radius,i=n.radius;n.aabb.minx=n.worldCOMx-s,n.aabb.miny=n.worldCOMy-i,n.aabb.maxx=n.worldCOMx+s,n.aabb.maxy=n.worldCOMy+i}else{let n=t.polygon;if(n.zip_gverts&&n.body!=null){n.zip_gverts=!1,n.validate_lverts();let l=n.body;l.zip_axis&&(l.zip_axis=!1,l.axisx=Math.sin(l.rot),l.axisy=Math.cos(l.rot));let r=n.lverts.next,a=n.gverts.next;for(;a!=null;){let o=a,p=r;r=r.next,o.x=n.body.posx+(n.body.axisy*p.x-n.body.axisx*p.y),o.y=n.body.posy+(p.x*n.body.axisx+p.y*n.body.axisy),a=a.next}}if(n.lverts.next==null)throw new Error("Error: An empty polygon has no meaningful bounds");let s=n.gverts.next;n.aabb.minx=s.x,n.aabb.miny=s.y,n.aabb.maxx=s.x,n.aabb.maxy=s.y;let i=n.gverts.next.next;for(;i!=null;){let l=i;l.x<n.aabb.minx&&(n.aabb.minx=l.x),l.x>n.aabb.maxx&&(n.aabb.maxx=l.x),l.y<n.aabb.miny&&(n.aabb.miny=l.y),l.y>n.aabb.maxy&&(n.aabb.maxy=l.y),i=i.next}}}sync_broadphase(){if(this.space.validation(),this.list!=null){let t=this.list.next;for(;t!=null;){let n=t.next,s=t.prev;if(s!=null&&t.aabb.minx>s.aabb.minx){t=n;continue}for(;s.prev!=null&&s.prev.aabb.minx>t.aabb.minx;)s=s.prev;let i=t.prev;i.next=t.next,t.next!=null&&(t.next.prev=i),s.prev==null?(t.prev=null,this.list=t,t.next=s,s.prev=t):(t.prev=s.prev,s.prev=t,t.prev.next=t,t.next=s),t=n}}}sync_broadphase_fast(){let t=this.list.next;for(;t!=null;){let n=t.next,s=t.prev;if(s!=null&&t.aabb.minx>s.aabb.minx){t=n;continue}for(;s.prev!=null&&s.prev.aabb.minx>t.aabb.minx;)s=s.prev;let i=t.prev;i.next=t.next,t.next!=null&&(t.next.prev=i),s.prev==null?(t.prev=null,this.list=t,t.next=s,s.prev=t):(t.prev=s.prev,s.prev=t,t.prev.next=t,t.next=s),t=n}}broadphase(t,n){if(this.list!=null){let s=this.list.next;for(;s!=null;){let l=s.next,r=s.prev;if(r!=null&&s.aabb.minx>r.aabb.minx){s=l;continue}for(;r.prev!=null&&r.prev.aabb.minx>s.aabb.minx;)r=r.prev;let a=s.prev;a.next=s.next,s.next!=null&&(s.next.prev=a),r.prev==null?(s.prev=null,this.list=s,s.next=r,r.prev=s):(s.prev=r.prev,r.prev=s,s.prev.next=s,s.next=r),s=l}let i=this.list;for(;i!=null;){let l=i.next,r=i.shape,a=r.body,o=i.aabb.maxx;for(;l!=null&&!(l.aabb.minx>o);){let p=l.shape,c=p.body;if(c==a){l=l.next;continue}if(a.type==1&&c.type==1){l=l.next;continue}if(a.component.sleeping&&c.component.sleeping){l=l.next;continue}let h=r.aabb,u=p.aabb;u.miny>h.maxy||h.miny>u.maxy||(n?t.narrowPhase(r,p,a.type!=2||c.type!=2,null,!1):t.continuousEvent(r,p,a.type!=2||c.type!=2,null,!1)),l=l.next}i=i.next}}}clear(){for(;this.list!=null;)this.list.shape.removedFromSpace(),this.__remove(this.list.shape)}shapesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new tn._nape.shape.ShapeList,o=this.list;for(;o!=null&&o.aabb.minx>t;)o=o.next;for(;o!=null&&o.aabb.minx<=t;){if(o.aabb.maxx>=t&&o.aabb.miny<=n&&o.aabb.maxy>=n){let c=o.shape,h;if(s!=null){let u=c.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;h&&(c.type==0?Ee.circleContains(c.circle,r)&&a.push(c.outer):Ee.polyContains(c.polygon,r)&&a.push(c.outer))}o=o.next}let p=r;return p.outer!=null&&(p.outer.zpp_inner=null,p.outer=null),p._isimmutable=null,p._validate=null,p._invalidate=null,p.next=le.zpp_pool,le.zpp_pool=p,a}bodiesUnderPoint(t,n,s,i){this.sync_broadphase();let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=t,l.y=n;let r=l,a=i??new tn._nape.phys.BodyList,o=this.list;for(;o!=null&&o.aabb.minx>t;)o=o.next;for(;o!=null&&o.aabb.minx<=t;){if(o.aabb.maxx>=t&&o.aabb.miny<=n&&o.aabb.maxy>=n){let c=o.shape,h=c.body.outer;if(!a.has(h)){let u;if(s!=null){let x=c.filter;u=(x.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(c.type==0?Ee.circleContains(c.circle,r)&&a.push(h):Ee.polyContains(c.polygon,r)&&a.push(h))}}o=o.next}let p=r;return p.outer!=null&&(p.outer.zpp_inner=null,p.outer=null),p._isimmutable=null,p._validate=null,p._invalidate=null,p.next=le.zpp_pool,le.zpp_pool=p,a}shapesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new tn._nape.shape.ShapeList,o=this.list;for(;o!=null&&o.aabb.maxx<r.minx;)o=o.next;for(;o!=null&&o.aabb.minx<=r.maxx;){let p=o.shape,c;if(i!=null){let h=p.filter;c=(h.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&h.collisionGroup)!=0}else c=!0;if(c)if(n)if(s)Ee.containTest(this.aabbShape.zpp_inner,p)&&a.push(p.outer);else{let h=o.aabb;if(h.minx>=r.minx&&h.miny>=r.miny&&h.maxx<=r.maxx&&h.maxy<=r.maxy)a.push(p.outer);else{let u=o.aabb;r.miny<=u.maxy&&u.miny<=r.maxy&&r.minx<=u.maxx&&u.minx<=r.maxx&&Ee.testCollide_safe(p,this.aabbShape.zpp_inner)&&a.push(p.outer)}}else{let h;if(s){let u=o.aabb;h=u.minx>=r.minx&&u.miny>=r.miny&&u.maxx<=r.maxx&&u.maxy<=r.maxy}else{let u=o.aabb;h=r.miny<=u.maxy&&u.miny<=r.maxy&&r.minx<=u.maxx&&u.minx<=r.maxx}h&&a.push(p.outer)}o=o.next}return a}bodiesInAABB(t,n,s,i,l){this.sync_broadphase(),this.updateAABBShape(t);let r=this.aabbShape.zpp_inner.aabb,a=l??new tn._nape.phys.BodyList;this.failed==null&&(this.failed=new tn._nape.phys.BodyList);let o=this.list;for(;o!=null&&o.aabb.maxx<r.minx;)o=o.next;for(;o!=null&&o.aabb.minx<=r.maxx;){let p=o.shape,c=p.body.outer,h=o.aabb;if(r.miny<=h.maxy&&h.miny<=r.maxy&&r.minx<=h.maxx&&h.minx<=r.maxx){let u;if(i!=null){let x=p.filter;u=(x.collisionMask&i.collisionGroup)!=0&&(i.collisionMask&x.collisionGroup)!=0}else u=!0;if(u)if(n)if(s){if(!this.failed.has(c)){let x=Ee.containTest(this.aabbShape.zpp_inner,p);!a.has(c)&&x?a.push(c):x||(a.remove(c),this.failed.push(c))}}else!a.has(c)&&Ee.testCollide_safe(p,this.aabbShape.zpp_inner)&&a.push(c);else if(s){if(!this.failed.has(c)){let x=p.aabb,y=x.minx>=r.minx&&x.miny>=r.miny&&x.maxx<=r.maxx&&x.maxy<=r.maxy;!a.has(c)&&y?a.push(c):y||(a.remove(c),this.failed.push(c))}}else{let x;if(a.has(c))x=!1;else{let y=p.aabb;x=y.minx>=r.minx&&y.miny>=r.miny&&y.maxx<=r.maxx&&y.maxy<=r.maxy}x&&a.push(c)}}o=o.next}return this.failed.clear(),a}shapesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new tn._nape.shape.ShapeList,p=this.list;for(;p!=null&&p.aabb.maxx<a.minx;)p=p.next;for(;p!=null&&p.aabb.minx<=a.maxx;){let c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx){let h=p.shape,u;if(l!=null){let x=h.filter;u=(x.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&x.collisionGroup)!=0}else u=!0;u&&(i?Ee.containTest(this.circShape.zpp_inner,h)&&o.push(h.outer):Ee.testCollide_safe(h,this.circShape.zpp_inner)&&o.push(h.outer))}p=p.next}return o}bodiesInCircle(t,n,s,i,l,r){this.sync_broadphase(),this.updateCircShape(t,n,s);let a=this.circShape.zpp_inner.aabb,o=r??new tn._nape.phys.BodyList;this.failed==null&&(this.failed=new tn._nape.phys.BodyList);let p=this.list;for(;p!=null&&p.aabb.maxx<a.minx;)p=p.next;for(;p!=null&&p.aabb.minx<=a.maxx;){let c=p.aabb;if(a.miny<=c.maxy&&c.miny<=a.maxy&&a.minx<=c.maxx&&c.minx<=a.maxx){let h=p.shape,u=h.body.outer,x;if(l!=null){let y=h.filter;x=(y.collisionMask&l.collisionGroup)!=0&&(l.collisionMask&y.collisionGroup)!=0}else x=!0;if(x)if(i){if(!this.failed.has(u)){let y=Ee.containTest(this.circShape.zpp_inner,h);!o.has(u)&&y?o.push(u):y||(o.remove(u),this.failed.push(u))}}else!o.has(u)&&Ee.testCollide_safe(h,this.circShape.zpp_inner)&&o.push(u)}p=p.next}return this.failed.clear(),o}shapesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new tn._nape.shape.ShapeList,a=this.list;for(;a!=null&&a.aabb.maxx<l.minx;)a=a.next;for(;a!=null&&a.aabb.minx<=l.maxx;){let o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx){let p=a.shape,c;if(s!=null){let h=p.filter;c=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else c=!0;c&&(n?Ee.containTest(t,p)&&r.push(p.outer):Ee.testCollide_safe(p,t)&&r.push(p.outer))}a=a.next}return r}bodiesInShape(t,n,s,i){this.sync_broadphase(),this.validateShape(t);let l=t.aabb,r=i??new tn._nape.phys.BodyList;this.failed==null&&(this.failed=new tn._nape.phys.BodyList);let a=this.list;for(;a!=null&&a.aabb.maxx<l.minx;)a=a.next;for(;a!=null&&a.aabb.minx<=l.maxx;){let o=a.aabb;if(l.miny<=o.maxy&&o.miny<=l.maxy&&l.minx<=o.maxx&&o.minx<=l.maxx){let p=a.shape,c=p.body.outer,h;if(s!=null){let u=p.filter;h=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else h=!0;if(h)if(n){if(!this.failed.has(c)){let u=Ee.containTest(t,p);!r.has(c)&&u?r.push(c):u||(r.remove(c),this.failed.push(c))}}else!r.has(c)&&Ee.testCollide_safe(t,p)&&r.push(c)}a=a.next}return this.failed.clear(),r}rayCast(t,n,s){this.sync_broadphase(),t.validate_dir();let i=t.rayAABB(),l=t.maxdist,r=null;if(t.dirx==0){let o=this.list;for(;o!=null&&o.aabb.minx<=i.minx;){let p,c=o.aabb;if(i.miny<=c.maxy&&c.miny<=i.maxy&&i.minx<=c.maxx&&c.minx<=i.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;if(p){let h=t.aabbsect(o.aabb);if(h>=0&&h<l){let u=o.shape.type==0?t.circlesect(o.shape.circle,n,l):t.polysect(o.shape.polygon,n,l);if(u!=null){if(u.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(l=u.zpp_inner.toiDistance,r!=null){if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");r.zpp_inner.free()}r=u}}}o=o.next}}else if(t.dirx<0){let o=this.list,p=null;for(;o!=null&&o.aabb.minx<=i.maxx;)p=o,o=o.next;for(o=p;o!=null;){let c,h=o.aabb;if(i.miny<=h.maxy&&h.miny<=i.maxy&&i.minx<=h.maxx&&h.minx<=i.maxx)if(s!=null){let u=o.shape.filter;c=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else c=!0;else c=!1;if(c){let u=t.aabbsect(o.aabb);if(u>=0&&u<l){let x=o.shape.type==0?t.circlesect(o.shape.circle,n,l):t.polysect(o.shape.polygon,n,l);if(x!=null){if(x.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(l=x.zpp_inner.toiDistance,r!=null){if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");r.zpp_inner.free()}r=x}}}o=o.prev}}else{let o=this.list;for(;o!=null&&o.aabb.minx<=i.maxx&&o.aabb.minx<t.originx+t.dirx*l;){let p,c=o.aabb;if(i.miny<=c.maxy&&c.miny<=i.maxy&&i.minx<=c.maxx&&c.minx<=i.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;if(p){let h=t.aabbsect(o.aabb);if(h>=0&&h<l){let u=o.shape.type==0?t.circlesect(o.shape.circle,n,l):t.polysect(o.shape.polygon,n,l);if(u!=null){if(u.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");if(l=u.zpp_inner.toiDistance,r!=null){if(r.zpp_inner.next!=null)throw new Error("Error: This object has been disposed of and cannot be used");r.zpp_inner.free()}r=u}}}o=o.next}}let a=i;return a.outer!=null&&(a.outer.zpp_inner=null,a.outer=null),a.wrap_min=a.wrap_max=null,a._invalidate=null,a._validate=null,a.next=fe.zpp_pool,fe.zpp_pool=a,r}rayMultiCast(t,n,s,i){this.sync_broadphase(),t.validate_dir();let l=t.rayAABB(),r=i??new tn._nape.geom.RayResultList;if(t.dirx==0){let o=this.list;for(;o!=null&&o.aabb.minx<=l.minx;){let p,c=o.aabb;if(l.miny<=c.maxy&&c.miny<=l.maxy&&l.minx<=c.maxx&&c.minx<=l.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;p&&t.aabbsect(o.aabb)>=0&&(o.shape.type==0?t.circlesect2(o.shape.circle,n,r):t.polysect2(o.shape.polygon,n,r)),o=o.next}}else if(t.dirx<0){let o=this.list,p=null;for(;o!=null&&o.aabb.minx<=l.maxx;)p=o,o=o.next;for(o=p;o!=null;){let c,h=o.aabb;if(l.miny<=h.maxy&&h.miny<=l.maxy&&l.minx<=h.maxx&&h.minx<=l.maxx)if(s!=null){let u=o.shape.filter;c=(u.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&u.collisionGroup)!=0}else c=!0;else c=!1;c&&t.aabbsect(o.aabb)>=0&&(o.shape.type==0?t.circlesect2(o.shape.circle,n,r):t.polysect2(o.shape.polygon,n,r)),o=o.prev}}else{let o=this.list;for(;o!=null&&o.aabb.minx<=l.maxx;){let p,c=o.aabb;if(l.miny<=c.maxy&&c.miny<=l.maxy&&l.minx<=c.maxx&&c.minx<=l.maxx)if(s!=null){let h=o.shape.filter;p=(h.collisionMask&s.collisionGroup)!=0&&(s.collisionMask&h.collisionGroup)!=0}else p=!0;else p=!1;p&&t.aabbsect(o.aabb)>=0&&(o.shape.type==0?t.circlesect2(o.shape.circle,n,r):t.polysect2(o.shape.polygon,n,r)),o=o.next}}let a=l;return a.outer!=null&&(a.outer.zpp_inner=null,a.outer=null),a.wrap_min=a.wrap_max=null,a._invalidate=null,a._validate=null,a.next=fe.zpp_pool,fe.zpp_pool=a,r}};tn._zpp=null,tn._nape=null;var Ms=tn;function Yl(){let g={},e={};return g.callbacks={},g.constraint={},g.dynamics={},g.geom={},g.phys={},g.shape={},g.space={},g.util={},e.ZPP_Const=Rn,e.ZPP_ID=_n,e.callbacks||(e.callbacks={}),Tt._nape=g,Tt._zpp=e,e.callbacks.ZPP_Callback=Tt,_t._zpp=e,e.callbacks.ZPP_CbSet=_t,Ne._zpp=e,e.callbacks.ZPP_CbSetPair=Ne,e.util||(e.util={}),Kl(e),an._zpp=e,e.callbacks.ZPP_CbType=an,e.util.ZPP_Flags=Q,Lt._nape=g,Lt._zpp=e,e.callbacks.ZPP_Listener=Lt,e.callbacks.ZPP_BodyListener=al,e.callbacks.ZPP_ConstraintListener=pl,e.callbacks.ZPP_InteractionListener=cl,Ps._nape=g,Ps._zpp=e,e.callbacks.ZPP_OptionType=Ps,e.constraint||(e.constraint={}),Me._nape=g,Me._zpp=e,e.constraint.ZPP_Constraint=Me,e.constraint.ZPP_AngleJoint=Je,e.constraint.ZPP_CopyHelper=Jn,e.constraint.ZPP_DistanceJoint=_i,e.constraint.ZPP_LineJoint=yi,e.constraint.ZPP_MotorJoint=mi,e.constraint.ZPP_PivotJoint=fi,e.constraint.ZPP_PulleyJoint=bi,e.constraint.ZPP_UserConstraint=hl,e.constraint.ZPP_UserBody=ws,e.constraint.ZPP_WeldJoint=zi,e.dynamics||(e.dynamics={}),Ie._nape=g,Ie._zpp=e,e.dynamics.ZPP_Arbiter=Ie,e.dynamics.ZPP_SensorArbiter=Ot,Pt._nape=g,Pt._zpp=e,e.dynamics.ZPP_FluidArbiter=Pt,ut._nape=g,ut._zpp=e,e.dynamics.ZPP_ColArbiter=ut,e.dynamics.ZPP_IContact=Pi,we._nape=g,we._zpp=e,e.dynamics.ZPP_Contact=we,st._nape=g,st._zpp=e,e.dynamics.ZPP_InteractionFilter=st,Rs._zpp=e,e.dynamics.ZPP_InteractionGroup=Rs,Xn._nape=g,Xn._zpp=e,e.dynamics.ZPP_SpaceArbiterList=Xn,e.geom||(e.geom={}),fe._nape=g,fe._zpp=e,e.geom.ZPP_AABB=fe,e.geom.ZPP_Collide=Ee,e.geom.ZPP_Convex=ul,e.geom.ZPP_ConvexRayResult=mn,e.geom.ZPP_CutVert=Qe,e.geom.ZPP_CutInt=lt,e.geom.ZPP_Cutter=xl,e.geom.ZPP_Geom=vs,e.geom.ZPP_GeomVert=ge,ge._createVec2Fn=function(){return new g.geom.Vec2},e.geom.ZPP_GeomPoly=dl,e.geom.ZPP_MarchSpan=In,e.geom.ZPP_MarchPair=jn,Gs._init(e,g),e.geom.ZPP_MarchingSquares=Gs,Js._nape=g,e.geom.ZPP_Mat23=Js,e.geom.ZPP_MatMN=Ri,e.geom.ZPP_Monotone=_l,e.geom.ZPP_PartitionVertex=Ge,e.geom.ZPP_PartitionedPoly=Gi,e.geom.ZPP_Ray=yl,e.geom.ZPP_SimpleVert=ke,e.geom.ZPP_SimpleSeg=Vt,e.geom.ZPP_SimpleEvent=Ce,e.geom.ZPP_SimpleSweep=Wi,e.geom.ZPP_Simple=ml,e.geom.ZPP_SimplifyV=vn,e.geom.ZPP_SimplifyP=Le,e.geom.ZPP_Simplify=fl,e.geom.ZPP_ToiEvent=qs,e.geom.ZPP_SweepDistance=gn,e.geom.ZPP_PartitionPair=St,e.geom.ZPP_Triangular=bl,e.geom.ZPP_Vec2=le,ri._zpp=e,e.geom.ZPP_Vec3=ri,e.geom.ZPP_VecMath=zl,e.phys||(e.phys={}),e.phys.ZPP_Interactor=Ut,Ut._init(e,g),Cn._init(e,g),e.phys.ZPP_Body=Cn,qn._nape=g,qn._zpp=e,qn._init(),e.phys.ZPP_Compound=qn,Mn._nape=g,Mn._zpp=e,e.phys.ZPP_FluidProperties=Mn,Oe._nape=g,Oe._zpp=e,e.phys.ZPP_Material=Oe,e.shape||(e.shape={}),ai._nape=g,ai._zpp=e,ai._init(),e.shape.ZPP_Shape=ai,Hn._nape=g,Hn._zpp=e,Hn._init(),e.shape.ZPP_Circle=Hn,ot._nape=g,ot._zpp=e,e.shape.ZPP_Edge=ot,Qn._nape=g,Qn._zpp=e,Qn._init(),e.shape.ZPP_Polygon=Qn,$n._nape=g,$n._zpp=e,$n._init(),e.shape.ZPP_Capsule=$n,e.space||(e.space={}),ei._zpp=e,ei._nape=g,e.space.ZPP_Broadphase=ei,e.space.ZPP_AABBNode=Ae,e.space.ZPP_AABBPair=tt,e.space.ZPP_AABBTree=$e,Cs._zpp=e,Cs._nape=g,e.space.ZPP_DynAABBPhase=Cs,xt._zpp=e,e.space.ZPP_Island=xt,e.space.ZPP_Component=Ws,Wt._zpp=e,e.space.ZPP_CallbackSet=Wt,Xi._zpp=e,e.space.ZPP_CbSetManager=Xi,ci._zpp=e,ci._nape=g,e.space.ZPP_Space=ci,e.space.ZPP_SweepData=Tn,Ms._zpp=e,Ms._nape=g,e.space.ZPP_SweepPhase=Ms,e.util.ZNPArray2_Float=xs,e.util.ZNPArray2_ZPP_GeomVert=ds,e.util.ZNPArray2_ZPP_MarchPair=_s,e.util.Hashable2_Boolfalse=Te,e.util.FastHash2_Hashable2_Boolfalse=Bi,e.util.ZPP_Math=ol,e.util.ZPP_PubPool=ye,e.callbacks.ZPP_InteractionListener._initStatics(e),e.geom.ZPP_Collide._initStatics(e),e.space.ZPP_AABBTree._initStatics(),g.__zpp=e,g}var Pl;function me(){return Pl||(Pl=Yl()),Pl}var Xl=!1;function Hl(){if(Xl)return;let g=Pl;if(!g?.callbacks?.CbEvent||!g?.callbacks?.CbType||!g?.callbacks?.ListenerType||!g?.dynamics?.ArbiterType||!g?.phys?.BodyType||!g?.shape?.ShapeType)return;Xl=!0;let e=g.__zpp;e.callbacks.ZPP_CbType._initEnums(g),e.callbacks.ZPP_Listener._initEnums(g,e.util.ZPP_Flags),e.dynamics.ZPP_Arbiter._initEnums(g,e.util.ZPP_Flags),e.phys.ZPP_Body._initEnums(g,e.util.ZPP_Flags),e.shape.ZPP_Shape._initEnums(g,e.util.ZPP_Flags)}var Ql=new WeakMap;function Ze(g,e){if(!g)return null;let t=Ql.get(g);return t||(t=e(g),Ql.set(g,t)),t}var je=class g{constructor(e=0,t=0){this.zpp_pool=null;this.zpp_disp=!1;if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");let n;le.zpp_pool==null?n=new le:(n=le.zpp_pool,le.zpp_pool=n.next,n.next=null),n.weak=!1,n._immutable=!1,n.x=e,n.y=t,this.zpp_inner=n,n.outer=this}get _inner(){return this}_checkDisposed(){if(this.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!")}_checkImmutable(){this.zpp_inner.immutable()}_validate(){this.zpp_inner.validate()}_invalidate(){this.zpp_inner.invalidate()}static _disposeWeak(e){e.zpp_inner.weak&&e.dispose()}_setXY(e,t){if(this._checkDisposed(),this._checkImmutable(),e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");this._validate(),(this.zpp_inner.x!==e||this.zpp_inner.y!==t)&&(this.zpp_inner.x=e,this.zpp_inner.y=t,this._invalidate())}static _poolGet(e,t,n){let s;if(ye.poolVec2==null?s=new g:(s=ye.poolVec2,ye.poolVec2=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s===ye.nextVec2&&(ye.nextVec2=null)),s.zpp_inner==null){let i;le.zpp_pool==null?i=new le:(i=le.zpp_pool,le.zpp_pool=i.next,i.next=null),i.weak=!1,i._immutable=!1,i.x=e,i.y=t,s.zpp_inner=i,i.outer=s}else s.zpp_inner.immutable(),s.zpp_inner.validate(),(s.zpp_inner.x!==e||s.zpp_inner.y!==t)&&(s.zpp_inner.x=e,s.zpp_inner.y=t,s.zpp_inner.invalidate());return s.zpp_inner.weak=n,s}static _wrap(e){return e instanceof g?e:e?e instanceof le?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,n.zpp_pool=null,n.zpp_disp=!1,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}static get(e=0,t=0,n=!1){if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");return g._poolGet(e,t,n)}static weak(e=0,t=0){if(e!==e||t!==t)throw new Error("Error: Vec2 components cannot be NaN");return g._poolGet(e,t,!0)}static fromPolar(e,t,n=!1){if(e!==e)throw new Error("Error: Vec2::length cannot be NaN");if(t!==t)throw new Error("Error: Vec2::angle cannot be NaN");let s=e*Math.cos(t),i=e*Math.sin(t);return g._poolGet(s,i,n)}static fromAngle(e,t=!1){return g.fromPolar(1,e,t)}static lerp(e,t,n,s=!1){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null)throw new Error("Error: Cannot lerp with null Vec2");if(n!==n)throw new Error("Error: Cannot lerp with NaN t");e.zpp_inner.validate(),t.zpp_inner.validate();let i=e.zpp_inner.x+n*(t.zpp_inner.x-e.zpp_inner.x),l=e.zpp_inner.y+n*(t.zpp_inner.y-e.zpp_inner.y),r=g._poolGet(i,l,s);return g._disposeWeak(e),g._disposeWeak(t),r}static eq(e,t,n=0){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null){let r=e==null&&t==null;return e!=null&&g._disposeWeak(e),t!=null&&g._disposeWeak(t),r}e.zpp_inner.validate(),t.zpp_inner.validate();let s=e.zpp_inner.x-t.zpp_inner.x,i=e.zpp_inner.y-t.zpp_inner.y,l=(s<0?-s:s)<=n&&(i<0?-i:i)<=n;return g._disposeWeak(e),g._disposeWeak(t),l}static dsq(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null)throw new Error("Error: Cannot compute squared distance between null Vec2");e.zpp_inner.validate();let n=e.zpp_inner.x,s=e.zpp_inner.y;t.zpp_inner.validate();let i=t.zpp_inner.x,l=t.zpp_inner.y,r=n-i,a=s-l,o=r*r+a*a;return g._disposeWeak(e),g._disposeWeak(t),o}static distance(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null||t==null)throw new Error("Error: Cannot compute squared distance between null Vec2");e.zpp_inner.validate();let n=e.zpp_inner.x,s=e.zpp_inner.y;t.zpp_inner.validate();let i=t.zpp_inner.x,l=t.zpp_inner.y,r=n-i,a=s-l,o=Math.sqrt(r*r+a*a);return g._disposeWeak(e),g._disposeWeak(t),o}get x(){return this._checkDisposed(),this._validate(),this.zpp_inner.x}set x(e){if(this._checkDisposed(),this._checkImmutable(),this._validate(),this.zpp_inner.x!==e){if(e!==e)throw new Error("Error: Vec2::x cannot be NaN");this.zpp_inner.x=e,this._invalidate()}}get y(){return this._checkDisposed(),this._validate(),this.zpp_inner.y}set y(e){if(this._checkDisposed(),this._checkImmutable(),this._validate(),this.zpp_inner.y!==e){if(e!==e)throw new Error("Error: Vec2::y cannot be NaN");this.zpp_inner.y=e,this._invalidate()}}get length(){this._checkDisposed(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y;return Math.sqrt(e*e+t*t)}set length(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Vec2::length cannot be NaN");this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y,s=t*t+n*n;if(s===0)throw new Error("Error: Cannot set length of a zero vector");let i=e/Math.sqrt(s);this._setXY(t*i,n*i),this._invalidate()}get angle(){this._checkDisposed(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y;return e===t&&e===0?0:Math.atan2(t,e)}set angle(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Vec2::angle cannot be NaN");this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y,s=Math.sqrt(t*t+n*n),i=s*Math.cos(e),l=s*Math.sin(e);this._setXY(i,l)}lsq(){this._checkDisposed(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y;return e*e+t*t}set(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),e==null)throw new Error("Error: Cannot assign null Vec2");e.zpp_inner.validate();let t=e.zpp_inner.x,n=e.zpp_inner.y;return this._setXY(t,n),g._disposeWeak(e),this}setxy(e,t){return this._checkDisposed(),this._checkImmutable(),this._setXY(e,t),this}clone(){return this.copy()}equals(e,t=0){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)return!1;this._validate(),e.zpp_inner.validate();let n=this.zpp_inner.x-e.zpp_inner.x,s=this.zpp_inner.y-e.zpp_inner.y;return(n<0?-n:n)<=t&&(s<0?-s:s)<=t}copy(e=!1){this._checkDisposed(),this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y;return g._poolGet(t,n,e)}rotate(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Cannot rotate Vec2 by NaN");if(e%(Math.PI*2)!==0){let t=Math.sin(e),n=Math.cos(e),s=n*this.zpp_inner.x-t*this.zpp_inner.y;this.zpp_inner.y=this.zpp_inner.x*t+this.zpp_inner.y*n,this.zpp_inner.x=s,this._invalidate()}return this}reflect(e,t=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");this._validate();let n=this.zpp_inner.x,s=this.zpp_inner.y;if(Math.sqrt(n*n+s*s)===0)throw new Error("Error: Cannot reflect in zero vector");let i=g._poolGet(n,s,!0);i.normalise();let l=e.sub(i.muleq(2*i.dot(e)),t);return g._disposeWeak(e),l}normalise(){this._checkDisposed(),this._checkImmutable(),this._validate();let e=this.zpp_inner.x,t=this.zpp_inner.y,n=e*e+t*t;if(Math.sqrt(n)===0)throw new Error("Error: Cannot normalise vector of length 0");let s=1/Math.sqrt(n);return this._setXY(e*s,t*s),this._invalidate(),this}unit(e=!1){this._checkDisposed(),this._validate();let t=this.zpp_inner.x,n=this.zpp_inner.y,s=t*t+n*n;if(Math.sqrt(s)===0)throw new Error("Error: Cannot normalise vector of length 0");let i=1/Math.sqrt(s);return g._poolGet(t*i,n*i,e)}add(e,t=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot add null vectors");this._validate(),e.zpp_inner.validate();let n=this.zpp_inner.x+e.zpp_inner.x,s=this.zpp_inner.y+e.zpp_inner.y,i=g._poolGet(n,s,t);return g._disposeWeak(e),i}addMul(e,t,n=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot add null vectors");this._validate(),e.zpp_inner.validate();let s=this.zpp_inner.x+e.zpp_inner.x*t,i=this.zpp_inner.y+e.zpp_inner.y*t,l=g._poolGet(s,i,n);return g._disposeWeak(e),l}sub(e,t=!1){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot subtract null vectors");this._validate(),e.zpp_inner.validate();let n=this.zpp_inner.x-e.zpp_inner.x,s=this.zpp_inner.y-e.zpp_inner.y,i=g._poolGet(n,s,t);return g._disposeWeak(e),i}mul(e,t=!1){if(this._checkDisposed(),e!==e)throw new Error("Error: Cannot multiply with NaN");this._validate();let n=this.zpp_inner.x*e,s=this.zpp_inner.y*e;return g._poolGet(n,s,t)}addeq(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),e==null)throw new Error("Error: Cannot add null vectors");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x+e.zpp_inner.x,n=this.zpp_inner.y+e.zpp_inner.y;return this._setXY(t,n),g._disposeWeak(e),this}subeq(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),e==null)throw new Error("Error: Cannot subtract null vectors");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x-e.zpp_inner.x,n=this.zpp_inner.y-e.zpp_inner.y;return this._setXY(t,n),g._disposeWeak(e),this}muleq(e){if(this._checkDisposed(),this._checkImmutable(),e!==e)throw new Error("Error: Cannot multiply with NaN");this._validate();let t=this.zpp_inner.x*e,n=this.zpp_inner.y*e;return this._setXY(t,n),this}dot(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot take dot product with null vector");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x*e.zpp_inner.x+this.zpp_inner.y*e.zpp_inner.y;return g._disposeWeak(e),t}cross(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot take cross product with null vector");this._validate(),e.zpp_inner.validate();let t=this.zpp_inner.x*e.zpp_inner.y-this.zpp_inner.y*e.zpp_inner.x;return g._disposeWeak(e),t}perp(e=!1){this._checkDisposed(),this._validate();let t=-this.zpp_inner.y,n=this.zpp_inner.x;return g._poolGet(t,n,e)}dispose(){if(this.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this._checkImmutable(),this.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let e=this.zpp_inner;e.outer=null,this.zpp_inner=null,this.zpp_pool=null,ye.nextVec2!=null?ye.nextVec2.zpp_pool=this:ye.poolVec2=this,ye.nextVec2=this,this.zpp_disp=!0,e.free(),e.next=le.zpp_pool,le.zpp_pool=e}toString(){return this._checkDisposed(),this._validate(),this.zpp_inner.toString()}};le._wrapFn=g=>Ze(g,e=>{let t=Object.create(je.prototype);return t.zpp_inner=e,t.zpp_pool=null,t.zpp_disp=!1,e.outer=t,t});var Go=me();Go.geom.Vec2=je;var hi=class g{constructor(e=0,t=0,n=0){this.zpp_pool=null;this.zpp_disp=!1;let s=new ri;this.zpp_inner=s,s.outer=this,s.x=e,s.y=t,s.z=n}get _inner(){return this}_checkDisposed(){if(this.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!")}_checkImmutable(){if(this.zpp_inner.immutable)throw new Error("Error: Vec3 is immutable")}static _wrap(e){return e instanceof g?e:e?e instanceof ri?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,n.zpp_pool=null,n.zpp_disp=!1,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}static get(e=0,t=0,n=0){let s;return ye.poolVec3==null?s=new g:(s=ye.poolVec3,ye.poolVec3=s.zpp_pool,s.zpp_pool=null,s.zpp_disp=!1,s===ye.nextVec3&&(ye.nextVec3=null)),s.setxyz(e,t,n),s.zpp_inner.immutable=!1,s.zpp_inner._validate=null,s}get x(){return this._checkDisposed(),this.zpp_inner.validate(),this.zpp_inner.x}set x(e){this._checkDisposed(),this._checkImmutable(),this.zpp_inner.x=e}get y(){return this._checkDisposed(),this.zpp_inner.validate(),this.zpp_inner.y}set y(e){this._checkDisposed(),this._checkImmutable(),this.zpp_inner.y=e}get z(){return this._checkDisposed(),this.zpp_inner.validate(),this.zpp_inner.z}set z(e){this._checkDisposed(),this._checkImmutable(),this.zpp_inner.z=e}get length(){this._checkDisposed(),this.zpp_inner.validate();let{x:e,y:t,z:n}=this.zpp_inner;return Math.sqrt(e*e+t*t+n*n)}set length(e){if(this._checkDisposed(),e!==e)throw new Error("Error: Vec3::length cannot be NaN");this.zpp_inner.validate();let{x:t,y:n,z:s}=this.zpp_inner,i=t*t+n*n+s*s;if(i===0)throw new Error("Error: Cannot set length of a zero vector");let l=e/Math.sqrt(i);this._checkImmutable(),this.zpp_inner.x=t*l,this.zpp_inner.y=n*l,this.zpp_inner.z=s*l}lsq(){this._checkDisposed(),this.zpp_inner.validate();let{x:e,y:t,z:n}=this.zpp_inner;return e*e+t*t+n*n}set(e){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot assign null Vec3");return e.zpp_inner.validate(),this.setxyz(e.zpp_inner.x,e.zpp_inner.y,e.zpp_inner.z)}setxyz(e,t,n){return this._checkDisposed(),this._checkImmutable(),this.zpp_inner.x=e,this._checkImmutable(),this.zpp_inner.y=t,this._checkImmutable(),this.zpp_inner.z=n,this}equals(e,t=0){if(this._checkDisposed(),e!=null&&e.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");if(e==null)return!1;this.zpp_inner.validate(),e.zpp_inner.validate();let n=this.zpp_inner.x-e.zpp_inner.x,s=this.zpp_inner.y-e.zpp_inner.y,i=this.zpp_inner.z-e.zpp_inner.z;return(n<0?-n:n)<=t&&(s<0?-s:s)<=t&&(i<0?-i:i)<=t}clone(){return this._checkDisposed(),this.zpp_inner.validate(),g.get(this.zpp_inner.x,this.zpp_inner.y,this.zpp_inner.z)}xy(e=!1){return this._checkDisposed(),this.zpp_inner.validate(),je.get(this.zpp_inner.x,this.zpp_inner.y,e)}dispose(){if(this.zpp_disp)throw new Error("Error: Vec3 has been disposed and cannot be used!");if(this.zpp_inner.immutable)throw new Error("Error: This Vec3 is not disposable");this.zpp_pool=null,ye.nextVec3!=null?ye.nextVec3.zpp_pool=this:ye.poolVec3=this,ye.nextVec3=this,this.zpp_disp=!0}toString(){return this._checkDisposed(),this.zpp_inner.validate(),"{ x: "+this.zpp_inner.x+" y: "+this.zpp_inner.y+" z: "+this.zpp_inner.z+" }"}};ri._wrapFn=g=>Ze(g,e=>{let t=Object.create(hi.prototype);return t.zpp_inner=e,t.zpp_pool=null,t.zpp_disp=!1,e.outer=t,t});var Ks=class g{get _inner(){return this}constructor(e=0,t=0,n=0,s=0){if(e!==e||t!==t)throw new Error("Error: AABB position cannot be NaN");if(n!==n||s!==s)throw new Error("Error: AABB dimensions cannot be NaN");let i;fe.zpp_pool==null?i=new fe:(i=fe.zpp_pool,fe.zpp_pool=i.next,i.next=null),i.minx=e,i.miny=t,i.maxx=e+n,i.maxy=t+s,this.zpp_inner=i,i.outer=this}static fromPoints(e){if(e==null||e.length===0)throw new Error("Error: AABB::fromPoints requires at least one point");let t=e[0];if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t==null)throw new Error("Error: AABB::fromPoints cannot contain null Vec2");t.zpp_inner.validate();let n=t.zpp_inner.x,s=t.zpp_inner.y,i=n,l=s;for(let r=1;r<e.length;r++){let a=e[r];if(a!=null&&a.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(a==null)throw new Error("Error: AABB::fromPoints cannot contain null Vec2");a.zpp_inner.validate();let o=a.zpp_inner.x,p=a.zpp_inner.y;o<n&&(n=o),p<s&&(s=p),o>i&&(i=o),p>l&&(l=p)}return new g(n,s,i-n,l-s)}static _wrap(e){return e instanceof g?e:e?e instanceof fe?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get x(){return this.zpp_inner.validate(),this.zpp_inner.minx}set x(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.minx!=e){if(e!==e)throw new Error("Error: AABB::x cannot be NaN");this.zpp_inner.maxx+=e-this.zpp_inner.minx,this.zpp_inner.minx=e,this.zpp_inner.invalidate()}}get y(){return this.zpp_inner.validate(),this.zpp_inner.miny}set y(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.miny!=e){if(e!==e)throw new Error("Error: AABB::y cannot be NaN");this.zpp_inner.maxy+=e-this.zpp_inner.miny,this.zpp_inner.miny=e,this.zpp_inner.invalidate()}}get width(){return this.zpp_inner.validate(),this.zpp_inner.maxx-this.zpp_inner.minx}set width(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.maxx-this.zpp_inner.minx!=e){if(e!==e)throw new Error("Error: AABB::width cannot be NaN");if(e<0)throw new Error("Error: AABB::width ("+e+") must be >= 0");this.zpp_inner.validate(),this.zpp_inner.maxx=this.zpp_inner.minx+e,this.zpp_inner.invalidate()}}get height(){return this.zpp_inner.validate(),this.zpp_inner.maxy-this.zpp_inner.miny}set height(e){if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(this.zpp_inner.validate(),this.zpp_inner.maxy-this.zpp_inner.miny!=e){if(e!==e)throw new Error("Error: AABB::height cannot be NaN");if(e<0)throw new Error("Error: AABB::height ("+e+") must be >= 0");this.zpp_inner.validate(),this.zpp_inner.maxy=this.zpp_inner.miny+e,this.zpp_inner.invalidate()}}get min(){return this.zpp_inner.getmin(),this.zpp_inner.wrap_min}set min(e){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(e==null)throw new Error("Error: Cannot assign null to AABB::min");this.zpp_inner.validate();let t=this.zpp_inner.minx;if(this.zpp_inner.validate(),t!=this.zpp_inner.minx)throw new Error("Error: AABB::min components cannot be NaN");this.zpp_inner.validate();let n=this.zpp_inner.miny;if(this.zpp_inner.validate(),n!=this.zpp_inner.miny)throw new Error("Error: AABB::min components cannot be NaN");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let s=e.zpp_inner.x;this.zpp_inner.getmax();let i=this.zpp_inner.wrap_max;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(i.zpp_inner._validate!=null&&i.zpp_inner._validate(),s>i.zpp_inner.x)throw new Error("Error: Assignment would cause negative width");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let l=e.zpp_inner.y;this.zpp_inner.getmin();let r=this.zpp_inner.wrap_max;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(r.zpp_inner._validate!=null&&r.zpp_inner._validate(),l>r.zpp_inner.y)throw new Error("Error: Assignment would cause negative height");let a=this.zpp_inner.wrap_min;this._assignVec2(a,e),e.zpp_inner.weak&&this._disposeVec2(e)}get max(){return this.zpp_inner.getmax(),this.zpp_inner.wrap_max}set max(e){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(this.zpp_inner._immutable)throw new Error("Error: AABB is immutable");if(e==null)throw new Error("Error: Cannot assign null to AABB::max");this.zpp_inner.validate();let t=this.zpp_inner.minx;if(this.zpp_inner.validate(),t!=this.zpp_inner.minx)throw new Error("Error: AABB::max components cannot be NaN");this.zpp_inner.validate();let n=this.zpp_inner.miny;if(this.zpp_inner.validate(),n!=this.zpp_inner.miny)throw new Error("Error: AABB::max components cannot be NaN");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let s=e.zpp_inner.x;this.zpp_inner.getmin();let i=this.zpp_inner.wrap_min;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(i.zpp_inner._validate!=null&&i.zpp_inner._validate(),s<i.zpp_inner.x)throw new Error("Error: Assignment would cause negative width");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate();let l=e.zpp_inner.y;this.zpp_inner.getmin();let r=this.zpp_inner.wrap_min;if(r!=null&&r.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(r.zpp_inner._validate!=null&&r.zpp_inner._validate(),l<r.zpp_inner.y)throw new Error("Error: Assignment would cause negative height");let a=this.zpp_inner.wrap_max;this._assignVec2(a,e),e.zpp_inner.weak&&this._disposeVec2(e)}_assignVec2(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let n=e.zpp_inner;if(n._immutable)throw new Error("Error: Vec2 is immutable");if(n._isimmutable!=null&&n._isimmutable(),t==null)throw new Error("Error: Cannot assign null Vec2");if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");t.zpp_inner._validate!=null&&t.zpp_inner._validate();let s=t.zpp_inner.x;if(t!=null&&t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");t.zpp_inner._validate!=null&&t.zpp_inner._validate();let i=t.zpp_inner.y;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=e.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),s!=s||i!=i)throw new Error("Error: Vec2 components cannot be NaN");let r;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e.zpp_inner._validate!=null&&e.zpp_inner._validate(),e.zpp_inner.x==s){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");e.zpp_inner._validate!=null&&e.zpp_inner._validate(),r=e.zpp_inner.y==i}else r=!1;r||(e.zpp_inner.x=s,e.zpp_inner.y=i,e.zpp_inner._invalidate!=null&&e.zpp_inner._invalidate(e.zpp_inner))}_disposeVec2(e){let n=me().zpp_nape;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let s=e.zpp_inner;if(s._immutable)throw new Error("Error: Vec2 is immutable");if(s._isimmutable!=null&&s._isimmutable(),e.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let i=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null;let l=e;l.zpp_pool=null,n.util.ZPP_PubPool.nextVec2!=null?n.util.ZPP_PubPool.nextVec2.zpp_pool=l:n.util.ZPP_PubPool.poolVec2=l,n.util.ZPP_PubPool.nextVec2=l,l.zpp_disp=!0;let r=i;r.outer!=null&&(r.outer.zpp_inner=null,r.outer=null),r._isimmutable=null,r._validate=null,r._invalidate=null,r.next=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=r}clone(){return this.copy()}equals(e,t=0){if(e==null)return!1;this.zpp_inner.validate(),e.zpp_inner.validate();let n=this.zpp_inner.minx-e.zpp_inner.minx,s=this.zpp_inner.miny-e.zpp_inner.miny,i=this.zpp_inner.maxx-e.zpp_inner.maxx,l=this.zpp_inner.maxy-e.zpp_inner.maxy;return(n<0?-n:n)<=t&&(s<0?-s:s)<=t&&(i<0?-i:i)<=t&&(l<0?-l:l)<=t}copy(){this.zpp_inner.validate();let e=this.zpp_inner;return fe.get(e.minx,e.miny,e.maxx,e.maxy).wrapper()}toString(){return this.zpp_inner.validate(),this.zpp_inner.toString()}};fe._wrapFn=g=>Ze(g,e=>{let t=Object.create(Ks.prototype);return t.zpp_inner=e,e.outer=t,t});var wl=class{constructor(e,t){this._inner=e,this._wrap=t}get length(){return this._inner.length}at(e){return this._wrap(this._inner.at(e))}add(e){this._inner.add(e._inner??e)}remove(e){this._inner.remove(e._inner??e)}has(e){return this._inner.has(e._inner??e)}clear(){this._inner.clear()}get empty(){return this._inner.empty()}push(e){this._inner.push(e._inner??e)}pop(){return this._wrap(this._inner.pop())}shift(){return this._wrap(this._inner.shift())}unshift(e){this._inner.unshift(e._inner??e)}*[Symbol.iterator](){for(let e=0;e<this.length;e++)yield this.at(e)}toArray(){return[...this]}forEach(e){for(let t=0;t<this.length;t++)e(this.at(t),t)}toString(){return this._inner.toString()}};var Nn=class g{get _inner(){return this}constructor(e=1,t=1){let n;if(Mn.zpp_pool==null?n=new Mn:(n=Mn.zpp_pool,Mn.zpp_pool=n.next,n.next=null),this.zpp_inner=n,n.outer=this,e!=n.density*1e3){if(e!==e)throw new Error("Error: FluidProperties::density cannot be NaN");n.density=e/1e3,n.invalidate()}if(t!=n.viscosity){if(t!==t)throw new Error("Error: FluidProperties::viscosity cannot be NaN");if(t<0)throw new Error("Error: FluidProperties::viscosity ("+t+") must be >= 0");n.viscosity=t/1,n.invalidate()}}static _wrap(e){return e instanceof g?e:e?e instanceof Mn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get density(){return this.zpp_inner.density*1e3}set density(e){if(e!=this.zpp_inner.density*1e3){if(e!==e)throw new Error("Error: FluidProperties::density cannot be NaN");this.zpp_inner.density=e/1e3,this.zpp_inner.invalidate()}}get viscosity(){return this.zpp_inner.viscosity}set viscosity(e){if(e!=this.zpp_inner.viscosity){if(e!==e)throw new Error("Error: FluidProperties::viscosity cannot be NaN");if(e<0)throw new Error("Error: FluidProperties::viscosity ("+e+") must be >= 0");this.zpp_inner.viscosity=e/1,this.zpp_inner.invalidate()}}get gravity(){return this.zpp_inner.wrap_gravity}set gravity(e){let n=me().zpp_nape;if(e==null){if(this.zpp_inner.wrap_gravity!=null){this.zpp_inner.wrap_gravity.zpp_inner._inuse=!1;let s=this.zpp_inner.wrap_gravity;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");if(i._isimmutable!=null&&i._isimmutable(),s.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let l=s.zpp_inner;s.zpp_inner.outer=null,s.zpp_inner=null;let r=s;r.zpp_pool=null,n.util.ZPP_PubPool.nextVec2!=null?n.util.ZPP_PubPool.nextVec2.zpp_pool=r:n.util.ZPP_PubPool.poolVec2=r,n.util.ZPP_PubPool.nextVec2=r,r.zpp_disp=!0;let a=l;a.outer!=null&&(a.outer.zpp_inner=null,a.outer=null),a._isimmutable=null,a._validate=null,a._invalidate=null,a.next=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=a,this.zpp_inner.wrap_gravity=null}}else{if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");this.zpp_inner.wrap_gravity==null&&this.zpp_inner.getgravity();let s=this.zpp_inner.wrap_gravity;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let i=s.zpp_inner;if(i._immutable)throw new Error("Error: Vec2 is immutable");if(i._isimmutable!=null&&i._isimmutable(),e==null)throw new Error("Error: Cannot assign null Vec2");if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=e.zpp_inner;l._validate!=null&&l._validate();let r=e.zpp_inner.x;if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let a=e.zpp_inner;a._validate!=null&&a._validate();let o=e.zpp_inner.y;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=s.zpp_inner;if(p._immutable)throw new Error("Error: Vec2 is immutable");if(p._isimmutable!=null&&p._isimmutable(),r!=r||o!=o)throw new Error("Error: Vec2 components cannot be NaN");let c;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let h=s.zpp_inner;if(h._validate!=null&&h._validate(),s.zpp_inner.x==r){if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=s.zpp_inner;u._validate!=null&&u._validate(),c=s.zpp_inner.y==o}else c=!1;if(!c){s.zpp_inner.x=r,s.zpp_inner.y=o;let u=s.zpp_inner;u._invalidate!=null&&u._invalidate(u)}if(e.zpp_inner.weak){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=e.zpp_inner;if(u._immutable)throw new Error("Error: Vec2 is immutable");if(u._isimmutable!=null&&u._isimmutable(),e.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let x=e.zpp_inner;e.zpp_inner.outer=null,e.zpp_inner=null;let y=e;y.zpp_pool=null,n.util.ZPP_PubPool.nextVec2!=null?n.util.ZPP_PubPool.nextVec2.zpp_pool=y:n.util.ZPP_PubPool.poolVec2=y,n.util.ZPP_PubPool.nextVec2=y,y.zpp_disp=!0;let d=x;d.outer!=null&&(d.outer.zpp_inner=null,d.outer=null),d._isimmutable=null,d._validate=null,d._invalidate=null,d.next=n.geom.ZPP_Vec2.zpp_pool,n.geom.ZPP_Vec2.zpp_pool=d}}}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get shapes(){if(this.zpp_inner.wrap_shapes==null){let e=me();this.zpp_inner.wrap_shapes=e.zpp_nape.util.ZPP_ShapeList.get(this.zpp_inner.shapes,!0)}return this.zpp_inner.wrap_shapes}copy(){let t=me().zpp_nape,n=new g(this.zpp_inner.density*1e3,this.zpp_inner.viscosity);this.zpp_inner.userData!=null&&(n.zpp_inner.userData={...this.zpp_inner.userData});let s=this.zpp_inner.wrap_gravity;if(s==null){if(n.zpp_inner.wrap_gravity!=null){n.zpp_inner.wrap_gravity.zpp_inner._inuse=!1;let i=n.zpp_inner.wrap_gravity;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),i.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let r=i.zpp_inner;i.zpp_inner.outer=null,i.zpp_inner=null;let a=i;a.zpp_pool=null,t.util.ZPP_PubPool.nextVec2!=null?t.util.ZPP_PubPool.nextVec2.zpp_pool=a:t.util.ZPP_PubPool.poolVec2=a,t.util.ZPP_PubPool.nextVec2=a,a.zpp_disp=!0;let o=r;o.outer!=null&&(o.outer.zpp_inner=null,o.outer=null),o._isimmutable=null,o._validate=null,o._invalidate=null,o.next=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=o,n.zpp_inner.wrap_gravity=null}}else{if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");n.zpp_inner.wrap_gravity==null&&n.zpp_inner.getgravity();let i=n.zpp_inner.wrap_gravity;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let l=i.zpp_inner;if(l._immutable)throw new Error("Error: Vec2 is immutable");if(l._isimmutable!=null&&l._isimmutable(),s==null)throw new Error("Error: Cannot assign null Vec2");if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=s.zpp_inner;r._validate!=null&&r._validate();let a=s.zpp_inner.x;if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let o=s.zpp_inner;o._validate!=null&&o._validate();let p=s.zpp_inner.y;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let c=i.zpp_inner;if(c._immutable)throw new Error("Error: Vec2 is immutable");if(c._isimmutable!=null&&c._isimmutable(),a!=a||p!=p)throw new Error("Error: Vec2 components cannot be NaN");let h;if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let u=i.zpp_inner;if(u._validate!=null&&u._validate(),i.zpp_inner.x==a){if(i!=null&&i.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let x=i.zpp_inner;x._validate!=null&&x._validate(),h=i.zpp_inner.y==p}else h=!1;if(!h){i.zpp_inner.x=a,i.zpp_inner.y=p;let x=i.zpp_inner;x._invalidate!=null&&x._invalidate(x)}if(s.zpp_inner.weak){if(s!=null&&s.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let x=s.zpp_inner;if(x._immutable)throw new Error("Error: Vec2 is immutable");if(x._isimmutable!=null&&x._isimmutable(),s.zpp_inner._inuse)throw new Error("Error: This Vec2 is not disposable");let y=s.zpp_inner;s.zpp_inner.outer=null,s.zpp_inner=null;let d=s;d.zpp_pool=null,t.util.ZPP_PubPool.nextVec2!=null?t.util.ZPP_PubPool.nextVec2.zpp_pool=d:t.util.ZPP_PubPool.poolVec2=d,t.util.ZPP_PubPool.nextVec2=d,d.zpp_disp=!0;let _=y;_.outer!=null&&(_.outer.zpp_inner=null,_.outer=null),_._isimmutable=null,_._validate=null,_._invalidate=null,_.next=t.geom.ZPP_Vec2.zpp_pool,t.geom.ZPP_Vec2.zpp_pool=_}}return n}toString(){return"{ density: "+this.zpp_inner.density*1e3+" viscosity: "+this.zpp_inner.viscosity+" gravity: "+String(this.zpp_inner.wrap_gravity)+" }"}};Mn._wrapFn=g=>Ze(g,e=>{let t=Object.create(Nn.prototype);return t.zpp_inner=e,e.outer=t,t});var Jo=me();Jo.phys.FluidProperties=Nn;var Ys,vl,gl;function $l(g){Ys=g}var Xs=class Xs{constructor(){this._inner=void 0,this.zpp_inner_i=null}static _wrap(e){return e?e instanceof Xs?e:e.isBody&&e.isBody()&&Ys?Ys(e):e.isShape&&e.isShape()&&vl?vl(e):e.isCompound&&e.isCompound()&&gl?gl(e):Ze(e,t=>{let n=Object.create(Xs.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i??t,n}):null}get id(){return this.zpp_inner_i.id}get userData(){return this.zpp_inner_i.userData==null&&(this.zpp_inner_i.userData={}),this.zpp_inner_i.userData}get group(){return this.zpp_inner_i.group==null?null:this.zpp_inner_i.group.outer}set group(e){this.zpp_inner_i.immutable_midstep("Interactor::group"),this.zpp_inner_i.setGroup(e==null?null:e.zpp_inner)}get cbTypes(){return this.zpp_inner_i.wrap_cbTypes==null&&this.zpp_inner_i.setupcbTypes(),this.zpp_inner_i.wrap_cbTypes}get castBody(){if(this.zpp_inner_i.ibody!=null){let e=this.zpp_inner_i.ibody.outer;return Ys?Ys(e):e}return null}get castShape(){if(this.zpp_inner_i.ishape!=null){let e=this.zpp_inner_i.ishape.outer;return vl?vl(e):e}return null}get castCompound(){if(this.zpp_inner_i.icompound!=null){let e=this.zpp_inner_i.icompound.outer;return gl?gl(e):e}return null}isShape(){return this.zpp_inner_i.ishape!=null}isBody(){return this.zpp_inner_i.ibody!=null}isCompound(){return this.zpp_inner_i.icompound!=null}toString(){return""}};Xs.zpp_internalAlloc=!1;var gi=Xs;var Hs,Qs,$s;function eo(g){Hs=g}function to(g){Qs=g}function no(g){$s=g}var ti=class g extends gi{constructor(){super()}static _wrap(e){if(!e)return null;let t=e.isCircle?e.isCircle()?0:e.isPolygon?.()?1:-1:e.zpp_inner?.type??-1;return t===0&&Hs?Hs(e):t===1&&Qs?Qs(e):t===2&&$s?$s(e):e.outer?e.outer:Ze(e,n=>{let s=Object.create(g.prototype);return s._inner=n,s.zpp_inner=n.zpp_inner??n,s.zpp_inner_i=n.zpp_inner_i??n,s})}get type(){return ai.types[this.zpp_inner.type]}isCircle(){return this.zpp_inner.type===0}isPolygon(){return this.zpp_inner.type===1}isCapsule(){return this.zpp_inner.type===2}get body(){let e=this.zpp_inner;return e.body!=null?e.body.outer:null}set body(e){let t=this.zpp_inner;t.immutable_midstep("Shape::body");let n=t.body!=null?t.body.outer:null;if(n!==e&&(t.body!=null&&n.zpp_inner.wrap_shapes.remove(this),e!=null)){let s=e.zpp_inner.wrap_shapes;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}}get castCircle(){let e=this.zpp_inner;if(e.type===0){let t=e.circle.outer_zn;return Hs?Hs(t):t}return null}get castPolygon(){let e=this.zpp_inner;if(e.type===1){let t=e.polygon.outer_zn;return Qs?Qs(t):t}return null}get castCapsule(){let e=this.zpp_inner;if(e.type===2){let t=e.capsule.outer_zn;return $s?$s(t):t}return null}get worldCOM(){let e=this.zpp_inner;return e.wrap_worldCOM==null&&this._setupWorldCOM(),e.wrap_worldCOM}get localCOM(){let e=this.zpp_inner;return e.wrap_localCOM==null&&(e.type===0?e.circle.setupLocalCOM():e.type===1?e.polygon.setupLocalCOM():e.capsule.setupLocalCOM()),e.wrap_localCOM}set localCOM(e){let t=this.zpp_inner;if(t.immutable_midstep("Body::localCOM"),e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e==null)throw new Error("Error: Shape::localCOM cannot be null");t.wrap_localCOM==null&&(t.type===0?t.circle.setupLocalCOM():t.type===1?t.polygon.setupLocalCOM():t.capsule.setupLocalCOM()),t.wrap_localCOM.set(e),e.zpp_inner.weak&&e.dispose()}get area(){let e=this.zpp_inner;return e.validate_area_inertia(),e.area}get inertia(){let e=this.zpp_inner;return e.validate_area_inertia(),e.inertia}get angDrag(){let e=this.zpp_inner;return e.validate_angDrag(),e.angDrag}get material(){return this.zpp_inner.material.wrapper()}set material(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::material"),e==null)throw new Error("Error: Cannot assign null as Shape material");t.setMaterial(e.zpp_inner)}get filter(){return this.zpp_inner.filter.wrapper()}set filter(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::filter"),e==null)throw new Error("Error: Cannot assign null as Shape filter");t.setFilter(e.zpp_inner)}get fluidProperties(){let e=this.zpp_inner;return e.immutable_midstep("Shape::fluidProperties"),e.fluidProperties==null&&e.setFluid(new Nn().zpp_inner),e.fluidProperties.wrapper()}set fluidProperties(e){let t=this.zpp_inner;if(e==null)throw new Error("Error: Cannot assign null as Shape fluidProperties, disable fluids by setting fluidEnabled to false");t.setFluid(e.zpp_inner),t.immutable_midstep("Shape::fluidProperties"),t.fluidProperties==null&&t.setFluid(new Nn().zpp_inner)}get cbTypes(){this.zpp_inner_i.wrap_cbTypes==null&&this.zpp_inner_i.setupcbTypes();let e=this.zpp_inner_i.wrap_cbTypes;return{_inner:e,add(t){e.add(t._inner)},remove(t){e.remove(t._inner)},has(t){return e.has(t._inner)},clear(){e.clear()},get length(){return e.length}}}get fluidEnabled(){return this.zpp_inner.fluidEnabled}set fluidEnabled(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::fluidEnabled"),t.fluidEnabled=e,e&&t.fluidProperties==null){let n=new Nn;t.setFluid(n.zpp_inner),t.immutable_midstep("Shape::fluidProperties"),t.fluidProperties==null&&t.setFluid(new Nn().zpp_inner),t.fluidProperties.wrapper()}t.wake()}get sensorEnabled(){return this.zpp_inner.sensorEnabled}set sensorEnabled(e){let t=this.zpp_inner;t.immutable_midstep("Shape::sensorEnabled"),t.sensorEnabled=e,t.wake()}get bounds(){return this.zpp_inner.aabb.wrapper()}translate(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::translate()"),e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e==null)throw new Error("Error: Cannot displace Shape by null Vec2");if(e.lsq()>0){let n=e.zpp_inner;n._validate!=null&&n._validate();let s=n.x;n._validate!=null&&n._validate();let i=n.y;(t.type===0?t.circle:t.type===1?t.polygon:t.capsule).__translate(s,i)}return e.zpp_inner.weak&&e.dispose(),this}scale(e,t){let n=this.zpp_inner,s=me();if(n.immutable_midstep("Shape::scale()"),n.body!=null&&n.body.space!=null&&n.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e!==e||t!==t)throw new Error("Error: Cannot scale Shape by NaN");if(e===0||t===0)throw new Error("Error: Cannot Scale shape by a factor of 0");if(n.type===0){let i=e*e-t*t;if(i*i<s.Config.epsilon*s.Config.epsilon)n.circle.__scale(e,t);else throw new Error("Error: Cannot perform a non equal scaling on a Circle")}else n.type===1?n.polygon.__scale(e,t):n.capsule.__scale(e,t);return this}rotate(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::rotate()"),t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e!==e)throw new Error("Error: Cannot rotate Shape by NaN");if(e%(2*Math.PI)!==0){let s=Math.cos(e),i=Math.sin(e);t.type===0?t.circle.__rotate(i,s):t.type===1?t.polygon.__rotate(i,s):t.capsule.__rotate(i,s)}return this}transform(e){let t=this.zpp_inner;if(t.immutable_midstep("Shape::transform()"),t.body!=null&&t.body.space!=null&&t.body.type===1)throw new Error("Error: Cannot modify Shape belonging to a static Object once inside a Space");if(e==null)throw new Error("Error: Cannot transform Shape by null matrix");let n=e._inner??e;if(n.singular())throw new Error("Error: Cannot transform Shape by a singular matrix");if(t.type===0)if(n.equiorthogonal())t.circle.__transform(n);else throw new Error("Error: Cannot transform Circle by a non equiorthogonal matrix");else t.type===1?t.polygon.__transform(n):t.capsule.__transform(n);return this}contains(e){let t=this.zpp_inner;if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Cannot check null point for containment");if((t.body!=null?t.body.outer:null)==null)throw new Error("Error: Shape is not well defined without a Body");vs.validateShape(t);let n=e.zpp_inner;n._validate!=null&&n._validate();let s=Ee.shapeContains(t,n);return n.weak&&e.dispose(),s}copy(){let e=this.zpp_inner.copy();return e instanceof g?e:g._wrap(e)}toString(){let e=this.zpp_inner;return(e.type===0?"Circle":e.type===1?"Polygon":"Capsule")+"#"+this.zpp_inner_i.id}_setupWorldCOM(){let e=me(),t=this.zpp_inner,n=t.worldCOMx,s=t.worldCOMy;if(n!==n||s!==s)throw new Error("Error: Vec2 components cannot be NaN");let i;if(ye.poolVec2==null?i=new e.geom.Vec2:(i=ye.poolVec2,ye.poolVec2=i.zpp_pool,i.zpp_pool=null,i.zpp_disp=!1,i===ye.nextVec2&&(ye.nextVec2=null)),i.zpp_inner==null){let l;le.zpp_pool==null?l=new le:(l=le.zpp_pool,le.zpp_pool=l.next,l.next=null),l.weak=!1,l._immutable=!1,l.x=n,l.y=s,i.zpp_inner=l,i.zpp_inner.outer=i}else i.zpp_inner.x=n,i.zpp_inner.y=s;i.zpp_inner.weak=!1,t.wrap_worldCOM=i,t.wrap_worldCOM.zpp_inner._inuse=!0,t.wrap_worldCOM.zpp_inner._immutable=!0,t.wrap_worldCOM.zpp_inner._validate=t.getworldCOM.bind(t)}};var Tl=class{constructor(){this.user_length=0;this.zip_length=!1;this.push_ite=null;this.at_ite=null;this.at_index=0;this.reverse_flag=!1;this.dontremove=!1;this.subber=null;this.post_adder=null;this.adder=null;this._modifiable=null;this._validate=null;this._invalidate=null;this._invalidated=!1;this.immutable=!1;this.inner=null;this.outer=null;this._invalidated=!0}valmod(){this.validate(),this.inner.modified&&(this.inner.pushmod&&(this.push_ite=null),this.at_ite=null,this.inner.modified=!1,this.inner.pushmod=!1,this.zip_length=!0)}modified(){this.zip_length=!0,this.at_ite=null,this.push_ite=null}modify_test(){this._modifiable!=null&&this._modifiable()}validate(){this._invalidated&&(this._invalidated=!1,this._validate!=null&&this._validate())}invalidate(){this._invalidated=!0,this._invalidate!=null&&this._invalidate(this)}};function On(g,e,t,n){let s=me(),i=s.__zpp;class l extends Tl{constructor(){super(),this.inner=new i.util[g]}static get(a,o=!1){let p=new s[e][t];return p.zpp_inner.inner=a,o&&(p.zpp_inner.immutable=!0),p.zpp_inner.zip_length=!0,p}}return l.internal=!1,i.util[n]=l,l}var Ll=null,qo=null,Dl=null;Ll=On("ZNPList_ZPP_Constraint","constraint","ConstraintList","ZPP_ConstraintList");On("ZNPList_ZPP_Body","phys","BodyList","ZPP_BodyList");qo=On("ZNPList_ZPP_Interactor","phys","InteractorList","ZPP_InteractorList");On("ZNPList_ZPP_Compound","phys","CompoundList","ZPP_CompoundList");On("ZNPList_ZPP_Listener","callbacks","ListenerList","ZPP_ListenerList");On("ZNPList_ZPP_CbType","callbacks","CbTypeList","ZPP_CbTypeList");On("ZNPList_ZPP_GeomPoly","geom","GeomPolyList","ZPP_GeomPolyList");On("ZNPList_RayResult","geom","RayResultList","ZPP_RayResultList");On("ZNPList_ConvexResult","geom","ConvexResultList","ZPP_ConvexResultList");On("ZNPList_ZPP_Edge","shape","EdgeList","ZPP_EdgeList");On("ZNPList_ZPP_Shape","shape","ShapeList","ZPP_ShapeList");On("ZNPList_ZPP_InteractionGroup","dynamics","InteractionGroupList","ZPP_InteractionGroupList");Dl=On("ZNPList_ZPP_Arbiter","dynamics","ArbiterList","ZPP_ArbiterList");function Un(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function Wn(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function Ln(g){if(g!=null&&g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!")}function Sn(g){g.zpp_inner.weak&&g.dispose()}function Zs(g,e,t,n,s){if(Ln(t),t==null)throw new Error("Error: Body::"+g+" cannot be null");return e==null&&n!=null&&(n(),e=s()),e.set(t),e}function Cl(g,e,t){return je.get(g,e,t)}function nn(g,e){return Q[g]==null&&(Q.internal=!0,Q[g]=e(),Q.internal=!1),Q[g]}var We=class g extends gi{constructor(t,n){super();this.debugDraw=!0;let s=new Cn;this.zpp_inner=s,s.outer=this,s.outer_i=this,this.zpp_inner_i=s,this._inner=this,n!=null?(Ln(n),s.posx=Un(n),s.posy=Wn(n)):(s.posx=0,s.posy=0);let i=me(),l;if(t==null?l=nn("BodyType_DYNAMIC",()=>new i.phys.BodyType):l=t,s.immutable_midstep("Body::type"),s.world)throw new Error("Error: Space::world is immutable");if(Cn.types[s.type]!==l){if(l==null)throw new Error("Error: Cannot use null BodyType");let r=io(l,i);r===1&&s.space!=null&&(s.velx=0,s.vely=0,s.angvel=0),s.invalidate_type(),s.space!=null?s.space.transmitType(s,r):s.type=r}n!=null&&Sn(n),s.insert_cbtype(an.ANY_BODY.zpp_inner)}static _wrap(t){return t?t instanceof g?t:t instanceof Cn?Ze(t,n=>{let s=Object.create(g.prototype);return s.zpp_inner=n,n.outer=s,n.outer_i=s,s.zpp_inner_i=n,s._inner=s,s.debugDraw=!0,s}):t.zpp_inner?g._wrap(t.zpp_inner):Ze(t,n=>{let s=Object.create(g.prototype);return s._inner=n,s}):null}get type(){return Cn.types[this.zpp_inner.type]}set type(t){let n=this.zpp_inner;if(n.immutable_midstep("Body::type"),n.world)throw new Error("Error: Space::world is immutable");if(Cn.types[n.type]!==t){if(t==null)throw new Error("Error: Cannot use null BodyType");let s=me(),i=io(t,s);i===1&&n.space!=null&&(n.velx=0,n.vely=0,n.angvel=0),n.invalidate_type(),n.space!=null?n.space.transmitType(n,i):n.type=i}}isStatic(){return this.zpp_inner.type===1}isDynamic(){return this.zpp_inner.type===2}isKinematic(){return this.zpp_inner.type===3}get position(){return this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition(),this.zpp_inner.wrap_pos}set position(t){Zs("position",this.zpp_inner.wrap_pos,t,()=>this.zpp_inner.setupPosition(),()=>this.zpp_inner.wrap_pos),this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition()}get rotation(){return this.zpp_inner.rot}set rotation(t){let n=this.zpp_inner;if(n.immutable_midstep("Body::rotation"),n.world)throw new Error("Error: Space::world is immutable");if(n.type===1&&n.space!=null)throw new Error("Error: Static objects cannot be rotated once inside a Space");if(n.rot!==t){if(t!==t)throw new Error("Error: Body::rotation cannot be NaN");n.rot=t,n.invalidate_rot(),n.wake()}}get velocity(){return this.zpp_inner.wrap_vel==null&&this.zpp_inner.setupVelocity(),this.zpp_inner.wrap_vel}set velocity(t){Zs("velocity",this.zpp_inner.wrap_vel,t,()=>this.zpp_inner.setupVelocity(),()=>this.zpp_inner.wrap_vel),this.zpp_inner.wrap_vel==null&&this.zpp_inner.setupVelocity()}get angularVel(){return this.zpp_inner.angvel}set angularVel(t){let n=this.zpp_inner;if(n.world)throw new Error("Error: Space::world is immutable");if(n.angvel!==t){if(t!==t)throw new Error("Error: Body::angularVel cannot be NaN");if(n.type===1)throw new Error("Error: A static object cannot be given a velocity");n.angvel=t,n.wake()}}get kinematicVel(){return this.zpp_inner.wrap_kinvel==null&&this.zpp_inner.setupkinvel(),this.zpp_inner.wrap_kinvel}set kinematicVel(t){Zs("kinematicVel",this.zpp_inner.wrap_kinvel,t,()=>this.zpp_inner.setupkinvel(),()=>this.zpp_inner.wrap_kinvel),this.zpp_inner.wrap_kinvel==null&&this.zpp_inner.setupkinvel()}get kinAngVel(){return this.zpp_inner.kinangvel}set kinAngVel(t){let n=this.zpp_inner;if(n.world)throw new Error("Error: Space::world is immutable");if(n.kinangvel!==t){if(t!==t)throw new Error("Error: Body::kinAngVel cannot be NaN");n.kinangvel=t,n.wake()}}get surfaceVel(){return this.zpp_inner.wrap_svel==null&&this.zpp_inner.setupsvel(),this.zpp_inner.wrap_svel}set surfaceVel(t){Zs("surfaceVel",this.zpp_inner.wrap_svel,t,()=>this.zpp_inner.setupsvel(),()=>this.zpp_inner.wrap_svel),this.zpp_inner.wrap_svel==null&&this.zpp_inner.setupsvel()}get force(){return this.zpp_inner.wrap_force==null&&this.zpp_inner.setupForce(),this.zpp_inner.wrap_force}set force(t){Zs("force",this.zpp_inner.wrap_force,t,()=>this.zpp_inner.setupForce(),()=>this.zpp_inner.wrap_force),this.zpp_inner.wrap_force==null&&this.zpp_inner.setupForce()}get torque(){return this.zpp_inner.torque}set torque(t){let n=this.zpp_inner;if(n.world)throw new Error("Error: Space::world is immutable");if(n.type!==2)throw new Error("Error: Non-dynamic body cannot have torque applied.");if(t!==t)throw new Error("Error: Body::torque cannot be NaN");n.torque!==t&&(n.torque=t,n.wake())}get mass(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no mass");if(this.zpp_inner.validate_mass(),this.zpp_inner.massMode===0&&this.zpp_inner.shapes.head==null)throw new Error("Error: Given current mass mode, Body::mass only makes sense if it contains shapes");return this.zpp_inner.cmass}set mass(t){if(this.zpp_inner.immutable_midstep("Body::mass"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: Mass cannot be NaN");if(t<=0)throw new Error("Error: Mass must be strictly positive");if(t>=1/0)throw new Error("Error: Mass cannot be infinite, use allowMovement = false instead");this.zpp_inner.massMode=1,this.zpp_inner.cmass=t,this.zpp_inner.invalidate_mass()}get inertia(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no inertia");if(this.zpp_inner.validate_inertia(),this.zpp_inner.inertiaMode===0&&this.zpp_inner.shapes.head==null)throw new Error("Error: Given current inertia mode flag, Body::inertia only makes sense if Body contains Shapes");return this.zpp_inner.cinertia}set inertia(t){if(this.zpp_inner.immutable_midstep("Body::inertia"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: Inertia cannot be NaN");if(t<=0)throw new Error("Error: Inertia must be strictly positive");if(t>=1/0)throw new Error("Error: Inertia cannot be infinite, use allowRotation = false instead");this.zpp_inner.inertiaMode=1,this.zpp_inner.cinertia=t,this.zpp_inner.invalidate_inertia()}get constraintMass(){return this.zpp_inner.world||this.zpp_inner.validate_mass(),this.zpp_inner.smass}get constraintInertia(){return this.zpp_inner.world||this.zpp_inner.validate_inertia(),this.zpp_inner.sinertia}get gravMass(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no gravMass");if(this.zpp_inner.validate_gravMass(),this.zpp_inner.shapes.head==null&&this.zpp_inner.massMode===0&&this.zpp_inner.gravMassMode!==1)throw new Error("Error: Given current mass/gravMass modes; Body::gravMass only makes sense if it contains Shapes");return this.zpp_inner.gravMass}set gravMass(t){if(this.zpp_inner.immutable_midstep("Body::gravMass"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: gravMass cannot be NaN");this.zpp_inner.gravMassMode=1,this.zpp_inner.gravMass=t,this.zpp_inner.invalidate_gravMass()}get gravMassScale(){if(this.zpp_inner.validate_gravMassScale(),this.zpp_inner.shapes.head==null&&this.zpp_inner.massMode===0&&this.zpp_inner.gravMassMode!==2)throw new Error("Error: Given current mass/gravMass modes; Body::gravMassScale only makes sense if it contains Shapes");return this.zpp_inner.gravMassScale}set gravMassScale(t){if(this.zpp_inner.immutable_midstep("Body::gravMassScale"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t!==t)throw new Error("Error: gravMassScale cannot be NaN");this.zpp_inner.gravMassMode=2,this.zpp_inner.gravMassScale=t,this.zpp_inner.invalidate_gravMassScale()}get isBullet(){return this.zpp_inner.bulletEnabled}set isBullet(t){this.zpp_inner.bulletEnabled=t}get disableCCD(){return this.zpp_inner.disableCCD}set disableCCD(t){this.zpp_inner.disableCCD=t}get allowMovement(){return!this.zpp_inner.nomove}set allowMovement(t){this.zpp_inner.immutable_midstep("Body::"+(t==null?"null":""+t)),!this.zpp_inner.nomove!==t&&(this.zpp_inner.nomove=!t,this.zpp_inner.invalidate_mass())}get allowRotation(){return!this.zpp_inner.norotate}set allowRotation(t){this.zpp_inner.immutable_midstep("Body::"+(t==null?"null":""+t)),!this.zpp_inner.norotate!==t&&(this.zpp_inner.norotate=!t,this.zpp_inner.invalidate_inertia())}get isSleeping(){if(this.zpp_inner.space==null)throw new Error("Error: isSleeping makes no sense if the object is not contained within a Space");return this.zpp_inner.component.sleeping}get shapes(){return new wl(this.zpp_inner.wrap_shapes,ti._wrap)}get space(){return this.zpp_inner.space==null?null:ni._wrap(this.zpp_inner.space.outer)}set space(t){let n=t!=null?t._inner??t:null;if(this.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Body belonging to a Compound, only the root Compound space can be set");if(this.zpp_inner.immutable_midstep("Body::space"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let s=this.zpp_inner.space==null?null:this.zpp_inner.space.outer;if(s!==n&&(s!=null&&(this.zpp_inner.component.woken=!1,s.zpp_inner.wrap_bodies.remove(this)),n!=null)){let i=n.zpp_inner.wrap_bodies;i.zpp_inner.reverse_flag?i.push(this):i.unshift(this)}}get compound(){return this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer}set compound(t){let n=this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer;if(n!==t&&(n?.zpp_inner.wrap_bodies.remove(this),t!=null)){let s=t.zpp_inner.wrap_bodies;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}}get bounds(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no bounds");return Ks._wrap(this.zpp_inner.aabb.wrapper())}get constraintVelocity(){return this.zpp_inner.wrapcvel==null&&this.zpp_inner.setup_cvel(),this.zpp_inner.wrapcvel}get localCOM(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no localCOM");if(this.zpp_inner.wrap_localCOM==null){let t=je.get(this.zpp_inner.localCOMx,this.zpp_inner.localCOMy);this.zpp_inner.wrap_localCOM=t,t.zpp_inner._inuse=!0,t.zpp_inner._immutable=!0,t.zpp_inner._validate=()=>this.zpp_inner.getlocalCOM()}return this.zpp_inner.wrap_localCOM}get worldCOM(){if(this.zpp_inner.world)throw new Error("Error: Space::world has no worldCOM");if(this.zpp_inner.wrap_worldCOM==null){let t=je.get(this.zpp_inner.worldCOMx,this.zpp_inner.worldCOMy);this.zpp_inner.wrap_worldCOM=t,t.zpp_inner._inuse=!0,t.zpp_inner._immutable=!0,t.zpp_inner._validate=()=>this.zpp_inner.getworldCOM()}return this.zpp_inner.wrap_worldCOM}get massMode(){let t=me(),n=nn("MassMode_DEFAULT",()=>new t.phys.MassMode),s=nn("MassMode_FIXED",()=>new t.phys.MassMode);return[n,s][this.zpp_inner.massMode]}set massMode(t){let n=me();if(this.zpp_inner.immutable_midstep("Body::massMode"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: cannot use null massMode");let s=nn("MassMode_DEFAULT",()=>new n.phys.MassMode);this.zpp_inner.massMode=t===s?0:1,this.zpp_inner.invalidate_mass()}get inertiaMode(){let t=me(),n=nn("InertiaMode_DEFAULT",()=>new t.phys.InertiaMode),s=nn("InertiaMode_FIXED",()=>new t.phys.InertiaMode);return[n,s][this.zpp_inner.inertiaMode]}set inertiaMode(t){let n=me();if(this.zpp_inner.immutable_midstep("Body::inertiaMode"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot use null InertiaMode");let s=nn("InertiaMode_FIXED",()=>new n.phys.InertiaMode);this.zpp_inner.inertiaMode=t===s?1:0,this.zpp_inner.invalidate_inertia()}get gravMassMode(){let t=me(),n=nn("GravMassMode_DEFAULT",()=>new t.phys.GravMassMode),s=nn("GravMassMode_FIXED",()=>new t.phys.GravMassMode),i=nn("GravMassMode_SCALED",()=>new t.phys.GravMassMode);return[n,s,i][this.zpp_inner.gravMassMode]}set gravMassMode(t){let n=me();if(this.zpp_inner.immutable_midstep("Body::gravMassMode"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot use null gravMassMode");let s=nn("GravMassMode_SCALED",()=>new n.phys.GravMassMode);if(t===s)this.zpp_inner.gravMassMode=2;else{let i=nn("GravMassMode_DEFAULT",()=>new n.phys.GravMassMode);this.zpp_inner.gravMassMode=t===i?0:1}this.zpp_inner.invalidate_gravMass()}copy(){if(this.zpp_inner.world)throw new Error("Error: Space::world cannot be copied");return this.zpp_inner.copy()}toString(){let t=this.zpp_inner;return(t.world?"(space::world":"("+(t.type===2?"dynamic":t.type===1?"static":"kinematic"))+")#"+this.zpp_inner_i.id}integrate(t){if(t!==t)throw new Error("Cannot integrate by NaN time");if(this.zpp_inner.immutable_midstep("Body::space"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t===0)return this;let n=this.zpp_inner;n.sweepTime=0,n.sweep_angvel=n.angvel;let s=t-n.sweepTime;if(s!==0&&(n.sweepTime=t,n.posx+=n.velx*s,n.posy+=n.vely*s,n.angvel!==0)){let i=n.sweep_angvel*s;if(n.rot+=i,i*i>1e-4)n.axisx=Math.sin(n.rot),n.axisy=Math.cos(n.rot);else{let l=i*i,r=1-.5*l,a=1-l*l/8,o=(r*n.axisx+i*n.axisy)*a;n.axisy=(r*n.axisy-i*n.axisx)*a,n.axisx=o}}return so(n),n.zip_worldCOM=!0,n.zip_axis=!0,so(n),n.zip_worldCOM=!0,n.sweepTime=0,this}localPointToWorld(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t),i=Wn(t),l=this.zpp_inner.axisy*s-this.zpp_inner.axisx*i,r=s*this.zpp_inner.axisx+i*this.zpp_inner.axisy;return Sn(t),Cl(l+this.zpp_inner.posx,r+this.zpp_inner.posy,n)}worldPointToLocal(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t)-this.zpp_inner.posx,i=Wn(t)-this.zpp_inner.posy,l=s*this.zpp_inner.axisy+i*this.zpp_inner.axisx,r=i*this.zpp_inner.axisy-s*this.zpp_inner.axisx;return Sn(t),Cl(l,r,n)}localVectorToWorld(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t),i=Wn(t),l=this.zpp_inner.axisy*s-this.zpp_inner.axisx*i,r=s*this.zpp_inner.axisx+i*this.zpp_inner.axisy;return Sn(t),Cl(l,r,n)}worldVectorToLocal(t,n=!1){if(Ln(t),t==null)throw new Error("Error: Cannot transform null Vec2");this.zpp_inner.validate_axis();let s=Un(t),i=Wn(t),l=s*this.zpp_inner.axisy+i*this.zpp_inner.axisx,r=i*this.zpp_inner.axisy-s*this.zpp_inner.axisx;return Sn(t),Cl(l,r,n)}applyImpulse(t,n,s=!1){if(Ln(t),n!=null&&Ln(n),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot apply null impulse to Body");if(s&&this.isSleeping)return Sn(t),n!=null&&Sn(n),this;this.zpp_inner.validate_mass();let i=this.zpp_inner.imass,l=Un(t),r=Wn(t);if(this.zpp_inner.velx+=l*i,this.zpp_inner.vely+=r*i,n!=null){let a=Un(n)-this.zpp_inner.posx,o=Wn(n)-this.zpp_inner.posy;this.zpp_inner.validate_inertia(),this.zpp_inner.angvel+=(r*a-l*o)*this.zpp_inner.iinertia,Sn(n)}return s||this.zpp_inner.type===2&&this.zpp_inner.wake(),Sn(t),this}applyAngularImpulse(t,n=!1){if(this.zpp_inner.world)throw new Error("Error: Space::world is immutable");return n&&this.isSleeping?this:(this.zpp_inner.validate_inertia(),this.zpp_inner.angvel+=t*this.zpp_inner.iinertia,n||this.zpp_inner.type===2&&this.zpp_inner.wake(),this)}setVelocityFromTarget(t,n,s){if(Ln(t),t==null)throw new Error("Cannot set velocity for null target position");if(s===0)throw new Error("deltaTime cannot be 0 for setVelocityFromTarget");let i=1/s;this.zpp_inner.wrap_vel==null&&this.zpp_inner.setupVelocity(),this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition();let l=t.sub(this.zpp_inner.wrap_pos,!0).muleq(i);this.zpp_inner.wrap_vel.set(l);let r=(n-this.zpp_inner.rot)*i;if(this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(this.zpp_inner.angvel!==r){if(r!==r)throw new Error("Error: Body::angularVel cannot be NaN");if(this.zpp_inner.type===1)throw new Error("Error: A static object cannot be given a velocity");this.zpp_inner.angvel=r,this.zpp_inner.wake()}return Sn(t),this}translateShapes(t){if(this.zpp_inner.immutable_midstep("Body::translateShapes()"),Ln(t),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(t==null)throw new Error("Error: Cannot displace by null Vec2");let n=t.zpp_inner.weak;t.zpp_inner.weak=!1;let s=this.zpp_inner.shapes.head;for(;s!=null;)s.elt.outer.translate(t),s=s.next;return t.zpp_inner.weak=n,Sn(t),this}rotateShapes(t){if(this.zpp_inner.immutable_midstep("Body::rotateShapes()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;)n.elt.outer.rotate(t),n=n.next;return this}scaleShapes(t,n){if(this.zpp_inner.immutable_midstep("Body::scaleShapes()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let s=this.zpp_inner.shapes.head;for(;s!=null;)s.elt.outer.scale(t,n),s=s.next;return this}transformShapes(t){if(this.zpp_inner.immutable_midstep("Body::transformShapes()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;)n.elt.outer.transform(t),n=n.next;return this}align(){if(this.zpp_inner.immutable_midstep("Body::align()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");if(this.zpp_inner.shapes.head==null)throw new Error("Error: Cannot align empty Body");this.zpp_inner.validate_localCOM();let t=je.get(-this.zpp_inner.localCOMx,-this.zpp_inner.localCOMy);this.translateShapes(t);let n=this.localVectorToWorld(t);return this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition(),this.zpp_inner.wrap_pos.subeq(n),this.zpp_inner.pre_posx<1/0&&(this.zpp_inner.pre_posx-=Un(n),this.zpp_inner.pre_posy-=Wn(n)),t.dispose(),n.dispose(),this}rotate(t,n){if(Ln(t),t==null)throw new Error("Error: Cannot rotate about a null Vec2");if(n!==n)throw new Error("Error: Cannot rotate by NaN radians");let s=t.zpp_inner.weak;t.zpp_inner.weak=!1,this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition();let i=this.zpp_inner.wrap_pos.sub(t);i.rotate(n);let l=t.add(i,!0);Zs("position",this.zpp_inner.wrap_pos,l,()=>this.zpp_inner.setupPosition(),()=>this.zpp_inner.wrap_pos),this.zpp_inner.wrap_pos==null&&this.zpp_inner.setupPosition(),i.dispose();{let r=this.zpp_inner.rot+n,a=this.zpp_inner;if(a.immutable_midstep("Body::rotation"),a.world)throw new Error("Error: Space::world is immutable");if(a.type===1&&a.space!=null)throw new Error("Error: Static objects cannot be rotated once inside a Space");if(a.rot!==r){if(r!==r)throw new Error("Error: Body::rotation cannot be NaN");a.rot=r,a.invalidate_rot(),a.wake()}}return t.zpp_inner.weak=s,Sn(t),this}setShapeMaterials(t){if(this.zpp_inner.immutable_midstep("Body::setShapeMaterials()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;){let s=n.elt.outer;if(s.zpp_inner.immutable_midstep("Shape::material"),t==null)throw new Error("Error: Cannot assign null as Shape material");s.zpp_inner.setMaterial(t.zpp_inner),s.zpp_inner.material.wrapper(),n=n.next}return this}setShapeFilters(t){if(this.zpp_inner.immutable_midstep("Body::setShapeFilters()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=this.zpp_inner.shapes.head;for(;n!=null;){let s=n.elt.outer;if(s.zpp_inner.immutable_midstep("Shape::filter"),t==null)throw new Error("Error: Cannot assign null as Shape filter");s.zpp_inner.setFilter(t.zpp_inner),s.zpp_inner.filter.wrapper(),n=n.next}return this}setShapeFluidProperties(t){if(this.zpp_inner.immutable_midstep("Body::setShapeFluidProperties()"),this.zpp_inner.world)throw new Error("Error: Space::world is immutable");let n=me(),s=this.zpp_inner.shapes.head;for(;s!=null;){let i=s.elt.outer;if(t==null)throw new Error("Error: Cannot assign null as Shape fluidProperties, disable fluids by setting fluidEnabled to false");i.zpp_inner.setFluid(t.zpp_inner),i.zpp_inner.immutable_midstep("Shape::fluidProperties"),i.zpp_inner.fluidProperties==null&&i.zpp_inner.setFluid(new n.phys.FluidProperties().zpp_inner),i.zpp_inner.fluidProperties.wrapper(),s=s.next}return this}contains(t){if(Ln(t),t==null)throw new Error("Error: Cannot check containment of null point");let n=t.zpp_inner.weak;t.zpp_inner.weak=!1;let s=!1,i=this.zpp_inner.shapes.head;for(;i!=null;){if(i.elt.outer.contains(t)){s=!0;break}i=i.next}return t.zpp_inner.weak=n,Sn(t),s}connectedBodies(t=-1,n=null){return this.zpp_inner.connectedBodies(t,n)}interactingBodies(t=null,n=-1,s=null){let i;if(t==null)i=Ie.COL|Ie.SENSOR|Ie.FLUID;else{let l=me(),r=nn("InteractionType_COLLISION",()=>new l.callbacks.InteractionType);if(t===r)i=Ie.COL;else{let a=nn("InteractionType_SENSOR",()=>new l.callbacks.InteractionType);i=t===a?Ie.SENSOR:Ie.FLUID}}return this.zpp_inner.interactingBodies(i,s)}normalImpulse(t=null,n=!1){return this._arbiterImpulseQuery(Ie.COL,s=>s.collisionArbiter.normalImpulse(this,n),t)}tangentImpulse(t=null,n=!1){return this._arbiterImpulseQuery(Ie.COL,s=>s.collisionArbiter.tangentImpulse(this,n),t)}totalContactsImpulse(t=null,n=!1){return this._arbiterImpulseQuery(Ie.COL,s=>s.collisionArbiter.totalImpulse(this,n),t)}rollingImpulse(t=null,n=!1){let s=0,l=this._getArbiters().iterator();for(;;){l.zpp_inner.zpp_inner.valmod();let r=l.zpp_inner.zpp_gl();if(l.zpp_critical=!0,l.zpp_i>=r){l.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=l,l.zpp_inner=null;break}l.zpp_critical=!1;let a=l.zpp_inner.at(l.zpp_i++),o=a.zpp_inner;o.type===Ie.COL&&(t!=null&&o.b2!==t.zpp_inner&&o.b1!==t.zpp_inner||(s+=a.collisionArbiter.rollingImpulse(this,n)))}return s}buoyancyImpulse(t=null){return this._arbiterImpulseQuery(Ie.FLUID,n=>n.fluidArbiter.buoyancyImpulse(this),t)}dragImpulse(t=null){return this._arbiterImpulseQuery(Ie.FLUID,n=>n.fluidArbiter.dragImpulse(this),t)}totalFluidImpulse(t=null){return this._arbiterImpulseQuery(Ie.FLUID,n=>n.fluidArbiter.totalImpulse(this),t)}constraintsImpulse(){let t=0,n=0,s=0,i=this.zpp_inner.constraints.head;for(;i!=null;){let r=i.elt.outer.bodyImpulse(this),a=r.zpp_inner;a._validate!=null&&a._validate(),t+=a.x,a._validate!=null&&a._validate(),n+=a.y,a._validate!=null&&a._validate(),s+=a.z,r.dispose(),i=i.next}return hi.get(t,n,s)}totalImpulse(t=null,n=!1){let s=0,i=0,l=0,a=this._getArbiters().iterator();for(;;){a.zpp_inner.zpp_inner.valmod();let p=a.zpp_inner.zpp_gl();if(a.zpp_critical=!0,a.zpp_i>=p){a.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=a,a.zpp_inner=null;break}a.zpp_critical=!1;let h=a.zpp_inner.at(a.zpp_i++).zpp_inner;if(h.type===Ie.SENSOR||t!=null&&h.b2!==t.zpp_inner&&h.b1!==t.zpp_inner)continue;let u=h.wrapper().totalImpulse(this,n),x=u.zpp_inner;x._validate!=null&&x._validate(),s+=x.x,x._validate!=null&&x._validate(),i+=x.y,x._validate!=null&&x._validate(),l+=x.z,u.dispose()}let o=this.zpp_inner.constraints.head;for(;o!=null;){let p=o.elt;if(p.outer.active){let c=p.outer.bodyImpulse(this),h=c.zpp_inner;h._validate!=null&&h._validate(),s+=h.x,h._validate!=null&&h._validate(),i+=h.y,h._validate!=null&&h._validate(),l+=h.z,c.dispose()}o=o.next}return hi.get(s,i,l)}crushFactor(){if(this.zpp_inner.space==null)throw new Error("Error: Makes no sense to see how much an object not taking part in a simulation is being crushed");let t=0,n=je.get(0,0),i=this._getArbiters().iterator();for(;;){i.zpp_inner.zpp_inner.valmod();let x=i.zpp_inner.zpp_gl();if(i.zpp_critical=!0,i.zpp_i>=x){i.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=i,i.zpp_inner=null;break}i.zpp_critical=!1;let d=i.zpp_inner.at(i.zpp_i++).totalImpulse(this),_=d.xy();n.addeq(_);let f=Un(_),z=Wn(_);t+=Math.sqrt(f*f+z*z),_.dispose(),d.dispose()}let r=this._getConstraints();r.zpp_inner.valmod();let a=me().constraint.ConstraintIterator.get(r);for(;;){a.zpp_inner.zpp_inner.valmod();let x=a.zpp_inner;x.zpp_inner.valmod(),x.zpp_inner.zip_length&&(x.zpp_inner.zip_length=!1,x.zpp_inner.user_length=x.zpp_inner.inner.length);let y=x.zpp_inner.user_length;if(a.zpp_critical=!0,a.zpp_i>=y){a.zpp_next=me().constraint.ConstraintIterator.zpp_pool,me().constraint.ConstraintIterator.zpp_pool=a,a.zpp_inner=null;break}a.zpp_critical=!1;let _=a.zpp_inner.at(a.zpp_i++).bodyImpulse(this),f=_.xy();n.addeq(f);let z=Un(f),P=Wn(f);t+=Math.sqrt(z*z+P*P),f.dispose(),_.dispose()}let o=Un(n),p=Wn(n),c=Math.sqrt(o*o+p*p),h=this.mass,u=(t-c)/(h*this.zpp_inner.space.pre_dt);return n.dispose(),u}_getArbiters(){return this.zpp_inner.wrap_arbiters==null&&(this.zpp_inner.wrap_arbiters=Dl.get(this.zpp_inner.arbiters,!0)),this.zpp_inner.wrap_arbiters}_getConstraints(){return this.zpp_inner.wrap_constraints==null&&(this.zpp_inner.wrap_constraints=Ll.get(this.zpp_inner.constraints,!0)),this.zpp_inner.wrap_constraints}_arbiterImpulseQuery(t,n,s){let i=0,l=0,r=0,o=this._getArbiters().iterator();for(;;){o.zpp_inner.zpp_inner.valmod();let p=o.zpp_inner.zpp_gl();if(o.zpp_critical=!0,o.zpp_i>=p){o.zpp_next=me().dynamics.ArbiterIterator.zpp_pool,me().dynamics.ArbiterIterator.zpp_pool=o,o.zpp_inner=null;break}o.zpp_critical=!1;let c=o.zpp_inner.at(o.zpp_i++),h=c.zpp_inner;if(h.type!==t||s!=null&&h.b2!==s.zpp_inner&&h.b1!==s.zpp_inner)continue;let u=n(c),x=u.zpp_inner;x._validate!=null&&x._validate(),i+=x.x,x._validate!=null&&x._validate(),l+=x.y,x._validate!=null&&x._validate(),r+=x.z,u.dispose()}return hi.get(i,l,r)}};function io(g,e){let t=nn("BodyType_DYNAMIC",()=>new e.phys.BodyType);if(g===t)return 2;let n=nn("BodyType_KINEMATIC",()=>new e.phys.BodyType);return g===n?3:1}function so(g){let e=g.shapes.head;for(;e!=null;){let t=e.elt;t.type===1&&(t.polygon.invalidate_gverts(),t.polygon.invalidate_gaxi()),t.invalidate_worldCOM(),e=e.next}}var Uo=me();Uo.phys.Body=We;$l(g=>We._wrap(g));var Ci={SHAPES:1,JOINTS:2,CONTACTS:4,AABB:8,CENTER_OF_MASS:16,VELOCITIES:32,ALL:63};var ni=class g{constructor(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let n=e==null?null:e.zpp_inner;this.zpp_inner=new ci(n,t),this.zpp_inner.outer=this,e!=null&&e.zpp_inner?.weak&&e.dispose()}get _inner(){return this}static _wrap(e){return e?e instanceof g?e:e instanceof ci?e.outer?e.outer:Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?.outer?e.zpp_inner.outer:Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n}):null}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get gravity(){return this.zpp_inner.wrap_gravity==null&&this.zpp_inner.getgravity(),this.zpp_inner.wrap_gravity}set gravity(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Space::gravity cannot be null");this.zpp_inner.wrap_gravity==null&&this.zpp_inner.getgravity(),this.zpp_inner.wrap_gravity.set(e),e.zpp_inner?.weak&&e.dispose()}get broadphase(){return this.zpp_inner.bphase.is_sweep?(Q.Broadphase_SWEEP_AND_PRUNE==null&&(Q.internal=!0,Q.Broadphase_SWEEP_AND_PRUNE=new(me()).space.Broadphase,Q.internal=!1),Q.Broadphase_SWEEP_AND_PRUNE):(Q.Broadphase_DYNAMIC_AABB_TREE==null&&(Q.internal=!0,Q.Broadphase_DYNAMIC_AABB_TREE=new(me()).space.Broadphase,Q.internal=!1),Q.Broadphase_DYNAMIC_AABB_TREE)}get sortContacts(){return this.zpp_inner.sortcontacts}set sortContacts(e){this.zpp_inner.sortcontacts=e}get worldAngularDrag(){return this.zpp_inner.global_ang_drag}set worldAngularDrag(e){if(e!==e)throw new Error("Error: Space::worldAngularDrag cannot be NaN");this.zpp_inner.global_ang_drag=e}get worldLinearDrag(){return this.zpp_inner.global_lin_drag}set worldLinearDrag(e){if(e!==e)throw new Error("Error: Space::worldLinearDrag cannot be NaN");this.zpp_inner.global_lin_drag=e}get compounds(){return this.zpp_inner.wrap_compounds}get bodies(){return this.zpp_inner.wrap_bodies}get liveBodies(){return this.zpp_inner.wrap_live}get constraints(){return this.zpp_inner.wrap_constraints}get liveConstraints(){return this.zpp_inner.wrap_livecon}get world(){return We._wrap(this.zpp_inner.__static)}get arbiters(){if(this.zpp_inner.wrap_arbiters==null){let e=new Xn;e.space=this.zpp_inner,this.zpp_inner.wrap_arbiters=e}return this.zpp_inner.wrap_arbiters}get listeners(){return this.zpp_inner.wrap_listeners}get timeStamp(){return this.zpp_inner.stamp}get elapsedTime(){return this.zpp_inner.time}step(e,t=10,n=10){if(e!==e)throw new Error("Error: deltaTime cannot be NaN");if(e<=0)throw new Error("Error: deltaTime must be strictly positive");if(t<=0)throw new Error("Error: must use atleast one velocity iteration");if(n<=0)throw new Error("Error: must use atleast one position iteration");this.zpp_inner.step(e,t,n)}clear(){if(this.zpp_inner.midstep)throw new Error("Error: Space::clear() cannot be called during space step()");this.zpp_inner.clear()}visitBodies(e){if(e==null)throw new Error("Error: lambda cannot be null for Space::visitBodies");let t=me(),n=this.zpp_inner.wrap_bodies;n.zpp_inner.valmod();let s=t.phys.BodyIterator.get(n);for(;;){s.zpp_inner.zpp_inner.valmod();let r=s.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(s.zpp_critical=!0,s.zpp_i>=a){s.zpp_next=t.phys.BodyIterator.zpp_pool,t.phys.BodyIterator.zpp_pool=s,s.zpp_inner=null;break}s.zpp_critical=!1,e(s.zpp_inner.at(s.zpp_i++))}let i=this.zpp_inner.wrap_compounds;i.zpp_inner.valmod();let l=t.phys.CompoundIterator.get(i);for(;;){l.zpp_inner.zpp_inner.valmod();let r=l.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(l.zpp_critical=!0,l.zpp_i>=a){l.zpp_next=t.phys.CompoundIterator.zpp_pool,t.phys.CompoundIterator.zpp_pool=l,l.zpp_inner=null;break}l.zpp_critical=!1,l.zpp_inner.at(l.zpp_i++).visitBodies(e)}}visitConstraints(e){if(e==null)throw new Error("Error: lambda cannot be null for Space::visitConstraints");let t=me(),n=this.zpp_inner.wrap_constraints;n.zpp_inner.valmod();let s=t.constraint.ConstraintIterator.get(n);for(;;){s.zpp_inner.zpp_inner.valmod();let r=s.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(s.zpp_critical=!0,s.zpp_i>=a){s.zpp_next=t.constraint.ConstraintIterator.zpp_pool,t.constraint.ConstraintIterator.zpp_pool=s,s.zpp_inner=null;break}s.zpp_critical=!1,e(s.zpp_inner.at(s.zpp_i++))}let i=this.zpp_inner.wrap_compounds;i.zpp_inner.valmod();let l=t.phys.CompoundIterator.get(i);for(;;){l.zpp_inner.zpp_inner.valmod();let r=l.zpp_inner;r.zpp_inner.valmod(),r.zpp_inner.zip_length&&(r.zpp_inner.zip_length=!1,r.zpp_inner.user_length=r.zpp_inner.inner.length);let a=r.zpp_inner.user_length;if(l.zpp_critical=!0,l.zpp_i>=a){l.zpp_next=t.phys.CompoundIterator.zpp_pool,t.phys.CompoundIterator.zpp_pool=l,l.zpp_inner=null;break}l.zpp_critical=!1,l.zpp_inner.at(l.zpp_i++).visitConstraints(e)}}visitCompounds(e){if(e==null)throw new Error("Error: lambda cannot be null for Space::visitCompounds");let t=me(),n=this.zpp_inner.wrap_compounds;n.zpp_inner.valmod();let s=t.phys.CompoundIterator.get(n);for(;;){s.zpp_inner.zpp_inner.valmod();let i=s.zpp_inner;i.zpp_inner.valmod(),i.zpp_inner.zip_length&&(i.zpp_inner.zip_length=!1,i.zpp_inner.user_length=i.zpp_inner.inner.length);let l=i.zpp_inner.user_length;if(s.zpp_critical=!0,s.zpp_i>=l){s.zpp_next=t.phys.CompoundIterator.zpp_pool,t.phys.CompoundIterator.zpp_pool=s,s.zpp_inner=null;break}s.zpp_critical=!1;let r=s.zpp_inner.at(s.zpp_i++);e(r),r.visitCompounds(e)}}interactionType(e,t){if(e==null||t==null)throw new Error("Error: Cannot evaluate interaction type for null shapes");let n=e.zpp_inner,s=t.zpp_inner;if((n.body!=null?n.body.outer:null)==null||(s.body!=null?s.body.outer:null)==null)throw new Error("Error: Cannot evaluate interaction type for shapes not part of a Body");let i=n.body,l=s.body;if(i.type==1&&l.type==1||i.outer==l.outer)return null;let r=!1,a=i.constraints.head;for(;a!=null;){let u=a.elt;if(u.ignore&&u.pair_exists(i.id,l.id)){r=!0;break}a=a.next}let o;if(r)o=!1;else{let u=n;for(;u!=null&&u.group==null;)u.ishape!=null?u=u.ishape.body:u.icompound!=null?u=u.icompound.compound:u=u.ibody.compound;let x=u==null?null:u.group,y;if(x==null)y=!1;else{let d=s;for(;d!=null&&d.group==null;)d.ishape!=null?d=d.ishape.body:d.icompound!=null?d=d.icompound.compound:d=d.ibody.compound;let _=d==null?null:d.group;if(_==null)y=!1;else{let f=!1;for(;x!=null&&_!=null;){if(x==_){f=x.ignore;break}x.depth<_.depth?_=_.group:x=x.group}y=f}}o=!y}if(!o)return null;let p=n.filter,c=s.filter,h=i.imass==0&&l.imass==0&&i.iinertia==0&&l.iinertia==0;return(n.sensorEnabled||s.sensorEnabled)&&(p.sensorMask&c.sensorGroup)!=0&&(c.sensorMask&p.sensorGroup)!=0?(Q.InteractionType_SENSOR==null&&(Q.internal=!0,Q.InteractionType_SENSOR=new(me()).callbacks.InteractionType,Q.internal=!1),Q.InteractionType_SENSOR):(n.fluidEnabled||s.fluidEnabled)&&(p.fluidMask&c.fluidGroup)!=0&&(c.fluidMask&p.fluidGroup)!=0&&!h?(Q.InteractionType_FLUID==null&&(Q.internal=!0,Q.InteractionType_FLUID=new(me()).callbacks.InteractionType,Q.internal=!1),Q.InteractionType_FLUID):(p.collisionMask&c.collisionGroup)!=0&&(c.collisionMask&p.collisionGroup)!=0&&!h?(Q.InteractionType_COLLISION==null&&(Q.internal=!0,Q.InteractionType_COLLISION=new(me()).callbacks.InteractionType,Q.internal=!1),Q.InteractionType_COLLISION):null}shapesUnderPoint(e,t,n){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate shapes under a null point :)");let s=e.zpp_inner;s._validate!=null&&s._validate();let i=s.x;s._validate!=null&&s._validate();let l=s.y,r=t==null?null:t.zpp_inner??t,a=this.zpp_inner.shapesUnderPoint(i,l,r,n);return s.weak&&e.dispose(),a}bodiesUnderPoint(e,t,n){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate objects under a null point :)");let s=e.zpp_inner;s._validate!=null&&s._validate();let i=s.x;s._validate!=null&&s._validate();let l=s.y,r=t==null?null:t.zpp_inner??t,a=this.zpp_inner.bodiesUnderPoint(i,l,r,n);return s.weak&&e.dispose(),a}shapesInAABB(e,t=!1,n=!0,s,i){if(e==null)throw new Error("Error: Cannot evaluate shapes in a null AABB :)");let l=e.zpp_inner;if(l._validate!=null&&l._validate(),l.maxx-l.minx==0||l.maxy-l.miny==0)throw new Error("Error: Cannot evaluate shapes in degenerate AABB :/");let r=s==null?null:s.zpp_inner??s;return this.zpp_inner.shapesInAABB(e,n,t,r,i)}bodiesInAABB(e,t=!1,n=!0,s,i){if(e==null)throw new Error("Error: Cannot evaluate objects in a null AABB :)");let l=e.zpp_inner;if(l._validate!=null&&l._validate(),l.maxx-l.minx==0||l.maxy-l.miny==0)throw new Error("Error: Cannot evaluate objects in degenerate AABB :/");let r=s==null?null:s.zpp_inner??s;return this.zpp_inner.bodiesInAABB(e,n,t,r,i)}shapesInCircle(e,t,n=!1,s,i){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate shapes at null circle :)");if(t!==t)throw new Error("Error: Circle radius cannot be NaN");if(t<=0)throw new Error("Error: Circle radius must be strictly positive");let l=s==null?null:s.zpp_inner??s,r=this.zpp_inner.shapesInCircle(e,t,n,l,i);return e.zpp_inner?.weak&&e.dispose(),r}bodiesInCircle(e,t,n=!1,s,i){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot evaluate objects at null circle :)");if(t!==t)throw new Error("Error: Circle radius cannot be NaN");if(t<=0)throw new Error("Error: Circle radius must be strictly positive");let l=s==null?null:s.zpp_inner??s,r=this.zpp_inner.bodiesInCircle(e,t,n,l,i);return e.zpp_inner?.weak&&e.dispose(),r}shapesInShape(e,t=!1,n,s){if(e==null)throw new Error("Error: Cannot evaluate shapes in a null shapes :)");let i=e.zpp_inner;if((i.body!=null?i.body.outer:null)==null)throw new Error("Error: Query shape needs to be inside a Body to be well defined :)");if(i.type==1){let r=i.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new(me()).shape.ValidationResult,Q.internal=!1),r!=Q.ValidationResult_VALID)throw new Error("Error: Polygon query shape is invalid : "+r.toString())}let l=n==null?null:n.zpp_inner??n;return this.zpp_inner.shapesInShape(i,t,l,s)}bodiesInShape(e,t=!1,n,s){if(e==null)throw new Error("Error: Cannot evaluate bodies in a null shapes :)");let i=e.zpp_inner;if((i.body!=null?i.body.outer:null)==null)throw new Error("Error: Query shape needs to be inside a Body to be well defined :)");if(i.type==1){let r=i.polygon.valid();if(Q.ValidationResult_VALID==null&&(Q.internal=!0,Q.ValidationResult_VALID=new(me()).shape.ValidationResult,Q.internal=!1),r!=Q.ValidationResult_VALID)throw new Error("Error: Polygon query shape is invalid : "+r.toString())}let l=n==null?null:n.zpp_inner??n;return this.zpp_inner.bodiesInShape(i,t,l,s)}shapesInBody(e,t,n){if(e==null)throw new Error("Error: Cannot evaluate shapes in null body");let s=me(),i=n??new s.shape.ShapeList,l=e.zpp_inner.wrap_shapes;l.zpp_inner.valmod();let r=s.shape.ShapeIterator.get(l);for(;;){r.zpp_inner.zpp_inner.valmod();let a=r.zpp_inner;a.zpp_inner.valmod(),a.zpp_inner.zip_length&&(a.zpp_inner.zip_length=!1,a.zpp_inner.user_length=a.zpp_inner.inner.length);let o=a.zpp_inner.user_length;if(r.zpp_critical=!0,r.zpp_i>=o){r.zpp_next=s.shape.ShapeIterator.zpp_pool,s.shape.ShapeIterator.zpp_pool=r,r.zpp_inner=null;break}r.zpp_critical=!1;let p=r.zpp_inner.at(r.zpp_i++);this.shapesInShape(p,!1,t,i)}return i}bodiesInBody(e,t,n){if(e==null)throw new Error("Error: Cannot evaluate shapes in null body");let s=me(),i=n??new s.phys.BodyList,l=e.zpp_inner.wrap_shapes;l.zpp_inner.valmod();let r=s.shape.ShapeIterator.get(l);for(;;){r.zpp_inner.zpp_inner.valmod();let a=r.zpp_inner;a.zpp_inner.valmod(),a.zpp_inner.zip_length&&(a.zpp_inner.zip_length=!1,a.zpp_inner.user_length=a.zpp_inner.inner.length);let o=a.zpp_inner.user_length;if(r.zpp_critical=!0,r.zpp_i>=o){r.zpp_next=s.shape.ShapeIterator.zpp_pool,s.shape.ShapeIterator.zpp_pool=r,r.zpp_inner=null;break}r.zpp_critical=!1;let p=r.zpp_inner.at(r.zpp_i++);this.bodiesInShape(p,!1,t,i)}return i}convexCast(e,t,n=!1,s){if(e==null)throw new Error("Error: Cannot cast null shape :)");let i=e.zpp_inner;if((i.body!=null?i.body.outer:null)==null)throw new Error("Error: Shape must belong to a body to be cast.");if(t<0||t!==t)throw new Error("Error: deltaTime must be positive");return this.zpp_inner.convexCast(i,t,s,n)}convexMultiCast(e,t,n=!1,s,i){if(e==null)throw new Error("Error: Cannot cast null shape :)");let l=e.zpp_inner;if((l.body!=null?l.body.outer:null)==null)throw new Error("Error: Shape must belong to a body to be cast.");if(t<0||t!==t)throw new Error("Error: deltaTime must be positive");return this.zpp_inner.convexMultiCast(l,t,s,n,i)}rayCast(e,t=!1,n){if(e==null)throw new Error("Error: Cannot cast null ray :)");return this.zpp_inner.rayCast(e,t,n)}rayMultiCast(e,t=!1,n,s){if(e==null)throw new Error("Error: Cannot cast null ray :)");return this.zpp_inner.rayMultiCast(e,t,n,s)}debugDraw(e,t=Ci.ALL){if(e==null)throw new Error("Error: drawer cannot be null for Space::debugDraw");let n=(t&Ci.SHAPES)!==0,s=(t&Ci.JOINTS)!==0,i=(t&Ci.CONTACTS)!==0,l=(t&Ci.AABB)!==0,r=(t&Ci.CENTER_OF_MASS)!==0,a=(t&Ci.VELOCITIES)!==0,o=4283417591,p=4287669422,c=4294948685,h=4289058471,u=4293874512,x=1157627903,y=4294961979,d=4291728344;if(this.visitBodies(_=>{let f=_.zpp_inner,z=f.type===2,k=f.type===1?p:z?o:c;if(n){let m=f.shapes.head;for(;m!=null;){let b=m.elt;if(b.type===0){let M=b.circle;b.zip_worldCOM&&b.validate_worldCOM();let v=b.worldCOMx,w=b.worldCOMy,O=M.radius,E=f.rot,C=v+Math.cos(E)*O,N=w+Math.sin(E)*O,Z={x:v,y:w},S={x:C,y:N};z?e.drawSolidCircle(Z,O,S,k):e.drawCircle(Z,O,k)}else if(b.type===1){let M=b.polygon;M.zip_gverts&&M.validate_gverts();let v=[],w=M.gverts.next;for(;w!=null;)v.push({x:w.x,y:w.y}),w=w.next;v.length>=3&&(z?e.drawSolidPolygon(v,k):e.drawPolygon(v,k))}else if(b.type===2){let M=b.capsule;b.zip_aabb&&b.validate_aabb();let v={x:M.spine1x,y:M.spine1y},w={x:M.spine2x,y:M.spine2y};z?e.drawSolidCapsule(v,w,M.radius,k):e.drawCapsule(v,w,M.radius,k)}m=m.next}}if(l&&!f.world){let m=f.aabb,b=m.minx,M=m.miny,v=m.maxx,w=m.maxy;e.drawSegment({x:b,y:M},{x:v,y:M},x),e.drawSegment({x:v,y:M},{x:v,y:w},x),e.drawSegment({x:v,y:w},{x:b,y:w},x),e.drawSegment({x:b,y:w},{x:b,y:M},x)}if(r&&!f.world&&(f.validate_worldCOM(),e.drawPoint({x:f.worldCOMx,y:f.worldCOMy},y)),a&&!f.world&&z){let m=f.posx,b=f.posy;e.drawSegment({x:m,y:b},{x:m+f.velx,y:b+f.vely},d)}}),s&&this.visitConstraints(_=>{if(!_.debugDraw)return;let f=_.zpp_inner,z=f.b1,P=f.b2,k=f.a1worldx??(z!=null?z.posx:0),m=f.a1worldy??(z!=null?z.posy:0),b=f.a2worldx??(P!=null?P.posx:0),M=f.a2worldy??(P!=null?P.posy:0);e.drawSegment({x:k,y:m},{x:b,y:M},h),e.drawPoint({x:k,y:m},h),e.drawPoint({x:b,y:M},h)}),i){let _=f=>{if(f==null)return;let z=f.head;for(;z!=null;){let P=z.elt;if(P!=null){let k=P.nx,m=P.ny,b=P.contacts?.next;for(;b!=null;){let M=b.px,v=b.py;e.drawPoint({x:M,y:v},u),e.drawSegment({x:M,y:v},{x:M+k*8,y:v+m*8},u),b=b.next}}z=z.next}};_(this.zpp_inner.c_arbiters_true),_(this.zpp_inner.c_arbiters_false)}}toString(){return`Space(bodies=${this.bodies.length})`}};var Dn=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate BodyType derp!")}static get STATIC(){return Q.BodyType_STATIC==null&&(Q.internal=!0,Q.BodyType_STATIC=new g,Q.internal=!1),Q.BodyType_STATIC}static get DYNAMIC(){return Q.BodyType_DYNAMIC==null&&(Q.internal=!0,Q.BodyType_DYNAMIC=new g,Q.internal=!1),Q.BodyType_DYNAMIC}static get KINEMATIC(){return Q.BodyType_KINEMATIC==null&&(Q.internal=!0,Q.BodyType_KINEMATIC=new g,Q.internal=!1),Q.BodyType_KINEMATIC}toString(){return this===Q.BodyType_STATIC?"STATIC":this===Q.BodyType_DYNAMIC?"DYNAMIC":this===Q.BodyType_KINEMATIC?"KINEMATIC":""}},Wo=me();Wo.phys.BodyType=Dn;Hl();var Hi=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate MassMode derp!")}static get DEFAULT(){return Q.MassMode_DEFAULT==null&&(Q.internal=!0,Q.MassMode_DEFAULT=new g,Q.internal=!1),Q.MassMode_DEFAULT}static get FIXED(){return Q.MassMode_FIXED==null&&(Q.internal=!0,Q.MassMode_FIXED=new g,Q.internal=!1),Q.MassMode_FIXED}toString(){return this===Q.MassMode_DEFAULT?"DEFAULT":this===Q.MassMode_FIXED?"FIXED":""}},Ko=me();Ko.phys.MassMode=Hi;var Qi=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate InertiaMode derp!")}static get DEFAULT(){return Q.InertiaMode_DEFAULT==null&&(Q.internal=!0,Q.InertiaMode_DEFAULT=new g,Q.internal=!1),Q.InertiaMode_DEFAULT}static get FIXED(){return Q.InertiaMode_FIXED==null&&(Q.internal=!0,Q.InertiaMode_FIXED=new g,Q.internal=!1),Q.InertiaMode_FIXED}toString(){return this===Q.InertiaMode_DEFAULT?"DEFAULT":this===Q.InertiaMode_FIXED?"FIXED":""}},Yo=me();Yo.phys.InertiaMode=Qi;var ui=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate GravMassMode derp!")}static get DEFAULT(){return Q.GravMassMode_DEFAULT==null&&(Q.internal=!0,Q.GravMassMode_DEFAULT=new g,Q.internal=!1),Q.GravMassMode_DEFAULT}static get FIXED(){return Q.GravMassMode_FIXED==null&&(Q.internal=!0,Q.GravMassMode_FIXED=new g,Q.internal=!1),Q.GravMassMode_FIXED}static get SCALED(){return Q.GravMassMode_SCALED==null&&(Q.internal=!0,Q.GravMassMode_SCALED=new g,Q.internal=!1),Q.GravMassMode_SCALED}toString(){return this===Q.GravMassMode_DEFAULT?"DEFAULT":this===Q.GravMassMode_FIXED?"FIXED":this===Q.GravMassMode_SCALED?"SCALED":""}},Xo=me();Xo.phys.GravMassMode=ui;var Mi=class g extends ti{constructor(e=50,t,n,s){super();let i=me(),l=new Hn;if(this.zpp_inner_zn=l,this.zpp_inner=l,this.zpp_inner_i=l,l.outer=this,l.outer_zn=this,l.outer_i=this,this._inner=this,e!==l.radius){if(e!==e)throw new Error("Error: Circle::radius cannot be NaN");if(e<i.Config.epsilon)throw new Error("Error: Circle::radius ("+e+") must be > Config.epsilon");if(e>Rn.FMAX)throw new Error("Error: Circle::radius ("+e+") must be < PR(Const).FMAX");l.radius=e,l.invalidate_radius()}if(t!=null){if(t.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let r=t.zpp_inner;r._validate!=null&&r._validate(),l.localCOMx=r.x,r._validate!=null&&r._validate(),l.localCOMy=r.y,r.weak&&t.dispose()}else l.localCOMx=0,l.localCOMy=0;n==null?Oe.zpp_pool!=null?(l.material=Oe.zpp_pool,Oe.zpp_pool=l.material.next,l.material.next=null):l.material=new Oe:(l.immutable_midstep("Shape::material"),l.setMaterial(n.zpp_inner),l.material.wrapper()),s==null?st.zpp_pool!=null?(l.filter=st.zpp_pool,st.zpp_pool=l.filter.next,l.filter.next=null):l.filter=new st:(l.immutable_midstep("Shape::filter"),l.setFilter(s.zpp_inner),l.filter.wrapper()),l.insert_cbtype(an.ANY_SHAPE.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof Hn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner_zn=t,n.zpp_inner=t,n.zpp_inner_i=t,t.outer=n,t.outer_zn=n,t.outer_i=n,n._inner=n,n}):e.zpp_inner_zn?g._wrap(e.zpp_inner_zn):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i,n}):null}get radius(){return this.zpp_inner_zn.radius}set radius(e){let t=this.zpp_inner_zn,n=me();if(this.zpp_inner.immutable_midstep("Circle::radius"),t.body!=null&&t.body.type===1&&t.body.space!=null)throw new Error("Error: Cannot modifiy radius of Circle contained in static object once added to space");if(e!==t.radius){if(e!==e)throw new Error("Error: Circle::radius cannot be NaN");if(e<n.Config.epsilon)throw new Error("Error: Circle::radius ("+e+") must be > Config.epsilon");if(e>Rn.FMAX)throw new Error("Error: Circle::radius ("+e+") must be < PR(Const).FMAX");t.radius=e,t.invalidate_radius()}}};eo(g=>Mi._wrap(g));var Ho=me();Ho.shape.Circle=Mi;var Zi=class g extends ti{constructor(e,t,n){super();let s=me();if(e==null)throw new Error("Error: localVerts cannot be null");let i=new Qn;if(this.zpp_inner_zn=i,this.zpp_inner=i,this.zpp_inner_i=i,i.outer=this,i.outer_zn=this,i.outer_i=this,this._inner=this,Array.isArray(e)){for(let l of e){if(l==null)throw new Error("Error: Array<Vec2> contains null objects");if(!(l instanceof je))throw new Error("Error: Array<Vec2> contains non Vec2 objects");if(l.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");i.wrap_lverts==null&&i.getlverts();let r=l.zpp_inner;r._validate!=null&&r._validate();let a=r.x;r._validate!=null&&r._validate();let o=r.y,p=new je(a,o);i.wrap_lverts.push(p)}for(let l=e.length-1;l>=0;l--)e[l].zpp_inner?.weak&&(e[l].dispose(),e.splice(l,1))}else if(e instanceof s.geom.Vec2List){let l=e,r=l.iterator();for(;;){r.zpp_inner.zpp_inner.valmod();let c=r.zpp_inner.zpp_gl();if(r.zpp_critical=!0,r.zpp_i>=c){r.zpp_next=s.geom.Vec2Iterator.zpp_pool,s.geom.Vec2Iterator.zpp_pool=r,r.zpp_inner=null;break}r.zpp_critical=!1;let h=r.zpp_inner.at(r.zpp_i++);if(h==null)throw new Error("Error: Vec2List contains null objects");if(h.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");i.wrap_lverts==null&&i.getlverts();let u=h.zpp_inner;u._validate!=null&&u._validate();let x=u.x;u._validate!=null&&u._validate();let y=u.y,d=new je(x,y);i.wrap_lverts.push(d)}l.zpp_inner._validate!=null&&l.zpp_inner._validate();let a=l.zpp_inner.inner,o=null,p=a.head;for(;p!=null;){let c=p.elt;c.outer?.zpp_inner?.weak?(p=a.erase(o),c.outer.zpp_inner.weak&&c.outer.dispose()):(o=p,p=p.next)}}else if(e instanceof s.geom.GeomPoly){let l=e.zpp_inner.vertices;if(l!=null){let r=l;do{i.wrap_lverts==null&&i.getlverts();let a=new je(r.x,r.y);i.wrap_lverts.push(a),r=r.next}while(r!==l)}}else throw new Error("Error: Invalid type for polygon object, should be Array<Vec2>, Vec2List, GeomPoly or for flash10+ flash.Vector<Vec2>");t==null?Oe.zpp_pool!=null?(i.material=Oe.zpp_pool,Oe.zpp_pool=i.material.next,i.material.next=null):i.material=new Oe:(i.immutable_midstep("Shape::material"),i.setMaterial(t.zpp_inner),i.material.wrapper()),n==null?st.zpp_pool!=null?(i.filter=st.zpp_pool,st.zpp_pool=i.filter.next,i.filter.next=null):i.filter=new st:(i.immutable_midstep("Shape::filter"),i.setFilter(n.zpp_inner),i.filter.wrapper()),i.insert_cbtype(an.ANY_SHAPE.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof Qn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner_zn=t,n.zpp_inner=t,n.zpp_inner_i=t,t.outer=n,t.outer_zn=n,t.outer_i=n,n._inner=n,n}):e.zpp_inner_zn?g._wrap(e.zpp_inner_zn):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i,n}):null}static rect(e,t,n,s,i=!1){if(e!==e||t!==t||n!==n||s!==s)throw new Error("Error: Polygon.rect cannot accept NaN arguments");let l=new je(e,t);l.zpp_inner.weak=i;let r=new je(e+n,t);r.zpp_inner.weak=i;let a=new je(e+n,t+s);a.zpp_inner.weak=i;let o=new je(e,t+s);return o.zpp_inner.weak=i,[l,r,a,o]}static box(e,t=e,n=!1){if(e!==e||t!==t)throw new Error("Error: Polygon.box cannot accept NaN arguments");return g.rect(-e/2,-t/2,e,t,n)}static regular(e,t,n,s=0,i=!1){if(e!==e||t!==t||s!==s)throw new Error("Error: Polygon.regular cannot accept NaN arguments");let l=[],r=Math.PI*2/n;for(let a=0;a<n;a++){let o=a*r+s,p=Math.cos(o)*e,c=Math.sin(o)*t,h=new je(p,c);h.zpp_inner.weak=i,l.push(h)}return l}get localVerts(){return this.zpp_inner_zn.wrap_lverts==null&&this.zpp_inner_zn.getlverts(),this.zpp_inner_zn.wrap_lverts}get worldVerts(){return this.zpp_inner_zn.wrap_gverts==null&&this.zpp_inner_zn.getgverts(),this.zpp_inner_zn.wrap_gverts}get edges(){return this.zpp_inner_zn.wrap_edges==null&&this.zpp_inner_zn.getedges(),this.zpp_inner_zn.wrap_edges}validity(){return this.zpp_inner_zn.valid()}};to(g=>Zi._wrap(g));var Qo=me();Qo.shape.Polygon=Zi;var ki=class g extends ti{constructor(e=100,t=40,n,s,i){super();let l=me();if(e!==e||t!==t)throw new Error("Error: Capsule dimensions cannot be NaN");if(t<=0)throw new Error("Error: Capsule height ("+t+") must be > 0");if(e<t)throw new Error("Error: Capsule width ("+e+") must be >= height ("+t+")");let r=t/2,a=(e-t)/2,o=new $n;if(this.zpp_inner_zn=o,this.zpp_inner=o,this.zpp_inner_i=o,o.outer=this,o.outer_zn=this,o.outer_i=this,this._inner=this,r<l.Config.epsilon)throw new Error("Error: Capsule radius ("+r+") must be > Config.epsilon");if(r>Rn.FMAX)throw new Error("Error: Capsule radius ("+r+") must be < PR(Const).FMAX");if(o.radius=r,o.halfLength=a,o.invalidate_radius(),a>0&&o.invalidate_halfLength(),n!=null){if(n.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let p=n.zpp_inner;p._validate!=null&&p._validate(),o.localCOMx=p.x,p._validate!=null&&p._validate(),o.localCOMy=p.y,p.weak&&n.dispose()}else o.localCOMx=0,o.localCOMy=0;s==null?Oe.zpp_pool!=null?(o.material=Oe.zpp_pool,Oe.zpp_pool=o.material.next,o.material.next=null):o.material=new Oe:(o.immutable_midstep("Shape::material"),o.setMaterial(s.zpp_inner),o.material.wrapper()),i==null?st.zpp_pool!=null?(o.filter=st.zpp_pool,st.zpp_pool=o.filter.next,o.filter.next=null):o.filter=new st:(o.immutable_midstep("Shape::filter"),o.setFilter(i.zpp_inner),o.filter.wrapper()),o.insert_cbtype(an.ANY_SHAPE.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof $n?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner_zn=t,n.zpp_inner=t,n.zpp_inner_i=t,t.outer=n,t.outer_zn=n,t.outer_i=n,n._inner=n,n}):e.zpp_inner_zn?g._wrap(e.zpp_inner_zn):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n.zpp_inner_i=t.zpp_inner_i,n}):null}get radius(){return this.zpp_inner_zn.radius}set radius(e){let t=this.zpp_inner_zn,n=me();if(this.zpp_inner.immutable_midstep("Capsule::radius"),t.body!=null&&t.body.type===1&&t.body.space!=null)throw new Error("Error: Cannot modify radius of Capsule contained in static object once added to space");if(e!==t.radius){if(e!==e)throw new Error("Error: Capsule::radius cannot be NaN");if(e<n.Config.epsilon)throw new Error("Error: Capsule::radius ("+e+") must be > Config.epsilon");if(e>Rn.FMAX)throw new Error("Error: Capsule::radius ("+e+") must be < PR(Const).FMAX");t.radius=e,t.invalidate_radius()}}get halfLength(){return this.zpp_inner_zn.halfLength}set halfLength(e){let t=this.zpp_inner_zn;if(this.zpp_inner.immutable_midstep("Capsule::halfLength"),t.body!=null&&t.body.type===1&&t.body.space!=null)throw new Error("Error: Cannot modify halfLength of Capsule contained in static object once added to space");if(e!==t.halfLength){if(e!==e)throw new Error("Error: Capsule::halfLength cannot be NaN");if(e<0)throw new Error("Error: Capsule::halfLength ("+e+") must be >= 0");t.halfLength=e,t.invalidate_halfLength()}}get width(){return 2*(this.zpp_inner_zn.halfLength+this.zpp_inner_zn.radius)}get height(){return 2*this.zpp_inner_zn.radius}};no(g=>ki._wrap(g));var $o=me();$o.shape.Capsule=ki;var $i=class g{get _inner(){return this}constructor(e=0,t=1,n=2,s=1,i=.001){let l;if(Oe.zpp_pool==null?l=new Oe:(l=Oe.zpp_pool,Oe.zpp_pool=l.next,l.next=null),this.zpp_inner=l,l.outer=this,e!==l.elasticity){if(e!==e)throw new Error("Error: Material::elasticity cannot be NaN");l.elasticity=e,l.invalidate(Oe.WAKE|Oe.ARBITERS)}if(t!==l.dynamicFriction){if(t!==t)throw new Error("Error: Material::dynamicFriction cannot be NaN");if(t<0)throw new Error("Error: Material::dynamicFriction cannot be negative");l.dynamicFriction=t,l.invalidate(Oe.WAKE|Oe.ANGDRAG|Oe.ARBITERS)}if(n!==l.staticFriction){if(n!==n)throw new Error("Error: Material::staticFriction cannot be NaN");if(n<0)throw new Error("Error: Material::staticFriction cannot be negative");l.staticFriction=n,l.invalidate(Oe.WAKE|Oe.ARBITERS)}if(s!==l.density*1e3){if(s!==s)throw new Error("Error: Material::density cannot be NaN");if(s<0)throw new Error("Error: Material::density must be positive");l.density=s/1e3,l.invalidate(Oe.WAKE|Oe.PROPS)}if(i!==l.rollingFriction){if(i!==i)throw new Error("Error: Material::rollingFriction cannot be NaN");if(i<0)throw new Error("Error: Material::rollingFriction cannot be negative");l.rollingFriction=i,l.invalidate(Oe.WAKE|Oe.ARBITERS)}}static _wrap(e){return e instanceof g?e:e?e instanceof Oe?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get elasticity(){return this.zpp_inner.elasticity}set elasticity(e){if(e!==this.zpp_inner.elasticity){if(e!==e)throw new Error("Error: Material::elasticity cannot be NaN");this.zpp_inner.elasticity=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ARBITERS)}}get dynamicFriction(){return this.zpp_inner.dynamicFriction}set dynamicFriction(e){if(e!==this.zpp_inner.dynamicFriction){if(e!==e)throw new Error("Error: Material::dynamicFriction cannot be NaN");if(e<0)throw new Error("Error: Material::dynamicFriction cannot be negative");this.zpp_inner.dynamicFriction=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ANGDRAG|Oe.ARBITERS)}}get staticFriction(){return this.zpp_inner.staticFriction}set staticFriction(e){if(e!==this.zpp_inner.staticFriction){if(e!==e)throw new Error("Error: Material::staticFriction cannot be NaN");if(e<0)throw new Error("Error: Material::staticFriction cannot be negative");this.zpp_inner.staticFriction=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ARBITERS)}}get density(){return this.zpp_inner.density*1e3}set density(e){if(e!==this.zpp_inner.density*1e3){if(e!==e)throw new Error("Error: Material::density cannot be NaN");if(e<0)throw new Error("Error: Material::density must be positive");this.zpp_inner.density=e/1e3,this.zpp_inner.invalidate(Oe.WAKE|Oe.PROPS)}}get rollingFriction(){return this.zpp_inner.rollingFriction}set rollingFriction(e){if(e!==this.zpp_inner.rollingFriction){if(e!==e)throw new Error("Error: Material::rollingFriction cannot be NaN");if(e<0)throw new Error("Error: Material::rollingFriction cannot be negative");this.zpp_inner.rollingFriction=e,this.zpp_inner.invalidate(Oe.WAKE|Oe.ARBITERS)}}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}copy(){let e=new g(this.zpp_inner.elasticity,this.zpp_inner.dynamicFriction,this.zpp_inner.staticFriction,this.zpp_inner.density*1e3,this.zpp_inner.rollingFriction);return this.zpp_inner.userData!=null&&(e.zpp_inner.userData={...this.zpp_inner.userData}),e}toString(){return"{ elasticity: "+this.zpp_inner.elasticity+" dynamicFriction: "+this.zpp_inner.dynamicFriction+" staticFriction: "+this.zpp_inner.staticFriction+" density: "+this.zpp_inner.density*1e3+" rollingFriction: "+this.zpp_inner.rollingFriction+" }"}static wood(){return new g(.4,.2,.38,.7,.005)}static steel(){return new g(.2,.57,.74,7.8,.001)}static ice(){return new g(.3,.03,.1,.9,1e-4)}static rubber(){return new g(.8,1,1.4,1.5,.01)}static glass(){return new g(.4,.4,.94,2.6,.002)}static sand(){return new g(-1,.45,.6,1.6,16)}};Oe._wrapFn=g=>Ze(g,e=>{let t=Object.create($i.prototype);return t.zpp_inner=e,e.outer=t,t});var es=class g{get _inner(){return this}constructor(e=1,t=-1,n=1,s=-1,i=1,l=-1){let r;st.zpp_pool==null?r=new st:(r=st.zpp_pool,st.zpp_pool=r.next,r.next=null),this.zpp_inner=r,r.outer=this,r.collisionGroup!=e&&(r.collisionGroup=e,r.invalidate()),r.collisionMask!=t&&(r.collisionMask=t,r.invalidate()),r.sensorGroup!=n&&(r.sensorGroup=n,r.invalidate()),r.sensorMask!=s&&(r.sensorMask=s,r.invalidate()),r.fluidGroup!=i&&(r.fluidGroup=i,r.invalidate()),r.fluidMask!=l&&(r.fluidMask=l,r.invalidate())}static _wrap(e){return e instanceof g?e:e?e instanceof st?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get collisionGroup(){return this.zpp_inner.collisionGroup}set collisionGroup(e){this.zpp_inner.collisionGroup!=e&&(this.zpp_inner.collisionGroup=e,this.zpp_inner.invalidate())}get collisionMask(){return this.zpp_inner.collisionMask}set collisionMask(e){this.zpp_inner.collisionMask!=e&&(this.zpp_inner.collisionMask=e,this.zpp_inner.invalidate())}get sensorGroup(){return this.zpp_inner.sensorGroup}set sensorGroup(e){this.zpp_inner.sensorGroup!=e&&(this.zpp_inner.sensorGroup=e,this.zpp_inner.invalidate())}get sensorMask(){return this.zpp_inner.sensorMask}set sensorMask(e){this.zpp_inner.sensorMask!=e&&(this.zpp_inner.sensorMask=e,this.zpp_inner.invalidate())}get fluidGroup(){return this.zpp_inner.fluidGroup}set fluidGroup(e){this.zpp_inner.fluidGroup!=e&&(this.zpp_inner.fluidGroup=e,this.zpp_inner.invalidate())}get fluidMask(){return this.zpp_inner.fluidMask}set fluidMask(e){this.zpp_inner.fluidMask!=e&&(this.zpp_inner.fluidMask=e,this.zpp_inner.invalidate())}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get shapes(){if(this.zpp_inner.wrap_shapes==null){let e=me();this.zpp_inner.wrap_shapes=e.zpp_nape.util.ZPP_ShapeList.get(this.zpp_inner.shapes,!0)}return this.zpp_inner.wrap_shapes}shouldCollide(e){if(e==null)throw new Error("Error: filter argument cannot be null for shouldCollide");return this.zpp_inner.shouldCollide(e.zpp_inner)}shouldSense(e){if(e==null)throw new Error("Error: filter argument cannot be null for shouldSense");return this.zpp_inner.shouldSense(e.zpp_inner)}shouldFlow(e){if(e==null)throw new Error("Error: filter argument cannot be null for shouldFlow");return this.zpp_inner.shouldFlow(e.zpp_inner)}copy(){return new g(this.zpp_inner.collisionGroup,this.zpp_inner.collisionMask,this.zpp_inner.sensorGroup,this.zpp_inner.sensorMask,this.zpp_inner.fluidGroup,this.zpp_inner.fluidMask)}toString(){let e=(t,n)=>{let s="",i="0123456789ABCDEF",l=t;do s=i.charAt(l&15)+s,l>>>=4;while(l>0);for(;s.length<n;)s="0"+s;return s};return"{ collision: "+e(this.zpp_inner.collisionGroup,8)+"~"+e(this.zpp_inner.collisionMask,8)+" sensor: "+e(this.zpp_inner.sensorGroup,8)+"~"+e(this.zpp_inner.sensorMask,8)+" fluid: "+e(this.zpp_inner.fluidGroup,8)+"~"+e(this.zpp_inner.fluidMask,8)+" }"}};st._wrapFn=g=>Ze(g,e=>{let t=Object.create(es.prototype);return t.zpp_inner=e,e.outer=t,t});var Ei=class g{constructor(){if(!Q.internal)throw new Error("Error: Cannot instantiate Broadphase derp!")}static get DYNAMIC_AABB_TREE(){return Q.Broadphase_DYNAMIC_AABB_TREE==null&&(Q.internal=!0,Q.Broadphase_DYNAMIC_AABB_TREE=new g,Q.internal=!1),Q.Broadphase_DYNAMIC_AABB_TREE}static get SWEEP_AND_PRUNE(){return Q.Broadphase_SWEEP_AND_PRUNE==null&&(Q.internal=!0,Q.Broadphase_SWEEP_AND_PRUNE=new g,Q.internal=!1),Q.Broadphase_SWEEP_AND_PRUNE}toString(){return this===Q.Broadphase_DYNAMIC_AABB_TREE?"DYNAMIC_AABB_TREE":this===Q.Broadphase_SWEEP_AND_PRUNE?"SWEEP_AND_PRUNE":""}};var ts=class ts{constructor(){this.debugDraw=!0;this._inner=this}static _wrap(e){return e==null?null:e instanceof ts?e:e.zpp_inner?.outer instanceof ts?e.zpp_inner.outer:Ze(e,t=>{let n=Object.create(ts.prototype);return n.zpp_inner=t.zpp_inner??t,n._inner=t,n.zpp_inner.outer=n,n.debugDraw=t.debugDraw??!0,n})}get space(){return this.zpp_inner.space==null?null:this.zpp_inner.space.outer}set space(e){if(this.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of a Constraint belonging to a Compound, only the root Compound space can be set");if((this.zpp_inner.space==null?null:this.zpp_inner.space.outer)!=e)if(this.zpp_inner.component!=null&&(this.zpp_inner.component.woken=!1),this.zpp_inner.clearcache(),this.zpp_inner.space!=null&&this.zpp_inner.space.wrap_constraints.remove(this),e!=null){let s=(e._inner?.zpp_inner??e.zpp_inner).wrap_constraints;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}else this.zpp_inner.space=null}get compound(){return this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer}set compound(e){let t=this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer;if(t!=e&&(t?.zpp_inner.wrap_constraints.remove(this),e!=null)){let s=e.zpp_inner.wrap_constraints;s.zpp_inner.reverse_flag?s.push(this):s.unshift(this)}}get active(){return this.zpp_inner.active}set active(e){this.zpp_inner.active!=e&&(this.zpp_inner.component!=null&&(this.zpp_inner.component.woken=!1),this.zpp_inner.clearcache(),e?(this.zpp_inner.active=e,this.zpp_inner.activate(),this.zpp_inner.space!=null&&(this.zpp_inner.component!=null&&(this.zpp_inner.component.sleeping=!0),this.zpp_inner.space.wake_constraint(this.zpp_inner,!0))):(this.zpp_inner.space!=null&&(this.zpp_inner.wake(),this.zpp_inner.space.live_constraints.remove(this.zpp_inner)),this.zpp_inner.active=e,this.zpp_inner.deactivate()))}get ignore(){return this.zpp_inner.ignore}set ignore(e){this.zpp_inner.ignore!=e&&(this.zpp_inner.ignore=e,this.zpp_inner.wake())}get stiff(){return this.zpp_inner.stiff}set stiff(e){this.zpp_inner.stiff!=e&&(this.zpp_inner.stiff=e,this.zpp_inner.wake())}get frequency(){return this.zpp_inner.frequency}set frequency(e){if(e!==e)throw new Error("Error: Constraint::Frequency cannot be NaN");if(e<=0)throw new Error("Error: Constraint::Frequency must be >0");this.zpp_inner.frequency!=e&&(this.zpp_inner.frequency=e,this.zpp_inner.stiff||this.zpp_inner.wake())}get damping(){return this.zpp_inner.damping}set damping(e){if(e!==e)throw new Error("Error: Constraint::Damping cannot be Nan");if(e<0)throw new Error("Error: Constraint::Damping must be >=0");this.zpp_inner.damping!=e&&(this.zpp_inner.damping=e,this.zpp_inner.stiff||this.zpp_inner.wake())}get maxForce(){return this.zpp_inner.maxForce}set maxForce(e){if(e!==e)throw new Error("Error: Constraint::maxForce cannot be NaN");if(e<0)throw new Error("Error: Constraint::maxForce must be >=0");this.zpp_inner.maxForce!=e&&(this.zpp_inner.maxForce=e,this.zpp_inner.wake())}get maxError(){return this.zpp_inner.maxError}set maxError(e){if(e!==e)throw new Error("Error: Constraint::maxError cannot be NaN");if(e<0)throw new Error("Error: Constraint::maxError must be >=0");this.zpp_inner.maxError!=e&&(this.zpp_inner.maxError=e,this.zpp_inner.wake())}get breakUnderForce(){return this.zpp_inner.breakUnderForce}set breakUnderForce(e){this.zpp_inner.breakUnderForce!=e&&(this.zpp_inner.breakUnderForce=e,this.zpp_inner.wake())}get breakUnderError(){return this.zpp_inner.breakUnderError}set breakUnderError(e){this.zpp_inner.breakUnderError!=e&&(this.zpp_inner.breakUnderError=e,this.zpp_inner.wake())}get removeOnBreak(){return this.zpp_inner.removeOnBreak}set removeOnBreak(e){this.zpp_inner.removeOnBreak=e}get isSleeping(){if(this.zpp_inner.space==null||!this.zpp_inner.active)throw new Error("Error: isSleeping only makes sense if constraint is active and inside a space");return this.zpp_inner.component.sleeping}get userData(){return this.zpp_inner.userData==null&&(this.zpp_inner.userData={}),this.zpp_inner.userData}get cbTypes(){return this.zpp_inner.wrap_cbTypes==null&&this.zpp_inner.setupcbTypes(),this.zpp_inner.wrap_cbTypes}impulse(){return null}bodyImpulse(e){return null}visitBodies(e){}copy(){return ts._wrap(this.zpp_inner.copy())}toString(){return"{Constraint}"}};ts.zpp_internalAlloc=!1;var sn=ts;function lo(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function oo(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function Ml(g){g.zpp_inner.weak&&g.dispose()}var ns=class g extends sn{constructor(e,t,n,s){super();let i=new fi;if(this.zpp_inner=i,i.outer=this,i.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");if(i.a1localx=lo(n),i.a1localy=oo(n),Ml(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");i.a2localx=lo(s),i.a2localy=oo(s),Ml(s)}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof fi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),Ml(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),Ml(e)}impulse(){let e=me(),t=new e.geom.MatMN(2,1);return t.zpp_inner.x[0]=this.zpp_inner.jAccx,t.zpp_inner.x[1]=this.zpp_inner.jAccy,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};fi._wrapFn=g=>Ze(g,e=>{let t=Object.create(ns.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});function ro(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function ao(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function Zl(g){g.zpp_inner.weak&&g.dispose()}var is=class g extends sn{constructor(e,t,n,s,i,l){super();let r=new _i;if(this.zpp_inner=r,r.outer=this,r.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");let a=ro(n),o=ao(n);if(r.a1localx=a,r.a1localy=o,Zl(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");let p=ro(s),c=ao(s);if(r.a2localx=p,r.a2localy=c,Zl(s),this.zpp_inner.immutable_midstep("DistanceJoint::jointMin"),i!==i)throw new Error("Error: DistanceJoint::jointMin cannot be NaN");if(i<0)throw new Error("Error: DistanceJoint::jointMin must be >= 0");if(r.jointMin!=i&&(r.jointMin=i,r.wake()),this.zpp_inner.immutable_midstep("DistanceJoint::jointMax"),l!==l)throw new Error("Error: DistanceJoint::jointMax cannot be NaN");if(l<0)throw new Error("Error: DistanceJoint::jointMax must be >= 0");r.jointMax!=l&&(r.jointMax=l,r.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof _i?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),Zl(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),Zl(e)}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("DistanceJoint::jointMin"),e!==e)throw new Error("Error: DistanceJoint::jointMin cannot be NaN");if(e<0)throw new Error("Error: DistanceJoint::jointMin must be >= 0");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("DistanceJoint::jointMax"),e!==e)throw new Error("Error: DistanceJoint::jointMax cannot be NaN");if(e<0)throw new Error("Error: DistanceJoint::jointMax must be >= 0");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}isSlack(){if(this.zpp_inner.b1==null||this.zpp_inner.b2==null)throw new Error("Error: Cannot compute slack for DistanceJoint if either body is null.");return this.zpp_inner.is_slack()}impulse(){let e=me(),t=new e.geom.MatMN(1,1);if(0>=t.zpp_inner.m||0>=t.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return t.zpp_inner.x[0*t.zpp_inner.n]=this.zpp_inner.jAcc,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get(0,0,0)}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};_i._wrapFn=g=>Ze(g,e=>{let t=Object.create(is.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var ss=class g extends sn{constructor(e,t,n,s,i=1){super();let l=new Je;if(this.zpp_inner=l,l.outer=this,l.outer_zn=this,this._setBody1(e),this._setBody2(t),this.zpp_inner.immutable_midstep("AngleJoint::jointMin"),n!==n)throw new Error("Error: AngleJoint::jointMin cannot be NaN");if(l.jointMin!=n&&(l.jointMin=n,l.wake()),this.zpp_inner.immutable_midstep("AngleJoint::jointMax"),s!==s)throw new Error("Error: AngleJoint::jointMax cannot be NaN");if(l.jointMax!=s&&(l.jointMax=s,l.wake()),this.zpp_inner.immutable_midstep("AngleJoint::ratio"),i!==i)throw new Error("Error: AngleJoint::ratio cannot be NaN");l.ratio!=i&&(l.ratio=i,l.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof Je?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("AngleJoint::jointMin"),e!==e)throw new Error("Error: AngleJoint::jointMin cannot be NaN");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("AngleJoint::jointMax"),e!==e)throw new Error("Error: AngleJoint::jointMax cannot be NaN");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}get ratio(){return this.zpp_inner.ratio}set ratio(e){if(this.zpp_inner.immutable_midstep("AngleJoint::ratio"),e!==e)throw new Error("Error: AngleJoint::ratio cannot be NaN");this.zpp_inner.ratio!=e&&(this.zpp_inner.ratio=e,this.zpp_inner.wake())}isSlack(){if(this.zpp_inner.b1==null||this.zpp_inner.b2==null)throw new Error("Error: Cannot compute slack for AngleJoint if either body is null.");return this.zpp_inner.is_slack()}impulse(){let e=me(),t=new e.geom.MatMN(1,1);if(0>=t.zpp_inner.m||0>=t.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return t.zpp_inner.x[0*t.zpp_inner.n]=this.zpp_inner.jAcc,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get(0,0,0)}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};Je._wrapFn=g=>Ze(g,e=>{let t=Object.create(ss.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var ls=class g extends sn{constructor(e,t,n=0,s=1){super();let i=new mi;if(this.zpp_inner=i,i.outer=this,i.outer_zn=this,this._setBody1(e),this._setBody2(t),this.zpp_inner.immutable_midstep("MotorJoint::rate"),n!==n)throw new Error("Error: MotorJoint::rate cannot be NaN");if(i.rate!=n&&(i.rate=n,i.wake()),this.zpp_inner.immutable_midstep("MotorJoint::ratio"),s!==s)throw new Error("Error: MotorJoint::ratio cannot be NaN");i.ratio!=s&&(i.ratio=s,i.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof mi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get rate(){return this.zpp_inner.rate}set rate(e){if(this.zpp_inner.immutable_midstep("MotorJoint::rate"),e!==e)throw new Error("Error: MotorJoint::rate cannot be NaN");this.zpp_inner.rate!=e&&(this.zpp_inner.rate=e,this.zpp_inner.wake())}get ratio(){return this.zpp_inner.ratio}set ratio(e){if(this.zpp_inner.immutable_midstep("MotorJoint::ratio"),e!==e)throw new Error("Error: MotorJoint::ratio cannot be NaN");this.zpp_inner.ratio!=e&&(this.zpp_inner.ratio=e,this.zpp_inner.wake())}impulse(){let e=me(),t=new e.geom.MatMN(1,1);if(0>=t.zpp_inner.m||0>=t.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return t.zpp_inner.x[0*t.zpp_inner.n]=this.zpp_inner.jAcc,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};mi._wrapFn=g=>Ze(g,e=>{let t=Object.create(ls.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});function Fl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function Rl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function ks(g){g.zpp_inner.weak&&g.dispose()}var os=class g extends sn{constructor(e,t,n,s,i,l,r){super();let a=new yi;if(this.zpp_inner=a,a.outer=this,a.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");if(a.a1localx=Fl(n),a.a1localy=Rl(n),ks(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");if(a.a2localx=Fl(s),a.a2localy=Rl(s),ks(s),i?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(i==null)throw new Error("Error: Constraint::direction cannot be null");if(a.nlocalx=Fl(i),a.nlocaly=Rl(i),a.zip_n=!0,ks(i),this.zpp_inner.immutable_midstep("LineJoint::jointMin"),l!==l)throw new Error("Error: AngleJoint::jointMin cannot be NaN");if(a.jointMin!=l&&(a.jointMin=l,a.wake()),this.zpp_inner.immutable_midstep("LineJoint::jointMax"),r!==r)throw new Error("Error: AngleJoint::jointMax cannot be NaN");a.jointMax!=r&&(a.jointMax=r,a.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof yi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),ks(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),ks(e)}get direction(){return this.zpp_inner.wrap_n==null&&this.zpp_inner.setup_n(),this.zpp_inner.wrap_n}set direction(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::direction cannot be null");this.zpp_inner.wrap_n==null&&this.zpp_inner.setup_n(),this.zpp_inner.wrap_n.set(e),ks(e)}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("LineJoint::jointMin"),e!==e)throw new Error("Error: AngleJoint::jointMin cannot be NaN");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("LineJoint::jointMax"),e!==e)throw new Error("Error: AngleJoint::jointMax cannot be NaN");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}impulse(){let e=me(),t=new e.geom.MatMN(2,1);return t.zpp_inner.x[0]=this.zpp_inner.jAccx,t.zpp_inner.x[1]=this.zpp_inner.jAccy,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};yi._wrapFn=g=>Ze(g,e=>{let t=Object.create(os.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var el=class g{get _inner(){return this}constructor(e,t){if(e<=0||t<=0)throw new Error("Error: MatMN::dimensions cannot be < 1");this.zpp_inner=new Ri(e,t),this.zpp_inner.outer=this}static _wrap(e){return e instanceof g?e:e?e instanceof Ri?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):null:null}get rows(){return this.zpp_inner.m}get cols(){return this.zpp_inner.n}x(e,t){if(e<0||t<0||e>=this.zpp_inner.m||t>=this.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return this.zpp_inner.x[e*this.zpp_inner.n+t]}setx(e,t,n){if(e<0||t<0||e>=this.zpp_inner.m||t>=this.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return this.zpp_inner.x[e*this.zpp_inner.n+t]=n}equals(e,t=0){if(e==null||this.zpp_inner.m!==e.zpp_inner.m||this.zpp_inner.n!==e.zpp_inner.n)return!1;for(let n=0;n<this.zpp_inner.x.length;n++){let s=this.zpp_inner.x[n]-e.zpp_inner.x[n];if((s<0?-s:s)>t)return!1}return!0}clone(){let e=new g(this.zpp_inner.m,this.zpp_inner.n);for(let t=0;t<this.zpp_inner.x.length;t++)e.zpp_inner.x[t]=this.zpp_inner.x[t];return e}toString(){let e="{ ",t=!0;for(let n=0;n<this.zpp_inner.m;n++){t||(e+="; "),t=!1;for(let s=0;s<this.zpp_inner.n;s++){if(n<0||s<0||n>=this.zpp_inner.m||s>=this.zpp_inner.n)throw new Error("Error: MatMN indices out of range");e+=this.zpp_inner.x[n*this.zpp_inner.n+s]+" "}}return e+="}",e}transpose(){let e=new g(this.zpp_inner.n,this.zpp_inner.m);for(let t=0;t<this.zpp_inner.m;t++)for(let n=0;n<this.zpp_inner.n;n++)e.zpp_inner.x[n*e.zpp_inner.n+t]=this.zpp_inner.x[t*this.zpp_inner.n+n];return e}mul(e){let t=e;if(this.zpp_inner.n!==t.zpp_inner.m)throw new Error("Error: Matrix dimensions aren't compatible");let n=new g(this.zpp_inner.m,t.zpp_inner.n);for(let s=0;s<this.zpp_inner.m;s++)for(let i=0;i<t.zpp_inner.n;i++){let l=0;for(let r=0;r<this.zpp_inner.n;r++)l+=this.zpp_inner.x[s*this.zpp_inner.n+r]*t.zpp_inner.x[r*t.zpp_inner.n+i];n.zpp_inner.x[s*n.zpp_inner.n+i]=l}return n}},er=me();er.geom.MatMN=el;function tl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function nl(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function il(g){g.zpp_inner.weak&&g.dispose()}var rs=class g extends sn{constructor(e,t,n,s,i,l,r,a,o,p,c=1){super();let h=new bi;if(this.zpp_inner=h,h.outer=this,h.outer_zn=this,this._setBody1(e),this._setBody2(t),this._setBody3(n),this._setBody4(s),this._setAnchorInit(i,"anchor1",(u,x)=>{h.a1localx=u,h.a1localy=x}),this._setAnchorInit(l,"anchor2",(u,x)=>{h.a2localx=u,h.a2localy=x}),this._setAnchorInit(r,"anchor3",(u,x)=>{h.a3localx=u,h.a3localy=x}),this._setAnchorInit(a,"anchor4",(u,x)=>{h.a4localx=u,h.a4localy=x}),h.immutable_midstep("PulleyJoint::jointMin"),o!==o)throw new Error("Error: PulleyJoint::jointMin cannot be NaN");if(o<0)throw new Error("Error: PulleyJoint::jointMin must be >= 0");if(h.jointMin!=o&&(h.jointMin=o,h.wake()),h.immutable_midstep("PulleyJoint::jointMax"),p!==p)throw new Error("Error: PulleyJoint::jointMax cannot be NaN");if(p<0)throw new Error("Error: PulleyJoint::jointMax must be >= 0");if(h.jointMax!=p&&(h.jointMax=p,h.wake()),h.immutable_midstep("PulleyJoint::ratio"),c!==c)throw new Error("Error: PulleyJoint::ratio cannot be NaN");h.ratio!=c&&(h.ratio=c,h.wake())}_setAnchorInit(e,t,n){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::"+t+" cannot be null");n(tl(e),nl(e)),il(e)}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof bi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}get body3(){return this.zpp_inner.b3==null?null:We._wrap(this.zpp_inner.b3)}set body3(e){this._setBody3(e)}get body4(){return this.zpp_inner.b4==null?null:We._wrap(this.zpp_inner.b4)}set body4(e){this._setBody4(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b3!=this.zpp_inner.b1&&this.zpp_inner.b4!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&this.zpp_inner.b3!=t&&this.zpp_inner.b4!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b3!=this.zpp_inner.b2&&this.zpp_inner.b4!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&this.zpp_inner.b3!=t&&this.zpp_inner.b4!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}_setBody3(e){this.zpp_inner.immutable_midstep("Constraint::body3");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b3&&(this.zpp_inner.b3!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b3&&this.zpp_inner.b2!=this.zpp_inner.b3&&this.zpp_inner.b4!=this.zpp_inner.b3&&this.zpp_inner.b3.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b3.wake()),this.zpp_inner.b3=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&this.zpp_inner.b2!=t&&this.zpp_inner.b4!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}_setBody4(e){this.zpp_inner.immutable_midstep("Constraint::body4");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b4&&(this.zpp_inner.b4!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b4&&this.zpp_inner.b2!=this.zpp_inner.b4&&this.zpp_inner.b3!=this.zpp_inner.b4&&this.zpp_inner.b4.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b4.wake()),this.zpp_inner.b4=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&this.zpp_inner.b2!=t&&this.zpp_inner.b3!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),tl(e),nl(e),this.zpp_inner.wrap_a1.set(e),il(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),tl(e),nl(e),this.zpp_inner.wrap_a2.set(e),il(e)}get anchor3(){return this.zpp_inner.wrap_a3==null&&this.zpp_inner.setup_a3(),this.zpp_inner.wrap_a3}set anchor3(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor3 cannot be null");this.zpp_inner.wrap_a3==null&&this.zpp_inner.setup_a3(),tl(e),nl(e),this.zpp_inner.wrap_a3.set(e),il(e)}get anchor4(){return this.zpp_inner.wrap_a4==null&&this.zpp_inner.setup_a4(),this.zpp_inner.wrap_a4}set anchor4(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor4 cannot be null");this.zpp_inner.wrap_a4==null&&this.zpp_inner.setup_a4(),tl(e),nl(e),this.zpp_inner.wrap_a4.set(e),il(e)}get jointMin(){return this.zpp_inner.jointMin}set jointMin(e){if(this.zpp_inner.immutable_midstep("PulleyJoint::jointMin"),e!==e)throw new Error("Error: PulleyJoint::jointMin cannot be NaN");if(e<0)throw new Error("Error: PulleyJoint::jointMin must be >= 0");this.zpp_inner.jointMin!=e&&(this.zpp_inner.jointMin=e,this.zpp_inner.wake())}get jointMax(){return this.zpp_inner.jointMax}set jointMax(e){if(this.zpp_inner.immutable_midstep("PulleyJoint::jointMax"),e!==e)throw new Error("Error: PulleyJoint::jointMax cannot be NaN");if(e<0)throw new Error("Error: PulleyJoint::jointMax must be >= 0");this.zpp_inner.jointMax!=e&&(this.zpp_inner.jointMax=e,this.zpp_inner.wake())}get ratio(){return this.zpp_inner.ratio}set ratio(e){if(this.zpp_inner.immutable_midstep("PulleyJoint::ratio"),e!==e)throw new Error("Error: PulleyJoint::ratio cannot be NaN");this.zpp_inner.ratio!=e&&(this.zpp_inner.ratio=e,this.zpp_inner.wake())}isSlack(){if(this.zpp_inner.b1==null||this.zpp_inner.b2==null||this.zpp_inner.b3==null||this.zpp_inner.b4==null)throw new Error("Error: Cannot compute slack for PulleyJoint if either body is null.");return this.zpp_inner.slack}impulse(){let e=new el(1,1);if(0>=e.zpp_inner.m||0>=e.zpp_inner.n)throw new Error("Error: MatMN indices out of range");return e.zpp_inner.x[0*e.zpp_inner.n]=this.zpp_inner.jAcc,e}bodyImpulse(e){if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let t=this.zpp_inner.b1?.outer??null,n=this.zpp_inner.b2?.outer??null,s=this.zpp_inner.b3?.outer??null,i=this.zpp_inner.b4?.outer??null;if(e!=t&&e!=n&&e!=s&&e!=i)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):hi.get(0,0,0)}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1?.outer??null,n=this.zpp_inner.b2?.outer??null,s=this.zpp_inner.b3?.outer??null,i=this.zpp_inner.b4?.outer??null;t!=null&&e(t),n!=null&&n!=t&&e(n),s!=null&&s!=t&&s!=n&&e(s),i!=null&&i!=t&&i!=n&&i!=s&&e(i)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};bi._wrapFn=g=>Ze(g,e=>{let t=Object.create(rs.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});function po(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.x}function co(g){if(g.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");let e=g.zpp_inner;return e._validate!=null&&e._validate(),e.y}function kl(g){g.zpp_inner.weak&&g.dispose()}var as=class g extends sn{constructor(e,t,n,s,i=0){super();let l=new zi;if(this.zpp_inner=l,l.outer=this,l.outer_zn=this,this._setBody1(e),this._setBody2(t),n?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(n==null)throw new Error("Error: Constraint::anchor1 cannot be null");if(l.a1localx=po(n),l.a1localy=co(n),kl(n),s?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(s==null)throw new Error("Error: Constraint::anchor2 cannot be null");if(l.a2localx=po(s),l.a2localy=co(s),kl(s),this.zpp_inner.immutable_midstep("WeldJoint::phase"),i!==i)throw new Error("Error: WeldJoint::phase cannot be NaN");l.phase!=i&&(l.phase=i,l.wake())}static _wrap(e){return e==null?null:e instanceof g?e:e.zpp_inner?.outer instanceof g?e.zpp_inner.outer:e instanceof zi?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_zn=n,n.debugDraw=!0,n}):Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t.zpp_inner??t,n.zpp_inner.outer=n,n.zpp_inner.outer_zn=n,n})}get body1(){return this.zpp_inner.b1==null?null:We._wrap(this.zpp_inner.b1)}set body1(e){this._setBody1(e)}_setBody1(e){this.zpp_inner.immutable_midstep("Constraint::body1");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b1&&(this.zpp_inner.b1!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b2!=this.zpp_inner.b1&&this.zpp_inner.b1.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b1.wake()),this.zpp_inner.b1=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b2!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get body2(){return this.zpp_inner.b2==null?null:We._wrap(this.zpp_inner.b2)}set body2(e){this._setBody2(e)}_setBody2(e){this.zpp_inner.immutable_midstep("Constraint::body2");let t=e==null?null:e.zpp_inner;t!=this.zpp_inner.b2&&(this.zpp_inner.b2!=null&&(this.zpp_inner.space!=null&&this.zpp_inner.b1!=this.zpp_inner.b2&&this.zpp_inner.b2.constraints.remove(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&this.zpp_inner.b2.wake()),this.zpp_inner.b2=t,this.zpp_inner.space!=null&&t!=null&&this.zpp_inner.b1!=t&&t.constraints.add(this.zpp_inner),this.zpp_inner.active&&this.zpp_inner.space!=null&&(this.zpp_inner.wake(),t?.wake()))}get anchor1(){return this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1}set anchor1(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor1 cannot be null");this.zpp_inner.wrap_a1==null&&this.zpp_inner.setup_a1(),this.zpp_inner.wrap_a1.set(e),kl(e)}get anchor2(){return this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2}set anchor2(e){if(e?.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Constraint::anchor2 cannot be null");this.zpp_inner.wrap_a2==null&&this.zpp_inner.setup_a2(),this.zpp_inner.wrap_a2.set(e),kl(e)}get phase(){return this.zpp_inner.phase}set phase(e){if(this.zpp_inner.immutable_midstep("WeldJoint::phase"),e!==e)throw new Error("Error: WeldJoint::phase cannot be NaN");this.zpp_inner.phase!=e&&(this.zpp_inner.phase=e,this.zpp_inner.wake())}impulse(){let e=me(),t=new e.geom.MatMN(3,1);return t.zpp_inner.x[0]=this.zpp_inner.jAccx,t.zpp_inner.x[1]=this.zpp_inner.jAccy,t.zpp_inner.x[2]=this.zpp_inner.jAccz,t}bodyImpulse(e){let t=me();if(e==null)throw new Error("Error: Cannot evaluate impulse on null body");let n=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer,s=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;if(e!=n&&e!=s)throw new Error("Error: Body is not linked to this constraint");return this.zpp_inner.active?this.zpp_inner.bodyImpulse(e.zpp_inner):t.geom.Vec3.get()}visitBodies(e){if(e==null)throw new Error("Error: Cannot apply null lambda to bodies");let t=this.zpp_inner.b1==null?null:this.zpp_inner.b1.outer;t!=null&&e(t);let n=this.zpp_inner.b2==null?null:this.zpp_inner.b2.outer;n!=null&&n!=t&&e(n)}get zpp_inner_zn(){return this.zpp_inner}set zpp_inner_zn(e){this.zpp_inner=e}};zi._wrapFn=g=>Ze(g,e=>{let t=Object.create(as.prototype);return t.zpp_inner=e,e.outer=t,e.outer_zn=t,t.debugDraw=!0,t});var ii=class g extends gi{constructor(){super();let e=new qn;this.zpp_inner=e,e.outer=this,e.outer_i=this,this.zpp_inner_i=e,this._inner=this,e.insert_cbtype(an.ANY_COMPOUND.zpp_inner)}static _wrap(e){return e?e instanceof g?e:e instanceof qn?Ze(e,t=>{let n=Object.create(g.prototype);return n.zpp_inner=t,t.outer=n,t.outer_i=n,n.zpp_inner_i=t,n._inner=n,n}):e.zpp_inner?g._wrap(e.zpp_inner):Ze(e,t=>{let n=Object.create(g.prototype);return n._inner=t,n}):null}get bodies(){return this.zpp_inner.wrap_bodies}get constraints(){return this.zpp_inner.wrap_constraints}get compounds(){return this.zpp_inner.wrap_compounds}get compound(){return this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer}set compound(e){this.zpp_inner.immutable_midstep("Compound::compound");let t=this.zpp_inner.compound==null?null:this.zpp_inner.compound.outer;if(t!==e&&(t?.zpp_inner.wrap_compounds.remove(this),e!=null)){let n=e.zpp_inner.wrap_compounds;n.zpp_inner.reverse_flag?n.push(this):n.unshift(this)}}get space(){return this.zpp_inner.space==null?null:ni._wrap(this.zpp_inner.space.outer)}set space(e){if(this.zpp_inner.compound!=null)throw new Error("Error: Cannot set the space of an inner Compound, only the root Compound space can be set");this.zpp_inner.immutable_midstep("Compound::space");let t=this.zpp_inner.space==null?null:this.zpp_inner.space.outer;if(t!==e?._inner&&(t?.zpp_inner.wrap_compounds.remove(this),e!=null)){let n=e._inner.zpp_inner.wrap_compounds;n.zpp_inner.reverse_flag?n.push(this):n.unshift(this)}}copy(){return this.zpp_inner.copy()}breakApart(){this.zpp_inner.breakApart()}visitBodies(e){if(e==null)throw new Error("Error: lambda cannot be null for Compound::visitBodies");let t=this.zpp_inner.wrap_bodies,n=t.length;for(let l=0;l<n;l++)e(t.at(l));let s=this.zpp_inner.wrap_compounds,i=s.length;for(let l=0;l<i;l++)s.at(l).visitBodies(e)}visitConstraints(e){if(e==null)throw new Error("Error: lambda cannot be null for Compound::visitConstraints");let t=this.zpp_inner.wrap_constraints,n=t.length;for(let l=0;l<n;l++)e(t.at(l));let s=this.zpp_inner.wrap_compounds,i=s.length;for(let l=0;l<i;l++)s.at(l).visitConstraints(e)}visitCompounds(e){if(e==null)throw new Error("Error: lambda cannot be null for Compound::visitConstraints");let t=this.zpp_inner.wrap_compounds,n=t.length;for(let s=0;s<n;s++){let i=t.at(s);e(i),i.visitCompounds(e)}}COM(e=!1){let t=new je(0,0),n=0;if(this.visitBodies(s=>{if(s.zpp_inner.wrap_shapes.zpp_inner.inner.head!=null){if(s.zpp_inner.world)throw new Error("Error: Space::world has no worldCOM");s.zpp_inner.wrap_worldCOM==null&&s.zpp_inner.getworldCOM();let l=s.zpp_inner.wrap_worldCOM;if(s.zpp_inner.world)throw new Error("Error: Space::world has no mass");if(s.zpp_inner.validate_mass(),s.zpp_inner.massMode==0&&s.zpp_inner.shapes.head==null)throw new Error("Error: Given current mass mode, Body::mass only makes sense if it contains shapes");let r=s.zpp_inner.cmass;t.addeq(l.mul(r,!0)),n+=r}}),n===0)throw new Error("Error: COM of an empty Compound is undefined silly");return t.muleq(1/n),e&&(t.zpp_inner.weak=!0),t}translate(e){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot translate by null Vec2");let t=e.zpp_inner.weak;return e.zpp_inner.weak=!1,this.visitBodies(n=>{n.zpp_inner.wrap_pos==null&&n.zpp_inner.setupPosition(),n.zpp_inner.wrap_pos.addeq(e)}),e.zpp_inner.weak=t,e.zpp_inner.weak&&e.dispose(),this}rotate(e,t){if(e!=null&&e.zpp_disp)throw new Error("Error: Vec2 has been disposed and cannot be used!");if(e==null)throw new Error("Error: Cannot rotate about a null Vec2");if(t!==t)throw new Error("Error: Cannot rotate by NaN radians");let n=e.zpp_inner.weak;return e.zpp_inner.weak=!1,this.visitBodies(s=>{s.rotate(e,t)}),e.zpp_inner.weak=n,e.zpp_inner.weak&&e.dispose(),this}toString(){return"Compound"+this.zpp_inner.id}};qn._wrapFn=g=>Ze(g,e=>{let t=Object.create(ii.prototype);return t.zpp_inner=e,e.outer=t,e.outer_i=t,t.zpp_inner_i=e,t._inner=t,t});Object.defineProperty(ii.prototype,"bodies",{get:function(){return this.zpp_inner.wrap_bodies},configurable:!0});Object.defineProperty(ii.prototype,"constraints",{get:function(){return this.zpp_inner.wrap_constraints},configurable:!0});Object.defineProperty(ii.prototype,"compounds",{get:function(){return this.zpp_inner.wrap_compounds},configurable:!0});function Ni(g){return je.get(g.x,g.y)}function hn(g){return je.weak(g.x,g.y)}function tr(g){return new $i(g.elasticity,g.dynamicFriction,g.staticFriction,g.density,g.rollingFriction)}function nr(g){let e=new es;return e.collisionGroup=g.collisionGroup,e.collisionMask=g.collisionMask,e.sensorGroup=g.sensorGroup,e.sensorMask=g.sensorMask,e.fluidGroup=g.fluidGroup,e.fluidMask=g.fluidMask,e}function ir(g){let e=new Nn(g.density,g.viscosity);return g.gravity!=null&&(e.gravity=Ni(g.gravity)),e}function sr(g){let e=tr(g.material),t=nr(g.filter),n;if(g.type==="circle"){let s=Ni(g.localCOM);n=new Mi(g.radius,s,e,t)}else if(g.type==="capsule"){let s=Ni(g.localCOM);n=new ki(g.width,g.height,s,e,t)}else{let s=g.localVerts.map(i=>Ni(i));n=new Zi(s,e,t)}return n.sensorEnabled=g.sensorEnabled,n.fluidEnabled=g.fluidEnabled,g.fluidEnabled&&g.fluidProperties!=null&&(n.fluidProperties=ir(g.fluidProperties)),n}function lr(g){let e=g.type==="STATIC"?Dn.STATIC:g.type==="KINEMATIC"?Dn.KINEMATIC:Dn.DYNAMIC,t=new We(e,hn(g.position));t.rotation=g.rotation,g.type!=="STATIC"&&(t.velocity=Ni(g.velocity),t.angularVel=g.angularVel),t.kinematicVel=Ni(g.kinematicVel),t.kinAngVel=g.kinAngVel,t.surfaceVel=Ni(g.surfaceVel),g.type==="DYNAMIC"&&(t.force=Ni(g.force),t.torque=g.torque),g.massMode==="FIXED"&&g.mass!=null?t.mass=g.mass:g.massMode==="DEFAULT"&&(t.massMode=Hi.DEFAULT),g.inertiaMode==="FIXED"&&g.inertia!=null?t.inertia=g.inertia:g.inertiaMode==="DEFAULT"&&(t.inertiaMode=Qi.DEFAULT),g.gravMassMode==="SCALED"?(t.gravMassMode=ui.SCALED,t.gravMassScale=g.gravMassScale):g.gravMassMode==="FIXED"&&(t.gravMassMode=ui.FIXED),t.allowMovement=g.allowMovement,t.allowRotation=g.allowRotation,t.isBullet=g.bullet;for(let n of g.shapes)sr(n).body=t;return g.userData!=null&&Object.assign(t.userData,g.userData),t}function ps(g,e){g.active=e.active,g.ignore=e.ignore,g.stiff=e.stiff,g.frequency=e.frequency,g.damping=e.damping,g.maxForce=e.maxForce,g.maxError=e.maxError,g.breakUnderForce=e.breakUnderForce,g.breakUnderError=e.breakUnderError,g.removeOnBreak=e.removeOnBreak,e.userData!=null&&Object.assign(g.userData,e.userData)}function or(g,e){let t=g.body1Id!=null?e[g.body1Id]??null:null,n=g.body2Id!=null?e[g.body2Id]??null:null;switch(g.type){case"PivotJoint":{let s=new ns(t,n,hn(g.anchor1),hn(g.anchor2));return ps(s,g),s}case"DistanceJoint":{let s=new is(t,n,hn(g.anchor1),hn(g.anchor2),g.jointMin,g.jointMax);return ps(s,g),s}case"AngleJoint":{let s=new ss(t,n,g.jointMin,g.jointMax,g.ratio);return ps(s,g),s}case"MotorJoint":{let s=new ls(t,n,g.rate,g.ratio);return ps(s,g),s}case"LineJoint":{let s=new os(t,n,hn(g.anchor1),hn(g.anchor2),hn(g.direction),g.jointMin,g.jointMax);return ps(s,g),s}case"PulleyJoint":{let s=new rs(t,n,null,null,hn(g.anchor1),hn(g.anchor2),hn(g.anchor3),hn(g.anchor4),g.jointMin,g.jointMax,g.ratio);return ps(s,g),s}case"WeldJoint":{let s=new as(t,n,hn(g.anchor1),hn(g.anchor2),g.phase);return ps(s,g),s}}}function ho(g){if(g.version!==1)throw new Error(`nape-js serialization: unsupported snapshot version ${g.version} (expected ${1})`);let e=g.broadphase==="SWEEP_AND_PRUNE"?Ei.SWEEP_AND_PRUNE:Ei.DYNAMIC_AABB_TREE,t=new ni(hn(g.gravity),e);t.worldLinearDrag=g.worldLinearDrag,t.worldAngularDrag=g.worldAngularDrag,t.sortContacts=g.sortContacts;let n=g.bodies.map(lr),s=g.constraints.map(r=>or(r,n)),i=new Set,l=new Set;for(let r of g.compounds){let a=new ii;for(let o of r.bodyIds)n[o].compound=a,i.add(o);for(let o of r.constraintIndices)s[o].compound=a,l.add(o);a.space=t}for(let r=0;r<n.length;r++)i.has(r)||(n[r].space=t);for(let r=0;r<s.length;r++)l.has(r)||(s[r].space=t);return t}var El=class{constructor(e=4096){this.pos=0;this.buf=new ArrayBuffer(e),this.view=new DataView(this.buf)}ensure(e){let t=this.pos+e;if(t<=this.buf.byteLength)return;let n=this.buf.byteLength;for(;n<t;)n*=2;let s=new ArrayBuffer(n);new Uint8Array(s).set(new Uint8Array(this.buf)),this.buf=s,this.view=new DataView(this.buf)}writeUint8(e){this.ensure(1),this.view.setUint8(this.pos,e),this.pos+=1}writeUint16(e){this.ensure(2),this.view.setUint16(this.pos,e,!0),this.pos+=2}writeUint32(e){this.ensure(4),this.view.setUint32(this.pos,e,!0),this.pos+=4}writeInt32(e){this.ensure(4),this.view.setInt32(this.pos,e,!0),this.pos+=4}writeFloat64(e){this.ensure(8),this.view.setFloat64(this.pos,e,!0),this.pos+=8}writeBool(e){this.writeUint8(e?1:0)}finish(){return new Uint8Array(this.buf,0,this.pos)}};var rr=1312903237,Es=1,ar=0,pr=1,cr=2,hr=3,ur=4,xr=5,dr=6;function _r(g,e){g.writeFloat64(e.elasticity),g.writeFloat64(e.dynamicFriction),g.writeFloat64(e.staticFriction),g.writeFloat64(e.density),g.writeFloat64(e.rollingFriction)}function yr(g,e){g.writeInt32(e.collisionGroup),g.writeInt32(e.collisionMask),g.writeInt32(e.sensorGroup),g.writeInt32(e.sensorMask),g.writeInt32(e.fluidGroup),g.writeInt32(e.fluidMask)}function mr(g,e){if(e==null)return;g.writeFloat64(e.density),g.writeFloat64(e.viscosity);let t=e.gravity;g.writeBool(t!=null),t!=null&&(g.writeFloat64(t.x),g.writeFloat64(t.y))}function fr(g,e){if(e.isCircle()){g.writeUint8(0);let i=e;g.writeFloat64(i.radius);let l=e.localCOM;g.writeFloat64(l.x),g.writeFloat64(l.y)}else if(e.isCapsule()){g.writeUint8(2);let i=e;g.writeFloat64(i.width),g.writeFloat64(i.height);let l=e.localCOM;g.writeFloat64(l.x),g.writeFloat64(l.y)}else{g.writeUint8(1);let l=e.localVerts,r=l.length;g.writeUint16(r);for(let a=0;a<r;a++){let o=l.at(a);g.writeFloat64(o.x),g.writeFloat64(o.y)}}_r(g,e.material),yr(g,e.filter);let t=e.fluidEnabled,n=t&&e.fluidProperties!=null,s=(e.sensorEnabled?1:0)|(t?2:0)|(n?4:0);g.writeUint8(s),n&&mr(g,e.fluidProperties)}function br(g,e){let t=e.zpp_inner;g.writeUint8(t.type),g.writeFloat64(e.position.x),g.writeFloat64(e.position.y),g.writeFloat64(e.rotation),g.writeFloat64(e.velocity.x),g.writeFloat64(e.velocity.y),g.writeFloat64(e.angularVel),g.writeFloat64(e.kinematicVel.x),g.writeFloat64(e.kinematicVel.y),g.writeFloat64(e.kinAngVel),g.writeFloat64(e.surfaceVel.x),g.writeFloat64(e.surfaceVel.y),g.writeFloat64(e.force.x),g.writeFloat64(e.force.y),g.writeFloat64(t.type===2?e.torque:0),g.writeUint8(t.massMode),g.writeFloat64(t.massMode===1?t.cmass:0),g.writeUint8(t.inertiaMode),g.writeFloat64(t.inertiaMode===1?t.cinertia:0),g.writeUint8(t.gravMassMode),g.writeFloat64(t.gravMassScale);let n=(e.allowMovement?1:0)|(e.allowRotation?2:0)|(e.isBullet?4:0);g.writeUint8(n);let s=e.shapes,i=s.length;g.writeUint16(i);for(let l=0;l<i;l++)fr(g,s.at(l))}var uo={PivotJoint:ar,DistanceJoint:pr,AngleJoint:cr,MotorJoint:hr,LineJoint:ur,PulleyJoint:xr,WeldJoint:dr};function cs(g,e,t,n,s){let i=n!=null?t.get(n.zpp_inner.id)??-1:-1,l=s!=null?t.get(s.zpp_inner.id)??-1:-1;g.writeInt32(i),g.writeInt32(l);let r=e.zpp_inner,a=(r.active?1:0)|(r.ignore?2:0)|(r.stiff?4:0)|(r.breakUnderForce?8:0)|(r.breakUnderError?16:0)|(r.removeOnBreak?32:0);g.writeUint8(a),g.writeFloat64(r.frequency),g.writeFloat64(r.damping),g.writeFloat64(r.maxForce),g.writeFloat64(r.maxError)}function zr(g,e,t){let n=e.constructor?.name??"",s=uo[n];if(s===void 0)return!1;switch(g.writeUint8(s),n){case"PivotJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y);break}case"DistanceJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax);break}case"AngleJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax),g.writeFloat64(i.ratio);break}case"MotorJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.rate),g.writeFloat64(i.ratio);break}case"LineJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.direction.x),g.writeFloat64(i.direction.y),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax);break}case"PulleyJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.anchor3.x),g.writeFloat64(i.anchor3.y),g.writeFloat64(i.anchor4.x),g.writeFloat64(i.anchor4.y),g.writeFloat64(i.jointMin),g.writeFloat64(i.jointMax),g.writeFloat64(i.ratio);break}case"WeldJoint":{let i=e;cs(g,e,t,i.body1,i.body2),g.writeFloat64(i.anchor1.x),g.writeFloat64(i.anchor1.y),g.writeFloat64(i.anchor2.x),g.writeFloat64(i.anchor2.y),g.writeFloat64(i.phase);break}}return!0}function xo(g){let e=new El,t=[],n=new Map,s=new Map;function i(d){let _=d.zpp_inner.id;if(n.has(_))return;let f=t.length;s.set(d,f),n.set(_,f),t.push(d)}let l=g.bodies,r=l.length;for(let d=0;d<r;d++)i(l.at(d));let a=g.compounds,o=a.length;for(let d=0;d<o;d++){let f=a.at(d).bodies,z=f.length;for(let P=0;P<z;P++)i(f.at(P))}let p=[],c=new Map;function h(d){if(c.has(d))return;let _=d.constructor?.name??"";uo[_]!==void 0&&(c.set(d,p.length),p.push(d))}let u=g.constraints,x=u.length;for(let d=0;d<x;d++)h(u.at(d));for(let d=0;d<o;d++){let f=a.at(d).constraints,z=f.length;for(let P=0;P<z;P++)h(f.at(P))}e.writeUint32(rr),e.writeUint16(Es),e.writeUint32(t.length),e.writeUint32(p.length),e.writeUint32(o);let y=g.gravity;e.writeFloat64(y.x),e.writeFloat64(y.y),e.writeFloat64(g.worldLinearDrag),e.writeFloat64(g.worldAngularDrag),e.writeBool(g.sortContacts),e.writeUint8(g.zpp_inner.bphase.is_sweep?0:1);for(let d=0;d<t.length;d++)br(e,t[d]);for(let d=0;d<p.length;d++)zr(e,p[d],n);for(let d=0;d<o;d++){let _=a.at(d),f=_.bodies,z=f.length;e.writeUint16(z);for(let b=0;b<z;b++){let M=f.at(b),v=s.get(M)??0;e.writeUint32(v)}let P=_.constraints,k=P.length,m=0;for(let b=0;b<k;b++){let M=P.at(b);c.has(M)&&m++}e.writeUint16(m);for(let b=0;b<k;b++){let M=P.at(b),v=c.get(M);v!=null&&e.writeUint32(v)}e.writeUint16(0)}return e.finish()}var Nl=class{constructor(e){this.pos=0;this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}readUint8(){let e=this.view.getUint8(this.pos);return this.pos+=1,e}readUint16(){let e=this.view.getUint16(this.pos,!0);return this.pos+=2,e}readUint32(){let e=this.view.getUint32(this.pos,!0);return this.pos+=4,e}readInt32(){let e=this.view.getInt32(this.pos,!0);return this.pos+=4,e}readFloat64(){let e=this.view.getFloat64(this.pos,!0);return this.pos+=8,e}readBool(){return this.readUint8()!==0}};var _o=1312903237,Pr=0,wr=1,vr=2,gr=3,Cr=4,Mr=5,Zr=6,kr={1:Dn.STATIC,2:Dn.DYNAMIC,3:Dn.KINEMATIC};function Gl(g){let e=g.readFloat64(),t=g.readFloat64(),n=g.readFloat64(),s=g.readFloat64(),i=g.readFloat64();return new $i(e,t,n,s,i)}function Jl(g){let e=new es;return e.collisionGroup=g.readInt32(),e.collisionMask=g.readInt32(),e.sensorGroup=g.readInt32(),e.sensorMask=g.readInt32(),e.fluidGroup=g.readInt32(),e.fluidMask=g.readInt32(),e}function Er(g){let e=g.readFloat64(),t=g.readFloat64(),n=new Nn(e,t);return g.readBool()&&(n.gravity=je.get(g.readFloat64(),g.readFloat64())),n}function Nr(g){let e=g.readUint8(),t;if(e===0){let i=g.readFloat64(),l=g.readFloat64(),r=g.readFloat64(),a=Gl(g),o=Jl(g);t=new Mi(i,je.weak(l,r),a,o)}else if(e===2){let i=g.readFloat64(),l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=Gl(g),p=Jl(g);t=new ki(i,l,je.weak(r,a),o,p)}else{let i=g.readUint16(),l=[];for(let o=0;o<i;o++)l.push(je.get(g.readFloat64(),g.readFloat64()));let r=Gl(g),a=Jl(g);t=new Zi(l,r,a)}let n=g.readUint8();return t.sensorEnabled=(n&1)!==0,t.fluidEnabled=(n&2)!==0,(n&4)!==0&&(t.fluidProperties=Er(g)),t}function Or(g){let e=g.readUint8(),t=kr[e]??Dn.DYNAMIC,n=g.readFloat64(),s=g.readFloat64(),i=g.readFloat64(),l=new We(t,je.weak(n,s));l.rotation=i;let r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64();e!==1&&(l.velocity=je.get(r,a),l.angularVel=o),l.kinematicVel=je.get(g.readFloat64(),g.readFloat64()),l.kinAngVel=g.readFloat64(),l.surfaceVel=je.get(g.readFloat64(),g.readFloat64());let p=g.readFloat64(),c=g.readFloat64(),h=g.readFloat64();e===2&&(l.force=je.get(p,c),l.torque=h);let u=g.readUint8(),x=g.readFloat64();u===1&&x!==0?l.mass=x:u===0&&(l.massMode=Hi.DEFAULT);let y=g.readUint8(),d=g.readFloat64();y===1&&d!==0?l.inertia=d:y===0&&(l.inertiaMode=Qi.DEFAULT);let _=g.readUint8(),f=g.readFloat64();_===2?(l.gravMassMode=ui.SCALED,l.gravMassScale=f):_===1&&(l.gravMassMode=ui.FIXED);let z=g.readUint8();l.allowMovement=(z&1)!==0,l.allowRotation=(z&2)!==0,l.isBullet=(z&4)!==0;let P=g.readUint16();for(let k=0;k<P;k++)Nr(g).body=l;return l}function Sr(g){let e=g.readInt32(),t=g.readInt32(),n=g.readUint8(),s=g.readFloat64(),i=g.readFloat64(),l=g.readFloat64(),r=g.readFloat64();return{body1Id:e,body2Id:t,active:(n&1)!==0,ignore:(n&2)!==0,stiff:(n&4)!==0,breakUnderForce:(n&8)!==0,breakUnderError:(n&16)!==0,removeOnBreak:(n&32)!==0,frequency:s,damping:i,maxForce:l,maxError:r}}function hs(g,e){g.active=e.active,g.ignore=e.ignore,g.stiff=e.stiff,g.frequency=e.frequency,g.damping=e.damping,g.maxForce=e.maxForce,g.maxError=e.maxError,g.breakUnderForce=e.breakUnderForce,g.breakUnderError=e.breakUnderError,g.removeOnBreak=e.removeOnBreak}function Ar(g,e){let t=g.readUint8(),n=Sr(g),s=n.body1Id>=0?e[n.body1Id]??null:null,i=n.body2Id>=0?e[n.body2Id]??null:null;switch(t){case Pr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=new ns(s,i,je.weak(l,r),je.weak(a,o));return hs(p,n),p}case wr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=g.readFloat64(),h=new is(s,i,je.weak(l,r),je.weak(a,o),p,c);return hs(h,n),h}case vr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=new ss(s,i,l,r,a);return hs(o,n),o}case gr:{let l=g.readFloat64(),r=g.readFloat64(),a=new ls(s,i,l,r);return hs(a,n),a}case Cr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=g.readFloat64(),h=g.readFloat64(),u=g.readFloat64(),x=new os(s,i,je.weak(l,r),je.weak(a,o),je.weak(p,c),h,u);return hs(x,n),x}case Mr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=g.readFloat64(),h=g.readFloat64(),u=g.readFloat64(),x=g.readFloat64(),y=g.readFloat64(),d=g.readFloat64(),_=new rs(s,i,null,null,je.weak(l,r),je.weak(a,o),je.weak(p,c),je.weak(h,u),x,y,d);return hs(_,n),_}case Zr:{let l=g.readFloat64(),r=g.readFloat64(),a=g.readFloat64(),o=g.readFloat64(),p=g.readFloat64(),c=new as(s,i,je.weak(l,r),je.weak(a,o),p);return hs(c,n),c}default:throw new Error(`nape-js binary: unknown constraint type tag ${t}`)}}function yo(g){let e=new Nl(g),t=e.readUint32();if(t!==_o)throw new Error(`nape-js binary: invalid magic bytes 0x${t.toString(16)} (expected 0x${_o.toString(16)})`);let n=e.readUint16();if(n!==Es)throw new Error(`nape-js binary: unsupported version ${n} (expected ${Es})`);let s=e.readUint32(),i=e.readUint32(),l=e.readUint32(),r=e.readFloat64(),a=e.readFloat64(),o=e.readFloat64(),p=e.readFloat64(),c=e.readBool(),u=e.readUint8()===0?Ei.SWEEP_AND_PRUNE:Ei.DYNAMIC_AABB_TREE,x=new ni(je.weak(r,a),u);x.worldLinearDrag=o,x.worldAngularDrag=p,x.sortContacts=c;let y=new Array(s);for(let z=0;z<s;z++)y[z]=Or(e);let d=new Array(i);for(let z=0;z<i;z++)d[z]=Ar(e,y);let _=new Set,f=new Set;for(let z=0;z<l;z++){let P=new ii,k=e.readUint16();for(let M=0;M<k;M++){let v=e.readUint32();y[v].compound=P,_.add(v)}let m=e.readUint16();for(let M=0;M<m;M++){let v=e.readUint32();d[v].compound=P,f.add(v)}let b=e.readUint16();for(let M=0;M<b;M++)e.readUint32();P.space=x}for(let z=0;z<s;z++)_.has(z)||(y[z].space=x);for(let z=0;z<i;z++)f.has(z)||(d[z].space=x);return x}0&&(module.exports={BINARY_SNAPSHOT_VERSION,SNAPSHOT_VERSION,spaceFromBinary,spaceFromJSON,spaceToBinary,spaceToJSON});
2
2
  //# sourceMappingURL=index.cjs.map