brepjs-cad 0.78.0 → 0.80.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.
@@ -0,0 +1,60 @@
1
+ var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function t(e,t){return e[t]}function n(e,t=0){return[e[t],e[t+1],e[t+2]]}var r=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function i(e,t){throw new r(e,t)}var a={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`extract-time`},o={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`none`},s=Symbol.for(`brepjs.kernel.unsupportedOperation`),c=class extends Error{constructor(e){super(e),this.name=`UnsupportedKernelOperationError`,Object.defineProperty(this,s,{value:!0})}};function l(e){return e instanceof Error&&Reflect.get(e,s)===!0}function u(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function d(e,t){return{x:e.y*t.z-e.z*t.y,y:e.z*t.x-e.x*t.z,z:e.x*t.y-e.y*t.x}}function f(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function p(e){return Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z)}function m(e,t){let n=e.x-t.x,r=e.y-t.y,i=e.z-t.z;return n*n+r*r+i*i}function h(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function g(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function _(e,t,n,r){let i=d(u(h(e,n),h(e,t)),u(h(e,r),h(e,t))),a=p(i),o=a>1e-14?{x:i.x/a,y:i.y/a,z:i.z/a}:i;return{a:t,b:n,c:r,normal:o,offset:f(o,h(e,t)),alive:!0,outsidePoints:[]}}function v(e,t){return f(e.normal,t)-e.offset}function y(e,t){let n=t*t,r=[];for(let t of e){let e=!1;for(let i of r)if(m(t,i)<n){e=!0;break}e||r.push(t)}return r}function b(e){let t=e.length;if(t<4)return null;let n=0,r=1,i=m(h(e,0),h(e,1));for(let a=0;a<t;a++)for(let o=a+1;o<t;o++){let t=m(h(e,a),h(e,o));t>i&&(i=t,n=a,r=o)}if(i<1e-20)return null;let a=u(h(e,r),h(e,n)),o=-1,s=-1;for(let i=0;i<t;i++){if(i===n||i===r)continue;let t=d(a,u(h(e,i),h(e,n))),c=f(t,t);c>s&&(s=c,o=i)}if(o===-1||s<1e-20)return null;let c=d(u(h(e,r),h(e,n)),u(h(e,o),h(e,n))),l=p(c);if(l<1e-14)return null;let g={x:c.x/l,y:c.y/l,z:c.z/l},_=f(g,h(e,n)),v=-1,y=-1;for(let i=0;i<t;i++){if(i===n||i===r||i===o)continue;let t=Math.abs(f(g,h(e,i))-_);t>y&&(y=t,v=i)}return v===-1||y<1e-14?null:f(g,h(e,v))-_>0?[n,o,r,v]:[n,r,o,v]}function x(e,t){let n=y(e,t);if(n.length<4)throw Error(n.length===0?`No points provided for convex hull`:`Fewer than 4 non-coincident points; cannot form a 3D convex hull`);let r=b(n);if(r===null)throw Error(`All points are coplanar; cannot form a 3D convex hull`);let[i,a,o,s]=r,c={x:(h(n,i).x+h(n,a).x+h(n,o).x+h(n,s).x)/4,y:(h(n,i).y+h(n,a).y+h(n,o).y+h(n,s).y)/4,z:(h(n,i).z+h(n,a).z+h(n,o).z+h(n,s).z)/4};function l(e,t,r){let i=_(n,e,t,r),a={x:(h(n,e).x+h(n,t).x+h(n,r).x)/3,y:(h(n,e).y+h(n,t).y+h(n,r).y)/3,z:(h(n,e).z+h(n,t).z+h(n,r).z)/3},o=u(c,a);return f(i.normal,o)>0?_(n,e,r,t):i}let d=[l(i,a,o),l(i,o,s),l(i,s,a),l(a,s,o)],p=new Set([i,a,o,s]),m=1e-10;for(let e=0;e<n.length;e++)if(!p.has(e)){for(let t of d)if(v(t,h(n,e))>m){t.outsidePoints.push(e);break}}for(let e=0;e<n.length*4;e++){let e=null;for(let t of d)if(t.alive&&t.outsidePoints.length>0){e=t;break}if(e===null)break;let t=g(e.outsidePoints,0),r=v(e,h(n,t));for(let i=1;i<e.outsidePoints.length;i++){let a=g(e.outsidePoints,i),o=v(e,h(n,a));o>r&&(r=o,t=a)}let i=[];for(let e of d)e.alive&&v(e,h(n,t))>m&&i.push(e);let a=new Map;for(let e of i){let t=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let[e,n]of t){let t=e<n?`${e}-${n}`:`${n}-${e}`,r=a.get(t);r?r.count++:a.set(t,{a:e,b:n,count:1})}}let o=[];for(let e of a.values())e.count===1&&o.push({a:e.a,b:e.b});let s=[];for(let e of i){for(let n of e.outsidePoints)n!==t&&s.push(n);e.alive=!1,e.outsidePoints=[]}let c=[];for(let e of o){let r=_(n,e.a,e.b,t);c.push(r),d.push(r)}for(let e of s)for(let t of c)if(v(t,h(n,e))>m){t.outsidePoints.push(e);break}}let x=[];for(let e of d)e.alive&&x.push([e.a,e.b,e.c]);return{faces:x,points:n}}function S(e,t){switch(e.__bk2d){case`line`:return[e.ox+e.dx*t,e.oy+e.dy*t];case`circle`:{let n=e.sense?t:-t;return[e.cx+e.radius*Math.cos(n),e.cy+e.radius*Math.sin(n)]}case`ellipse`:{let n=e.sense?t:-t,r=Math.cos(e.xDirAngle),i=Math.sin(e.xDirAngle),a=e.majorRadius*Math.cos(n),o=e.minorRadius*Math.sin(n);return[e.cx+a*r-o*i,e.cy+a*i+o*r]}case`bezier`:return Te(e.poles,t);case`bspline`:return Ee(e,t);case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart);return S(e.basis,n)}}}function C(e,t){switch(e.__bk2d){case`line`:return[e.dx,e.dy];case`circle`:{let n=e.sense?t:-t,r=e.sense?1:-1;return[-e.radius*Math.sin(n)*r,e.radius*Math.cos(n)*r]}case`ellipse`:{let n=e.sense?t:-t,r=e.sense?1:-1,i=Math.cos(e.xDirAngle),a=Math.sin(e.xDirAngle),o=-e.majorRadius*Math.sin(n)*r,s=e.minorRadius*Math.cos(n)*r;return[o*i-s*a,o*a+s*i]}case`bezier`:{let n=1e-8,r=Te(e.poles,Math.max(0,t-n)),i=Te(e.poles,Math.min(1,t+n)),a=Math.min(1,t+n)-Math.max(0,t-n);return[(i[0]-r[0])/a,(i[1]-r[1])/a]}case`bspline`:{let n=1e-8,r=e.knots[0],i=e.knots[e.knots.length-1],a=Ee(e,Math.max(r,t-n)),o=Ee(e,Math.min(i,t+n)),s=Math.min(i,t+n)-Math.max(r,t-n);return[(o[0]-a[0])/s,(o[1]-a[1])/s]}case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart),r=C(e.basis,n),i=e.tEnd-e.tStart;return[r[0]*i,r[1]*i]}}}function w(e){switch(e.__bk2d){case`line`:return{first:0,last:e.len};case`circle`:case`ellipse`:return{first:0,last:2*Math.PI};case`bezier`:return{first:0,last:1};case`bspline`:return{first:e.knots[0],last:e.knots[e.knots.length-1]};case`trimmed`:return{first:0,last:1}}}function ee(e){switch(e.__bk2d){case`line`:return`LINE`;case`circle`:return`CIRCLE`;case`ellipse`:return`ELLIPSE`;case`bezier`:return`BEZIER_CURVE`;case`bspline`:return`BSPLINE_CURVE`;case`trimmed`:return`TRIMMED_`+ee(e.basis)}}function te(e,t,n,r){let i=n-e,a=r-t,o=Math.sqrt(i*i+a*a);return{__bk2d:`line`,ox:e,oy:t,dx:o>0?i/o:1,dy:o>0?a/o:0,len:o}}function ne(e,t,n,r=!0){return{__bk2d:`circle`,cx:e,cy:t,radius:n,sense:r}}function re(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return te(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function ie(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return te(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,x;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),x=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),x=g+e/2}return re(e,t,p+h*Math.cos(x),m+h*Math.sin(x),i,a)}function ae(e,t,n,r,i=1,a=0,o=!0){return{__bk2d:`ellipse`,cx:e,cy:t,majorRadius:n,minorRadius:r,xDirAngle:Math.atan2(a,i),sense:o}}function oe(e){return{__bk2d:`bezier`,poles:[...e]}}function se(e,t,n){switch(e.__bk2d){case`line`:return{...e,ox:e.ox+t,oy:e.oy+n};case`circle`:return{...e,cx:e.cx+t,cy:e.cy+n};case`ellipse`:return{...e,cx:e.cx+t,cy:e.cy+n};case`bezier`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`bspline`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`trimmed`:return{...e,basis:se(e.basis,t,n)}}}function ce(e,t,n,r){let i=Math.cos(t),a=Math.sin(t),o=(e,t)=>{let o=e-n,s=t-r;return[n+o*i-s*a,r+o*a+s*i]};switch(e.__bk2d){case`line`:{let[t,n]=o(e.ox,e.oy),r=e.dx*i-e.dy*a,s=e.dx*a+e.dy*i;return{...e,ox:t,oy:n,dx:r,dy:s}}case`circle`:{let[t,n]=o(e.cx,e.cy);return{...e,cx:t,cy:n}}case`ellipse`:{let[n,r]=o(e.cx,e.cy);return{...e,cx:n,cy:r,xDirAngle:e.xDirAngle+t}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`trimmed`:return{...e,basis:ce(e.basis,t,n,r)}}}function le(e,t,n,r){let i=(e,i)=>[n+(e-n)*t,r+(i-r)*t];switch(e.__bk2d){case`line`:{let[t,n]=i(e.ox,e.oy),[r,a]=i(e.ox+e.dx*e.len,e.oy+e.dy*e.len),o=r-t,s=a-n,c=Math.sqrt(o*o+s*s);return{...e,ox:t,oy:n,dx:c>0?o/c:e.dx,dy:c>0?s/c:e.dy,len:c}}case`circle`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,radius:e.radius*Math.abs(t)}}case`ellipse`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,majorRadius:e.majorRadius*Math.abs(t),minorRadius:e.minorRadius*Math.abs(t)}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`trimmed`:return{...e,basis:le(e.basis,t,n,r)}}}function ue(e,t,n){return le(e,-1,t,n)}function de(e,t,n,r,i){let a=Math.sqrt(r*r+i*i),o=r/a,s=i/a,c=(e,r)=>{let i=e-t,a=r-n,c=i*o+a*s;return[t+2*c*o-i,n+2*c*s-a]};switch(e.__bk2d){case`line`:{let[t,n]=c(e.ox,e.oy),r=2*(e.dx*o+e.dy*s)*o-e.dx,i=2*(e.dx*o+e.dy*s)*s-e.dy;return{...e,ox:t,oy:n,dx:r,dy:i}}case`circle`:{let[t,n]=c(e.cx,e.cy);return{...e,cx:t,cy:n,sense:!e.sense}}case`ellipse`:{let[t,n]=c(e.cx,e.cy),r=o*o-s*s,i=2*o*s,a=Math.atan2(i*Math.cos(e.xDirAngle)-r*Math.sin(e.xDirAngle),r*Math.cos(e.xDirAngle)+i*Math.sin(e.xDirAngle));return{...e,cx:t,cy:n,xDirAngle:a,sense:!e.sense}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`trimmed`:return{...e,basis:de(e.basis,t,n,r,i)}}}function fe(e,t,n){let r=pe(e),i=pe(t);return r.__bk2d===`line`&&i.__bk2d===`line`?ge(e,r,t,i,n):r.__bk2d===`line`&&i.__bk2d===`circle`?{points:_e(e,r,t,i,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`line`?{points:_e(t,i,e,r,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`circle`?{points:ye(e,r,t,i,n),segments:[]}:be(e,t,n,e===t)}function pe(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function me(e,t,n){let r=w(e);return t>=r.first-n&&t<=r.last+n}function he(e,t,n){let r=w(e);if(!isFinite(r.first)||!isFinite(r.last))return null;let i=(r.last-r.first)/80,a=r.first,o=1/0;for(let s=0;s<=80;s++){let c=r.first+s*i,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}let[s,c]=S(e,r.first),[l,u]=S(e,r.last),[d,f]=S(e,(r.first+r.last)/2),p=Math.max(Math.sqrt((l-s)**2+(u-c)**2),Math.sqrt((d-s)**2+(f-c)**2),1e-6)*.1;return o<p*p?a:null}function ge(e,t,n,r,i){let a=t.dx*r.dy-t.dy*r.dx;if(Math.abs(a)>=1e-14){let o=r.ox-t.ox,s=r.oy-t.oy,c=(o*r.dy-s*r.dx)/a,l=(o*t.dy-s*t.dx)/a;return!me(e,c,i)||!me(n,l,i)?{points:[],segments:[]}:{points:[[t.ox+c*t.dx,t.oy+c*t.dy]],segments:[]}}let o=r.ox-t.ox,s=r.oy-t.oy,c=o*t.dy-s*t.dx;if(Math.abs(c)>i)return{points:[],segments:[]};let l=w(e),u=w(n),d=S(n,u.first),f=S(n,u.last),p=(d[0]-t.ox)*t.dx+(d[1]-t.oy)*t.dy,m=(f[0]-t.ox)*t.dx+(f[1]-t.oy)*t.dy,h=Math.max(l.first,Math.min(p,m)),g=Math.min(l.last,Math.max(p,m));return g-h<i?{points:[],segments:[]}:{points:[],segments:[te(t.ox+h*t.dx,t.oy+h*t.dy,t.ox+g*t.dx,t.oy+g*t.dy)]}}function _e(e,t,n,r,i){let a=t.ox-r.cx,o=t.oy-r.cy,s=t.dx*t.dx+t.dy*t.dy,c=2*(a*t.dx+o*t.dy),l=a*a+o*o-r.radius*r.radius,u=c*c-4*s*l;if(u<-i)return[];let d=[],f=Math.sqrt(Math.max(0,u)),p=(-c-f)/(2*s),m=(-c+f)/(2*s);for(let r of u<i*i?[p]:[p,m]){if(!me(e,r,i))continue;let a=t.ox+r*t.dx,o=t.oy+r*t.dy,s=he(n,a,o);if(s===null)continue;let[c,l]=S(n,s);(c-a)**2+(l-o)**2>i*i*1e6||d.push([a,o])}return d}function ve(e,t,n){let r=w(e),i=w(t),a=Math.abs(r.last-r.first-2*Math.PI)<1e-10,o=Math.abs(i.last-i.first-2*Math.PI)<1e-10;if(a&&o)return[];if(a)return[S(t,i.first),S(t,i.last)];if(o)return[S(e,r.first),S(e,r.last)];let s=[],c=[[t,S(e,r.first)],[t,S(e,r.last)],[e,S(t,i.first)],[e,S(t,i.last)]];for(let[e,t]of c){let r=he(e,t[0],t[1]);if(r!==null){let[i,a]=S(e,r);(i-t[0])**2+(a-t[1])**2<n*n*100&&s.push(t)}}let l=[];for(let e of s)l.some(([t,r])=>(t-e[0])**2+(r-e[1])**2<n*n*100)||l.push(e);return l}function ye(e,t,n,r,i){let a=r.cx-t.cx,o=r.cy-t.cy,s=Math.sqrt(a*a+o*o);if(s>t.radius+r.radius+i||s<Math.abs(t.radius-r.radius)-i)return[];if(s<1e-14)return Math.abs(t.radius-r.radius)>i?[]:ve(e,n,i);let c=(t.radius*t.radius-r.radius*r.radius+s*s)/(2*s),l=t.radius*t.radius-c*c,u=Math.sqrt(Math.max(0,l)),d=t.cx+c*a/s,f=t.cy+c*o/s,p=u<i?[[d,f]]:[[d+u*o/s,f-u*a/s],[d-u*o/s,f+u*a/s]],m=[];for(let[t,r]of p){let a=he(e,t,r),o=he(n,t,r);if(a===null||o===null)continue;let[s,c]=S(e,a),[l,u]=S(n,o),d=(i*10)**2;(s-t)**2+(c-r)**2>d||(l-t)**2+(u-r)**2>d||m.push([t,r])}return m}function be(e,t,n,r=!1){let i=w(e),a=w(t);if(!isFinite(i.first)||!isFinite(i.last)||!isFinite(a.first)||!isFinite(a.last))return{points:[],segments:[]};let o=[],s=[];for(let n=0;n<=100;n++){let r=i.first+(i.last-i.first)*n/100,[c,l]=S(e,r);o.push({t:r,x:c,y:l});let u=a.first+(a.last-a.first)*n/100,[d,f]=S(t,u);s.push({t:u,x:d,y:f})}let c=Math.max(n*100,.5),l=new Float64Array(600);for(let e=0;e<100;e++){let t=s[e],n=s[e+1],r=e*6;l[r]=Math.min(t.x,n.x),l[r+1]=Math.max(t.x,n.x),l[r+2]=Math.min(t.y,n.y),l[r+3]=Math.max(t.y,n.y),l[r+4]=(t.t+n.t)/2}let u=[],d=(i.last-i.first)/5;for(let e=0;e<100;e++){let t=o[e],n=o[e+1],i=Math.min(t.x,n.x)-c,a=Math.max(t.x,n.x)+c,s=Math.min(t.y,n.y)-c,f=Math.max(t.y,n.y)+c,p=(t.t+n.t)/2;for(let e=0;e<100;e++){let t=e*6;if(a<l[t]||l[t+1]<i||f<l[t+2]||l[t+3]<s)continue;let n=l[t+4];r&&Math.abs(p-n)<d||u.push({t1:p,t2:n})}}let f=n*n,p=[];for(let{t1:o,t2:s}of u){let c=o,l=s;for(let n=0;n<20;n++){let[n,r]=S(e,c),[o,s]=S(t,l),u=n-o,d=r-s;if(u*u+d*d<f)break;let p=C(e,c),m=C(t,l),h=p[0]*-m[1]- -m[0]*p[1];if(Math.abs(h)<1e-14)break;let g=(-u*-m[1]- -d*-m[0])/h,_=(p[0]*-d-p[1]*-u)/h;c+=g,l+=_,c=Math.max(i.first,Math.min(i.last,c)),l=Math.max(a.first,Math.min(a.last,l))}let[u,d]=S(e,c),[m,h]=S(t,l);if(!(r&&Math.abs(c-l)<(i.last-i.first)*.05)&&(u-m)**2+(d-h)**2<n*n*1e6){let e=(u+m)/2,t=(d+h)/2,r=!1;for(let[i,a]of p)if((i-e)**2+(a-t)**2<n*n*1e4){r=!0;break}r||p.push([e,t])}}return{points:p,segments:[]}}function xe(e){return JSON.stringify(e)}function Se(e){return JSON.parse(e)}function Ce(){return{__bk2d_bbox:!0,xMin:1/0,yMin:1/0,xMax:-1/0,yMax:-1/0}}function we(e,t,n){let r=t.__bk2d===`trimmed`?t.basis:t;if(r.__bk2d===`line`){let n=w(t);if(!isFinite(n.first)||!isFinite(n.last))return;let[r,i]=S(t,n.first),[a,o]=S(t,n.last);e.xMin=Math.min(e.xMin,r,a),e.yMin=Math.min(e.yMin,i,o),e.xMax=Math.max(e.xMax,r,a),e.yMax=Math.max(e.yMax,i,o);return}if(r.__bk2d===`circle`){let n=w(t);if(!isFinite(n.first)||!isFinite(n.last))return;let{cx:i,cy:a,radius:o,sense:s}=r,[c,l]=S(t,n.first),[u,d]=S(t,n.last),f=Math.min(c,u),p=Math.max(c,u),m=Math.min(l,d),h=Math.max(l,d),g=t.__bk2d===`trimmed`?t.tStart:n.first,_=t.__bk2d===`trimmed`?t.tEnd:n.last;for(let e=0;e<4;e++){let t=e*Math.PI/2,n=s?t:-t;for(let e=0;e<=1;e++){let r=n+e*2*Math.PI;if(r>=g-1e-10&&r<=_+1e-10){let e=i+o*Math.cos(t),n=a+o*Math.sin(t);f=Math.min(f,e),p=Math.max(p,e),m=Math.min(m,n),h=Math.max(h,n);break}}}e.xMin=Math.min(e.xMin,f),e.yMin=Math.min(e.yMin,m),e.xMax=Math.max(e.xMax,p),e.yMax=Math.max(e.yMax,h);return}let i=w(t);if(!isFinite(i.first)||!isFinite(i.last))return;let a=(i.last-i.first)/20;for(let n=0;n<=20;n++){let[r,o]=S(t,i.first+n*a);r<e.xMin&&(e.xMin=r),o<e.yMin&&(e.yMin=o),r>e.xMax&&(e.xMax=r),o>e.yMax&&(e.yMax=o)}}function Te(e,t){let n=e.length,r=e.map(([e,t])=>[e,t]);for(let e=1;e<n;e++)for(let i=0;i<n-e;i++){let e=r[i],n=r[i+1];e[0]=(1-t)*e[0]+t*n[0],e[1]=(1-t)*e[1]+t*n[1]}return r[0]}function Ee(e,t){let n=[];for(let t=0;t<e.knots.length;t++){let r=e.multiplicities[t]??1;for(let i=0;i<r;i++)n.push(e.knots[t])}let r=e.degree,i=e.poles.length,a=n.length,o=Math.max(n[r],Math.min(n[a-r-1],t)),s=r;for(let e=r;e<a-r-1;e++)if(o>=n[e]&&o<n[e+1]){s=e;break}o>=n[a-r-1]&&(s=a-r-2);let c=[];for(let t=0;t<=r;t++){let n=Math.min(s-r+t,i-1),a=e.poles[Math.max(0,n)];c.push([a[0],a[1]])}for(let e=1;e<=r;e++)for(let t=r;t>=e;t--){let i=s-r+t,a=n[i]??0,l=(n[i+r-e+1]??1)-a,u=l>1e-15?(o-a)/l:0,d=c[t],f=c[t-1];d[0]=(1-u)*f[0]+u*d[0],d[1]=(1-u)*f[1]+u*d[1]}return c[r]}var De=.001,Oe=.1,ke={nx:0,ny:0,nz:0,ax:0,ay:0,az:0,bx:0,by:0,bz:0,cx:0,cy:0,cz:0};function Ae(e,t,n){let r=(t[n*3]??0)*3,i=(t[n*3+1]??0)*3,a=(t[n*3+2]??0)*3,o=e[r]??0,s=e[r+1]??0,c=e[r+2]??0,l=e[i]??0,u=e[i+1]??0,d=e[i+2]??0,f=e[a]??0,p=e[a+1]??0,m=e[a+2]??0,h=l-o,g=u-s,_=d-c,v=f-o,y=p-s,b=m-c,x=g*b-_*y,S=_*v-h*b,C=h*y-g*v,w=Math.hypot(x,S,C)||1;return x/=w,S/=w,C/=w,ke.nx=x,ke.ny=S,ke.nz=C,ke.ax=o,ke.ay=s,ke.az=c,ke.bx=l,ke.by=u,ke.bz=d,ke.cx=f,ke.cy=p,ke.cz=m,ke}function je(e,t){let n=Math.floor(t.length/3),r=new ArrayBuffer(84+n*50),i=new DataView(r);i.setUint32(80,n,!0);let a=84;for(let r=0;r<n;r++){let n=Ae(e,t,r);i.setFloat32(a,n.nx,!0),i.setFloat32(a+4,n.ny,!0),i.setFloat32(a+8,n.nz,!0),i.setFloat32(a+12,n.ax,!0),i.setFloat32(a+16,n.ay,!0),i.setFloat32(a+20,n.az,!0),i.setFloat32(a+24,n.bx,!0),i.setFloat32(a+28,n.by,!0),i.setFloat32(a+32,n.bz,!0),i.setFloat32(a+36,n.cx,!0),i.setFloat32(a+40,n.cy,!0),i.setFloat32(a+44,n.cz,!0),i.setUint16(a+48,0,!0),a+=50}return r}function Me(e,t){let n=Math.floor(t.length/3),r=[`solid brepjs`];for(let i=0;i<n;i++){let n=Ae(e,t,i);r.push(`facet normal ${n.nx} ${n.ny} ${n.nz}`),r.push(`outer loop`),r.push(`vertex ${n.ax} ${n.ay} ${n.az}`),r.push(`vertex ${n.bx} ${n.by} ${n.bz}`),r.push(`vertex ${n.cx} ${n.cy} ${n.cz}`),r.push(`endloop`),r.push(`endfacet`)}return r.push(`endsolid brepjs`),r.join(`
2
+ `)+`
3
+ `}var Ne=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Ne,HashCode(e){return t%e},IsNull(){return!1}}}function Pe(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(Pe(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Fe(e){switch(e.toLowerCase()){case`vertex`:return`vertex`;case`edge`:return`edge`;case`wire`:return`wire`;case`face`:return`face`;case`shell`:return`shell`;case`solid`:return`solid`;case`compsolid`:return`compsolid`;case`compound`:return`compound`;default:return`compound`}}function D(e,t){return T(Fe(e.getShapeType(t)),t)}function Ie(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Le(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function Re(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function ze(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Be(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}function Ve(e,t){if(typeof t==`number`)return t;if(Array.isArray(t))return t[0];if(e.length===0)throw Error(`occt-wasm: no edges provided`);let n=t(e[0]);return typeof n==`number`?n:n[0]}function He(e,t,n){let[r,i,a]=n,o=Math.sqrt(r*r+i*i+a*a);if(o<1e-10)return t;let s=r/o,c=i/o,l=a/o;if(Math.abs(l-1)<1e-10)return t;if(Math.abs(l+1)<1e-10)return e.rotate(t,0,0,0,1,0,0,Math.PI);let u=-c,d=s,f=Math.sqrt(u*u+d*d);if(f<1e-10)return t;let p=Math.acos(Math.max(-1,Math.min(1,l)));return e.rotate(t,0,0,0,u/f,d/f,0,p)}function Ue(e,t){return new Proxy(e,{get(e,n,r){let i=Reflect.get(e,n,r);return typeof i==`function`?function(...n){try{return i.apply(e,n)}catch(e){let n=WebAssembly.Exception;if(n&&e instanceof n)try{let[,n]=t.getExceptionMessage(e);throw Error(n,{cause:e})}catch(e){if(e instanceof Error&&!(e instanceof n))throw e}throw e}}:i}})}function We(e,t){let n=function(){return T(`compound`,t.makeNullShape())};return Object.assign(Object.create(e),{TopoDS_Solid:n,TopoDS_Face:n,TopoDS_Shape:n,TopoDS_Wire:n,TopoDS_Edge:n,TopoDS_Vertex:n,TopoDS_Shell:n,TopoDS_Compound:n,gp_Pnt_3:function(e,n,r){return T(`vertex`,t.makeVertex(e,n,r))},BRepBuilderAPI_MakeEdge_3:function(e,n){let r=e,i=n,a=t.vertexPosition(r.id),o=t.vertexPosition(i.id),s=t.makeLineEdge(a.get(0),a.get(1),a.get(2),o.get(0),o.get(1),o.get(2));return a.delete(),o.delete(),{Edge:()=>T(`edge`,s),delete(){}}}})}function Ge(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{if(r.size()>1){let t=e.fuseAll(r);return{id:t,dispose:()=>{e.release(t)}}}return{id:n,dispose:()=>{}}}finally{for(let t=0,i=r.size();t<i;t++){let i=r.get(t);i!==n&&e.release(i)}r.delete()}}function Ke(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function qe(e,t,n,r){let i=Ge(e,n);try{return D(e,e.cut(E(t),i.id))}finally{i.dispose()}}function Je(e,t,n,r){let i=Ge(e,n);try{return D(e,e.intersect(E(t),i.id))}finally{i.dispose()}}function Ye(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Xe(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function Ze(e,t,n,r,i){let a=Ie(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function Qe(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function $e(e,t,n,r){let i=[];return e.isNull(E(t))&&i.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),e.isNull(E(n))&&i.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),i.length===0&&!e.isValid(E(t))&&i.push({operand:`base`,issue:`not-valid`,message:`Base shape is not valid`}),i.length===0&&!e.isValid(E(n))&&i.push({operand:`tool`,issue:`not-valid`,message:`Tool shape is not valid`}),{valid:i.length===0,issues:i}}function et(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function tt(e,t,n){return n!==t&&e.release(t),n}function nt(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function rt(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function it(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=tt(e,r,e.translate(r,n[0],n[1],n[2]))),T(`solid`,r)}function at(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=tt(e,o,He(e,o,a))),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=tt(e,o,e.translate(o,i[0],i[1],i[2]))),T(`solid`,o)}function ot(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function st(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function ct(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function lt(e,t,n){return T(`face`,e.makeRectangle(t,n))}function ut(e,t,n){let r=e.getSubShapes(E(t),n),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(n,r.get(t)))}finally{r.delete()}return i}function dt(e,t){return Pe(t)?t.type:Fe(e.getShapeType(E(t)))}function ft(e,t,n){return e.isSame(E(t),E(n))}function pt(e,t,n){return e.isEqual(E(t),E(n))}function mt(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function ht(e,t){return D(e,e.copy(E(t)))}function gt(e,t,n){return e.hashCode(E(t),n)}function _t(e,t){return e.isNull(E(t))}function vt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function yt(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=ze(r)}finally{r.delete()}let a={};for(let e=0;e+1<i.length;e+=2){let n=t(i,e),r=t(i,e+1);a[n]||(a[n]=[]),a[n].push(r)}return JSON.stringify(a)}function bt(e,t,n){return e.subShapeCount(E(t),n)}function xt(e,t,n,r){let i=e.subShapeHashes(E(t),n,r);try{return ze(i)}finally{i.delete()}}function St(e,t,n){let r=e.sharedEdges(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`edge`,r.get(t)))}finally{r.delete()}return i}function Ct(e,t,n){let r=e.adjacentFaces(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`face`,r.get(t)))}finally{r.delete()}return i}function wt(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var Tt=1e-6;function Et(e,t){return e.isValid(E(t))}function Dt(e,t){let n=e.healSolid(E(t),Tt);return n===0?null:D(e,n)}function Ot(e,t){return D(e,e.healFace(E(t),Tt))}function kt(e,t,n){return D(e,e.healWire(E(t),Tt))}function At(e,t,n){return 0}function jt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function Mt(e,t){return e.fixFaceOrientations(E(t)),0}function Nt(e,t){return D(e,e.fixShape(E(t)))}function Pt(e,t,n,r){let i=e.tessellate(E(n),r.tolerance,r.angularTolerance);try{let e=i.positionCount,n=i.normalCount,a=i.indexCount,o=i.getPositionsPtr()>>2,s=i.getNormalsPtr()>>2,c=i.getIndicesPtr()>>2,l=new Float32Array(e);for(let n=0;n<e;n++)l[n]=t.HEAPF32[o+n]??0;let u=new Float32Array(n);if(!r.skipNormals)for(let e=0;e<n;e++)u[e]=t.HEAPF32[s+e]??0;let d=i.uvCount,f=new Float32Array(r.includeUVs?d:0);if(r.includeUVs&&d>0){let e=i.getUvsPtr()>>2;for(let n=0;n<d;n++)f[n]=t.HEAPF32[e+n]??0}let p=new Uint32Array(a);for(let e=0;e<a;e++)p[e]=t.HEAPU32[c+e]??0;let m=[],h=i.faceGroupCount;if(h>0){let e=i.getFaceGroupsPtr()>>2;for(let n=0;n<h;n+=3)m.push({start:t.HEAP32[e+n]??0,count:t.HEAP32[e+n+1]??0,faceHash:t.HEAP32[e+n+2]??0})}return{vertices:l,normals:r.skipNormals?new Float32Array:u,triangles:p,uvs:f,faceGroups:m}}finally{i.delete()}}function Ft(e,t,n,r){for(let i=0;i+1<n;i++){let n=t+i*3,a=e[n]??0,o=e[n+1]??0,s=e[n+2]??0,c=e[n+3]??0,l=e[n+4]??0,u=e[n+5]??0;a===c&&o===l&&s===u||r.push(a,o,s,c,l,u)}}function It(e,t,n,r,i){let a=e.wireframe(E(n),r);try{let e=t.HEAPF32,n=a.getPointsPtr()>>2,r=[],i=[],o=a.edgeGroupCount,s=o>0?a.getEdgeGroupsPtr()>>2:0;for(let a=0;a<o;a+=3){let o=n+(t.HEAP32[s+a]??0),c=Math.floor((t.HEAP32[s+a+1]??0)/3),l=r.length/3;Ft(e,o,c,r),i.push({start:l,count:r.length/3-l,edgeHash:t.HEAP32[s+a+2]??0})}return{lines:new Float32Array(r),edgeGroups:i}}finally{a.delete()}}function Lt(e,t){return e.hasTriangulation(E(t))}function Rt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var zt={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function Bt(e,t){let n=e.curveType(E(t));return zt[n]??n.toUpperCase()}function Vt(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function Ht(e,t,n){let r=e.curvePointAtParam(E(t),n);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function Ut(e,t,n){let r=e.curveTangent(E(t),n);try{let i=e.curvePointAtParam(E(t),n);try{return{point:[i.get(0),i.get(1),i.get(2)],tangent:[r.get(0),r.get(1),r.get(2)]}}finally{i.delete()}}finally{r.delete()}}function Wt(e,t){return e.curveIsClosed(E(t))}function Gt(e,t){return e.curveIsPeriodic(E(t))}function Kt(e,t){return 2*Math.PI}function qt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Jt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Yt(e,t,n){return T(`edge`,e.curveDegreeElevate(E(t),n))}function Xt(e,t,n,r){return T(`edge`,e.curveKnotInsert(E(t),n,r))}function Zt(e,t,n,r){return T(`edge`,e.curveKnotRemove(E(t),n,r))}function Qt(e,t,n){let r=e.curveSplit(E(t),n);try{return[T(`edge`,r.get(0)),T(`edge`,r.get(1))]}finally{r.delete()}}function $t(e,t){let n=en(e,t);if(!n||n.poles.length<2)return null;let r=n.poles[n.poles.length-2];return r?[r[0],r[1],r[2]]:null}function en(e,t){try{let n=e.getNurbsCurveData(E(t));try{let e=n.poles.size()/3,t=[];for(let r=0;r<e;r++)t.push([n.poles.get(r*3),n.poles.get(r*3+1),n.poles.get(r*3+2)]);let r=[];for(let e=0;e<n.knots.size();e++)r.push(n.knots.get(e));let i=[];for(let e=0;e<n.multiplicities.size();e++)i.push(n.multiplicities.get(e));let a=[];if(n.rational)for(let e=0;e<n.weights.size();e++)a.push(n.weights.get(e));else for(let t=0;t<e;t++)a.push(1);return{degree:n.degree,poles:t,weights:a,knots:r,multiplicities:i,isPeriodic:n.periodic,isRational:n.rational}}finally{n.delete()}}catch{return null}}function tn(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function nn(e,t){return e.surfaceType(E(t)).toLowerCase()}function rn(e,t){let n=e.uvBounds(E(t));try{return{uMin:n.get(0),uMax:n.get(1),vMin:n.get(2),vMax:n.get(3)}}finally{n.delete()}}function an(e,t){return T(`wire`,e.outerWire(E(t)))}function on(e,t,n,r){let i=e.surfaceNormal(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}function sn(e,t,n,r){let i=e.pointOnSurface(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}var cn=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],ln=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],un=e=>Math.hypot(e[0],e[1],e[2]),dn=(e,t)=>[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]];function fn(e,t){if(nn(e,t)!==`cylinder`)return null;let n=rn(e,t),r=.5*(n.vMin+n.vMax),i=n.uMin+.25*(n.uMax-n.uMin),a=n.uMin+.5*(n.uMax-n.uMin),o=on(e,t,i,r),s=on(e,t,a,r),c=sn(e,t,i,r),l=sn(e,t,a,r),u=dn(o,s),d=un(u),f=un(cn(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=un(cn(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=un(cn(h,[l[0]-m*s[0],l[1]-m*s[1],l[2]-m*s[2]]))<1e-6?h:[c[0]+m*o[0],c[1]+m*o[1],c[2]+m*o[2]];return{origin:g,direction:p,radius:m,isDirect:(vt(e,t)===`reversed`?-1:1)*ln(o,cn(c,g))>0}}function pn(e,t,n){let r=cn(t,e),i=cn(n,e),a=dn(r,i),o=ln(a,a);if(o<1e-18)return null;let s=ln(r,r),c=ln(i,i),l=dn([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function mn(e,t,n,r,i){return pn(sn(e,t,n+.1*(r-n),i),sn(e,t,n+.45*(r-n),i),sn(e,t,n+.8*(r-n),i))}function hn(e,t){let n=rn(e,t),r=[.2,.5,.8].map(r=>mn(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=cn(o,n),c=un(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function gn(e,t){let n=nn(e,t);if(n===`cylinder`){let n=fn(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?hn(e,t):null}function _n(e,t){let n=fn(e,t);return n?{radius:n.radius,isDirect:n.isDirect}:null}function vn(e,t,n){let r=e.uvFromPoint(E(t),n[0],n[1],n[2]);try{return r.size()<2?null:[r.get(0),r.get(1)]}finally{r.delete()}}function yn(e,t,n){let r=e.projectPointOnFace(E(t),n[0],n[1],n[2]);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function bn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function xn(e,t,n,r,i,a){let[o,s,c]=r,[l,u,d]=i,f=!!a,[p,m,h]=a??[1,0,0],g=e.projectEdges(E(n),o,s,c,l,u,d,p,m,h,f),_=n=>n===0?T(`compound`,e.makeCompound(new t.VectorUint32)):T(`compound`,n);return{visible:{outline:_(g.visibleOutline),smooth:_(g.visibleSmooth),sharp:_(g.visibleSharp)},hidden:{outline:_(g.hiddenOutline),smooth:_(g.hiddenSmooth),sharp:_(g.hiddenSharp)}}}function Sn(e,t){return e.getVolume(E(t))}function Cn(e,t){return e.getSurfaceArea(E(t))}function wn(e,t){return e.getLength(E(t))}function Tn(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function En(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Dn(e,t){let n=e.getBoundingBox(E(t),!0);return{min:[n.xmin,n.ymin,n.zmin],max:[n.xmax,n.ymax,n.zmax]}}function On(e,t){try{let n=e.getSurfaceCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}catch{return[0,0,0]}}function kn(e,t,n){return{volume:Sn(e,t),area:Cn(e,t),length:n?wn(e,t):0,centerOfMass:Tn(e,t),boundingBox:Dn(e,t)}}function An(e,t){let n=E(t);return{distanceTo(t){return{value:e.distanceBetween(n,E(t)),point1:[0,0,0],point2:[0,0,0]}},dispose:Ne}}var jn=256;function Mn(e,t,n){let r=[],i=e.getSubShapes(n,`vertex`);try{let t=i.size();for(let n=0;n<t;n++){let t=e.vertexPosition(i.get(n));r.push([t.get(0),t.get(1),t.get(2)]),t.delete()}}finally{i.delete()}let a=e.getBoundingBox(n,!0),o=Math.sqrt((a.xmax-a.xmin)**2+(a.ymax-a.ymin)**2+(a.zmax-a.zmin)**2),s=Math.max(o*.01,1e-4),c;try{c=e.tessellate(n,s,.5)}catch{return r}try{let e=c.positionCount;if(e>0){let n=c.getPositionsPtr()>>2,i=t.HEAPF32,a=Math.floor(e/3),o=(a>jn?Math.ceil(a/jn):1)*3;for(let t=0;t<e;t+=o)r.push([i[n+t]??0,i[n+t+1]??0,i[n+t+2]??0])}}finally{c.delete()}return r}function Nn(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=Mn(e,t,i),c=Mn(e,t,a);if(s.length===0||c.length===0)return{value:o,point1:[0,0,0],point2:[0,0,0]};let l=1/0,u=s[0]??[0,0,0],d=c[0]??[0,0,0];for(let e of s)for(let t of c){let n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n*n+r*r+i*i;a<l&&(l=a,u=e,d=t)}return{value:o,point1:u,point2:d}}function Pn(e,t,n,r){let i=e.pointOnSurface(t,n,r),a=[i.get(0),i.get(1),i.get(2)];return i.delete(),a}function Fn(e,t,n,r){let i=e.uvBounds(t),a=i.get(0),o=i.get(1),s=i.get(2),c=i.get(3);i.delete();let l=Math.max(Math.max(o-a,1e-12)*.001,1e-6),u=Math.max(Math.max(c-s,1e-12)*.001,1e-6),d=Math.min(Math.max(n,a+l),o-l),f=Math.min(Math.max(r,s+u),c-u),p=Pn(e,t,d,f),m=Pn(e,t,d+l,f),h=Pn(e,t,d-l,f),g=Pn(e,t,d,f+u),_=Pn(e,t,d,f-u),v=Pn(e,t,d+l,f+u),y=Pn(e,t,d+l,f-u),b=Pn(e,t,d-l,f+u),x=Pn(e,t,d-l,f-u),S=l*l,C=u*u,w=4*l*u;return{Pu:[(m[0]-h[0])/(2*l),(m[1]-h[1])/(2*l),(m[2]-h[2])/(2*l)],Pv:[(g[0]-_[0])/(2*u),(g[1]-_[1])/(2*u),(g[2]-_[2])/(2*u)],Puu:[(m[0]-2*p[0]+h[0])/S,(m[1]-2*p[1]+h[1])/S,(m[2]-2*p[2]+h[2])/S],Pvv:[(g[0]-2*p[0]+_[0])/C,(g[1]-2*p[1]+_[1])/C,(g[2]-2*p[2]+_[2])/C],Puv:[(v[0]-y[0]-b[0]+x[0])/w,(v[1]-y[1]-b[1]+x[1])/w,(v[2]-y[2]-b[2]+x[2])/w]}}function In(e,t,n,r){return Math.abs(e)+Math.abs(t)>=Math.abs(n)+Math.abs(r)?Math.abs(e)+Math.abs(t)<1e-12?[1,0]:[-t,e]:Math.abs(n)+Math.abs(r)<1e-12?[0,1]:[-r,n]}function Ln(e,t,n){let r=e[0]*t[0]+e[1]*n[0],i=e[0]*t[1]+e[1]*n[1],a=e[0]*t[2]+e[1]*n[2],o=Math.sqrt(r*r+i*i+a*a);return o<1e-12?[1,0,0]:[r/o,i/o,a/o]}function Rn(e,t){let n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);if(n<1e-12)return{maxDirection:[1,0,0],minDirection:[0,1,0]};let r=e[0]/n,i=e[1]/n,a=e[2]/n,o=r*t[0]+i*t[1]+a*t[2],s=t[0]-o*r,c=t[1]-o*i,l=t[2]-o*a,u=Math.sqrt(s*s+c*c+l*l);if(u<1e-12){let e=Math.abs(r)<.9?[1,0,0]:[0,1,0],t=i*e[2]-a*e[1],n=a*e[0]-r*e[2],o=r*e[1]-i*e[0],s=Math.sqrt(t*t+n*n+o*o)||1;return{maxDirection:[r,i,a],minDirection:[t/s,n/s,o/s]}}return{maxDirection:[r,i,a],minDirection:[s/u,c/u,l/u]}}function zn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=Fn(e,t,n,r),d=o[1]*s[2]-o[2]*s[1],f=o[2]*s[0]-o[0]*s[2],p=o[0]*s[1]-o[1]*s[0],m=Math.sqrt(d*d+f*f+p*p),h=o[0]*o[0]+o[1]*o[1]+o[2]*o[2],g=o[0]*s[0]+o[1]*s[1]+o[2]*s[2],_=s[0]*s[0]+s[1]*s[1]+s[2]*s[2];if(m<1e-12||h*_-g*g<1e-24)return Rn(o,s);let v=(c[0]*d+c[1]*f+c[2]*p)/m,y=(u[0]*d+u[1]*f+u[2]*p)/m,b=(l[0]*d+l[1]*f+l[2]*p)/m,x=h*_-g*g,S=(v*_-y*g)/x,C=(y*_-b*g)/x,w=(y*h-v*g)/x,ee=(b*h-y*g)/x;if(Math.abs(i-a)<1e-9*(Math.abs(i)+Math.abs(a)+1))return Rn(o,s);let te=In(S-i,C,w,ee-i),ne=In(S-a,C,w,ee-a);return{maxDirection:Ln(te,o,s),minDirection:Ln(ne,o,s)}}function Bn(e,t,n,r){let i=E(t),a=e.surfaceCurvature(i,n,r),o=a.get(0),s=a.get(1),c=a.get(2),l=a.get(3);a.delete();let{maxDirection:u,minDirection:d}=zn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}function Vn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Hn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function Un(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Wn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function Gn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function Kn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function qn(e,t,n){let r=JSON.parse(n);if(r.edgeId!==void 0&&r.startRadius!==void 0&&r.endRadius!==void 0)return D(e,e.filletVariable(E(t),r.edgeId,r.startRadius,r.endRadius));throw Error(`occt-wasm: filletVariable (complex spec) not implemented`)}function Jn(e,t,n,r,i,a){let o=E(t);for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;o=e.draft(o,E(t),n,r[0],r[1],r[2])}return D(e,o)}function Yn(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.defeature(E(n),i,.001))}finally{i.delete()}}function Xn(e,t,n,r){let i=0;return r===`intersection`||r===1?i=1:r===`tangent`||r===2?i=2:typeof r==`number`&&(i=r),D(e,e.offsetWire2D(E(t),n,i))}function Zn(e,t){return D(e,e.simplify(E(t)))}function Qn(e,t){return D(e,e.reverseShape(E(t)))}function $n(e,t,n,r){let i=n[0]*r,a=n[1]*r,o=n[2]*r;return D(e,e.extrude(E(t),i,a,o))}function er(e,t,n,r){let i=n.origin,a=n.direction;return D(e,e.revolve(E(t),i.x,i.y,i.z,a.x,a.y,a.z,r))}function tr(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,!0,r??!1,o,s)):D(e,e.loft(c,!0,r??!1))}finally{c.delete()}}function nr(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function rr(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function ir(e,t,n,r){let i=r?.frenet??!1,a=r?.transitionMode===`round`,o=r?.shellMode??!1,s=D(e,e.sweepPipeShell(E(t),E(n),i,a));if(o){let t=e.getSubShapes(E(s),`wire`);try{return{shape:s,firstShape:t.size()>0?D(e,t.get(0)):s,lastShape:t.size()>1?D(e,t.get(t.size()-1)):s}}finally{t.delete()}}return s}function ar(e,t,n,r){let i=r?.solid??!0,a=r?.ruled??!1,o=r?.startVertex?E(r.startVertex):0,s=r?.endVertex?E(r.endVertex):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,i,a,o,s)):D(e,e.loft(c,i,a))}finally{c.delete()}}function or(e,t,n,r){let i={__occtWasmLaw:!0,profile:t,length:n,endFactor:r,Trim(e,t,n){return{...i,trimFirst:e,trimLast:t}},delete(){}};return i}function sr(e,t,n,r,i){return D(e,e.revolveVec(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i))}function cr(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function lr(e){let t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let n of e)if(n.type===`translate`)t=Be([1,0,0,n.x,0,1,0,n.y,0,0,1,n.z,0,0,0,1],t);else{let e=n.axis??[0,0,1],r=n.center??[0,0,0],i=n.angle*Math.PI/180,a=Math.cos(i),o=Math.sin(i),s=1-a,c=Math.sqrt(e[0]**2+e[1]**2+e[2]**2),[l,u,d]=[e[0]/c,e[1]/c,e[2]/c],f=s*l*l+a,p=s*l*u-o*d,m=s*l*d+o*u,h=s*u*l+o*d,g=s*u*u+a,_=s*u*d-o*l,v=s*d*l-o*u,y=s*d*u+o*l,b=s*d*d+a;t=Be([f,p,m,r[0]-(f*r[0]+p*r[1]+m*r[2]),h,g,_,r[1]-(h*r[0]+g*r[1]+_*r[2]),v,y,b,r[2]-(v*r[0]+y*r[1]+b*r[2]),0,0,0,1],t)}return{handle:{__type:`transform_matrix`,matrix:t,delete:Ne},dispose:Ne}}function ur(e){let t=e,n;return Array.isArray(t)?n=t:typeof t==`object`&&t&&(Array.isArray(t.matrix)?n=t.matrix:Array.isArray(t.elements)&&(n=t.elements)),n&&n.length===16&&(n=n.slice(0,12)),n&&n.length>=12?n:void 0}function dr(e,t,n,r){let i=ur(r);if(i){let r=Re(t,i);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function fr(e,t,n,r){if(typeof e.located==`function`){let i=ur(r);if(i){let r=Re(t,i);try{return D(e,e.located(E(n),r))}finally{r.delete()}}}return dr(e,t,n,r)}function pr(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function mr(e,t,n,r,i){let a=r??[0,0,1],o=i??[0,0,0];return D(e,e.rotate(E(t),o[0],o[1],o[2],a[0],a[1],a[2],n))}function hr(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function gr(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function _r(e,t,n,r,i,a){let o=Re(t,[r[0],r[1],r[2],i[0],r[3],r[4],r[5],i[1],r[6],r[7],r[8],i[2]]);try{return D(e,e.generalTransform(E(n),o))}finally{o.delete()}}function vr(e,t,n,r,i){let a=e.curvePointAtParam(E(r),i),[o,s,c]=(()=>{try{return[a.get(0),a.get(1),a.get(2)]}finally{a.delete()}})(),l=e.curveTangent(E(r),i),[u,d,f]=(()=>{try{return[l.get(0),l.get(1),l.get(2)]}finally{l.delete()}})(),p,m,h;Math.abs(u)<.9?(p=0,m=f,h=-d):(p=-f,m=0,h=u);let g=Math.sqrt(p*p+m*m+h*h);p/=g,m/=g,h/=g;let _=d*h-f*m,v=f*p-u*h,y=u*m-d*p,b=new t.VectorDouble;b.push_back(p),b.push_back(_),b.push_back(u),b.push_back(o),b.push_back(m),b.push_back(v),b.push_back(d),b.push_back(s),b.push_back(h),b.push_back(y),b.push_back(f),b.push_back(c);try{return D(e,e.transform(E(n),b))}finally{b.delete()}}function yr(e,t,n,r,i){let a=e.linearPattern(E(t),n[0],n[1],n[2],r,i),o=e.getSubShapes(a,`solid`),s=[];try{let e=o.size();for(let t=0;t<e;t++)s.push(T(`solid`,o.get(t)))}finally{o.delete()}if(s.length===0){let t=e.iterShapes(a);try{let n=t.size();for(let r=0;r<n;r++)s.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(a),s}function br(e,t,n,r,i,a){let o=e.circularPattern(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i,a),s=e.getSubShapes(o,`solid`),c=[];try{let e=s.size();for(let t=0;t<e;t++)c.push(T(`solid`,s.get(t)))}finally{s.delete()}if(c.length===0){let t=e.iterShapes(o);try{let n=t.size();for(let r=0;r<n;r++)c.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(o),c}function xr(e,t){return t.map(t=>{switch(t.type){case`translate`:return pr(e,t.shape,t.x,t.y,t.z);case`rotate`:return mr(e,t.shape,t.angle,t.axis,t.center);case`scale`:return gr(e,t.shape,t.center,t.factor);case`mirror`:return hr(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function Sr(e,t){if(t===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,i=1/0,a=-1/0,o=-1/0,s=-1/0;for(let c=0;c<t;c++){let t=c*3,l=e[t]??0,u=e[t+1]??0,d=e[t+2]??0;l<n&&(n=l),u<r&&(r=u),d<i&&(i=d),l>a&&(a=l),u>o&&(o=u),d>s&&(s=d)}return{min:[n,r,i],max:[a,o,s]}}function Cr(e,t,n,r,i,a,o,s){return{asset:{version:`2.0`,generator:`brepjs occt-wasm`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,mode:4}]}],buffers:[{byteLength:o}],bufferViews:[{buffer:0,byteOffset:0,byteLength:r,target:34962},{buffer:0,byteOffset:r,byteLength:i,target:34962},{buffer:0,byteOffset:r+i,byteLength:a,target:34963}],accessors:[{bufferView:0,componentType:5126,count:e,type:`VEC3`,min:s.min,max:s.max},{bufferView:1,componentType:5126,count:t,type:`VEC3`},{bufferView:2,componentType:5125,count:n,type:`SCALAR`}]}}function wr(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function Tr(e,t,n,r=De,i=Oe){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?je(a,o):Me(a,o)}function Er(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function Dr(e,t,n){let r=typeof n==`string`?new TextEncoder().encode(n):new Uint8Array(n),i=t;if(i.FS)i.FS.writeFile(`/tmp/import.stl`,r);else{let t=Array.from(r,e=>String.fromCharCode(e)).join(``);return D(e,e.importStl(t))}return D(e,e.importStl(``))}function Or(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function kr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function Ar(e,t,n,r){if(n.length===0)return``;let i=Ir(e,t,n);try{return Lr(e,i)}finally{i.delete()}}function jr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=a.length/3,l=o.length,u=i.byteLength,d=a.byteLength,f=o.byteLength,p=u+d+f,m=p+(4-p%4)%4,h=Cr(s,c,l,u,d,f,m,Sr(i,s)),g=new TextEncoder().encode(JSON.stringify(h)),_=g.byteLength+(4-g.byteLength%4)%4,v=20+_+8+m,y=new ArrayBuffer(v),b=new DataView(y);b.setUint32(0,1179937895,!0),b.setUint32(4,2,!0),b.setUint32(8,v,!0),b.setUint32(12,_,!0),b.setUint32(16,1313821514,!0);let x=new Uint8Array(y,20,_);x.set(g);for(let e=g.byteLength;e<_;e++)x[e]=32;let S=20+_;b.setUint32(S,m,!0),b.setUint32(S+4,5130562,!0);let C=S+8;return new Uint8Array(y,C,u).set(new Uint8Array(i.buffer,i.byteOffset,u)),new Uint8Array(y,C+u,d).set(new Uint8Array(a.buffer,a.byteOffset,d)),new Uint8Array(y,C+u+d,f).set(new Uint8Array(o.buffer,o.byteOffset,f)),y}function Mr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=[`# brepjs OBJ export`],c=i.length/3;for(let e=0;e<c;e++){let t=e*3;s.push(`v ${i[t]??0} ${i[t+1]??0} ${i[t+2]??0}`)}let l=a.length/3;for(let e=0;e<l;e++){let t=e*3;s.push(`vn ${a[t]??0} ${a[t+1]??0} ${a[t+2]??0}`)}let u=e=>{let t=(o[e]??0)+1,n=(o[e+1]??0)+1,r=(o[e+2]??0)+1;s.push(`f ${t}//${t} ${n}//${n} ${r}//${r}`)};if(r.faceGroups.length>0)for(let e of r.faceGroups){s.push(`g face_${e.faceHash}`);let t=e.count/3;for(let n=0;n<t;n++)u(e.start+n*3)}else{let e=o.length/3;for(let t=0;t<e;t++)u(t*3)}return new TextEncoder().encode(s.join(`
4
+ `)+`
5
+ `).buffer}function Nr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=o.length/3,l=a.length===i.length,u=[`ply`,`format ascii 1.0`,`comment brepjs PLY export`,`element vertex ${s}`,`property float x`,`property float y`,`property float z`];l&&u.push(`property float nx`,`property float ny`,`property float nz`),u.push(`element face ${c}`,`property list uchar int vertex_index`,`end_header`);for(let e=0;e<s;e++){let t=e*3,n=i[t]??0,r=i[t+1]??0,o=i[t+2]??0;if(l){let e=a[t]??0,i=a[t+1]??0,s=a[t+2]??0;u.push(`${n} ${r} ${o} ${e} ${i} ${s}`)}else u.push(`${n} ${r} ${o}`)}for(let e=0;e<c;e++){let t=o[e*3]??0,n=o[e*3+1]??0,r=o[e*3+2]??0;u.push(`3 ${t} ${n} ${r}`)}return new TextEncoder().encode(u.join(`
6
+ `)+`
7
+ `).buffer}function Pr(e,t){return e.toBREP(E(t))}function Fr(e,t){return D(e,e.fromBREP(t))}function Ir(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function Lr(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function Rr(e,t,n,r){if(n.length===0)return``;let i=Ir(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return Lr(e,i)}finally{i.delete()}}function zr(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Br(e,t){throw Pe(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Vr(e,t,n){let r=Ie(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function Hr(e,t,n){let r=[],i=new Set(n.map(e=>E(e)));for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let a=Ie(t,r);try{return T(`wire`,e.makeWire(a))}finally{a.delete();for(let t of r)i.has(t)||e.release(t)}}function Ur(e,t,n){return T(`face`,e.makeFace(E(t)))}function Wr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Gr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Kr(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function qr(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Jr(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function Yr(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function Xr(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=Re(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function Zr(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function Qr(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function $r(e,t,n){let r=Ie(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function ei(e,t){return T(`solid`,e.solidFromShell(E(t)))}function ti(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=Ie(t,a);try{let t=e.sewAndSolidify(o,i),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),D(e,n)}finally{o.delete();for(let t of a)e.release(t)}}function ni(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function ri(e,t,n,r){let i=Ie(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function ii(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Le(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function ai(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function oi(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function si(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=Ie(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete();for(let t of a)e.release(t)}}function ci(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function li(e,t,n,r){let i=Ie(t,n.map(E));try{let t=e.sewAndSolidify(i,r),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),T(`solid`,n)}finally{i.delete()}}function ui(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ne}}function di(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ne}}function fi(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ne}}function pi(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ne}}function mi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Ne}}function hi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Ne}}function gi(e){return e}function _i(e){return e}function vi(e,t){return{x:e,y:t}}function yi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function bi(e,t){return{x:e,y:t}}function xi(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function Si(e){return e}function Ci(e,t,n,r){return _i(te(e,t,n,r))}function wi(e,t,n,r){return _i(ne(e,t,n,r))}function Ti(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return _i(te(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),_i({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),_i({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function Ei(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return _i(te(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,x=ne(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),_i({__bk2d:`trimmed`,basis:x,tStart:e,tEnd:t})}let S=_;return S<g-1e-9&&(S+=2*Math.PI),_i({__bk2d:`trimmed`,basis:x,tStart:g,tEnd:S})}function Di(e,t,n,r,i,a,o){return _i(ae(e,t,n,r,i??1,a??0,o??!0))}function Oi(e,t,n,r,i,a,o,s,c){return _i({...ae(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function ki(e){return _i(oe(e))}function Ai(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),_i({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function ji(e,t){return S(gi(e),t)}function Mi(e,t){return{point:S(gi(e),t),tangent:C(gi(e),t)}}function Ni(e){return w(gi(e))}function Pi(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return ee(t)}function Fi(e,t,n){return _i({__bk2d:`trimmed`,basis:gi(e),tStart:t,tEnd:n})}function Ii(e){return _i(JSON.parse(JSON.stringify(gi(e))))}function Li(e,t){let n=gi(e),r=w(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return _i(oe(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function Ri(e,t,n){return _i(se(gi(e),t,n))}function zi(e,t,n,r){return _i(ce(gi(e),t,n,r))}function Bi(e,t,n,r){return _i(le(gi(e),t,n,r))}function Vi(e,t,n){return _i(ue(gi(e),t,n))}function Hi(e,t,n,r,i){return _i(de(gi(e),t,n,r,i))}function Ui(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=gi(e),_=w(g),v=[];for(let e=0;e<=20;e++){let[t,n]=S(g,_.first+(_.last-_.first)*e/20);v.push([u*t+d*n+m,f*t+p*n+h])}return _i(oe(v))}function Wi(e,t,n,r,i,a){return Ui(e,t,n,r,i,a)}function Gi(){return{type:`identity2d`,delete(){}}}function Ki(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function qi(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Ji(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function Yi(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Xi(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function Zi(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function Qi(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function $i(e,t){let n=t;return n.type===`translate2d`?Ri(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?zi(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Bi(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Vi(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Ui(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?Ri(e,Number(n.dx)||0,Number(n.dy)||0):e}function ea(e,t,n){let r=fe(gi(e),gi(t),n);return{points:r.points,segments:r.segments.map(e=>_i(e))}}function ta(e,t,n){let r=gi(e),i=w(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=S(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function na(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=S(gi(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=S(gi(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function ra(e,t){let n=gi(e),r=w(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(S(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),_i({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function ia(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++){let n=t.knots[e]??0,r=t.multiplicities[e]??0;for(let e=0;e<r;e++)i.push(n)}let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[_i(oe(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>_i(oe(e)))}function aa(){return Ce()}function oa(e,t,n){we(e,gi(t),n)}function sa(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function ca(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function la(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function ua(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function da(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function fa(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function pa(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles:null}function ma(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles.length-1:null}function ha(e){return xe(gi(e))}function ga(e){return _i(Se(e))}function _a(e,t){let n=w(gi(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(Fi(e,a,o))}return i}function va(e,t,n,r,i,a){let o=gi(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p,y=(e,t)=>[s+e*p+t*g,c+e*m+t*_,l+e*h+t*v],b=o.__bk2d;if(b===`line`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,t.last),s=y(n,r),c=y(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(b===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=S(o,0),[r,i]=S(o,1),a=y(t,n),s=y(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,(t.first+t.last)/2),[s,c]=S(o,t.last),l=y(n,r),u=y(i,a),d=y(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(b===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=y(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=w(o),[r,i]=S(o,n.first),[a,s]=S(o,(n.first+n.last)/2),[c,l]=S(o,n.last),p=y(r,i),m=y(a,s),h=y(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let x=w(o),C=(x.last-x.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=S(o,x.first+e*C),[r,i,a]=y(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function ya(e,t,n,r){let i=gi(n),a=w(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=S(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function ba(e){return e}function xa(){return _i(te(0,0,1,0))}function Sa(e,t){e.buildCurves3d(E(t))}function Ca(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function wa(e){try{let t=ze(e.modified),n=ze(e.generated),r=ze(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function Ta(e,t,n,r,i,a,o,s){let c=Le(t,o);try{let{id:t,evolution:o}=wa(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function Ea(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Le(t,i);try{let{id:t,evolution:i}=wa(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function Da(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=wa(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function Oa(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=wa(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ka(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function Aa(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=wa(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ja(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=wa(e.cutWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Ma(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=wa(e.intersectWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Na(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=wa(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Pa(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=wa(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Fa(e,t,n,r,i,a,o,s){let c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=wa(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Ia(e,t,n,r,i,a){let o=Le(t,i);try{let{id:t,evolution:i}=wa(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function La(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=wa(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function Ra(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function za(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function Ba(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=x(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return ti(e,t,[...i],[...a],r)}function Va(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function Ha(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Va(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Ba(e,t,i,r)}function Ua(e){throw new c(`occt-wasm: ${e} is not yet implemented`)}var Wa=class e{oc;kernelId=`occt-wasm`;capabilities=a;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ue(t,e),this.oc=We(e,this.k),this.owner=n}static fromKernel(t){let n=t.getRawModule(),r=t.getRawKernel();return new e(n,r,t)}get retainedKernelOwner(){return this.owner}dispose(e){Pe(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){Ua(`executeBatch`)}openCheckpoints=[];checkpoint(){let e=this.k.checkpoint();return this.openCheckpoints.push(e),e}checkpointCount(){return this.openCheckpoints.length}restoreCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);if(t===-1)throw new r(`occtWasmAdapter.restoreCheckpoint`,`checkpoint ${e} is not open — releaseSince would erase unrelated live handles`);this.k.releaseSince(e),this.openCheckpoints.length=t}discardCheckpoint(e){this.closeCheckpoint(e)}closeCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);t!==-1&&(this.openCheckpoints.length=t)}makeBox(e,t,n){return nt(this.k,e,t,n)}makeCylinder(e,t,n,r){return rt(this.k,e,t,n,r)}makeSphere(e,t){return it(this.k,e,t)}makeCone(e,t,n,r,i){return at(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return ot(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return st(this.k,e,t,n)}makeBoxFromCorners(e,t){return ct(this.k,e,t)}makeRectangle(e,t){return lt(this.k,e,t)}fuse(e,t,n){return Ke(this.k,e,t,n)}cut(e,t,n){return qe(this.k,e,t,n)}intersect(e,t,n){return Je(this.k,e,t,n)}section(e,t,n){return Ye(this.k,e,t,n)}fuseAll(e,t){return Xe(this.k,this.Module,e,t)}cutAll(e,t,n){return Ze(this.k,this.Module,e,t,n)}split(e,t){return Qe(this.k,this.Module,e,t)}checkBoolean(e,t,n){return $e(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return et(e,t,n,r,i,a)}makeVertex(e,t,n){return zr(this.k,e,t,n)}makeEdge(e,t,n){return Br(this.k,e)}makeWire(e){return Vr(this.k,this.Module,e)}makeFace(e,t){return Ur(this.k,e,t)}makeLineEdge(e,t){return Wr(this.k,e,t)}makeCircleEdge(e,t,n){return Gr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Kr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return qr(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Jr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Yr(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Xr(this.k,this.Module,e)}makeTangentArc(e,t,n){return Zr(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return Qr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return Hr(this.k,this.Module,e)}makeCompound(e){return $r(this.k,this.Module,e)}solidFromShell(e){return ei(this.k,e)}hull(e,t){return Ha(this.k,this.Module,e,t)}hullFromPoints(e,t){return Ba(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return ti(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return ni(this.k,e)}addHolesInFace(e,t){return ri(this.k,this.Module,e,t)}removeHolesFromFace(e){return ii(this.k,this.Module,e)}makeFaceOnSurface(e,t){return ai(this.k,e,t)}bsplineSurface(e,t,n){return oi(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return si(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return ci(this.k,e,t,n)}sewAndSolidify(e,t){return li(this.k,this.Module,e,t)}createPoint3d(e,t,n){return ui(e,t,n)}createDirection3d(e,t,n){return di(e,t,n)}createVector3d(e,t,n){return fi(e,t,n)}createAxis1(e,t,n,r,i,a){return pi(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return mi(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return hi(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return $n(this.k,e,t,n)}revolve(e,t,n){return er(this.k,e,t,n)}loft(e,t,n,r){return tr(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return nr(this.k,e,t,n)}simplePipe(e,t){return rr(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){Ua(`sweepWithOptions`)}sweepPipeShell(e,t,n){return ir(this.k,e,t,n)}loftAdvanced(e,t){return ar(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return or(this.k,e,t,n)}revolveVec(e,t,n,r){return sr(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return cr(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Vn(this.k,this.Module,e,t,n)}chamfer(e,t,n){return Hn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Un(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Wn(this.k,this.Module,e,t,n,r)}thicken(e,t){return Gn(this.k,e,t)}offset(e,t,n){return Kn(this.k,e,t,n)}filletVariable(e,t){return qn(this.k,e,t)}draft(e,t,n,r,i){return Jn(this.k,e,t,n,r,i)}defeature(e,t){return Yn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return Xn(this.k,e,t,n)}simplify(e){return Zn(this.k,e)}reverseShape(e){return Qn(this.k,e)}composeTransform(e){return lr(e)}transform(e,t){return dr(this.k,this.Module,e,t)}locate(e,t){return fr(this.k,this.Module,e,t)}translate(e,t,n,r){return pr(this.k,e,t,n,r)}rotate(e,t,n,r){return mr(this.k,e,t,n,r)}mirror(e,t,n){return hr(this.k,e,t,n)}scale(e,t,n){return gr(this.k,e,t,n)}generalTransform(e,t,n,r){return _r(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return _r(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return vr(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return yr(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return br(this.k,e,t,n,r,i)}transformBatch(e){return xr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return Ta(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return Ea(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return Da(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return Oa(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return ka((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return Aa(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return ja(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return Ma(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return Na(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return Pa(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return Fa(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return Ia(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return La(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return Ra(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return za((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Pt(this.k,this.Module,e,t)}meshEdges(e,t,n){return It(this.k,this.Module,e,t,n)}hasTriangulation(e){return Lt(this.k,e)}meshShape(e,t,n){Rt(this.k,e,t,n)}exportSTEP(e){return wr(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return Tr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return Er(this.k,e)}importSTL(e){return Dr(this.k,this.Module,e)}exportIGES(e){return Or(this.k,this.makeCompound.bind(this),e)}importIGES(e){return kr(this.k,e)}exportSTEPAssembly(e,t){return Ar(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return jr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return Mr(this.mesh.bind(this),e,t)}exportPLY(e,t){return Nr(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return Pr(this.k,e)}fromBREP(e){return Fr(this.k,e)}createXCAFDocument(e){return Ir(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return Lr(this.k,e,t)}exportSTEPConfigured(e,t){return Rr(this.k,this.Module,e,t)}volume(e){return Sn(this.k,e)}area(e){return Cn(this.k,e)}length(e){return wn(this.k,e)}centerOfMass(e){return Tn(this.k,e)}linearCenterOfMass(e){return En(this.k,e)}boundingBox(e){return Dn(this.k,e)}distance(e,t){return Nn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return Bn(this.k,e,t,n)}surfaceCenterOfMass(e){return On(this.k,e)}measureBulk(e,t){return kn(this.k,e,t)}createDistanceQuery(e){return An(this.k,e)}iterShapes(e,t){return ut(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return dt(this.k,e)}isSame(e,t){return ft(this.k,e,t)}isEqual(e,t){return pt(this.k,e,t)}downcast(e,t){return mt(this.k,e,t)}copyShape(e){return ht(this.k,e)}hashCode(e,t){return gt(this.k,e,t)}subShapeCount(e,t){return bt(this.k,e,t)}subShapeHashes(e,t,n){return xt(this.k,e,t,n)}isNull(e){return _t(this.k,e)}shapeOrientation(e){return vt(this.k,e)}edgeToFaceMap(e){return yt(this.k,e)}sharedEdges(e,t){return St(this.k,e,t)}adjacentFaces(e,t){return Ct(this.k,e,t)}sew(e,t){return wt(this.k,this.Module,e,t)}curveType(e){return Bt(this.k,e)}curveParameters(e){return Vt(this.k,e)}curvePointAtParam(e,t){return Ht(this.k,e,t)}curveTangent(e,t){return Ut(this.k,e,t)}curveIsClosed(e){return Wt(this.k,e)}curveIsPeriodic(e){return Gt(this.k,e)}curvePeriod(e){return Kt(this.k,e)}interpolatePoints(e,t){return qt(this.k,this.Module,e,t)}approximatePoints(e,t){return Jt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Yt(this.k,e,t)}curveKnotInsert(e,t,n){return Xt(this.k,e,t,n)}curveKnotRemove(e,t,n){return Zt(this.k,e,t,n)}curveSplit(e,t){return Qt(this.k,e,t)}getBezierPenultimatePole(e){return $t(this.k,e)}createCurveAdaptor(e){Ua(`createCurveAdaptor`)}vertexPosition(e){return tn(this.k,e)}surfaceType(e){return nn(this.k,e)}uvBounds(e){return rn(this.k,e)}outerWire(e){return an(this.k,e)}surfaceNormal(e,t,n){return on(this.k,e,t,n)}pointOnSurface(e,t,n){return sn(this.k,e,t,n)}uvFromPoint(e,t){return vn(this.k,e,t)}projectPointOnFace(e,t){return yn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return bn(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Ua(`classifyPointRobust`)}classifyPointWinding(e,t,n){Ua(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Ua(`approximateSurfaceLspia`)}untrimFace(e,t,n){Ua(`untrimFace`)}getSurfaceCylinderData(e){return _n(this.k,e)}getSurfaceAxis(e){return gn(this.k,e)}reverseSurfaceU(e){Ua(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Ua(`detectSmallFeatures`)}recognizeFeatures(e,t){Ua(`recognizeFeatures`)}projectEdges(e,t,n,r){return xn(this.k,this.Module,e,t,n,r)}isValid(e){return Et(this.k,e)}healSolid(e){return Dt(this.k,e)}healFace(e){return Ot(this.k,e)}healWire(e,t){return kt(this.k,e,t)}mergeCoincidentVertices(e,t){return At(this.k,e,t)}removeDegenerateEdges(e,t){return jt(this.k,e,t)}fixFaceOrientations(e){return Mt(this.k,e)}fixShape(e){return Nt(this.k,e)}fixSelfIntersection(e){Ua(`fixSelfIntersection`)}createPoint2d(e,t){return vi(e,t)}createDirection2d(e,t){return yi(e,t)}createVector2d(e,t){return bi(e,t)}createAxis2d(e,t,n,r){return xi(e,t,n,r)}wrapCurve2dHandle(e){return Si(e)}createCurve2dAdaptor(e){Ua(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return Ci(e,t,n,r)}makeCircle2d(e,t,n,r){return wi(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return Ti(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return Ei(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return Di(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return Oi(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return ki(e)}makeBSpline2d(e,t){return Ai(e)}evaluateCurve2d(e,t){return ji(e,t)}evaluateCurve2dD1(e,t){return Mi(e,t)}getCurve2dBounds(e){return Ni(e)}getCurve2dType(e){return Pi(e)}trimCurve2d(e,t,n){return Fi(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return Ii(e)}offsetCurve2d(e,t){return Li(e,t)}translateCurve2d(e,t,n){return Ri(e,t,n)}rotateCurve2d(e,t,n,r){return zi(e,t,n,r)}scaleCurve2d(e,t,n,r){return Bi(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Vi(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return Hi(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return Wi(e,t,n,r,i,a)}createIdentityGTrsf2d(){return Gi()}createAffinityGTrsf2d(e,t,n,r,i){return Ki(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return qi(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Ji(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Yi(e,t,n)}createScaleGTrsf2d(e,t,n){return Xi(e,t,n)}setGTrsf2dTranslationPart(e,t,n){Zi(e,t,n)}multiplyGTrsf2d(e,t){Qi(e,t)}transformCurve2dGeneral(e,t){return $i(e,t)}intersectCurves2d(e,t,n){return ea(e,t,n)}projectPointOnCurve2d(e,t,n){return ta(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return na(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return ra(e,r)}decomposeBSpline2dToBeziers(e){return ia(e)}createBoundingBox2d(){return aa()}addCurveToBBox2d(e,t,n){oa(e,t,n)}getBBox2dBounds(e){return sa(e)}mergeBBox2d(e,t){ca(e,t)}isBBox2dOut(e,t){return la(e,t)}isBBox2dOutPoint(e,t,n){return ua(e,t,n)}getCurve2dCircleData(e){return da(e)}getCurve2dEllipseData(e){return fa(e)}getCurve2dBezierPoles(e){return pa(e)}getCurve2dBezierDegree(e){return ma(e)}getCurve2dBSplineData(e){Ua(`getCurve2dBSplineData`)}serializeCurve2d(e){return ha(e)}deserializeCurve2d(e){return ga(e)}splitCurve2d(e,t){return _a(e,t)}liftCurve2dToPlane(e,t,n,r){return va(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return ya(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return ba(e)}extractCurve2dFromEdge(e,t){return xa()}buildCurves3d(e){Sa(this.k,e)}fixWireOnFace(e,t,n){return Ca(this.k,e,t,n)}fillSurface(e,t){Ua(`fillSurface`)}getNurbsCurveData(e){return en(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var Ga=O(void 0);function Ka(e){return e.ok}function A(e){return!e.ok}function qa(e,t){return e.ok?O(t(e.value)):e}function Ja(e,t){return e.ok?e:k(t(e.error))}function Ya(e,t){return e.ok?t(e.value):e}var Xa=Ya;function Za(e,t){return e.ok?e:t}function Qa(e,t){return e.ok?e:t(e.error)}function $a(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var eo=fo;function to(e,t){return e.ok&&t(e.value),e}function no(e,t){return e.ok||t(e.error),e}function ro(e){return e.ok?e.value:e}function io(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function ao(e,t){return e==null?k(t()):O(e)}function oo(e){if(typeof e==`object`&&e&&`kind`in e&&`code`in e&&`message`in e){let t=e;return`[${t.kind}] ${t.code}: ${t.message}`}return String(e)}function j(e){if(e.ok)return e.value;throw Error(`Called unwrap() on an Err: ${oo(e.error)}`)}function so(e,t){return e.ok?e.value:t}function co(e,t){return e.ok?e.value:t(e.error)}function lo(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function uo(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function fo(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function po(e,t){try{return O(e())}catch(e){return k(t(e))}}async function mo(e,t){try{return O(await e())}catch(e){return k(t(e))}}function ho(e){function t(e){return typeof e==`object`&&!!e&&`ok`in e&&typeof e.ok==`boolean`}let n=t(e)?e:O(e);function r(e){return{then(t){return e.ok?r(t(e.value)):r(e)},get result(){return e}}}return r(n)}var go=[{pattern:/invalid edge configuration|edges?.*(not|fail|invalid)/i,translation:`The edges may not form a continuous loop. Check that edges connect end-to-end without gaps.`},{pattern:/BRepAlgoAPI.*failed|boolean.*operation.*failed/i,translation:`Boolean operation failed. Common causes: overlapping faces, zero-thickness geometry, or degenerate shapes. Try healing input shapes first.`},{pattern:/fillet.*radius.*too.*large|fillet.*failed/i,translation:`Fillet operation failed. The radius may be too large for the selected edges. Try reducing the radius or check that edges have enough room.`},{pattern:/chamfer.*failed|chamfer.*distance.*too.*large/i,translation:`Chamfer operation failed. The distance may be too large for the selected edges. Try reducing the distance or check edge geometry.`},{pattern:/shell.*failed|offset.*failed/i,translation:`Shell/offset operation failed. The thickness may be too large, or the shape may have complex geometry. Try reducing thickness.`},{pattern:/sweep.*failed|pipe.*failed/i,translation:`Sweep operation failed. Check that the profile and spine are compatible, and that the spine has no sharp twists or self-intersections.`},{pattern:/loft.*failed/i,translation:`Loft operation failed. Profiles may be incompatible or have different orientations. Ensure profiles are ordered consistently.`},{pattern:/extrude.*failed|prism.*failed/i,translation:`Extrusion failed. The profile may be invalid or self-intersecting. Check that the profile forms a valid closed wire.`},{pattern:/revolve.*failed|revolution.*failed/i,translation:`Revolution operation failed. The profile may intersect the axis of revolution, or the angle may be invalid.`},{pattern:/self.*intersect|self-intersect/i,translation:`Shape has self-intersections. The operation resulted in overlapping geometry. Simplify the input or adjust parameters.`},{pattern:/degener|degenerat/i,translation:`Degenerate geometry detected. The shape has edges or faces with zero length/area. Check input geometry for collapsed elements.`},{pattern:/BRepCheck.*fail|shape.*invalid|shape.*not.*valid/i,translation:`Shape validation failed. The resulting shape has invalid topology. Try healing the shape or checking input geometry.`}],_o={FUSE_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,CUT_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,FUSE_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,CUT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,INTERSECT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,SWEEP_FAILED:`Ensure the spine curve has no sharp corners or self-intersections. Try simplifying the profile or using a smoother path.`,LOFT_FAILED:`Check that all profiles have the same number of edges and consistent orientation. Try reordering profiles.`,FILLET_NOT_3D:`The fillet radius may be too large for the selected edges. Try a smaller radius or check that adjacent faces have enough room.`,CHAMFER_NOT_3D:`The chamfer distance may be too large. Try a smaller distance or check edge geometry.`,SHELL_NOT_3D:`The shell thickness may be too large for the shape. Try reducing thickness or removing problematic faces.`,OFFSET_NOT_3D:`The offset distance may be too large for the shape geometry. Try a smaller distance.`,DRAFT_FAILED:`The draft angle may be too large or the selected faces incompatible. Try a smaller angle or different faces.`};function vo(e){return _o[e]}function yo(e){for(let{pattern:t,translation:n}of go)if(t.test(e))return`${n} (kernel: ${e})`;return e}var M={BSPLINE_FAILED:`BSPLINE_FAILED`,FACE_BUILD_FAILED:`FACE_BUILD_FAILED`,SWEEP_FAILED:`SWEEP_FAILED`,LOFT_FAILED:`LOFT_FAILED`,FUSE_FAILED:`FUSE_FAILED`,CUT_FAILED:`CUT_FAILED`,HEAL_NO_EFFECT:`HEAL_NO_EFFECT`,BOOLEAN_HAS_ERRORS:`BOOLEAN_HAS_ERRORS`,VARIABLE_FILLET_FAILED:`VARIABLE_FILLET_FAILED`,POSITION_ON_CURVE_FAILED:`POSITION_ON_CURVE_FAILED`,FIX_SHAPE_FAILED:`FIX_SHAPE_FAILED`,SOLID_FROM_SHELL_FAILED:`SOLID_FROM_SHELL_FAILED`,FIX_SELF_INTERSECTION_FAILED:`FIX_SELF_INTERSECTION_FAILED`,ELLIPSE_RADII:`ELLIPSE_RADII`,FUSE_ALL_EMPTY:`FUSE_ALL_EMPTY`,FILLET_NO_EDGES:`FILLET_NO_EDGES`,CHAMFER_NO_EDGES:`CHAMFER_NO_EDGES`,CHAMFER_ANGLE_NO_EDGES:`CHAMFER_ANGLE_NO_EDGES`,CHAMFER_ANGLE_BAD_DISTANCE:`CHAMFER_ANGLE_BAD_DISTANCE`,CHAMFER_ANGLE_BAD_ANGLE:`CHAMFER_ANGLE_BAD_ANGLE`,BEZIER_MIN_POINTS:`BEZIER_MIN_POINTS`,POLYGON_MIN_POINTS:`POLYGON_MIN_POINTS`,ZERO_LENGTH_EXTRUSION:`ZERO_LENGTH_EXTRUSION`,ZERO_TWIST_ANGLE:`ZERO_TWIST_ANGLE`,LOFT_EMPTY:`LOFT_EMPTY`,UNSUPPORTED_PROFILE:`UNSUPPORTED_PROFILE`,UNKNOWN_PLANE:`UNKNOWN_PLANE`,NULL_SHAPE_INPUT:`NULL_SHAPE_INPUT`,INVALID_FILLET_RADIUS:`INVALID_FILLET_RADIUS`,INVALID_CHAMFER_DISTANCE:`INVALID_CHAMFER_DISTANCE`,INVALID_THICKNESS:`INVALID_THICKNESS`,ZERO_OFFSET:`ZERO_OFFSET`,NO_EDGES:`NO_EDGES`,NO_FACES:`NO_FACES`,DRAFT_NO_FACES:`DRAFT_NO_FACES`,DRAFT_INVALID_ANGLE:`DRAFT_INVALID_ANGLE`,DRAFT_NOT_3D:`DRAFT_NOT_3D`,DRAFT_FAILED:`DRAFT_FAILED`,FUSE_NOT_3D:`FUSE_NOT_3D`,CUT_NOT_3D:`CUT_NOT_3D`,INTERSECT_NOT_3D:`INTERSECT_NOT_3D`,FUSE_ALL_NOT_3D:`FUSE_ALL_NOT_3D`,CUT_ALL_NOT_3D:`CUT_ALL_NOT_3D`,LOFT_NOT_3D:`LOFT_NOT_3D`,SWEEP_NOT_3D:`SWEEP_NOT_3D`,REVOLUTION_NOT_3D:`REVOLUTION_NOT_3D`,FILLET_NOT_3D:`FILLET_NOT_3D`,CHAMFER_NOT_3D:`CHAMFER_NOT_3D`,CHAMFER_ANGLE_NOT_3D:`CHAMFER_ANGLE_NOT_3D`,CHAMFER_ANGLE_FAILED:`CHAMFER_ANGLE_FAILED`,CSG_NOT_3D:`CSG_NOT_3D`,SHELL_NOT_3D:`SHELL_NOT_3D`,OFFSET_NOT_3D:`OFFSET_NOT_3D`,NULL_SHAPE:`NULL_SHAPE`,NO_WRAPPER:`NO_WRAPPER`,WELD_NOT_SHELL:`WELD_NOT_SHELL`,SOLID_BUILD_FAILED:`SOLID_BUILD_FAILED`,OFFSET_NOT_WIRE:`OFFSET_NOT_WIRE`,UNKNOWN_SURFACE_TYPE:`UNKNOWN_SURFACE_TYPE`,UNKNOWN_CURVE_TYPE:`UNKNOWN_CURVE_TYPE`,SWEEP_START_NOT_WIRE:`SWEEP_START_NOT_WIRE`,SWEEP_END_NOT_WIRE:`SWEEP_END_NOT_WIRE`,STEP_EXPORT_FAILED:`STEP_EXPORT_FAILED`,STEP_EXPORT_CONFIGURED_FAILED:`STEP_EXPORT_CONFIGURED_FAILED`,STEP_FILE_READ_ERROR:`STEP_FILE_READ_ERROR`,STEP_EXPORT_CRASHED:`STEP_EXPORT_CRASHED`,STEP_EXPORT_UNSERIALIZABLE:`STEP_EXPORT_UNSERIALIZABLE`,STL_EXPORT_FAILED:`STL_EXPORT_FAILED`,STL_FILE_READ_ERROR:`STL_FILE_READ_ERROR`,STL_EXPORT_CRASHED:`STL_EXPORT_CRASHED`,STL_EXPORT_UNSERIALIZABLE:`STL_EXPORT_UNSERIALIZABLE`,STEP_IMPORT_FAILED:`STEP_IMPORT_FAILED`,STL_IMPORT_FAILED:`STL_IMPORT_FAILED`,IGES_EXPORT_FAILED:`IGES_EXPORT_FAILED`,IGES_IMPORT_FAILED:`IGES_IMPORT_FAILED`,DXF_IMPORT_FAILED:`DXF_IMPORT_FAILED`,OBJ_IMPORT_FAILED:`OBJ_IMPORT_FAILED`,THREEMF_IMPORT_FAILED:`THREEMF_IMPORT_FAILED`,PARAMETER_NOT_FOUND:`PARAMETER_NOT_FOUND`,INTERSECTION_FAILED:`INTERSECTION_FAILED`,SELF_INTERSECTION_FAILED:`SELF_INTERSECTION_FAILED`,STRAIGHT_SKELETON_FAILED:`STRAIGHT_SKELETON_FAILED`,CENTER_OF_MASS_FAILED:`CENTER_OF_MASS_FAILED`,COMPOUND_NO_FACES:`COMPOUND_NO_FACES`,COMPOUND_FACE_NOT_FOUND:`COMPOUND_FACE_NOT_FOUND`,FINDER_NOT_UNIQUE:`FINDER_NOT_UNIQUE`,HULL_EMPTY_INPUT:`HULL_EMPTY_INPUT`,HULL_FAILED:`HULL_FAILED`,HULL_DEGENERATE:`HULL_DEGENERATE`,HULL_NOT_3D:`HULL_NOT_3D`,MINKOWSKI_FAILED:`MINKOWSKI_FAILED`,MINKOWSKI_NULL_TOOL:`MINKOWSKI_NULL_TOOL`,MINKOWSKI_NOT_3D:`MINKOWSKI_NOT_3D`,POLYHEDRON_INSUFFICIENT_POINTS:`POLYHEDRON_INSUFFICIENT_POINTS`,POLYHEDRON_INSUFFICIENT_FACES:`POLYHEDRON_INSUFFICIENT_FACES`,POLYHEDRON_INVALID_INDEX:`POLYHEDRON_INVALID_INDEX`,POLYHEDRON_FAILED:`POLYHEDRON_FAILED`,VALIDATION_FAILED:`VALIDATION_FAILED`,ROOF_FAILED:`ROOF_FAILED`,MULTI_SWEEP_INSUFFICIENT_SECTIONS:`MULTI_SWEEP_INSUFFICIENT_SECTIONS`,MULTI_SWEEP_FAILED:`MULTI_SWEEP_FAILED`,GUIDED_SWEEP_FAILED:`GUIDED_SWEEP_FAILED`,SURFACE_GRID_TOO_SMALL:`SURFACE_GRID_TOO_SMALL`,SURFACE_GRID_JAGGED:`SURFACE_GRID_JAGGED`,SURFACE_FAILED:`SURFACE_FAILED`,ASSEMBLY_MATE_INVALID:`ASSEMBLY_MATE_INVALID`,ASSEMBLY_SOLVE_FAILED:`ASSEMBLY_SOLVE_FAILED`,ASSEMBLY_NOT_CONVERGED:`ASSEMBLY_NOT_CONVERGED`,BLUEPRINT_EMPTY_CURVES:`BLUEPRINT_EMPTY_CURVES`,COMPOUND_BLUEPRINT_EMPTY:`COMPOUND_BLUEPRINT_EMPTY`,GLB_IMPORT_FAILED:`GLB_IMPORT_FAILED`,FONT_FETCH_FAILED:`FONT_FETCH_FAILED`,FONT_PARSE_FAILED:`FONT_PARSE_FAILED`,NO_FONT_LOADED:`NO_FONT_LOADED`,CURVE2D_CONSTRUCTION_FAILED:`CURVE2D_CONSTRUCTION_FAILED`,CURVE2D_INVALID_RADIUS:`CURVE2D_INVALID_RADIUS`,CURVE2D_TRANSFORM_FAILED:`CURVE2D_TRANSFORM_FAILED`,CURVE2D_QUERY_FAILED:`CURVE2D_QUERY_FAILED`,CURVE2D_INTERSECTION_FAILED:`CURVE2D_INTERSECTION_FAILED`,CURVE2D_BRIDGE_FAILED:`CURVE2D_BRIDGE_FAILED`,CLONE_FAILED:`CLONE_FAILED`,SIMPLIFY_FAILED:`SIMPLIFY_FAILED`,TO_BREP_FAILED:`TO_BREP_FAILED`,UNSUPPORTED_CAPABILITY:`UNSUPPORTED_CAPABILITY`};function bo(e,t,n,r,i,a){let o={kind:e,code:t,message:n,cause:r};if(a){let e={...o,suggestion:a};return i?{...e,metadata:i}:e}return i?{...o,metadata:i}:o}function N(e,t,n,r,i){return bo(`KERNEL_OPERATION`,e,t,n,r,i)}function P(e,t,n,r,i){return bo(`VALIDATION`,e,t,n,r,i)}function xo(e,t,n,r,i){return bo(`TYPE_CAST`,e,t,n,r,i)}function So(e,t,n,r,i){return bo(`SKETCHER_STATE`,e,t,n,r,i)}function Co(e,t,n,r,i){return bo(`MODULE_INIT`,e,t,n,r,i)}function F(e,t,n,r,i){return bo(`COMPUTATION`,e,t,n,r,i)}function wo(e,t,n,r,i){return bo(`IO`,e,t,n,r,i)}function To(e,t,n,r,i){return bo(`QUERY`,e,t,n,r,i)}function Eo(e,t,n,r,i){return bo(`UNSUPPORTED`,e,t,n,r,i)}function Do(e,n,r){return(n<0||n>=e.length)&&i(r??`safeIndex`,`Index ${n} is out of bounds (array length ${e.length})`),t(e,n)}var Oo={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},ko=`standard`;function Ao(){return ko}function jo(e=ko){return Oo[e]}function Mo(e){ko=e}function No(e){return`makeLine2d`in e}var Po=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],Fo=Object.create(null),Io=Object.create(null);function Lo(){for(let e of Po)Fo[e]=0,Io[e]=0}Lo();function Ro(e){let t=performance.now();return()=>{Fo[e]=(Fo[e]??0)+(performance.now()-t),Io[e]=(Io[e]??0)+1}}function zo(){let e={};for(let t of Po)e[t]={totalMs:Fo[t]??0,count:Io[t]??0};return e}function Bo(){Lo()}var Vo;function Ho(){Vo=void 0}function Uo(e){return Vo??=typeof e.BooleanBatch==`function`,Vo}function Wo(e){return e===`commonFace`?1:e===`sameFace`?2:0}function Go(e,t,n={}){if(!Uo(e))return null;let r=Ro(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Wo(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function Ko(e,t,n,r={}){if(!Uo(e))return null;if(n.length===0)return t;let i=Ro(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Wo(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var qo=2147483647,Jo;function Yo(){Jo=void 0}function Xo(e){return Jo??=typeof e.MeasurementExtractor?.extract==`function`,Jo}function Zo(e,t,n=!1){if(Xo(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:Qo(e,t),area:$o(e,t),length:n?es(e,t):0,centerOfMass:ts(e,t),boundingBox:rs(e,t)}}function Qo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function $o(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function es(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function ts(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function ns(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function rs(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function is(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function as(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function os(e){return{volume:t=>Qo(e,t),area:t=>$o(e,t),length:t=>es(e,t),centerOfMass:t=>ts(e,t),linearCenterOfMass:t=>ns(e,t),boundingBox:t=>rs(e,t),distance:(t,n)=>is(e,t,n),classifyPointOnFace:(t,n,r,i)=>as(e,t,n,r,i),measureBulk:(t,n)=>Zo(e,t,n)}}var ss={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function cs(e,t,n){let r=e.TopologyExtractor.extract(t,ss[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var ls=new WeakMap;function us(e,t,n){let r=ls.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},ls.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,qo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function ds(e,t,n){return e.TopologyExtractor?cs(e,t,n):us(e,t,n)}var fs=new WeakMap;function ps(e){let t=fs.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),fs.set(e,t)}return t}function ms(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=ps(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function hs(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function gs(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function _s(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function vs(e,t){return e.IsSame(t)}function ys(e,t){return e.IsEqual(t)}function bs(e){return{iterShapes:(t,n)=>ds(e,t,n),iterShapeList:(t,n)=>{_s(e,t,n)},shapeType:t=>ms(e,t),isSame:(e,t)=>vs(e,t),isEqual:(e,t)=>ys(e,t),isValid:t=>hs(e,t),sew:(t,n)=>gs(e,t,n)}}var xs=.001;function Ss(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function Cs(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function ws(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function Ts(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function Es(e,t,n,r={}){let i=Ro(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);Ss(e,c,i),Cs(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,xs);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function Ds(e,t,n,r={}){let i=Ro(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);Ss(e,c,i),Cs(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,xs);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function Os(e,t,n,r={}){let i=Ro(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);Ss(e,c,i),Cs(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,xs);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function ks(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),Cs(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function As(e,t,n={}){let r=Go(e,t,n);if(r!==null)return r;let i=Ro(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??ws(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),Ss(e,s,r),Cs(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function js(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return Es(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return Es(e,js(e,n,r,s,a),js(e,n,s,i,a),{...a,simplify:!1})}function Ms(e,t,n={}){let r=js(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function Ns(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?Ms(e,n,r):As(e,n,r)}function Ps(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),Cs(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function Fs(e,t,n,r={}){if(n.length===0)return t;let i=Ko(e,t,n,r);if(i!==null)return i;let a=Ts(e,n),o=Ds(e,t,a,r);return a.delete(),o}function Is(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function Ls(e){return{fuse:(t,n,r)=>Es(e,t,n,r),cut:(t,n,r)=>Ds(e,t,n,r),intersect:(t,n,r)=>Os(e,t,n,r),section:(t,n,r)=>ks(e,t,n,r),fuseAll:(t,n)=>Ns(e,t,n),cutAll:(t,n,r)=>Fs(e,t,n,r),split:(t,n)=>Ps(e,t,n),checkBoolean:(t,n,r)=>Is(e,t,n,r,t=>hs(e,t))}}var Rs={fuse:0,cut:1,intersect:2};function zs(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(Rs[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Bs(e){return{booleanPipeline:(t,n,r)=>zs(e,t,n,r)??null}}function Vs(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function Hs(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function Us(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Ws(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=ds(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function Gs(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function Ks(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function qs(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Js(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Ys(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function Xs(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Zs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Qs(e){return{makeVertex:(t,n,r)=>Vs(e,t,n,r),makeEdge:(t,n,r)=>Hs(e,t,n,r),makeWire:t=>Us(e,t),makeWireFromMixed:t=>Xs(e,t),makeFace:(t,n)=>Ws(e,t,n),makeBox:(t,n,r)=>Gs(e,t,n,r),makeCylinder:(t,n,r,i)=>Ks(e,t,n,r,i),makeSphere:(t,n)=>qs(e,t,n),makeCone:(t,n,r,i,a)=>Js(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Zs(e,t,n,r,i),buildTriFace:(t,n,r)=>Ys(e,t,n,r)}}function $s(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function ec(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function tc(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=$s(i,t),s=$s(i,n),c=$s(i,o),l=Ys(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function nc(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=ec(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=x(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return tc(e,i,n)}function rc(e,t,n,r){return tc(e,{points:t,faces:n},r)}function ic(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=x(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return tc(e,r,n)}function ac(e){return{hull:(t,n)=>nc(e,t,n),hullFromPoints:(t,n)=>ic(e,t,n),buildSolidFromFaces:(t,n,r)=>rc(e,t,n,r)}}function oc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function sc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function cc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function lc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function uc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function dc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function fc(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function pc(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function mc(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function hc(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function gc(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=hc(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function _c(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function vc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function yc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function bc(e,t){return e.BRepToolsWrapper.Write(t)}function xc(e,t){return e.BRepToolsWrapper.Read(t)}function Sc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function Cc(e,t){try{t.delete()}catch{}}function wc(e,t,n){let r=oc(e,[0,0,0],[t,0,0]),i=oc(e,[t,0,0],[t,n,0]),a=oc(e,[t,n,0],[0,n,0]),o=oc(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function Tc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function Ec(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function Dc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function Oc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function kc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function Ac(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function jc(e){return{makeLineEdge:(t,n)=>oc(e,t,n),makeCircleEdge:(t,n,r)=>sc(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>cc(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>lc(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>dc(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>fc(e,t,n,r,i,a,o,s),makeBezierEdge:t=>pc(e,t),makeTangentArc:(t,n,r)=>uc(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>mc(e,t,n,r,i,a,o),makeCompound:t=>_c(e,t),makeBoxFromCorners:(t,n)=>vc(e,t,n),makeRectangle:(t,n)=>wc(e,t,n),solidFromShell:t=>yc(e,t),makeEllipsoid:(t,n,r)=>gc(e,t,n,r),toBREP:t=>bc(e,t),fromBREP:t=>xc(e,t),exportSTEPAssembly:(t,n)=>Sc(e,t,n??{}),dispose:t=>{Cc(e,t)},createPoint3d:(t,n,r)=>Tc(e,t,n,r),createDirection3d:(t,n,r)=>Ec(e,t,n,r),createVector3d:(t,n,r)=>Dc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Oc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>kc(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Ac(e,t,n,r,i,a,o,s,c,l)}}function Mc(e,t,n,r){let i=Ro(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function Nc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function Pc(e,t,n=!1,r,i){let a=Ro(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function Fc(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function Ic(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var Lc,Rc;function zc(){Lc=void 0}function Bc(){Rc=void 0}function Vc(e){return Lc??=typeof e.LoftBatch==`function`,Lc}function Hc(e){return Rc??=typeof e.ExtrudeBatch==`function`,Rc}function Uc(e,t){if(t.length===0)return[];if(Vc(e)){let n=Ro(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Pc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Wc(e,t){if(t.length===0)return[];if(Hc(e)){let n=Ro(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Mc(e,t.face,t.direction,t.length))}function Gc(e){return{extrude:(t,n,r)=>Mc(e,t,n,r),revolve:(t,n,r)=>Nc(e,t,n,r),loft:(t,n,r,i)=>Pc(e,t,n,r,i),sweep:(t,n,r)=>Fc(e,t,n,r??{}),simplePipe:(t,n)=>Ic(e,t,n),loftBatch:t=>Uc(e,t),extrudeBatch:t=>Wc(e,t)}}function Kc(e,t,n,r){let i=Ro(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function qc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Jc(e,t,n,r,i=.001){let a=Ro(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Yc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function Xc(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function Zc(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function Qc(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var $c,el;function tl(){$c=void 0}function nl(){el=void 0}function rl(e){return $c??=typeof e.ShellBatch==`function`,$c}function il(e){return el??=typeof e.FilletBatch==`function`,el}function al(e,t){if(t.length===0)return[];if(rl(e)){let n=Ro(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Jc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function ol(e,t){if(t.length===0)return[];if(il(e)){let n=Ro(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return Kc(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function sl(e){return{fillet:(t,n,r)=>Kc(e,t,n,r),chamfer:(t,n,r)=>qc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Xc(e,t,n,r,i),shell:(t,n,r,i)=>Jc(e,t,n,r,i),thicken:(t,n)=>Yc(e,t,n),offset:(t,n,r)=>Qc(e,t,n,r),offsetWire2D:(t,n,r)=>Zc(e,t,n,r),shellBatch:t=>al(e,t),filletBatch:t=>ol(e,t)}}var cl;function ll(){cl=void 0}function ul(e){return cl??=typeof e.TransformBatch==`function`,cl}function dl(e,t){if(t.length===0)return[];let n=Ro(`transform`);try{if(ul(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return ml(e,t.shape,t.x,t.y,t.z);case`rotate`:return hl(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return _l(e,t.shape,[...t.center],t.factor);case`mirror`:return gl(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function fl(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function pl(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!1,!1);try{return r.ModifiedShape(t)}finally{r.delete()}}function ml(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=fl(e,t,a);return a.delete(),o.delete(),s}function hl(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=fl(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function gl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=fl(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function _l(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=fl(e,t,i);return i.delete(),a.delete(),o}function vl(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function yl(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function bl(e){return{transform:(t,n)=>fl(e,t,n),locate:(t,n)=>pl(e,t,n),translate:(t,n,r,i)=>ml(e,t,n,r,i),rotate:(t,n,r,i)=>hl(e,t,n,r,i),mirror:(t,n,r)=>gl(e,t,n,r),scale:(t,n,r)=>_l(e,t,n,r),transformBatch:t=>dl(e,t),generalTransform:(t,n,r,i)=>vl(e,t,n,r,i),simplify:t=>yl(e,t)}}function xl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function Sl(e,t,n){let r=Ro(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=xl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:xl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?xl(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function Cl(e,t,n,r){let i=Ro(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=xl(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function wl(e){return{mesh:(t,n)=>Sl(e,t,n),meshEdges:(t,n,r)=>Cl(e,t,n,r)}}var Tl=0;function El(e,t){return`${e}_${++Tl}.${t}`}function Dl(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=El(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function Ol(e,t,n=!1){let r=El(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function kl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=El(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function Al(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=El(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function jl(e,t){let n=El(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function Ml(e,t){let n=El(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function Nl(e){return{exportSTEP:t=>Dl(e,t),exportSTL:(t,n)=>Ol(e,t,n),importSTEP:t=>Al(e,t),importSTL:t=>jl(e,t),exportIGES:t=>kl(e,t),importIGES:t=>Ml(e,t)}}function Pl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function Fl(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var Il=new WeakMap;function Ll(e,t){let n=Il.get(e);n||(n=Fl(e),Il.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function Rl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function zl(e,t){return e.BRepTools.OuterWire(t)}function Bl(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Vl(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function Hl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Ul(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function Wl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function Gl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function Kl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function ql(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Jl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Yl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function Xl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function Zl(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function Ql(e,t,n){switch(n??$l(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function $l(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function eu(e,t,n){return e.shapeHashCode(t,n)}function tu(e,t){return t.IsNull()}function nu(e,t){return t.Reversed()}function ru(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function iu(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function au(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function ou(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function su(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function cu(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function lu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=cu(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function uu(e,t){return t.get().UReversed()}function du(e){return{vertexPosition:t=>Pl(e,t),surfaceType:t=>Ll(e,t),uvBounds:t=>Rl(e,t),outerWire:t=>zl(e,t),surfaceNormal:(t,n,r)=>Bl(e,t,n,r),pointOnSurface:(t,n,r)=>Vl(e,t,n,r),uvFromPoint:(t,n)=>Hl(e,t,n),projectPointOnFace:(t,n)=>Ul(e,t,n),curveTangent:(t,n)=>Wl(e,t,n),curveParameters:t=>Gl(e,t),shapeOrientation:t=>Zl(e,t),downcast:(t,n)=>Ql(e,t,n),copyShape:t=>Ql(e,t),hashCode:(t,n)=>eu(e,t,n),isNull:t=>tu(e,t),hasTriangulation:t=>ru(e,t),meshShape:(t,n,r)=>{iu(e,t,n,r)},getBezierPenultimatePole:t=>au(e,t),createCurveAdaptor:t=>ou(e,t),reverseShape:t=>nu(e,t),curvePointAtParam:(t,n)=>Kl(e,t,n),curveIsClosed:t=>ql(e,t),curveIsPeriodic:t=>Jl(e,t),curvePeriod:t=>Yl(e,t),curveType:t=>Xl(e,t),getSurfaceCylinderData:t=>su(e,t),getSurfaceAxis:t=>lu(e,t),reverseSurfaceU:t=>uu(e,t)}}function fu(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function pu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function mu(e){return{getNurbsCurveData:t=>fu(e,t),getNurbsSurfaceData:t=>pu(e,t)}}function hu(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function gu(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function _u(e){return{interpolatePoints:(t,n)=>hu(e,t,n??{}),approximatePoints:(t,n)=>gu(e,t,n??{})}}function vu(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function yu(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function bu(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function xu(e){return{healSolid:t=>vu(e,t),healFace:t=>yu(e,t),healWire:(t,n)=>bu(e,t,n)}}var Su={modified:new Map,generated:new Map,deleted:new Set};function Cu(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function wu(e,t){try{let n=Cu(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=Cu(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function Tu(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function Eu(e,t,n,r,i){if(r.length===0)return Su;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return wu(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,Tu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,Tu(e,l,i))}return{modified:o,generated:s,deleted:c}}function Du(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?Su:Eu(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function Ou(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:Eu(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function ku(e,t,n,r,i){return{shape:t.Shape(),evolution:Eu(e,t,n,r,i)}}function Au(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=Du(e,t,s,a,o);return s.delete(),l}function ju(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=Du(e,t,s,r,i);return s.delete(),d}function Mu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=Du(e,t,o,i,a);return o.delete(),u}function Nu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=Du(e,t,o,i,a);return o.delete(),c}function Pu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=Du(e,t,s,a,o);return s.delete(),c}function Fu(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function Iu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);Ss(e,s,a.optimisation),Cs(s,a.fuzzyValue),s.Build(o);let c=Fu(s),l=Ou(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Lu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);Ss(e,s,a.optimisation),Cs(s,a.fuzzyValue),s.Build(o);let c=Fu(s),l=Ou(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Ru(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);Ss(e,s,a.optimisation),Cs(s,a.fuzzyValue),s.Build(o);let c=Fu(s),l=Ou(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function zu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=ku(e,o,t,i,a);return o.delete(),c}function Bu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=ku(e,o,t,i,a);return o.delete(),u}function Vu(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=ku(e,s,t,i,a);return s.delete(),u}function Hu(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=ku(e,a,t,r,i);return a.delete(),s}function Uu(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=ku(e,o,t,r,i);return o.delete(),c}function Wu(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),ku(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Gu(e){return{translateWithHistory:(t,n,r,i,a,o)=>Au(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>ju(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Mu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Nu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Pu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Iu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Lu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Ru(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>zu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Bu(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Vu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Hu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Uu(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Wu(e,t,n,r,i,a,o,s)}}function Ku(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function qu(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Ju(e,t,n,r,i){return Du(e,t,n,r,i)}function Yu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function Xu(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Yu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function Zu(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function Qu(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function $u(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function ed(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function td(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function nd(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function rd(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function id(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function ad(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function od(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function sd(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function cd(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=ld(e,d,f,p);a.Add(h);let g=ld(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function ld(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function ud(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function dd(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function fd(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function pd(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function md(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function hd(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=pd();if(h>=1e-15){m.Divide(h);let e=md(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:gd(o,s,e.du1,e.dv1),minDirection:gd(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function gd(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function _d(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function vd(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function yd(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function bd(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function xd(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function Sd(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=El(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function Cd(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=El(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function wd(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=El(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function Td(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?Cd(e,t):wd(e,t)}function Ed(e){return{composeTransform:t=>qu(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Ju(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Xu(e,t,n,r??{}),loftAdvanced:(t,n)=>Zu(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>Qu(e,t,n,r),revolveVec:(t,n,r,i)=>$u(e,t,n,r,i),positionOnCurve:(t,n,r)=>nd(e,t,n,r),linearPattern:(t,n,r,i)=>ed(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>td(e,t,n,r,i,a),makeNonPlanarFace:t=>rd(e,t),addHolesInFace:(t,n)=>id(e,t,n),removeHolesFromFace:t=>ad(e,t),makeFaceOnSurface:(t,n)=>od(e,t,n),bsplineSurface:(t,n,r)=>sd(e,t,n,r),triangulatedSurface:(t,n,r)=>cd(e,t,n,r),sewAndSolidify:(t,n)=>ud(e,t,n),fixShape:t=>dd(e,t),fixSelfIntersection:t=>fd(e,t),surfaceCurvature:(t,n,r)=>hd(e,t,n,r),surfaceCenterOfMass:t=>_d(e,t),createDistanceQuery:t=>vd(e,t),projectEdges:(t,n,r,i)=>yd(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>bd(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Ku(e,t,n,r),createXCAFDocument:t=>xd(e,t),writeXCAFToSTEP:(t,n)=>Sd(e,t,n??{}),exportSTEPConfigured:(t,n)=>Td(e,t,n??{})}}var Dd=()=>{};function Od(e){return e}function kd(e){let t=Od(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function Ad(e){return e}function jd(e,t){return{x:e,y:t}}function Md(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function Nd(e,t){return{x:e,y:t}}function Pd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Dd}}function Fd(e){return e}function Id(e){return e}function Ld(e,t,n,r){return te(e,t,n,r)}function Rd(e,t,n,r){return ne(e,t,n,r)}function zd(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function Bd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:ae(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Vd(e){return oe(e)}function Hd(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Ud(e,t){return S(Od(e),t)}function Wd(e,t){return{point:S(Od(e),t),tangent:C(Od(e),t)}}function Gd(e){return w(Od(e))}function Kd(e){return ee(kd(e))}function qd(e,t,n){return{__bk2d:`trimmed`,basis:Od(e),tStart:t,tEnd:n}}function Jd(e){return JSON.parse(JSON.stringify(e))}function Yd(e,t){let n=Od(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return Hd(i)}function Xd(e,t,n){return se(Od(e),t,n)}function Zd(e,t,n,r){return ce(Od(e),t,n,r)}function Qd(e,t,n,r){return le(Od(e),t,n,r)}function $d(e,t,n){return ue(Od(e),t,n)}function ef(e,t,n,r,i){return de(Od(e),t,n,r,i)}function tf(e,t,n,r,i,a){return ff(e,af(t,n,r,i,a))}function nf(e,t,n){return{m:e,tx:t,ty:n,delete:Dd}}function rf(){return nf([1,0,0,0,1,0,0,0,1],0,0)}function af(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return rf();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return nf(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function of(e,t){return nf([1,0,0,0,1,0,0,0,1],e,t)}function sf(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return nf(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return nf([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function cf(e,t,n){let r=Math.cos(e),i=Math.sin(e);return nf([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function lf(e,t,n){return nf([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function uf(e,t,n){e.tx=t,e.ty=n}function df(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function ff(e,n){let r=Od(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function pf(e,t,n){let r=fe(Od(e),Od(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function mf(e,t,n){let r=Od(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function hf(e,t,n,r,i,a){let o=Od(e),s=Od(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=mf(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=mf(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function gf(e,n,r,i){let a=Od(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return Hd(l,{degMax:s})}function _f(e){let n=kd(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return _f(gf(e,1e-6,`C2`,10));let r=w(Od(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function vf(){return Ce()}function yf(e,t,n){we(Ad(e),Od(t),n)}function bf(e){let t=Ad(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function xf(e,t){let n=Ad(e),r=Ad(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function Sf(e,t){let n=Ad(e),r=Ad(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function Cf(e,t,n){let r=Ad(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function wf(e){let t=kd(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Tf(e){let t=kd(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Ef(e){let t=kd(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Df(e){let t=kd(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function Of(e){let t=kd(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function kf(e){return xe(Od(e))}function Af(e){return Se(e)}function jf(e,t){let n=Od(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Mf(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Nf(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Pf(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function Ff(e,n,r,i,a){let o=Od(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Mf(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=w(o),[l,u]=S(o,s.first),[d,f]=S(o,(s.first+s.last)/2),[p,m]=S(o,s.last);return Nf(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?Mf(e,t(n,0),t(n,1)):Pf(e,n)}let l=w(o),u=[];for(let e=0;e<=60;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return Pf(e,u)}function If(e,t,n){let r=Od(t),i=w(r),a=[];for(let e=0;e<=60;e++){let[t,o]=S(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return Pf(e,a)}function Lf(e,t){return e.BRep_Tool.Surface_2(t)}function Rf(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),Hd(o)}function zf(e,t){e.BRepLib.BuildCurves3d_2(t)}function Bf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Vf(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=ds(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function Hf(e){return{wrapCurve2dHandle:e=>Fd(e),createCurve2dAdaptor:e=>Id(e),createPoint2d:(e,t)=>jd(e,t),createDirection2d:(e,t)=>Md(e,t),createVector2d:(e,t)=>Nd(e,t),createAxis2d:(e,t,n,r)=>Pd(e,t,n,r),makeLine2d:(e,t,n,r)=>Ld(e,t,n,r),makeCircle2d:(e,t,n,r)=>Rd(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>zd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>Bd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Vd(e),makeBSpline2d:(e,t)=>Hd(e,t),evaluateCurve2d:(e,t)=>Ud(e,t),evaluateCurve2dD1:(e,t)=>Wd(e,t),getCurve2dBounds:e=>Gd(e),getCurve2dType:e=>Kd(e),trimCurve2d:(e,t,n)=>qd(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Jd(e),offsetCurve2d:(e,t)=>Yd(e,t),translateCurve2d:(e,t,n)=>Xd(e,t,n),rotateCurve2d:(e,t,n,r)=>Zd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Qd(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>$d(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>ef(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>tf(e,t,n,r,i,a),createIdentityGTrsf2d:()=>rf(),createAffinityGTrsf2d:(e,t,n,r,i)=>af(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>of(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>sf(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>cf(e,t,n),createScaleGTrsf2d:(e,t,n)=>lf(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{uf(e,t,n)},multiplyGTrsf2d:(e,t)=>{df(e,t)},transformCurve2dGeneral:(e,t)=>ff(e,t),intersectCurves2d:(e,t,n)=>pf(e,t,n),projectPointOnCurve2d:(e,t,n)=>mf(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>hf(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>gf(e,t,n,r),decomposeBSpline2dToBeziers:e=>_f(e),createBoundingBox2d:()=>vf(),addCurveToBBox2d:(e,t,n)=>{yf(e,t,n)},getBBox2dBounds:e=>bf(e),mergeBBox2d:(e,t)=>{xf(e,t)},isBBox2dOut:(e,t)=>Sf(e,t),isBBox2dOutPoint:(e,t,n)=>Cf(e,t,n),getCurve2dCircleData:e=>wf(e),getCurve2dEllipseData:e=>Tf(e),getCurve2dBezierPoles:e=>Ef(e),getCurve2dBezierDegree:e=>Df(e),getCurve2dBSplineData:e=>Of(e),serializeCurve2d:e=>kf(e),deserializeCurve2d:e=>Af(e),splitCurve2d:(e,t)=>jf(e,t),liftCurve2dToPlane:(t,n,r,i)=>Ff(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>If(e,t,n),extractSurfaceFromFace:t=>Lf(e,t),extractCurve2dFromEdge:(t,n)=>Rf(e,t,n),buildCurves3d:t=>{zf(e,t)},fixWireOnFace:(t,n,r)=>Bf(e,t,n,r),fillSurface:(t,n)=>Vf(e,t,n)}}function Uf(){let e=e=>()=>{throw new c(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw new c(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function Wf(e){return{draft:(t,n,r,i,a)=>Wu(e,t,n,r,i,a,[],1).shape}}var Gf=class{oc;kernelId=`occt`;capabilities=a;constructor(e){this.oc=e,Object.assign(this,Ls(e),Bs(e),ac(e),Qs(e),jc(e),Gc(e),sl(e),bl(e),wl(e),Nl(e),os(e),bs(e),du(e),mu(e),_u(e),xu(e),Gu(e),Ed(e),Hf(e),Wf(e),Uf())}},Kf=()=>{};function qf(e){return typeof e==`object`&&!!e&&e.__brepkit}function Jf(e,t){return{__brepkit:!0,type:e,id:t,delete:Kf,HashCode(e){return t%e},IsNull(){return!1}}}function I(e){return Jf(`solid`,e)}function Yf(e){return Jf(`face`,e)}function Xf(e){return Jf(`edge`,e)}function Zf(e){return Jf(`wire`,e)}function Qf(e){return Jf(`shell`,e)}function $f(e){let t=Jf(`compound`,e);return hp.has(e)?{...t,delete:()=>hp.delete(e)}:t}function ep(e){return Jf(`vertex`,e)}function L(e,t){if(!qf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function R(e){return Array.from(e)}function tp(e,t){if(!qf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function np(e,t,n){if(!qf(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=R(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function rp(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function ip(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function ap(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function op(e,t){if(!Array.isArray(e)||e.length<3)return t;let[n,r,i]=e;return typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(i)?[n,r,i]:t}function sp(e,t=[0,0,1],n=[0,0,0]){let r=op(t,[0,0,1]),i=r[0]===0&&r[1]===0&&r[2]===0?[0,0,1]:r,a=op(n,[0,0,0]),o=e*Math.PI/180,s=Math.cos(o),c=Math.sin(o),l=1-s,u=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),[d,f,p]=[i[0]/u,i[1]/u,i[2]/u],m=l*d*d+s,h=l*d*f-c*p,g=l*d*p+c*f,_=l*f*d+c*p,v=l*f*f+s,y=l*f*p-c*d,b=l*p*d-c*f,x=l*p*f+c*d,S=l*p*p+s,[C,w,ee]=a;return[m,h,g,C-(m*C+h*w+g*ee),_,v,y,w-(_*C+v*w+y*ee),b,x,S,ee-(b*C+x*w+S*ee),0,0,0,1]}function cp(e,t){let[n,r,i]=op(e,[0,0,0]);return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function lp(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function up(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function dp(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var fp=.01,pp=9e5;function mp(){return pp++}var hp=new Map,gp=new Set;function _p(e,t){gp.has(e)||(gp.add(e),console.warn(`brepkit: ${t}`))}function vp(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function yp(e){return e}function bp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function xp(e){return e}function Sp(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function Cp(e,t,n){let r=hp.get(t);return r?r.flatMap(t=>t.type===n?[t]:jp(e,t,n)):n===`solid`?R(e.getCompoundSolids(t)).map(I):n===`face`||n===`edge`||n===`vertex`||n===`wire`?R(e.getCompoundSolids(t)).map(I).flatMap(t=>jp(e,t,n)):[]}function wp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return R(e.getSolidShells(n)).map(Qf);case`face`:return R(e.getSolidFaces(n)).map(Yf);case`edge`:return R(e.getSolidEdges(n)).map(Xf);case`vertex`:return R(e.getSolidVertices(n)).map(ep);case`wire`:return R(e.getSolidFaces(n)).flatMap(t=>R(e.getFaceWires(t)).map(Zf));default:return[]}}function Tp(e,t,n){let r=R(e.getShellFaces(t)).map(Yf),i=new Set,a=[];for(let t of r)for(let r of jp(e,t,n)){let e=L(r);i.has(e)||(i.add(e),a.push(r))}return a}function Ep(e,t,n,r){return r===`shell`?[t]:r===`face`?R(e.getShellFaces(n)).map(Yf):r===`edge`||r===`vertex`?Tp(e,n,r):[]}function Dp(e,t,n,r){return r===`face`?[t]:r===`edge`?R(e.getFaceEdges(n)).map(Xf):r===`vertex`?R(e.getFaceVertices(n)).map(ep):r===`wire`?R(e.getFaceWires(n)).map(Zf):[]}function Op(e,n){let r=R(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(ep(e.makeVertex(t,n,r))))}}return a}function kp(e,t,n,r){return r===`wire`?[t]:r===`edge`?R(e.getWireEdges(n)).map(Xf):r===`vertex`?Op(e,n):[]}function Ap(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[ep(i),ep(a)]}return[]}function jp(e,t,n){let r=L(t);switch(t.type){case`compound`:return Cp(e,r,n);case`solid`:return wp(e,t,r,n);case`shell`:return Ep(e,t,r,n);case`face`:return Dp(e,t,r,n);case`wire`:return kp(e,t,r,n);case`edge`:return Ap(e,t,r,n);default:return[]}}function Mp(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function Np(e,t){if(qf(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function Pp(e,t,n){return qf(t)&&qf(n)&&t.id===n.id&&t.type===n.type}function Fp(e,t,n){return Pp(e,t,n)}function Ip(e,t,n){return t}function Lp(e,t,n){return qf(t)?t.id%n:0}function Rp(e,t){return!t||!qf(t)}function zp(e,t){let n=L(t);return e.getShapeOrientation(n)}function Bp(e,t){let n=tp(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function Vp(e,t,n){let r=L(t,`face`),i=L(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>Xf(e))}function Hp(e,t,n){let r=tp(t,`adjacentFaces`),i=L(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Yf(e))}function Up(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?R(e.getSolidFaces(n.id)):n.type===`shell`?R(e.getShellFaces(n.id)):[]}function Wp(e,t,n){let r=t.flatMap(t=>Up(e,t)),i=n??1e-7;try{return Qf(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return Qf(e.sewFaces(r,i))}function Gp(e){return{iterShapes:(t,n)=>jp(e,t,n),iterShapeList:(t,n)=>{Mp(e,t,n)},shapeType:t=>Np(e,t),isSame:(t,n)=>Pp(e,t,n),isEqual:(t,n)=>Fp(e,t,n),downcast:(t,n)=>Ip(e,t,n),copyShape:t=>Ip(e,t),hashCode:(t,n)=>Lp(e,t,n),isNull:t=>Rp(e,t),shapeOrientation:t=>zp(e,t),edgeToFaceMap:t=>Bp(e,t),sharedEdges:(t,n)=>Vp(e,t,n),adjacentFaces:(t,n)=>Hp(e,t,n),sew:(t,n)=>Wp(e,t,n)}}function Kp(e,t){return n(e.getVertexPosition(L(t,`vertex`)))}function qp(e,t){return e.getSurfaceType(L(t,`face`))}function Jp(e,n){let r=e.getSurfaceDomain(L(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Yp(e,t){return Zf(e.getFaceOuterWire(L(t,`face`)))}function Xp(e,t,r,i){return n(e.evaluateSurfaceNormal(L(t,`face`),r,i))}function Zp(e,t,r,i){return n(e.evaluateSurface(L(t,`face`),r,i))}function Qp(e,n,r){try{let i=e.projectPointOnSurface(L(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function $p(e,t,r){return n(e.projectPointOnSurface(L(t,`face`),r[0],r[1],r[2]),2)}function em(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=R(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=L(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function tm(e,n){let r=n;if(r.type===`wire`){let n=R(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(L(n,`edge`));return[t(i,0),t(i,1)]}function nm(e,r,i){let a=r;if(a.type===`wire`){let r=R(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(L(r,`edge`),i))}function rm(e,r){let i=r;if(i.type===`wire`){let r=R(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return im(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>rp(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return im(e.getEdgeVertices(L(r,`edge`)))}function im(e){return rp(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function am(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&R(e.getWireEdges(n.id)).length===1)return rm(e,t)}catch{}return!1}function om(e,t){try{if(am(e,t)){let n=tm(e,t);return n[1]-n[0]}}catch{}return 0}function sm(e,t){if(t.type===`wire`){let n=jp(e,t,`edge`)[0];return n?e.getEdgeCurveType(L(n,`edge`)):`LINE`}return e.getEdgeCurveType(L(t,`edge`))}function cm(e,t,n){let r=L(t,`edge`);return Xf(e.curveDegreeElevate(r,n))}function lm(e,t,n,r){let i=L(t,`edge`);return Xf(e.curveKnotInsert(i,n,r))}function um(e,t,n,r){let i=L(t,`edge`);return Xf(e.curveKnotRemove(i,n,r))}function dm(e,n,r){let i=L(n,`edge`),a=e.curveSplit(i,r);return[Xf(t(a,0)),Xf(t(a,1))]}function fm(e,t,n,r,i,a,o,s,c,l){return Yf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function pm(e,t,n,r){let i=L(t,`face`);return Yf(e.untrimFace(i,n,r))}function mm(e,t){return t}function hm(e,t){let r=Gm(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function gm(e,t){if(qf(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function _m(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(L(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function vm(e,t){return t}function ym(e,n,r,i,a){a!==void 0&&_p(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=L(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function bm(e,t,n,r){let i=tp(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function xm(e,t,n,r){let i=tp(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function Sm(e,t,n,r){let i=tp(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Yf(e))}function Cm(e,t,n){let r=tp(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function wm(e,t,r,i,a){let o=L(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=rp(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(Xf(e.makeLineEdge(i,a,0,o,s,0)))}let r=mp();return hp.set(r,n),$f(r)},b=()=>{let e=mp();return hp.set(e,[]),$f(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function Tm(e,t){let n=L(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function Em(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(L(t,`face`)))}function Dm(e){return{vertexPosition:t=>Kp(e,t),surfaceType:t=>qp(e,t),uvBounds:t=>Jp(e,t),outerWire:t=>Yp(e,t),surfaceNormal:(t,n,r)=>Xp(e,t,n,r),pointOnSurface:(t,n,r)=>Zp(e,t,n,r),uvFromPoint:(t,n)=>Qp(e,t,n),projectPointOnFace:(t,n)=>$p(e,t,n),curveTangent:(t,n)=>em(e,t,n),curveParameters:t=>tm(e,t),curvePointAtParam:(t,n)=>nm(e,t,n),curveIsClosed:t=>rm(e,t),curveIsPeriodic:t=>am(e,t),curvePeriod:t=>om(e,t),curveType:t=>sm(e,t),curveDegreeElevate:(t,n)=>cm(e,t,n),curveKnotInsert:(t,n,r)=>lm(e,t,n,r),curveKnotRemove:(t,n,r)=>um(e,t,n,r),curveSplit:(t,n)=>dm(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>fm(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>pm(e,t,n,r),createCurveAdaptor:t=>mm(e,t),getBezierPenultimatePole:t=>hm(e,t),getSurfaceCylinderData:t=>gm(e,t),getSurfaceAxis:t=>_m(e,t),reverseSurfaceU:t=>vm(e,t),classifyPointOnFace:(t,n,r,i)=>ym(e,t,n,r,i),classifyPointRobust:(t,n,r)=>bm(e,t,n,r),classifyPointWinding:(t,n,r)=>xm(e,t,n,r),detectSmallFeatures:(t,n,r)=>Sm(e,t,n,r),recognizeFeatures:(t,n)=>Cm(e,t,n),projectEdges:(t,n,r,i)=>wm(e,t,n,r,i),getNurbsCurveData:t=>Tm(e,t),getNurbsSurfaceData:t=>Em(e,t)}}function Om(e,t,n){if(Array.isArray(n)&&n.length===16)return Vm(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function km(e,t,n,r,i){return Vm(e,t,ap(n,r,i))}function Am(e,t,n,r,i){return Vm(e,t,sp(n,r,i))}function jm(e,t,n,r){let i=t;return i.type===`solid`?I(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):Vm(e,t,up(n,r))}function Mm(e,t,n,r){return Vm(e,t,cp(n,r))}function Nm(e,t,n,r,i){return Vm(e,t,lp(n,r))}function Pm(e,t,n,r){return Vm(e,t,lp(n,r))}function Fm(e,t,n,r){let{point:i,tangent:a}=em(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return km(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=Am(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=Am(e,p,n,t)}return km(e,p,i[0],i[1],i[2])}function Im(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(km(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function Lm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(Am(e,t,i*s,r,n));return o}function Rm(e,t,n,r,i,a,o,s){return $f(e.gridPattern(tp(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function zm(e,t){return t.map(t=>{switch(t.type){case`translate`:return km(e,t.shape,t.x,t.y,t.z);case`rotate`:return Am(e,t.shape,t.angle,t.axis,t.center);case`scale`:return Mm(e,t.shape,t.center,t.factor);case`mirror`:return jm(e,t.shape,t.origin,t.normal)}})}function Bm(e){return{transform:(t,n)=>Om(e,t,n),locate:(t,n)=>Om(e,t,n),translate:(t,n,r,i)=>km(e,t,n,r,i),rotate:(t,n,r,i)=>Am(e,t,n,r,i),mirror:(t,n,r)=>jm(e,t,n,r),scale:(t,n,r)=>Mm(e,t,n,r),generalTransform:(t,n,r,i)=>Nm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>Pm(e,t,n,r),positionOnCurve:(t,n,r)=>Fm(e,t,n,r),linearPattern:(t,n,r,i)=>Im(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Lm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>Rm(e,t,n,r,i,a,o,s),transformBatch:t=>zm(e,t)}}function Vm(e,t,n){let r=t;if(!qf(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),I(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Yf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),Zf(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),Xf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Hm(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function Um(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=Am(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=Am(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=km(e,i,n[0],n[1],n[2])),i}function Wm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=jp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=L(i,`face`),o=0;for(let t of n){let n=L(t,`face`);try{let t=e.faceArea(n,fp);t>o&&(o=t,a=n)}catch{}}r=a}else r=L(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function Gm(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function Km(e,t){if(!qf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function qm(e,t){if(!qf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Jm(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(L(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(L(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Ym(e,t){return t}function Xm(e,t,n){return t}function Zm(e,t,n){let r=tp(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Qm(e,t,n){let r=tp(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function $m(e,t){let n=tp(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function eh(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function th(e,t){return t}function nh(e,t){if(!qf(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function rh(e){return{isValid:t=>Km(e,t),isValidStrict:t=>qm(e,t),healSolid:t=>Jm(e,t),healFace:t=>Ym(e,t),healWire:(t,n)=>Xm(e,t,n),fixShape:t=>eh(e,t),fixSelfIntersection:t=>th(e,t),mergeCoincidentVertices:(t,n)=>Zm(e,t,n),removeDegenerateEdges:(t,n)=>Qm(e,t,n),fixFaceOrientations:t=>$m(e,t),validationDetails:t=>nh(e,t)}}function ih(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function ah(e,t){return t.type===`compound`?R(e.getCompoundSolids(t.id)).length===0:!1}function oh(e){return $f(e.makeCompound([]))}function sh(e,t,n,r){if(r&&vp(r)&&_p(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),ah(e,t))return n;if(ah(e,n))return t;let i=tp(t,`fuse`),a=n;if(a.type===`compound`){let t=R(e.getCompoundSolids(a.id)),n=i;for(let r of t)n=e.fuse(n,r);return I(n)}return I(e.fuse(i,tp(n,`fuse`)))}function ch(e,t,n,r){if(r&&vp(r)&&_p(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),ah(e,t))return oh(e);if(ah(e,n))return t;let i=tp(t,`cut`),a=n;if(a.type===`compound`){let t=R(e.getCompoundSolids(a.id)),n=i;for(let r of t)try{n=e.cut(n,r)}catch(t){if(ih(t))return oh(e);throw t}return I(n)}try{return I(e.cut(i,tp(n,`cut`)))}catch(t){if(ih(t))return oh(e);throw t}}function lh(e,t,n,r){if(r&&vp(r)&&_p(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),ah(e,t)||ah(e,n))return oh(e);try{return I(e.intersect(tp(t,`intersect`),tp(n,`intersect`)))}catch(t){if(ih(t))return oh(e);throw t}}function uh(e,n,r,i){let{point:a,normal:o}=Wm(e,r),s=qf(n)&&n.type===`solid`?n.id:L(n,`solid`),c=R(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return $f(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=R(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(Zf(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=mp();return hp.set(d,l),$f(d)}function dh(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...R(e.getCompoundSolids(n.id))):t.push(tp(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return I(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(sh(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function fh(e,t,n,r){if(n.length===0)return t;if(n.length===1)return ch(e,t,n[0],r);let i=tp(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...R(e.getCompoundSolids(n.id))):a.push(tp(t,`cutAll`))}return a.length===0?t:I(e.compoundCut(i,new Uint32Array(a)))}function ph(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Wm(e,n[0]),a=R(e.split(L(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return $f(e.makeCompound(a))}function mh(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function hh(e,t,n,r,i){let a=[];return(!qf(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!qf(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function gh(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=R(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return I(e.convexHull(i))}function _h(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return I(e.convexHull(r))}function vh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return I(e.importIndexedMesh(a,o))}function yh(e){return{fuse:(t,n,r)=>sh(e,t,n,r),cut:(t,n,r)=>ch(e,t,n,r),intersect:(t,n,r)=>lh(e,t,n,r),section:(t,n,r)=>uh(e,t,n,r),fuseAll:(t,n)=>dh(e,t,n),cutAll:(t,n,r)=>fh(e,t,n,r),split:(t,n)=>ph(e,t,n),meshBoolean:(t,n,r,i,a,o)=>mh(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>hh(e,t,n,r,t=>Km(e,t)),hull:(t,n)=>gh(e,t,n),hullFromPoints:(t,n)=>_h(e,t,n),buildSolidFromFaces:(t,n,r)=>vh(e,t,n,r)}}function bh(e,t,n,r){return ep(e.makeVertex(t,n,r))}function xh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return jh(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(qf(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function Sh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of R(e.getWireEdges(t.id)))n.push(r);else n.push(L(r,`edge`))}return Zf(e.makeWire(n,!0))}function Ch(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):L(t,`wire`);return Yf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function wh(e,t,n,r){return I(e.makeBox(t,n,r))}function Th(e,t,n){return Yf(e.makeRectangle(t,n))}function Eh(e,t,n,r,i){let a=I(e.makeCylinder(t,n));return Hm(r,i)?Um(e,a,r,i):a}function Dh(e,t,n){let r=I(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?km(e,r,n[0],n[1],n[2]):r}function Oh(e,t,n,r,i,a){let o=I(e.makeCone(t,n,r));return Hm(i,a)?Um(e,o,i,a):o}function kh(e,t,n,r,i){let a=I(e.makeTorus(t,n,32));return Hm(r,i)?Um(e,a,r,i):a}function Ah(e,t,n,r){let i=Math.max(t,n,r);return Nm(e,Dh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function jh(e,t,n){return Xf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Mh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return Xf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function Nh(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return Xf(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return sg(e,t,n,r,i,a)}function Ph(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function Fh(e,t,n,r){let i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return jh(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=Ph(p,m,h,g,_,v);if(!y)return jh(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return Xf(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function Ih(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return Xf(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return Xf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function Lh(e,t,n,r,i,a,o,s){return cg(e,t,n,r,i,a,o,s)}function Rh(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return Xf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function zh(e,t,n,r){return Xf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Bh(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return Sh(e,[$h(e,p)])}function Vh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of R(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return Zf(e.makeWire(n,!1))}function Hh(e,t){let n=t.filter(qf);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return $f(e.makeCompound(n.map(e=>e.id)));let r=mp();return hp.set(r,n),$f(r)}function Uh(e,t,n){let r=wh(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?km(e,r,i,a,o):r}function Wh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),I(n.id)}catch{}return I(e.solidFromShell(n.id))}return I(e.solidFromShell(L(t,`shell`)))}function Gh(e,t){return Ch(e,t,!1)}function Kh(e,t,n){let r=n.map(e=>L(e,`wire`));return Yf(e.addHolesToFace(L(t,`face`),r))}function qh(e,t){return Yf(e.removeHolesFromFace(L(t,`face`)))}function Jh(e,t,n){return Ch(e,n,!1)}function Yh(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Yf(e.interpolateSurface(i,n,r,a,o))}catch{return Xh(e,t,n,r)}}function Xh(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=Zh(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=Zh(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return Wp(e,a,1e-6)}function Zh(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return Ch(e,Sh(e,[jh(e,t,n),jh(e,n,r),jh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Qh(e,t,n){let r=t.map(e=>L(e,`face`));return I(e.sewFaces(r,n))}function $h(e,n,r){if(r?.tolerance!==void 0&&_p(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return jh(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return Xf(e.interpolatePoints(a,i))}function eg(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return Xf(e.approximateCurveLspia(a,r,o,i,100))}function tg(e,t,n,r){return{x:t,y:n,z:r}}function ng(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function rg(e,t,n,r){return{x:t,y:n,z:r}}function ig(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function ag(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function og(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function sg(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return Xf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function cg(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return Xf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function lg(e){return{makeVertex:(t,n,r)=>bh(e,t,n,r),makeEdge:(t,n,r)=>xh(e,t,n,r),makeWire:t=>Sh(e,t),makeWireFromMixed:t=>Vh(e,t),makeFace:(t,n)=>Ch(e,t,n),makeBox:(t,n,r)=>wh(e,t,n,r),makeRectangle:(t,n)=>Th(e,t,n),makeCylinder:(t,n,r,i)=>Eh(e,t,n,r,i),makeSphere:(t,n)=>Dh(e,t,n),makeCone:(t,n,r,i,a)=>Oh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>kh(e,t,n,r,i),makeEllipsoid:(t,n,r)=>Ah(e,t,n,r),makeLineEdge:(t,n)=>jh(e,t,n),makeCircleEdge:(t,n,r)=>Mh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Nh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Fh(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>Ih(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Lh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Rh(e,t),makeTangentArc:(t,n,r)=>zh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Bh(e,t,n,r,i,a,o),makeCompound:t=>Hh(e,t),makeBoxFromCorners:(t,n)=>Uh(e,t,n),solidFromShell:t=>Wh(e,t),makeNonPlanarFace:t=>Gh(e,t),addHolesInFace:(t,n)=>Kh(e,t,n),removeHolesFromFace:t=>qh(e,t),makeFaceOnSurface:(t,n)=>Jh(e,t,n),bsplineSurface:(t,n,r)=>Yh(e,t,n,r),triangulatedSurface:(t,n,r)=>Xh(e,t,n,r),buildTriFace:(t,n,r)=>Zh(e,t,n,r),sewAndSolidify:(t,n)=>Qh(e,t,n),interpolatePoints:(t,n)=>$h(e,t,n),approximatePoints:(t,n)=>eg(e,t,n),createPoint3d:(t,n,r)=>tg(e,t,n,r),createDirection3d:(t,n,r)=>ng(e,t,n,r),createVector3d:(t,n,r)=>rg(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>ig(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>ag(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>og(e,t,n,r,i,a,o,s,c,l)}}function ug(e,t,n,r){let i=tp(t,`fillet`),a=n.map(e=>L(e,`edge`));if(typeof r==`number`)return I(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return I(e.filletVariable(i,JSON.stringify(o)))}function dg(e,t,n,r){let i=tp(t,`chamfer`),a=n.map(e=>L(e,`edge`));if(typeof r==`number`)return I(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?I(e.chamferAsymmetric(i,a,t,n)):(_p(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),I(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(_p(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return I(s)}function fg(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=tp(t,`chamferDistAngle`),s=n.map(e=>L(e,`edge`));return typeof e.chamferAsymmetric==`function`?I(e.chamferAsymmetric(o,s,r,a)):(_p(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),I(e.chamfer(o,s,(r+a)/2)))}function pg(e,n){let r=R(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function mg(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function hg(e,t,n){try{let r=pg(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=pg(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function gg(e,t,n,r){if(r.has(t))return t;let i=mg(e,t,n);if(i!==null)return i;let a=hg(e,t,n);return a===null?t:a}function _g(e,t,n,r,i){i!==void 0&&_p(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=tp(t,`shell`),o=R(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>gg(e,L(t,`face`),o,s));return I(e.shell(a,r,c))}function vg(e,t,n){let r=t;if(r.type===`face`)return I(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function yg(e,t,n,r){r!==void 0&&_p(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return I(e.thicken(i.id,n));let a=tp(t,`offset`);return I(e.offsetSolidV2(a,n))}function bg(e,t,n){let r=tp(t,`filletVariable`);return I(e.filletVariable(r,n))}function xg(e,t,n,r,i,a){let o=tp(t,`draft`),s=n.map(e=>L(e,`face`));return I(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function Sg(e,t,n){let r=tp(t,`defeature`),i=n.map(e=>L(e,`face`));return I(e.defeature(r,i))}function Cg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function wg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Zf(e.offsetWire2DWithJoin(L(n,`wire`),r,Cg(i)));let a=jp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(L(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return Zf(e.makePolygonWire(c))}function Tg(e,t){if(t.type===`solid`)try{e.healSolid(L(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function Eg(e,t){let n=t,r=e.reverseShape(n.id);return Jf(n.type,r)}function Dg(e){return{fillet:(t,n,r)=>ug(e,t,n,r),chamfer:(t,n,r)=>dg(e,t,n,r),chamferDistAngle:(t,n,r,i)=>fg(e,t,n,r,i),shell:(t,n,r,i)=>_g(e,t,n,r,i),thicken:(t,n)=>vg(e,t,n),offset:(t,n,r)=>yg(e,t,n,r),filletVariable:(t,n)=>bg(e,t,n),draft:(t,n,r,i,a)=>xg(e,t,n,r,i,Sp(n,a)),defeature:(t,n)=>Sg(e,t,n),offsetWire2D:(t,n,r)=>wg(e,t,n,r),simplify:t=>Tg(e,t),reverseShape:t=>Eg(e,t)}}function Og(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=I(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function kg(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function Ag(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function jg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:Ag(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:Ag(e,t)}}}var Mg=.707,Ng=100,Pg=.05;function Fg(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<Mg)continue;let c=kg(e.centroid,o.centroid);if(c>Ng)continue;let l=s-c/Ng;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function Ig(e,t){let n=1/0,r;for(let i of t){let t=kg(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function Lg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=R(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(jg(e,i,r[n]??i%a))}let p=i.map(t=>jg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=Fg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-Pg){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=Ig(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function Rg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);Lg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function zg(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Bg(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?Rg(e,l,d,f,a,o,s,c):zg(i,r,u,t,s,c)}else if(l)Lg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function Vg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=R(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Bg(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Hg(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function Ug(e,t){let n=new Set;Hg(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Hg(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function Wg(e,t,n,r,i,a){let o=R(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=Og(a(t.id,e),i);s=n.shape,Ug(n,c)}return{shape:s,accum:c}}function Gg(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...Og(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!ih(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Wg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...Vg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function Kg(e,t,n,r,i,a,o){return Vg(e,km(e,t,n,r,i),a,o,!0)}function qg(e,t,n,r,i,a,o){return Vg(e,Am(e,t,n*180/Math.PI,a,o),r,i,!0)}function Jg(e,t,n,r,i,a){return Vg(e,jm(e,t,n,r),i,a,!0)}function Yg(e,t,n,r,i,a){return Vg(e,Mm(e,t,n,r),i,a,!0)}function Xg(e,t,n,r,i,a,o){return Vg(e,Nm(e,t,n,r,i),a,o,!0)}function Zg(e,t,n,r,i,a){return Gg(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>sh(e,t,n,r),`fuseWithHistory`)}function Qg(e,t,n,r,i,a){return Gg(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>ch(e,t,n,r),`cutWithHistory`)}function $g(e,t,n,r,i,a){return Gg(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>lh(e,t,n,r),`intersectWithHistory`)}function e_(e,t,n,r,i,a){return Vg(e,ug(e,t,n,r),i,a,!1,t)}function t_(e,t,n,r,i,a){return Vg(e,dg(e,t,n,r),i,a,!1,t)}function n_(e,t,n,r,i,a,o){return Vg(e,_g(e,t,n,r,o),i,a,!1,t)}function r_(e,t,n,r,i){return Vg(e,vg(e,t,n),r,i,!1,t)}function i_(e,t,n,r,i,a){return Vg(e,yg(e,t,n,a),r,i,!1,t)}function a_(e,t,n,r,i,a,o,s){return Vg(e,xg(e,t,n,r,i,a),o,s,!1,t)}function o_(e,t,n,r,i){return Vg(e,Vm(e,t,n),r,i,!0)}function s_(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=dp(e.type===`translate`?ap(e.x,e.y,e.z):sp(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function c_(e){return{translateWithHistory:(t,n,r,i,a,o)=>Kg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>qg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Jg(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Yg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Xg(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Zg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Qg(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>$g(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>e_(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>t_(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>n_(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>r_(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>i_(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>a_(e,t,n,r,i,Sp(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>o_(e,t,n,r,i),composeTransform:t=>s_(e,t)}}function l_(e,t,n){let r=L(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=f_(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=__(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function u_(e,n,r,i){let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=i>0?i:void 0,s=e.meshEdgesAll(a.id,r,o),c=s.positions,l=s.offsets,u=s.edgeCount,d=[];for(let e=0;e<u;e++){let n=t(l,e),r=((e+1<u?t(l,e+1):c.length)-n)/3;d.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(c),edgeGroups:d}}function d_(e,t){return!1}function f_(e,t,n,r,i){try{return p_(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),g_(e,t,n,i)}}function p_(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?m_(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):h_(e,t,n,r,i)}function m_(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=R(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function h_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=R(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function g_(e,t,n,r){let i=R(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function __(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function v_(e){return{mesh:(t,n)=>l_(e,t,n),meshEdges:(t,n,r)=>u_(e,t,n,r),hasTriangulation:t=>d_(e,t),meshShape:(e,t,n)=>{}}}function y_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=np(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
8
+ `)}function b_(e,n,r,i=De,a=Oe){let{vertices:o,triangles:s}=l_(e,I(t(np(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?je(o,s):Me(o,s)}function x_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return R(e.importStep(n)).map(I)}function S_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return I(e.importStl(n))}function C_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=np(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
9
+ `)}function w_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return R(e.importIges(n)).map(I)}function T_(e,t,n){return t.length===0?``:y_(e,t.map(e=>e.shape))}function E_(e,t,n){let r=tp(t,`export3MF`);return ip(e.export3mf(r,n))}function D_(e,t,n){let r=tp(t,`exportGLB`);return ip(e.exportGlb(r,n))}function O_(e,t,n){let r=tp(t,`exportOBJ`);return ip(e.exportObj(r,n))}function k_(e,t,n){let r=tp(t,`exportPLY`);return ip(e.exportPly(r,n))}function A_(e,t){return R(e.import3mf(new Uint8Array(t))).map(e=>I(e))}function j_(e,t){return I(e.importObj(new Uint8Array(t)))}function M_(e,t){return I(e.importGlb(new Uint8Array(t)))}function N_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(_p(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),y_(e,[t]))}function P_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return I(e.fromBREP(t));let n=x_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function F_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Kf}}function I_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?y_(e,t.shapes.map(e=>e.shape)):``}function L_(e,t,n){return y_(e,t.map(e=>e.shape))}function R_(e){return{exportSTEP:t=>y_(e,t),exportSTL:(t,n,r,i)=>b_(e,t,n,r,i),importSTEP:t=>x_(e,t),importSTL:t=>S_(e,t),exportIGES:t=>C_(e,t),importIGES:t=>w_(e,t),exportSTEPAssembly:(t,n)=>T_(e,t,n),export3MF:(t,n)=>E_(e,t,n),exportGLB:(t,n)=>D_(e,t,n),exportOBJ:(t,n)=>O_(e,t,n),exportPLY:(t,n)=>k_(e,t,n),import3MF:t=>A_(e,t),importOBJ:t=>j_(e,t),importGLB:t=>M_(e,t),toBREP:t=>N_(e,t),fromBREP:t=>P_(e,t),createXCAFDocument:t=>F_(e,t),writeXCAFToSTEP:(t,n)=>I_(e,t,n),exportSTEPConfigured:(t,n)=>L_(e,t,n)}}function z_(e,t){return{x:e,y:t}}function B_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function V_(e,t){return{x:e,y:t}}function H_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Kf}}function U_(e){return e}function W_(e){return e}function G_(e,t,n,r){return te(e,t,n,r)}function K_(e,t,n,r){return ne(e,t,n,r)}function q_(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function J_(e,t,n,r,i,a,o,s,c){let l=ae(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function Y_(e){return oe(e)}function X_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Z_(e,t){return S(yp(e),t)}function Q_(e,t){return{point:S(yp(e),t),tangent:C(yp(e),t)}}function $_(e){return w(yp(e))}function ev(e){return ee(bp(e))}function tv(e,t,n){return{__bk2d:`trimmed`,basis:yp(e),tStart:t,tEnd:n}}function nv(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function rv(e){return JSON.parse(JSON.stringify(e))}function iv(e,t){let n=yp(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return X_(i)}function av(e,t,n){return se(yp(e),t,n)}function ov(e,t,n,r){return ce(yp(e),t,n,r)}function sv(e,t,n,r){return le(yp(e),t,n,r)}function cv(e,t,n){return ue(yp(e),t,n)}function lv(e,t,n,r,i){return de(yp(e),t,n,r,i)}function uv(e,t,n,r,i,a){return bv(e,pv(t,n,r,i,a))}function dv(e,t,n){return{m:e,tx:t,ty:n,delete:Kf}}function fv(){return dv([1,0,0,0,1,0,0,0,1],0,0)}function pv(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return fv();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return dv(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function mv(e,t){return dv([1,0,0,0,1,0,0,0,1],e,t)}function hv(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return dv(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return dv([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function gv(e,t,n){let r=Math.cos(e),i=Math.sin(e);return dv([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function _v(e,t,n){return dv([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function vv(e,t,n){e.tx=t,e.ty=n}function yv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function bv(e,n){let r=yp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function xv(e,t,n){let r=fe(yp(e),yp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function Sv(e,t,n){let r=yp(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function Cv(e,t,n,r,i,a){let o=yp(e),s=yp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=Sv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=Sv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function wv(e,n,r,i){let a=yp(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return X_(l,{degMax:s})}function Tv(e){let n=bp(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return Tv(wv(e,1e-6,`C2`,10));let r=w(yp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function Ev(){return Ce()}function Dv(e,t,n){we(xp(e),yp(t),n)}function Ov(e){let t=xp(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function kv(e,t){let n=xp(e),r=xp(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function Av(e,t){let n=xp(e),r=xp(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function jv(e,t,n){let r=xp(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Mv(e){let t=bp(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Nv(e){let t=bp(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Pv(e){let t=bp(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Fv(e){let t=bp(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function Iv(e){let t=bp(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Lv(e){return xe(yp(e))}function Rv(e){return Se(e)}function zv(e,t){let n=yp(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Bv(e,n,r,i,a){let o=yp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return jh(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=w(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=S(o,l.first+t*f),[i,u]=S(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?Xf(t(p,0)):Zf(e.makeWire(p,!1))}if(n.__bk2d===`ellipse`){let r=n,l=c(r.cx,r.cy),u=Math.cos(r.xDirAngle),d=Math.sin(r.xDirAngle),f=[u*a[0]+d*s[0],u*a[1]+d*s[1],u*a[2]+d*s[2]],p=w(o),m=p.last-p.first,h=m*1e-4,[g,_]=S(o,p.first),[v,y]=S(o,p.first+h),b=(g-r.cx)*(y-r.cy)-(_-r.cy)*(v-r.cx)>=0?i:[-i[0],-i[1],-i[2]],x=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI,C=x>Math.PI?4:x>Math.PI/2?2:1,ee=m/C,te=[];for(let t=0;t<C;t++){let[n,i]=S(o,p.first+t*ee),[a,s]=S(o,p.first+(t+1)*ee);te.push(e.makeEllipseArc3d(...c(n,i),...c(a,s),...l,...b,...f,r.majorRadius,r.minorRadius))}return te.length===1?Xf(t(te,0)):Zf(e.makeWire(te,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return jh(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return Xf(e.interpolatePoints(i,r))}let l=w(o),u=[];for(let e=0;e<=100;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return $h(e,u)}function Vv(e,t,r){if(!qf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=L(r,`face`),a=yp(t),o=w(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=S(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return $h(e,c)}function Hv(e){return e}function Uv(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function Wv(e,n,r){let i=L(n,`edge`),a=L(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Uv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return X_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return te(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function Gv(e,t,n){return e}function Kv(e,n,r){if(n.length>=1){let r=jp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=L(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Yf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return Gh(e,i)}function qv(e){return{createPoint2d:(e,t)=>z_(e,t),createDirection2d:(e,t)=>B_(e,t),createVector2d:(e,t)=>V_(e,t),createAxis2d:(e,t,n,r)=>H_(e,t,n,r),wrapCurve2dHandle:e=>U_(e),createCurve2dAdaptor:e=>W_(e),makeLine2d:(e,t,n,r)=>G_(e,t,n,r),makeCircle2d:(e,t,n,r)=>K_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>q_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>J_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Y_(e),makeBSpline2d:(e,t)=>X_(e,t),evaluateCurve2d:(e,t)=>Z_(e,t),evaluateCurve2dD1:(e,t)=>Q_(e,t),getCurve2dBounds:e=>$_(e),getCurve2dType:e=>ev(e),trimCurve2d:(e,t,n)=>tv(e,t,n),reverseCurve2d:e=>{nv(e)},copyCurve2d:e=>rv(e),offsetCurve2d:(e,t)=>iv(e,t),translateCurve2d:(e,t,n)=>av(e,t,n),rotateCurve2d:(e,t,n,r)=>ov(e,t,n,r),scaleCurve2d:(e,t,n,r)=>sv(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>cv(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>lv(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>uv(e,t,n,r,i,a),createIdentityGTrsf2d:()=>fv(),createAffinityGTrsf2d:(e,t,n,r,i)=>pv(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>mv(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>hv(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>gv(e,t,n),createScaleGTrsf2d:(e,t,n)=>_v(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{vv(e,t,n)},multiplyGTrsf2d:(e,t)=>{yv(e,t)},transformCurve2dGeneral:(e,t)=>bv(e,t),intersectCurves2d:(e,t,n)=>xv(e,t,n),projectPointOnCurve2d:(e,t,n)=>Sv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>Cv(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>wv(e,t,n,r),decomposeBSpline2dToBeziers:e=>Tv(e),createBoundingBox2d:()=>Ev(),addCurveToBBox2d:(e,t,n)=>{Dv(e,t,n)},getBBox2dBounds:e=>Ov(e),mergeBBox2d:(e,t)=>{kv(e,t)},isBBox2dOut:(e,t)=>Av(e,t),isBBox2dOutPoint:(e,t,n)=>jv(e,t,n),getCurve2dCircleData:e=>Mv(e),getCurve2dEllipseData:e=>Nv(e),getCurve2dBezierPoles:e=>Pv(e),getCurve2dBezierDegree:e=>Fv(e),getCurve2dBSplineData:e=>Iv(e),serializeCurve2d:e=>Lv(e),deserializeCurve2d:e=>Rv(e),splitCurve2d:(e,t)=>zv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Bv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Vv(e,t,n),extractSurfaceFromFace:e=>Hv(e),extractCurve2dFromEdge:(t,n)=>Wv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Gv(e,t,n),fillSurface:(t,n)=>Kv(e,t,n)}}function Jv(e,t){let n=t;if(n.type===`solid`)return e.volume(L(t),fp);if(n.type===`compound`){let n=jp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(L(t),fp);return r}return 0}function Yv(e,t){let n=t;if(n.type===`face`)return e.faceArea(L(t),fp);if(n.type===`solid`)return e.surfaceArea(L(t),fp);if(n.type===`compound`){let n=jp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(L(t),fp);return r}return 0}function Xv(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(L(t));if(n.type===`face`)return e.facePerimeter(L(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function Zv(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function Qv(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(L(t),fp));if(r.type===`face`){let n=Jp(e,t);return Zp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Zv(e,r.id);if(r.type===`vertex`)return Kp(e,t);let i=jp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=Kp(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function $v(e,t){let n=t;return n.type===`edge`?Zv(e,n.id):Qv(e,t)}function ey(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(L(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=Kp(e,t);return{min:[...n],max:[...n]}}let i=jp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=Kp(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=Kp(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function ty(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function ny(e,r,i,a){let o=L(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function ry(e,n){let r=e.tessellateFace(L(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function iy(e,t){let n=n=>ty(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function ay(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Jv(e,t),area:Yv(e,t),length:n&&i?Xv(e,t):0,centerOfMass:Qv(e,t),boundingBox:ey(e,t)}}function oy(e){return{volume:t=>Jv(e,t),area:t=>Yv(e,t),length:t=>Xv(e,t),centerOfMass:t=>Qv(e,t),linearCenterOfMass:t=>$v(e,t),boundingBox:t=>ey(e,t),distance:(t,n)=>ty(e,t,n),surfaceCurvature:(t,n,r)=>ny(e,t,n,r),surfaceCenterOfMass:t=>ry(e,t),createDistanceQuery:t=>iy(e,t),measureBulk:(t,n)=>ay(e,t,n)}}function sy(e){return e.sketchNew()}function cy(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function ly(e,t,n){e.sketchAddConstraint(t,n)}function uy(e,t,n,r){return e.sketchSolve(t,n,r)}function dy(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function fy(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function py(e){return{sketchNew:()=>sy(e),sketchAddPoint:(t,n,r,i)=>cy(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>dy(e,t,n,r,i),sketchAddConstraint:(t,n)=>{ly(e,t,n)},sketchSolve:(t,n,r)=>uy(e,t,n,r),sketchDof:t=>fy(e,t)}}function my(e,t,n,r){return I(e.extrude(L(t,`face`),n[0],n[1],n[2],r))}function hy(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),I(e.revolve(L(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function gy(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),I(e.revolve(L(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function _y(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&_p(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):L(t,`face`)});return I(e.loft(a))}function vy(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function yy(e,t,n,r){let i=r?.transitionMode===void 0?void 0:vy(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):L(t,`face`);if(n.type===`wire`){let t=jp(e,n,`edge`).map(e=>L(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return I(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&_p(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),I(e.sweepAlongEdges(o,t))}if(i){let t=L(n,`edge`);return I(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=Gm(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return I(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function by(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):L(t,`face`);if(n.type===`wire`){let t=jp(e,n,`edge`).map(e=>L(e,`edge`));return I(e.sweepAlongEdges(i,t))}let a=Gm(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return I(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function xy(e,t,n,r,i,a,o){let s=L(t,`face`);return I(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function Sy(e,t,n,r,i,a){let o=L(t,`face`),s=L(n,`edge`);return I(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function Cy(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function wy(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function Ty(e,t,n,r){try{return I(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function Ey(e,t){try{if(t.type!==`wire`)return{edgeId:L(t,`edge`)};let n=jp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:L(e,`edge`)}:void 0}_p(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function Dy(e,t,n,r){let i=Ey(e,n);if(i)return Ty(e,t,i.edgeId,r)}function Oy(e,t,n){let r=Gm(e,n);if(!(!r||r.degree<=1))try{return I(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function ky(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):L(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?Cy(s):void 0;if(c){let r=Dy(e,a,n,c);if(r)return wy(r,t,o)}return wy(Oy(e,a,n)||by(e,t,n),t,o)}function Ay(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):L(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(L(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(L(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return I(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return I(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return _y(e,t)}function jy(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Kf};return i}function My(e,t,n,r,i,a,o){if(i!==null){let r=my(e,n,Xp(e,n,0,0),i);return o?sh(e,t,r):r}return t}function Ny(e){return{extrude:(t,n,r)=>my(e,t,n,r),revolve:(t,n,r)=>hy(e,t,n,r),revolveVec:(t,n,r,i)=>gy(e,t,n,r,i),loft:(t,n,r,i)=>_y(e,t,n,r,i),sweep:(t,n,r)=>yy(e,t,n,r),simplePipe:(t,n)=>by(e,t,n),helicalSweep:(t,n,r,i,a,o)=>xy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>Sy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>ky(e,t,n,r),loftAdvanced:(t,n)=>Ay(e,t,n),buildExtrusionLaw:(t,n,r)=>jy(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>My(e,t,n,r,i,a,o)}}function Py(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var Fy=class{oc;kernelId=`brepkit`;capabilities=a;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,yh(t),lg(t),Ny(t),Dg(t),Bm(t),v_(t),R_(t),oy(t),Gp(t),Dm(t),rh(t),c_(t),py(t),qv(t),Py(t))}};function Iy(e){throw Error(`manifold: ${e} is not implemented`)}var Ly=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function Ry(e){return Ly.has(e)}function z(e,t,n){return{op:e,params:t,inputs:n,replayable:Ry(e)&&n.every(e=>e.replayable)}}function B(e,t){return{manifold:e,node:t}}function V(e){return e.manifold}function H(e){return e.node}function zy(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var By=[`occt`,`occt-wasm`];function Vy(){for(let e of By)try{return U(e)}catch{}}function Hy(e){let t=Vy();if(!t)throw new c(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var Uy=new WeakMap,Wy=[0,0,0],Gy=[0,0,1];function Ky(e){return Math.hypot(e[0],e[1],e[2])}function qy(e){let t=Ky(e);return t===0?[...Gy]:[e[0]/t,e[1]/t,e[2]/t]}function Jy(e){let[t,n,r]=qy(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Yy(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(Jy(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>B(t.cube([e,n,r],!1),z(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return B(t.cube(r,!1).translate(i),z(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Wy,a=Gy)=>B(n(t.cylinder(r,e,e,0,!1),i,a),z(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Wy)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),B(r,z(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Wy,o=Gy)=>B(n(t.cylinder(i,e,r,0,!1),a,o),z(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=Wy,o=Gy)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return B(n(t.revolve([c],0),a,o),z(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>B(t.sphere(1,0).scale([e,n,r]),z(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>Iy(`makeRectangle`)}}function Xy(e){return e}function Zy(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function Qy(e){let t=H(Xy(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function $y(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function eb(e){let t=e.Manifold;function n(e,t,n){let r=Xy(e),i=Xy(t);return B(V(r).add(V(i)),z(`makeFuse`,{},[H(r),H(i)]))}function r(e,t,n){let r=Xy(e),i=Xy(t);return B(V(r).subtract(V(i)),z(`makeCut`,{},[H(r),H(i)]))}function i(e,t,n){let r=Xy(e),i=Xy(t);return B(V(r).intersect(V(i)),z(`makeCommon`,{},[H(r),H(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(Xy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:B(t.union(r.map(V)),z(`makeFuse`,{},r.map(H)))}function o(e,n,r){let i=Xy(e);if(n.length===0)return i;let a=n.map(Xy);return B(t.difference([V(i),...a.map(V)]),z(`makeCut`,{},[H(i),...a.map(H)]))}function s(e,t,n){let r=Xy(e),{normal:i,offset:a}=Qy(t),[o]=V(r).splitByPlane(i,a);return B(o,z(`section`,{normal:i,offset:a},[H(r),H(Xy(t))]))}function c(e,n){let r=Xy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Xy(i),{normal:o,offset:s}=Qy(i),[c,l]=V(r).splitByPlane(o,s);return B(t.union([c,l]),z(`split`,{normal:o,offset:s},[H(r),H(a)]))}function l(e,t,n){let r=[],i=Xy(e),a=Xy(t);return(V(i)===void 0||V(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(V(a)===void 0||V(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return $y(Zy(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function tb(e){return e}function nb(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function rb(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function ib(e,t,n){let r=nb();return r[12]=e,r[13]=t,r[14]=n,r}function ab(e,t,n){let r=e,[i,a,o]=rb(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=nb();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function ob(e,t){let n=nb();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function sb(e,t){let[n,r,i]=rb(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=nb();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function cb(e,t){let n=nb();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function lb(e,t,n,r,i){return B(e.transform(t),z(n,r,[i]))}function ub(e,t,n,r){let i=tb(e);return lb(V(i),ib(t,n,r),`translateShape`,{x:t,y:n,z:r},H(i))}function db(e,t,n=[0,0,1],r=[0,0,0]){let i=tb(e);return lb(V(i),ab(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},H(i))}function fb(e,t,n){let r=tb(e);return lb(V(r),sb(t,n),`mirrorShape`,{origin:t,normal:n},H(r))}function pb(e,t,n){let r=tb(e);return lb(V(r),ob(t,n),`scaleShape`,{center:t,factor:n},H(r))}function mb(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=tb(e);return lb(V(n),t,`transformShape`,{matrix:[...t]},H(n))}function hb(e,t,n,r){let i=tb(e);return lb(V(i),cb(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},H(i))}function gb(e,t,n){let r=tb(e);return lb(V(r),cb(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},H(r))}function _b(e){let t=nb();for(let n of e)t=Cb(n.type===`translate`?ib(n.x,n.y,n.z):ab(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function vb(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(ub(e,t[0]*r,t[1]*r,t[2]*r))}return i}function yb(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(db(e,r*o*Math.PI/180,n,t));return a}function bb(e,t,n,r,i,a,o,s){let c=tb(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(V(c).transform(ib(o,s,d))),u.push(H(c))}return B(l.length===1?l[0]:e.Manifold.union(l),z(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function xb(e){return e.map(e=>{switch(e.type){case`translate`:return ub(e.shape,e.x,e.y,e.z);case`rotate`:return db(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return pb(e.shape,e.center,e.factor);case`mirror`:return fb(e.shape,e.origin,e.normal)}})}function Sb(e){return{composeTransform:_b,transform:mb,locate:mb,translate:ub,rotate:db,mirror:fb,scale:pb,generalTransform:hb,generalTransformNonOrthogonal:gb,positionOnCurve:()=>Iy(`positionOnCurve`),linearPattern:vb,circularPattern:yb,gridPattern:(t,n,r,i,a,o,s)=>bb(e,t,n,r,i,a,o,s),transformBatch:xb}}function Cb(e,t){let n=nb();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var wb=2*Math.PI,Tb=e=>Math.hypot(e[0],e[1],e[2]),Eb=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function Db(e){return Tb(Eb(e.p2,e.p1))}function Ob(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function kb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function Ab(e){return e.k===`line`?{first:0,last:Db(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:wb*e.turns}:{first:0,last:1}}function jb(e,t){if(e.k===`line`){let n=t/(Db(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return Ob(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/wb;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function Mb(e,t){let n;if(e.k===`line`)n=Eb(e.p2,e.p1);else if(e.k===`bezier`){let r=Ob(e.points,Math.max(0,t-1e-4));n=Eb(Ob(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/wb;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=Tb(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function Nb(e){if(e.k===`line`)return Db(e);if(e.k===`helix`){let t=wb*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-wb)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return Lb(t=>jb(e,t),e.a0,e.a1,256)}return Lb(t=>jb(e,t),0,1,128)}function Pb(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-wb)<1e-9:!1}function Fb(e){return Pb(e)}function Ib(e){return e.k===`conic`?wb:0}function Lb(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=Tb(Eb(s,a)),a=s}return i}function Rb(e){return e}function zb(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Bb(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Vb(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Hb(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Ub(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Wb(e){return Math.hypot(e[0],e[1],e[2])}function Gb(e){let t=Wb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Kb(e){return Gb(Bb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function qb(e){let t=Gb(e),n=Kb(t);return{xAxis:n,yAxis:Gb(Bb(t,n))}}function Jb(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function Yb(e){return Jb(e)<0?[...e].reverse():e}function Xb(e){return Jb(e)>0?[...e].reverse():e}function Zb(e){return e.node?.params}function Qb(e){let t=Rb(e),n=Zb(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Yb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Xb(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=qb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return $b(t)}function $b(e){let t=V(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=ex(i);return{outline:Yb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function ex(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function tx(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function nx(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function rx(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function ix(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=ox(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return ax(e,new e.Manifold(a))}function ax(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function ox(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=tx(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=tx(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function sx(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return Gb(Vb(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=Gb(Vb(t,Ub(i,zb(t,i))));Wb(a)<1e-9&&(a=Kb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:Gb(Bb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Vb(s,o),l=zb(c,c),u=a;if(l>1e-18){let e=Vb(a,Ub(c,2/l*zb(c,a))),n=Vb(i,Ub(c,2/l*zb(c,i))),o=Vb(r(t),n),s=zb(o,o);u=s>1e-18?Vb(e,Ub(o,2/s*zb(o,e))):e}let d=r(t),f=Gb(Vb(u,Ub(d,zb(u,d)))),p=Gb(Bb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var cx=24,lx=24,ux=null;function dx(e){let t=ux?ux(Math.max(Math.abs(e),1e-6)):cx;return Math.max(cx,t)}var fx=[0,0,0],px=1e-6,mx={delete:()=>{},isEmpty:()=>!1};function hx(e,t){return e[t]??fx}function gx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*dx(t)))}function _x(e){return Gb(Bb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function vx(e,t,n,r,i,a){let o=Gb(t),s=a?Gb(a):_x(o),c=Gb(Bb(o,s)),l=i-r,u=gx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Hb(e,Hb(Ub(s,n*Math.cos(i)),Ub(c,n*Math.sin(i)))))}return d}function yx(e,t,n){let r=Vb(t,e),i=Vb(n,e),a=Bb(r,i);if(Wb(a)<1e-12)return[e,t,n];let o=Gb(a),s=zb(r,r),c=zb(i,i),l=zb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Hb(e,Hb(Ub(r,d),Ub(i,f))),m=Wb(Vb(e,p)),h=Gb(Vb(e,p)),g=Gb(Bb(o,h)),_=(e=>Math.atan2(zb(Vb(e,p),g),zb(Vb(e,p),h)))(n);return _<0&&(_+=2*Math.PI),vx(p,o,m,0,_,h)}function bx(e){let t=[];for(let n=0;n<=lx;n++){let r=n/lx,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=hx(i,t),n=hx(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(hx(i,0))}return t}function xx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=hx(e,i),o=hx(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return Wb(i)<1e-12?[0,0,1]:Gb(i)}function Sx(e,t){return Wb(Vb(e,t))<px}function Cx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=hx(n,n.length-1),a=Sx(hx(r,0),i),o=Sx(hx(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=Sx(hx(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(hx(r,e))}return n.length>1&&Sx(hx(n,0),hx(n,n.length-1))&&n.pop(),n}function wx(e){let t=xx(e),n=hx(e,0),r=e.length>1?Gb(Vb(hx(e,1),n)):_x(t);r=Gb(Vb(r,Ub(t,zb(r,t)))),Wb(r)<1e-9&&(r=_x(t));let i=Gb(Bb(t,r));return{outline:Yb(e.map(e=>{let t=Vb(e,n);return[zb(t,r),zb(t,i)]})),origin:n,xAxis:r,yAxis:i}}var Tx=12;function Ex(e,t){let[n,r]=e.curveParameters(t),i=Tx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function Dx(e,t){return Cx(e.iterShapes(t,`edge`).map(t=>Ex(e,t)))}function Ox(e){let t=e.getCircularSegments;typeof t==`function`&&(ux=e=>t(e));function n(e,t){return B(mx,z(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=Gb(e),r=t?Gb(t):_x(n);return{x:r,y:Gb(Bb(n,r))}}function i(e,t,n){let r=Vb(t,e),i=Vb(n,e),a=Bb(r,i);if(Wb(a)<1e-12)return;let o=Gb(a),s=zb(r,r),c=zb(i,i),l=zb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Hb(e,Hb(Ub(r,d),Ub(i,f))),m=Wb(Vb(e,p)),h=Gb(Vb(e,p)),g=Gb(Bb(o,h)),_=Math.atan2(zb(Vb(n,p),g),zb(Vb(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=zy(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Vy();return n?Ex(n,e):[]}function o(e){let t=[];for(let n of e){let e=zy(n);e&&t.push(H(e))}return t}function s(e){let t=Cx(e.map(e=>a(e)));return B(mx,z(`profileWire`,{ring:t,...t.length>=3?wx(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=wx(e);return B(mx,z(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=zy(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,H(t))}let n=Vy();return c(n?Dx(n,e):[],t?H(t):void 0)}function u(e,t){let n=zy(e),r=n?.node?.params??{},i=r.origin??fx,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Vb(e,i);return[zb(t,a),zb(t,s)]},l=[];for(let e of t){let t=zy(e),n;if(t)n=t.node.params?.ring??[];else{let t=Vy();n=t?Dx(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[H(n),...o(t)]:o(t);return B(mx,z(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=Gb(t),o=i?Gb(i):_x(a),s=Gb(Bb(a,o)),c=[],l=dx(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Hb(e,Hb(Ub(o,n*Math.cos(i)),Ub(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(vx(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(vx(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(yx(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(bx(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=Gb(a),c=_x(s),l=Gb(Bb(s,c)),u=o?Ub(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*cx)),m=[];for(let e=0;e<=p;e++)m.push(jb(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function kx(e){let t=e.Manifold,n=Ox(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return B(t.hull(r),z(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>V(e));return B(t.hull(r),z(`hull`,{tolerance:n},e.map(e=>H(e))))}function a(e){let n=e.map(e=>V(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return B(n.length===1?r:t.union(n),z(`makeCompound`,{},e.map(e=>H(e))))}function o(e,t){let n=e[0];return n||Iy(`sewAndSolidify (no input faces on manifold kernel)`),B(V(n),z(`sewAndSolidify`,{tolerance:t},e.map(e=>H(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>Iy(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>Iy(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>Iy(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>Iy(`buildSolidFromFaces`),makeNonPlanarFace:()=>Iy(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>Iy(`removeHolesFromFace`),makeFaceOnSurface:()=>Iy(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Hy(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Hy(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>Iy(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>Iy(`createPoint3d`),createDirection3d:()=>Iy(`createDirection3d`),createVector3d:()=>Iy(`createVector3d`),createAxis1:()=>Iy(`createAxis1`),createAxis2:()=>Iy(`createAxis2`),createAxis3:()=>Iy(`createAxis3`)}}var Ax=Math.PI/180;function jx(e){return e}function Mx(e){let t=180/Math.PI*e;return t>360?360:t}function Nx(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function Px(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=Nx(n.Location()),t=Nx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function Fx(e){return e.outline.map(e=>[e[0],e[1]])}function Ix(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Lx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:Gb(Bb(e.xAxis,e.yAxis))}}function Rx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function zx(e){let t=V(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function Bx(e,t){let n=jx(e),r=n.node?.params,i=r?.path??r?.points;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=zx(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Vx(e){return e?.node??z(`spine`,{},[])}function Hx(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function Ux(e,t,n){let r=Gb(n);return e.outline.map(n=>{let i=Vb(Hb(e.origin,Hb(Ub(e.xAxis,n[0]),Ub(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Wb(Vb(i,Ub(r,a))),a]})}function Wx(e,t,n){let r=e,i=Gb(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=Bb([0,1,0],i);Wb(t)<1e-9&&(t=[1,0,0]),t=Gb(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function Gx(e,t,n,r,i){let a=Gb(t),{xAxis:o,yAxis:s}=qb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Hb(Ub(o,n*Math.cos(i)),Ub(s,n*Math.sin(i)));d.push(Hb(e,Hb(f,Ub(a,u*r))))}return d}function Kx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function qx(e,t,n,r){let i=Qb(t),a=Gb([n[0],n[1],n[2]]),o=Wb([n[0]*r,n[1]*r,n[2]*r]),s=[Fx(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return B(Hx(ax(e,e.Manifold.extrude(s,o)),i,a),z(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[H(jx(t))]))}function Jx(e,t,n,r,i,a,o){let s=Qb(t),c=Mx(i),l=Ux(s,n,r);return B(Wx(e.Manifold.revolve([l],0,c),n,r),z(a,o,[H(jx(t))]))}function Yx(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function Xx(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(Qb),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>rx({...e,outline:nx(e.outline,a)},Lx(e)));for(let e=1;e<o.length;e++)o[e]=Yx(o[e]??[],o[e-1]??[]);return B(ix(e,o),z(n,{sections:i.map(Ix),...r},t.map(e=>H(jx(e)))))}function Zx(e,t,n,r,i,a,o){let s=Qb(t),c=sx(n,s.xAxis),l=c.length;return B(ix(e,c.map((e,t)=>{let n=o?o(l>1?t/(l-1):0):1;return rx(s,e,n)})),z(i,{section:Ix(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[H(jx(t)),r]))}function Qx(e,t,n,r,i,a){if(r===null)return t;let o=Qb(n),s=Gb(Bb(o.xAxis,o.yAxis)),c=Math.tan(i*Ax),l={origin:Hb(o.origin,Ub(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/Rx(o),d=ix(e,[rx(o,Lx(o),1),rx(o,l,u)]),f=z(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[H(jx(n))]);if(a){let e=jx(t);return B(V(e).add(d),z(`makeFuse`,{},[H(e),f]))}return B(d,f)}function $x(e){return{revolve:(t,n,r)=>{let i=Px(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return Jx(e,t,a,o,r,`revolve`,{...Ix(Qb(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:Mx(r)})},revolveVec:(t,n,r,i)=>Jx(e,t,n,r,i,`revolveVec`,{...Ix(Qb(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:Mx(i)})}}function eS(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),Zx(e,t,Bx(n,16),Vx(n),`sweep`,i)},simplePipe:(t,n)=>Zx(e,t,Bx(n,16),Vx(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>Zx(e,t,Bx(n,Math.max(2,a||16)),Vx(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Kx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=Zx(e,t,Bx(n,16),Vx(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>Zx(e,t,Gx(n,r,i,a,o),Vx(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function tS(e){return{extrude:(t,n,r)=>qx(e,t,n,r),...$x(e),loft:(t,n)=>Xx(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Xx(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...eS(e),draftPrism:(t,n,r,i,a,o)=>Qx(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>Iy(`loftBatch`),extrudeBatch:t=>t.map(t=>qx(e,t.face,t.direction,t.length))}}var nS=16;function rS(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function iS(e,t,n){if(!(n>0))return rS(t);let r=sS(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?rS(t):t.minkowskiDifference(r).minkowskiSum(r)}function aS(e,t,n){if(n===0)return rS(t);let r=sS(e,Math.abs(n));return r===void 0?rS(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):rS(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):rS(t)}function oS(e,t,n,r){if(n===0)return rS(t);if(r)return aS(e,t,Math.abs(n));let i=aS(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):rS(t)}function sS(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,nS)}function cS(e){return e}function lS(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function uS(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function dS(e){let t=e;if(t?.box!==void 0)return uS(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:uS(n)}function fS(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=dS(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=lS(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function pS(e){return typeof e==`function`&&Iy(`fillet (per-edge radius callback)`),e}function mS(e){return typeof e==`number`?e:e[0]}function hS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function gS(e,t,n,r,i){let a=cS(n),o=pS(i),s=fS(r);return B(iS(e,V(a),mS(o)),z(t,{radius:o,selection:s},[H(a)]))}function _S(e,t,n,r,i){let a=cS(t),o=fS(n);return B(iS(e,V(a),r),z(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[H(a)]))}function vS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),ax(e,V(t).subtract(d))}catch{return}}function yS(e,t,n,r,i){let a=cS(t),o=fS(n);return B(vS(e,a,r)??oS(e,V(a),r,!1),z(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[H(a)]))}function bS(e,t,n){let r=cS(t);return B(oS(e,V(r),n,!0),z(`thicken`,{thickness:n},[H(r)]))}function xS(e,t,n,r){let i=cS(t);return B(aS(e,V(i),n),z(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[H(i)]))}function SS(e,t,n){let r=cS(t);return B(iS(e,V(r),hS(n)),z(`filletVariable`,{spec:n},[H(r)]))}function CS(e,t,n,r,i){typeof i==`function`&&Iy(`draft (per-face angle callback)`);let a=cS(e),o=fS(t);return B(rS(V(a)),z(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[H(a)]))}function wS(e,t){let n=cS(e),r=fS(t);return B(rS(V(n)),z(`defeature`,{selection:r},[H(n)]))}function TS(e){let t=cS(e),n=V(t);return B(typeof n?.simplify==`function`?n.simplify():rS(n),z(`simplify`,{},[H(t)]))}function ES(e){let t=cS(e),n=V(t);return B(typeof n?.mirror==`function`?n.mirror([1,0,0]):rS(n),z(`reverseShape`,{},[H(t)]))}function DS(e,t){let n=cS(t.shape),r=fS(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return B(iS(e,V(n),a),z(`fillet`,{radii:i,selection:r},[H(n)]))}function OS(e){return{fillet:(t,n,r)=>gS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>gS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>_S(e,t,n,r,i),shell:(t,n,r,i)=>yS(e,t,n,r,i),thicken:(t,n)=>bS(e,t,n),offset:(t,n,r)=>xS(e,t,n,r),filletVariable:(t,n)=>SS(e,t,n),draft:(e,t,n,r,i)=>CS(e,t,n,r,i),defeature:(e,t)=>wS(e,t),offsetWire2D:()=>Iy(`offsetWire2D`),simplify:e=>TS(e),reverseShape:e=>ES(e),shellBatch:t=>t.map(t=>yS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>DS(e,t))}}function kS(e){return V(e).getMesh()}function AS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function jS(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function MS(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function NS(e,t){let n=kS(e),r=AS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:jS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:MS(n)}}function PS(e,t,n){let r=kS(e),i=AS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function FS(e){return!0}function IS(e){return{mesh:(e,t)=>NS(e,t),meshEdges:(e,t,n)=>PS(e,t,n),hasTriangulation:e=>FS(e),meshShape:(e,t,n)=>{}}}function LS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function RS(e,t=0){return typeof e==`number`?e:t}function zS(e,t=``){return typeof e==`string`?e:t}function BS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function VS(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function HS(e,t,n,r){return BS(t,BS(VS(n,e[0]),VS(r,e[1])))}function US(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=LS(t.origin),i=LS(t.xAxis,[1,0,0]),a=LS(t.yAxis,[0,1,0]),o=n.map(e=>HS(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function WS(e,t){return US(e,t)}function GS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function KS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function qS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>GS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=KS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(GS(e,t)))}function JS(e){let t=e.selection;return t===void 0?void 0:t}function YS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function XS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function ZS(e,t){return(n,r)=>{let i=US(n,r),a=LS(r[e]),o=LS(r[t],[0,0,1]),s=RS(r.angleDeg,360);return n.revolve(i,XS(n,a,o),Math.PI/180*s)}}var QS={makeBox:(e,t)=>e.makeBox(RS(t.width),RS(t.height),RS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(LS(t.p1),LS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(RS(t.radius),RS(t.height),LS(t.center),LS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(RS(t.radius),LS(t.center)),makeCone:(e,t)=>e.makeCone(RS(t.radius1),RS(t.radius2),RS(t.height),LS(t.center),LS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(RS(t.majorRadius),RS(t.minorRadius),LS(t.center),LS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(RS(t.aLength),RS(t.bLength),RS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return YS(n);let r=YS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=YS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=YS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(YS(n),RS(t.x),RS(t.y),RS(t.z)),rotateShape:(e,t,n)=>e.rotate(YS(n),RS(t.angle),LS(t.axis,[0,0,1]),LS(t.center)),scaleShape:(e,t,n)=>e.scale(YS(n),LS(t.center),RS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(YS(n),LS(t.origin),LS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(YS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(YS(n),t.linear,LS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(YS(n),t.linear,LS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(YS(n),LS(t.directionX),LS(t.directionY),RS(t.spacingX),RS(t.spacingY),RS(t.countX,1),RS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>US(e,t),extrude:(e,t)=>{let n=US(e,t);return e.extrude(n,LS(t.direction,[0,0,1]),RS(t.length,1))},revolve:ZS(`axisOrigin`,`axisDirection`),revolveVec:ZS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>$S(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>$S(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(eC(e,t),tC(e,t)),simplePipe:(e,t)=>e.simplePipe(eC(e,t),tC(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(eC(e,t),tC(e,t),zS(t.contactMode),t.scaleValues??[],RS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(eC(e,t),tC(e,t));return nC(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(eC(e,t),LS(t.axisOrigin),LS(t.axisDirection,[0,0,1]),RS(t.radius),RS(t.pitch),RS(t.turns,1)),draftPrism:(e,t)=>{let n=US(e,t);return e.draftPrism(n,n,n,RS(t.height),RS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=YS(n),i=qS(e,r,JS(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=YS(n),i=qS(e,r,JS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=YS(n),i=qS(e,r,JS(t),`edge`);return e.chamferDistAngle(r,i,RS(t.distance),RS(t.angleDeg))},shell:(e,t,n)=>{let r=YS(n),i=qS(e,r,JS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,RS(t.thickness),t.tolerance):e.shell(r,i,RS(t.thickness))},thicken:(e,t,n)=>e.thicken(YS(n),RS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(YS(n),RS(t.distance),t.tolerance):e.offset(YS(n),RS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(YS(n),zS(t.spec)),draft:(e,t,n)=>{let r=YS(n),i=qS(e,r,JS(t),`face`);return e.draft(r,i,LS(t.pullDirection,[0,0,1]),LS(t.neutralPlane),RS(t.angleDeg))},defeature:(e,t,n)=>{let r=YS(n),i=qS(e,r,JS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(YS(n)),reverseShape:(e,t,n)=>e.reverseShape(YS(n)),hull:(e,t,n)=>e.hull([...n],RS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),RS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],RS(t.tolerance))};function $S(e,t){let n=WS(e,t);return e.iterShapes(n,`wire`)[0]??n}function eC(e,t){let n=t.section;return n?WS(e,n):US(e,t)}function tC(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function nC(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function rC(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=QS[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>rC(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function iC(e,t,n=new Map){let r=new Set,i=rC(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function aC(e){return V(e)}function oC(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function sC(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function cC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=oC(e);return n?sC(n):aC(e).boundingBox()}function lC(e){return aC(e)?.getMesh?.()}function uC(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function dC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function fC(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function pC(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function mC(e){let t=cC(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function hC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=uC(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function gC(e){let t=lC(e);if(!t)return mC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=dC(t,e),s=uC(t,n),c=uC(t,a),l=uC(t,o),u=pC(s,fC(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?hC(t):[i[0]/r,i[1]/r,i[2]/r]}function _C(e){let t=lC(e);if(!t)return mC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=dC(t,e),s=uC(t,n),c=uC(t,a),l=uC(t,o),u=fC([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?hC(t):[i[0]/r,i[1]/r,i[2]/r]}function vC(e){return aC(e).volume()}function yC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:aC(e).surfaceArea()}function bC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=cC(e);return{min:[...n.min],max:[...n.max]}}function xC(e){return gC(e)}function SC(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function CC(e,t){return SC(cC(e),cC(t))}function wC(e,t=!1){return{volume:vC(e),area:yC(e),length:0,centerOfMass:xC(e),boundingBox:bC(e)}}function TC(e,t,n){let r=Vy();if(!r)throw new c(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=zy(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Uy.get(i.node)??(()=>{let e=iC(i.node,r);return Uy.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function EC(e){return{volume:e=>vC(e),area:e=>yC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=zy(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?Nb(n.params.curve):Iy(`length`)},centerOfMass:e=>xC(e),linearCenterOfMass:e=>xC(e),boundingBox:e=>bC(e),distance:(e,t)=>CC(e,t),surfaceCurvature:(e,t,n)=>TC(e,t,n),surfaceCenterOfMass:e=>_C(e),measureBulk:(e,t)=>wC(e,t),createDistanceQuery:e=>({distanceTo:t=>CC(e,t),dispose:()=>{}})}}function DC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function OC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:DC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function kC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var AC=Math.cos(45*Math.PI/180),jC=(e,t)=>e<t?e*1e9+t:t*1e9+e,MC=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function NC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=jC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>AC)continue;let s=MC(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of PC(t))d.push(FC(e,n,s));return d}function PC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function FC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:IC(i)?`LINE`:`CIRCLE`}}function IC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function LC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function RC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function zC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function BC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function VC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function HC(e,t){let n=zy(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Hy(t),i=Uy.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=iC(n.node,r);return Uy.set(n.node,a),{occt:r,brep:a}}function UC(e){if(zy(e))return`solid`;let{occt:t,brep:n}=HC(e,`shapeType`);return t.shapeType(n)}function WC(e,t){let n=zy(e),r=zy(t);return!n||!r?!1:n.manifold===r.manifold}function GC(e,t){if(!zy(e))return 0;let{occt:n,brep:r}=HC(e,`hashCode`);return n.hashCode(r,t)}function KC(e){let t=zy(e);return t?!V(t):!0}function qC(e,t){let n=zy(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=V(n);return e&&typeof e.getMesh==`function`?LC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=V(n);if(e&&typeof e.getMesh==`function`)return OC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=V(n);if(e&&typeof e.getMesh==`function`)return NC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=Vy();if(!r)return[];let i=Uy.get(n.node)??(()=>{let e=iC(n.node,r);return Uy.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function JC(e){let{occt:t,brep:n}=HC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function YC(e,t){let{occt:n,brep:r}=HC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function XC(e){return{iterShapes:qC,iterShapeList:(e,t)=>{Hy(`iterShapeList`).iterShapeList(e,t)},shapeType:UC,isSame:WC,isEqual:WC,downcast:e=>e,copyShape:e=>e,hashCode:GC,isNull:KC,shapeOrientation:e=>`forward`,edgeToFaceMap:JC,sharedEdges:(e,t)=>Hy(`sharedEdges`).sharedEdges(e,t),adjacentFaces:YC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function ZC(e){return V(e).getMesh()}function QC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function $C(e){return Math.floor(e.vertProperties.length/QC(e))}function ew(e,t){let n=t*QC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function tw(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function nw(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function rw(e,t){let n=ZC(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=tw(n,e),s=ew(n,r),c=ew(n,a),l=ew(n,o),u=nw(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=tw(n,e),o=ew(n,t),s=ew(n,r),c=ew(n,a),l=nw(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
10
+ `)}function iw(e){let t=ZC(e),n=$C(t),r=Math.floor(t.triVerts.length/3),i=[`# exported by brepjs manifold kernel`];for(let e=0;e<n;e++){let n=ew(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=tw(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
11
+ `)).buffer}function aw(e){let t=ZC(e),n=$C(t),r=Math.floor(t.triVerts.length/3),i=`ply\nformat binary_little_endian 1.0\nelement vertex ${n}\nproperty float x\nproperty float y\nproperty float z\nelement face ${r}\nproperty list uchar uint vertex_indices\nend_header\n`,a=new TextEncoder().encode(i),o=new ArrayBuffer(n*12+r*13),s=new DataView(o),c=0;for(let e=0;e<n;e++){let n=ew(t,e);s.setFloat32(c,n[0],!0),s.setFloat32(c+4,n[1],!0),s.setFloat32(c+8,n[2],!0),c+=12}for(let e=0;e<r;e++){let[n,r,i]=tw(t,e);s.setUint8(c,3),c+=1,s.setUint32(c,n,!0),s.setUint32(c+4,r,!0),s.setUint32(c+8,i,!0),c+=12}let l=new Uint8Array(a.length+o.byteLength);return l.set(a,0),l.set(new Uint8Array(o),a.length),l.buffer}function ow(e,t,n=`importMesh`){let r=new e.Mesh({numProp:3,vertProperties:t.vertProperties,triVerts:t.triVerts});return B(new e.Manifold(r),z(n,{},[]))}function sw(e,t){let n=new TextDecoder().decode(new Uint8Array(t)),r=[],i=[];for(let e of n.split(`
12
+ `)){let t=e.trim();if(t.startsWith(`v `)){let e=t.slice(2).trim().split(/\s+/);r.push(Number(e[0]),Number(e[1]),Number(e[2]))}else if(t.startsWith(`f `)){let e=t.slice(2).trim().split(/\s+/).map(e=>{let t=e.split(`/`)[0]??``,n=Number(t);return n>0?n-1:r.length/3+n});for(let t=1;t+1<e.length;t++)i.push(e[0]??0,e[t]??0,e[t+1]??0)}}return ow(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function cw(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&dw(n),i=[];if(r){let e=new TextDecoder().decode(n).match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/g)??[];for(let t of e){let e=t.trim().split(/\s+/);i.push(Number(e[1]),Number(e[2]),Number(e[3]))}}else{let e=new DataView(t),n=e.getUint32(80,!0),r=84;for(let t=0;t<n;t++){r+=12;for(let t=0;t<3;t++)i.push(e.getFloat32(r,!0),e.getFloat32(r+4,!0),e.getFloat32(r+8,!0)),r+=12;r+=2}}let a=uw(i);return ow(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var lw=1e6;function uw(e){let t=[],n=[],r=new Map;for(let i=0;i+2<e.length;i+=3){let a=e[i]??0,o=e[i+1]??0,s=e[i+2]??0,c=`${Math.round(a*lw)},${Math.round(o*lw)},${Math.round(s*lw)}`,l=r.get(c);l===void 0&&(l=t.length/3,r.set(c,l),t.push(a,o,s)),n.push(l)}return{vertices:t,indices:n}}function dw(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var fw=1e-6;function pw(e,t){let n=H(t);if(n.replayable)return iC(n,e)}function mw(e,t){let n=ZC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=tw(n,t),s=e.buildTriFace(ew(n,r),ew(n,a),ew(n,o));s&&i.push(s)}if(i.length===0)throw Error(`manifold: cannot export — shape has no triangles to facet`);return e.sewAndSolidify(i,fw)}function hw(e){let t=Hy(`B-rep export`),n=pw(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:mw(t,e)}):{occt:t,brep:n}}function gw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return ow(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var _w=1179937895,vw=2,yw=1313821514,bw=5130562,xw=5126,Sw=5125,Cw=5123,ww=5121,Tw=34962,Ew=34963,Dw=4;function Ow(e){return e+3&-4}function kw(e){let t=ZC(e),n=t.numProp&&t.numProp>=3?t.numProp:3,r=Math.floor(t.vertProperties.length/n),i=t.triVerts.length,a=new Float32Array(r*3),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let e=0;e<r;e++){let r=t.vertProperties[e*n]??0,i=t.vertProperties[e*n+1]??0,f=t.vertProperties[e*n+2]??0;a[e*3]=r,a[e*3+1]=i,a[e*3+2]=f,r<o&&(o=r),i<s&&(s=i),f<c&&(c=f),r>l&&(l=r),i>u&&(u=i),f>d&&(d=f)}r===0&&(o=s=c=l=u=d=0);let f=Uint32Array.from(t.triVerts),p=a.byteLength,m=Ow(p),h=m+f.byteLength,g={asset:{version:`2.0`,generator:`brepjs manifold kernel`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0},indices:1,mode:Dw}]}],accessors:[{bufferView:0,componentType:xw,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:Sw,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:Tw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:Ew}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=Ow(_.length),y=Ow(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,_w,!0),S.setUint32(4,vw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,yw,!0),w+=8,C.set(_,w);for(let e=_.length;e<v;e++)C[w+e]=32;return w+=v,S.setUint32(w,y,!0),S.setUint32(w+4,bw,!0),w+=8,C.set(new Uint8Array(a.buffer,a.byteOffset,p),w),C.set(new Uint8Array(f.buffer,f.byteOffset,f.byteLength),w+m),x}function Aw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==_w)throw Error(`manifold: importGLB — not a binary glTF (bad magic)`);let r=n.getUint32(8,!0),i,a,o=12;for(;o<r;){let e=n.getUint32(o,!0),r=n.getUint32(o+4,!0),s=new Uint8Array(t,o+8,e);r===yw?i=JSON.parse(new TextDecoder().decode(s)):r===bw&&(a=s),o+=8+e}if(!i||typeof i!=`object`||!a)throw Error(`manifold: importGLB — missing JSON or BIN chunk`);let s=i,c=s.meshes?.[0]?.primitives[0],l=s.accessors??[],u=s.bufferViews??[];if(!c||c.attributes.POSITION===void 0)throw Error(`manifold: importGLB — no POSITION attribute`);let d=l[c.attributes.POSITION];if(!d)throw Error(`manifold: importGLB — invalid POSITION accessor`);let f=u[d.bufferView];if(!f)throw Error(`manifold: importGLB — invalid POSITION bufferView`);let p=new Float32Array(a.buffer.slice(a.byteOffset+(f.byteOffset??0),a.byteOffset+(f.byteOffset??0)+d.count*3*4)),m;if(c.indices!==void 0){let e=l[c.indices];if(!e)throw Error(`manifold: importGLB — invalid indices accessor`);let t=u[e.bufferView];if(!t)throw Error(`manifold: importGLB — invalid indices bufferView`);let n=e.componentType===Sw?4:e.componentType===Cw?2:+(e.componentType===ww);if(n===0)throw Error(`manifold: importGLB — unsupported index component type ${e.componentType}`);let r=a.byteOffset+(t.byteOffset??0),i=new DataView(a.buffer,r,e.count*n);m=new Uint32Array(e.count);for(let t=0;t<e.count;t++){let e=t*n;m[t]=n===4?i.getUint32(e,!0):n===2?i.getUint16(e,!0):i.getUint8(e)}}else m=Uint32Array.from({length:d.count},(e,t)=>t);return ow(e,{vertProperties:p,triVerts:m},`importGLB`)}function jw(e){return{exportSTL:(e,t)=>rw(e,t),exportOBJ:e=>iw(e),exportPLY:e=>aw(e),importSTL:t=>cw(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>sw(e,t),exportSTEP:e=>Hy(`exportSTEP`).exportSTEP(e.map(e=>hw(e).brep)),exportIGES:e=>Hy(`exportIGES`).exportIGES(e.map(e=>hw(e).brep)),toBREP:e=>{let{occt:t,brep:n}=hw(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Hy(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:hw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return n.exportSTEPAssembly(r,t)},createXCAFDocument:e=>{let t=Hy(`createXCAFDocument`),n=e.map(e=>{let t={shape:hw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Hy(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Hy(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:hw(e.shape).brep},n=e.name===void 0?t:{...t,name:e.name};return e.color===void 0?n:{...n,color:e.color}});return n.exportSTEPConfigured(r,t)},importSTEP:t=>{let n=Hy(`importSTEP`);return n.importSTEP(t).map(t=>gw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Hy(`importIGES`);return n.importIGES(t).map(t=>gw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Hy(`fromBREP`);return gw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>kw(e),importGLB:t=>Aw(e,t),export3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)},import3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)}}}function Mw(e){return V(e).getMesh()}function Nw(e,t){let n=t*(e.numProp&&e.numProp>=3?e.numProp:3);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function Pw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Vy();if(!e)throw new c(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=zy(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Vy();if(!i)throw new c(`manifold: exact geometry query unsupported on manifold kernel; no B-rep kernel registered`);if(!r.node.replayable)throw Error(`manifold: exact geometry query unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Uy.get(r.node);return a===void 0&&(a=iC(r.node,i),Uy.set(r.node,a)),t(a,i)}function Fw(e){let t=zy(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function Iw(e){return{curveType:e=>{let t=Fw(e);return t?kb(t):zC(e)?e.curveType:Pw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=Fw(e);if(t){let e=Ab(t);return[e.first,e.last]}return zC(e)?[0,e.length]:Pw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=Fw(e);return n?jb(n,t):zC(e)?BC(e,t):Pw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=Fw(e);return n?{point:jb(n,t),tangent:Mb(n,t)}:zC(e)?{point:BC(e,t),tangent:VC(e,t)}:Pw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=Fw(e);return t?Pb(t):Pw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=Fw(e);return t?Fb(t):Pw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=Fw(e);return t?Ib(t):Pw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Hy(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Hy(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>Pw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>Pw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>Pw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>Pw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>Pw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>Pw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>Pw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>RC(e)?e.point:zy(e)?Nw(Mw(e),0):Pw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(kC(e))return`plane`;let t=zy(e);return t&&t.node.op===`profileFace`?`plane`:Pw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>kC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:Pw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>Pw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>kC(e)?e.normal:Pw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>Pw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>Pw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>Pw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>Pw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>Pw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>Pw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Hy(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>Pw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>Pw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>Pw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Hy(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>Pw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>Pw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>Pw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>Pw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Lw={hasErrors:!1,hasWarnings:!1,messages:[]};function Rw(){return{modified:new Map,generated:new Map,deleted:new Set}}function zw(e){return{shape:e,evolution:Rw()}}function Bw(e){return{shape:e,evolution:Rw(),diagnostics:Lw}}function Vw(e){let t=Sb(e),n=eb(e),r=OS(e);return{translateWithHistory:(e,n,r,i)=>zw(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>zw(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>zw(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>zw(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>zw(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Bw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Bw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Bw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>zw(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>zw(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>zw(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>zw(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>zw(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>zw(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>zw(t.transform(e,n))}}function Hw(e){let t=e?.manifold;if(!t||typeof t.isEmpty==`function`&&t.isEmpty())return!1;if(typeof t.status==`function`){let e=t.status(),n=typeof e==`number`?e:Number(e?.value??e);if(!Number.isNaN(n)&&n!==0)return!1}return!0}function Uw(e){return{isValid:e=>Hw(e),isValidStrict:e=>Hw(e),healSolid:e=>Hw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var Ww=.004;function Gw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function Kw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function qw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Jw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Yw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Xw(e,t){return{a:e.a*t.a+e.b*t.c,b:e.a*t.b+e.b*t.d,c:e.c*t.a+e.d*t.c,d:e.c*t.b+e.d*t.d,tx:e.a*t.tx+e.b*t.ty+e.tx,ty:e.c*t.tx+e.d*t.ty+e.ty}}function Zw(e,t){return e.k===`line`?Kw(Jw(t,e.p1),Jw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Jw(t,e))}:qw(Jw(t,e.c),Yw(t,e.u),Yw(t,e.v),e.a0,e.a1)}function Qw(e,t){let n=e.map(e=>[e[0],e[1]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0],i=n[r+1]??[0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t]}return n[0]??[0,0]}function $w(e,t){let n=Math.cos(t),r=Math.sin(t);return[e.c[0]+e.u[0]*n+e.v[0]*r,e.c[1]+e.u[1]*n+e.v[1]*r]}function eT(e,t){let n=e.length-1;if(n<1)return[0,0];let r=[];for(let t=0;t<n;t++){let i=e[t]??[0,0],a=e[t+1]??[0,0];r.push([n*(a[0]-i[0]),n*(a[1]-i[1])])}return Qw(r,t)}function tT(e){let t=Math.abs(e.a1-e.a0),n=Math.hypot(e.u[0],e.u[1]),r=Math.hypot(e.v[0],e.v[1]),i=Math.max(n,r);if(i<=Ww)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-Ww/i));return Math.max(2,Math.ceil(t/a))}function nT(e){if(e.k===`line`)return[e.p1,e.p2];if(e.k===`bezier`){let t=[];for(let n=0;n<=24;n++)t.push(Qw(e.pts,n/24));return t}let t=e.a1-e.a0,n=tT(e),r=[];for(let i=0;i<=n;i++){let a=e.a0+t*i/n,o=Math.cos(a),s=Math.sin(a);r.push([e.c[0]+e.u[0]*o+e.v[0]*s,e.c[1]+e.u[1]*o+e.v[1]*s])}return r}function rT(e,t,n){let r=e[0],i=e[1],a=t[0],o=t[1],s=n[0],c=n[1],l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return Kw(e,n);let u=((r*r+i*i)*(o-c)+(a*a+o*o)*(c-i)+(s*s+c*c)*(i-o))/l,d=((r*r+i*i)*(s-a)+(a*a+o*o)*(r-s)+(s*s+c*c)*(a-r))/l,f=[u,d],p=Math.hypot(r-u,i-d),m=e=>Math.atan2(e[1]-d,e[0]-u),h=m(e),g=m(t),_=m(n),v=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),y=v(g-h),b=v(_-h);return _=y<=b?h+b:h-v(h-_),qw(f,[p,0],[0,p],h,_)}function iT(e,t){let n={delete:()=>{},isEmpty:()=>!1};function r(e,...n){let r=t(),i=r?.[e];if(!i)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return i.call(r,...n)}let i=e=>e;function a(e){let n=t();if(!n)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return n}function o(e){if(!Gw(e))return e;let t=a(`toOcct`),n=i(e);if(n.k===`line`)return t.makeLine2d(n.p1[0],n.p1[1],n.p2[0],n.p2[1]);if(n.k===`bezier`)return t.makeBezier2d(n.pts);let r=Math.hypot(n.u[0],n.u[1]),o=Math.hypot(n.v[0],n.v[1]),s=Math.abs(Math.abs(n.a1-n.a0)-2*Math.PI)<1e-9,c=n.u[0]*n.v[1]-n.u[1]*n.v[0]>=0;if(Math.abs(r-o)<1e-9*Math.max(1,r)){if(s)return t.makeCircle2d(n.c[0],n.c[1],r,c);let e=$w(n,n.a0),i=$w(n,(n.a0+n.a1)/2),a=$w(n,n.a1);return t.makeArc2dThreePoints(e[0],e[1],i[0],i[1],a[0],a[1])}let l=n.u[0]*n.v[0]+n.u[1]*n.v[1];if(Math.abs(l)<1e-9*Math.max(1,r*o)){let e=n.u[0]/r,i=n.u[1]/r;return s?t.makeEllipse2d(n.c[0],n.c[1],r,o,e,i,c):t.makeEllipseArc2d(n.c[0],n.c[1],r,o,n.a0,n.a1,e,i,c)}return t.makeBSpline2d(nT(n).map(e=>[e[0],e[1]]))}let s={createPoint2d:(e,t)=>({x:e,y:t}),createDirection2d:(e,t)=>({x:e,y:t}),createVector2d:(e,t)=>({x:e,y:t}),createAxis2d:(e,t,n,r)=>({px:e,py:t,dx:n,dy:r}),wrapCurve2dHandle:e=>e,createCurve2dAdaptor:e=>e,makeLine2d:(e,t,n,r)=>Kw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>qw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>rT([e,t],[n,r],[i,a]),makeArc2dTangent:(e,t,n,r,i,a)=>{let o=Math.hypot(n,r)||1,s=-r/o,c=n/o,l=[i-e,a-t],u=s*l[0]+c*l[1];if(Math.abs(u)<1e-12)return Kw([e,t],[i,a]);let d=(l[0]*l[0]+l[1]*l[1])/(2*u),f=e+s*d,p=t+c*d,m=Math.hypot(e-f,t-p),h=Math.atan2(t-p,e-f),g=Math.atan2(a-p,i-f);s*n+c*r;let _=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),v=[-(t-p),e-f];return g=v[0]*n+v[1]*r>=0?h+_(g-h):h-_(h-g),qw([f,p],[m,0],[0,m],h,g)},makeEllipse2d:(e,t,n,r,i=1,a=0,o=!0)=>{let s=Math.hypot(i,a)||1,c=i/s*n,l=a/s*n,u=-a/s*r*(o?1:-1),d=i/s*r*(o?1:-1);return qw([e,t],[c,l],[u,d],0,2*Math.PI)},makeEllipseArc2d:(e,t,n,r,i,a,o=1,s=0,c=!0)=>{let l=Math.hypot(o,s)||1,u=o/l*n,d=s/l*n,f=-s/l*r*(c?1:-1),p=o/l*r*(c?1:-1);return qw([e,t],[u,d],[f,p],i,a)},makeBezier2d:e=>({__nativeC2d:!0,k:`bezier`,pts:e.map(e=>[e[0],e[1]])}),evaluateCurve2d:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return[n.p1[0]+e*t/i,n.p1[1]+r*t/i]}return n.k===`bezier`?Qw(n.pts,t):[n.c[0]+n.u[0]*Math.cos(t)+n.v[0]*Math.sin(t),n.c[1]+n.u[1]*Math.cos(t)+n.v[1]*Math.sin(t)]},evaluateCurve2dD1:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return{point:[n.p1[0]+e*t/i,n.p1[1]+r*t/i],tangent:[e/i,r/i]}}if(n.k===`bezier`)return{point:Qw(n.pts,t),tangent:eT(n.pts,t)};let r=Math.cos(t),a=Math.sin(t);return{point:[n.c[0]+n.u[0]*r+n.v[0]*a,n.c[1]+n.u[1]*r+n.v[1]*a],tangent:[-n.u[0]*a+n.v[0]*r,-n.u[1]*a+n.v[1]*r]}},getCurve2dBounds:e=>{let t=i(e);return t.k===`conic`?{first:t.a0,last:t.a1}:t.k===`line`?{first:0,last:Math.hypot(t.p2[0]-t.p1[0],t.p2[1]-t.p1[1])}:{first:0,last:1}},getCurve2dType:e=>{let t=i(e);return t.k===`line`?`LINE`:t.k===`bezier`?`BEZIER`:`CIRCLE`},reverseCurve2d:e=>{let t=i(e);if(t.k===`line`){let e=t.p1;t.p1=t.p2,t.p2=e}else if(t.k===`bezier`)t.pts.reverse();else{let e=t.a0;t.a0=t.a1,t.a1=e}},copyCurve2d:e=>structuredClone(i(e)),trimCurve2d:(e,t,n)=>{let r=i(e);if(r.k===`conic`)return qw(r.c,r.u,r.v,t,n);if(r.k===`line`){let e=r.p2[0]-r.p1[0],i=r.p2[1]-r.p1[1],a=Math.hypot(e,i)||1;return Kw([r.p1[0]+e*t/a,r.p1[1]+i*t/a],[r.p1[0]+e*n/a,r.p1[1]+i*n/a])}return structuredClone(r)},createIdentityGTrsf2d:()=>({a:1,b:0,c:0,d:1,tx:0,ty:0}),createTranslationGTrsf2d:(e,t)=>({a:1,b:0,c:0,d:1,tx:e,ty:t}),createRotationGTrsf2d:(e,t,n)=>{let r=Math.cos(e),i=Math.sin(e);return{a:r,b:-i,c:i,d:r,tx:t-(r*t-i*n),ty:n-(i*t+r*n)}},createScaleGTrsf2d:(e,t,n)=>({a:e,b:0,c:0,d:e,tx:t-e*t,ty:n-e*n}),createMirrorGTrsf2d:(e,t,n,r=0,i=0,a=1,o=0)=>{if(n===`point`)return{a:-1,b:0,c:0,d:-1,tx:2*e,ty:2*t};let s=Math.hypot(a,o)||1,c=a/s,l=o/s,u=c*c-l*l,d=2*c*l;return{a:u,b:d,c:d,d:-u,tx:r-(u*r+d*i),ty:i-(d*r-u*i)}},createAffinityGTrsf2d:(e,t,n,r,i)=>{let a=Math.hypot(n,r)||1,o=n/a,s=r/a,c=-s,l=o,u=o*o+i*c*c,d=o*s+i*c*l,f=s*o+i*l*c,p=s*s+i*l*l;return{a:u,b:d,c:f,d:p,tx:e-(u*e+d*t),ty:t-(f*e+p*t)}},setGTrsf2dTranslationPart:(e,t,n)=>{let r=e;r.tx=t,r.ty=n},multiplyGTrsf2d:(e,t)=>{let n=Xw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Zw(i(e),t),translateCurve2d:(e,t,n)=>Zw(i(e),{a:1,b:0,c:0,d:1,tx:t,ty:n}),rotateCurve2d:(e,t,n,r)=>{let a=Math.cos(t),o=Math.sin(t);return Zw(i(e),{a,b:-o,c:o,d:a,tx:n-(a*n-o*r),ty:r-(o*n+a*r)})},scaleCurve2d:(e,t,n,r)=>Zw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Zw(i(e),{a:-1,b:0,c:0,d:-1,tx:2*t,ty:2*n}),mirrorCurve2dAcrossAxis:(e,t,n,r,a)=>{let o=Math.hypot(r,a)||1,s=r/o,c=a/o,l=s*s-c*c,u=2*s*c;return Zw(i(e),{a:l,b:u,c:u,d:-l,tx:t-(l*t+u*n),ty:n-(u*t-l*n)})},affinityTransform2d:(e,t,n,r,a,o)=>{let s=Math.hypot(r,a)||1,c=r/s,l=a/s,u=-l,d=c,f=c*c+o*u*u,p=c*l+o*u*d,m=l*c+o*d*u,h=l*l+o*d*d;return Zw(i(e),{a:f,b:p,c:m,d:h,tx:t-(f*t+p*n),ty:n-(m*t+h*n)})},createBoundingBox2d:()=>({min:[1/0,1/0],max:[-1/0,-1/0]}),addCurveToBBox2d:(e,t)=>{let n=e,r;if(Gw(t))r=nT(i(t));else{let e=a(`addCurveToBBox2d`),{first:n,last:i}=e.getCurve2dBounds(t);r=[];for(let a=0;a<=32;a++)r.push(e.evaluateCurve2d(t,n+(i-n)*a/32))}for(let[e,t]of r)e<n.min[0]&&(n.min[0]=e),t<n.min[1]&&(n.min[1]=t),e>n.max[0]&&(n.max[0]=e),t>n.max[1]&&(n.max[1]=t)},getBBox2dBounds:e=>{let t=e;return{xMin:t.min[0],yMin:t.min[1],xMax:t.max[0],yMax:t.max[1]}},mergeBBox2d:(e,t)=>{let n=e,r=t;n.min[0]=Math.min(n.min[0],r.min[0]),n.min[1]=Math.min(n.min[1],r.min[1]),n.max[0]=Math.max(n.max[0],r.max[0]),n.max[1]=Math.max(n.max[1],r.max[1])},isBBox2dOut:(e,t)=>{let n=e,r=t;return n.max[0]<r.min[0]||n.min[0]>r.max[0]||n.max[1]<r.min[1]||n.min[1]>r.max[1]},isBBox2dOutPoint:(e,t,n)=>{let r=e;return t<r.min[0]||t>r.max[0]||n<r.min[1]||n>r.max[1]},getCurve2dCircleData:e=>{let t=i(e);if(t.k!==`conic`)return null;let n=Math.hypot(t.u[0],t.u[1]),r=Math.hypot(t.v[0],t.v[1]);return Math.abs(n-r)>1e-6?null:{cx:t.c[0],cy:t.c[1],radius:n,isDirect:!0}},liftCurve2dToPlane:(e,t,r,a)=>{let o=r[0],s=r[1],c=r[2],l=a[0],u=a[1],d=a[2],f=s*d-c*u,p=c*l-o*d,m=o*u-s*l,h=nT(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n]);return B(n,z(`profileEdge`,{pts:h},[]))},makeBSpline2d:(e,t)=>a(`makeBSpline2d`).makeBSpline2d(e,t),offsetCurve2d:(e,t)=>a(`offsetCurve2d`).offsetCurve2d(o(e),t),intersectCurves2d:(e,t,n)=>a(`intersectCurves2d`).intersectCurves2d(o(e),o(t),n),projectPointOnCurve2d:(e,t,n)=>a(`projectPointOnCurve2d`).projectPointOnCurve2d(o(e),t,n),distanceBetweenCurves2d:(e,t,n,r,i,s)=>a(`distanceBetweenCurves2d`).distanceBetweenCurves2d(o(e),o(t),n,r,i,s),approximateCurve2dAsBSpline:(e,t,n,r)=>a(`approximateCurve2dAsBSpline`).approximateCurve2dAsBSpline(o(e),t,n,r),decomposeBSpline2dToBeziers:e=>a(`decomposeBSpline2dToBeziers`).decomposeBSpline2dToBeziers(o(e)),serializeCurve2d:e=>a(`serializeCurve2d`).serializeCurve2d(o(e)),deserializeCurve2d:e=>a(`deserializeCurve2d`).deserializeCurve2d(e),splitCurve2d:(e,t)=>a(`splitCurve2d`).splitCurve2d(o(e),t),getCurve2dEllipseData:e=>a(`getCurve2dEllipseData`).getCurve2dEllipseData(o(e)),getCurve2dBezierPoles:e=>a(`getCurve2dBezierPoles`).getCurve2dBezierPoles(o(e)),getCurve2dBezierDegree:e=>a(`getCurve2dBezierDegree`).getCurve2dBezierDegree(o(e)),getCurve2dBSplineData:e=>a(`getCurve2dBSplineData`).getCurve2dBSplineData(o(e)),buildEdgeOnSurface:(e,t)=>a(`buildEdgeOnSurface`).buildEdgeOnSurface(o(e),t),extractSurfaceFromFace:e=>a(`extractSurfaceFromFace`).extractSurfaceFromFace(e),extractCurve2dFromEdge:(e,t)=>a(`extractCurve2dFromEdge`).extractCurve2dFromEdge(e,t),buildCurves3d:e=>{a(`buildCurves3d`).buildCurves3d(e)},fixWireOnFace:(e,t,n)=>a(`fixWireOnFace`).fixWireOnFace(e,t,n),fillSurface:(e,t)=>a(`fillSurface`).fillSurface(e,t)};for(let e of[`evaluateCurve2d`,`evaluateCurve2dD1`,`getCurve2dBounds`,`getCurve2dType`,`reverseCurve2d`,`copyCurve2d`,`trimCurve2d`,`transformCurve2dGeneral`,`translateCurve2d`,`rotateCurve2d`,`scaleCurve2d`,`mirrorCurve2dAtPoint`,`mirrorCurve2dAcrossAxis`,`affinityTransform2d`,`getCurve2dCircleData`,`liftCurve2dToPlane`]){let t=s[e];t&&(s[e]=((n,...i)=>Gw(n)?t(n,...i):r(e,n,...i)))}return s}var aT=`createPoint2d.createDirection2d.createVector2d.createAxis2d.wrapCurve2dHandle.createCurve2dAdaptor.makeLine2d.makeCircle2d.makeArc2dThreePoints.makeArc2dTangent.makeEllipse2d.makeEllipseArc2d.makeBezier2d.makeBSpline2d.evaluateCurve2d.evaluateCurve2dD1.getCurve2dBounds.getCurve2dType.trimCurve2d.reverseCurve2d.copyCurve2d.offsetCurve2d.translateCurve2d.rotateCurve2d.scaleCurve2d.mirrorCurve2dAtPoint.mirrorCurve2dAcrossAxis.affinityTransform2d.createIdentityGTrsf2d.createAffinityGTrsf2d.createTranslationGTrsf2d.createMirrorGTrsf2d.createRotationGTrsf2d.createScaleGTrsf2d.setGTrsf2dTranslationPart.multiplyGTrsf2d.transformCurve2dGeneral.intersectCurves2d.projectPointOnCurve2d.distanceBetweenCurves2d.approximateCurve2dAsBSpline.decomposeBSpline2dToBeziers.createBoundingBox2d.addCurveToBBox2d.getBBox2dBounds.mergeBBox2d.isBBox2dOut.isBBox2dOutPoint.getCurve2dCircleData.getCurve2dEllipseData.getCurve2dBezierPoles.getCurve2dBezierDegree.getCurve2dBSplineData.serializeCurve2d.deserializeCurve2d.splitCurve2d.liftCurve2dToPlane.buildEdgeOnSurface.extractSurfaceFromFace.extractCurve2dFromEdge.buildCurves3d.fixWireOnFace.fillSurface`.split(`.`);function oT(e){let t=Vy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function sT(e){let t={};for(let e of aT)t[e]=(...t)=>oT(e)[e](...t);let n=iT(e,()=>Vy());return Object.assign(t,n),t}function cT(e){return{sketchNew:()=>Iy(`sketchNew`),sketchAddPoint:()=>Iy(`sketchAddPoint`),sketchAddArc:()=>Iy(`sketchAddArc`),sketchAddConstraint:()=>Iy(`sketchAddConstraint`),sketchSolve:()=>Iy(`sketchSolve`),sketchDof:()=>Iy(`sketchDof`)}}function lT(e){return{projectEdges:()=>Iy(`projectEdges`)}}function uT(e){return{dispose(e){let t=zy(e);if(t){let e=Uy.get(t.node);e!==void 0&&(Vy()?.dispose(e),Uy.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>Iy(`executeBatch`),checkpoint:()=>Iy(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>Iy(`restoreCheckpoint`),discardCheckpoint:()=>Iy(`discardCheckpoint`)}}var dT={draft:30,standard:10,fine:3},fT=class{oc;kernelId=`manifold`;capabilities={exact:!1,brepExport:!1,exactMeasurement:!1,tessellationModel:`build-time`};setQuality(e){let t=this.oc;t.setCircularSegments?.(0),t.setMinCircularEdgeLength?.(0),t.setMinCircularAngle?.(dT[e])}constructor(e){this.oc=e,Object.assign(this,Yy(e),eb(e),Sb(e),kx(e),tS(e),OS(e),IS(e),EC(e),XC(e),jw(e),Iw(e),Vw(e),Uw(e),sT(e),cT(e),lT(e),uT(e))}};function pT(e){return import(e)}function mT(e){return`projectEdges`in e}function hT(e){return`sketchNew`in e&&`sketchDof`in e}var gT=new Map,_T=null,vT=null;function yT(e){bT(`manifold`,new fT(e))}function bT(e,t){gT.set(e,t),_T||=e,e===_T&&(vT=t)}function U(e){if(!e&&vT)return vT;let t=e??_T;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=gT.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function xT(e){let t=U(e);if(!No(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function ST(){return _T}function CT(e,t){let n=_T;_T=e,vT=gT.get(e)??null;try{let e=t();if(e instanceof Promise)throw Error(`withKernel() callback returned a Promise. Async code must use getKernel(id) directly — the kernel override is restored synchronously in finally.`);return e}finally{_T=n,vT=n?gT.get(n)??null:null}}function wT(e){return U(e).capabilities}function TT(e,t){let n=Ao();try{Mo(e),U().setQuality?.(e);let n=t();if(n instanceof Promise)throw Error(`withQuality() callback returned a Promise. Async code must read currentQuality()/getKernel() directly.`);return n}finally{Mo(n),U().setQuality?.(n)}}var ET=new Map;function DT(e,t){ET.set(e,t)}function OT(e){return ET.get(e)}function kT(e,t){let n=ET.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return CT(n.kernel,()=>TT(n.quality,t))}function AT(e){Yo(),ll(),Ho(),zc(),Bc(),tl(),nl();let t=new Gf(e);bT(`occt`,t),_T=`occt`,vT=t}function jT(){let e=U(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function MT(){if(_T)return _T;try{let{OcctKernel:e}=await pT(`occt-wasm`),t=await e.init();return bT(`occt-wasm`,Wa.fromKernel(t)),`occt-wasm`}catch{}try{return AT(await(await pT(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await pT(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),bT(`brepkit`,new Fy(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
13
+ npm install occt-wasm (recommended, default)
14
+ npm install brepjs-opencascade
15
+ npm install brepkit-wasm`)}function NT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var PT=Symbol;PT.dispose??=Symbol.for(`Symbol.dispose`),PT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var FT=globalThis;FT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var IT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function LT(){return{...IT}}function RT(){IT.liveHandles=0,IT.peakHandles=0,IT.gcCollected=0,IT.scopeEnters=0,IT.scopeExits=0}function zT(){IT.liveHandles++,IT.liveHandles>IT.peakHandles&&(IT.peakHandles=IT.liveHandles)}function BT(){IT.liveHandles--}function VT(){IT.gcCollected++,IT.liveHandles--}var HT=new FinalizationRegistry(e=>{VT();try{e.delete()}catch{}});function UT(e){let t=U(),n=!1,r,i=()=>{if(r){for(let e of r)try{e()}catch{}r=void 0}},a=()=>{if(!n){n=!0,BT(),HT.unregister(o),i();try{t.dispose(e)}catch{}}},o={get wrapped(){if(n)throw Error(`Shape handle has been disposed`);return e},get disposed(){return n},[Symbol.dispose](){a()},delete(){a()},onDispose(e){if(n){e();return}(r??=[]).push(e)}};return zT(),HT.register(o,{delete:()=>{t.dispose(e)}},o),o}function WT(e){let t=()=>{};return{get wrapped(){return e},get disposed(){return!1},[Symbol.dispose]:t,delete:t,onDispose:t}}function GT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,BT(),HT.unregister(n);try{e.delete()}catch{}}}};return zT(),HT.register(n,e,n),n}var KT=class{handles=[];constructor(){IT.scopeEnters++}register(e){return this.handles.push(()=>{try{let t=e[Symbol.dispose];typeof t==`function`?t.call(e):e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){IT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function qT(e){try{var t=NT();return e(t.u(new KT))}catch(e){t.e=e}finally{t.d()}}function JT(e,t){HT.register(e,t,t)}function YT(e){HT.unregister(e)}function XT(e){try{var t=NT();return e(t.u(new KT))}catch(e){t.e=e}finally{t.d()}}async function ZT(e){try{var t=NT();return await e(t.u(new KT))}catch(e){t.e=e}finally{t.d()}}function QT(e){return!e.disposed}function $T(e){return e.__is2D!==!0}function eE(e){return e.__is2D===!0}function tE(e){if(!$T(e))throw Error(`Expected 3D shape, got 2D`);return e}function nE(e){if(!eE(e))throw Error(`Expected 2D shape, got 3D`);return e}var rE=new WeakMap;function iE(e,t){rE.set(e,t)}function aE(e,t){let n=rE.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return rE.set(t,r),r}function oE(e){return aE(U(),e.wrapped)}function sE(e){return U().curveIsClosed(e.wrapped)}function cE(e){return U().isValid(e.wrapped)}function lE(e){let t=U();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function uE(e){return U().isValid(e.wrapped)}function dE(e){return sE(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function fE(e){return cE(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function pE(e){return lE(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function mE(e){return uE(e)?O(e):k(`Solid failed BRepCheck validation`)}function hE(e){return U().surfaceType(e.wrapped)===`plane`}function gE(e){let t=U(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function _E(e){return hE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function vE(e){return gE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function yE(e,t){return t===`2D`&&(e.__is2D=!0),e}function bE(e,t){return yE(UT(e),t)}function xE(e,t){return yE(UT(e),t)}function SE(e,t){return yE(UT(e),t)}function CE(e,t){return yE(UT(e),t)}function wE(e){return yE(UT(e))}function TE(e){return yE(UT(e))}function EE(e){return yE(UT(e))}function DE(e,t){return yE(UT(e),t)}function OE(e){return oE(e)===`vertex`}function kE(e){return oE(e)===`edge`}function AE(e){return oE(e)===`wire`}function jE(e){return oE(e)===`face`}function ME(e){return oE(e)===`shell`}function NE(e){return oE(e)===`solid`}function PE(e){return oE(e)===`compound`}function FE(e){let t=oE(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?$T(e):!1}function IE(e){let t=oE(e);return t===`edge`||t===`wire`}function LE(e,t){let n=U(),r=aE(n,e),i=n.downcast(e,r);return r===`vertex`?bE(i,t):r===`edge`?xE(i,t):r===`wire`?SE(i,t):r===`face`?CE(i,t):r===`shell`?wE(i):r===`solid`?TE(i):r===`compsolid`?EE(i):DE(i,t)}function RE(e){return LE(e)}function zE(e,t){let n=e.id,r=t.wrapped.id;(n!==void 0&&r!==void 0?n===r:t.wrapped===e)||U().dispose(e)}function W(e,t){let n=LE(e,t);return zE(e,n),n}function BE(e,t){let n=e.wrapped;if(e[Symbol.dispose](),n!==t){let e=U();e.dispose(n),e.dispose(t)}}function VE(e){U().dispose(e.wrapped),e[Symbol.dispose]()}function HE(e,t,n){iE(e,t);let r=U().downcast(e,t);return t===`vertex`?bE(r,n):t===`edge`?xE(r,n):t===`wire`?SE(r,n):t===`face`?CE(r,n):t===`shell`?wE(r):t===`solid`?TE(r):t===`compsolid`?EE(r):DE(r,n)}function UE(e,t,n){let r=HE(e,t,n);return zE(e,r),r}function WE(e,t,n){return iE(e,t),yE(WT(e),n)}var G=2147483647,GE=Math.PI/180,KE=180/Math.PI;function qE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var JE={KERNEL_OPERATION:(e,t,n,r)=>qE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>qE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>qE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>qE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>qE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>qE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>qE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>qE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>qE(`UNSUPPORTED`,e,t,n,r)};function YE(e,t,n,r=`KERNEL_OPERATION`){try{return O(W(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?yo(i):i,o=vo(t);return k(JE[r](t,`${n}: ${a}`,e,o))}}function XE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?yo(i):i,o=vo(t);return k(JE[r](t,`${n}: ${a}`,e,o))}}function ZE(e,t,n,r=`KERNEL_OPERATION`){try{var i=NT();let a=i.u(new KT);return YE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function QE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=UE(n[e],t);return r}function $E(e,t){let n=U();if(n.subShapeCount)return n.subShapeCount(e.wrapped,t);let r=n.iterShapes(e.wrapped,t);for(let e of r)n.dispose(e);return r.length}function eD(e,t){let n=U();if(n.subShapeHashes)return n.subShapeHashes(e.wrapped,t,G);let r=new Set;for(let i of n.iterShapes(e.wrapped,t))r.add(n.hashCode(i,G)),n.dispose(i);return[...r]}var tD=new WeakMap;function nD(e){let t=tD.get(e);if(!t)return;tD.delete(e);let n=[t.edges,t.faces,t.wires,t.vertices,t.shells,t.solids,t.compSolids];for(let e of n)if(e)for(let t of e)t[Symbol.dispose]()}var rD=new WeakSet;function iD(e){let t=e.wrapped,n=tD.get(t);return n||(n={},tD.set(t,n)),rD.has(e)||(rD.add(e),e.onDispose(()=>{nD(t)})),n}function aD(e){return tD.get(e.wrapped)}function oD(e){nD(e.wrapped)}function sD(e){let t=iD(e);if(t.edges)return t.edges;let n=QE(e.wrapped,`edge`);return t.edges=n,n}function cD(e){let t=iD(e);if(t.faces)return t.faces;let n=QE(e.wrapped,`face`);return t.faces=n,n}function lD(e){let t=iD(e);if(t.wires)return t.wires;let n=QE(e.wrapped,`wire`);return t.wires=n,n}function uD(e){let t=iD(e);if(t.vertices)return t.vertices;let n=QE(e.wrapped,`vertex`);return t.vertices=n,n}function dD(e){let t=iD(e);if(t.solids)return t.solids;let n=QE(e.wrapped,`solid`);return t.solids=n,n}function fD(e){let t=iD(e);if(t.shells)return t.shells;let n=QE(e.wrapped,`shell`);return t.shells=n,n}function pD(e){let t=iD(e);if(t.compSolids)return t.compSolids;let n=QE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*mD(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield UE(t,`edge`)}function*hD(e){for(let t of U().iterShapes(e.wrapped,`face`))yield UE(t,`face`)}function*gD(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield UE(t,`wire`)}function*_D(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield UE(t,`vertex`)}function*vD(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield UE(t,`solid`)}function*yD(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield UE(t,`shell`)}function*bD(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield UE(t,`compsolid`)}function xD(e){let t=iD(e);if(t.bounds)return t.bounds;let{min:n,max:r}=U().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function SD(e){return aE(U(),e.wrapped)}function CD(e){let t=iD(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function wD(e){let t=iD(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function TD(e){return{kind:SD(e),faceCount:$E(e,`face`),edgeCount:$E(e,`edge`),wireCount:$E(e,`wire`),vertexCount:$E(e,`vertex`),valid:wD(e),bounds:xD(e)}}function ED(e){return U().vertexPosition(e.wrapped)}function DD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function OD(e){return[e[0],e[1]]}var kD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function AD(e){if(typeof e==`string`){let t=kD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function jD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function MD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function ND(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function PD(e){return[-e[0],-e[1],-e[2]]}function FD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function ID(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function LD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function RD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function zD(e,t){return LD(MD(e,t))}function BD(e){let t=LD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function VD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function HD(e,t=1e-10){return RD(e)<t*t}function UD(e,t){let n=FD(e,t),r=LD(e),i=LD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function WD(e,t,n){let r=MD(e,t),i=RD(n);return i<1e-20?e:MD(e,ND(n,FD(r,n)/i))}function GD(e,t,n){let r=BD(t),i=Math.cos(n),a=Math.sin(n),o=FD(e,r),s=ID(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var KD=e=>Math.round(e*1e3)/1e3;function qD(e){return`x: ${KD(e[0])}, y: ${KD(e[1])}, z: ${KD(e[2])}`}function JD(e,t=null,n=[0,0,1]){let r=BD(n);if(HD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=BD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?BD([l,u,d]):[1,0,0]}if(HD(i))throw Error(`Plane xDir must be non-zero`);let a=BD(ID(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var YD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function XD(e,t=[0,0,0]){let n=YD[e];if(!n)return k(P(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?ND(n.normal,t):DD(t),O(JD(r,n.xDir,n.normal))}function ZD(e,t){return typeof e==`string`?XD(e,t):O(e)}function QD(e,t){return e&&typeof e!=`string`?{...e}:j(ZD(e??`XY`,t))}function $D(e,t){let[n,r]=t;return jD(jD(e.origin,ND(e.xDir,n)),ND(e.yDir,r))}function eO(e,t){return{...e,origin:jD(e.origin,t)}}function tO(e,t,n=[1,0,0]){let r=t*GE,i=GD(e.zDir,n,r),a=GD(e.xDir,n,r),o=BD(ID(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var nO={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},rO=e=>nO[e],iO={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},aO=function*(e,t){let n=U().iterShapes(e,iO[t]);for(let e of n)yield e},oO=e=>U().isNull(e)?k(xo(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function sO(e){if(U().isNull(e))return k(xo(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch(e){return k(xo(`NO_WRAPPER`,`Could not find a wrapper for this shape type`,e))}}function cO(e){if(U().isNull(e))return k(xo(`NULL_SHAPE`,`Cannot copy a null shape`));try{return O(U().copyShape(e))}catch(e){return k(xo(`NO_WRAPPER`,`Could not copy this shape`,e))}}function lO(e){return U().isNull(e)?k(xo(`NULL_SHAPE`,`Cannot cast a null shape`)):O(LE(e))}function uO(e){return U().shapeType(e.wrapped)===`compsolid`}function dO(e){return lO(U().fromBREP(e))}var fO={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function pO(e){return O(fO[CD(e)])}function mO(e){return j(pO(e))}function hO(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function gO(e){return LE(U().reverseShape(e.wrapped))}function _O(e){return U().uvBounds(e.wrapped)}function vO(e,t,n){let r=_O(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return U().pointOnSurface(e.wrapped,i,a)}function yO(e,t){let n=DD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function bO(e,t){let n=DD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(xo(`PROJECTION_FAILED`,`No projection found on the face`));let i=U().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(xo(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function xO(e,t){let n,r;if(t)[n,r]=yO(e,t);else{let t=_O(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function SO(e){return U().surfaceCenterOfMass(e.wrapped)}function CO(e){return U().getSurfaceAxis(e.wrapped)}function wO(e,t,n=1e-6){let[r,i]=yO(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function TO(e){return LE(U().outerWire(e.wrapped))}function EO(e){return LE(U().removeHolesFromFace(e.wrapped))}function DO(e){let t=TO(e);return Array.from(aO(e.wrapped,`wire`)).map(e=>LE(j(sO(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function OO(e,t){let n=iD(e),r=new Map;for(let n of eD(e,`face`))r.set(n,t);n.faceOrigins=r}function kO(e){return aD(e)?.faceOrigins}function AO(e,t,n){let r=new Map;for(let e of t){let t=kO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,n)}if(i.size>0){let e=iD(n);e.faceOrigins=i}}var jO=100,MO=.985,NO=.1;function PO(e,t,n,r){let i=-1/0,a;for(let n of r){let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(r<.707)continue;let o=t[0]-n.centroid[0],s=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=o*o+s*s+c*c;if(l>jO)continue;let u=r-l/jO;u>i&&(i=u,a=n.origin)}if(a!==void 0)return a;if(!n)return;let o=1/0,s;for(let n of r){if(!n.planar)continue;let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(Math.abs(r)<MO)continue;let i=t[0]-n.centroid[0],a=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=i*n.normal[0]+a*n.normal[1]+c*n.normal[2];if(l*l>NO)continue;let u=Math.max(0,i*i+a*a+c*c-l*l);u<o&&(o=u,s=n.origin)}return s}function FO(e,t){let n=new Map;for(let t of e){let e=kO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=U(),i=new Map,a=cD(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=kO(n);if(e)for(let i of cD(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped),s=r.surfaceType(i.wrapped)===`plane`;t.push({origin:a,normal:n,centroid:o,planar:s})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=PO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),r.surfaceType(e.wrapped)===`plane`,t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=iD(t);e.faceOrigins=i}}var IO=new WeakMap,LO=new WeakMap;function RO(e){return IO.has(e.wrapped)}function zO(e){let t=IO.get(e.wrapped);return t||(t=new Map,IO.set(e.wrapped,t)),t}function BO(e){let t=LO.get(e.wrapped);return t||(t=new Map,LO.set(e.wrapped,t)),t}function VO(e,t,n){let r=Array.isArray(t)?t:cD(e).filter(t),i=zO(e),a=i.get(n)??new Set;for(let e of r)a.add(U().hashCode(e.wrapped,G));return i.set(n,a),e}function HO(e,t){let n=IO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of cD(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function UO(e){let t=new Map,n=IO.get(e.wrapped);if(!n)return t;let r=cD(e),i=new Map;for(let e of r)i.set(U().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function WO(e,t,n){return BO(e).set(t,n),e}function GO(e,t){return LO.get(e.wrapped)?.get(t)}function KO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function qO(e,t,n){let r=zO(n);for(let i of t){let t=IO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)KO(r,t,e)}let o=LO.get(i.wrapped);if(o){let e=BO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var JO=new WeakMap,YO=new WeakMap;function XO(e){return JO.has(e.wrapped)||YO.has(e.wrapped)}function ZO(e){let t=YO.get(e.wrapped);return t||(t=new Map,YO.set(e.wrapped,t)),t}function QO(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function $O(e,t){return JO.set(e.wrapped,QO(t)),e}function ek(e,t,n){let r=QO(n),i=ZO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function tk(e){return JO.get(e.wrapped)}function nk(e,t){let n=YO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function rk(e,t,n){for(let e of t){let t=JO.get(e.wrapped);if(t){JO.set(n.wrapped,t);break}}let r=ZO(n);for(let n of t){let t=YO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function ik(e){return kO(e)!==void 0||RO(e)||XO(e)}function ak(e){if(!e.some(ik))return[];let t=U(),n=[];for(let r of e){let e=t.iterShapes(r.wrapped,`face`);for(let r of e)n.push(t.hashCode(r,G)),t.dispose(r)}return n}function ok(e,t,n){AO(e,t,n),qO(e,t,n),rk(e,t,n)}function sk(e,t){FO(e,t)}function ck(e,t){let n=U(),r=[...n.iterShapes(e.wrapped,`face`)],i=[...n.iterShapes(t.wrapped,`face`)];if(r.length!==i.length)return;let a=new Map;for(let e=0;e<r.length;e++){let t=r[e],o=i[e];t===void 0||o===void 0||a.set(n.hashCode(t,G),[n.hashCode(o,G)])}for(let e of r)n.dispose(e);for(let e of i)n.dispose(e);ok({modified:a,generated:new Map,deleted:new Set},[e],t)}function lk(e,t){let n=ak([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return ok(i,[e],a),a}function uk(e,t,n=[0,0,0],r=[0,0,1]){let i=ak([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*GE,i,G,r,n),s=W(a);return ok(o,[e],s),s}function dk(e,t=[0,1,0],n=[0,0,0]){let r=ak([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return ok(a,[e],o),o}function fk(e,t,n=[0,0,0]){let r=ak([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return ok(a,[e],o),o}function pk(e,t,n){let r=U().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(fk(e,c[0])):k(P(M.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function mk(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(P(M.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function hk(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function gk(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function _k(e,t){let n=mk(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=hk(r);if(Math.abs(a)<1e-12)return k(P(M.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(gk(r)){let t=ak([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return ok(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return sk([e],o),O(o)}function vk(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=U().composeTransform(t);return{trsf:n,cleanup:r}}function yk(e,t){let{trsf:n,cleanup:r}=vk(`type`in t?[t]:t),i;try{i=W(U().locate(e.wrapped,n))}finally{r()}return ik(e)&&ck(e,i),i}function bk(e,t){let n=ak([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return ok(i,[e],a),a}function xk(e){return YE(()=>U().copyShape(e.wrapped),M.CLONE_FAILED,`Failed to clone shape`)}function Sk(e){return XE(()=>U().toBREP(e.wrapped),M.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function Ck(e){return U().hashCode(e.wrapped,G)}function wk(e){return U().isNull(e.wrapped)}function Tk(e,t){return U().isSame(e.wrapped,t.wrapped)}function Ek(e,t){return U().isEqual(e.wrapped,t.wrapped)}function Dk(e){return YE(()=>U().simplify(e.wrapped),M.SIMPLIFY_FAILED,`Failed to simplify shape`)}function Ok(e){return U().curveType(e.wrapped)}function kk(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function Ak(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function jk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function Mk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function Nk(e){return U().length(e.wrapped)}function Pk(e){if(Ok(e)!==`CIRCLE`)return null;let t=jk(e,0),n=jk(e,1/3),r=jk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function Fk(e){return U().curveIsClosed(e.wrapped)}function Ik(e){return U().curveIsPeriodic(e.wrapped)}function Lk(e){return U().curvePeriod(e.wrapped)}function Rk(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function zk(e){return W(U().reverseShape(e.wrapped))}function Bk(e,t={}){if(e.length<2)return k(xo(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return kE(n)?O(n):(VE(n),k(xo(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`)))}catch(e){return k(xo(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function Vk(e,t={}){if(e.length<2)return k(xo(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return kE(n)?O(n):(VE(n),k(xo(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`)))}catch(e){return k(xo(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function Hk(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return AE(r)?O(r):(VE(r),k(xo(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function Uk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function Wk(e,t){return`edge:${e}:${t}`}var Gk=new WeakMap,Kk=new WeakMap;function qk(e,t){let n=Gk.get(e);if(n)return n.get(t)}function Jk(e,t,n){let r=Gk.get(e);r||(r=new Map,Gk.set(e,r)),r.set(t,n)}function Yk(e,t){let n=Kk.get(e);if(n)return n.get(t)}function Xk(e,t,n){let r=Kk.get(e);r||(r=new Map,Kk.set(e,r)),r.set(t,n)}function Zk(){Gk=new WeakMap,Kk=new WeakMap}function Qk(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function $k(e,t={}){let n=jo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=Uk(r,i,a,o);if(s){let t=qk(e.wrapped,l);if(t)return t}let u=U().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=kO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&Jk(e.wrapped,l,f),f}function eA(e,t={}){let n=jo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=Wk(r,i);if(a){let t=Yk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Xk(e.wrapped,o,c),c}function tA(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?wo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?wo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):wo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function nA(e){let t;try{t=dD(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{xD(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function rA(e,t){try{return xD(e),null}catch(n){if(n instanceof TypeError)throw n;return wo(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${nA(e)}`,n)}}function iA(e){let t=rA(e,`STEP`);if(t)return k(t);try{let t=U().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(tA(e,`STEP`))}}function aA(e,t={}){let n=jo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=rA(e,`STL`);if(o)return k(o);try{U().hasTriangulation(e.wrapped)||U().meshShape(e.wrapped,r,i);let t=U().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(tA(e,`STL`))}}function oA(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(wo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function sA(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:$k(e,{tolerance:n,angularTolerance:i}),fine:$k(e,{tolerance:r,angularTolerance:i*.2})}}function cA(e){let t=xD(e),n=t.xMax-t.xMin,r=t.yMax-t.yMin,i=t.zMax-t.zMin;return Math.sqrt(n*n+r*r+i*i)||1}function lA(e,t){let n;if(t.tolerances&&t.tolerances.length>0)n=[...t.tolerances];else{let r=Math.max(1,Math.floor(t.levels??3)),i=t.spacing??4,a=(t.relativeTolerance??5e-4)*cA(e)||2**-52;n=[];for(let e=r-1;e>=0;e--)n.push(a*i**e)}return n.sort((e,t)=>t-e),n}function uA(e,t,n){return Math.min(e/t*n,1)}function dA(e,t={}){let n=t.angularTolerance??jo().angularTolerance,r=t.cache??!0,i=lA(e,t),a=Math.min(...i);return i.map(i=>{let o=uA(i,a,n);return{tolerance:i,angularTolerance:o,mesh:$k(e,{tolerance:i,angularTolerance:o,cache:r,...t.signal?{signal:t.signal}:{}})}})}function fA(){return new Promise(e=>{setTimeout(e,0)})}async function pA(e,t={}){let n=t.angularTolerance??jo().angularTolerance,r=t.cache??!0,i=t.meshLevel??((e,n,i)=>$k(e,{tolerance:n,angularTolerance:i,cache:r,...t.signal?{signal:t.signal}:{}})),a=lA(e,t),o=Math.min(...a),s=[];for(let[r,c]of a.entries()){if(t.signal?.aborted)break;let l=uA(c,o,n),u;try{u=await i(e,c,l)}catch(e){if(t.signal?.aborted)break;throw e}let d={tolerance:c,angularTolerance:l,mesh:u};if(s.push(d),t.onLevel?.(d,r),t.signal?.aborted||r===a.length-1)break;await fA()}return s}function mA(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function hA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function gA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function _A(e){return Array.from(Array(e).keys())}function vA(e){return _A(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function yA(e,t){return xE(U().makeLineEdge([...e],[...t]))}function bA(e,t=[0,0,0],n=[0,0,1]){return xE(U().makeCircleEdge([...t],[...n],e))}function xA(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(P(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(xE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function SA(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return SE(U().makeHelixWire(e,t,n,[...r],[...i],a))}function CA(e,t,n){return xE(U().makeArcEdge([...e],[...t],[...n]))}function wA(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(P(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(xE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function TA(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(xE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch(e){return k(N(`BSPLINE_FAILED`,`B-spline approximation failed`,e))}}function EA(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(xE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch(e){return k(N(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`,e))}}function DA(e){if(e.length<2)return k(P(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(xE(U().makeBezierEdge(t)))}function OA(e,t,n){return xE(U().makeTangentArc([...e],[...t],[...n]))}function kA(e){try{return O(SE(U().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(N(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function AA(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=PA(CE(n),t);return hE(e)?O(e):k(P(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=CE(n);return hE(r)?O(r):k(P(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch(e){return k(N(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`,e))}}function jA(e){return AA(TO(e))}function MA(e,t){return CE(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function NA(e){try{return Ya(lO(U().makeNonPlanarFace(e.wrapped)),e=>jE(e)?O(e):k(N(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch(e){return k(N(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`,e))}}function PA(e,t){return CE(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function FA(e){try{var t=NT();if(e.length<3)return k(P(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`));let n=[...e.slice(1),e[0]],r=t.u(new KT);return Ya(kA(vA([e,n]).map(([e,t])=>r.register(yA(e,t)))),e=>AA(r.register(e)))}catch(e){t.e=e}finally{t.d()}}function IA(e,t){return U().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function LA(e,t,n,r,i){let a=LE(e);if(!FE(a)){let o=oE(a).toUpperCase();return zE(e,a),VE(a),k(xo(t,`${n}. Got ${o} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return zE(e,a),O(a)}function RA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=IA(e,`fuse: first operand`);if(A(c))return c;let l=IA(t,`fuse: second operand`);if(A(l))return l;if(!s)return LA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=ak([e,t]),{shape:d,evolution:f,diagnostics:p}=U().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),LA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=LA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&ok(f,[e,t],m.value),m}function zA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=IA(e,`cut: base`);if(A(c))return c;let l=IA(t,`cut: tool`);if(A(l))return l;if(!s)return LA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=ak([e,t]),{shape:d,evolution:f,diagnostics:p}=U().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),LA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=LA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&ok(f,[e,t],m.value),m}function BA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=IA(e,`intersect: first operand`);if(A(s))return s;let c=IA(t,`intersect: second operand`);if(A(c))return c;if(!o)return LA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=ak([e,t]),{shape:u,evolution:d,diagnostics:f}=U().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(U().isNull(u))return U().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),LA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=LA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&ok(d,[e,t],p.value),p}function VA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(mA(e,t));if(c===2)return RA(mA(e,t),mA(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=VA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=VA(e,l,n,r,i,a,o,s);return A(d)?d:RA(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function HA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(P(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(hA(e));for(let t=0;t<e.length;t++){let n=IA(mA(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=LA(U().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&sk(e,o.value),o}return VA(e,0,e.length,t,n,s,i,a)}function UA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=IA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=IA(mA(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=LA(U().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&sk(l,u.value),u}function WA(e,t){let n=U(),r=ND(e.xDir,t),i=ND(e.yDir,t),a=ND(e.xDir,-t),o=ND(e.yDir,-t),s=e.origin,c=[...jD(jD(s,a),o)],l=[...jD(jD(s,r),o)],u=[...jD(jD(s,r),i)],d=[...jD(jD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)n.dispose(e);return n.dispose(p),m}function GA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(U().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=WA(typeof t==`string`?j(ZD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(N(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{U().dispose(i)}}function KA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=uD(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function qA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function JA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=qA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=qA(i,t,n)}return r}function YA(e){let t=U(),n=KA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=JA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function XA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function ZA(e,t,n={}){let r=GA(e,t,n);if(!r.ok)return r;let i=lD(r.value);if(i.length===0){let e=sD(r.value);if(e.length===0)return k(N(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...YA(e))}if(i.length===0)return k(N(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=XA(i),o=mA(i,a),s=i.filter((e,t)=>t!==a);return AA(o,s.length>0?s:void 0)}function QA(e,t){if(t.length===0)return O(e);if(U().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(U().isNull(mA(t,e).wrapped))return k(P(M.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(W(U().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(N(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function $A(e,t,n={}){let r=[];for(let i of t){let t=GA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function ej(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=U(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return tj(e,t,n);if(o===null)return k(N(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return FE(s)?O(s):(VE(s),k(xo(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`)))}catch(e){return k(N(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function tj(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?RA(r,e.tool,i):e.op===`cut`?zA(r,e.tool,i):BA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function nj(e){return W(U().sew(e.map(e=>e.wrapped)))}function rj(e,t=!1){let n=nj(e);return!t&&!ME(n)?k(xo(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function ij(e,t,n=[0,0,0],r=[0,0,1]){return TE(U().makeCylinder(e,t,[...n],[...r]))}function aj(e){return TE(U().makeSphere(e))}function oj(e,t,n,r=[0,0,0],i=[0,0,1]){return TE(U().makeCone(e,t,n,[...r],[...i]))}function sj(e,t,n=[0,0,0],r=[0,0,1]){return TE(U().makeTorus(e,t,[...n],[...r]))}function cj(e,t,n){return TE(U().makeEllipsoid(e,t,n))}function lj(e){return bE(U().makeVertex(e[0],e[1],e[2]))}function uj(e,t,n=1e-6){return Ya(sO(U().offset(e.wrapped,t,n)),e=>Ya(lO(e),e=>FE(e)?O(e):k(xo(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function dj(e){return DE(U().makeCompound(e.map(e=>e.wrapped)))}function fj(e){try{var t=NT();let n=t.u(nj(e)),r=W(U().solidFromShell(n.wrapped));return NE(r)?O(r):(VE(r),k(xo(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}catch(e){t.e=e}finally{t.d()}}function pj(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function mj(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function hj(e){return{position:e.lines}}function gj(e,t){return{coarse:pj(e.coarse),fine:pj(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function _j(e,t){let n=t?.step??50,r=t?.distances;if(r&&r.length!==e.length)throw Error(`toLODGeometryLevels: distances must have one entry per level (got ${r.length} for ${e.length} levels)`);let i=e.length-1;return e.map((e,t)=>({geometry:pj(e.mesh),distance:r?.[t]??(i-t)*n}))}function vj(e,t,n,r){if(t.length===0)return k(P(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(P(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(P(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=U(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(N(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=sO(i);if(A(a))return U().dispose(i),a;let o=W(a.value);return zE(i,o),FE(o)?O(o):(VE(o),k(xo(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function yj(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function bj(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var xj={cut:zA,cutAll:UA,fuse:RA,fuseAll:HA};function Sj(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function Cj(e,t,n={}){return wj(xj,e,t,n)}function wj(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=Tj(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:Sj(i)})}function Tj(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return Ej(e,t,n,r,i,a);a.batchAttempts++;let o=jj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=Tj(e,t,n.slice(0,s),r,i,a);return c.ok?Tj(e,c.value,n.slice(s),r+s,i,a):c}function Ej(e,t,n,r,i,a){a.singletonFallbacks++;let o=hA(n),s=jj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function Dj(e,t={}){return Oj(xj,e,t)}function Oj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(P(M.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=kj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:Sj(r)})}function kj(e,t,n,r,i){if(t.length===1)return O(hA(t));i.batchAttempts++;let a=jj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return Aj(e,kj(e,t.slice(0,o),n,r,i),kj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function Aj(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=jj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function jj(e){try{return e()}catch{return null}}function Mj(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function Nj(e,t){return U().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Pj(e,t){return U().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Fj(e,t,n,r){let i=LE(e);if(!FE(i)){let a=oE(i).toUpperCase();return zE(e,i),VE(i),k(xo(t,`${n}. Got ${a} instead.`,void 0,void 0,r))}return zE(e,i),O(i)}function Ij(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function Lj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Nj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=Nj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=ak([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Fj(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(ok(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Rj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Nj(e,`cutWithEvolution: base`);if(A(o))return o;let s=Nj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=ak([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Fj(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(ok(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function zj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=Nj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=Nj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=ak([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=Fj(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(ok(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function Bj(e,t,n){let r=Pj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(P(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(P(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??sD(e);if(i.length===0)return k(P(M.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=Ij(i,n);if(!e)return k(P(M.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=ak([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return FE(c)?(ok(s,[e],c),O({shape:c,evolution:s})):(VE(c),k(N(M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}catch(e){return k(N(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function Vj(e,t,n){let r=Pj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(P(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(P(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??sD(e);if(i.length===0)return k(P(M.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Ij(i,n);if(!e)return k(P(M.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=ak([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return FE(c)?(ok(s,[e],c),O({shape:c,evolution:s})):(VE(c),k(N(M.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)))}catch(e){return k(N(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function Hj(e,t,n,r=.001){let i=Pj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(P(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(P(`NO_FACES`,`At least one face must be specified for shell`));try{let i=ak([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return FE(s)?(ok(o,[e],s),O({shape:s,evolution:o})):(VE(s),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(N(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Uj(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return FE(r)?O(r):(VE(r),k(N(M.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`)))}catch(e){return k(N(M.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function Wj(e,t){return U().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Gj(e,t){if(typeof e==`number`&&e<=0)return k(P(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(P(t.code,t.pair,void 0,void 0,t.pairHint))}function Kj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function qj(e,t,n,r,i){let a=W(t);return FE(a)?(ok(e,n,a),O(a)):(VE(a),k(N(r,i)))}function Jj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Yj(e,t){let n=Wj(e,`thicken: shape`);if(A(n))return n;try{let n=ak([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return ok(i,[e],a),O(a)}catch(e){return k(N(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Xj(e,t,n){let r=Wj(e,`fillet: shape`);if(A(r))return r;let i=Gj(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??sD(e);if(a.length===0)return k(P(M.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=Kj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(P(M.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Zj(e,t,n,{trackEvolution:r=!0}={}){let i=Xj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=W(U().fillet(e.wrapped,t,o));return FE(n)?O(n):k(N(M.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=ak([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return qj(s,i,[e],M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(N(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function Qj(e,t,n){let r=Wj(e,`chamfer: shape`);if(A(r))return r;let i=Gj(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??sD(e);if(a.length===0)return k(P(M.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Kj(a,n);if(!e)return k(P(M.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=ak([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return qj(s,o,[e],M.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(N(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function $j(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=Wj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(P(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(P(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=W(U().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return FE(i)?O(i):k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=ak([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return FE(c)?(ok(s,[e],c),O(c)):k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(N(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function eM(e,t,n=1e-6){let r=Wj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(P(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=ak([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return FE(o)?(ok(a,[e],o),O(o)):k(N(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`))}catch(e){return k(N(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function tM(e,t,n){let r=Wj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(P(M.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(P(M.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(P(M.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function nM(e,t,n,r,i){let a=tM(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=Jj(t,i);if(a.length===0)return k(P(M.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=ak([e]),{shape:c,evolution:l}=U().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return qj(l,c,[e],M.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(N(M.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function rM(e,t,n){if(n.length===0)return k(P(M.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(P(M.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=U();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=W(r.filletVariable(e.wrapped,i));return FE(a)?NE(a)?O(a):(VE(a),k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(VE(a),k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function iM(e){return wD(e)}function aM(e){if(!NE(e))return k(P(`NOT_A_SOLID`,`Input shape is not a solid`));let t=iM(e);try{let n=U().healSolid(e.wrapped);if(!n)return t?O(e):k(N(M.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=W(n);return NE(r)?(oD(r),iM(r)?O(r):(VE(r),k(N(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`)))):(VE(r),k(N(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`)))}catch(e){return k(N(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function oM(e){if(!jE(e))return k(P(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return jE(t)?O(t):(VE(t),k(N(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`)))}catch(e){return k(N(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function sM(e,t){if(!AE(e))return k(P(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return AE(n)?O(n):(VE(n),k(N(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`)))}catch(e){return k(N(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function cM(e){return NE(e)?aM(e):jE(e)?oM(e):AE(e)?sM(e):O(e)}function lM(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(iM(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=lD(e).length,u=cD(e).length,d=e,f=!1,p=t=>{let n=d;d=t,n!==e&&n.wrapped!==t.wrapped&&VE(n)};if(o!==void 0)try{p(W(U().sew([d.wrapped],o))),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=lD(d),t=0;for(let n of e)try{U().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(NE(d)&&i||jE(d)&&r||AE(d)&&n){let t=cM(d);Ka(t)?(p(t.value),NE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):jE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let m=lD(d).length,h=cD(d).length,g=Math.abs(m-l),_=Math.abs(h-u);g>0&&s.push(`Wire count changed by ${g}`),_>0&&s.push(`Face count changed by ${_}`);let v=iM(d);return s.push(v?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:v}),O({shape:d,report:{isValid:v,alreadyValid:!1,wiresHealed:g,facesHealed:_,solidHealed:f,steps:s,diagnostics:c}})}function uM(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(N(M.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function dM(e){try{let t=W(U().solidFromShell(e.wrapped));return NE(t)?iM(t)?O(t):(VE(t),k(N(M.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`))):(VE(t),k(N(M.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`)))}catch(e){return k(N(M.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function fM(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return AE(t)?O(t):(VE(t),k(N(M.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`)))}catch(e){return k(N(M.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function pM(e,{profile:t,endFactor:n=1}){return e<1e-10?k(P(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(P(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(U().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function mM(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]),i=n.makeWire([r]);return n.dispose(r),W(i)}function hM(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function gM(e){let t=W(e.shape),n=W(e.firstShape),r=W(e.lastShape),i=()=>{VE(t),VE(n),VE(r)};return FE(t)?AE(n)?AE(r)?O([t,n,r]):(i(),k(xo(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`))):(i(),k(xo(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))):(i(),k(xo(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function _M(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return FE(n)?O(n):(VE(n),k(xo(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`)))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=U(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v)return gM(v);let y=W(v);return FE(y)?O(y):(VE(y),k(xo(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function vM(e,t,n,r){return _M(e,mM(t,jD(t,n)),{support:r})}function yM(e,t,n,r,i=!1){try{var a=NT();let o=LD(n);if(o<1e-10)return k(P(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=jD(t,n),c=a.u(mM(t,s)),l=null;if(r){let e=pM(o,r);if(A(e))return e;l=e.value}return _M(e,c,{law:l},i)}catch(e){a.e=e}finally{a.d()}}function bM(e,t,n,r,i,a=!1){try{var o=NT();if(Math.abs(t)<1e-10)return k(P(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let s=LD(r);if(s<1e-10)return k(P(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let c=jD(n,r),l=o.u(mM(n,c)),u=t<0,d=360/Math.abs(t)*s,f=o.u(hM(d,s,1,n,r,u)),p=null;if(i){let e=pM(s,i);if(A(e))return e;p=e.value}return _M(e,l,{auxiliarySpine:f,law:p},a)}catch(e){o.e=e}finally{o.d()}}function xM(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return P(M.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return P(M.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function SM(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(P(M.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function CM(e,t,n){if(e.length<2)return k(P(M.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=xM(e);if(o)return k(o);try{let n=U(),o=SM(e,t,n);if(A(o))return o;let s=o.value,c=[],l=[];try{for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(o),l.push(n.downcast(o,`wire`))}let o=W(n.loftAdvanced(l,{solid:r,ruled:i,tolerance:a}));return FE(o)?O(o):(VE(o),k(xo(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`)))}finally{for(let e of l)n.dispose(e);for(let e of c)n.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function wM(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=U(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=W(typeof l==`object`&&`shape`in l?l.shape:l);return FE(u)?O(u):(VE(u),k(xo(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function TM(e,t){if(U().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(LD(t)<1e-10)return k(P(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=LD(t),i=BD(t),a=n.extrude(e.wrapped,[...i],r),o=TE(n.downcast(a,`solid`));return zE(a,o),O(o)}catch(e){return k(N(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:LD(t)}))}}function EM(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(U().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=W(U().revolveVec(e.wrapped,[...t],[...n],r));return FE(i)?O(i):(VE(i),k(xo(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`)))}catch(e){return k(N(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function DM(e){if(e.length===0)return O([]);let t=U(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=LD(i);if(a<1e-10)return k(P(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...BD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>{let n=TE(t.downcast(e,`solid`));return zE(e,n),n}))}catch(e){return k(N(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function OM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(P(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=U(),s=n?o.makeVertex(...DD(n)):void 0,c=r?o.makeVertex(...DD(r)):void 0;try{let n=W(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return FE(n)?O(n):(VE(n),k(xo(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`)))}catch(e){return k(N(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function kM(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...DD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...DD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=W(t);if(!FE(e))return VE(e),k(xo(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(N(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}var AM=new WeakMap;function jM(e,t){return AM.get(e)?.get(t)}function MM(e,t,n){let r=AM.get(e);r||(r=new Map,AM.set(e,r)),r.set(t,n)}function NM(e){return U().isNull(e.wrapped)}function PM(e){return k(P(M.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function FM(e){let t=jM(e.wrapped,`volume`);if(t)return O(t);if(NM(e))return PM(`measureVolumeProps`);let n=U(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return MM(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=XE(()=>n.centerOfMass(e.wrapped),M.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return MM(e.wrapped,`volume`,o),O(o)}function IM(e){let t=jM(e.wrapped,`surface`);if(t)return O(t);if(NM(e))return PM(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=XE(()=>n.centerOfMass(e.wrapped),M.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return MM(e.wrapped,`surface`,a),O(a)}function LM(e){let t=jM(e.wrapped,`linear`);if(t)return O(t);if(NM(e))return PM(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return MM(e.wrapped,`linear`,i),O(i)}function RM(e){let t=FM(e);return t.ok?O(t.value.mass):t}function zM(e){let t=IM(e);return t.ok?O(t.value.mass):t}function BM(e){let t=LM(e);return t.ok?O(t.value.mass):t}function VM(e,t){return NM(e)||NM(t)?PM(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function HM(e,t){if(NM(e)||NM(t))return PM(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function UM(e){if(NM(e))return PM(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return NM(e)?PM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function WM(e,t,n){if(NM(e))return PM(`measureCurvatureAt`);let r=U().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function GM(e){if(NM(e))return PM(`measureCurvatureAtMid`);let t=_O(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=U().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}function KM(e,t){return e.map(e=>WE(e,t))}function qM(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let r=n.hashCode(e,G),o=a.get(r);if(o?.some(t=>n.isSame(t,e))){n.dispose(e);continue}let s=UE(e,t);i.push(s),o?o.push(s.wrapped):a.set(r,[s.wrapped])}return i}function JM(e){let t=U(),n=new Map;for(let r of e){let e=t.hashCode(r.wrapped,G),i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function YM(e,t,n){let r=U();return e.get(n)?.find(e=>r.isSame(e.wrapped,t))}function XM(e){let t=iD(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=cD(e),i=JM(sD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`edge`)){let r=n.hashCode(t,G),o=YM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.edge,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({edge:o.wrapped,face:e.wrapped})}return t.edgeToFaces=a,a}function ZM(e){let t=iD(e);if(t.vertexToFaces)return t.vertexToFaces;let n=U(),r=cD(e),i=JM(uD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`vertex`)){let r=n.hashCode(t,G),o=YM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.vertex,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({vertex:o.wrapped,face:e.wrapped})}return t.vertexToFaces=a,a}function QM(e,t){let n=U(),r=XM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return KM(o,`face`)}function $M(e,t){let n=U(),r=ZM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.vertex,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return KM(o,`face`)}function eN(e){return qM(e.wrapped,`edge`)}function tN(e){return qM(e.wrapped,`vertex`)}function nN(e){return qM(e.wrapped,`wire`)}function rN(e){return qM(e.wrapped,`vertex`)}function iN(e,t){let n=U(),r=XM(e),i=qM(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}for(let e of i)e[Symbol.dispose]();return KM(a,`face`)}var aN=new Map;function oN(e,t){let n=U(),r=ST()??``;if(aN.get(r)!==!1){let i;try{i=n.sharedEdges(e.wrapped,t.wrapped);let a=i.map(e=>UE(e,`edge`));return aN.set(r,!0),a}catch(e){if(i)for(let e of i)n.dispose(e);if(!l(e))throw e;aN.set(r,!1)}}return sN(e,t)}function sN(e,t){let n=U(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))?o.push(UE(e,`edge`)):n.dispose(e);for(let e of i)n.dispose(e);return o}function cN(e,t){let n=0,r=mO(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=xO(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=SO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=zM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function lN(e){let t=mO(e),n=xO(e),r=SO(e),i=zM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var uN=.9;function dN(e){if(e[2]>uN)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>uN)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>uN)return`box:right`;if(e[0]<-.9)return`box:left`}function fN(e,t){if(mO(t)!==`PLANE`)return;let n=xO(t)[2];if(n>uN)return`${e}:top`;if(n<-.9)return`${e}:bottom`}function pN(e){return mO(e)===`CYLINDRE`?`cylinder:lateral`:fN(`cylinder`,e)}function mN(e){return mO(e)===`CONE`?`cone:lateral`:fN(`cone`,e)}function hN(e){return mO(e)===`SPHERE`?`sphere:surface`:void 0}var gN={box:e=>dN(xO(e)),cylinder:pN,cone:mN,sphere:hN};function _N(e,t){let n=new Map,r=gN[t],i=U(),a=0;for(let o of i.iterShapes(e.wrapped,`face`)){let e=HE(o,`face`);try{let i=r?.(e),o=i!==void 0&&!n.has(i)?i:`${t}:face_${a}`;n.set(o,[Ck(e)]),a++}finally{BE(e,o)}}return n}function vN(e,t,n){return{origin:e,role:t,hint:lN(n)}}function yN(e,t){let n=[];for(let r of e){if(t.deleted.has(r))continue;let e=t.modified.get(r),i=e&&e.length>0?e:[r];for(let e of i)n.includes(e)||n.push(e)}return n}function bN(e,t,n){let r=e.get(t);if(!r)return e;let i=new Map;for(let[e,t]of r){let r=yN(t,n);r.length>0&&i.set(e,r)}let a=new Map;for(let[n,r]of e)a.set(n,n===t?i:r);return a}var xN=.1,SN=.5;function CN(e,t,n){let r=-1/0,i,a=-1/0,o=[];for(let s of t){let t=n(e,s);t>SN&&o.push([s,t]),t>r?(a=r,r=t,i=s):t>a&&(a=t)}return i!==void 0&&r>SN?r-a<xN&&o.length>1?{kind:`ambiguous`,candidates:o.filter(([,e])=>e>=r-xN).map(([e])=>e)}:{kind:`match`,face:i}:{kind:`none`}}function wN(e,t,n,r){let i=cD(n),a=r??cN,o=t.get(e.origin)?.get(e.role);if(o!==void 0&&o.length>0){let t=i.filter(e=>o.includes(Ck(e)));if(t.length===1){let[e]=t;if(e!==void 0)return{face:e,confidence:`exact`}}else if(t.length===0)return{ref:e,reason:`deleted`};else{let n=CN(e.hint,t,a);if(n.kind===`match`)return{face:n.face,confidence:`geometric-fallback`};if(n.kind===`ambiguous`)return{ref:e,reason:`ambiguous`,candidates:n.candidates}}}let s=CN(e.hint,i,a);return s.kind===`match`?{face:s.face,confidence:`geometric-fallback`}:s.kind===`ambiguous`?{ref:e,reason:`ambiguous`,candidates:s.candidates}:{ref:e,reason:`not-found`}}function TN(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function EN(e){if(e.length===0)return;let t=0,n=0,r=0;for(let i of e){let e=ED(i);t+=e[0],n+=e[1],r+=e[2]}let i=e.length;return[t/i,n/i,r/i]}function DN(e,t,n){let r=n.get(t);if(!r)return;let i=Ck(e);for(let[e,t]of r)if(t.includes(i))return e}function ON(e,t,n,r){let i=r.get(t)?.get(n);return i===void 0||i.length===0?[]:cD(e).filter(e=>i.includes(Ck(e)))}function kN(e){let t=BM(e);return{entityType:`edge`,length:t.ok?t.value:void 0,midpoint:EN(rN(e))}}function AN(e){let t=new Set,n=[];for(let r of e){let e=Ck(r);t.has(e)||(t.add(e),n.push(r))}return n}var jN=1e-6;function MN(e,t){if(t.length===void 0&&t.midpoint===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=0;if(t.length!==void 0){let n=BM(a);n.ok&&(e+=Math.abs(n.value-t.length))}if(t.midpoint!==void 0){let n=EN(rN(a));n!==void 0&&(e+=TN(t.midpoint,n))}e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<jN))return n}function NN(e,t,n,r){let[i,a]=QM(n,t);if(i===void 0||a===void 0)return;let o=DN(i,e,r),s=DN(a,e,r);if(!(o===void 0||s===void 0))return{origin:e,faceRoles:[o,s],hint:kN(t)}}function PN(e,t,n){let[r,i]=e.faceRoles,a=ON(n,e.origin,r,t),o=ON(n,e.origin,i,t);if(a.length===0||o.length===0)return{ref:e,reason:`not-found`};let s=[];for(let e of a)for(let t of o)s.push(...oN(e,t));let c=AN(s);if(c.length===1){let[e]=c;if(e!==void 0)return{edge:e,confidence:`exact`}}if(c.length>1){let t=MN(c,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:c}:{edge:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var FN=3,IN=1e-6;function LN(e,t){let n=new Set;for(let r of e)for(let e of tN(r)){let r=Ck(e);n.add(r),t.has(r)||t.set(r,e)}return n}function RN(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function zN(e){let t=new Map,n;for(let r of e){let e=LN(r,t);n=n===void 0?e:RN(n,e)}if(n===void 0)return[];let r=[];for(let e of n){let n=t.get(e);n!==void 0&&r.push(n)}return r}function BN(e,t){if(t.position===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=TN(ED(a),t.position);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<IN))return n}function VN(e,t,n,r){let i=$M(n,t);if(i.length<FN)return;let a=new Set;for(let t of i){let n=DN(t,e,r);n!==void 0&&a.add(n)}if(!(a.size<FN))return{origin:e,faceRoles:[...a].sort(),hint:{entityType:`vertex`,position:ED(t)}}}function HN(e,t,n){let r=[];for(let i of e.faceRoles){let a=ON(n,e.origin,i,t);if(a.length===0)return{ref:e,reason:`not-found`};r.push(a)}let i=zN(r);if(i.length===1){let[e]=i;if(e!==void 0)return{vertex:e,confidence:`exact`}}if(i.length>1){let t=BN(i,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:i}:{vertex:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var UN=.99,WN=.1,GN=1e-6;function KN(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function qN(e,t){return cD(e).filter(e=>KN(xO(e),t)>UN)}function JN(e,t,n){let r=new Set([...t,...n].map(Ck)),i=new Set;for(let n of t)for(let t of iN(e,n))i.add(Ck(t));let a=[],o=new Set;for(let t of n)for(let n of iN(e,t)){let e=Ck(n);r.has(e)||o.has(e)||!i.has(e)||(o.add(e),a.push(n))}return a}function YN(e,t){let n,r=1/0,i=1/0;for(let a of e){let e=TN(SO(a),t);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<GN))return n}function XN(e,t,n,r,i){let[a,o]=QM(r,n);if(a===void 0||o===void 0)return;let s=DN(a,e,i),c=DN(o,e,i);if(!(s===void 0||c===void 0))return{origin:e,op:t,betweenRoles:[s,c],hint:{entityType:`derived-face`,normalA:xO(a),normalB:xO(o),edgeMidpoint:EN(rN(n))}}}function ZN(e,t,n){let r=ON(n,e.origin,e.betweenRoles[0],t);r.length===0&&(r=qN(n,e.hint.normalA));let i=ON(n,e.origin,e.betweenRoles[1],t);if(i.length===0&&(i=qN(n,e.hint.normalB)),r.length===0||i.length===0)return{ref:e,reason:`not-found`};let a=JN(n,r,i).filter(t=>KN(xO(t),e.hint.normalA)>WN&&KN(xO(t),e.hint.normalB)>WN);if(a.length===1){let[e]=a;if(e!==void 0)return{face:e,confidence:`geometric-fallback`}}if(a.length>1){let t=e.hint.edgeMidpoint&&YN(a,e.hint.edgeMidpoint);return t?{face:t,confidence:`geometric-fallback`}:{ref:e,reason:`ambiguous`,candidates:a}}return{ref:e,reason:`not-found`}}function QN(e){return typeof e==`object`&&!!e&&`origin`in e}function $N(e){return QN(e)&&`betweenRoles`in e&&`op`in e}function eP(e){return QN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length===2}function tP(e){return QN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length>=3}function nP(e){return QN(e)&&typeof e.role==`string`}function rP(e){return nP(e)||eP(e)||tP(e)||$N(e)}function iP(e,t){return t===void 0?{ok:!1,reason:e}:{ok:!1,reason:e,candidates:t}}function aP(e,t,n){if($N(e)){let r=ZN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:iP(r.reason,r.candidates)}if(eP(e)){let r=PN(e,t,n);return`edge`in r?{ok:!0,entity:r.edge}:iP(r.reason,r.candidates)}if(tP(e)){let r=HN(e,t,n);return`vertex`in r?{ok:!0,entity:r.vertex}:iP(r.reason,r.candidates)}let r=wN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:iP(r.reason,r.candidates)}function oP(e,t,n){let r=n.get(e.origin);if(r!==void 0)return r;let i=new Map([[e.origin,_N(t,e.origin)]]);return n.set(e.origin,i),i}function sP(e,t){return aP(e,oP(e,t,new Map),t)}function cP(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!(`wrapped`in e)}function lP(e,t){let n=new Map,r=e=>{if(rP(e)){let r=aP(e,oP(e,t,n),t);return r.ok?r.entity:e}if(Array.isArray(e))return e.map(r);if(cP(e)){let t={};for(let[n,i]of Object.entries(e))t[n]=r(i);return t}return e},i={...e};for(let[t,n]of Object.entries(e))i[t]=r(n);return i}function uP(e,t,n,r){let i=TE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);if(a)try{var o=NT();return lk(o.u(i),[a[0]-e/2,a[1]-t/2,a[2]-n/2])}catch(e){o.e=e}finally{o.d()}return i}function dP(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=ij(e,t,r,i);if(n?.centered)try{var o=NT();let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];return lk(o.u(a),e)}catch(e){o.e=e}finally{o.d()}return a}function fP(e,t){let n=aj(e);if(t?.at)try{var r=NT();return lk(r.u(n),t.at)}catch(e){r.e=e}finally{r.d()}return n}function pP(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=oj(e,t,n,i,a);if(r?.centered)try{var s=NT();let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];return lk(s.u(o),e)}catch(e){s.e=e}finally{s.d()}return o}function mP(e,t,n){return sj(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function hP(e,t,n,r){let i=cj(e,t,n);if(r?.at)try{var a=NT();return lk(a.u(i),r.at)}catch(e){a.e=e}finally{a.d()}return i}function gP(e,t){return yA(e,t)}function _P(e,t){let n=t?.axis??[0,0,1];return bA(e,t?.at??[0,0,0],n)}function vP(e,t,n){let r=n?.axis??[0,0,1];return xA(e,t,n?.at??[0,0,0],r,n?.xDir)}function yP(e,t,n,r){return SA(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function bP(e,t,n){return CA(e,t,n)}function xP(e,t,n,r,i){let a=i?.axis??[0,0,1];return wA(e,t,n*GE,r*GE,i?.at??[0,0,0],a,i?.xDir)}function SP(e,t){return TA(e,t)}function CP(e){return DA(e)}function wP(e,t,n){return OA(e,t,n)}function TP(e){return kA(e)}function EP(e){return Ya(kA(e),e=>sE(e)?O(e):k(P(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function DP(e,t){return AA(e,t)}function OP(e){return NA(e)}function kP(e,t){return MA(e,t)}function AP(e){return FA(e)}function jP(e){return lj(e)}function MP(e){return dj(e)}function NP(e){return fj(e)}function PP(e,t,n){return uj(e,t,n)}function FP(e,t){return rj(e,t)}function IP(e,t){return PA(e,t)}function LP(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function RP(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??LP(),color:[a,o,s,c]}});return GT(U().createXCAFDocument(t))}function zP(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=U(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??LP(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(wo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function BP(e,t,n,r,i){if(n<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(HD(t))return k(P(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=BD(t),o=U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e));try{return HA(o,{optimisation:`sameFace`,...i,unsafe:!0})}finally{for(let e of o)e[Symbol.dispose]()}}function VP(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(HD(t))return k(P(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n,s=U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e));try{return HA(s,{optimisation:`sameFace`,...a,unsafe:!0})}finally{for(let e of s)e[Symbol.dispose]()}}function HP(e,t,n,r,i,a,o,s){if(r<1||i<1)return k(P(`PATTERN_INVALID_COUNT`,`Grid pattern counts must be at least 1`));if(r===1&&i===1)return O(e);if(HD(t))return k(P(`PATTERN_ZERO_DIRECTION`,`Grid directionX cannot be zero`));if(HD(n))return k(P(`PATTERN_ZERO_DIRECTION`,`Grid directionY cannot be zero`));let c=U(),l=BD(t),u=BD(n);if(typeof c.gridPattern==`function`)return O(W(c.gridPattern(e.wrapped,[...l],[...u],a,o,r,i)));let d=BP(e,t,r,a,s);if(!d.ok)return d;let f=d.value,p=BP(f,n,i,o,s),m=p.ok&&p.value===f;return f!==e&&!m&&f[Symbol.dispose](),p}function UP(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function WP(e,t){return{...e,children:[...e.children,t]}}function GP(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function KP(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function qP(e,t){if(e.name===t)return e;for(let n of e.children){let e=qP(n,t);if(e)return e}}function JP(e,t,n=0){t(e,n);for(let r of e.children)JP(r,t,n+1)}function YP(e){let t=1;for(let n of e.children)t+=YP(n);return t}function XP(e){let t=[];return JP(e,e=>{e.shape&&t.push(e.shape)}),t}function ZP(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function QP(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function $P(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function eF(e){return $P(QP(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function tF(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function nF(e,t){let n=t/2,r=Math.sin(n),i=$P(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function rF(e,t){let n=$P(e),r=$P(t),i=ZP(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return nF(eF(n),Math.PI);let a=QP(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function iF(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var aF=Math.PI/180;function oF(e,t,n){return Math.min(n,Math.max(t,e))}function sF(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function cF(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function lF(e){return sF(cF(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function uF(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:sF(t),min:s,max:c,value:oF(n.value??0,s,c)}}function dF(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:sF(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function fF(e,t,n,r={}){return dF(`revolute`,e,t,n,[uF(`rotation`,n.direction,r,-180,180)])}function pF(e,t,n,r={}){return dF(`prismatic`,e,t,n,[uF(`translation`,n.direction,r,0,100)])}function mF(e,t,n,r={}){return dF(`cylindrical`,e,t,n,[uF(`rotation`,n.direction,r.rotation??{},-180,180),uF(`translation`,n.direction,r.translation??{},0,100)])}function hF(e,t,n,r={}){let i=sF(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?lF(i):sF(n)}else a=lF(i);let o=sF(cF(i,a));return dF(`planar`,e,t,{origin:n.origin,direction:i},[uF(`translation`,a,r.u??{},-100,100),uF(`translation`,o,r.v??{},-100,100),uF(`rotation`,i,r.rotation??{},-180,180)])}function gF(e,t,n,r={}){return dF(`spherical`,e,t,{origin:n,direction:[0,0,1]},[uF(`rotation`,[1,0,0],r.x??{},-180,180),uF(`rotation`,[0,1,0],r.y??{},-180,180),uF(`rotation`,[0,0,1],r.z??{},-180,180)])}function _F(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:oF(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function vF(e,t){return _F(e,[t])}function yF(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=nF(t.axis,n*aF),i=tF(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function bF(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=SF;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=CF(a,yF(i,o,oF(s,o.min,o.max)))}return a}function xF(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var SF={position:[0,0,0],rotation:[1,0,0,0]};function CF(e,t){let n=tF(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:iF(e.rotation,t.rotation)}}function wF(e){let t=[];return JP(e,e=>{e.joints&&t.push(...e.joints)}),t}function TF(e,t={}){let n=[],r=new Set;JP(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,SF);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?CF(bF(n,i),n.offset):bF(n,i);a.set(n.child,CF(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,SF);return a}function EF(e){return wF(e).reduce((e,t)=>e+t.dofs.length,0)}var DF={position:[0,0,0],rotation:[1,0,0,0]};function OF(e,t){let n=tF(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function kF(e){return[e[0],-e[1],-e[2],-e[3]]}function AF(e,t){let[n,r,i,a]=iF(t,kF(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function jF(e,t){let n=[];JP(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function MF(e,t){return e[t]??0}function NF(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=MF(e,a*n+t);i[a*r+n]=MF(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(MF(i,a*r+e))>Math.abs(MF(i,t*r+e))&&(t=a);if(Math.abs(MF(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=MF(i,e*r+n);i[e*r+n]=MF(i,t*r+n),i[t*r+n]=a}let a=MF(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=MF(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=MF(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=MF(i,t*r+a)-n*MF(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=MF(i,e*r+n);return a}function PF(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function FF(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(MF(t,r++));n[i.child]=e}return n}function IF(e,t,n,r,i){let a=OF(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=AF(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=MF(e,t)**2;return Math.sqrt(o)}function LF(e,t,n,r,i,a,o,s,c,l){let u=OF(o,s);for(let d=0;d<n;d++){let f=MF(t,d),p=f+c>MF(a,d)&&f-c>=MF(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=OF(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=AF(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function RF(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=MF(e,t*n+r)*MF(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=NF(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=MF(e,a*n+t)*MF(s,a);c[t]=i}return c}function zF(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=PF(jF(e,t),r.seed),p=u.length,m=n=>TF(e,FF(l,n)).get(t)??DF,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=IF(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){LF(g,u,p,c,d,f,_,s,1e-6,m);let e=RF(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=MF(u,t)+MF(e,t);u[t]=Math.min(MF(f,t),Math.max(MF(d,t),n))}_=m(u),v=IF(h,_,n,s,c)}return{values:FF(l,u),converged:v<=a,iterations:y,error:v}}function BF(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function VF(e,t,n,r){let i=[];JP(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:BF(e,t[e.child]),b:BF(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:TF(e,r)})}return s}var HF=Math.PI/180;function UF(e,t,n,r){let i=e*HF,a=r*HF,o=iF(nF([0,0,1],i),nF([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function WF(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=UF(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?pF(i,a,s,c):fF(i,a,s,c),offset:o}})}var GF=Math.PI/180,KF=180/Math.PI;function qF(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function JF(e){return String(e===0?0:e)}function YF(e){return`${JF(e[0])} ${JF(e[1])} ${JF(e[2])}`}function XF(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];JP(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(P(M.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(P(M.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${qF(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${qF(e)}">`,` <visual><geometry><mesh filename="${qF(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${qF(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*GF:e.min,a=t?e.max*GF:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${qF(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${qF(e.parent)}"/>`,` <child link="${qF(e.child)}"/>`,` <origin xyz="${YF(o)}" rpy="0 0 0"/>`,` <axis xyz="${YF(e.axis.direction)}"/>`,` <limit lower="${JF(n)}" upper="${JF(a)}" effort="${JF(r)}" velocity="${JF(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
16
+ `))}function ZF(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function QF(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function $F(e,t){return tF(iF(iF(nF([0,0,1],t[2]),nF([0,1,0],t[1])),nF([1,0,0],t[0])),e)}function eI(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(P(M.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=ZF(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=ZF(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=ZF(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=ZF(i?.[1]??``,`link`),c=ZF(o?.[1]??``,`link`);if(!s||!c)return k(P(M.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${ZF(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=QF(ZF(l?.[1]??``,`xyz`),[0,0,0]),p=QF(ZF(l?.[1]??``,`rpy`),[0,0,0]),m=$F(QF(ZF(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(ZF(d?.[1]??``,`lower`)??NaN),g=Number(ZF(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push(pF(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*KF,max:g*KF};a.push(fF(s,c,{origin:f,direction:m},e))}else return k(P(M.VALIDATION_FAILED,`importURDF: joint '${ZF(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function tI(){return{steps:[],shapes:new Map}}function nI(e,t,n){let r={...t,timestamp:Date.now()},i=new Map(e.shapes);return i.set(t.outputId,n),{steps:[...e.steps,r],shapes:i}}function rI(e){if(e.steps.length===0)return e;let t=e.steps.slice(0,-1),n=new Set;for(let e of t){n.add(e.outputId);for(let t of e.inputIds)n.add(t)}let r=new Map;for(let[t,i]of e.shapes)n.has(t)&&r.set(t,i);return{steps:t,shapes:r}}function iI(e,t){return e.steps.find(e=>e.id===t)}function aI(e,t){return e.shapes.get(t)}function oI(e){return e.steps.length}function sI(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function cI(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function lI(){return{operations:new Map}}function uI(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function dI(e,t){let[n,r]=t;return n!==void 0&&r===void 0&&FE(n)?lP(e,n):{...e}}function fI(e,t){let n=new Set(e.steps.map(e=>e.outputId)),r={steps:[],shapes:new Map};for(let[t,i]of e.shapes)n.has(t)||(r=cI(r,t,i));for(let n of e.steps){let e=t.operations.get(n.type);if(!e)return k(F(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${n.type}`));let i=[];for(let e of n.inputIds){let t=r.shapes.get(e);if(!t)return k(F(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${n.id}`));i.push(t)}try{let t=e(i,dI(n.parameters,i));r=nI(r,{id:n.id,type:n.type,parameters:n.parameters,inputIds:n.inputIds,outputId:n.outputId},t)}catch(e){return k(F(`REPLAY_STEP_FAILED`,`Step ${n.id} (${n.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(r)}function pI(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return k(F(`REPLAY_STEP_NOT_FOUND`,`Step not found: ${t}`));let i=new Map(e.shapes);for(let t=r;t<e.steps.length;t++){let n=e.steps[t];n&&i.delete(n.outputId)}let a={steps:e.steps.slice(0,r),shapes:i};for(let t=r;t<e.steps.length;t++){let r=e.steps[t];if(!r)continue;let i=n.operations.get(r.type);if(!i)return k(F(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${r.type}`));let o=[];for(let e of r.inputIds){let t=a.shapes.get(e);if(!t)return k(F(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${r.id}`));o.push(t)}try{let e=i(o,dI(r.parameters,o));a=nI(a,{id:r.id,type:r.type,parameters:r.parameters,inputIds:r.inputIds,outputId:r.outputId},e)}catch(e){return k(F(`REPLAY_STEP_FAILED`,`Step ${r.id} (${r.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(a)}function mI(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(F(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):pI({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function hI(e){let t={};for(let[n,r]of e.shapes){let e=Sk(r);if(!e.ok)return k(F(`SERIALIZE_SHAPE_FAILED`,`Failed to serialize shape "${n}": ${e.error.message}`));t[n]=e.value}return O({steps:e.steps,shapes:t})}function gI(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=dO(r);if(!e.ok)return k(F(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(F(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function _I(e){try{var t=NT();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,crest:s=0,sectionsPerTurn:c=20,lefthand:l=!1,inward:u=!1}=e;if(!(n>0))return k(P(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(P(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(P(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(P(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<0||s>=o)return k(P(`THREAD_INVALID_CREST`,`crest must be >= 0 and < toothHalfWidth`));if(c<3)return k(P(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let d=i/r,f=Math.max(2,Math.round(d*c)),p=l?-1:1,m=u?-a:a,h=u?.3:-.3,g=o,_=t.u(new KT),v=[];for(let e=0;e<=f;e++){let t=p*e*2*Math.PI/c,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),l=Math.cos(t),u=Math.sin(t),d=(e,t)=>[a+e*l,o+e*u,i+t],f=s>0?[d(h,-g),d(m,-s),d(m,s),d(h,g)]:[d(h,-g),d(m,0),d(h,g)],y=TP(f.map((e,t)=>_.register(gP(e,f[(t+1)%f.length]))));if(!Ka(y))return y;v.push(_.register(y.value))}return OM(v,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var vI=1e-9,yI=1e-8,bI=1e-6,xI=([e,t],[n,r],i=bI)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,SI=([e,t],[n,r])=>[e+n,t+r],CI=([e,t],[n,r])=>[e-n,t-r],wI=([e,t],n)=>[e*n,t*n],TI=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),EI=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function DI([e,t],[n,r]){return e*r-t*n}var OI=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),kI=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),AI=(e,t,n=[0,0])=>{let[r,i]=e,[a,o]=n,s=r-a,c=i-o,l=Math.sin(t),u=Math.cos(t),d=s*u-c*l,f=s*l+c*u;return[d+a,f+o]};function jI([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var MI=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],NI=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],PI=([e,t])=>{let n=jI([e,t]);return n[0]===0&&n[1]===0&&i(`normalize2d`,`Cannot normalize zero-length vector`),n};function FI(e,t){let n,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(t(a))if(r++,r===1)n=a;else break}return r===1?O(n):k(To(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function II(e,t,n,r){let i=e=>n([...t,e]),a=e=>t.every(t=>t(e));function o(t){switch(e){case`edge`:return sD(t);case`face`:return cD(t);case`wire`:return lD(t);case`vertex`:return uD(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>II(e,[],n,r),l={_filters:t,_topoKind:e,when:e=>i(e),inList:e=>{let t=new Map;for(let n of e){let e=Ck(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(Ck(e));return!!n&&n.some(t=>Tk(t,e))})},not:e=>{let t=e(c());return i(e=>!t.shouldKeep(e))},either:e=>{let t=e.map(e=>e(c()));return i(e=>t.some(t=>t.shouldKeep(e)))},findAll:e=>s(e),findUnique:e=>FI(o(e),a),shouldKeep:a,and:e=>i(t=>e.shouldKeep(t)),or:e=>{let t=a;return n([n=>t(n)||e.shouldKeep(n)])},negate:()=>{let e=a;return n([t=>!e(t)])}},u=r(l,i);return{...l,...u}}var LI={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function RI(e){return typeof e==`string`?LI[e]??[0,0,1]:e}function zI(e,t,n){let r=U(),i=r.makeVertex(t[0],t[1],t[2]);return t=>{let a=r.distance(i,t.wrapped).value;return Math.abs(a-e)<n}}function BI(e,t){let n=BD(RI(e));return e=>{let r=U(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=BD(s),l=Math.acos(Math.min(1,Math.abs(FD(c,n))));return Math.abs(l-GE*t)<1e-6}}function VI(e){return II(`edge`,e,VI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(BI(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(Nk(n)-e)<t),ofCurveType:e=>n(t=>Ok(t)===e),parallelTo:(t=`Z`)=>VI(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(zI(e,t,1e-6))}))}function HI(){return VI([])}function UI(e,t){let n=BD(RI(e));return e=>{let r=xO(e),i=Math.acos(Math.min(1,Math.abs(FD(BD(r),n))));return Math.abs(i-GE*t)<1e-6}}function WI(e){return II(`face`,e,WI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(UI(e,t)),parallelTo:(t=`Z`)=>WI(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=pO(t);return Ka(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=zM(n);return Ka(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(zI(e,t,1e-6))}))}function GI(){return WI([])}function KI(e){return II(`wire`,e,KI,(e,t)=>({isClosed:()=>t(e=>Fk(e)),isOpen:()=>t(e=>!Fk(e)),ofEdgeCount:e=>t(t=>sD(t).length===e)}))}function qI(){return KI([])}function JI(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&jE(e)?O(e):e(GI()).findUnique(t)}function YI(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function XI(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function ZI(e){return Math.round(e*100)/100}function QI(e){return Math.round(e*1e5)/1e5}var $I=([e,t])=>`(${ZI(e)},${ZI(t)})`,eL=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},tL=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${eL(e,t)},${eL(n,t)}]`,[e,n]])).values()),nL=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??xT().createBoundingBox2d(),JT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,YT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${$I(e)} - ${$I(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=xT().getBBox2dBounds(this.wrapped);return[[e,t],[n,r]]}get center(){let[[e,t],[n,r]]=this.bounds;return[e+(n-e)/2,t+(r-t)/2]}get width(){let[[e],[t]]=this.bounds;return Math.abs(t-e)}get height(){let[[,e],[,t]]=this.bounds;return Math.abs(t-e)}outsidePoint(e=1){let[t,n]=this.bounds,r=n[0]-t[0],i=n[1]-t[1];return[n[0]+r/100*e,n[1]+i/100*e*.9]}add(e){xT().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return xT().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!xT().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function rL(e){return new iL(U().deserializeCurve2d(e))}var iL=class e{_wrapped;_deleted=!1;_boundingBox;_firstPoint=null;_lastPoint=null;_firstParameter=null;_lastParameter=null;constructor(e){this._wrapped=U().wrapCurve2dHandle(e),this._boundingBox=null,typeof this._wrapped.delete==`function`&&JT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,typeof this._wrapped.delete==`function`&&(YT(this._wrapped),this._wrapped.delete()))}[Symbol.dispose](){this.delete()}get boundingBox(){if(this._boundingBox)return this._boundingBox;let e=U(),t=e.createBoundingBox2d();return e.addCurveToBBox2d(t,this.wrapped,1e-6),this._boundingBox=new nL(t),this._boundingBox}get repr(){return`${this.geomType} ${$I(this.firstPoint)} - ${$I(this.lastPoint)}`}serialize(){return U().serializeCurve2d(this.wrapped)}value(e){return U().evaluateCurve2d(this.wrapped,e)}get firstPoint(){return this._firstPoint===null&&(this._firstPoint=this.value(this.firstParameter)),this._firstPoint}get lastPoint(){return this._lastPoint===null&&(this._lastPoint=this.value(this.lastParameter)),this._lastPoint}get firstParameter(){return this._firstParameter===null&&(this._firstParameter=U().getCurve2dBounds(this.wrapped).first),this._firstParameter}get lastParameter(){return this._lastParameter===null&&(this._lastParameter=U().getCurve2dBounds(this.wrapped).last),this._lastParameter}get geomType(){return U().getCurve2dType(this.wrapped)}clone(){let t=new e(U().copyCurve2d(this.wrapped));return t._firstPoint=this._firstPoint,t._lastPoint=this._lastPoint,t._firstParameter=this._firstParameter,t._lastParameter=this._lastParameter,t}reverse(){U().reverseCurve2d(this.wrapped);let e=this._firstPoint;this._firstPoint=this._lastPoint,this._lastPoint=e;let t=this._firstParameter;this._firstParameter=this._lastParameter,this._lastParameter=t}distanceFromPoint(e){let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]),n=t?t.distance:1/0;return Math.min(n,TI(e,this.firstPoint),TI(e,this.lastPoint))}distanceFromCurve(e){let t;try{t=U().distanceBetweenCurves2d(this.wrapped,e.wrapped,this.firstParameter,this.lastParameter,e.firstParameter,e.lastParameter)}catch{t=1/0}return Math.min(t,this.distanceFromPoint(e.firstPoint),this.distanceFromPoint(e.lastPoint),e.distanceFromPoint(this.firstPoint),e.distanceFromPoint(this.lastPoint))}distanceFrom(e){return YI(e)?this.distanceFromPoint(e):this.distanceFromCurve(e)}isOnCurve(e){return this.distanceFromPoint(e)<1e-9}parameter(e,t=1e-9){let n,r,i=!1;try{let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]);t?(n=t.distance,r=t.param):i=!0}catch{i=!0}return i?xI(e,this.firstPoint,t)?O(this.firstParameter):xI(e,this.lastPoint,t)?O(this.lastParameter):k(F(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n===void 0||r===void 0?k(F(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n>t?k(F(`POINT_NOT_ON_CURVE`,`Point ${$I(e)} not on curve ${this.repr}, ${n.toFixed(9)}`)):O(r)}tangentAt(e){let t;if(Array.isArray(e))t=j(this.parameter(e));else{let n=U().getCurve2dBounds(this.wrapped);t=(n.last-n.first)*e+n.first}return U().evaluateCurve2dD1(this.wrapped,t).tangent}splitAt(n,r=1e-9){let i=n.map(e=>YI(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[XI(e,-Math.log10(r)),e])).values()).sort((e,t)=>e-t);let a=this.firstParameter,o=this.lastParameter;return a>o&&i.reverse(),Math.abs(t(i,0)-a)<r*100&&(i=i.slice(1)),!i.length||(Math.abs(t(i,i.length-1)-o)<r*100&&(i=i.slice(0,-1)),!i.length)?[this]:U().splitCurve2d(this.wrapped,i).map(t=>new e(t))}},aL=(e,t=1e-4,n=`C0`,r=200)=>new iL(xT().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),oL=e=>(e.geomType!==`BSPLINE_CURVE`&&i(`BSplineToBezier`,`You can only convert a Bspline`),xT().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new iL(e)));function sL(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=xT();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&xI(e.firstPoint,e.lastPoint))return e.splitAt([.5]);if([`LINE`,`ELLIPSE`,`CIRCLE`].includes(r))return e;if(r===`BEZIER_CURVE`){let t=n.getCurve2dBezierDegree(e.wrapped);if(t!==null&&[1,2,3].includes(t))return e}return sL(oL(r===`BSPLINE_CURVE`?e:aL(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var cL=(e,t)=>{let n=new iL(U().makeLine2d(e[0],e[1],t[0],t[1]));return xI(n.firstPoint,e)||n.reverse(),n},lL=(e,t,n)=>{let r=new iL(U().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!xI(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new iL(e)}return r},uL=(e,t,n)=>{let r=new iL(U().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!xI(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new iL(e)}return r},dL=(e,t=[0,0])=>new iL(U().makeCircle2d(t[0],t[1],e,!0)),fL=(e,t,n=[1,0],r=[0,0],i=!0)=>new iL(U().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),pL=(e,t,n,r,i=[0,0],a,o=!0)=>new iL(U().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),mL=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new iL(U().makeBezier2d(r))};function hL(e,{tolerance:t=.001,smoothing:n=null,degMax:r=3,degMin:i=1}={}){try{let a=e.map(e=>[e[0],e[1]]);return O(new iL(U().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch(e){return k(F(`BSPLINE_2D_FAILED`,`B-spline approximation failed`,e))}}var gL=(e,t,n,r=!1)=>{let i=wI(SI(e,t),.5),a=TI(n,e)*(r?-1:1);return lL(e,SI(wI(PI(CI(i,n)),a),n),t)},_L=(e,n)=>{let r=xT(),a=e.geomType,[o,s]=n,c=`${QI(o)} ${QI(s)}`;if(a===`LINE`)return`L ${c}`;if(a===`BEZIER_CURVE`){let n=r.getCurve2dBezierPoles(e.wrapped);n||i(`adaptedCurveToPathElem`,`Expected Bezier poles`);let a=n.length-1;if(a===1)return`L ${c}`;if(a===2){let[e,r]=t(n,1);return`Q ${ZI(e)} ${ZI(r)} ${c}`}if(a===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${ZI(e)} ${ZI(r)} ${ZI(i)} ${ZI(a)} ${c}`}}if(a===`CIRCLE`){let t=r.getCurve2dCircleData(e.wrapped);t||i(`adaptedCurveToPathElem`,`Expected circle data`);let{radius:n,isDirect:a}=t,l=r.getCurve2dBounds(e.wrapped),u=(l.last-l.first)*KE,d=u===360?`${QI(o)} ${QI(s+1e-4)}`:c;return`A ${n} ${n} 0 ${Math.abs(u)>180?`1`:`0`} ${a?`1`:`0`} ${d}`}if(a===`ELLIPSE`){let t=r.getCurve2dEllipseData(e.wrapped);t||i(`adaptedCurveToPathElem`,`Expected ellipse data`);let{majorRadius:n,minorRadius:a,xAxisAngle:l,isDirect:u}=t,d=r.getCurve2dBounds(e.wrapped),f=(d.last-d.first)*KE,p=f===360?`${QI(o)} ${QI(s+1e-4)}`:c,m=180-l*KE;return`A ${QI(n)} ${QI(a)} ${QI(m)} ${Math.abs(f)>180?`1`:`0`} ${u?`1`:`0`} ${p}`}i(`adaptedCurveToPathElem`,`Unsupported curve type: ${a}`)},vL=e=>{let t=U(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new nL(n)};function yL(e,t){let n=U();return e.map(e=>xE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var bL=(e,t)=>{let n=U();return e.map(e=>xE(n.buildEdgeOnSurface(e.wrapped,t)))},xL=(e,t)=>{let n=U();return e.map(e=>t?new iL(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},SL=(e,t,n=[0,0])=>U().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),CL=e=>U().createTranslationGTrsf2d(e[0],e[1]),wL=(e,t=[0,0],n=`center`)=>n===`center`?U().createMirrorGTrsf2d(e[0],e[1],`point`):U().createMirrorGTrsf2d(0,0,`axis`,t[0],t[1],e[0],e[1]),TL=(e,t=[0,0])=>U().createRotationGTrsf2d(e,t[0],t[1]),EL=(e,t=[0,0])=>U().createScaleGTrsf2d(e,t[0],t[1]);function DL(e,t,n=`original`){let r=U(),i=r.extractSurfaceFromFace(t.wrapped),a=_O(t),o=null;if(n===`original`&&mO(t)!==`PLANE`){if(mO(t)!==`CYLINDRE`)return k(P(`UNSUPPORTED_FACE_TYPE`,`Only planar and cylindrical faces can be unwrapped for sketching`));let e=r.getSurfaceCylinderData(i);if(!e)return k(P(`UNSUPPORTED_FACE_TYPE`,`Could not extract cylinder data from face surface`));e.isDirect||(i=r.reverseSurfaceU(i)),o=SL(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=bL(xL(e,o),i);return o&&o.delete(),O(s)}function OL(e,t){let n=U(),r=new iL(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return Rk(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var kL=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,AL=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${kL(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
17
+ ${e}
18
+ </svg>`;function jL(e){let t=e.map(e=>e.wrapped);return SE(U().makeWire(t))}var ML=class e{curves;_boundingBox;_orientation;_guessedOrientation;constructor(e){e.length===0&&i(`Blueprint`,`requires at least one curve — use createBlueprint() for Result-based validation`),this.curves=e,this._boundingBox=null,this._orientation=null,this._guessedOrientation=null}delete(){this.curves.forEach(e=>{e.delete()}),this._boundingBox&&this._boundingBox.delete()}[Symbol.dispose](){this.delete()}clone(){return new e(this.curves.map(e=>e.clone()))}get repr(){return[`Blueprint`,...this.curves.map(e=>e.repr)].join(`
19
+ `)}get boundingBox(){return this._boundingBox||=vL(this.curves),this._boundingBox}get orientation(){if(this._orientation)return this._orientation;if(this._guessedOrientation)return this._guessedOrientation;let e=this.curves.flatMap(e=>e.geomType===`LINE`?[e.firstPoint]:[e.firstPoint,e.value(.5)]),t=e.map((t,n)=>{let r=mA(e,(n+1)%e.length);return(r[0]-t[0])*(r[1]+t[1])}).reduce((e,t)=>e+t,0);return this._guessedOrientation=t>0?`clockwise`:`counterClockwise`,this._guessedOrientation}stretch(t,n,r=[0,0]){let i=xL(this.curves,SL(t,n,r));return new e(i)}scale(t,n){let r=n||this.boundingBox.center,i=xL(this.curves,EL(t,r));return new e(i)}rotate(t,n){let r=xL(this.curves,TL(t*GE,n));return new e(r)}translate(t,n=0){let r=YI(t)?t:[t,n],i=xL(this.curves,CL(r));return new e(i)}mirror(t,n=[0,0],r=`center`){let i=xL(this.curves,wL(t,n,r));return new e(i)}sketchOnPlane(e,t){let n=e&&typeof e!=`string`?{...e}:QD(e,t),r=yL(this.curves,n),i=jL(r);for(let e of r)e[Symbol.dispose]();return{wire:i,defaultOrigin:n.origin,defaultDirection:n.zDir}}sketchOnFace(e,t){let n=U(),r=j(DL(this.curves,e,t)),i=jL(r);for(let e of r)e[Symbol.dispose]();n.buildCurves3d(i.wrapped);let a=n.fixWireOnFace(i.wrapped,e.wrapped,1e-9);return i[Symbol.dispose](),{wire:SE(a),baseFace:e}}subFace(e,t){let n=DD(t||[...SO(e)]);return j(AA(this.translate(yO(e,n)).sketchOnFace(e,`original`).wire))}punchHole(e,t,{height:n=null,origin:r=null,draftAngle:i=0}={}){let a=j(JI(t,e)),o=this.subFace(a,r);return j(lO(U().draftPrism(e.wrapped,o.wrapped,a.wrapped,n,i,!1)))}toSVGPathD(){let e=this.clone().mirror([1,0],[0,0],`plane`),t=sL(e.curves).flatMap(e=>_L(e,e.lastPoint)),[n,r]=hA(e.curves).firstPoint;return`M ${QI(n)} ${QI(r)} ${t.join(` `)}${e.isClosed()?` Z`:``}`}toSVGPath(){return`<path d="${this.toSVGPathD()}" />`}toSVGViewBox(e=1){return kL(this.boundingBox,e)}toSVGPaths(){return[this.toSVGPathD()]}toSVG(e=1){return AL(this.toSVGPath(),this.boundingBox,e)}get firstPoint(){return hA(this.curves).firstPoint}get lastPoint(){return gA(this.curves).lastPoint}isInside(e){if(!this.boundingBox.containsPoint(e))return!1;let t=U(),n=cL(e,this.boundingBox.outsidePoint());try{if(this.curves.find(t=>t.isOnCurve(e)))return!1;let r=[],i=0;return this.curves.forEach(e=>{if(e.boundingBox.isOut(n.boundingBox))return;let a=t.intersectCurves2d(n.wrapped,e.wrapped,1e-9);for(let e of a.points)r.some(t=>xI(t,e,1e-9))||(r.push(e),i++);for(let e of a.segments)e.delete()}),!!(i%2)}finally{n.delete()}}isClosed(){return xI(this.firstPoint,this.lastPoint)}intersects(e){if(this.boundingBox.isOut(e.boundingBox))return!1;let t=U();for(let n of this.curves)for(let r of e.curves){if(n.boundingBox.isOut(r.boundingBox))continue;let e=t.intersectCurves2d(n.wrapped,r.wrapped,1e-9);if(e.points.length||e.segments.length)return!0}return!1}},NL=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let r=e!==1/0;this.ids=r?new n(e):[],this.values=r?new t(e):[],this.capacity=e,this.length=0}clear(){this.length=0}push(e,t){if(this.length===this.capacity)throw RangeError(`Queue is at capacity.`);let n=this.length++;for(;n>0;){let e=n-1>>1,r=this.values[e];if(t>=r)break;this.ids[n]=this.ids[e],this.values[n]=r,n=e}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],r=--this.length;if(r>0){let n=e[r],i=t[r],a=0,o=r>>1;for(;a<o;){let n=(a<<1)+1,o=n+1,s=n+(o<r&+(t[o]<t[n]));if(t[s]>=i)break;e[a]=e[s],t[a]=t[s],a=s}e[a]=n,t[a]=i}return n}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){Array.isArray(this.ids)&&(this.ids.length=this.length),Array.isArray(this.values)&&(this.values.length=this.length)}},PL=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],FL=3,IL=class e{static from(t,n=0){if(n%8!=0)throw Error(`byteOffset must be 8-byte aligned.`);if(!t||t.byteLength===void 0||`buffer`in t)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[r,i]=new Uint8Array(t,n+0,2);if(r!==251)throw Error(`Data does not appear to be in a Flatbush format.`);let a=i>>4;if(a!==FL)throw Error(`Got v${a} data when expected v${FL}.`);let o=PL[i&15];if(!o)throw Error(`Unrecognized array type.`);let[s]=new Uint16Array(t,n+2,1),[c]=new Uint32Array(t,n+4,1);return new e(c,s,o,void 0,t,n)}constructor(e,t=16,n=Float64Array,r=ArrayBuffer,i,a=0){if(e===void 0)throw Error(`Missing required argument: numItems.`);if(isNaN(e)||e<=0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=a;let o=e,s=o;this._levelBounds=[o*4];do o=Math.ceil(o/this.nodeSize),s+=o,this._levelBounds.push(s*4);while(o!==1);this.ArrayType=n,this.IndexArrayType=s<16384?Uint16Array:Uint32Array;let c=PL.indexOf(n),l=s*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);let u=n,d=this.IndexArrayType;if(i)this.data=i,this._boxes=new u(i,a+8,s*4),this._indices=new d(i,a+8+l,s),this._pos=s*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{let n=this.data=new r(8+l+s*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(n,8,s*4),this._indices=new d(n,8+l,s),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(n,0,2).set([251,(FL<<4)+c]),new Uint16Array(n,2,1)[0]=t,new Uint32Array(n,4,1)[0]=e}this._queue=new NL}add(e,t,n=e,r=t){let i=this._pos,a=i>>2,o=this._boxes;return this._indices[a]=a,o[i]=e,o[i+1]=t,o[i+2]=n,o[i+3]=r,this._pos=i+4,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),a}finish(){if(this._pos>>2!==this.numItems)throw Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}let{numItems:t,minX:n,minY:r,nodeSize:i,_indices:a,_levelBounds:o}=this,s=this.maxX-n||1,c=this.maxY-r||1,l=new Int32Array(t),u=65535,d=u/s,f=u/c;for(let i=0,a=0;i<t;i++){let t=e[a++],o=e[a++],s=e[a++],c=e[a++];l[i]=BL(d*((t+s)/2-n)|0,f*((o+c)/2-r)|0)}RL(l,e,a,0,t-1,i);let p=t*4;for(let t=0,n=0;t<o.length-1;t++){let r=o[t];for(;n<r;){let t=n,o=e[n++],s=e[n++],c=e[n++],l=e[n++];for(let t=1;t<i&&n<r;t++)o=Math.min(o,e[n++]),s=Math.min(s,e[n++]),c=Math.max(c,e[n++]),l=Math.max(l,e[n++]);a[p>>2]=t,e[p++]=o,e[p++]=s,e[p++]=c,e[p++]=l}}this._pos=p}search(e,t,n,r,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,nodeSize:c}=this,l=this.numItems*4,u=a.length-4,d=o.length-1,f=[],p=[],m=!1;for(;u!==void 0;){let h=Math.min(u+c*4,o[d]),g=u>=l;if(m)this._collectContained(u,h,d,l,p,i);else for(let o=u;o<h;o+=4){let c=a[o];if(n<c)continue;let l=a[o+1];if(r<l)continue;let u=a[o+2];if(e>u)continue;let m=a[o+3];if(t>m)continue;let h=s[o>>2]|0;if(g){let i=+(e<=c&&t<=l&&n>=u&&r>=m);f.push(h|i,d-1)}else(i===void 0||i(h,c,l,u,m))&&p.push(h)}d=f.pop(),u=f.pop(),u!==void 0&&(m=(u&1)==1,u&=-2)}return p}_collectContained(e,t,n,r,i,a){let o=this._boxes,s=this._indices,c=e;for(let e=n;e>0;e--)c=s[c>>2];let l=Math.min(c+(t-e)*this.nodeSize**n,r);if(a===void 0)for(;c<l;c+=4)i.push(s[c>>2]|0);else for(;c<l;c+=4){let e=s[c>>2]|0;a(e,o[c],o[c+1],o[c+2],o[c+3])&&i.push(e)}}neighbors(e,t,n=1/0,r=1/0,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,_queue:c,nodeSize:l}=this,u=this.numItems*4,d=l*4,f=[],p=r*r,m=n===1,h=p;for(c.push(a.length-4<<1,0);c.length;){let r=c.ids[0];if(r&1){if(c.pop(),f.push(r>>1),f.length===n)break;continue}c.pop();let l=r>>1,p=l<u,g=Math.min(l+d,LL(l,o));for(let n=l;n<g;n+=4){let r=a[n],o=a[n+1],l=a[n+2],u=a[n+3],d=Math.max(Math.max(r-e,e-l),0),f=Math.max(Math.max(o-t,t-u),0),g=d*d+f*f;if(g>h)continue;let _=s[n>>2]|0;p?(i===void 0||i(_))&&(c.push(_<<1|1,g),m&&g<h&&(h=g)):c.push(_<<1,g)}}return c.clear(),f}};function LL(e,t){let n=0,r=t.length-1;for(;n<r;){let i=n+r>>1;t[i]>e?r=i:n=i+1}return t[n]}function RL(e,t,n,r,i,a){let o=[r,i];for(;o.length;){let r=o.pop()||0,i=o.pop()||0;if(r-i<=a&&Math.floor(i/a)>=Math.floor(r/a))continue;let s=e[i],c=e[i+r>>1],l=e[r],u=s>c==s>l?c<s==c<l?l:c:s,d=i-1,f=r+1;for(;;){do d++;while(e[d]<u);do f--;while(e[f]>u);if(d>=f)break;zL(e,t,n,d,f)}o.push(i,f,f+1,r)}}function zL(e,t,n,r,i){let a=e[r];e[r]=e[i],e[i]=a;let o=4*r,s=4*i,c=t[o],l=t[o+1],u=t[o+2],d=t[o+3];t[o]=t[s],t[o+1]=t[s+1],t[o+2]=t[s+2],t[o+3]=t[s+3],t[s]=c,t[s+1]=l,t[s+2]=u,t[s+3]=d;let f=n[r];n[r]=n[i],n[i]=f}function BL(e,t){let n=e^t,r=65535^n,i=65535^(e|t),a=e&(t^65535),o=n|r>>1,s=n>>1^n,c=i^(i>>1^r&a>>1),l=a^(n&i>>1^a>>1);return n=o&o>>2^s&s>>2,r=o&s>>2^s&(o^s)>>2,i=c^(o&c>>2^s&l>>2),a=l^(s&c>>2^(o^s)&l>>2),o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c=i^(n&i>>4^r&a>>4),l=a^(r&i>>4^(n^r)&a>>4),i=c^(o&c>>8^s&l>>8),a=l^(s&c>>8^(o^s)&l>>8),i^=i>>1,a^=a>>1,n=e^t,r=a|65535^(n|i),n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,((r<<1|n)>>>0)-2147483648}var VL=(e,t,n=1e-9)=>{if(e.boundingBox.isOut(t.boundingBox))return O({intersections:[],commonSegments:[],commonSegmentsPoints:[]});let r=xT(),i,a;try{let o=r.intersectCurves2d(e.wrapped,t.wrapped,n);i=o.points,a=o.segments.map(e=>new iL(e))}catch(e){return k(F(`INTERSECTION_FAILED`,`Intersections failed between curves`,e))}let o=a.filter(e=>xI(e.firstPoint,e.lastPoint,n)).map(e=>e.firstPoint);o.length&&(i.push(...o),a=a.filter(e=>!xI(e.firstPoint,e.lastPoint,n)));let s=a.flatMap(e=>[e.firstPoint,e.lastPoint]);return O({intersections:i,commonSegments:a,commonSegmentsPoints:s})},HL=(e,t=1e-9)=>{let n=xT(),r;try{let i=n.intersectCurves2d(e.wrapped,e.wrapped,t);r=i.points;for(let e of i.segments)e.delete()}catch(e){return k(F(`SELF_INTERSECTION_FAILED`,`Self intersection failed`,e))}return O(r)},UL=(e,n,r)=>{let i=PI(CI(n,e)),a=[i[1],-i[0]],o=[t(a,0)*r,t(a,1)*r];return{firstPoint:SI(e,o),lastPoint:SI(n,o)}},WL=(e,t)=>{let n=e.geomType,r=xT();if(n===`CIRCLE`){let n=r.getCurve2dCircleData(e.wrapped);if(!n)return cL(e.firstPoint,e.lastPoint);let{cx:i,cy:a,radius:o,isDirect:s}=n,c=t*(s?1:-1),l=o+c;if(l<1e-10){let t=[i,a],n=e=>{let[n,r]=PI(CI(e,t));return SI(e,[c*n,c*r])};return{collapsed:!0,firstPoint:n(e.firstPoint),lastPoint:n(e.lastPoint)}}let u=new iL(r.makeCircle2d(i,a,l,s)),d;try{d=r.trimCurve2d(u.wrapped,e.firstParameter,e.lastParameter)}finally{u.delete()}return new iL(d)}if(n===`LINE`){let{firstPoint:n,lastPoint:r}=UL(e.firstPoint,e.lastPoint,t);return cL(n,r)}let i=new iL(r.offsetCurve2d(e.wrapped,t)),a=aL(i);if(i.delete(),j(HL(a)).length){let e=a.firstPoint,t=a.lastPoint;return a.delete(),{collapsed:!0,firstPoint:e,lastPoint:t}}return a};function GL(e,n,r){let i=DI(e.tangentAt(1),n.tangentAt(0));if(Math.abs(i)<1e-10)return null;let a=Math.abs(r)*(i>0?-1:1),o=WL(e,a),s=WL(n,a);if(!(o instanceof iL)||!(s instanceof iL))return null;let c=VL(o,s,1e-9);if(!Ka(c))return null;let l=c.value.intersections.at(-1);if(!YI(l))return null;let u=l,d=(e,t)=>{let[n,r]=t.tangentAt(u),i=PI([-r,n]),o=SI(u,wI(i,a)),s=j(e.parameter(o,1e-6));return e.splitAt([s])},f=d(e,o),p=d(n,s);return{first:t(f,0),second:t(p,1),center:u}}function KL(e,t,n){let r=GL(e,t,n);if(!r)return[e,t];let{first:i,second:a,center:o}=r;return[i,gL(i.lastPoint,a.firstPoint,o),a]}function qL(e,t,n){let r=GL(e,t,n);if(!r)return[e,t];let{first:i,second:a}=r;return[i,cL(i.lastPoint,a.firstPoint),a]}function JL(e,n,r){let i=DI(PI(e.tangentAt(1)),PI(n.tangentAt(0))),a=Math.asin(i);if(Math.abs(i)<1e-10)return[e,n];let o=i>0?-1:1,s=Math.abs(r)*Math.sin(a/2)*o,c=WL(e,s),l=WL(n,s);if(!(c instanceof iL)||!(l instanceof iL))return[e,n];let u=VL(c,l,1e-9);if(!Ka(u))return[e,n];let d=u.value.intersections.at(-1);if(!YI(d))return[e,n];let f=dL(r,d),p=j(VL(e,f)).intersections[0],m=j(VL(n,f)).intersections.at(-1);if(!p||!m)return[e,n];let h=e.splitAt([p]),g=n.splitAt([m]),_=t(h,0),v=t(g,g.length-1);try{return[_,lL(_.lastPoint,e.lastPoint,v.firstPoint),v]}catch{return[e,n]}}var YL=class e{blueprints;_boundingBox;constructor(e){this.blueprints=e,this._boundingBox=null}get repr(){return[`Blueprints`,...this.blueprints.map(e=>e.repr)].join(`
20
+ `)}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new nL;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){let r=e;return this.blueprints.forEach(e=>{r=e.punchHole(r,t,n)}),r}toSVGViewBox(e=1){return kL(this.boundingBox,e)}toSVGPaths(){return this.blueprints.map(e=>e.toSVGPaths())}toSVG(e=1){return AL(this.blueprints.map(e=>e instanceof ML?e.toSVGPath():e.toSVGGroup()).join(`
21
+ `),this.boundingBox,e)}},XL=class e{blueprints;_boundingBox;constructor(e){e.length===0&&i(`CompoundBlueprint`,`requires at least one blueprint (the outer boundary) — use createCompoundBlueprint() for Result-based validation`),this.blueprints=e,this._boundingBox=null}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new nL;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}get repr(){return[`Compound Blueprints`,`-- Outline`,hA(this.blueprints).repr,`-- Holes`,...this.blueprints.slice(1).map(e=>e.repr)].join(`
22
+ `)}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){return hA(this.blueprints).punchHole(e,t,n)}toSVGViewBox(e=1){return kL(this.boundingBox,e)}toSVGPaths(){return this.blueprints.flatMap(e=>e.toSVGPaths())}toSVGGroup(){return`<g>${this.blueprints.map(e=>e.toSVGPath()).join(``)}</g>`}toSVG(e=1){return AL(this.toSVGGroup(),this.boundingBox,e)}},ZL=e=>{if(e.length===0)return[];if(e.length===1)return[[Do(e,0,`groupByBoundingBoxOverlap`)]];let t=new IL(e.length);for(let n of e){let[[e,r],[i,a]]=n.boundingBox.bounds;t.add(e,r,i,a)}t.finish();let n=e.map((n,r)=>{let[[i,a],[o,s]]=n.boundingBox.bounds;return t.search(i,a,o,s).filter(t=>t>r&&!n.boundingBox.isOut(Do(e,t,`groupByBoundingBoxOverlap`).boundingBox))}),r=[],i=Array(n.length);return n.forEach((t,n)=>{let a=i[n];a||(a=[],r.push(a)),a.push(Do(e,n,`groupByBoundingBoxOverlap`)),t.length&&t.forEach(e=>{i[e]=a})}),r},QL=e=>e.map((t,n)=>{let r=Do(t.curves,0,`addContainmentInfo`),i=r.value((r.lastParameter+r.firstParameter)/2);return{blueprint:t,isIn:e.filter((e,t)=>n===t?!1:e.isInside(i))}}),$L=(e,t)=>e.flatMap(({blueprint:e})=>tR(t.filter(({blueprint:t,isIn:n})=>t===e||n.indexOf(e)!==-1))),eR=(e,t)=>[t.filter(({isIn:e})=>e.length<=1),...tR(QL(e.map(({blueprint:e})=>e)))],tR=e=>{if(!e.length)return[];let t=e.filter(({isIn:e})=>!e.length),n=e.filter(({isIn:e})=>e.length>1);return t.length===1&&n.length===0?[e]:t.length>1?$L(t,e):eR(n,e)},nR=e=>new YL(ZL(e).map(QL).flatMap(tR).map(e=>e.length===1?Do(e,0,`organiseBlueprints`).blueprint:(e.sort((e,t)=>e.isIn.length-t.isIn.length),new XL(e.map(({blueprint:e})=>e))))),rR=e=>e===`symmetric`||typeof e==`number`||Array.isArray(e)&&e.length===2,iR=e=>{let t;t=e?rR(e)?{endTangent:e}:{endTangent:0,...e}:{endTangent:[1,0]};let{endTangent:n,startFactor:r=1,endFactor:i=1,startTangent:a}=t,o;o=typeof n==`number`?MI(1,n*GE):n;let s;return s=typeof a==`number`?MI(1,a*GE):a,{endTangent:o,startFactor:r,endFactor:i,startTangent:s}};function aR(e,t,n){return e<t?{majorRadius:t,minorRadius:e,rotationAngle:n+90}:{majorRadius:e,minorRadius:t,rotationAngle:n}}function oR(e,t,n,r,i,a,o,s){let c=i*GE,l=e=>TI(s(e)),u=l(MI(n,c)),d=l(MI(r,c+Math.PI/2)),f=PI(s(AI([1,0],c))),[,p]=NI(f),{cx:m,cy:h,startAngle:g,endAngle:_,clockwise:v,rx:y,ry:b}=lR(e,t,u,d,p,a,o),x=pL(y,b,v?g:_,v?_:g,[m,h],f);return v||x.reverse(),x}function sR(e,t,n,r,i){let a=Math.PI*2,o=cR(1,0,e,t),s=cR(e,t,-n,-r);for(;s>a;)s-=a;for(;s<0;)s+=a;i||(s-=a);let c=o+s;for(;c>a;)c-=a;for(;c<0;)c+=a;return{startAngle:o,deltaAngle:s,endAngle:c}}function cR(e,t,n,r){let a=e*n+t*r,o=Math.sqrt((e*e+t*t)*(n*n+r*r));o<1e-12&&i(`radianAngle`,`Cannot compute angle between zero-length vectors`);let s=Math.acos(Math.max(-1,Math.min(1,a/o)));return e*r-t*n<0&&(s=-s),s}function lR([e,t],[n,r],a,o,s,c,l){a<0&&(a=-a),o<0&&(o=-o),(a<1e-10||o<1e-10)&&i(`convertSvgEllipseParams`,`rx and ry cannot be 0`);let u=Math.sin(s),d=Math.cos(s),f=(e-n)/2,p=(t-r)/2,m=(e+n)/2,h=(t+r)/2,g=d*f+u*p,_=d*p-u*f,v=g*g/(a*a)+_*_/(o*o);v>1&&(a*=Math.sqrt(v),o*=Math.sqrt(v));let y=a*o,b=a*_,x=o*g,S=b*b+x*x;S||i(`convertSvgEllipseParams`,`Start point cannot be same as end point`);let C=Math.sqrt(Math.abs((y*y-S)/S));c===l&&(C=-C);let w=C*b/o,ee=-C*x/a,te=d*w-u*ee+m,ne=u*w+d*ee+h,re=(g-w)/a,ie=(g+w)/a,{startAngle:ae,deltaAngle:oe,endAngle:se}=sR(re,(_-ee)/o,ie,(_+ee)/o,l);return{cx:te,cy:ne,startAngle:ae,deltaAngle:oe,endAngle:se,clockwise:l,rx:a,ry:o}}var uR={chamfer:qL,dogbone:JL,fillet:KL};function dR(e,t){if(typeof e==`function`)return e;let n=uR[t];return(t,r)=>n(t,r,e)}var fR=class{pointer;firstPoint;pendingCurves;_nextCorner;constructor(e=[0,0]){this.pointer=e,this.firstPoint=e,this._nextCorner=null,this.pendingCurves=[]}_convertToUV([e,t]){return[e,t]}_convertFromUV([e,t]){return[e,t]}_lastCurve(){let e=this.pendingCurves.length;return e===0?null:this.pendingCurves[e-1]}_requireLastCurve(e,t){let n=this._lastCurve();return n||i(e,`You need a previous curve to ${t}`),n}_resolveRelative(e,t){return[this.pointer[0]+e,this.pointer[1]+t]}_saveCurveAndAdvance(e,t){return this.saveCurve(e),this.pointer=t,this}get penPosition(){return this.pointer}get penAngle(){let e=this._lastCurve();if(!e)return 0;let[t,n]=e.tangentAt(1);return Math.atan2(n,t)*KE}movePointerTo(e){return this.pendingCurves.length&&i(`Sketcher2d.movePointerTo`,`You can only move the pointer if there is no curve defined`),this.pointer=e,this.firstPoint=e,this}saveCurve(e){if(!this._nextCorner){this.pendingCurves.push(e);return}let t=this.pendingCurves.pop();t||i(`Sketcher2d.saveCurve`,`No previous curve available for custom corner`),this.pendingCurves.push(...this._nextCorner(t,e)),this._nextCorner=null}lineTo(e){let t=cL(this._convertToUV(this.pointer),this._convertToUV(e));return this._saveCurveAndAdvance(t,e)}line(e,t){return this.lineTo(this._resolveRelative(e,t))}vLine(e){return this.line(0,e)}hLine(e){return this.line(e,0)}vLineTo(e){return this.lineTo([this.pointer[0],e])}hLineTo(e){return this.lineTo([e,this.pointer[1]])}polarLineTo([e,t]){return this.lineTo(MI(e,t*GE))}polarLine(e,t){let[n,r]=MI(e,t*GE);return this.line(n,r)}tangentLine(e){let t=this._requireLastCurve(`Sketcher2d.tangentLine`,`sketch a tangent line`),n=PI(this._convertFromUV(t.tangentAt(1)));return this.line(n[0]*e,n[1]*e)}threePointsArcTo(e,t){let n=lL(this._convertToUV(this.pointer),this._convertToUV(t),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}threePointsArc(e,t,n,r){let[i,a]=this.pointer;return this.threePointsArcTo([i+e,a+t],[i+n,a+r])}sagittaArcTo(e,t){let[n,r]=this.pointer,[a,o]=e,s=(n+a)/2,c=(r+o)/2,l=-(o-r),u=a-n,d=Math.sqrt(l**2+u**2);d<1e-12&&i(`sagittaArcTo`,`Start and end points cannot be identical`);let f=[s+l/d*t,c+u/d*t],p=lL(this._convertToUV(this.pointer),this._convertToUV(f),this._convertToUV(e));return this._saveCurveAndAdvance(p,e)}sagittaArc(e,t,n){return this.sagittaArcTo(this._resolveRelative(e,t),n)}vSagittaArc(e,t){return this.sagittaArc(0,e,t)}hSagittaArc(e,t){return this.sagittaArc(e,0,t)}bulgeArcTo(e,t){if(!t)return this.lineTo(e);let n=TI(this.pointer,e)/2;return this.sagittaArcTo(e,-t*n)}bulgeArc(e,t,n){return this.bulgeArcTo(this._resolveRelative(e,t),n)}vBulgeArc(e,t){return this.bulgeArc(0,e,t)}hBulgeArc(e,t){return this.bulgeArc(e,0,t)}tangentArcTo(e){let t=this._requireLastCurve(`Sketcher2d.tangentArc`,`sketch a tangent arc`),n=uL(this._convertToUV(this.pointer),t.tangentAt(1),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}tangentArc(e,t){return this.tangentArcTo(this._resolveRelative(e,t))}ellipseTo(e,t,n,r=0,i=!1,a=!1){let{majorRadius:o,minorRadius:s,rotationAngle:c}=aR(t,n,r),l=oR(this._convertToUV(this.pointer),this._convertToUV(e),o,s,c,i,a,e=>this._convertToUV(e));return this._saveCurveAndAdvance(l,e)}ellipse(e,t,n,r,i=0,a=!1,o=!1){return this.ellipseTo(this._resolveRelative(e,t),n,r,i,a,o)}halfEllipseTo(e,t,n=!1){let r=kI(e,this.pointer),i=TI(e,this.pointer);return this.ellipseTo(e,i/2,t,r*KE,!0,n)}halfEllipse(e,t,n,r=!1){return this.halfEllipseTo(this._resolveRelative(e,t),n,r)}bezierCurveTo(e,t){let n=t.length===2&&!Array.isArray(t[0])?[t]:t,r=mL(this._convertToUV(this.pointer),n.map(e=>this._convertToUV(e)),this._convertToUV(e));return this._saveCurveAndAdvance(r,e)}quadraticBezierCurveTo(e,t){return this.bezierCurveTo(e,[t])}cubicBezierCurveTo(e,t,n){return this.bezierCurveTo(e,[t,n])}smoothSplineTo(e,t){let{endTangent:n,startTangent:r,startFactor:i,endFactor:a}=iR(t),o=this._lastCurve(),s=TI(this.pointer,e)*.25,c;c=r||(o?this._convertFromUV(o.tangentAt(1)):[1,0]),c=PI(c);let l=[this.pointer[0]+c[0]*i*s,this.pointer[1]+c[1]*i*s],u;u=n===`symmetric`?[-c[0],-c[1]]:n,u=PI(u);let d=[e[0]-u[0]*a*s,e[1]-u[1]*a*s];return this.cubicBezierCurveTo(e,l,d)}smoothSpline(e,t,n){return this.smoothSplineTo(this._resolveRelative(e,t),n)}customCorner(e,t=`fillet`){return this.pendingCurves.length||i(`Sketcher2d.customCorner`,`You need a curve defined to fillet the angle`),this._nextCorner=dR(e,t),this}_customCornerLastWithFirst(e,t=`fillet`){if(!e)return;let n=this.pendingCurves.pop(),r=this.pendingCurves.shift();(!n||!r)&&i(`Sketcher2d._customCornerLastWithFirst`,`Not enough curves to close and fillet`),this.pendingCurves.push(...dR(e,t)(n,r))}_closeSketch(){xI(this.pointer,this.firstPoint)||this.lineTo(this.firstPoint)}_closeWithMirror(){xI(this.pointer,this.firstPoint)&&i(`Sketcher2d._closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=[this.pointer[0]-this.firstPoint[0],this.pointer[1]-this.firstPoint[1]],t=this._convertToUV(this.pointer),n=this._convertToUV(e),r=this.pendingCurves.map(e=>new iL(U().mirrorCurve2dAcrossAxis(e.wrapped,t[0],t[1],n[0],n[1])));r.reverse();for(let e of r)e.reverse();this.pendingCurves.push(...r),this.pointer=this.firstPoint}},pR=class extends fR{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new ML(this.pendingCurves)}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},mR=2*Math.PI;function hR(e){let t=e%mR,n=t<0?t+mR:t;return n<Math.PI?n:n===Math.PI?0:Math.abs(n-mR)}function gR(e){return e.curves.map((t,n)=>({firstCurve:t,secondCurve:mA(e.curves,(n+1)%e.curves.length),point:t.lastPoint}))}function _R(e){let t=t=>_R([...e,t]),n=t=>e.every(e=>e(t));return{shouldKeep:n,when:e=>t(e),inList:e=>t(t=>e.some(e=>xI(e,t.point))),atDistance:(e,n=[0,0])=>t(t=>Math.abs(TI(n,t.point)-e)<1e-9),atPoint:e=>t(t=>xI(e,t.point)),inBox:(e,n)=>{let r=Math.min(e[0],n[0]),i=Math.max(e[0],n[0]),a=Math.min(e[1],n[1]),o=Math.max(e[1],n[1]);return t(e=>{let[t,n]=e.point;return t>=r&&t<=i&&n>=a&&n<=o})},ofAngle:e=>t(t=>{let n=t.firstCurve.tangentAt(1),r=t.secondCurve.tangentAt(0);return Math.abs(hR(OI(n,r))-hR(GE*e))<1e-9}),not:e=>{let n=e(_R([]));return t(e=>!n.shouldKeep(e))},either:e=>{let n=e.map(e=>e(_R([])));return t(e=>n.some(t=>t.shouldKeep(e)))},find:e=>gR(e).filter(n)}}function vR(){return _R([])}var yR=(e,t,n=0)=>{let r=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),i=gA(r),a=new pR().movePointerTo([i[0],i[1]]);return n?r.forEach(([e,t])=>a.sagittaArcTo([e,t],n)):r.forEach(([e,t])=>a.lineTo([e,t])),a.done()},bR=(e,t,n=0)=>{let{rx:r=0,ry:i=0}=typeof n==`number`?{ry:n,rx:n}:n,a=Math.min(r,e/2),o=Math.min(i,t/2),s=a&&o;s||(a=0,o=0);let c=a===o,l=new pR([Math.min(0,-(e/2-a)),-t/2]),u=(e,t)=>{s&&(c?l.tangentArc(e,t):l.ellipse(e,t,a,o,0,!1,!0))};return a<e/2&&l.hLine(e-2*a),u(a,o),o<t/2&&l.vLine(t-2*o),u(-a,o),a<e/2&&l.hLine(-(e-2*a)),u(-a,-o),o<t/2&&l.vLine(-(t-2*o)),u(a,-o),l.close()},xR=(e,t)=>xI(e,t,vI);function SR(e){return`${e[0].toFixed(9)},${e[1].toFixed(9)}`}function CR(e,t){let n=SR(e),r=SR(t);return n<r?`${n}|${r}`:`${r}|${n}`}function wR(e){let t=e[0];return t===void 0&&i(`startOfSegment`,`empty segment`),t.firstPoint}function TR(e){let t=e[e.length-1];return t===void 0&&i(`endOfSegment`,`empty segment`),t.lastPoint}function ER(e){return[...e].reverse().map(e=>{let t=e.clone();return t.reverse(),t})}function DR(e){return[...e].reverse().map(ER)}function OR(e){let t=(e.lastParameter+e.firstParameter)/2;return e.value(t)}function kR(e,t){let n=SR(t);for(let r=0;r<e.length;r++){let i=e[r];if(i!==void 0&&SR(i.firstPoint)===n&&xR(t,i.firstPoint))return r}for(let n=0;n<e.length;n++){let r=e[n];if(r!==void 0&&xR(t,r.firstPoint))return n}return-1}function AR(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0&&SR(a.firstPoint)===t&&SR(a.lastPoint)===n&&r(a))return i}for(let t=0;t<e.length;t++){let n=e[t];if(n!==void 0&&r(n))return t}return-1}function jR(e,t){return t<=0?e:e.slice(t).concat(e.slice(0,t))}function MR(e,t){return jR(e,kR(e,t))}function NR(e,t){let n=SR(t.firstPoint),r=SR(t.lastPoint),a=e=>xR(t.firstPoint,e.firstPoint)&&xR(t.lastPoint,e.lastPoint),o=e=>xR(t.lastPoint,e.firstPoint)&&xR(t.firstPoint,e.lastPoint);function s(e,t,n,r){let i=AR(e,t,n,r);return i===-1?null:jR(e,i)}let c=s(e,n,r,a);if(c!==null)return c;let l=s(e,r,n,o);if(l!==null)return l;let u=ER(e),d=s(u,n,r,a);if(d!==null)return d;let f=s(u,r,n,o);if(f!==null)return f;i(`rotateToStartAtSegment`,`failed to rotate to segment start`)}function*PR(e,t,n){let r=new Set(t.map(SR)),i=new Set(n.map(e=>CR(e.firstPoint,e.lastPoint))),a=e=>r.has(SR(e))?!0:t.some(t=>xR(t,e)),o=(e,t)=>i.has(CR(e,t))?!0:n.some(n=>xR(n.firstPoint,e)&&xR(n.lastPoint,t)||xR(n.firstPoint,t)&&xR(n.lastPoint,e)),s=[];for(let t of e){if(xR(t.firstPoint,t.lastPoint)){s.push(t);continue}let e=a(t.lastPoint),n=o(t.firstPoint,t.lastPoint);e?(s.push(t),yield s,s=[]):n?(s.length&&(yield s,s=[]),yield[t]):s.push(t)}s.length&&(yield s)}function FR(e,t,n){return e.filter(e=>{let r=t.filter(t=>xR(t.firstPoint,e)||xR(t.lastPoint,e)),i=r.length%2?r.filter(t=>!(xR(t.firstPoint,e)&&xR(t.lastPoint,e))):r;if(i.length===0||i.length%2)return!1;let a=i.map(e=>n.isInside(OR(e)));return!(a.every(Boolean)||a.every(e=>!e))})}function IR(e,n){let r=[],i=[],a=e.curves.map(()=>[]),o=n.curves.map(()=>[]),s=new IL(n.curves.length);for(let e of n.curves){let[[t,n],[r,i]]=e.boundingBox.bounds;s.add(t,n,r,i)}return s.finish(),e.curves.forEach((e,c)=>{let[[l,u],[d,f]]=e.boundingBox.bounds,p=s.search(l,u,d,f);for(let s of p){let{intersections:l,commonSegments:u,commonSegmentsPoints:d}=j(VL(e,t(n.curves,s),vI/100));r.push(...l),a[c]?.push(...l),o[s]?.push(...l),i.push(...u),r.push(...d),a[c]?.push(...d),o[s]?.push(...d)}}),{allIntersections:tL(r,vI),allCommonSegments:i,firstCurvePoints:a,secondCurvePoints:o}}function LR(e,t){return vA([e,t]).flatMap(([e,t])=>t.length===0?[e]:e.splitAt(t,vI/100))}function RR(e,t,n){return e.some(([e,r])=>e===void 0||r===void 0?!1:xR(e,t)&&xR(r,n)||xR(e,n)&&xR(r,t))}function zR(e,t){let{allIntersections:n,allCommonSegments:r,firstCurvePoints:i,secondCurvePoints:a}=IR(e,t);if(n.length<=1)return null;let o=LR(e.curves,i),s=LR(t.curves,a),c=r.map(e=>[e.firstPoint,e.lastPoint]),l=FR(FR(n,o,t),s,e);if(l.length===0&&r.length===0)return null;if(r.length===0){let e=l[0];if(e===void 0)return null;o=MR(o,e),s=MR(s,e)}else{let e=r[0];if(e===void 0)return null;o=NR(o,e),s=NR(s,e)}let u=Array.from(PR(o,l,r)),d=Array.from(PR(s,l,r)),f=u[0],p=d[0];if(f!==void 0&&p!==void 0){let e=!xR(TR(p),TR(f)),t=r.length>0&&p.length!==1;(e||t)&&(d=DR(d))}let m=Math.max(u.length,d.length),h=[];for(let e=0;e<m;e++){let t=u[e],n=d[e];if(t===void 0||n===void 0){let e=t??n;if(e===void 0)continue;h.push([e,e]);continue}RR(c,wR(t),TR(t))?h.push([t,`same`]):h.push([t,n])}return h}function BR(e){if(e.length<2)return e;let n=[],r=0;for(;r<e.length;){let i=t(e,r);if(i.geomType!==`LINE`){n.push(i),r++;continue}let a=i.lastPoint,o=r+1;for(;o<e.length;){let n=t(e,o);if(n.geomType!==`LINE`||!xR(a,n.firstPoint))break;let r=CI(a,i.firstPoint),s=CI(n.lastPoint,n.firstPoint);if(Math.abs(DI(r,s))>1e-9)break;a=n.lastPoint,o++}o>r+1?n.push(cL(i.firstPoint,a)):n.push(i),r=o}return n}function VR(e){let t=e.map(e=>e.firstPoint),n=e.map(e=>e.lastPoint),r=vA([t,n.slice(-1).concat(n.slice(0,-1))]).map(([e,t],n)=>e===void 0||t===void 0||xR(e,t)?null:n).filter(e=>e!==null);if(r.length===0)return[e];let i=vA([r.slice(0,-1),r.slice(1)]).map(([t,n])=>e.slice(t,n)),a=e.slice(r[r.length-1]),o=r[0];return o!==void 0&&o!==0&&(a=a.concat(e.slice(0,o))),i.push(a),i}function HR(e,t,n){return t===1?{curves:[...e],segmentsIn:1,lastWasSame:null}:t===2||t===0?{curves:[],segmentsIn:null,lastWasSame:null}:t===null?{curves:[],segmentsIn:null,lastWasSame:n?[...n,...e]:e}:{curves:[],segmentsIn:t,lastWasSame:n}}function UR(e,t,n,r,i,a,o){let s=[],c=0,l=e[0];if(l!==void 0){let t=OR(l),n=r.isInside(t);(i.firstInside===`keep`&&n||i.firstInside===`remove`&&!n)&&(c+=1,s.push(...e))}let u=t[0];if(u!==void 0){let e=OR(u),r=n.isInside(e);if(i.secondInside===`keep`&&r||i.secondInside===`remove`&&!r){let e=t;c===1&&(e=ER(t)),c+=1,s.push(...e)}}return a===null&&c===1&&o!==null&&(s=[...o,...s]),{curves:s,segmentsIn:c===1?c:a,lastWasSame:c===1?null:o}}function WR(e,t,n){let r=zR(e,t);if(r===null)return GR(e,t);if(r.every(([,e])=>e===`same`))return{identical:!0};let i=null,a=null,o=r.flatMap(([r,o])=>{if(o===`same`){let e=HR(r,i,a);return i=e.segmentsIn,a=e.lastWasSame,e.curves}let s=UR(r,o,e,t,n,i,a);return i=s.segmentsIn,a=s.lastWasSame,s.curves}),s=a;s!==null&&i===1&&(o=[...s,...o]);let c=VR(BR(o)).filter(e=>e.length>0).map(e=>new ML(e));if(c.length===0)return null;if(c.length===1){let e=c[0];return e===void 0?null:e}return nR(c)}function GR(e,t){let n=e.curves[0],r=t.curves[0];return{identical:!1,firstCurveInSecond:n!==void 0&&t.isInside(OR(n)),secondCurveInFirst:r!==void 0&&e.isInside(OR(r))}}function KR(e,t){let n=WR(e,t,{firstInside:`remove`,secondInside:`remove`});return n===null||n instanceof ML||n instanceof YL?n:n.identical?e.clone():n.firstCurveInSecond?t.clone():n.secondCurveInFirst?e.clone():new YL([e,t])}function qR(e,t){let n=WR(e,t,{firstInside:`remove`,secondInside:`keep`});return n===null||n instanceof ML||n instanceof YL?n:n.identical||n.firstCurveInSecond?null:n.secondCurveInFirst?new YL([new XL([e,t])]):e.clone()}function JR(e,t){let n=WR(e,t,{firstInside:`keep`,secondInside:`keep`});return n===null||n instanceof ML||n instanceof YL?n:n.identical||n.firstCurveInSecond?e.clone():n.secondCurveInFirst?t.clone():null}var YR=(e,t)=>{if(e instanceof ML&&t instanceof ML){let n=[];return e.curves.forEach(e=>{t.curves.forEach(t=>{let{intersections:r,commonSegmentsPoints:i}=j(VL(e,t));n.push(...r),n.push(...i)})}),n=tL(n),n.length>1}if(e instanceof XL||e instanceof YL)return e.blueprints.some(e=>YR(e,t));if(t instanceof XL||t instanceof YL)return t.blueprints.some(t=>YR(e,t));i(`genericIntersects`,`Unhandled shape combination in genericIntersects`)},XR=(e,t)=>{if(e instanceof XL){if(t instanceof ML)return $R(t,e);if(t instanceof XL)return tz(e,t)}if(t instanceof XL){if(e instanceof ML)return $R(e,t);if(e instanceof XL)return tz(e,t)}if(e instanceof ML&&t instanceof ML)return KR(e,t);i(`genericFuse`,`Unhandled shape combination in genericFuse`)},ZR=e=>{let t=new Map,n=[];return e.forEach((r,a)=>{let o;t.has(a)?o=t.get(a):(o={current:r,fusedWith:new Set([a])},n.push(o)),e.slice(a+1).forEach((e,n)=>{let r=o.current,s=a+n+1;if(o.fusedWith.has(s))return;let c=e,l=!1;if(t.has(s)&&(c=t.get(s).current,l=!0),r.boundingBox.isOut(c.boundingBox)||!YR(r,c))return;let u;if(r instanceof YL||c instanceof YL){let e=nz(r,c);e===null&&i(`fuseIntersectingBlueprints`,`fuse2D returned null for non-null inputs`),u=e}else u=XR(r,c);if(!(u instanceof ML||u instanceof XL)){if(u instanceof YL&&u.blueprints.length===2)return;u instanceof YL&&u.blueprints.length===1?u=Do(u.blueprints,0,`fuseIntersectingBlueprints`):u instanceof YL||i(`fuseIntersectingBlueprints`,`Fuse produced unexpected non-blueprint result`)}o.fusedWith.add(s),o.current=u,l||t.set(s,o)})}),nR(n.map(({current:e})=>e).flatMap(e=>QR(e)))},QR=e=>e instanceof ML?[e]:e instanceof XL?e.blueprints:e instanceof YL?e.blueprints.flatMap(e=>QR(e)):[],$R=(e,t)=>{let n=KR(e,Do(t.blueprints,0,`fuseBlueprintWithCompound`)),r=t.blueprints.slice(1).map(t=>qR(t,e));return nR([...QR(n),...r.flatMap(e=>QR(e))])};function ez(e,t){let n=[];for(let r of e)for(let e of t)n.push([r,e]);return n}var tz=(e,t)=>{let n=Do(e.blueprints,0,`fuseCompoundWithCompound`),r=Do(t.blueprints,0,`fuseCompoundWithCompound`),i=KR(n,r),a=t.blueprints.slice(1).map(e=>qR(e,n)),o=e.blueprints.slice(1).map(e=>qR(e,r)),s=ez(e.blueprints.slice(1),t.blueprints.slice(1)).flatMap(([e,t])=>QR(JR(e,t)));return nR([...QR(i),...a.flatMap(e=>QR(e)),...o.flatMap(e=>QR(e)),...s])},nz=(e,t)=>{if(e===null)return t?.clone()??null;if(t===null)return e.clone();if(!(e instanceof YL)&&t instanceof YL)return ZR([e,...t.blueprints]);if(!(t instanceof YL)&&e instanceof YL)return ZR([t,...e.blueprints]);if(e instanceof YL&&t instanceof YL){let n=nz(Do(e.blueprints,0,`fuse2D`),t);return e.blueprints.slice(1).forEach(e=>{n=nz(e,n)}),n}if(e instanceof XL){if(t instanceof YL)return nz(t,e);if(t instanceof ML)return $R(t,e);if(t instanceof XL)return tz(e,t)}if(t instanceof XL){if(e instanceof YL)return nz(e,t);if(e instanceof ML)return $R(e,t);if(e instanceof XL)return tz(e,t)}return e instanceof ML&&t instanceof ML?KR(e,t):null},rz=e=>{let t=e.flatMap(e=>e===null?[]:e instanceof YL?e.blueprints:e);return t.length===1?Do(t,0,`mergeNonIntersecting`):new YL(t)},iz=(e,t)=>{if(e===null)return null;if(t===null)return e.clone();if(e instanceof YL)return rz(e.blueprints.map(e=>iz(e,t)));if(e instanceof XL){let n=Do(e.blueprints,0,`cut2D`);if(t instanceof ML&&!t.intersects(n))return n.isInside(t.firstPoint)?nR([n,...QR(nz(t,new YL(e.blueprints.slice(1))))]):e.clone();{let r=iz(n,t);return e.blueprints.slice(1).forEach(e=>{r=iz(r,e)}),r}}if(t instanceof YL){let n=e;for(let e of t.blueprints)n=iz(n,e);return n}if(t instanceof XL){let n=qR(e,Do(t.blueprints,0,`cut2D`));return t.blueprints.slice(1).forEach(t=>{n=nz(n,JR(t,e))}),n}return qR(e,t)};function az(e,t){if(e===null||t===null)return null;if(e instanceof ML&&t instanceof ML)return JR(e,t);if(e instanceof YL)return rz(e.blueprints.map(e=>az(e,t)));if(e instanceof XL){let n=Do(e.blueprints,0,`intersect2D`),r=e.blueprints.slice(1);if(r.length===0)return az(n,t);let i=az(n,t);for(let e of r)i=iz(i,e);return i}if(t instanceof YL)return rz(t.blueprints.map(t=>az(e,t)));if(t instanceof XL){let n=Do(t.blueprints,0,`intersect2D`),r=t.blueprints.slice(1);if(r.length===0)return az(n,e);let i=az(n,e);for(let e of r)i=iz(i,e);return i}i(`intersect2D`,`Unhandled Shape2D combination`)}var oz=e(((e,t)=>{t.exports={}}));
23
+ /*! https://mths.be/codepointat v0.2.0 by @mathias */
24
+ String.prototype.codePointAt||(function(){var e=function(){try{var e={},t=Object.defineProperty,n=t(e,e,e)&&t}catch{}return n}(),t=function(e){if(this==null)throw TypeError();var t=String(this),n=t.length,r=e?Number(e):0;if(r!=r&&(r=0),!(r<0||r>=n)){var i=t.charCodeAt(r),a;return i>=55296&&i<=56319&&n>r+1&&(a=t.charCodeAt(r+1),a>=56320&&a<=57343)?(i-55296)*1024+a-56320+65536:i}};e?e(String.prototype,`codePointAt`,{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t})();var sz=0,cz=-3;function lz(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function uz(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new lz,this.dtree=new lz}var dz=new lz,fz=new lz,pz=new Uint8Array(30),mz=new Uint16Array(30),hz=new Uint8Array(30),gz=new Uint16Array(30),_z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),vz=new lz,yz=new Uint8Array(320);function bz(e,t,n,r){var i,a;for(i=0;i<n;++i)e[i]=0;for(i=0;i<30-n;++i)e[i+n]=i/n|0;for(a=r,i=0;i<30;++i)t[i]=a,a+=1<<e[i]}function xz(e,t){var n;for(n=0;n<7;++n)e.table[n]=0;for(e.table[7]=24,e.table[8]=152,e.table[9]=112,n=0;n<24;++n)e.trans[n]=256+n;for(n=0;n<144;++n)e.trans[24+n]=n;for(n=0;n<8;++n)e.trans[168+n]=280+n;for(n=0;n<112;++n)e.trans[176+n]=144+n;for(n=0;n<5;++n)t.table[n]=0;for(t.table[5]=32,n=0;n<32;++n)t.trans[n]=n}var Sz=new Uint16Array(16);function Cz(e,t,n,r){var i,a;for(i=0;i<16;++i)e.table[i]=0;for(i=0;i<r;++i)e.table[t[n+i]]++;for(e.table[0]=0,a=0,i=0;i<16;++i)Sz[i]=a,a+=e.table[i];for(i=0;i<r;++i)t[n+i]&&(e.trans[Sz[t[n+i]]++]=i)}function wz(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=e.tag&1;return e.tag>>>=1,t}function Tz(e,t,n){if(!t)return n;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var r=e.tag&65535>>>16-t;return e.tag>>>=t,e.bitcount-=t,r+n}function Ez(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var n=0,r=0,i=0,a=e.tag;do r=2*r+(a&1),a>>>=1,++i,n+=t.table[i],r-=t.table[i];while(r>=0);return e.tag=a,e.bitcount-=i,t.trans[n+r]}function Dz(e,t,n){var r=Tz(e,5,257),i=Tz(e,5,1),a=Tz(e,4,4),o,s,c;for(o=0;o<19;++o)yz[o]=0;for(o=0;o<a;++o){var l=Tz(e,3,0);yz[_z[o]]=l}for(Cz(vz,yz,0,19),s=0;s<r+i;){var u=Ez(e,vz);switch(u){case 16:var d=yz[s-1];for(c=Tz(e,2,3);c;--c)yz[s++]=d;break;case 17:for(c=Tz(e,3,3);c;--c)yz[s++]=0;break;case 18:for(c=Tz(e,7,11);c;--c)yz[s++]=0;break;default:yz[s++]=u;break}}Cz(t,yz,0,r),Cz(n,yz,r,i)}function Oz(e,t,n){for(;;){var r=Ez(e,t);if(r===256)return sz;if(r<256)e.dest[e.destLen++]=r;else{var i,a,o,s;for(r-=257,i=Tz(e,pz[r],mz[r]),a=Ez(e,n),o=e.destLen-Tz(e,hz[a],gz[a]),s=o;s<o+i;++s)e.dest[e.destLen++]=e.dest[s]}}}function kz(e){for(var t,n,r;e.bitcount>8;)e.sourceIndex--,e.bitcount-=8;if(t=e.source[e.sourceIndex+1],t=256*t+e.source[e.sourceIndex],n=e.source[e.sourceIndex+3],n=256*n+e.source[e.sourceIndex+2],t!==(~n&65535))return cz;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,sz}function Az(e,t){var n=new uz(e,t),r,i,a;do{switch(r=wz(n),i=Tz(n,2,0),i){case 0:a=kz(n);break;case 1:a=Oz(n,dz,fz);break;case 2:Dz(n,n.ltree,n.dtree),a=Oz(n,n.ltree,n.dtree);break;default:a=cz}if(a!==sz)throw Error(`Data error`)}while(!r);return n.destLen<n.dest.length?typeof n.dest.slice==`function`?n.dest.slice(0,n.destLen):n.dest.subarray(0,n.destLen):n.dest}xz(dz,fz),bz(pz,mz,4,3),bz(hz,gz,2,1),pz[28]=0,mz[28]=258;var jz=Az;function Mz(e,t,n,r,i){return(1-i)**3*e+3*(1-i)**2*i*t+3*(1-i)*i**2*n+i**3*r}function Nz(){this.x1=NaN,this.y1=NaN,this.x2=NaN,this.y2=NaN}Nz.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)},Nz.prototype.addPoint=function(e,t){typeof e==`number`&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e<this.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),typeof t==`number`&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),t<this.y1&&(this.y1=t),t>this.y2&&(this.y2=t))},Nz.prototype.addX=function(e){this.addPoint(e,null)},Nz.prototype.addY=function(e){this.addPoint(null,e)},Nz.prototype.addBezier=function(e,t,n,r,i,a,o,s){var c=[e,t],l=[n,r],u=[i,a],d=[o,s];this.addPoint(e,t),this.addPoint(o,s);for(var f=0;f<=1;f++){var p=6*c[f]-12*l[f]+6*u[f],m=-3*c[f]+9*l[f]-9*u[f]+3*d[f],h=3*l[f]-3*c[f];if(m===0){if(p===0)continue;var g=-h/p;0<g&&g<1&&(f===0&&this.addX(Mz(c[f],l[f],u[f],d[f],g)),f===1&&this.addY(Mz(c[f],l[f],u[f],d[f],g)));continue}var _=p**2-4*h*m;if(!(_<0)){var v=(-p+Math.sqrt(_))/(2*m);0<v&&v<1&&(f===0&&this.addX(Mz(c[f],l[f],u[f],d[f],v)),f===1&&this.addY(Mz(c[f],l[f],u[f],d[f],v)));var y=(-p-Math.sqrt(_))/(2*m);0<y&&y<1&&(f===0&&this.addX(Mz(c[f],l[f],u[f],d[f],y)),f===1&&this.addY(Mz(c[f],l[f],u[f],d[f],y)))}}},Nz.prototype.addQuad=function(e,t,n,r,i,a){var o=e+2/3*(n-e),s=t+2/3*(r-t),c=o+1/3*(i-e),l=s+1/3*(a-t);this.addBezier(e,t,o,s,c,l,i,a)};function Pz(){this.commands=[],this.fill=`black`,this.stroke=null,this.strokeWidth=1}Pz.prototype.moveTo=function(e,t){this.commands.push({type:`M`,x:e,y:t})},Pz.prototype.lineTo=function(e,t){this.commands.push({type:`L`,x:e,y:t})},Pz.prototype.curveTo=Pz.prototype.bezierCurveTo=function(e,t,n,r,i,a){this.commands.push({type:`C`,x1:e,y1:t,x2:n,y2:r,x:i,y:a})},Pz.prototype.quadTo=Pz.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:`Q`,x1:e,y1:t,x:n,y:r})},Pz.prototype.close=Pz.prototype.closePath=function(){this.commands.push({type:`Z`})},Pz.prototype.extend=function(e){if(e.commands)e=e.commands;else if(e instanceof Nz){var t=e;this.moveTo(t.x1,t.y1),this.lineTo(t.x2,t.y1),this.lineTo(t.x2,t.y2),this.lineTo(t.x1,t.y2),this.close();return}Array.prototype.push.apply(this.commands,e)},Pz.prototype.getBoundingBox=function(){for(var e=new Nz,t=0,n=0,r=0,i=0,a=0;a<this.commands.length;a++){var o=this.commands[a];switch(o.type){case`M`:e.addPoint(o.x,o.y),t=r=o.x,n=i=o.y;break;case`L`:e.addPoint(o.x,o.y),r=o.x,i=o.y;break;case`Q`:e.addQuad(r,i,o.x1,o.y1,o.x,o.y),r=o.x,i=o.y;break;case`C`:e.addBezier(r,i,o.x1,o.y1,o.x2,o.y2,o.x,o.y),r=o.x,i=o.y;break;case`Z`:r=t,i=n;break;default:throw Error(`Unexpected path command `+o.type)}}return e.isEmpty()&&e.addPoint(0,0),e},Pz.prototype.draw=function(e){e.beginPath();for(var t=0;t<this.commands.length;t+=1){var n=this.commands[t];n.type===`M`?e.moveTo(n.x,n.y):n.type===`L`?e.lineTo(n.x,n.y):n.type===`C`?e.bezierCurveTo(n.x1,n.y1,n.x2,n.y2,n.x,n.y):n.type===`Q`?e.quadraticCurveTo(n.x1,n.y1,n.x,n.y):n.type===`Z`&&e.closePath()}this.fill&&(e.fillStyle=this.fill,e.fill()),this.stroke&&(e.strokeStyle=this.stroke,e.lineWidth=this.strokeWidth,e.stroke())},Pz.prototype.toPathData=function(e){e=e===void 0?2:e;function t(t){return Math.round(t)===t?``+Math.round(t):t.toFixed(e)}function n(){for(var e=arguments,n=``,r=0;r<arguments.length;r+=1){var i=e[r];i>=0&&r>0&&(n+=` `),n+=t(i)}return n}for(var r=``,i=0;i<this.commands.length;i+=1){var a=this.commands[i];a.type===`M`?r+=`M`+n(a.x,a.y):a.type===`L`?r+=`L`+n(a.x,a.y):a.type===`C`?r+=`C`+n(a.x1,a.y1,a.x2,a.y2,a.x,a.y):a.type===`Q`?r+=`Q`+n(a.x1,a.y1,a.x,a.y):a.type===`Z`&&(r+=`Z`)}return r},Pz.prototype.toSVG=function(e){var t=`<path d="`;return t+=this.toPathData(e),t+=`"`,this.fill&&this.fill!==`black`&&(this.fill===null?t+=` fill="none"`:t+=` fill="`+this.fill+`"`),this.stroke&&(t+=` stroke="`+this.stroke+`" stroke-width="`+this.strokeWidth+`"`),t+=`/>`,t},Pz.prototype.toDOMElement=function(e){var t=this.toPathData(e),n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return n.setAttribute(`d`,t),n};function Fz(e){throw Error(e)}function Iz(e,t){e||Fz(t)}var K={fail:Fz,argument:Iz,assert:Iz},Lz=32768,Rz=2147483648,zz={},q={},J={};function Bz(e){return function(){return e}}q.BYTE=function(e){return K.argument(e>=0&&e<=255,`Byte value should be between 0 and 255.`),[e]},J.BYTE=Bz(1),q.CHAR=function(e){return[e.charCodeAt(0)]},J.CHAR=Bz(1),q.CHARARRAY=function(e){e===void 0&&(e=``,console.warn(`Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.`));for(var t=[],n=0;n<e.length;n+=1)t[n]=e.charCodeAt(n);return t},J.CHARARRAY=function(e){return e===void 0?0:e.length},q.USHORT=function(e){return[e>>8&255,e&255]},J.USHORT=Bz(2),q.SHORT=function(e){return e>=Lz&&(e=-(2*Lz-e)),[e>>8&255,e&255]},J.SHORT=Bz(2),q.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]},J.UINT24=Bz(3),q.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]},J.ULONG=Bz(4),q.LONG=function(e){return e>=Rz&&(e=-(2*Rz-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONG=Bz(4),q.FIXED=q.ULONG,J.FIXED=J.ULONG,q.FWORD=q.SHORT,J.FWORD=J.SHORT,q.UFWORD=q.USHORT,J.UFWORD=J.USHORT,q.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONGDATETIME=Bz(8),q.TAG=function(e){return K.argument(e.length===4,`Tag should be exactly 4 ASCII characters.`),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},J.TAG=Bz(4),q.Card8=q.BYTE,J.Card8=J.BYTE,q.Card16=q.USHORT,J.Card16=J.USHORT,q.OffSize=q.BYTE,J.OffSize=J.BYTE,q.SID=q.USHORT,J.SID=J.USHORT,q.NUMBER=function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?(e-=108,[(e>>8)+247,e&255]):e>=-1131&&e<=-108?(e=-e-108,[(e>>8)+251,e&255]):e>=-32768&&e<=32767?q.NUMBER16(e):q.NUMBER32(e)},J.NUMBER=function(e){return q.NUMBER(e).length},q.NUMBER16=function(e){return[28,e>>8&255,e&255]},J.NUMBER16=Bz(3),q.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]},J.NUMBER32=Bz(5),q.REAL=function(e){var t=e.toString(),n=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(n){var r=parseFloat(`1e`+((n[2]?+n[2]:0)+n[1].length));t=(Math.round(e*r)/r).toString()}for(var i=``,a=0,o=t.length;a<o;a+=1){var s=t[a];s===`e`?i+=t[++a]===`-`?`c`:`b`:s===`.`?i+=`a`:s===`-`?i+=`e`:i+=s}i+=i.length&1?`f`:`ff`;for(var c=[30],l=0,u=i.length;l<u;l+=2)c.push(parseInt(i.substr(l,2),16));return c},J.REAL=function(e){return q.REAL(e).length},q.NAME=q.CHARARRAY,J.NAME=J.CHARARRAY,q.STRING=q.CHARARRAY,J.STRING=J.CHARARRAY,zz.UTF8=function(e,t,n){for(var r=[],i=n,a=0;a<i;a++,t+=1)r[a]=e.getUint8(t);return String.fromCharCode.apply(null,r)},zz.UTF16=function(e,t,n){for(var r=[],i=n/2,a=0;a<i;a++,t+=2)r[a]=e.getUint16(t);return String.fromCharCode.apply(null,r)},q.UTF16=function(e){for(var t=[],n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t[t.length]=r>>8&255,t[t.length]=r&255}return t},J.UTF16=function(e){return e.length*2};var Vz={"x-mac-croatian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ\xA0ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ`,"x-mac-cyrillic":`АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю`,"x-mac-gaelic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»…\xA0ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ`,"x-mac-greek":`Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»…\xA0ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­`,"x-mac-icelandic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-inuit":`ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ…\xA0ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł`,"x-mac-ce":`ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»…\xA0ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ`,macintosh:`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-romanian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-turkish":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ`};zz.MACSTRING=function(e,t,n,r){var i=Vz[r];if(i!==void 0){for(var a=``,o=0;o<n;o++){var s=e.getUint8(t+o);s<=127?a+=String.fromCharCode(s):a+=i[s&127]}return a}};var Hz=typeof WeakMap==`function`&&new WeakMap,Uz,Wz=function(e){if(!Uz)for(var t in Uz={},Vz)Uz[t]=new String(t);var n=Uz[e];if(n!==void 0){if(Hz){var r=Hz.get(n);if(r!==void 0)return r}var i=Vz[e];if(i!==void 0){for(var a={},o=0;o<i.length;o++)a[i.charCodeAt(o)]=o+128;return Hz&&Hz.set(n,a),a}}};q.MACSTRING=function(e,t){var n=Wz(t);if(n!==void 0){for(var r=[],i=0;i<e.length;i++){var a=e.charCodeAt(i);if(a>=128&&(a=n[a],a===void 0))return;r[i]=a}return r}},J.MACSTRING=function(e,t){var n=q.MACSTRING(e,t);return n===void 0?0:n.length};function Gz(e){return e>=-128&&e<=127}function Kz(e,t,n){for(var r=0,i=e.length;t<i&&r<64&&e[t]===0;)++t,++r;return n.push(128|r-1),t}function qz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(!Gz(o)||o===0&&a+1<i&&e[a+1]===0)break;++a,++r}n.push(r-1);for(var s=t;s<a;++s)n.push(e[s]+256&255);return a}function Jz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(o===0||Gz(o)&&a+1<i&&Gz(e[a+1]))break;++a,++r}n.push(64|r-1);for(var s=t;s<a;++s){var c=e[s];n.push(c+65536>>8&255,c+256&255)}return a}q.VARDELTAS=function(e){for(var t=0,n=[];t<e.length;){var r=e[t];t=r===0?Kz(e,t,n):r>=-128&&r<=127?qz(e,t,n):Jz(e,t,n)}return n},q.INDEX=function(e){for(var t=1,n=[t],r=[],i=0;i<e.length;i+=1){var a=q.OBJECT(e[i]);Array.prototype.push.apply(r,a),t+=a.length,n.push(t)}if(r.length===0)return[0,0];for(var o=[],s=1+Math.floor(Math.log(t)/Math.log(2))/8|0,c=[void 0,q.BYTE,q.USHORT,q.UINT24,q.ULONG][s],l=0;l<n.length;l+=1){var u=c(n[l]);Array.prototype.push.apply(o,u)}return Array.prototype.concat(q.Card16(e.length),q.OffSize(s),o,r)},J.INDEX=function(e){return q.INDEX(e).length},q.DICT=function(e){for(var t=[],n=Object.keys(e),r=n.length,i=0;i<r;i+=1){var a=parseInt(n[i],0),o=e[a];t=t.concat(q.OPERAND(o.value,o.type)),t=t.concat(q.OPERATOR(a))}return t},J.DICT=function(e){return q.DICT(e).length},q.OPERATOR=function(e){return e<1200?[e]:[12,e-1200]},q.OPERAND=function(e,t){var n=[];if(Array.isArray(t))for(var r=0;r<t.length;r+=1)K.argument(e.length===t.length,`Not enough arguments given for type`+t),n=n.concat(q.OPERAND(e[r],t[r]));else if(t===`SID`)n=n.concat(q.NUMBER(e));else if(t===`offset`)n=n.concat(q.NUMBER32(e));else if(t===`number`)n=n.concat(q.NUMBER(e));else if(t===`real`)n=n.concat(q.REAL(e));else throw Error(`Unknown operand type `+t);return n},q.OP=q.BYTE,J.OP=J.BYTE;var Yz=typeof WeakMap==`function`&&new WeakMap;q.CHARSTRING=function(e){if(Yz){var t=Yz.get(e);if(t!==void 0)return t}for(var n=[],r=e.length,i=0;i<r;i+=1){var a=e[i];n=n.concat(q[a.type](a.value))}return Yz&&Yz.set(e,n),n},J.CHARSTRING=function(e){return q.CHARSTRING(e).length},q.OBJECT=function(e){var t=q[e.type];return K.argument(t!==void 0,`No encoding function for type `+e.type),t(e.value)},J.OBJECT=function(e){var t=J[e.type];return K.argument(t!==void 0,`No sizeOf function for type `+e.type),t(e.value)},q.TABLE=function(e){for(var t=[],n=e.fields.length,r=[],i=[],a=0;a<n;a+=1){var o=e.fields[a],s=q[o.type];K.argument(s!==void 0,`No encoding function for field type `+o.type+` (`+o.name+`)`);var c=e[o.name];c===void 0&&(c=o.value);var l=s(c);o.type===`TABLE`?(i.push(t.length),t=t.concat([0,0]),r.push(l)):t=t.concat(l)}for(var u=0;u<r.length;u+=1){var d=i[u],f=t.length;K.argument(f<65536,`Table `+e.tableName+` too big.`),t[d]=f>>8,t[d+1]=f&255,t=t.concat(r[u])}return t},J.TABLE=function(e){for(var t=0,n=e.fields.length,r=0;r<n;r+=1){var i=e.fields[r],a=J[i.type];K.argument(a!==void 0,`No sizeOf function for field type `+i.type+` (`+i.name+`)`);var o=e[i.name];o===void 0&&(o=i.value),t+=a(o),i.type===`TABLE`&&(t+=2)}return t},q.RECORD=q.TABLE,J.RECORD=J.TABLE,q.LITERAL=function(e){return e},J.LITERAL=function(e){return e.length};function Xz(e,t,n){if(t.length&&(t[0].name!==`coverageFormat`||t[0].value===1))for(var r=0;r<t.length;r+=1){var i=t[r];this[i.name]=i.value}if(this.tableName=e,this.fields=t,n)for(var a=Object.keys(n),o=0;o<a.length;o+=1){var s=a[o],c=n[s];this[s]!==void 0&&(this[s]=c)}}Xz.prototype.encode=function(){return q.TABLE(this)},Xz.prototype.sizeOf=function(){return J.TABLE(this)};function Zz(e,t,n){n===void 0&&(n=t.length);var r=Array(t.length+1);r[0]={name:e+`Count`,type:`USHORT`,value:n};for(var i=0;i<t.length;i++)r[i+1]={name:e+i,type:`USHORT`,value:t[i]};return r}function Qz(e,t,n){var r=t.length,i=Array(r+1);i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i[a+1]={name:e+a,type:`TABLE`,value:n(t[a],a)};return i}function $z(e,t,n){var r=t.length,i=[];i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i=i.concat(n(t[a],a));return i}function eB(e){e.format===1?Xz.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:1}].concat(Zz(`glyph`,e.glyphs))):e.format===2?Xz.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:2}].concat($z(`rangeRecord`,e.ranges,function(e){return[{name:`startGlyphID`,type:`USHORT`,value:e.start},{name:`endGlyphID`,type:`USHORT`,value:e.end},{name:`startCoverageIndex`,type:`USHORT`,value:e.index}]}))):K.assert(!1,`Coverage format must be 1 or 2.`)}eB.prototype=Object.create(Xz.prototype),eB.prototype.constructor=eB;function tB(e){Xz.call(this,`scriptListTable`,$z(`scriptRecord`,e,function(e,t){var n=e.script,r=n.defaultLangSys;return K.assert(!!r,`Unable to write GSUB: script `+e.tag+` has no default language system.`),[{name:`scriptTag`+t,type:`TAG`,value:e.tag},{name:`script`+t,type:`TABLE`,value:new Xz(`scriptTable`,[{name:`defaultLangSys`,type:`TABLE`,value:new Xz(`defaultLangSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:r.reqFeatureIndex}].concat(Zz(`featureIndex`,r.featureIndexes)))}].concat($z(`langSys`,n.langSysRecords,function(e,t){var n=e.langSys;return[{name:`langSysTag`+t,type:`TAG`,value:e.tag},{name:`langSys`+t,type:`TABLE`,value:new Xz(`langSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:n.reqFeatureIndex}].concat(Zz(`featureIndex`,n.featureIndexes)))}]})))}]}))}tB.prototype=Object.create(Xz.prototype),tB.prototype.constructor=tB;function nB(e){Xz.call(this,`featureListTable`,$z(`featureRecord`,e,function(e,t){var n=e.feature;return[{name:`featureTag`+t,type:`TAG`,value:e.tag},{name:`feature`+t,type:`TABLE`,value:new Xz(`featureTable`,[{name:`featureParams`,type:`USHORT`,value:n.featureParams}].concat(Zz(`lookupListIndex`,n.lookupListIndexes)))}]}))}nB.prototype=Object.create(Xz.prototype),nB.prototype.constructor=nB;function rB(e,t){Xz.call(this,`lookupListTable`,Qz(`lookup`,e,function(e){var n=t[e.lookupType];return K.assert(!!n,`Unable to write GSUB lookup type `+e.lookupType+` tables.`),new Xz(`lookupTable`,[{name:`lookupType`,type:`USHORT`,value:e.lookupType},{name:`lookupFlag`,type:`USHORT`,value:e.lookupFlag}].concat(Qz(`subtable`,e.subtables,n)))}))}rB.prototype=Object.create(Xz.prototype),rB.prototype.constructor=rB;var Y={Table:Xz,Record:Xz,Coverage:eB,ScriptList:tB,FeatureList:nB,LookupList:rB,ushortList:Zz,tableList:Qz,recordList:$z};function iB(e,t){return e.getUint8(t)}function aB(e,t){return e.getUint16(t,!1)}function oB(e,t){return e.getInt16(t,!1)}function sB(e,t){return e.getUint32(t,!1)}function cB(e,t){return e.getInt16(t,!1)+e.getUint16(t+2,!1)/65535}function lB(e,t){for(var n=``,r=t;r<t+4;r+=1)n+=String.fromCharCode(e.getInt8(r));return n}function uB(e,t,n){for(var r=0,i=0;i<n;i+=1)r<<=8,r+=e.getUint8(t+i);return r}function dB(e,t,n){for(var r=[],i=t;i<n;i+=1)r.push(e.getUint8(i));return r}function fB(e){for(var t=``,n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return t}var pB={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function X(e,t){this.data=e,this.offset=t,this.relativeOffset=0}X.prototype.parseByte=function(){var e=this.data.getUint8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseChar=function(){var e=this.data.getInt8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseCard8=X.prototype.parseByte,X.prototype.parseUShort=function(){var e=this.data.getUint16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseCard16=X.prototype.parseUShort,X.prototype.parseSID=X.prototype.parseUShort,X.prototype.parseOffset16=X.prototype.parseUShort,X.prototype.parseShort=function(){var e=this.data.getInt16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseF2Dot14=function(){var e=this.data.getInt16(this.offset+this.relativeOffset)/16384;return this.relativeOffset+=2,e},X.prototype.parseULong=function(){var e=sB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseOffset32=X.prototype.parseULong,X.prototype.parseFixed=function(){var e=cB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseString=function(e){var t=this.data,n=this.offset+this.relativeOffset,r=``;this.relativeOffset+=e;for(var i=0;i<e;i++)r+=String.fromCharCode(t.getUint8(n+i));return r},X.prototype.parseTag=function(){return this.parseString(4)},X.prototype.parseLongDateTime=function(){var e=sB(this.data,this.offset+this.relativeOffset+4);return e-=2082844800,this.relativeOffset+=8,e},X.prototype.parseVersion=function(e){var t=aB(this.data,this.offset+this.relativeOffset),n=aB(this.data,this.offset+this.relativeOffset+2);return this.relativeOffset+=4,e===void 0&&(e=4096),t+n/e/10},X.prototype.skip=function(e,t){t===void 0&&(t=1),this.relativeOffset+=pB[e]*t},X.prototype.parseULongList=function(e){e===void 0&&(e=this.parseULong());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint32(r),r+=4;return this.relativeOffset+=e*4,t},X.prototype.parseOffset16List=X.prototype.parseUShortList=function(e){e===void 0&&(e=this.parseUShort());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseShortList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getInt16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseByteList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint8(r++);return this.relativeOffset+=e,t},X.prototype.parseList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseRecordList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseRecordList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseStruct=function(e){if(typeof e==`function`)return e.call(this);for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var i=t[r];n[i]=e[i].call(this)}return n},X.prototype.parseValueRecord=function(e){if(e===void 0&&(e=this.parseUShort()),e!==0){var t={};return e&1&&(t.xPlacement=this.parseShort()),e&2&&(t.yPlacement=this.parseShort()),e&4&&(t.xAdvance=this.parseShort()),e&8&&(t.yAdvance=this.parseShort()),e&16&&(t.xPlaDevice=void 0,this.parseShort()),e&32&&(t.yPlaDevice=void 0,this.parseShort()),e&64&&(t.xAdvDevice=void 0,this.parseShort()),e&128&&(t.yAdvDevice=void 0,this.parseShort()),t}},X.prototype.parseValueRecordList=function(){for(var e=this.parseUShort(),t=this.parseUShort(),n=Array(t),r=0;r<t;r++)n[r]=this.parseValueRecord(e);return n},X.prototype.parsePointer=function(e){var t=this.parseOffset16();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parsePointer32=function(e){var t=this.parseOffset32();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parseListOfLists=function(e){for(var t=this.parseOffset16List(),n=t.length,r=this.relativeOffset,i=Array(n),a=0;a<n;a++){var o=t[a];if(o===0){i[a]=void 0;continue}if(this.relativeOffset=o,e){for(var s=this.parseOffset16List(),c=Array(s.length),l=0;l<s.length;l++)this.relativeOffset=o+s[l],c[l]=e.call(this);i[a]=c}else i[a]=this.parseUShortList()}return this.relativeOffset=r,i},X.prototype.parseCoverage=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort(),n=this.parseUShort();if(t===1)return{format:1,glyphs:this.parseUShortList(n)};if(t===2){for(var r=Array(n),i=0;i<n;i++)r[i]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()};return{format:2,ranges:r}}throw Error(`0x`+e.toString(16)+`: Coverage format must be 1 or 2.`)},X.prototype.parseClassDef=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()};if(t===2)return{format:2,ranges:this.parseRecordList({start:X.uShort,end:X.uShort,classId:X.uShort})};throw Error(`0x`+e.toString(16)+`: ClassDef format must be 1 or 2.`)},X.list=function(e,t){return function(){return this.parseList(e,t)}},X.list32=function(e,t){return function(){return this.parseList32(e,t)}},X.recordList=function(e,t){return function(){return this.parseRecordList(e,t)}},X.recordList32=function(e,t){return function(){return this.parseRecordList32(e,t)}},X.pointer=function(e){return function(){return this.parsePointer(e)}},X.pointer32=function(e){return function(){return this.parsePointer32(e)}},X.tag=X.prototype.parseTag,X.byte=X.prototype.parseByte,X.uShort=X.offset16=X.prototype.parseUShort,X.uShortList=X.prototype.parseUShortList,X.uLong=X.offset32=X.prototype.parseULong,X.uLongList=X.prototype.parseULongList,X.struct=X.prototype.parseStruct,X.coverage=X.prototype.parseCoverage,X.classDef=X.prototype.parseClassDef;var mB={reserved:X.uShort,reqFeatureIndex:X.uShort,featureIndexes:X.uShortList};X.prototype.parseScriptList=function(){return this.parsePointer(X.recordList({tag:X.tag,script:X.pointer({defaultLangSys:X.pointer(mB),langSysRecords:X.recordList({tag:X.tag,langSys:X.pointer(mB)})})}))||[]},X.prototype.parseFeatureList=function(){return this.parsePointer(X.recordList({tag:X.tag,feature:X.pointer({featureParams:X.offset16,lookupListIndexes:X.uShortList})}))||[]},X.prototype.parseLookupList=function(e){return this.parsePointer(X.list(X.pointer(function(){var t=this.parseUShort();K.argument(1<=t&&t<=9,`GPOS/GSUB lookup type `+t+` unknown.`);var n=this.parseUShort(),r=n&16;return{lookupType:t,lookupFlag:n,subtables:this.parseList(X.pointer(e[t])),markFilteringSet:r?this.parseUShort():void 0}})))||[]},X.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var e=this.parseUShort(),t=this.parseUShort();return K.argument(e===1&&t<1,`GPOS/GSUB feature variations table unknown.`),this.parseRecordList32({conditionSetOffset:X.offset32,featureTableSubstitutionOffset:X.offset32})})||[]};var Z={getByte:iB,getCard8:iB,getUShort:aB,getCard16:aB,getShort:oB,getULong:sB,getFixed:cB,getTag:lB,getOffset:uB,getBytes:dB,bytesToString:fB,Parser:X};function hB(e,t){t.parseUShort(),e.length=t.parseULong(),e.language=t.parseULong();var n;e.groupCount=n=t.parseULong(),e.glyphIndexMap={};for(var r=0;r<n;r+=1)for(var i=t.parseULong(),a=t.parseULong(),o=t.parseULong(),s=i;s<=a;s+=1)e.glyphIndexMap[s]=o,o++}function gB(e,t,n,r,i){e.length=t.parseUShort(),e.language=t.parseUShort();var a;e.segCount=a=t.parseUShort()>>1,t.skip(`uShort`,3),e.glyphIndexMap={};for(var o=new Z.Parser(n,r+i+14),s=new Z.Parser(n,r+i+16+a*2),c=new Z.Parser(n,r+i+16+a*4),l=new Z.Parser(n,r+i+16+a*6),u=r+i+16+a*8,d=0;d<a-1;d+=1)for(var f=void 0,p=o.parseUShort(),m=s.parseUShort(),h=c.parseShort(),g=l.parseUShort(),_=m;_<=p;_+=1)g===0?f=_+h&65535:(u=l.offset+l.relativeOffset-2,u+=g,u+=(_-m)*2,f=Z.getUShort(n,u),f!==0&&(f=f+h&65535)),e.glyphIndexMap[_]=f}function _B(e,t){var n={};n.version=Z.getUShort(e,t),K.argument(n.version===0,`cmap table version should be 0.`),n.numTables=Z.getUShort(e,t+2);for(var r=-1,i=n.numTables-1;i>=0;--i){var a=Z.getUShort(e,t+4+i*8),o=Z.getUShort(e,t+4+i*8+2);if(a===3&&(o===0||o===1||o===10)||a===0&&(o===0||o===1||o===2||o===3||o===4)){r=Z.getULong(e,t+4+i*8+4);break}}if(r===-1)throw Error(`No valid cmap sub-tables found.`);var s=new Z.Parser(e,t+r);if(n.format=s.parseUShort(),n.format===12)hB(n,s);else if(n.format===4)gB(n,s,e,t,r);else throw Error(`Only format 4 and 12 cmap tables are supported (found format `+n.format+`).`);return n}function vB(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function yB(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function bB(e){var t=!0,n;for(n=e.length-1;n>0;--n)if(e.get(n).unicode>65535){console.log(`Adding CMAP format 12 (needed!)`),t=!1;break}var r=[{name:`version`,type:`USHORT`,value:0},{name:`numTables`,type:`USHORT`,value:t?1:2},{name:`platformID`,type:`USHORT`,value:3},{name:`encodingID`,type:`USHORT`,value:1},{name:`offset`,type:`ULONG`,value:t?12:20}];t||(r=r.concat([{name:`cmap12PlatformID`,type:`USHORT`,value:3},{name:`cmap12EncodingID`,type:`USHORT`,value:10},{name:`cmap12Offset`,type:`ULONG`,value:0}])),r=r.concat([{name:`format`,type:`USHORT`,value:4},{name:`cmap4Length`,type:`USHORT`,value:0},{name:`language`,type:`USHORT`,value:0},{name:`segCountX2`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);var i=new Y.Table(`cmap`,r);for(i.segments=[],n=0;n<e.length;n+=1){for(var a=e.get(n),o=0;o<a.unicodes.length;o+=1)vB(i,a.unicodes[o],n);i.segments=i.segments.sort(function(e,t){return e.start-t.start})}yB(i);var s=i.segments.length,c=0,l=[],u=[],d=[],f=[],p=[],m=[];for(n=0;n<s;n+=1){var h=i.segments[n];h.end<=65535&&h.start<=65535?(l=l.concat({name:`end_`+n,type:`USHORT`,value:h.end}),u=u.concat({name:`start_`+n,type:`USHORT`,value:h.start}),d=d.concat({name:`idDelta_`+n,type:`SHORT`,value:h.delta}),f=f.concat({name:`idRangeOffset_`+n,type:`USHORT`,value:h.offset}),h.glyphId!==void 0&&(p=p.concat({name:`glyph_`+n,type:`USHORT`,value:h.glyphId}))):c+=1,!t&&h.glyphIndex!==void 0&&(m=m.concat({name:`cmap12Start_`+n,type:`ULONG`,value:h.start}),m=m.concat({name:`cmap12End_`+n,type:`ULONG`,value:h.end}),m=m.concat({name:`cmap12Glyph_`+n,type:`ULONG`,value:h.glyphIndex}))}if(i.segCountX2=(s-c)*2,i.searchRange=2**Math.floor(Math.log(s-c)/Math.log(2))*2,i.entrySelector=Math.log(i.searchRange/2)/Math.log(2),i.rangeShift=i.segCountX2-i.searchRange,i.fields=i.fields.concat(l),i.fields.push({name:`reservedPad`,type:`USHORT`,value:0}),i.fields=i.fields.concat(u),i.fields=i.fields.concat(d),i.fields=i.fields.concat(f),i.fields=i.fields.concat(p),i.cmap4Length=14+l.length*2+2+u.length*2+d.length*2+f.length*2+p.length*2,!t){var g=16+m.length*4;i.cmap12Offset=20+i.cmap4Length,i.fields=i.fields.concat([{name:`cmap12Format`,type:`USHORT`,value:12},{name:`cmap12Reserved`,type:`USHORT`,value:0},{name:`cmap12Length`,type:`ULONG`,value:g},{name:`cmap12Language`,type:`ULONG`,value:0},{name:`cmap12nGroups`,type:`ULONG`,value:m.length/3}]),i.fields=i.fields.concat(m)}return i}var xB={parse:_B,make:bB},SB=`.notdef,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quoteright,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,quoteleft,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,exclamdown,cent,sterling,fraction,yen,florin,section,currency,quotesingle,quotedblleft,guillemotleft,guilsinglleft,guilsinglright,fi,fl,endash,dagger,daggerdbl,periodcentered,paragraph,bullet,quotesinglbase,quotedblbase,quotedblright,guillemotright,ellipsis,perthousand,questiondown,grave,acute,circumflex,tilde,macron,breve,dotaccent,dieresis,ring,cedilla,hungarumlaut,ogonek,caron,emdash,AE,ordfeminine,Lslash,Oslash,OE,ordmasculine,ae,dotlessi,lslash,oslash,oe,germandbls,onesuperior,logicalnot,mu,trademark,Eth,onehalf,plusminus,Thorn,onequarter,divide,brokenbar,degree,thorn,threequarters,twosuperior,registered,minus,eth,multiply,threesuperior,copyright,Aacute,Acircumflex,Adieresis,Agrave,Aring,Atilde,Ccedilla,Eacute,Ecircumflex,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Ntilde,Oacute,Ocircumflex,Odieresis,Ograve,Otilde,Scaron,Uacute,Ucircumflex,Udieresis,Ugrave,Yacute,Ydieresis,Zcaron,aacute,acircumflex,adieresis,agrave,aring,atilde,ccedilla,eacute,ecircumflex,edieresis,egrave,iacute,icircumflex,idieresis,igrave,ntilde,oacute,ocircumflex,odieresis,ograve,otilde,scaron,uacute,ucircumflex,udieresis,ugrave,yacute,ydieresis,zcaron,exclamsmall,Hungarumlautsmall,dollaroldstyle,dollarsuperior,ampersandsmall,Acutesmall,parenleftsuperior,parenrightsuperior,266 ff,onedotenleader,zerooldstyle,oneoldstyle,twooldstyle,threeoldstyle,fouroldstyle,fiveoldstyle,sixoldstyle,sevenoldstyle,eightoldstyle,nineoldstyle,commasuperior,threequartersemdash,periodsuperior,questionsmall,asuperior,bsuperior,centsuperior,dsuperior,esuperior,isuperior,lsuperior,msuperior,nsuperior,osuperior,rsuperior,ssuperior,tsuperior,ff,ffi,ffl,parenleftinferior,parenrightinferior,Circumflexsmall,hyphensuperior,Gravesmall,Asmall,Bsmall,Csmall,Dsmall,Esmall,Fsmall,Gsmall,Hsmall,Ismall,Jsmall,Ksmall,Lsmall,Msmall,Nsmall,Osmall,Psmall,Qsmall,Rsmall,Ssmall,Tsmall,Usmall,Vsmall,Wsmall,Xsmall,Ysmall,Zsmall,colonmonetary,onefitted,rupiah,Tildesmall,exclamdownsmall,centoldstyle,Lslashsmall,Scaronsmall,Zcaronsmall,Dieresissmall,Brevesmall,Caronsmall,Dotaccentsmall,Macronsmall,figuredash,hypheninferior,Ogoneksmall,Ringsmall,Cedillasmall,questiondownsmall,oneeighth,threeeighths,fiveeighths,seveneighths,onethird,twothirds,zerosuperior,foursuperior,fivesuperior,sixsuperior,sevensuperior,eightsuperior,ninesuperior,zeroinferior,oneinferior,twoinferior,threeinferior,fourinferior,fiveinferior,sixinferior,seveninferior,eightinferior,nineinferior,centinferior,dollarinferior,periodinferior,commainferior,Agravesmall,Aacutesmall,Acircumflexsmall,Atildesmall,Adieresissmall,Aringsmall,AEsmall,Ccedillasmall,Egravesmall,Eacutesmall,Ecircumflexsmall,Edieresissmall,Igravesmall,Iacutesmall,Icircumflexsmall,Idieresissmall,Ethsmall,Ntildesmall,Ogravesmall,Oacutesmall,Ocircumflexsmall,Otildesmall,Odieresissmall,OEsmall,Oslashsmall,Ugravesmall,Uacutesmall,Ucircumflexsmall,Udieresissmall,Yacutesmall,Thornsmall,Ydieresissmall,001.000,001.001,001.002,001.003,Black,Bold,Book,Light,Medium,Regular,Roman,Semibold`.split(`,`),CB=`................................space.exclam.quotedbl.numbersign.dollar.percent.ampersand.quoteright.parenleft.parenright.asterisk.plus.comma.hyphen.period.slash.zero.one.two.three.four.five.six.seven.eight.nine.colon.semicolon.less.equal.greater.question.at.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.bracketleft.backslash.bracketright.asciicircum.underscore.quoteleft.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.braceleft.bar.braceright.asciitilde...................................exclamdown.cent.sterling.fraction.yen.florin.section.currency.quotesingle.quotedblleft.guillemotleft.guilsinglleft.guilsinglright.fi.fl..endash.dagger.daggerdbl.periodcentered..paragraph.bullet.quotesinglbase.quotedblbase.quotedblright.guillemotright.ellipsis.perthousand..questiondown..grave.acute.circumflex.tilde.macron.breve.dotaccent.dieresis..ring.cedilla..hungarumlaut.ogonek.caron.emdash.................AE..ordfeminine.....Lslash.Oslash.OE.ordmasculine......ae....dotlessi...lslash.oslash.oe.germandbls`.split(`.`),wB=`................................space.exclamsmall.Hungarumlautsmall..dollaroldstyle.dollarsuperior.ampersandsmall.Acutesmall.parenleftsuperior.parenrightsuperior.twodotenleader.onedotenleader.comma.hyphen.period.fraction.zerooldstyle.oneoldstyle.twooldstyle.threeoldstyle.fouroldstyle.fiveoldstyle.sixoldstyle.sevenoldstyle.eightoldstyle.nineoldstyle.colon.semicolon.commasuperior.threequartersemdash.periodsuperior.questionsmall..asuperior.bsuperior.centsuperior.dsuperior.esuperior...isuperior...lsuperior.msuperior.nsuperior.osuperior...rsuperior.ssuperior.tsuperior..ff.fi.fl.ffi.ffl.parenleftinferior..parenrightinferior.Circumflexsmall.hyphensuperior.Gravesmall.Asmall.Bsmall.Csmall.Dsmall.Esmall.Fsmall.Gsmall.Hsmall.Ismall.Jsmall.Ksmall.Lsmall.Msmall.Nsmall.Osmall.Psmall.Qsmall.Rsmall.Ssmall.Tsmall.Usmall.Vsmall.Wsmall.Xsmall.Ysmall.Zsmall.colonmonetary.onefitted.rupiah.Tildesmall...................................exclamdownsmall.centoldstyle.Lslashsmall...Scaronsmall.Zcaronsmall.Dieresissmall.Brevesmall.Caronsmall..Dotaccentsmall...Macronsmall...figuredash.hypheninferior...Ogoneksmall.Ringsmall.Cedillasmall....onequarter.onehalf.threequarters.questiondownsmall.oneeighth.threeeighths.fiveeighths.seveneighths.onethird.twothirds...zerosuperior.onesuperior.twosuperior.threesuperior.foursuperior.fivesuperior.sixsuperior.sevensuperior.eightsuperior.ninesuperior.zeroinferior.oneinferior.twoinferior.threeinferior.fourinferior.fiveinferior.sixinferior.seveninferior.eightinferior.nineinferior.centinferior.dollarinferior.periodinferior.commainferior.Agravesmall.Aacutesmall.Acircumflexsmall.Atildesmall.Adieresissmall.Aringsmall.AEsmall.Ccedillasmall.Egravesmall.Eacutesmall.Ecircumflexsmall.Edieresissmall.Igravesmall.Iacutesmall.Icircumflexsmall.Idieresissmall.Ethsmall.Ntildesmall.Ogravesmall.Oacutesmall.Ocircumflexsmall.Otildesmall.Odieresissmall.OEsmall.Oslashsmall.Ugravesmall.Uacutesmall.Ucircumflexsmall.Udieresissmall.Yacutesmall.Thornsmall.Ydieresissmall`.split(`.`),TB=`.notdef,.null,nonmarkingreturn,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quotesingle,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,grave,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,Adieresis,Aring,Ccedilla,Eacute,Ntilde,Odieresis,Udieresis,aacute,agrave,acircumflex,adieresis,atilde,aring,ccedilla,eacute,egrave,ecircumflex,edieresis,iacute,igrave,icircumflex,idieresis,ntilde,oacute,ograve,ocircumflex,odieresis,otilde,uacute,ugrave,ucircumflex,udieresis,dagger,degree,cent,sterling,section,bullet,paragraph,germandbls,registered,copyright,trademark,acute,dieresis,notequal,AE,Oslash,infinity,plusminus,lessequal,greaterequal,yen,mu,partialdiff,summation,product,pi,integral,ordfeminine,ordmasculine,Omega,ae,oslash,questiondown,exclamdown,logicalnot,radical,florin,approxequal,Delta,guillemotleft,guillemotright,ellipsis,nonbreakingspace,Agrave,Atilde,Otilde,OE,oe,endash,emdash,quotedblleft,quotedblright,quoteleft,quoteright,divide,lozenge,ydieresis,Ydieresis,fraction,currency,guilsinglleft,guilsinglright,fi,fl,daggerdbl,periodcentered,quotesinglbase,quotedblbase,perthousand,Acircumflex,Ecircumflex,Aacute,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Oacute,Ocircumflex,apple,Ograve,Uacute,Ucircumflex,Ugrave,dotlessi,circumflex,tilde,macron,breve,dotaccent,ring,cedilla,hungarumlaut,ogonek,caron,Lslash,lslash,Scaron,scaron,Zcaron,zcaron,brokenbar,Eth,eth,Yacute,yacute,Thorn,thorn,minus,multiply,onesuperior,twosuperior,threesuperior,onehalf,onequarter,threequarters,franc,Gbreve,gbreve,Idotaccent,Scedilla,scedilla,Cacute,cacute,Ccaron,ccaron,dcroat`.split(`,`);function EB(e){this.font=e}EB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.font.glyphs;if(n){for(var r=0;r<n.length;r+=1)for(var i=n.get(r),a=0;a<i.unicodes.length;a+=1)if(i.unicodes[a]===t)return r}return null};function DB(e){this.cmap=e}DB.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function OB(e,t){this.encoding=e,this.charset=t}OB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.encoding[t];return this.charset.indexOf(n)};function kB(e){switch(e.version){case 1:this.names=TB.slice();break;case 2:this.names=Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++)e.glyphNameIndex[t]<TB.length?this.names[t]=TB[e.glyphNameIndex[t]]:this.names[t]=e.names[e.glyphNameIndex[t]-TB.length];break;case 2.5:this.names=Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++)this.names[n]=TB[n+e.glyphNameIndex[n]];break;case 3:this.names=[];break;default:this.names=[];break}}kB.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)},kB.prototype.glyphIndexToName=function(e){return this.names[e]};function AB(e){for(var t,n=e.tables.cmap.glyphIndexMap,r=Object.keys(n),i=0;i<r.length;i+=1){var a=r[i],o=n[a];t=e.glyphs.get(o),t.addUnicode(parseInt(a))}for(var s=0;s<e.glyphs.length;s+=1)t=e.glyphs.get(s),e.cffEncoding?e.isCIDFont?t.name=`gid`+s:t.name=e.cffEncoding.charset[s]:e.glyphNames.names&&(t.name=e.glyphNames.glyphIndexToName(s))}function jB(e){e._IndexToUnicodeMap={};for(var t=e.tables.cmap.glyphIndexMap,n=Object.keys(t),r=0;r<n.length;r+=1){var i=n[r],a=t[i];e._IndexToUnicodeMap[a]===void 0?e._IndexToUnicodeMap[a]={unicodes:[parseInt(i)]}:e._IndexToUnicodeMap[a].unicodes.push(parseInt(i))}}function MB(e,t){t.lowMemory?jB(e):AB(e)}function NB(e,t,n,r,i){e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke()}var PB={line:NB};function FB(e,t){var n=t||new Pz;return{configurable:!0,get:function(){return typeof n==`function`&&(n=n()),n},set:function(e){n=e}}}function IB(e){this.bindConstructorValues(e)}IB.prototype.bindConstructorValues=function(e){this.index=e.index||0,this.name=e.name||null,this.unicode=e.unicode||void 0,this.unicodes=e.unicodes||e.unicode!==void 0?[e.unicode]:[],`xMin`in e&&(this.xMin=e.xMin),`yMin`in e&&(this.yMin=e.yMin),`xMax`in e&&(this.xMax=e.xMax),`yMax`in e&&(this.yMax=e.yMax),`advanceWidth`in e&&(this.advanceWidth=e.advanceWidth),Object.defineProperty(this,"path",FB(this,e.path))},IB.prototype.addUnicode=function(e){this.unicodes.length===0&&(this.unicode=e),this.unicodes.push(e)},IB.prototype.getBoundingBox=function(){return this.path.getBoundingBox()},IB.prototype.getPath=function(e,t,n,r,i){e=e===void 0?0:e,t=t===void 0?0:t,n=n===void 0?72:n;var a,o;r||={};var s=r.xScale,c=r.yScale;if(r.hinting&&i&&i.hinting&&(o=this.path&&i.hinting.exec(this,n)),o)a=i.hinting.getCommands(o),e=Math.round(e),t=Math.round(t),s=c=1;else{a=this.path.commands;var l=1/(this.path.unitsPerEm||1e3)*n;s===void 0&&(s=l),c===void 0&&(c=l)}for(var u=new Pz,d=0;d<a.length;d+=1){var f=a[d];f.type===`M`?u.moveTo(e+f.x*s,t+-f.y*c):f.type===`L`?u.lineTo(e+f.x*s,t+-f.y*c):f.type===`Q`?u.quadraticCurveTo(e+f.x1*s,t+-f.y1*c,e+f.x*s,t+-f.y*c):f.type===`C`?u.curveTo(e+f.x1*s,t+-f.y1*c,e+f.x2*s,t+-f.y2*c,e+f.x*s,t+-f.y*c):f.type===`Z`&&u.closePath()}return u},IB.prototype.getContours=function(){if(this.points===void 0)return[];for(var e=[],t=[],n=0;n<this.points.length;n+=1){var r=this.points[n];t.push(r),r.lastPointOfContour&&(e.push(t),t=[])}return K.argument(t.length===0,`There are still points left in the current contour.`),e},IB.prototype.getMetrics=function(){for(var e=this.path.commands,t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];i.type!==`Z`&&(t.push(i.x),n.push(i.y)),(i.type===`Q`||i.type===`C`)&&(t.push(i.x1),n.push(i.y1)),i.type===`C`&&(t.push(i.x2),n.push(i.y2))}var a={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,t),yMax:Math.max.apply(null,n),leftSideBearing:this.leftSideBearing};return isFinite(a.xMin)||(a.xMin=0),isFinite(a.xMax)||(a.xMax=this.advanceWidth),isFinite(a.yMin)||(a.yMin=0),isFinite(a.yMax)||(a.yMax=0),a.rightSideBearing=this.advanceWidth-a.leftSideBearing-(a.xMax-a.xMin),a},IB.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)},IB.prototype.drawPoints=function(e,t,n,r){function i(t,n,r,i){e.beginPath();for(var a=0;a<t.length;a+=1)e.moveTo(n+t[a].x*i,r+t[a].y*i),e.arc(n+t[a].x*i,r+t[a].y*i,2,0,Math.PI*2,!1);e.closePath(),e.fill()}t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r;for(var a=1/this.path.unitsPerEm*r,o=[],s=[],c=this.path,l=0;l<c.commands.length;l+=1){var u=c.commands[l];u.x!==void 0&&o.push({x:u.x,y:-u.y}),u.x1!==void 0&&s.push({x:u.x1,y:-u.y1}),u.x2!==void 0&&s.push({x:u.x2,y:-u.y2})}e.fillStyle=`blue`,i(o,t,n,a),e.fillStyle=`red`,i(s,t,n,a)},IB.prototype.drawMetrics=function(e,t,n,r){var i;t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r,i=1/this.path.unitsPerEm*r,e.lineWidth=1,e.strokeStyle=`black`,PB.line(e,t,-1e4,t,1e4),PB.line(e,-1e4,n,1e4,n);var a=this.xMin||0,o=this.yMin||0,s=this.xMax||0,c=this.yMax||0,l=this.advanceWidth||0;e.strokeStyle=`blue`,PB.line(e,t+a*i,-1e4,t+a*i,1e4),PB.line(e,t+s*i,-1e4,t+s*i,1e4),PB.line(e,-1e4,n+-o*i,1e4,n+-o*i),PB.line(e,-1e4,n+-c*i,1e4,n+-c*i),e.strokeStyle=`green`,PB.line(e,t+l*i,-1e4,t+l*i,1e4)};function LB(e,t,n){Object.defineProperty(e,t,{get:function(){return e.path,e[n]},set:function(t){e[n]=t},enumerable:!0,configurable:!0})}function RB(e,t){if(this.font=e,this.glyphs={},Array.isArray(t))for(var n=0;n<t.length;n++){var r=t[n];r.path.unitsPerEm=e.unitsPerEm,this.glyphs[n]=r}this.length=t&&t.length||0}RB.prototype.get=function(e){if(this.glyphs[e]===void 0){this.font._push(e),typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());var t=this.glyphs[e],n=this.font._IndexToUnicodeMap[e];if(n)for(var r=0;r<n.unicodes.length;r++)t.addUnicode(n.unicodes[r]);this.font.cffEncoding?this.font.isCIDFont?t.name=`gid`+e:t.name=this.font.cffEncoding.charset[e]:this.font.glyphNames.names&&(t.name=this.font.glyphNames.glyphIndexToName(e)),this.glyphs[e].advanceWidth=this.font._hmtxTableData[e].advanceWidth,this.glyphs[e].leftSideBearing=this.font._hmtxTableData[e].leftSideBearing}else typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());return this.glyphs[e]},RB.prototype.push=function(e,t){this.glyphs[e]=t,this.length++};function zB(e,t){return new IB({index:t,font:e})}function BB(e,t,n,r,i,a){return function(){var o=new IB({index:t,font:e});return o.path=function(){n(o,r,i);var t=a(e.glyphs,o);return t.unitsPerEm=e.unitsPerEm,t},LB(o,`xMin`,`_xMin`),LB(o,`xMax`,`_xMax`),LB(o,`yMin`,`_yMin`),LB(o,`yMax`,`_yMax`),o}}function VB(e,t,n,r){return function(){var i=new IB({index:t,font:e});return i.path=function(){var t=n(e,i,r);return t.unitsPerEm=e.unitsPerEm,t},i}}var HB={GlyphSet:RB,glyphLoader:zB,ttfGlyphLoader:BB,cffGlyphLoader:VB};function UB(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n+=1)if(!UB(e[n],t[n]))return!1;return!0}else return!1}function WB(e){return e.length<1240?107:e.length<33900?1131:32768}function GB(e,t,n){var r=[],i=[],a=Z.getCard16(e,t),o,s;if(a!==0){var c=Z.getByte(e,t+2);o=t+(a+1)*c+2;for(var l=t+3,u=0;u<a+1;u+=1)r.push(Z.getOffset(e,l,c)),l+=c;s=o+r[a]}else s=t+2;for(var d=0;d<r.length-1;d+=1){var f=Z.getBytes(e,o+r[d],o+r[d+1]);n&&(f=n(f)),i.push(f)}return{objects:i,startOffset:t,endOffset:s}}function KB(e,t){var n=[],r=Z.getCard16(e,t),i,a;if(r!==0){var o=Z.getByte(e,t+2);i=t+(r+1)*o+2;for(var s=t+3,c=0;c<r+1;c+=1)n.push(Z.getOffset(e,s,o)),s+=o;a=i+n[r]}else a=t+2;return{offsets:n,startOffset:t,endOffset:a}}function qB(e,t,n,r,i){var a=Z.getCard16(n,r),o=0;if(a!==0){var s=Z.getByte(n,r+2);o=r+(a+1)*s+2}var c=Z.getBytes(n,o+t[e],o+t[e+1]);return i&&(c=i(c)),c}function JB(e){for(var t=``,n=15,r=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`.`,`E`,`E-`,null,`-`];;){var i=e.parseByte(),a=i>>4,o=i&15;if(a===n||(t+=r[a],o===n))break;t+=r[o]}return parseFloat(t)}function YB(e,t){var n,r,i,a;if(t===28)return n=e.parseByte(),r=e.parseByte(),n<<8|r;if(t===29)return n=e.parseByte(),r=e.parseByte(),i=e.parseByte(),a=e.parseByte(),n<<24|r<<16|i<<8|a;if(t===30)return JB(e);if(t>=32&&t<=246)return t-139;if(t>=247&&t<=250)return n=e.parseByte(),(t-247)*256+n+108;if(t>=251&&t<=254)return n=e.parseByte(),-(t-251)*256-n-108;throw Error(`Invalid b0 `+t)}function XB(e){for(var t={},n=0;n<e.length;n+=1){var r=e[n][0],i=e[n][1],a=void 0;if(a=i.length===1?i[0]:i,t.hasOwnProperty(r)&&!isNaN(t[r]))throw Error(`Object `+t+` already has key `+r);t[r]=a}return t}function ZB(e,t,n){t=t===void 0?0:t;var r=new Z.Parser(e,t),i=[],a=[];for(n=n===void 0?e.length:n;r.relativeOffset<n;){var o=r.parseByte();o<=21?(o===12&&(o=1200+r.parseByte()),i.push([o,a]),a=[]):a.push(YB(r,o))}return XB(i)}function QB(e,t){return t=t<=390?SB[t]:e[t-391],t}function $B(e,t,n){for(var r={},i,a=0;a<t.length;a+=1){var o=t[a];if(Array.isArray(o.type)){var s=[];s.length=o.type.length;for(var c=0;c<o.type.length;c++)i=e[o.op]===void 0?void 0:e[o.op][c],i===void 0&&(i=o.value!==void 0&&o.value[c]!==void 0?o.value[c]:null),o.type[c]===`SID`&&(i=QB(n,i)),s[c]=i;r[o.name]=s}else i=e[o.op],i===void 0&&(i=o.value===void 0?null:o.value),o.type===`SID`&&(i=QB(n,i)),r[o.name]=i}return r}function eV(e,t){var n={};return n.formatMajor=Z.getCard8(e,t),n.formatMinor=Z.getCard8(e,t+1),n.size=Z.getCard8(e,t+2),n.offsetSize=Z.getCard8(e,t+3),n.startOffset=t,n.endOffset=t+4,n}var tV=[{name:`version`,op:0,type:`SID`},{name:`notice`,op:1,type:`SID`},{name:`copyright`,op:1200,type:`SID`},{name:`fullName`,op:2,type:`SID`},{name:`familyName`,op:3,type:`SID`},{name:`weight`,op:4,type:`SID`},{name:`isFixedPitch`,op:1201,type:`number`,value:0},{name:`italicAngle`,op:1202,type:`number`,value:0},{name:`underlinePosition`,op:1203,type:`number`,value:-100},{name:`underlineThickness`,op:1204,type:`number`,value:50},{name:`paintType`,op:1205,type:`number`,value:0},{name:`charstringType`,op:1206,type:`number`,value:2},{name:`fontMatrix`,op:1207,type:[`real`,`real`,`real`,`real`,`real`,`real`],value:[.001,0,0,.001,0,0]},{name:`uniqueId`,op:13,type:`number`},{name:`fontBBox`,op:5,type:[`number`,`number`,`number`,`number`],value:[0,0,0,0]},{name:`strokeWidth`,op:1208,type:`number`,value:0},{name:`xuid`,op:14,type:[],value:null},{name:`charset`,op:15,type:`offset`,value:0},{name:`encoding`,op:16,type:`offset`,value:0},{name:`charStrings`,op:17,type:`offset`,value:0},{name:`private`,op:18,type:[`number`,`offset`],value:[0,0]},{name:`ros`,op:1230,type:[`SID`,`SID`,`number`]},{name:`cidFontVersion`,op:1231,type:`number`,value:0},{name:`cidFontRevision`,op:1232,type:`number`,value:0},{name:`cidFontType`,op:1233,type:`number`,value:0},{name:`cidCount`,op:1234,type:`number`,value:8720},{name:`uidBase`,op:1235,type:`number`},{name:`fdArray`,op:1236,type:`offset`},{name:`fdSelect`,op:1237,type:`offset`},{name:`fontName`,op:1238,type:`SID`}],nV=[{name:`subrs`,op:19,type:`offset`,value:0},{name:`defaultWidthX`,op:20,type:`number`,value:0},{name:`nominalWidthX`,op:21,type:`number`,value:0}];function rV(e,t){return $B(ZB(e,0,e.byteLength),tV,t)}function iV(e,t,n,r){return $B(ZB(e,t,n),nV,r)}function aV(e,t,n,r){for(var i=[],a=0;a<n.length;a+=1){var o=rV(new DataView(new Uint8Array(n[a]).buffer),r);o._subrs=[],o._subrsBias=0,o._defaultWidthX=0,o._nominalWidthX=0;var s=o.private[0],c=o.private[1];if(s!==0&&c!==0){var l=iV(e,c+t,s,r);o._defaultWidthX=l.defaultWidthX,o._nominalWidthX=l.nominalWidthX,l.subrs!==0&&(o._subrs=GB(e,c+l.subrs+t).objects,o._subrsBias=WB(o._subrs)),o._privateDict=l}i.push(o)}return i}function oV(e,t,n,r){var i,a,o=new Z.Parser(e,t);--n;var s=[`.notdef`],c=o.parseCard8();if(c===0)for(var l=0;l<n;l+=1)i=o.parseSID(),s.push(QB(r,i));else if(c===1)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard8();for(var u=0;u<=a;u+=1)s.push(QB(r,i)),i+=1}else if(c===2)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard16();for(var d=0;d<=a;d+=1)s.push(QB(r,i)),i+=1}else throw Error(`Unknown charset format `+c);return s}function sV(e,t,n){var r,i={},a=new Z.Parser(e,t),o=a.parseCard8();if(o===0)for(var s=a.parseCard8(),c=0;c<s;c+=1)r=a.parseCard8(),i[r]=c;else if(o===1){var l=a.parseCard8();r=1;for(var u=0;u<l;u+=1)for(var d=a.parseCard8(),f=a.parseCard8(),p=d;p<=d+f;p+=1)i[p]=r,r+=1}else throw Error(`Unknown encoding format `+o);return new OB(i,n)}function cV(e,t,n){var r,i,a,o,s=new Pz,c=[],l=0,u=!1,d=!1,f=0,p=0,m,h,g,_;if(e.isCIDFont){var v=e.tables.cff.topDict._fdSelect[t.index],y=e.tables.cff.topDict._fdArray[v];m=y._subrs,h=y._subrsBias,g=y._defaultWidthX,_=y._nominalWidthX}else m=e.tables.cff.topDict._subrs,h=e.tables.cff.topDict._subrsBias,g=e.tables.cff.topDict._defaultWidthX,_=e.tables.cff.topDict._nominalWidthX;var b=g;function x(e,t){d&&s.closePath(),s.moveTo(e,t),d=!0}function S(){c.length%2!=0&&!u&&(b=c.shift()+_),l+=c.length>>1,c.length=0,u=!0}function C(n){for(var g,v,y,w,ee,te,ne,re,ie,ae,oe,se,ce=0;ce<n.length;){var le=n[ce];switch(ce+=1,le){case 1:S();break;case 3:S();break;case 4:c.length>1&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),x(f,p);break;case 5:for(;c.length>0;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 6:for(;c.length>0&&(f+=c.shift(),s.lineTo(f,p),c.length!==0);)p+=c.shift(),s.lineTo(f,p);break;case 7:for(;c.length>0&&(p+=c.shift(),s.lineTo(f,p),c.length!==0);)f+=c.shift(),s.lineTo(f,p);break;case 8:for(;c.length>0;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 10:ee=c.pop()+h,te=m[ee],te&&C(te);break;case 11:return;case 12:switch(le=n[ce],ce+=1,le){case 35:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),p=se+c.shift(),c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 34:r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=p,f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 36:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 37:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),Math.abs(oe-f)>Math.abs(se-p)?f=oe+c.shift():p=se+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;default:console.log(`Glyph `+t.index+`: unknown operator 1200`+le),c.length=0}break;case 14:c.length>0&&!u&&(b=c.shift()+_,u=!0),d&&=(s.closePath(),!1);break;case 18:S();break;case 19:case 20:S(),ce+=l+7>>3;break;case 21:c.length>2&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),f+=c.pop(),x(f,p);break;case 22:c.length>1&&!u&&(b=c.shift()+_,u=!0),f+=c.pop(),x(f,p);break;case 23:S();break;case 24:for(;c.length>2;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 25:for(;c.length>6;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 26:for(c.length%2&&(f+=c.shift());c.length>0;)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a,p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 27:for(c.length%2&&(p+=c.shift());c.length>0;)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o,s.curveTo(r,i,a,o,f,p);break;case 28:g=n[ce],v=n[ce+1],c.push((g<<24|v<<16)>>16),ce+=2;break;case 29:ee=c.pop()+e.gsubrsBias,te=e.gsubrs[ee],te&&C(te);break;case 30:for(;c.length>0&&(r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;case 31:for(;c.length>0&&(r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;default:le<32?console.log(`Glyph `+t.index+`: unknown operator `+le):le<247?c.push(le-139):le<251?(g=n[ce],ce+=1,c.push((le-247)*256+g+108)):le<255?(g=n[ce],ce+=1,c.push(-(le-251)*256-g-108)):(g=n[ce],v=n[ce+1],y=n[ce+2],w=n[ce+3],ce+=4,c.push((g<<24|v<<16|y<<8|w)/65536))}}}return C(n),t.advanceWidth=b,s}function lV(e,t,n,r){var i=[],a,o=new Z.Parser(e,t),s=o.parseCard8();if(s===0)for(var c=0;c<n;c++){if(a=o.parseCard8(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);i.push(a)}else if(s===3){var l=o.parseCard16(),u=o.parseCard16();if(u!==0)throw Error(`CFF Table CID Font FDSelect format 3 range has bad initial GID `+u);for(var d,f=0;f<l;f++){if(a=o.parseCard8(),d=o.parseCard16(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);if(d>n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad GID `+d);for(;u<d;u++)i.push(a);u=d}if(d!==n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad final GID `+d)}else throw Error(`CFF Table CID Font FDSelect table has unsupported format `+s);return i}function uV(e,t,n,r){n.tables.cff={};var i=GB(e,GB(e,eV(e,t).endOffset,Z.bytesToString).endOffset),a=GB(e,i.endOffset,Z.bytesToString);n.gsubrs=GB(e,a.endOffset).objects,n.gsubrsBias=WB(n.gsubrs);var o=aV(e,t,i.objects,a.objects);if(o.length!==1)throw Error(`CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = `+o.length);var s=o[0];if(n.tables.cff.topDict=s,s._privateDict&&(n.defaultWidthX=s._privateDict.defaultWidthX,n.nominalWidthX=s._privateDict.nominalWidthX),s.ros[0]!==void 0&&s.ros[1]!==void 0&&(n.isCIDFont=!0),n.isCIDFont){var c=s.fdArray,l=s.fdSelect;if(c===0||l===0)throw Error(`Font is marked as a CID font, but FDArray and/or FDSelect information is missing`);c+=t;var u=aV(e,t,GB(e,c).objects,a.objects);s._fdArray=u,l+=t,s._fdSelect=lV(e,l,n.numGlyphs,u.length)}var d=t+s.private[1],f=iV(e,d,s.private[0],a.objects);n.defaultWidthX=f.defaultWidthX,n.nominalWidthX=f.nominalWidthX,f.subrs===0?(n.subrs=[],n.subrsBias=0):(n.subrs=GB(e,d+f.subrs).objects,n.subrsBias=WB(n.subrs));var p;r.lowMemory?(p=KB(e,t+s.charStrings),n.nGlyphs=p.offsets.length):(p=GB(e,t+s.charStrings),n.nGlyphs=p.objects.length);var m=oV(e,t+s.charset,n.nGlyphs,a.objects);if(s.encoding===0?n.cffEncoding=new OB(CB,m):s.encoding===1?n.cffEncoding=new OB(wB,m):n.cffEncoding=sV(e,t+s.encoding,m),n.encoding=n.encoding||n.cffEncoding,n.glyphs=new HB.GlyphSet(n),r.lowMemory)n._push=function(r){var i=qB(r,p.offsets,e,t+s.charStrings);n.glyphs.push(r,HB.cffGlyphLoader(n,r,cV,i))};else for(var h=0;h<n.nGlyphs;h+=1){var g=p.objects[h];n.glyphs.push(h,HB.cffGlyphLoader(n,h,cV,g))}}function dV(e,t){var n,r=SB.indexOf(e);return r>=0&&(n=r),r=t.indexOf(e),r>=0?n=r+SB.length:(n=SB.length+t.length,t.push(e)),n}function fV(){return new Y.Record(`Header`,[{name:`major`,type:`Card8`,value:1},{name:`minor`,type:`Card8`,value:0},{name:`hdrSize`,type:`Card8`,value:4},{name:`major`,type:`Card8`,value:1}])}function pV(e){var t=new Y.Record(`Name INDEX`,[{name:`names`,type:`INDEX`,value:[]}]);t.names=[];for(var n=0;n<e.length;n+=1)t.names.push({name:`name_`+n,type:`NAME`,value:e[n]});return t}function mV(e,t,n){for(var r={},i=0;i<e.length;i+=1){var a=e[i],o=t[a.name];o!==void 0&&!UB(o,a.value)&&(a.type===`SID`&&(o=dV(o,n)),r[a.op]={name:a.name,type:a.type,value:o})}return r}function hV(e,t){var n=new Y.Record(`Top DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=mV(tV,e,t),n}function gV(e){var t=new Y.Record(`Top DICT INDEX`,[{name:`topDicts`,type:`INDEX`,value:[]}]);return t.topDicts=[{name:`topDict_0`,type:`TABLE`,value:e}],t}function _V(e){var t=new Y.Record(`String INDEX`,[{name:`strings`,type:`INDEX`,value:[]}]);t.strings=[];for(var n=0;n<e.length;n+=1)t.strings.push({name:`string_`+n,type:`STRING`,value:e[n]});return t}function vV(){return new Y.Record(`Global Subr INDEX`,[{name:`subrs`,type:`INDEX`,value:[]}])}function yV(e,t){for(var n=new Y.Record(`Charsets`,[{name:`format`,type:`Card8`,value:0}]),r=0;r<e.length;r+=1){var i=e[r],a=dV(i,t);n.fields.push({name:`glyph_`+r,type:`SID`,value:a})}return n}function bV(e){var t=[],n=e.path;t.push({name:`width`,type:`NUMBER`,value:e.advanceWidth});for(var r=0,i=0,a=0;a<n.commands.length;a+=1){var o=void 0,s=void 0,c=n.commands[a];if(c.type===`Q`){var l=1/3,u=2/3;c={type:`C`,x:c.x,y:c.y,x1:Math.round(l*r+u*c.x1),y1:Math.round(l*i+u*c.y1),x2:Math.round(l*c.x+u*c.x1),y2:Math.round(l*c.y+u*c.y1)}}if(c.type===`M`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rmoveto`,type:`OP`,value:21}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`L`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rlineto`,type:`OP`,value:5}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`C`){var d=Math.round(c.x1-r),f=Math.round(c.y1-i),p=Math.round(c.x2-c.x1),m=Math.round(c.y2-c.y1);o=Math.round(c.x-c.x2),s=Math.round(c.y-c.y2),t.push({name:`dx1`,type:`NUMBER`,value:d}),t.push({name:`dy1`,type:`NUMBER`,value:f}),t.push({name:`dx2`,type:`NUMBER`,value:p}),t.push({name:`dy2`,type:`NUMBER`,value:m}),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rrcurveto`,type:`OP`,value:8}),r=Math.round(c.x),i=Math.round(c.y)}}return t.push({name:`endchar`,type:`OP`,value:14}),t}function xV(e){for(var t=new Y.Record(`CharStrings INDEX`,[{name:`charStrings`,type:`INDEX`,value:[]}]),n=0;n<e.length;n+=1){var r=e.get(n),i=bV(r);t.charStrings.push({name:r.name,type:`CHARSTRING`,value:i})}return t}function SV(e,t){var n=new Y.Record(`Private DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=mV(nV,e,t),n}function CV(e,t){for(var n=new Y.Table(`CFF `,[{name:`header`,type:`RECORD`},{name:`nameIndex`,type:`RECORD`},{name:`topDictIndex`,type:`RECORD`},{name:`stringIndex`,type:`RECORD`},{name:`globalSubrIndex`,type:`RECORD`},{name:`charsets`,type:`RECORD`},{name:`charStringsIndex`,type:`RECORD`},{name:`privateDict`,type:`RECORD`}]),r=1/t.unitsPerEm,i={version:t.version,fullName:t.fullName,familyName:t.familyName,weight:t.weightName,fontBBox:t.fontBBox||[0,0,0,0],fontMatrix:[r,0,0,r,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]},a={},o=[],s,c=1;c<e.length;c+=1)s=e.get(c),o.push(s.name);var l=[];n.header=fV(),n.nameIndex=pV([t.postScriptName]);var u=hV(i,l);return n.topDictIndex=gV(u),n.globalSubrIndex=vV(),n.charsets=yV(o,l),n.charStringsIndex=xV(e),n.privateDict=SV(a,l),n.stringIndex=_V(l),i.charset=n.header.sizeOf()+n.nameIndex.sizeOf()+n.topDictIndex.sizeOf()+n.stringIndex.sizeOf()+n.globalSubrIndex.sizeOf(),i.encoding=0,i.charStrings=i.charset+n.charsets.sizeOf(),i.private[1]=i.charStrings+n.charStringsIndex.sizeOf(),u=hV(i,l),n.topDictIndex=gV(u),n}var wV={parse:uV,make:CV};function TV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.fontRevision=Math.round(r.parseFixed()*1e3)/1e3,n.checkSumAdjustment=r.parseULong(),n.magicNumber=r.parseULong(),K.argument(n.magicNumber===1594834165,`Font header has wrong magic number.`),n.flags=r.parseUShort(),n.unitsPerEm=r.parseUShort(),n.created=r.parseLongDateTime(),n.modified=r.parseLongDateTime(),n.xMin=r.parseShort(),n.yMin=r.parseShort(),n.xMax=r.parseShort(),n.yMax=r.parseShort(),n.macStyle=r.parseUShort(),n.lowestRecPPEM=r.parseUShort(),n.fontDirectionHint=r.parseShort(),n.indexToLocFormat=r.parseShort(),n.glyphDataFormat=r.parseShort(),n}function EV(e){var t=Math.round(new Date().getTime()/1e3)+2082844800,n=t;return e.createdTimestamp&&(n=e.createdTimestamp+2082844800),new Y.Table(`head`,[{name:`version`,type:`FIXED`,value:65536},{name:`fontRevision`,type:`FIXED`,value:65536},{name:`checkSumAdjustment`,type:`ULONG`,value:0},{name:`magicNumber`,type:`ULONG`,value:1594834165},{name:`flags`,type:`USHORT`,value:0},{name:`unitsPerEm`,type:`USHORT`,value:1e3},{name:`created`,type:`LONGDATETIME`,value:n},{name:`modified`,type:`LONGDATETIME`,value:t},{name:`xMin`,type:`SHORT`,value:0},{name:`yMin`,type:`SHORT`,value:0},{name:`xMax`,type:`SHORT`,value:0},{name:`yMax`,type:`SHORT`,value:0},{name:`macStyle`,type:`USHORT`,value:0},{name:`lowestRecPPEM`,type:`USHORT`,value:0},{name:`fontDirectionHint`,type:`SHORT`,value:2},{name:`indexToLocFormat`,type:`SHORT`,value:0},{name:`glyphDataFormat`,type:`SHORT`,value:0}],e)}var DV={parse:TV,make:EV};function OV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.ascender=r.parseShort(),n.descender=r.parseShort(),n.lineGap=r.parseShort(),n.advanceWidthMax=r.parseUShort(),n.minLeftSideBearing=r.parseShort(),n.minRightSideBearing=r.parseShort(),n.xMaxExtent=r.parseShort(),n.caretSlopeRise=r.parseShort(),n.caretSlopeRun=r.parseShort(),n.caretOffset=r.parseShort(),r.relativeOffset+=8,n.metricDataFormat=r.parseShort(),n.numberOfHMetrics=r.parseUShort(),n}function kV(e){return new Y.Table(`hhea`,[{name:`version`,type:`FIXED`,value:65536},{name:`ascender`,type:`FWORD`,value:0},{name:`descender`,type:`FWORD`,value:0},{name:`lineGap`,type:`FWORD`,value:0},{name:`advanceWidthMax`,type:`UFWORD`,value:0},{name:`minLeftSideBearing`,type:`FWORD`,value:0},{name:`minRightSideBearing`,type:`FWORD`,value:0},{name:`xMaxExtent`,type:`FWORD`,value:0},{name:`caretSlopeRise`,type:`SHORT`,value:1},{name:`caretSlopeRun`,type:`SHORT`,value:0},{name:`caretOffset`,type:`SHORT`,value:0},{name:`reserved1`,type:`SHORT`,value:0},{name:`reserved2`,type:`SHORT`,value:0},{name:`reserved3`,type:`SHORT`,value:0},{name:`reserved4`,type:`SHORT`,value:0},{name:`metricDataFormat`,type:`SHORT`,value:0},{name:`numberOfHMetrics`,type:`USHORT`,value:0}],e)}var AV={parse:OV,make:kV};function jV(e,t,n,r,i){for(var a,o,s=new Z.Parser(e,t),c=0;c<r;c+=1){c<n&&(a=s.parseUShort(),o=s.parseShort());var l=i.get(c);l.advanceWidth=a,l.leftSideBearing=o}}function MV(e,t,n,r,i){e._hmtxTableData={};for(var a,o,s=new Z.Parser(t,n),c=0;c<i;c+=1)c<r&&(a=s.parseUShort(),o=s.parseShort()),e._hmtxTableData[c]={advanceWidth:a,leftSideBearing:o}}function NV(e,t,n,r,i,a,o){o.lowMemory?MV(e,t,n,r,i):jV(t,n,r,i,a)}function PV(e){for(var t=new Y.Table(`hmtx`,[]),n=0;n<e.length;n+=1){var r=e.get(n),i=r.advanceWidth||0,a=r.leftSideBearing||0;t.fields.push({name:`advanceWidth_`+n,type:`USHORT`,value:i}),t.fields.push({name:`leftSideBearing_`+n,type:`SHORT`,value:a})}return t}var FV={parse:NV,make:PV};function IV(e){for(var t=new Y.Table(`ltag`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`numTags`,type:`ULONG`,value:e.length}]),n=``,r=12+e.length*4,i=0;i<e.length;++i){var a=n.indexOf(e[i]);a<0&&(a=n.length,n+=e[i]),t.fields.push({name:`offset `+i,type:`USHORT`,value:r+a}),t.fields.push({name:`length `+i,type:`USHORT`,value:e[i].length})}return t.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),t}function LV(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported ltag table version.`),n.skip(`uLong`,1);for(var i=n.parseULong(),a=[],o=0;o<i;o++){for(var s=``,c=t+n.parseUShort(),l=n.parseUShort(),u=c;u<c+l;++u)s+=String.fromCharCode(e.getInt8(u));a.push(s)}return a}var RV={make:IV,parse:LV};function zV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.numGlyphs=r.parseUShort(),n.version===1&&(n.maxPoints=r.parseUShort(),n.maxContours=r.parseUShort(),n.maxCompositePoints=r.parseUShort(),n.maxCompositeContours=r.parseUShort(),n.maxZones=r.parseUShort(),n.maxTwilightPoints=r.parseUShort(),n.maxStorage=r.parseUShort(),n.maxFunctionDefs=r.parseUShort(),n.maxInstructionDefs=r.parseUShort(),n.maxStackElements=r.parseUShort(),n.maxSizeOfInstructions=r.parseUShort(),n.maxComponentElements=r.parseUShort(),n.maxComponentDepth=r.parseUShort()),n}function BV(e){return new Y.Table(`maxp`,[{name:`version`,type:`FIXED`,value:20480},{name:`numGlyphs`,type:`USHORT`,value:e}])}var VV={parse:zV,make:BV},HV=[`copyright`,`fontFamily`,`fontSubfamily`,`uniqueID`,`fullName`,`version`,`postScriptName`,`trademark`,`manufacturer`,`designer`,`description`,`manufacturerURL`,`designerURL`,`license`,`licenseURL`,`reserved`,`preferredFamily`,`preferredSubfamily`,`compatibleFullName`,`sampleText`,`postScriptFindFontName`,`wwsFamily`,`wwsSubfamily`],UV={0:`en`,1:`fr`,2:`de`,3:`it`,4:`nl`,5:`sv`,6:`es`,7:`da`,8:`pt`,9:`no`,10:`he`,11:`ja`,12:`ar`,13:`fi`,14:`el`,15:`is`,16:`mt`,17:`tr`,18:`hr`,19:`zh-Hant`,20:`ur`,21:`hi`,22:`th`,23:`ko`,24:`lt`,25:`pl`,26:`hu`,27:`es`,28:`lv`,29:`se`,30:`fo`,31:`fa`,32:`ru`,33:`zh`,34:`nl-BE`,35:`ga`,36:`sq`,37:`ro`,38:`cz`,39:`sk`,40:`si`,41:`yi`,42:`sr`,43:`mk`,44:`bg`,45:`uk`,46:`be`,47:`uz`,48:`kk`,49:`az-Cyrl`,50:`az-Arab`,51:`hy`,52:`ka`,53:`mo`,54:`ky`,55:`tg`,56:`tk`,57:`mn-CN`,58:`mn`,59:`ps`,60:`ks`,61:`ku`,62:`sd`,63:`bo`,64:`ne`,65:`sa`,66:`mr`,67:`bn`,68:`as`,69:`gu`,70:`pa`,71:`or`,72:`ml`,73:`kn`,74:`ta`,75:`te`,76:`si`,77:`my`,78:`km`,79:`lo`,80:`vi`,81:`id`,82:`tl`,83:`ms`,84:`ms-Arab`,85:`am`,86:`ti`,87:`om`,88:`so`,89:`sw`,90:`rw`,91:`rn`,92:`ny`,93:`mg`,94:`eo`,128:`cy`,129:`eu`,130:`ca`,131:`la`,132:`qu`,133:`gn`,134:`ay`,135:`tt`,136:`ug`,137:`dz`,138:`jv`,139:`su`,140:`gl`,141:`af`,142:`br`,143:`iu`,144:`gd`,145:`gv`,146:`ga`,147:`to`,148:`el-polyton`,149:`kl`,150:`az`,151:`nn`},WV={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0},GV={1078:`af`,1052:`sq`,1156:`gsw`,1118:`am`,5121:`ar-DZ`,15361:`ar-BH`,3073:`ar`,2049:`ar-IQ`,11265:`ar-JO`,13313:`ar-KW`,12289:`ar-LB`,4097:`ar-LY`,6145:`ary`,8193:`ar-OM`,16385:`ar-QA`,1025:`ar-SA`,10241:`ar-SY`,7169:`aeb`,14337:`ar-AE`,9217:`ar-YE`,1067:`hy`,1101:`as`,2092:`az-Cyrl`,1068:`az`,1133:`ba`,1069:`eu`,1059:`be`,2117:`bn`,1093:`bn-IN`,8218:`bs-Cyrl`,5146:`bs`,1150:`br`,1026:`bg`,1027:`ca`,3076:`zh-HK`,5124:`zh-MO`,2052:`zh`,4100:`zh-SG`,1028:`zh-TW`,1155:`co`,1050:`hr`,4122:`hr-BA`,1029:`cs`,1030:`da`,1164:`prs`,1125:`dv`,2067:`nl-BE`,1043:`nl`,3081:`en-AU`,10249:`en-BZ`,4105:`en-CA`,9225:`en-029`,16393:`en-IN`,6153:`en-IE`,8201:`en-JM`,17417:`en-MY`,5129:`en-NZ`,13321:`en-PH`,18441:`en-SG`,7177:`en-ZA`,11273:`en-TT`,2057:`en-GB`,1033:`en`,12297:`en-ZW`,1061:`et`,1080:`fo`,1124:`fil`,1035:`fi`,2060:`fr-BE`,3084:`fr-CA`,1036:`fr`,5132:`fr-LU`,6156:`fr-MC`,4108:`fr-CH`,1122:`fy`,1110:`gl`,1079:`ka`,3079:`de-AT`,1031:`de`,5127:`de-LI`,4103:`de-LU`,2055:`de-CH`,1032:`el`,1135:`kl`,1095:`gu`,1128:`ha`,1037:`he`,1081:`hi`,1038:`hu`,1039:`is`,1136:`ig`,1057:`id`,1117:`iu`,2141:`iu-Latn`,2108:`ga`,1076:`xh`,1077:`zu`,1040:`it`,2064:`it-CH`,1041:`ja`,1099:`kn`,1087:`kk`,1107:`km`,1158:`quc`,1159:`rw`,1089:`sw`,1111:`kok`,1042:`ko`,1088:`ky`,1108:`lo`,1062:`lv`,1063:`lt`,2094:`dsb`,1134:`lb`,1071:`mk`,2110:`ms-BN`,1086:`ms`,1100:`ml`,1082:`mt`,1153:`mi`,1146:`arn`,1102:`mr`,1148:`moh`,1104:`mn`,2128:`mn-CN`,1121:`ne`,1044:`nb`,2068:`nn`,1154:`oc`,1096:`or`,1123:`ps`,1045:`pl`,1046:`pt`,2070:`pt-PT`,1094:`pa`,1131:`qu-BO`,2155:`qu-EC`,3179:`qu`,1048:`ro`,1047:`rm`,1049:`ru`,9275:`smn`,4155:`smj-NO`,5179:`smj`,3131:`se-FI`,1083:`se`,2107:`se-SE`,8251:`sms`,6203:`sma-NO`,7227:`sms`,1103:`sa`,7194:`sr-Cyrl-BA`,3098:`sr`,6170:`sr-Latn-BA`,2074:`sr-Latn`,1132:`nso`,1074:`tn`,1115:`si`,1051:`sk`,1060:`sl`,11274:`es-AR`,16394:`es-BO`,13322:`es-CL`,9226:`es-CO`,5130:`es-CR`,7178:`es-DO`,12298:`es-EC`,17418:`es-SV`,4106:`es-GT`,18442:`es-HN`,2058:`es-MX`,19466:`es-NI`,6154:`es-PA`,15370:`es-PY`,10250:`es-PE`,20490:`es-PR`,3082:`es`,1034:`es`,21514:`es-US`,14346:`es-UY`,8202:`es-VE`,2077:`sv-FI`,1053:`sv`,1114:`syr`,1064:`tg`,2143:`tzm`,1097:`ta`,1092:`tt`,1098:`te`,1054:`th`,1105:`bo`,1055:`tr`,1090:`tk`,1152:`ug`,1058:`uk`,1070:`hsb`,1056:`ur`,2115:`uz-Cyrl`,1091:`uz`,1066:`vi`,1106:`cy`,1160:`wo`,1157:`sah`,1144:`ii`,1130:`yo`};function KV(e,t,n){switch(e){case 0:if(t===65535)return`und`;if(n)return n[t];break;case 1:return UV[t];case 3:return GV[t]}}var qV=`utf-16`,JV={0:`macintosh`,1:`x-mac-japanese`,2:`x-mac-chinesetrad`,3:`x-mac-korean`,6:`x-mac-greek`,7:`x-mac-cyrillic`,9:`x-mac-devanagai`,10:`x-mac-gurmukhi`,11:`x-mac-gujarati`,12:`x-mac-oriya`,13:`x-mac-bengali`,14:`x-mac-tamil`,15:`x-mac-telugu`,16:`x-mac-kannada`,17:`x-mac-malayalam`,18:`x-mac-sinhalese`,19:`x-mac-burmese`,20:`x-mac-khmer`,21:`x-mac-thai`,22:`x-mac-lao`,23:`x-mac-georgian`,24:`x-mac-armenian`,25:`x-mac-chinesesimp`,26:`x-mac-tibetan`,27:`x-mac-mongolian`,28:`x-mac-ethiopic`,29:`x-mac-ce`,30:`x-mac-vietnamese`,31:`x-mac-extarabic`},YV={15:`x-mac-icelandic`,17:`x-mac-turkish`,18:`x-mac-croatian`,24:`x-mac-ce`,25:`x-mac-ce`,26:`x-mac-ce`,27:`x-mac-ce`,28:`x-mac-ce`,30:`x-mac-icelandic`,37:`x-mac-romanian`,38:`x-mac-ce`,39:`x-mac-ce`,40:`x-mac-ce`,143:`x-mac-inuit`,146:`x-mac-gaelic`};function XV(e,t,n){switch(e){case 0:return qV;case 1:return YV[n]||JV[t];case 3:if(t===1||t===10)return qV;break}}function ZV(e,t,n){for(var r={},i=new Z.Parser(e,t),a=i.parseUShort(),o=i.parseUShort(),s=i.offset+i.parseUShort(),c=0;c<o;c++){var l=i.parseUShort(),u=i.parseUShort(),d=i.parseUShort(),f=i.parseUShort(),p=HV[f]||f,m=i.parseUShort(),h=i.parseUShort(),g=KV(l,d,n),_=XV(l,u,d);if(_!==void 0&&g!==void 0){var v=void 0;if(v=_===qV?zz.UTF16(e,s+h,m):zz.MACSTRING(e,s+h,m,_),v){var y=r[p];y===void 0&&(y=r[p]={}),y[g]=v}}}return a===1&&i.parseUShort(),r}function QV(e){var t={};for(var n in e)t[e[n]]=parseInt(n);return t}function $V(e,t,n,r,i,a){return new Y.Record(`NameRecord`,[{name:`platformID`,type:`USHORT`,value:e},{name:`encodingID`,type:`USHORT`,value:t},{name:`languageID`,type:`USHORT`,value:n},{name:`nameID`,type:`USHORT`,value:r},{name:`length`,type:`USHORT`,value:i},{name:`offset`,type:`USHORT`,value:a}])}function eH(e,t){var n=e.length,r=t.length-n+1;loop:for(var i=0;i<r;i++)for(;i<r;i++){for(var a=0;a<n;a++)if(t[i+a]!==e[a])continue loop;return i}return-1}function tH(e,t){var n=eH(e,t);if(n<0){n=t.length;for(var r=0,i=e.length;r<i;++r)t.push(e[r])}return n}function nH(e,t){var n,r=[],i={},a=QV(HV);for(var o in e){var s=a[o];if(s===void 0&&(s=o),n=parseInt(s),isNaN(n))throw Error(`Name table entry "`+o+`" does not exist, see nameTableNames for complete list.`);i[n]=e[o],r.push(n)}for(var c=QV(UV),l=QV(GV),u=[],d=[],f=0;f<r.length;f++){n=r[f];var p=i[n];for(var m in p){var h=p[m],g=1,_=c[m],v=WV[_],y=XV(g,v,_),b=q.MACSTRING(h,y);b===void 0&&(g=0,_=t.indexOf(m),_<0&&(_=t.length,t.push(m)),v=4,b=q.UTF16(h));var x=tH(b,d);u.push($V(g,v,_,n,b.length,x));var S=l[m];if(S!==void 0){var C=q.UTF16(h),w=tH(C,d);u.push($V(3,1,S,n,C.length,w))}}}u.sort(function(e,t){return e.platformID-t.platformID||e.encodingID-t.encodingID||e.languageID-t.languageID||e.nameID-t.nameID});for(var ee=new Y.Table(`name`,[{name:`format`,type:`USHORT`,value:0},{name:`count`,type:`USHORT`,value:u.length},{name:`stringOffset`,type:`USHORT`,value:6+u.length*12}]),te=0;te<u.length;te++)ee.fields.push({name:`record_`+te,type:`RECORD`,value:u[te]});return ee.fields.push({name:`strings`,type:`LITERAL`,value:d}),ee}var rH={parse:ZV,make:nH},iH=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function aH(e){for(var t=0;t<iH.length;t+=1){var n=iH[t];if(e>=n.begin&&e<n.end)return t}return-1}function oH(e,t){var n={},r=new Z.Parser(e,t);n.version=r.parseUShort(),n.xAvgCharWidth=r.parseShort(),n.usWeightClass=r.parseUShort(),n.usWidthClass=r.parseUShort(),n.fsType=r.parseUShort(),n.ySubscriptXSize=r.parseShort(),n.ySubscriptYSize=r.parseShort(),n.ySubscriptXOffset=r.parseShort(),n.ySubscriptYOffset=r.parseShort(),n.ySuperscriptXSize=r.parseShort(),n.ySuperscriptYSize=r.parseShort(),n.ySuperscriptXOffset=r.parseShort(),n.ySuperscriptYOffset=r.parseShort(),n.yStrikeoutSize=r.parseShort(),n.yStrikeoutPosition=r.parseShort(),n.sFamilyClass=r.parseShort(),n.panose=[];for(var i=0;i<10;i++)n.panose[i]=r.parseByte();return n.ulUnicodeRange1=r.parseULong(),n.ulUnicodeRange2=r.parseULong(),n.ulUnicodeRange3=r.parseULong(),n.ulUnicodeRange4=r.parseULong(),n.achVendID=String.fromCharCode(r.parseByte(),r.parseByte(),r.parseByte(),r.parseByte()),n.fsSelection=r.parseUShort(),n.usFirstCharIndex=r.parseUShort(),n.usLastCharIndex=r.parseUShort(),n.sTypoAscender=r.parseShort(),n.sTypoDescender=r.parseShort(),n.sTypoLineGap=r.parseShort(),n.usWinAscent=r.parseUShort(),n.usWinDescent=r.parseUShort(),n.version>=1&&(n.ulCodePageRange1=r.parseULong(),n.ulCodePageRange2=r.parseULong()),n.version>=2&&(n.sxHeight=r.parseShort(),n.sCapHeight=r.parseShort(),n.usDefaultChar=r.parseUShort(),n.usBreakChar=r.parseUShort(),n.usMaxContent=r.parseUShort()),n}function sH(e){return new Y.Table(`OS/2`,[{name:`version`,type:`USHORT`,value:3},{name:`xAvgCharWidth`,type:`SHORT`,value:0},{name:`usWeightClass`,type:`USHORT`,value:0},{name:`usWidthClass`,type:`USHORT`,value:0},{name:`fsType`,type:`USHORT`,value:0},{name:`ySubscriptXSize`,type:`SHORT`,value:650},{name:`ySubscriptYSize`,type:`SHORT`,value:699},{name:`ySubscriptXOffset`,type:`SHORT`,value:0},{name:`ySubscriptYOffset`,type:`SHORT`,value:140},{name:`ySuperscriptXSize`,type:`SHORT`,value:650},{name:`ySuperscriptYSize`,type:`SHORT`,value:699},{name:`ySuperscriptXOffset`,type:`SHORT`,value:0},{name:`ySuperscriptYOffset`,type:`SHORT`,value:479},{name:`yStrikeoutSize`,type:`SHORT`,value:49},{name:`yStrikeoutPosition`,type:`SHORT`,value:258},{name:`sFamilyClass`,type:`SHORT`,value:0},{name:`bFamilyType`,type:`BYTE`,value:0},{name:`bSerifStyle`,type:`BYTE`,value:0},{name:`bWeight`,type:`BYTE`,value:0},{name:`bProportion`,type:`BYTE`,value:0},{name:`bContrast`,type:`BYTE`,value:0},{name:`bStrokeVariation`,type:`BYTE`,value:0},{name:`bArmStyle`,type:`BYTE`,value:0},{name:`bLetterform`,type:`BYTE`,value:0},{name:`bMidline`,type:`BYTE`,value:0},{name:`bXHeight`,type:`BYTE`,value:0},{name:`ulUnicodeRange1`,type:`ULONG`,value:0},{name:`ulUnicodeRange2`,type:`ULONG`,value:0},{name:`ulUnicodeRange3`,type:`ULONG`,value:0},{name:`ulUnicodeRange4`,type:`ULONG`,value:0},{name:`achVendID`,type:`CHARARRAY`,value:`XXXX`},{name:`fsSelection`,type:`USHORT`,value:0},{name:`usFirstCharIndex`,type:`USHORT`,value:0},{name:`usLastCharIndex`,type:`USHORT`,value:0},{name:`sTypoAscender`,type:`SHORT`,value:0},{name:`sTypoDescender`,type:`SHORT`,value:0},{name:`sTypoLineGap`,type:`SHORT`,value:0},{name:`usWinAscent`,type:`USHORT`,value:0},{name:`usWinDescent`,type:`USHORT`,value:0},{name:`ulCodePageRange1`,type:`ULONG`,value:0},{name:`ulCodePageRange2`,type:`ULONG`,value:0},{name:`sxHeight`,type:`SHORT`,value:0},{name:`sCapHeight`,type:`SHORT`,value:0},{name:`usDefaultChar`,type:`USHORT`,value:0},{name:`usBreakChar`,type:`USHORT`,value:0},{name:`usMaxContext`,type:`USHORT`,value:0}],e)}var cH={parse:oH,make:sH,unicodeRanges:iH,getUnicodeRange:aH};function lH(e,t){var n={},r=new Z.Parser(e,t);switch(n.version=r.parseVersion(),n.italicAngle=r.parseFixed(),n.underlinePosition=r.parseShort(),n.underlineThickness=r.parseShort(),n.isFixedPitch=r.parseULong(),n.minMemType42=r.parseULong(),n.maxMemType42=r.parseULong(),n.minMemType1=r.parseULong(),n.maxMemType1=r.parseULong(),n.version){case 1:n.names=TB.slice();break;case 2:n.numberOfGlyphs=r.parseUShort(),n.glyphNameIndex=Array(n.numberOfGlyphs);for(var i=0;i<n.numberOfGlyphs;i++)n.glyphNameIndex[i]=r.parseUShort();n.names=[];for(var a=0;a<n.numberOfGlyphs;a++)if(n.glyphNameIndex[a]>=TB.length){var o=r.parseChar();n.names.push(r.parseString(o))}break;case 2.5:n.numberOfGlyphs=r.parseUShort(),n.offset=Array(n.numberOfGlyphs);for(var s=0;s<n.numberOfGlyphs;s++)n.offset[s]=r.parseChar();break}return n}function uH(){return new Y.Table(`post`,[{name:`version`,type:`FIXED`,value:196608},{name:`italicAngle`,type:`FIXED`,value:0},{name:`underlinePosition`,type:`FWORD`,value:0},{name:`underlineThickness`,type:`FWORD`,value:0},{name:`isFixedPitch`,type:`ULONG`,value:0},{name:`minMemType42`,type:`ULONG`,value:0},{name:`maxMemType42`,type:`ULONG`,value:0},{name:`minMemType1`,type:`ULONG`,value:0},{name:`maxMemType1`,type:`ULONG`,value:0}])}var dH={parse:lH,make:uH},fH=Array(9);fH[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),deltaGlyphId:this.parseUShort()};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),substitute:this.parseOffset16List()};K.assert(!1,`0x`+e.toString(16)+`: lookup type 1 format must be 1 or 2.`)},fH[2]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Multiple Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),sequences:this.parseListOfLists()}},fH[3]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Alternate Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),alternateSets:this.parseListOfLists()}},fH[4]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB ligature table identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var pH={sequenceIndex:X.uShort,lookupListIndex:X.uShort};fH[5]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:t,coverage:this.parsePointer(X.coverage),ruleSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{input:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,pH)}})};if(t===2)return{substFormat:t,coverage:this.parsePointer(X.coverage),classDef:this.parsePointer(X.classDef),classSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{classes:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,pH)}})};if(t===3){var n=this.parseUShort(),r=this.parseUShort();return{substFormat:t,coverages:this.parseList(n,X.pointer(X.coverage)),lookupRecords:this.parseRecordList(r,pH)}}K.assert(!1,`0x`+e.toString(16)+`: lookup type 5 format must be 1, 2 or 3.`)},fH[6]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(pH)}})};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),backtrackClassDef:this.parsePointer(X.classDef),inputClassDef:this.parsePointer(X.classDef),lookaheadClassDef:this.parsePointer(X.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(pH)}})};if(t===3)return{substFormat:3,backtrackCoverage:this.parseList(X.pointer(X.coverage)),inputCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),lookupRecords:this.parseRecordList(pH)};K.assert(!1,`0x`+e.toString(16)+`: lookup type 6 format must be 1, 2 or 3.`)},fH[7]=function(){var e=this.parseUShort();K.argument(e===1,`GSUB Extension Substitution subtable identifier-format must be 1`);var t=this.parseUShort(),n=new X(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:t,extension:fH[t].call(n)}},fH[8]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),backtrackCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),substitutes:this.parseUShortList()}};function mH(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GSUB table version.`),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(fH)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(fH),variations:n.parseFeatureVariationsList()}}var hH=Array(9);hH[1]=function(e){return e.substFormat===1?new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)},{name:`deltaGlyphID`,type:`USHORT`,value:e.deltaGlyphId}]):new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:2},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.ushortList(`substitute`,e.substitute)))},hH[2]=function(e){return K.assert(e.substFormat===1,`Lookup type 2 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`seqSet`,e.sequences,function(e){return new Y.Table(`sequenceSetTable`,Y.ushortList(`sequence`,e))})))},hH[3]=function(e){return K.assert(e.substFormat===1,`Lookup type 3 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`altSet`,e.alternateSets,function(e){return new Y.Table(`alternateSetTable`,Y.ushortList(`alternate`,e))})))},hH[4]=function(e){return K.assert(e.substFormat===1,`Lookup type 4 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`ligSet`,e.ligatureSets,function(e){return new Y.Table(`ligatureSetTable`,Y.tableList(`ligature`,e,function(e){return new Y.Table(`ligatureTable`,[{name:`ligGlyph`,type:`USHORT`,value:e.ligGlyph}].concat(Y.ushortList(`component`,e.components,e.components.length+1)))}))})))},hH[6]=function(e){if(e.substFormat===1)return new Y.Table(`chainContextTable`,[{name:`substFormat`,type:`USHORT`,value:e.substFormat},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`chainRuleSet`,e.chainRuleSets,function(e){return new Y.Table(`chainRuleSetTable`,Y.tableList(`chainRule`,e,function(e){var t=Y.ushortList(`backtrackGlyph`,e.backtrack,e.backtrack.length).concat(Y.ushortList(`inputGlyph`,e.input,e.input.length+1)).concat(Y.ushortList(`lookaheadGlyph`,e.lookahead,e.lookahead.length)).concat(Y.ushortList(`substitution`,[],e.lookupRecords.length));return e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainRuleTable`,t)}))})));if(e.substFormat===2)K.assert(!1,`lookup type 6 format 2 is not yet supported.`);else if(e.substFormat===3){var t=[{name:`substFormat`,type:`USHORT`,value:e.substFormat}];return t.push({name:`backtrackGlyphCount`,type:`USHORT`,value:e.backtrackCoverage.length}),e.backtrackCoverage.forEach(function(e,n){t.push({name:`backtrackCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`inputGlyphCount`,type:`USHORT`,value:e.inputCoverage.length}),e.inputCoverage.forEach(function(e,n){t.push({name:`inputCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`lookaheadGlyphCount`,type:`USHORT`,value:e.lookaheadCoverage.length}),e.lookaheadCoverage.forEach(function(e,n){t.push({name:`lookaheadCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`substitutionCount`,type:`USHORT`,value:e.lookupRecords.length}),e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainContextTable`,t)}K.assert(!1,`lookup type 6 format must be 1, 2 or 3.`)};function gH(e){return new Y.Table(`GSUB`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,hH)}])}var _H={parse:mH,make:gH};function vH(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported META table version.`),n.parseULong(),n.parseULong();for(var i=n.parseULong(),a={},o=0;o<i;o++){var s=n.parseTag(),c=n.parseULong(),l=n.parseULong();a[s]=zz.UTF8(e,t+c,l)}return a}function yH(e){var t=Object.keys(e).length,n=``,r=16+t*12,i=new Y.Table(`meta`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`offset`,type:`ULONG`,value:r},{name:`numTags`,type:`ULONG`,value:t}]);for(var a in e){var o=n.length;n+=e[a],i.fields.push({name:`tag `+a,type:`TAG`,value:a}),i.fields.push({name:`offset `+a,type:`ULONG`,value:r+o}),i.fields.push({name:`length `+a,type:`ULONG`,value:e[a].length})}return i.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),i}var bH={parse:vH,make:yH};function xH(e){return Math.log(e)/Math.log(2)|0}function SH(e){for(;e.length%4!=0;)e.push(0);for(var t=0,n=0;n<e.length;n+=4)t+=(e[n]<<24)+(e[n+1]<<16)+(e[n+2]<<8)+e[n+3];return t%=2**32,t}function CH(e,t,n,r){return new Y.Record(`Table Record`,[{name:`tag`,type:`TAG`,value:e===void 0?``:e},{name:`checkSum`,type:`ULONG`,value:t===void 0?0:t},{name:`offset`,type:`ULONG`,value:n===void 0?0:n},{name:`length`,type:`ULONG`,value:r===void 0?0:r}])}function wH(e){var t=new Y.Table(`sfnt`,[{name:`version`,type:`TAG`,value:`OTTO`},{name:`numTables`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);t.tables=e,t.numTables=e.length;var n=2**xH(t.numTables);t.searchRange=16*n,t.entrySelector=xH(n),t.rangeShift=t.numTables*16-t.searchRange;for(var r=[],i=[],a=t.sizeOf()+CH().sizeOf()*t.numTables;a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0});for(var o=0;o<e.length;o+=1){var s=e[o];K.argument(s.tableName.length===4,`Table name`+s.tableName+` is invalid.`);var c=s.sizeOf(),l=CH(s.tableName,SH(s.encode()),a,c);for(r.push({name:l.tag+` Table Record`,type:`RECORD`,value:l}),i.push({name:s.tableName+` table`,type:`RECORD`,value:s}),a+=c,K.argument(!isNaN(a),`Something went wrong calculating the offset.`);a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0})}return r.sort(function(e,t){return e.value.tag>t.value.tag?1:-1}),t.fields=t.fields.concat(r),t.fields=t.fields.concat(i),t}function TH(e,t,n){for(var r=0;r<t.length;r+=1){var i=e.charToGlyphIndex(t[r]);if(i>0)return e.glyphs.get(i).getMetrics()}return n}function EH(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length}function DH(e){for(var t=[],n=[],r=[],i=[],a=[],o=[],s=[],c,l=0,u=0,d=0,f=0,p=0,m=0;m<e.glyphs.length;m+=1){var h=e.glyphs.get(m),g=h.unicode|0;if(isNaN(h.advanceWidth))throw Error(`Glyph `+h.name+` (`+m+`): advanceWidth is not a number.`);(c>g||c===void 0)&&g>0&&(c=g),l<g&&(l=g);var _=cH.getUnicodeRange(g);if(_<32)u|=1<<_;else if(_<64)d|=1<<_-32;else if(_<96)f|=1<<_-64;else if(_<123)p|=1<<_-96;else throw Error(`Unicode ranges bits > 123 are reserved for internal usage`);if(h.name!==`.notdef`){var v=h.getMetrics();t.push(v.xMin),n.push(v.yMin),r.push(v.xMax),i.push(v.yMax),o.push(v.leftSideBearing),s.push(v.rightSideBearing),a.push(h.advanceWidth)}}var y={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,r),yMax:Math.max.apply(null,i),advanceWidthMax:Math.max.apply(null,a),advanceWidthAvg:EH(a),minLeftSideBearing:Math.min.apply(null,o),maxLeftSideBearing:Math.max.apply(null,o),minRightSideBearing:Math.min.apply(null,s)};y.ascender=e.ascender,y.descender=e.descender;var b=DV.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),x=AV.make({ascender:y.ascender,descender:y.descender,advanceWidthMax:y.advanceWidthMax,minLeftSideBearing:y.minLeftSideBearing,minRightSideBearing:y.minRightSideBearing,xMaxExtent:y.maxLeftSideBearing+(y.xMax-y.xMin),numberOfHMetrics:e.glyphs.length}),S=VV.make(e.glyphs.length),C=cH.make(Object.assign({xAvgCharWidth:Math.round(y.advanceWidthAvg),usFirstCharIndex:c,usLastCharIndex:l,ulUnicodeRange1:u,ulUnicodeRange2:d,ulUnicodeRange3:f,ulUnicodeRange4:p,sTypoAscender:y.ascender,sTypoDescender:y.descender,sTypoLineGap:0,usWinAscent:y.yMax,usWinDescent:Math.abs(y.yMin),ulCodePageRange1:1,sxHeight:TH(e,`xyvw`,{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:TH(e,`HIKLEFJMNTZBDPRAGOQSUVWXY`,y).yMax,usDefaultChar:e.hasChar(` `)?32:0,usBreakChar:e.hasChar(` `)?32:0},e.tables.os2)),w=FV.make(e.glyphs),ee=xB.make(e.glyphs),te=e.getEnglishName(`fontFamily`),ne=e.getEnglishName(`fontSubfamily`),re=te+` `+ne,ie=e.getEnglishName(`postScriptName`);ie||=te.replace(/\s/g,``)+`-`+ne;var ae={};for(var oe in e.names)ae[oe]=e.names[oe];ae.uniqueID||={en:e.getEnglishName(`manufacturer`)+`:`+re},ae.postScriptName||={en:ie},ae.preferredFamily||=e.names.fontFamily,ae.preferredSubfamily||=e.names.fontSubfamily;var se=[],ce=rH.make(ae,se),le=se.length>0?RV.make(se):void 0,ue=dH.make(),de=wV.make(e.glyphs,{version:e.getEnglishName(`version`),fullName:re,familyName:te,weightName:ne,postScriptName:ie,unitsPerEm:e.unitsPerEm,fontBBox:[0,y.yMin,y.ascender,y.advanceWidthMax]}),fe=e.metas&&Object.keys(e.metas).length>0?bH.make(e.metas):void 0,pe=[b,x,S,C,ce,ee,ue,de,w];le&&pe.push(le),e.tables.gsub&&pe.push(_H.make(e.tables.gsub)),fe&&pe.push(fe);for(var me=wH(pe),he=SH(me.encode()),ge=me.fields,_e=!1,ve=0;ve<ge.length;ve+=1)if(ge[ve].name===`head table`){ge[ve].value.checkSumAdjustment=2981146554-he,_e=!0;break}if(!_e)throw Error(`Could not find head table with checkSum to adjust.`);return me}var OH={make:wH,fontToTable:DH,computeCheckSum:SH};function kH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i].tag;if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function AH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i];if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function jH(e,t){for(var n,r=0,i=e.length-1;r<=i;){var a=r+i>>>1;n=e[a];var o=n.start;if(o===t)return n;o<t?r=a+1:i=a-1}if(r>0)return n=e[r-1],t>n.end?0:n}function MH(e,t){this.font=e,this.tableName=t}MH.prototype={searchTag:kH,binSearch:AH,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,n=0;n<e.scripts.length;n++){var r=e.scripts[n].tag;if(r===`DFLT`)return r;r===`latn`&&(t=!0)}if(t)return`latn`}},getScriptTable:function(e,t){var n=this.getTable(t);if(n){e||=`DFLT`;var r=n.scripts,i=kH(n.scripts,e);if(i>=0)return r[i].script;if(t){var a={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-i,0,a),a.script}}},getLangSysTable:function(e,t,n){var r=this.getScriptTable(e,n);if(r){if(!t||t===`dflt`||t===`DFLT`)return r.defaultLangSys;var i=kH(r.langSysRecords,t);if(i>=0)return r.langSysRecords[i].langSys;if(n){var a={tag:t,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-i,0,a),a.langSys}}},getFeatureTable:function(e,t,n,r){var i=this.getLangSysTable(e,t,r);if(i){for(var a,o=i.featureIndexes,s=this.font.tables[this.tableName].features,c=0;c<o.length;c++)if(a=s[o[c]],a.tag===n)return a.feature;if(r){var l=s.length;return K.assert(l===0||n>=s[l-1].tag,`Features must be added in alphabetical order.`),a={tag:n,feature:{params:0,lookupListIndexes:[]}},s.push(a),o.push(l),a.feature}}},getLookupTables:function(e,t,n,r,i){var a=this.getFeatureTable(e,t,n,i),o=[];if(a){for(var s,c=a.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u<c.length;u++)s=l[c[u]],s.lookupType===r&&o.push(s);if(o.length===0&&i){s={lookupType:r,lookupFlag:0,subtables:[],markFilteringSet:void 0};var d=l.length;return l.push(s),c.push(d),[s]}}return o},getGlyphClass:function(e,t){switch(e.format){case 1:return e.startGlyph<=t&&t<e.startGlyph+e.classes.length?e.classes[t-e.startGlyph]:0;case 2:var n=jH(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=AH(e.glyphs,t);return n>=0?n:-1;case 2:var r=jH(e.ranges,t);return r?r.index+t-r.start:-1}},expandCoverage:function(e){if(e.format===1)return e.glyphs;for(var t=[],n=e.ranges,r=0;r<n.length;r++)for(var i=n[r],a=i.start,o=i.end,s=a;s<=o;s++)t.push(s);return t}};function NH(e){MH.call(this,e,`gpos`)}NH.prototype=MH.prototype,NH.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)},NH.prototype.getKerningValue=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=e[r].subtables,a=0;a<i.length;a++){var o=i[a],s=this.getCoverageIndex(o.coverage,t);if(!(s<0))switch(o.posFormat){case 1:for(var c=o.pairSets[s],l=0;l<c.length;l++){var u=c[l];if(u.secondGlyph===n)return u.value1&&u.value1.xAdvance||0}break;case 2:var d=this.getGlyphClass(o.classDef1,t),f=this.getGlyphClass(o.classDef2,n),p=o.classRecords[d][f];return p.value1&&p.value1.xAdvance||0}}return 0},NH.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos)return this.getLookupTables(e,t,`kern`,2)};function PH(e){MH.call(this,e,`gsub`)}function FH(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}function IH(e,t,n){for(var r=e.subtables,i=0;i<r.length;i++){var a=r[i];if(a.substFormat===t)return a}if(n)return r.push(n),n}PH.prototype=MH.prototype,PH.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:`DFLT`,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}},PH.prototype.getSingle=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,1),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;if(c.substFormat===1){var d=c.deltaGlyphId;for(u=0;u<l.length;u++){var f=l[u];r.push({sub:f,by:f+d})}}else{var p=c.substitute;for(u=0;u<l.length;u++)r.push({sub:l[u],by:p[u]})}}return r},PH.prototype.getMultiple=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,2),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;for(u=0;u<l.length;u++){var d=l[u],f=c.sequences[u];r.push({sub:d,by:f})}}return r},PH.prototype.getAlternates=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,3),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.alternateSets,d=0;d<l.length;d++)r.push({sub:l[d],by:u[d]});return r},PH.prototype.getLigatures=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,4),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.ligatureSets,d=0;d<l.length;d++)for(var f=l[d],p=u[d],m=0;m<p.length;m++){var h=p[m];r.push({sub:[f].concat(h.components),by:h.ligGlyph})}return r},PH.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,!0)[0],a=IH(i,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});K.assert(a.coverage.format===1,`Single: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.substitute.splice(s,0,0)),a.substitute[s]=t.by},PH.prototype.addMultiple=function(e,t,n,r){K.assert(t.by instanceof Array&&t.by.length>1,`Multiple: "by" must be an array of two or more ids`);var i=this.getLookupTables(n,r,e,2,!0)[0],a=IH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});K.assert(a.coverage.format===1,`Multiple: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.sequences.splice(s,0,0)),a.sequences[s]=t.by},PH.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,!0)[0],a=IH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});K.assert(a.coverage.format===1,`Alternate: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.alternateSets.splice(s,0,0)),a.alternateSets[s]=t.by},PH.prototype.addLigature=function(e,t,n,r){var i=this.getLookupTables(n,r,e,4,!0)[0],a=i.subtables[0];a||(a={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},i.subtables[0]=a),K.assert(a.coverage.format===1,`Ligature: unable to modify coverage table format `+a.coverage.format);var o=t.sub[0],s=t.sub.slice(1),c={ligGlyph:t.by,components:s},l=this.binSearch(a.coverage.glyphs,o);if(l>=0){for(var u=a.ligatureSets[l],d=0;d<u.length;d++)if(FH(u[d].components,s))return;u.push(c)}else l=-1-l,a.coverage.glyphs.splice(l,0,o),a.ligatureSets.splice(l,0,[c])},PH.prototype.getFeature=function(e,t,n){if(/ss\d\d/.test(e))return this.getSingle(e,t,n);switch(e){case`aalt`:case`salt`:return this.getSingle(e,t,n).concat(this.getAlternates(e,t,n));case`dlig`:case`liga`:case`rlig`:return this.getLigatures(e,t,n);case`ccmp`:return this.getMultiple(e,t,n).concat(this.getLigatures(e,t,n));case`stch`:return this.getMultiple(e,t,n)}},PH.prototype.add=function(e,t,n,r){if(/ss\d\d/.test(e))return this.addSingle(e,t,n,r);switch(e){case`aalt`:case`salt`:return typeof t.by==`number`?this.addSingle(e,t,n,r):this.addAlternate(e,t,n,r);case`dlig`:case`liga`:case`rlig`:return this.addLigature(e,t,n,r);case`ccmp`:return t.by instanceof Array?this.addMultiple(e,t,n,r):this.addLigature(e,t,n,r)}};function LH(){return typeof window<`u`}function RH(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;++r)n[r]=e[r];return t}function zH(e){for(var t=new Buffer(e.byteLength),n=new Uint8Array(e),r=0;r<t.length;++r)t[r]=n[r];return t}function BH(e,t){if(!e)throw t}function VH(e,t,n,r,i){var a;return(t&r)>0?(a=e.parseByte(),(t&i)===0&&(a=-a),a=n+a):a=(t&i)>0?n:n+e.parseShort(),a}function HH(e,t,n){var r=new Z.Parser(t,n);e.numberOfContours=r.parseShort(),e._xMin=r.parseShort(),e._yMin=r.parseShort(),e._xMax=r.parseShort(),e._yMax=r.parseShort();var i,a;if(e.numberOfContours>0){for(var o=e.endPointIndices=[],s=0;s<e.numberOfContours;s+=1)o.push(r.parseUShort());e.instructionLength=r.parseUShort(),e.instructions=[];for(var c=0;c<e.instructionLength;c+=1)e.instructions.push(r.parseByte());var l=o[o.length-1]+1;i=[];for(var u=0;u<l;u+=1)if(a=r.parseByte(),i.push(a),(a&8)>0)for(var d=r.parseByte(),f=0;f<d;f+=1)i.push(a),u+=1;if(K.argument(i.length===l,`Bad flags.`),o.length>0){var p=[],m;if(l>0){for(var h=0;h<l;h+=1)a=i[h],m={},m.onCurve=!!(a&1),m.lastPointOfContour=o.indexOf(h)>=0,p.push(m);for(var g=0,_=0;_<l;_+=1)a=i[_],m=p[_],m.x=VH(r,a,g,2,16),g=m.x;for(var v=0,y=0;y<l;y+=1)a=i[y],m=p[y],m.y=VH(r,a,v,4,32),v=m.y}e.points=p}else e.points=[]}else if(e.numberOfContours===0)e.points=[];else{e.isComposite=!0,e.points=[],e.components=[];for(var b=!0;b;){i=r.parseUShort();var x={glyphIndex:r.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};(i&1)>0?(i&2)>0?(x.dx=r.parseShort(),x.dy=r.parseShort()):x.matchedPoints=[r.parseUShort(),r.parseUShort()]:(i&2)>0?(x.dx=r.parseChar(),x.dy=r.parseChar()):x.matchedPoints=[r.parseByte(),r.parseByte()],(i&8)>0?x.xScale=x.yScale=r.parseF2Dot14():(i&64)>0?(x.xScale=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()):(i&128)>0&&(x.xScale=r.parseF2Dot14(),x.scale01=r.parseF2Dot14(),x.scale10=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()),e.components.push(x),b=!!(i&32)}if(i&256){e.instructionLength=r.parseUShort(),e.instructions=[];for(var S=0;S<e.instructionLength;S+=1)e.instructions.push(r.parseByte())}}}function UH(e,t){for(var n=[],r=0;r<e.length;r+=1){var i=e[r],a={x:t.xScale*i.x+t.scale01*i.y+t.dx,y:t.scale10*i.x+t.yScale*i.y+t.dy,onCurve:i.onCurve,lastPointOfContour:i.lastPointOfContour};n.push(a)}return n}function WH(e){for(var t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];n.push(i),i.lastPointOfContour&&(t.push(n),n=[])}return K.argument(n.length===0,`There are still points left in the current contour.`),t}function GH(e){var t=new Pz;if(!e)return t;for(var n=WH(e),r=0;r<n.length;++r){var i=n[r],a=null,o=i[i.length-1],s=i[0];if(o.onCurve)t.moveTo(o.x,o.y);else if(s.onCurve)t.moveTo(s.x,s.y);else{var c={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5};t.moveTo(c.x,c.y)}for(var l=0;l<i.length;++l)if(a=o,o=s,s=i[(l+1)%i.length],o.onCurve)t.lineTo(o.x,o.y);else{var u=s;a.onCurve||((o.x+a.x)*.5,(o.y+a.y)*.5),s.onCurve||(u={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5}),t.quadraticCurveTo(o.x,o.y,u.x,u.y)}t.closePath()}return t}function KH(e,t){if(t.isComposite)for(var n=0;n<t.components.length;n+=1){var r=t.components[n],i=e.get(r.glyphIndex);if(i.getPath(),i.points){var a=void 0;if(r.matchedPoints===void 0)a=UH(i.points,r);else{if(r.matchedPoints[0]>t.points.length-1||r.matchedPoints[1]>i.points.length-1)throw Error(`Matched points out of range in `+t.name);var o=t.points[r.matchedPoints[0]],s=i.points[r.matchedPoints[1]],c={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};s=UH([s],c)[0],c.dx=o.x-s.x,c.dy=o.y-s.y,a=UH(i.points,c)}t.points=t.points.concat(a)}}return GH(t.points)}function qH(e,t,n,r){for(var i=new HB.GlyphSet(r),a=0;a<n.length-1;a+=1){var o=n[a];o===n[a+1]?i.push(a,HB.glyphLoader(r,a)):i.push(a,HB.ttfGlyphLoader(r,a,HH,e,t+o,KH))}return i}function JH(e,t,n,r){var i=new HB.GlyphSet(r);return r._push=function(a){var o=n[a];o===n[a+1]?i.push(a,HB.glyphLoader(r,a)):i.push(a,HB.ttfGlyphLoader(r,a,HH,e,t+o,KH))},i}function YH(e,t,n,r,i){return i.lowMemory?JH(e,t,n,r):qH(e,t,n,r)}var XH={getPath:GH,parse:YH},ZH,QH,$H,eU;function tU(e){this.font=e,this.getCommands=function(e){return XH.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function nU(e){return e}function rU(e){return Math.sign(e)*Math.round(Math.abs(e))}function iU(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function aU(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function oU(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function sU(e){return Math.sign(e)*Math.floor(Math.abs(e))}var cU=function(e){var t=this.srPeriod,n=this.srPhase,r=this.srThreshold,i=1;return e<0&&(e=-e,i=-1),e+=r-n,e=Math.trunc(e/t)*t,e+=n,e<0?n*i:e*i},lU={x:1,y:0,axis:`x`,distance:function(e,t,n,r){return(n?e.xo:e.x)-(r?t.xo:t.x)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.xo-t.xo,a=e.xo-n.xo,c=t.x-t.xo,l=n.x-n.xo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.x=e.xo+(c+l)/2;return}e.x=e.xo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){lU.setRelative(e,e,(c+l)/2,r,!0);return}lU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:-1/0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.x=(i?t.xo:t.x)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y;e.x=s+(e.y-c)/r.normalSlope},slope:0,touch:function(e){e.xTouched=!0},touched:function(e){return e.xTouched},untouch:function(e){e.xTouched=!1}},uU={x:0,y:1,axis:`y`,distance:function(e,t,n,r){return(n?e.yo:e.y)-(r?t.yo:t.y)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.yo-t.yo,a=e.yo-n.yo,c=t.y-t.yo,l=n.y-n.yo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.y=e.yo+(c+l)/2;return}e.y=e.yo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){uU.setRelative(e,e,(c+l)/2,r,!0);return}uU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.y=(i?t.yo:t.y)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x;e.y=o+n*r.y+r.normalSlope*(e.x-s)},slope:1/0,touch:function(e){e.yTouched=!0},touched:function(e){return e.yTouched},untouch:function(e){e.yTouched=!1}};Object.freeze(lU),Object.freeze(uU);function dU(e,t){this.x=e,this.y=t,this.axis=void 0,this.slope=t/e,this.normalSlope=-e/t,Object.freeze(this)}dU.prototype.distance=function(e,t,n,r){return this.x*lU.distance(e,t,n,r)+this.y*uU.distance(e,t,n,r)},dU.prototype.interpolate=function(e,t,n,r){var i,a,o=r.distance(e,t,!0,!0),s=r.distance(e,n,!0,!0),c,l,u;if(i=r.distance(t,t,!1,!0),a=r.distance(n,n,!1,!0),c=Math.abs(o),l=Math.abs(s),u=c+l,u===0){this.setRelative(e,e,(i+a)/2,r,!0);return}this.setRelative(e,e,(i*l+a*c)/u,r,!0)},dU.prototype.setRelative=function(e,t,n,r,i){r||=this;var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y,l=r.normalSlope,u=this.slope,d=e.x,f=e.y;e.x=(u*d-l*s+c-f)/(u-l),e.y=u*(e.x-d)+f},dU.prototype.touch=function(e){e.xTouched=!0,e.yTouched=!0};function fU(e,t){var n=Math.sqrt(e*e+t*t);return e/=n,t/=n,e===1&&t===0?lU:e===0&&t===1?uU:new dU(e,t)}function pU(e,t,n,r){this.x=this.xo=Math.round(e*64)/64,this.y=this.yo=Math.round(t*64)/64,this.lastPointOfContour=n,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}pU.prototype.nextTouched=function(e){for(var t=this.nextPointOnContour;!e.touched(t)&&t!==this;)t=t.nextPointOnContour;return t},pU.prototype.prevTouched=function(e){for(var t=this.prevPointOnContour;!e.touched(t)&&t!==this;)t=t.prevPointOnContour;return t};var mU=Object.freeze(new pU(0,0)),hU={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function gU(e,t){switch(this.env=e,this.stack=[],this.prog=t,e){case`glyf`:this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case`prep`:this.fv=this.pv=this.dpv=lU,this.round=rU}}tU.prototype.exec=function(e,t){if(typeof t!=`number`)throw Error(`Point size is not a number!`);if(!(this._errorState>2)){var n=this.font,r=this._prepState;if(!r||r.ppem!==t){var i=this._fpgmState;if(!i){gU.prototype=hU,i=this._fpgmState=new gU(`fpgm`,n.tables.fpgm),i.funcs=[],i.font=n,exports.DEBUG&&(console.log(`---EXEC FPGM---`),i.step=-1);try{QH(i)}catch(e){console.log(`Hinting error in FPGM:`+e),this._errorState=3;return}}gU.prototype=i,r=this._prepState=new gU(`prep`,n.tables.prep),r.ppem=t;var a=n.tables.cvt;if(a)for(var o=r.cvt=Array(a.length),s=t/n.unitsPerEm,c=0;c<a.length;c++)o[c]=a[c]*s;else r.cvt=[];exports.DEBUG&&(console.log(`---EXEC PREP---`),r.step=-1);try{QH(r)}catch(e){this._errorState<2&&console.log(`Hinting error in PREP:`+e),this._errorState=2}}if(!(this._errorState>1))try{return $H(e,r)}catch(e){this._errorState<1&&(console.log(`Hinting error:`+e),console.log(`Note: further hinting errors are silenced`)),this._errorState=1;return}}},$H=function(e,t){var n=t.ppem/t.font.unitsPerEm,r=n,i=e.components,a,o,s;if(gU.prototype=t,!i)s=new gU(`glyf`,e.instructions),exports.DEBUG&&(console.log(`---EXEC GLYPH---`),s.step=-1),eU(e,s,n,r),o=s.gZone;else{var c=t.font;o=[],a=[];for(var l=0;l<i.length;l++){var u=i[l],d=c.glyphs.get(u.glyphIndex);s=new gU(`glyf`,d.instructions),exports.DEBUG&&(console.log(`---EXEC COMP `+l+`---`),s.step=-1),eU(d,s,n,r);for(var f=Math.round(u.dx*n),p=Math.round(u.dy*r),m=s.gZone,h=s.contours,g=0;g<m.length;g++){var _=m[g];_.xTouched=_.yTouched=!1,_.xo=_.x+=f,_.yo=_.y+=p}var v=o.length;o.push.apply(o,m);for(var y=0;y<h.length;y++)a.push(h[y]+v)}e.instructions&&!s.inhibitGridFit&&(s=new gU(`glyf`,e.instructions),s.gZone=s.z0=s.z1=s.z2=o,s.contours=a,o.push(new pU(0,0),new pU(Math.round(e.advanceWidth*n),0)),exports.DEBUG&&(console.log(`---EXEC COMPOSITE---`),s.step=-1),QH(s),o.length-=2)}return o},eU=function(e,t,n,r){for(var i=e.points||[],a=i.length,o=t.gZone=t.z0=t.z1=t.z2=[],s=t.contours=[],c,l=0;l<a;l++)c=i[l],o[l]=new pU(c.x*n,c.y*r,c.lastPointOfContour,c.onCurve);for(var u,d,f=0;f<a;f++)c=o[f],u||(u=c,s.push(f)),c.lastPointOfContour?(c.nextPointOnContour=u,u.prevPointOnContour=c,u=void 0):(d=o[f+1],c.nextPointOnContour=d,d.prevPointOnContour=c);if(!t.inhibitGridFit){if(exports.DEBUG){console.log(`PROCESSING GLYPH`,t.stack);for(var p=0;p<a;p++)console.log(p,o[p].x,o[p].y)}if(o.push(new pU(0,0),new pU(Math.round(e.advanceWidth*n),0)),QH(t),o.length-=2,exports.DEBUG){console.log(`FINISHED GLYPH`,t.stack);for(var m=0;m<a;m++)console.log(m,o[m].x,o[m].y)}}},QH=function(e){var t=e.prog;if(t){var n=t.length,r;for(e.ip=0;e.ip<n;e.ip++){if(exports.DEBUG&&e.step++,r=ZH[t[e.ip]],!r)throw Error(`unknown instruction: 0x`+Number(t[e.ip]).toString(16));r(e)}}};function _U(e){for(var t=e.tZone=Array(e.gZone.length),n=0;n<t.length;n++)t[n]=new pU(0,0)}function vU(e,t){var n=e.prog,r=e.ip,i=1,a;do if(a=n[++r],a===88)i++;else if(a===89)i--;else if(a===64)r+=n[r+1]+1;else if(a===65)r+=2*n[r+1]+1;else if(a>=176&&a<=183)r+=a-176+1;else if(a>=184&&a<=191)r+=(a-184+1)*2;else if(t&&i===1&&a===27)break;while(i>0);e.ip=r}function yU(e,t){exports.DEBUG&&console.log(t.step,`SVTCA[`+e.axis+`]`),t.fv=t.pv=t.dpv=e}function bU(e,t){exports.DEBUG&&console.log(t.step,`SPVTCA[`+e.axis+`]`),t.pv=t.dpv=e}function xU(e,t){exports.DEBUG&&console.log(t.step,`SFVTCA[`+e.axis+`]`),t.fv=e}function SU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.pv=t.dpv=fU(s,c)}function CU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SFVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.fv=fU(s,c)}function wU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.pv=e.dpv=fU(r,n)}function TU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.fv=fU(r,n)}function EU(e){var t=e.stack,n=e.pv;exports.DEBUG&&console.log(e.step,`GPV[]`),t.push(n.x*16384),t.push(n.y*16384)}function DU(e){var t=e.stack,n=e.fv;exports.DEBUG&&console.log(e.step,`GFV[]`),t.push(n.x*16384),t.push(n.y*16384)}function OU(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,`SFVTPV[]`)}function kU(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop(),a=t.pop(),o=t.pop(),s=e.z0,c=e.z1,l=s[n],u=s[r],d=c[i],f=c[a],p=e.z2[o];exports.DEBUG&&console.log(`ISECT[], `,n,r,i,a,o);var m=l.x,h=l.y,g=u.x,_=u.y,v=d.x,y=d.y,b=f.x,x=f.y,S=(m-g)*(y-x)-(h-_)*(v-b),C=m*_-h*g,w=v*x-y*b;p.x=(C*(v-b)-w*(m-g))/S,p.y=(C*(y-x)-w*(h-_))/S}function AU(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP0[]`,e.rp0)}function jU(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP1[]`,e.rp1)}function MU(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP2[]`,e.rp2)}function NU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP0[]`,t),e.zp0=t,t){case 0:e.tZone||_U(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function PU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP1[]`,t),e.zp1=t,t){case 0:e.tZone||_U(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function FU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP2[]`,t),e.zp2=t,t){case 0:e.tZone||_U(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function IU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZPS[]`,t),e.zp0=e.zp1=e.zp2=t,t){case 0:e.tZone||_U(e),e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function LU(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SLOOP[]`,e.loop)}function RU(e){exports.DEBUG&&console.log(e.step,`RTG[]`),e.round=rU}function zU(e){exports.DEBUG&&console.log(e.step,`RTHG[]`),e.round=aU}function BU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SMD[]`,t),e.minDis=t/64}function VU(e){exports.DEBUG&&console.log(e.step,`ELSE[]`),vU(e,!1)}function HU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`JMPR[]`,t),e.ip+=t-1}function UU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCVTCI[]`,t),e.cvCutIn=t/64}function WU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DUP[]`),t.push(t[t.length-1])}function GU(e){exports.DEBUG&&console.log(e.step,`POP[]`),e.stack.pop()}function KU(e){exports.DEBUG&&console.log(e.step,`CLEAR[]`),e.stack.length=0}function qU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SWAP[]`),t.push(n),t.push(r)}function JU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DEPTH[]`),t.push(t.length)}function YU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LOOPCALL[]`,n,r);var i=e.ip,a=e.prog;e.prog=e.funcs[n];for(var o=0;o<r;o++)QH(e),exports.DEBUG&&console.log(++e.step,o+1<r?`next loopcall`:`done loopcall`,o);e.ip=i,e.prog=a}function XU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`CALL[]`,t);var n=e.ip,r=e.prog;e.prog=e.funcs[t],QH(e),e.ip=n,e.prog=r,exports.DEBUG&&console.log(++e.step,`returning from`,t)}function ZU(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CINDEX[]`,n),t.push(t[t.length-n])}function QU(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`MINDEX[]`,n),t.push(t.splice(t.length-n,1)[0])}function $U(e){if(e.env!==`fpgm`)throw Error(`FDEF not allowed here`);var t=e.stack,n=e.prog,r=e.ip,i=t.pop(),a=r;for(exports.DEBUG&&console.log(e.step,`FDEF[]`,i);n[++r]!==45;);e.ip=r,e.funcs[i]=n.slice(a+1,r)}function eW(e,t){var n=t.stack.pop(),r=t.z0[n],i=t.fv,a=t.pv;exports.DEBUG&&console.log(t.step,`MDAP[`+e+`]`,n);var o=a.distance(r,mU);e&&(o=t.round(o)),i.setRelative(r,mU,o,a),i.touch(r),t.rp0=t.rp1=n}function tW(e,t){var n=t.z2,r=n.length-2,i,a,o;exports.DEBUG&&console.log(t.step,`IUP[`+e.axis+`]`);for(var s=0;s<r;s++)i=n[s],!e.touched(i)&&(a=i.prevTouched(e),a!==i&&(o=i.nextTouched(e),a===o&&e.setRelative(i,i,e.distance(a,a,!1,!0),e,!0),e.interpolate(i,a,o,e)))}function nW(e,t){for(var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=t.loop,c=t.z2;s--;){var l=n.pop(),u=c[l],d=o.distance(i,i,!1,!0);a.setRelative(u,u,d,o),a.touch(u),exports.DEBUG&&console.log(t.step,(t.loop>1?`loop `+(t.loop-s)+`: `:``)+`SHP[`+(e?`rp1`:`rp2`)+`]`,l)}t.loop=1}function rW(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop(),c=t.z2[t.contours[s]],l=c;exports.DEBUG&&console.log(t.step,`SHC[`+e+`]`,s);var u=o.distance(i,i,!1,!0);do l!==i&&a.setRelative(l,l,u,o),l=l.nextPointOnContour;while(l!==c)}function iW(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop();exports.DEBUG&&console.log(t.step,`SHZ[`+e+`]`,s);var c;switch(s){case 0:c=t.tZone;break;case 1:c=t.gZone;break;default:throw Error(`Invalid zone`)}for(var l,u=o.distance(i,i,!1,!0),d=c.length-2,f=0;f<d;f++)l=c[f],a.setRelative(l,l,u,o)}function aW(e){for(var t=e.stack,n=e.loop,r=e.fv,i=t.pop()/64,a=e.z2;n--;){var o=t.pop(),s=a[o];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-n)+`: `:``)+`SHPIX[]`,o,i),r.setRelative(s,s,i),r.touch(s)}e.loop=1}function oW(e){for(var t=e.stack,n=e.rp1,r=e.rp2,i=e.loop,a=e.z0[n],o=e.z1[r],s=e.fv,c=e.dpv,l=e.z2;i--;){var u=t.pop(),d=l[u];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`IP[]`,u,n,`<->`,r),s.interpolate(d,a,o,c),s.touch(d)}e.loop=1}function sW(e,t){var n=t.stack,r=n.pop()/64,i=n.pop(),a=t.z1[i],o=t.z0[t.rp0],s=t.fv,c=t.pv;s.setRelative(a,o,r,c),s.touch(a),exports.DEBUG&&console.log(t.step,`MSIRP[`+e+`]`,r,i),t.rp1=t.rp0,t.rp2=i,e&&(t.rp0=i)}function cW(e){for(var t=e.stack,n=e.rp0,r=e.z0[n],i=e.loop,a=e.fv,o=e.pv,s=e.z1;i--;){var c=t.pop(),l=s[c];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`ALIGNRP[]`,c),a.setRelative(l,r,0,o),a.touch(l)}e.loop=1}function lW(e){exports.DEBUG&&console.log(e.step,`RTDG[]`),e.round=iU}function uW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z0[i],o=t.fv,s=t.pv,c=t.cvt[r];exports.DEBUG&&console.log(t.step,`MIAP[`+e+`]`,r,`(`,c,`)`,i);var l=s.distance(a,mU);e&&(Math.abs(l-c)<t.cvCutIn&&(l=c),l=t.round(l)),o.setRelative(a,mU,l,s),t.zp0===0&&(a.xo=a.x,a.yo=a.y),o.touch(a),t.rp0=t.rp1=i}function dW(e){var t=e.prog,n=e.ip,r=e.stack,i=t[++n];exports.DEBUG&&console.log(e.step,`NPUSHB[]`,i);for(var a=0;a<i;a++)r.push(t[++n]);e.ip=n}function fW(e){var t=e.ip,n=e.prog,r=e.stack,i=n[++t];exports.DEBUG&&console.log(e.step,`NPUSHW[]`,i);for(var a=0;a<i;a++){var o=n[++t]<<8|n[++t];o&32768&&(o=-((o^65535)+1)),r.push(o)}e.ip=t}function pW(e){var t=e.stack,n=e.store;n||=e.store=[];var r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`WS`,r,i),n[i]=r}function mW(e){var t=e.stack,n=e.store,r=t.pop();exports.DEBUG&&console.log(e.step,`RS`,r);var i=n&&n[r]||0;t.push(i)}function hW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTP`,n,r),e.cvt[r]=n/64}function gW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`RCVT`,n),t.push(e.cvt[n]*64)}function _W(e,t){var n=t.stack,r=n.pop(),i=t.z2[r];exports.DEBUG&&console.log(t.step,`GC[`+e+`]`,r),n.push(t.dpv.distance(i,mU,e,!1)*64)}function vW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z1[r],o=t.z0[i],s=t.dpv.distance(o,a,e,e);exports.DEBUG&&console.log(t.step,`MD[`+e+`]`,r,i,`->`,s),t.stack.push(Math.round(s*64))}function yW(e){exports.DEBUG&&console.log(e.step,`MPPEM[]`),e.stack.push(e.ppem)}function bW(e){exports.DEBUG&&console.log(e.step,`FLIPON[]`),e.autoFlip=!0}function xW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LT[]`,n,r),t.push(+(r<n))}function SW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LTEQ[]`,n,r),t.push(+(r<=n))}function CW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GT[]`,n,r),t.push(+(r>n))}function wW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GTEQ[]`,n,r),t.push(+(r>=n))}function TW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`EQ[]`,n,r),t.push(+(n===r))}function EW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`NEQ[]`,n,r),t.push(n===r?0:1)}function DW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ODD[]`,n),t.push(Math.trunc(n)%2?1:0)}function OW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`EVEN[]`,n),t.push(Math.trunc(n)%2?0:1)}function kW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`IF[]`,t),t||(vU(e,!0),exports.DEBUG&&console.log(e.step,`EIF[]`))}function AW(e){exports.DEBUG&&console.log(e.step,`EIF[]`)}function jW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`AND[]`,n,r),t.push(n&&r?1:0)}function MW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`OR[]`,n,r),t.push(n||r?1:0)}function NW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NOT[]`,n),t.push(+!n)}function PW(e,t){var n=t.stack,r=n.pop(),i=t.fv,a=t.pv,o=t.ppem,s=t.deltaBase+(e-1)*16,c=t.deltaShift,l=t.z0;exports.DEBUG&&console.log(t.step,`DELTAP[`+e+`]`,r,n);for(var u=0;u<r;u++){var d=n.pop(),f=n.pop();if(s+((f&240)>>4)===o){var p=(f&15)-8;p>=0&&p++,exports.DEBUG&&console.log(t.step,`DELTAPFIX`,d,`by`,p*c);var m=l[d];i.setRelative(m,m,p*c,a)}}}function FW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDB[]`,t),e.deltaBase=t}function IW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDS[]`,t),e.deltaShift=.5**t}function LW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`ADD[]`,n,r),t.push(r+n)}function RW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SUB[]`,n,r),t.push(r-n)}function zW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`DIV[]`,n,r),t.push(r*64/n)}function BW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MUL[]`,n,r),t.push(r*n/64)}function VW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ABS[]`,n),t.push(Math.abs(n))}function HW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NEG[]`,n),t.push(-n)}function UW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`FLOOR[]`,n),t.push(Math.floor(n/64)*64)}function WW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CEILING[]`,n),t.push(Math.ceil(n/64)*64)}function GW(e,t){var n=t.stack,r=n.pop();exports.DEBUG&&console.log(t.step,`ROUND[]`),n.push(t.round(r/64)*64)}function KW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTF[]`,n,r),e.cvt[r]=n*e.ppem/e.font.unitsPerEm}function qW(e,t){var n=t.stack,r=n.pop(),i=t.ppem,a=t.deltaBase+(e-1)*16,o=t.deltaShift;exports.DEBUG&&console.log(t.step,`DELTAC[`+e+`]`,r,n);for(var s=0;s<r;s++){var c=n.pop(),l=n.pop();if(a+((l&240)>>4)===i){var u=(l&15)-8;u>=0&&u++;var d=u*o;exports.DEBUG&&console.log(t.step,`DELTACFIX`,c,`by`,d),t.cvt[c]+=d}}}function JW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SROUND[]`,t),e.round=cU;var n;switch(t&192){case 0:n=.5;break;case 64:n=1;break;case 128:n=2;break;default:throw Error(`invalid SROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid SROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function YW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`S45ROUND[]`,t),e.round=cU;var n;switch(t&192){case 0:n=Math.sqrt(2)/2;break;case 64:n=Math.sqrt(2);break;case 128:n=2*Math.sqrt(2);break;default:throw Error(`invalid S45ROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid S45ROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function XW(e){exports.DEBUG&&console.log(e.step,`ROFF[]`),e.round=nU}function ZW(e){exports.DEBUG&&console.log(e.step,`RUTG[]`),e.round=oU}function QW(e){exports.DEBUG&&console.log(e.step,`RDTG[]`),e.round=sU}function $W(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANCTRL[]`,t)}function eG(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(t.step,`SDPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.dpv=fU(s,c)}function tG(e){var t=e.stack,n=t.pop(),r=0;exports.DEBUG&&console.log(e.step,`GETINFO[]`,n),n&1&&(r=35),n&32&&(r|=4096),t.push(r)}function nG(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`ROLL[]`),t.push(r),t.push(n),t.push(i)}function rG(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MAX[]`,n,r),t.push(Math.max(r,n))}function iG(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MIN[]`,n,r),t.push(Math.min(r,n))}function aG(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANTYPE[]`,t)}function oG(e){var t=e.stack.pop(),n=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`INSTCTRL[]`,t,n),t){case 1:e.inhibitGridFit=!!n;return;case 2:e.ignoreCvt=!!n;return;default:throw Error(`invalid INSTCTRL[] selector`)}}function sG(e,t){var n=t.stack,r=t.prog,i=t.ip;exports.DEBUG&&console.log(t.step,`PUSHB[`+e+`]`);for(var a=0;a<e;a++)n.push(r[++i]);t.ip=i}function cG(e,t){var n=t.ip,r=t.prog,i=t.stack;exports.DEBUG&&console.log(t.ip,`PUSHW[`+e+`]`);for(var a=0;a<e;a++){var o=r[++n]<<8|r[++n];o&32768&&(o=-((o^65535)+1)),i.push(o)}t.ip=n}function Q(e,t,n,r,i,a){var o=a.stack,s=e&&o.pop(),c=o.pop(),l=a.rp0,u=a.z0[l],d=a.z1[c],f=a.minDis,p=a.fv,m=a.dpv,h,g=h=m.distance(d,u,!0,!0),_=g>=0?1:-1,v;g=Math.abs(g),e&&(v=a.cvt[s],r&&Math.abs(g-v)<a.cvCutIn&&(g=v)),n&&g<f&&(g=f),r&&(g=a.round(g)),p.setRelative(d,u,_*g,m),p.touch(d),exports.DEBUG&&console.log(a.step,(e?`MIRP[`:`MDRP[`)+(t?`M`:`m`)+(n?`>`:`_`)+(r?`R`:`_`)+(i===0?`Gr`:i===1?`Bl`:i===2?`Wh`:``)+`]`,e?s+`(`+a.cvt[s]+`,`+v+`)`:``,c,`(d =`,h,`->`,_*g,`)`),a.rp1=a.rp0,a.rp2=c,t&&(a.rp0=c)}ZH=[yU.bind(void 0,uU),yU.bind(void 0,lU),bU.bind(void 0,uU),bU.bind(void 0,lU),xU.bind(void 0,uU),xU.bind(void 0,lU),SU.bind(void 0,0),SU.bind(void 0,1),CU.bind(void 0,0),CU.bind(void 0,1),wU,TU,EU,DU,OU,kU,AU,jU,MU,NU,PU,FU,IU,LU,RU,zU,BU,VU,HU,UU,void 0,void 0,WU,GU,KU,qU,JU,ZU,QU,void 0,void 0,void 0,YU,XU,$U,void 0,eW.bind(void 0,0),eW.bind(void 0,1),tW.bind(void 0,uU),tW.bind(void 0,lU),nW.bind(void 0,0),nW.bind(void 0,1),rW.bind(void 0,0),rW.bind(void 0,1),iW.bind(void 0,0),iW.bind(void 0,1),aW,oW,sW.bind(void 0,0),sW.bind(void 0,1),cW,lW,uW.bind(void 0,0),uW.bind(void 0,1),dW,fW,pW,mW,hW,gW,_W.bind(void 0,0),_W.bind(void 0,1),void 0,vW.bind(void 0,0),vW.bind(void 0,1),yW,void 0,bW,void 0,void 0,xW,SW,CW,wW,TW,EW,DW,OW,kW,AW,jW,MW,NW,PW.bind(void 0,1),FW,IW,LW,RW,zW,BW,VW,HW,UW,WW,GW.bind(void 0,0),GW.bind(void 0,1),GW.bind(void 0,2),GW.bind(void 0,3),void 0,void 0,void 0,void 0,KW,PW.bind(void 0,2),PW.bind(void 0,3),qW.bind(void 0,1),qW.bind(void 0,2),qW.bind(void 0,3),JW,YW,void 0,void 0,XW,void 0,ZW,QW,GU,GU,void 0,void 0,void 0,void 0,void 0,$W,eG.bind(void 0,0),eG.bind(void 0,1),tG,void 0,nG,rG,iG,aG,oG,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,sG.bind(void 0,1),sG.bind(void 0,2),sG.bind(void 0,3),sG.bind(void 0,4),sG.bind(void 0,5),sG.bind(void 0,6),sG.bind(void 0,7),sG.bind(void 0,8),cG.bind(void 0,1),cG.bind(void 0,2),cG.bind(void 0,3),cG.bind(void 0,4),cG.bind(void 0,5),cG.bind(void 0,6),cG.bind(void 0,7),cG.bind(void 0,8),Q.bind(void 0,0,0,0,0,0),Q.bind(void 0,0,0,0,0,1),Q.bind(void 0,0,0,0,0,2),Q.bind(void 0,0,0,0,0,3),Q.bind(void 0,0,0,0,1,0),Q.bind(void 0,0,0,0,1,1),Q.bind(void 0,0,0,0,1,2),Q.bind(void 0,0,0,0,1,3),Q.bind(void 0,0,0,1,0,0),Q.bind(void 0,0,0,1,0,1),Q.bind(void 0,0,0,1,0,2),Q.bind(void 0,0,0,1,0,3),Q.bind(void 0,0,0,1,1,0),Q.bind(void 0,0,0,1,1,1),Q.bind(void 0,0,0,1,1,2),Q.bind(void 0,0,0,1,1,3),Q.bind(void 0,0,1,0,0,0),Q.bind(void 0,0,1,0,0,1),Q.bind(void 0,0,1,0,0,2),Q.bind(void 0,0,1,0,0,3),Q.bind(void 0,0,1,0,1,0),Q.bind(void 0,0,1,0,1,1),Q.bind(void 0,0,1,0,1,2),Q.bind(void 0,0,1,0,1,3),Q.bind(void 0,0,1,1,0,0),Q.bind(void 0,0,1,1,0,1),Q.bind(void 0,0,1,1,0,2),Q.bind(void 0,0,1,1,0,3),Q.bind(void 0,0,1,1,1,0),Q.bind(void 0,0,1,1,1,1),Q.bind(void 0,0,1,1,1,2),Q.bind(void 0,0,1,1,1,3),Q.bind(void 0,1,0,0,0,0),Q.bind(void 0,1,0,0,0,1),Q.bind(void 0,1,0,0,0,2),Q.bind(void 0,1,0,0,0,3),Q.bind(void 0,1,0,0,1,0),Q.bind(void 0,1,0,0,1,1),Q.bind(void 0,1,0,0,1,2),Q.bind(void 0,1,0,0,1,3),Q.bind(void 0,1,0,1,0,0),Q.bind(void 0,1,0,1,0,1),Q.bind(void 0,1,0,1,0,2),Q.bind(void 0,1,0,1,0,3),Q.bind(void 0,1,0,1,1,0),Q.bind(void 0,1,0,1,1,1),Q.bind(void 0,1,0,1,1,2),Q.bind(void 0,1,0,1,1,3),Q.bind(void 0,1,1,0,0,0),Q.bind(void 0,1,1,0,0,1),Q.bind(void 0,1,1,0,0,2),Q.bind(void 0,1,1,0,0,3),Q.bind(void 0,1,1,0,1,0),Q.bind(void 0,1,1,0,1,1),Q.bind(void 0,1,1,0,1,2),Q.bind(void 0,1,1,0,1,3),Q.bind(void 0,1,1,1,0,0),Q.bind(void 0,1,1,1,0,1),Q.bind(void 0,1,1,1,0,2),Q.bind(void 0,1,1,1,0,3),Q.bind(void 0,1,1,1,1,0),Q.bind(void 0,1,1,1,1,1),Q.bind(void 0,1,1,1,1,2),Q.bind(void 0,1,1,1,1,3)];function lG(e){this.char=e,this.state={},this.activeState=null}function uG(e,t,n){this.contextName=n,this.startIndex=e,this.endOffset=t}function dG(e,t,n){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=n}function fG(e,t){this.context=e,this.index=t,this.length=e.length,this.current=e[t],this.backtrack=e.slice(0,t),this.lookahead=e.slice(t+1)}function pG(e){this.eventId=e,this.subscribers=[]}function mG(e){var t=this,n=[`start`,`end`,`next`,`newToken`,`contextStart`,`contextEnd`,`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`,`updateContextsRanges`];n.forEach(function(e){Object.defineProperty(t.events,e,{value:new pG(e)})}),e&&n.forEach(function(n){var r=e[n];typeof r==`function`&&t.events[n].subscribe(r)}),[`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`].forEach(function(e){t.events[e].subscribe(t.updateContextsRanges)})}function hG(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],mG.call(this,e)}lG.prototype.setState=function(e,t){return this.state[e]=t,this.activeState={key:e,value:this.state[e]},this.activeState},lG.prototype.getState=function(e){return this.state[e]||null},hG.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length},hG.prototype.composeRUD=function(e){var t=this,n=!0,r=e.map(function(e){return t[e[0]].apply(t,e.slice(1).concat(n))}),i=function(e){return typeof e==`object`&&e.hasOwnProperty(`FAIL`)};if(r.every(i))return{FAIL:`composeRUD: one or more operations hasn't completed successfully`,report:r.filter(i)};this.dispatch(`composeRUD`,[r.filter(function(e){return!i(e)})])},hG.prototype.replaceRange=function(e,t,n,r){t=t===null?this.tokens.length:t;var i=n.every(function(e){return e instanceof lG});if(!isNaN(e)&&this.inboundIndex(e)&&i){var a=this.tokens.splice.apply(this.tokens,[e,t].concat(n));return r||this.dispatch(`replaceToken`,[e,t,n]),[a,n]}else return{FAIL:`replaceRange: invalid tokens or startIndex.`}},hG.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof lG){var r=this.tokens.splice(e,1,t);return n||this.dispatch(`replaceToken`,[e,t]),[r[0],t]}else return{FAIL:`replaceToken: invalid token or index.`}},hG.prototype.removeRange=function(e,t,n){t=isNaN(t)?this.tokens.length:t;var r=this.tokens.splice(e,t);return n||this.dispatch(`removeRange`,[r,e,t]),r},hG.prototype.removeToken=function(e,t){if(!isNaN(e)&&this.inboundIndex(e)){var n=this.tokens.splice(e,1);return t||this.dispatch(`removeToken`,[n,e]),n}else return{FAIL:`removeToken: invalid token index.`}},hG.prototype.insertToken=function(e,t,n){return e.every(function(e){return e instanceof lG})?(this.tokens.splice.apply(this.tokens,[t,0].concat(e)),n||this.dispatch(`insertToken`,[e,t]),e):{FAIL:`insertToken: invalid token(s).`}},hG.prototype.registerModifier=function(e,t,n){this.events.newToken.subscribe(function(r,i){var a=[r,i],o=t===null||t.apply(this,a)===!0,s=[r,i];if(o){var c=n.apply(this,s);r.setState(e,c)}}),this.registeredModifiers.push(e)},pG.prototype.subscribe=function(e){return typeof e==`function`?this.subscribers.push(e)-1:{FAIL:`invalid '`+this.eventId+`' event handler`}},pG.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)},fG.prototype.setCurrentIndex=function(e){this.index=e,this.current=this.context[e],this.backtrack=this.context.slice(0,e),this.lookahead=this.context.slice(e+1)},fG.prototype.get=function(e){switch(!0){case e===0:return this.current;case e<0&&Math.abs(e)<=this.backtrack.length:return this.backtrack.slice(e)[0];case e>0&&e<=this.lookahead.length:return this.lookahead[e-1];default:return null}},hG.prototype.rangeToText=function(e){if(e instanceof uG)return this.getRangeTokens(e).map(function(e){return e.char}).join(``)},hG.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join(``)},hG.prototype.getContext=function(e){return this.registeredContexts[e]||null},hG.prototype.on=function(e,t){var n=this.events[e];return n?n.subscribe(t):null},hG.prototype.dispatch=function(e,t){var n=this,r=this.events[e];r instanceof pG&&r.subscribers.forEach(function(e){e.apply(n,t||[])})},hG.prototype.registerContextChecker=function(e,t,n){if(this.getContext(e))return{FAIL:`context name '`+e+`' is already registered.`};if(typeof t!=`function`)return{FAIL:`missing context start check.`};if(typeof n!=`function`)return{FAIL:`missing context end check.`};var r=new dG(e,t,n);return this.registeredContexts[e]=r,this.contextCheckers.push(r),r},hG.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},hG.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:`context checker '`+e+`' is not registered.`}},hG.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}},hG.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var e=this.tokens.map(function(e){return e.char}),t=0;t<e.length;t++){var n=new fG(e,t);this.runContextCheck(n)}this.dispatch(`updateContextsRanges`,[this.registeredContexts])},hG.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex,r=new uG(n,e,t),i=this.getContext(t).ranges;return r.rangeId=t+`.`+i.length,i.push(r),this.getContext(t).openRange=null,r},hG.prototype.runContextCheck=function(e){var t=this,n=e.index;this.contextCheckers.forEach(function(r){var i=r.contextName,a=t.getContext(i).openRange;if(!a&&r.checkStart(e)&&(a=new uG(n,null,i),t.getContext(i).openRange=a,t.dispatch(`contextStart`,[i,n])),a&&r.checkEnd(e)){var o=n-a.startIndex+1,s=t.setEndOffset(o,i);t.dispatch(`contextEnd`,[i,s])}})},hG.prototype.tokenize=function(e){this.tokens=[],this.resetContextsRanges();var t=Array.from(e);this.dispatch(`start`);for(var n=0;n<t.length;n++){var r=t[n],i=new fG(t,n);this.dispatch(`next`,[i]),this.runContextCheck(i);var a=new lG(r);this.tokens.push(a),this.dispatch(`newToken`,[a,i])}return this.dispatch(`end`,[this.tokens]),this.tokens};function gG(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function _G(e){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(e)}function vG(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function yG(e){return/[A-z]/.test(e)}function bG(e){return/\s/.test(e)}function xG(e){this.font=e,this.features={}}function SG(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function CG(e,t){if(!e)return-1;switch(t.format){case 1:return t.glyphs.indexOf(e);case 2:for(var n=t.ranges,r=0;r<n.length;r++){var i=n[r];if(e>=i.start&&e<=i.end){var a=e-i.start;return i.index+a}}break;default:return-1}return-1}function wG(e,t){return CG(e,t.coverage)===-1?null:e+t.deltaGlyphId}function TG(e,t){var n=CG(e,t.coverage);return n===-1?null:t.substitute[n]}function EG(e,t){for(var n=[],r=0;r<e.length;r++){var i=e[r],a=t.current;a=Array.isArray(a)?a[0]:a;var o=CG(a,i);o!==-1&&n.push(o)}return n.length===e.length?n:-1}function DG(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n)return[];var r=EG(t.inputCoverage,e);if(r===-1)return[];var i=t.inputCoverage.length-1;if(e.lookahead.length<t.lookaheadCoverage.length)return[];for(var a=e.lookahead.slice(i);a.length&&vG(a[0].char);)a.shift();var o=new fG(a,0),s=EG(t.lookaheadCoverage,o),c=[].concat(e.backtrack);for(c.reverse();c.length&&vG(c[0].char);)c.shift();if(c.length<t.backtrackCoverage.length)return[];var l=new fG(c,0),u=EG(t.backtrackCoverage,l),d=r.length===t.inputCoverage.length&&s.length===t.lookaheadCoverage.length&&u.length===t.backtrackCoverage.length,f=[];if(d)for(var p=0;p<t.lookupRecords.length;p++)for(var m=t.lookupRecords[p].lookupListIndex,h=this.getLookupByIndex(m),g=0;g<h.subtables.length;g++){var _=h.subtables[g],v=this.getLookupMethod(h,_);if(this.getSubstitutionType(h,_)===`12`)for(var y=0;y<r.length;y++){var b=v(e.get(y));b&&f.push(b)}}return f}function OG(e,t){var n=e.current,r=CG(n,t.coverage);if(r===-1)return null;for(var i,a=t.ligatureSets[r],o=0;o<a.length;o++){i=a[o];for(var s=0;s<i.components.length&&e.lookahead[s]===i.components[s];s++)if(s===i.components.length-1)return i}return null}function kG(e,t){var n=CG(e,t.coverage);return n===-1?null:t.sequences[n]}xG.prototype.getDefaultScriptFeaturesIndexes=function(){for(var e=this.font.tables.gsub.scripts,t=0;t<e.length;t++){var n=e[t];if(n.tag===`DFLT`)return n.script.defaultLangSys.featureIndexes}return[]},xG.prototype.getScriptFeaturesIndexes=function(e){if(!this.font.tables.gsub)return[];if(!e)return this.getDefaultScriptFeaturesIndexes();for(var t=this.font.tables.gsub.scripts,n=0;n<t.length;n++){var r=t[n];if(r.tag===e&&r.script.defaultLangSys)return r.script.defaultLangSys.featureIndexes;var i=r.langSysRecords;if(i)for(var a=0;a<i.length;a++){var o=i[a];if(o.tag===e)return o.langSys.featureIndexes}}return this.getDefaultScriptFeaturesIndexes()},xG.prototype.mapTagsToFeatures=function(e,t){for(var n={},r=0;r<e.length;r++){var i=e[r].tag;n[i]=e[r].feature}this.features[t].tags=n},xG.prototype.getScriptFeatures=function(e){var t=this.features[e];if(this.features.hasOwnProperty(e))return t;var n=this.getScriptFeaturesIndexes(e);if(!n)return null;var r=this.font.tables.gsub;return t=n.map(function(e){return r.features[e]}),this.features[e]=t,this.mapTagsToFeatures(t,e),t},xG.prototype.getSubstitutionType=function(e,t){return e.lookupType.toString()+t.substFormat.toString()},xG.prototype.getLookupMethod=function(e,t){var n=this;switch(this.getSubstitutionType(e,t)){case`11`:return function(e){return wG.apply(n,[e,t])};case`12`:return function(e){return TG.apply(n,[e,t])};case`63`:return function(e){return DG.apply(n,[e,t])};case`41`:return function(e){return OG.apply(n,[e,t])};case`21`:return function(e){return kG.apply(n,[e,t])};default:throw Error(`lookupType: `+e.lookupType+` - substFormat: `+t.substFormat+` is not yet supported`)}},xG.prototype.lookupFeature=function(e){var t=e.contextParams,n=t.index,r=this.getFeature({tag:e.tag,script:e.script});if(!r)return Error(`font '`+this.font.names.fullName.en+`' doesn't support feature '`+e.tag+`' for script '`+e.script+`'.`);for(var i=this.getFeatureLookups(r),a=[].concat(t.context),o=0;o<i.length;o++)for(var s=i[o],c=this.getLookupSubtables(s),l=0;l<c.length;l++){var u=c[l],d=this.getSubstitutionType(s,u),f=this.getLookupMethod(s,u),p=void 0;switch(d){case`11`:p=f(t.current),p&&a.splice(n,1,new SG({id:11,tag:e.tag,substitution:p}));break;case`12`:p=f(t.current),p&&a.splice(n,1,new SG({id:12,tag:e.tag,substitution:p}));break;case`63`:p=f(t),Array.isArray(p)&&p.length&&a.splice(n,1,new SG({id:63,tag:e.tag,substitution:p}));break;case`41`:p=f(t),p&&a.splice(n,1,new SG({id:41,tag:e.tag,substitution:p}));break;case`21`:p=f(t.current),p&&a.splice(n,1,new SG({id:21,tag:e.tag,substitution:p}));break}t=new fG(a,n),!(Array.isArray(p)&&!p.length)&&(p=null)}return a.length?a:null},xG.prototype.supports=function(e){if(!e.script)return!1;this.getScriptFeatures(e.script);var t=this.features.hasOwnProperty(e.script);if(!e.tag)return t;var n=this.features[e.script].some(function(t){return t.tag===e.tag});return t&&n},xG.prototype.getLookupSubtables=function(e){return e.subtables||null},xG.prototype.getLookupByIndex=function(e){return this.font.tables.gsub.lookups[e]||null},xG.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))},xG.prototype.getFeature=function(e){if(!this.font)return{FAIL:`No font was found`};this.features.hasOwnProperty(e.script)||this.getScriptFeatures(e.script);var t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:`No feature for script `+e.script}};function AG(e){var t=e.current,n=e.get(-1);return n===null&&gG(t)||!gG(n)&&gG(t)}function jG(e){var t=e.get(1);return t===null||!gG(t)}var MG={startCheck:AG,endCheck:jG};function NG(e){var t=e.current,n=e.get(-1);return(gG(t)||vG(t))&&!gG(n)}function PG(e){var t=e.get(1);switch(!0){case t===null:return!0;case!gG(t)&&!vG(t):var n=bG(t);if(!n)return!0;if(n){var r=!1;if(r=e.lookahead.some(function(e){return gG(e)||vG(e)}),!r)return!0}break;default:return!1}}var FG={startCheck:NG,endCheck:PG};function IG(e,t,n){t[n].setState(e.tag,e.substitution)}function LG(e,t,n){t[n].setState(e.tag,e.substitution)}function RG(e,t,n){e.substitution.forEach(function(r,i){t[n+i].setState(e.tag,r)})}function zG(e,t,n){var r=t[n];r.setState(e.tag,e.substitution.ligGlyph);for(var i=e.substitution.components.length,a=0;a<i;a++)r=t[n+a+1],r.setState(`deleted`,!0)}var BG={11:IG,12:LG,63:RG,41:zG};function VG(e,t,n){e instanceof SG&&BG[e.id]&&BG[e.id](e,t,n)}function HG(e){for(var t=[].concat(e.backtrack),n=t.length-1;n>=0;n--){var r=t[n],i=_G(r),a=vG(r);if(!i&&!a)return!0;if(i)return!1}return!1}function UG(e){if(_G(e.current))return!1;for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];if(!vG(n))return!0}return!1}function WG(e){var t=this,n=`arab`,r=this.featuresTags[n],i=this.tokenizer.getRangeTokens(e);if(i.length!==1){var a=new fG(i.map(function(e){return e.getState(`glyphIndex`)}),0),o=new fG(i.map(function(e){return e.char}),0);i.forEach(function(e,s){if(!vG(e.char)){a.setCurrentIndex(s),o.setCurrentIndex(s);var c=0;HG(o)&&(c|=1),UG(o)&&(c|=2);var l;switch(c){case 1:l=`fina`;break;case 2:l=`init`;break;case 3:l=`medi`;break}if(r.indexOf(l)!==-1){var u=t.query.lookupFeature({tag:l,script:n,contextParams:a});if(u instanceof Error)return console.info(u.message);u.forEach(function(e,t){e instanceof SG&&(VG(e,i,t),a.context[t]=e.substitution)})}}})}}function GG(e,t){return new fG(e.map(function(e){return e.activeState.value}),t||0)}function KG(e){var t=this,n=`arab`,r=this.tokenizer.getRangeTokens(e),i=GG(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`rlig`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return VG(e,r,a)}),i=GG(r))})}function qG(e){var t=e.current,n=e.get(-1);return n===null&&yG(t)||!yG(n)&&yG(t)}function JG(e){var t=e.get(1);return t===null||!yG(t)}var YG={startCheck:qG,endCheck:JG};function XG(e,t){return new fG(e.map(function(e){return e.activeState.value}),t||0)}function ZG(e){var t=this,n=`latn`,r=this.tokenizer.getRangeTokens(e),i=XG(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`liga`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return VG(e,r,a)}),i=XG(r))})}function QG(e){this.baseDir=e||`ltr`,this.tokenizer=new hG,this.featuresTags={}}QG.prototype.setText=function(e){this.text=e},QG.prototype.contextChecks={latinWordCheck:YG,arabicWordCheck:MG,arabicSentenceCheck:FG};function $G(e){var t=this.contextChecks[e+`Check`];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function eK(){return $G.call(this,`latinWord`),$G.call(this,`arabicWord`),$G.call(this,`arabicSentence`),this.tokenizer.tokenize(this.text)}function tK(){var e=this;this.tokenizer.getContextRanges(`arabicSentence`).forEach(function(t){var n=e.tokenizer.getRangeTokens(t);e.tokenizer.replaceRange(t.startIndex,t.endOffset,n.reverse())})}QG.prototype.registerFeatures=function(e,t){var n=this,r=t.filter(function(t){return n.query.supports({script:e,tag:t})});this.featuresTags.hasOwnProperty(e)?this.featuresTags[e]=this.featuresTags[e].concat(r):this.featuresTags[e]=r},QG.prototype.applyFeatures=function(e,t){if(!e)throw Error(`No valid font was provided to apply features`);this.query||=new xG(e);for(var n=0;n<t.length;n++){var r=t[n];this.query.supports({script:r.script})&&this.registerFeatures(r.script,r.tags)}},QG.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function nK(){if(this.tokenizer.registeredModifiers.indexOf(`glyphIndex`)===-1)throw Error(`glyphIndex modifier is required to apply arabic presentation features.`)}function rK(){var e=this;this.featuresTags.hasOwnProperty(`arab`)&&(nK.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){WG.call(e,t)}))}function iK(){var e=this,t=`arab`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`rlig`)!==-1&&(nK.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){KG.call(e,t)}))}function aK(){var e=this,t=`latn`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`liga`)!==-1&&(nK.call(this),this.tokenizer.getContextRanges(`latinWord`).forEach(function(t){ZG.call(e,t)}))}QG.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)},QG.prototype.applyFeaturesToContexts=function(){this.checkContextReady(`arabicWord`)&&(rK.call(this),iK.call(this)),this.checkContextReady(`latinWord`)&&aK.call(this),this.checkContextReady(`arabicSentence`)&&tK.call(this)},QG.prototype.processText=function(e){(!this.text||this.text!==e)&&(this.setText(e),eK.call(this),this.applyFeaturesToContexts())},QG.prototype.getBidiText=function(e){return this.processText(e),this.tokenizer.getText()},QG.prototype.getTextGlyphs=function(e){this.processText(e);for(var t=[],n=0;n<this.tokenizer.tokens.length;n++){var r=this.tokenizer.tokens[n];if(!r.state.deleted){var i=r.activeState.value;t.push(Array.isArray(i)?i[0]:i)}}return t};function oK(e){e||={},e.tables=e.tables||{},e.empty||(BH(e.familyName,`When creating a new Font object, familyName is required.`),BH(e.styleName,`When creating a new Font object, styleName is required.`),BH(e.unitsPerEm,`When creating a new Font object, unitsPerEm is required.`),BH(e.ascender,`When creating a new Font object, ascender is required.`),BH(e.descender<=0,`When creating a new Font object, negative descender value is required.`),this.names={fontFamily:{en:e.familyName||` `},fontSubfamily:{en:e.styleName||` `},fullName:{en:e.fullName||e.familyName+` `+e.styleName},postScriptName:{en:e.postScriptName||(e.familyName+e.styleName).replace(/\s/g,``)},designer:{en:e.designer||` `},designerURL:{en:e.designerURL||` `},manufacturer:{en:e.manufacturer||` `},manufacturerURL:{en:e.manufacturerURL||` `},license:{en:e.license||` `},licenseURL:{en:e.licenseURL||` `},version:{en:e.version||`Version 0.1`},description:{en:e.description||` `},copyright:{en:e.copyright||` `},trademark:{en:e.trademark||` `}},this.unitsPerEm=e.unitsPerEm||1e3,this.ascender=e.ascender,this.descender=e.descender,this.createdTimestamp=e.createdTimestamp,this.tables=Object.assign(e.tables,{os2:Object.assign({usWeightClass:e.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:e.widthClass||this.usWidthClasses.MEDIUM,fsSelection:e.fsSelection||this.fsSelectionValues.REGULAR},e.tables.os2)})),this.supported=!0,this.glyphs=new HB.GlyphSet(this,e.glyphs||[]),this.encoding=new EB(this),this.position=new NH(this),this.substitution=new PH(this),this.tables=this.tables||{},this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){if(this._hinting)return this._hinting;if(this.outlinesFormat===`truetype`)return this._hinting=new tU(this)}})}oK.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null},oK.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)},oK.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},oK.prototype.updateFeatures=function(e){return this.defaultRenderOptions.features.map(function(t){return t.script===`latn`?{script:`latn`,tags:t.tags.filter(function(t){return e[t]})}:t})},oK.prototype.stringToGlyphs=function(e,t){var n=this,r=new QG;r.registerModifier(`glyphIndex`,null,function(e){return n.charToGlyphIndex(e.char)});var i=t?this.updateFeatures(t.features):this.defaultRenderOptions.features;r.applyFeatures(this,i);for(var a=r.getTextGlyphs(e),o=a.length,s=Array(o),c=this.glyphs.get(0),l=0;l<o;l+=1)s[l]=this.glyphs.get(a[l])||c;return s},oK.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)},oK.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},oK.prototype.glyphIndexToName=function(e){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(e):``},oK.prototype.getKerningValue=function(e,t){e=e.index||e,t=t.index||t;var n=this.position.defaultKerningTables;return n?this.position.getKerningValue(n,e,t):this.kerningPairs[e+`,`+t]||0},oK.prototype.defaultRenderOptions={kerning:!0,features:[{script:`arab`,tags:[`init`,`medi`,`fina`,`rlig`]},{script:`latn`,tags:[`liga`,`rlig`]}]},oK.prototype.forEachGlyph=function(e,t,n,r,i,a){t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?72:r,i=Object.assign({},this.defaultRenderOptions,i);var o=1/this.unitsPerEm*r,s=this.stringToGlyphs(e,i),c;if(i.kerning){var l=i.script||this.position.getDefaultScriptName();c=this.position.getKerningTables(l,i.language)}for(var u=0;u<s.length;u+=1){var d=s[u];if(a.call(this,d,t,n,r,i),d.advanceWidth&&(t+=d.advanceWidth*o),i.kerning&&u<s.length-1){var f=c?this.position.getKerningValue(c,d.index,s[u+1].index):this.getKerningValue(d,s[u+1]);t+=f*o}i.letterSpacing?t+=i.letterSpacing*r:i.tracking&&(t+=i.tracking/1e3*r)}return t},oK.prototype.getPath=function(e,t,n,r,i){var a=new Pz;return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.extend(o)}),a},oK.prototype.getPaths=function(e,t,n,r,i){var a=[];return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.push(o)}),a},oK.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})},oK.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)},oK.prototype.drawPoints=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawPoints(e,n,r,i)})},oK.prototype.drawMetrics=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawMetrics(e,n,r,i)})},oK.prototype.getEnglishName=function(e){var t=this.names[e];if(t)return t.en},oK.prototype.validate=function(){var e=this;function t(t){var n=e.getEnglishName(t);n&&n.trim().length}t(`fontFamily`),t(`weightName`),t(`manufacturer`),t(`copyright`),t(`version`),this.unitsPerEm},oK.prototype.toTables=function(){return OH.fontToTable(this)},oK.prototype.toBuffer=function(){return console.warn(`Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.`),this.toArrayBuffer()},oK.prototype.toArrayBuffer=function(){for(var e=this.toTables().encode(),t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;r++)n[r]=e[r];return t},oK.prototype.download=function(e){var t=this.getEnglishName(`fontFamily`),n=this.getEnglishName(`fontSubfamily`);e||=t.replace(/\s/g,``)+`-`+n+`.otf`;var r=this.toArrayBuffer();if(LH())if(window.URL=window.URL||window.webkitURL,window.URL){var i=new DataView(r),a=new Blob([i],{type:`font/opentype`}),o=document.createElement(`a`);o.href=window.URL.createObjectURL(a),o.download=e;var s=document.createEvent(`MouseEvents`);s.initEvent(`click`,!0,!1),o.dispatchEvent(s)}else console.warn(`Font file could not be downloaded. Try using a different browser.`);else{var c=oz(),l=zH(r);c.writeFileSync(e,l)}},oK.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512},oK.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9},oK.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function sK(e,t){var n=JSON.stringify(e),r=256;for(var i in t){var a=parseInt(i);if(!(!a||a<256)){if(JSON.stringify(t[i])===n)return a;r<=a&&(r=a+1)}}return t[r]=e,r}function cK(e,t,n){var r=sK(t.name,n);return[{name:`tag_`+e,type:`TAG`,value:t.tag},{name:`minValue_`+e,type:`FIXED`,value:t.minValue<<16},{name:`defaultValue_`+e,type:`FIXED`,value:t.defaultValue<<16},{name:`maxValue_`+e,type:`FIXED`,value:t.maxValue<<16},{name:`flags_`+e,type:`USHORT`,value:0},{name:`nameID_`+e,type:`USHORT`,value:r}]}function lK(e,t,n){var r={},i=new Z.Parser(e,t);return r.tag=i.parseTag(),r.minValue=i.parseFixed(),r.defaultValue=i.parseFixed(),r.maxValue=i.parseFixed(),i.skip(`uShort`,1),r.name=n[i.parseUShort()]||{},r}function uK(e,t,n,r){for(var i=sK(t.name,r),a=[{name:`nameID_`+e,type:`USHORT`,value:i},{name:`flags_`+e,type:`USHORT`,value:0}],o=0;o<n.length;++o){var s=n[o].tag;a.push({name:`axis_`+e+` `+s,type:`FIXED`,value:t.coordinates[s]<<16})}return a}function dK(e,t,n,r){var i={},a=new Z.Parser(e,t);i.name=r[a.parseUShort()]||{},a.skip(`uShort`,1),i.coordinates={};for(var o=0;o<n.length;++o)i.coordinates[n[o].tag]=a.parseFixed();return i}function fK(e,t){var n=new Y.Table(`fvar`,[{name:`version`,type:`ULONG`,value:65536},{name:`offsetToData`,type:`USHORT`,value:0},{name:`countSizePairs`,type:`USHORT`,value:2},{name:`axisCount`,type:`USHORT`,value:e.axes.length},{name:`axisSize`,type:`USHORT`,value:20},{name:`instanceCount`,type:`USHORT`,value:e.instances.length},{name:`instanceSize`,type:`USHORT`,value:4+e.axes.length*4}]);n.offsetToData=n.sizeOf();for(var r=0;r<e.axes.length;r++)n.fields=n.fields.concat(cK(r,e.axes[r],t));for(var i=0;i<e.instances.length;i++)n.fields=n.fields.concat(uK(i,e.instances[i],e.axes,t));return n}function pK(e,t,n){var r=new Z.Parser(e,t),i=r.parseULong();K.argument(i===65536,`Unsupported fvar table version.`);var a=r.parseOffset16();r.skip(`uShort`,1);for(var o=r.parseUShort(),s=r.parseUShort(),c=r.parseUShort(),l=r.parseUShort(),u=[],d=0;d<o;d++)u.push(lK(e,t+a+d*s,n));for(var f=[],p=t+a+o*s,m=0;m<c;m++)f.push(dK(e,p+m*l,u,n));return{axes:u,instances:f}}var mK={make:fK,parse:pK},hK=function(){return{coverage:this.parsePointer(X.coverage),attachPoints:this.parseList(X.pointer(X.uShortList))}},gK=function(){var e=this.parseUShort();if(K.argument(e===1||e===2||e===3,`Unsupported CaretValue table version.`),e===1)return{coordinate:this.parseShort()};if(e===2)return{pointindex:this.parseShort()};if(e===3)return{coordinate:this.parseShort()}},_K=function(){return this.parseList(X.pointer(gK))},vK=function(){return{coverage:this.parsePointer(X.coverage),ligGlyphs:this.parseList(X.pointer(_K))}},yK=function(){return this.parseUShort(),this.parseList(X.pointer(X.coverage))};function bK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);K.argument(r===1||r===1.2||r===1.3,`Unsupported GDEF table version.`);var i={version:r,classDef:n.parsePointer(X.classDef),attachList:n.parsePointer(hK),ligCaretList:n.parsePointer(vK),markAttachClassDef:n.parsePointer(X.classDef)};return r>=1.2&&(i.markGlyphSets=n.parsePointer(yK)),i}var xK={parse:bK},SK=Array(10);SK[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(X.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(X.coverage),values:this.parseValueRecordList()};K.assert(!1,`0x`+e.toString(16)+`: GPOS lookup type 1 format must be 1 or 2.`)},SK[2]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();K.assert(t===1||t===2,`0x`+e.toString(16)+`: GPOS lookup type 2 format must be 1 or 2.`);var n=this.parsePointer(X.coverage),r=this.parseUShort(),i=this.parseUShort();if(t===1)return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,pairSets:this.parseList(X.pointer(X.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}})))};if(t===2){var a=this.parsePointer(X.classDef),o=this.parsePointer(X.classDef),s=this.parseUShort(),c=this.parseUShort();return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,classDef1:a,classDef2:o,class1Count:s,class2Count:c,classRecords:this.parseList(s,X.list(c,function(){return{value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}}))}}},SK[3]=function(){return{error:`GPOS Lookup 3 not supported`}},SK[4]=function(){return{error:`GPOS Lookup 4 not supported`}},SK[5]=function(){return{error:`GPOS Lookup 5 not supported`}},SK[6]=function(){return{error:`GPOS Lookup 6 not supported`}},SK[7]=function(){return{error:`GPOS Lookup 7 not supported`}},SK[8]=function(){return{error:`GPOS Lookup 8 not supported`}},SK[9]=function(){return{error:`GPOS Lookup 9 not supported`}};function CK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GPOS table version `+r),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(SK)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(SK),variations:n.parseFeatureVariationsList()}}var wK=Array(10);function TK(e){return new Y.Table(`GPOS`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,wK)}])}var EK={parse:CK,make:TK};function DK(e){var t={};e.skip(`uShort`);var n=e.parseUShort();K.argument(n===0,`Unsupported kern sub-table version.`),e.skip(`uShort`,2);var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}return t}function OK(e){var t={};e.skip(`uShort`),e.parseULong()>1&&console.warn(`Only the first kern subtable is supported.`),e.skip(`uLong`);var n=e.parseUShort()&255;if(e.skip(`uShort`),n===0){var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}}return t}function kK(e,t){var n=new Z.Parser(e,t),r=n.parseUShort();if(r===0)return DK(n);if(r===1)return OK(n);throw Error(`Unsupported kern table version (`+r+`).`)}var AK={parse:kK};function jK(e,t,n,r){for(var i=new Z.Parser(e,t),a=r?i.parseUShort:i.parseULong,o=[],s=0;s<n+1;s+=1){var c=a.call(i);r&&(c*=2),o.push(c)}return o}var MK={parse:jK};function NK(e,t){oz().readFile(e,function(e,n){if(e)return t(e.message);t(null,RH(n))})}function PK(e,t){var n=new XMLHttpRequest;n.open(`get`,e,!0),n.responseType=`arraybuffer`,n.onload=function(){return n.response?t(null,n.response):t(`Font could not be loaded: `+n.statusText)},n.onerror=function(){t(`Font could not be loaded`)},n.send()}function FK(e,t){for(var n=[],r=12,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12);n.push({tag:a,checksum:o,offset:s,length:c,compression:!1}),r+=16}return n}function IK(e,t){for(var n=[],r=44,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12),l=void 0;l=s<c?`WOFF`:!1,n.push({tag:a,offset:o,compression:l,compressedLength:s,length:c}),r+=20}return n}function LK(e,t){if(t.compression===`WOFF`){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2),r=new Uint8Array(t.length);if(jz(n,r),r.byteLength!==t.length)throw Error(`Decompression error: `+t.tag+` decompressed length doesn't match recorded length`);return{data:new DataView(r.buffer,0),offset:0}}else return{data:e,offset:t.offset}}function RK(e,t){t??={};var n,r,i=new oK({empty:!0}),a=new DataView(e,0),o,s=[],c=Z.getTag(a,0);if(c===`\0\0\0`||c===`true`||c===`typ1`)i.outlinesFormat=`truetype`,o=Z.getUShort(a,4),s=FK(a,o);else if(c===`OTTO`)i.outlinesFormat=`cff`,o=Z.getUShort(a,4),s=FK(a,o);else if(c===`wOFF`){var l=Z.getTag(a,4);if(l===`\0\0\0`)i.outlinesFormat=`truetype`;else if(l===`OTTO`)i.outlinesFormat=`cff`;else throw Error(`Unsupported OpenType flavor `+c);o=Z.getUShort(a,12),s=IK(a,o)}else throw Error(`Unsupported OpenType signature `+c);for(var u,d,f,p,m,h,g,_,v,y,b,x,S=0;S<o;S+=1){var C=s[S],w=void 0;switch(C.tag){case`cmap`:w=LK(a,C),i.tables.cmap=xB.parse(w.data,w.offset),i.encoding=new DB(i.tables.cmap);break;case`cvt `:w=LK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.cvt=x.parseShortList(C.length/2);break;case`fvar`:d=C;break;case`fpgm`:w=LK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.fpgm=x.parseByteList(C.length);break;case`head`:w=LK(a,C),i.tables.head=DV.parse(w.data,w.offset),i.unitsPerEm=i.tables.head.unitsPerEm,n=i.tables.head.indexToLocFormat;break;case`hhea`:w=LK(a,C),i.tables.hhea=AV.parse(w.data,w.offset),i.ascender=i.tables.hhea.ascender,i.descender=i.tables.hhea.descender,i.numberOfHMetrics=i.tables.hhea.numberOfHMetrics;break;case`hmtx`:g=C;break;case`ltag`:w=LK(a,C),r=RV.parse(w.data,w.offset);break;case`maxp`:w=LK(a,C),i.tables.maxp=VV.parse(w.data,w.offset),i.numGlyphs=i.tables.maxp.numGlyphs;break;case`name`:y=C;break;case`OS/2`:w=LK(a,C),i.tables.os2=cH.parse(w.data,w.offset);break;case`post`:w=LK(a,C),i.tables.post=dH.parse(w.data,w.offset),i.glyphNames=new kB(i.tables.post);break;case`prep`:w=LK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.prep=x.parseByteList(C.length);break;case`glyf`:f=C;break;case`loca`:v=C;break;case`CFF `:u=C;break;case`kern`:_=C;break;case`GDEF`:p=C;break;case`GPOS`:m=C;break;case`GSUB`:h=C;break;case`meta`:b=C;break}}var ee=LK(a,y);if(i.tables.name=rH.parse(ee.data,ee.offset,r),i.names=i.tables.name,f&&v){var te=n===0,ne=LK(a,v),re=MK.parse(ne.data,ne.offset,i.numGlyphs,te),ie=LK(a,f);i.glyphs=XH.parse(ie.data,ie.offset,re,i,t)}else if(u){var ae=LK(a,u);wV.parse(ae.data,ae.offset,i,t)}else throw Error(`Font doesn't contain TrueType or CFF outlines.`);var oe=LK(a,g);if(FV.parse(i,oe.data,oe.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t),MB(i,t),_){var se=LK(a,_);i.kerningPairs=AK.parse(se.data,se.offset)}else i.kerningPairs={};if(p){var ce=LK(a,p);i.tables.gdef=xK.parse(ce.data,ce.offset)}if(m){var le=LK(a,m);i.tables.gpos=EK.parse(le.data,le.offset),i.position.init()}if(h){var ue=LK(a,h);i.tables.gsub=_H.parse(ue.data,ue.offset)}if(d){var de=LK(a,d);i.tables.fvar=mK.parse(de.data,de.offset,i.names)}if(b){var fe=LK(a,b);i.tables.meta=bH.parse(fe.data,fe.offset),i.metas=i.tables.meta}return i}function zK(e,t,n){n??={};var r=typeof window>`u`&&!n.isUrl?NK:PK;return new Promise(function(i,a){r(e,function(e,r){if(e){if(t)return t(e);a(e)}var o;try{o=RK(r,n)}catch(e){if(t)return t(e,null);a(e)}if(t)return t(null,o);i(o)})})}function BK(e,t){return RK(RH(oz().readFileSync(e)),t)}var VK=Object.freeze({__proto__:null,Font:oK,Glyph:IB,Path:Pz,BoundingBox:Nz,_parse:Z,parse:RK,load:zK,loadSync:BK}),HK=class e{sketches;constructor(e){e.length===0&&i(`CompoundSketch`,`Cannot create CompoundSketch with an empty array of sketches`),this.sketches=e}delete(){this.sketches.forEach(e=>{e.delete()})}get outerSketch(){return hA(this.sketches)}get innerSketches(){return this.sketches.slice(1)}get wires(){return eq(this)}face(){return $K(this)}extrude(e,t={}){return tq(this,e,t)}revolve(e,t={}){return nq(this,e,t)}loftWith(t,n={}){return Array.isArray(t)||!(t instanceof e)?i(`CompoundSketch.loftWith`,`A compound (face-with-holes) sketch can only loft to another compound sketch with the same number of sub-sketches.`):rq(this,t,n)}sweepSketch(){return i(`CompoundSketch.sweepSketch`,`Sweeping a compound (face-with-holes) profile is not supported — sweep its outer Sketch instead.`)}};function UK(e){let t={};e.defaultOrigin&&(t.defaultOrigin=e.defaultOrigin),e.defaultDirection&&(t.defaultDirection=e.defaultDirection);let n=new iq(e.wire,t);return e.baseFace&&(n.baseFace=e.baseFace),n}function WK(e){return new HK(e.map(UK))}function GK(e){if(e instanceof iq)return e;let t=e.sketches;if(Array.isArray(t)){let[e,...n]=t;if(e instanceof iq){for(let e of n)e.delete();return e}}i(`asSketch`,`Expected a single-wire profile to loft or sweep.`)}function KK(e){let t;return t=e.baseFace?MA(e.baseFace,e.wire):j(AA(e.wire)),t}function qK(e){return SE(j(cO(e.wire.wrapped)))}function JK(e,t,{origin:n}={}){let r=j(AA(e.wire)),i=j(EM(r,n?DD(n):e.defaultOrigin,t?DD(t):[0,0,1]));return r[Symbol.dispose](),e.delete(),i}function YK(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=ND(BD(n?DD(n):e.defaultDirection),t),s=a?DD(a):e.defaultOrigin;if(r&&!i){let t=j(yM(e.wire,[...s],[...o],r));return e.delete(),t}if(i){let t=j(bM(e.wire,i,[...s],[...o],r));return e.delete(),t}let c=j(AA(e.wire)),l=j(TM(c,[...o]));return c[Symbol.dispose](),e.delete(),l}function XK(e,t,n={}){let r=kk(e.wire),i=BD(ND(Mk(e.wire,1e-9),-1)),a=e.defaultDirection,o=ND(ID(i,a),-1),s=GK(t(JD([...r],[...o],[...i]),[...r])),c={forceProfileSpineOthogonality:!0,...n};e.baseFace&&(c.support=e.baseFace.wrapped);let l=j(_M(s.wire,e.wire,c));return e.delete(),l}function ZK(e,t,n={},r=!1){let i=[e,...(Array.isArray(t)?t:[t]).map(GK)],a=j(OM(i.map(e=>e.wire),n,r));return i.forEach(e=>{e.delete()}),a}var QK=(e,t)=>{let n=j(t(hA(e))),r=e.slice(1).map(e=>j(t(e)));if(r.length===0)return n;try{return j(UA(n,r,{unsafe:!0}))}finally{n.delete();for(let e of r)e.delete()}};function $K(e){let t=e.outerSketch.face(),n=PA(t,e.innerSketches.map(e=>e.wire));return t[Symbol.dispose](),n}function eq(e){return dj(e.sketches.map(e=>e.wire))}function tq(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=ND(BD(n?DD(n):e.outerSketch.defaultDirection),t);if(r&&!i)return QK(e.sketches,t=>yM(t.wire,a?DD(a):e.outerSketch.defaultOrigin,o,r));if(i)return QK(e.sketches,t=>bM(t.wire,i,a?DD(a):e.outerSketch.defaultOrigin,o,r));let s=$K(e),c=j(TM(s,o));return s[Symbol.dispose](),c}function nq(e,t,{origin:n}={}){let r=n?DD(n):e.outerSketch.defaultOrigin,i=t?DD(t):[0,0,1],a=$K(e),o=j(EM(a,r,i));return a[Symbol.dispose](),o}function rq(e,t,n={}){e.sketches.length!==t.sketches.length&&i(`CompoundSketch.loftWith`,`You need to loft with another compound with the same number of sketches`);let r=e.sketches.map((e,r)=>{let i=mA(t.sketches,r),a={};return n.ruled!==void 0&&(a.ruled=n.ruled),e.clone().loftWith(i.clone(),a,!0)}),a=$K(e),o=CE(j(cO(a.wrapped)));a[Symbol.dispose](),r.push(o,$K(t));let s=j(fj(r));for(let e of r)e[Symbol.dispose]();return s}var iq=class e{wire;_defaultOrigin;_defaultDirection;_baseFace;constructor(e,{defaultOrigin:t=[0,0,0],defaultDirection:n=[0,0,1]}={}){this.wire=e,this._defaultOrigin=DD(t),this._defaultDirection=DD(n),this.baseFace=null}get baseFace(){return this._baseFace}set baseFace(e){this._baseFace&&this._baseFace[Symbol.dispose](),this._baseFace=e&&CE(j(cO(e.wrapped)))}delete(){this.wire[Symbol.dispose](),this.baseFace&&this.baseFace[Symbol.dispose]()}clone(){let t=SE(j(cO(this.wire.wrapped))),n=new e(t,{defaultOrigin:this.defaultOrigin,defaultDirection:this.defaultDirection});return this.baseFace&&(n.baseFace=CE(j(cO(this.baseFace.wrapped)))),n}get defaultOrigin(){return this._defaultOrigin}set defaultOrigin(e){this._defaultOrigin=DD(e)}get defaultDirection(){return this._defaultDirection}set defaultDirection(e){this._defaultDirection=DD(e)}face(){return KK(this)}wires(){return qK(this)}faces(){return this.face()}revolve(e,t={}){return JK(this,e,t)}extrude(e,t={}){return YK(this,e,t)}sweepSketch(e,t={}){return XK(this,e,t)}loftWith(e,t={},n=!1){return ZK(this,e,t,n)}},aq=class{sketches;constructor(e){this.sketches=e}soleSketch(e){this.sketches.length!==1&&i(`Sketches.${e}`,`Multiple profiles — ${e} each sub-sketch individually.`);let t=hA(this.sketches);return t instanceof iq||i(`Sketches.${e}`,`${e} is only supported on single-wire profiles.`),t}face(){return this.sketches.length!==1&&i(`Sketches.face`,`Multiple profiles — use faces() to combine them.`),hA(this.sketches).face()}loftWith(e,t,n){return this.soleSketch(`loftWith`).loftWith(e,t,n)}sweepSketch(e,t){return this.soleSketch(`sweepSketch`).sweepSketch(e,t)}wires(){return dj(this.sketches.flatMap(e=>e instanceof iq?[e.wire]:e.sketches.map(e=>e.wire)))}faces(){return dj(this.sketches.map(e=>e.face()))}extrude(e,t={}){return dj(this.sketches.map(n=>n.extrude(e,t)))}revolve(e,t){return dj(this.sketches.map(n=>n.revolve(e,t)))}},oq={};async function sq(e,t=`default`,n=!1){if(!n&&oq[t])return O(oq[t]);let r;if(typeof e==`string`){let t;try{t=await fetch(e)}catch(t){return k(wo(M.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: ${t instanceof Error?t.message:String(t)}`,t))}if(!t.ok)return k(wo(M.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: HTTP ${t.status} ${t.statusText}`));r=await t.arrayBuffer()}else r=e;let i;try{i=VK.parse(r)}catch(e){return k(wo(M.FONT_PARSE_FAILED,`Failed to parse font data: ${e instanceof Error?e.message:String(e)}`,e))}let a=i;return oq[t]=a,oq.default||=a,O(a)}var cq=(e=`default`)=>oq[e],lq=function*(e){let t=null,n=null;for(let r of e){if(r.type===`Z`){t&&(yield t.close()),t=null;continue}let e=[-r.x,r.y];if(r.type===`M`){t&&(yield t.done()),t=new pR,t.movePointerTo(e),n=e;continue}n&&Math.abs(e[0]-n[0])<1e-9&&Math.abs(e[1]-n[1])<1e-9||(r.type===`L`&&t?.lineTo(e),r.type===`C`&&t?.cubicBezierCurveTo(e,[-r.x1,r.y1],[-r.x2,r.y2]),r.type===`Q`&&t?.quadraticBezierCurveTo(e,[-r.x1,r.y1]),n=e)}};function uq(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:a=`default`}={}){let o=cq(a);o||=cq(),o||i(`text`,`No fonts loaded. Call loadFont() before using text functions.`);let s=o.getPath(e,-t,-n,r);return nR(Array.from(lq(s.commands))).mirror([0,0])}var dq={XY:{dir:[0,0,1],xAxis:[1,0,0]},XZ:{dir:[0,-1,0],xAxis:[1,0,0]},YZ:{dir:[1,0,0],xAxis:[0,1,0]},YX:{dir:[0,0,-1],xAxis:[0,1,0]},ZX:{dir:[0,1,0],xAxis:[0,0,1]},ZY:{dir:[-1,0,0],xAxis:[0,0,1]},front:{dir:[0,-1,0],xAxis:[1,0,0]},back:{dir:[0,1,0],xAxis:[-1,0,0]},right:{dir:[-1,0,0],xAxis:[0,-1,0]},left:{dir:[1,0,0],xAxis:[0,1,0]},bottom:{dir:[0,0,1],xAxis:[1,0,0]},top:{dir:[0,0,-1],xAxis:[1,0,0]}};function fq(e){return typeof e==`string`&&e in dq}var pq=e=>{try{var t=NT();return e.IsNull()?[]:sD(t.u(W(e))).map(e=>j(xk(e)))}catch(e){t.e=e}finally{t.d()}};function mq(e,t,n=!0){let r=U().projectEdges(e.wrapped,[...t.position],[...t.direction],[...t.xAxis]),i=[...pq(r.visible.sharp),...pq(r.visible.smooth),...pq(r.visible.outline)],a=[...pq(r.hidden.sharp),...pq(r.hidden.smooth),...pq(r.hidden.outline)],o;if(n)o=a;else{for(let e of a)e[Symbol.dispose]();o=[]}return{visible:i,hidden:o}}function hq(e=[0,0,0],t=[0,0,1],n){if(LD(t)<1e-12)return k(P(`CAMERA_ZERO_DIRECTION`,`Camera direction cannot be a zero-length vector`));let r;if(n)r=BD(n);else{let e=ID([0,0,1],t);LD(e)<1e-12&&(e=ID([0,1,0],t)),LD(e)<1e-12&&(e=ID([1,0,0],t)),r=BD(e)}let i=BD(ID(t,r));return O({position:e,direction:BD(t),xAxis:r,yAxis:i})}function gq(e,t){let n=BD(MD(e.position,t));return hq(e.position,n)}function _q(e){let t=dq[e];return hq([0,0,0],t.dir,t.xAxis)}function vq(e,t,n=!0){return mq(e,t,n)}var yq=(e,n=1e-7)=>{if(e.length===0)return[];let r=new IL(e.length);e.forEach(e=>{let[t,i]=e.firstPoint;r.add(t-n,i-n,t+n,i+n)}),r.finish();let a=[],o=new Set;return e.forEach((s,c)=>{if(o.has(c))return;let l=[s],u=c;o.add(c);let d=e.length;for(;;){d--<0&&i(`stitchCurves`,`Infinite loop detected`);let[s,c]=t(l,l.length-1).lastPoint,f=r.search(s-n,c-n,s+n,c+n),p=t=>Math.abs((u-t)%e.length),m=f.filter(e=>!o.has(e)).map(n=>[t(e,n),n,p(n)]).sort(([,,e],[,,t])=>e-t);if(m.length===0){a.push(l);break}let[h,g]=t(m,0);l.push(h),o.add(g),u=g}}),a},bq=class extends fR{plane;constructor(e,t){super(),this.plane=e&&typeof e!=`string`?{...e}:j(ZD(e??`XY`,t))}delete(){this.pendingCurves=[]}sagittaArcTo(e,t){return super.sagittaArcTo(e,-t)}buildWire(){try{var e=NT();this.pendingCurves.length||i(`Sketcher.buildWire`,`No lines to convert into a wire`);let t=e.u(new KT);return j(kA(yL(this.pendingCurves,this.plane).map(e=>t.register(e))))}catch(t){e.e=t}finally{e.d()}}done(){return new iq(this.buildWire(),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}close(){return this._closeSketch(),this.done()}closeWithMirror(){xI(this.pointer,this.firstPoint)&&i(`Sketcher.closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=this.buildWire(),t=$D(this.plane,this.pointer),n=ID(BD(MD(t,$D(this.plane,this.firstPoint))),this.plane.zDir),r=j(sO(e.wrapped));return new iq(j(kA([e,SE(j(sO(U().mirror(r,DD(t),DD(n)))))])),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},xq=class extends fR{face;_bounds;constructor(e,t=[0,0]){super(t),this.face=CE(j(cO(e.wrapped))),this._bounds=_O(e)}_convertToUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[n+e*(r-n),i+t*(a-i)]}_convertFromUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[(e-n)/(r-n),(t-i)/(a-i)]}_adaptSurface(){return U().extractSurfaceFromFace(this.face.wrapped)}buildWire(){let e=U(),t=this._adaptSurface(),n=j(kA(this.pendingCurves.map(n=>xE(e.buildEdgeOnSurface(n.wrapped,t)))));return e.buildCurves3d(n.wrapped),n}done(){try{var e=NT();let t=e.u(new KT),n=this.buildWire(),r=new iq(n);if(Fk(n)){let e=t.register(r.clone().face()),n=vO(e,.5,.5),i=ND(xO(e),-1);r.defaultOrigin=[n[0],n[1],n[2]],r.defaultDirection=[i[0],i[1],i[2]]}else{let e=kk(n),t=xO(this.face,[e[0],e[1],e[2]]);r.defaultOrigin=[e[0],e[1],e[2]],r.defaultDirection=[t[0],t[1],t[2]]}return r.baseFace=this.face,r}catch(t){e.e=t}finally{e.d()}}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},Sq=(e,t={})=>{try{var n=NT();let r=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(ZD(t.plane??`XY`,t.origin));return new iq(j(kA([n.u(new KT).register(bA(e,r.origin,r.zDir))])),{defaultOrigin:[...r.origin],defaultDirection:[...r.zDir]})}catch(e){n.e=e}finally{n.d()}},Cq=(e=1,t=2,n={})=>{try{var r=NT();let i=n.plane&&typeof n.plane!=`string`?{...n.plane}:j(ZD(n.plane??`XY`,n.origin)),a=i.xDir,o=e,s=t;return t>e&&(a=GD(a,i.zDir,90*GE),o=t,s=e),new iq(j(kA([r.u(new KT).register(j(xA(o,s,i.origin,i.zDir,a)))])),{defaultOrigin:[...i.origin],defaultDirection:[...i.zDir]})}catch(e){r.e=e}finally{r.d()}},wq=(e,t,n={})=>(n.plane&&typeof n.plane!=`string`?new bq(n.plane):new bq(n.plane,n.origin)).movePointerTo([-e/2,-t/2]).hLine(e).vLine(t).hLine(-e).vLine(-t).done(),Tq=(e,t,n=0,r={})=>{let i=bR(e,t,n).sketchOnPlane(r.plane,r.origin),a={};return i.defaultOrigin&&(a.defaultOrigin=i.defaultOrigin),i.defaultDirection&&(a.defaultDirection=i.defaultDirection),new iq(i.wire,a)},Eq=(e,t,n=0,r={})=>{let i=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),a=r.plane&&typeof r.plane!=`string`?new bq(r.plane):new bq(r.plane,r.origin),o=gA(i),s=a.movePointerTo([mA(o,0),mA(o,1)]);return n?i.forEach(e=>s.sagittaArcTo([mA(e,0),mA(e,1)],n)):i.forEach(e=>s.lineTo([mA(e,0),mA(e,1)])),s.done()},Dq=(e,t,n=0)=>{let r=Math.PI/t,i=Math.cos(r)*e;return n>=0?i:i+n},Oq=(e,t)=>{let n=[...SO(e)],r=[...xO(e)];return new iq(j(Hk(TO(e),t)),{defaultOrigin:n,defaultDirection:r})},kq=(e,t={},{pointsCount:n=400,start:r=0,stop:i=1}={},a={})=>{try{var o=NT();let s=o.u(new KT),c=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(ZD(t.plane??`XY`,t.origin)),l=(i-r)/n,u=[...Array(n+1).keys()].map(t=>{let n=e(r+t*l);return $D(c,n)});return new iq(j(kA([s.register(j(TA(u,a)))])),{defaultOrigin:[...c.origin],defaultDirection:[...c.zDir]})}catch(e){o.e=e}finally{o.d()}},Aq=(e,t,n,r=[0,0,0],i=[0,0,1],a=!1)=>new iq(j(kA([SA(e,t,n,DD(r),DD(i),a)]))),jq=(e,t,n)=>new bq().movePointerTo([-e/2,t/2]).hLine(e).vLine(-t).hLine(-e).close().extrude(n),Mq=(e,t)=>xI(e,t,yI*100),Nq=(e,t,n,r)=>{let i=e[0]-t[0],a=e[1]-t[1],o=n[0]-r[0],s=n[1]-r[1],c=i*s-a*o;if(Math.abs(c)<1e-12)return null;let l=e[0]*t[1]-e[1]*t[0],u=n[0]*r[1]-n[1]*r[0];return[(l*o-u*i)/c,(l*s-u*a)/c]};function Pq(e,t,n,r,i){let a=gL(t,n,r.original.lastPoint);e(r),e(a)}function Fq(e,t,n,r,i){let a=cL(t,n);e(r),e(a)}function Iq(e,t,n,r,i){let a=Nq(r.offset instanceof iL?CI(t,r.offset.tangentAt(1)):r.offset.firstPoint,t,n,i.offset instanceof iL?SI(n,i.offset.tangentAt(0)):i.offset.lastPoint);if(!a){let i=cL(t,n);e(r),e(i);return}let o=EI([(t[0]+n[0])/2,(t[1]+n[1])/2],a),s=EI(t,n);if(s<1e-18||o>16*s){let i=cL(t,n);e(r),e(i);return}let c=cL(t,a),l=cL(a,n);e(r),e(c),e(l)}var Lq={round:Pq,bevel:Fq,miter:Iq};function Rq(e,t,n){let r=n.length===1?Do(n,0,`rawOffsets`):zq(n,e.original.lastPoint),a=Do(e.offset.splitAt([r],yI),0,`rawOffsets`),o=t.offset.splitAt([r],yI).at(-1);return o||i(`offset.rawOffsets`,`Split produced no trailing curve segment`),{splitPrevious:{offset:a,original:e.original},splitCurrent:{offset:o,original:t.original}}}function zq(e,t){let n=Do(e,0,`selectClosestIntersection`),r=EI(n,t);for(let i=1;i<e.length;i++){let a=Do(e,i,`selectClosestIntersection`),o=EI(a,t);o<r&&(r=o,n=a)}return n}function Bq(e){let t=new Map,n=(e,n)=>{let r=t.get(e)||[];t.set(e,[...r,...n])},r=new IL(e.length);for(let t of e){let[[e,n],[i,a]]=t.boundingBox.bounds;r.add(e,n,i,a)}return r.finish(),e.forEach((t,i)=>{let[[a,o],[s,c]]=t.boundingBox.bounds,l=r.search(a,o,s,c);for(let r of l){if(r<=i)continue;let a=Do(e,r,`offsetBlueprint`),{intersections:o,commonSegmentsPoints:s}=j(VL(t,a,yI)),c=[...o,...s].filter(e=>{let n=Mq(e,t.firstPoint)||Mq(e,t.lastPoint),r=Mq(e,a.firstPoint)||Mq(e,a.lastPoint);return!(n&&r)});c.length&&(n(i,c),n(r,c))}}),t}function Vq(e,t,n={}){let r=e.orientation===`clockwise`?-t:t,a=e.curves.map(e=>({offset:WL(e,r),original:e})),o=[],s=null,c=a.at(-1);if(!c)return[];function l(e){if(e instanceof iL){o.push(e);return}s?e.offset instanceof iL?o.push(e.offset):Mq(e.offset.firstPoint,e.offset.lastPoint)||o.push(cL(e.offset.firstPoint,e.offset.lastPoint)):s=e}let u=function*(){for(let e of a.slice(0,-1))yield e;s||i(`offset.rawOffsets`,`No saved curve after iterating offset segments`),yield s};for(let e of u()){let t=c.offset.lastPoint,r=e.offset.firstPoint;if(Mq(t,r)){l(c),c=e;continue}let i=[];if(c.offset instanceof iL&&e.offset instanceof iL){let{intersections:t,commonSegmentsPoints:n}=j(VL(c.offset,e.offset,yI/100));i=[...t,...n]}if(i.length>0){let{splitPrevious:t,splitCurrent:n}=Rq(c,e,i);l(t),c=n;continue}let a=Lq[n.lineJoinType??`round`];a(l,t,r,c,e),c=e}return l(c),o}function Hq(e,n,r={}){let i=Vq(e,n,r);if(i.length<2)return null;let a=Bq(i);if(!a.size){let t=new ML(i);return e.intersects(t)?null:t}let o=i.flatMap((e,t)=>{if(!a.has(t))return e;let n=a.get(t)||[];return e.splitAt(n,yI*100)}),s=new IL(e.curves.length);for(let t of e.curves){let[[e,n],[r,i]]=t.boundingBox.bounds;s.add(e,n,r,i)}s.finish();let c=Math.abs(n),l=o.filter(n=>{let[[r,i],[a,o]]=n.boundingBox.bounds;return!s.search(r-c,i-c,a+c,o+c).some(r=>t(e.curves,r).distanceFrom(n)<c-yI)});if(!l.length)return null;let u=yq(l).filter(e=>e.length>1).map(e=>new ML(e)).filter(e=>e.isClosed());return u.length?u.length===1?Do(u,0,`offsetBlueprint`):new YL(u):null}var Uq=e=>{let t=Do(e,0,`fuseAll`);for(let n=1;n<e.length;n++)t=nz(t,Do(e,n,`fuseAll`));return t};function Wq(e,t,n={}){if(e instanceof ML)return Hq(e,t,n);if(e instanceof YL)return Uq(e.blueprints.map(e=>Wq(e,t,n)));if(e instanceof XL){let r=Uq(e.blueprints.slice(1).map(e=>Wq(e,-t,n)));return iz(Wq(Do(e.blueprints,0,`offset`),t,n),r)}return null}function Gq(e,t){return e instanceof ML?new ML(sL(e.curves,t)):e instanceof XL?new XL(e.blueprints.map(e=>Gq(e,t))):e instanceof YL?new YL(e.blueprints.map(e=>Gq(e,t))):e}function Kq(e,t,n,r){let a=()=>!0;r&&(a=r.shouldKeep.bind(r));let o=[hA(t.curves)],s=(t,r)=>{a({firstCurve:t,secondCurve:r,point:t.lastPoint})?o.push(...e(t,r,n)):o.push(t,r)};t.curves.slice(1).forEach(e=>{let t=o.pop();t||i(`customCorners.modifyCorners`,`Unexpected empty curve stack during filleting`),s(t,e)});let c=o.at(-1);if(c||i(`customCorners.modifyCorners`,`Unexpected empty curve list during corner modification`),xI(hA(o).firstPoint,c.lastPoint)&&o.length>1){let e=o.pop(),t=o.shift();(!e||!t)&&i(`customCorners.modifyCorners`,`Unexpected empty curve stack during close-and-fillet`),s(e,t)}return new ML(o)}function qq(e,t,n,r){return t instanceof ML?Kq(e,t,n,r):t instanceof XL?new XL(t.blueprints.map(t=>Kq(e,t,n,r))):t instanceof YL?new YL(t.blueprints.map(t=>qq(e,t,n,r)).filter(e=>e!==null)):null}function Jq(e,t,n){return qq(KL,e,t,n)}function Yq(e,t,n){return qq(qL,e,t,n)}function Xq(e,t){return e instanceof ML?UK(t):e instanceof XL?WK(t):new aq(t.map(e=>Array.isArray(e)?WK(e):UK(e)))}var Zq=class e{innerShape;constructor(e=null){this.innerShape=e}clone(){return new e(this.innerShape?.clone()||null)}serialize(){if(!this.innerShape)return JSON.stringify({type:`Empty`});function e(t){if(t instanceof XL)return{type:`CompoundBlueprint`,blueprints:t.blueprints.map(e)};if(t instanceof YL)return{type:`Blueprints`,blueprints:t.blueprints.map(e)};if(t instanceof ML)return{type:`Blueprint`,curves:t.curves.map(e=>e.serialize())};i(`Drawing.serialize`,`Unknown shape type for serialization`)}return JSON.stringify(e(this.innerShape))}get boundingBox(){return this.innerShape?this.innerShape.boundingBox:new nL}stretch(t,n,r){return this.innerShape?new e(this.innerShape.stretch(t,n,r)):new e}get repr(){return this.innerShape===null?`=== empty shape`:this.innerShape.repr}rotate(t,n){return this.innerShape?new e(this.innerShape.rotate(t,n)):new e}translate(t,n=0){return this.innerShape?new e(typeof t==`number`?this.innerShape.translate(t,n):this.innerShape.translate(t)):new e}scale(t,n){return this.innerShape?new e(this.innerShape.scale(t,n)):new e}mirror(t,n,r){return this.innerShape?new e(this.innerShape.mirror(t,n,r)):new e}cut(t){return new e(iz(this.innerShape,t.innerShape))}fuse(t){return new e(nz(this.innerShape,t.innerShape))}intersect(t){return new e(az(this.innerShape,t.innerShape))}fillet(t,n){let r=n&&n(vR());return new e(Jq(this.innerShape,t,r))}chamfer(t,n){let r=n&&n(vR());return new e(Yq(this.innerShape,t,r))}sketchOnPlane(e,t){this.innerShape||i(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnPlane(e,t);return Xq(this.innerShape,n)}sketchOnFace(e,t){this.innerShape||i(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnFace(e,t);return Xq(this.innerShape,n)}punchHole(e,t,n={}){return this.innerShape?this.innerShape.punchHole(e,t,n):e}toSVG(e){return this.innerShape?.toSVG(e)||``}toSVGViewBox(e=1){return this.innerShape?.toSVGViewBox(e)||``}toSVGPaths(){return this.innerShape?.toSVGPaths()||[]}offset(t,n={}){return new e(Wq(this.innerShape,t,n))}approximate(t,n={}){return t!==`svg`&&i(`Drawing.approximate`,`Only 'svg' is supported for now`),new e(Gq(this.innerShape,n))}get blueprint(){if(!(this.innerShape instanceof ML)){if(this.innerShape instanceof YL&&this.innerShape.blueprints.length===1&&this.innerShape.blueprints[0]instanceof ML)return this.innerShape.blueprints[0];i(`Drawing.blueprint`,`This drawing is not a blueprint`)}return this.innerShape}};function Qq(e){function t(e){if(e.type===`CompoundBlueprint`)return new XL(e.blueprints.map(t));if(e.type===`Blueprints`)return new YL(e.blueprints.map(t));if(e.type===`Blueprint`)return new ML(e.curves.map(e=>rL(e)));i(`Drawing.deserialize`,`Unknown shape type for deserialization`)}return new Zq(t(JSON.parse(e)))}var $q=class extends fR{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new Zq(new ML(this.pendingCurves))}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}};function eJ(e){let t=new $q;return e&&t.movePointerTo(e),t}function tJ(e,t,n=0){return new Zq(bR(e,t,n))}var nJ=tJ;function rJ(e){return new Zq(new ML([dL(e)]))}function iJ(e,t){let[n,r]=[e,t].sort((e,t)=>e-t);return new Zq(new ML([fL(r,n,r===e?[1,0]:[0,1])]))}function aJ(e){return eJ().movePointerTo([-e,0]).sagittaArc(2*e,0,e).sagittaArc(-2*e,0,e).close()}function oJ(e,t){return eJ().movePointerTo([-e,0]).halfEllipse(2*e,0,t).halfEllipse(-2*e,0,t).close()}function sJ(e,t,n=0){return new Zq(yR(e,t,n))}function cJ(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){return new Zq(uq(e,{startX:t,startY:n,fontSize:r,fontFamily:i}))}var lJ=(e,t={},n={})=>{e.length<2&&i(`drawPointsInterpolation`,`Need at least 2 points for interpolation, got ${e.length}`);let r=[j(hL(e,t))],a=e[0],o=e[e.length-1];return n.closeShape&&a&&o&&!xI(a,o)&&r.push(cL(o,a)),new Zq(new ML(r))},uJ=(e,{pointsCount:t=400,start:n=0,stop:r=1,closeShape:i=!1}={},a={})=>{let o=(r-n)/t;return lJ([...Array(t+1).keys()].map(t=>e(n+t*o)),a,{closeShape:i})},dJ=e=>{try{var t=NT();let n=t.u(new KT),r=nJ(1e3,1e3).sketchOnPlane();n.register(r.wire);let i=n.register(j(AA(r.wire))),a=yq(e.map(e=>OL(e,i))).map(e=>new ML(e));return a.length===0?new Zq:a.length===1?new Zq(a[0]):new Zq(new YL(a))}catch(e){t.e=e}finally{t.d()}};function fJ(e,t=`front`){let n;n=typeof t==`string`?j(_q(t)):t;let{visible:r,hidden:i}=vq(e,n);try{return{visible:dJ(r),hidden:dJ(i)}}finally{for(let e of r)e[Symbol.dispose]();for(let e of i)e[Symbol.dispose]()}}function pJ(e){try{var t=NT();let n=t.u(new KT),r=n.register(CE(j(cO(e.wrapped)))),i=yq(sD(n.register(TO(r))).map(t=>OL(t,e))).map(e=>new ML(e));return i.length===0?new Zq:i.length===1?new Zq(i[0]):new Zq(new YL(i))}catch(e){t.e=e}finally{t.d()}}function mJ(e,t,n){return n===void 0?e.sketchOnPlane(t):e.sketchOnPlane(t,n)}function hJ(e,t){return e.fuse(t)}function gJ(e,t){return e.cut(t)}function _J(e,t){return e.intersect(t)}function vJ(e,t,n){return e.fillet(t,n)}function yJ(e,t,n){return e.chamfer(t,n)}function bJ(e,t,n=0){return typeof t==`number`?e.translate(t,n):e.translate(t)}function xJ(e,t,n){return e.rotate(t,n)}function SJ(e,t,n){return e.scale(t,n)}function CJ(e,t,n,r){return e.mirror(t,n,r)}function wJ(e){let t=e.clone();return t.reverse(),t}function TJ(e){return e.boundingBox}function EJ(e){return e.firstPoint}function DJ(e){return e.lastPoint}function OJ(e,t,n){return e.splitAt(t,n)}function kJ(e,t,n){return e.parameter(t,n)}function AJ(e,t){return e.tangentAt(t)}function jJ(e,t){return e.isOnCurve(t)}function MJ(e,t){return e.distanceFrom(t)}function NJ(e){return e.length===0?k(P(M.BLUEPRINT_EMPTY_CURVES,`createBlueprint: at least one curve is required`)):O(new ML(e))}function PJ(e){return e.length===0?k(P(M.COMPOUND_BLUEPRINT_EMPTY,`createCompoundBlueprint: at least one blueprint (outer boundary) is required`)):O(new XL(e))}function FJ(e){return e.boundingBox}function IJ(e){return e.orientation}function LJ(e,t){return e.isInside(t)}function RJ(e){return e.toSVGPathD()}function zJ(e,t,n){return e.translate(t,n)}function BJ(e,t,n){return e.rotate(t,n)}function VJ(e,t,n){return e.scale(t,n)}function HJ(e,t,n,r){return e.mirror(t,n,r)}function UJ(e,t,n,r){return e.stretch(t,n,r)}function WJ(e,t,n){return e.sketchOnPlane(t,n)}function GJ(e,t,n){return e.sketchOnFace(t,n)}function KJ(e,t){return n(e,t*3)}function qJ(e,t){return n(e,t)}function JJ(e){let t=[`# brepjs OBJ export`],n=e.vertices.length/3;for(let r=0;r<n;r++){let[n,i,a]=KJ(e.vertices,r);t.push(`v ${n} ${i} ${a}`)}let r=e.normals.length/3;for(let n=0;n<r;n++){let[r,i,a]=KJ(e.normals,n);t.push(`vn ${r} ${i} ${a}`)}let i=n=>{let[r,i,a]=qJ(e.triangles,n);t.push(`f ${r+1}//${r+1} ${i+1}//${i+1} ${a+1}//${a+1}`)};if(e.faceGroups.length>0)for(let n of e.faceGroups){t.push(`g face_${n.faceId}`);let e=n.count/3;for(let t=0;t<e;t++)i(n.start+t*3)}else{let t=e.triangles.length/3;for(let e=0;e<t;e++)i(e*3)}return t.join(`
25
+ `)+`
26
+ `}var YJ=5126,XJ=5125,ZJ=34962,QJ=34963,$J=[-Math.SQRT1_2,0,0,Math.SQRT1_2];function eY(e){return e===`Z`?[{mesh:0}]:[{name:`Z_up_to_Y_up`,rotation:$J,children:[1]},{mesh:0}]}function tY(e){let n=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0];for(let i=0;i<e.length;i+=3)for(let a=0;a<3;a++){let o=t(e,i+a);o<t(n,a)&&(n[a]=o),o>t(r,a)&&(r[a]=o)}return{min:n,max:r}}function nY(e){return e+3&-4}function rY(e){let t=new Uint8Array(e),n=8192,r=[];for(let e=0;e<t.length;e+=n)r.push(String.fromCharCode(...t.subarray(e,e+n)));return btoa(r.join(``))}function iY(e,t){let n=cY(e,`base64`,t);return JSON.stringify(n)}function aY(e,t){let{doc:n,binBuffer:r}=lY(e,t),i=JSON.stringify(n),a=new TextEncoder().encode(i),o=nY(a.length),s=new Uint8Array(o);s.set(a);for(let e=a.length;e<o;e++)s[e]=32;let c=nY(r.byteLength),l=new Uint8Array(c);l.set(new Uint8Array(r));let u=20+o+8+c,d=new ArrayBuffer(u),f=new DataView(d),p=new Uint8Array(d);f.setUint32(0,1179937895,!0),f.setUint32(4,2,!0),f.setUint32(8,u,!0),f.setUint32(12,o,!0),f.setUint32(16,1313821514,!0),p.set(s,20);let m=20+o;return f.setUint32(m,c,!0),f.setUint32(m+4,5130562,!0),p.set(l,m+8),d}function oY(e,t,n,r,i){return[{bufferView:0,componentType:XJ,count:e.length,type:`SCALAR`},{bufferView:1,componentType:YJ,count:t.length/3,type:`VEC3`,min:r,max:i},{bufferView:2,componentType:YJ,count:n.length/3,type:`VEC3`}]}function sY(e,t,n){return[{buffer:0,byteOffset:0,byteLength:e,target:QJ},{buffer:0,byteOffset:nY(e),byteLength:t,target:ZJ},{buffer:0,byteOffset:nY(e)+t,byteLength:n,target:ZJ}]}function cY(e,t,n){let{vertices:r,normals:i,triangles:a}=e,o=n?.materials;if(o&&o.size>0&&e.faceGroups.length>0)return hY(e,t,o,n.upAxis??`Y`);let s=a.byteLength,c=r.byteLength,l=i.byteLength,u=nY(s)+c+l,{min:d,max:f}=tY(r),p={asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:eY(n?.upAxis??`Y`),meshes:[{primitives:[{attributes:{POSITION:1,NORMAL:2},indices:0}]}],accessors:oY(a,r,i,d,f),bufferViews:sY(s,c,l),buffers:[{byteLength:u}]};if(t===`base64`){let t=_Y(e);p.buffers[0]={byteLength:u,uri:`data:application/octet-stream;base64,`+rY(t)}}return p}function lY(e,t){let n=t?.materials;if(n&&n.size>0&&e.faceGroups.length>0){let{doc:r,binBuffer:i}=gY(e,n,t.upAxis??`Y`);return{doc:r,binBuffer:i}}return{doc:cY(e,`glb`,t),binBuffer:_Y(e)}}function uY(e,n){let{vertices:r,normals:i,triangles:a,faceGroups:o}=e,s=[],c=new Map,l=new Map;for(let e of n.values()){if(l.has(e))continue;let t=JSON.stringify([e.baseColor,e.metallic,e.roughness,e.name]),n=c.get(t);if(n!==void 0)l.set(e,n);else{let n=s.length;c.set(t,n),l.set(e,n),s.push({name:e.name??`material_${n}`,pbrMetallicRoughness:{baseColorFactor:e.baseColor??[.8,.8,.8,1],metallicFactor:e.metallic??0,roughnessFactor:e.roughness??.5}})}}let u=new Map;for(let e=0;e<o.length;e++){let t=mA(o,e),r=n.get(t.faceId),i=r===void 0?-1:l.get(r)??-1,a=u.get(i);a?a.push(e):u.set(i,[e])}let d=[];for(let[e,n]of u){let r=0;for(let e of n)r+=mA(o,e).count;let i=new Uint32Array(r),s=0;for(let e of n){let n=mA(o,e);for(let e=n.start;e<n.start+n.count;e++)i[s++]=t(a,e)}d.push({indices:i,materialIdx:e})}let f=0,p=[];for(let e of d){let t=e.indices.byteLength;p.push({byteOffset:f,byteLength:t}),f=nY(f+t)}let m=f;return{primitiveData:d,indexBufferInfos:p,verticesOffset:m,totalByteLength:m+r.byteLength+i.byteLength,uniqueMaterials:s}}function dY(e,t,n,r){let{vertices:i,normals:a}=e,{min:o,max:s}=tY(i),c=r.length;r.push({buffer:0,byteOffset:t,byteLength:i.byteLength,target:ZJ});let l=n.length;n.push({bufferView:c,componentType:YJ,count:i.length/3,type:`VEC3`,min:o,max:s});let u=r.length;r.push({buffer:0,byteOffset:t+i.byteLength,byteLength:a.byteLength,target:ZJ});let d=n.length;return n.push({bufferView:u,componentType:YJ,count:a.length/3,type:`VEC3`}),{verticesAccIdx:l,normalsAccIdx:d}}function fY(e,t,n,r,i,a){let o=[];for(let s=0;s<e.length;s++){let c=mA(e,s),l=mA(t,s),u=a.length;a.push({buffer:0,byteOffset:l.byteOffset,byteLength:l.byteLength,target:QJ});let d=i.length;i.push({bufferView:u,componentType:XJ,count:c.indices.length,type:`SCALAR`});let f={attributes:{POSITION:n,NORMAL:r},indices:d};c.materialIdx>=0&&(f.material=c.materialIdx),o.push(f)}return o}function pY(e,t,n=`Y`){let{primitiveData:r,indexBufferInfos:i,verticesOffset:a,totalByteLength:o,uniqueMaterials:s}=t,c=[],l=[],{verticesAccIdx:u,normalsAccIdx:d}=dY(e,a,c,l),f=fY(r,i,u,d,c,l);return{asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:eY(n),meshes:[{primitives:f}],accessors:c,bufferViews:l,buffers:[{byteLength:o}],materials:s}}function mY(e,t){let{vertices:n,normals:r}=e,{primitiveData:i,indexBufferInfos:a,verticesOffset:o,totalByteLength:s}=t,c=new ArrayBuffer(s),l=new Uint8Array(c);for(let e=0;e<i.length;e++){let t=mA(i,e),n=mA(a,e);l.set(new Uint8Array(t.indices.buffer,t.indices.byteOffset,t.indices.byteLength),n.byteOffset)}return l.set(new Uint8Array(n.buffer,n.byteOffset,n.byteLength),o),l.set(new Uint8Array(r.buffer,r.byteOffset,r.byteLength),o+n.byteLength),c}function hY(e,t,n,r=`Y`){let i=uY(e,n),a=pY(e,i,r);if(t===`base64`){let t=mY(e,i);a.buffers[0]={byteLength:i.totalByteLength,uri:`data:application/octet-stream;base64,`+rY(t)}}return a}function gY(e,t,n=`Y`){let r=uY(e,t);return{doc:pY(e,r,n),binBuffer:mY(e,r)}}function _Y(e){let{vertices:t,normals:n,triangles:r}=e,i=r.byteLength,a=t.byteLength,o=n.byteLength,s=nY(i)+a+o,c=new ArrayBuffer(s),l=new Uint8Array(c);return l.set(new Uint8Array(r.buffer,r.byteOffset,i),0),l.set(new Uint8Array(t.buffer,t.byteOffset,a),nY(i)),l.set(new Uint8Array(n.buffer,n.byteOffset,o),nY(i)+a),c}function vY(e,t){let n=t?.layer??`0`,r=[];r.push(`0`,`SECTION`,`2`,`HEADER`),r.push(`9`,`$ACADVER`,`1`,`AC1009`),r.push(`0`,`ENDSEC`);let i=new Set([n]);for(let t of e)t.layer&&i.add(t.layer);r.push(`0`,`SECTION`,`2`,`TABLES`),r.push(`0`,`TABLE`,`2`,`LAYER`,`70`,String(i.size));for(let e of i)r.push(`0`,`LAYER`,`2`,e,`70`,`0`,`62`,`7`,`6`,`CONTINUOUS`);r.push(`0`,`ENDTAB`),r.push(`0`,`ENDSEC`),r.push(`0`,`SECTION`,`2`,`ENTITIES`);for(let t of e){let e=t.layer??n;if(t.type===`LINE`)r.push(`0`,`LINE`,`8`,e,`10`,String(t.start[0]),`20`,String(t.start[1]),`30`,`0`,`11`,String(t.end[0]),`21`,String(t.end[1]),`31`,`0`);else{r.push(`0`,`LWPOLYLINE`,`8`,e,`90`,String(t.points.length),`70`,t.closed?`1`:`0`);for(let e of t.points)r.push(`10`,String(e[0]),`20`,String(e[1]))}}return r.push(`0`,`ENDSEC`),r.push(`0`,`EOF`),r.join(`
27
+ `)+`
28
+ `}function yY(e,t){let n=t?.curveSegments??32,r=[],i=bY(e);for(let e of i)for(let t of e.curves)r.push(...xY(t,n));return vY(r,t)}function bY(e){if(`curves`in e&&Array.isArray(e.curves))return[e];if(`blueprints`in e&&Array.isArray(e.blueprints)){let t=[];for(let n of e.blueprints)t.push(...bY(n));return t}return[]}function xY(e,t){return e.geomType===`LINE`?[{type:`LINE`,start:e.firstPoint,end:e.lastPoint}]:[SY(e,t)]}function SY(e,t){let n=e.firstParameter,r=e.lastParameter,i=[];for(let a=0;a<=t;a++){let o=n+(r-n)*(a/t);i.push(e.value(o))}return{type:`POLYLINE`,points:i}}var CY=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=t&1?3988292384^t>>>1:t>>>1;CY[e]=t}function wY(e){let t=4294967295;for(let n of e)t=(CY[(t^n)&255]??0)^t>>>8;return(t^4294967295)>>>0}function TY(e,t,n,r){return e.setUint32(n,67324752,!0),n+=4,e.setUint16(n,20,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,r.crc,!0),n+=4,e.setUint32(n,r.data.length,!0),n+=4,e.setUint32(n,r.data.length,!0),n+=4,e.setUint16(n,r.name.length,!0),n+=2,e.setUint16(n,0,!0),n+=2,t.set(r.name,n),n+=r.name.length,t.set(r.data,n),n+=r.data.length,n}function EY(e,t,n,r,i){return e.setUint32(n,33639248,!0),n+=4,e.setUint16(n,20,!0),n+=2,e.setUint16(n,20,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,i.crc,!0),n+=4,e.setUint32(n,i.data.length,!0),n+=4,e.setUint32(n,i.data.length,!0),n+=4,e.setUint16(n,i.name.length,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,0,!0),n+=4,e.setUint32(n,r,!0),n+=4,t.set(i.name,n),n+=i.name.length,n}function DY(e,t,n,r,i){e.setUint32(t,101010256,!0),t+=4,e.setUint16(t,0,!0),t+=2,e.setUint16(t,0,!0),t+=2,e.setUint16(t,n,!0),t+=2,e.setUint16(t,n,!0),t+=2,e.setUint32(t,i,!0),t+=4,e.setUint32(t,r,!0),t+=4,e.setUint16(t,0,!0)}function OY(e){let t=0,n=[];for(let r of e)n.push({offset:t,entry:r}),t+=30+r.name.length+r.data.length;let r=t,i=0;for(let t of e)i+=46+t.name.length;let a=t+i+22,o=new ArrayBuffer(a),s=new DataView(o),c=new Uint8Array(o),l=0;for(let{entry:e}of n)l=TY(s,c,l,e);for(let{offset:e,entry:t}of n)l=EY(s,c,l,e,t);return DY(s,l,e.length,r,i),o}function kY(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`)}function AY(e){let t=e=>Math.round(Math.max(0,Math.min(1,e))*255).toString(16).padStart(2,`0`).toUpperCase();return`#${t(e[0])}${t(e[1])}${t(e[2])}${t(e[3])}`}function jY(e){let t=[];for(let n=0;n<e.vertices.length;n+=3){let r=e.vertices[n]??0,i=e.vertices[n+1]??0,a=e.vertices[n+2]??0;t.push(` <vertex x="${r}" y="${i}" z="${a}" />`)}return t}function MY(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values()){let e=AY(r);t.has(e)||(t.set(e,n.length),n.push(e))}return{colorIndexByHex:t,colorHexList:n}}function NY(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values())t.has(r.name)||(t.set(r.name,n.length),n.push(r));return{materialIndexByName:t,materialList:n}}function PY(e,t,n,r,i){let a=new Map;for(let o of e.faceGroups){let e=o.start/3,s=o.count/3,c=o.faceId,l;if(n!==void 0){let e=n.get(c);if(e!==void 0){let t=i.get(e.name);t!==void 0&&(l={pid:3,p1:t})}}if(l===void 0&&t!==void 0){let e=t.get(c);if(e!==void 0){let t=AY(e),n=r.get(t);n!==void 0&&(l={pid:2,p1:n})}}if(l!==void 0)for(let t=e;t<e+s;t++)a.set(t,l)}return a}function FY(e,t){let n=[];for(let r=0;r<e.triangles.length;r+=3){let i=r/3,a=e.triangles[r]??0,o=e.triangles[r+1]??0,s=e.triangles[r+2]??0,c=t.get(i);c===void 0?n.push(` <triangle v1="${a}" v2="${o}" v3="${s}" />`):n.push(` <triangle v1="${a}" v2="${o}" v3="${s}" pid="${c.pid}" p1="${c.p1}" />`)}return n}function IY(e,t){let n=[];if(e.length>0){let t=e.map(e=>` <color color="${e}" />`).join(`
29
+ `);n.push(` <colorgroup id="2">\n${t}\n </colorgroup>`)}if(t.length>0){let e=t.map(e=>{let t=e.displayColor===void 0?`#FFFFFFFF`:AY(e.displayColor);return` <base name="${kY(e.name)}" displaycolor="${t}" />`}).join(`
30
+ `);n.push(` <basematerials id="3">\n${e}\n </basematerials>`)}return n}function LY(e,t,n,r,i){let a=jY(e),{colorIndexByHex:o,colorHexList:s}=MY(r),{materialIndexByName:c,materialList:l}=NY(i),u=FY(e,PY(e,r,i,o,c)),d=IY(s,l);return`<?xml version="1.0" encoding="UTF-8"?>
31
+ <model unit="${n}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${l.length>0?`
32
+ xmlns:m="http://schemas.microsoft.com/3dmanufacturing/material/2015/02"`:``}>
33
+ <resources>${d.length>0?`
34
+ `+d.join(`
35
+ `):``}
36
+ <object id="1" name="${kY(t)}" type="model">
37
+ <mesh>
38
+ <vertices>
39
+ ${a.join(`
40
+ `)}
41
+ </vertices>
42
+ <triangles>
43
+ ${u.join(`
44
+ `)}
45
+ </triangles>
46
+ </mesh>
47
+ </object>
48
+ </resources>
49
+ <build>
50
+ <item objectid="1" />
51
+ </build>
52
+ </model>`}function RY(e,t={}){let{name:n=`model`,unit:r=`millimeter`,colors:i,materials:a}=t,o=new TextEncoder,s=LY(e,n,r,i,a);function c(e,t){let n=o.encode(e),r=o.encode(t);return{name:n,data:r,crc:wY(r)}}return OY([c(`[Content_Types].xml`,`<?xml version="1.0" encoding="UTF-8"?>
53
+ <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
54
+ <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
55
+ <Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />
56
+ </Types>`),c(`_rels/.rels`,`<?xml version="1.0" encoding="UTF-8"?>
57
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
58
+ <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
59
+ </Relationships>`),c(`3D/3dmodel.model`,s)])}function zY(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function BY(e){return[e[0],-e[1]]}function VY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(cL(BY([t.cx,t.cy]),BY([a,o]))),t.cx=a,t.cy=o,i+=2}}function HY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(cL(BY([t.cx,t.cy]),BY([a,o]))),t.cx=a,t.cy=o,i+=2}}function UY(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(cL(BY([t.cx,t.cy]),BY([e,t.cy]))),t.cx=e}}function WY(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(cL(BY([t.cx,t.cy]),BY([t.cx,e]))),t.cy=e}}function GY(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(mL(BY([t.cx,t.cy]),[BY([s,c]),BY([l,u])],BY([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function KY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(mL(BY([t.cx,t.cy]),[BY([c,l]),BY([u,d])],BY([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function qY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(mL(BY([t.cx,t.cy]),[BY([s,c])],BY([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function JY(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(mL(BY([t.cx,t.cy]),[BY([c,l])],BY([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function YY(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[lL(BY([e,t]),BY(c),BY([e,s])),lL(BY([e,s]),BY(l),BY([e,t]))]}catch{return[]}}function XY(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[lL(BY([e,t]),BY([b,x]),BY([n,r]))]}catch{return[cL(BY([e,t]),BY([n,r]))]}}function ZY(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(cL(BY([t.cx,t.cy]),BY([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...YY(t.cx,t.cy,s,c,u)):r.push(...XY(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function QY(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(cL(BY([e.cx,e.cy]),BY([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function $Y(e){let t=zY(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:VY(i,r,t,n);break;case`L`:HY(i,r,t,n);break;case`H`:UY(i,r,t,n);break;case`V`:WY(i,r,t,n);break;case`C`:GY(i,r,t,n);break;case`S`:KY(i,r,t,n);break;case`Q`:qY(i,r,t,n);break;case`T`:JY(i,r,t,n);break;case`A`:ZY(i,r,t,n);break;case`Z`:QY(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function eX(e){try{let t=$Y(e);return t.length===0?k(wo(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new ML(t))}catch(e){return k(wo(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function tX(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=eX(l);u.ok&&n.push(u.value)}return n.length===0?k(wo(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(wo(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function nX(e,t){try{let n=U(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(wo(M.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function rX(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(wo(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(LE(n[0]))}catch(e){return k(wo(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function iX(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(wo(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(LE(n))}catch(e){return k(wo(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function aX(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(wo(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(LE(n[0]))}catch(e){return k(wo(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function oX(e,t,n={}){let r=uq(e,t);return new aq((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new HK(e.map(UK)):UK(e)))}function sX(e,t){let n=t?.fontSize??1,r=cq(t?.fontFamily);if(!r)return k(P(M.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return O({width:i,height:o-s,ascender:o,descender:s})}function cX(e){let t=e?.fontSize??1,n=cq(e?.fontFamily);if(!n)return k(P(M.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function lX(e){return e.type===`init`}function uX(e){return e.type===`operation`}function dX(e){return e.type===`dispose`}function fX(e){return e.type===`batch`}function pX(e){return e.success}function mX(e){return!e.success}function hX(){return{pending:new Map}}function gX(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function _X(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function vX(e){return e.pending.size}function yX(e){return e.pending.size===0}function bX(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function xX(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),pX(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}function SX(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){xX(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function CX(){return{operations:new Map}}function wX(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function TX(e){return e instanceof Error?e.message:String(e)}function EX(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:TX(e)}}}function DX(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function OX(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(lX(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:TX(e)};n.postMessage(t)}return}if(uX(i)){let t=EX(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(DX(i.id,t));return}if(fX(i)){let t=i.operations.map(t=>EX(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(dX(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function kX(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:SX({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var AX=Object.defineProperty,jX=(e,t)=>{let n={};for(var r in e)AX(n,r,{get:e[r],enumerable:!0});return t||AX(n,Symbol.toStringTag,{value:`Module`}),n},MX=1,NX=2;function PX(e,t){t===`commonFace`&&e.SetGlue(MX),t===`sameFace`&&e.SetGlue(NX)}function FX(e){return typeof e==`number`}function IX(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function LX(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(FX):!1}function RX(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=zD(ED(hA(r)),t);for(let e=1;e<r.length;e++){let n=zD(ED(mA(r,e)),t);n<a&&(a=n,i=e)}return[mA(r,i)]},r=e=>{let t=n(e);return t.length===0?k(To(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(hA(t))};return{...e,findAll:n,findUnique:r}}function zX(e){return II(`vertex`,e,zX,(t,n)=>({nearestTo:t=>RX(zX(e),t),atPosition:(e,t=1e-4)=>n(n=>zD(ED(n),e)<t),withinBox:(e,t)=>n(n=>{let r=ED(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=ED(n);return Math.abs(zD(i,t)-e)<r})}))}function BX(){return zX([])}var VX=new Map,HX=null,UX=null;function WX(e,t){VX.set(e,t),HX||=e,e===HX&&(UX=t)}function GX(e){if(!e&&UX)return UX;let t=e??HX;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=VX.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function KX(){return HX}function qX(e,t=`voxel`){WX(t,e),HX=t,UX=e}function JX(e){if(e.vertices.length%3!=0)return P(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return P(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return P(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function YX(e,t){return JX(e)||(t.length%3==0?null:P(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function XX(e){try{return O(GX(e))}catch(e){return k(Co(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function ZX(e,t,n){let r=YX(e,t);if(r)return k(r);let i=XX(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function QX(e,t,n){let r=YX(e,t);if(r)return k(r);let i=XX(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var $X=48,eZ=2;function tZ(e,t,n){let r=JX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??$X,a=t?.padding??eZ;if(!Number.isInteger(i)||i<1)return k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=XX(n);if(A(o))return o;try{try{var s=NT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(F(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var nZ=.001;function rZ(e,t=nZ){try{let n=$k(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(F(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(F(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var iZ=48,aZ=2,oZ={union:0,intersection:1,difference:2};function sZ(e){let t=e?.resolution??iZ,n=e?.padding??aZ;return!Number.isInteger(t)||t<1?k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function cZ(e){if(e.positions.length===0||e.indices.length===0)return k(F(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function lZ(e,t,n,r){let i=JX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(P(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=sZ(n);if(A(a))return a;let o=XX(r);if(A(o))return o;try{try{var s=NT();return cZ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(F(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function uZ(e,t,n,r){let i=JX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(P(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=sZ(n);if(A(a))return a;let o=XX(r);if(A(o))return o;try{try{var s=NT();return cZ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(F(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function dZ(e,t,n,r,i){let a=JX(e);if(a)return k(a);let o=JX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=oZ[n],c=sZ(r);if(A(c))return c;let l=XX(i);if(A(l))return l;try{try{var u=NT();return cZ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(F(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function fZ(e,t,n,r){let i=rZ(e);return A(i)?i:lZ(i.value,t,n,r)}function pZ(e,t,n,r){let i=rZ(e);return A(i)?i:uZ(i.value,t,n,r)}function mZ(e,t,n,r,i){let a=rZ(e);if(A(a))return a;let o=rZ(t);return A(o)?o:dZ(a.value,o.value,n,r,i)}var hZ=48,gZ=2,_Z={union:0,intersection:1,difference:2};function vZ(e){let t=e?.resolution??hZ,n=e?.padding??gZ;return!Number.isInteger(t)||t<1?k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function yZ(e){try{var t=NT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(F(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function bZ(e){return{raw:e,delete(){e.free()}}}function xZ(e){return SZ(e)}function SZ(e){let t=GT(bZ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,_Z[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=yZ(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function CZ(e){return!e.disposed}function wZ(){return k(P(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function TZ(e,t,n){let r=JX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=vZ(t);if(A(i))return i;let a=XX(n);if(A(a))return a;try{return O(SZ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(F(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function EZ(e,t,n,r,i){let a=JX(e);if(a)return k(a);let o=JX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=vZ(r);if(A(s))return s;let c=XX(i);if(A(c))return c;try{return O(SZ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,_Z[n],s.value.resolution,s.value.padding)))}catch(e){return k(F(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function DZ(e,t,n){if(!CZ(e)||!CZ(t))return wZ();try{return e.value.boolean(t.value,_Z[n]),O(e)}catch(e){return k(F(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function OZ(e,t){if(!CZ(e))return wZ();if(!Number.isFinite(t))return k(P(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(F(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function kZ(e,t){if(!CZ(e))return wZ();if(!Number.isFinite(t)||t<=0)return k(P(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(F(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function AZ(e){if(!CZ(e))return wZ();try{return e.value.reinit(),O(e)}catch(e){return k(F(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function jZ(e){if(!CZ(e))return wZ();try{return yZ(e.value)}catch(e){return k(F(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function MZ(e,t,n){let r=rZ(e);return A(r)?r:TZ(r.value,t,n)}function NZ(e,t,n,r,i){let a=rZ(e);if(A(a))return a;let o=rZ(t);return A(o)?o:EZ(a.value,o.value,n,r,i)}var PZ=48,FZ=2;function IZ(e){try{return O(GX(e))}catch(e){return k(Co(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function LZ(e){let t=e?.resolution??PZ,n=e?.padding??FZ;return!Number.isInteger(t)||t<1?k(P(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function RZ(e){return{raw:e,delete(){e.free()}}}var zZ={offsetField(e){return BZ(this.value.offset_field(e.value))},roundField(e){return BZ(this.value.round_field(e.value))},shellField(e){return BZ(this.value.shell_field(e.value))},smoothUnionField(e,t){return BZ(this.value.smooth_union_field(e.value,t.value))}};function BZ(e){let t=GT(RZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return BZ(this.value.union(e.value))},intersection(e){return BZ(this.value.intersection(e.value))},difference(e){return BZ(this.value.difference(e.value))},smoothUnion(e,t){return BZ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return BZ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return BZ(this.value.smooth_difference(e.value,t))},offset(e){return BZ(this.value.offset(e))},round(e){return BZ(this.value.round(e))},shell(e){return BZ(this.value.shell(e))},onion(e){return BZ(this.value.onion(e))},...zZ,translate(e,t,n){return BZ(this.value.translate(e,t,n))},rotate(e,t,n,r){return BZ(this.value.rotate(e,t,n,r))},scale(e){return BZ(this.value.scale(e))},rasterize(e){return VZ(this.value,e)},rasterizeIn(e,t){return HZ(this.value,e,t)}}}function VZ(e,t){let n=LZ(t);if(A(n))return n;try{return O(xZ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return UZ(e)}}function HZ(e,t,n){let r=LZ(n);if(A(r))return r;let i=WZ(t);if(i)return k(i);try{return O(xZ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return UZ(e)}}function UZ(e){return k(F(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function WZ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return P(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return P(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function GZ(e,t){let n=IZ(t);if(A(n))return n;try{return O(BZ(e(n.value)))}catch(e){return k(F(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function KZ(e,t){return GZ(t=>t.Sdf.sphere(e),t)}function qZ(e,t,n,r){return GZ(r=>r.Sdf.box_(e,t,n),r)}function JZ(e,t,n,r,i){return GZ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function YZ(e,t,n){return GZ(n=>n.Sdf.cylinder(e,t),n)}function XZ(e,t,n){return GZ(n=>n.Sdf.cone(e,t),n)}function ZZ(e,t,n,r){return GZ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function QZ(e,t,n){return GZ(n=>n.Sdf.torus(e,t),n)}function $Z(e,t,n){return GZ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function eQ(e){if(e.length<2)return k(P(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return k(P(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return O(t)}function tQ(e,t,n,r){let i=eQ(e);if(A(i))return i;let a=n?.closed??!1;return GZ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var nQ={gyroid:0,schwarzP:1,diamond:2};function rQ(e,t,n,r){let i=nQ[e];return i===void 0?k(P(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):GZ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function iQ(e,t,n){return GZ(n=>n.Sdf.strut_lattice(e,t.value),n)}function aQ(e){return{raw:e,delete(){e.free()}}}function oQ(e){let t=GT(aQ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function sQ(e,t){let n=IZ(t);if(A(n))return n;try{return O(oQ(e(n.value)))}catch(e){return k(F(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function cQ(e,t){return sQ(t=>t.ScalarField.constant(e),t)}function lQ(e,t,n,r,i,a){return sQ(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function uQ(e,t,n,r,i,a,o){return sQ(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function dQ(e,t,n,r){return sQ(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function fQ(e,t,n,r){return sQ(r=>r.ScalarField.clamp(e.value,t,n),r)}var pQ={gyroid:0,schwarzP:1,diamond:2},mQ=48,hQ=2;function gQ(e){let t=pQ[e.type];if(t===void 0)return k(P(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(P(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(P(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??mQ,r=e.padding??hQ;return!Number.isInteger(n)||n<1?k(P(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(P(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function _Q(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function vQ(e,t,n){let r=JX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=gQ(t);if(A(i))return i;let a=XX(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=NT();return O(_Q(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(F(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function yQ(e,t,n){let r=rZ(e);return A(r)?r:vQ(r.value,t,n)}function bQ(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return k(P(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=gQ(t);if(A(r))return r;let i=XX(n);if(A(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=NT();return O(_Q(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(F(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function xQ(e){return U().createVector3d(e[0],e[1],e[2])}function SQ(e){return U().createPoint3d(e[0],e[1],e[2])}function CQ(e){return U().createDirection3d(e[0],e[1],e[2])}function wQ(e){return[e.X(),e.Y(),e.Z()]}function TQ(e){return[e.X(),e.Y(),e.Z()]}function EQ(e){return[e.X(),e.Y(),e.Z()]}function DQ(e,t){let n=xQ(e);try{return t(n)}finally{n.delete()}}function OQ(e,t){let n=SQ(e);try{return t(n)}finally{n.delete()}}function kQ(e,t){let n=CQ(e);try{return t(n)}finally{n.delete()}}var AQ=.299,jQ=.587,MQ=.114;function NQ(e,t={}){if(e.length<2)return k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return k(P(M.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return PQ(e,n,r,s,c,o)}catch{}try{return FQ(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function PQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().bsplineSurface(o,t,n));return jE(s)?O(s):(VE(s),k(N(M.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function FQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=W(U().triangulatedSurface(o,t,n));return jE(s)||ME(s)?O(s):(VE(s),k(N(M.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function IQ(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(wo(M.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(wo(M.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(wo(M.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(wo(M.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(AQ*o+jQ*s+MQ*l)/255;break}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),NQ(l,u)}function LQ(e,t){return U().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function RQ(e,t={}){if(e.length===0)return k(P(M.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=LQ(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=U(),r=e.map(e=>e.wrapped),i=W(t.hull(r,n));return NE(i)?O(i):(VE(i),k(N(M.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(N(M.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(N(M.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function zQ(e){if(e.length<4)return k(P(M.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=U(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=W(t.hullFromPoints(n,.1));return NE(r)?O(r):(VE(r),k(N(M.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(N(M.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(N(M.HULL_FAILED,`convexHull failed: ${t}`,e))}}function BQ(e){let n=cD(e);if(n.length!==1)return null;let r=t(n,0);if(CD(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function VQ(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return FE(r)?O(r):(VE(r),k(xo(M.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function HQ(e,t,n){let r=U();try{let i=uD(e),a=uD(t);if(i.length===0||a.length===0)return k(N(M.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=W(r.hullFromPoints(o,n));return FE(s)?O(s):(VE(s),k(xo(M.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function UQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(U().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(U().isNull(t.wrapped))return k(P(M.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!FE(e)||!FE(t))return k(P(M.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=BQ(t);return i===null?HQ(e,t,r):VQ(e,i,r)}function WQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(P(M.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(P(M.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return k(P(M.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=U(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=W(t.buildSolidFromFaces(n,i,r));return NE(a)?O(a):(VE(a),k(N(M.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var GQ=1e-10;function KQ(e,t,n,r){return e*r-t*n}function qQ(e,t,n,r){return e*n+t*r}function JQ(e,t){return Math.sqrt(e*e+t*t)}function YQ(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function XQ(e){let t=0;for(let n=0;n<e.length;n++){let r=YQ(e,n),i=YQ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function ZQ(e,t){let n=YQ(e,t-1),r=YQ(e,t),i=YQ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=JQ(a,o),c=i.x-r.x,l=i.y-r.y,u=JQ(c,l);if(s<GQ||u<GQ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=JQ(h,g);if(_<GQ)return{dx:d,dy:f};h/=_,g/=_;let v=qQ(h,g,d,f),y=Math.abs(v)>GQ?1/v:1;return{dx:h*y,dy:g*y}}function QQ(e){return!e.prev||!e.next?!1:KQ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function $Q(e){let t=e.map((t,n)=>{let r=ZQ(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function e$(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function t$(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function n$(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<GQ&&Math.abs(r)<GQ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<GQ)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>GQ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function r$(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=JQ(r,i);if(a<GQ)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<GQ)return null;let f=-c/d;if(f<GQ)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=JQ(y,b);if(x<GQ)return f;let S=qQ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function i$(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=n$(n,n.next);if(e!==null&&e>GQ){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(QQ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=r$(n,e,e.next);if(i!==null&&i>GQ){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function a$(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(o$(e))}catch(e){return k(F(M.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function o$(e){let t=XQ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=$Q(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=t$(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=n$(t,n),s=o!==null&&o>GQ?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else e$(e,t);continue}let n=a.filter(e=>e.active),s=i$(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=ZQ(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=ZQ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=ZQ(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[YQ(t,e),YQ(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&JQ(n.x-i.x,n.y-i.y)>GQ&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function s$(e){let t=sD(e).map(e=>{let t=kk(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function c$(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function l$(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function u$(e,t,n,r,i,a,o,s){let c=l$(n,r,i,a,e,t),l=l$(i,a,o,s,e,t),u=l$(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function d$(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||l$(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&u$(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(n===void 0||o===void 0||s===void 0)&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function f$(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=c$(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function p$(e,t){let n=(t?.angle??45)*GE,r=Math.tan(n);try{let t=s$(e);if(t.length<3)return k(N(M.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=a$(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(N(M.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=U(),o=f$(i,r,a);for(let[e,n,r]of d$(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return k(N(M.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),O(TE(t))}catch(e){try{let t=TE(a.sew(o,1e-6));return uE(t)?O(t):k(N(M.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(N(M.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function m$(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function h$(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function g$(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function _$(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function v$(e,t){return g$(e,h$(t)?t.map(m$):t.map(e=>e.map(e=>[...e])))}function y$(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(m$([e*i,t*a,0]));return g$(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function b$(e){return e.placements.length}function x$(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?k(P(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?FE(n)?i?HP(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):S$(n,r,!0):k(P(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):S$(n,r,!1)}function S$(e,t,n){let r=[];for(let n of t){let t=_k(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?HA(r,{unsafe:!0}):O(dj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function C$(e,t){return{geometry:$k(e.source,t),instances:e.placements}}var w$={coincident:3,concentric:4,distance:1,angle:1},T$=[1,0,0,0];function E$(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function D$(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function O$(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function k$(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function A$(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function j$(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function M$(e){return j$(k$(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function N$(e,t){let n=E$(tF(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:tF(t.rotation,e.normal)}:{},...e.direction?{direction:tF(t.rotation,e.direction)}:{}}}function P$(e,t,n){let r=e.normal??[0,0,1];return{position:A$(r,O$(r,D$(e.origin,t.origin))+n),rotation:T$}}function F$(e,t){let n=e.direction??[0,0,1],r=rF(t.direction??[0,0,1],n),i=tF(r,t.origin);return{position:D$(e.origin,i),rotation:r}}function I$(e,t,n){let r=j$(e.normal??[0,0,1]),i=j$(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,O$(i,r)))),o=k$(i,r);return{position:[0,0,0],rotation:nF(Math.hypot(o[0],o[1],o[2])<1e-9?M$(i):o,a-n)}}function L$(e,t,n){let r=D$(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:D$(E$(e,A$(i<1e-9?[1,0,0]:A$(r,1/i),n)),t),rotation:T$}}function R$(e,t,n,r){let i=j$(e);return{position:A$(i,O$(i,D$(t,n))-r),rotation:T$}}function z$(e,t,n){let r=j$(e.direction??[0,0,1]),i=E$(e.origin,A$(r,O$(r,D$(t,e.origin))));if(n===0)return{position:D$(i,t),rotation:T$};let a=D$(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:D$(E$(i,A$(o<1e-9?M$(r):A$(a,1/o),n)),t),rotation:T$}}function B$(e,t,n){let r=j$(t.direction??[0,0,1]),i=D$(t.origin,e),a=D$(i,A$(r,O$(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:A$(a,-1),rotation:T$}:{position:D$(A$(o<1e-9?M$(r):A$(a,1/o),n),a),rotation:T$}}function V$(e,t,n){let r=j$(e.direction??[0,0,1]),i=rF(j$(t.direction??[0,0,1]),r),a=D$(tF(i,t.origin),e.origin),o=D$(a,A$(r,O$(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:D$(A$(s<1e-9?M$(r):A$(o,1/s),n),o),rotation:i}}var H$=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),U$={angle:`plane`,concentric:`axis`},W$=new Set([`coincident`,`distance`,`angle`,`concentric`]);function G$(e,t,n){let r=U$[e];return r?t===r&&n===r:H$.has(`${t}-${n}`)}function K$(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return P$(e,t,n);case`point-plane`:return R$(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return L$(e.origin,t.origin,n);case`axis-axis`:return n===0?F$(e,t):V$(e,t,n);case`axis-point`:return z$(e,t.origin,n);case`point-axis`:return B$(e.origin,t,n);default:return null}}function q$(e,t,n){switch(e.type){case`concentric`:return F$(t,n);case`angle`:return I$(t,n,(e.value??0)*Math.PI/180);default:{let r=K$(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function J$(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:T$});let r=[],i=t.filter(e=>W$.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!G$(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:T$},l=N$(r.entity,a);n.set(i.node,q$(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(w$[t]??w$[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function Y$(e){if(e.face){let t=CO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:SO(e.face),normal:xO(e.face)}}if(e.edge){if(Ok(e.edge)===`LINE`)return{type:`axis`,origin:kk(e.edge),direction:Mk(e.edge)};let t=Pk(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function X$(e,t){let n=Y$(e),r=Y$(t);return!n||!r?k(P(M.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function Z$(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=X$(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=X$(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=X$(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=X$(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function Q$(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function $$(e){let t=e.mates;if(!t||t.length===0)return k(P(M.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];JP(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=Z$(e);if(!t.ok)return t;r.push(t.value)}let i=J$(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(N(M.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function e1(e,t,n=1e-6){if(U().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`));if(U().isNull(t.wrapped))return k(P(M.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`));let r=U().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})}function t1(e,n=1e-6){let r=[],i=e.map(e=>xD(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(n1(t(i,o),t(i,s),n))continue;let c=j(e1(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function n1(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function r1(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function i1(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function a1(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([i1(n,10),i1(n,20),i1(n,30)],[i1(n,11),i1(n,21),i1(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([i1(n,10),i1(n,20),i1(n,30)],[0,0,1],i1(n,40));if(t===`ARC`){let e=i1(n,50)*Math.PI/180,t=i1(n,51)*Math.PI/180;return r.makeCircleArc([i1(n,10),i1(n,20),i1(n,30)],[0,0,1],i1(n,40),e,t)}}async function o1(e,t){let n;try{n=await e.text()}catch(e){return k(wo(M.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=r1(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=a1(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([SE(U().makeWire(a))])}catch(e){return k(wo(M.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function s1(e,t,n=1e-6){let r=U(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return k(wo(t,`No valid triangular faces could be built`));try{return O(LE(r.sewAndSolidify(i,n)))}catch{try{return O(LE(r.sew(i,n)))}catch(e){return k(wo(t,`Failed to sew triangular faces`,e))}}}function c1(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function l1(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function u1(e){let t=(await e.text()).split(`
60
+ `),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=c1(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=l1(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(wo(M.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return d1(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(wo(M.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function d1(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return s1(n,M.OBJ_IMPORT_FAILED)}function f1(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function p1(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function m1(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&p1(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function h1(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function g1(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function _1(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function v1(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=m1(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of h1(a,`color`)){let t=m1(e).color;t!==void 0&&l.push(_1(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=m1(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of h1(a,`base`)){let t=m1(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(_1(t))}t.set(c,l)}return t}function y1(e){let t=[],n=[],r=[],i=v1(e);for(let n of h1(e,`vertex`)){let e=m1(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=g1(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=m1(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of h1(e,`triangle`)){let e=m1(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function b1(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function x1(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(LE(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return s1(t,M.THREEMF_IMPORT_FAILED)}}async function S1(e){try{let t=await e.arrayBuffer(),n=f1(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(wo(M.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=y1(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(wo(M.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=x1(r);if(i.ok){let e=b1(r.triangleColors);e!==null&&$O(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(wo(M.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function C1(e){try{let t=await e.arrayBuffer();return O(LE(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(wo(M.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function w1(e){return $(e)}function T1(e,t){return lk($(e),t)}function E1(e,t,n){let r=n?.at;return uk($(e),t,r,n?.axis)}function D1(e,t){let n=t?.at;return dk($(e),t?.normal??[1,0,0],n)}function O1(e,t,n){return fk($(e),t,n?.center)}function k1(e){return xk($(e))}function A1(e,t){return _k($(e),t)}function j1(e,t){return bk($(e),t)}function M1(e,t){return yk($(e),t)}function N1(e,t,n){return RA($(e),$(t),{...n,unsafe:!0})}function P1(e,t,n){return zA($(e),$(t),{...n,unsafe:!0})}function F1(e,t){return HA(e.map(e=>$(e)),{...t,unsafe:!0})}function I1(e,t,n){return UA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function L1(e,t,n){return BA($(e),$(t),{...n,unsafe:!0})}function R1(e,t,n){return GA($(e),t,n)}function z1(e,t,n){return ZA($(e),t,n)}function B1(e,t){return QA($(e),t)}function V1(e,t,n){return $A($(e),t,n)}function H1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(HI()).findAll(t)}function U1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(GI()).findAll(t)}function W1(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function G1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=H1(t,r),a=n),Zj(r,i,a)}function K1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=H1(t,r),a=n);let o=W1(a);return o.mode===`distAngle`?vj(r,[...i??sD(r)],o.distance,o.angle):Qj(r,i,o.distance)}function q1(e,t,n,r){let i=$(e);return $j(i,U1(t,i),n,r?.tolerance)}function J1(e,t,n){return eM($(e),t,n?.tolerance)}function Y1(e,t){return Yj($(e),t)}function X1(e,t,n){let r=$(e);return nM(r,U1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function Z1(e){return cM($(e))}function Q1(e){return Dk($(e))}function $1(e,t){return $k($(e),t)}function e0(e,t){return eA($(e),t)}function t0(e){return TD($(e))}function n0(e){return Sk($(e))}function r0(e){return dO(e)}function i0(e){return iM($(e))}function a0(e){return wk($(e))}function o0(e,t){return TM($(e),typeof t==`number`?[0,0,t]:t)}function s0(e,t){let n=t?.at??[0,0,0];return EM($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function c0(e,t){return OM(e.map(e=>$(e)),t)}function l0(e,n){if(n===void 0){let t=cD(e);if(t.length===0)return k(P(M.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=hA(t),r=SO(n)[2];for(let e=1;e<t.length;e++){let i=mA(t,e),a=SO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(GI()).findAll(e);return r.length===0?k(To(M.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function u0(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function d0(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(P(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(HD(o))return k(P(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=BD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=ij(i,t.depth,c,s);else{let e=xD(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=ij(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return zA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function f0(e,t){try{var n=NT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return k(P(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=l0(r,t.face);if(A(o))return o;let s=o.value,c=xO(s),l=SO(s),u=n.u(new KT),{wire:d,owned:f}=u0(i);f&&u.register(d);let p=AA(d);if(A(p))return p;u.register(p.value);let m=TM(u.register(lk(p.value,l)),ND(BD(c),-a));return A(m)?m:(u.register(m.value),zA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function p0(e,t){try{var n=NT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return k(P(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=l0(r,t.face);if(A(o))return o;let s=o.value,c=xO(s),l=SO(s),u=n.u(new KT),{wire:d,owned:f}=u0(i);f&&u.register(d);let p=AA(d);if(A(p))return p;u.register(p.value);let m=TM(u.register(lk(p.value,l)),ND(BD(c),a));return A(m)?m:(u.register(m.value),RA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function m0(e,t){try{var n=NT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return HD(i)?k(P(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):RA(r,n.u(dk(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function h0(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(HD(r))return k(P(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(HD(o))return k(P(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=BD(r),u=BD(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=lk(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return HA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var g0=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function _0(e){if(A(e))throw new g0(e.error);return e.value}function v0(e){return e}function y0(e){return e}function b0(e){return e}function x0(e){return e}function S0(e){return{val:e,__wrapped:!0,translate:t=>M0(T1(e,t)),rotate:(t,n)=>M0(E1(e,t,n)),mirror:t=>M0(D1(e,t)),scale:(t,n)=>M0(O1(e,t,n)),applyMatrix:t=>M0(_0(A1(e,t))),moveX:t=>M0(T1(e,[t,0,0])),moveY:t=>M0(T1(e,[0,t,0])),moveZ:t=>M0(T1(e,[0,0,t])),rotateX:t=>M0(E1(e,t,{axis:[1,0,0]})),rotateY:t=>M0(E1(e,t,{axis:[0,1,0]})),rotateZ:t=>M0(E1(e,t,{axis:[0,0,1]})),bounds:()=>xD(e),describe:()=>t0(e),clone:()=>M0(_0(k1(e))),mesh:t=>$1(e,t),meshEdges:t=>e0(e,t),isValid:()=>i0(e),isEmpty:()=>a0(e),heal:()=>M0(_0(Z1(e))),simplify:()=>M0(_0(Q1(e))),toBREP:()=>_0(n0(e)),apply:t=>M0(t(e)),applyResult:t=>M0(_0(t(e))),done:()=>e}}function C0(e){return{fuse:(t,n)=>N0(_0(N1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>N0(_0(P1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>N0(_0(L1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>N0(x0(_0(HA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>N0(x0(_0(UA(e,t,{...n,unsafe:!0})))),section:(t,n)=>M0(_0(R1(e,t,n))),split:t=>M0(_0(B1(e,t))),slice:(t,n)=>_0(V1(e,t,n))}}function w0(e){return{fillet(...t){return t.length===1?N0(x0(_0(G1(v0(e),t[0])))):N0(x0(_0(G1(v0(e),t[0],t[1]))))},chamfer(...t){return t.length===1?N0(x0(_0(K1(v0(e),t[0])))):N0(x0(_0(K1(v0(e),t[0],t[1]))))},shell:(t,n,r)=>N0(x0(_0(q1(v0(e),t,n,r)))),offset:(t,n)=>N0(x0(_0(J1(v0(e),t,n)))),draft:(t,n)=>N0(x0(_0(X1(v0(e),t,n))))}}function T0(e){return{drill:t=>N0(_0(d0(e,t))),pocket:t=>N0(_0(f0(e,t))),boss:t=>N0(_0(p0(e,t))),mirrorJoin:t=>N0(_0(m0(e,t))),rectangularPattern:t=>N0(_0(h0(e,t)))}}function E0(e){return{volume:()=>_0(RM(e)),area:()=>_0(zM(e)),volumeProps:()=>_0(FM(e)),surfaceProps:()=>_0(IM(e))}}function D0(e){return{edges:()=>sD(e),faces:()=>cD(e),wires:()=>lD(e),vertices:()=>uD(e)}}function O0(e){return{linearPattern:(t,n,r)=>N0(x0(_0(BP(e,t,n,r)))),circularPattern:(t,n,r)=>N0(x0(_0(VP(e,t,n,r))))}}function k0(e){return{...S0(e),...C0(e),...w0(e),...T0(e),...E0(e),...D0(e),...O0(e)}}function A0(e){return{...S0(e),length:()=>Nk(e),startPoint:()=>kk(e),endPoint:()=>Ak(e),pointAt:t=>jk(e,t),tangentAt:t=>Mk(e,t),isClosed:()=>Fk(e),sweep(t,n){if(!AE(e))throw Error(`sweep requires a Wire`);let r=_0(_M(b0(e),$(t),n));return N0(Array.isArray(r)?r[0]:r)}}}function j0(e){return{...S0(e),area:()=>_0(zM(e)),normalAt:t=>xO(e,t),center:()=>SO(e),surfaceType:()=>_0(pO(e)),outerWire:()=>TO(e),innerWires:()=>DO(e),extrude:t=>N0(_0(o0(y0(e),t))),revolve:t=>N0(_0(s0(y0(e),t)))}}function M0(e){return FE(e)?k0(e):jE(e)?j0(e):kE(e)||AE(e)?A0(e):S0(e)}function N0(e){return k0(e)}function P0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return j0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return jE(e)?j0(e):FE(e)?k0(e):kE(e)||AE(e)?A0(e):S0(e);throw Error(`shape() requires a Sketch or branded shape type`)}var F0=.25,I0=e=>Math.tan(e)-e;function L0(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function R0(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(L0(e,s*t,n,i))}return a}function z0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function B0(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function V0(e,t,n){if(t===0)return O(e);let r=I0(e)+2*t*Math.tan(e)/n,i,a;if(r>I0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>I0(a)||r<I0(i))return k(P(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${I0(i).toFixed(4)}, ${I0(a).toFixed(4)}]`,void 0,{target:r,invLo:I0(i),invHi:I0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);I0(e)<r?i=e:a=e}return O(.5*(i+a))}function H0(e,t,n,r,i){return V0(e,t+n,r+i)}function U0(e,t,n,r,i){return V0(e,n-t,i-r)}function W0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function G0(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(P(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(P(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(P(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(P(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function K0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function q0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function J0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function Y0(e,t,n){return Math.max(0,J0(e,t)-n)}function X0(e){return e<8?.2:.485-2.88/e}function Z0(e,t,n,r){let i=e*1e3,a=X0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function Q0(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function $0(e,t,n,r,i,a=!1){return Z0(e,t,n,r)*Q0(r,i,a)}function e2(e){return e/2}function t2(e,t){return e+2*t}function n2(e){return e%2==0?Math.PI/e:0}function r2(e,t,n){return e*(1+t/n)+n2(n)}function i2(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=G0(n,r,i,s);if(A(c))return c;let l=H0(a,o,s,n,r);if(A(l))return l;let u=W0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=r2(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function a2(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=I0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=R0(e.rb,e.alphaTip,c,r,1),d=R0(e.rb,e.alphaTip,l,r,-1).reverse(),f=hA(u),p=gA(u),m=hA(d),h=gA(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(yA([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=EA(u,{tolerance:y});if(A(b))return b;_(b.value),_(CA(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=EA(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(yA(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(CA(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function o2(e){return c2(e,!1)}function s2(e){return c2(e,!0)}function c2(e,t){try{var n=NT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=z0(i)}=e;if(r<4)return k(P(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(P(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=B0(r,i,a,o,s,c,t),d=n.u(new KT),f=[];for(let e=0;e<r;e++){let t=a2(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=kA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function l2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=F0,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(P(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=B0(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(P(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=o2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=d2(t,u,a);return g2(f.value,r,c,d,p)}function u2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=F0,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(P(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(P(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=s2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=B0(t,n,u,a,o,s,!0),p=h2(f.rPitch+c);return A(p)?p:v2(p.value,d.value,r,f,[])}function d2(e,t,n){let r=Y0(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function f2(e){let t=m2(e);if(A(t))return t;let n=t.value,r=p2(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=S2(n,i,a,o),c=b2(a.solid,n);a.solid.delete();let l=x2(o.solid,n.zr),u=C2(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function p2(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=l2({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=l2({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=u2({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function m2(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=G0(n,r,i,c);if(A(u))return u;let d=t2(n,r),f=H0(o,s,c,n,r);if(A(f))return f;let p=U0(o,c,l,r,d);if(A(p))return p;let m=W0(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:e2(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function h2(e){try{var t=NT();let n=kA([t.u(new KT).register(bA(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function g2(e,t,n,r,i){try{var a=NT();let o=a.u(new KT);o.register(e);let s=AA(e);if(A(s))return s;o.register(s.value);let c=TM(s.value,[0,0,t]);if(A(c))return c;if(n<=0)return O(y2(c.value,r,i));let l=a.u(new KT);l.register(c.value);let u=_2(n/2);if(A(u))return u;l.register(u.value);let d=TM(u.value,[0,0,t+1]);if(A(d))return d;l.register(d.value);let f=l.register(lk(d.value,[0,0,-.5])),p=zA(c.value,f);return A(p)?p:O(y2(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function _2(e){let t=h2(e);return A(t)?t:AA(t.value)}function v2(e,t,n,r,i){let a=AA(e,[t]);if(A(a))return a;let o=TM(a.value,[0,0,n]);return A(o)?o:O(y2(o.value,r,i))}function y2(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function b2(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=uk(e,r2(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(lk(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function x2(e,t){let n=n2(t);if(n===0)return e;let r=uk(e,n*180/Math.PI);return e.delete(),r}function S2(e,t,n,r){let i={crSunPlanet:K0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:q0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:Y0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:Y0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:$0(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:$0(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:$0(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:Q0(e.sunTeeth,e.alpha),planet:Q0(e.planetTeeth,e.alpha),ring:Q0(e.zr,e.alpha,!0)}}return i}function C2(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var w2=jX({addHoles:()=>IP,bezier:()=>CP,box:()=>uP,bsplineApprox:()=>SP,circle:()=>_P,compound:()=>MP,cone:()=>pP,cylinder:()=>dP,ellipse:()=>vP,ellipseArc:()=>xP,ellipsoid:()=>hP,face:()=>DP,fill:()=>jA,filledFace:()=>OP,helix:()=>yP,line:()=>gP,offsetFace:()=>PP,polygon:()=>AP,polyhedron:()=>WQ,sewShells:()=>FP,solid:()=>NP,sphere:()=>fP,subFace:()=>kP,tangentArc:()=>wP,threePointArc:()=>bP,torus:()=>mP,vertex:()=>jP,wire:()=>TP,wireLoop:()=>EP}),T2=jX({checkBoolean:()=>Mj,convexHull:()=>zQ,cut:()=>P1,cutAll:()=>UA,cutAllBisect:()=>Cj,fuse:()=>N1,fuseAll:()=>HA,fuseAllBisect:()=>Dj,hull:()=>RQ,intersect:()=>L1,minkowski:()=>UQ,section:()=>R1,sectionToFace:()=>z1,slice:()=>V1,split:()=>B1}),E2=jX({chamfer:()=>K1,draft:()=>X1,fillet:()=>G1,heal:()=>Z1,offset:()=>J1,shell:()=>q1,simplify:()=>Q1,thicken:()=>Y1,variableFillet:()=>rM}),D2=jX({applyMatrix:()=>A1,clone:()=>k1,composeTransforms:()=>vk,mirror:()=>D1,rotate:()=>E1,scale:()=>O1,transformCopy:()=>j1,translate:()=>T1}),O2=jX({checkAllInterferences:()=>t1,checkInterference:()=>e1,createDistanceQuery:()=>UM,measureArea:()=>zM,measureCurvatureAt:()=>WM,measureCurvatureAtMid:()=>GM,measureDistance:()=>VM,measureDistanceProps:()=>HM,measureLength:()=>BM,measureLinearProps:()=>LM,measureSurfaceProps:()=>IM,measureVolume:()=>RM,measureVolumeProps:()=>FM}),k2=jX({blueprintToDXF:()=>yY,exportAssemblySTEP:()=>zP,exportDXF:()=>vY,exportGlb:()=>aY,exportGltf:()=>iY,exportIGES:()=>oA,exportOBJ:()=>JJ,exportSTEP:()=>iA,exportSTEPConfigured:()=>nX,exportSTL:()=>aA,exportThreeMF:()=>RY,importDXF:()=>o1,importGLB:()=>C1,importIGES:()=>aX,importOBJ:()=>u1,importSTEP:()=>rX,importSTL:()=>iX,importSVG:()=>tX,importSVGPathD:()=>eX,importThreeMF:()=>S1}),A2=jX({cornerFinder:()=>vR,edgeFinder:()=>HI,faceFinder:()=>GI,getSingleFace:()=>JI,vertexFinder:()=>BX,wireFinder:()=>qI}),j2=jX({complexExtrude:()=>yM,extrude:()=>o0,guidedSweep:()=>wM,loft:()=>c0,multiSectionSweep:()=>CM,revolve:()=>s0,roof:()=>p$,supportExtrude:()=>vM,surfaceFromGrid:()=>NQ,surfaceFromImage:()=>IQ,sweep:()=>_M,twistExtrude:()=>bM}),M2=jX({circularPattern:()=>VP,linearPattern:()=>BP}),N2=14695981039346656037n,P2=1099511628211n,F2=18446744073709551615n;function I2(){return N2}function L2(e,t){return(e^BigInt(t&255))*P2&F2}function R2(e,t){let n=e;for(let e=0;e<t.length;e++)n=L2(n,t[e]??0);return n}var z2=new TextEncoder;function B2(e,t){return R2(e,z2.encode(t))}var V2=new ArrayBuffer(8),H2=new DataView(V2),U2=new Uint8Array(V2);function W2(e,t){return H2.setFloat64(0,Object.is(t,-0)?0:t),R2(e,U2)}function G2(e,t){let n=e,r=t&F2;for(let e=0;e<8;e++)n=L2(n,Number(r&255n)),r>>=8n;return n}function K2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=L2(n,r&255),r>>>=8;return n}function q2(e,t){return L2(e,+!!t)}function J2(e){return(e&F2).toString(16).padStart(16,`0`)}var Y2=new Set;function X2(e){return B2(I2(),e)}function Z2(e){return{kind:`NumLit`,value:e,structuralHash:W2(X2(`NumLit`),e),freeParams:Y2}}function Q2(e){let t=X2(`Vec3Lit`);for(let n of e)t=W2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:Y2}}function $2(e){let t=X2(`Vec2Lit`);for(let n of e)t=W2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:Y2}}function e4(e){return{kind:`Param`,name:e,structuralHash:B2(X2(`Param`),e),freeParams:new Set([e])}}function t4(e,t,n){let r=B2(X2(`BinOp`),e);return r=G2(r,t.structuralHash),r=G2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:d4(t.freeParams,n.freeParams)}}function n4(e,t){let n=B2(X2(`UnaryOp`),e);return n=G2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function r4(e,t){let n=K2(X2(`Component`),t);return n=G2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function i4(e,t){let n=K2(X2(`BuildVec`),e),r=new Set;for(let e of t){n=G2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var a4=(e,t)=>t4(`+`,e,t),o4=(e,t)=>t4(`*`,e,t);function s4(e){return typeof e==`number`?Z2(e):e}function c4(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?Q2([n[0],n[1],n[2]]):$2([n[0],n[1]]):i4(t,n.map(s4))}function l4(e){return c4(e,3)}function u4(e){return c4(e,2)}function d4(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function f4(e){return typeof e==`number`}function p4(e,t){return f4(e)?O(e):k(P(M.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function m4(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(P(M.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${f4(e)?`number`:`vector(${e.length})`}`))}function h4(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(P(M.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return g4(e,t);case`UnaryOp`:return _4(e,t);case`Component`:return v4(e,t);case`BuildVec`:return y4(e,t)}}function g4(e,t){let n=h4(e.a,t);if(!n.ok)return n;let r=h4(e.b,t);if(!r.ok)return r;let i=p4(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=p4(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(P(M.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function _4(e,t){let n=h4(e.arg,t);if(!n.ok)return n;let r=p4(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function v4(e,t){let n=h4(e.vec,t);if(!n.ok)return n;if(f4(n.value))return k(P(M.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(P(M.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function y4(e,t){if(e.components.length!==e.dim)return k(P(M.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=h4(r,t);if(!e.ok)return e;let i=p4(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function b4(e,t,n){let r=h4(e,t);return r.ok?p4(r.value,n):r}function x4(e,t,n){let r=h4(e,t);if(!r.ok)return r;let i=m4(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function S4(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var C4=new Set;function w4(e){return B2(I2(),e)}function T4(e,t){return G2(e,t.structuralHash)}function E4(e,t){return t===void 0?q2(e,!1):T4(q2(e,!0),t)}function D4(e,t){return t===void 0?q2(e,!1):W2(q2(e,!0),t)}function O4(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?C4:t}function k4(e,t,n){let r=s4(e),i=s4(t),a=s4(n),o=w4(`Box`);return o=T4(T4(T4(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:O4(r,i,a)}}function A4(e){let t=s4(e);return{kind:`Sphere`,radius:t,structuralHash:T4(w4(`Sphere`),t),freeParams:t.freeParams}}function j4(e,t){let n=s4(e),r=s4(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:T4(T4(w4(`Cylinder`),n),r),freeParams:O4(n,r)}}function M4(e,t,n){let r=s4(e),i=s4(t),a=s4(n),o=w4(`Cone`);return o=T4(T4(T4(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:O4(r,i,a)}}function N4(e,t){let n=s4(e),r=s4(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:T4(T4(w4(`Torus`),n),r),freeParams:O4(n,r)}}function P4(e){let t=e.map(l4),n=K2(w4(`Polygon`),t.length);for(let e of t)n=T4(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:O4(...t)}}function F4(e){let t=s4(e);return{kind:`Circle`,radius:t,structuralHash:T4(w4(`Circle`),t),freeParams:t.freeParams}}function I4(e,t){let n=l4(e),r=l4(t);return{kind:`Line`,from:n,to:r,structuralHash:T4(T4(w4(`Line`),n),r),freeParams:O4(n,r)}}function L4(e){let t=l4(e);return{kind:`Vertex`,point:t,structuralHash:T4(w4(`Vertex`),t),freeParams:t.freeParams}}function R4(e){return{kind:`Empty`,output:e,structuralHash:B2(w4(`Empty`),e),freeParams:C4}}function z4(){return R4(`Solid`)}function B4(){return R4(`Face`)}function V4(){return R4(`Wire`)}function H4(e,t,n,r){return D4(T4(T4(w4(e),t),n),r)}function U4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:H4(`Fuse`,e,t,n),freeParams:O4(e,t)}}function W4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:H4(`Cut`,e,t,n),freeParams:O4(e,t)}}function G4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:H4(`Intersect`,e,t,n),freeParams:O4(e,t)}}function K4(e,t){let n=K2(w4(`FuseAll`),e.length);for(let t of e)n=T4(n,t);return n=D4(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:O4(...e)}}function q4(e,t,n){let r=T4(w4(`CutAll`),e);r=K2(r,t.length);for(let e of t)r=T4(r,e);return r=D4(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:O4(e,...t)}}function J4(e){return e===void 0?void 0:l4(e)}function Y4(e,t){let n=l4(t);return{kind:`Translate`,target:e,vector:n,structuralHash:T4(T4(w4(`Translate`),e),n),freeParams:O4(e,n)}}function X4(e,t,n){let r=s4(t),i=J4(n?.axis),a=J4(n?.at),o=T4(T4(w4(`Rotate`),e),r);return o=E4(o,i),o=E4(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:O4(e,r,i,a)}}function Z4(e,t,n){let r=s4(t),i=J4(n?.center),a=T4(T4(w4(`Scale`),e),r);return a=E4(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:O4(e,r,i)}}function Q4(e,t){let n=J4(t?.normal),r=J4(t?.at),i=T4(w4(`Mirror`),e);return i=E4(i,n),i=E4(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:O4(e,n,r)}}function $4(e){let t=K2(w4(`Compound`),e.length);for(let n of e)t=T4(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:O4(...e)}}function e3(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=K2(q2(T4(w4(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=W2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:O4(e)}}function t3(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return t3(e.a);case`FuseAll`:return e.shapes[0]?t3(e.shapes[0]):`Solid`;case`CutAll`:return t3(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return t3(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function n3(e,t){let n=b4(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=b4(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=b4(e.z,t.env,`Box.z`);return i.ok?O(uP(n.value,r.value,i.value)):i}function r3(e,t){let n=b4(e.radius,t.env,`Sphere.radius`);return n.ok?O(fP(n.value)):n}function i3(e,t){let n=b4(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=b4(e.height,t.env,`Cylinder.height`);return r.ok?O(dP(n.value,r.value)):r}function a3(e,t){let n=b4(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=b4(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=b4(e.height,t.env,`Cone.height`);return i.ok?O(pP(n.value,r.value,i.value)):i}function o3(e,t){let n=b4(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=b4(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(mP(n.value,r.value)):r}function s3(e,t){let n=[];for(let r of e.points){let e=x4(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return AP(n)}function c3(e,t){let n=b4(e.radius,t.env,`Circle.radius`);return n.ok?O(_P(n.value)):n}function l3(e,t){let n=x4(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=x4(e.to,t.env,`Line.to`);return r.ok?O(gP(n.value,r.value)):r}function u3(e,t){let n=x4(e.point,t.env,`Vertex.point`);return n.ok?O(jP(n.value)):n}function d3(e){return k(F(M.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function f3(e,t,n){let r=e.evalNode(t);return r.ok?FE(r.value)?O(r.value):k(xo(M.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function p3(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function m3(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=f3(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=f3(t,e.b,`Fuse.b`);return r.ok?RA(n.value,r.value,p3(e,t)):r}function h3(e,t){if(e.a.kind===`Empty`)return d3(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=f3(t,e.a,`Cut.a`);if(!n.ok)return n;let r=f3(t,e.b,`Cut.b`);return r.ok?zA(n.value,r.value,p3(e,t)):r}function g3(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return d3(`Intersect`);let n=f3(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=f3(t,e.b,`Intersect.b`);return r.ok?BA(n.value,r.value,p3(e,t)):r}function _3(e,t,n){let r=[];for(let i of t){let t=f3(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function v3(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return d3(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=_3(t,n,`FuseAll.operand`);return r.ok?HA(r.value,p3(e,t)):r}function y3(e,t){if(e.base.kind===`Empty`)return d3(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=f3(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=_3(t,n,`CutAll.tool`);return i.ok?UA(r.value,i.value,p3(e,t)):i}function b3(e){return k(F(M.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function x3(e,t,n,r){return e?x4(e,t,n):O(r)}function S3(e,t){let n=U(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=LE(n.locate(e.wrapped,r))}finally{i()}return ik(e)&&ck(e,a),a}function C3(e,t){if(e.target.kind===`Empty`)return b3(`Translate`);let n=x4(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(S3(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function w3(e,t){if(e.target.kind===`Empty`)return b3(`Rotate`);let n=b4(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=x3(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=x3(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(S3(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function T3(e,t){if(e.target.kind===`Empty`)return b3(`Scale`);let n=b4(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=x3(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(fk(i.value,n.value,r.value)):i}function E3(e,t){if(e.target.kind===`Empty`)return b3(`Mirror`);let n=x3(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=x3(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(dk(i.value,n.value,r.value)):i}function D3(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(F(M.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(MP(r))}function O3(){return k(F(M.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function k3(e,t){let n=t.evalNode(e.source);return n.ok?x$(v$(n.value,e.placements),{fuse:e.fuse}):n}function A3(e,t){switch(e.kind){case`Box`:return n3(e,t);case`Sphere`:return r3(e,t);case`Cylinder`:return i3(e,t);case`Cone`:return a3(e,t);case`Torus`:return o3(e,t);case`Polygon`:return s3(e,t);case`Circle`:return c3(e,t);case`Line`:return l3(e,t);case`Vertex`:return u3(e,t);case`Empty`:return O3();case`Fuse`:return m3(e,t);case`Cut`:return h3(e,t);case`Intersect`:return g3(e,t);case`FuseAll`:return v3(e,t);case`CutAll`:return y3(e,t);case`Translate`:return C3(e,t);case`Rotate`:return w3(e,t);case`Scale`:return T3(e,t);case`Mirror`:return E3(e,t);case`Compound`:return D3(e,t);case`Instance`:return k3(e,t)}}function j3(e,t){if(typeof t==`number`)return W2(q2(e,!1),t);let n=q2(e,!0);n=K2(n,t.length);for(let e of t)n=W2(n,e);return n}function M3(e,t){if(t.size===0)return I2();let n=S4(e,t),r=Object.keys(n).sort(),i=I2();for(let e of r){i=B2(i,e);let t=n[e];t!==void 0&&(i=j3(i,t))}return i}function N3(e,t,n,r){let i=M3(t,e.freeParams),a=r===void 0?`d`:W2(I2(),r).toString(16);return`${J2(e.structuralHash)}:${n}:${J2(i)}:${a}`}var P3=[1,0,0,0];function F3(e,t){let n=b4(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?x4(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?x4(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function I3(e,t){let n=e,r=P3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=x4(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=tF(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=F3(n,t);if(!e)break;let a=nF(e.axis,e.angle*Math.PI/180),o=iF(r,a),s=tF(r,e.center),c=tF(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function L3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function R3(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function z3(e,t,n){let[r,i,a]=n,o=L3(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;R3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return R3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function B3(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var V3=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??ST()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return CT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=jo(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${N3(e,t,this.kernelId,this.defaultTolerance)}|${Uk(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),O(r);let{inner:i,rot:a,trans:o}=I3(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=cD(c.value).map(Ck),u=this.evaluate(e,t);if(!u.ok)return u;let d=cD(u.value).map(Ck),f=z3(r.value,a,o),p=B3(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=CT(this.kernelId,()=>$k(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=N3(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=A3(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear(),this.meshCache.clear()}};function H3(e,t){try{var n=NT();let r=t(n.u(new V3(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function U3(e){return{csgVersion:1,root:Y3(e)}}function W3(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:W3(e.a),b:W3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:W3(e.arg)};case`Component`:return{kind:`Component`,vec:W3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(W3)}}}function G3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:W3(e.x),y:W3(e.y),z:W3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:W3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:W3(e.radius),height:W3(e.height)};case`Cone`:return{kind:`Cone`,radius1:W3(e.radius1),radius2:W3(e.radius2),height:W3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:W3(e.majorRadius),minorRadius:W3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(W3)};case`Circle`:return{kind:`Circle`,radius:W3(e.radius)};case`Line`:return{kind:`Line`,from:W3(e.from),to:W3(e.to)};case`Vertex`:return{kind:`Vertex`,point:W3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function K3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:Y3(e.a),b:Y3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(Y3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:Y3(e.base),tools:e.tools.map(Y3),tolerance:e.tolerance};default:return}}function q3(e){return e?W3(e):void 0}function J3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:Y3(e.target),vector:W3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:Y3(e.target),angle:W3(e.angle),axis:q3(e.axis),at:q3(e.at)};case`Scale`:return{kind:`Scale`,target:Y3(e.target),factor:W3(e.factor),center:q3(e.center)};case`Mirror`:return{kind:`Mirror`,target:Y3(e.target),normal:q3(e.normal),at:q3(e.at)};default:return}}function Y3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(Y3)}:e.kind===`Instance`?{kind:`Instance`,source:Y3(e.source),placements:e.placements,fuse:e.fuse}:G3(e)??K3(e)??J3(e)}function X3(e){return k(P(M.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function Z3(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Q3(e){return typeof e==`number`&&Number.isFinite(e)}function $3(e){return typeof e==`string`}function e6(e,t){if(!Array.isArray(e)||e.length!==3)return X3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!Q3(n)||!Q3(r)||!Q3(i)?X3(`${t}: Vec3 contains non-number`):O([n,r,i])}function t6(e,t){if(!Array.isArray(e)||e.length!==2)return X3(`${t}: expected Vec2 array`);let[n,r]=e;return!Q3(n)||!Q3(r)?X3(`${t}: Vec2 contains non-number`):O([n,r])}function n6(e){if(!Z3(e))return X3(`input is not an object`);let t=e.csgVersion;if(t!==1)return X3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return u6(n)}function r6(e){if(!Z3(e))return X3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return Q3(e.value)?O(Z2(e.value)):X3(`NumLit.value`);case`Vec3Lit`:{let t=e6(e.value,`Vec3Lit.value`);return t.ok?O(Q2(t.value)):t}case`Vec2Lit`:{let t=t6(e.value,`Vec2Lit.value`);return t.ok?O($2(t.value)):t}case`Param`:return $3(e.name)?O(e4(e.name)):X3(`Param.name`);case`BinOp`:return i6(e);case`UnaryOp`:return a6(e);case`Component`:return o6(e);case`BuildVec`:return s6(e);default:return X3(`unknown expression kind: ${String(t)}`)}}function i6(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return X3(`BinOp.op: ${String(t)}`);let n=r6(e.a);if(!n.ok)return n;let r=r6(e.b);return r.ok?O(t4(t,n.value,r.value)):r}function a6(e){let t=e.op;if(!$3(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return X3(`UnaryOp.op: ${String(t)}`);let n=r6(e.arg);return n.ok?O(n4(t,n.value)):n}function o6(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return X3(`Component.index: ${String(t)}`);let n=r6(e.vec);return n.ok?O(r4(n.value,t)):n}function s6(e){let t=e.dim;if(t!==2&&t!==3)return X3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return X3(`BuildVec.components: not array`);if(n.length!==t)return X3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=r6(e);if(!t.ok)return t;r.push(t.value)}return O(i4(t,r))}function c6(e,t){if(!Array.isArray(e))return X3(`${t}: not array`);let n=[];for(let t of e){let e=u6(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function l6(e){let t=e.tolerance;return t==null?O(void 0):Q3(t)?O(t):X3(`tolerance: not a finite number`)}function u6(e){if(!Z3(e))return X3(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return f6(t,e);case`Fuse`:case`Cut`:case`Intersect`:return b6(t,e);case`FuseAll`:case`CutAll`:return x6(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return S6(t,e);case`Compound`:return O6(e);case`Instance`:return A6(e);default:return X3(`unknown node kind: ${String(t)}`)}}function d6(e,t,n){let r=r6(e[t]);return r.ok?O(n(r.value)):r}function f6(e,t){switch(e){case`Box`:return p6(t);case`Sphere`:return d6(t,`radius`,A4);case`Cylinder`:return m6(t);case`Cone`:return h6(t);case`Torus`:return g6(t);case`Polygon`:return _6(t);case`Circle`:return d6(t,`radius`,F4);case`Line`:return v6(t);case`Vertex`:return d6(t,`point`,L4);case`Empty`:return y6(t)}return X3(`unhandled primitive: ${e}`)}function p6(e){let t=r6(e.x);if(!t.ok)return t;let n=r6(e.y);if(!n.ok)return n;let r=r6(e.z);return r.ok?O(k4(t.value,n.value,r.value)):r}function m6(e){let t=r6(e.radius);if(!t.ok)return t;let n=r6(e.height);return n.ok?O(j4(t.value,n.value)):n}function h6(e){let t=r6(e.radius1);if(!t.ok)return t;let n=r6(e.radius2);if(!n.ok)return n;let r=r6(e.height);return r.ok?O(M4(t.value,n.value,r.value)):r}function g6(e){let t=r6(e.majorRadius);if(!t.ok)return t;let n=r6(e.minorRadius);return n.ok?O(N4(t.value,n.value)):n}function _6(e){let t=e.points;if(!Array.isArray(t))return X3(`Polygon.points: not array`);let n=[];for(let e of t){let t=r6(e);if(!t.ok)return t;n.push(t.value)}return O(P4(n))}function v6(e){let t=r6(e.from);if(!t.ok)return t;let n=r6(e.to);return n.ok?O(I4(t.value,n.value)):n}function y6(e){let t=e.output;switch(t){case`Solid`:return O(z4());case`Face`:return O(B4());case`Wire`:return O(V4());default:return X3(`Empty.output: ${String(t)}`)}}function b6(e,t){let n=u6(t.a);if(!n.ok)return n;let r=u6(t.b);if(!r.ok)return r;let i=l6(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(U4(n.value,r.value,i.value));case`Cut`:return O(W4(n.value,r.value,i.value));case`Intersect`:return O(G4(n.value,r.value,i.value))}}function x6(e,t){let n=l6(t);if(!n.ok)return n;if(e===`FuseAll`){let e=c6(t.shapes,`FuseAll.shapes`);return e.ok?O(K4(e.value,n.value)):e}let r=u6(t.base);if(!r.ok)return r;let i=c6(t.tools,`CutAll.tools`);return i.ok?O(q4(r.value,i.value,n.value)):i}function S6(e,t){let n=u6(t.target);if(!n.ok)return n;switch(e){case`Translate`:return C6(t,n.value);case`Rotate`:return T6(t,n.value);case`Scale`:return E6(t,n.value);case`Mirror`:return D6(t,n.value)}}function C6(e,t){let n=r6(e.vector);return n.ok?O(Y4(t,n.value)):n}function w6(e,t){if(e[t]===void 0)return O(void 0);let n=r6(e[t]);return n.ok?O(n.value):n}function T6(e,t){let n=r6(e.angle);if(!n.ok)return n;let r=w6(e,`axis`);if(!r.ok)return r;let i=w6(e,`at`);return i.ok?O(X4(t,n.value,{axis:r.value,at:i.value})):i}function E6(e,t){let n=r6(e.factor);if(!n.ok)return n;let r=w6(e,`center`);return r.ok?O(Z4(t,n.value,{center:r.value})):r}function D6(e,t){let n=w6(e,`normal`);if(!n.ok)return n;let r=w6(e,`at`);return r.ok?O(Q4(t,{normal:n.value,at:r.value})):r}function O6(e){let t=c6(e.children,`Compound.children`);return t.ok?O($4(t.value)):t}function k6(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(Q3))}function A6(e){let t=u6(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(k6)?X3(`Instance.placements must be an array of 4x4 number matrices`):O(e3(t.value,n,e.fuse===!0))}function j6(e){return P6(e)}function M6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=M6(e.a),n=M6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return Z2(t.value+n.value);case`-`:return Z2(t.value-n.value);case`*`:return Z2(t.value*n.value);case`/`:return Z2(t.value/n.value)}return t!==e.a||n!==e.b?t4(e.op,t,n):e}case`UnaryOp`:{let t=M6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return Z2(-n);case`sin`:return Z2(Math.sin(n));case`cos`:return Z2(Math.cos(n));case`sqrt`:return Z2(Math.sqrt(n));case`abs`:return Z2(Math.abs(n))}}return t===e.arg?e:n4(e.op,t)}case`Component`:{let t=M6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?Z2(t.value[e.index]):t===e.vec?e:r4(t,e.index)}case`BuildVec`:{let t=e.components.map(M6);return N6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?i4(e.dim,t):e)}}}function N6(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?$2([n[0],n[1]]):Q2([n[0],n[1],n[2]])}function P6(e){switch(e.kind){case`Box`:return k4(M6(e.x),M6(e.y),M6(e.z));case`Sphere`:return A4(M6(e.radius));case`Cylinder`:return j4(M6(e.radius),M6(e.height));case`Cone`:return M4(M6(e.radius1),M6(e.radius2),M6(e.height));case`Torus`:return N4(M6(e.majorRadius),M6(e.minorRadius));case`Polygon`:return P4(e.points.map(M6));case`Circle`:return F4(M6(e.radius));case`Line`:return I4(M6(e.from),M6(e.to));case`Vertex`:return L4(M6(e.point));case`Empty`:return e;case`Fuse`:return F6(e.a,e.b,e.tolerance);case`Cut`:return I6(e.a,e.b,e.tolerance);case`Intersect`:return L6(e.a,e.b,e.tolerance);case`FuseAll`:return R6(e.shapes,e.tolerance);case`CutAll`:return z6(e.base,e.tools,e.tolerance);case`Translate`:return B6(e.target,e.vector);case`Rotate`:return X4(P6(e.target),M6(e.angle),{axis:e.axis?M6(e.axis):void 0,at:e.at?M6(e.at):void 0});case`Scale`:return Z4(P6(e.target),M6(e.factor),{center:e.center?M6(e.center):void 0});case`Mirror`:return Q4(P6(e.target),{normal:e.normal?M6(e.normal):void 0,at:e.at?M6(e.at):void 0});case`Compound`:return $4(e.children.map(P6).filter(e=>e.kind!==`Empty`));case`Instance`:return e3(P6(e.source),e.placements,e.fuse)}}function F6(e,t,n){let r=P6(e),i=P6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:U4(r,i,n)}function I6(e,t,n){let r=P6(e),i=P6(t);return i.kind===`Empty`||r.kind===`Empty`?r:W4(r,i,n)}function L6(e,t,n){let r=P6(e),i=P6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:G4(r,i,n)}function R6(e,t){let n=e.map(P6).filter(e=>e.kind!==`Empty`);return n.length===0?z4():n.length===1?n[0]:K4(n,t)}function z6(e,t,n){let r=P6(e);if(r.kind===`Empty`)return r;let i=t.map(P6).filter(e=>e.kind!==`Empty`);return i.length===0?r:q4(r,i,n)}function B6(e,t){let n=P6(e),r=M6(t);if(r.kind!==`Vec3Lit`)return Y4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=M6(n.vector);if(e.kind===`Vec3Lit`)return Y4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return Y4(n,r)}function V6(e,t,n){return H6(e,t,n)}function H6(e,t,n){return t(e)?n:U6(e,t,n)}function U6(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return U4(H6(e.a,t,n),H6(e.b,t,n),e.tolerance);case`Cut`:return W4(H6(e.a,t,n),H6(e.b,t,n),e.tolerance);case`Intersect`:return G4(H6(e.a,t,n),H6(e.b,t,n),e.tolerance);case`FuseAll`:return K4(e.shapes.map(e=>H6(e,t,n)),e.tolerance);case`CutAll`:return q4(H6(e.base,t,n),e.tools.map(e=>H6(e,t,n)),e.tolerance);case`Translate`:return Y4(H6(e.target,t,n),e.vector);case`Rotate`:return X4(H6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return Z4(H6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return Q4(H6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return $4(e.children.map(e=>H6(e,t,n)));case`Instance`:return e3(H6(e.source,t,n),e.placements,e.fuse)}}function W6(e,t){t(e);for(let n of G6(e))W6(n,t)}function G6(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source]}}function K6(e){let t=0;return W6(e,()=>{t++}),t}var q6=jX({CSG_VERSION:()=>1,Evaluator:()=>V3,add:()=>a4,asScalarExpr:()=>s4,asVec2Expr:()=>u4,asVec3Expr:()=>l4,binOp:()=>t4,box:()=>k4,buildVec:()=>i4,circle:()=>F4,component:()=>r4,compound:()=>$4,cone:()=>M4,cut:()=>W4,cutAll:()=>q4,cylinder:()=>j4,emptyFace:()=>B4,emptySolid:()=>z4,emptyWire:()=>V4,foldExpr:()=>M6,forEachNode:()=>W6,fromJSON:()=>n6,fuse:()=>U4,fuseAll:()=>K4,instance:()=>e3,intersect:()=>G4,line:()=>I4,mirror:()=>Q4,mul:()=>o4,nodeCount:()=>K6,numLit:()=>Z2,optimize:()=>j6,outputKindOf:()=>t3,param:()=>e4,polygon:()=>P4,replaceNode:()=>V6,rotate:()=>X4,scale:()=>Z4,sphere:()=>A4,toJSON:()=>U3,torus:()=>N4,translate:()=>Y4,unaryOp:()=>n4,vec2Lit:()=>$2,vec3Lit:()=>Q2,vertex:()=>L4,withEvaluator:()=>H3});export{fR as BaseSketcher2d,pR as BlueprintSketcher,r as BrepBugError,M as BrepErrorCode,g0 as BrepWrapperError,Fy as BrepkitAdapter,HK as CompoundSketch,o as DEFAULT_CAPABILITIES,GE as DEG2RAD,KT as DisposalScope,a as EXACT_BREP_CAPABILITIES,xq as FaceSketcher,G as HASH_CODE_MAX,Ga as OK,Wa as OcctWasmAdapter,KE as RAD2DEG,iq as Sketch,bq as Sketcher,aq as Sketches,WP as addChild,IP as addHoles,xF as addJoint,Q$ as addMate,nI as addStep,iN as adjacentFaces,eo as all,Ya as andThen,PX as applyGlue,A1 as applyMatrix,Vk as approximateCurve,nE as as2D,tE as as3D,rO as asTopo,_N as assignRoles,lM as autoHeal,CP as bezier,yY as blueprintToDXF,ej as booleanPipeline,T2 as booleans,p0 as boss,uP as box,SP as bsplineApprox,i as bug,_q as cameraFromPlane,gq as cameraLookAt,lN as captureHint,lO as cast,LE as castShape,RE as castShape3D,K1 as chamfer,vj as chamferDistAngleShape,Vj as chamferWithEvolution,t1 as checkAllInterferences,Mj as checkBoolean,e1 as checkInterference,_P as circle,VP as circularPattern,wO as classifyPointOnFace,Zk as clearMeshCache,k1 as clone,dE as closedWire,fo as collect,XP as collectShapes,ek as colorFaces,$O as colorShape,yM as complexExtrude,vk as composeTransforms,MP as compound,tq as compoundSketchExtrude,$K as compoundSketchFace,rq as compoundSketchLoft,nq as compoundSketchRevolve,F as computationError,a$ as computeStraightSkeleton,pP as cone,j2 as construction,zQ as convexHull,vR as cornerFinder,YP as countNodes,RP as createAssembly,UP as createAssemblyNode,NJ as createBlueprint,hq as createCamera,DE as createCompound,PJ as createCompoundBlueprint,XN as createDerivedFaceRef,UM as createDistanceQuery,xE as createEdge,NN as createEdgeRef,CE as createFace,UT as createHandle,tI as createHistory,GT as createKernelHandle,Qk as createMeshCache,XD as createNamedPlane,CX as createOperationRegistry,JD as createPlane,vN as createRef,lI as createRegistry,wE as createShell,TE as createSolid,hX as createTaskQueue,bE as createVertex,VN as createVertexRef,SE as createWire,SX as createWorkerClient,OX as createWorkerHandler,kX as createWorkerPool,q6 as csg,Ao as currentQuality,TJ as curve2dBoundingBox,MJ as curve2dDistanceFrom,EJ as curve2dFirstPoint,jJ as curve2dIsOnCurve,DJ as curve2dLastPoint,kJ as curve2dParameter,OJ as curve2dSplitAt,AJ as curve2dTangentAt,Pk as curveAxis,Ak as curveEndPoint,Fk as curveIsClosed,Ik as curveIsPeriodic,Nk as curveLength,Lk as curvePeriod,jk as curvePointAt,kk as curveStartPoint,Mk as curveTangentAt,P1 as cut,iz as cut2D,I1 as cutAll,Cj as cutAllBisect,qR as cutBlueprints,Rj as cutWithEvolution,dP as cylinder,mF as cylindricalJoint,cN as defaultScorer,_X as dequeueTask,t0 as describe,Qq as deserializeDrawing,gI as deserializeHistory,dO as deserializeShape,sO as downcast,X1 as draft,eJ as draw,aJ as drawCircle,oJ as drawEllipse,pJ as drawFaceOutline,uJ as drawParametricFunction,lJ as drawPointsInterpolation,sJ as drawPolysides,fJ as drawProjection,nJ as drawRectangle,tJ as drawRoundedRectangle,rJ as drawSingleCircle,iJ as drawSingleEllipse,cJ as drawText,yJ as drawingChamfer,gJ as drawingCut,vJ as drawingFillet,hJ as drawingFuse,_J as drawingIntersect,mJ as drawingToSketchOnPlane,d0 as drill,HI as edgeFinder,eN as edgesOfFace,vP as ellipse,xP as ellipseArc,hP as ellipsoid,gX as enqueueTask,k as err,zP as exportAssemblySTEP,vY as exportDXF,aY as exportGlb,iY as exportGltf,oA as exportIGES,JJ as exportOBJ,iA as exportSTEP,nX as exportSTEPConfigured,aA as exportSTL,RY as exportThreeMF,XF as exportURDF,o0 as extrude,DM as extrudeAll,DP as face,CO as faceAxis,SO as faceCenter,GI as faceFinder,mO as faceGeomType,hO as faceOrientation,QM as facesOfEdge,$M as facesOfVertex,DZ as fieldBoolean,jZ as fieldContour,OZ as fieldOffset,AZ as fieldReinit,kZ as fieldShell,jA as fill,OP as filledFace,G1 as fillet,Bj as filletWithEvolution,HO as findFacesByTag,qP as findNode,iI as findStep,fM as fixSelfIntersection,uM as fixShape,Xa as flatMap,ro as flatten,gO as flipFaceOrientation,zk as flipOrientation,cX as fontMetrics,TF as forwardKinematics,r0 as fromBREP,EQ as fromKernelDir,TQ as fromKernelPnt,wQ as fromKernelVec,ao as fromNullable,N1 as fuse,nz as fuse2D,F1 as fuseAll,Dj as fuseAllBisect,KR as fuseBlueprints,Lj as fuseWithEvolution,B0 as gearGeometry,KX as getActiveVoxelId,xD as getBounds,FJ as getBounds2D,pD as getCompSolids,Ok as getCurveType,LT as getDisposalStats,sD as getEdges,nk as getFaceColor,kO as getFaceOrigins,UO as getFaceTags,cD as getFaces,cq as getFont,Ck as getHashCode,aI as getHistoryShape,U as getKernel,wT as getKernelCapabilities,OT as getKernelTier,yj as getNurbsCurveData,bj as getNurbsSurfaceData,Rk as getOrientation,IJ as getOrientation2D,zo as getPerformanceStats,tk as getShapeColor,oE as getShapeKind,fD as getShells,JI as getSingleFace,dD as getSolids,pO as getSurfaceType,GO as getTagMetadata,uD as getVertices,GX as getVoxel,lD as getWires,HP as gridPattern,wM as guidedSweep,Z1 as heal,oM as healFace,aM as healSolid,sM as healWire,yP as helix,RQ as hull,o1 as importDXF,C1 as importGLB,aX as importIGES,u1 as importOBJ,rX as importSTEP,iX as importSTL,tX as importSVG,eX as importSVGPathD,S1 as importThreeMF,eI as importURDF,MT as init,yT as initFromManifold,AT as initFromOC,qX as initVoxel,DO as innerWires,v$ as instance,b$ as instanceCount,y$ as instanceGrid,C$ as instancedMesh,Bk as interpolateCurve,L1 as intersect,az as intersect2D,JR as intersectBlueprints,zj as intersectWithEvolution,oD as invalidateShapeCache,zF as inverseKinematics,k2 as io,wo as ioError,eE as is2D,$T as is3D,fX as isBatchRequest,IX as isChamferRadius,sE as isClosedWire,uO as isCompSolid,PE as isCompound,$N as isDerivedFaceRef,dX as isDisposeRequest,kE as isEdge,eP as isEdgeRef,a0 as isEmpty,Ek as isEqualShape,A as isErr,mX as isErrorResponse,jE as isFace,nP as isFaceRef,LX as isFilletRadius,lX as isInitRequest,LJ as isInside2D,_$ as isInstanced,rP as isLineageRef,QT as isLive,lE as isManifoldShell,FX as isNumber,Ka as isOk,uX as isOperationRequest,cE as isOrientedFace,hE as isPlanarFace,gE as isPlanarWire,fq as isProjectionPlane,yX as isQueueEmpty,Tk as isSameShape,IE as isShape1D,FE as isShape3D,ME as isShell,NE as isSolid,pX as isSuccessResponse,i0 as isValid,uE as isValidSolid,OE as isVertex,tP as isVertexRef,AE as isWire,bD as iterCompSolids,mD as iterEdges,hD as iterFaces,yD as iterShells,vD as iterSolids,aO as iterTopo,_D as iterVertices,gD as iterWires,VF as jointTrajectory,bF as jointTransform,WF as jointsFromDH,YE as kernelCall,XE as kernelCallRaw,ZE as kernelCallScoped,N as kernelError,vQ as latticeInfill,yQ as latticeInfillShape,gP as line,BP as linearPattern,sq as loadFont,M1 as locate,c0 as loft,kM as loftAll,jq as makeBaseBox,l2 as makeExternalGear,u2 as makeInternalGear,QD as makePlane,f2 as makePlanetaryGear,mq as makeProjectedEdges,pE as manifoldShell,qa as map,io as mapBoth,Ja as mapErr,uo as match,x$ as materialize,zM as measureArea,WM as measureCurvatureAt,GM as measureCurvatureAtMid,VM as measureDistance,HM as measureDistanceProps,BM as measureLength,LM as measureLinearProps,IM as measureSurfaceProps,RM as measureVolume,FM as measureVolumeProps,O2 as measurement,EF as mechanismDOF,$1 as mesh,e0 as meshEdges,dA as meshLODs,pA as meshLODsProgressive,sA as meshMultiLOD,UQ as minkowski,D1 as mirror,HJ as mirror2D,CJ as mirrorDrawing,m0 as mirrorJoin,E2 as modifiers,mI as modifyStep,Co as moduleInitError,CM as multiSectionSweep,xO as normalAt,J1 as offset,PP as offsetFace,lZ as offsetMesh,fZ as offsetShape,Hk as offsetWire2D,O as ok,Za as or,Qa as orElse,nR as organiseBlueprints,fE as orientedFace,TO as outerWire,M2 as patterns,vX as pendingCount,ho as pipeline,tO as pivotPlane,_E as planarFace,hF as planarJoint,vE as planarWire,i2 as planetPlacements,f0 as pocket,vO as pointOnSurface,QX as pointsInside,AP as polygon,WQ as polyhedron,Dq as polysideInnerRadius,yR as polysidesBlueprint,Uj as positionOnCurve,jT as prewarm,w2 as primitives,pF as prismaticJoint,vq as projectEdges,bO as projectPointOnFace,A2 as query,To as queryError,h0 as rectangularPattern,wX as registerHandler,bT as registerKernel,DT as registerKernelTier,uI as registerOperation,cI as registerShape,WX as registerVoxel,bX as rejectAll,GP as removeChild,EO as removeHolesFromFace,tZ as repairMesh,pI as replayFrom,fI as replayHistory,RT as resetDisposalStats,Bo as resetPerformanceStats,pk as resize,$ as resolve,w1 as resolve3D,ZN as resolveDerivedFaceRef,AD as resolveDirection,PN as resolveEdgeRef,aP as resolveLineageRef,ZD as resolvePlane,wN as resolveRef,sP as resolveRefIn,lP as resolveRefParams,HN as resolveVertexRef,wJ as reverseCurve,fF as revoluteJoint,s0 as revolve,p$ as roof,E1 as rotate,BJ as rotate2D,xJ as rotateDrawing,bR as roundedRectangleBlueprint,O1 as scale,VJ as scale2D,SJ as scaleDrawing,qZ as sdfBox,ZZ as sdfCapsule,XZ as sdfCone,YZ as sdfCylinder,lQ as sdfFieldAxialRamp,fQ as sdfFieldClamp,cQ as sdfFieldConst,dQ as sdfFieldFromSdf,uQ as sdfFieldRadialRamp,rQ as sdfLattice,$Z as sdfPlane,JZ as sdfRoundedBox,KZ as sdfSphere,iQ as sdfStrutLattice,tQ as sdfSweep,QZ as sdfTorus,R1 as section,z1 as sectionToFace,hI as serializeHistory,vF as setJointValue,_F as setJointValues,OO as setShapeOrigin,WO as setTagMetadata,FP as sewShells,P0 as shape,rZ as shapeToMeshInput,oO as shapeType,oN as sharedEdges,q1 as shell,uZ as shellMesh,pZ as shellShape,Hj as shellWithEvolution,Q1 as simplify,Sq as sketchCircle,Cq as sketchEllipse,YK as sketchExtrude,KK as sketchFace,Oq as sketchFaceOffset,Aq as sketchHelix,ZK as sketchLoft,GJ as sketchOnFace2D,WJ as sketchOnPlane2D,kq as sketchParametricFunction,Eq as sketchPolysides,wq as sketchRectangle,JK as sketchRevolve,Tq as sketchRoundedRectangle,XK as sketchSweep,oX as sketchText,qK as sketchWires,So as sketcherStateError,V1 as slice,NP as solid,dM as solidFromShell,$$ as solveAssembly,fP as sphere,gF as sphericalJoint,B1 as split,oI as stepCount,sI as stepsFrom,UJ as stretch2D,kP as subFace,vM as supportExtrude,hT as supportsConstraintSketch,mT as supportsProjection,NQ as surfaceFromGrid,IQ as surfaceFromImage,_M as sweep,VO as tagFaces,wP as tangentArc,to as tap,no as tapErr,uq as textBlueprints,sX as textMetrics,Y1 as thicken,_I as thread,bP as threePointArc,n0 as toBREP,pj as toBufferGeometryData,mj as toGroupedBufferGeometryData,xQ as toKernelVec,gj as toLODGeometryData,_j as toLODGeometryLevels,hj as toLineGeometryData,RJ as toSVGPathD,OD as toVec2,DD as toVec3,mP as torus,bQ as tpmsLattice,j1 as transformCopy,D2 as transforms,T1 as translate,zJ as translate2D,bJ as translateDrawing,eO as translatePlane,po as tryCatch,mo as tryCatchAsync,bM as twistExtrude,xo as typeCastError,rI as undoLast,Eo as unsupportedError,j as unwrap,lo as unwrapErr,so as unwrapOr,co as unwrapOrElse,KP as updateNode,bN as updateRoles,_O as uvBounds,yO as uvCoordinates,mE as validSolid,G0 as validatePlanetary,P as validationError,rM as variableFillet,jD as vecAdd,UD as vecAngle,ID as vecCross,zD as vecDistance,FD as vecDot,VD as vecEquals,HD as vecIsZero,LD as vecLength,RD as vecLengthSq,PD as vecNegate,BD as vecNormalize,WD as vecProjectToPlane,qD as vecRepr,GD as vecRotate,ND as vecScale,MD as vecSub,jP as vertex,BX as vertexFinder,ED as vertexPosition,rN as verticesOfEdge,tN as verticesOfFace,dZ as voxelBoolean,EZ as voxelBooleanField,NZ as voxelBooleanFieldShapes,mZ as voxelBooleanShapes,TZ as voxelField,MZ as voxelFieldFromShape,JP as walkAssembly,ZX as windingNumbers,TP as wire,qI as wireFinder,EP as wireLoop,nN as wiresOfFace,CT as withKernel,kQ as withKernelDir,OQ as withKernelPnt,DQ as withKernelVec,TT as withQuality,qT as withScope,XT as withScopeResult,ZT as withScopeResultAsync,kT as withTier,$a as zipResults};