@mlightcad/geometry-engine 2.0.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/geometry-engine.js +6289 -1760
- package/dist/geometry-engine.umd.cjs +4 -1
- package/lib/geometry/AcGeNurbsCurve.d.ts +5 -1
- package/lib/geometry/AcGeNurbsCurve.d.ts.map +1 -1
- package/lib/geometry/AcGeNurbsCurve.js +10 -4
- package/lib/geometry/AcGeNurbsCurve.js.map +1 -1
- package/lib/geometry/AcGeSpline3d.d.ts +12 -0
- package/lib/geometry/AcGeSpline3d.d.ts.map +1 -1
- package/lib/geometry/AcGeSpline3d.js +44 -15
- package/lib/geometry/AcGeSpline3d.js.map +1 -1
- package/package.json +5 -2
|
@@ -1 +1,4 @@
|
|
|
1
|
-
(function(x,N){typeof exports=="object"&&typeof module<"u"?N(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],N):(x=typeof globalThis<"u"?globalThis:x||self,N(x["geometry-engine"]={},x.common))})(this,function(x,N){"use strict";const R=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Dt=1234567;const wt=Math.PI/180,Pt=180/Math.PI;function Yt(){const u=Math.random()*4294967295|0,t=Math.random()*4294967295|0,s=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(R[u&255]+R[u>>8&255]+R[u>>16&255]+R[u>>24&255]+"-"+R[t&255]+R[t>>8&255]+"-"+R[t>>16&15|64]+R[t>>24&255]+"-"+R[s&63|128]+R[s>>8&255]+"-"+R[s>>16&255]+R[s>>24&255]+R[e&255]+R[e>>8&255]+R[e>>16&255]+R[e>>24&255]).toLowerCase()}function F(u,t,s){return Math.max(t,Math.min(s,u))}function bt(u,t){return(u%t+t)%t}function Zt(u,t,s,e,n){return e+(u-t)*(n-e)/(s-t)}function Ot(u,t,s){return u!==t?(s-u)/(t-u):0}function Ct(u,t,s){return(1-s)*u+s*t}function Qt(u,t,s,e){return Ct(u,t,1-Math.exp(-s*e))}function Kt(u,t=1){return t-Math.abs(bt(u,t*2)-t)}function Ht(u,t,s){return u<=t?0:u>=s?1:(u=(u-t)/(s-t),u*u*(3-2*u))}function $t(u,t,s){return u<=t?0:u>=s?1:(u=(u-t)/(s-t),u*u*u*(u*(u*6-15)+10))}function Wt(u,t){return u+Math.floor(Math.random()*(t-u+1))}function Jt(u,t){return u+Math.random()*(t-u)}function vt(u){return u*(.5-Math.random())}function ts(u){u!==void 0&&(Dt=u);let t=Dt+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function ss(u){return u*wt}function es(u){return u*Pt}function ns(u){return(u&u-1)===0&&u!==0}function is(u){return Math.pow(2,Math.ceil(Math.log(u)/Math.LN2))}function rs(u){return Math.pow(2,Math.floor(Math.log(u)/Math.LN2))}function v(u){const t=Math.PI*2;return(u%t+t)%t}function hs(u,t,s){return u>t&&u<s||u>s&&u<t}function os(u,t,s,e=!1){return u=v(u),t=v(t),s=v(s),e?t>s?u<=t&&u>=s:u<=t||u>=s:t<s?u>=t&&u<=s:u>=t||u<=s}function St(u){return u=Math.abs(u),u<1?0:Math.ceil(Math.log10(Math.abs(u)+1))}function as(u,t=1e-7){const s=St(u);return Math.max(Math.pow(10,s)*t,t)}const B={DEG2RAD:wt,RAD2DEG:Pt,generateUUID:Yt,clamp:F,euclideanModulo:bt,mapLinear:Zt,inverseLerp:Ot,lerp:Ct,damp:Qt,pingpong:Kt,smoothstep:Ht,smootherstep:$t,randInt:Wt,randFloat:Jt,randFloatSpread:vt,seededRandom:ts,degToRad:ss,radToDeg:es,isPowerOfTwo:ns,ceilPowerOfTwo:is,floorPowerOfTwo:rs,normalizeAngle:v,isBetween:hs,isBetweenAngle:os,intPartLength:St,relativeEps:as},ot=class ot{constructor(t,s){this.x=0,this.y=0;const e=+(t!==void 0)+ +(s!==void 0);if(e!==0){if(e===1&&t instanceof Array){this.x=t[0],this.y=t[1];return}if(e===1){const{x:n,y:i}=t;this.x=n,this.y=i;return}if(e===2){this.x=t,this.y=s;return}throw N.AcCmErrors.ILLEGAL_PARAMETERS}}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,s){return this.x=t,this.y=s,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new ot(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,s){return this.x=t.x+s.x,this.y=t.y+s.y,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,s){return this.x=t.x-s.x,this.y=t.y-s.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix2d(t){const s=this.x,e=this.y,n=t.elements;return this.x=n[0]*s+n[3]*e+n[6],this.y=n[1]*s+n[4]*e+n[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,s){return this.x=Math.max(t.x,Math.min(s.x,this.x)),this.y=Math.max(t.y,Math.min(s.y,this.y)),this}clampScalar(t,s){return this.x=Math.max(t,Math.min(s,this.x)),this.y=Math.max(t,Math.min(s,this.y)),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(s,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const s=Math.sqrt(this.lengthSq()*t.lengthSq());if(s===0)return Math.PI/2;const e=this.dot(t)/s;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const s=this.x-t.x,e=this.y-t.y;return s*s+e*e}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t}rotateAround(t,s){const e=Math.cos(s),n=Math.sin(s),i=this.x-t.x,h=this.y-t.y;return this.x=i*e-h*n+t.x,this.y=i*n+h*e+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(t=1e-7){return Math.min(B.relativeEps(this.x,t),B.relativeEps(this.y,t))}*[Symbol.iterator](){yield this.x,yield this.y}};ot.EMPTY=Object.freeze(new ot(0,0));let C=ot;const at=class at{constructor(t,s,e,n,i,h,r,a,o){this.elements=[1,0,0,0,1,0,0,0,1],t!=null&&s!=null&&e!=null&&n!=null&&i!=null&&h!=null&&r!=null&&a!=null&&o!=null&&this.set(t,s,e,n,i,h,r,a,o)}set(t,s,e,n,i,h,r,a,o){const c=this.elements;return c[0]=t,c[1]=n,c[2]=r,c[3]=s,c[4]=i,c[5]=a,c[6]=e,c[7]=h,c[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const s=this.elements,e=t.elements;return s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],this}extractBasis(t,s,e){return t.setFromMatrix3Column(this,0),s.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const s=t.elements;return this.set(s[0],s[4],s[8],s[1],s[5],s[9],s[2],s[6],s[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,s){const e=t.elements,n=s.elements,i=this.elements,h=e[0],r=e[3],a=e[6],o=e[1],c=e[4],l=e[7],d=e[2],m=e[5],y=e[8],g=n[0],p=n[3],A=n[6],b=n[1],P=n[4],w=n[7],M=n[2],E=n[5],z=n[8];return i[0]=h*g+r*b+a*M,i[3]=h*p+r*P+a*E,i[6]=h*A+r*w+a*z,i[1]=o*g+c*b+l*M,i[4]=o*p+c*P+l*E,i[7]=o*A+c*w+l*z,i[2]=d*g+m*b+y*M,i[5]=d*p+m*P+y*E,i[8]=d*A+m*w+y*z,this}multiplyScalar(t){const s=this.elements;return s[0]*=t,s[3]*=t,s[6]*=t,s[1]*=t,s[4]*=t,s[7]*=t,s[2]*=t,s[5]*=t,s[8]*=t,this}determinant(){const t=this.elements,s=t[0],e=t[1],n=t[2],i=t[3],h=t[4],r=t[5],a=t[6],o=t[7],c=t[8];return s*h*c-s*r*o-e*i*c+e*r*a+n*i*o-n*h*a}invert(){const t=this.elements,s=t[0],e=t[1],n=t[2],i=t[3],h=t[4],r=t[5],a=t[6],o=t[7],c=t[8],l=c*h-r*o,d=r*a-c*i,m=o*i-h*a,y=s*l+e*d+n*m;if(y===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/y;return t[0]=l*g,t[1]=(n*o-c*e)*g,t[2]=(r*e-n*h)*g,t[3]=d*g,t[4]=(c*s-n*a)*g,t[5]=(n*i-r*s)*g,t[6]=m*g,t[7]=(e*a-o*s)*g,t[8]=(h*s-e*i)*g,this}transpose(){let t;const s=this.elements;return t=s[1],s[1]=s[3],s[3]=t,t=s[2],s[2]=s[6],s[6]=t,t=s[5],s[5]=s[7],s[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const s=this.elements;return t.elements[0]=s[0],t.elements[1]=s[3],t.elements[2]=s[6],t.elements[3]=s[1],t.elements[4]=s[4],t.elements[5]=s[7],t.elements[6]=s[2],t.elements[7]=s[5],t.elements[8]=s[8],this}setUvTransform(t,s,e,n,i,h,r){const a=Math.cos(i),o=Math.sin(i);return this.set(e*a,e*o,-e*(a*h+o*r)+h+t,-n*o,n*a,-n*(-o*h+a*r)+r+s,0,0,1),this}scale(t,s){return this.premultiply(Bt.makeScale(t,s)),this}rotate(t){return this.premultiply(Bt.makeRotation(-t)),this}translate(t,s){return this.premultiply(Bt.makeTranslation(t,s)),this}makeTranslation(t,s){return t instanceof C?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,s,0,0,1),this}makeRotation(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,-e,0,e,s,0,0,0,1),this}makeScale(t,s){return this.set(t,0,0,0,s,0,0,0,1),this}equals(t){const s=this.elements,e=t.elements;for(let n=0;n<9;n++)if(s[n]!==e[n])return!1;return!0}fromArray(t,s=0){for(let e=0;e<9;e++)this.elements[e]=t[e+s];return this}toArray(t=[],s=0){const e=this.elements;return t[s]=e[0],t[s+1]=e[1],t[s+2]=e[2],t[s+3]=e[3],t[s+4]=e[4],t[s+5]=e[5],t[s+6]=e[6],t[s+7]=e[7],t[s+8]=e[8],t}clone(){return new at().fromArray(this.elements)}};at.IDENTITY=Object.freeze(new at);let O=at;const Bt=new O,D=1e-6,I=2*Math.PI,ws={x:0,y:0},Et={x:0,y:0,z:0};class It{constructor(){this.equalPointTol=D,this.equalVectorTol=D}equalPoint2d(t,s){return new C(t).sub(s).length()<this.equalPointTol}equalPoint3d(t,s){return new _(t).sub(s).length()<this.equalPointTol}static equalToZero(t,s=D){return t<s&&t>-s}static equal(t,s,e=D){return Math.abs(t-s)<e}static great(t,s,e=D){return t-s>e}static less(t,s,e=D){return t-s<e}}const Rt=new It;function Tt(u,t,s=!1){const e=u.x,n=u.y;let i=!1;const h=t.length;for(let r=0,a=h-1;r<h;a=r++){const o=t[r].x,c=t[r].y,l=t[a].x,d=t[a].y;let m=c>n!=d>n;s&&(m=c>=n!=d>=n),m&&e<(l-o)*(n-c)/(d-c)+o&&(i=!i)}return i}function cs(u,t){if(u.length===0||t.length===0)return!1;const s=new U().setFromPoints(u),e=new U().setFromPoints(t);if(!s.intersectsBox(e))return!1;for(let n=0;n<u.length;){if(Tt(u[n],t,!0))return!0;n<u.length-1&&Rt.equalPoint2d(u[n+1],u[n])&&++n,++n}return!1}const ls={isPointInPolygon:Tt,isPolygonIntersect:cs};function us(u,t){const s=[],e=t-1,n=u;for(let i=0;i<=n;i++)s.push(0);for(let i=1;i<=e-n;i++)s.push(i);for(let i=0;i<=n;i++)s.push(e-n+1);return s}function ds(u,t){const s=t.length-1,e=u,n=[0];let i=0;for(let r=1;r<=s;r++){const a=t[r][0]-t[r-1][0],o=t[r][1]-t[r-1][1],c=t[r][2]-t[r-1][2],l=Math.sqrt(a*a+o*o+c*c);i+=l,n.push(i)}const h=[];for(let r=0;r<=e;r++)h.push(0);for(let r=1;r<=s-e;r++){const a=n[r]/i;h.push(a*(s-e+1))}for(let r=0;r<=e;r++)h.push(s-e+1);return h}function ms(u,t){const s=t.length-1,e=u,n=[0];let i=0;for(let r=1;r<=s;r++){const a=t[r][0]-t[r-1][0],o=t[r][1]-t[r-1][1],c=t[r][2]-t[r-1][2],l=Math.sqrt(a*a+o*o+c*c),d=Math.sqrt(l);i+=d,n.push(i)}const h=[];for(let r=0;r<=e;r++)h.push(0);for(let r=1;r<=s-e;r++){const a=n[r]/i;h.push(a*(s-e+1))}for(let r=0;r<=e;r++)h.push(s-e+1);return h}function ut(u,t,s,e){if(t===0)return s>=e[u]&&s<e[u+1]?1:0;const n=e[u+t]-e[u],i=e[u+t+1]-e[u+1],h=n>1e-10?(s-e[u])/n:0,r=i>1e-10?(e[u+t+1]-s)/i:0;return h*ut(u,t-1,s,e)+r*ut(u+1,t-1,s,e)}function tt(u,t,s,e,n){const i=e.length-1,h=t;if(u=Math.max(s[h],Math.min(s[i+1],u)),Math.abs(u-s[i+1])<1e-8)return[...e[i]];if(Math.abs(u-s[h])<1e-8)return[...e[0]];const r=[0,0,0];let a=0;for(let o=0;o<=i;o++){const c=ut(o,h,u,s),l=n[o]*c;r[0]+=e[o][0]*l,r[1]+=e[o][1]*l,r[2]+=e[o][2]*l,a+=l}if(a<1e-10){const o=s[s.length-h-1];if(Math.abs(u-o)<1e-8)return[...e[i]];if(Math.abs(u-s[h])<1e-8)return[...e[0]]}return a>1e-10&&(r[0]/=a,r[1]/=a,r[2]/=a),r}function ys(u,t,s,e){const n=u,i=t[n],h=t[t.length-n-1];let r=0;const a=1e3,o=(h-i)/a;let c=tt(i,u,t,s,e);for(let g=1;g<=a;g++){const p=i+g*o,A=tt(p,u,t,s,e),b=A[0]-c[0],P=A[1]-c[1],w=A[2]-c[2];r+=Math.sqrt(b*b+P*P+w*w),c=A}const l=tt(h,u,t,s,e),d=l[0]-c[0],m=l[1]-c[1],y=l[2]-c[2];return r+=Math.sqrt(d*d+m*m+y*y),r}function Ps(u){return u.map(t=>[...t])}class st{constructor(t=0,s=0,e=0,n=1){this._x=t,this._y=s,this._z=e,this._w=n}static slerpFlat(t,s,e,n,i,h,r){let a=e[n+0],o=e[n+1],c=e[n+2],l=e[n+3];const d=i[h+0],m=i[h+1],y=i[h+2],g=i[h+3];if(r===0){t[s+0]=a,t[s+1]=o,t[s+2]=c,t[s+3]=l;return}if(r===1){t[s+0]=d,t[s+1]=m,t[s+2]=y,t[s+3]=g;return}if(l!==g||a!==d||o!==m||c!==y){let p=1-r;const A=a*d+o*m+c*y+l*g,b=A>=0?1:-1,P=1-A*A;if(P>Number.EPSILON){const M=Math.sqrt(P),E=Math.atan2(M,A*b);p=Math.sin(p*E)/M,r=Math.sin(r*E)/M}const w=r*b;if(a=a*p+d*w,o=o*p+m*w,c=c*p+y*w,l=l*p+g*w,p===1-r){const M=1/Math.sqrt(a*a+o*o+c*c+l*l);a*=M,o*=M,c*=M,l*=M}}t[s]=a,t[s+1]=o,t[s+2]=c,t[s+3]=l}static multiplyQuaternionsFlat(t,s,e,n,i,h){const r=e[n],a=e[n+1],o=e[n+2],c=e[n+3],l=i[h],d=i[h+1],m=i[h+2],y=i[h+3];return t[s]=r*y+c*l+a*m-o*d,t[s+1]=a*y+c*d+o*l-r*m,t[s+2]=o*y+c*m+r*d-a*l,t[s+3]=c*y-r*l-a*d-o*m,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,s,e,n){return this._x=t,this._y=s,this._z=e,this._w=n,this._onChangeCallback(),this}clone(){return new st(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,s=!0){const e=t.x,n=t.y,i=t.z,h=t.order,r=Math.cos,a=Math.sin,o=r(e/2),c=r(n/2),l=r(i/2),d=a(e/2),m=a(n/2),y=a(i/2);switch(h){case"XYZ":this._x=d*c*l+o*m*y,this._y=o*m*l-d*c*y,this._z=o*c*y+d*m*l,this._w=o*c*l-d*m*y;break;case"YXZ":this._x=d*c*l+o*m*y,this._y=o*m*l-d*c*y,this._z=o*c*y-d*m*l,this._w=o*c*l+d*m*y;break;case"ZXY":this._x=d*c*l-o*m*y,this._y=o*m*l+d*c*y,this._z=o*c*y+d*m*l,this._w=o*c*l-d*m*y;break;case"ZYX":this._x=d*c*l-o*m*y,this._y=o*m*l+d*c*y,this._z=o*c*y-d*m*l,this._w=o*c*l+d*m*y;break;case"YZX":this._x=d*c*l+o*m*y,this._y=o*m*l+d*c*y,this._z=o*c*y-d*m*l,this._w=o*c*l-d*m*y;break;case"XZY":this._x=d*c*l-o*m*y,this._y=o*m*l-d*c*y,this._z=o*c*y+d*m*l,this._w=o*c*l+d*m*y;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+h)}return s===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,s){const e=s/2,n=Math.sin(e);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(t){const s=t.elements,e=s[0],n=s[4],i=s[8],h=s[1],r=s[5],a=s[9],o=s[2],c=s[6],l=s[10],d=e+r+l;if(d>0){const m=.5/Math.sqrt(d+1);this._w=.25/m,this._x=(c-a)*m,this._y=(i-o)*m,this._z=(h-n)*m}else if(e>r&&e>l){const m=2*Math.sqrt(1+e-r-l);this._w=(c-a)/m,this._x=.25*m,this._y=(n+h)/m,this._z=(i+o)/m}else if(r>l){const m=2*Math.sqrt(1+r-e-l);this._w=(i-o)/m,this._x=(n+h)/m,this._y=.25*m,this._z=(a+c)/m}else{const m=2*Math.sqrt(1+l-e-r);this._w=(h-n)/m,this._x=(i+o)/m,this._y=(a+c)/m,this._z=.25*m}return this._onChangeCallback(),this}setFromUnitVectors(t,s){let e=t.dot(s)+1;return e<Number.EPSILON?(e=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=e):(this._x=0,this._y=-t.z,this._z=t.y,this._w=e)):(this._x=t.y*s.z-t.z*s.y,this._y=t.z*s.x-t.x*s.z,this._z=t.x*s.y-t.y*s.x,this._w=e),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(F(this.dot(t),-1,1)))}rotateTowards(t,s){const e=this.angleTo(t);if(e===0)return this;const n=Math.min(1,s/e);return this.slerp(t,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,s){const e=t._x,n=t._y,i=t._z,h=t._w,r=s._x,a=s._y,o=s._z,c=s._w;return this._x=e*c+h*r+n*o-i*a,this._y=n*c+h*a+i*r-e*o,this._z=i*c+h*o+e*a-n*r,this._w=h*c-e*r-n*a-i*o,this._onChangeCallback(),this}slerp(t,s){if(s===0)return this;if(s===1)return this.copy(t);const e=this._x,n=this._y,i=this._z,h=this._w;let r=h*t._w+e*t._x+n*t._y+i*t._z;if(r<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,r=-r):this.copy(t),r>=1)return this._w=h,this._x=e,this._y=n,this._z=i,this;const a=1-r*r;if(a<=Number.EPSILON){const m=1-s;return this._w=m*h+s*this._w,this._x=m*e+s*this._x,this._y=m*n+s*this._y,this._z=m*i+s*this._z,this.normalize(),this}const o=Math.sqrt(a),c=Math.atan2(o,r),l=Math.sin((1-s)*c)/o,d=Math.sin(s*c)/o;return this._w=h*l+this._w*d,this._x=e*l+this._x*d,this._y=n*l+this._y*d,this._z=i*l+this._z*d,this._onChangeCallback(),this}slerpQuaternions(t,s,e){return this.copy(t).slerp(s,e)}random(){const t=2*Math.PI*Math.random(),s=2*Math.PI*Math.random(),e=Math.random(),n=Math.sqrt(1-e),i=Math.sqrt(e);return this.set(n*Math.sin(t),n*Math.cos(t),i*Math.sin(s),i*Math.cos(s))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,s=0){return this._x=t[s],this._y=t[s+1],this._z=t[s+2],this._w=t[s+3],this._onChangeCallback(),this}toArray(t=[],s=0){return t[s]=this._x,t[s+1]=this._y,t[s+2]=this._z,t[s+3]=this._w,t}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const k=class k{constructor(t,s,e){this.x=0,this.y=0,this.z=0;const n=+(t!==void 0)+ +(s!==void 0)+ +(e!==void 0);if(n!==0){if(n===1&&t instanceof Array){this.x=t[0],this.y=t[1],this.z=t[2];return}if(n===1){const{x:i,y:h,z:r}=t;this.x=i,this.y=h,this.z=r||0;return}if(n===3){this.x=t,this.y=s,this.z=e;return}throw N.AcCmErrors.ILLEGAL_PARAMETERS}}set(t,s,e){return e===void 0&&(e=this.z),this.x=t,this.y=s,this.z=e,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,s){switch(t){case 0:this.x=s;break;case 1:this.y=s;break;case 2:this.z=s;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new k(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z||0,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z||0,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,s){return this.x=t.x+s.x,this.y=t.y+s.y,this.z=t.z+s.z,this}addScaledVector(t,s){return this.x+=t.x*s,this.y+=t.y*s,this.z+=t.z*s,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,s){return this.x=t.x-s.x,this.y=t.y-s.y,this.z=t.z-s.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,s){return this.x=t.x*s.x,this.y=t.y*s.y,this.z=t.z*s.z,this}applyEuler(t){return this.applyQuaternion(xs.setFromEuler(t))}applyAxisAngle(t,s){return this.applyQuaternion(xs.setFromAxisAngle(t,s))}applyMatrix3(t){const s=this.x,e=this.y,n=this.z,i=t.elements;return this.x=i[0]*s+i[3]*e+i[6]*n,this.y=i[1]*s+i[4]*e+i[7]*n,this.z=i[2]*s+i[5]*e+i[8]*n,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix3d(t){const s=this.x,e=this.y,n=this.z,i=t.elements,h=1/(i[3]*s+i[7]*e+i[11]*n+i[15]);return this.x=(i[0]*s+i[4]*e+i[8]*n+i[12])*h,this.y=(i[1]*s+i[5]*e+i[9]*n+i[13])*h,this.z=(i[2]*s+i[6]*e+i[10]*n+i[14])*h,this}applyQuaternion(t){const s=this.x,e=this.y,n=this.z,i=t.x,h=t.y,r=t.z,a=t.w,o=2*(h*n-r*e),c=2*(r*s-i*n),l=2*(i*e-h*s);return this.x=s+a*o+h*l-r*c,this.y=e+a*c+r*o-i*l,this.z=n+a*l+i*c-h*o,this}transformDirection(t){const s=this.x,e=this.y,n=this.z,i=t.elements;return this.x=i[0]*s+i[4]*e+i[8]*n,this.y=i[1]*s+i[5]*e+i[9]*n,this.z=i[2]*s+i[6]*e+i[10]*n,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,s){return this.x=Math.max(t.x,Math.min(s.x,this.x)),this.y=Math.max(t.y,Math.min(s.y,this.y)),this.z=Math.max(t.z,Math.min(s.z,this.z)),this}clampScalar(t,s){return this.x=Math.max(t,Math.min(s,this.x)),this.y=Math.max(t,Math.min(s,this.y)),this.z=Math.max(t,Math.min(s,this.z)),this}clampLength(t,s){const e=this.length();return this.divideScalar(e||1).multiplyScalar(Math.max(t,Math.min(s,e)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}isParallelTo(t){const s=this.dot(t),e=this.length(),n=t.length();return Math.abs(s)===e*n}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,s){return this.x+=(t.x-this.x)*s,this.y+=(t.y-this.y)*s,this.z+=(t.z-this.z)*s,this}lerpVectors(t,s,e){return this.x=t.x+(s.x-t.x)*e,this.y=t.y+(s.y-t.y)*e,this.z=t.z+(s.z-t.z)*e,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,s){const e=t.x,n=t.y,i=t.z,h=s.x,r=s.y,a=s.z;return this.x=n*a-i*r,this.y=i*h-e*a,this.z=e*r-n*h,this}projectOnVector(t){const s=t.lengthSq();if(s===0)return this.set(0,0,0);const e=t.dot(this)/s;return this.copy(t).multiplyScalar(e)}projectOnPlane(t){return Nt.copy(this).projectOnVector(t),this.sub(Nt)}reflect(t){return this.sub(Nt.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const s=Math.sqrt(this.lengthSq()*t.lengthSq());if(s===0)return Math.PI/2;const e=this.dot(t)/s;return Math.acos(Math.max(-1,Math.min(1,e)))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const s=this.x-t.x,e=this.y-t.y,n=this.z-t.z;return s*s+e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromMatrixPosition(t){const s=t.elements;return this.x=s[12],this.y=s[13],this.z=s[14],this}setFromMatrixScale(t){const s=this.setFromMatrixColumn(t,0).length(),e=this.setFromMatrixColumn(t,1).length(),n=this.setFromMatrixColumn(t,2).length();return this.x=s,this.y=e,this.z=n,this}setFromMatrixColumn(t,s){return this.fromArray(t.elements,s*4)}setFromMatrix3Column(t,s){return this.fromArray(t.elements,s*3)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,s=0){return this.x=t[s],this.y=t[s+1],this.z=t[s+2],this}toArray(t=[],s=0){return t[s]=this.x,t[s+1]=this.y,t[s+2]=this.z,t}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,s=Math.random()*2-1,e=Math.sqrt(1-s*s);return this.x=e*Math.cos(t),this.y=s,this.z=e*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};k.X_AXIS=Object.freeze(new k(1,0,0)),k.NEGATIVE_X_AXIS=Object.freeze(new k(-1,0,0)),k.Y_AXIS=Object.freeze(new k(0,1,0)),k.NEGATIVE_Y_AXIS=Object.freeze(new k(0,-1,0)),k.Z_AXIS=Object.freeze(new k(0,0,1)),k.NEGATIVE_Z_AXIS=Object.freeze(new k(0,0,-1));let _=k;const Nt=new _,xs=new st,ct=class ct{constructor(t,s,e,n,i,h,r,a,o,c,l,d,m,y,g,p){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!=null&&s!=null&&e!=null&&n!=null&&i!=null&&h!=null&&r!=null&&a!=null&&o!=null&&c!=null&&l!=null&&d!=null&&m!=null&&y!=null&&g!=null&&p!=null&&this.set(t,s,e,n,i,h,r,a,o,c,l,d,m,y,g,p)}set(t,s,e,n,i,h,r,a,o,c,l,d,m,y,g,p){const A=this.elements;return A[0]=t,A[4]=s,A[8]=e,A[12]=n,A[1]=i,A[5]=h,A[9]=r,A[13]=a,A[2]=o,A[6]=c,A[10]=l,A[14]=d,A[3]=m,A[7]=y,A[11]=g,A[15]=p,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ct().fromArray(this.elements)}copy(t){const s=this.elements,e=t.elements;return s[0]=e[0],s[1]=e[1],s[2]=e[2],s[3]=e[3],s[4]=e[4],s[5]=e[5],s[6]=e[6],s[7]=e[7],s[8]=e[8],s[9]=e[9],s[10]=e[10],s[11]=e[11],s[12]=e[12],s[13]=e[13],s[14]=e[14],s[15]=e[15],this}copyPosition(t){const s=this.elements,e=t.elements;return s[12]=e[12],s[13]=e[13],s[14]=e[14],this}setFromMatrix3(t){const s=t.elements;return this.set(s[0],s[3],s[6],0,s[1],s[4],s[7],0,s[2],s[5],s[8],0,0,0,0,1),this}setFromExtrusionDirection(t){if(Rt.equalPoint3d(t,_.Z_AXIS))this.identity();else{const s=new _(1,0,0);Math.abs(t.x)<1/64&&Math.abs(t.y)<1/64?s.crossVectors(_.Y_AXIS,t).normalize():s.crossVectors(_.Z_AXIS,t).normalize();const e=t.clone().cross(s).normalize();this.set(s.x,s.y,s.z,0,e.x,e.y,e.z,0,t.x,t.y,t.z,0,0,0,0,1)}return this}extractBasis(t,s,e){return t.setFromMatrixColumn(this,0),s.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this}makeBasis(t,s,e){return this.set(t.x,s.x,e.x,0,t.y,s.y,e.y,0,t.z,s.z,e.z,0,0,0,0,1),this}extractRotation(t){const s=this.elements,e=t.elements,n=1/K.setFromMatrixColumn(t,0).length(),i=1/K.setFromMatrixColumn(t,1).length(),h=1/K.setFromMatrixColumn(t,2).length();return s[0]=e[0]*n,s[1]=e[1]*n,s[2]=e[2]*n,s[3]=0,s[4]=e[4]*i,s[5]=e[5]*i,s[6]=e[6]*i,s[7]=0,s[8]=e[8]*h,s[9]=e[9]*h,s[10]=e[10]*h,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}makeRotationFromQuaternion(t){return this.compose(bs,t,Cs)}lookAt(t,s,e){const n=this.elements;return L.subVectors(t,s),L.lengthSq()===0&&(L.z=1),L.normalize(),X.crossVectors(e,L),X.lengthSq()===0&&(Math.abs(e.z)===1?L.x+=1e-4:L.z+=1e-4,L.normalize(),X.crossVectors(e,L)),X.normalize(),dt.crossVectors(L,X),n[0]=X.x,n[4]=dt.x,n[8]=L.x,n[1]=X.y,n[5]=dt.y,n[9]=L.y,n[2]=X.z,n[6]=dt.z,n[10]=L.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,s){const e=t.elements,n=s.elements,i=this.elements,h=e[0],r=e[4],a=e[8],o=e[12],c=e[1],l=e[5],d=e[9],m=e[13],y=e[2],g=e[6],p=e[10],A=e[14],b=e[3],P=e[7],w=e[11],M=e[15],E=n[0],z=n[4],T=n[8],$=n[12],W=n[1],Z=n[5],J=n[9],yt=n[13],xt=n[2],gt=n[6],_t=n[10],pt=n[14],At=n[3],zt=n[7],Mt=n[11],ft=n[15];return i[0]=h*E+r*W+a*xt+o*At,i[4]=h*z+r*Z+a*gt+o*zt,i[8]=h*T+r*J+a*_t+o*Mt,i[12]=h*$+r*yt+a*pt+o*ft,i[1]=c*E+l*W+d*xt+m*At,i[5]=c*z+l*Z+d*gt+m*zt,i[9]=c*T+l*J+d*_t+m*Mt,i[13]=c*$+l*yt+d*pt+m*ft,i[2]=y*E+g*W+p*xt+A*At,i[6]=y*z+g*Z+p*gt+A*zt,i[10]=y*T+g*J+p*_t+A*Mt,i[14]=y*$+g*yt+p*pt+A*ft,i[3]=b*E+P*W+w*xt+M*At,i[7]=b*z+P*Z+w*gt+M*zt,i[11]=b*T+P*J+w*_t+M*Mt,i[15]=b*$+P*yt+w*pt+M*ft,this}multiplyScalar(t){const s=this.elements;return s[0]*=t,s[4]*=t,s[8]*=t,s[12]*=t,s[1]*=t,s[5]*=t,s[9]*=t,s[13]*=t,s[2]*=t,s[6]*=t,s[10]*=t,s[14]*=t,s[3]*=t,s[7]*=t,s[11]*=t,s[15]*=t,this}determinant(){const t=this.elements,s=t[0],e=t[4],n=t[8],i=t[12],h=t[1],r=t[5],a=t[9],o=t[13],c=t[2],l=t[6],d=t[10],m=t[14],y=t[3],g=t[7],p=t[11],A=t[15];return y*(+i*a*l-n*o*l-i*r*d+e*o*d+n*r*m-e*a*m)+g*(+s*a*m-s*o*d+i*h*d-n*h*m+n*o*c-i*a*c)+p*(+s*o*l-s*r*m-i*h*l+e*h*m+i*r*c-e*o*c)+A*(-n*r*c-s*a*l+s*r*d+n*h*l-e*h*d+e*a*c)}transpose(){const t=this.elements;let s;return s=t[1],t[1]=t[4],t[4]=s,s=t[2],t[2]=t[8],t[8]=s,s=t[6],t[6]=t[9],t[9]=s,s=t[3],t[3]=t[12],t[12]=s,s=t[7],t[7]=t[13],t[13]=s,s=t[11],t[11]=t[14],t[14]=s,this}setPosition(t,s,e){const n=this.elements;return t instanceof _?(n[12]=t.x,n[13]=t.y,n[14]=t.z):(n[12]=t,n[13]=s,n[14]=e),this}invert(){const t=this.elements,s=t[0],e=t[1],n=t[2],i=t[3],h=t[4],r=t[5],a=t[6],o=t[7],c=t[8],l=t[9],d=t[10],m=t[11],y=t[12],g=t[13],p=t[14],A=t[15],b=l*p*o-g*d*o+g*a*m-r*p*m-l*a*A+r*d*A,P=y*d*o-c*p*o-y*a*m+h*p*m+c*a*A-h*d*A,w=c*g*o-y*l*o+y*r*m-h*g*m-c*r*A+h*l*A,M=y*l*a-c*g*a-y*r*d+h*g*d+c*r*p-h*l*p,E=s*b+e*P+n*w+i*M;if(E===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const z=1/E;return t[0]=b*z,t[1]=(g*d*i-l*p*i-g*n*m+e*p*m+l*n*A-e*d*A)*z,t[2]=(r*p*i-g*a*i+g*n*o-e*p*o-r*n*A+e*a*A)*z,t[3]=(l*a*i-r*d*i-l*n*o+e*d*o+r*n*m-e*a*m)*z,t[4]=P*z,t[5]=(c*p*i-y*d*i+y*n*m-s*p*m-c*n*A+s*d*A)*z,t[6]=(y*a*i-h*p*i-y*n*o+s*p*o+h*n*A-s*a*A)*z,t[7]=(h*d*i-c*a*i+c*n*o-s*d*o-h*n*m+s*a*m)*z,t[8]=w*z,t[9]=(y*l*i-c*g*i-y*e*m+s*g*m+c*e*A-s*l*A)*z,t[10]=(h*g*i-y*r*i+y*e*o-s*g*o-h*e*A+s*r*A)*z,t[11]=(c*r*i-h*l*i-c*e*o+s*l*o+h*e*m-s*r*m)*z,t[12]=M*z,t[13]=(c*g*n-y*l*n+y*e*d-s*g*d-c*e*p+s*l*p)*z,t[14]=(y*r*n-h*g*n-y*e*a+s*g*a+h*e*p-s*r*p)*z,t[15]=(h*l*n-c*r*n+c*e*a-s*l*a-h*e*d+s*r*d)*z,this}scale(t){const s=this.elements,e=t.x,n=t.y,i=t.z;return s[0]*=e,s[4]*=n,s[8]*=i,s[1]*=e,s[5]*=n,s[9]*=i,s[2]*=e,s[6]*=n,s[10]*=i,s[3]*=e,s[7]*=n,s[11]*=i,this}getMaxScaleOnAxis(){const t=this.elements,s=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],e=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],n=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(s,e,n))}makeTranslation(t,s,e){return t instanceof _?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,s,0,0,1,e,0,0,0,1),this}makeRotationX(t){const s=Math.cos(t),e=Math.sin(t);return this.set(1,0,0,0,0,s,-e,0,0,e,s,0,0,0,0,1),this}makeRotationY(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,0,e,0,0,1,0,0,-e,0,s,0,0,0,0,1),this}makeRotationZ(t){const s=Math.cos(t),e=Math.sin(t);return this.set(s,-e,0,0,e,s,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,s){const e=Math.cos(s),n=Math.sin(s),i=1-e,h=t.x,r=t.y,a=t.z,o=i*h,c=i*r;return this.set(o*h+e,o*r-n*a,o*a+n*r,0,o*r+n*a,c*r+e,c*a-n*h,0,o*a-n*r,c*a+n*h,i*a*a+e,0,0,0,0,1),this}makeScale(t,s,e){return this.set(t,0,0,0,0,s,0,0,0,0,e,0,0,0,0,1),this}makeShear(t,s,e,n,i,h){return this.set(1,e,i,0,t,1,h,0,s,n,1,0,0,0,0,1),this}compose(t,s,e){const n=this.elements,i=s.x,h=s.y,r=s.z,a=s.w,o=i+i,c=h+h,l=r+r,d=i*o,m=i*c,y=i*l,g=h*c,p=h*l,A=r*l,b=a*o,P=a*c,w=a*l,M=e.x,E=e.y,z=e.z;return n[0]=(1-(g+A))*M,n[1]=(m+w)*M,n[2]=(y-P)*M,n[3]=0,n[4]=(m-w)*E,n[5]=(1-(d+A))*E,n[6]=(p+b)*E,n[7]=0,n[8]=(y+P)*z,n[9]=(p-b)*z,n[10]=(1-(d+g))*z,n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,this}decompose(t,s,e){const n=this.elements;let i=K.set(n[0],n[1],n[2]).length();const h=K.set(n[4],n[5],n[6]).length(),r=K.set(n[8],n[9],n[10]).length();this.determinant()<0&&(i=-i),t.x=n[12],t.y=n[13],t.z=n[14],q.copy(this);const o=1/i,c=1/h,l=1/r;return q.elements[0]*=o,q.elements[1]*=o,q.elements[2]*=o,q.elements[4]*=c,q.elements[5]*=c,q.elements[6]*=c,q.elements[8]*=l,q.elements[9]*=l,q.elements[10]*=l,s.setFromRotationMatrix(q),e.x=i,e.y=h,e.z=r,this}equals(t){const s=this.elements,e=t.elements;for(let n=0;n<16;n++)if(s[n]!==e[n])return!1;return!0}fromArray(t,s=0){for(let e=0;e<16;e++)this.elements[e]=t[e+s];return this}toArray(t=[],s=0){const e=this.elements;return t[s]=e[0],t[s+1]=e[1],t[s+2]=e[2],t[s+3]=e[3],t[s+4]=e[4],t[s+5]=e[5],t[s+6]=e[6],t[s+7]=e[7],t[s+8]=e[8],t[s+9]=e[9],t[s+10]=e[10],t[s+11]=e[11],t[s+12]=e[12],t[s+13]=e[13],t[s+14]=e[14],t[s+15]=e[15],t}};ct.IDENTITY=Object.freeze(new ct);let Q=ct;const K=new _,q=new Q,bs=new _(0,0,0),Cs=new _(1,1,1),X=new _,dt=new _,L=new _;class j{constructor(t=void 0,s=void 0){this.min=t==null?new _(1/0,1/0,1/0):new _(t.x,t.y,t.z),this.max=s==null?new _(-1/0,-1/0,-1/0):new _(s.x,s.y,s.z)}set(t,s){return this.min.copy(t),this.max.copy(s),this}setFromArray(t){this.makeEmpty();for(let s=0,e=t.length;s<e;s+=3)this.expandByPoint(kt.fromArray(t,s));return this}setFromPoints(t){this.makeEmpty();for(let s=0,e=t.length;s<e;s++)this.expandByPoint(t[s]);return this}setFromCenterAndSize(t,s){const e=kt.copy(s).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new j().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new _(0,0,0):new _(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new _(0,0,0):new _(0,0,0).subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,s){return s.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsPlane(t){let s,e;return t.normal.x>0?(s=t.normal.x*this.min.x,e=t.normal.x*this.max.x):(s=t.normal.x*this.max.x,e=t.normal.x*this.min.x),t.normal.y>0?(s+=t.normal.y*this.min.y,e+=t.normal.y*this.max.y):(s+=t.normal.y*this.max.y,e+=t.normal.y*this.min.y),t.normal.z>0?(s+=t.normal.z*this.min.z,e+=t.normal.z*this.max.z):(s+=t.normal.z*this.max.z,e+=t.normal.z*this.min.z),s<=-t.constant&&e>=-t.constant}clampPoint(t,s){return s.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,kt).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(G[0].set(this.min.x,this.min.y,this.min.z).applyMatrix3d(t),G[1].set(this.min.x,this.min.y,this.max.z).applyMatrix3d(t),G[2].set(this.min.x,this.max.y,this.min.z).applyMatrix3d(t),G[3].set(this.min.x,this.max.y,this.max.z).applyMatrix3d(t),G[4].set(this.max.x,this.min.y,this.min.z).applyMatrix3d(t),G[5].set(this.max.x,this.min.y,this.max.z).applyMatrix3d(t),G[6].set(this.max.x,this.max.y,this.min.z).applyMatrix3d(t),G[7].set(this.max.x,this.max.y,this.max.z).applyMatrix3d(t),this.setFromPoints(G),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const G=[new _,new _,new _,new _,new _,new _,new _,new _],kt=new _,gs=new C;class U{constructor(t=void 0,s=void 0){this.min=t==null?new C(1/0,1/0):new C(t.x,t.y),this.max=s==null?new C(-1/0,-1/0):new C(s.x,s.y)}set(t,s){return this.min.copy(t),this.max.copy(s),this}setFromPoints(t){this.makeEmpty();for(let s=0,e=t.length;s<e;s++)this.expandByPoint(t[s]);return this}setFromCenterAndSize(t,s){const e=gs.copy(s).multiplyScalar(.5);return this.min.copy(t).sub(e),this.max.copy(t).add(e),this}clone(){return new U().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new C(0,0):new C(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new C(0,0):new C(0,0).subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,s){return s.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,s){return s.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,gs).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const _s=new _,Ss=new _,Bs=new O;class et{constructor(t=new _(1,0,0),s=0){this.normal=t,this.constant=s}set(t,s){return this.normal.copy(t),this.constant=s,this}setComponents(t,s,e,n){return this.normal.set(t,s,e),this.constant=n,this}setFromNormalAndCoplanarPoint(t,s){return this.normal.copy(t),this.constant=-s.dot(this.normal),this}setFromCoplanarPoints(t,s,e){const n=_s.subVectors(e,s).cross(Ss.subVectors(t,s)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}projectPoint(t,s){return s.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectsBox(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,s){const e=s||Bs.getNormalMatrix(t),n=this.coplanarPoint(_s).applyMatrix3d(t),i=this.normal.applyMatrix3(e).normalize();return this.constant=-n.dot(i),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new et().copy(this)}}class S extends C{static pointArrayToNumberArray(t){const s=new Array(t.length*2);return t.forEach((e,n)=>{e.toArray(s,n*2)}),s}}class f extends _{static pointArrayToNumberArray(t,s=!0){const e=s?3:2,n=new Array(t.length*e);return t.forEach((i,h)=>{i.toArray(n,h*e)}),n}}const ps=new Q,As=new st,lt=class lt{constructor(t=0,s=0,e=0,n=lt.DEFAULT_ORDER){this._x=t,this._y=s,this._z=e,this._order=n}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,s,e,n=this._order){return this._x=t,this._y=s,this._z=e,this._order=n,this._onChangeCallback(),this}clone(){return new lt(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,s=this._order,e=!0){const n=t.elements,i=n[0],h=n[4],r=n[8],a=n[1],o=n[5],c=n[9],l=n[2],d=n[6],m=n[10];switch(s){case"XYZ":this._y=Math.asin(F(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(-c,m),this._z=Math.atan2(-h,i)):(this._x=Math.atan2(d,o),this._z=0);break;case"YXZ":this._x=Math.asin(-F(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(r,m),this._z=Math.atan2(a,o)):(this._y=Math.atan2(-l,i),this._z=0);break;case"ZXY":this._x=Math.asin(F(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-l,m),this._z=Math.atan2(-h,o)):(this._y=0,this._z=Math.atan2(a,i));break;case"ZYX":this._y=Math.asin(-F(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(d,m),this._z=Math.atan2(a,i)):(this._x=0,this._z=Math.atan2(-h,o));break;case"YZX":this._z=Math.asin(F(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,o),this._y=Math.atan2(-l,i)):(this._x=0,this._y=Math.atan2(r,m));break;case"XZY":this._z=Math.asin(-F(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(d,o),this._y=Math.atan2(r,i)):(this._x=Math.atan2(-c,m),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+s)}return this._order=s,e===!0&&this._onChangeCallback(),this}setFromQuaternion(t,s,e=!0){return ps.makeRotationFromQuaternion(t),this.setFromRotationMatrix(ps,s,e)}setFromVector3(t,s=this._order){return this.set(t.x,t.y,t.z,s)}reorder(t){return As.setFromEuler(this),this.setFromQuaternion(As,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],s=0){return t[s]=this._x,t[s+1]=this._y,t[s+2]=this._z,t[s+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};lt.DEFAULT_ORDER="XYZ";let Lt=lt;class zs{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class Ut extends zs{translate(t){return this.transform(new O().makeTranslation(t.x,t.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Es extends Ut{constructor(){super(),this._loops=[]}add(t){this._loops.push(t),this._boundingBoxNeedsUpdate=!0}get loops(){return this._loops}get outter(){if(this._loops.length>0)return this._loops[0]}calculateBoundingBox(){const t=this.outter;return t?t.box:new U}transform(t){return this._boundingBoxNeedsUpdate=!0,this}getPoints(t){const s=[];for(let e=0;e<this.loops.length;++e){const i=this.loops[e].getPoints(t);s.push(i)}return s}buildHierarchy(){var r;const t=this.getPoints(100),s=this.calculateBoundaryBoxes(t),e=this.sortBoundaryBoxesByAreas(s),n=new Map,i=e.length;for(let a=0;a<i;a++)n.set(e[a],{index:e[a],children:[]});const h={index:-1,children:[]};for(let a=0;a<i;a++){const o=e[a],c=t[o],l=s[o];let d=a+1;for(;d<i;d++){const m=e[d],y=t[m];if(s[m].containsBox(l)&&ls.isPointInPolygon(c[B.randInt(0,c.length-1)],y)){(r=n.get(m))==null||r.children.push(n.get(o));break}}d===i&&h.children.push(n.get(o))}return h}calculateBoundaryBoxes(t){const s=[];return t.forEach(e=>{s.push(new U().setFromPoints(e))}),s}sortBoundaryBoxesByAreas(t){const s=[];t.forEach((n,i)=>{const h=n.size,r=h.width*h.height;s.push({area:r,index:i})}),s.sort((n,i)=>n.area-i.area);const e=[];return s.forEach(n=>{e.push(n.index)}),e}}class H extends Ut{constructor(){super(),this.arcLengthDivisions=100}get startPoint(){return this.getPoint(0)}get endPoint(){return this.getPoint(1)}get length(){return this.getLength()}getPoint(t){throw new Error("AcGeCurve2d: .getPoint() not implemented.")}getPointAt(t){const s=this.getUtoTmapping(t);return this.getPoint(s)}getPoints(t=5){const s=[];for(let e=0;e<=t;e++)s.push(this.getPoint(e/t));return s}getSpacedPoints(t=5){const s=[];for(let e=0;e<=t;e++)s.push(this.getPointAt(e/t));return s}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){const s=[];let e,n=this.getPoint(0),i=0;s.push(0);for(let h=1;h<=t;h++)e=this.getPoint(h/t),i+=e.distanceTo(n),s.push(i),n=e;return s}getUtoTmapping(t,s){const e=this.getLengths();let n=0;const i=e.length;let h;s?h=s:h=t*e[i-1];let r=0,a=i-1,o;for(;r<=a;)if(n=Math.floor(r+(a-r)/2),o=e[n]-h,o<0)r=n+1;else if(o>0)a=n-1;else{a=n;break}if(n=a,e[n]===h)return n/(i-1);const c=e[n],d=e[n+1]-c,m=(h-c)/d;return(n+m)/(i-1)}getTangent(t){let e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);const i=this.getPoint(e),h=this.getPoint(n),r=new S;return r.copy(h).sub(i).normalize(),r}getTangentAt(t){const s=this.getUtoTmapping(t);return this.getTangent(s)}}class nt extends H{constructor(t,s,e,n,i){super();const h=+(t!==void 0)+ +(s!==void 0)+ +(e!==void 0)+ +(n!==void 0)+ +(i!==void 0);if(h==3)typeof t=="object"&&typeof s=="object"&&typeof e=="object"?this.createByThreePoints(t,s,e):this.createByStartEndPointsAndBulge(t,s,e);else if(h==5){const r=t;this.center=new S(r.x,r.y),this.radius=s,this.startAngle=e,this.endAngle=n,this.clockwise=i}else throw N.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(t,s,e){const n=(z,T)=>({x:(z.x+T.x)/2,y:(z.y+T.y)/2}),i=(z,T)=>(T.y-z.y)/(T.x-z.x),h=z=>-1/z,r=n(t,s),a=n(s,e),o=i(t,s),c=i(s,e),l=h(o),d=h(c),m=(z,T,$,W)=>{const Z=(W-T)/(z-$),J=z*Z+T;return{x:Z,y:J}},y=r.y-l*r.x,g=a.y-d*a.x,p=m(l,y,d,g),A=Math.sqrt(Math.pow(t.x-p.x,2)+Math.pow(t.y-p.y,2)),b=(z,T)=>Math.atan2(z.y-T.y,z.x-T.x),P=b(t,p),w=b(s,p),M=b(e,p),E=M>P&&M<w||P>M&&P<w||w>M&&w<P;this.center=p,this.radius=A,this.startAngle=P,this.endAngle=M,this.clockwise=!E}createByStartEndPointsAndBulge(t,s,e){let n,i,h;e<0?(n=Math.atan(-e)*4,i=new C(t),h=new C(s)):(n=Math.atan(e)*4,i=new C(s),h=new C(t));const r=new C().subVectors(h,i),a=r.length(),o=new C().addVectors(i,r.multiplyScalar(.5)),c=Math.abs(a/2/Math.tan(n/2)),l=r.normalize();let d;if(n<Math.PI){const m=new C(l.x*Math.cos(Math.PI/2)-l.y*Math.sin(Math.PI/2),l.y*Math.cos(Math.PI/2)+l.x*Math.sin(Math.PI/2));d=o.add(m.multiplyScalar(-c))}else{const m=new C(l.x*Math.cos(Math.PI/2)-l.y*Math.sin(Math.PI/2),l.y*Math.cos(Math.PI/2)+l.x*Math.sin(Math.PI/2));d=o.add(m.multiplyScalar(c))}e<0?(this.startAngle=Math.atan2(i.y-d.y,i.x-d.x),this.endAngle=Math.atan2(h.y-d.y,h.x-d.x)):(this.startAngle=Math.atan2(h.y-d.y,h.x-d.x),this.endAngle=Math.atan2(i.y-d.y,i.x-d.x)),this.clockwise=e<0,this.center=d,this.radius=h.sub(d).length()}get center(){return this._center}set center(t){this._center=new S(t.x,t.y),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(t){this._radius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return this.clockwise?B.normalizeAngle(this.startAngle-this.endAngle):B.normalizeAngle(this.endAngle-this.startAngle)}get clockwise(){return this._clockwise}set clockwise(t){this._clockwise=t,this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this.startAngle)}get endPoint(){return this.getPointAtAngle(this.endAngle)}get midPoint(){const t=B.normalizeAngle((this.startAngle+this.endAngle)/2);return this.getPointAtAngle(t)}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}calculateBoundingBox(){const t=[this.startPoint,this.endPoint],s=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const i of s)B.isBetweenAngle(i,this.startAngle,this.endAngle,this.clockwise)&&t.push(this.getPointAtAngle(i));const e=t.map(i=>i.x),n=t.map(i=>i.y);return new U(new S(Math.min(...e),Math.min(...n)),new S(Math.max(...e),Math.max(...n)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(t){return this._boundingBoxNeedsUpdate=!0,this}clone(){return new nt(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.clockwise)}getPointAtAngle(t){const s=this.center.x+this.radius*Math.cos(t),e=this.center.y+this.radius*Math.sin(t);return new S(s,e)}getPoints(t=100){const s=[];let e=this.deltaAngle,n=this.startAngle;if(this.closed&&(e=I,n=0),this.clockwise)for(let i=0;i<=t;i++){const h=n-e*(i/t),r=this.getPointAtAngle(h);s.push(new S(r.x,r.y))}else for(let i=0;i<=t;i++){const h=n+e*(i/t),r=this.getPointAtAngle(h);s.push(new S(r.x,r.y))}return s}}class Is extends zs{translate(t){return this.transform(new Q().makeTranslation(t.x,t.y,t.z))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class it extends Is{}class rt extends it{constructor(t,s){super(),this._start=new f(t),this._end=new f(s)}get startPoint(){return this._start}set startPoint(t){this._start.copy(t),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(t){this._end.copy(t),this._boundingBoxNeedsUpdate=!0}get direction(){return new _().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new f((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(t){return this.project(t).distanceTo(t)<1e-6}at(t,s){return this.delta(s).multiplyScalar(t).add(this._start)}atLength(t,s=!1){if(s){const e=this.delta(Y).normalize();return new f(this._start).addScaledVector(e,t)}else{const e=this.delta(Y).normalize();return new f(this._end).addScaledVector(e,t)}}extend(t,s=!1){if(s){const e=Y.subVectors(this._start,this._end).normalize();this._start=new f(this._start).addScaledVector(e,t)}else{const e=this.delta(Y).normalize();this._end=new f(this._end).addScaledVector(e,t)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(t,s){Ms.subVectors(t,this._start),mt.subVectors(this.endPoint,this.startPoint);const e=mt.dot(mt);let i=mt.dot(Ms)/e;return s&&(i=B.clamp(i,0,1)),i}closestPointToPoint(t,s,e){const n=this.closestPointToPointParameter(t,s);return this.delta(e).multiplyScalar(n).add(this._start)}delta(t){return t.subVectors(this._end,this._start)}distanceSq(){return this._start.distanceToSquared(this._end)}distance(){return this._start.distanceTo(this._end)}project(t){const s=this.direction,n=Y.subVectors(t,this.startPoint).dot(s);return new f().copy(s).multiplyScalar(n).add(this.startPoint)}perpPoint(t){const s=this.direction,e=this.startPoint,i=Y.subVectors(t,e).dot(s),h=Y.copy(s).multiplyScalar(i);return new f().addVectors(e,h)}calculateBoundingBox(){const t=new f(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y),Math.min(this._start.z,this._end.z)),s=new f(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y),Math.max(this._start.z,this._end.z));return new j(t,s)}transform(t){return this._start.applyMatrix3d(t),this._end.applyMatrix3d(t),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(t){return this.startPoint=t.startPoint,this.endPoint=t.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new rt(this._start.clone(),this._end.clone())}}const Y=new _,Ms=new _,mt=new _;class ht extends it{static computeCenterPoint(t,s,e){const n=new _().addVectors(t,s).multiplyScalar(.5),i=new _().addVectors(t,e).multiplyScalar(.5),h=new _().subVectors(s,t),r=new _().subVectors(e,t),a=new _().crossVectors(h,r).normalize();if(a.lengthSq()===0)return console.error("Points are collinear and cannot form a valid arc."),null;const o=new _().crossVectors(h,a).normalize(),c=new _().crossVectors(r,a).normalize(),l=o.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),d=c.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),m=new rt(n,n.clone().add(l)),y=new rt(i,i.clone().add(d)),g=new _;return m.closestPointToPoint(y.startPoint,!0,g)?g:(console.error("Cannot find a valid center for the arc."),null)}static createByThreePoints(t,s,e){const n=ht.computeCenterPoint(t,s,e);if(n){const i=n.distanceTo(t),h=new _().subVectors(t,n),r=new _().subVectors(s,n),a=Math.atan2(h.y,h.x),o=Math.atan2(r.y,r.x);return new ht(n,i,a,o,_.Z_AXIS)}}constructor(t,s,e,n,i,h=_.X_AXIS){super(),this.center=t,this.radius=s,this.startAngle=e,this.endAngle=n,this.normal=i,this.refVec=h,(n-e)%I==0?(this.startAngle=0,this.endAngle=I):(this.startAngle=e,this.endAngle=n)}get center(){return this._center}set center(t){this._center=new f(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(t){if(t<0)throw N.AcCmErrors.ILLEGAL_PARAMETERS;this._radius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return B.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(t){this._normal=new _(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(t){this._refVec=new _(t.x,t.y,t.z),this._refVec.normalize(),this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get length(){return Math.abs(this.deltaAngle*this.radius)}calculateBoundingBox(){const t=[this.startAngle,this.endAngle];for(let a=0;a<2*Math.PI;a+=Math.PI/2)B.isBetweenAngle(a,this.startAngle,this.endAngle)&&t.push(a);let s=1/0,e=1/0,n=1/0,i=-1/0,h=-1/0,r=-1/0;for(const a of t){const o=this.getPointAtAngle(a);o.x<s&&(s=o.x),o.y<e&&(e=o.y),o.z<n&&(n=o.z),o.x>i&&(i=o.x),o.y>h&&(h=o.y),o.z>r&&(r=o.z)}return new j({x:s,y:e,z:n},{x:i,y:h,z:r})}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}getPoints(t){const s=[];let e=this.deltaAngle,n=this.startAngle;this.closed&&(e=I,n=0);for(let i=0;i<=t;i++){const h=n+e*(i/t),r=this.getPointAtAngle(h);s.push(r)}return s}transform(t){const s=qt.copy(this.refVec).applyAxisAngle(this.normal,this.startAngle).multiplyScalar(this.radius),e=qt.copy(this.refVec).applyAxisAngle(this.normal,this.endAngle).multiplyScalar(this.radius);return this.center.applyMatrix3d(t),s.applyMatrix3d(t),e.applyMatrix3d(t),this.normal.applyMatrix3d(t).normalize(),this.refVec.applyMatrix3d(t).normalize(),this.startAngle=this.getAngle(s),this.endAngle=this.getAngle(e),this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.radius=t.radius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.normal=t.normal,this.refVec=t.refVec,this._boundingBoxNeedsUpdate=!0,this}clone(){return new ht(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(t){return t.sub(this.center),Math.atan2(t.dot(qt.crossVectors(this.refVec,this.normal)),t.dot(this.refVec))}getPointAtAngle(t){const s=this.normal,e=this.refVec,n={x:s.y*e.z-s.z*e.y,y:s.z*e.x-s.x*e.z,z:s.x*e.y-s.y*e.x},i=this.center,h=this.radius;return new f(i.x+h*(e.x*Math.cos(t)+n.x*Math.sin(t)),i.y+h*(e.y*Math.cos(t)+n.y*Math.sin(t)),i.z+h*(e.z*Math.cos(t)+n.z*Math.sin(t)))}get plane(){const t=new _(this.center).distanceTo(Et);return new et(this.normal,t)}}const qt=new _;class Vt extends H{constructor(t,s,e,n=0,i=I,h=!1,r=0){super(),this.center=t,this.majorAxisRadius=s,this.minorAxisRadius=e,(i-n)%I==0?(this.startAngle=0,this.endAngle=I):(this.startAngle=n,this.endAngle=i),this.clockwise=h,this.rotation=r}get center(){return this._center}set center(t){this._center=new f(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(t){if(t<0)throw N.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(t){if(t<0)throw N.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get clockwise(){return this._clockwise}set clockwise(t){this._clockwise=t,this._boundingBoxNeedsUpdate=!0}get rotation(){return this._rotation}set rotation(t){this._rotation=t,this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return B.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}calculateBoundingBox(){let s=1/0,e=1/0,n=-1/0,i=-1/0;for(let h=0;h<=100;h++){const r=this.getPoint(h/100);s=Math.min(s,r.x),e=Math.min(e,r.y),n=Math.max(n,r.x),i=Math.max(i,r.y)}return new U({x:s,y:e},{x:n,y:i})}get closed(){return this.deltaAngle==0}getPoint(t){const s=Math.PI*2;let e=this.endAngle-this.startAngle;const n=Math.abs(e)<Number.EPSILON;for(;e<0;)e+=s;for(;e>s;)e-=s;e<Number.EPSILON&&(n?e=0:e=s),this.clockwise===!0&&!n&&(e===s?e=-s:e=e-s);const i=this.startAngle+t*e;let h=this.center.x+this.majorAxisRadius*Math.cos(i),r=this.center.y+this.minorAxisRadius*Math.sin(i);if(this.rotation!==0){const a=Math.cos(this.rotation),o=Math.sin(this.rotation),c=h-this.center.x,l=r-this.center.y;h=c*a-l*o+this.center.x,r=c*o+l*a+this.center.y}return new S(h,r)}transform(t){return this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.majorAxisRadius=t.majorAxisRadius,this.minorAxisRadius=t.minorAxisRadius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this.clockwise=t.clockwise,this.rotation=t.rotation,this}clone(){return new Vt(this.center,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle,this.clockwise,this.rotation)}}class jt extends it{constructor(t,s,e,n,i,h=0,r=I){super(),this.center=t,this.normal=s,this.majorAxis=e,this.majorAxisRadius=n,this.minorAxisRadius=i;const a=Math.abs(r-h);Math.abs(a-I)<1e-10||Math.abs(a-2*I)<1e-10?(this.startAngle=0,this.endAngle=I):(this.startAngle=h,this.endAngle=r)}get center(){return this._center}set center(t){this._center=new f(t.x,t.y,t.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(t){if(t<0)throw N.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(t){if(t<0)throw N.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=t,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(t){this._startAngle=B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(t){this._endAngle=this.startAngle==0&&t==I?t:B.normalizeAngle(t),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const t=this.endAngle-this.startAngle;return Math.abs(t-I)<1e-10?I:B.normalizeAngle(t)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(t){this._normal=new _(t.x,t.y,t.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(t){this._majorAxis=new _(t.x,t.y,t.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new _().crossVectors(this.normal,this.majorAxis).normalize()}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get isCircular(){return It.equal(this.majorAxisRadius,this.minorAxisRadius)}get length(){if(this.isCircular)return this.majorAxisRadius*Math.abs(this.deltaAngle);const t=1e3,s=this.deltaAngle/t;let e=0,n=this.getPointAtAngle(this.startAngle);for(let i=1;i<=t;i++){const h=this.startAngle+i*s,r=this.getPointAtAngle(h),a=r.x-n.x,o=r.y-n.y,c=r.z-n.z;e+=Math.sqrt(a*a+o*o+c*c),n=r}return e}calculateBoundingBox(){if(this.majorAxis.equals(_.X_AXIS)||this.majorAxis.equals(_.Y_AXIS)||this.majorAxis.isParallelTo(_.X_AXIS)||this.majorAxis.isParallelTo(_.Y_AXIS)){const t=[this.startAngle,this.endAngle];for(let a=0;a<2*Math.PI;a+=Math.PI/2)B.isBetweenAngle(a,this.startAngle,this.endAngle)&&t.push(a);let s=1/0,e=1/0,n=1/0,i=-1/0,h=-1/0,r=-1/0;for(const a of t){const o=this.getPointAtAngle(a);o.x<s&&(s=o.x),o.y<e&&(e=o.y),o.z<n&&(n=o.z),o.x>i&&(i=o.x),o.y>h&&(h=o.y),o.z>r&&(r=o.z)}return new j({x:s,y:e,z:n},{x:i,y:h,z:r})}else{let s=1/0,e=1/0,n=1/0,i=-1/0,h=-1/0,r=-1/0;for(let a=0;a<=100;a++){const o=this.startAngle+this.deltaAngle*(a/100),c=this.getPointAtAngle(o);s=Math.min(s,c.x),e=Math.min(e,c.y),n=Math.min(n,c.z),i=Math.max(i,c.x),h=Math.max(h,c.y),r=Math.max(r,c.z)}return new j({x:s,y:e,z:n},{x:i,y:h,z:r})}}get closed(){return this.deltaAngle==0}getPoints(t=100){const s=[];let e=this.deltaAngle,n=this.startAngle;this.closed&&(e=I,n=0);for(let i=0;i<=t;i++){const h=n+e*(i/t),r=this.getPointAtAngle(h);s.push(r)}return s}getPointAtAngle(t){const s=Math.cos(t),e=Math.sin(t),n=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(e),i=this.majorAxis.clone().multiplyScalar(s*this.majorAxisRadius).add(n);return new f(this.center.x+i.x,this.center.y+i.y,this.center.z+i.z)}contains(t){const s=new _(t).sub(this.center),e=s.dot(this.majorAxis),n=s.dot(this.minorAxis),i=e/this.majorAxisRadius,h=n/this.minorAxisRadius;return i*i+h*h<=1}transform(t){return this._boundingBoxNeedsUpdate=!0,this}copy(t){return this.center=t.center,this.normal=t.normal,this.majorAxis=t.majorAxis,this.majorAxisRadius=t.majorAxisRadius,this.minorAxisRadius=t.minorAxisRadius,this.startAngle=t.startAngle,this.endAngle=t.endAngle,this._boundingBoxNeedsUpdate=!0,this}clone(){return new jt(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const t=new _(this.center).distanceTo(Et);return new et(this.normal,t)}}class Rs extends H{constructor(t=null,s=!1){super(),this._vertices=t||new Array,this._closed=s}get numberOfVertices(){return this._vertices.length}get closed(){return this._closed}get startPoint(){if(this.numberOfVertices>0){const t=this._vertices[0];return new S(t.x,t.y)}throw new Error("Start point does not exist in an empty polyline.")}get endPoint(){const t=this.numberOfVertices;if(t>0)if(this.closed){const s=this._vertices[0];return new S(s.x,s.y)}else{const s=this._vertices[t-1];return new S(s.x,s.y)}throw new Error("End point does not exist in an empty polyline.")}get length(){let t=0;const s=this._vertices.length;for(let e=0;e<s;++e){const n=this._vertices[e];let i=null;if(e<s-1?i=this._vertices[e+1]:e==s-1&&this.closed&&(i=this._vertices[0]),i)if(n.bulge){const h=new nt(n,i,n.bulge);t+=h.length}else t+=new S(n.x,n.y).distanceTo(i)}return t}set closed(t){this._closed=t,this._boundingBoxNeedsUpdate=!0}addVertexAt(t,s){t<=0?this._vertices.unshift(s):this._vertices.splice(t,0,s),this._boundingBoxNeedsUpdate=!0}getPointAt(t){const s=this._vertices[t];return new S(s.x,s.y)}calculateBoundingBox(){const t=this.getPoints(100);return new U().setFromPoints(t)}transform(t){return this._boundingBoxNeedsUpdate=!0,this}getPoints3d(t,s){const e=[];return this.getPoints(t).forEach(i=>e.push(new f().set(i.x,i.y,s))),e}getPoints(t){const s=[],e=this._vertices.length;for(let n=0;n<e;++n){const i=this._vertices[n];if(i.bulge){let h=null;if(n<e-1?h=this._vertices[n+1]:n==e-1&&this.closed&&(h=this._vertices[0]),h){const a=new nt(i,h,i.bulge).getPoints(t),o=a.length;for(let c=0;c<o;++c){const l=a[c];s.push(new S(l.x,l.y))}}}else s.push(new S(i.x,i.y)),n==e-1&&this.closed&&s.push(s[0])}return s}}class Ft extends H{constructor(t,s){super(),this._start=new S(t),this._end=new S(s)}get startPoint(){return this._start}set startPoint(t){this._start.copy(t),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(t){this._end.copy(t),this._boundingBoxNeedsUpdate=!0}getPoints(){return[this.startPoint,this.endPoint]}get length(){return this.startPoint.distanceTo(this.endPoint)}calculateBoundingBox(){const t=new S(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y)),s=new S(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y));return new U(t,s)}transform(t){return this._start.applyMatrix2d(t),this._end.applyMatrix2d(t),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(t){return this.startPoint=t.startPoint,this.endPoint=t.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Ft(this._start.clone(),this._end.clone())}}class Ts extends H{constructor(t=[]){super(),this._curves=t}get curves(){return this._curves}add(t){this._curves.push(t),this._boundingBoxNeedsUpdate=!0}get numberOfEdges(){return this._curves.length}get startPoint(){if(this._curves.length>0){const t=this._curves[0].startPoint;return new S(t.x,t.y)}throw new Error("Start point does not exist in an empty loop.")}get endPoint(){return this.startPoint}get length(){let t=0;return this._curves.forEach(s=>{t+=s.length}),t}calculateBoundingBox(){const t=this.getPoints(100),s=new U;return s.setFromPoints(t),s}transform(t){return this._boundingBoxNeedsUpdate=!0,this}get closed(){return!0}getPoints(t){const s=[];return this.curves.forEach(e=>{e.getPoints(t).forEach(n=>{s.push(new S(n.x,n.y))})}),s}}class Gt{constructor(){this.c0=0,this.c1=0,this.c2=0,this.c3=0}init(t,s,e,n){this.c0=t,this.c1=e,this.c2=-3*t+3*s-2*e-n,this.c3=2*t-2*s+e+n}initCatmullRom(t,s,e,n,i){this.init(s,e,i*(e-t),i*(n-s))}initNonuniformCatmullRom(t,s,e,n,i,h,r){let a=(s-t)/i-(e-t)/(i+h)+(e-s)/h,o=(e-s)/h-(n-s)/(h+r)+(n-e)/r;a*=h,o*=h,this.init(s,e,a,o)}calc(t){const s=t*t,e=s*t;return this.c0+this.c1*t+this.c2*s+this.c3*e}}class fs extends it{constructor(t=[],s=!1,e="centripetal",n=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new _,this._px=new Gt,this._py=new Gt,this._pz=new Gt,this._points=t.map(i=>new f(i)),this._closed=s,this._curveType=e,this._tension=n}get points(){return this._points}get closed(){return this._closed}get curveType(){return this._curveType}get tension(){return this._tension}get startPoint(){return this._points.length>0?this._points[0]:new f}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new f}get length(){if(this._points.length<2)return 0;let t=0;for(let s=1;s<this._points.length;s++)t+=this._points[s-1].distanceTo(this._points[s]);return this._closed&&this._points.length>2&&(t+=this._points[this._points.length-1].distanceTo(this._points[0])),t}getPoint(t,s=new f){const e=s,n=this._points,i=n.length;if(i===0)return e.set(0,0,0);if(i===1)return e.copy(n[0]);const h=(i-(this._closed?0:1))*t;let r=Math.floor(h),a=h-r;this._closed?r+=r>0?0:(Math.floor(Math.abs(r)/i)+1)*i:a===0&&r===i-1&&(r=i-2,a=1);let o,c;this._closed||r>0?o=n[(r-1)%i]:(this._tmp.subVectors(n[0],n[1]).add(n[0]),o=new f(this._tmp.x,this._tmp.y,this._tmp.z));const l=n[r%i],d=n[(r+1)%i];if(this._closed||r+2<i?c=n[(r+2)%i]:(this._tmp.subVectors(n[i-1],n[i-2]).add(n[i-1]),c=new f(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const m=this._curveType==="chordal"?.5:.25;let y=Math.pow(o.distanceToSquared(l),m),g=Math.pow(l.distanceToSquared(d),m),p=Math.pow(d.distanceToSquared(c),m);g<1e-4&&(g=1),y<1e-4&&(y=g),p<1e-4&&(p=g),this._px.initNonuniformCatmullRom(o.x,l.x,d.x,c.x,y,g,p),this._py.initNonuniformCatmullRom(o.y,l.y,d.y,c.y,y,g,p),this._pz.initNonuniformCatmullRom(o.z,l.z,d.z,c.z,y,g,p)}else this._curveType==="catmullrom"&&(this._px.initCatmullRom(o.x,l.x,d.x,c.x,this._tension),this._py.initCatmullRom(o.y,l.y,d.y,c.y,this._tension),this._pz.initCatmullRom(o.z,l.z,d.z,c.z,this._tension));return e.set(this._px.calc(a),this._py.calc(a),this._pz.calc(a)),e}getPoints(t){const s=[];for(let e=0;e<=t;e++)s.push(this.getPoint(e/t));return s}setPoints(t){this._points=t.map(s=>new f(s)),this._boundingBoxNeedsUpdate=!0}setClosed(t){this._closed!==t&&(this._closed=t,this._boundingBoxNeedsUpdate=!0)}setCurveType(t){this._curveType=t}setTension(t){this._tension=t}transform(t){return this._points=this._points.map(s=>{const e=new f;return e.copy(s),e.applyMatrix3d(t),e}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new j;const t=new j;return this._points.forEach(s=>{t.expandByPoint(s)}),t}}class V{constructor(t,s,e,n){this._degree=t,this._knots=[...s],this._controlPoints=e.map(i=>({x:i.x,y:i.y,z:i.z})),this._weights=n?[...n]:new Array(e.length).fill(1)}degree(){return this._degree}knots(){return[...this._knots]}controlPoints(){return this._controlPoints.map(t=>({x:t.x,y:t.y,z:t.z}))}weights(){return[...this._weights]}point(t){const s=this._controlPoints.map(e=>[e.x,e.y,e.z]);return tt(t,this._degree,this._knots,s,this._weights)}length(){const t=this._controlPoints.map(s=>[s.x,s.y,s.z]);return ys(this._degree,this._knots,t,this._weights)}static byKnotsControlPointsWeights(t,s,e,n){return new V(t,s,e,n)}static byPoints(t,s,e="Uniform"){let n;switch(e){case"Chord":n=ds(s,t);break;case"SqrtChord":n=ms(s,t);break;case"Uniform":default:n=us(s,t.length);break}const i=t.map(r=>({x:r[0],y:r[1],z:r[2]})),h=new Array(i.length).fill(1);return new V(s,n,i,h)}getParameterRange(){const t=this._knots[this._degree],s=this._knots[this._knots.length-this._degree-1];return{start:t,end:s}}getPoints(t){const s=[],{start:e,end:n}=this.getParameterRange();for(let i=0;i<=t;i++){const h=e+(n-e)*(i/t);s.push(this.point(h))}return s}isClosed(t=1e-6){const{start:s,end:e}=this.getParameterRange(),n=this.point(s),i=this.point(e),h=n[0]-i[0],r=n[1]-i[1],a=n[2]-i[2];return Math.sqrt(h*h+r*r+a*a)<t}static createClosedCurve(t,s,e="Chord"){if(t.length<4)throw new Error("At least 4 points are required for a closed NURBS curve");const n=new fs(t,!0,"centripetal"),i=Math.max(50,t.length*2),r=n.getPoints(i).map(a=>[a.x,a.y,a.z]);return V.byPoints(r,s,e)}}class Xt extends it{constructor(t,s,e,n,i){super();const h=arguments.length;if(h<2||h>5)throw N.AcCmErrors.ILLEGAL_PARAMETERS;if(this._degree=3,this._closed=!1,Array.isArray(s)){this._controlPoints=t;let r,a=3,o=!1;if(h>=3&&(Array.isArray(e)?(r=e,h>=4&&(a=n||3),h>=5&&(o=i)):e!==void 0&&(a=e||3,h>=4&&(o=n))),e===void 0&&h>=4&&(a=n||3,h>=5&&(o=i)),this._degree=a,this._closed=o,this._controlPoints.length<this._degree+1)throw N.AcCmErrors.ILLEGAL_PARAMETERS;this._nurbsCurve=V.byKnotsControlPointsWeights(this._degree,s,this._controlPoints,r)}else{if(this._fitPoints=t,this._knotParameterization=s,h>=3&&(this._degree=e||3),h>=4&&(this._closed=n),this._fitPoints.length<this._degree+1)throw N.AcCmErrors.ILLEGAL_PARAMETERS;const r=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=V.byPoints(r,this._degree,this._knotParameterization),this._controlPoints=this._nurbsCurve.controlPoints()}this._closed&&this.buildCurve()}buildCurve(){if(this._fitPoints&&this._knotParameterization){if(this._closed)this._nurbsCurve=V.createClosedCurve(this._fitPoints,this._degree,this._knotParameterization);else{const t=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=V.byPoints(t,this._degree,this._knotParameterization)}this._controlPoints=this._nurbsCurve.controlPoints()}else if(this._controlPoints)if(this._closed){const t=this._knotParameterization||"Chord";this._nurbsCurve=V.createClosedCurve(this._controlPoints,this._degree,t),this._controlPoints=this._nurbsCurve.controlPoints()}else{const t=this._nurbsCurve.knots(),s=this._nurbsCurve.weights();this._nurbsCurve=V.byKnotsControlPointsWeights(this._degree,t,this._controlPoints,s)}}setClosed(t){this._closed!==t&&(this._closed=t,this._boundingBoxNeedsUpdate=!0,this.buildCurve())}get degree(){return this._degree}get knotParameterization(){return this._knotParameterization}get startPoint(){const t=this._nurbsCurve.knots(),s=this._nurbsCurve.degree(),e=t[s],n=this._nurbsCurve.point(e);return new f(n[0],n[1],n[2])}get endPoint(){const t=this._nurbsCurve.knots(),s=this._nurbsCurve.degree(),e=t[t.length-s-1],n=this._nurbsCurve.point(e);return new f(n[0],n[1],n[2])}get length(){return this._nurbsCurve.length()}getFitPointAt(t){if(!this._fitPoints)throw new Error("No fit points in this spline");const s=this._fitPoints.length,e=t<0||t>=s?s-1:t,n=this._fitPoints[e];return{x:n.x,y:n.y,z:n.z||0}}getControlPointAt(t){const s=this._controlPoints.length,e=t<0||t>=s?s-1:t;return this._controlPoints[e]}getPoints(t=100){const s=this._nurbsCurve,e=[],n=s.knots(),i=this._nurbsCurve.degree(),h=n[i],r=n[n.length-i-1],a=(r-h)/(t-1);for(let o=0;o<t;o++){const c=o===t-1?r:h+o*a,l=s.point(c);e.push(new f(l[0],l[1],l[2]))}return e}getCurvePoints(t,s){const e=[],n=t.knots(),i=n[3],r=(n[n.length-4]-i)/(s-1);for(let a=0;a<s;a++){const o=i+a*r;e.push(t.point(o))}return e}calculateBoundingBox(){const t=this.getPoints(100);return new j().setFromPoints(t)}get closed(){return this._closed}set closed(t){this.setClosed(t)}transform(t){return this._boundingBoxNeedsUpdate=!0,this}toNurbsPoints(t){const s=new Array(t.length);return t.forEach((e,n)=>{s[n]=[e.x,e.y,e.z||0]}),s}static createClosedSpline(t,s="Uniform",e=3){if(t.length<e+1)throw new Error(`At least ${e+1} points are required for a degree ${e} closed spline`);return new Xt(t,s,e,!0)}}x.AcGeArea2d=Es,x.AcGeBox2d=U,x.AcGeBox3d=j,x.AcGeCatmullRomCurve3d=fs,x.AcGeCircArc2d=nt,x.AcGeCircArc3d=ht,x.AcGeCurve2d=H,x.AcGeEllipseArc2d=Vt,x.AcGeEllipseArc3d=jt,x.AcGeEuler=Lt,x.AcGeGeometryUtil=ls,x.AcGeLine2d=Ft,x.AcGeLine3d=rt,x.AcGeLoop2d=Ts,x.AcGeMathUtil=B,x.AcGeMatrix2d=O,x.AcGeMatrix3d=Q,x.AcGeNurbsCurve=V,x.AcGePlane=et,x.AcGePoint2d=S,x.AcGePoint3d=f,x.AcGePolyline2d=Rs,x.AcGeQuaternion=st,x.AcGeShape2d=Ut,x.AcGeSpline3d=Xt,x.AcGeTol=It,x.AcGeVector2d=C,x.AcGeVector3d=_,x.DEFAULT_TOL=Rt,x.DEG2RAD=wt,x.FLOAT_TOL=D,x.ORIGIN_POINT_2D=ws,x.ORIGIN_POINT_3D=Et,x.RAD2DEG=Pt,x.TAU=I,x.basisFunction=ut,x.calculateCurveLength=ys,x.ceilPowerOfTwo=is,x.clamp=F,x.damp=Qt,x.degToRad=ss,x.euclideanModulo=bt,x.evaluateNurbsPoint=tt,x.floorPowerOfTwo=rs,x.generateChordKnots=ds,x.generateSqrtChordKnots=ms,x.generateUUID=Yt,x.generateUniformKnots=us,x.intPartLength=St,x.interpolateControlPoints=Ps,x.inverseLerp=Ot,x.isBetween=hs,x.isBetweenAngle=os,x.isPointInPolygon=Tt,x.isPolygonIntersect=cs,x.isPowerOfTwo=ns,x.lerp=Ct,x.mapLinear=Zt,x.normalizeAngle=v,x.pingpong=Kt,x.radToDeg=es,x.randFloat=Jt,x.randFloatSpread=vt,x.randInt=Wt,x.relativeEps=as,x.seededRandom=ts,x.smootherstep=$t,x.smoothstep=Ht,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(Y,te){typeof exports=="object"&&typeof module<"u"?te(exports,require("@mlightcad/common")):typeof define=="function"&&define.amd?define(["exports","@mlightcad/common"],te):(Y=typeof globalThis<"u"?globalThis:Y||self,te(Y["geometry-engine"]={},Y.common))})(this,function(Y,te){"use strict";const Ht=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];let Ur=1234567;const hr=Math.PI/180,lr=180/Math.PI;function Rr(){const E=Math.random()*4294967295|0,e=Math.random()*4294967295|0,i=Math.random()*4294967295|0,a=Math.random()*4294967295|0;return(Ht[E&255]+Ht[E>>8&255]+Ht[E>>16&255]+Ht[E>>24&255]+"-"+Ht[e&255]+Ht[e>>8&255]+"-"+Ht[e>>16&15|64]+Ht[e>>24&255]+"-"+Ht[i&63|128]+Ht[i>>8&255]+"-"+Ht[i>>16&255]+Ht[i>>24&255]+Ht[a&255]+Ht[a>>8&255]+Ht[a>>16&255]+Ht[a>>24&255]).toLowerCase()}function Be(E,e,i){return Math.max(e,Math.min(i,E))}function ur(E,e){return(E%e+e)%e}function Vr(E,e,i,a,u){return a+(E-e)*(u-a)/(i-e)}function Dr(E,e,i){return E!==e?(i-E)/(e-E):0}function cr(E,e,i){return(1-i)*E+i*e}function Fr(E,e,i,a){return cr(E,e,1-Math.exp(-i*a))}function Or(E,e=1){return e-Math.abs(ur(E,e*2)-e)}function qr(E,e,i){return E<=e?0:E>=i?1:(E=(E-e)/(i-e),E*E*(3-2*E))}function Gr(E,e,i){return E<=e?0:E>=i?1:(E=(E-e)/(i-e),E*E*E*(E*(E*6-15)+10))}function Kr(E,e){return E+Math.floor(Math.random()*(e-E+1))}function jr(E,e){return E+Math.random()*(e-E)}function Xr(E){return E*(.5-Math.random())}function Wr(E){E!==void 0&&(Ur=E);let e=Ur+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function Zr(E){return E*hr}function Yr(E){return E*lr}function Hr(E){return(E&E-1)===0&&E!==0}function Qr(E){return Math.pow(2,Math.ceil(Math.log(E)/Math.LN2))}function Jr(E){return Math.pow(2,Math.floor(Math.log(E)/Math.LN2))}function Mn(E){const e=Math.PI*2;return(E%e+e)%e}function $r(E,e,i){return E>e&&E<i||E>i&&E<e}function ti(E,e,i,a=!1){return E=Mn(E),e=Mn(e),i=Mn(i),a?e>i?E<=e&&E>=i:E<=e||E>=i:e<i?E>=e&&E<=i:E>=e||E<=i}function vr(E){return E=Math.abs(E),E<1?0:Math.ceil(Math.log10(Math.abs(E)+1))}function ei(E,e=1e-7){const i=vr(E);return Math.max(Math.pow(10,i)*e,e)}const Ut={DEG2RAD:hr,RAD2DEG:lr,generateUUID:Rr,clamp:Be,euclideanModulo:ur,mapLinear:Vr,inverseLerp:Dr,lerp:cr,damp:Fr,pingpong:Or,smoothstep:qr,smootherstep:Gr,randInt:Kr,randFloat:jr,randFloatSpread:Xr,seededRandom:Wr,degToRad:Zr,radToDeg:Yr,isPowerOfTwo:Hr,ceilPowerOfTwo:Qr,floorPowerOfTwo:Jr,normalizeAngle:Mn,isBetween:$r,isBetweenAngle:ti,intPartLength:vr,relativeEps:ei},Nn=class Nn{constructor(e,i){this.x=0,this.y=0;const a=+(e!==void 0)+ +(i!==void 0);if(a!==0){if(a===1&&e instanceof Array){this.x=e[0],this.y=e[1];return}if(a===1){const{x:u,y:_}=e;this.x=u,this.y=_;return}if(a===2){this.x=e,this.y=i;return}throw te.AcCmErrors.ILLEGAL_PARAMETERS}}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,i){return this.x=e,this.y=i,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,i){switch(e){case 0:this.x=i;break;case 1:this.y=i;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new Nn(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,i){return this.x=e.x+i.x,this.y=e.y+i.y,this}addScaledVector(e,i){return this.x+=e.x*i,this.y+=e.y*i,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,i){return this.x=e.x-i.x,this.y=e.y-i.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix2d(e){const i=this.x,a=this.y,u=e.elements;return this.x=u[0]*i+u[3]*a+u[6],this.y=u[1]*i+u[4]*a+u[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,i){return this.x=Math.max(e.x,Math.min(i.x,this.x)),this.y=Math.max(e.y,Math.min(i.y,this.y)),this}clampScalar(e,i){return this.x=Math.max(e,Math.min(i,this.x)),this.y=Math.max(e,Math.min(i,this.y)),this}clampLength(e,i){const a=this.length();return this.divideScalar(a||1).multiplyScalar(Math.max(e,Math.min(i,a)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const i=Math.sqrt(this.lengthSq()*e.lengthSq());if(i===0)return Math.PI/2;const a=this.dot(e)/i;return Math.acos(Math.max(-1,Math.min(1,a)))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const i=this.x-e.x,a=this.y-e.y;return i*i+a*a}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,i){return this.x+=(e.x-this.x)*i,this.y+=(e.y-this.y)*i,this}lerpVectors(e,i,a){return this.x=e.x+(i.x-e.x)*a,this.y=e.y+(i.y-e.y)*a,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,i=0){return this.x=e[i],this.y=e[i+1],this}toArray(e=[],i=0){return e[i]=this.x,e[i+1]=this.y,e}rotateAround(e,i){const a=Math.cos(i),u=Math.sin(i),_=this.x-e.x,y=this.y-e.y;return this.x=_*a-y*u+e.x,this.y=_*u+y*a+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}relativeEps(e=1e-7){return Math.min(Ut.relativeEps(this.x,e),Ut.relativeEps(this.y,e))}*[Symbol.iterator](){yield this.x,yield this.y}};Nn.EMPTY=Object.freeze(new Nn(0,0));let Bt=Nn;const En=class En{constructor(e,i,a,u,_,y,g,x,f){this.elements=[1,0,0,0,1,0,0,0,1],e!=null&&i!=null&&a!=null&&u!=null&&_!=null&&y!=null&&g!=null&&x!=null&&f!=null&&this.set(e,i,a,u,_,y,g,x,f)}set(e,i,a,u,_,y,g,x,f){const A=this.elements;return A[0]=e,A[1]=u,A[2]=g,A[3]=i,A[4]=_,A[5]=x,A[6]=a,A[7]=y,A[8]=f,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const i=this.elements,a=e.elements;return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],this}extractBasis(e,i,a){return e.setFromMatrix3Column(this,0),i.setFromMatrix3Column(this,1),a.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const i=e.elements;return this.set(i[0],i[4],i[8],i[1],i[5],i[9],i[2],i[6],i[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,i){const a=e.elements,u=i.elements,_=this.elements,y=a[0],g=a[3],x=a[6],f=a[1],A=a[4],p=a[7],N=a[2],k=a[5],U=a[8],K=u[0],H=u[3],W=u[6],wt=u[1],Pt=u[4],mt=u[7],Z=u[2],ct=u[5],lt=u[8];return _[0]=y*K+g*wt+x*Z,_[3]=y*H+g*Pt+x*ct,_[6]=y*W+g*mt+x*lt,_[1]=f*K+A*wt+p*Z,_[4]=f*H+A*Pt+p*ct,_[7]=f*W+A*mt+p*lt,_[2]=N*K+k*wt+U*Z,_[5]=N*H+k*Pt+U*ct,_[8]=N*W+k*mt+U*lt,this}multiplyScalar(e){const i=this.elements;return i[0]*=e,i[3]*=e,i[6]*=e,i[1]*=e,i[4]*=e,i[7]*=e,i[2]*=e,i[5]*=e,i[8]*=e,this}determinant(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],y=e[4],g=e[5],x=e[6],f=e[7],A=e[8];return i*y*A-i*g*f-a*_*A+a*g*x+u*_*f-u*y*x}invert(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],y=e[4],g=e[5],x=e[6],f=e[7],A=e[8],p=A*y-g*f,N=g*x-A*_,k=f*_-y*x,U=i*p+a*N+u*k;if(U===0)return this.set(0,0,0,0,0,0,0,0,0);const K=1/U;return e[0]=p*K,e[1]=(u*f-A*a)*K,e[2]=(g*a-u*y)*K,e[3]=N*K,e[4]=(A*i-u*x)*K,e[5]=(u*_-g*i)*K,e[6]=k*K,e[7]=(a*x-f*i)*K,e[8]=(y*i-a*_)*K,this}transpose(){let e;const i=this.elements;return e=i[1],i[1]=i[3],i[3]=e,e=i[2],i[2]=i[6],i[6]=e,e=i[5],i[5]=i[7],i[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const i=this.elements;return e.elements[0]=i[0],e.elements[1]=i[3],e.elements[2]=i[6],e.elements[3]=i[1],e.elements[4]=i[4],e.elements[5]=i[7],e.elements[6]=i[2],e.elements[7]=i[5],e.elements[8]=i[8],this}setUvTransform(e,i,a,u,_,y,g){const x=Math.cos(_),f=Math.sin(_);return this.set(a*x,a*f,-a*(x*y+f*g)+y+e,-u*f,u*x,-u*(-f*y+x*g)+g+i,0,0,1),this}scale(e,i){return this.premultiply(_r.makeScale(e,i)),this}rotate(e){return this.premultiply(_r.makeRotation(-e)),this}translate(e,i){return this.premultiply(_r.makeTranslation(e,i)),this}makeTranslation(e,i){return e instanceof Bt?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,i,0,0,1),this}makeRotation(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,-a,0,a,i,0,0,0,1),this}makeScale(e,i){return this.set(e,0,0,0,i,0,0,0,1),this}equals(e){const i=this.elements,a=e.elements;for(let u=0;u<9;u++)if(i[u]!==a[u])return!1;return!0}fromArray(e,i=0){for(let a=0;a<9;a++)this.elements[a]=e[a+i];return this}toArray(e=[],i=0){const a=this.elements;return e[i]=a[0],e[i+1]=a[1],e[i+2]=a[2],e[i+3]=a[3],e[i+4]=a[4],e[i+5]=a[5],e[i+6]=a[6],e[i+7]=a[7],e[i+8]=a[8],e}clone(){return new En().fromArray(this.elements)}};En.IDENTITY=Object.freeze(new En);let sn=En;const _r=new sn,He=1e-6,Kt=2*Math.PI,Bi={x:0,y:0},dr={x:0,y:0,z:0};class fr{constructor(){this.equalPointTol=He,this.equalVectorTol=He}equalPoint2d(e,i){return new Bt(e).sub(i).length()<this.equalPointTol}equalPoint3d(e,i){return new Q(e).sub(i).length()<this.equalPointTol}static equalToZero(e,i=He){return e<i&&e>-i}static equal(e,i,a=He){return Math.abs(e-i)<a}static great(e,i,a=He){return e-i>a}static less(e,i,a=He){return e-i<a}}const mr=new fr;function gr(E,e,i=!1){const a=E.x,u=E.y;let _=!1;const y=e.length;for(let g=0,x=y-1;g<y;x=g++){const f=e[g].x,A=e[g].y,p=e[x].x,N=e[x].y;let k=A>u!=N>u;i&&(k=A>=u!=N>=u),k&&a<(p-f)*(u-A)/(N-A)+f&&(_=!_)}return _}function ni(E,e){if(E.length===0||e.length===0)return!1;const i=new de().setFromPoints(E),a=new de().setFromPoints(e);if(!i.intersectsBox(a))return!1;for(let u=0;u<E.length;){if(gr(E[u],e,!0))return!0;u<E.length-1&&mr.equalPoint2d(E[u+1],E[u])&&++u,++u}return!1}const ri={isPointInPolygon:gr,isPolygonIntersect:ni};function ii(E,e){const i=[],a=e-1,u=E;for(let _=0;_<=u;_++)i.push(0);for(let _=1;_<=a-u;_++)i.push(_);for(let _=0;_<=u;_++)i.push(a-u+1);return i}function si(E,e){const i=e.length-1,a=E,u=[0];let _=0;for(let g=1;g<=i;g++){const x=e[g][0]-e[g-1][0],f=e[g][1]-e[g-1][1],A=e[g][2]-e[g-1][2],p=Math.sqrt(x*x+f*f+A*A);_+=p,u.push(_)}const y=[];for(let g=0;g<=a;g++)y.push(0);for(let g=1;g<=i-a;g++){const x=u[g]/_;y.push(x*(i-a+1))}for(let g=0;g<=a;g++)y.push(i-a+1);return y}function ai(E,e){const i=e.length-1,a=E,u=[0];let _=0;for(let g=1;g<=i;g++){const x=e[g][0]-e[g-1][0],f=e[g][1]-e[g-1][1],A=e[g][2]-e[g-1][2],p=Math.sqrt(x*x+f*f+A*A),N=Math.sqrt(p);_+=N,u.push(_)}const y=[];for(let g=0;g<=a;g++)y.push(0);for(let g=1;g<=i-a;g++){const x=u[g]/_;y.push(x*(i-a+1))}for(let g=0;g<=a;g++)y.push(i-a+1);return y}function nr(E,e,i,a){if(e===0)return i>=a[E]&&i<a[E+1]?1:0;const u=a[E+e]-a[E],_=a[E+e+1]-a[E+1],y=u>1e-10?(i-a[E])/u:0,g=_>1e-10?(a[E+e+1]-i)/_:0;return y*nr(E,e-1,i,a)+g*nr(E+1,e-1,i,a)}function Pn(E,e,i,a,u){const _=a.length-1,y=e;if(E=Math.max(i[y],Math.min(i[_+1],E)),Math.abs(E-i[_+1])<1e-8)return[...a[_]];if(Math.abs(E-i[y])<1e-8)return[...a[0]];const g=[0,0,0];let x=0;for(let f=0;f<=_;f++){const A=nr(f,y,E,i),p=u[f]*A;g[0]+=a[f][0]*p,g[1]+=a[f][1]*p,g[2]+=a[f][2]*p,x+=p}if(x<1e-10){const f=i[i.length-y-1];if(Math.abs(E-f)<1e-8)return[...a[_]];if(Math.abs(E-i[y])<1e-8)return[...a[0]]}return x>1e-10&&(g[0]/=x,g[1]/=x,g[2]/=x),g}function oi(E,e,i,a){const u=E,_=e[u],y=e[e.length-u-1];let g=0;const x=1e3,f=(y-_)/x;let A=Pn(_,E,e,i,a);for(let K=1;K<=x;K++){const H=_+K*f,W=Pn(H,E,e,i,a),wt=W[0]-A[0],Pt=W[1]-A[1],mt=W[2]-A[2];g+=Math.sqrt(wt*wt+Pt*Pt+mt*mt),A=W}const p=Pn(y,E,e,i,a),N=p[0]-A[0],k=p[1]-A[1],U=p[2]-A[2];return g+=Math.sqrt(N*N+k*k+U*U),g}function Li(E){return E.map(e=>[...e])}class An{constructor(e=0,i=0,a=0,u=1){this._x=e,this._y=i,this._z=a,this._w=u}static slerpFlat(e,i,a,u,_,y,g){let x=a[u+0],f=a[u+1],A=a[u+2],p=a[u+3];const N=_[y+0],k=_[y+1],U=_[y+2],K=_[y+3];if(g===0){e[i+0]=x,e[i+1]=f,e[i+2]=A,e[i+3]=p;return}if(g===1){e[i+0]=N,e[i+1]=k,e[i+2]=U,e[i+3]=K;return}if(p!==K||x!==N||f!==k||A!==U){let H=1-g;const W=x*N+f*k+A*U+p*K,wt=W>=0?1:-1,Pt=1-W*W;if(Pt>Number.EPSILON){const Z=Math.sqrt(Pt),ct=Math.atan2(Z,W*wt);H=Math.sin(H*ct)/Z,g=Math.sin(g*ct)/Z}const mt=g*wt;if(x=x*H+N*mt,f=f*H+k*mt,A=A*H+U*mt,p=p*H+K*mt,H===1-g){const Z=1/Math.sqrt(x*x+f*f+A*A+p*p);x*=Z,f*=Z,A*=Z,p*=Z}}e[i]=x,e[i+1]=f,e[i+2]=A,e[i+3]=p}static multiplyQuaternionsFlat(e,i,a,u,_,y){const g=a[u],x=a[u+1],f=a[u+2],A=a[u+3],p=_[y],N=_[y+1],k=_[y+2],U=_[y+3];return e[i]=g*U+A*p+x*k-f*N,e[i+1]=x*U+A*N+f*p-g*k,e[i+2]=f*U+A*k+g*N-x*p,e[i+3]=A*U-g*p-x*N-f*k,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,i,a,u){return this._x=e,this._y=i,this._z=a,this._w=u,this._onChangeCallback(),this}clone(){return new An(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,i=!0){const a=e.x,u=e.y,_=e.z,y=e.order,g=Math.cos,x=Math.sin,f=g(a/2),A=g(u/2),p=g(_/2),N=x(a/2),k=x(u/2),U=x(_/2);switch(y){case"XYZ":this._x=N*A*p+f*k*U,this._y=f*k*p-N*A*U,this._z=f*A*U+N*k*p,this._w=f*A*p-N*k*U;break;case"YXZ":this._x=N*A*p+f*k*U,this._y=f*k*p-N*A*U,this._z=f*A*U-N*k*p,this._w=f*A*p+N*k*U;break;case"ZXY":this._x=N*A*p-f*k*U,this._y=f*k*p+N*A*U,this._z=f*A*U+N*k*p,this._w=f*A*p-N*k*U;break;case"ZYX":this._x=N*A*p-f*k*U,this._y=f*k*p+N*A*U,this._z=f*A*U-N*k*p,this._w=f*A*p+N*k*U;break;case"YZX":this._x=N*A*p+f*k*U,this._y=f*k*p+N*A*U,this._z=f*A*U-N*k*p,this._w=f*A*p-N*k*U;break;case"XZY":this._x=N*A*p-f*k*U,this._y=f*k*p-N*A*U,this._z=f*A*U+N*k*p,this._w=f*A*p+N*k*U;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+y)}return i===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,i){const a=i/2,u=Math.sin(a);return this._x=e.x*u,this._y=e.y*u,this._z=e.z*u,this._w=Math.cos(a),this._onChangeCallback(),this}setFromRotationMatrix(e){const i=e.elements,a=i[0],u=i[4],_=i[8],y=i[1],g=i[5],x=i[9],f=i[2],A=i[6],p=i[10],N=a+g+p;if(N>0){const k=.5/Math.sqrt(N+1);this._w=.25/k,this._x=(A-x)*k,this._y=(_-f)*k,this._z=(y-u)*k}else if(a>g&&a>p){const k=2*Math.sqrt(1+a-g-p);this._w=(A-x)/k,this._x=.25*k,this._y=(u+y)/k,this._z=(_+f)/k}else if(g>p){const k=2*Math.sqrt(1+g-a-p);this._w=(_-f)/k,this._x=(u+y)/k,this._y=.25*k,this._z=(x+A)/k}else{const k=2*Math.sqrt(1+p-a-g);this._w=(y-u)/k,this._x=(_+f)/k,this._y=(x+A)/k,this._z=.25*k}return this._onChangeCallback(),this}setFromUnitVectors(e,i){let a=e.dot(i)+1;return a<Number.EPSILON?(a=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=a):(this._x=0,this._y=-e.z,this._z=e.y,this._w=a)):(this._x=e.y*i.z-e.z*i.y,this._y=e.z*i.x-e.x*i.z,this._z=e.x*i.y-e.y*i.x,this._w=a),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Be(this.dot(e),-1,1)))}rotateTowards(e,i){const a=this.angleTo(e);if(a===0)return this;const u=Math.min(1,i/a);return this.slerp(e,u),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,i){const a=e._x,u=e._y,_=e._z,y=e._w,g=i._x,x=i._y,f=i._z,A=i._w;return this._x=a*A+y*g+u*f-_*x,this._y=u*A+y*x+_*g-a*f,this._z=_*A+y*f+a*x-u*g,this._w=y*A-a*g-u*x-_*f,this._onChangeCallback(),this}slerp(e,i){if(i===0)return this;if(i===1)return this.copy(e);const a=this._x,u=this._y,_=this._z,y=this._w;let g=y*e._w+a*e._x+u*e._y+_*e._z;if(g<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,g=-g):this.copy(e),g>=1)return this._w=y,this._x=a,this._y=u,this._z=_,this;const x=1-g*g;if(x<=Number.EPSILON){const k=1-i;return this._w=k*y+i*this._w,this._x=k*a+i*this._x,this._y=k*u+i*this._y,this._z=k*_+i*this._z,this.normalize(),this}const f=Math.sqrt(x),A=Math.atan2(f,g),p=Math.sin((1-i)*A)/f,N=Math.sin(i*A)/f;return this._w=y*p+this._w*N,this._x=a*p+this._x*N,this._y=u*p+this._y*N,this._z=_*p+this._z*N,this._onChangeCallback(),this}slerpQuaternions(e,i,a){return this.copy(e).slerp(i,a)}random(){const e=2*Math.PI*Math.random(),i=2*Math.PI*Math.random(),a=Math.random(),u=Math.sqrt(1-a),_=Math.sqrt(a);return this.set(u*Math.sin(e),u*Math.cos(e),_*Math.sin(i),_*Math.cos(i))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,i=0){return this._x=e[i],this._y=e[i+1],this._z=e[i+2],this._w=e[i+3],this._onChangeCallback(),this}toArray(e=[],i=0){return e[i]=this._x,e[i+1]=this._y,e[i+2]=this._z,e[i+3]=this._w,e}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}const ee=class ee{constructor(e,i,a){this.x=0,this.y=0,this.z=0;const u=+(e!==void 0)+ +(i!==void 0)+ +(a!==void 0);if(u!==0){if(u===1&&e instanceof Array){this.x=e[0],this.y=e[1],this.z=e[2];return}if(u===1){const{x:_,y,z:g}=e;this.x=_,this.y=y,this.z=g||0;return}if(u===3){this.x=e,this.y=i,this.z=a;return}throw te.AcCmErrors.ILLEGAL_PARAMETERS}}set(e,i,a){return a===void 0&&(a=this.z),this.x=e,this.y=i,this.z=a,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,i){switch(e){case 0:this.x=i;break;case 1:this.y=i;break;case 2:this.z=i;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new ee(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z||0,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z||0,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,i){return this.x=e.x+i.x,this.y=e.y+i.y,this.z=e.z+i.z,this}addScaledVector(e,i){return this.x+=e.x*i,this.y+=e.y*i,this.z+=e.z*i,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,i){return this.x=e.x-i.x,this.y=e.y-i.y,this.z=e.z-i.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,i){return this.x=e.x*i.x,this.y=e.y*i.y,this.z=e.z*i.z,this}applyEuler(e){return this.applyQuaternion(hi.setFromEuler(e))}applyAxisAngle(e,i){return this.applyQuaternion(hi.setFromAxisAngle(e,i))}applyMatrix3(e){const i=this.x,a=this.y,u=this.z,_=e.elements;return this.x=_[0]*i+_[3]*a+_[6]*u,this.y=_[1]*i+_[4]*a+_[7]*u,this.z=_[2]*i+_[5]*a+_[8]*u,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix3d(e){const i=this.x,a=this.y,u=this.z,_=e.elements,y=1/(_[3]*i+_[7]*a+_[11]*u+_[15]);return this.x=(_[0]*i+_[4]*a+_[8]*u+_[12])*y,this.y=(_[1]*i+_[5]*a+_[9]*u+_[13])*y,this.z=(_[2]*i+_[6]*a+_[10]*u+_[14])*y,this}applyQuaternion(e){const i=this.x,a=this.y,u=this.z,_=e.x,y=e.y,g=e.z,x=e.w,f=2*(y*u-g*a),A=2*(g*i-_*u),p=2*(_*a-y*i);return this.x=i+x*f+y*p-g*A,this.y=a+x*A+g*f-_*p,this.z=u+x*p+_*A-y*f,this}transformDirection(e){const i=this.x,a=this.y,u=this.z,_=e.elements;return this.x=_[0]*i+_[4]*a+_[8]*u,this.y=_[1]*i+_[5]*a+_[9]*u,this.z=_[2]*i+_[6]*a+_[10]*u,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,i){return this.x=Math.max(e.x,Math.min(i.x,this.x)),this.y=Math.max(e.y,Math.min(i.y,this.y)),this.z=Math.max(e.z,Math.min(i.z,this.z)),this}clampScalar(e,i){return this.x=Math.max(e,Math.min(i,this.x)),this.y=Math.max(e,Math.min(i,this.y)),this.z=Math.max(e,Math.min(i,this.z)),this}clampLength(e,i){const a=this.length();return this.divideScalar(a||1).multiplyScalar(Math.max(e,Math.min(i,a)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}isParallelTo(e){const i=this.dot(e),a=this.length(),u=e.length();return Math.abs(i)===a*u}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,i){return this.x+=(e.x-this.x)*i,this.y+=(e.y-this.y)*i,this.z+=(e.z-this.z)*i,this}lerpVectors(e,i,a){return this.x=e.x+(i.x-e.x)*a,this.y=e.y+(i.y-e.y)*a,this.z=e.z+(i.z-e.z)*a,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,i){const a=e.x,u=e.y,_=e.z,y=i.x,g=i.y,x=i.z;return this.x=u*x-_*g,this.y=_*y-a*x,this.z=a*g-u*y,this}projectOnVector(e){const i=e.lengthSq();if(i===0)return this.set(0,0,0);const a=e.dot(this)/i;return this.copy(e).multiplyScalar(a)}projectOnPlane(e){return pr.copy(this).projectOnVector(e),this.sub(pr)}reflect(e){return this.sub(pr.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const i=Math.sqrt(this.lengthSq()*e.lengthSq());if(i===0)return Math.PI/2;const a=this.dot(e)/i;return Math.acos(Math.max(-1,Math.min(1,a)))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const i=this.x-e.x,a=this.y-e.y,u=this.z-e.z;return i*i+a*a+u*u}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromMatrixPosition(e){const i=e.elements;return this.x=i[12],this.y=i[13],this.z=i[14],this}setFromMatrixScale(e){const i=this.setFromMatrixColumn(e,0).length(),a=this.setFromMatrixColumn(e,1).length(),u=this.setFromMatrixColumn(e,2).length();return this.x=i,this.y=a,this.z=u,this}setFromMatrixColumn(e,i){return this.fromArray(e.elements,i*4)}setFromMatrix3Column(e,i){return this.fromArray(e.elements,i*3)}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,i=0){return this.x=e[i],this.y=e[i+1],this.z=e[i+2],this}toArray(e=[],i=0){return e[i]=this.x,e[i+1]=this.y,e[i+2]=this.z,e}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,i=Math.random()*2-1,a=Math.sqrt(1-i*i);return this.x=a*Math.cos(e),this.y=i,this.z=a*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};ee.X_AXIS=Object.freeze(new ee(1,0,0)),ee.NEGATIVE_X_AXIS=Object.freeze(new ee(-1,0,0)),ee.Y_AXIS=Object.freeze(new ee(0,1,0)),ee.NEGATIVE_Y_AXIS=Object.freeze(new ee(0,-1,0)),ee.Z_AXIS=Object.freeze(new ee(0,0,1)),ee.NEGATIVE_Z_AXIS=Object.freeze(new ee(0,0,-1));let Q=ee;const pr=new Q,hi=new An,Bn=class Bn{constructor(e,i,a,u,_,y,g,x,f,A,p,N,k,U,K,H){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!=null&&i!=null&&a!=null&&u!=null&&_!=null&&y!=null&&g!=null&&x!=null&&f!=null&&A!=null&&p!=null&&N!=null&&k!=null&&U!=null&&K!=null&&H!=null&&this.set(e,i,a,u,_,y,g,x,f,A,p,N,k,U,K,H)}set(e,i,a,u,_,y,g,x,f,A,p,N,k,U,K,H){const W=this.elements;return W[0]=e,W[4]=i,W[8]=a,W[12]=u,W[1]=_,W[5]=y,W[9]=g,W[13]=x,W[2]=f,W[6]=A,W[10]=p,W[14]=N,W[3]=k,W[7]=U,W[11]=K,W[15]=H,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Bn().fromArray(this.elements)}copy(e){const i=this.elements,a=e.elements;return i[0]=a[0],i[1]=a[1],i[2]=a[2],i[3]=a[3],i[4]=a[4],i[5]=a[5],i[6]=a[6],i[7]=a[7],i[8]=a[8],i[9]=a[9],i[10]=a[10],i[11]=a[11],i[12]=a[12],i[13]=a[13],i[14]=a[14],i[15]=a[15],this}copyPosition(e){const i=this.elements,a=e.elements;return i[12]=a[12],i[13]=a[13],i[14]=a[14],this}setFromMatrix3(e){const i=e.elements;return this.set(i[0],i[3],i[6],0,i[1],i[4],i[7],0,i[2],i[5],i[8],0,0,0,0,1),this}setFromExtrusionDirection(e){if(mr.equalPoint3d(e,Q.Z_AXIS))this.identity();else{const i=new Q(1,0,0);Math.abs(e.x)<1/64&&Math.abs(e.y)<1/64?i.crossVectors(Q.Y_AXIS,e).normalize():i.crossVectors(Q.Z_AXIS,e).normalize();const a=e.clone().cross(i).normalize();this.set(i.x,i.y,i.z,0,a.x,a.y,a.z,0,e.x,e.y,e.z,0,0,0,0,1)}return this}extractBasis(e,i,a){return e.setFromMatrixColumn(this,0),i.setFromMatrixColumn(this,1),a.setFromMatrixColumn(this,2),this}makeBasis(e,i,a){return this.set(e.x,i.x,a.x,0,e.y,i.y,a.y,0,e.z,i.z,a.z,0,0,0,0,1),this}extractRotation(e){const i=this.elements,a=e.elements,u=1/on.setFromMatrixColumn(e,0).length(),_=1/on.setFromMatrixColumn(e,1).length(),y=1/on.setFromMatrixColumn(e,2).length();return i[0]=a[0]*u,i[1]=a[1]*u,i[2]=a[2]*u,i[3]=0,i[4]=a[4]*_,i[5]=a[5]*_,i[6]=a[6]*_,i[7]=0,i[8]=a[8]*y,i[9]=a[9]*y,i[10]=a[10]*y,i[11]=0,i[12]=0,i[13]=0,i[14]=0,i[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Ti,e,Ui)}lookAt(e,i,a){const u=this.elements;return ae.subVectors(e,i),ae.lengthSq()===0&&(ae.z=1),ae.normalize(),De.crossVectors(a,ae),De.lengthSq()===0&&(Math.abs(a.z)===1?ae.x+=1e-4:ae.z+=1e-4,ae.normalize(),De.crossVectors(a,ae)),De.normalize(),rr.crossVectors(ae,De),u[0]=De.x,u[4]=rr.x,u[8]=ae.x,u[1]=De.y,u[5]=rr.y,u[9]=ae.y,u[2]=De.z,u[6]=rr.z,u[10]=ae.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,i){const a=e.elements,u=i.elements,_=this.elements,y=a[0],g=a[4],x=a[8],f=a[12],A=a[1],p=a[5],N=a[9],k=a[13],U=a[2],K=a[6],H=a[10],W=a[14],wt=a[3],Pt=a[7],mt=a[11],Z=a[15],ct=u[0],lt=u[4],Rt=u[8],Xt=u[12],Vt=u[1],jt=u[5],Qt=u[9],oe=u[13],he=u[2],le=u[6],Ft=u[10],Wt=u[14],j=u[3],bt=u[7],Zt=u[11],Se=u[15];return _[0]=y*ct+g*Vt+x*he+f*j,_[4]=y*lt+g*jt+x*le+f*bt,_[8]=y*Rt+g*Qt+x*Ft+f*Zt,_[12]=y*Xt+g*oe+x*Wt+f*Se,_[1]=A*ct+p*Vt+N*he+k*j,_[5]=A*lt+p*jt+N*le+k*bt,_[9]=A*Rt+p*Qt+N*Ft+k*Zt,_[13]=A*Xt+p*oe+N*Wt+k*Se,_[2]=U*ct+K*Vt+H*he+W*j,_[6]=U*lt+K*jt+H*le+W*bt,_[10]=U*Rt+K*Qt+H*Ft+W*Zt,_[14]=U*Xt+K*oe+H*Wt+W*Se,_[3]=wt*ct+Pt*Vt+mt*he+Z*j,_[7]=wt*lt+Pt*jt+mt*le+Z*bt,_[11]=wt*Rt+Pt*Qt+mt*Ft+Z*Zt,_[15]=wt*Xt+Pt*oe+mt*Wt+Z*Se,this}multiplyScalar(e){const i=this.elements;return i[0]*=e,i[4]*=e,i[8]*=e,i[12]*=e,i[1]*=e,i[5]*=e,i[9]*=e,i[13]*=e,i[2]*=e,i[6]*=e,i[10]*=e,i[14]*=e,i[3]*=e,i[7]*=e,i[11]*=e,i[15]*=e,this}determinant(){const e=this.elements,i=e[0],a=e[4],u=e[8],_=e[12],y=e[1],g=e[5],x=e[9],f=e[13],A=e[2],p=e[6],N=e[10],k=e[14],U=e[3],K=e[7],H=e[11],W=e[15];return U*(+_*x*p-u*f*p-_*g*N+a*f*N+u*g*k-a*x*k)+K*(+i*x*k-i*f*N+_*y*N-u*y*k+u*f*A-_*x*A)+H*(+i*f*p-i*g*k-_*y*p+a*y*k+_*g*A-a*f*A)+W*(-u*g*A-i*x*p+i*g*N+u*y*p-a*y*N+a*x*A)}transpose(){const e=this.elements;let i;return i=e[1],e[1]=e[4],e[4]=i,i=e[2],e[2]=e[8],e[8]=i,i=e[6],e[6]=e[9],e[9]=i,i=e[3],e[3]=e[12],e[12]=i,i=e[7],e[7]=e[13],e[13]=i,i=e[11],e[11]=e[14],e[14]=i,this}setPosition(e,i,a){const u=this.elements;return e instanceof Q?(u[12]=e.x,u[13]=e.y,u[14]=e.z):(u[12]=e,u[13]=i,u[14]=a),this}invert(){const e=this.elements,i=e[0],a=e[1],u=e[2],_=e[3],y=e[4],g=e[5],x=e[6],f=e[7],A=e[8],p=e[9],N=e[10],k=e[11],U=e[12],K=e[13],H=e[14],W=e[15],wt=p*H*f-K*N*f+K*x*k-g*H*k-p*x*W+g*N*W,Pt=U*N*f-A*H*f-U*x*k+y*H*k+A*x*W-y*N*W,mt=A*K*f-U*p*f+U*g*k-y*K*k-A*g*W+y*p*W,Z=U*p*x-A*K*x-U*g*N+y*K*N+A*g*H-y*p*H,ct=i*wt+a*Pt+u*mt+_*Z;if(ct===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const lt=1/ct;return e[0]=wt*lt,e[1]=(K*N*_-p*H*_-K*u*k+a*H*k+p*u*W-a*N*W)*lt,e[2]=(g*H*_-K*x*_+K*u*f-a*H*f-g*u*W+a*x*W)*lt,e[3]=(p*x*_-g*N*_-p*u*f+a*N*f+g*u*k-a*x*k)*lt,e[4]=Pt*lt,e[5]=(A*H*_-U*N*_+U*u*k-i*H*k-A*u*W+i*N*W)*lt,e[6]=(U*x*_-y*H*_-U*u*f+i*H*f+y*u*W-i*x*W)*lt,e[7]=(y*N*_-A*x*_+A*u*f-i*N*f-y*u*k+i*x*k)*lt,e[8]=mt*lt,e[9]=(U*p*_-A*K*_-U*a*k+i*K*k+A*a*W-i*p*W)*lt,e[10]=(y*K*_-U*g*_+U*a*f-i*K*f-y*a*W+i*g*W)*lt,e[11]=(A*g*_-y*p*_-A*a*f+i*p*f+y*a*k-i*g*k)*lt,e[12]=Z*lt,e[13]=(A*K*u-U*p*u+U*a*N-i*K*N-A*a*H+i*p*H)*lt,e[14]=(U*g*u-y*K*u-U*a*x+i*K*x+y*a*H-i*g*H)*lt,e[15]=(y*p*u-A*g*u+A*a*x-i*p*x-y*a*N+i*g*N)*lt,this}scale(e){const i=this.elements,a=e.x,u=e.y,_=e.z;return i[0]*=a,i[4]*=u,i[8]*=_,i[1]*=a,i[5]*=u,i[9]*=_,i[2]*=a,i[6]*=u,i[10]*=_,i[3]*=a,i[7]*=u,i[11]*=_,this}getMaxScaleOnAxis(){const e=this.elements,i=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],a=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],u=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(i,a,u))}makeTranslation(e,i,a){return e instanceof Q?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,i,0,0,1,a,0,0,0,1),this}makeRotationX(e){const i=Math.cos(e),a=Math.sin(e);return this.set(1,0,0,0,0,i,-a,0,0,a,i,0,0,0,0,1),this}makeRotationY(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,0,a,0,0,1,0,0,-a,0,i,0,0,0,0,1),this}makeRotationZ(e){const i=Math.cos(e),a=Math.sin(e);return this.set(i,-a,0,0,a,i,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,i){const a=Math.cos(i),u=Math.sin(i),_=1-a,y=e.x,g=e.y,x=e.z,f=_*y,A=_*g;return this.set(f*y+a,f*g-u*x,f*x+u*g,0,f*g+u*x,A*g+a,A*x-u*y,0,f*x-u*g,A*x+u*y,_*x*x+a,0,0,0,0,1),this}makeScale(e,i,a){return this.set(e,0,0,0,0,i,0,0,0,0,a,0,0,0,0,1),this}makeShear(e,i,a,u,_,y){return this.set(1,a,_,0,e,1,y,0,i,u,1,0,0,0,0,1),this}compose(e,i,a){const u=this.elements,_=i.x,y=i.y,g=i.z,x=i.w,f=_+_,A=y+y,p=g+g,N=_*f,k=_*A,U=_*p,K=y*A,H=y*p,W=g*p,wt=x*f,Pt=x*A,mt=x*p,Z=a.x,ct=a.y,lt=a.z;return u[0]=(1-(K+W))*Z,u[1]=(k+mt)*Z,u[2]=(U-Pt)*Z,u[3]=0,u[4]=(k-mt)*ct,u[5]=(1-(N+W))*ct,u[6]=(H+wt)*ct,u[7]=0,u[8]=(U+Pt)*lt,u[9]=(H-wt)*lt,u[10]=(1-(N+K))*lt,u[11]=0,u[12]=e.x,u[13]=e.y,u[14]=e.z,u[15]=1,this}decompose(e,i,a){const u=this.elements;let _=on.set(u[0],u[1],u[2]).length();const y=on.set(u[4],u[5],u[6]).length(),g=on.set(u[8],u[9],u[10]).length();this.determinant()<0&&(_=-_),e.x=u[12],e.y=u[13],e.z=u[14],pe.copy(this);const f=1/_,A=1/y,p=1/g;return pe.elements[0]*=f,pe.elements[1]*=f,pe.elements[2]*=f,pe.elements[4]*=A,pe.elements[5]*=A,pe.elements[6]*=A,pe.elements[8]*=p,pe.elements[9]*=p,pe.elements[10]*=p,i.setFromRotationMatrix(pe),a.x=_,a.y=y,a.z=g,this}equals(e){const i=this.elements,a=e.elements;for(let u=0;u<16;u++)if(i[u]!==a[u])return!1;return!0}fromArray(e,i=0){for(let a=0;a<16;a++)this.elements[a]=e[a+i];return this}toArray(e=[],i=0){const a=this.elements;return e[i]=a[0],e[i+1]=a[1],e[i+2]=a[2],e[i+3]=a[3],e[i+4]=a[4],e[i+5]=a[5],e[i+6]=a[6],e[i+7]=a[7],e[i+8]=a[8],e[i+9]=a[9],e[i+10]=a[10],e[i+11]=a[11],e[i+12]=a[12],e[i+13]=a[13],e[i+14]=a[14],e[i+15]=a[15],e}};Bn.IDENTITY=Object.freeze(new Bn);let an=Bn;const on=new Q,pe=new an,Ti=new Q(0,0,0),Ui=new Q(1,1,1),De=new Q,rr=new Q,ae=new Q;class ze{constructor(e=void 0,i=void 0){this.min=e==null?new Q(1/0,1/0,1/0):new Q(e.x,e.y,e.z),this.max=i==null?new Q(-1/0,-1/0,-1/0):new Q(i.x,i.y,i.z)}set(e,i){return this.min.copy(e),this.max.copy(i),this}setFromArray(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i+=3)this.expandByPoint(yr.fromArray(e,i));return this}setFromPoints(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i++)this.expandByPoint(e[i]);return this}setFromCenterAndSize(e,i){const a=yr.copy(i).multiplyScalar(.5);return this.min.copy(e).sub(a),this.max.copy(e).add(a),this}clone(){return new ze().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new Q(0,0,0):new Q(0,0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new Q(0,0,0):new Q(0,0,0).subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,i){return i.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z)}intersectsPlane(e){let i,a;return e.normal.x>0?(i=e.normal.x*this.min.x,a=e.normal.x*this.max.x):(i=e.normal.x*this.max.x,a=e.normal.x*this.min.x),e.normal.y>0?(i+=e.normal.y*this.min.y,a+=e.normal.y*this.max.y):(i+=e.normal.y*this.max.y,a+=e.normal.y*this.min.y),e.normal.z>0?(i+=e.normal.z*this.min.z,a+=e.normal.z*this.max.z):(i+=e.normal.z*this.max.z,a+=e.normal.z*this.min.z),i<=-e.constant&&a>=-e.constant}clampPoint(e,i){return i.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,yr).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Le[0].set(this.min.x,this.min.y,this.min.z).applyMatrix3d(e),Le[1].set(this.min.x,this.min.y,this.max.z).applyMatrix3d(e),Le[2].set(this.min.x,this.max.y,this.min.z).applyMatrix3d(e),Le[3].set(this.min.x,this.max.y,this.max.z).applyMatrix3d(e),Le[4].set(this.max.x,this.min.y,this.min.z).applyMatrix3d(e),Le[5].set(this.max.x,this.min.y,this.max.z).applyMatrix3d(e),Le[6].set(this.max.x,this.max.y,this.min.z).applyMatrix3d(e),Le[7].set(this.max.x,this.max.y,this.max.z).applyMatrix3d(e),this.setFromPoints(Le),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const Le=[new Q,new Q,new Q,new Q,new Q,new Q,new Q,new Q],yr=new Q,li=new Bt;class de{constructor(e=void 0,i=void 0){this.min=e==null?new Bt(1/0,1/0):new Bt(e.x,e.y),this.max=i==null?new Bt(-1/0,-1/0):new Bt(i.x,i.y)}set(e,i){return this.min.copy(e),this.max.copy(i),this}setFromPoints(e){this.makeEmpty();for(let i=0,a=e.length;i<a;i++)this.expandByPoint(e[i]);return this}setFromCenterAndSize(e,i){const a=li.copy(i).multiplyScalar(.5);return this.min.copy(e).sub(a),this.max.copy(e).add(a),this}clone(){return new de().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(e){return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)}get center(){return this.isEmpty()?new Bt(0,0):new Bt(0,0).addVectors(this.min,this.max).multiplyScalar(.5)}get size(){return this.isEmpty()?new Bt(0,0):new Bt(0,0).subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}containsPoint(e){return!(e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,i){return i.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return!(e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y)}clampPoint(e,i){return i.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,li).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const ui=new Q,Ri=new Q,Vi=new sn;class zn{constructor(e=new Q(1,0,0),i=0){this.normal=e,this.constant=i}set(e,i){return this.normal.copy(e),this.constant=i,this}setComponents(e,i,a,u){return this.normal.set(e,i,a),this.constant=u,this}setFromNormalAndCoplanarPoint(e,i){return this.normal.copy(e),this.constant=-i.dot(this.normal),this}setFromCoplanarPoints(e,i,a){const u=ui.subVectors(a,i).cross(Ri.subVectors(e,i)).normalize();return this.setFromNormalAndCoplanarPoint(u,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}projectPoint(e,i){return i.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectsBox(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,i){const a=i||Vi.getNormalMatrix(e),u=this.coplanarPoint(ui).applyMatrix3d(e),_=this.normal.applyMatrix3(a).normalize();return this.constant=-u.dot(_),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new zn().copy(this)}}class Lt extends Bt{static pointArrayToNumberArray(e){const i=new Array(e.length*2);return e.forEach((a,u)=>{a.toArray(i,u*2)}),i}}class St extends Q{static pointArrayToNumberArray(e,i=!0){const a=i?3:2,u=new Array(e.length*a);return e.forEach((_,y)=>{_.toArray(u,y*a)}),u}}const ci=new an,vi=new An,Ln=class Ln{constructor(e=0,i=0,a=0,u=Ln.DEFAULT_ORDER){this._x=e,this._y=i,this._z=a,this._order=u}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,i,a,u=this._order){return this._x=e,this._y=i,this._z=a,this._order=u,this._onChangeCallback(),this}clone(){return new Ln(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,i=this._order,a=!0){const u=e.elements,_=u[0],y=u[4],g=u[8],x=u[1],f=u[5],A=u[9],p=u[2],N=u[6],k=u[10];switch(i){case"XYZ":this._y=Math.asin(Be(g,-1,1)),Math.abs(g)<.9999999?(this._x=Math.atan2(-A,k),this._z=Math.atan2(-y,_)):(this._x=Math.atan2(N,f),this._z=0);break;case"YXZ":this._x=Math.asin(-Be(A,-1,1)),Math.abs(A)<.9999999?(this._y=Math.atan2(g,k),this._z=Math.atan2(x,f)):(this._y=Math.atan2(-p,_),this._z=0);break;case"ZXY":this._x=Math.asin(Be(N,-1,1)),Math.abs(N)<.9999999?(this._y=Math.atan2(-p,k),this._z=Math.atan2(-y,f)):(this._y=0,this._z=Math.atan2(x,_));break;case"ZYX":this._y=Math.asin(-Be(p,-1,1)),Math.abs(p)<.9999999?(this._x=Math.atan2(N,k),this._z=Math.atan2(x,_)):(this._x=0,this._z=Math.atan2(-y,f));break;case"YZX":this._z=Math.asin(Be(x,-1,1)),Math.abs(x)<.9999999?(this._x=Math.atan2(-A,f),this._y=Math.atan2(-p,_)):(this._x=0,this._y=Math.atan2(g,k));break;case"XZY":this._z=Math.asin(-Be(y,-1,1)),Math.abs(y)<.9999999?(this._x=Math.atan2(N,f),this._y=Math.atan2(g,_)):(this._x=Math.atan2(-A,k),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+i)}return this._order=i,a===!0&&this._onChangeCallback(),this}setFromQuaternion(e,i,a=!0){return ci.makeRotationFromQuaternion(e),this.setFromRotationMatrix(ci,i,a)}setFromVector3(e,i=this._order){return this.set(e.x,e.y,e.z,i)}reorder(e){return vi.setFromEuler(this),this.setFromQuaternion(vi,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],i=0){return e[i]=this._x,e[i+1]=this._y,e[i+2]=this._z,e[i+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ln.DEFAULT_ORDER="XYZ";let wr=Ln;class _i{constructor(){this._boundingBoxNeedsUpdate=!1}get boundingBoxNeedUpdate(){return this._boundingBoxNeedsUpdate}}class br extends _i{translate(e){return this.transform(new sn().makeTranslation(e.x,e.y))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Di extends br{constructor(){super(),this._loops=[]}add(e){this._loops.push(e),this._boundingBoxNeedsUpdate=!0}get loops(){return this._loops}get outter(){if(this._loops.length>0)return this._loops[0]}calculateBoundingBox(){const e=this.outter;return e?e.box:new de}transform(e){return this._boundingBoxNeedsUpdate=!0,this}getPoints(e){const i=[];for(let a=0;a<this.loops.length;++a){const _=this.loops[a].getPoints(e);i.push(_)}return i}buildHierarchy(){var g;const e=this.getPoints(100),i=this.calculateBoundaryBoxes(e),a=this.sortBoundaryBoxesByAreas(i),u=new Map,_=a.length;for(let x=0;x<_;x++)u.set(a[x],{index:a[x],children:[]});const y={index:-1,children:[]};for(let x=0;x<_;x++){const f=a[x],A=e[f],p=i[f];let N=x+1;for(;N<_;N++){const k=a[N],U=e[k];if(i[k].containsBox(p)&&ri.isPointInPolygon(A[Ut.randInt(0,A.length-1)],U)){(g=u.get(k))==null||g.children.push(u.get(f));break}}N===_&&y.children.push(u.get(f))}return y}calculateBoundaryBoxes(e){const i=[];return e.forEach(a=>{i.push(new de().setFromPoints(a))}),i}sortBoundaryBoxesByAreas(e){const i=[];e.forEach((u,_)=>{const y=u.size,g=y.width*y.height;i.push({area:g,index:_})}),i.sort((u,_)=>u.area-_.area);const a=[];return i.forEach(u=>{a.push(u.index)}),a}}class hn extends br{constructor(){super(),this.arcLengthDivisions=100}get startPoint(){return this.getPoint(0)}get endPoint(){return this.getPoint(1)}get length(){return this.getLength()}getPoint(e){throw new Error("AcGeCurve2d: .getPoint() not implemented.")}getPointAt(e){const i=this.getUtoTmapping(e);return this.getPoint(i)}getPoints(e=5){const i=[];for(let a=0;a<=e;a++)i.push(this.getPoint(a/e));return i}getSpacedPoints(e=5){const i=[];for(let a=0;a<=e;a++)i.push(this.getPointAt(a/e));return i}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){const i=[];let a,u=this.getPoint(0),_=0;i.push(0);for(let y=1;y<=e;y++)a=this.getPoint(y/e),_+=a.distanceTo(u),i.push(_),u=a;return i}getUtoTmapping(e,i){const a=this.getLengths();let u=0;const _=a.length;let y;i?y=i:y=e*a[_-1];let g=0,x=_-1,f;for(;g<=x;)if(u=Math.floor(g+(x-g)/2),f=a[u]-y,f<0)g=u+1;else if(f>0)x=u-1;else{x=u;break}if(u=x,a[u]===y)return u/(_-1);const A=a[u],N=a[u+1]-A,k=(y-A)/N;return(u+k)/(_-1)}getTangent(e){let a=e-1e-4,u=e+1e-4;a<0&&(a=0),u>1&&(u=1);const _=this.getPoint(a),y=this.getPoint(u),g=new Lt;return g.copy(y).sub(_).normalize(),g}getTangentAt(e){const i=this.getUtoTmapping(e);return this.getTangent(i)}}class Sn extends hn{constructor(e,i,a,u,_){super();const y=+(e!==void 0)+ +(i!==void 0)+ +(a!==void 0)+ +(u!==void 0)+ +(_!==void 0);if(y==3)typeof e=="object"&&typeof i=="object"&&typeof a=="object"?this.createByThreePoints(e,i,a):this.createByStartEndPointsAndBulge(e,i,a);else if(y==5){const g=e;this.center=new Lt(g.x,g.y),this.radius=i,this.startAngle=a,this.endAngle=u,this.clockwise=_}else throw te.AcCmErrors.ILLEGAL_PARAMETERS}createByThreePoints(e,i,a){const u=(lt,Rt)=>({x:(lt.x+Rt.x)/2,y:(lt.y+Rt.y)/2}),_=(lt,Rt)=>(Rt.y-lt.y)/(Rt.x-lt.x),y=lt=>-1/lt,g=u(e,i),x=u(i,a),f=_(e,i),A=_(i,a),p=y(f),N=y(A),k=(lt,Rt,Xt,Vt)=>{const jt=(Vt-Rt)/(lt-Xt),Qt=lt*jt+Rt;return{x:jt,y:Qt}},U=g.y-p*g.x,K=x.y-N*x.x,H=k(p,U,N,K),W=Math.sqrt(Math.pow(e.x-H.x,2)+Math.pow(e.y-H.y,2)),wt=(lt,Rt)=>Math.atan2(lt.y-Rt.y,lt.x-Rt.x),Pt=wt(e,H),mt=wt(i,H),Z=wt(a,H),ct=Z>Pt&&Z<mt||Pt>Z&&Pt<mt||mt>Z&&mt<Pt;this.center=H,this.radius=W,this.startAngle=Pt,this.endAngle=Z,this.clockwise=!ct}createByStartEndPointsAndBulge(e,i,a){let u,_,y;a<0?(u=Math.atan(-a)*4,_=new Bt(e),y=new Bt(i)):(u=Math.atan(a)*4,_=new Bt(i),y=new Bt(e));const g=new Bt().subVectors(y,_),x=g.length(),f=new Bt().addVectors(_,g.multiplyScalar(.5)),A=Math.abs(x/2/Math.tan(u/2)),p=g.normalize();let N;if(u<Math.PI){const k=new Bt(p.x*Math.cos(Math.PI/2)-p.y*Math.sin(Math.PI/2),p.y*Math.cos(Math.PI/2)+p.x*Math.sin(Math.PI/2));N=f.add(k.multiplyScalar(-A))}else{const k=new Bt(p.x*Math.cos(Math.PI/2)-p.y*Math.sin(Math.PI/2),p.y*Math.cos(Math.PI/2)+p.x*Math.sin(Math.PI/2));N=f.add(k.multiplyScalar(A))}a<0?(this.startAngle=Math.atan2(_.y-N.y,_.x-N.x),this.endAngle=Math.atan2(y.y-N.y,y.x-N.x)):(this.startAngle=Math.atan2(y.y-N.y,y.x-N.x),this.endAngle=Math.atan2(_.y-N.y,_.x-N.x)),this.clockwise=a<0,this.center=N,this.radius=y.sub(N).length()}get center(){return this._center}set center(e){this._center=new Lt(e.x,e.y),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(e){this._radius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return this.clockwise?Ut.normalizeAngle(this.startAngle-this.endAngle):Ut.normalizeAngle(this.endAngle-this.startAngle)}get clockwise(){return this._clockwise}set clockwise(e){this._clockwise=e,this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this.startAngle)}get endPoint(){return this.getPointAtAngle(this.endAngle)}get midPoint(){const e=Ut.normalizeAngle((this.startAngle+this.endAngle)/2);return this.getPointAtAngle(e)}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}calculateBoundingBox(){const e=[this.startPoint,this.endPoint],i=[0,Math.PI/2,Math.PI,3*Math.PI/2];for(const _ of i)Ut.isBetweenAngle(_,this.startAngle,this.endAngle,this.clockwise)&&e.push(this.getPointAtAngle(_));const a=e.map(_=>_.x),u=e.map(_=>_.y);return new de(new Lt(Math.min(...a),Math.min(...u)),new Lt(Math.max(...a),Math.max(...u)))}get length(){return Math.abs(this.deltaAngle*this.radius)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}clone(){return new Sn(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.clockwise)}getPointAtAngle(e){const i=this.center.x+this.radius*Math.cos(e),a=this.center.y+this.radius*Math.sin(e);return new Lt(i,a)}getPoints(e=100){const i=[];let a=this.deltaAngle,u=this.startAngle;if(this.closed&&(a=Kt,u=0),this.clockwise)for(let _=0;_<=e;_++){const y=u-a*(_/e),g=this.getPointAtAngle(y);i.push(new Lt(g.x,g.y))}else for(let _=0;_<=e;_++){const y=u+a*(_/e),g=this.getPointAtAngle(y);i.push(new Lt(g.x,g.y))}return i}}class Fi extends _i{translate(e){return this.transform(new an().makeTranslation(e.x,e.y,e.z))}get box(){return(this._box==null||this._boundingBoxNeedsUpdate)&&(this._box=this.calculateBoundingBox(),this._boundingBoxNeedsUpdate=!1),this._box}}class Cn extends Fi{}class kn extends Cn{constructor(e,i){super(),this._start=new St(e),this._end=new St(i)}get startPoint(){return this._start}set startPoint(e){this._start.copy(e),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(e){this._end.copy(e),this._boundingBoxNeedsUpdate=!0}get direction(){return new Q().subVectors(this.endPoint,this.startPoint).normalize()}get midPoint(){return new St((this._start.x+this._end.x)/2,(this._start.y+this._end.y)/2,(this._start.z+this._end.z)/2)}get length(){return this.startPoint.distanceTo(this.endPoint)}isPointOnLine(e){return this.project(e).distanceTo(e)<1e-6}at(e,i){return this.delta(i).multiplyScalar(e).add(this._start)}atLength(e,i=!1){if(i){const a=this.delta(Qe).normalize();return new St(this._start).addScaledVector(a,e)}else{const a=this.delta(Qe).normalize();return new St(this._end).addScaledVector(a,e)}}extend(e,i=!1){if(i){const a=Qe.subVectors(this._start,this._end).normalize();this._start=new St(this._start).addScaledVector(a,e)}else{const a=this.delta(Qe).normalize();this._end=new St(this._end).addScaledVector(a,e)}return this._boundingBoxNeedsUpdate=!0,this}closestPointToPointParameter(e,i){di.subVectors(e,this._start),ir.subVectors(this.endPoint,this.startPoint);const a=ir.dot(ir);let _=ir.dot(di)/a;return i&&(_=Ut.clamp(_,0,1)),_}closestPointToPoint(e,i,a){const u=this.closestPointToPointParameter(e,i);return this.delta(a).multiplyScalar(u).add(this._start)}delta(e){return e.subVectors(this._end,this._start)}distanceSq(){return this._start.distanceToSquared(this._end)}distance(){return this._start.distanceTo(this._end)}project(e){const i=this.direction,u=Qe.subVectors(e,this.startPoint).dot(i);return new St().copy(i).multiplyScalar(u).add(this.startPoint)}perpPoint(e){const i=this.direction,a=this.startPoint,_=Qe.subVectors(e,a).dot(i),y=Qe.copy(i).multiplyScalar(_);return new St().addVectors(a,y)}calculateBoundingBox(){const e=new St(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y),Math.min(this._start.z,this._end.z)),i=new St(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y),Math.max(this._start.z,this._end.z));return new ze(e,i)}transform(e){return this._start.applyMatrix3d(e),this._end.applyMatrix3d(e),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(e){return this.startPoint=e.startPoint,this.endPoint=e.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new kn(this._start.clone(),this._end.clone())}}const Qe=new Q,di=new Q,ir=new Q;class In extends Cn{static computeCenterPoint(e,i,a){const u=new Q().addVectors(e,i).multiplyScalar(.5),_=new Q().addVectors(e,a).multiplyScalar(.5),y=new Q().subVectors(i,e),g=new Q().subVectors(a,e),x=new Q().crossVectors(y,g).normalize();if(x.lengthSq()===0)return console.error("Points are collinear and cannot form a valid arc."),null;const f=new Q().crossVectors(y,x).normalize(),A=new Q().crossVectors(g,x).normalize(),p=f.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),N=A.clone().multiplyScalar(Number.MAX_SAFE_INTEGER),k=new kn(u,u.clone().add(p)),U=new kn(_,_.clone().add(N)),K=new Q;return k.closestPointToPoint(U.startPoint,!0,K)?K:(console.error("Cannot find a valid center for the arc."),null)}static createByThreePoints(e,i,a){const u=In.computeCenterPoint(e,i,a);if(u){const _=u.distanceTo(e),y=new Q().subVectors(e,u),g=new Q().subVectors(i,u),x=Math.atan2(y.y,y.x),f=Math.atan2(g.y,g.x);return new In(u,_,x,f,Q.Z_AXIS)}}constructor(e,i,a,u,_,y=Q.X_AXIS){super(),this.center=e,this.radius=i,this.startAngle=a,this.endAngle=u,this.normal=_,this.refVec=y,(u-a)%Kt==0?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=a,this.endAngle=u)}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get radius(){return this._radius}set radius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._radius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return Ut.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(e){this._normal=new Q(e.x,e.y,e.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get refVec(){return this._refVec}set refVec(e){this._refVec=new Q(e.x,e.y,e.z),this._refVec.normalize(),this._boundingBoxNeedsUpdate=!0}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get length(){return Math.abs(this.deltaAngle*this.radius)}calculateBoundingBox(){const e=[this.startAngle,this.endAngle];for(let x=0;x<2*Math.PI;x+=Math.PI/2)Ut.isBetweenAngle(x,this.startAngle,this.endAngle)&&e.push(x);let i=1/0,a=1/0,u=1/0,_=-1/0,y=-1/0,g=-1/0;for(const x of e){const f=this.getPointAtAngle(x);f.x<i&&(i=f.x),f.y<a&&(a=f.y),f.z<u&&(u=f.z),f.x>_&&(_=f.x),f.y>y&&(y=f.y),f.z>g&&(g=f.z)}return new ze({x:i,y:a,z:u},{x:_,y,z:g})}get closed(){return Math.abs(this.endAngle-this.startAngle)/Math.PI%2==0}getPoints(e){const i=[];let a=this.deltaAngle,u=this.startAngle;this.closed&&(a=Kt,u=0);for(let _=0;_<=e;_++){const y=u+a*(_/e),g=this.getPointAtAngle(y);i.push(g)}return i}transform(e){const i=xr.copy(this.refVec).applyAxisAngle(this.normal,this.startAngle).multiplyScalar(this.radius),a=xr.copy(this.refVec).applyAxisAngle(this.normal,this.endAngle).multiplyScalar(this.radius);return this.center.applyMatrix3d(e),i.applyMatrix3d(e),a.applyMatrix3d(e),this.normal.applyMatrix3d(e).normalize(),this.refVec.applyMatrix3d(e).normalize(),this.startAngle=this.getAngle(i),this.endAngle=this.getAngle(a),this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.radius=e.radius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.normal=e.normal,this.refVec=e.refVec,this._boundingBoxNeedsUpdate=!0,this}clone(){return new In(this.center.clone(),this.radius,this.startAngle,this.endAngle,this.normal,this.refVec)}getAngle(e){return e.sub(this.center),Math.atan2(e.dot(xr.crossVectors(this.refVec,this.normal)),e.dot(this.refVec))}getPointAtAngle(e){const i=this.normal,a=this.refVec,u={x:i.y*a.z-i.z*a.y,y:i.z*a.x-i.x*a.z,z:i.x*a.y-i.y*a.x},_=this.center,y=this.radius;return new St(_.x+y*(a.x*Math.cos(e)+u.x*Math.sin(e)),_.y+y*(a.y*Math.cos(e)+u.y*Math.sin(e)),_.z+y*(a.z*Math.cos(e)+u.z*Math.sin(e)))}get plane(){const e=new Q(this.center).distanceTo(dr);return new zn(this.normal,e)}}const xr=new Q;class Mr extends hn{constructor(e,i,a,u=0,_=Kt,y=!1,g=0){super(),this.center=e,this.majorAxisRadius=i,this.minorAxisRadius=a,(_-u)%Kt==0?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=u,this.endAngle=_),this.clockwise=y,this.rotation=g}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get clockwise(){return this._clockwise}set clockwise(e){this._clockwise=e,this._boundingBoxNeedsUpdate=!0}get rotation(){return this._rotation}set rotation(e){this._rotation=e,this._boundingBoxNeedsUpdate=!0}get deltaAngle(){return Ut.normalizeAngle(this.endAngle-this.startAngle)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}calculateBoundingBox(){let i=1/0,a=1/0,u=-1/0,_=-1/0;for(let y=0;y<=100;y++){const g=this.getPoint(y/100);i=Math.min(i,g.x),a=Math.min(a,g.y),u=Math.max(u,g.x),_=Math.max(_,g.y)}return new de({x:i,y:a},{x:u,y:_})}get closed(){return this.deltaAngle==0}getPoint(e){const i=Math.PI*2;let a=this.endAngle-this.startAngle;const u=Math.abs(a)<Number.EPSILON;for(;a<0;)a+=i;for(;a>i;)a-=i;a<Number.EPSILON&&(u?a=0:a=i),this.clockwise===!0&&!u&&(a===i?a=-i:a=a-i);const _=this.startAngle+e*a;let y=this.center.x+this.majorAxisRadius*Math.cos(_),g=this.center.y+this.minorAxisRadius*Math.sin(_);if(this.rotation!==0){const x=Math.cos(this.rotation),f=Math.sin(this.rotation),A=y-this.center.x,p=g-this.center.y;y=A*x-p*f+this.center.x,g=A*f+p*x+this.center.y}return new Lt(y,g)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.majorAxisRadius=e.majorAxisRadius,this.minorAxisRadius=e.minorAxisRadius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}clone(){return new Mr(this.center,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle,this.clockwise,this.rotation)}}class Pr extends Cn{constructor(e,i,a,u,_,y=0,g=Kt){super(),this.center=e,this.normal=i,this.majorAxis=a,this.majorAxisRadius=u,this.minorAxisRadius=_;const x=Math.abs(g-y);Math.abs(x-Kt)<1e-10||Math.abs(x-2*Kt)<1e-10?(this.startAngle=0,this.endAngle=Kt):(this.startAngle=y,this.endAngle=g)}get center(){return this._center}set center(e){this._center=new St(e.x,e.y,e.z||0),this._boundingBoxNeedsUpdate=!0}get majorAxisRadius(){return this._majorAxisRadius}set majorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._majorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get minorAxisRadius(){return this._minorAxisRadius}set minorAxisRadius(e){if(e<0)throw te.AcCmErrors.ILLEGAL_PARAMETERS;this._minorAxisRadius=e,this._boundingBoxNeedsUpdate=!0}get startAngle(){return this._startAngle}set startAngle(e){this._startAngle=Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get endAngle(){return this._endAngle}set endAngle(e){this._endAngle=this.startAngle==0&&e==Kt?e:Ut.normalizeAngle(e),this._boundingBoxNeedsUpdate=!0}get deltaAngle(){const e=this.endAngle-this.startAngle;return Math.abs(e-Kt)<1e-10?Kt:Ut.normalizeAngle(e)}get isLargeArc(){return Math.abs(this.deltaAngle)>Math.PI?1:0}get clockwise(){return this.deltaAngle<=0}get normal(){return this._normal}set normal(e){this._normal=new Q(e.x,e.y,e.z),this._normal.normalize(),this._boundingBoxNeedsUpdate=!0}get majorAxis(){return this._majorAxis}set majorAxis(e){this._majorAxis=new Q(e.x,e.y,e.z),this._majorAxis.normalize(),this._boundingBoxNeedsUpdate=!0}get minorAxis(){return new Q().crossVectors(this.normal,this.majorAxis).normalize()}get startPoint(){return this.getPointAtAngle(this._startAngle)}get endPoint(){return this.getPointAtAngle(this._endAngle)}get isCircular(){return fr.equal(this.majorAxisRadius,this.minorAxisRadius)}get length(){if(this.isCircular)return this.majorAxisRadius*Math.abs(this.deltaAngle);const e=1e3,i=this.deltaAngle/e;let a=0,u=this.getPointAtAngle(this.startAngle);for(let _=1;_<=e;_++){const y=this.startAngle+_*i,g=this.getPointAtAngle(y),x=g.x-u.x,f=g.y-u.y,A=g.z-u.z;a+=Math.sqrt(x*x+f*f+A*A),u=g}return a}calculateBoundingBox(){if(this.majorAxis.equals(Q.X_AXIS)||this.majorAxis.equals(Q.Y_AXIS)||this.majorAxis.isParallelTo(Q.X_AXIS)||this.majorAxis.isParallelTo(Q.Y_AXIS)){const e=[this.startAngle,this.endAngle];for(let x=0;x<2*Math.PI;x+=Math.PI/2)Ut.isBetweenAngle(x,this.startAngle,this.endAngle)&&e.push(x);let i=1/0,a=1/0,u=1/0,_=-1/0,y=-1/0,g=-1/0;for(const x of e){const f=this.getPointAtAngle(x);f.x<i&&(i=f.x),f.y<a&&(a=f.y),f.z<u&&(u=f.z),f.x>_&&(_=f.x),f.y>y&&(y=f.y),f.z>g&&(g=f.z)}return new ze({x:i,y:a,z:u},{x:_,y,z:g})}else{let i=1/0,a=1/0,u=1/0,_=-1/0,y=-1/0,g=-1/0;for(let x=0;x<=100;x++){const f=this.startAngle+this.deltaAngle*(x/100),A=this.getPointAtAngle(f);i=Math.min(i,A.x),a=Math.min(a,A.y),u=Math.min(u,A.z),_=Math.max(_,A.x),y=Math.max(y,A.y),g=Math.max(g,A.z)}return new ze({x:i,y:a,z:u},{x:_,y,z:g})}}get closed(){return this.deltaAngle==0}getPoints(e=100){const i=[];let a=this.deltaAngle,u=this.startAngle;this.closed&&(a=Kt,u=0);for(let _=0;_<=e;_++){const y=u+a*(_/e),g=this.getPointAtAngle(y);i.push(g)}return i}getPointAtAngle(e){const i=Math.cos(e),a=Math.sin(e),u=this.minorAxis.clone().multiplyScalar(this.minorAxisRadius).multiplyScalar(a),_=this.majorAxis.clone().multiplyScalar(i*this.majorAxisRadius).add(u);return new St(this.center.x+_.x,this.center.y+_.y,this.center.z+_.z)}contains(e){const i=new Q(e).sub(this.center),a=i.dot(this.majorAxis),u=i.dot(this.minorAxis),_=a/this.majorAxisRadius,y=u/this.minorAxisRadius;return _*_+y*y<=1}transform(e){return this._boundingBoxNeedsUpdate=!0,this}copy(e){return this.center=e.center,this.normal=e.normal,this.majorAxis=e.majorAxis,this.majorAxisRadius=e.majorAxisRadius,this.minorAxisRadius=e.minorAxisRadius,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Pr(this.center,this.normal,this.majorAxis,this.majorAxisRadius,this.minorAxisRadius,this.startAngle,this.endAngle)}get plane(){const e=new Q(this.center).distanceTo(dr);return new zn(this.normal,e)}}class Oi extends hn{constructor(e=null,i=!1){super(),this._vertices=e||new Array,this._closed=i}get numberOfVertices(){return this._vertices.length}get closed(){return this._closed}get startPoint(){if(this.numberOfVertices>0){const e=this._vertices[0];return new Lt(e.x,e.y)}throw new Error("Start point does not exist in an empty polyline.")}get endPoint(){const e=this.numberOfVertices;if(e>0)if(this.closed){const i=this._vertices[0];return new Lt(i.x,i.y)}else{const i=this._vertices[e-1];return new Lt(i.x,i.y)}throw new Error("End point does not exist in an empty polyline.")}get length(){let e=0;const i=this._vertices.length;for(let a=0;a<i;++a){const u=this._vertices[a];let _=null;if(a<i-1?_=this._vertices[a+1]:a==i-1&&this.closed&&(_=this._vertices[0]),_)if(u.bulge){const y=new Sn(u,_,u.bulge);e+=y.length}else e+=new Lt(u.x,u.y).distanceTo(_)}return e}set closed(e){this._closed=e,this._boundingBoxNeedsUpdate=!0}addVertexAt(e,i){e<=0?this._vertices.unshift(i):this._vertices.splice(e,0,i),this._boundingBoxNeedsUpdate=!0}getPointAt(e){const i=this._vertices[e];return new Lt(i.x,i.y)}calculateBoundingBox(){const e=this.getPoints(100);return new de().setFromPoints(e)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}getPoints3d(e,i){const a=[];return this.getPoints(e).forEach(_=>a.push(new St().set(_.x,_.y,i))),a}getPoints(e){const i=[],a=this._vertices.length;for(let u=0;u<a;++u){const _=this._vertices[u];if(_.bulge){let y=null;if(u<a-1?y=this._vertices[u+1]:u==a-1&&this.closed&&(y=this._vertices[0]),y){const x=new Sn(_,y,_.bulge).getPoints(e),f=x.length;for(let A=0;A<f;++A){const p=x[A];i.push(new Lt(p.x,p.y))}}}else i.push(new Lt(_.x,_.y)),u==a-1&&this.closed&&i.push(i[0])}return i}}class Ar extends hn{constructor(e,i){super(),this._start=new Lt(e),this._end=new Lt(i)}get startPoint(){return this._start}set startPoint(e){this._start.copy(e),this._boundingBoxNeedsUpdate=!0}get endPoint(){return this._end}set endPoint(e){this._end.copy(e),this._boundingBoxNeedsUpdate=!0}getPoints(){return[this.startPoint,this.endPoint]}get length(){return this.startPoint.distanceTo(this.endPoint)}calculateBoundingBox(){const e=new Lt(Math.min(this._start.x,this._end.x),Math.min(this._start.y,this._end.y)),i=new Lt(Math.max(this._start.x,this._end.x),Math.max(this._start.y,this._end.y));return new de(e,i)}transform(e){return this._start.applyMatrix2d(e),this._end.applyMatrix2d(e),this._boundingBoxNeedsUpdate=!0,this}get closed(){return!1}copy(e){return this.startPoint=e.startPoint,this.endPoint=e.endPoint,this._boundingBoxNeedsUpdate=!0,this}clone(){return new Ar(this._start.clone(),this._end.clone())}}class qi extends hn{constructor(e=[]){super(),this._curves=e}get curves(){return this._curves}add(e){this._curves.push(e),this._boundingBoxNeedsUpdate=!0}get numberOfEdges(){return this._curves.length}get startPoint(){if(this._curves.length>0){const e=this._curves[0].startPoint;return new Lt(e.x,e.y)}throw new Error("Start point does not exist in an empty loop.")}get endPoint(){return this.startPoint}get length(){let e=0;return this._curves.forEach(i=>{e+=i.length}),e}calculateBoundingBox(){const e=this.getPoints(100),i=new de;return i.setFromPoints(e),i}transform(e){return this._boundingBoxNeedsUpdate=!0,this}get closed(){return!0}getPoints(e){const i=[];return this.curves.forEach(a=>{a.getPoints(e).forEach(u=>{i.push(new Lt(u.x,u.y))})}),i}}function Gi(E){return E&&E.__esModule&&Object.prototype.hasOwnProperty.call(E,"default")?E.default:E}var fi={exports:{}};(function(E,e){(function(i){E.exports=i()})(function(){var i={},a=this;new Function("try {return this===window;}catch(e){ return false;}");var u=new Function("try {return this===global;}catch(e){return false;}"),_=new Function("try {return typeof importScripts === 'function';}catch(e){return false;}");if(u()&&_(),u()||_()){var y=a;if(_()){var g=function(x,f){var A=a;return x.split(".").forEach(function(p){A&&(A=A[p])}),A?A[f]:null};onmessage=function(x){if(!(!x.data.className||!x.data.methodName)){var f=g(x.data.className,x.data.methodName);if(!f)return console.error("could not find "+x.data.className+"."+x.data.methodName);postMessage({result:f.apply(null,x.data.args),id:x.data.id})}}}}return function(x,f,A){f.geom=f.geom||{},f.exe=f.exe||{},f.eval=f.eval||{},f.core=f.core||{},f.promhx=f.promhx||{};var p={},N=function(){return bt.__string_rec(this,"")};function k(t,n){function r(){}r.prototype=t;var s=new r;for(var o in n)s[o]=n[o];return n.toString!==Object.prototype.toString&&(s.toString=n.toString),s}var U=function(){};p.HxOverrides=U,U.__name__=["HxOverrides"],U.strDate=function(t){var n=t.length;switch(n){case 8:var r=t.split(":"),s=new Date;return s.setTime(0),s.setUTCHours(r[0]),s.setUTCMinutes(r[1]),s.setUTCSeconds(r[2]),s;case 10:var o=t.split("-");return new Date(o[0],o[1]-1,o[2],0,0,0);case 19:var h=t.split(" "),c=h[0].split("-"),v=h[1].split(":");return new Date(c[0],c[1]-1,c[2],v[0],v[1],v[2]);default:throw new j("Invalid date format : "+t)}},U.cca=function(t,n){var r=t.charCodeAt(n);if(r==r)return r},U.substr=function(t,n,r){return n!=null&&n!=0&&r!=null&&r<0?"":(r==null&&(r=t.length),n<0?(n=t.length+n,n<0&&(n=0)):r<0&&(r=t.length+r-n),t.substr(n,r))},U.iter=function(t){return{cur:0,arr:t,hasNext:function(){return this.cur<this.arr.length},next:function(){return this.arr[this.cur++]}}};var K=function(){};p.Lambda=K,K.__name__=["Lambda"],K.fold=function(t,n,r){for(var s=be(t)();s.hasNext();){var o=s.next();r=n(o,r)}return r};var H=function(){this.length=0};p.List=H,H.__name__=["List"],H.prototype={add:function(t){var n=[t];this.h==null?this.h=n:this.q[1]=n,this.q=n,this.length++},pop:function(){if(this.h==null)return null;var t=this.h[0];return this.h=this.h[1],this.h==null&&(this.q=null),this.length--,t},isEmpty:function(){return this.h==null},__class__:H},Math.__name__=["Math"];var W=function(){};p.Reflect=W,W.__name__=["Reflect"],W.field=function(t,n){try{return t[n]}catch(r){return r instanceof j&&(r=r.val),null}},W.callMethod=function(t,n,r){return n.apply(t,r)},W.fields=function(t){var n=[];if(t!=null){var r=Object.prototype.hasOwnProperty;for(var s in t)s!="__id__"&&s!="hx__closures__"&&r.call(t,s)&&n.push(s)}return n},W.isFunction=function(t){return typeof t=="function"&&!(t.__name__||t.__ename__)},W.deleteField=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)?(delete t[n],!0):!1};var wt=function(){};p.Std=wt,wt.__name__=["Std"],wt.string=function(t){return bt.__string_rec(t,"")},wt.parseFloat=function(t){return parseFloat(t)};var Pt=function(){this.b=""};p.StringBuf=Pt,Pt.__name__=["StringBuf"],Pt.prototype={add:function(t){this.b+=wt.string(t)},__class__:Pt};var mt=function(){};p.StringTools=mt,mt.__name__=["StringTools"],mt.fastCodeAt=function(t,n){return t.charCodeAt(n)};var Z=p.ValueType={__ename__:["ValueType"],__constructs__:["TNull","TInt","TFloat","TBool","TObject","TFunction","TClass","TEnum","TUnknown"]};Z.TNull=["TNull",0],Z.TNull.toString=N,Z.TNull.__enum__=Z,Z.TInt=["TInt",1],Z.TInt.toString=N,Z.TInt.__enum__=Z,Z.TFloat=["TFloat",2],Z.TFloat.toString=N,Z.TFloat.__enum__=Z,Z.TBool=["TBool",3],Z.TBool.toString=N,Z.TBool.__enum__=Z,Z.TObject=["TObject",4],Z.TObject.toString=N,Z.TObject.__enum__=Z,Z.TFunction=["TFunction",5],Z.TFunction.toString=N,Z.TFunction.__enum__=Z,Z.TClass=function(t){var n=["TClass",6,t];return n.__enum__=Z,n.toString=N,n},Z.TEnum=function(t){var n=["TEnum",7,t];return n.__enum__=Z,n.toString=N,n},Z.TUnknown=["TUnknown",8],Z.TUnknown.toString=N,Z.TUnknown.__enum__=Z;var ct=function(){};p.Type=ct,ct.__name__=["Type"],ct.getClassName=function(t){var n=t.__name__;return n==null?null:n.join(".")},ct.getEnumName=function(t){var n=t.__ename__;return n.join(".")},ct.resolveClass=function(t){var n=p[t];return n==null||!n.__name__?null:n},ct.resolveEnum=function(t){var n=p[t];return n==null||!n.__ename__?null:n},ct.createEmptyInstance=function(t){function n(){}return n.prototype=t.prototype,new n},ct.createEnum=function(t,n,r){var s=W.field(t,n);if(s==null)throw new j("No such constructor "+n);if(W.isFunction(s)){if(r==null)throw new j("Constructor "+n+" need parameters");return W.callMethod(t,s,r)}if(r!=null&&r.length!=0)throw new j("Constructor "+n+" does not need parameters");return s},ct.getEnumConstructs=function(t){var n=t.__constructs__;return n.slice()},ct.typeof=function(t){var n=typeof t;switch(n){case"boolean":return Z.TBool;case"string":return Z.TClass(String);case"number":return Math.ceil(t)==t%2147483648?Z.TInt:Z.TFloat;case"object":if(t==null)return Z.TNull;var r=t.__enum__;if(r!=null)return Z.TEnum(r);var s=bt.getClass(t);return s!=null?Z.TClass(s):Z.TObject;case"function":return t.__name__||t.__ename__?Z.TObject:Z.TFunction;case"undefined":return Z.TNull;default:return Z.TUnknown}};var lt=function(){};p["haxe.IMap"]=lt,lt.__name__=["haxe","IMap"];var Rt=function(t,n){this.high=t,this.low=n};p["haxe._Int64.___Int64"]=Rt,Rt.__name__=["haxe","_Int64","___Int64"],Rt.prototype={__class__:Rt};var Xt=function(){this.buf=new Pt,this.cache=[],this.useCache=Xt.USE_CACHE,this.useEnumIndex=Xt.USE_ENUM_INDEX,this.shash=new he,this.scount=0};p["haxe.Serializer"]=Xt,Xt.__name__=["haxe","Serializer"],Xt.prototype={toString:function(){return this.buf.b},serializeString:function(t){var n=this.shash.get(t);if(n!=null){this.buf.b+="R",n==null?this.buf.b+="null":this.buf.b+=""+n;return}this.shash.set(t,this.scount++),this.buf.b+="y",t=encodeURIComponent(t),t.length==null?this.buf.b+="null":this.buf.b+=""+t.length,this.buf.b+=":",t==null?this.buf.b+="null":this.buf.b+=""+t},serializeRef:function(t){for(var n=typeof t,r=0,s=this.cache.length;r<s;){var o=r++,h=this.cache[o];if(typeof h==n&&h==t)return this.buf.b+="r",o==null?this.buf.b+="null":this.buf.b+=""+o,!0}return this.cache.push(t),!1},serializeFields:function(t){for(var n=0,r=W.fields(t);n<r.length;){var s=r[n];++n,this.serializeString(s),this.serialize(W.field(t,s))}this.buf.b+="g"},serialize:function(t){{var n=ct.typeof(t);switch(n[1]){case 0:this.buf.b+="n";break;case 1:var r=t;if(r==0){this.buf.b+="z";return}this.buf.b+="i",r==null?this.buf.b+="null":this.buf.b+=""+r;break;case 2:var s=t;isNaN(s)?this.buf.b+="k":isFinite(s)?(this.buf.b+="d",s==null?this.buf.b+="null":this.buf.b+=""+s):s<0?this.buf.b+="m":this.buf.b+="p";break;case 3:t?this.buf.b+="t":this.buf.b+="f";break;case 6:var o=n[2];if(o==String){this.serializeString(t);return}if(this.useCache&&this.serializeRef(t))return;switch(o){case Array:var h=0;this.buf.b+="a";for(var c=t.length,v=0;v<c;){var d=v++;t[d]==null?h++:(h>0&&(h==1?this.buf.b+="n":(this.buf.b+="u",h==null?this.buf.b+="null":this.buf.b+=""+h),h=0),this.serialize(t[d]))}h>0&&(h==1?this.buf.b+="n":(this.buf.b+="u",h==null?this.buf.b+="null":this.buf.b+=""+h)),this.buf.b+="h";break;case H:this.buf.b+="l";for(var m=t,b=m.h,w=null;b!=null;){var M;w=b[0],b=b[1],M=w,this.serialize(M)}this.buf.b+="h";break;case Date:var P=t;this.buf.b+="v",this.buf.add(P.getTime());break;case he:this.buf.b+="b";for(var z=t,I=z.keys();I.hasNext();){var C=I.next();this.serializeString(C),this.serialize(Ir[C]!=null?z.getReserved(C):z.h[C])}this.buf.b+="h";break;case jt:this.buf.b+="q";for(var L=t,B=L.keys();B.hasNext();){var T=B.next();this.buf.b+=":",T==null?this.buf.b+="null":this.buf.b+=""+T,this.serialize(L.h[T])}this.buf.b+="h";break;case Qt:this.buf.b+="M";for(var R=t,F=R.keys();F.hasNext();){var X=F.next(),D=W.field(X,"__id__");W.deleteField(X,"__id__"),this.serialize(X),X.__id__=D,this.serialize(R.h[X.__id__])}this.buf.b+="h";break;case le:for(var V=t,q=0,J=V.length-2,$=new Pt,nt=Xt.BASE64;q<J;){var st=V.get(q++),rt=V.get(q++),at=V.get(q++);$.add(nt.charAt(st>>2)),$.add(nt.charAt((st<<4|rt>>4)&63)),$.add(nt.charAt((rt<<2|at>>6)&63)),$.add(nt.charAt(at&63))}if(q==J){var et=V.get(q++),ot=V.get(q++);$.add(nt.charAt(et>>2)),$.add(nt.charAt((et<<4|ot>>4)&63)),$.add(nt.charAt(ot<<2&63))}else if(q==J+1){var O=V.get(q++);$.add(nt.charAt(O>>2)),$.add(nt.charAt(O<<4&63))}var ut=$.b;this.buf.b+="s",ut.length==null?this.buf.b+="null":this.buf.b+=""+ut.length,this.buf.b+=":",ut==null?this.buf.b+="null":this.buf.b+=""+ut;break;default:this.useCache&&this.cache.pop(),t.hxSerialize!=null?(this.buf.b+="C",this.serializeString(ct.getClassName(o)),this.useCache&&this.cache.push(t),t.hxSerialize(this),this.buf.b+="g"):(this.buf.b+="c",this.serializeString(ct.getClassName(o)),this.useCache&&this.cache.push(t),this.serializeFields(t))}break;case 4:if(bt.__instanceof(t,yi)){var gt=ct.getClassName(t);this.buf.b+="A",this.serializeString(gt)}else if(bt.__instanceof(t,wi))this.buf.b+="B",this.serializeString(ct.getEnumName(t));else{if(this.useCache&&this.serializeRef(t))return;this.buf.b+="o",this.serializeFields(t)}break;case 7:var It=n[2];if(this.useCache){if(this.serializeRef(t))return;this.cache.pop()}this.useEnumIndex?this.buf.b+="j":this.buf.b+="w",this.serializeString(ct.getEnumName(It)),this.useEnumIndex?(this.buf.b+=":",this.buf.b+=wt.string(t[1])):this.serializeString(t[0]),this.buf.b+=":";var Et=t.length;this.buf.b+=wt.string(Et-2);for(var Ct=2;Ct<Et;){var Tt=Ct++;this.serialize(t[Tt])}this.useCache&&this.cache.push(t);break;case 5:throw new j("Cannot serialize function");default:throw new j("Cannot serialize "+wt.string(t))}}},__class__:Xt};var Vt=function(t){this.buf=t,this.length=t.length,this.pos=0,this.scache=[],this.cache=[];var n=Vt.DEFAULT_RESOLVER;n==null&&(n=ct,Vt.DEFAULT_RESOLVER=n),this.setResolver(n)};p["haxe.Unserializer"]=Vt,Vt.__name__=["haxe","Unserializer"],Vt.initCodes=function(){for(var t=[],n=0,r=Vt.BASE64.length;n<r;){var s=n++;t[Vt.BASE64.charCodeAt(s)]=s}return t},Vt.prototype={setResolver:function(t){t==null?this.resolver={resolveClass:function(n){return null},resolveEnum:function(n){return null}}:this.resolver=t},get:function(t){return this.buf.charCodeAt(t)},readDigits:function(){for(var t=0,n=!1,r=this.pos;;){var s=this.buf.charCodeAt(this.pos);if(s!=s)break;if(s==45){if(this.pos!=r)break;n=!0,this.pos++;continue}if(s<48||s>57)break;t=t*10+(s-48),this.pos++}return n&&(t*=-1),t},readFloat:function(){for(var t=this.pos;;){var n=this.buf.charCodeAt(this.pos);if(n>=43&&n<58||n==101||n==69)this.pos++;else break}return wt.parseFloat(U.substr(this.buf,t,this.pos-t))},unserializeObject:function(t){for(;;){if(this.pos>=this.length)throw new j("Invalid object");if(this.buf.charCodeAt(this.pos)==103)break;var n=this.unserialize();if(typeof n!="string")throw new j("Invalid object key");var r=this.unserialize();t[n]=r}this.pos++},unserializeEnum:function(t,n){if(this.get(this.pos++)!=58)throw new j("Invalid enum format");var r=this.readDigits();if(r==0)return ct.createEnum(t,n);for(var s=[];r-- >0;)s.push(this.unserialize());return ct.createEnum(t,n,s)},unserialize:function(){var t=this.get(this.pos++);switch(t){case 110:return null;case 116:return!0;case 102:return!1;case 122:return 0;case 105:return this.readDigits();case 100:return this.readFloat();case 121:var n=this.readDigits();if(this.get(this.pos++)!=58||this.length-this.pos<n)throw new j("Invalid string length");var r=U.substr(this.buf,this.pos,n);return this.pos+=n,r=decodeURIComponent(r.split("+").join(" ")),this.scache.push(r),r;case 107:return NaN;case 109:return-1/0;case 112:return 1/0;case 97:this.buf;var s=[];for(this.cache.push(s);;){var o=this.buf.charCodeAt(this.pos);if(o==104){this.pos++;break}if(o==117){this.pos++;var h=this.readDigits();s[s.length+h-1]=null}else s.push(this.unserialize())}return s;case 111:var c={};return this.cache.push(c),this.unserializeObject(c),c;case 114:var v=this.readDigits();if(v<0||v>=this.cache.length)throw new j("Invalid reference");return this.cache[v];case 82:var d=this.readDigits();if(d<0||d>=this.scache.length)throw new j("Invalid string reference");return this.scache[d];case 120:throw new j(this.unserialize());case 99:var m=this.unserialize(),b=this.resolver.resolveClass(m);if(b==null)throw new j("Class not found "+m);var w=ct.createEmptyInstance(b);return this.cache.push(w),this.unserializeObject(w),w;case 119:var M=this.unserialize(),P=this.resolver.resolveEnum(M);if(P==null)throw new j("Enum not found "+M);var z=this.unserializeEnum(P,this.unserialize());return this.cache.push(z),z;case 106:var I=this.unserialize(),C=this.resolver.resolveEnum(I);if(C==null)throw new j("Enum not found "+I);this.pos++;var L=this.readDigits(),B=ct.getEnumConstructs(C)[L];if(B==null)throw new j("Unknown enum index "+I+"@"+L);var T=this.unserializeEnum(C,B);return this.cache.push(T),T;case 108:var R=new H;for(this.cache.push(R),this.buf;this.buf.charCodeAt(this.pos)!=104;)R.add(this.unserialize());return this.pos++,R;case 98:var F=new he;for(this.cache.push(F),this.buf;this.buf.charCodeAt(this.pos)!=104;){var X=this.unserialize();F.set(X,this.unserialize())}return this.pos++,F;case 113:var D=new jt;this.cache.push(D),this.buf;for(var V=this.get(this.pos++);V==58;){var q=this.readDigits();D.set(q,this.unserialize()),V=this.get(this.pos++)}if(V!=104)throw new j("Invalid IntMap format");return D;case 77:var J=new Qt;for(this.cache.push(J),this.buf;this.buf.charCodeAt(this.pos)!=104;){var $=this.unserialize();J.set($,this.unserialize())}return this.pos++,J;case 118:var nt;if(this.buf.charCodeAt(this.pos)>=48&&this.buf.charCodeAt(this.pos)<=57&&this.buf.charCodeAt(this.pos+1)>=48&&this.buf.charCodeAt(this.pos+1)<=57&&this.buf.charCodeAt(this.pos+2)>=48&&this.buf.charCodeAt(this.pos+2)<=57&&this.buf.charCodeAt(this.pos+3)>=48&&this.buf.charCodeAt(this.pos+3)<=57&&this.buf.charCodeAt(this.pos+4)==45){var st=U.substr(this.buf,this.pos,19);nt=U.strDate(st),this.pos+=19}else{var rt=this.readFloat(),at=new Date;at.setTime(rt),nt=at}return this.cache.push(nt),nt;case 115:var et=this.readDigits(),ot=this.buf;if(this.get(this.pos++)!=58||this.length-this.pos<et)throw new j("Invalid bytes length");var O=Vt.CODES;O==null&&(O=Vt.initCodes(),Vt.CODES=O);var ut=this.pos,gt=et&3,It;It=(et>>2)*3+(gt>=2?gt-1:0);for(var Et=ut+(et-gt),Ct=le.alloc(It),Tt=0;ut<Et;){var ie=O[mt.fastCodeAt(ot,ut++)],ge=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,ie<<2|ge>>4);var ne=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,ge<<4|ne>>2);var $t=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,ne<<6|$t)}if(gt>=2){var se=O[mt.fastCodeAt(ot,ut++)],_e=O[mt.fastCodeAt(ot,ut++)];if(Ct.set(Tt++,se<<2|_e>>4),gt==3){var xe=O[mt.fastCodeAt(ot,ut++)];Ct.set(Tt++,_e<<4|xe>>2)}}return this.pos+=et,this.cache.push(Ct),Ct;case 67:var Ee=this.unserialize(),Me=this.resolver.resolveClass(Ee);if(Me==null)throw new j("Class not found "+Ee);var Pe=ct.createEmptyInstance(Me);if(this.cache.push(Pe),Pe.hxUnserialize(this),this.get(this.pos++)!=103)throw new j("Invalid custom data");return Pe;case 65:var Ae=this.unserialize(),Re=this.resolver.resolveClass(Ae);if(Re==null)throw new j("Class not found "+Ae);return Re;case 66:var bn=this.unserialize(),en=this.resolver.resolveEnum(bn);if(en==null)throw new j("Enum not found "+bn);return en}throw this.pos--,new j("Invalid char "+this.buf.charAt(this.pos)+" at position "+this.pos)},__class__:Vt};var jt=function(){this.h={}};p["haxe.ds.IntMap"]=jt,jt.__name__=["haxe","ds","IntMap"],jt.__interfaces__=[lt],jt.prototype={set:function(t,n){this.h[t]=n},remove:function(t){return this.h.hasOwnProperty(t)?(delete this.h[t],!0):!1},keys:function(){var t=[];for(var n in this.h)this.h.hasOwnProperty(n)&&t.push(n|0);return U.iter(t)},__class__:jt};var Qt=function(){this.h={},this.h.__keys__={}};p["haxe.ds.ObjectMap"]=Qt,Qt.__name__=["haxe","ds","ObjectMap"],Qt.__interfaces__=[lt],Qt.prototype={set:function(t,n){var r=t.__id__||(t.__id__=++Qt.count);this.h[r]=n,this.h.__keys__[r]=t},keys:function(){var t=[];for(var n in this.h.__keys__)this.h.hasOwnProperty(n)&&t.push(this.h.__keys__[n]);return U.iter(t)},__class__:Qt};var oe=p["haxe.ds.Option"]={__ename__:["haxe","ds","Option"],__constructs__:["Some","None"]};oe.Some=function(t){var n=["Some",0,t];return n.__enum__=oe,n.toString=N,n},oe.None=["None",1],oe.None.toString=N,oe.None.__enum__=oe;var he=function(){this.h={}};p["haxe.ds.StringMap"]=he,he.__name__=["haxe","ds","StringMap"],he.__interfaces__=[lt],he.prototype={set:function(t,n){Ir[t]!=null?this.setReserved(t,n):this.h[t]=n},get:function(t){return Ir[t]!=null?this.getReserved(t):this.h[t]},setReserved:function(t,n){this.rh==null&&(this.rh={}),this.rh["$"+t]=n},getReserved:function(t){return this.rh==null?null:this.rh["$"+t]},keys:function(){var t=this.arrayKeys();return U.iter(t)},arrayKeys:function(){var t=[];for(var n in this.h)this.h.hasOwnProperty(n)&&t.push(n);if(this.rh!=null)for(var n in this.rh)n.charCodeAt(0)==36&&t.push(n.substr(1));return t},__class__:he};var le=function(t){this.length=t.byteLength,this.b=new Nr(t),this.b.bufferValue=t,t.hxBytes=this,t.bytes=this.b};p["haxe.io.Bytes"]=le,le.__name__=["haxe","io","Bytes"],le.alloc=function(t){return new le(new or(t))},le.prototype={get:function(t){return this.b[t]},set:function(t,n){this.b[t]=n&255},__class__:le};var Ft=p["haxe.io.Error"]={__ename__:["haxe","io","Error"],__constructs__:["Blocked","Overflow","OutsideBounds","Custom"]};Ft.Blocked=["Blocked",0],Ft.Blocked.toString=N,Ft.Blocked.__enum__=Ft,Ft.Overflow=["Overflow",1],Ft.Overflow.toString=N,Ft.Overflow.__enum__=Ft,Ft.OutsideBounds=["OutsideBounds",2],Ft.OutsideBounds.toString=N,Ft.OutsideBounds.__enum__=Ft,Ft.Custom=function(t){var n=["Custom",3,t];return n.__enum__=Ft,n.toString=N,n};var Wt=function(){};p["haxe.io.FPHelper"]=Wt,Wt.__name__=["haxe","io","FPHelper"],Wt.i32ToFloat=function(t){var n=1-(t>>>31<<1),r=t>>>23&255,s=t&8388607;return s==0&&r==0?0:n*(1+Math.pow(2,-23)*s)*Math.pow(2,r-127)},Wt.floatToI32=function(t){if(t==0)return 0;var n;t<0?n=-t:n=t;var r=Math.floor(Math.log(n)/.6931471805599453);r<-127?r=-127:r>128&&(r=128);var s=Math.round((n/Math.pow(2,r)-1)*8388608)&8388607;return(t<0?-2147483648:0)|r+127<<23|s},Wt.i64ToDouble=function(t,n){var r=1-(n>>>31<<1),s=(n>>20&2047)-1023,o=(n&1048575)*4294967296+(t>>>31)*2147483648+(t&2147483647);return o==0&&s==-1023?0:r*(1+Math.pow(2,-52)*o)*Math.pow(2,s)},Wt.doubleToI64=function(t){var n=Wt.i64tmp;if(t==0)n.low=0,n.high=0;else{var r;t<0?r=-t:r=t;var s=Math.floor(Math.log(r)/.6931471805599453),o,h=(r/Math.pow(2,s)-1)*4503599627370496;o=Math.round(h);var c=o|0,v=o/4294967296|0;n.low=c,n.high=(t<0?-2147483648:0)|s+1023<<20|v}return n};var j=function(t){Error.call(this),this.val=t,this.message=String(t),Error.captureStackTrace&&Error.captureStackTrace(this,j)};p["js._Boot.HaxeError"]=j,j.__name__=["js","_Boot","HaxeError"],j.__super__=Error,j.prototype=k(Error.prototype,{__class__:j});var bt=function(){};p["js.Boot"]=bt,bt.__name__=["js","Boot"],bt.getClass=function(t){if(t instanceof Array&&t.__enum__==null)return Array;var n=t.__class__;if(n!=null)return n;var r=bt.__nativeClassName(t);return r!=null?bt.__resolveNativeClass(r):null},bt.__string_rec=function(t,n){if(t==null)return"null";if(n.length>=5)return"<...>";var r=typeof t;switch(r=="function"&&(t.__name__||t.__ename__)&&(r="object"),r){case"object":if(t instanceof Array){if(t.__enum__){if(t.length==2)return t[0];var s=t[0]+"(";n+=" ";for(var o=2,h=t.length;o<h;){var c=o++;c!=2?s+=","+bt.__string_rec(t[c],n):s+=bt.__string_rec(t[c],n)}return s+")"}var v=t.length,d="[";n+=" ";for(var m=0;m<v;){var b=m++;d+=(b>0?",":"")+bt.__string_rec(t[b],n)}return d+="]",d}var w;try{w=t.toString}catch(C){return C instanceof j&&(C=C.val),"???"}if(w!=null&&w!=Object.toString&&typeof w=="function"){var M=t.toString();if(M!="[object Object]")return M}var P=null,z=`{
|
|
2
|
+
`;n+=" ";var I=t.hasOwnProperty!=null;for(var P in t)I&&!t.hasOwnProperty(P)||P=="prototype"||P=="__class__"||P=="__super__"||P=="__interfaces__"||P=="__properties__"||(z.length!=2&&(z+=`,
|
|
3
|
+
`),z+=n+P+" : "+bt.__string_rec(t[P],n));return n=n.substring(1),z+=`
|
|
4
|
+
`+n+"}",z;case"function":return"<function>";case"string":return t;default:return String(t)}},bt.__interfLoop=function(t,n){if(t==null)return!1;if(t==n)return!0;var r=t.__interfaces__;if(r!=null)for(var s=0,o=r.length;s<o;){var h=s++,c=r[h];if(c==n||bt.__interfLoop(c,n))return!0}return bt.__interfLoop(t.__super__,n)},bt.__instanceof=function(t,n){if(n==null)return!1;switch(n){case Xi:return(t|0)===t;case gi:return typeof t=="number";case pi:return typeof t=="boolean";case String:return typeof t=="string";case Array:return t instanceof Array&&t.__enum__==null;case Wi:return!0;default:if(t!=null){if(typeof n=="function"){if(t instanceof n||bt.__interfLoop(bt.getClass(t),n))return!0}else if(typeof n=="object"&&bt.__isNativeObj(n)&&t instanceof n)return!0}else return!1;return n==yi&&t.__name__!=null||n==wi&&t.__ename__!=null?!0:t.__enum__==n}},bt.__nativeClassName=function(t){var n=bt.__toStr.call(t).slice(8,-1);return n=="Object"||n=="Function"||n=="Math"||n=="JSON"?null:n},bt.__isNativeObj=function(t){return bt.__nativeClassName(t)!=null},bt.__resolveNativeClass=function(t){return A[t]};var Zt=function(t){if(t instanceof Array&&t.__enum__==null)this.a=t,this.byteLength=t.length;else{var n=t;this.a=[];for(var r=0;r<n;){var s=r++;this.a[s]=0}this.byteLength=n}};p["js.html.compat.ArrayBuffer"]=Zt,Zt.__name__=["js","html","compat","ArrayBuffer"],Zt.sliceImpl=function(t,n){var r=new Nr(this,t,n==null?null:n-t),s=new or(r.byteLength),o=new Nr(s);return o.set(r),s},Zt.prototype={slice:function(t,n){return new Zt(this.a.slice(t,n))},__class__:Zt};var Se=function(t,n,r){if(this.buf=t,n==null?this.offset=0:this.offset=n,r==null?this.length=t.byteLength-this.offset:this.length=r,this.offset<0||this.length<0||this.offset+this.length>t.byteLength)throw new j(Ft.OutsideBounds)};p["js.html.compat.DataView"]=Se,Se.__name__=["js","html","compat","DataView"],Se.prototype={getInt8:function(t){var n=this.buf.a[this.offset+t];return n>=128?n-256:n},getUint8:function(t){return this.buf.a[this.offset+t]},getInt16:function(t,n){var r=this.getUint16(t,n);return r>=32768?r-65536:r},getUint16:function(t,n){return n?this.buf.a[this.offset+t]|this.buf.a[this.offset+t+1]<<8:this.buf.a[this.offset+t]<<8|this.buf.a[this.offset+t+1]},getInt32:function(t,n){var r=this.offset+t,s=this.buf.a[r++],o=this.buf.a[r++],h=this.buf.a[r++],c=this.buf.a[r++];return n?s|o<<8|h<<16|c<<24:c|h<<8|o<<16|s<<24},getUint32:function(t,n){var r=this.getInt32(t,n);return r<0?r+4294967296:r},getFloat32:function(t,n){return Wt.i32ToFloat(this.getInt32(t,n))},getFloat64:function(t,n){var r=this.getInt32(t,n),s=this.getInt32(t+4,n);return Wt.i64ToDouble(n?r:s,n?s:r)},setInt8:function(t,n){n<0?this.buf.a[t+this.offset]=n+128&255:this.buf.a[t+this.offset]=n&255},setUint8:function(t,n){this.buf.a[t+this.offset]=n&255},setInt16:function(t,n,r){this.setUint16(t,n<0?n+65536:n,r)},setUint16:function(t,n,r){var s=t+this.offset;r?(this.buf.a[s]=n&255,this.buf.a[s++]=n>>8&255):(this.buf.a[s++]=n>>8&255,this.buf.a[s]=n&255)},setInt32:function(t,n,r){this.setUint32(t,n,r)},setUint32:function(t,n,r){var s=t+this.offset;r?(this.buf.a[s++]=n&255,this.buf.a[s++]=n>>8&255,this.buf.a[s++]=n>>16&255,this.buf.a[s++]=n>>>24):(this.buf.a[s++]=n>>>24,this.buf.a[s++]=n>>16&255,this.buf.a[s++]=n>>8&255,this.buf.a[s++]=n&255)},setFloat32:function(t,n,r){this.setUint32(t,Wt.floatToI32(n),r)},setFloat64:function(t,n,r){var s=Wt.doubleToI64(n);r?(this.setUint32(t,s.low),this.setUint32(t,s.high)):(this.setUint32(t,s.high),this.setUint32(t,s.low))},__class__:Se};var Ce=function(){};p["js.html.compat.Uint8Array"]=Ce,Ce.__name__=["js","html","compat","Uint8Array"],Ce._new=function(t,n,r){var s;if(typeof t=="number"){s=[];for(var o=0;o<t;){var h=o++;s[h]=0}s.byteLength=s.length,s.byteOffset=0,s.buffer=new Zt(s)}else if(bt.__instanceof(t,Zt)){var c=t;n==null&&(n=0),r==null&&(r=c.byteLength-n),n==0?s=c.a:s=c.a.slice(n,n+r),s.byteLength=s.length,s.byteOffset=n,s.buffer=c}else if(t instanceof Array&&t.__enum__==null)s=t.slice(),s.byteLength=s.length,s.byteOffset=0,s.buffer=new Zt(s);else throw new j("TODO "+wt.string(t));return s.subarray=Ce._subarray,s.set=Ce._set,s},Ce._set=function(t,n){var r=this;if(bt.__instanceof(t.buffer,Zt)){var s=t;if(t.byteLength+n>r.byteLength)throw new j("set() outside of range");for(var o=0,h=t.byteLength;o<h;){var c=o++;r[c+n]=s[c]}}else if(t instanceof Array&&t.__enum__==null){var v=t;if(v.length+n>r.byteLength)throw new j("set() outside of range");for(var d=0,m=v.length;d<m;){var b=d++;r[b+n]=v[b]}}else throw new j("TODO")},Ce._subarray=function(t,n){var r=this,s=Ce._new(r.slice(t,n));return s.byteOffset=t,s};var yt=function(t){this._resolved=!1,this._pending=!1,this._errorPending=!1,this._fulfilled=!1,this._update=[],this._error=[],this._errored=!1,t!=null&&yt.link(t,this,function(n){return n})};p["promhx.base.AsyncBase"]=yt,yt.__name__=["promhx","base","AsyncBase"],yt.link=function(t,n,r){t._update.push({async:n,linkf:function(s){n.handleResolve(r(s))}}),yt.immediateLinkUpdate(t,n,r)},yt.immediateLinkUpdate=function(t,n,r){if(t._errored&&!t._errorPending&&!(t._error.length>0)&&n.handleError(t._errorVal),t._resolved&&!t._pending)try{n.handleResolve(r(t._val))}catch(s){s instanceof j&&(s=s.val),n.handleError(s)}},yt.linkAll=function(t,n){for(var r=function(h,c,v){if(h.length==0||yt.allFulfilled(h)){for(var d,m=[],b=be(t)();b.hasNext();){var w=b.next();m.push(w==c?v:w._val)}d=m,n.handleResolve(d)}},s=be(t)();s.hasNext();){var o=s.next();o._update.push({async:n,linkf:function(h,c,v){return function(d){h(c,v,d)}}(r,function(h){for(var c,v=[],d=be(t)();d.hasNext();){var m=d.next();m!=o&&v.push(m)}return c=v,c}(),o)})}yt.allFulfilled(t)&&n.handleResolve(function(h){for(var c,v=[],d=be(t)();d.hasNext();){var m=d.next();v.push(m._val)}return c=v,c}())},yt.pipeLink=function(t,n,r){var s=!1,o=function(h){if(!s){s=!0;var c=r(h);c._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(c,n,function(v){return v})}};if(t._update.push({async:n,linkf:o}),t._resolved&&!t._pending)try{o(t._val)}catch(h){h instanceof j&&(h=h.val),n.handleError(h)}},yt.allResolved=function(t){for(var n=be(t)();n.hasNext();){var r=n.next();if(!r._resolved)return!1}return!0},yt.allFulfilled=function(t){for(var n=be(t)();n.hasNext();){var r=n.next();if(!r._fulfilled)return!1}return!0},yt.prototype={catchError:function(t){return this._error.push(t),this},errorThen:function(t){return this._errorMap=t,this},isResolved:function(){return this._resolved},isErrored:function(){return this._errored},isErrorHandled:function(){return this._error.length>0},isErrorPending:function(){return this._errorPending},isFulfilled:function(){return this._fulfilled},isPending:function(){return this._pending},handleResolve:function(t){this._resolve(t)},_resolve:function(t){var n=this;this._pending?ft.enqueue(function(r,s){return function(){r(s)}}(ve(this,this._resolve),t)):(this._resolved=!0,this._pending=!0,ft.queue.add(function(){n._val=t;for(var r=0,s=n._update;r<s.length;){var o=s[r];++r;try{o.linkf(t)}catch(h){h instanceof j&&(h=h.val),o.async.handleError(h)}}n._fulfilled=!0,n._pending=!1}),ft.continueOnNextLoop())},handleError:function(t){this._handleError(t)},_handleError:function(t){var n=this,r=function(s){if(n._error.length>0)for(var o=0,h=n._error;o<h.length;){var c=h[o];++o,c(s)}else if(n._update.length>0)for(var v=0,d=n._update;v<d.length;){var m=d[v];++v,m.async.handleError(s)}else throw new j(s);n._errorPending=!1};this._errorPending||(this._errorPending=!0,this._errored=!0,this._errorVal=t,ft.queue.add(function(){if(n._errorMap!=null)try{n._resolve(n._errorMap(t))}catch(s){s instanceof j&&(s=s.val),r(s)}else r(t)}),ft.continueOnNextLoop())},then:function(t){var n=new yt(null);return yt.link(this,n,t),n},unlink:function(t){var n=this;ft.queue.add(function(){n._update=n._update.filter(function(r){return r.async!=t})}),ft.continueOnNextLoop()},isLinked:function(t){for(var n=!1,r=0,s=this._update;r<s.length;){var o=s[r];if(++r,o.async==t)return!0}return n},__class__:yt};var un=f.promhx.Deferred=function(){yt.call(this)};p["promhx.Deferred"]=un,un.__name__=["promhx","Deferred"],un.__super__=yt,un.prototype=k(yt.prototype,{resolve:function(t){this.handleResolve(t)},throwError:function(t){this.handleError(t)},promise:function(){return new Jt(this)},stream:function(){return new Nt(this)},publicStream:function(){return new Fe(this)},__class__:un});var Jt=f.promhx.Promise=function(t){yt.call(this,t),this._rejected=!1};p["promhx.Promise"]=Jt,Jt.__name__=["promhx","Promise"],Jt.whenAll=function(t){var n=new Jt(null);return yt.linkAll(t,n),n},Jt.promise=function(t){var n=new Jt;return n.handleResolve(t),n},Jt.__super__=yt,Jt.prototype=k(yt.prototype,{isRejected:function(){return this._rejected},reject:function(t){this._rejected=!0,this.handleError(t)},handleResolve:function(t){if(this._resolved){var n="Promise has already been resolved";throw new j(cn.AlreadyResolved(n))}this._resolve(t)},then:function(t){var n=new Jt(null);return yt.link(this,n,t),n},unlink:function(t){var n=this;ft.queue.add(function(){if(n._fulfilled)n._update=n._update.filter(function(s){return s.async!=t});else{var r="Downstream Promise is not fullfilled";n.handleError(cn.DownstreamNotFullfilled(r))}}),ft.continueOnNextLoop()},handleError:function(t){this._rejected=!0,this._handleError(t)},pipe:function(t){var n=new Jt(null);return yt.pipeLink(this,n,t),n},errorPipe:function(t){var n=new Jt;return this.catchError(function(r){var s=t(r);s.then(ve(n,n._resolve))}),this.then(ve(n,n._resolve)),n},__class__:Jt});var Nt=f.promhx.Stream=function(t){yt.call(this,t),this._end_promise=new Jt};p["promhx.Stream"]=Nt,Nt.__name__=["promhx","Stream"],Nt.foreach=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.handleResolve(s)}return n.end(),n},Nt.wheneverAll=function(t){var n=new Nt(null);return yt.linkAll(t,n),n},Nt.concatAll=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.concat(s)}return n},Nt.mergeAll=function(t){for(var n=new Nt(null),r=be(t)();r.hasNext();){var s=r.next();n.merge(s)}return n},Nt.stream=function(t){var n=new Nt(null);return n.handleResolve(t),n},Nt.__super__=yt,Nt.prototype=k(yt.prototype,{then:function(t){var n=new Nt(null);return yt.link(this,n,t),this._end_promise._update.push({async:n._end_promise,linkf:function(r){n.end()}}),n},detachStream:function(t){for(var n=[],r=!1,s=0,o=this._update;s<o.length;){var h=o[s];++s,h.async==t?(this._end_promise._update=this._end_promise._update.filter(function(c){return c.async!=t._end_promise}),r=!0):n.push(h)}return this._update=n,r},first:function(){var t=new Jt(null);return this.then(function(n){t._resolved||t.handleResolve(n)}),t},handleResolve:function(t){!this._end&&!this._pause&&this._resolve(t)},pause:function(t){t==null&&(t=!this._pause),this._pause=t},pipe:function(t){var n=new Nt(null);return yt.pipeLink(this,n,t),this._end_promise.then(function(r){n.end()}),n},errorPipe:function(t){var n=new Nt(null);return this.catchError(function(r){var s=t(r);s.then(ve(n,n._resolve)),s._end_promise.then((kr=n._end_promise,ve(kr,kr._resolve)))}),this.then(ve(n,n._resolve)),this._end_promise.then(function(r){n.end()}),n},handleEnd:function(){if(this._pending)ft.queue.add(ve(this,this.handleEnd)),ft.continueOnNextLoop();else{if(this._end_promise._resolved)return;this._end=!0;var t;this._resolved?t=oe.Some(this._val):t=oe.None,this._end_promise.handleResolve(t),this._update=[],this._error=[]}},end:function(){return ft.queue.add(ve(this,this.handleEnd)),ft.continueOnNextLoop(),this},endThen:function(t){return this._end_promise.then(t)},filter:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:function(r){t(r)&&n.handleResolve(r)}}),yt.immediateLinkUpdate(this,n,function(r){return r}),n},concat:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(this,n,function(r){return r}),this._end_promise.then(function(r){t.pipe(function(s){return n.handleResolve(s),n}),t._end_promise.then(function(s){n.end()})}),n},merge:function(t){var n=new Nt(null);return this._update.push({async:n,linkf:ve(n,n.handleResolve)}),t._update.push({async:n,linkf:ve(n,n.handleResolve)}),yt.immediateLinkUpdate(this,n,function(r){return r}),yt.immediateLinkUpdate(t,n,function(r){return r}),n},__class__:Nt});var Fe=f.promhx.PublicStream=function(t){Nt.call(this,t)};p["promhx.PublicStream"]=Fe,Fe.__name__=["promhx","PublicStream"],Fe.publicstream=function(t){var n=new Fe(null);return n.handleResolve(t),n},Fe.__super__=Nt,Fe.prototype=k(Nt.prototype,{resolve:function(t){this.handleResolve(t)},throwError:function(t){this.handleError(t)},update:function(t){this.handleResolve(t)},__class__:Fe});var ft=function(){};p["promhx.base.EventLoop"]=ft,ft.__name__=["promhx","base","EventLoop"],ft.enqueue=function(t){ft.queue.add(t),ft.continueOnNextLoop()},ft.set_nextLoop=function(t){if(ft.nextLoop!=null)throw new j("nextLoop has already been set");return ft.nextLoop=t,ft.nextLoop},ft.queueEmpty=function(){return ft.queue.isEmpty()},ft.finish=function(t){t==null&&(t=1e3);for(var n=null;t-- >0&&(n=ft.queue.pop())!=null;)n();return ft.queue.isEmpty()},ft.clear=function(){ft.queue=new H},ft.f=function(){var t=ft.queue.pop();t!=null&&t(),ft.queue.isEmpty()||ft.continueOnNextLoop()},ft.continueOnNextLoop=function(){ft.nextLoop!=null?ft.nextLoop(ft.f):setImmediate(ft.f)};var cn=p["promhx.error.PromiseError"]={__ename__:["promhx","error","PromiseError"],__constructs__:["AlreadyResolved","DownstreamNotFullfilled"]};cn.AlreadyResolved=function(t){var n=["AlreadyResolved",0,t];return n.__enum__=cn,n.toString=N,n},cn.DownstreamNotFullfilled=function(t){var n=["DownstreamNotFullfilled",1,t];return n.__enum__=cn,n.toString=N,n};var sr=function(){};p["verb.Verb"]=sr,sr.__name__=["verb","Verb"],sr.main=function(){x.log("verb 2.1.0")};var G=function(){};p["verb.core.ArrayExtensions"]=G,G.__name__=["verb","core","ArrayExtensions"],G.alloc=function(t,n){if(!(n<0))for(;t.length<n;)t.push(null)},G.reversed=function(t){var n=t.slice();return n.reverse(),n},G.last=function(t){return t[t.length-1]},G.first=function(t){return t[0]},G.spliceAndInsert=function(t,n,r,s){t.splice(n,r),t.splice(n,0,s)},G.left=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(0,n)},G.right=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(n)},G.rightWithPivot=function(t){if(t.length==0)return[];var n=Math.ceil(t.length/2);return t.slice(n-1)},G.unique=function(t,n){if(t.length==0)return[];for(var r=[t.pop()];t.length>0;){for(var s=t.pop(),o=!0,h=0;h<r.length;){var c=r[h];if(++h,n(s,c)){o=!1;break}}o&&r.push(s)}return r};var zt=function(){};p["verb.core.Binomial"]=zt,zt.__name__=["verb","core","Binomial"],zt.get=function(t,n){if(n==0)return 1;if(t==0||n>t)return 0;if(n>t-n&&(n=t-n),zt.memo_exists(t,n))return zt.get_memo(t,n);for(var r=1,s=t,o=1,h=n+1;o<h;){var c=o++;if(zt.memo_exists(s,c)){t--,r=zt.get_memo(s,c);continue}r*=t--,r/=c,zt.memoize(s,c,r)}return r},zt.get_no_memo=function(t,n){if(n==0)return 1;if(t==0||n>t)return 0;n>t-n&&(n=t-n);for(var r=1,s=1,o=n+1;s<o;){var h=s++;r*=t--,r/=h}return r},zt.memo_exists=function(t,n){return zt.memo.h.hasOwnProperty(t)&&zt.memo.h[t].h.hasOwnProperty(n)},zt.get_memo=function(t,n){return zt.memo.h[t].h[n]},zt.memoize=function(t,n,r){zt.memo.h.hasOwnProperty(t)||zt.memo.set(t,new jt),zt.memo.h[t].h[n]=r};var ue=f.core.BoundingBox=function(t){this.max=null,this.min=null,this.dim=3,this.initialized=!1,t!=null&&this.addRange(t)};p["verb.core.BoundingBox"]=ue,ue.__name__=["verb","core","BoundingBox"],ue.intervalsOverlap=function(t,n,r,s,o){o==null&&(o=-1);var h;o<-.5?h=tt.TOLERANCE:h=o;var c=Math.min(t,n)-h,v=Math.max(t,n)+h,d=Math.min(r,s)-h,m=Math.max(r,s)+h;return c>=d&&c<=m||v>=d&&v<=m||d>=c&&d<=v||m>=c&&m<=v},ue.prototype={fromPoint:function(t){return new ue([t])},add:function(t){if(!this.initialized)return this.dim=t.length,this.min=t.slice(0),this.max=t.slice(0),this.initialized=!0,this;for(var n=0,r=this.dim;n<r;){var s=n++;t[s]>this.max[s]&&(this.max[s]=t[s]),t[s]<this.min[s]&&(this.min[s]=t[s])}return this},addRange:function(t){for(var n=t.length,r=0;r<n;){var s=r++;this.add(t[s])}return this},contains:function(t,n){return n==null&&(n=-1),this.initialized?this.intersects(new ue([t]),n):!1},intersects:function(t,n){if(n==null&&(n=-1),!this.initialized||!t.initialized)return!1;for(var r=this.min,s=this.max,o=t.min,h=t.max,c=0,v=this.dim;c<v;){var d=c++;if(!ue.intervalsOverlap(r[d],s[d],o[d],h[d],n))return!1}return!0},clear:function(){return this.initialized=!1,this},getLongestAxis:function(){for(var t=0,n=0,r=0,s=this.dim;r<s;){var o=r++,h=this.getAxisLength(o);h>t&&(t=h,n=o)}return n},getAxisLength:function(t){return t<0||t>this.dim-1?0:Math.abs(this.min[t]-this.max[t])},intersect:function(t,n){if(!this.initialized)return null;var r=this.min,s=this.max,o=t.min,h=t.max;if(!this.intersects(t,n))return null;for(var c=[],v=[],d=0,m=this.dim;d<m;){var b=d++;c.push(Math.min(s[b],h[b])),v.push(Math.max(r[b],o[b]))}return new ue([v,c])},__class__:ue};var tt=f.core.Constants=function(){};p["verb.core.Constants"]=tt,tt.__name__=["verb","core","Constants"];var Dt=f.core.SerializableBase=function(){};p["verb.core.SerializableBase"]=Dt,Dt.__name__=["verb","core","SerializableBase"],Dt.prototype={serialize:function(){var t=new Xt;return t.serialize(this),t.toString()},__class__:Dt};var Tn=f.core.Plane=function(t,n){this.origin=t,this.normal=n};p["verb.core.Plane"]=Tn,Tn.__name__=["verb","core","Plane"],Tn.__super__=Dt,Tn.prototype=k(Dt.prototype,{__class__:Tn});var vn=f.core.Ray=function(t,n){this.origin=t,this.dir=n};p["verb.core.Ray"]=vn,vn.__name__=["verb","core","Ray"],vn.__super__=Dt,vn.prototype=k(Dt.prototype,{__class__:vn});var kt=f.core.NurbsCurveData=function(t,n,r){this.degree=t,this.controlPoints=r,this.knots=n};p["verb.core.NurbsCurveData"]=kt,kt.__name__=["verb","core","NurbsCurveData"],kt.__super__=Dt,kt.prototype=k(Dt.prototype,{__class__:kt});var Ot=f.core.NurbsSurfaceData=function(t,n,r,s,o){this.degreeU=t,this.degreeV=n,this.knotsU=r,this.knotsV=s,this.controlPoints=o};p["verb.core.NurbsSurfaceData"]=Ot,Ot.__name__=["verb","core","NurbsSurfaceData"],Ot.__super__=Dt,Ot.prototype=k(Dt.prototype,{__class__:Ot});var ye=f.core.MeshData=function(t,n,r,s){this.faces=t,this.points=n,this.normals=r,this.uvs=s};p["verb.core.MeshData"]=ye,ye.__name__=["verb","core","MeshData"],ye.empty=function(){return new ye([],[],[],[])},ye.__super__=Dt,ye.prototype=k(Dt.prototype,{__class__:ye});var Un=f.core.PolylineData=function(t,n){this.points=t,this.params=n};p["verb.core.PolylineData"]=Un,Un.__name__=["verb","core","PolylineData"],Un.__super__=Dt,Un.prototype=k(Dt.prototype,{__class__:Un});var Rn=f.core.VolumeData=function(t,n,r,s,o,h,c){this.degreeU=t,this.degreeV=n,this.degreeW=r,this.knotsU=s,this.knotsV=o,this.knotsW=h,this.controlPoints=c};p["verb.core.VolumeData"]=Rn,Rn.__name__=["verb","core","VolumeData"],Rn.__super__=Dt,Rn.prototype=k(Dt.prototype,{__class__:Rn});var qt=f.core.Pair=function(t,n){this.item0=t,this.item1=n};p["verb.core.Pair"]=qt,qt.__name__=["verb","core","Pair"],qt.prototype={__class__:qt};var re=f.core.Interval=function(t,n){this.min=t,this.max=n};p["verb.core.Interval"]=re,re.__name__=["verb","core","Interval"],re.prototype={__class__:re};var $e=f.core.CurveCurveIntersection=function(t,n,r,s){this.point0=t,this.point1=n,this.u0=r,this.u1=s};p["verb.core.CurveCurveIntersection"]=$e,$e.__name__=["verb","core","CurveCurveIntersection"],$e.prototype={__class__:$e};var Vn=f.core.CurveSurfaceIntersection=function(t,n,r,s){this.u=t,this.uv=n,this.curvePoint=r,this.surfacePoint=s};p["verb.core.CurveSurfaceIntersection"]=Vn,Vn.__name__=["verb","core","CurveSurfaceIntersection"],Vn.prototype={__class__:Vn};var Oe=f.core.MeshIntersectionPoint=function(t,n,r,s,o){this.visited=!1,this.adj=null,this.opp=null,this.uv0=t,this.uv1=n,this.point=r,this.faceIndex0,this.faceIndex1};p["verb.core.MeshIntersectionPoint"]=Oe,Oe.__name__=["verb","core","MeshIntersectionPoint"],Oe.prototype={__class__:Oe};var Dn=f.core.PolylineMeshIntersection=function(t,n,r,s,o){this.point=t,this.u=n,this.uv=r,this.polylineIndex=s,this.faceIndex=o};p["verb.core.PolylineMeshIntersection"]=Dn,Dn.__name__=["verb","core","PolylineMeshIntersection"],Dn.prototype={__class__:Dn};var Fn=f.core.SurfaceSurfaceIntersectionPoint=function(t,n,r,s){this.uv0=t,this.uv1=n,this.point=r,this.dist=s};p["verb.core.SurfaceSurfaceIntersectionPoint"]=Fn,Fn.__name__=["verb","core","SurfaceSurfaceIntersectionPoint"],Fn.prototype={__class__:Fn};var On=f.core.TriSegmentIntersection=function(t,n,r,s){this.point=t,this.s=n,this.t=r,this.p=s};p["verb.core.TriSegmentIntersection"]=On,On.__name__=["verb","core","TriSegmentIntersection"],On.prototype={__class__:On};var _n=f.core.CurveTriPoint=function(t,n,r){this.u=t,this.point=n,this.uv=r};p["verb.core.CurveTriPoint"]=_n,_n.__name__=["verb","core","CurveTriPoint"],_n.prototype={__class__:_n};var fe=function(t,n,r,s,o){o==null&&(o=!1),s==null&&(s=-1),this.uv=r,this.point=t,this.normal=n,this.id=s,this.degen=o};p["verb.core.SurfacePoint"]=fe,fe.__name__=["verb","core","SurfacePoint"],fe.fromUv=function(t,n){return new fe(null,null,[t,n])},fe.prototype={__class__:fe};var ar=f.core.CurvePoint=function(t,n){this.u=t,this.pt=n};p["verb.core.CurvePoint"]=ar,ar.__name__=["verb","core","CurvePoint"],ar.prototype={__class__:ar};var qn=f.core.KdTree=function(t,n){this.dim=3,this.points=t,this.distanceFunction=n,this.dim=t[0].point.length,this.root=this.buildTree(t,0,null)};p["verb.core.KdTree"]=qn,qn.__name__=["verb","core","KdTree"],qn.prototype={buildTree:function(t,n,r){var s=n%this.dim,o,h;return t.length==0?null:t.length==1?new fn(t[0],s,r):(t.sort(function(c,v){var d=c.point[s]-v.point[s];return d==0?0:d>0?1:-1}),o=Math.floor(t.length/2),h=new fn(t[o],s,r),h.left=this.buildTree(t.slice(0,o),n+1,h),h.right=this.buildTree(t.slice(o+1),n+1,h),h)},nearest:function(t,n,r){var s=this,o=new Gn(function(w){return-w.item1}),h,c=null;c=function(w){for(var M,P=w.dimension,z=s.distanceFunction(t,w.kdPoint.point),I,C=[],L=0,B=s.dim;L<B;)L++,C.push(0);I=C;for(var T,R,F=function(q,J){o.push(new qt(q,J)),o.size()>n&&o.pop()},X=0,D=s.dim;X<D;){var V=X++;V==w.dimension?I[V]=t[V]:I[V]=w.kdPoint.point[V]}if(T=s.distanceFunction(I,w.kdPoint.point),w.right==null&&w.left==null){(o.size()<n||z<o.peek().item1)&&F(w,z);return}w.right==null?M=w.left:w.left==null?M=w.right:t[P]<w.kdPoint.point[P]?M=w.left:M=w.right,c(M),(o.size()<n||z<o.peek().item1)&&F(w,z),(o.size()<n||Math.abs(T)<o.peek().item1)&&(M==w.left?R=w.right:R=w.left,R!=null&&c(R))},h=c;for(var v=0;v<n;)v++,o.push(new qt(null,r));h(this.root);for(var d=[],m=0;m<n;){var b=m++;o.content[b].item0!=null&&d.push(new qt(o.content[b].item0.kdPoint,o.content[b].item1))}return d},__class__:qn};var Gn=function(t){this.content=[],this.scoreFunction=t};p["verb.core.BinaryHeap"]=Gn,Gn.__name__=["verb","core","BinaryHeap"],Gn.prototype={push:function(t){this.content.push(t),this.bubbleUp(this.content.length-1)},pop:function(){var t=this.content[0],n=this.content.pop();return this.content.length>0&&(this.content[0]=n,this.sinkDown(0)),t},peek:function(){return this.content[0]},remove:function(t){for(var n=this.content.length,r=0;r<n;){var s=r++;if(this.content[s]==t){var o=this.content.pop();s!=n-1&&(this.content[s]=o,this.scoreFunction(o)<this.scoreFunction(t)?this.bubbleUp(s):this.sinkDown(s));return}}throw new j("Node not found.")},size:function(){return this.content.length},bubbleUp:function(t){for(var n=this.content[t];t>0;){var r=Math.floor((t+1)/2)-1,s=this.content[r];if(this.scoreFunction(n)<this.scoreFunction(s))this.content[r]=n,this.content[t]=s,t=r;else break}},sinkDown:function(t){for(var n=this.content.length,r=this.content[t],s=this.scoreFunction(r);;){var o=(t+1)*2,h=o-1,c=-1,v=0;if(h<n){var d=this.content[h];v=this.scoreFunction(d),v<s&&(c=h)}if(o<n){var m=this.content[o],b=this.scoreFunction(m);b<(c==-1?s:v)&&(c=o)}if(c!=-1)this.content[t]=this.content[c],this.content[c]=r,t=c;else break}},__class__:Gn};var dn=f.core.KdPoint=function(t,n){this.point=t,this.obj=n};p["verb.core.KdPoint"]=dn,dn.__name__=["verb","core","KdPoint"],dn.prototype={__class__:dn};var fn=f.core.KdNode=function(t,n,r){this.kdPoint=t,this.left=null,this.right=null,this.parent=r,this.dimension=n};p["verb.core.KdNode"]=fn,fn.__name__=["verb","core","KdNode"],fn.prototype={__class__:fn};var Te=function(){};p["verb.eval.IBoundingBoxTree"]=Te,Te.__name__=["verb","eval","IBoundingBoxTree"],Te.prototype={__class__:Te};var ke=function(t,n){this._boundingBox=null,this._curve=t,n==null&&(n=l.domain(this._curve.knots)/64),this._knotTol=n};p["verb.core.LazyCurveBoundingBoxTree"]=ke,ke.__name__=["verb","core","LazyCurveBoundingBoxTree"],ke.__interfaces__=[Te],ke.prototype={split:function(){var t=G.first(this._curve.knots),n=G.last(this._curve.knots),r=n-t,s=Yt.curveSplit(this._curve,(n+t)/2+r*.1*Math.random());return new qt(new ke(s[0],this._knotTol),new ke(s[1],this._knotTol))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=new ue(S.dehomogenize1d(this._curve.controlPoints))),this._boundingBox},yield:function(){return this._curve},indivisible:function(t){return l.domain(this._curve.knots)<this._knotTol},empty:function(){return!1},__class__:ke};var Ie=function(t,n){if(this._boundingBox=null,this._mesh=t,n==null){for(var r=[],s=0,o=t.faces.length;s<o;){var h=s++;r.push(h)}n=r}this._faceIndices=n};p["verb.core.LazyMeshBoundingBoxTree"]=Ie,Ie.__name__=["verb","core","LazyMeshBoundingBoxTree"],Ie.__interfaces__=[Te],Ie.prototype={split:function(){var t=Gt.sortTrianglesOnLongestAxis(this.boundingBox(),this._mesh,this._faceIndices),n=G.left(t),r=G.right(t);return new qt(new Ie(this._mesh,n),new Ie(this._mesh,r))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=Gt.makeMeshAabb(this._mesh,this._faceIndices)),this._boundingBox},yield:function(){return this._faceIndices[0]},indivisible:function(t){return this._faceIndices.length==1},empty:function(){return this._faceIndices.length==0},__class__:Ie};var Ne=function(t,n){this._boundingBox=null,this._polyline=t,n==null&&(n=new re(0,t.points.length!=0?t.points.length-1:0)),this._interval=n};p["verb.core.LazyPolylineBoundingBoxTree"]=Ne,Ne.__name__=["verb","core","LazyPolylineBoundingBoxTree"],Ne.__interfaces__=[Te],Ne.prototype={split:function(){var t=this._interval.min,n=this._interval.max,r=t+Math.ceil((n-t)/2),s=new re(t,r),o=new re(r,n);return new qt(new Ne(this._polyline,s),new Ne(this._polyline,o))},boundingBox:function(){return this._boundingBox==null&&(this._boundingBox=new ue(this._polyline.points)),this._boundingBox},yield:function(){return this._interval.min},indivisible:function(t){return this._interval.max-this._interval.min==1},empty:function(){return this._interval.max-this._interval.min==0},__class__:Ne};var qe=function(t,n,r,s){n==null&&(n=!1),this._boundingBox=null,this._surface=t,this._splitV=n,r==null&&(r=l.domain(t.knotsU)/16),s==null&&(s=l.domain(t.knotsV)/16),this._knotTolU=r,this._knotTolV=s};p["verb.core.LazySurfaceBoundingBoxTree"]=qe,qe.__name__=["verb","core","LazySurfaceBoundingBoxTree"],qe.__interfaces__=[Te],qe.prototype={split:function(){var t,n;this._splitV?(t=G.first(this._surface.knotsV),n=G.last(this._surface.knotsV)):(t=G.first(this._surface.knotsU),n=G.last(this._surface.knotsU));var r=(t+n)/2,s=Yt.surfaceSplit(this._surface,r,this._splitV);return new qt(new qe(s[0],!this._splitV,this._knotTolU,this._knotTolV),new qe(s[1],!this._splitV,this._knotTolU,this._knotTolV))},boundingBox:function(){if(this._boundingBox==null){this._boundingBox=new ue;for(var t=0,n=this._surface.controlPoints;t<n.length;){var r=n[t];++t,this._boundingBox.addRange(S.dehomogenize1d(r))}}return this._boundingBox},yield:function(){return this._surface},indivisible:function(t){return l.domain(this._surface.knotsV)<this._knotTolV&&l.domain(this._surface.knotsU)<this._knotTolU},empty:function(){return!1},__class__:qe};var Mt=f.core.Mat=function(){};p["verb.core.Mat"]=Mt,Mt.__name__=["verb","core","Mat"],Mt.mul=function(t,n){for(var r=[],s=0,o=n.length;s<o;){var h=s++;r.push(l.mul(t,n[h]))}return r},Mt.mult=function(t,n){var r,s,o,h,c,v,d,m;r=t.length,s=n.length,o=n[0].length,h=[];for(var b=r-1,w=0,M=0;b>=0;){for(c=[],v=t[b],M=o-1;M>=0;){for(d=v[s-1]*n[s-1][M],w=s-2;w>=1;)m=w-1,d+=v[w]*n[w][M]+v[m]*n[m][M],w-=2;w==0&&(d+=v[0]*n[0][M]),c[M]=d,M--}h[b]=c,b--}return h},Mt.add=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.add(t[h],n[h]))}return r},Mt.div=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.div(t[h],n))}return r},Mt.sub=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.sub(t[h],n[h]))}return r},Mt.dot=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(l.dot(t[h],n))}return r},Mt.identity=function(t){for(var n=l.zeros2d(t,t),r=0;r<t;){var s=r++;n[s][s]=1}return n},Mt.transpose=function(t){if(t.length==0)return[];for(var n=[],r=0,s=t[0].length;r<s;){var o=r++;n.push(function(h){for(var c,v=[],d=0,m=t.length;d<m;){var b=d++;v.push(t[b][o])}return c=v,c}())}return n},Mt.solve=function(t,n){return Mt.LUsolve(Mt.LU(t),n)},Mt.LUsolve=function(t,n){var r,s,o=t.LU,h=o.length,c=n.slice(),v=t.P,d,m,b;for(r=h-1;r!=-1;)c[r]=n[r],--r;for(r=0;r<h;){for(d=v[r],v[r]!=r&&(b=c[r],c[r]=c[d],c[d]=b),m=o[r],s=0;s<r;)c[r]-=c[s]*m[s],++s;++r}for(r=h-1;r>=0;){for(m=o[r],s=r+1;s<h;)c[r]-=c[s]*m[s],++s;c[r]/=m[r],--r}return c},Mt.LU=function(t){for(var n,r,s,o,h,c,v,d,m,b=[],w=0,M=t.length;w<M;){var P=w++;b.push(t[P].slice())}t=b;var z=t.length,I=z-1,C=[];for(s=0;s<z;){for(v=s,c=t[s],m=Math.abs(c[s]),r=s+1;r<z;)o=Math.abs(t[r][s]),m<o&&(m=o,v=r),++r;for(C[s]=v,v!=s&&(t[s]=t[v],t[v]=c,c=t[s]),h=c[s],n=s+1;n<z;)t[n][s]/=h,++n;for(n=s+1;n<z;){for(d=t[n],r=s+1;r<I;)d[r]-=d[s]*c[r],++r,d[r]-=d[s]*c[r],++r;r==I&&(d[r]-=d[s]*c[r]),++n}++s}return new Kn(t,C)};var Kn=function(t,n){this.LU=t,this.P=n};p["verb.core._Mat.LUDecomp"]=Kn,Kn.__name__=["verb","core","_Mat","LUDecomp"],Kn.prototype={__class__:Kn};var Gt=f.core.Mesh=function(){};p["verb.core.Mesh"]=Gt,Gt.__name__=["verb","core","Mesh"],Gt.getTriangleNorm=function(t,n){var r=t[n[0]],s=t[n[1]],o=t[n[2]],h=l.sub(s,r),c=l.sub(o,r),v=l.cross(h,c);return l.mul(1/l.norm(v),v)},Gt.makeMeshAabb=function(t,n){for(var r=new ue,s=0;s<n.length;){var o=n[s];++s,r.add(t.points[t.faces[o][0]]),r.add(t.points[t.faces[o][1]]),r.add(t.points[t.faces[o][2]])}return r},Gt.sortTrianglesOnLongestAxis=function(t,n,r){for(var s=t.getLongestAxis(),o=[],h=0;h<r.length;){var c=r[h];++h;var v=Gt.getMinCoordOnAxis(n.points,n.faces[c],s);o.push(new qt(v,c))}o.sort(function(M,P){var z=M.item0,I=P.item0;return z==I?0:z>I?1:-1});for(var d=[],m=0,b=o.length;m<b;){var w=m++;d.push(o[w].item1)}return d},Gt.getMinCoordOnAxis=function(t,n,r){for(var s=1/0,o=0;o<3;){var h=o++,c=t[n[h]][r];c<s&&(s=c)}return s},Gt.getTriangleCentroid=function(t,n){for(var r=[0,0,0],s=0;s<3;)for(var o=s++,h=0;h<3;){var c=h++;r[c]+=t[n[o]][c]}for(var v=0;v<3;){var d=v++;r[d]/=3}return r},Gt.triangleUVFromPoint=function(t,n,r){var s=t.faces[n],o=t.points[s[0]],h=t.points[s[1]],c=t.points[s[2]],v=t.uvs[s[0]],d=t.uvs[s[1]],m=t.uvs[s[2]],b=l.sub(o,r),w=l.sub(h,r),M=l.sub(c,r),P=l.norm(l.cross(l.sub(o,h),l.sub(o,c))),z=l.norm(l.cross(w,M))/P,I=l.norm(l.cross(M,b))/P,C=l.norm(l.cross(b,w))/P;return l.add(l.mul(z,v),l.add(l.mul(I,d),l.mul(C,m)))};var Ge=function(t,n){if(this._empty=!1,this._face=-1,n==null){for(var r=[],s=0,o=t.faces.length;s<o;){var h=s++;r.push(h)}n=r}if(this._boundingBox=Gt.makeMeshAabb(t,n),n.length<1){this._empty=!0;return}else if(n.length<2){this._face=n[0];return}var c=Gt.sortTrianglesOnLongestAxis(this._boundingBox,t,n),v=G.left(c),d=G.right(c);this._children=new qt(new Ge(t,v),new Ge(t,d))};p["verb.core.MeshBoundingBoxTree"]=Ge,Ge.__name__=["verb","core","MeshBoundingBoxTree"],Ge.__interfaces__=[Te],Ge.prototype={split:function(){return this._children},boundingBox:function(){return this._boundingBox},yield:function(){return this._face},indivisible:function(t){return this._children==null},empty:function(){return this._empty},__class__:Ge};var we=f.core.Minimizer=function(){};p["verb.core.Minimizer"]=we,we.__name__=["verb","core","Minimizer"],we.uncmin=function(t,n,r,s,o){r==null&&(r=1e-8),s==null&&(s=function(X){return we.numericalGradient(t,X)}),o==null&&(o=1e3),n=n.slice(0);var h=n.length,c=t(n),v=c,d;if(isNaN(c))throw new j("uncmin: f(x0) is a NaN!");r=Math.max(r,tt.EPSILON);var m,b,w,M=Mt.identity(h),P=0,z=[],I,C,L,B,T,R,F="";for(b=s(n);P<o;){if(!l.all(l.finite(b))){F="Gradient has Infinity or NaN";break}if(m=l.neg(Mt.dot(M,b)),!l.all(l.finite(m))){F="Search direction has Infinity or NaN";break}if(R=l.norm(m),R<r){F="Newton step smaller than tol";break}for(T=1,d=l.dot(b,m),I=n;P<o&&!(T*R<r);){if(z=l.mul(T,m),I=l.add(n,z),v=t(I),v-c>=.1*T*d||isNaN(v)){T*=.5,++P;continue}break}if(T*R<r){F="Line search step size smaller than tol";break}if(P==o){F="maxit reached during line search";break}w=s(I),C=l.sub(w,b),B=l.dot(C,z),L=Mt.dot(M,C),M=Mt.sub(Mt.add(M,Mt.mul((B+l.dot(C,L))/(B*B),we.tensor(z,z))),Mt.div(Mt.add(we.tensor(L,z),we.tensor(z,L)),B)),n=I,c=v,b=w,++P}return new jn(n,c,b,M,P,F)},we.numericalGradient=function(t,n){var r=n.length,s=t(n);if(s==NaN)throw new j("gradient: f(x) is a NaN!");for(var o=n.slice(0),h,c,v=[],d,m=.001,b,w,M,P=0,z,I,C,L=0;L<r;)for(var B=L++,T=Math.max(1e-6*s,1e-8);;){if(++P,P>20)throw new j("Numerical gradient fails");if(o[B]=n[B]+T,h=t(o),o[B]=n[B]-T,c=t(o),o[B]=n[B],isNaN(h)||isNaN(c)){T/=16;continue}if(v[B]=(h-c)/(2*T),b=n[B]-T,w=n[B],M=n[B]+T,z=(h-s)/T,I=(s-c)/T,C=l.max([Math.abs(v[B]),Math.abs(s),Math.abs(h),Math.abs(c),Math.abs(b),Math.abs(w),Math.abs(M),1e-8]),d=Math.min(l.max([Math.abs(z-v[B]),Math.abs(I-v[B]),Math.abs(z-I)])/C,T/C),d>m)T/=16;else break}return v},we.tensor=function(t,n){for(var r=t.length,s=n.length,o=[],h,c,v=r-1;v>=0;){h=[],c=t[v];for(var d=s-1;d>=3;)h[d]=c*n[d],--d,h[d]=c*n[d],--d,h[d]=c*n[d],--d,h[d]=c*n[d],--d;for(;d>=0;)h[d]=c*n[d],--d;o[v]=h,v--}return o};var jn=function(t,n,r,s,o,h){this.solution=t,this.value=n,this.gradient=r,this.invHessian=s,this.iterations=o,this.message=h};p["verb.core.MinimizationResult"]=jn,jn.__name__=["verb","core","MinimizationResult"],jn.prototype={__class__:jn};var mn=function(){};p["verb.core.ISerializable"]=mn,mn.__name__=["verb","core","ISerializable"],mn.prototype={__class__:mn};var Cr=f.core.Deserializer=function(){};p["verb.core.Deserializer"]=Cr,Cr.__name__=["verb","core","Deserializer"],Cr.deserialize=function(t){var n=new Vt(t),r=n.unserialize();return r};var ce=f.core.Trig=function(){};p["verb.core.Trig"]=ce,ce.__name__=["verb","core","Trig"],ce.isPointInPlane=function(t,n,r){return Math.abs(l.dot(l.sub(t,n.origin),n.normal))<r},ce.distToSegment=function(t,n,r){var s=ce.segmentClosestPoint(n,t,r,0,1);return l.dist(n,s.pt)},ce.rayClosestPoint=function(t,n,r){var s=l.sub(t,n),o=l.dot(s,r),h=l.add(n,l.mul(o,r));return h},ce.distToRay=function(t,n,r){var s=ce.rayClosestPoint(t,n,r),o=l.sub(s,t);return l.norm(o)},ce.threePointsAreFlat=function(t,n,r,s){var o=l.sub(n,t),h=l.sub(r,t),c=l.cross(o,h),v=l.dot(c,c);return v<s},ce.segmentClosestPoint=function(t,n,r,s,o){var h=l.sub(r,n),c=l.norm(h);if(c<tt.EPSILON)return{u:s,pt:n};var v=n,d=l.mul(1/c,h),m=l.sub(t,v),b=l.dot(m,d);return b<0?{u:s,pt:n}:b>c?{u:o,pt:r}:{u:s+(o-s)*b/c,pt:l.add(v,l.mul(b,d))}};var l=f.core.Vec=function(){};p["verb.core.Vec"]=l,l.__name__=["verb","core","Vec"],l.angleBetween=function(t,n){return Math.acos(l.dot(t,n)/(l.norm(t)*l.norm(n)))},l.positiveAngleBetween=function(t,n,r){var s=l.cross(t,n),o=l.norm(t),h=l.norm(n),c=o*h,v=l.dot(t,n),d=l.norm(s)/c,m=v/c,b=Math.atan2(d,m),w=l.dot(r,s);return Math.abs(w)<tt.EPSILON||w>0?b:-b},l.signedAngleBetween=function(t,n,r){var s=l.cross(t,n),o=l.norm(t),h=l.norm(n),c=o*h,v=l.dot(t,n),d=l.norm(s)/c,m=v/c,b=Math.atan2(d,m),w=l.dot(r,s);return w>0?b:2*Math.PI-b},l.angleBetweenNormalized2d=function(t,n){var r=t[0]*n[1]-t[1]*n[0];return Math.atan2(r,l.dot(t,n))},l.domain=function(t){return G.last(t)-G.first(t)},l.range=function(t){for(var n=[],r=0,s=0;s<t;)s++,n.push(r),r+=1;return n},l.span=function(t,n,r){if(r==null)return[];if(r<tt.EPSILON)return[];if(t>n&&r>0)return[];if(n>t&&r<0)return[];for(var s=[],o=t;o<=n;)s.push(o),o+=r;return s},l.neg=function(t){return t.map(function(n){return-n})},l.min=function(t){return K.fold(t,function(n,r){return Math.min(n,r)},1/0)},l.max=function(t){return K.fold(t,function(n,r){return Math.max(n,r)},-1/0)},l.all=function(t){return K.fold(t,function(n,r){return r&&n},!0)},l.finite=function(t){return t.map(function(n){return isFinite(n)})},l.onRay=function(t,n,r){return l.add(t,l.mul(r,n))},l.lerp=function(t,n,r){return l.add(l.mul(t,n),l.mul(1-t,r))},l.normalized=function(t){return l.div(t,l.norm(t))},l.cross=function(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]},l.dist=function(t,n){return l.norm(l.sub(t,n))},l.distSquared=function(t,n){return l.normSquared(l.sub(t,n))},l.sum=function(t){return K.fold(t,function(n,r){return r+n},0)},l.addAll=function(t){var n=be(t)();if(!n.hasNext())return null;var r=n.next().length;return K.fold(t,function(s,o){return l.add(o,s)},l.rep(r,0))},l.addAllMutate=function(t){for(var n=t[0],r=1,s=t.length;r<s;){var o=r++;l.addMutate(n,t[o])}},l.addMulMutate=function(t,n,r){for(var s=0,o=t.length;s<o;){var h=s++;t[h]=t[h]+n*r[h]}},l.subMulMutate=function(t,n,r){for(var s=0,o=t.length;s<o;){var h=s++;t[h]=t[h]-n*r[h]}},l.addMutate=function(t,n){for(var r=0,s=t.length;r<s;){var o=r++;t[o]=t[o]+n[o]}},l.subMutate=function(t,n){for(var r=0,s=t.length;r<s;){var o=r++;t[o]=t[o]-n[o]}},l.mulMutate=function(t,n){for(var r=0,s=n.length;r<s;){var o=r++;n[o]=n[o]*t}},l.norm=function(t){var n=l.normSquared(t);return n!=0?Math.sqrt(n):n},l.normSquared=function(t){return K.fold(t,function(n,r){return r+n*n},0)},l.rep=function(t,n){for(var r=[],s=0;s<t;)s++,r.push(n);return r},l.zeros1d=function(t){for(var n=[],r=0;r<t;)r++,n.push(0);return n},l.zeros2d=function(t,n){for(var r=[],s=0;s<t;)s++,r.push(l.zeros1d(n));return r},l.zeros3d=function(t,n,r){for(var s=[],o=0;o<t;)o++,s.push(l.zeros2d(n,r));return s},l.dot=function(t,n){for(var r=0,s=0,o=t.length;s<o;){var h=s++;r+=t[h]*n[h]}return r},l.add=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]+n[h])}return r},l.mul=function(t,n){for(var r=[],s=0,o=n.length;s<o;){var h=s++;r.push(t*n[h])}return r},l.div=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]/n)}return r},l.sub=function(t,n){for(var r=[],s=0,o=t.length;s<o;){var h=s++;r.push(t[h]-n[h])}return r},l.isZero=function(t){for(var n=0,r=t.length;n<r;){var s=n++;if(Math.abs(t[s])>tt.TOLERANCE)return!1}return!0},l.sortedSetUnion=function(t,n){for(var r=[],s=0,o=0;s<t.length||o<n.length;){if(s>=t.length){r.push(n[o]),o++;continue}else if(o>=n.length){r.push(t[s]),s++;continue}var h=t[s]-n[o];if(Math.abs(h)<tt.EPSILON){r.push(t[s]),s++,o++;continue}if(h>0){r.push(n[o]),o++;continue}r.push(t[s]),s++}return r},l.sortedSetSub=function(t,n){for(var r=[],s=0,o=0;s<t.length;){if(o>=n.length){r.push(t[s]),s++;continue}if(Math.abs(t[s]-n[o])<tt.EPSILON){s++,o++;continue}r.push(t[s]),s++}return r};var _t=f.eval.Analyze=function(){};p["verb.eval.Analyze"]=_t,_t.__name__=["verb","eval","Analyze"],_t.knotMultiplicities=function(t){for(var n=[new gn(t[0],0)],r=n[0],s=0;s<t.length;){var o=t[s];++s,Math.abs(o-r.knot)>tt.EPSILON&&(r=new gn(o,0),n.push(r)),r.inc()}return n},_t.isRationalSurfaceClosed=function(t,n){n==null&&(n=!0);var r;n?r=t.controlPoints:r=Mt.transpose(t.controlPoints);for(var s=0,o=r[0].length;s<o;){var h=s++,c=l.dist(G.first(r)[h],G.last(r)[h])<tt.EPSILON;if(!c)return!1}return!0},_t.rationalSurfaceClosestPoint=function(t,n){var r=_t.rationalSurfaceClosestParam(t,n);return S.rationalSurfacePoint(t,r[0],r[1])},_t.rationalSurfaceClosestParam=function(t,n){for(var r=5,s=0,o,h=1e-4,c=5e-4,v,d=t.knotsU[0],m=G.last(t.knotsU),b=t.knotsV[0],w=G.last(t.knotsV),M=_t.isRationalSurfaceClosed(t),P=_t.isRationalSurfaceClosed(t,!1),z,I=At.rationalSurfaceAdaptive(t,new Ke),C=1/0,L=0,B=I.points.length;L<B;){var T=L++,R=I.points[T],F=l.normSquared(l.sub(n,R));F<C&&(C=F,z=I.uvs[T])}for(var X=function(It){return S.rationalSurfaceDerivatives(t,It[0],It[1],2)},D=function(It,Et,Ct){var Tt=Et[1][0],ie=Et[0][1],ge=Et[2][0],ne=Et[0][2],$t=Et[1][1],se=Et[1][1],_e=l.dot(Tt,Ct),xe=l.dot(ie,Ct),Ee=[-_e,-xe],Me=l.dot(Tt,Tt)+l.dot(ge,Ct),Pe=l.dot(Tt,ie)+l.dot($t,Ct),Ae=l.dot(Tt,ie)+l.dot(se,Ct),Re=l.dot(ie,ie)+l.dot(ne,Ct),bn=[[Me,Pe],[Ae,Re]],en=Mt.solve(bn,Ee);return l.add(en,It)};s<r;){o=X(z),v=l.sub(o[0][0],n);var V=l.norm(v),q=l.dot(o[1][0],v),J=l.norm(o[1][0])*V,$=l.dot(o[0][1],v),nt=l.norm(o[0][1])*V,st=q/J,rt=$/nt,at=V<h,et=st<c,ot=rt<c;if(at&&et&&ot)return z;var O=D(z,o,v);O[0]<d?M?O=[m-(O[0]-d),O[1]]:O=[d+tt.EPSILON,O[1]]:O[0]>m&&(M?O=[d+(O[0]-m),O[1]]:O=[m-tt.EPSILON,O[1]]),O[1]<b?P?O=[O[0],w-(O[1]-b)]:O=[O[0],b+tt.EPSILON]:O[1]>w&&(P?O=[O[0],b+(O[0]-w)]:O=[O[0],w-tt.EPSILON]);var ut=l.norm(l.mul(O[0]-z[0],o[1][0])),gt=l.norm(l.mul(O[1]-z[1],o[0][1]));if(ut+gt<h)return z;z=O,s++}return z},_t.rationalCurveClosestPoint=function(t,n){return S.rationalCurvePoint(t,_t.rationalCurveClosestParam(t,n))},_t.rationalCurveClosestParam=function(t,n){for(var r=1/0,s=0,o=At.rationalCurveRegularSample(t,t.controlPoints.length*t.degree,!0),h=0,c=o.length-1;h<c;){var v=h++,d=o[v][0],m=o[v+1][0],b=o[v].slice(1),w=o[v+1].slice(1),M=ce.segmentClosestPoint(n,b,w,d,m),P=l.norm(l.sub(n,M.pt));P<r&&(r=P,s=M.u)}for(var z=5,I=0,C,L=1e-4,B=5e-4,T,R=t.knots[0],F=G.last(t.knots),X=l.normSquared(l.sub(t.controlPoints[0],G.last(t.controlPoints)))<tt.EPSILON,D=s,V=function(O){return S.rationalCurveDerivatives(t,O,2)},q=function(O,ut,gt){var It=l.dot(ut[1],gt),Et=l.dot(ut[2],gt),Ct=l.dot(ut[1],ut[1]),Tt=Et+Ct;return O-It/Tt};I<z;){C=V(D),T=l.sub(C[0],n);var J=l.norm(T),$=l.dot(C[1],T),nt=l.norm(C[1])*J,st=$/nt,rt=J<L,at=Math.abs(st)<B;if(rt&&at)return D;var et=q(D,C,T);et<R?X?et=F-(et-R):et=R:et>F&&(X?et=R+(et-F):et=F);var ot=l.norm(l.mul(et-D,C[1]));if(ot<L)return D;D=et,I++}return D},_t.rationalCurveParamAtArcLength=function(t,n,r,s,o){if(r==null&&(r=.001),n<tt.EPSILON)return t.knots[0];var h;s!=null?h=s:h=vt.decomposeCurveIntoBeziers(t);var c=0;h[c];var v=-tt.EPSILON,d;for(o!=null?d=o:d=[];v<n&&c<h.length;){if(c<d.length?d[c]=d[c]:d[c]=_t.rationalBezierCurveArcLength(t),v+=d[c],n<v+tt.EPSILON)return _t.rationalBezierCurveParamAtArcLength(t,n,r,d[c]);c++}return-1},_t.rationalBezierCurveParamAtArcLength=function(t,n,r,s){if(n<0)return t.knots[0];var o;if(s!=null?o=s:o=_t.rationalBezierCurveArcLength(t),n>o)return G.last(t.knots);var h=t.knots[0],c=0,v=G.last(t.knots),d=o,m=0,b=0,w;for(r!=null?w=r:w=tt.TOLERANCE*2;d-c>w;)m=(h+v)/2,b=_t.rationalBezierCurveArcLength(t,m),b>n?(v=m,d=b):(h=m,c=b);return(h+v)/2},_t.rationalCurveArcLength=function(t,n,r){r==null&&(r=16),n==null?n=G.last(t.knots):n=n;for(var s=vt.decomposeCurveIntoBeziers(t),o=0,h=s[0],c=0;o<s.length&&h.knots[0]+tt.EPSILON<n;){var v=Math.min(G.last(h.knots),n);c+=_t.rationalBezierCurveArcLength(h,v,r),h=s[++o]}return c},_t.rationalBezierCurveArcLength=function(t,n,r){r==null&&(r=16);var s;n==null?s=G.last(t.knots):s=n;for(var o=(s-t.knots[0])/2,h=0,c=t.degree+r,v,d,m=0;m<c;){var b=m++;v=o*_t.Tvalues[c][b]+o+t.knots[0],d=S.rationalCurveDerivatives(t,v,1),h+=_t.Cvalues[c][b]*l.norm(d[1])}return o*h};var gn=f.eval.KnotMultiplicity=function(t,n){this.knot=t,this.mult=n};p["verb.eval.KnotMultiplicity"]=gn,gn.__name__=["verb","eval","KnotMultiplicity"],gn.prototype={inc:function(){this.mult++},__class__:gn};var me=f.eval.Check=function(){};p["verb.eval.Check"]=me,me.__name__=["verb","eval","Check"],me.isValidKnotVector=function(t,n){if(t.length==0||t.length<(n+1)*2)return!1;for(var r=G.first(t),s=0,o=n+1;s<o;){var h=s++;if(Math.abs(t[h]-r)>tt.EPSILON)return!1}r=G.last(t);for(var c=t.length-n-1,v=t.length;c<v;){var d=c++;if(Math.abs(t[d]-r)>tt.EPSILON)return!1}return me.isNonDecreasing(t)},me.isNonDecreasing=function(t){for(var n=G.first(t),r=0,s=t.length;r<s;){var o=r++;if(t[o]<n-tt.EPSILON)return!1;n=t[o]}return!0},me.isValidNurbsCurveData=function(t){if(t.controlPoints==null)throw new j("Control points array cannot be null!");if(t.degree==null)throw new j("Degree cannot be null!");if(t.degree<1)throw new j("Degree must be greater than 1!");if(t.knots==null)throw new j("Knots cannot be null!");if(t.knots.length!=t.controlPoints.length+t.degree+1)throw new j("controlPoints.length + degree + 1 must equal knots.length!");if(!me.isValidKnotVector(t.knots,t.degree))throw new j("Invalid knot vector format! Should begin with degree + 1 repeats and end with degree + 1 repeats!");return t},me.isValidNurbsSurfaceData=function(t){if(t.controlPoints==null)throw new j("Control points array cannot be null!");if(t.degreeU==null)throw new j("DegreeU cannot be null!");if(t.degreeV==null)throw new j("DegreeV cannot be null!");if(t.degreeU<1)throw new j("DegreeU must be greater than 1!");if(t.degreeV<1)throw new j("DegreeV must be greater than 1!");if(t.knotsU==null)throw new j("KnotsU cannot be null!");if(t.knotsV==null)throw new j("KnotsV cannot be null!");if(t.knotsU.length!=t.controlPoints.length+t.degreeU+1)throw new j("controlPointsU.length + degreeU + 1 must equal knotsU.length!");if(t.knotsV.length!=t.controlPoints[0].length+t.degreeV+1)throw new j("controlPointsV.length + degreeV + 1 must equal knotsV.length!");if(!me.isValidKnotVector(t.knotsU,t.degreeU)||!me.isValidKnotVector(t.knotsV,t.degreeV))throw new j("Invalid knot vector format! Should begin with degree + 1 repeats and end with degree + 1 repeats!");return t};var Yt=f.eval.Divide=function(){};p["verb.eval.Divide"]=Yt,Yt.__name__=["verb","eval","Divide"],Yt.surfaceSplit=function(t,n,r){r==null&&(r=!1);var s,o,h;r?(h=t.controlPoints,s=t.knotsV,o=t.degreeV):(h=Mt.transpose(t.controlPoints),s=t.knotsU,o=t.degreeU);for(var c,v=[],d=0,m=o+1;d<m;)d++,v.push(n);c=v;for(var b=[],w=[],M=S.knotSpan(o,n,s),P=null,z=0;z<h.length;){var I=h[z];++z,P=vt.curveKnotRefine(new kt(o,s,I),c),b.push(P.controlPoints.slice(0,M+1)),w.push(P.controlPoints.slice(M+1))}var C=P.knots.slice(0,M+o+2),L=P.knots.slice(M+1);return r?[new Ot(t.degreeU,o,t.knotsU.slice(),C,b),new Ot(t.degreeU,o,t.knotsU.slice(),L,w)]:(b=Mt.transpose(b),w=Mt.transpose(w),[new Ot(o,t.degreeV,C,t.knotsV.slice(),b),new Ot(o,t.degreeV,L,t.knotsV.slice(),w)])},Yt.curveSplit=function(t,n){var r=t.degree;t.controlPoints;for(var s=t.knots,o,h=[],c=0,v=r+1;c<v;)c++,h.push(n);o=h;var d=vt.curveKnotRefine(t,o),m=S.knotSpan(r,n,s),b=d.knots.slice(0,m+r+2),w=d.knots.slice(m+1),M=d.controlPoints.slice(0,m+1),P=d.controlPoints.slice(m+1);return[new kt(r,b,M),new kt(r,w,P)]},Yt.rationalCurveByEqualArcLength=function(t,n){var r=_t.rationalCurveArcLength(t),s=r/n;return Yt.rationalCurveByArcLength(t,s)},Yt.rationalCurveByArcLength=function(t,n){var r=vt.decomposeCurveIntoBeziers(t),s=r.map(function(M){return _t.rationalBezierCurveArcLength(M)}),o=l.sum(s),h=[new pn(t.knots[0],0)];if(n>o)return h;for(var c=n,v=0,d=c,m=0,b=0,w;v<r.length;){for(m+=s[v];d<m+tt.EPSILON;)w=_t.rationalBezierCurveParamAtArcLength(r[v],d-b,tt.TOLERANCE,s[v]),h.push(new pn(w,d)),d+=c;b+=s[v],v++}return h};var pn=f.eval.CurveLengthSample=function(t,n){this.u=t,this.len=n};p["verb.eval.CurveLengthSample"]=pn,pn.__name__=["verb","eval","CurveLengthSample"],pn.prototype={__class__:pn};var S=f.eval.Eval=function(){};p["verb.eval.Eval"]=S,S.__name__=["verb","eval","Eval"],S.rationalCurveTangent=function(t,n){var r=S.rationalCurveDerivatives(t,n,1);return r[1]},S.rationalSurfaceNormal=function(t,n,r){var s=S.rationalSurfaceDerivatives(t,n,r,1);return l.cross(s[1][0],s[0][1])},S.rationalSurfaceDerivatives=function(t,n,r,s){s==null&&(s=1);for(var o=S.surfaceDerivatives(t,n,r,s),h=S.rational2d(o),c=S.weight2d(o),v=[],d=h[0][0].length,m=0,b=s+1;m<b;){var w=m++;v.push([]);for(var M=0,P=s-w+1;M<P;){for(var z=M++,I=h[w][z],C=1,L=z+1;C<L;){var B=C++;l.subMulMutate(I,zt.get(z,B)*c[0][B],v[w][z-B])}for(var T=1,R=w+1;T<R;){var F=T++;l.subMulMutate(I,zt.get(w,F)*c[F][0],v[w-F][z]);for(var X=l.zeros1d(d),D=1,V=z+1;D<V;){var q=D++;l.addMulMutate(X,zt.get(z,q)*c[F][q],v[w-F][z-q])}l.subMulMutate(I,zt.get(w,F),X)}l.mulMutate(1/c[0][0],I),v[w].push(I)}}return v},S.rationalSurfacePoint=function(t,n,r){return S.dehomogenize(S.surfacePoint(t,n,r))},S.rationalCurveDerivatives=function(t,n,r){r==null&&(r=1);for(var s=S.curveDerivatives(t,n,r),o=S.rational1d(s),h=S.weight1d(s),c=[],v=0,d=r+1;v<d;){for(var m=v++,b=o[m],w=1,M=m+1;w<M;){var P=w++;l.subMulMutate(b,zt.get(m,P)*h[P],c[m-P])}l.mulMutate(1/h[0],b),c.push(b)}return c},S.rationalCurvePoint=function(t,n){return S.dehomogenize(S.curvePoint(t,n))},S.surfaceDerivatives=function(t,n,r,s){var o=t.knotsU.length-t.degreeU-2,h=t.knotsV.length-t.degreeV-2;return S.surfaceDerivativesGivenNM(o,h,t,n,r,s)},S.surfaceDerivativesGivenNM=function(t,n,r,s,o,h){var c=r.degreeU,v=r.degreeV,d=r.controlPoints,m=r.knotsU,b=r.knotsV;if(!S.areValidRelations(c,d.length,m.length)||!S.areValidRelations(v,d[0].length,b.length))throw new j("Invalid relations between control points, knot vector, and n");var w=d[0][0].length,M;h<c?M=h:M=c;var P;h<v?P=h:P=v;for(var z=l.zeros3d(h+1,h+1,w),I=S.knotSpanGivenN(t,c,s,m),C=S.knotSpanGivenN(n,v,o,b),L=S.derivativeBasisFunctionsGivenNI(I,s,c,t,m),B=S.derivativeBasisFunctionsGivenNI(C,o,v,n,b),T=l.zeros2d(v+1,w),R=0,F=0,X=M+1;F<X;){for(var D=F++,V=0,q=v+1;V<q;){var J=V++;T[J]=l.zeros1d(w);for(var $=0,nt=c+1;$<nt;){var st=$++;l.addMulMutate(T[J],L[D][st],d[I-c+st][C-v+J])}}var rt=h-D;rt<P?R=rt:R=P;for(var at=0,et=R+1;at<et;){var ot=at++;z[D][ot]=l.zeros1d(w);for(var O=0,ut=v+1;O<ut;){var gt=O++;l.addMulMutate(z[D][ot],B[ot][gt],T[gt])}}}return z},S.surfacePoint=function(t,n,r){var s=t.knotsU.length-t.degreeU-2,o=t.knotsV.length-t.degreeV-2;return S.surfacePointGivenNM(s,o,t,n,r)},S.surfacePointGivenNM=function(t,n,r,s,o){var h=r.degreeU,c=r.degreeV,v=r.controlPoints,d=r.knotsU,m=r.knotsV;if(!S.areValidRelations(h,v.length,d.length)||!S.areValidRelations(c,v[0].length,m.length))throw new j("Invalid relations between control points, knot vector, and n");for(var b=v[0][0].length,w=S.knotSpanGivenN(t,h,s,d),M=S.knotSpanGivenN(n,c,o,m),P=S.basisFunctionsGivenKnotSpanIndex(w,s,h,d),z=S.basisFunctionsGivenKnotSpanIndex(M,o,c,m),I=w-h,C=M,L=l.zeros1d(b),B=l.zeros1d(b),T=0,R=c+1;T<R;){var F=T++;B=l.zeros1d(b),C=M-c+F;for(var X=0,D=h+1;X<D;){var V=X++;l.addMulMutate(B,P[V],v[I+V][C])}l.addMulMutate(L,z[F],B)}return L},S.curveRegularSamplePoints=function(t,n){for(var r=S.curveDerivatives(t,t.knots[0],t.degree),s=1/n,o=s*s,h=r[0],c=l.mul(s,r[1]),v=l.mul(o*.5,r[2]),d=l.mul(o*s*.5,r[3]),m=l.add(v,v),b=l.add(d,d),w=l.mul(.3333333333333333,d),M=[],P=0,z=n+1;P<z;)P++,M.push(S.dehomogenize(h)),l.addAllMutate([h,c,v,w]),l.addAllMutate([c,m,d]),l.addAllMutate([m,b]),l.addAllMutate([v,d]);return M},S.curveRegularSamplePoints2=function(t,n){for(var r=S.curveDerivatives(t,t.knots[0],t.degree),s=1/n,o=s*s,h=r[0],c=l.mul(s,r[1]),v=l.mul(o*.5,r[2]),d=l.mul(o*s*.5,r[3]),m=l.add(v,v),b=l.add(d,d),w=l.mul(.3333333333333333,d),M=[],P=0,z=n+1;P<z;)P++,M.push(S.dehomogenize(h)),l.addAllMutate([h,c,v,w]),l.addAllMutate([c,m,d]),l.addAllMutate([m,b]),l.addAllMutate([v,d]);return M},S.rationalSurfaceRegularSampleDerivatives=function(t,n,r,s){for(var o=S.surfaceRegularSampleDerivatives(t,n,r,s),h=[],c=n+1,v=r+1,d=s+1,m=0;m<c;){var b=m++,w=[];h.push(w);for(var M=0;M<v;){for(var P=M++,z=o[b][P],I=S.rational2d(z),C=S.weight2d(z),L=[],B=I[0][0].length,T=0;T<d;){var R=T++;L.push([]);for(var F=0,X=d-R;F<X;){for(var D=F++,V=I[R][D],q=1,J=D+1;q<J;){var $=q++;l.subMulMutate(V,zt.get(D,$)*C[0][$],L[R][D-$])}for(var nt=1,st=R+1;nt<st;){var rt=nt++;l.subMulMutate(V,zt.get(R,rt)*C[rt][0],L[R-rt][D]);for(var at=l.zeros1d(B),et=1,ot=D+1;et<ot;){var O=et++;l.addMulMutate(at,zt.get(D,O)*C[rt][O],L[R-rt][D-O])}l.subMulMutate(V,zt.get(R,rt),at)}l.mulMutate(1/C[0][0],V),L[R].push(V)}}w.push(L)}}return h},S.surfaceRegularSampleDerivatives=function(t,n,r,s){var o=t.degreeU,h=t.degreeV,c=t.controlPoints,v=t.knotsU,d=t.knotsV,m=c[0][0].length;(G.last(v)-v[0])/n,(G.last(d)-d[0])/r;for(var b=S.regularlySpacedDerivativeBasisFunctions(o,v,n),w=b.item0,M=b.item1,P=S.regularlySpacedDerivativeBasisFunctions(h,d,r),z=P.item0,I=P.item1,C=[],L=n+1,B=r+1,T=0;T<L;){var R=T++,F=[];C.push(F);for(var X=0;X<B;){var D=X++;F.push(S.surfaceDerivativesGivenBasesKnotSpans(o,h,c,w[R],z[D],M[R],I[D],m,s))}}return C},S.rationalSurfaceRegularSamplePoints=function(t,n,r){return S.dehomogenize2d(S.surfaceRegularSamplePoints(t,n,r))},S.surfaceRegularSamplePoints=function(t,n,r){var s=t.degreeU,o=t.degreeV,h=t.controlPoints,c=t.knotsU,v=t.knotsV,d=h[0][0].length;(G.last(c)-c[0])/n,(G.last(v)-v[0])/r;for(var m=S.regularlySpacedBasisFunctions(s,c,n),b=m.item0,w=m.item1,M=S.regularlySpacedBasisFunctions(o,v,r),P=M.item0,z=M.item1,I=[],C=n+1,L=r+1,B=0;B<C;){var T=B++,R=[];I.push(R);for(var F=0;F<L;){var X=F++;R.push(S.surfacePointGivenBasesKnotSpans(s,o,h,b[T],P[X],w[T],z[X],d))}}return I},S.regularlySpacedBasisFunctions=function(t,n,r){for(var s=n.length-t-2,o=(G.last(n)-n[0])/r,h=[],c=[],v=n[0],d=S.knotSpanGivenN(s,t,v,n),m=r+1,b=0;b<m;){for(b++;v>=n[d+1];)d++;c.push(d),h.push(S.basisFunctionsGivenKnotSpanIndex(d,v,t,n)),v+=o}return new qt(c,h)},S.regularlySpacedDerivativeBasisFunctions=function(t,n,r){for(var s=n.length-t-2,o=(G.last(n)-n[0])/r,h=[],c=[],v=n[0],d=S.knotSpanGivenN(s,t,v,n),m=r+1,b=0;b<m;){for(b++;v>=n[d+1];)d++;c.push(d),h.push(S.derivativeBasisFunctionsGivenNI(d,v,t,s,n)),v+=o}return new qt(c,h)},S.surfacePointGivenBasesKnotSpans=function(t,n,r,s,o,h,c,v){for(var d=l.zeros1d(v),m,b=s-t,w=o-n,M=0,P=n+1;M<P;){var z=M++;m=l.zeros1d(v);for(var I=0,C=t+1;I<C;){var L=I++;l.addMulMutate(m,h[L],r[b+L][w])}w++,l.addMulMutate(d,c[z],m)}return d},S.surfaceDerivativesGivenBasesKnotSpans=function(t,n,r,s,o,h,c,v,d){var m=r[0][0].length,b;d<t?b=d:b=t;var w;d<n?w=d:w=n;for(var M=l.zeros3d(b+1,w+1,m),P=l.zeros2d(n+1,m),z=0,I=0,C=b+1;I<C;){for(var L=I++,B=0,T=n+1;B<T;){var R=B++;P[R]=l.zeros1d(m);for(var F=0,X=t+1;F<X;){var D=F++;l.addMulMutate(P[R],h[L][D],r[s-t+D][o-n+R])}}var V=d-L;V<w?z=V:z=w;for(var q=0,J=z+1;q<J;){var $=q++;M[L][$]=l.zeros1d(m);for(var nt=0,st=n+1;nt<st;){var rt=nt++;l.addMulMutate(M[L][$],c[$][rt],P[rt])}}}return M},S.curveDerivatives=function(t,n,r){var s=t.knots.length-t.degree-2;return S.curveDerivativesGivenN(s,t,n,r)},S.curveDerivativesGivenN=function(t,n,r,s){var o=n.degree,h=n.controlPoints,c=n.knots;if(!S.areValidRelations(o,h.length,c.length))throw new j("Invalid relations between control points, knot vector, and n");var v=h[0].length,d;s<o?d=s:d=o;for(var m=l.zeros2d(s+1,v),b=S.knotSpanGivenN(t,o,r,c),w=S.derivativeBasisFunctionsGivenNI(b,r,o,d,c),M=0,P=d+1;M<P;)for(var z=M++,I=0,C=o+1;I<C;){var L=I++;l.addMulMutate(m[z],w[z][L],h[b-o+L])}return m},S.curvePoint=function(t,n){var r=t.knots.length-t.degree-2;return S.curvePointGivenN(r,t,n)},S.areValidRelations=function(t,n,r){return n+t+1-r==0},S.curvePointGivenN=function(t,n,r){var s=n.degree,o=n.controlPoints,h=n.knots;if(!S.areValidRelations(s,o.length,h.length))throw new j("Invalid relations between control points, knot Array, and n");for(var c=S.knotSpanGivenN(t,s,r,h),v=S.basisFunctionsGivenKnotSpanIndex(c,r,s,h),d=l.zeros1d(o[0].length),m=0,b=s+1;m<b;){var w=m++;l.addMulMutate(d,v[w],o[c-s+w])}return d},S.volumePoint=function(t,n,r,s){var o=t.knotsU.length-t.degreeU-2,h=t.knotsV.length-t.degreeV-2,c=t.knotsW.length-t.degreeW-2;return S.volumePointGivenNML(t,o,h,c,n,r,s)},S.volumePointGivenNML=function(t,n,r,s,o,h,c){if(!S.areValidRelations(t.degreeU,t.controlPoints.length,t.knotsU.length)||!S.areValidRelations(t.degreeV,t.controlPoints[0].length,t.knotsV.length)||!S.areValidRelations(t.degreeW,t.controlPoints[0][0].length,t.knotsW.length))throw new j("Invalid relations between control points and knot vector");for(var v=t.controlPoints,d=t.degreeU,m=t.degreeV,b=t.degreeW,w=t.knotsU,M=t.knotsV,P=t.knotsW,z=v[0][0][0].length,I=S.knotSpanGivenN(n,d,o,w),C=S.knotSpanGivenN(r,m,h,M),L=S.knotSpanGivenN(s,b,c,P),B=S.basisFunctionsGivenKnotSpanIndex(I,o,d,w),T=S.basisFunctionsGivenKnotSpanIndex(C,h,m,M),R=S.basisFunctionsGivenKnotSpanIndex(L,c,b,P),F=I-d,X=l.zeros1d(z),D=l.zeros1d(z),V=l.zeros1d(z),q=0,J=b+1;q<J;){var $=q++;V=l.zeros1d(z);for(var nt=L-b+$,st=0,rt=m+1;st<rt;){var at=st++;D=l.zeros1d(z);for(var et=C-m+at,ot=0,O=d+1;ot<O;){var ut=ot++;l.addMulMutate(D,B[ut],v[F+ut][et][nt])}l.addMulMutate(V,T[at],D)}l.addMulMutate(X,R[$],V)}return X},S.derivativeBasisFunctions=function(t,n,r){var s=S.knotSpan(n,t,r),o=r.length-1,h=o-n-1;return S.derivativeBasisFunctionsGivenNI(s,t,n,h,r)},S.derivativeBasisFunctionsGivenNI=function(t,n,r,s,o){var h=l.zeros2d(r+1,r+1),c=l.zeros1d(r+1),v=l.zeros1d(r+1),d=0,m=0;h[0][0]=1;for(var b=1,w=r+1;b<w;){var M=b++;c[M]=n-o[t+1-M],v[M]=o[t+M]-n,d=0;for(var P=0;P<M;){var z=P++;h[M][z]=v[z+1]+c[M-z],m=h[z][M-1]/h[M][z],h[z][M]=d+v[z+1]*m,d=c[M-z]*m}h[M][M]=d}for(var I=l.zeros2d(s+1,r+1),C=l.zeros2d(2,r+1),L=0,B=1,T=0,R=0,F=0,X=0,D=0,V=0,q=r+1;V<q;){var J=V++;I[0][J]=h[J][r]}for(var $=0,nt=r+1;$<nt;){var st=$++;L=0,B=1,C[0][0]=1;for(var rt=1,at=s+1;rt<at;){var et=rt++;T=0,R=st-et,F=r-et,st>=et&&(C[B][0]=C[L][0]/h[F+1][R],T=C[B][0]*h[R][F]),R>=-1?X=1:X=-R,st-1<=F?D=et-1:D=r-st;for(var ot=X,O=D+1;ot<O;){var ut=ot++;C[B][ut]=(C[L][ut]-C[L][ut-1])/h[F+1][R+ut],T+=C[B][ut]*h[R+ut][F]}st<=F&&(C[B][et]=-C[L][et-1]/h[F+1][st],T+=C[B][et]*h[st][F]),I[et][st]=T;var gt=L;L=B,B=gt}}for(var It=r,Et=1,Ct=s+1;Et<Ct;){for(var Tt=Et++,ie=0,ge=r+1;ie<ge;){var ne=ie++;I[Tt][ne]*=It}It*=r-Tt}return I},S.basisFunctions=function(t,n,r){var s=S.knotSpan(n,t,r);return S.basisFunctionsGivenKnotSpanIndex(s,t,n,r)},S.basisFunctionsGivenKnotSpanIndex=function(t,n,r,s){var o=l.zeros1d(r+1),h=l.zeros1d(r+1),c=l.zeros1d(r+1),v=0,d=0;o[0]=1;for(var m=1,b=r+1;m<b;){var w=m++;h[w]=n-s[t+1-w],c[w]=s[t+w]-n,v=0;for(var M=0;M<w;){var P=M++;d=o[P]/(c[P+1]+h[w-P]),o[P]=v+c[P+1]*d,v=h[w-P]*d}o[w]=v}return o},S.knotSpan=function(t,n,r){return S.knotSpanGivenN(r.length-t-2,t,n,r)},S.knotSpanGivenN=function(t,n,r,s){if(r>s[t+1]-tt.EPSILON)return t;if(r<s[n]+tt.EPSILON)return n;for(var o=n,h=t+1,c=Math.floor((o+h)/2);r<s[c]||r>=s[c+1];)r<s[c]?h=c:o=c,c=Math.floor((o+h)/2);return c},S.dehomogenize=function(t){for(var n=t.length,r=[],s=t[n-1],o=t.length-1,h=0;h<o;){var c=h++;r.push(t[c]/s)}return r},S.rational1d=function(t){var n=t[0].length-1;return t.map(function(r){return r.slice(0,n)})},S.rational2d=function(t){return t.map(S.rational1d)},S.weight1d=function(t){var n=t[0].length-1;return t.map(function(r){return r[n]})},S.weight2d=function(t){return t.map(S.weight1d)},S.dehomogenize1d=function(t){return t.map(S.dehomogenize)},S.dehomogenize2d=function(t){return t.map(S.dehomogenize1d)},S.homogenize1d=function(t,n){var r=t.length,s=t[0].length,o=[],h=0,c=[],v;n!=null?v=n:v=l.rep(t.length,1);for(var d=0;d<r;){var m=d++,b=[];c=t[m],h=v[m];for(var w=0;w<s;){var M=w++;b.push(c[M]*h)}b.push(h),o.push(b)}return o},S.homogenize2d=function(t,n){var r=t.length,s=[],o;if(n!=null)o=n;else{for(var h=[],c=0;c<r;)c++,h.push(l.rep(t[0].length,1));o=h}for(var v=0;v<r;){var d=v++;s.push(S.homogenize1d(t[d],o[d]))}return s};var it=f.eval.Intersect=function(){};p["verb.eval.Intersect"]=it,it.__name__=["verb","eval","Intersect"],it.surfaces=function(t,n,r){var s=At.rationalSurfaceAdaptive(t),o=At.rationalSurfaceAdaptive(n),h=it.meshes(s,o),c=h.map(function(v){return v.map(function(d){return it.surfacesAtPointWithEstimate(t,n,d.uv0,d.uv1,r)})});return c.map(function(v){return ht.rationalInterpCurve(v.map(function(d){return d.point}),3)})},it.surfacesAtPointWithEstimate=function(t,n,r,s,o){var h,c,v,d,m,b,w,M,P,z,I,C,L,B=5,T=0;do{if(h=S.rationalSurfaceDerivatives(t,r[0],r[1],1),c=h[0][0],d=h[1][0],m=h[0][1],v=l.normalized(l.cross(d,m)),b=l.dot(v,c),w=S.rationalSurfaceDerivatives(n,s[0],s[1],1),M=w[0][0],z=w[1][0],I=w[0][1],P=l.normalized(l.cross(z,I)),C=l.dot(P,M),L=l.distSquared(c,M),L<o*o)break;var R=l.normalized(l.cross(v,P)),F=l.dot(R,c),X=it.threePlanes(v,b,P,C,R,F);if(X==null)throw new j("panic!");var D=l.sub(X,c),V=l.sub(X,M),q=l.cross(d,v),J=l.cross(m,v),$=l.cross(z,P),nt=l.cross(I,P),st=l.dot(J,D)/l.dot(J,d),rt=l.dot(q,D)/l.dot(q,m),at=l.dot(nt,V)/l.dot(nt,z),et=l.dot($,V)/l.dot($,I);r=l.add([st,rt],r),s=l.add([at,et],s),T++}while(T<B);return new Fn(r,s,c,L)},it.meshes=function(t,n,r,s){r==null&&(r=new Ie(t)),s==null&&(s=new Ie(n));var o=it.boundingBoxTrees(r,s,0),h=G.unique(o.map(function(c){return it.triangles(t,c.item0,n,c.item1)}).filter(function(c){return c!=null}).filter(function(c){return l.distSquared(c.min.point,c.max.point)>tt.EPSILON}),function(c,v){var d=l.sub(c.min.uv0,v.min.uv0),m=l.dot(d,d),b=l.sub(c.max.uv0,v.max.uv0),w=l.dot(b,b),M=l.sub(c.min.uv0,v.max.uv0),P=l.dot(M,M),z=l.sub(c.max.uv0,v.min.uv0),I=l.dot(z,z);return m<tt.EPSILON&&w<tt.EPSILON||P<tt.EPSILON&&I<tt.EPSILON});return it.makeMeshIntersectionPolylines(h)},it.meshSlices=function(t,n,r,s){for(var o=new Ge(t),h=o.boundingBox(),c=h.min[0],v=h.min[1],d=h.max[0],m=h.max[1],b=l.span(n,r,s),w=[],M=0;M<b.length;){var P=b[M];++M;var z=[[c,v,P],[d,v,P],[d,m,P],[c,m,P]],I=[[0,0],[1,0],[1,1],[0,1]],C=[[0,1,2],[0,2,3]],L=new ye(C,z,null,I);w.push(it.meshes(t,L,o))}return w},it.makeMeshIntersectionPolylines=function(t){if(t.length==0)return[];for(var n=0;n<t.length;){var r=t[n];++n,r.max.opp=r.min,r.min.opp=r.max}for(var s=it.kdTreeFromSegments(t),o=[],h=0;h<t.length;){var c=t[h];++h,o.push(c.min),o.push(c.max)}for(var v=0;v<o.length;){var d=o[v];if(++v,d.adj==null){var m=it.lookupAdjacentSegment(d,s,t.length);m!=null&&m.adj==null&&(d.adj=m,m.adj=d)}}var b=o.filter(function(B){return B.adj==null});b.length==0&&(b=o);for(var w=[],M=0,P=!1;b.length!=0;){var z=b.pop();if(!z.visited){for(var I=[],C=z;C!=null&&!(C.visited||(C.visited=!0,C.opp.visited=!0,I.push(C),M+=2,C=C.opp.adj,C==z)););I.length>0&&(I.push(I[I.length-1].opp),w.push(I))}if(b.length==0&&o.length>0&&(P||M<o.length)){P=!0;var L=o.pop();b.push(L)}}return w},it.kdTreeFromSegments=function(t){for(var n=[],r=0;r<t.length;){var s=t[r];++r,n.push(new dn(s.min.point,s.min)),n.push(new dn(s.max.point,s.max))}return new qn(n,l.distSquared)},it.lookupAdjacentSegment=function(t,n,r){var s=n.nearest(t.point,r,tt.EPSILON).filter(function(o){return t!=o.item0.obj}).map(function(o){return o.item0.obj});return s.length==1?s[0]:null},it.curveAndSurface=function(t,n,r,s,o){r==null&&(r=.001),s!=null?s=s:s=new ke(t),o!=null?o=o:o=new qe(n);var h=it.boundingBoxTrees(s,o,r);return G.unique(h.map(function(c){var v=c.item0,d=c.item1,m=G.first(v.knots),b=G.last(v.knots),w=(m+b)/2,M=G.first(d.knotsU),P=G.last(d.knotsU),z=G.first(d.knotsV),I=G.last(d.knotsV),C=[(M+P)/2,(z+I)/2];return it.curveAndSurfaceWithEstimate(v,d,[w].concat(C),r)}).filter(function(c){return l.distSquared(c.curvePoint,c.surfacePoint)<r*r}),function(c,v){return Math.abs(c.u-v.u)<.5*r})},it.curveAndSurfaceWithEstimate=function(t,n,r,s){s==null&&(s=.001);var o=function(d){var m=S.rationalCurvePoint(t,d[0]),b=S.rationalSurfacePoint(n,d[1],d[2]),w=l.sub(m,b);return l.dot(w,w)},h=function(d){var m=S.rationalCurveDerivatives(t,d[0],1),b=S.rationalSurfaceDerivatives(n,d[1],d[2],1),w=l.sub(b[0][0],m[0]),M=l.mul(-1,m[1]),P=b[1][0],z=b[0][1];return[2*l.dot(M,w),2*l.dot(P,w),2*l.dot(z,w)]},c=we.uncmin(o,r,s*s,h),v=c.solution;return new Vn(v[0],[v[1],v[2]],S.rationalCurvePoint(t,v[0]),S.rationalSurfacePoint(n,v[1],v[2]))},it.polylineAndMesh=function(t,n,r){for(var s=it.boundingBoxTrees(new Ne(t),new Ie(n),r),o=[],h=0;h<s.length;){var c=s[h];++h;var v=c.item0,d=c.item1,m=it.segmentWithTriangle(t.points[v],t.points[v+1],n.points,n.faces[d]);if(m!=null){var b=m.point,w=l.lerp(m.p,[t.params[v]],[t.params[v+1]])[0],M=Gt.triangleUVFromPoint(n,d,b);o.push(new Dn(b,w,M,v,d))}}return o},it.boundingBoxTrees=function(t,n,r){r==null&&(r=1e-9);var s=[],o=[];s.push(t),o.push(n);for(var h=[];s.length>0;){var c=s.pop(),v=o.pop();if(!(c.empty()||v.empty())&&c.boundingBox().intersects(v.boundingBox(),r)){var d=c.indivisible(r),m=v.indivisible(r);if(d&&m){h.push(new qt(c.yield(),v.yield()));continue}else if(d&&!m){var b=v.split();s.push(c),o.push(b.item1),s.push(c),o.push(b.item0);continue}else if(!d&&m){var w=c.split();s.push(w.item1),o.push(v),s.push(w.item0),o.push(v);continue}var M=c.split(),P=v.split();s.push(M.item1),o.push(P.item1),s.push(M.item1),o.push(P.item0),s.push(M.item0),o.push(P.item1),s.push(M.item0),o.push(P.item0)}}return h},it.curves=function(t,n,r){var s=it.boundingBoxTrees(new ke(t),new ke(n),0);return G.unique(s.map(function(o){return it.curvesWithEstimate(t,n,G.first(o.item0.knots),G.first(o.item1.knots),r)}).filter(function(o){return l.distSquared(o.point0,o.point1)<r}),function(o,h){return Math.abs(o.u0-h.u0)<r*5})},it.curvesWithEstimate=function(t,n,r,s,o){var h=function(M){var P=S.rationalCurvePoint(t,M[0]),z=S.rationalCurvePoint(n,M[1]),I=l.sub(P,z);return l.dot(I,I)},c=function(M){var P=S.rationalCurveDerivatives(t,M[0],1),z=S.rationalCurveDerivatives(n,M[1],1),I=l.sub(P[0],z[0]),C=P[1],L=l.mul(-1,z[1]);return[2*l.dot(C,I),2*l.dot(L,I)]},v=we.uncmin(h,[r,s],o*o,c),d=v.solution[0],m=v.solution[1],b=S.rationalCurvePoint(t,d),w=S.rationalCurvePoint(n,m);return new $e(b,w,d,m)},it.triangles=function(t,n,r,s){var o=t.faces[n],h=r.faces[s],c=Gt.getTriangleNorm(t.points,o),v=Gt.getTriangleNorm(r.points,h),d=t.points[o[0]],m=r.points[h[0]],b=it.planes(d,c,m,v);if(b==null)return null;var w=it.clipRayInCoplanarTriangle(b,t,n);if(w==null)return null;var M=it.clipRayInCoplanarTriangle(b,r,s);if(M==null)return null;var P=it.mergeTriangleClipIntervals(w,M,t,n,r,s);return P==null?null:new re(new Oe(P.min.uv0,P.min.uv1,P.min.point,n,s),new Oe(P.max.uv0,P.max.uv1,P.max.point,n,s))},it.clipRayInCoplanarTriangle=function(t,n,r){for(var s=n.faces[r],o=[n.points[s[0]],n.points[s[1]],n.points[s[2]]],h=[n.uvs[s[0]],n.uvs[s[1]],n.uvs[s[2]]],c=[l.sub(h[1],h[0]),l.sub(h[2],h[1]),l.sub(h[0],h[2])],v=[l.sub(o[1],o[0]),l.sub(o[2],o[1]),l.sub(o[0],o[2])],d=v.map(l.normalized),m=v.map(l.norm),b=null,w=null,M=0;M<3;){var P=M++,z=o[P],I=d[P],C=it.rays(z,I,t.origin,t.dir);if(C!=null){var L=C.u0,B=C.u1;L<-tt.EPSILON||L>m[P]+tt.EPSILON||((b==null||B<b.u)&&(b=new _n(B,l.onRay(t.origin,t.dir,B),l.onRay(h[P],c[P],L/m[P]))),(w==null||B>w.u)&&(w=new _n(B,l.onRay(t.origin,t.dir,B),l.onRay(h[P],c[P],L/m[P]))))}}return w==null||b==null?null:new re(b,w)},it.mergeTriangleClipIntervals=function(t,n,r,s,o,h){if(n.min.u>t.max.u+tt.EPSILON||t.min.u>n.max.u+tt.EPSILON)return null;var c;t.min.u>n.min.u?c=new qt(t.min,0):c=new qt(n.min,1);var v;t.max.u<n.max.u?v=new qt(t.max,0):v=new qt(n.max,1);var d=new re(new Oe(null,null,c.item0.point,s,h),new Oe(null,null,v.item0.point,s,h));return c.item1==0?(d.min.uv0=c.item0.uv,d.min.uv1=Gt.triangleUVFromPoint(o,h,c.item0.point)):(d.min.uv0=Gt.triangleUVFromPoint(r,s,c.item0.point),d.min.uv1=c.item0.uv),v.item1==0?(d.max.uv0=v.item0.uv,d.max.uv1=Gt.triangleUVFromPoint(o,h,v.item0.point)):(d.max.uv0=Gt.triangleUVFromPoint(r,s,v.item0.point),d.max.uv1=v.item0.uv),d},it.planes=function(t,n,r,s){var o=l.cross(n,s);if(l.dot(o,o)<tt.EPSILON)return null;var h=0,c=Math.abs(o[0]),v=Math.abs(o[1]),d=Math.abs(o[2]);v>c&&(h=1,c=v),d>c&&(h=2,c=d);var m,b,w,M;h==0?(m=n[1],b=n[2],w=s[1],M=s[2]):h==1?(m=n[0],b=n[2],w=s[0],M=s[2]):(m=n[0],b=n[1],w=s[0],M=s[1]);var P=-l.dot(t,n),z=-l.dot(r,s),I=m*M-b*w,C=(b*z-P*M)/I,L=(P*w-m*z)/I,B;return h==0?B=[0,C,L]:h==1?B=[C,0,L]:B=[C,L,0],new vn(B,l.normalized(o))},it.threePlanes=function(t,n,r,s,o,h){var c=l.cross(r,o),v=l.dot(t,c);if(Math.abs(v)<tt.EPSILON)return null;var d=l.sub(l.mul(h,r),l.mul(s,o)),m=l.add(l.mul(n,c),l.cross(t,d));return l.mul(1/v,m)},it.polylines=function(t,n,r){for(var s=it.boundingBoxTrees(new Ne(t),new Ne(n),r),o=[],h=0;h<s.length;){var c=s[h];++h;var v=c.item0,d=c.item1,m=it.segments(t.points[v],t.points[v+1],n.points[d],n.points[d+1],r);m!=null&&(m.u0=l.lerp(m.u0,[t.params[v]],[t.params[v+1]])[0],m.u1=l.lerp(m.u1,[n.params[d]],[n.params[d+1]])[0],o.push(m))}return o},it.segments=function(t,n,r,s,o){var h=l.sub(n,t),c=Math.sqrt(l.dot(h,h)),v=l.mul(1/c,h),d=l.sub(s,r),m=Math.sqrt(l.dot(d,d)),b=l.mul(1/m,d),w=it.rays(t,v,r,b);if(w!=null){var M=Math.min(Math.max(0,w.u0/c),1),P=Math.min(Math.max(0,w.u1/m),1),z=l.onRay(t,h,M),I=l.onRay(r,d,P),C=l.distSquared(z,I);if(C<o*o)return new $e(z,I,M,P)}return null},it.rays=function(t,n,r,s){var o=l.dot(n,s),h=l.dot(n,r),c=l.dot(n,t),v=l.dot(s,r),d=l.dot(s,t),m=l.dot(n,n),b=l.dot(s,s),w=m*b-o*o;if(Math.abs(w)<tt.EPSILON)return null;var M=o*(h-c)-m*(v-d),P=M/w,z=(h-c+P*o)/m,I=l.onRay(t,n,z),C=l.onRay(r,s,P);return new $e(I,C,z,P)},it.segmentWithTriangle=function(t,n,r,s){var o=r[s[0]],h=r[s[1]],c=r[s[2]],v=l.sub(h,o),d=l.sub(c,o),m=l.cross(v,d),b=l.sub(n,t),w=l.sub(t,o),M=-l.dot(m,w),P=l.dot(m,b);if(Math.abs(P)<tt.EPSILON)return null;var z=M/P;if(z<0||z>1)return null;var I=l.add(t,l.mul(z,b)),C=l.dot(v,d),L=l.dot(v,v),B=l.dot(d,d),T=l.sub(I,o),R=l.dot(T,v),F=l.dot(T,d),X=C*C-L*B;if(Math.abs(X)<tt.EPSILON)return null;var D=(C*F-B*R)/X,V=(C*R-L*F)/X;return D>1+tt.EPSILON||V>1+tt.EPSILON||V<-tt.EPSILON||D<-tt.EPSILON||D+V>1+tt.EPSILON?null:new On(I,D,V,z)},it.segmentAndPlane=function(t,n,r,s){var o=l.dot(s,l.sub(n,t));if(Math.abs(o)<tt.EPSILON)return null;var h=l.dot(s,l.sub(r,t)),c=h/o;return c>1+tt.EPSILON||c<-tt.EPSILON?null:{p:c}};var ht=f.eval.Make=function(){};p["verb.eval.Make"]=ht,ht.__name__=["verb","eval","Make"],ht.rationalTranslationalSurface=function(t,n){for(var r=S.rationalCurvePoint(n,G.first(n.knots)),s=G.first(n.knots),o=G.last(n.knots),h=2*n.controlPoints.length,c=(o-s)/(h-1),v=[],d=0;d<h;){var m=d++,b=l.sub(S.rationalCurvePoint(n,s+m*c),r),w=vt.rationalCurveTransform(t,[[1,0,0,b[0]],[0,1,0,b[1]],[0,0,1,b[2]],[0,0,0,1]]);v.push(w)}return ht.loftedSurface(v)},ht.surfaceBoundaryCurves=function(t){var n=ht.surfaceIsocurve(t,G.first(t.knotsU),!1),r=ht.surfaceIsocurve(t,G.last(t.knotsU),!1),s=ht.surfaceIsocurve(t,G.first(t.knotsV),!0),o=ht.surfaceIsocurve(t,G.last(t.knotsV),!0);return[n,r,s,o]},ht.surfaceIsocurve=function(t,n,r){r==null&&(r=!1);var s;r?s=t.knotsV:s=t.knotsU;var o;r?o=t.degreeV:o=t.degreeU;for(var h=_t.knotMultiplicities(s),c=-1,v=0,d=h.length;v<d;){var m=v++;if(Math.abs(n-h[m].knot)<tt.EPSILON){c=m;break}}var b=o+1;c>=0&&(b=b-h[c].mult);var w;b>0?w=vt.surfaceKnotRefine(t,l.rep(b,n),r):w=t;var M=S.knotSpan(o,n,s);return Math.abs(n-G.first(s))<tt.EPSILON?M=0:Math.abs(n-G.last(s))<tt.EPSILON&&(M=(r?w.controlPoints[0].length:w.controlPoints.length)-1),r?new kt(w.degreeU,w.knotsU,function(P){for(var z,I=[],C=0,L=w.controlPoints;C<L.length;){var B=L[C];++C,I.push(B[M])}return z=I,z}()):new kt(w.degreeV,w.knotsV,w.controlPoints[M])},ht.loftedSurface=function(t,n){t=vt.unifyCurveKnotVectors(t);var r=t[0].degree;n==null&&(n=3),n>t.length-1&&(n=t.length-1);for(var s=t[0].knots,o=[],h=[],c=0,v=t[0].controlPoints.length;c<v;){var d=[c++],m=t.map(function(w){return function(M){return M.controlPoints[w[0]]}}(d)),b=ht.rationalInterpCurve(m,n,!0);h.push(b.controlPoints),o=b.knots}return new Ot(r,n,s,o,h)},ht.clonedCurve=function(t){return new kt(t.degree,t.knots.slice(),t.controlPoints.map(function(n){return n.slice()}))},ht.rationalBezierCurve=function(t,n){for(var r=t.length-1,s=[],o=0,h=r+1;o<h;)o++,s.push(0);for(var c=0,v=r+1;c<v;)c++,s.push(1);return n==null&&(n=l.rep(t.length,1)),new kt(r,s,S.homogenize1d(t,n))},ht.fourPointSurface=function(t,n,r,s,o){o==null&&(o=3);for(var h=o,c=[],v=0,d=o+1;v<d;){for(var m=v++,b=[],w=0,M=o+1;w<M;){var P=w++,z=1-m/h,I=l.lerp(z,t,n),C=l.lerp(z,s,r),L=l.lerp(1-P/h,I,C);L.push(1),b.push(L)}c.push(b)}var B=l.rep(o+1,0),T=l.rep(o+1,1);return new Ot(o,o,B.concat(T),B.concat(T),c)},ht.ellipseArc=function(t,n,r,s,o){var h=l.norm(n),c=l.norm(r);n=l.normalized(n),r=l.normalized(r),o<s&&(o=2*Math.PI+s);var v=o-s,d=0;v<=Math.PI/2?d=1:v<=Math.PI?d=2:v<=3*Math.PI/2?d=3:d=4;var m=v/d,b=Math.cos(m/2),w=l.add(t,l.add(l.mul(h*Math.cos(s),n),l.mul(c*Math.sin(s),r))),M=l.sub(l.mul(Math.cos(s),r),l.mul(Math.sin(s),n)),P=[],z=l.zeros1d(2*d+3),I=0,C=s,L=l.zeros1d(d*2);P[0]=w,L[0]=1;for(var B=1,T=d+1;B<T;){var R=B++;C+=m;var F=l.add(t,l.add(l.mul(h*Math.cos(C),n),l.mul(c*Math.sin(C),r)));L[I+2]=1,P[I+2]=F;var X=l.sub(l.mul(Math.cos(C),r),l.mul(Math.sin(C),n)),D=it.rays(w,l.mul(1/l.norm(M),M),F,l.mul(1/l.norm(X),X)),V=l.add(w,l.mul(D.u0,M));L[I+1]=b,P[I+1]=V,I+=2,R<d&&(w=F,M=X)}for(var q=2*d+1,J=0;J<3;){var $=J++;z[$]=0,z[$+q]=1}switch(d){case 2:z[3]=z[4]=.5;break;case 3:z[3]=z[4]=.3333333333333333,z[5]=z[6]=.6666666666666666;break;case 4:z[3]=z[4]=.25,z[5]=z[6]=.5,z[7]=z[8]=.75;break}return new kt(2,z,S.homogenize1d(P,L))},ht.arc=function(t,n,r,s,o,h){return ht.ellipseArc(t,l.mul(s,l.normalized(n)),l.mul(s,l.normalized(r)),o,h)},ht.polyline=function(t){for(var n=[0,0],r=0,s=0,o=t.length-1;s<o;){var h=s++;r+=l.dist(t[h],t[h+1]),n.push(r)}n.push(r),n=l.mul(1/r,n);for(var c,v=[],d=0,m=t.length;d<m;)d++,v.push(1);return c=v,new kt(1,n,S.homogenize1d(t.slice(0),c))},ht.extrudedSurface=function(t,n,r){for(var s=[[],[],[]],o=[[],[],[]],h=S.dehomogenize1d(r.controlPoints),c=S.weight1d(r.controlPoints),v=l.mul(n,t),d=l.mul(.5*n,t),m=0,b=h.length;m<b;){var w=m++;s[2][w]=h[w],s[1][w]=l.add(d,h[w]),s[0][w]=l.add(v,h[w]),o[0][w]=c[w],o[1][w]=c[w],o[2][w]=c[w]}return new Ot(2,r.degree,[0,0,0,1,1,1],r.knots,S.homogenize2d(s,o))},ht.cylindricalSurface=function(t,n,r,s,o){var h=l.cross(t,n),c=ht.arc(r,n,h,o,0,2*Math.PI);return ht.extrudedSurface(t,s,c)},ht.revolvedSurface=function(t,n,r,s){var o=S.dehomogenize1d(t.controlPoints),h=S.weight1d(t.controlPoints),c,v;s<=Math.PI/2?(c=1,v=l.zeros1d(6+2*(c-1))):s<=Math.PI?(c=2,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.5):s<=3*Math.PI/2?(c=3,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.3333333333333333,v[5]=v[6]=.6666666666666666):(c=4,v=l.zeros1d(6+2*(c-1)),v[3]=v[4]=.25,v[5]=v[6]=.5,v[7]=v[8]=.75);for(var d=s/c,m=3+2*(c-1),b=0;b<3;){var w=b++;v[w]=0,v[m+w]=1}for(var M=Math.cos(d/2),P=0,z=l.zeros1d(c+1),I=l.zeros1d(c+1),C=l.zeros3d(2*c+1,o.length,3),L=l.zeros2d(2*c+1,o.length),B=1,T=c+1;B<T;){var R=B++;P+=d,I[R]=Math.cos(P),z[R]=Math.sin(P)}for(var F=0,X=o.length;F<X;){var D=F++,V=ce.rayClosestPoint(o[D],n,r),q=l.sub(o[D],V),J=l.norm(q),$=l.cross(r,q);J>tt.EPSILON&&(q=l.mul(1/J,q),$=l.mul(1/J,$)),C[0][D]=o[D];var nt=o[D];L[0][D]=h[D];for(var st=$,rt=0,at=1,et=c+1;at<et;){var ot=at++,O;J==0?O=V:O=l.add(V,l.add(l.mul(J*I[ot],q),l.mul(J*z[ot],$))),C[rt+2][D]=O,L[rt+2][D]=h[D];var ut=l.sub(l.mul(I[ot],$),l.mul(z[ot],q));if(J==0)C[rt+1][D]=V;else{var gt=it.rays(nt,l.mul(1/l.norm(st),st),O,l.mul(1/l.norm(ut),ut)),It=l.add(nt,l.mul(gt.u0,st));C[rt+1][D]=It}L[rt+1][D]=M*h[D],rt+=2,ot<c&&(nt=O,st=ut)}}return new Ot(2,t.degree,v,t.knots,S.homogenize2d(C,L))},ht.sphericalSurface=function(t,n,r,s){var o=ht.arc(t,l.mul(-1,n),r,s,0,Math.PI);return ht.revolvedSurface(o,t,n,2*Math.PI)},ht.conicalSurface=function(t,n,r,s,o){var h=2*Math.PI,c=1,v=[l.add(r,l.mul(s,t)),l.add(r,l.mul(o,n))],d=[0,0,1,1],m=[1,1],b=new kt(c,d,S.homogenize1d(v,m));return ht.revolvedSurface(b,r,t,h)},ht.rationalInterpCurve=function(t,n,r,s,o){if(r==null&&(r=!1),n==null&&(n=3),t.length<n+1)throw new j("You need to supply at least degree + 1 points! You only supplied "+t.length+" points.");for(var h=[0],c=1,v=t.length;c<v;){var d=c++,m=l.norm(l.sub(t[d],t[d-1])),b=h[h.length-1];h.push(b+m)}for(var w=h[h.length-1],M=0,P=h.length;M<P;){var z=M++;h[z]=h[z]/w}var I=l.rep(n+1,0),C=s!=null&&o!=null,L;C?L=0:L=1;var B;C?B=h.length-n+1:B=h.length-n;for(var T=L;T<B;){for(var R=T++,F=0,X=0;X<n;){var D=X++;F+=h[R+D]}I.push(1/n*F)}var V=I.concat(l.rep(n+1,1)),q=[],J;C?J=t.length+1:J=t.length-1;var $;C?$=t.length-(n-1):$=t.length-(n+1);for(var nt=0;nt<h.length;){var st=h[nt];++nt;var rt=S.knotSpanGivenN(J,n,st,V),at=S.basisFunctionsGivenKnotSpanIndex(rt,st,n,V),et=rt-n,ot=l.zeros1d(et),O=l.zeros1d($-et);q.push(ot.concat(at).concat(O))}if(C){var ut=q[0].length-2,gt=[-1,1].concat(l.zeros1d(ut)),It=l.zeros1d(ut).concat([-1,1]);G.spliceAndInsert(q,1,0,gt),G.spliceAndInsert(q,q.length-1,0,It)}for(var Et=t[0].length,Ct=[],Tt=(1-V[V.length-n-2])/n,ie=V[n+1]/n,ge=0;ge<Et;){var ne=[ge++],$t;if(!C)$t=t.map(function(Ae){return function(Re){return Re[Ae[0]]}}(ne));else{$t=[t[0][ne[0]]],$t.push(ie*s[ne[0]]);for(var se=1,_e=t.length-1;se<_e;){var xe=se++;$t.push(t[xe][ne[0]])}$t.push(Tt*o[ne[0]]),$t.push(G.last(t)[ne[0]])}var Ee=Mt.solve(q,$t);Ct.push(Ee)}var Me=Mt.transpose(Ct);if(!r){var Pe=l.rep(Me.length,1);Me=S.homogenize1d(Me,Pe)}return new kt(n,V,Me)};var vt=f.eval.Modify=function(){};p["verb.eval.Modify"]=vt,vt.__name__=["verb","eval","Modify"],vt.curveReverse=function(t){return new kt(t.degree,vt.knotsReverse(t.knots),G.reversed(t.controlPoints))},vt.surfaceReverse=function(t,n){return n==null&&(n=!1),n?new Ot(t.degreeU,t.degreeV,t.knotsU,vt.knotsReverse(t.knotsV),function(r){for(var s,o=[],h=0,c=t.controlPoints;h<c.length;){var v=c[h];++h,o.push(G.reversed(v))}return s=o,s}()):new Ot(t.degreeU,t.degreeV,vt.knotsReverse(t.knotsU),t.knotsV,G.reversed(t.controlPoints))},vt.knotsReverse=function(t){var n=G.first(t);G.last(t);for(var r=[n],s=t.length,o=1;o<s;){var h=o++;r.push(r[h-1]+(t[s-h]-t[s-h-1]))}return r},vt.unifyCurveKnotVectors=function(t){t=t.map(ht.clonedCurve);for(var n=K.fold(t,function(V,q){return vt.imax(V.degree,q)},0),r=0,s=t.length;r<s;){var o=r++;t[o].degree<n&&(t[o]=vt.curveElevateDegree(t[o],n))}for(var h,c=[],v=0;v<t.length;){var d=t[v];++v,c.push(new re(G.first(d.knots),G.last(d.knots)))}h=c;for(var m=0,b=t.length;m<b;){var w=m++,M=[h[w].min];t[w].knots=t[w].knots.map(function(V){return function(q){return q-V[0]}}(M))}for(var P=h.map(function(V){return V.max-V.min}),z=K.fold(P,function(V,q){return Math.max(V,q)},0),I=0,C=t.length;I<C;){var L=I++,B=[z/P[L]];t[L].knots=t[L].knots.map(function(V){return function(q){return q*V[0]}}(B))}for(var T=K.fold(t,function(V,q){return l.sortedSetUnion(V.knots,q)},[]),R=0,F=t.length;R<F;){var X=R++,D=l.sortedSetSub(T,t[X].knots);D.length==0&&(t[X]=t[X]),t[X]=vt.curveKnotRefine(t[X],D)}return t},vt.imin=function(t,n){return t<n?t:n},vt.imax=function(t,n){return t>n?t:n},vt.curveElevateDegree=function(t,n){if(n<=t.degree)return t;var r=t.knots.length-t.degree-2,s=t.degree,o=t.knots,h=t.controlPoints,c=n-t.degree,v=t.controlPoints[0].length,d=l.zeros2d(s+c+1,s+1),m=[],b=[],w=[],M=r+s+1,P=n,z=Math.floor(P/2),I=[],C=[];d[0][0]=1,d[P][s]=1;for(var L=1,B=z+1;L<B;)for(var T=L++,R=1/zt.get(P,T),F=vt.imin(s,T),X=vt.imax(0,T-c),D=F+1;X<D;){var V=X++;d[T][V]=R*zt.get(s,V)*zt.get(c,T-V)}for(var q=z+1;q<P;)for(var J=q++,$=vt.imin(s,J),nt=vt.imax(0,J-c),st=$+1;nt<st;){var rt=nt++;d[J][rt]=d[P-J][s-rt]}var at=P+1,et=-1,ot=s,O=s+1,ut=1,gt=o[0];I[0]=h[0];for(var It=0,Et=P+1;It<Et;){var Ct=It++;C[Ct]=gt}for(var Tt=0,ie=s+1;Tt<ie;){var ge=Tt++;m[ge]=h[ge]}for(;O<M;){for(var ne=O;O<M&&o[O]==o[O+1];)O=O+1;var $t=O-ne+1,se=o[O],_e=et;et=s-$t;var xe;_e>0?xe=Math.floor((_e+2)/2):xe=1;var Ee;if(et>0?Ee=Math.floor(P-(et+1)/2):Ee=P,et>0){for(var Me=se-gt,Pe=[],Ae=s;Ae>$t;)Pe[Ae-$t-1]=Me/(o[ot+Ae]-gt),Ae--;for(var Re=1,bn=et+1;Re<bn;){for(var en=Re++,Zi=et-en,Er=$t+en,nn=s;nn>=Er;)m[nn]=l.add(l.mul(Pe[nn-Er],m[nn]),l.mul(1-Pe[nn-Er],m[nn-1])),nn--;w[Zi]=m[s]}}for(var bi=xe,Yi=P+1;bi<Yi;){var xn=bi++;b[xn]=l.zeros1d(v);for(var Hi=vt.imin(s,xn),xi=vt.imax(0,xn-c),Qi=Hi+1;xi<Qi;){var Mi=xi++;b[xn]=l.add(b[xn],l.mul(d[xn][Mi],m[Mi]))}}if(_e>1)for(var Br=at-2,Lr=at,Pi=se-gt,Ji=(se-C[at-1])/Pi,Ai=1;Ai<_e;){for(var Tr=Ai++,Ve=Br,rn=Lr,Ye=rn-at+1;rn-Ve>Tr;){if(Ve<ut){var $i=(se-C[Ve])/(gt-C[Ve]);I[Ve]=l.lerp($i,I[Ve],I[Ve-1])}if(rn>=xe){if(rn-Tr<=at-P+_e){var ts=(se-C[rn-Tr])/Pi;b[Ye]=l.lerp(ts,b[Ye],b[Ye+1])}}else b[Ye]=l.lerp(Ji,b[Ye],b[Ye+1]);Ve=Ve+1,rn=rn-1,Ye=Ye-1}Br=Br-1,Lr=Lr+1}if(ot!=s)for(var zi=0,es=P-_e;zi<es;)zi++,C[at]=gt,at=at+1;for(var Si=xe,ns=Ee+1;Si<ns;){var rs=Si++;I[ut]=b[rs],ut=ut+1}if(O<M){for(var Ci=0;Ci<et;){var ki=Ci++;m[ki]=w[ki]}for(var Ii=et,is=s+1;Ii<is;){var Ni=Ii++;m[Ni]=h[O-s+Ni]}ot=O,O=O+1,gt=se}else for(var Ei=0,ss=P+1;Ei<ss;){var as=Ei++;C[at+as]=se}}return new kt(n,C,I)},vt.rationalSurfaceTransform=function(t,n){for(var r=S.dehomogenize2d(t.controlPoints),s=0,o=r.length;s<o;)for(var h=s++,c=0,v=r[h].length;c<v;){var d=c++,m=r[h][d];m.push(1),r[h][d]=Mt.dot(n,m).slice(0,m.length-1)}return new Ot(t.degreeU,t.degreeV,t.knotsU.slice(),t.knotsV.slice(),S.homogenize2d(r,S.weight2d(t.controlPoints)))},vt.rationalCurveTransform=function(t,n){for(var r=S.dehomogenize1d(t.controlPoints),s=0,o=r.length;s<o;){var h=s++,c=r[h];c.push(1),r[h]=Mt.dot(n,c).slice(0,c.length-1)}return new kt(t.degree,t.knots.slice(),S.homogenize1d(r,S.weight1d(t.controlPoints)))},vt.surfaceKnotRefine=function(t,n,r){var s=[],o,h,c;r?(c=t.controlPoints,o=t.knotsV,h=t.degreeV):(c=Mt.transpose(t.controlPoints),o=t.knotsU,h=t.degreeU);for(var v=null,d=0;d<c.length;){var m=c[d];++d,v=vt.curveKnotRefine(new kt(h,o,m),n),s.push(v.controlPoints)}var b=v.knots;return r?new Ot(t.degreeU,t.degreeV,t.knotsU.slice(),b,s):(s=Mt.transpose(s),new Ot(t.degreeU,t.degreeV,b,t.knotsV.slice(),s))},vt.decomposeCurveIntoBeziers=function(t){for(var n=t.degree,r=t.controlPoints,s=t.knots,o=_t.knotMultiplicities(s),h=n+1,c=0;c<o.length;){var v=o[c];if(++c,v.mult<h){var d=l.rep(h-v.mult,v.knot),m=vt.curveKnotRefine(new kt(n,s,r),d);s=m.knots,r=m.controlPoints}}s.length/h-1;for(var b=h*2,w=[],M=0;M<r.length;){var P=s.slice(M,M+b),z=r.slice(M,M+h);w.push(new kt(n,P,z)),M+=h}return w},vt.curveKnotRefine=function(t,n){if(n.length==0)return ht.clonedCurve(t);for(var r=t.degree,s=t.controlPoints,o=t.knots,h=s.length-1,c=h+r+1,v=n.length-1,d=S.knotSpan(r,n[0],o),m=S.knotSpan(r,n[v],o),b=[],w=[],M=0,P=d-r+1;M<P;){var z=M++;b[z]=s[z]}for(var I=m-1,C=h+1;I<C;){var L=I++;b[L+v+1]=s[L]}for(var B=0,T=d+1;B<T;){var R=B++;w[R]=o[R]}for(var F=m+r,X=c+1;F<X;){var D=F++;w[D+v+1]=o[D]}for(var V=m+r-1,q=m+r+v,J=v;J>=0;){for(;n[J]<=o[V]&&V>d;)b[q-r-1]=s[V-r-1],w[q]=o[V],q=q-1,V=V-1;b[q-r-1]=b[q-r];for(var $=1,nt=r+1;$<nt;){var st=$++,rt=q-r+st,at=w[q+st]-n[J];Math.abs(at)<tt.EPSILON?b[rt-1]=b[rt]:(at=at/(w[q+st]-o[V-r+st]),b[rt-1]=l.add(l.mul(at,b[rt-1]),l.mul(1-at,b[rt])))}w[q]=n[J],q=q-1,J--}return new kt(r,w,b)},vt.curveKnotInsert=function(t,n,r){for(var s=t.degree,o=t.controlPoints,h=t.knots,c=0,v=o.length,d=S.knotSpan(s,n,h),m=[],b=[],w=[],M=1,P=d+1;M<P;){var z=M++;b[z]=h[z]}for(var I=1,C=r+1;I<C;){var L=I++;b[d+L]=n}for(var B=d+1,T=h.length;B<T;){var R=B++;b[R+r]=h[R]}for(var F=0,X=d-s+1;F<X;){var D=F++;w[D]=o[D]}for(var V=d-c;V<v;){var q=V++;w[q+r]=o[q]}for(var J=0,$=s-c+1;J<$;){var nt=J++;m[nt]=o[d-s+nt]}for(var st=0,rt=0,at=1,et=r+1;at<et;){var ot=at++;st=d-s+ot;for(var O=0,ut=s-ot-c+1;O<ut;){var gt=O++;rt=(n-h[st+gt])/(h[gt+d+1]-h[st+gt]),m[gt]=l.add(l.mul(rt,m[gt+1]),l.mul(1-rt,m[gt]))}w[st]=m[0],w[d+r-ot-c]=m[s-ot-c]}for(var It=st+1,Et=d-c;It<Et;){var Ct=It++;w[Ct]=m[Ct-st]}return new kt(s,b,w)};var At=f.eval.Tess=function(){};p["verb.eval.Tess"]=At,At.__name__=["verb","eval","Tess"],At.rationalCurveRegularSample=function(t,n,r){return At.rationalCurveRegularSampleRange(t,t.knots[0],G.last(t.knots),n,r)},At.rationalCurveRegularSampleRange=function(t,n,r,s,o){s<1&&(s=2);for(var h=[],c=(r-n)/(s-1),v=0,d=0;d<s;){var m=d++;v=n+c*m,o?h.push([v].concat(S.rationalCurvePoint(t,v))):h.push(S.rationalCurvePoint(t,v))}return h},At.rationalCurveAdaptiveSample=function(t,n,r){if(r==null&&(r=!1),n==null&&(n=1e-6),t.degree==1)if(r){for(var s=[],o=0,h=t.controlPoints.length;o<h;){var c=o++;s.push([t.knots[c+1]].concat(S.dehomogenize(t.controlPoints[c])))}return s}else return t.controlPoints.map(S.dehomogenize);return At.rationalCurveAdaptiveSampleRange(t,t.knots[0],G.last(t.knots),n,r)},At.rationalCurveAdaptiveSampleRange=function(t,n,r,s,o){var h=S.rationalCurvePoint(t,n),c=S.rationalCurvePoint(t,r),v=.5+.2*Math.random(),d=n+(r-n)*v,m=S.rationalCurvePoint(t,d),b=l.sub(h,c),w=l.sub(h,m);if(l.dot(b,b)<s&&l.dot(w,w)>s||!ce.threePointsAreFlat(h,m,c,s)){var M=n+(r-n)*.5,P=At.rationalCurveAdaptiveSampleRange(t,n,M,s,o),z=At.rationalCurveAdaptiveSampleRange(t,M,r,s,o);return P.slice(0,-1).concat(z)}else return o?[[n].concat(h),[r].concat(c)]:[h,c]},At.rationalSurfaceNaive=function(t,n,r){n<1&&(n=1),r<1&&(r=1),t.degreeU,t.degreeV,t.controlPoints;for(var s=t.knotsU,o=t.knotsV,h=G.last(s)-s[0],c=G.last(o)-o[0],v=h/n,d=c/r,m=[],b=[],w=[],M=0,P=n+1;M<P;)for(var z=M++,I=0,C=r+1;I<C;){var L=I++,B=z*v,T=L*d;b.push([B,T]);var R=S.rationalSurfaceDerivatives(t,B,T,1),F=R[0][0];m.push(F);var X=l.normalized(l.cross(R[1][0],R[0][1]));w.push(X)}for(var D=[],V=0;V<n;)for(var q=V++,J=0;J<r;){var $=J++,nt=q*(r+1)+$,st=(q+1)*(r+1)+$,rt=st+1,at=nt+1,et=[nt,st,rt],ot=[nt,rt,at];D.push(et),D.push(ot)}return new ye(D,m,w,b)},At.divideRationalSurfaceAdaptive=function(t,n){n==null&&(n=new Ke),n.minDivsU!=null?n.minDivsU=n.minDivsU:n.minDivsU=1,n.minDivsV!=null?n.minDivsU=n.minDivsV:n.minDivsU=1,n.refine!=null?n.refine=n.refine:n.refine=!0;var r=(t.controlPoints.length-1)*2,s=(t.controlPoints[0].length-1)*2,o;n.minDivsU>r?o=n.minDivsU=n.minDivsU:o=n.minDivsU=r;var h;n.minDivsV>s?h=n.minDivsV=n.minDivsV:h=n.minDivsV=s;for(var c=G.last(t.knotsU),v=t.knotsU[0],d=G.last(t.knotsV),m=t.knotsV[0],b=(c-v)/o,w=(d-m)/h,M=[],P=[],z=0,I=h+1;z<I;){for(var C=z++,L=[],B=0,T=o+1;B<T;){var R=B++,F=v+b*R,X=m+w*C,D=S.rationalSurfaceDerivatives(t,F,X,1),V=l.normalized(l.cross(D[0][1],D[1][0]));L.push(new fe(D[0][0],V,[F,X],-1,l.isZero(V)))}P.push(L)}for(var q=0;q<h;)for(var J=q++,$=0;$<o;){var nt=$++,st=[P[h-J-1][nt],P[h-J-1][nt+1],P[h-J][nt+1],P[h-J][nt]];M.push(new Ue(t,st))}if(!n.refine)return M;for(var rt=0;rt<h;)for(var at=rt++,et=0;et<o;){var ot=et++,O=at*o+ot,ut=At.north(O,at,ot,o,h,M),gt=At.east(O,at,ot,o,h,M),It=At.south(O,at,ot,o,h,M),Et=At.west(O,at,ot,o,h,M);M[O].neighbors=[It,gt,ut,Et],M[O].divide(n)}return M},At.north=function(t,n,r,s,o,h){return n==0?null:h[t-s]},At.south=function(t,n,r,s,o,h){return n==o-1?null:h[t+s]},At.east=function(t,n,r,s,o,h){return r==s-1?null:h[t+1]},At.west=function(t,n,r,s,o,h){return r==0?null:h[t-1]},At.triangulateAdaptiveRefinementNodeTree=function(t){for(var n=ye.empty(),r=0;r<t.length;){var s=t[r];++r,s.triangulate(n)}return n},At.rationalSurfaceAdaptive=function(t,n){n!=null?n=n:n=new Ke;var r=At.divideRationalSurfaceAdaptive(t,n);return At.triangulateAdaptiveRefinementNodeTree(r)};var Ke=f.core.AdaptiveRefinementOptions=function(){this.minDivsV=1,this.minDivsU=1,this.refine=!0,this.maxDepth=10,this.minDepth=0,this.normTol=.025};p["verb.eval.AdaptiveRefinementOptions"]=Ke,Ke.__name__=["verb","eval","AdaptiveRefinementOptions"],Ke.prototype={__class__:Ke};var Ue=f.core.AdaptiveRefinementNode=function(t,n,r){if(this.srf=t,r==null?this.neighbors=[null,null,null,null]:this.neighbors=r,this.corners=n,this.corners==null){var s=t.knotsU[0],o=G.last(t.knotsU),h=t.knotsV[0],c=G.last(t.knotsV);this.corners=[fe.fromUv(s,h),fe.fromUv(o,h),fe.fromUv(o,c),fe.fromUv(s,c)]}};p["verb.eval.AdaptiveRefinementNode"]=Ue,Ue.__name__=["verb","eval","AdaptiveRefinementNode"],Ue.prototype={isLeaf:function(){return this.children==null},center:function(){return this.centerPoint!=null?this.centerPoint:this.evalSrf(this.u05,this.v05)},evalCorners:function(){this.u05=(this.corners[0].uv[0]+this.corners[2].uv[0])/2,this.v05=(this.corners[0].uv[1]+this.corners[2].uv[1])/2;for(var t=0;t<4;){var n=t++;if(this.corners[n].point==null){var r=this.corners[n];this.evalSrf(r.uv[0],r.uv[1],r)}}},evalSrf:function(t,n,r){var s=S.rationalSurfaceDerivatives(this.srf,t,n,1),o=s[0][0],h=l.cross(s[0][1],s[1][0]),c=l.isZero(h);return c||(h=l.normalized(h)),r!=null?(r.degen=c,r.point=o,r.normal=h,r):new fe(o,h,[t,n],-1,c)},getEdgeCorners:function(t){if(this.isLeaf())return[this.corners[t]];if(this.horizontal)switch(t){case 0:return this.children[0].getEdgeCorners(0);case 1:return this.children[0].getEdgeCorners(1).concat(this.children[1].getEdgeCorners(1));case 2:return this.children[1].getEdgeCorners(2);case 3:return this.children[1].getEdgeCorners(3).concat(this.children[0].getEdgeCorners(3))}switch(t){case 0:return this.children[0].getEdgeCorners(0).concat(this.children[1].getEdgeCorners(0));case 1:return this.children[1].getEdgeCorners(1);case 2:return this.children[1].getEdgeCorners(2).concat(this.children[0].getEdgeCorners(2));case 3:return this.children[0].getEdgeCorners(3)}return null},getAllCorners:function(t){var n=[this.corners[t]];if(this.neighbors[t]==null)return n;var r=this.neighbors[t].getEdgeCorners((t+2)%4),s=t%2,o=tt.EPSILON,h=this,c=[function(d){return d.uv[0]>h.corners[0].uv[0]+o&&d.uv[0]<h.corners[2].uv[0]-o},function(d){return d.uv[1]>h.corners[0].uv[1]+o&&d.uv[1]<h.corners[2].uv[1]-o}],v=r.filter(c[s]);return v.reverse(),n.concat(v)},midpoint:function(t){if(this.midPoints==null&&(this.midPoints=[null,null,null,null]),this.midPoints[t]!=null)return this.midPoints[t];switch(t){case 0:this.midPoints[0]=this.evalSrf(this.u05,this.corners[0].uv[1]);break;case 1:this.midPoints[1]=this.evalSrf(this.corners[1].uv[0],this.v05);break;case 2:this.midPoints[2]=this.evalSrf(this.u05,this.corners[2].uv[1]);break;case 3:this.midPoints[3]=this.evalSrf(this.corners[0].uv[0],this.v05);break}return this.midPoints[t]},hasBadNormals:function(){return this.corners[0].degen||this.corners[1].degen||this.corners[2].degen||this.corners[3].degen},fixNormals:function(){for(var t=this.corners.length,n=0;n<t;){var r=n++;if(this.corners[r],this.corners[r].degen){var s=this.corners[(r+1)%t],o=this.corners[(r+3)%t];s.degen?this.corners[r].normal=o.normal:this.corners[r].normal=s.normal}}},shouldDivide:function(t,n){if(n<t.minDepth)return!0;if(n>=t.maxDepth)return!1;if(this.hasBadNormals())return this.fixNormals(),!1;if(this.splitVert=l.normSquared(l.sub(this.corners[0].normal,this.corners[1].normal))>t.normTol||l.normSquared(l.sub(this.corners[2].normal,this.corners[3].normal))>t.normTol,this.splitHoriz=l.normSquared(l.sub(this.corners[1].normal,this.corners[2].normal))>t.normTol||l.normSquared(l.sub(this.corners[3].normal,this.corners[0].normal))>t.normTol,this.splitVert||this.splitHoriz)return!0;var r=this.center();return l.normSquared(l.sub(r.normal,this.corners[0].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[1].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[2].normal))>t.normTol||l.normSquared(l.sub(r.normal,this.corners[3].normal))>t.normTol},divide:function(t){t==null&&(t=new Ke),t.normTol==null&&(t.normTol=.085),t.minDepth==null&&(t.minDepth=0),t.maxDepth==null&&(t.maxDepth=10),this._divide(t,0,!0)},_divide:function(t,n,r){if(this.evalCorners(),!!this.shouldDivide(t,n)){if(n++,this.splitVert&&!this.splitHoriz?r=!1:!this.splitVert&&this.splitHoriz&&(r=!0),this.horizontal=r,this.horizontal){var s=[this.corners[0],this.corners[1],this.midpoint(1),this.midpoint(3)],o=[this.midpoint(3),this.midpoint(1),this.corners[2],this.corners[3]];this.children=[new Ue(this.srf,s),new Ue(this.srf,o)],this.children[0].neighbors=[this.neighbors[0],this.neighbors[1],this.children[1],this.neighbors[3]],this.children[1].neighbors=[this.children[0],this.neighbors[1],this.neighbors[2],this.neighbors[3]]}else{var h=[this.corners[0],this.midpoint(0),this.midpoint(2),this.corners[3]],c=[this.midpoint(0),this.corners[1],this.corners[2],this.midpoint(2)];this.children=[new Ue(this.srf,h),new Ue(this.srf,c)],this.children[0].neighbors=[this.neighbors[0],this.children[1],this.neighbors[2],this.neighbors[3]],this.children[1].neighbors=[this.neighbors[0],this.neighbors[1],this.neighbors[2],this.children[0]]}for(var v=0,d=this.children;v<d.length;){var m=d[v];++v,m._divide(t,n,!r)}}},triangulate:function(t){if(t==null&&(t=ye.empty()),this.isLeaf())return this.triangulateLeaf(t);for(var n=0,r=this.children;n<r.length;){var s=r[n];if(++n,s==null)break;s.triangulate(t)}return t},triangulateLeaf:function(t){for(var n=t.points.length,r=[],s=[],o=0,h=0;h<4;){var c=h++,v=this.getAllCorners(c);v.length==2&&(o=c+1);for(var d=0,m=v.length;d<m;){var b=d++;r.push(v[b])}}for(var w=0;w<r.length;){var M=r[w];if(++w,M.id!=-1){s.push(M.id);continue}t.uvs.push(M.uv),t.points.push(M.point),t.normals.push(M.normal),M.id=n,s.push(n),n++}if(r.length==4)return t.faces.push([s[0],s[3],s[1]]),t.faces.push([s[3],s[2],s[1]]),t;if(r.length==5){var P=s.length;return t.faces.push([s[o],s[(o+2)%P],s[(o+1)%P]]),t.faces.push([s[(o+4)%P],s[(o+3)%P],s[o]]),t.faces.push([s[o],s[(o+3)%P],s[(o+2)%P]]),t}var z=this.center();t.uvs.push(z.uv),t.points.push(z.point),t.normals.push(z.normal);for(var I=t.points.length-1,C=0,L=r.length-1;C<r.length;)t.faces.push([I,s[C],s[L]]),L=C++;return t},__class__:Ue};var dt=f.exe.Dispatcher=function(){};p["verb.exe.Dispatcher"]=dt,dt.__name__=["verb","exe","Dispatcher"],dt.init=function(){dt._init||(dt._workerPool=new je(dt.THREADS),dt._init=!0)},dt.dispatchMethod=function(t,n,r){dt.init();var s=new un,o=function(h){s.resolve(h)};return dt._workerPool.addWork(ct.getClassName(t),n,r,o),new Jt(s)};var je=f.exe.WorkerPool=function(t,n){n==null&&(n="verb.js"),t==null&&(t=1),this._callbacks=new jt,this._working=new jt,this._pool=[],this._queue=[];for(var r=0;r<t;){r++;var s;try{s=new Worker(je.basePath+n)}catch(o){o instanceof j&&(o=o.val),s=new Worker(je.basePath+n.substring(0,-3)+".min.js")}this._pool.push(s)}};p["verb.exe.WorkerPool"]=je,je.__name__=["verb","exe","WorkerPool"],je.prototype={addWork:function(t,n,r,s){var o=new tn(t,n,r);this._callbacks.set(o.id,s),this._queue.push(o),this.processQueue()},processQueue:function(){for(var t=this;this._queue.length>0&&this._pool.length>0;){var n=this._queue.shift(),r=[n.id],s=[this._pool.shift()];this._working.h[r[0]]=s[0],s[0].onmessage=function(o,h){return function(c){t._working.remove(h[0]),t._pool.push(o[0]);try{t._callbacks.h.hasOwnProperty(h[0])&&(t._callbacks.h[h[0]](c.data.result),t._callbacks.remove(h[0]))}catch(v){v instanceof j&&(v=v.val),x.log(v)}t.processQueue()}}(s,r),s[0].postMessage(n)}},__class__:je};var tn=function(t,n,r){this.className=t,this.methodName=n,this.args=r,this.id=tn.uuid++};p["verb.exe._WorkerPool.Work"]=tn,tn.__name__=["verb","exe","_WorkerPool","Work"],tn.prototype={__class__:tn};var yn=function(){};p["verb.geom.ICurve"]=yn,yn.__name__=["verb","geom","ICurve"],yn.__interfaces__=[mn],yn.prototype={__class__:yn};var xt=f.geom.NurbsCurve=function(t){this._data=me.isValidNurbsCurveData(t)};p["verb.geom.NurbsCurve"]=xt,xt.__name__=["verb","geom","NurbsCurve"],xt.__interfaces__=[yn],xt.byKnotsControlPointsWeights=function(t,n,r,s){return new xt(new kt(t,n.slice(),S.homogenize1d(r,s)))},xt.byPoints=function(t,n){return n==null&&(n=3),new xt(ht.rationalInterpCurve(t,n))},xt.__super__=Dt,xt.prototype=k(Dt.prototype,{degree:function(){return this._data.degree},knots:function(){return this._data.knots.slice(0)},controlPoints:function(){return S.dehomogenize1d(this._data.controlPoints)},weights:function(){return S.weight1d(this._data.controlPoints)},asNurbs:function(){return new kt(this.degree(),this.knots(),S.homogenize1d(this.controlPoints(),this.weights()))},clone:function(){return new xt(this._data)},domain:function(){return new re(G.first(this._data.knots),G.last(this._data.knots))},transform:function(t){return new xt(vt.rationalCurveTransform(this._data,t))},transformAsync:function(t){return dt.dispatchMethod(vt,"rationalCurveTransform",[this._data,t]).then(function(n){return new xt(n)})},point:function(t){return S.rationalCurvePoint(this._data,t)},pointAsync:function(t){return dt.dispatchMethod(S,"rationalCurvePoint",[this._data,t])},tangent:function(t){return S.rationalCurveTangent(this._data,t)},tangentAsync:function(t){return dt.dispatchMethod(S,"rationalCurveTangent",[this._data,t])},derivatives:function(t,n){return n==null&&(n=1),S.rationalCurveDerivatives(this._data,t,n)},derivativesAsync:function(t,n){return n==null&&(n=1),dt.dispatchMethod(S,"rationalCurveDerivatives",[this._data,t,n])},closestPoint:function(t){return _t.rationalCurveClosestPoint(this._data,t)},closestPointAsync:function(t){return dt.dispatchMethod(_t,"rationalCurveClosestPoint",[this._data,t])},closestParam:function(t){return _t.rationalCurveClosestParam(this._data,t)},closestParamAsync:function(t){return dt.dispatchMethod(_t,"rationalCurveClosestParam",[this._data,t])},length:function(){return _t.rationalCurveArcLength(this._data)},lengthAsync:function(){return dt.dispatchMethod(_t,"rationalCurveArcLength",[this._data])},lengthAtParam:function(t){return _t.rationalCurveArcLength(this._data,t)},lengthAtParamAsync:function(){return dt.dispatchMethod(_t,"rationalCurveArcLength",[this._data])},paramAtLength:function(t,n){return _t.rationalCurveParamAtArcLength(this._data,t,n)},paramAtLengthAsync:function(t,n){return dt.dispatchMethod(_t,"rationalCurveParamAtArcLength",[this._data,t,n])},divideByEqualArcLength:function(t){return Yt.rationalCurveByEqualArcLength(this._data,t)},divideByEqualArcLengthAsync:function(t){return dt.dispatchMethod(Yt,"rationalCurveByEqualArcLength",[this._data,t])},divideByArcLength:function(t){return Yt.rationalCurveByArcLength(this._data,t)},divideByArcLengthAsync:function(t){return dt.dispatchMethod(Yt,"rationalCurveByArcLength",[this._data,t])},split:function(t){return Yt.curveSplit(this._data,t).map(function(n){return new xt(n)})},splitAsync:function(t){return dt.dispatchMethod(Yt,"curveSplit",[this._data,t]).then(function(n){return n.map(function(r){return new xt(r)})})},reverse:function(){return new xt(vt.curveReverse(this._data))},reverseAsync:function(){return dt.dispatchMethod(vt,"curveReverse",[this._data]).then(function(t){return new xt(t)})},tessellate:function(t){return At.rationalCurveAdaptiveSample(this._data,t,!1)},tessellateAsync:function(t){return dt.dispatchMethod(At,"rationalCurveAdaptiveSample",[this._data,t,!1])},__class__:xt});var Xe=f.geom.Arc=function(t,n,r,s,o,h){xt.call(this,ht.arc(t,n,r,s,o,h)),this._center=t,this._xaxis=n,this._yaxis=r,this._radius=s,this._minAngle=o,this._maxAngle=h};p["verb.geom.Arc"]=Xe,Xe.__name__=["verb","geom","Arc"],Xe.__super__=xt,Xe.prototype=k(xt.prototype,{center:function(){return this._center},xaxis:function(){return this._xaxis},yaxis:function(){return this._yaxis},radius:function(){return this._radius},minAngle:function(){return this._minAngle},maxAngle:function(){return this._maxAngle},__class__:Xe});var Xn=f.geom.BezierCurve=function(t,n){xt.call(this,ht.rationalBezierCurve(t,n))};p["verb.geom.BezierCurve"]=Xn,Xn.__name__=["verb","geom","BezierCurve"],Xn.__super__=xt,Xn.prototype=k(xt.prototype,{__class__:Xn});var Wn=f.geom.Circle=function(t,n,r,s){Xe.call(this,t,n,r,s,0,Math.PI*2)};p["verb.geom.Circle"]=Wn,Wn.__name__=["verb","geom","Circle"],Wn.__super__=Xe,Wn.prototype=k(Xe.prototype,{__class__:Wn});var wn=function(){};p["verb.geom.ISurface"]=wn,wn.__name__=["verb","geom","ISurface"],wn.__interfaces__=[mn],wn.prototype={__class__:wn};var pt=f.geom.NurbsSurface=function(t){this._data=me.isValidNurbsSurfaceData(t)};p["verb.geom.NurbsSurface"]=pt,pt.__name__=["verb","geom","NurbsSurface"],pt.__interfaces__=[wn],pt.byKnotsControlPointsWeights=function(t,n,r,s,o,h){return new pt(new Ot(t,n,r,s,S.homogenize2d(o,h)))},pt.byCorners=function(t,n,r,s){return new pt(ht.fourPointSurface(t,n,r,s))},pt.byLoftingCurves=function(t,n){return new pt(ht.loftedSurface(function(r){for(var s,o=[],h=0;h<t.length;){var c=t[h];++h,o.push(c.asNurbs())}return s=o,s}(),n))},pt.__super__=Dt,pt.prototype=k(Dt.prototype,{degreeU:function(){return this._data.degreeU},degreeV:function(){return this._data.degreeV},knotsU:function(){return this._data.knotsU.slice(0)},knotsV:function(){return this._data.knotsV.slice(0)},controlPoints:function(){return S.dehomogenize2d(this._data.controlPoints)},weights:function(){return S.weight2d(this._data.controlPoints)},asNurbs:function(){return new Ot(this.degreeU(),this.degreeV(),this.knotsU(),this.knotsV(),S.homogenize2d(this.controlPoints(),this.weights()))},clone:function(){return new pt(this.asNurbs())},domainU:function(){return new re(G.first(this._data.knotsU),G.last(this._data.knotsU))},domainV:function(){return new re(G.first(this._data.knotsV),G.last(this._data.knotsV))},point:function(t,n){return S.rationalSurfacePoint(this._data,t,n)},pointAsync:function(t,n){return dt.dispatchMethod(S,"rationalSurfacePoint",[this._data,t,n])},normal:function(t,n){return S.rationalSurfaceNormal(this._data,t,n)},normalAsync:function(t,n){return dt.dispatchMethod(S,"rationalSurfaceNormal",[this._data,t,n])},derivatives:function(t,n,r){return r==null&&(r=1),S.rationalSurfaceDerivatives(this._data,t,n,r)},derivativesAsync:function(t,n,r){return r==null&&(r=1),dt.dispatchMethod(S,"rationalSurfaceDerivatives",[this._data,t,n,r])},closestParam:function(t){return _t.rationalSurfaceClosestParam(this._data,t)},closestParamAsync:function(t){return dt.dispatchMethod(_t,"rationalSurfaceClosestParam",[this._data,t])},closestPoint:function(t){return _t.rationalSurfaceClosestPoint(this._data,t)},closestPointAsync:function(t){return dt.dispatchMethod(_t,"rationalSurfaceClosestPoint",[this._data,t])},split:function(t,n){return n==null&&(n=!1),Yt.surfaceSplit(this._data,t,n).map(function(r){return new pt(r)})},splitAsync:function(t,n){return n==null&&(n=!1),dt.dispatchMethod(Yt,"surfaceSplit",[this._data,t,n]).then(function(r){return r.map(function(s){return new pt(s)})})},reverse:function(t){return t==null&&(t=!1),new pt(vt.surfaceReverse(this._data,t))},reverseAsync:function(t){return t==null&&(t=!1),dt.dispatchMethod(vt,"surfaceReverse",[this._data,t]).then(function(n){return new pt(n)})},isocurve:function(t,n){return n==null&&(n=!1),new xt(ht.surfaceIsocurve(this._data,t,n))},isocurveAsync:function(t,n){return n==null&&(n=!1),dt.dispatchMethod(ht,"surfaceIsocurve",[this._data,t,n]).then(function(r){return new xt(r)})},boundaries:function(t){return ht.surfaceBoundaryCurves(this._data).map(function(n){return new xt(n)})},boundariesAsync:function(t){return dt.dispatchMethod(ht,"surfaceBoundaryCurves",[this._data]).then(function(n){return n.map(function(r){return new xt(r)})})},tessellate:function(t){return At.rationalSurfaceAdaptive(this._data,t)},tessellateAsync:function(t){return dt.dispatchMethod(At,"rationalSurfaceAdaptive",[this._data,t])},transform:function(t){return new pt(vt.rationalSurfaceTransform(this._data,t))},transformAsync:function(t){return dt.dispatchMethod(vt,"rationalSurfaceTransform",[this._data,t]).then(function(n){return new pt(n)})},__class__:pt});var Zn=f.geom.ConicalSurface=function(t,n,r,s,o){pt.call(this,ht.conicalSurface(t,n,r,s,o)),this._axis=t,this._xaxis=n,this._base=r,this._height=s,this._radius=o};p["verb.geom.ConicalSurface"]=Zn,Zn.__name__=["verb","geom","ConicalSurface"],Zn.__super__=pt,Zn.prototype=k(pt.prototype,{axis:function(){return this._axis},xaxis:function(){return this._xaxis},base:function(){return this._base},height:function(){return this._height},radius:function(){return this._radius},__class__:Zn});var Yn=f.geom.CylindricalSurface=function(t,n,r,s,o){pt.call(this,ht.cylindricalSurface(t,n,r,s,o)),this._axis=t,this._xaxis=n,this._base=r,this._height=s,this._radius=o};p["verb.geom.CylindricalSurface"]=Yn,Yn.__name__=["verb","geom","CylindricalSurface"],Yn.__super__=pt,Yn.prototype=k(pt.prototype,{axis:function(){return this._axis},xaxis:function(){return this._xaxis},base:function(){return this._base},height:function(){return this._height},radius:function(){return this._radius},__class__:Yn});var We=f.geom.EllipseArc=function(t,n,r,s,o){xt.call(this,ht.ellipseArc(t,n,r,s,o)),this._center=t,this._xaxis=n,this._yaxis=r,this._minAngle=s,this._maxAngle=o};p["verb.geom.EllipseArc"]=We,We.__name__=["verb","geom","EllipseArc"],We.__super__=xt,We.prototype=k(xt.prototype,{center:function(){return this._center},xaxis:function(){return this._xaxis},yaxis:function(){return this._yaxis},minAngle:function(){return this._minAngle},maxAngle:function(){return this._maxAngle},__class__:We});var Hn=f.geom.Ellipse=function(t,n,r){We.call(this,t,n,r,0,Math.PI*2)};p["verb.geom.Ellipse"]=Hn,Hn.__name__=["verb","geom","Ellipse"],Hn.__super__=We,Hn.prototype=k(We.prototype,{__class__:Hn});var Qn=f.geom.ExtrudedSurface=function(t,n){pt.call(this,ht.extrudedSurface(l.normalized(n),l.norm(n),t.asNurbs())),this._profile=t,this._direction=n};p["verb.geom.ExtrudedSurface"]=Qn,Qn.__name__=["verb","geom","ExtrudedSurface"],Qn.__super__=pt,Qn.prototype=k(pt.prototype,{profile:function(){return this._profile},direction:function(){return this._direction},__class__:Qn});var Ze=f.geom.Intersect=function(){};p["verb.geom.Intersect"]=Ze,Ze.__name__=["verb","geom","Intersect"],Ze.curves=function(t,n,r){return r==null&&(r=.001),it.curves(t.asNurbs(),n.asNurbs(),r)},Ze.curvesAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"curves",[t.asNurbs(),n.asNurbs(),r])},Ze.curveAndSurface=function(t,n,r){return r==null&&(r=.001),it.curveAndSurface(t.asNurbs(),n.asNurbs(),r)},Ze.curveAndSurfaceAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"curveAndSurface",[t.asNurbs(),n.asNurbs(),r])},Ze.surfaces=function(t,n,r){return r==null&&(r=.001),it.surfaces(t.asNurbs(),n.asNurbs(),r).map(function(s){return new xt(s)})},Ze.surfacesAsync=function(t,n,r){return r==null&&(r=.001),dt.dispatchMethod(it,"surfaces",[t.asNurbs(),n.asNurbs(),r]).then(function(s){return s.map(function(o){return new xt(o)})})};var Jn=f.geom.Line=function(t,n){xt.call(this,ht.polyline([t,n])),this._start=t,this._end=n};p["verb.geom.Line"]=Jn,Jn.__name__=["verb","geom","Line"],Jn.__super__=xt,Jn.prototype=k(xt.prototype,{start:function(){return this._start},end:function(){return this._end},__class__:Jn});var $n=f.geom.RevolvedSurface=function(t,n,r,s){pt.call(this,ht.revolvedSurface(t.asNurbs(),n,r,s)),this._profile=t,this._center=n,this._axis=r,this._angle=s};p["verb.geom.RevolvedSurface"]=$n,$n.__name__=["verb","geom","RevolvedSurface"],$n.__super__=pt,$n.prototype=k(pt.prototype,{profile:function(){return this._profile},center:function(){return this._center},axis:function(){return this._center},angle:function(){return this._angle},__class__:$n});var tr=f.geom.SphericalSurface=function(t,n){pt.call(this,ht.sphericalSurface(t,[0,0,1],[1,0,0],n)),this._center=t,this._radius=n};p["verb.geom.SphericalSurface"]=tr,tr.__name__=["verb","geom","SphericalSurface"],tr.__super__=pt,tr.prototype=k(pt.prototype,{center:function(){return this._center},radius:function(){return this._radius},__class__:tr});var er=f.geom.SweptSurface=function(t,n){pt.call(this,ht.rationalTranslationalSurface(t.asNurbs(),n.asNurbs())),this._profile=t,this._rail=n};p["verb.geom.SweptSurface"]=er,er.__name__=["verb","geom","SweptSurface"],er.__super__=pt,er.prototype=k(pt.prototype,{profile:function(){return this._profile},rail:function(){return this._rail},__class__:er});function be(t){return t instanceof Array?function(){return U.iter(t)}:typeof t.iterator=="function"?ve(t,t.iterator):t.iterator}var kr,ji=0;function ve(t,n){if(n==null)return null;n.__id__==null&&(n.__id__=ji++);var r;return t.hx__closures__==null?t.hx__closures__={}:r=t.hx__closures__[n.__id__],r==null&&(r=function(){return r.method.apply(r.scope,arguments)},r.scope=t,r.method=n,t.hx__closures__[n.__id__]=r),r}p.Math=Math,String.prototype.__class__=p.String=String,String.__name__=["String"],p.Array=Array,Array.__name__=["Array"],Date.prototype.__class__=p.Date=Date,Date.__name__=["Date"];var Xi=p.Int={__name__:["Int"]},Wi=p.Dynamic={__name__:["Dynamic"]},gi=p.Float=Number;gi.__name__=["Float"];var pi=p.Bool=Boolean;pi.__ename__=["Bool"];var yi=p.Class={__name__:["Class"]},wi={};Array.prototype.map==null&&(Array.prototype.map=function(t){for(var n=[],r=0,s=this.length;r<s;){var o=r++;n[o]=t(this[o])}return n}),Array.prototype.filter==null&&(Array.prototype.filter=function(t){for(var n=[],r=0,s=this.length;r<s;){var o=r++,h=this[o];t(h)&&n.push(h)}return n});var Ir={},or=A.ArrayBuffer||Zt;or.prototype.slice==null&&(or.prototype.slice=Zt.sliceImpl),A.DataView;var Nr=A.Uint8Array||Ce._new;(function(t,n){if(t.setImmediate)return;var r=1,s={},o=!1,h=t.document,c;function v(B){return s[r]=d.apply(n,B),r++}function d(B){var T=[].slice.call(arguments,1);return function(){typeof B=="function"?B.apply(n,T):new Function(""+B)()}}function m(B){if(o)setTimeout(d(m,B),0);else{var T=s[B];if(T){o=!0;try{T()}finally{b(B),o=!1}}}}function b(B){delete s[B]}function w(){c=function(){var B=v(arguments);return process.nextTick(d(m,B)),B}}function M(){if(t.postMessage&&!t.importScripts){var B=!0,T=t.onmessage;return t.onmessage=function(){B=!1},t.postMessage("","*"),t.onmessage=T,B}}function P(){var B="setImmediate$"+Math.random()+"$",T=function(R){R.source===t&&typeof R.data=="string"&&R.data.indexOf(B)===0&&m(+R.data.slice(B.length))};t.addEventListener?t.addEventListener("message",T,!1):t.attachEvent("onmessage",T),c=function(){var R=v(arguments);return t.postMessage(B+R,"*"),R}}function z(){var B=new MessageChannel;B.port1.onmessage=function(T){var R=T.data;m(R)},c=function(){var T=v(arguments);return B.port2.postMessage(T),T}}function I(){var B=h.documentElement;c=function(){var T=v(arguments),R=h.createElement("script");return R.onreadystatechange=function(){m(T),R.onreadystatechange=null,B.removeChild(R),R=null},B.appendChild(R),T}}function C(){c=function(){var B=v(arguments);return setTimeout(d(m,B),0),B}}var L=Object.getPrototypeOf&&Object.getPrototypeOf(t);L=L&&L.setTimeout?L:t,{}.toString.call(t.process)==="[object process]"?w():M()?P():t.MessageChannel?z():h&&"onreadystatechange"in h.createElement("script")?I():C(),L.setImmediate=c,L.clearImmediate=b})(new Function("return this")()),Xt.USE_CACHE=!1,Xt.USE_ENUM_INDEX=!1,Xt.BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:",Vt.DEFAULT_RESOLVER=ct,Vt.BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%:",Qt.count=0,Wt.i64tmp=function(t){var n,r=new Rt(0,0);return n=r,n}(),bt.__toStr={}.toString,Ce.BYTES_PER_ELEMENT=1,ft.queue=new H,zt.memo=new jt,tt.TOLERANCE=1e-6,tt.EPSILON=1e-10,tt.VERSION="2.0.0",_t.Tvalues=[[],[],[-.5773502691896257,.5773502691896257],[0,-.7745966692414834,.7745966692414834],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],_t.Cvalues=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],dt.THREADS=1,dt._init=!1,je.basePath="",tn.uuid=0,sr.main()}(typeof console<"u"?console:{log:function(){}},i,typeof y<"u"?y:typeof a<"u"?a:typeof self<"u"?self:this),i})})(fi);var Ki=fi.exports;const ln=Gi(Ki);class zr{constructor(){this.c0=0,this.c1=0,this.c2=0,this.c3=0}init(e,i,a,u){this.c0=e,this.c1=a,this.c2=-3*e+3*i-2*a-u,this.c3=2*e-2*i+a+u}initCatmullRom(e,i,a,u,_){this.init(i,a,_*(a-e),_*(u-i))}initNonuniformCatmullRom(e,i,a,u,_,y,g){let x=(i-e)/_-(a-e)/(_+y)+(a-i)/y,f=(a-i)/y-(u-i)/(y+g)+(u-a)/g;x*=y,f*=y,this.init(i,a,x,f)}calc(e){const i=e*e,a=i*e;return this.c0+this.c1*e+this.c2*i+this.c3*a}}class mi extends Cn{constructor(e=[],i=!1,a="centripetal",u=.5){super(),this.isCatmullRomCurve3d=!0,this.type="CatmullRomCurve3d",this._tmp=new Q,this._px=new zr,this._py=new zr,this._pz=new zr,this._points=e.map(_=>new St(_)),this._closed=i,this._curveType=a,this._tension=u}get points(){return this._points}get closed(){return this._closed}get curveType(){return this._curveType}get tension(){return this._tension}get startPoint(){return this._points.length>0?this._points[0]:new St}get endPoint(){return this._points.length>0?this._points[this._points.length-1]:new St}get length(){if(this._points.length<2)return 0;let e=0;for(let i=1;i<this._points.length;i++)e+=this._points[i-1].distanceTo(this._points[i]);return this._closed&&this._points.length>2&&(e+=this._points[this._points.length-1].distanceTo(this._points[0])),e}getPoint(e,i=new St){const a=i,u=this._points,_=u.length;if(_===0)return a.set(0,0,0);if(_===1)return a.copy(u[0]);const y=(_-(this._closed?0:1))*e;let g=Math.floor(y),x=y-g;this._closed?g+=g>0?0:(Math.floor(Math.abs(g)/_)+1)*_:x===0&&g===_-1&&(g=_-2,x=1);let f,A;this._closed||g>0?f=u[(g-1)%_]:(this._tmp.subVectors(u[0],u[1]).add(u[0]),f=new St(this._tmp.x,this._tmp.y,this._tmp.z));const p=u[g%_],N=u[(g+1)%_];if(this._closed||g+2<_?A=u[(g+2)%_]:(this._tmp.subVectors(u[_-1],u[_-2]).add(u[_-1]),A=new St(this._tmp.x,this._tmp.y,this._tmp.z)),this._curveType==="centripetal"||this._curveType==="chordal"){const k=this._curveType==="chordal"?.5:.25;let U=Math.pow(f.distanceToSquared(p),k),K=Math.pow(p.distanceToSquared(N),k),H=Math.pow(N.distanceToSquared(A),k);K<1e-4&&(K=1),U<1e-4&&(U=K),H<1e-4&&(H=K),this._px.initNonuniformCatmullRom(f.x,p.x,N.x,A.x,U,K,H),this._py.initNonuniformCatmullRom(f.y,p.y,N.y,A.y,U,K,H),this._pz.initNonuniformCatmullRom(f.z,p.z,N.z,A.z,U,K,H)}else this._curveType==="catmullrom"&&(this._px.initCatmullRom(f.x,p.x,N.x,A.x,this._tension),this._py.initCatmullRom(f.y,p.y,N.y,A.y,this._tension),this._pz.initCatmullRom(f.z,p.z,N.z,A.z,this._tension));return a.set(this._px.calc(x),this._py.calc(x),this._pz.calc(x)),a}getPoints(e){const i=[];for(let a=0;a<=e;a++)i.push(this.getPoint(a/e));return i}setPoints(e){this._points=e.map(i=>new St(i)),this._boundingBoxNeedsUpdate=!0}setClosed(e){this._closed!==e&&(this._closed=e,this._boundingBoxNeedsUpdate=!0)}setCurveType(e){this._curveType=e}setTension(e){this._tension=e}transform(e){return this._points=this._points.map(i=>{const a=new St;return a.copy(i),a.applyMatrix3d(e),a}),this._boundingBoxNeedsUpdate=!0,this}calculateBoundingBox(){if(this._points.length===0)return new ze;const e=new ze;return this._points.forEach(i=>{e.expandByPoint(i)}),e}}class Je{constructor(e,i,a,u){this._degree=e,this._knots=[...i],this._controlPoints=a.map(_=>({x:_.x,y:_.y,z:_.z})),this._weights=u?[...u]:new Array(a.length).fill(1)}degree(){return this._degree}knots(){return[...this._knots]}controlPoints(){return this._controlPoints.map(e=>({x:e.x,y:e.y,z:e.z}))}weights(){return[...this._weights]}point(e){const i=this._controlPoints.map(a=>[a.x,a.y,a.z]);return Pn(e,this._degree,this._knots,i,this._weights)}length(){const e=this._controlPoints.map(i=>[i.x,i.y,i.z]);return oi(this._degree,this._knots,e,this._weights)}static byKnotsControlPointsWeights(e,i,a,u){return new Je(e,i,a,u)}static byPoints(e,i,a="Uniform"){let u;switch(a){case"Chord":u=si(i,e);break;case"SqrtChord":u=ai(i,e);break;case"Uniform":default:u=ii(i,e.length);break}const _=e.map(g=>({x:g[0],y:g[1],z:g[2]})),y=new Array(_.length).fill(1);return new Je(i,u,_,y)}getParameterRange(){const e=this._knots[this._degree],i=this._knots[this._knots.length-this._degree-1];return{start:e,end:i}}getPoints(e){const i=[],{start:a,end:u}=this.getParameterRange();for(let _=0;_<=e;_++){const y=a+(u-a)*(_/e);i.push(this.point(y))}return i}isClosed(e=1e-6){const{start:i,end:a}=this.getParameterRange(),u=this.point(i),_=this.point(a),y=u[0]-_[0],g=u[1]-_[1],x=u[2]-_[2];return Math.sqrt(y*y+g*g+x*x)<e}static createFitPointsForClosedCurve(e){if(e.length<4)throw new Error("At least 4 points are required for a closed NURBS curve");const i=new mi(e,!0,"centripetal"),a=Math.max(50,e.length*2);return i.getPoints(a)}static createClosedCurve(e,i,a="Chord"){const _=this.createFitPointsForClosedCurve(e).map(y=>[y.x,y.y,y.z]);return Je.byPoints(_,i,a)}}class Sr extends Cn{constructor(e,i,a,u,_){super();const y=arguments.length;if(y<2||y>5)throw te.AcCmErrors.ILLEGAL_PARAMETERS;if(this._degree=3,this._closed=!1,Array.isArray(i)){this._controlPoints=e;let g,x=3,f=!1;if(y>=3&&(Array.isArray(a)?(g=a,y>=4&&(x=u||3),y>=5&&(f=_)):a!==void 0&&(x=a||3,y>=4&&(f=u))),a===void 0&&y>=4&&(x=u||3,y>=5&&(f=_)),this._degree=x,this._closed=f,this._controlPoints.length<this._degree+1)throw te.AcCmErrors.ILLEGAL_PARAMETERS;const A=this.toVerbPoints(this._controlPoints);this._nurbsCurve=ln.geom.NurbsCurve.byKnotsControlPointsWeights(this._degree,i,A,g)}else{if(this._fitPoints=e,this._knotParameterization=i,y>=3&&(this._degree=a||3),y>=4&&(this._closed=u),this._fitPoints.length<this._degree+1)throw te.AcCmErrors.ILLEGAL_PARAMETERS;const g=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(g,this._degree),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}}buildCurve(){if(this._fitPoints&&this._knotParameterization){if(this._closed){const e=Je.createFitPointsForClosedCurve(this._fitPoints),i=this.toNurbsPoints(e);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(i,this._degree)}else{const e=this.toNurbsPoints(this._fitPoints);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(e,this._degree)}this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}else if(this._controlPoints)if(this._closed){const e=Je.createFitPointsForClosedCurve(this._controlPoints),i=this.toNurbsPoints(e);this._nurbsCurve=ln.geom.NurbsCurve.byPoints(i,this._degree),this._controlPoints=this.toGePoints(this._nurbsCurve.controlPoints())}else{const e=this._nurbsCurve.knots(),i=this._nurbsCurve.weights(),a=this.toVerbPoints(this._controlPoints);this._nurbsCurve=ln.geom.NurbsCurve.byKnotsControlPointsWeights(this._degree,e,a,i)}}setClosed(e){this._closed!==e&&(this._closed=e,this._boundingBoxNeedsUpdate=!0,this.buildCurve())}get degree(){return this._degree}get knotParameterization(){return this._knotParameterization}get startPoint(){const e=this._nurbsCurve.knots(),i=this._nurbsCurve.degree(),a=e[i],u=this._nurbsCurve.point(a);return new St(u[0],u[1],u[2])}get endPoint(){const e=this._nurbsCurve.knots(),i=this._nurbsCurve.degree(),a=e[e.length-i-1],u=this._nurbsCurve.point(a);return new St(u[0],u[1],u[2])}get length(){return this._nurbsCurve.length()}getFitPointAt(e){if(!this._fitPoints)throw new Error("No fit points in this spline");const i=this._fitPoints.length,a=e<0||e>=i?i-1:e,u=this._fitPoints[a];return{x:u.x,y:u.y,z:u.z||0}}getControlPointAt(e){const i=this._controlPoints.length,a=e<0||e>=i?i-1:e;return this._controlPoints[a]}getPoints(e=100){const i=this._nurbsCurve,a=[],u=i.knots(),_=this._nurbsCurve.degree(),y=u[_],g=u[u.length-_-1],x=(g-y)/(e-1);for(let f=0;f<e;f++){const A=f===e-1?g:y+f*x,p=i.point(A);a.push(new St(p[0],p[1],p[2]))}return a}getCurvePoints(e,i){const a=[],u=e.knots(),_=u[3],g=(u[u.length-4]-_)/(i-1);for(let x=0;x<i;x++){const f=_+x*g;a.push(e.point(f))}return a}calculateBoundingBox(){const e=this.getPoints(100);return new ze().setFromPoints(e)}get closed(){return this._closed}set closed(e){this.setClosed(e)}transform(e){return this._boundingBoxNeedsUpdate=!0,this}toNurbsPoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]=[a.x,a.y,a.z||0]}),i}toVerbPoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]=[a.x,a.y,a.z||0]}),i}toGePoints(e){const i=new Array(e.length);return e.forEach((a,u)=>{i[u]={x:a[0],y:a[1],z:a[2]}}),i}static createClosedSpline(e,i="Uniform",a=3){if(e.length<a+1)throw new Error(`At least ${a+1} points are required for a degree ${a} closed spline`);return new Sr(e,i,a,!0)}}Y.AcGeArea2d=Di,Y.AcGeBox2d=de,Y.AcGeBox3d=ze,Y.AcGeCatmullRomCurve3d=mi,Y.AcGeCircArc2d=Sn,Y.AcGeCircArc3d=In,Y.AcGeCurve2d=hn,Y.AcGeEllipseArc2d=Mr,Y.AcGeEllipseArc3d=Pr,Y.AcGeEuler=wr,Y.AcGeGeometryUtil=ri,Y.AcGeLine2d=Ar,Y.AcGeLine3d=kn,Y.AcGeLoop2d=qi,Y.AcGeMathUtil=Ut,Y.AcGeMatrix2d=sn,Y.AcGeMatrix3d=an,Y.AcGeNurbsCurve=Je,Y.AcGePlane=zn,Y.AcGePoint2d=Lt,Y.AcGePoint3d=St,Y.AcGePolyline2d=Oi,Y.AcGeQuaternion=An,Y.AcGeShape2d=br,Y.AcGeSpline3d=Sr,Y.AcGeTol=fr,Y.AcGeVector2d=Bt,Y.AcGeVector3d=Q,Y.DEFAULT_TOL=mr,Y.DEG2RAD=hr,Y.FLOAT_TOL=He,Y.ORIGIN_POINT_2D=Bi,Y.ORIGIN_POINT_3D=dr,Y.RAD2DEG=lr,Y.TAU=Kt,Y.basisFunction=nr,Y.calculateCurveLength=oi,Y.ceilPowerOfTwo=Qr,Y.clamp=Be,Y.damp=Fr,Y.degToRad=Zr,Y.euclideanModulo=ur,Y.evaluateNurbsPoint=Pn,Y.floorPowerOfTwo=Jr,Y.generateChordKnots=si,Y.generateSqrtChordKnots=ai,Y.generateUUID=Rr,Y.generateUniformKnots=ii,Y.intPartLength=vr,Y.interpolateControlPoints=Li,Y.inverseLerp=Dr,Y.isBetween=$r,Y.isBetweenAngle=ti,Y.isPointInPolygon=gr,Y.isPolygonIntersect=ni,Y.isPowerOfTwo=Hr,Y.lerp=cr,Y.mapLinear=Vr,Y.normalizeAngle=Mn,Y.pingpong=Or,Y.radToDeg=Yr,Y.randFloat=jr,Y.randFloatSpread=Xr,Y.randInt=Kr,Y.relativeEps=ei,Y.seededRandom=Wr,Y.smootherstep=Gr,Y.smoothstep=qr,Object.defineProperty(Y,Symbol.toStringTag,{value:"Module"})});
|