ocearo-ui 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/404.html +1 -1
- package/README.fr.md +31 -1
- package/README.md +31 -1
- package/__next.__PAGE__.txt +2 -2
- package/__next._full.txt +3 -3
- package/__next._head.txt +1 -1
- package/__next._index.txt +2 -2
- package/__next._tree.txt +2 -2
- package/_next/static/chunks/0-z15txb4-uhu.js +409 -0
- package/_next/static/chunks/{29-ag86gvlc40.js → 0kinaai2rvd43.js} +1 -1
- package/_next/static/chunks/0qj7yy4f6sk8y.js +455 -0
- package/_next/static/chunks/0yf1ifg_o1bq6.js +1 -0
- package/_next/static/chunks/0zbzk2ob0li1n.js +1 -0
- package/_next/static/chunks/17ma1x64d-211.js +1 -0
- package/_next/static/chunks/19xb2y6sgfnza.js +1 -0
- package/_next/static/chunks/1q572rz5m8mb-.js +1 -0
- package/_next/static/chunks/{2baz6j1q913qw.js → 1rkf8qtk5-48h.js} +1 -1
- package/_next/static/chunks/26e1o1as-77nq.js +172 -0
- package/_next/static/chunks/2fy4q1c5l3tpj.js +1 -0
- package/_next/static/chunks/2lw7kypuhij1_.css +3 -0
- package/_next/static/chunks/{1porlo35ga4zu.js → 2q_83f24jeg0e.js} +1 -1
- package/_next/static/chunks/2udirievybq_j.js +1 -0
- package/_next/static/chunks/3myql5zu0rstt.js +425 -0
- package/_not-found/__next._full.txt +2 -2
- package/_not-found/__next._head.txt +1 -1
- package/_not-found/__next._index.txt +2 -2
- package/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/_not-found/__next._not-found.txt +1 -1
- package/_not-found/__next._tree.txt +2 -2
- package/_not-found.html +1 -1
- package/_not-found.txt +2 -2
- package/index.html +1 -1
- package/index.txt +3 -3
- package/package.json +1 -1
- package/settings/__next._full.txt +3 -3
- package/settings/__next._head.txt +1 -1
- package/settings/__next._index.txt +2 -2
- package/settings/__next._tree.txt +2 -2
- package/settings/__next.settings.__PAGE__.txt +2 -2
- package/settings/__next.settings.txt +1 -1
- package/settings.html +1 -1
- package/settings.txt +3 -3
- package/_next/static/chunks/08gn5_gd6amkq.js +0 -1
- package/_next/static/chunks/0utifqhyv2cuc.js +0 -1
- package/_next/static/chunks/0wzr1__so6xme.js +0 -1
- package/_next/static/chunks/11ln9lzzbo35q.js +0 -1
- package/_next/static/chunks/1w1ua0-p5lk1e.js +0 -38
- package/_next/static/chunks/1wv5e5qomv-7g.css +0 -3
- package/_next/static/chunks/2lez3uww9j4t0.js +0 -135
- package/_next/static/chunks/2uao1hfsz-oy8.js +0 -1
- package/_next/static/chunks/2yghvponatk1x.js +0 -135
- package/_next/static/chunks/31i14-jemhnic.js +0 -863
- package/_next/static/chunks/3dt63tw_9r0jt.js +0 -38
- package/_next/static/chunks/3sgrkzk20mxs6.js +0 -54
- /package/_next/static/{hlKDicTyNGfd7dmHqo5m5 → sct9rcMTcCyBLHTxQQ75-}/_buildManifest.js +0 -0
- /package/_next/static/{hlKDicTyNGfd7dmHqo5m5 → sct9rcMTcCyBLHTxQQ75-}/_clientMiddlewareManifest.js +0 -0
- /package/_next/static/{hlKDicTyNGfd7dmHqo5m5 → sct9rcMTcCyBLHTxQQ75-}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,30297,31067,25234,82897,60099,67335,31497,60602,43257,78140,5941,66326,e=>{"use strict";let t,r,n,a;function i(){return(i=Object.assign.bind()).apply(null,arguments)}e.s(["default",()=>i],31067);var o=e.i(28600),s=e.i(1950);e.s(["useFrame",()=>s.D],25234);var s=s,l=e.i(71645),c=e.i(90072),u=Object.defineProperty;class h{constructor(){((e,t,r)=>{let n;return(n="symbol"!=typeof t?t+"":t)in e?u(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r})(this,"_listeners")}addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let r=this._listeners;void 0===r[e]&&(r[e]=[]),-1===r[e].indexOf(t)&&r[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let r=this._listeners;return void 0!==r[e]&&-1!==r[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let r=this._listeners[e];if(void 0!==r){let e=r.indexOf(t);-1!==e&&r.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let r=t.slice(0);for(let t=0,n=r.length;t<n;t++)r[t].call(this,e);e.target=null}}}var d=Object.defineProperty,A=(e,t,r)=>{let n;return(n="symbol"!=typeof t?t+"":t)in e?d(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,r};let f=new c.Ray,p=new c.Plane,m=Math.cos(Math.PI/180*70),B=(e,t)=>(e%t+t)%t;class g extends h{constructor(e,t){super(),A(this,"object"),A(this,"domElement"),A(this,"enabled",!0),A(this,"target",new c.Vector3),A(this,"minDistance",0),A(this,"maxDistance",1/0),A(this,"minZoom",0),A(this,"maxZoom",1/0),A(this,"minPolarAngle",0),A(this,"maxPolarAngle",Math.PI),A(this,"minAzimuthAngle",-1/0),A(this,"maxAzimuthAngle",1/0),A(this,"enableDamping",!1),A(this,"dampingFactor",.05),A(this,"enableZoom",!0),A(this,"zoomSpeed",1),A(this,"enableRotate",!0),A(this,"rotateSpeed",1),A(this,"enablePan",!0),A(this,"panSpeed",1),A(this,"screenSpacePanning",!0),A(this,"keyPanSpeed",7),A(this,"zoomToCursor",!1),A(this,"autoRotate",!1),A(this,"autoRotateSpeed",2),A(this,"reverseOrbit",!1),A(this,"reverseHorizontalOrbit",!1),A(this,"reverseVerticalOrbit",!1),A(this,"keys",{LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"}),A(this,"mouseButtons",{LEFT:c.MOUSE.ROTATE,MIDDLE:c.MOUSE.DOLLY,RIGHT:c.MOUSE.PAN}),A(this,"touches",{ONE:c.TOUCH.ROTATE,TWO:c.TOUCH.DOLLY_PAN}),A(this,"target0"),A(this,"position0"),A(this,"zoom0"),A(this,"_domElementKeyEvents",null),A(this,"getPolarAngle"),A(this,"getAzimuthalAngle"),A(this,"setPolarAngle"),A(this,"setAzimuthalAngle"),A(this,"getDistance"),A(this,"getZoomScale"),A(this,"listenToKeyEvents"),A(this,"stopListenToKeyEvents"),A(this,"saveState"),A(this,"reset"),A(this,"update"),A(this,"connect"),A(this,"dispose"),A(this,"dollyIn"),A(this,"dollyOut"),A(this,"getScale"),A(this,"setScale"),this.object=e,this.domElement=t,this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=()=>u.phi,this.getAzimuthalAngle=()=>u.theta,this.setPolarAngle=e=>{let t=B(e,2*Math.PI),n=u.phi;n<0&&(n+=2*Math.PI),t<0&&(t+=2*Math.PI);let a=Math.abs(t-n);2*Math.PI-a<a&&(t<n?t+=2*Math.PI:n+=2*Math.PI),h.phi=t-n,r.update()},this.setAzimuthalAngle=e=>{let t=B(e,2*Math.PI),n=u.theta;n<0&&(n+=2*Math.PI),t<0&&(t+=2*Math.PI);let a=Math.abs(t-n);2*Math.PI-a<a&&(t<n?t+=2*Math.PI:n+=2*Math.PI),h.theta=t-n,r.update()},this.getDistance=()=>r.object.position.distanceTo(r.target),this.listenToKeyEvents=e=>{e.addEventListener("keydown",ee),this._domElementKeyEvents=e},this.stopListenToKeyEvents=()=>{this._domElementKeyEvents.removeEventListener("keydown",ee),this._domElementKeyEvents=null},this.saveState=()=>{r.target0.copy(r.target),r.position0.copy(r.object.position),r.zoom0=r.object.zoom},this.reset=()=>{r.target.copy(r.target0),r.object.position.copy(r.position0),r.object.zoom=r.zoom0,r.object.updateProjectionMatrix(),r.dispatchEvent(n),r.update(),s=o.NONE},this.update=(()=>{let t=new c.Vector3,a=new c.Vector3(0,1,0),i=new c.Quaternion().setFromUnitVectors(e.up,a),A=i.clone().invert(),B=new c.Vector3,C=new c.Quaternion,M=2*Math.PI;return function(){let v=r.object.position;i.setFromUnitVectors(e.up,a),A.copy(i).invert(),t.copy(v).sub(r.target),t.applyQuaternion(i),u.setFromVector3(t),r.autoRotate&&s===o.NONE&&P(2*Math.PI/60/60*r.autoRotateSpeed),r.enableDamping?(u.theta+=h.theta*r.dampingFactor,u.phi+=h.phi*r.dampingFactor):(u.theta+=h.theta,u.phi+=h.phi);let y=r.minAzimuthAngle,E=r.maxAzimuthAngle;isFinite(y)&&isFinite(E)&&(y<-Math.PI?y+=M:y>Math.PI&&(y-=M),E<-Math.PI?E+=M:E>Math.PI&&(E-=M),y<=E?u.theta=Math.max(y,Math.min(E,u.theta)):u.theta=u.theta>(y+E)/2?Math.max(y,u.theta):Math.min(E,u.theta)),u.phi=Math.max(r.minPolarAngle,Math.min(r.maxPolarAngle,u.phi)),u.makeSafe(),!0===r.enableDamping?r.target.addScaledVector(g,r.dampingFactor):r.target.add(g),r.zoomToCursor&&x||r.object.isOrthographicCamera?u.radius=k(u.radius):u.radius=k(u.radius*d),t.setFromSpherical(u),t.applyQuaternion(A),v.copy(r.target).add(t),r.object.matrixAutoUpdate||r.object.updateMatrix(),r.object.lookAt(r.target),!0===r.enableDamping?(h.theta*=1-r.dampingFactor,h.phi*=1-r.dampingFactor,g.multiplyScalar(1-r.dampingFactor)):(h.set(0,0,0),g.set(0,0,0));let b=!1;if(r.zoomToCursor&&x){let n=null;if(r.object instanceof c.PerspectiveCamera&&r.object.isPerspectiveCamera){let e=t.length();n=k(e*d);let a=e-n;r.object.position.addScaledVector(T,a),r.object.updateMatrixWorld()}else if(r.object.isOrthographicCamera){let e=new c.Vector3(w.x,w.y,0);e.unproject(r.object),r.object.zoom=Math.max(r.minZoom,Math.min(r.maxZoom,r.object.zoom/d)),r.object.updateProjectionMatrix(),b=!0;let a=new c.Vector3(w.x,w.y,0);a.unproject(r.object),r.object.position.sub(a).add(e),r.object.updateMatrixWorld(),n=t.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),r.zoomToCursor=!1;null!==n&&(r.screenSpacePanning?r.target.set(0,0,-1).transformDirection(r.object.matrix).multiplyScalar(n).add(r.object.position):(f.origin.copy(r.object.position),f.direction.set(0,0,-1).transformDirection(r.object.matrix),Math.abs(r.object.up.dot(f.direction))<m?e.lookAt(r.target):(p.setFromNormalAndCoplanarPoint(r.object.up,r.target),f.intersectPlane(p,r.target))))}else r.object instanceof c.OrthographicCamera&&r.object.isOrthographicCamera&&(b=1!==d)&&(r.object.zoom=Math.max(r.minZoom,Math.min(r.maxZoom,r.object.zoom/d)),r.object.updateProjectionMatrix());return d=1,x=!1,!!(b||B.distanceToSquared(r.object.position)>l||8*(1-C.dot(r.object.quaternion))>l)&&(r.dispatchEvent(n),B.copy(r.object.position),C.copy(r.object.quaternion),b=!1,!0)}})(),this.connect=e=>{r.domElement=e,r.domElement.style.touchAction="none",r.domElement.addEventListener("contextmenu",et),r.domElement.addEventListener("pointerdown",Z),r.domElement.addEventListener("pointercancel",q),r.domElement.addEventListener("wheel",$)},this.dispose=()=>{var e,t,n,a,i,o;r.domElement&&(r.domElement.style.touchAction="auto"),null==(e=r.domElement)||e.removeEventListener("contextmenu",et),null==(t=r.domElement)||t.removeEventListener("pointerdown",Z),null==(n=r.domElement)||n.removeEventListener("pointercancel",q),null==(a=r.domElement)||a.removeEventListener("wheel",$),null==(i=r.domElement)||i.ownerDocument.removeEventListener("pointermove",z),null==(o=r.domElement)||o.ownerDocument.removeEventListener("pointerup",q),null!==r._domElementKeyEvents&&r._domElementKeyEvents.removeEventListener("keydown",ee)};const r=this,n={type:"change"},a={type:"start"},i={type:"end"},o={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let s=o.NONE;const l=1e-6,u=new c.Spherical,h=new c.Spherical;let d=1;const g=new c.Vector3,C=new c.Vector2,M=new c.Vector2,v=new c.Vector2,y=new c.Vector2,E=new c.Vector2,b=new c.Vector2,F=new c.Vector2,I=new c.Vector2,R=new c.Vector2,T=new c.Vector3,w=new c.Vector2;let x=!1;const G=[],D={};function H(){return Math.pow(.95,r.zoomSpeed)}function P(e){r.reverseOrbit||r.reverseHorizontalOrbit?h.theta+=e:h.theta-=e}function S(e){r.reverseOrbit||r.reverseVerticalOrbit?h.phi+=e:h.phi-=e}const L=(()=>{let e=new c.Vector3;return function(t,r){e.setFromMatrixColumn(r,0),e.multiplyScalar(-t),g.add(e)}})(),O=(()=>{let e=new c.Vector3;return function(t,n){!0===r.screenSpacePanning?e.setFromMatrixColumn(n,1):(e.setFromMatrixColumn(n,0),e.crossVectors(r.object.up,e)),e.multiplyScalar(t),g.add(e)}})(),_=(()=>{let e=new c.Vector3;return function(t,n){let a=r.domElement;if(a&&r.object instanceof c.PerspectiveCamera&&r.object.isPerspectiveCamera){let i=r.object.position;e.copy(i).sub(r.target);let o=e.length();L(2*t*(o*=Math.tan(r.object.fov/2*Math.PI/180))/a.clientHeight,r.object.matrix),O(2*n*o/a.clientHeight,r.object.matrix)}else a&&r.object instanceof c.OrthographicCamera&&r.object.isOrthographicCamera?(L(t*(r.object.right-r.object.left)/r.object.zoom/a.clientWidth,r.object.matrix),O(n*(r.object.top-r.object.bottom)/r.object.zoom/a.clientHeight,r.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),r.enablePan=!1)}})();function J(e){r.object instanceof c.PerspectiveCamera&&r.object.isPerspectiveCamera||r.object instanceof c.OrthographicCamera&&r.object.isOrthographicCamera?d=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),r.enableZoom=!1)}function U(e){if(!r.zoomToCursor||!r.domElement)return;x=!0;let t=r.domElement.getBoundingClientRect(),n=e.clientX-t.left,a=e.clientY-t.top,i=t.width,o=t.height;w.x=n/i*2-1,w.y=-(a/o*2)+1,T.set(w.x,w.y,1).unproject(r.object).sub(r.object.position).normalize()}function k(e){return Math.max(r.minDistance,Math.min(r.maxDistance,e))}function K(e){C.set(e.clientX,e.clientY)}function N(e){y.set(e.clientX,e.clientY)}function j(){if(1==G.length)C.set(G[0].pageX,G[0].pageY);else{let e=.5*(G[0].pageX+G[1].pageX),t=.5*(G[0].pageY+G[1].pageY);C.set(e,t)}}function Q(){if(1==G.length)y.set(G[0].pageX,G[0].pageY);else{let e=.5*(G[0].pageX+G[1].pageX),t=.5*(G[0].pageY+G[1].pageY);y.set(e,t)}}function X(){let e=G[0].pageX-G[1].pageX,t=G[0].pageY-G[1].pageY,r=Math.sqrt(e*e+t*t);F.set(0,r)}function Y(e){if(1==G.length)M.set(e.pageX,e.pageY);else{let t=en(e),r=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);M.set(r,n)}v.subVectors(M,C).multiplyScalar(r.rotateSpeed);let t=r.domElement;t&&(P(2*Math.PI*v.x/t.clientHeight),S(2*Math.PI*v.y/t.clientHeight)),C.copy(M)}function W(e){if(1==G.length)E.set(e.pageX,e.pageY);else{let t=en(e),r=.5*(e.pageX+t.x),n=.5*(e.pageY+t.y);E.set(r,n)}b.subVectors(E,y).multiplyScalar(r.panSpeed),_(b.x,b.y),y.copy(E)}function V(e){var t;let n=en(e),a=e.pageX-n.x,i=e.pageY-n.y,o=Math.sqrt(a*a+i*i);I.set(0,o),R.set(0,Math.pow(I.y/F.y,r.zoomSpeed)),t=R.y,J(d/t),F.copy(I)}function Z(e){var t,n,i;!1!==r.enabled&&(0===G.length&&(null==(t=r.domElement)||t.ownerDocument.addEventListener("pointermove",z),null==(n=r.domElement)||n.ownerDocument.addEventListener("pointerup",q)),i=e,G.push(i),"touch"===e.pointerType?function(e){switch(er(e),G.length){case 1:switch(r.touches.ONE){case c.TOUCH.ROTATE:if(!1===r.enableRotate)return;j(),s=o.TOUCH_ROTATE;break;case c.TOUCH.PAN:if(!1===r.enablePan)return;Q(),s=o.TOUCH_PAN;break;default:s=o.NONE}break;case 2:switch(r.touches.TWO){case c.TOUCH.DOLLY_PAN:if(!1===r.enableZoom&&!1===r.enablePan)return;r.enableZoom&&X(),r.enablePan&&Q(),s=o.TOUCH_DOLLY_PAN;break;case c.TOUCH.DOLLY_ROTATE:if(!1===r.enableZoom&&!1===r.enableRotate)return;r.enableZoom&&X(),r.enableRotate&&j(),s=o.TOUCH_DOLLY_ROTATE;break;default:s=o.NONE}break;default:s=o.NONE}s!==o.NONE&&r.dispatchEvent(a)}(e):function(e){let t;switch(e.button){case 0:t=r.mouseButtons.LEFT;break;case 1:t=r.mouseButtons.MIDDLE;break;case 2:t=r.mouseButtons.RIGHT;break;default:t=-1}switch(t){case c.MOUSE.DOLLY:if(!1===r.enableZoom)return;U(e),F.set(e.clientX,e.clientY),s=o.DOLLY;break;case c.MOUSE.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(!1===r.enablePan)return;N(e),s=o.PAN}else{if(!1===r.enableRotate)return;K(e),s=o.ROTATE}break;case c.MOUSE.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(!1===r.enableRotate)return;K(e),s=o.ROTATE}else{if(!1===r.enablePan)return;N(e),s=o.PAN}break;default:s=o.NONE}s!==o.NONE&&r.dispatchEvent(a)}(e))}function z(e){!1!==r.enabled&&("touch"===e.pointerType?function(e){switch(er(e),s){case o.TOUCH_ROTATE:if(!1===r.enableRotate)return;Y(e),r.update();break;case o.TOUCH_PAN:if(!1===r.enablePan)return;W(e),r.update();break;case o.TOUCH_DOLLY_PAN:if(!1===r.enableZoom&&!1===r.enablePan)return;r.enableZoom&&V(e),r.enablePan&&W(e),r.update();break;case o.TOUCH_DOLLY_ROTATE:if(!1===r.enableZoom&&!1===r.enableRotate)return;r.enableZoom&&V(e),r.enableRotate&&Y(e),r.update();break;default:s=o.NONE}}(e):function(e){if(!1!==r.enabled)switch(s){case o.ROTATE:let t;if(!1===r.enableRotate)return;M.set(e.clientX,e.clientY),v.subVectors(M,C).multiplyScalar(r.rotateSpeed),(t=r.domElement)&&(P(2*Math.PI*v.x/t.clientHeight),S(2*Math.PI*v.y/t.clientHeight)),C.copy(M),r.update();break;case o.DOLLY:var n,a;if(!1===r.enableZoom)return;(I.set(e.clientX,e.clientY),R.subVectors(I,F),R.y>0)?(n=H(),J(d/n)):R.y<0&&(a=H(),J(d*a)),F.copy(I),r.update();break;case o.PAN:if(!1===r.enablePan)return;E.set(e.clientX,e.clientY),b.subVectors(E,y).multiplyScalar(r.panSpeed),_(b.x,b.y),y.copy(E),r.update()}}(e))}function q(e){var t,n,a;(function(e){delete D[e.pointerId];for(let t=0;t<G.length;t++)if(G[t].pointerId==e.pointerId)return void G.splice(t,1)})(e),0===G.length&&(null==(t=r.domElement)||t.releasePointerCapture(e.pointerId),null==(n=r.domElement)||n.ownerDocument.removeEventListener("pointermove",z),null==(a=r.domElement)||a.ownerDocument.removeEventListener("pointerup",q)),r.dispatchEvent(i),s=o.NONE}function $(e){if(!1!==r.enabled&&!1!==r.enableZoom&&(s===o.NONE||s===o.ROTATE)){var t,n;e.preventDefault(),r.dispatchEvent(a),(U(e),e.deltaY<0)?(t=H(),J(d*t)):e.deltaY>0&&(n=H(),J(d/n)),r.update(),r.dispatchEvent(i)}}function ee(e){if(!1!==r.enabled&&!1!==r.enablePan){let t=!1;switch(e.code){case r.keys.UP:_(0,r.keyPanSpeed),t=!0;break;case r.keys.BOTTOM:_(0,-r.keyPanSpeed),t=!0;break;case r.keys.LEFT:_(r.keyPanSpeed,0),t=!0;break;case r.keys.RIGHT:_(-r.keyPanSpeed,0),t=!0}t&&(e.preventDefault(),r.update())}}function et(e){!1!==r.enabled&&e.preventDefault()}function er(e){let t=D[e.pointerId];void 0===t&&(t=new c.Vector2,D[e.pointerId]=t),t.set(e.pageX,e.pageY)}function en(e){return D[(e.pointerId===G[0].pointerId?G[1]:G[0]).pointerId]}this.dollyIn=(e=H())=>{J(d*e),r.update()},this.dollyOut=(e=H())=>{J(d/e),r.update()},this.getScale=()=>d,this.setScale=e=>{J(e),r.update()},this.getZoomScale=()=>H(),void 0!==t&&this.connect(t),this.update()}}let C=l.forwardRef(({makeDefault:e,camera:t,regress:r,domElement:n,enableDamping:a=!0,keyEvents:c=!1,onChange:u,onStart:h,onEnd:d,...A},f)=>{let p=(0,o.useThree)(e=>e.invalidate),m=(0,o.useThree)(e=>e.camera),B=(0,o.useThree)(e=>e.gl),C=(0,o.useThree)(e=>e.events),M=(0,o.useThree)(e=>e.setEvents),v=(0,o.useThree)(e=>e.set),y=(0,o.useThree)(e=>e.get),E=(0,o.useThree)(e=>e.performance),b=t||m,F=n||C.connected||B.domElement,I=l.useMemo(()=>new g(b),[b]);return(0,s.D)(()=>{I.enabled&&I.update()},-1),l.useEffect(()=>(c&&I.connect(!0===c?F:c),I.connect(F),()=>void I.dispose()),[c,F,r,I,p]),l.useEffect(()=>{let e=e=>{p(),r&&E.regress(),u&&u(e)},t=e=>{h&&h(e)},n=e=>{d&&d(e)};return I.addEventListener("change",e),I.addEventListener("start",t),I.addEventListener("end",n),()=>{I.removeEventListener("start",t),I.removeEventListener("end",n),I.removeEventListener("change",e)}},[u,h,d,I,p,M]),l.useEffect(()=>{if(e){let e=y().controls;return v({controls:I}),()=>v({controls:e})}},[e,I]),l.createElement("primitive",i({ref:f,object:I,enableDamping:a},A))});e.s(["OrbitControls",0,C],30297);var s=s;let M=l.forwardRef(({envMap:e,resolution:t=256,frames:r=1/0,makeDefault:n,children:a,...u},h)=>{let d=(0,o.useThree)(({set:e})=>e),A=(0,o.useThree)(({camera:e})=>e),f=(0,o.useThree)(({size:e})=>e),p=l.useRef(null);l.useImperativeHandle(h,()=>p.current,[]);let m=l.useRef(null),B=function(e){let t=(0,o.useThree)(e=>e.size),r=(0,o.useThree)(e=>e.viewport),n="number"==typeof e?e:t.width*r.dpr,a=t.height*r.dpr,i=("number"==typeof e?void 0:e)||{},{samples:s=0,depth:u,...h}=i,d=null!=u?u:i.depthBuffer,A=l.useMemo(()=>{let e=new c.WebGLRenderTarget(n,a,{minFilter:c.LinearFilter,magFilter:c.LinearFilter,type:c.HalfFloatType,...h});return d&&(e.depthTexture=new c.DepthTexture(n,a,c.FloatType)),e.samples=s,e},[]);return l.useLayoutEffect(()=>{A.setSize(n,a),s&&(A.samples=s)},[s,A,n,a]),l.useEffect(()=>()=>A.dispose(),[]),A}(t);l.useLayoutEffect(()=>{u.manual||(p.current.aspect=f.width/f.height)},[f,u]),l.useLayoutEffect(()=>{p.current.updateProjectionMatrix()});let g=0,C=null,M="function"==typeof a;return(0,s.D)(t=>{M&&(r===1/0||g<r)&&(m.current.visible=!1,t.gl.setRenderTarget(B),C=t.scene.background,e&&(t.scene.background=e),t.gl.render(t.scene,p.current),t.scene.background=C,t.gl.setRenderTarget(null),m.current.visible=!0,g++)}),l.useLayoutEffect(()=>{if(n)return d(()=>({camera:p.current})),()=>d(()=>({camera:A}))},[p,n,d]),l.createElement(l.Fragment,null,l.createElement("perspectiveCamera",i({ref:p},u),!M&&a),l.createElement("group",{ref:m},M&&a(B.texture)))});e.s(["PerspectiveCamera",0,M],82897);var v=e.i(88014),s=s;let y=new c.Vector3,E=new c.Vector3,b=new c.Vector3,F=new c.Vector2;function I(e,t,r){let n=y.setFromMatrixPosition(e.matrixWorld);n.project(t);let a=r.width/2,i=r.height/2;return[n.x*a+a,-(n.y*i)+i]}let R=e=>1e-10>Math.abs(e)?0:e;function T(e,t,r=""){let n="matrix3d(";for(let r=0;16!==r;r++)n+=R(t[r]*e.elements[r])+(15!==r?",":")");return r+n}let w=(n=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>T(e,n)),x=(a=e=>[1/e,1/e,1/e,1,-1/e,-1/e,-1/e,-1,1/e,1/e,1/e,1,1,1,1,1],(e,t)=>T(e,a(t),"translate(-50%,-50%)")),G=l.forwardRef(({children:e,eps:t=.001,style:r,className:n,prepend:a,center:u,fullscreen:h,portal:d,distanceFactor:A,sprite:f=!1,transform:p=!1,occlude:m,onOcclude:B,castShadow:g,receiveShadow:C,material:M,geometry:T,zIndexRange:G=[0x1000037,0],calculatePosition:D=I,as:H="div",wrapperClass:P,pointerEvents:S="auto",...L},O)=>{let{gl:_,camera:J,scene:U,size:k,raycaster:K,events:N,viewport:j}=(0,o.useThree)(),[Q]=l.useState(()=>document.createElement(H)),X=l.useRef(null),Y=l.useRef(null),W=l.useRef(0),V=l.useRef([0,0]),Z=l.useRef(null),z=l.useRef(null),q=(null==d?void 0:d.current)||N.connected||_.domElement.parentNode,$=l.useRef(null),ee=l.useRef(!1),et=l.useMemo(()=>{var e;return m&&"blending"!==m||Array.isArray(m)&&m.length&&(e=m[0])&&"object"==typeof e&&"current"in e},[m]);l.useLayoutEffect(()=>{let e=_.domElement;m&&"blending"===m?(e.style.zIndex=`${Math.floor(G[0]/2)}`,e.style.position="absolute",e.style.pointerEvents="none"):(e.style.zIndex=null,e.style.position=null,e.style.pointerEvents=null)},[m]),l.useLayoutEffect(()=>{if(Y.current){let e=X.current=v.createRoot(Q);if(U.updateMatrixWorld(),p)Q.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{let e=D(Y.current,J,k);Q.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return q&&(a?q.prepend(Q):q.appendChild(Q)),()=>{q&&q.removeChild(Q),e.unmount()}}},[q,p]),l.useLayoutEffect(()=>{P&&(Q.className=P)},[P]);let er=l.useMemo(()=>p?{position:"absolute",top:0,left:0,width:k.width,height:k.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:u?"translate3d(-50%,-50%,0)":"none",...h&&{top:-k.height/2,left:-k.width/2,width:k.width,height:k.height},...r},[r,u,h,k,p]),en=l.useMemo(()=>({position:"absolute",pointerEvents:S}),[S]);l.useLayoutEffect(()=>{var t,a;ee.current=!1,p?null==(t=X.current)||t.render(l.createElement("div",{ref:Z,style:er},l.createElement("div",{ref:z,style:en},l.createElement("div",{ref:O,className:n,style:r,children:e})))):null==(a=X.current)||a.render(l.createElement("div",{ref:O,style:er,className:n,children:e}))});let ea=l.useRef(!0);(0,s.D)(e=>{if(Y.current){J.updateMatrixWorld(),Y.current.updateWorldMatrix(!0,!1);let e=p?V.current:D(Y.current,J,k);if(p||Math.abs(W.current-J.zoom)>t||Math.abs(V.current[0]-e[0])>t||Math.abs(V.current[1]-e[1])>t){var r;let t,n,a,i,o=(r=Y.current,t=y.setFromMatrixPosition(r.matrixWorld),n=E.setFromMatrixPosition(J.matrixWorld),a=t.sub(n),i=J.getWorldDirection(b),a.angleTo(i)>Math.PI/2),s=!1;et&&(Array.isArray(m)?s=m.map(e=>e.current):"blending"!==m&&(s=[U]));let l=ea.current;s?ea.current=function(e,t,r,n){let a=y.setFromMatrixPosition(e.matrixWorld),i=a.clone();i.project(t),F.set(i.x,i.y),r.setFromCamera(F,t);let o=r.intersectObjects(n,!0);if(o.length){let e=o[0].distance;return a.distanceTo(r.ray.origin)<e}return!0}(Y.current,J,K,s)&&!o:ea.current=!o,l!==ea.current&&(B?B(!ea.current):Q.style.display=ea.current?"block":"none");let u=Math.floor(G[0]/2),h=m?et?[G[0],u]:[u-1,0]:G;if(Q.style.zIndex=`${function(e,t,r){if(t instanceof c.PerspectiveCamera||t instanceof c.OrthographicCamera){let n=y.setFromMatrixPosition(e.matrixWorld),a=E.setFromMatrixPosition(t.matrixWorld),i=n.distanceTo(a),o=(r[1]-r[0])/(t.far-t.near),s=r[1]-o*t.far;return Math.round(o*i+s)}}(Y.current,J,h)}`,p){let[e,t]=[k.width/2,k.height/2],r=J.projectionMatrix.elements[5]*t,{isOrthographicCamera:n,top:a,left:i,bottom:o,right:s}=J,l=w(J.matrixWorldInverse),c=n?`scale(${r})translate(${R(-(s+i)/2)}px,${R((a+o)/2)}px)`:`translateZ(${r}px)`,u=Y.current.matrixWorld;f&&((u=J.matrixWorldInverse.clone().transpose().copyPosition(u).scale(Y.current.scale)).elements[3]=u.elements[7]=u.elements[11]=0,u.elements[15]=1),Q.style.width=k.width+"px",Q.style.height=k.height+"px",Q.style.perspective=n?"":`${r}px`,Z.current&&z.current&&(Z.current.style.transform=`${c}${l}translate(${e}px,${t}px)`,z.current.style.transform=x(u,1/((A||10)/400)))}else{let t=void 0===A?1:function(e,t){if(t instanceof c.OrthographicCamera)return t.zoom;if(!(t instanceof c.PerspectiveCamera))return 1;{let r=y.setFromMatrixPosition(e.matrixWorld),n=E.setFromMatrixPosition(t.matrixWorld);return 1/(2*Math.tan(t.fov*Math.PI/180/2)*r.distanceTo(n))}}(Y.current,J)*A;Q.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}V.current=e,W.current=J.zoom}}if(!et&&$.current&&!ee.current)if(p){if(Z.current){let e=Z.current.children[0];if(null!=e&&e.clientWidth&&null!=e&&e.clientHeight){let{isOrthographicCamera:t}=J;if(t||T)L.scale&&(Array.isArray(L.scale)?L.scale instanceof c.Vector3?$.current.scale.copy(L.scale.clone().divideScalar(1)):$.current.scale.set(1/L.scale[0],1/L.scale[1],1/L.scale[2]):$.current.scale.setScalar(1/L.scale));else{let t=(A||10)/400,r=e.clientWidth*t,n=e.clientHeight*t;$.current.scale.set(r,n,1)}ee.current=!0}}}else{let t=Q.children[0];if(null!=t&&t.clientWidth&&null!=t&&t.clientHeight){let e=1/j.factor,r=t.clientWidth*e,n=t.clientHeight*e;$.current.scale.set(r,n,1),ee.current=!0}$.current.lookAt(e.camera.position)}});let ei=l.useMemo(()=>({vertexShader:p?void 0:`
|
|
2
|
+
/*
|
|
3
|
+
This shader is from the THREE's SpriteMaterial.
|
|
4
|
+
We need to turn the backing plane into a Sprite
|
|
5
|
+
(make it always face the camera) if "transfrom"
|
|
6
|
+
is false.
|
|
7
|
+
*/
|
|
8
|
+
#include <common>
|
|
9
|
+
|
|
10
|
+
void main() {
|
|
11
|
+
vec2 center = vec2(0., 1.);
|
|
12
|
+
float rotation = 0.0;
|
|
13
|
+
|
|
14
|
+
// This is somewhat arbitrary, but it seems to work well
|
|
15
|
+
// Need to figure out how to derive this dynamically if it even matters
|
|
16
|
+
float size = 0.03;
|
|
17
|
+
|
|
18
|
+
vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
|
|
19
|
+
vec2 scale;
|
|
20
|
+
scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
|
|
21
|
+
scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
|
|
22
|
+
|
|
23
|
+
bool isPerspective = isPerspectiveMatrix( projectionMatrix );
|
|
24
|
+
if ( isPerspective ) scale *= - mvPosition.z;
|
|
25
|
+
|
|
26
|
+
vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;
|
|
27
|
+
vec2 rotatedPosition;
|
|
28
|
+
rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
|
|
29
|
+
rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
|
|
30
|
+
mvPosition.xy += rotatedPosition;
|
|
31
|
+
|
|
32
|
+
gl_Position = projectionMatrix * mvPosition;
|
|
33
|
+
}
|
|
34
|
+
`,fragmentShader:`
|
|
35
|
+
void main() {
|
|
36
|
+
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
|
|
37
|
+
}
|
|
38
|
+
`}),[p]);return l.createElement("group",i({},L,{ref:Y}),m&&!et&&l.createElement("mesh",{castShadow:g,receiveShadow:C,ref:$},T||l.createElement("planeGeometry",null),M||l.createElement("shaderMaterial",{side:c.DoubleSide,vertexShader:ei.vertexShader,fragmentShader:ei.fragmentShader})))});e.s(["Html",0,G],60099);var s=s,D=s,H=s,P=s;e.s(["extend",()=>P.e],67335);var P=s,S=e.i(8560),L=c;let O=parseInt(c.REVISION.replace(/\D+/g,""));e.s(["version",0,O],31497);class _ extends L.Mesh{constructor(e,t){var r,n;const a=(e=>e&&e.isCubeTexture)(e),i=Math.floor(Math.log2((null!=(n=a?null==(r=e.image[0])?void 0:r.width:e.image.width)?n:1024)/4)),o=Math.pow(2,i),s=3*Math.max(o,112),l=`
|
|
39
|
+
varying vec3 vWorldPosition;
|
|
40
|
+
void main()
|
|
41
|
+
{
|
|
42
|
+
vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );
|
|
43
|
+
vWorldPosition = worldPosition.xyz;
|
|
44
|
+
|
|
45
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
46
|
+
}
|
|
47
|
+
`,c=[a?"#define ENVMAP_TYPE_CUBE":"",`#define CUBEUV_TEXEL_WIDTH ${1/s}`,`#define CUBEUV_TEXEL_HEIGHT ${1/(4*o)}`,`#define CUBEUV_MAX_MIP ${i}.0`].join("\n")+`
|
|
48
|
+
#define ENVMAP_TYPE_CUBE_UV
|
|
49
|
+
varying vec3 vWorldPosition;
|
|
50
|
+
uniform float radius;
|
|
51
|
+
uniform float height;
|
|
52
|
+
uniform float angle;
|
|
53
|
+
#ifdef ENVMAP_TYPE_CUBE
|
|
54
|
+
uniform samplerCube map;
|
|
55
|
+
#else
|
|
56
|
+
uniform sampler2D map;
|
|
57
|
+
#endif
|
|
58
|
+
// From: https://www.shadertoy.com/view/4tsBD7
|
|
59
|
+
float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r )
|
|
60
|
+
{
|
|
61
|
+
float d = dot ( rd, n );
|
|
62
|
+
|
|
63
|
+
if( d > 0.0 ) { return 1e6; }
|
|
64
|
+
|
|
65
|
+
vec3 o = ro - c;
|
|
66
|
+
float t = - dot( n, o ) / d;
|
|
67
|
+
vec3 q = o + rd * t;
|
|
68
|
+
|
|
69
|
+
return ( dot( q, q ) < r * r ) ? t : 1e6;
|
|
70
|
+
}
|
|
71
|
+
// From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm
|
|
72
|
+
float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra )
|
|
73
|
+
{
|
|
74
|
+
vec3 oc = ro - ce;
|
|
75
|
+
float b = dot( oc, rd );
|
|
76
|
+
float c = dot( oc, oc ) - ra * ra;
|
|
77
|
+
float h = b * b - c;
|
|
78
|
+
|
|
79
|
+
if( h < 0.0 ) { return -1.0; }
|
|
80
|
+
|
|
81
|
+
h = sqrt( h );
|
|
82
|
+
|
|
83
|
+
return - b + h;
|
|
84
|
+
}
|
|
85
|
+
vec3 project()
|
|
86
|
+
{
|
|
87
|
+
vec3 p = normalize( vWorldPosition );
|
|
88
|
+
vec3 camPos = cameraPosition;
|
|
89
|
+
camPos.y -= height;
|
|
90
|
+
float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );
|
|
91
|
+
if( intersection > 0.0 ) {
|
|
92
|
+
|
|
93
|
+
vec3 h = vec3( 0.0, - height, 0.0 );
|
|
94
|
+
float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );
|
|
95
|
+
p = ( camPos + min( intersection, intersection2 ) * p ) / radius;
|
|
96
|
+
} else {
|
|
97
|
+
p = vec3( 0.0, 1.0, 0.0 );
|
|
98
|
+
}
|
|
99
|
+
return p;
|
|
100
|
+
}
|
|
101
|
+
#include <common>
|
|
102
|
+
#include <cube_uv_reflection_fragment>
|
|
103
|
+
void main()
|
|
104
|
+
{
|
|
105
|
+
vec3 projectedWorldPosition = project();
|
|
106
|
+
|
|
107
|
+
#ifdef ENVMAP_TYPE_CUBE
|
|
108
|
+
vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;
|
|
109
|
+
#else
|
|
110
|
+
vec3 direction = normalize( projectedWorldPosition );
|
|
111
|
+
vec2 uv = equirectUv( direction );
|
|
112
|
+
vec3 outcolor = texture2D( map, uv ).rgb;
|
|
113
|
+
#endif
|
|
114
|
+
gl_FragColor = vec4( outcolor, 1.0 );
|
|
115
|
+
#include <tonemapping_fragment>
|
|
116
|
+
#include <${O>=154?"colorspace_fragment":"encodings_fragment"}>
|
|
117
|
+
}
|
|
118
|
+
`,u={map:{value:e},height:{value:(null==t?void 0:t.height)||15},radius:{value:(null==t?void 0:t.radius)||100}};super(new L.IcosahedronGeometry(1,16),new L.ShaderMaterial({uniforms:u,fragmentShader:c,vertexShader:l,side:L.DoubleSide}))}set radius(e){this.material.uniforms.radius.value=e}get radius(){return this.material.uniforms.radius.value}set height(e){this.material.uniforms.height.value=e}get height(){return this.material.uniforms.height.value}}var J=s;e.s(["useLoader",()=>J.G],60602);var J=s,U=c;class k extends U.DataTextureLoader{constructor(e){super(e),this.type=U.HalfFloatType}parse(e){let t,r,n,a=function(e,t){switch(e){case 1:throw Error("THREE.RGBELoader: Read Error: "+(t||""));case 2:throw Error("THREE.RGBELoader: Write Error: "+(t||""));case 3:throw Error("THREE.RGBELoader: Bad File Format: "+(t||""));default:throw Error("THREE.RGBELoader: Memory Error: "+(t||""))}},i=function(e,t,r){t=t||1024;let n=e.pos,a=-1,i=0,o="",s=String.fromCharCode.apply(null,new Uint16Array(e.subarray(n,n+128)));for(;0>(a=s.indexOf("\n"))&&i<t&&n<e.byteLength;)o+=s,i+=s.length,n+=128,s+=String.fromCharCode.apply(null,new Uint16Array(e.subarray(n,n+128)));return -1<a&&(!1!==r&&(e.pos+=i+a+1),o+s.slice(0,a))},o=new Uint8Array(e);o.pos=0;let s=function(e){let t,r,n=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,o=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,s=/^\s*FORMAT=(\S+)\s*$/,l=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,c={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};for(!(e.pos>=e.byteLength)&&(t=i(e))||a(1,"no header found"),(r=t.match(/^#\?(\S+)/))||a(3,"bad initial token"),c.valid|=1,c.programtype=r[1],c.string+=t+"\n";!1!==(t=i(e));){if(c.string+=t+"\n","#"===t.charAt(0)){c.comments+=t+"\n";continue}if((r=t.match(n))&&(c.gamma=parseFloat(r[1])),(r=t.match(o))&&(c.exposure=parseFloat(r[1])),(r=t.match(s))&&(c.valid|=2,c.format=r[1]),(r=t.match(l))&&(c.valid|=4,c.height=parseInt(r[1],10),c.width=parseInt(r[2],10)),2&c.valid&&4&c.valid)break}return 2&c.valid||a(3,"missing format specifier"),4&c.valid||a(3,"missing image size specifier"),c}(o),l=s.width,c=s.height,u=function(e,t,r){if(t<8||t>32767||2!==e[0]||2!==e[1]||128&e[2])return new Uint8Array(e);t!==(e[2]<<8|e[3])&&a(3,"wrong scanline width");let n=new Uint8Array(4*t*r);n.length||a(4,"unable to allocate buffer space");let i=0,o=0,s=4*t,l=new Uint8Array(4),c=new Uint8Array(s),u=r;for(;u>0&&o<e.byteLength;){o+4>e.byteLength&&a(1),l[0]=e[o++],l[1]=e[o++],l[2]=e[o++],l[3]=e[o++],(2!=l[0]||2!=l[1]||(l[2]<<8|l[3])!=t)&&a(3,"bad rgbe scanline format");let r=0,h;for(;r<s&&o<e.byteLength;){let t=(h=e[o++])>128;if(t&&(h-=128),(0===h||r+h>s)&&a(3,"bad scanline data"),t){let t=e[o++];for(let e=0;e<h;e++)c[r++]=t}else c.set(e.subarray(o,o+h),r),r+=h,o+=h}for(let e=0;e<t;e++){let r=0;n[i]=c[e+r],r+=t,n[i+1]=c[e+r],r+=t,n[i+2]=c[e+r],r+=t,n[i+3]=c[e+r],i+=4}u--}return n}(o.subarray(o.pos),l,c);switch(this.type){case U.FloatType:let h=new Float32Array(4*(n=u.length/4));for(let e=0;e<n;e++)!function(e,t,r,n){let a=Math.pow(2,e[t+3]-128)/255;r[n+0]=e[t+0]*a,r[n+1]=e[t+1]*a,r[n+2]=e[t+2]*a,r[n+3]=1}(u,4*e,h,4*e);t=h,r=U.FloatType;break;case U.HalfFloatType:let d=new Uint16Array(4*(n=u.length/4));for(let e=0;e<n;e++)!function(e,t,r,n){let a=Math.pow(2,e[t+3]-128)/255;r[n+0]=U.DataUtils.toHalfFloat(Math.min(e[t+0]*a,65504)),r[n+1]=U.DataUtils.toHalfFloat(Math.min(e[t+1]*a,65504)),r[n+2]=U.DataUtils.toHalfFloat(Math.min(e[t+2]*a,65504)),r[n+3]=U.DataUtils.toHalfFloat(1)}(u,4*e,d,4*e);t=d,r=U.HalfFloatType;break;default:throw Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:l,height:c,data:t,header:s.string,gamma:s.gamma,exposure:s.exposure,type:r}}setDataType(e){return this.type=e,this}load(e,t,r,n){return super.load(e,function(e,r){switch(e.type){case U.FloatType:case U.HalfFloatType:"colorSpace"in e?e.colorSpace="srgb-linear":e.encoding=3e3,e.minFilter=U.LinearFilter,e.magFilter=U.LinearFilter,e.generateMipmaps=!1,e.flipY=!0}t&&t(e,r)},r,n)}}var K=c,N={},j=function(e,t,r,n,a){var i=new Worker(N[t]||(N[t]=URL.createObjectURL(new Blob([e],{type:"text/javascript"}))));return i.onerror=function(e){return a(e.error,null)},i.onmessage=function(e){return a(null,e.data)},i.postMessage(r,n),i},Q=Uint8Array,X=Uint16Array,Y=Uint32Array,W=new Q([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),V=new Q([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Z=new Q([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),z=function(e,t){for(var r=new X(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var a=new Y(r[30]),n=1;n<30;++n)for(var i=r[n];i<r[n+1];++i)a[i]=i-r[n]<<5|n;return[r,a]},q=z(W,2),$=q[0],ee=q[1];$[28]=258,ee[258]=28;for(var et=z(V,0),er=et[0],en=et[1],ea=new X(32768),ei=0;ei<32768;++ei){var eo=(43690&ei)>>>1|(21845&ei)<<1;eo=(61680&(eo=(52428&eo)>>>2|(13107&eo)<<2))>>>4|(3855&eo)<<4,ea[ei]=((65280&eo)>>>8|(255&eo)<<8)>>>1}for(var es=function(e,t,r){for(var n,a=e.length,i=0,o=new X(t);i<a;++i)++o[e[i]-1];var s=new X(t);for(i=0;i<t;++i)s[i]=s[i-1]+o[i-1]<<1;if(r){n=new X(1<<t);var l=15-t;for(i=0;i<a;++i)if(e[i])for(var c=i<<4|e[i],u=t-e[i],h=s[e[i]-1]++<<u,d=h|(1<<u)-1;h<=d;++h)n[ea[h]>>>l]=c}else for(i=0,n=new X(a);i<a;++i)e[i]&&(n[i]=ea[s[e[i]-1]++]>>>15-e[i]);return n},el=new Q(288),ei=0;ei<144;++ei)el[ei]=8;for(var ei=144;ei<256;++ei)el[ei]=9;for(var ei=256;ei<280;++ei)el[ei]=7;for(var ei=280;ei<288;++ei)el[ei]=8;for(var ec=new Q(32),ei=0;ei<32;++ei)ec[ei]=5;var eu=es(el,9,0),eh=es(el,9,1),ed=es(ec,5,0),eA=es(ec,5,1),ef=function(e){for(var t=e[0],r=1;r<e.length;++r)e[r]>t&&(t=e[r]);return t},ep=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(7&t)&r},em=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<<16)>>(7&t)},eB=function(e){return(e/8|0)+(7&e&&1)},eg=function(e,t,r){(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length);var n=new(e instanceof X?X:e instanceof Y?Y:Q)(r-t);return n.set(e.subarray(t,r)),n},eC=function(e,t,r){var n=e.length;if(!n||r&&!r.l&&n<5)return t||new Q(0);var a=!t||r,i=!r||r.i;r||(r={}),t||(t=new Q(3*n));var o=function(e){var r=t.length;if(e>r){var n=new Q(Math.max(2*r,e));n.set(t),t=n}},s=r.f||0,l=r.p||0,c=r.b||0,u=r.l,h=r.d,d=r.m,A=r.n,f=8*n;do{if(!u){r.f=s=ep(e,l,1);var p=ep(e,l+1,3);if(l+=3,p)if(1==p)u=eh,h=eA,d=9,A=5;else if(2==p){var m=ep(e,l,31)+257,B=ep(e,l+10,15)+4,g=m+ep(e,l+5,31)+1;l+=14;for(var C=new Q(g),M=new Q(19),v=0;v<B;++v)M[Z[v]]=ep(e,l+3*v,7);l+=3*B;for(var y=ef(M),E=(1<<y)-1,b=es(M,y,1),v=0;v<g;){var F=b[ep(e,l,E)];l+=15&F;var I=F>>>4;if(I<16)C[v++]=I;else{var R=0,T=0;for(16==I?(T=3+ep(e,l,3),l+=2,R=C[v-1]):17==I?(T=3+ep(e,l,7),l+=3):18==I&&(T=11+ep(e,l,127),l+=7);T--;)C[v++]=R}}var w=C.subarray(0,m),x=C.subarray(m);d=ef(w),A=ef(x),u=es(w,d,1),h=es(x,A,1)}else throw"invalid block type";else{var I=eB(l)+4,G=e[I-4]|e[I-3]<<8,D=I+G;if(D>n){if(i)throw"unexpected EOF";break}a&&o(c+G),t.set(e.subarray(I,D),c),r.b=c+=G,r.p=l=8*D;continue}if(l>f){if(i)throw"unexpected EOF";break}}a&&o(c+131072);for(var H=(1<<d)-1,P=(1<<A)-1,S=l;;S=l){var R=u[em(e,l)&H],L=R>>>4;if((l+=15&R)>f){if(i)throw"unexpected EOF";break}if(!R)throw"invalid length/literal";if(L<256)t[c++]=L;else if(256==L){S=l,u=null;break}else{var O=L-254;if(L>264){var v=L-257,_=W[v];O=ep(e,l,(1<<_)-1)+$[v],l+=_}var J=h[em(e,l)&P],U=J>>>4;if(!J)throw"invalid distance";l+=15&J;var x=er[U];if(U>3){var _=V[U];x+=em(e,l)&(1<<_)-1,l+=_}if(l>f){if(i)throw"unexpected EOF";break}a&&o(c+131072);for(var k=c+O;c<k;c+=4)t[c]=t[c-x],t[c+1]=t[c+1-x],t[c+2]=t[c+2-x],t[c+3]=t[c+3-x];c=k}}r.l=u,r.p=S,r.b=c,u&&(s=1,r.m=d,r.d=h,r.n=A)}while(!s)return c==t.length?t:eg(t,0,c)},eM=function(e,t,r){r<<=7&t;var n=t/8|0;e[n]|=r,e[n+1]|=r>>>8},ev=function(e,t,r){r<<=7&t;var n=t/8|0;e[n]|=r,e[n+1]|=r>>>8,e[n+2]|=r>>>16},ey=function(e,t){for(var r=[],n=0;n<e.length;++n)e[n]&&r.push({s:n,f:e[n]});var a=r.length,i=r.slice();if(!a)return[ew,0];if(1==a){var o=new Q(r[0].s+1);return o[r[0].s]=1,[o,1]}r.sort(function(e,t){return e.f-t.f}),r.push({s:-1,f:25001});var s=r[0],l=r[1],c=0,u=1,h=2;for(r[0]={s:-1,f:s.f+l.f,l:s,r:l};u!=a-1;)s=r[r[c].f<r[h].f?c++:h++],l=r[c!=u&&r[c].f<r[h].f?c++:h++],r[u++]={s:-1,f:s.f+l.f,l:s,r:l};for(var d=i[0].s,n=1;n<a;++n)i[n].s>d&&(d=i[n].s);var A=new X(d+1),f=eE(r[u-1],A,0);if(f>t){var n=0,p=0,m=f-t,B=1<<m;for(i.sort(function(e,t){return A[t.s]-A[e.s]||e.f-t.f});n<a;++n){var g=i[n].s;if(A[g]>t)p+=B-(1<<f-A[g]),A[g]=t;else break}for(p>>>=m;p>0;){var C=i[n].s;A[C]<t?p-=1<<t-A[C]++-1:++n}for(;n>=0&&p;--n){var M=i[n].s;A[M]==t&&(--A[M],++p)}f=t}return[new Q(A),f]},eE=function(e,t,r){return -1==e.s?Math.max(eE(e.l,t,r+1),eE(e.r,t,r+1)):t[e.s]=r},eb=function(e){for(var t=e.length;t&&!e[--t];);for(var r=new X(++t),n=0,a=e[0],i=1,o=function(e){r[n++]=e},s=1;s<=t;++s)if(e[s]==a&&s!=t)++i;else{if(!a&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(a),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(a);i=1,a=e[s]}return[r.subarray(0,n),t]},eF=function(e,t){for(var r=0,n=0;n<t.length;++n)r+=e[n]*t[n];return r},eI=function(e,t,r){var n=r.length,a=eB(t+2);e[a]=255&n,e[a+1]=n>>>8,e[a+2]=255^e[a],e[a+3]=255^e[a+1];for(var i=0;i<n;++i)e[a+i+4]=r[i];return(a+4+n)*8},eR=function(e,t,r,n,a,i,o,s,l,c,u){eM(t,u++,r),++a[256];for(var h,d,A,f,p=ey(a,15),m=p[0],B=p[1],g=ey(i,15),C=g[0],M=g[1],v=eb(m),y=v[0],E=v[1],b=eb(C),F=b[0],I=b[1],R=new X(19),T=0;T<y.length;++T)R[31&y[T]]++;for(var T=0;T<F.length;++T)R[31&F[T]]++;for(var w=ey(R,7),x=w[0],G=w[1],D=19;D>4&&!x[Z[D-1]];--D);var H=c+5<<3,P=eF(a,el)+eF(i,ec)+o,S=eF(a,m)+eF(i,C)+o+14+3*D+eF(R,x)+(2*R[16]+3*R[17]+7*R[18]);if(H<=P&&H<=S)return eI(t,u,e.subarray(l,l+c));if(eM(t,u,1+(S<P)),u+=2,S<P){h=es(m,B,0),d=m,A=es(C,M,0),f=C;var L=es(x,G,0);eM(t,u,E-257),eM(t,u+5,I-1),eM(t,u+10,D-4),u+=14;for(var T=0;T<D;++T)eM(t,u+3*T,x[Z[T]]);u+=3*D;for(var O=[y,F],_=0;_<2;++_)for(var J=O[_],T=0;T<J.length;++T){var U=31&J[T];eM(t,u,L[U]),u+=x[U],U>15&&(eM(t,u,J[T]>>>5&127),u+=J[T]>>>12)}}else h=eu,d=el,A=ed,f=ec;for(var T=0;T<s;++T)if(n[T]>255){var U=n[T]>>>18&31;ev(t,u,h[U+257]),u+=d[U+257],U>7&&(eM(t,u,n[T]>>>23&31),u+=W[U]);var k=31&n[T];ev(t,u,A[k]),u+=f[k],k>3&&(ev(t,u,n[T]>>>5&8191),u+=V[k])}else ev(t,u,h[n[T]]),u+=d[n[T]];return ev(t,u,h[256]),u+d[256]},eT=new Y([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),ew=new Q(0),ex=function(e,t,r,n,a,i){var o=e.length,s=new Q(n+o+5*(1+Math.ceil(o/7e3))+a),l=s.subarray(n,s.length-a),c=0;if(!t||o<8)for(var u=0;u<=o;u+=65535){var h=u+65535;h<o?c=eI(l,c,e.subarray(u,h)):(l[u]=i,c=eI(l,c,e.subarray(u,o)))}else{for(var d=eT[t-1],A=d>>>13,f=8191&d,p=(1<<r)-1,m=new X(32768),B=new X(p+1),g=Math.ceil(r/3),C=2*g,M=function(t){return(e[t]^e[t+1]<<g^e[t+2]<<C)&p},v=new Y(25e3),y=new X(288),E=new X(32),b=0,F=0,u=0,I=0,R=0,T=0;u<o;++u){var w=M(u),x=32767&u,G=B[w];if(m[x]=G,B[w]=x,R<=u){var D=o-u;if((b>7e3||I>24576)&&D>423){c=eR(e,l,0,v,y,E,F,I,T,u-T,c),I=b=F=0,T=u;for(var H=0;H<286;++H)y[H]=0;for(var H=0;H<30;++H)E[H]=0}var P=2,S=0,L=f,O=x-G&32767;if(D>2&&w==M(u-O))for(var _=Math.min(A,D)-1,J=Math.min(32767,u),U=Math.min(258,D);O<=J&&--L&&x!=G;){if(e[u+P]==e[u+P-O]){for(var k=0;k<U&&e[u+k]==e[u+k-O];++k);if(k>P){if(P=k,S=O,k>_)break;for(var K=Math.min(O,k-2),N=0,H=0;H<K;++H){var j=u-O+H+32768&32767,Z=m[j],z=j-Z+32768&32767;z>N&&(N=z,G=j)}}}G=m[x=G],O+=x-G+32768&32767}if(S){v[I++]=0x10000000|ee[P]<<18|en[S];var q=31&ee[P],$=31&en[S];F+=W[q]+V[$],++y[257+q],++E[$],R=u+P,++b}else v[I++]=e[u],++y[e[u]]}}c=eR(e,l,i,v,y,E,F,I,T,u-T,c),!i&&7&c&&(c=eI(l,c+1,ew))}return eg(s,0,n+eB(c)+a)},eG=function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var r=t,n=9;--n;)r=(1&r&&-0x12477ce0)^r>>>1;e[t]=r}return e}(),eD=function(){var e=-1;return{p:function(t){for(var r=e,n=0;n<t.length;++n)r=eG[255&r^t[n]]^r>>>8;e=r},d:function(){return~e}}},eH=function(){var e=1,t=0;return{p:function(r){for(var n=e,a=t,i=r.length,o=0;o!=i;){for(var s=Math.min(o+2655,i);o<s;++o)a+=n+=r[o];n=(65535&n)+15*(n>>16),a=(65535&a)+15*(a>>16)}e=n,t=a},d:function(){return e%=65521,t%=65521,(255&e)<<24|e>>>8<<16|(255&t)<<8|t>>>8}}},eP=function(e,t,r,n,a){return ex(e,null==t.level?6:t.level,null==t.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(e.length)))):12+t.mem,r,n,!a)},eS=function(e,t){var r={};for(var n in e)r[n]=e[n];for(var n in t)r[n]=t[n];return r},eL=function(e,t,r){for(var n=e(),a=e.toString(),i=a.slice(a.indexOf("[")+1,a.lastIndexOf("]")).replace(/ /g,"").split(","),o=0;o<n.length;++o){var s=n[o],l=i[o];if("function"==typeof s){t+=";"+l+"=";var c=s.toString();if(s.prototype)if(-1!=c.indexOf("[native code]")){var u=c.indexOf(" ",8)+1;t+=c.slice(u,c.indexOf("(",u))}else for(var h in t+=c,s.prototype)t+=";"+l+".prototype."+h+"="+s.prototype[h].toString();else t+=c}else r[l]=s}return[t,r]},eO=[],e_=function(e){var t=[];for(var r in e)(e[r]instanceof Q||e[r]instanceof X||e[r]instanceof Y)&&t.push((e[r]=new e[r].constructor(e[r])).buffer);return t},eJ=function(e,t,r,n){if(!eO[r]){for(var a,i="",o={},s=e.length-1,l=0;l<s;++l)i=(a=eL(e[l],i,o))[0],o=a[1];eO[r]=eL(e[s],i,o)}var c=eS({},eO[r][1]);return j(eO[r][0]+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+t.toString()+"}",r,c,e_(c),n)},eU=function(){return[Q,X,Y,W,V,Z,$,er,eh,eA,ea,es,ef,ep,em,eB,eg,eC,te,ej,eQ]},ek=function(){return[Q,X,Y,W,V,Z,ee,en,eu,el,ed,ec,ea,eT,ew,es,eM,ev,ey,eE,eb,eF,eI,eR,eB,eg,ex,eP,e5,ej]},eK=function(){return[e$,e0]},eN=function(){return[e9]},ej=function(e){return postMessage(e,[e.buffer])},eQ=function(e){return e&&e.size&&new Q(e.size)},eX=function(e){return e.ondata=function(e,t){return postMessage([e,t],[e.buffer])},function(t){return e.push(t.data[0],t.data[1])}},eY=function(e,t,r,n,a){var i,o=eJ(e,n,a,function(e,r){e?(o.terminate(),t.ondata.call(t,e)):(r[1]&&o.terminate(),t.ondata.call(t,e,r[0],r[1]))});o.postMessage(r),t.push=function(e,r){if(i)throw"stream finished";if(!t.ondata)throw"no stream handler";o.postMessage([e,i=r],[e.buffer])},t.terminate=function(){o.terminate()}},eW=function(e,t){return e[t]|e[t+1]<<8},eV=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},eZ=function(e,t){return eV(e,t)+0x100000000*eV(e,t+4)},ez=function(e,t,r){for(;r;++t)e[t]=r,r>>>=8},eq=function(e,t){var r=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:2*(9==t.level),e[9]=3,0!=t.mtime&&ez(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),r){e[3]=8;for(var n=0;n<=r.length;++n)e[n+10]=r.charCodeAt(n)}},e$=function(e){if(31!=e[0]||139!=e[1]||8!=e[2])throw"invalid gzip data";var t=e[3],r=10;4&t&&(r+=e[10]|(e[11]<<8)+2);for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(2&t)},e0=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0},e1=function(e){return 10+(e.filename&&e.filename.length+1||0)},e2=function(e,t){var r=t.level,n=0==r?0:r<6?1:9==r?3:2;e[0]=120,e[1]=n<<6|(n?32-2*n:1)},e9=function(e){if((15&e[0])!=8||e[0]>>>4>7||(e[0]<<8|e[1])%31)throw"invalid zlib data";if(32&e[1])throw"invalid zlib data: preset dictionaries not supported"};function e3(e,t){return t||"function"!=typeof e||(t=e,e={}),this.ondata=t,e}var e8=function(){function e(e,t){t||"function"!=typeof e||(t=e,e={}),this.ondata=t,this.o=e||{}}return e.prototype.p=function(e,t){this.ondata(eP(e,this.o,0,0,!t),t)},e.prototype.push=function(e,t){if(this.d)throw"stream finished";if(!this.ondata)throw"no stream handler";this.d=t,this.p(e,t||!1)},e}(),e6=function(e,t){eY([ek,function(){return[eX,e8]}],this,e3.call(this,e,t),function(e){onmessage=eX(new e8(e.data))},6)};function e5(e,t){return eP(e,t||{},0,0)}var e4=function(){function e(e){this.s={},this.p=new Q(0),this.ondata=e}return e.prototype.e=function(e){if(this.d)throw"stream finished";if(!this.ondata)throw"no stream handler";var t=this.p.length,r=new Q(t+e.length);r.set(this.p),r.set(e,t),this.p=r},e.prototype.c=function(e){this.d=this.s.i=e||!1;var t=this.s.b,r=eC(this.p,this.o,this.s);this.ondata(eg(r,t,this.s.b),this.d),this.o=eg(r,this.s.b-32768),this.s.b=this.o.length,this.p=eg(this.p,this.s.p/8|0),this.s.p&=7},e.prototype.push=function(e,t){this.e(e),this.c(t)},e}(),e7=function(e){this.ondata=e,eY([eU,function(){return[eX,e4]}],this,0,function(){onmessage=eX(new e4)},7)};function te(e,t){return eC(e,t)}(function(){function e(e,t){this.c=eD(),this.l=0,this.v=1,e8.call(this,e,t)}e.prototype.push=function(e,t){e8.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e),this.l+=e.length;var r=eP(e,this.o,this.v&&e1(this.o),t&&8,!t);this.v&&(eq(r,this.o),this.v=0),t&&(ez(r,r.length-8,this.c.d()),ez(r,r.length-4,this.l)),this.ondata(r,t)}})();var tt=function(){function e(e){this.v=1,e4.call(this,e)}return e.prototype.push=function(e,t){if(e4.prototype.e.call(this,e),this.v){var r=this.p.length>3?e$(this.p):4;if(r>=this.p.length&&!t)return;this.p=this.p.subarray(r),this.v=0}if(t){if(this.p.length<8)throw"invalid gzip stream";this.p=this.p.subarray(0,-8)}e4.prototype.c.call(this,t)},e}(),tr=function(e){this.ondata=e,eY([eU,eK,function(){return[eX,e4,tt]}],this,0,function(){onmessage=eX(new tt)},9)},tn=(function(){function e(e,t){this.c=eH(),this.v=1,e8.call(this,e,t)}e.prototype.push=function(e,t){e8.prototype.push.call(this,e,t)},e.prototype.p=function(e,t){this.c.p(e);var r=eP(e,this.o,this.v&&2,t&&4,!t);this.v&&(e2(r,this.o),this.v=0),t&&ez(r,r.length-4,this.c.d()),this.ondata(r,t)}}(),function(){function e(e){this.v=1,e4.call(this,e)}return e.prototype.push=function(e,t){if(e4.prototype.e.call(this,e),this.v){if(this.p.length<2&&!t)return;this.p=this.p.subarray(2),this.v=0}if(t){if(this.p.length<4)throw"invalid zlib stream";this.p=this.p.subarray(0,-4)}e4.prototype.c.call(this,t)},e}()),ta=function(e){this.ondata=e,eY([eU,eN,function(){return[eX,e4,tn]}],this,0,function(){onmessage=eX(new tn)},11)};function ti(e,t){return eC((e9(e),e.subarray(2,-4)),t)}var to=function(){function e(e){this.G=tt,this.I=e4,this.Z=tn,this.ondata=e}return e.prototype.push=function(e,t){if(!this.ondata)throw"no stream handler";if(this.s)this.s.push(e,t);else{if(this.p&&this.p.length){var r=new Q(this.p.length+e.length);r.set(this.p),r.set(e,this.p.length)}else this.p=e;if(this.p.length>2){var n=this,a=function(){n.ondata.apply(n,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(a):(15&this.p[0])!=8||this.p[0]>>4>7||(this.p[0]<<8|this.p[1])%31?new this.I(a):new this.Z(a),this.s.push(this.p,t),this.p=null}}},e}();(function(e){this.G=tr,this.I=e7,this.Z=ta,this.ondata=e}).prototype.push=function(e,t){to.prototype.push.call(this,e,t)};var ts="u">typeof TextEncoder&&new TextEncoder,tl="u">typeof TextDecoder&&new TextDecoder,tc=0;try{tl.decode(ew,{stream:!0}),tc=1}catch(e){}var tu=function(e){for(var t="",r=0;;){var n=e[r++],a=(n>127)+(n>223)+(n>239);if(r+a>e.length)return[t,eg(e,r-1)];a?3==a?t+=String.fromCharCode(55296|(n=((15&n)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++])-65536)>>10,56320|1023&n):1&a?t+=String.fromCharCode((31&n)<<6|63&e[r++]):t+=String.fromCharCode((15&n)<<12|(63&e[r++])<<6|63&e[r++]):t+=String.fromCharCode(n)}};function th(e,t){if(t){for(var r=new Q(e.length),n=0;n<e.length;++n)r[n]=e.charCodeAt(n);return r}if(ts)return ts.encode(e);for(var a=e.length,i=new Q(e.length+(e.length>>1)),o=0,s=function(e){i[o++]=e},n=0;n<a;++n){if(o+5>i.length){var l=new Q(o+8+(a-n<<1));l.set(i),i=l}var c=e.charCodeAt(n);c<128||t?s(c):(c<2048?s(192|c>>6):(c>55295&&c<57344?(s(240|(c=65536+(1047552&c)|1023&e.charCodeAt(++n))>>18),s(128|c>>12&63)):s(224|c>>12),s(128|c>>6&63)),s(128|63&c))}return eg(i,0,o)}(function(e){this.ondata=e,tc?this.t=new TextDecoder:this.p=ew}).prototype.push=function(e,t){if(!this.ondata)throw"no callback";if(t=!!t,this.t){if(this.ondata(this.t.decode(e,{stream:!0}),t),t){if(this.t.decode().length)throw"invalid utf-8 data";this.t=null}return}if(!this.p)throw"stream finished";var r=new Q(this.p.length+e.length);r.set(this.p),r.set(e,this.p.length);var n=tu(r),a=n[0],i=n[1];if(t){if(i.length)throw"invalid utf-8 data";this.p=null}else this.p=i;this.ondata(a,t)},(function(e){this.ondata=e}).prototype.push=function(e,t){if(!this.ondata)throw"no callback";if(this.d)throw"stream finished";this.ondata(th(e),this.d=t||!1)};var td=function(e){return 1==e?3:e<6?2:+(9==e)},tA=function(e,t,r){for(var n=t+r;1!=eW(e,t);t+=4+eW(e,t+2))if(t+4>n)throw"invalid zip file";return[eZ(e,t+12),eZ(e,t+4),eZ(e,t+20)]},tf=function(e){var t=0;if(e)for(var r in e){var n=e[r].length;if(n>65535)throw"extra field too long";t+=n+4}return t},tp=function(e,t,r,n,a,i,o,s){var l=n.length,c=r.extra,u=s&&s.length,h=tf(c);ez(e,t,null!=o?0x2014b50:0x4034b50),t+=4,null!=o&&(e[t++]=20,e[t++]=r.os),e[t]=20,t+=2,e[t++]=r.flag<<1|(null==i&&8),e[t++]=a&&8,e[t++]=255&r.compression,e[t++]=r.compression>>8;var d=new Date(null==r.mtime?Date.now():r.mtime),A=d.getFullYear()-1980;if(A<0||A>119)throw"date not in range 1980-2099";if(ez(e,t,A<<25|d.getMonth()+1<<21|d.getDate()<<16|d.getHours()<<11|d.getMinutes()<<5|d.getSeconds()>>>1),t+=4,null!=i&&(ez(e,t,r.crc),ez(e,t+4,i),ez(e,t+8,r.size)),ez(e,t+12,l),ez(e,t+14,h),t+=16,null!=o&&(ez(e,t,u),ez(e,t+6,r.attrs),ez(e,t+10,o),t+=14),e.set(n,t),t+=l,h)for(var f in c){var p=c[f],m=p.length;ez(e,t,+f),ez(e,t+2,m),e.set(p,t+4),t+=4+m}return u&&(e.set(s,t),t+=u),t},tm=function(e,t,r,n,a){ez(e,t,0x6054b50),ez(e,t+8,r),ez(e,t+10,r),ez(e,t+12,n),ez(e,t+16,a)},tB=function(){function e(e){this.filename=e,this.c=eD(),this.size=0,this.compression=0}return e.prototype.process=function(e,t){this.ondata(null,e,t)},e.prototype.push=function(e,t){if(!this.ondata)throw"no callback - add to ZIP archive before pushing";this.c.p(e),this.size+=e.length,t&&(this.crc=this.c.d()),this.process(e,t||!1)},e}();function tg(e,t){var r=this;t||(t={}),tB.call(this,e),this.d=new e8(t,function(e,t){r.ondata(null,e,t)}),this.compression=8,this.flag=td(t.level)}function tC(e,t){var r=this;t||(t={}),tB.call(this,e),this.d=new e6(t,function(e,t,n){r.ondata(e,t,n)}),this.compression=8,this.flag=td(t.level),this.terminate=this.d.terminate}function tM(e){this.ondata=e,this.u=[],this.d=1}tg.prototype.process=function(e,t){try{this.d.push(e,t)}catch(e){this.ondata(e,null,t)}},tg.prototype.push=function(e,t){tB.prototype.push.call(this,e,t)},tC.prototype.process=function(e,t){this.d.push(e,t)},tC.prototype.push=function(e,t){tB.prototype.push.call(this,e,t)},tM.prototype.add=function(e){var t=this;if(2&this.d)throw"stream finished";var r=th(e.filename),n=r.length,a=e.comment,i=a&&th(a),o=n!=e.filename.length||i&&a.length!=i.length,s=n+tf(e.extra)+30;if(n>65535)throw"filename too long";var l=new Q(s);tp(l,0,e,r,o);var c=[l],u=function(){for(var e=0,r=c;e<r.length;e++){var n=r[e];t.ondata(null,n,!1)}c=[]},h=this.d;this.d=0;var d=this.u.length,A=eS(e,{f:r,u:o,o:i,t:function(){e.terminate&&e.terminate()},r:function(){if(u(),h){var e=t.u[d+1];e?e.r():t.d=1}h=1}}),f=0;e.ondata=function(r,n,a){if(r)t.ondata(r,n,a),t.terminate();else if(f+=n.length,c.push(n),a){var i=new Q(16);ez(i,0,0x8074b50),ez(i,4,e.crc),ez(i,8,f),ez(i,12,e.size),c.push(i),A.c=f,A.b=s+f+16,A.crc=e.crc,A.size=e.size,h&&A.r(),h=1}else h&&u()},this.u.push(A)},tM.prototype.end=function(){var e=this;if(2&this.d){if(1&this.d)throw"stream finishing";throw"stream finished"}this.d?this.e():this.u.push({r:function(){1&e.d&&(e.u.splice(-1,1),e.e())},t:function(){}}),this.d=3},tM.prototype.e=function(){for(var e=0,t=0,r=0,n=0,a=this.u;n<a.length;n++){var i=a[n];r+=46+i.f.length+tf(i.extra)+(i.o?i.o.length:0)}for(var o=new Q(r+22),s=0,l=this.u;s<l.length;s++){var i=l[s];tp(o,e,i,i.f,i.u,i.c,t,i.o),e+=46+i.f.length+tf(i.extra)+(i.o?i.o.length:0),t+=i.b}tm(o,e,this.u.length,r,t),this.ondata(null,o,!0),this.d=2},tM.prototype.terminate=function(){for(var e=0,t=this.u;e<t.length;e++)t[e].t();this.d=2};var tv=function(){function e(){}return e.prototype.push=function(e,t){this.ondata(null,e,t)},e.compression=0,e}();function ty(){var e=this;this.i=new e4(function(t,r){e.ondata(null,t,r)})}function tE(e,t){var r=this;t<32e4?this.i=new e4(function(e,t){r.ondata(null,e,t)}):(this.i=new e7(function(e,t,n){r.ondata(e,t,n)}),this.terminate=this.i.terminate)}function tb(e){this.onfile=e,this.k=[],this.o={0:tv},this.p=ew}ty.prototype.push=function(e,t){try{this.i.push(e,t)}catch(r){this.ondata(r,e,t)}},ty.compression=8,tE.prototype.push=function(e,t){this.i.terminate&&(e=eg(e,0)),this.i.push(e,t)},tE.compression=8,tb.prototype.push=function(e,t){var r=this;if(!this.onfile)throw"no callback";if(!this.p)throw"stream finished";if(this.c>0){var n=Math.min(this.c,e.length),a=e.subarray(0,n);if(this.c-=n,this.d?this.d.push(a,!this.c):this.k[0].push(a),(e=e.subarray(n)).length)return this.push(e,t)}else{var i=0,o=0,s=void 0,l=void 0;this.p.length?e.length?((l=new Q(this.p.length+e.length)).set(this.p),l.set(e,this.p.length)):l=this.p:l=e;for(var c=l.length,u=this.c,h=u&&this.d,d=this;o<c-4&&"break"!==function(){var e=eV(l,o);if(0x4034b50==e){i=1,s=o,d.d=null,d.c=0;var t=eW(l,o+6),n=eW(l,o+8),a=8&t,h=eW(l,o+26),A=eW(l,o+28);if(c>o+30+h+A){var f,p,m=[];d.k.unshift(m),i=2;var B=eV(l,o+18),g=eV(l,o+22),C=function(e,t){if(t){for(var r="",n=0;n<e.length;n+=16384)r+=String.fromCharCode.apply(null,e.subarray(n,n+16384));return r}if(tl)return tl.decode(e);var a=tu(e),i=a[0];if(a[1].length)throw"invalid utf-8 data";return i}(l.subarray(o+30,o+=30+h),!(2048&t));0xffffffff==B?(B=(f=a?[-2]:tA(l,o,A))[0],g=f[1]):a&&(B=-1),o+=A,d.c=B;var M={name:C,compression:n,start:function(){if(!M.ondata)throw"no callback";if(B){var e=r.o[n];if(!e)throw"unknown compression type "+n;(p=B<0?new e(C):new e(C,B,g)).ondata=function(e,t,r){M.ondata(e,t,r)};for(var t=0;t<m.length;t++){var a=m[t];p.push(a,!1)}r.k[0]==m&&r.c?r.d=p:p.push(ew,!0)}else M.ondata(null,ew,!0)},terminate:function(){p&&p.terminate&&p.terminate()}};B>=0&&(M.size=B,M.originalSize=g),d.onfile(M)}return"break"}if(u){if(0x8074b50==e)return s=o+=12+(-2==u&&8),i=3,d.c=0,"break";else if(0x2014b50==e)return s=o-=4,i=3,d.c=0,"break"}}();++o);if(this.p=ew,u<0){var A=i?l.subarray(0,s-12-(-2==u&&8)-(0x8074b50==eV(l,s-16)&&4)):l.subarray(0,o);h?h.push(A,!!i):this.k[+(2==i)].push(A)}if(2&i)return this.push(l.subarray(o),t);this.p=l.subarray(o)}if(t){if(this.c)throw"invalid zip file";this.p=null}},tb.prototype.register=function(e){this.o[e.compression]=e};let tF=O>=152;class tI extends K.DataTextureLoader{constructor(e){super(e),this.type=K.HalfFloatType}parse(e){let t={l:0,c:0,lc:0};function r(e,r,n,a,i){for(;n<e;)r=r<<8|F(a,i),n+=8;t.l=r>>(n-=e)&(1<<e)-1,t.c=r,t.lc=n}let n=Array(59),a={c:0,lc:0};function i(e,t,r,n){e=e<<8|F(r,n),t+=8,a.c=e,a.lc=t}let o={c:0,lc:0};function s(e,t,r,n,s,l,c,u,h,d){if(e==t){n<8&&(i(r,n,s,c),r=a.c,n=a.lc);var A=r>>(n-=8),A=new Uint8Array([A])[0];if(h.value+A>d)return!1;for(var f=u[h.value-1];A-- >0;)u[h.value++]=f}else{if(!(h.value<d))return!1;u[h.value++]=e}o.c=r,o.lc=n}function l(e){var t=65535&e;return t>32767?t-65536:t}let c={a:0,b:0};function u(e,t){var r=l(e),n=l(t),a=r+(1&n)+(n>>1),i=a-n;c.a=a,c.b=i}function h(e,t){var r=65535&t,n=(65535&e)-(r>>1)&65535;c.a=r+n-32768&65535,c.b=n}function d(e,l,c,u,h,d){var A=c.value,f=b(l,c),p=b(l,c);c.value+=4;var m=b(l,c);if(c.value+=4,f<0||f>=65537||p<0||p>=65537)throw"Something wrong with HUF_ENCSIZE";for(var B=Array(65537),g=Array(16384),C=0;C<16384;C++)g[C]={},g[C].len=0,g[C].lit=0,g[C].p=null;var M=u-(c.value-A);if(!function(e,a,i,o,s,l){for(var c=0,u=0;o<=s;o++){if(a.value-a.value>i)return!1;r(6,c,u,e,a);var h=t.l;if(c=t.c,u=t.lc,l[o]=h,63==h){if(a.value-a.value>i)throw"Something wrong with hufUnpackEncTable";r(8,c,u,e,a);var d=t.l+6;if(c=t.c,u=t.lc,o+d>s+1)throw"Something wrong with hufUnpackEncTable";for(;d--;)l[o++]=0;o--}else if(h>=59){var d=h-59+2;if(o+d>s+1)throw"Something wrong with hufUnpackEncTable";for(;d--;)l[o++]=0;o--}}!function(e){for(var t=0;t<=58;++t)n[t]=0;for(var t=0;t<65537;++t)n[e[t]]+=1;for(var r=0,t=58;t>0;--t){var a=r+n[t]>>1;n[t]=r,r=a}for(var t=0;t<65537;++t){var i=e[t];i>0&&(e[t]=i|n[i]++<<6)}}(l)}(e,c,M,f,p,B),m>8*(u-(c.value-A)))throw"Something wrong with hufUncompress";!function(e,t,r,n){for(;t<=r;t++){var a=e[t]>>6,i=63&e[t];if(a>>i)throw"Invalid table entry";if(i>14){var o=n[a>>i-14];if(o.len)throw"Invalid table entry";if(o.lit++,o.p){var s=o.p;o.p=Array(o.lit);for(var l=0;l<o.lit-1;++l)o.p[l]=s[l]}else o.p=[,];o.p[o.lit-1]=t}else if(i)for(var c=0,l=1<<14-i;l>0;l--){var o=n[(a<<14-i)+c];if(o.len||o.p)throw"Invalid table entry";o.len=i,o.lit=t,c++}}}(B,f,p,g),function(e,t,r,n,l,c,u,h,d,A){for(var f=0,p=0,m=Math.trunc(l.value+(c+7)/8);l.value<m;)for(i(f,p,r,l),f=a.c,p=a.lc;p>=14;){var B=t[f>>p-14&16383];if(B.len)p-=B.len,s(B.lit,u,f,p,r,n,l,d,A,h),f=o.c,p=o.lc;else{if(!B.p)throw"hufDecode issues";for(g=0;g<B.lit;g++){for(var g,C=63&e[B.p[g]];p<C&&l.value<m;)i(f,p,r,l),f=a.c,p=a.lc;if(p>=C&&e[B.p[g]]>>6==(f>>p-C&(1<<C)-1)){p-=C,s(B.p[g],u,f,p,r,n,l,d,A,h),f=o.c,p=o.lc;break}}if(g==B.lit)throw"hufDecode issues"}}var M=8-c&7;for(f>>=M,p-=M;p>0;){var B=t[f<<14-p&16383];if(B.len)p-=B.len,s(B.lit,u,f,p,r,n,l,d,A,h),f=o.c,p=o.lc;else throw"hufDecode issues"}}(B,g,e,l,c,m,p,d,h,{value:0})}function A(e){for(var t=1;t<e.length;t++){var r=e[t-1]+e[t]-128;e[t]=r}}function f(e,t){for(var r=0,n=Math.floor((e.length+1)/2),a=0,i=e.length-1;!(a>i)&&(t[a++]=e[r++],!(a>i));){;t[a++]=e[n++]}}function p(e){for(var t=e.byteLength,r=[],n=0,a=new DataView(e);t>0;){var i=a.getInt8(n++);if(i<0){var o=-i;t-=o+1;for(var s=0;s<o;s++)r.push(a.getUint8(n++))}else{var o=i;t-=2;for(var l=a.getUint8(n++),s=0;s<o+1;s++)r.push(l)}}return r}function m(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function B(e){var t=new Uint8Array(p(e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size))),r=new Uint8Array(t.length);return A(t),f(t,r),new DataView(r.buffer)}function g(e){var t=ti(e.array.slice(e.offset.value,e.offset.value+e.size)),r=new Uint8Array(t.length);return A(t),f(t,r),new DataView(r.buffer)}function C(e){for(var t=e.viewer,r={value:e.offset.value},n=new Uint16Array(e.width*e.scanlineBlockSize*(e.channels*e.type)),a=new Uint8Array(8192),i=0,o=Array(e.channels),s=0;s<e.channels;s++)o[s]={},o[s].start=i,o[s].end=o[s].start,o[s].nx=e.width,o[s].ny=e.lines,o[s].size=e.type,i+=o[s].nx*o[s].ny*o[s].size;var l=G(t,r),A=G(t,r);if(A>=8192)throw"Something is wrong with PIZ_COMPRESSION BITMAP_SIZE";if(l<=A)for(var s=0;s<A-l+1;s++)a[s+l]=I(t,r);var f=new Uint16Array(65536),p=function(e,t){for(var r=0,n=0;n<65536;++n)(0==n||e[n>>3]&1<<(7&n))&&(t[r++]=n);for(var a=r-1;r<65536;)t[r++]=0;return a}(a,f),m=b(t,r);d(e.array,t,r,m,n,i);for(var s=0;s<e.channels;++s)for(var B=o[s],g=0;g<o[s].size;++g)!function(e,t,r,n,a,i,o){for(var s=o<16384,l=r>a?a:r,d=1;d<=l;)d<<=1;for(d>>=1,A=d,d>>=1;d>=1;){for(var A,f,p,m,B,g=0,C=0+i*(a-A),M=i*d,v=i*A,y=n*d,E=n*A;g<=C;g+=v){for(var b=g,F=g+n*(r-A);b<=F;b+=E){var I=b+y,R=b+M,T=R+y;s?(u(e[b+t],e[R+t]),f=c.a,m=c.b,u(e[I+t],e[T+t]),p=c.a,B=c.b,u(f,p),e[b+t]=c.a,e[I+t]=c.b,u(m,B)):(h(e[b+t],e[R+t]),f=c.a,m=c.b,h(e[I+t],e[T+t]),p=c.a,B=c.b,h(f,p),e[b+t]=c.a,e[I+t]=c.b,h(m,B)),e[R+t]=c.a,e[T+t]=c.b}if(r&d){var R=b+M;s?u(e[b+t],e[R+t]):h(e[b+t],e[R+t]),f=c.a,e[R+t]=c.b,e[b+t]=f}}if(a&d)for(var b=g,F=g+n*(r-A);b<=F;b+=E){var I=b+y;s?u(e[b+t],e[I+t]):h(e[b+t],e[I+t]),f=c.a,e[I+t]=c.b,e[b+t]=f}A=d,d>>=1}}(n,B.start+g,B.nx,B.size,B.ny,B.nx*B.size,p);for(var C=i,M=0;M<C;++M)n[M]=f[n[M]];for(var v=0,y=new Uint8Array(n.buffer.byteLength),E=0;E<e.lines;E++)for(var F=0;F<e.channels;F++){var B=o[F],R=B.nx*B.size,T=new Uint8Array(n.buffer,2*B.end,2*R);y.set(T,v),v+=2*R,B.end+=R}return new DataView(y.buffer)}function M(e){var t=ti(e.array.slice(e.offset.value,e.offset.value+e.size));let r=e.lines*e.channels*e.width,n=1==e.type?new Uint16Array(r):new Uint32Array(r),a=0,i=0,o=[,,,,];for(let r=0;r<e.lines;r++)for(let r=0;r<e.channels;r++){let r=0;switch(e.type){case 1:o[0]=a,o[1]=o[0]+e.width,a=o[1]+e.width;for(let a=0;a<e.width;++a)r+=t[o[0]++]<<8|t[o[1]++],n[i]=r,i++;break;case 2:o[0]=a,o[1]=o[0]+e.width,o[2]=o[1]+e.width,a=o[2]+e.width;for(let a=0;a<e.width;++a)r+=t[o[0]++]<<24|t[o[1]++]<<16|t[o[2]++]<<8,n[i]=r,i++}}return new DataView(n.buffer)}function v(e){var t=e.viewer,r={value:e.offset.value},n=new Uint8Array(e.width*e.lines*(e.channels*e.type*2)),a={version:R(t,r),unknownUncompressedSize:R(t,r),unknownCompressedSize:R(t,r),acCompressedSize:R(t,r),dcCompressedSize:R(t,r),rleCompressedSize:R(t,r),rleUncompressedSize:R(t,r),rleRawSize:R(t,r),totalAcUncompressedCount:R(t,r),totalDcUncompressedCount:R(t,r),acCompression:R(t,r)};if(a.version<2)throw"EXRLoader.parse: "+L.compression+" version "+a.version+" is unsupported";for(var i=[],o=G(t,r)-2;o>0;){var s=y(t.buffer,r),l=I(t,r),c=l>>2&3,u=new Int8Array([(l>>4)-1])[0],h=I(t,r);i.push({name:s,index:u,type:h,compression:c}),o-=s.length+3}for(var A=L.channels,f=Array(e.channels),m=0;m<e.channels;++m){var B=f[m]={},C=A[m];B.name=C.name,B.compression=0,B.decoded=!1,B.type=C.pixelType,B.pLinear=C.pLinear,B.width=e.width,B.height=e.lines}for(var M={idx:[,,,]},v=0;v<e.channels;++v)for(var B=f[v],m=0;m<i.length;++m){var E=i[m];B.name==E.name&&(B.compression=E.compression,E.index>=0&&(M.idx[E.index]=v),B.offset=v)}if(a.acCompressedSize>0)switch(a.acCompression){case 0:var b=new Uint16Array(a.totalAcUncompressedCount);d(e.array,t,r,a.acCompressedSize,b,a.totalAcUncompressedCount);break;case 1:var F=e.array.slice(r.value,r.value+a.totalAcUncompressedCount),T=ti(F),b=new Uint16Array(T.buffer);r.value+=a.totalAcUncompressedCount}if(a.dcCompressedSize>0){var w=new Uint16Array(g({array:e.array,offset:r,size:a.dcCompressedSize}).buffer);r.value+=a.dcCompressedSize}if(a.rleRawSize>0){var F=e.array.slice(r.value,r.value+a.rleCompressedSize),T=ti(F),D=p(T.buffer);r.value+=a.rleCompressedSize}for(var H=0,P=Array(f.length),m=0;m<P.length;++m)P[m]=[];for(var S=0;S<e.lines;++S)for(var O=0;O<f.length;++O)P[O].push(H),H+=f[O].width*e.type*2;!function(e,t,r,n,a,i){var o=new DataView(i.buffer),s=r[e.idx[0]].width,l=r[e.idx[0]].height,c=Math.floor(s/8),u=Math.ceil(s/8),h=Math.ceil(l/8),d=s-(u-1)*8,A=l-(h-1)*8,f={value:0},p=[,,,],m=[,,,],B=[,,,],g=[,,,],C=[,,,];for(let r=0;r<3;++r)C[r]=t[e.idx[r]],p[r]=r<1?0:p[r-1]+u*h,m[r]=new Float32Array(64),B[r]=new Uint16Array(64),g[r]=new Uint16Array(64*u);for(let t=0;t<h;++t){var M,v,y=8;t==h-1&&(y=A);var E=8;for(let e=0;e<u;++e){e==u-1&&(E=d);for(let e=0;e<3;++e){B[e].fill(0),B[e][0]=a[p[e]++],function(e,t,r){for(var n,a=1;a<64;)65280==(n=t[e.value])?a=64:n>>8==255?a+=255&n:(r[a]=n,a++),e.value++}(f,n,B[e]),M=B[e],(v=m[e])[0]=x(M[0]),v[1]=x(M[1]),v[2]=x(M[5]),v[3]=x(M[6]),v[4]=x(M[14]),v[5]=x(M[15]),v[6]=x(M[27]),v[7]=x(M[28]),v[8]=x(M[2]),v[9]=x(M[4]),v[10]=x(M[7]),v[11]=x(M[13]),v[12]=x(M[16]),v[13]=x(M[26]),v[14]=x(M[29]),v[15]=x(M[42]),v[16]=x(M[3]),v[17]=x(M[8]),v[18]=x(M[12]),v[19]=x(M[17]),v[20]=x(M[25]),v[21]=x(M[30]),v[22]=x(M[41]),v[23]=x(M[43]),v[24]=x(M[9]),v[25]=x(M[11]),v[26]=x(M[18]),v[27]=x(M[24]),v[28]=x(M[31]),v[29]=x(M[40]),v[30]=x(M[44]),v[31]=x(M[53]),v[32]=x(M[10]),v[33]=x(M[19]),v[34]=x(M[23]),v[35]=x(M[32]),v[36]=x(M[39]),v[37]=x(M[45]),v[38]=x(M[52]),v[39]=x(M[54]),v[40]=x(M[20]),v[41]=x(M[22]),v[42]=x(M[33]),v[43]=x(M[38]),v[44]=x(M[46]),v[45]=x(M[51]),v[46]=x(M[55]),v[47]=x(M[60]),v[48]=x(M[21]),v[49]=x(M[34]),v[50]=x(M[37]),v[51]=x(M[47]),v[52]=x(M[50]),v[53]=x(M[56]),v[54]=x(M[59]),v[55]=x(M[61]),v[56]=x(M[35]),v[57]=x(M[36]),v[58]=x(M[48]),v[59]=x(M[49]),v[60]=x(M[57]),v[61]=x(M[58]),v[62]=x(M[62]),v[63]=x(M[63]),function(e){let t=.5*Math.cos(3.14159/16),r=.5*Math.cos(3.14159/8),n=.5*Math.cos(3*3.14159/16),a=.5*Math.cos(3*3.14159/8);for(var i=[,,,,],o=[,,,,],s=[,,,,],l=[,,,,],c=0;c<8;++c){var u=8*c;i[0]=r*e[u+2],i[1]=a*e[u+2],i[2]=r*e[u+6],i[3]=a*e[u+6],o[0]=t*e[u+1]+n*e[u+3]+.2777854612564676*e[u+5]+.09754573032714427*e[u+7],o[1]=n*e[u+1]-.09754573032714427*e[u+3]-t*e[u+5]-.2777854612564676*e[u+7],o[2]=.2777854612564676*e[u+1]-t*e[u+3]+.09754573032714427*e[u+5]+n*e[u+7],o[3]=.09754573032714427*e[u+1]-.2777854612564676*e[u+3]+n*e[u+5]-t*e[u+7],s[0]=.35355362513961314*(e[u+0]+e[u+4]),s[3]=.35355362513961314*(e[u+0]-e[u+4]),s[1]=i[0]+i[3],s[2]=i[1]-i[2],l[0]=s[0]+s[1],l[1]=s[3]+s[2],l[2]=s[3]-s[2],l[3]=s[0]-s[1],e[u+0]=l[0]+o[0],e[u+1]=l[1]+o[1],e[u+2]=l[2]+o[2],e[u+3]=l[3]+o[3],e[u+4]=l[3]-o[3],e[u+5]=l[2]-o[2],e[u+6]=l[1]-o[1],e[u+7]=l[0]-o[0]}for(var h=0;h<8;++h)i[0]=r*e[16+h],i[1]=a*e[16+h],i[2]=r*e[48+h],i[3]=a*e[48+h],o[0]=t*e[8+h]+n*e[24+h]+.2777854612564676*e[40+h]+.09754573032714427*e[56+h],o[1]=n*e[8+h]-.09754573032714427*e[24+h]-t*e[40+h]-.2777854612564676*e[56+h],o[2]=.2777854612564676*e[8+h]-t*e[24+h]+.09754573032714427*e[40+h]+n*e[56+h],o[3]=.09754573032714427*e[8+h]-.2777854612564676*e[24+h]+n*e[40+h]-t*e[56+h],s[0]=.35355362513961314*(e[h]+e[32+h]),s[3]=.35355362513961314*(e[h]-e[32+h]),s[1]=i[0]+i[3],s[2]=i[1]-i[2],l[0]=s[0]+s[1],l[1]=s[3]+s[2],l[2]=s[3]-s[2],l[3]=s[0]-s[1],e[0+h]=l[0]+o[0],e[8+h]=l[1]+o[1],e[16+h]=l[2]+o[2],e[24+h]=l[3]+o[3],e[32+h]=l[3]-o[3],e[40+h]=l[2]-o[2],e[48+h]=l[1]-o[1],e[56+h]=l[0]-o[0]}(m[e])}for(var b=m,F=0;F<64;++F){var I=b[0][F],R=b[1][F],T=b[2][F];b[0][F]=I+1.5747*T,b[1][F]=I-.1873*R-.4682*T,b[2][F]=I+1.8556*R}for(let t=0;t<3;++t)!function(e,t,r){for(var n,a=0;a<64;++a){t[r+a]=K.DataUtils.toHalfFloat((n=e[a])<=1?Math.sign(n)*Math.pow(Math.abs(n),2.2):Math.sign(n)*Math.pow(9.025013291561939,Math.abs(n)-1))}}(m[t],g[t],64*e)}let i=0;for(let n=0;n<3;++n){let a=r[e.idx[n]].type;for(let e=8*t;e<8*t+y;++e){i=C[n][e];for(let t=0;t<c;++t){let r=64*t+(7&e)*8;o.setUint16(i+0*a,g[n][r+0],!0),o.setUint16(i+2*a,g[n][r+1],!0),o.setUint16(i+4*a,g[n][r+2],!0),o.setUint16(i+6*a,g[n][r+3],!0),o.setUint16(i+8*a,g[n][r+4],!0),o.setUint16(i+10*a,g[n][r+5],!0),o.setUint16(i+12*a,g[n][r+6],!0),o.setUint16(i+14*a,g[n][r+7],!0),i+=16*a}}if(c!=u)for(let e=8*t;e<8*t+y;++e){let t=C[n][e]+8*c*2*a,r=64*c+(7&e)*8;for(let e=0;e<E;++e)o.setUint16(t+2*e*a,g[n][r+e],!0)}}}for(var w=new Uint16Array(s),o=new DataView(i.buffer),G=0;G<3;++G){r[e.idx[G]].decoded=!0;var D=r[e.idx[G]].type;if(2==r[G].type)for(var H=0;H<l;++H){let e=C[G][H];for(var P=0;P<s;++P)w[P]=o.getUint16(e+2*P*D,!0);for(var P=0;P<s;++P)o.setFloat32(e+2*P*D,x(w[P]),!0)}}}(M,P,f,b,w,n);for(var m=0;m<f.length;++m){var B=f[m];if(!B.decoded)if(2===B.compression)for(var _=0,J=0,S=0;S<e.lines;++S){for(var U=P[m][_],k=0;k<B.width;++k){for(var N=0;N<2*B.type;++N)n[U++]=D[J+N*B.width*B.height];J++}_++}else throw"EXRLoader.parse: unsupported channel compression"}return new DataView(n.buffer)}function y(e,t){for(var r=new Uint8Array(e),n=0;0!=r[t.value+n];)n+=1;var a=new TextDecoder().decode(r.slice(t.value,t.value+n));return t.value=t.value+n+1,a}function E(e,t){var r=e.getInt32(t.value,!0);return t.value=t.value+4,r}function b(e,t){var r=e.getUint32(t.value,!0);return t.value=t.value+4,r}function F(e,t){var r=e[t.value];return t.value=t.value+1,r}function I(e,t){var r=e.getUint8(t.value);return t.value=t.value+1,r}let R=function(e,t){let r;return r="getBigInt64"in DataView.prototype?Number(e.getBigInt64(t.value,!0)):e.getUint32(t.value+4,!0)+Number(e.getUint32(t.value,!0)<<32),t.value+=8,r};function T(e,t){var r=e.getFloat32(t.value,!0);return t.value+=4,r}function w(e,t){return K.DataUtils.toHalfFloat(T(e,t))}function x(e){var t=(31744&e)>>10,r=1023&e;return(e>>15?-1:1)*(t?31===t?r?NaN:1/0:Math.pow(2,t-15)*(1+r/1024):r/1024*6103515625e-14)}function G(e,t){var r=e.getUint16(t.value,!0);return t.value+=2,r}function D(e,t){return x(G(e,t))}let H=new DataView(e),P=new Uint8Array(e),S={value:0},L=function(e,t,r){let n={};if(0x1312f76!=e.getUint32(0,!0))throw"THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format.";n.version=e.getUint8(4);let a=e.getUint8(5);n.spec={singleTile:!!(2&a),longName:!!(4&a),deepFormat:!!(8&a),multiPart:!!(16&a)},r.value=8;for(var i=!0;i;){var o=y(t,r);if(0==o)i=!1;else{var s=y(t,r),l=b(e,r),c=function(e,t,r,n,a){var i,o,s,l,c,u,h;if("string"===n||"stringvector"===n||"iccProfile"===n)return i=new TextDecoder().decode(new Uint8Array(t).slice(r.value,r.value+a)),r.value=r.value+a,i;if("chlist"===n)return function(e,t,r,n){for(var a=r.value,i=[];r.value<a+n-1;){var o=y(t,r),s=E(e,r),l=I(e,r);r.value+=3;var c=E(e,r),u=E(e,r);i.push({name:o,pixelType:s,pLinear:l,xSampling:c,ySampling:u})}return r.value+=1,i}(e,t,r,a);if("chromaticities"===n)return o=T(e,r),s=T(e,r),l=T(e,r),c=T(e,r),u=T(e,r),{redX:o,redY:s,greenX:l,greenY:c,blueX:u,blueY:T(e,r),whiteX:T(e,r),whiteY:T(e,r)};if("compression"===n)return["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"][I(e,r)];if("box2i"===n)return h=b(e,r),{xMin:h,yMin:b(e,r),xMax:b(e,r),yMax:b(e,r)};else if("lineOrder"===n)return["INCREASING_Y"][I(e,r)];else if("float"===n)return T(e,r);else if("v2f"===n)return[T(e,r),T(e,r)];else if("v3f"===n)return[T(e,r),T(e,r),T(e,r)];else if("int"===n)return E(e,r);else if("rational"===n)return[E(e,r),b(e,r)];else if("timecode"===n)return[b(e,r),b(e,r)];else return"preview"===n?(r.value+=a,"skipped"):(r.value+=a,void 0)}(e,t,r,s,l);void 0===c?console.warn(`EXRLoader.parse: skipped unknown header attribute type '${s}'.`):n[o]=c}}if((-5&a)!=0)throw console.error("EXRHeader:",n),"THREE.EXRLoader: provided file is currently unsupported.";return n}(H,e,S),O=function(e,t,r,n,a){let i={size:0,viewer:t,array:r,offset:n,width:e.dataWindow.xMax-e.dataWindow.xMin+1,height:e.dataWindow.yMax-e.dataWindow.yMin+1,channels:e.channels.length,bytesPerLine:null,lines:null,inputSize:null,type:e.channels[0].pixelType,uncompress:null,getter:null,format:null,[tF?"colorSpace":"encoding"]:null};switch(e.compression){case"NO_COMPRESSION":i.lines=1,i.uncompress=m;break;case"RLE_COMPRESSION":i.lines=1,i.uncompress=B;break;case"ZIPS_COMPRESSION":i.lines=1,i.uncompress=g;break;case"ZIP_COMPRESSION":i.lines=16,i.uncompress=g;break;case"PIZ_COMPRESSION":i.lines=32,i.uncompress=C;break;case"PXR24_COMPRESSION":i.lines=16,i.uncompress=M;break;case"DWAA_COMPRESSION":i.lines=32,i.uncompress=v;break;case"DWAB_COMPRESSION":i.lines=256,i.uncompress=v;break;default:throw"EXRLoader.parse: "+e.compression+" is unsupported"}if(i.scanlineBlockSize=i.lines,1==i.type)switch(a){case K.FloatType:i.getter=D,i.inputSize=2;break;case K.HalfFloatType:i.getter=G,i.inputSize=2}else if(2==i.type)switch(a){case K.FloatType:i.getter=T,i.inputSize=4;break;case K.HalfFloatType:i.getter=w,i.inputSize=4}else throw"EXRLoader.parse: unsupported pixelType "+i.type+" for "+e.compression+".";i.blockCount=(e.dataWindow.yMax+1)/i.scanlineBlockSize;for(var o=0;o<i.blockCount;o++)R(t,n);i.outputChannels=3==i.channels?4:i.channels;let s=i.width*i.height*i.outputChannels;switch(a){case K.FloatType:i.byteArray=new Float32Array(s),i.channels<i.outputChannels&&i.byteArray.fill(1,0,s);break;case K.HalfFloatType:i.byteArray=new Uint16Array(s),i.channels<i.outputChannels&&i.byteArray.fill(15360,0,s);break;default:console.error("THREE.EXRLoader: unsupported type: ",a)}return i.bytesPerLine=i.width*i.inputSize*i.channels,4==i.outputChannels?i.format=K.RGBAFormat:i.format=K.RedFormat,tF?i.colorSpace="srgb-linear":i.encoding=3e3,i}(L,H,P,S,this.type),_={value:0},J={R:0,G:1,B:2,A:3,Y:0};for(let e=0;e<O.height/O.scanlineBlockSize;e++){let t=b(H,S);O.size=b(H,S),O.lines=t+O.scanlineBlockSize>O.height?O.height-t:O.scanlineBlockSize;let r=O.size<O.lines*O.bytesPerLine?O.uncompress(O):m(O);S.value+=O.size;for(let t=0;t<O.scanlineBlockSize;t++){let n=t+e*O.scanlineBlockSize;if(n>=O.height)break;for(let e=0;e<O.channels;e++){let a=J[L.channels[e].name];for(let i=0;i<O.width;i++){_.value=(t*(O.channels*O.width)+e*O.width+i)*O.inputSize;let o=(O.height-1-n)*(O.width*O.outputChannels)+i*O.outputChannels+a;O.byteArray[o]=O.getter(r,_)}}}}return{header:L,width:O.width,height:O.height,data:O.byteArray,format:O.format,[tF?"colorSpace":"encoding"]:O[tF?"colorSpace":"encoding"],type:this.type}}setDataType(e){return this.type=e,this}load(e,t,r,n){return super.load(e,function(e,r){tF?e.colorSpace=r.colorSpace:e.encoding=r.encoding,e.minFilter=K.LinearFilter,e.magFilter=K.LinearFilter,e.generateMipmaps=!1,e.flipY=!1,t&&t(e,r)},r,n)}}let tR=(e,t,r)=>{let n;switch(e){case c.UnsignedByteType:n=new Uint8ClampedArray(t*r*4);break;case c.HalfFloatType:n=new Uint16Array(t*r*4);break;case c.UnsignedIntType:n=new Uint32Array(t*r*4);break;case c.ByteType:n=new Int8Array(t*r*4);break;case c.ShortType:n=new Int16Array(t*r*4);break;case c.IntType:n=new Int32Array(t*r*4);break;case c.FloatType:n=new Float32Array(t*r*4);break;default:throw Error("Unsupported data type")}return n};class tT{_renderer;_rendererIsDisposable=!1;_material;_scene;_camera;_quad;_renderTarget;_width;_height;_type;_colorSpace;_supportsReadPixels=!0;constructor(e){this._width=e.width,this._height=e.height,this._type=e.type,this._colorSpace=e.colorSpace;const r={format:c.RGBAFormat,depthBuffer:!1,stencilBuffer:!1,type:this._type,colorSpace:this._colorSpace,anisotropy:e.renderTargetOptions?.anisotropy!==void 0?e.renderTargetOptions?.anisotropy:1,generateMipmaps:e.renderTargetOptions?.generateMipmaps!==void 0&&e.renderTargetOptions?.generateMipmaps,magFilter:e.renderTargetOptions?.magFilter!==void 0?e.renderTargetOptions?.magFilter:c.LinearFilter,minFilter:e.renderTargetOptions?.minFilter!==void 0?e.renderTargetOptions?.minFilter:c.LinearFilter,samples:e.renderTargetOptions?.samples!==void 0?e.renderTargetOptions?.samples:void 0,wrapS:e.renderTargetOptions?.wrapS!==void 0?e.renderTargetOptions?.wrapS:c.ClampToEdgeWrapping,wrapT:e.renderTargetOptions?.wrapT!==void 0?e.renderTargetOptions?.wrapT:c.ClampToEdgeWrapping};if(this._material=e.material,e.renderer?this._renderer=e.renderer:(this._renderer=tT.instantiateRenderer(),this._rendererIsDisposable=!0),this._scene=new c.Scene,this._camera=new c.OrthographicCamera,this._camera.position.set(0,0,10),this._camera.left=-.5,this._camera.right=.5,this._camera.top=.5,this._camera.bottom=-.5,this._camera.updateProjectionMatrix(),!((e,r,n,a)=>{if(void 0!==t)return t;let i=new c.WebGLRenderTarget(1,1,a);r.setRenderTarget(i);let o=new c.Mesh(new c.PlaneGeometry,new c.MeshBasicMaterial({color:0xffffff}));r.render(o,n),r.setRenderTarget(null);let s=tR(e,i.width,i.height);return r.readRenderTargetPixels(i,0,0,i.width,i.height,s),i.dispose(),o.geometry.dispose(),o.material.dispose(),t=0!==s[0]})(this._type,this._renderer,this._camera,r)){let e;this._type===c.HalfFloatType&&(e=this._renderer.extensions.has("EXT_color_buffer_float")?c.FloatType:void 0),void 0!==e?(console.warn(`This browser does not support reading pixels from ${this._type} RenderTargets, switching to ${c.FloatType}`),this._type=e):(this._supportsReadPixels=!1,console.warn("This browser dos not support toArray or toDataTexture, calls to those methods will result in an error thrown"))}this._quad=new c.Mesh(new c.PlaneGeometry,this._material),this._quad.geometry.computeBoundingBox(),this._scene.add(this._quad),this._renderTarget=new c.WebGLRenderTarget(this.width,this.height,r),this._renderTarget.texture.mapping=e.renderTargetOptions?.mapping!==void 0?e.renderTargetOptions?.mapping:c.UVMapping}static instantiateRenderer(){let e=new S.WebGLRenderer;return e.setSize(128,128),e}render=()=>{this._renderer.setRenderTarget(this._renderTarget);try{this._renderer.render(this._scene,this._camera)}catch(e){throw this._renderer.setRenderTarget(null),e}this._renderer.setRenderTarget(null)};toArray(){if(!this._supportsReadPixels)throw Error("Can't read pixels in this browser");let e=tR(this._type,this._width,this._height);return this._renderer.readRenderTargetPixels(this._renderTarget,0,0,this._width,this._height,e),e}toDataTexture(e){let t=new c.DataTexture(this.toArray(),this.width,this.height,c.RGBAFormat,this._type,e?.mapping||c.UVMapping,e?.wrapS||c.ClampToEdgeWrapping,e?.wrapT||c.ClampToEdgeWrapping,e?.magFilter||c.LinearFilter,e?.minFilter||c.LinearFilter,e?.anisotropy||1,c.LinearSRGBColorSpace);return t.generateMipmaps=e?.generateMipmaps!==void 0&&e?.generateMipmaps,t}disposeOnDemandRenderer(){this._renderer.setRenderTarget(null),this._rendererIsDisposable&&(this._renderer.dispose(),this._renderer.forceContextLoss())}dispose(e){this.disposeOnDemandRenderer(),e&&this.renderTarget.dispose(),this.material instanceof c.ShaderMaterial&&Object.values(this.material.uniforms).forEach(e=>{e.value instanceof c.Texture&&e.value.dispose()}),Object.values(this.material).forEach(e=>{e instanceof c.Texture&&e.dispose()}),this.material.dispose(),this._quad.geometry.dispose()}get width(){return this._width}set width(e){this._width=e,this._renderTarget.setSize(this._width,this._height)}get height(){return this._height}set height(e){this._height=e,this._renderTarget.setSize(this._width,this._height)}get renderer(){return this._renderer}get renderTarget(){return this._renderTarget}set renderTarget(e){this._renderTarget=e,this._width=e.width,this._height=e.height}get material(){return this._material}get type(){return this._type}get colorSpace(){return this._colorSpace}}var tw=c;class tx extends Error{}class tG extends Error{}let tD=(e,t,r)=>{let n=RegExp(`${t}="([^"]*)"`,"i").exec(e);if(n)return n[1];let a=RegExp(`<${t}[^>]*>([\\s\\S]*?)</${t}>`,"i").exec(e);if(a){let e=a[1].match(/<rdf:li>([^<]*)<\/rdf:li>/g);return e&&3===e.length?e.map(e=>e.replace(/<\/?rdf:li>/g,"")):a[1].trim()}if(void 0!==r)return r;throw Error(`Can't find ${t} in gainmap metadata`)};class tH{options;constructor(e){this.options={debug:!!e&&void 0!==e.debug&&e.debug,extractFII:!e||void 0===e.extractFII||e.extractFII,extractNonFII:!e||void 0===e.extractNonFII||e.extractNonFII}}extract(e){return new Promise((t,r)=>{let n,a=this.options.debug,i=new DataView(e.buffer);if(65496!==i.getUint16(0))return void r(Error("Not a valid jpeg"));let o=i.byteLength,s=2,l=0;for(;s<o;){if(++l>250)return void r(Error(`Found no marker after ${l} loops 😵`));if(255!==i.getUint8(s))return void r(Error(`Not a valid marker at offset 0x${s.toString(16)}, found: 0x${i.getUint8(s).toString(16)}`));if(n=i.getUint8(s+1),a&&console.log(`Marker: ${n.toString(16)}`),226===n){a&&console.log("Found APP2 marker (0xffe2)");let e=s+4;if(0x4d504600===i.getUint32(e)){let n,a=e+4;if(18761===i.getUint16(a))n=!1;else{if(19789!==i.getUint16(a))return void r(Error("No valid endianness marker found in TIFF header"));n=!0}if(42!==i.getUint16(a+2,!n))return void r(Error("Not valid TIFF data! (no 0x002A marker)"));let o=i.getUint32(a+4,!n);if(o<8)return void r(Error("Not valid TIFF data! (First offset less than 8)"));let s=a+o,l=i.getUint16(s,!n),c=s+2,u=0;for(let e=c;e<c+12*l;e+=12)45057===i.getUint16(e,!n)&&(u=i.getUint32(e+8,!n));let h=s+2+12*l+4,d=[];for(let e=h;e<h+16*u;e+=16){let t={MPType:i.getUint32(e,!n),size:i.getUint32(e+4,!n),dataOffset:i.getUint32(e+8,!n),dependantImages:i.getUint32(e+12,!n),start:-1,end:-1,isFII:!1};t.dataOffset?(t.start=a+t.dataOffset,t.isFII=!1):(t.start=0,t.isFII=!0),t.end=t.start+t.size,d.push(t)}if(this.options.extractNonFII&&d.length){let e=new Blob([i]),r=[];for(let t of d){if(t.isFII&&!this.options.extractFII)continue;let n=e.slice(t.start,t.end+1,"image/jpeg");r.push(n)}t(r)}}}s+=2+i.getUint16(s+2)}})}}let tP=async e=>{let t=(e=>{let t,r=(t="u">typeof TextDecoder?new TextDecoder().decode(e):e.toString()).indexOf("<x:xmpmeta");for(;-1!==r;){let e=t.indexOf("x:xmpmeta>",r),n=t.slice(r,e+10);try{let e=tD(n,"hdrgm:GainMapMin","0"),t=tD(n,"hdrgm:GainMapMax"),r=tD(n,"hdrgm:Gamma","1"),a=tD(n,"hdrgm:OffsetSDR","0.015625"),i=tD(n,"hdrgm:OffsetHDR","0.015625"),o=/hdrgm:HDRCapacityMin="([^"]*)"/.exec(n),s=o?o[1]:"0",l=/hdrgm:HDRCapacityMax="([^"]*)"/.exec(n);if(!l)throw Error("Incomplete gainmap metadata");let c=l[1];return{gainMapMin:Array.isArray(e)?e.map(e=>parseFloat(e)):[parseFloat(e),parseFloat(e),parseFloat(e)],gainMapMax:Array.isArray(t)?t.map(e=>parseFloat(e)):[parseFloat(t),parseFloat(t),parseFloat(t)],gamma:Array.isArray(r)?r.map(e=>parseFloat(e)):[parseFloat(r),parseFloat(r),parseFloat(r)],offsetSdr:Array.isArray(a)?a.map(e=>parseFloat(e)):[parseFloat(a),parseFloat(a),parseFloat(a)],offsetHdr:Array.isArray(i)?i.map(e=>parseFloat(e)):[parseFloat(i),parseFloat(i),parseFloat(i)],hdrCapacityMin:parseFloat(s),hdrCapacityMax:parseFloat(c)}}catch(e){}r=t.indexOf("<x:xmpmeta",e)}})(e);if(!t)throw new tG("Gain map XMP metadata not found");let r=new tH({extractFII:!0,extractNonFII:!0}),n=await r.extract(e);if(2!==n.length)throw new tx("Gain map recovery image not found");return{sdr:new Uint8Array(await n[0].arrayBuffer()),gainMap:new Uint8Array(await n[1].arrayBuffer()),metadata:t}},tS=e=>new Promise((t,r)=>{let n=document.createElement("img");n.onload=()=>{t(n)},n.onerror=e=>{r(e)},n.src=URL.createObjectURL(e)});class tL extends tw.Loader{_renderer;_renderTargetOptions;_internalLoadingManager;_config;constructor(e,t){super(t),this._config=e,e.renderer&&(this._renderer=e.renderer),this._internalLoadingManager=new tw.LoadingManager}setRenderer(e){return this._renderer=e,this}setRenderTargetOptions(e){return this._renderTargetOptions=e,this}prepareQuadRenderer(){this._renderer||console.warn("WARNING: A Renderer was not passed to this Loader constructor or in setRenderer, the result of this Loader will need to be converted to a Data Texture with toDataTexture() before you can use it in your renderer.");let e=this._config.createMaterial({gainMapMax:[1,1,1],gainMapMin:[0,0,0],gamma:[1,1,1],offsetHdr:[1,1,1],offsetSdr:[1,1,1],hdrCapacityMax:1,hdrCapacityMin:0,maxDisplayBoost:1,gainMap:new tw.Texture,sdr:new tw.Texture});return this._config.createQuadRenderer({width:16,height:16,type:tw.HalfFloatType,colorSpace:tw.LinearSRGBColorSpace,material:e,renderer:this._renderer,renderTargetOptions:this._renderTargetOptions})}async processImages(e,t,r){let n,a,i=t?new Blob([t],{type:"image/jpeg"}):void 0,o=new Blob([e],{type:"image/jpeg"}),s=!1;if("u"<typeof createImageBitmap){let e=await Promise.all([i?tS(i):Promise.resolve(void 0),tS(o)]);a=e[0],n=e[1],s="flipY"===r}else{let e=await Promise.all([i?createImageBitmap(i,{imageOrientation:r||"flipY"}):Promise.resolve(void 0),createImageBitmap(o,{imageOrientation:r||"flipY"})]);a=e[0],n=e[1]}return{sdrImage:n,gainMapImage:a,needsFlip:s}}createTextures(e,t,r){let n=new tw.Texture(t||new ImageData(2,2),tw.UVMapping,tw.ClampToEdgeWrapping,tw.ClampToEdgeWrapping,tw.LinearFilter,tw.LinearMipMapLinearFilter,tw.RGBAFormat,tw.UnsignedByteType,1,tw.LinearSRGBColorSpace);n.flipY=r,n.needsUpdate=!0;let a=new tw.Texture(e,tw.UVMapping,tw.ClampToEdgeWrapping,tw.ClampToEdgeWrapping,tw.LinearFilter,tw.LinearMipMapLinearFilter,tw.RGBAFormat,tw.UnsignedByteType,1,tw.SRGBColorSpace);return a.flipY=r,a.needsUpdate=!0,{gainMap:n,sdr:a}}updateQuadRenderer(e,t,r,n,a){e.width=t.width,e.height=t.height,e.material.gainMap=r,e.material.sdr=n,e.material.gainMapMin=a.gainMapMin,e.material.gainMapMax=a.gainMapMax,e.material.offsetHdr=a.offsetHdr,e.material.offsetSdr=a.offsetSdr,e.material.gamma=a.gamma,e.material.hdrCapacityMin=a.hdrCapacityMin,e.material.hdrCapacityMax=a.hdrCapacityMax,e.material.maxDisplayBoost=Math.pow(2,a.hdrCapacityMax),e.material.needsUpdate=!0}}var tO=c;let t_=`
|
|
119
|
+
varying vec2 vUv;
|
|
120
|
+
|
|
121
|
+
void main() {
|
|
122
|
+
vUv = uv;
|
|
123
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
124
|
+
}
|
|
125
|
+
`,tJ=`
|
|
126
|
+
// min half float value
|
|
127
|
+
#define HALF_FLOAT_MIN vec3( -65504, -65504, -65504 )
|
|
128
|
+
// max half float value
|
|
129
|
+
#define HALF_FLOAT_MAX vec3( 65504, 65504, 65504 )
|
|
130
|
+
|
|
131
|
+
uniform sampler2D sdr;
|
|
132
|
+
uniform sampler2D gainMap;
|
|
133
|
+
uniform vec3 gamma;
|
|
134
|
+
uniform vec3 offsetHdr;
|
|
135
|
+
uniform vec3 offsetSdr;
|
|
136
|
+
uniform vec3 gainMapMin;
|
|
137
|
+
uniform vec3 gainMapMax;
|
|
138
|
+
uniform float weightFactor;
|
|
139
|
+
|
|
140
|
+
varying vec2 vUv;
|
|
141
|
+
|
|
142
|
+
void main() {
|
|
143
|
+
vec3 rgb = texture2D( sdr, vUv ).rgb;
|
|
144
|
+
vec3 recovery = texture2D( gainMap, vUv ).rgb;
|
|
145
|
+
vec3 logRecovery = pow( recovery, gamma );
|
|
146
|
+
vec3 logBoost = gainMapMin * ( 1.0 - logRecovery ) + gainMapMax * logRecovery;
|
|
147
|
+
vec3 hdrColor = (rgb + offsetSdr) * exp2( logBoost * weightFactor ) - offsetHdr;
|
|
148
|
+
vec3 clampedHdrColor = max( HALF_FLOAT_MIN, min( HALF_FLOAT_MAX, hdrColor ));
|
|
149
|
+
gl_FragColor = vec4( clampedHdrColor , 1.0 );
|
|
150
|
+
}
|
|
151
|
+
`;class tU extends tO.ShaderMaterial{_maxDisplayBoost;_hdrCapacityMin;_hdrCapacityMax;constructor({gamma:e,offsetHdr:t,offsetSdr:r,gainMapMin:n,gainMapMax:a,maxDisplayBoost:i,hdrCapacityMin:o,hdrCapacityMax:s,sdr:l,gainMap:c}){super({name:"GainMapDecoderMaterial",vertexShader:t_,fragmentShader:tJ,uniforms:{sdr:{value:l},gainMap:{value:c},gamma:{value:new tO.Vector3(1/e[0],1/e[1],1/e[2])},offsetHdr:{value:new tO.Vector3().fromArray(t)},offsetSdr:{value:new tO.Vector3().fromArray(r)},gainMapMin:{value:new tO.Vector3().fromArray(n)},gainMapMax:{value:new tO.Vector3().fromArray(a)},weightFactor:{value:(Math.log2(i)-o)/(s-o)}},blending:tO.NoBlending,depthTest:!1,depthWrite:!1}),this._maxDisplayBoost=i,this._hdrCapacityMin=o,this._hdrCapacityMax=s,this.needsUpdate=!0,this.uniformsNeedUpdate=!0}get sdr(){return this.uniforms.sdr.value}set sdr(e){this.uniforms.sdr.value=e}get gainMap(){return this.uniforms.gainMap.value}set gainMap(e){this.uniforms.gainMap.value=e}get offsetHdr(){return this.uniforms.offsetHdr.value.toArray()}set offsetHdr(e){this.uniforms.offsetHdr.value.fromArray(e)}get offsetSdr(){return this.uniforms.offsetSdr.value.toArray()}set offsetSdr(e){this.uniforms.offsetSdr.value.fromArray(e)}get gainMapMin(){return this.uniforms.gainMapMin.value.toArray()}set gainMapMin(e){this.uniforms.gainMapMin.value.fromArray(e)}get gainMapMax(){return this.uniforms.gainMapMax.value.toArray()}set gainMapMax(e){this.uniforms.gainMapMax.value.fromArray(e)}get gamma(){let e=this.uniforms.gamma.value;return[1/e.x,1/e.y,1/e.z]}set gamma(e){let t=this.uniforms.gamma.value;t.x=1/e[0],t.y=1/e[1],t.z=1/e[2]}get hdrCapacityMin(){return this._hdrCapacityMin}set hdrCapacityMin(e){this._hdrCapacityMin=e,this.calculateWeight()}get hdrCapacityMax(){return this._hdrCapacityMax}set hdrCapacityMax(e){this._hdrCapacityMax=e,this.calculateWeight()}get maxDisplayBoost(){return this._maxDisplayBoost}set maxDisplayBoost(e){this._maxDisplayBoost=Math.max(1,Math.min(65504,e)),this.calculateWeight()}calculateWeight(){let e=(Math.log2(this._maxDisplayBoost)-this._hdrCapacityMin)/(this._hdrCapacityMax-this._hdrCapacityMin);this.uniforms.weightFactor.value=Math.max(0,Math.min(1,e))}}S.WebGLRenderer;class tk extends tL{constructor(e,t){super({renderer:e,createMaterial:e=>new tU(e),createQuadRenderer:e=>new tT(e)},t)}async render(e,t,r,n){let{sdrImage:a,gainMapImage:i,needsFlip:o}=await this.processImages(r,n,"flipY"),{gainMap:s,sdr:l}=this.createTextures(a,i,o);this.updateQuadRenderer(e,a,s,l,t),e.render()}}class tK extends tk{load([e,t,r],n,a,i){let o,s,l,c=this.prepareQuadRenderer(),u=async()=>{if(o&&s&&l){try{await this.render(c,l,o,s)}catch(n){this.manager.itemError(e),this.manager.itemError(t),this.manager.itemError(r),"function"==typeof i&&i(n),c.disposeOnDemandRenderer();return}"function"==typeof n&&n(c),this.manager.itemEnd(e),this.manager.itemEnd(t),this.manager.itemEnd(r),c.disposeOnDemandRenderer()}},h=!0,d=0,A=0,f=!0,p=0,m=0,B=!0,g=0,C=0,M=()=>{"function"==typeof a&&a(new ProgressEvent("progress",{lengthComputable:h&&f&&B,loaded:A+m+C,total:d+p+g}))};this.manager.itemStart(e),this.manager.itemStart(t),this.manager.itemStart(r);let v=new tO.FileLoader(this._internalLoadingManager);v.setResponseType("arraybuffer"),v.setRequestHeader(this.requestHeader),v.setPath(this.path),v.setWithCredentials(this.withCredentials),v.load(e,async e=>{if("string"==typeof e)throw Error("Invalid sdr buffer");o=e,await u()},e=>{h=e.lengthComputable,A=e.loaded,d=e.total,M()},t=>{this.manager.itemError(e),"function"==typeof i&&i(t)});let y=new tO.FileLoader(this._internalLoadingManager);y.setResponseType("arraybuffer"),y.setRequestHeader(this.requestHeader),y.setPath(this.path),y.setWithCredentials(this.withCredentials),y.load(t,async e=>{if("string"==typeof e)throw Error("Invalid gainmap buffer");s=e,await u()},e=>{f=e.lengthComputable,m=e.loaded,p=e.total,M()},e=>{this.manager.itemError(t),"function"==typeof i&&i(e)});let E=new tO.FileLoader(this._internalLoadingManager);return E.setRequestHeader(this.requestHeader),E.setPath(this.path),E.setWithCredentials(this.withCredentials),E.load(r,async e=>{if("string"!=typeof e)throw Error("Invalid metadata string");l=JSON.parse(e),await u()},e=>{B=e.lengthComputable,C=e.loaded,g=e.total,M()},e=>{this.manager.itemError(r),"function"==typeof i&&i(e)}),c}}class tN extends tk{load(e,t,r,n){let a=this.prepareQuadRenderer(),i=new tO.FileLoader(this._internalLoadingManager);return i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setPath(this.path),i.setWithCredentials(this.withCredentials),this.manager.itemStart(e),i.load(e,async r=>{let i,o,s;if("string"==typeof r)throw Error("Invalid buffer, received [string], was expecting [ArrayBuffer]");let l=new Uint8Array(r);try{let e=await tP(l);i=e.sdr,o=e.gainMap,s=e.metadata}catch(t){if(t instanceof tG||t instanceof tx)console.warn(`Failure to reconstruct an HDR image from ${e}: Gain map metadata not found in the file, HDRJPGLoader will render the SDR jpeg`),s={gainMapMin:[0,0,0],gainMapMax:[1,1,1],gamma:[1,1,1],hdrCapacityMin:0,hdrCapacityMax:1,offsetHdr:[0,0,0],offsetSdr:[0,0,0]},i=l;else throw t}try{await this.render(a,s,i.buffer,o?.buffer)}catch(t){this.manager.itemError(e),"function"==typeof n&&n(t),a.disposeOnDemandRenderer();return}"function"==typeof t&&t(a),this.manager.itemEnd(e),a.disposeOnDemandRenderer()},r,t=>{this.manager.itemError(e),"function"==typeof n&&n(t)}),a}}let tj={apartment:"lebombo_1k.hdr",city:"potsdamer_platz_1k.hdr",dawn:"kiara_1_dawn_1k.hdr",forest:"forest_slope_1k.hdr",lobby:"st_fagans_interior_1k.hdr",night:"dikhololo_night_1k.hdr",park:"rooitou_park_1k.hdr",studio:"studio_small_03_1k.hdr",sunset:"venice_sunset_1k.hdr",warehouse:"empty_warehouse_01_1k.hdr"},tQ="https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/",tX=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"];function tY({files:e=tX,path:t="",preset:r,colorSpace:n,extensions:a}={}){r&&(tZ(r),e=tj[r],t=tQ);let i=Array.isArray(e),{extension:s,isCubemap:u}=tz(e),h=tq(s);if(!h)throw Error("useEnvironment: Unrecognized file extension: "+e);let d=(0,o.useThree)(e=>e.gl);(0,l.useLayoutEffect)(()=>{("webp"===s||"jpg"===s||"jpeg"===s)&&d.domElement.addEventListener("webglcontextlost",function(){J.G.clear(h,i?[e]:e)},{once:!0})},[e,d.domElement]);let A=(0,J.G)(h,i?[e]:e,e=>{("webp"===s||"jpg"===s||"jpeg"===s)&&e.setRenderer(d),null==e.setPath||e.setPath(t),a&&a(e)}),f=i?A[0]:A;if("jpg"===s||"jpeg"===s||"webp"===s){var p;f=null==(p=f.renderTarget)?void 0:p.texture}return f.mapping=u?c.CubeReflectionMapping:c.EquirectangularReflectionMapping,f.colorSpace=null!=n?n:u?"srgb":"srgb-linear",f}let tW={files:tX,path:"",preset:void 0,extensions:void 0};tY.preload=e=>{let t={...tW,...e},{files:r,path:n=""}=t,{preset:a,extensions:i}=t;a&&(tZ(a),r=tj[a],n=tQ);let{extension:o}=tz(r);if("webp"===o||"jpg"===o||"jpeg"===o)throw Error("useEnvironment: Preloading gainmaps is not supported");let s=tq(o);if(!s)throw Error("useEnvironment: Unrecognized file extension: "+r);J.G.preload(s,Array.isArray(r)?[r]:r,e=>{null==e.setPath||e.setPath(n),i&&i(e)})};let tV={files:tX,preset:void 0};function tZ(e){if(!(e in tj))throw Error("Preset must be one of: "+Object.keys(tj).join(", "))}function tz(e){var t;let r=Array.isArray(e)&&6===e.length,n=Array.isArray(e)&&3===e.length&&e.some(e=>e.endsWith("json")),a=Array.isArray(e)?e[0]:e;return{extension:r?"cube":n?"webp":a.startsWith("data:application/exr")?"exr":a.startsWith("data:application/hdr")?"hdr":a.startsWith("data:image/jpeg")?"jpg":null==(t=a.split(".").pop())||null==(t=t.split("?"))||null==(t=t.shift())?void 0:t.toLowerCase(),isCubemap:r,isGainmap:n}}function tq(e){return"cube"===e?c.CubeTextureLoader:"hdr"===e?k:"exr"===e?tI:"jpg"===e||"jpeg"===e?tN:"webp"===e?tK:null}function t$(e,t,r,n,a={}){var i,o,s,l,c;let u;a={backgroundBlurriness:0,backgroundIntensity:1,backgroundRotation:[0,0,0],environmentIntensity:1,environmentRotation:[0,0,0],...a};let h=(u=c=t||r).current&&u.current.isScene?c.current:c,d=h.background,A=h.environment,f={backgroundBlurriness:h.backgroundBlurriness,backgroundIntensity:h.backgroundIntensity,backgroundRotation:null!=(i=null==(o=h.backgroundRotation)||null==o.clone?void 0:o.clone())?i:[0,0,0],environmentIntensity:h.environmentIntensity,environmentRotation:null!=(s=null==(l=h.environmentRotation)||null==l.clone?void 0:l.clone())?s:[0,0,0]};return"only"!==e&&(h.environment=n),e&&(h.background=n),(0,H.s)(h,a),()=>{"only"!==e&&(h.environment=A),e&&(h.background=d),(0,H.s)(h,f)}}function t0({scene:e,background:t=!1,map:r,...n}){let a=(0,o.useThree)(e=>e.scene);return l.useLayoutEffect(()=>{if(r)return t$(t,e,a,r,n)}),null}function t1({background:e=!1,scene:t,blur:r,backgroundBlurriness:n,backgroundIntensity:a,backgroundRotation:i,environmentIntensity:s,environmentRotation:c,...u}){let h=tY(u),d=(0,o.useThree)(e=>e.scene);return l.useLayoutEffect(()=>t$(e,t,d,h,{backgroundBlurriness:null!=r?r:n,backgroundIntensity:a,backgroundRotation:i,environmentIntensity:s,environmentRotation:c})),l.useEffect(()=>()=>{h.dispose()},[h]),null}function t2({children:e,near:t=.1,far:r=1e3,resolution:n=256,frames:a=1,map:i,background:u=!1,blur:h,backgroundBlurriness:d,backgroundIntensity:A,backgroundRotation:f,environmentIntensity:p,environmentRotation:m,scene:B,files:g,path:C,preset:M,extensions:v}){let y=(0,o.useThree)(e=>e.gl),E=(0,o.useThree)(e=>e.scene),b=l.useRef(null),[F]=l.useState(()=>new c.Scene),I=l.useMemo(()=>{let e=new S.WebGLCubeRenderTarget(n);return e.texture.type=c.HalfFloatType,e},[n]);l.useEffect(()=>()=>{I.dispose()},[I]),l.useLayoutEffect(()=>{if(1===a){let e=y.autoClear;y.autoClear=!0,b.current.update(y,F),y.autoClear=e}return t$(u,B,E,I.texture,{backgroundBlurriness:null!=h?h:d,backgroundIntensity:A,backgroundRotation:f,environmentIntensity:p,environmentRotation:m})},[e,F,I.texture,B,E,u,a,y]);let R=1;return(0,s.D)(()=>{if(a===1/0||R<a){let e=y.autoClear;y.autoClear=!0,b.current.update(y,F),y.autoClear=e,R++}}),l.createElement(l.Fragment,null,(0,D.o)(l.createElement(l.Fragment,null,e,l.createElement("cubeCamera",{ref:b,args:[t,r,I]}),g||M?l.createElement(t1,{background:!0,files:g,preset:M,path:C,extensions:v}):i?l.createElement(t0,{background:!0,map:i,extensions:v}):null),F))}function t9(e){var t,r,n,a;let o=tY(e),s=e.map||o;l.useMemo(()=>(0,P.e)({GroundProjectedEnvImpl:_}),[]),l.useEffect(()=>()=>{o.dispose()},[o]);let c=l.useMemo(()=>[s],[s]),u=null==(t=e.ground)?void 0:t.height,h=null==(r=e.ground)?void 0:r.radius,d=null!=(n=null==(a=e.ground)?void 0:a.scale)?n:1e3;return l.createElement(l.Fragment,null,l.createElement(t0,i({},e,{map:s})),l.createElement("groundProjectedEnvImpl",{args:c,scale:d,height:u,radius:h}))}tY.clear=e=>{let t={...tV,...e},{files:r}=t,{preset:n}=t;n&&(tZ(n),r=tj[n]);let{extension:a}=tz(r),i=tq(a);if(!i)throw Error("useEnvironment: Unrecognized file extension: "+r);J.G.clear(i,Array.isArray(r)?[r]:r)},e.s(["Environment",0,function(e){return e.ground?l.createElement(t9,e):e.map?l.createElement(t0,e):e.children?l.createElement(t2,e):l.createElement(t1,e)}],43257);var t3=e.i(47167),t8=e.i(43476),t6=e.i(67561),t5=e.i(46991),t4=e.i(85709),t7=e.i(83402),re=c;function rt(e,t){if(t===c.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t!==c.TriangleFanDrawMode&&t!==c.TriangleStripDrawMode)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e;{let r=e.getIndex();if(null===r){let t=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<n.count;e++)t.push(e);e.setIndex(t),r=e.getIndex()}let n=r.count-2,a=[];if(r)if(t===c.TriangleFanDrawMode)for(let e=1;e<=n;e++)a.push(r.getX(0)),a.push(r.getX(e)),a.push(r.getX(e+1));else for(let e=0;e<n;e++)e%2==0?(a.push(r.getX(e)),a.push(r.getX(e+1)),a.push(r.getX(e+2))):(a.push(r.getX(e+2)),a.push(r.getX(e+1)),a.push(r.getX(e)));a.length/3!==n&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");let i=e.clone();return i.setIndex(a),i.clearGroups(),i}}function rr(e){if("u">typeof TextDecoder)return new TextDecoder().decode(e);let t="";for(let r=0,n=e.length;r<n;r++)t+=String.fromCharCode(e[r]);try{return decodeURIComponent(escape(t))}catch(e){return t}}let rn="srgb",ra="srgb-linear";class ri extends re.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new rh(e)}),this.register(function(e){return new rd(e)}),this.register(function(e){return new rv(e)}),this.register(function(e){return new ry(e)}),this.register(function(e){return new rE(e)}),this.register(function(e){return new rf(e)}),this.register(function(e){return new rp(e)}),this.register(function(e){return new rm(e)}),this.register(function(e){return new rB(e)}),this.register(function(e){return new ru(e)}),this.register(function(e){return new rg(e)}),this.register(function(e){return new rA(e)}),this.register(function(e){return new rM(e)}),this.register(function(e){return new rC(e)}),this.register(function(e){return new rl(e)}),this.register(function(e){return new rb(e)}),this.register(function(e){return new rF(e)})}load(e,t,r,n){let a,i=this;if(""!==this.resourcePath)a=this.resourcePath;else if(""!==this.path){let t=re.LoaderUtils.extractUrlBase(e);a=re.LoaderUtils.resolveURL(t,this.path)}else a=re.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);let o=function(t){n?n(t):console.error(t),i.manager.itemError(e),i.manager.itemEnd(e)},s=new re.FileLoader(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,function(r){try{i.parse(r,a,function(r){t(r),i.manager.itemEnd(e)},o)}catch(e){o(e)}},r,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return -1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return -1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,r,n){let a,i={},o={};if("string"==typeof e)a=JSON.parse(e);else if(e instanceof ArrayBuffer)if(rr(new Uint8Array(e.slice(0,4)))===rI){try{i[rs.KHR_BINARY_GLTF]=new rR(e)}catch(e){n&&n(e);return}a=JSON.parse(i[rs.KHR_BINARY_GLTF].content)}else a=JSON.parse(rr(new Uint8Array(e)));else a=e;if(void 0===a.asset||a.asset.version[0]<2){n&&n(Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}let s=new rY(a,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});s.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){let t=this.pluginCallbacks[e](s);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[t.name]=t,i[t.name]=!0}if(a.extensionsUsed)for(let e=0;e<a.extensionsUsed.length;++e){let t=a.extensionsUsed[e],r=a.extensionsRequired||[];switch(t){case rs.KHR_MATERIALS_UNLIT:i[t]=new rc;break;case rs.KHR_DRACO_MESH_COMPRESSION:i[t]=new rT(a,this.dracoLoader);break;case rs.KHR_TEXTURE_TRANSFORM:i[t]=new rw;break;case rs.KHR_MESH_QUANTIZATION:i[t]=new rx;break;default:r.indexOf(t)>=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}s.setExtensions(i),s.setPlugins(o),s.parse(r,n)}parseAsync(e,t){let r=this;return new Promise(function(n,a){r.parse(e,t,n,a)})}}function ro(){let e={};return{get:function(t){return e[t]},add:function(t,r){e[t]=r},remove:function(t){delete e[t]},removeAll:function(){e={}}}}let rs={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class rl{constructor(e){this.parser=e,this.name=rs.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let r=0,n=t.length;r<n;r++){let n=t[r];n.extensions&&n.extensions[this.name]&&void 0!==n.extensions[this.name].light&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(e){let t,r=this.parser,n="light:"+e,a=r.cache.get(n);if(a)return a;let i=r.json,o=((i.extensions&&i.extensions[this.name]||{}).lights||[])[e],s=new re.Color(0xffffff);void 0!==o.color&&s.setRGB(o.color[0],o.color[1],o.color[2],ra);let l=void 0!==o.range?o.range:0;switch(o.type){case"directional":(t=new re.DirectionalLight(s)).target.position.set(0,0,-1),t.add(t.target);break;case"point":(t=new re.PointLight(s)).distance=l;break;case"spot":(t=new re.SpotLight(s)).distance=l,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,t.angle=o.spot.outerConeAngle,t.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,t.target.position.set(0,0,-1),t.add(t.target);break;default:throw Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return t.position.set(0,0,0),t.decay=2,rN(t,o),void 0!==o.intensity&&(t.intensity=o.intensity),t.name=r.createUniqueName(o.name||"light_"+e),a=Promise.resolve(t),r.cache.add(n,a),a}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){let t=this,r=this.parser,n=r.json.nodes[e],a=(n.extensions&&n.extensions[this.name]||{}).light;return void 0===a?null:this._loadLight(a).then(function(e){return r._getNodeRef(t.cache,a,e)})}}class rc{constructor(){this.name=rs.KHR_MATERIALS_UNLIT}getMaterialType(){return re.MeshBasicMaterial}extendParams(e,t,r){let n=[];e.color=new re.Color(1,1,1),e.opacity=1;let a=t.pbrMetallicRoughness;if(a){if(Array.isArray(a.baseColorFactor)){let t=a.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],ra),e.opacity=t[3]}void 0!==a.baseColorTexture&&n.push(r.assignTexture(e,"map",a.baseColorTexture,rn))}return Promise.all(n)}}class ru{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){let r=this.parser.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();let n=r.extensions[this.name].emissiveStrength;return void 0!==n&&(t.emissiveIntensity=n),Promise.resolve()}}class rh{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];if(void 0!==i.clearcoatFactor&&(t.clearcoat=i.clearcoatFactor),void 0!==i.clearcoatTexture&&a.push(r.assignTexture(t,"clearcoatMap",i.clearcoatTexture)),void 0!==i.clearcoatRoughnessFactor&&(t.clearcoatRoughness=i.clearcoatRoughnessFactor),void 0!==i.clearcoatRoughnessTexture&&a.push(r.assignTexture(t,"clearcoatRoughnessMap",i.clearcoatRoughnessTexture)),void 0!==i.clearcoatNormalTexture&&(a.push(r.assignTexture(t,"clearcoatNormalMap",i.clearcoatNormalTexture)),void 0!==i.clearcoatNormalTexture.scale)){let e=i.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new re.Vector2(e,e)}return Promise.all(a)}}class rd{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_DISPERSION}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();let n=r.extensions[this.name];return t.dispersion=void 0!==n.dispersion?n.dispersion:0,Promise.resolve()}}class rA{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];return void 0!==i.iridescenceFactor&&(t.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&a.push(r.assignTexture(t,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(t.iridescenceIOR=i.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&a.push(r.assignTexture(t,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(a)}}class rf{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_SHEEN}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[];t.sheenColor=new re.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;let i=n.extensions[this.name];if(void 0!==i.sheenColorFactor){let e=i.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],ra)}return void 0!==i.sheenRoughnessFactor&&(t.sheenRoughness=i.sheenRoughnessFactor),void 0!==i.sheenColorTexture&&a.push(r.assignTexture(t,"sheenColorMap",i.sheenColorTexture,rn)),void 0!==i.sheenRoughnessTexture&&a.push(r.assignTexture(t,"sheenRoughnessMap",i.sheenRoughnessTexture)),Promise.all(a)}}class rp{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];return void 0!==i.transmissionFactor&&(t.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&a.push(r.assignTexture(t,"transmissionMap",i.transmissionTexture)),Promise.all(a)}}class rm{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_VOLUME}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];t.thickness=void 0!==i.thicknessFactor?i.thicknessFactor:0,void 0!==i.thicknessTexture&&a.push(r.assignTexture(t,"thicknessMap",i.thicknessTexture)),t.attenuationDistance=i.attenuationDistance||1/0;let o=i.attenuationColor||[1,1,1];return t.attenuationColor=new re.Color().setRGB(o[0],o[1],o[2],ra),Promise.all(a)}}class rB{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_IOR}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();let n=r.extensions[this.name];return t.ior=void 0!==n.ior?n.ior:1.5,Promise.resolve()}}class rg{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_SPECULAR}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];t.specularIntensity=void 0!==i.specularFactor?i.specularFactor:1,void 0!==i.specularTexture&&a.push(r.assignTexture(t,"specularIntensityMap",i.specularTexture));let o=i.specularColorFactor||[1,1,1];return t.specularColor=new re.Color().setRGB(o[0],o[1],o[2],ra),void 0!==i.specularColorTexture&&a.push(r.assignTexture(t,"specularColorMap",i.specularColorTexture,rn)),Promise.all(a)}}class rC{constructor(e){this.parser=e,this.name=rs.EXT_MATERIALS_BUMP}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];return t.bumpScale=void 0!==i.bumpFactor?i.bumpFactor:1,void 0!==i.bumpTexture&&a.push(r.assignTexture(t,"bumpMap",i.bumpTexture)),Promise.all(a)}}class rM{constructor(e){this.parser=e,this.name=rs.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){let t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?re.MeshPhysicalMaterial:null}extendMaterialParams(e,t){let r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();let a=[],i=n.extensions[this.name];return void 0!==i.anisotropyStrength&&(t.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(t.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&a.push(r.assignTexture(t,"anisotropyMap",i.anisotropyTexture)),Promise.all(a)}}class rv{constructor(e){this.parser=e,this.name=rs.KHR_TEXTURE_BASISU}loadTexture(e){let t=this.parser,r=t.json,n=r.textures[e];if(!n.extensions||!n.extensions[this.name])return null;let a=n.extensions[this.name],i=t.options.ktx2Loader;if(!i)if(!(r.extensionsRequired&&r.extensionsRequired.indexOf(this.name)>=0))return null;else throw Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return t.loadTextureImage(e,a.source,i)}}class ry{constructor(e){this.parser=e,this.name=rs.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){let t=this.name,r=this.parser,n=r.json,a=n.textures[e];if(!a.extensions||!a.extensions[t])return null;let i=a.extensions[t],o=n.images[i.source],s=r.textureLoader;if(o.uri){let e=r.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then(function(a){if(a)return r.loadTextureImage(e,i.source,s);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}}class rE{constructor(e){this.parser=e,this.name=rs.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){let t=this.name,r=this.parser,n=r.json,a=n.textures[e];if(!a.extensions||!a.extensions[t])return null;let i=a.extensions[t],o=n.images[i.source],s=r.textureLoader;if(o.uri){let e=r.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then(function(a){if(a)return r.loadTextureImage(e,i.source,s);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}}class rb{constructor(e){this.name=rs.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,r=t.bufferViews[e];if(!r.extensions||!r.extensions[this.name])return null;{let e=r.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported)if(!(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0))return null;else throw Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return n.then(function(t){let r=e.byteOffset||0,n=e.byteLength||0,i=e.count,o=e.byteStride,s=new Uint8Array(t,r,n);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(i,o,s,e.mode,e.filter).then(function(e){return e.buffer}):a.ready.then(function(){let t=new ArrayBuffer(i*o);return a.decodeGltfBuffer(new Uint8Array(t),i,o,s,e.mode,e.filter),t})})}}}class rF{constructor(e){this.name=rs.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||void 0===r.mesh)return null;for(let e of t.meshes[r.mesh].primitives)if(e.mode!==rP.TRIANGLES&&e.mode!==rP.TRIANGLE_STRIP&&e.mode!==rP.TRIANGLE_FAN&&void 0!==e.mode)return null;let n=r.extensions[this.name].attributes,a=[],i={};for(let e in n)a.push(this.parser.getDependency("accessor",n[e]).then(t=>(i[e]=t,i[e])));return a.length<1?null:(a.push(this.parser.createNodeMesh(e)),Promise.all(a).then(e=>{let t=e.pop(),r=t.isGroup?t.children:[t],n=e[0].count,a=[];for(let e of r){let t=new re.Matrix4,r=new re.Vector3,o=new re.Quaternion,s=new re.Vector3(1,1,1),l=new re.InstancedMesh(e.geometry,e.material,n);for(let e=0;e<n;e++)i.TRANSLATION&&r.fromBufferAttribute(i.TRANSLATION,e),i.ROTATION&&o.fromBufferAttribute(i.ROTATION,e),i.SCALE&&s.fromBufferAttribute(i.SCALE,e),l.setMatrixAt(e,t.compose(r,o,s));for(let t in i)if("_COLOR_0"===t){let e=i[t];l.instanceColor=new re.InstancedBufferAttribute(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,i[t]);re.Object3D.prototype.copy.call(l,e),this.parser.assignFinalMaterial(l),a.push(l)}return t.isGroup?(t.clear(),t.add(...a),t):a[0]}))}}let rI="glTF";class rR{constructor(e){this.name=rs.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12);if(this.header={magic:rr(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==rI)throw Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw Error("THREE.GLTFLoader: Legacy binary file detected.");const r=this.header.length-12,n=new DataView(e,12);let a=0;for(;a<r;){const t=n.getUint32(a,!0);a+=4;const r=n.getUint32(a,!0);if(a+=4,0x4e4f534a===r){const r=new Uint8Array(e,12+a,t);this.content=rr(r)}else if(5130562===r){const r=12+a;this.body=e.slice(r,r+t)}a+=t}if(null===this.content)throw Error("THREE.GLTFLoader: JSON content not found.")}}class rT{constructor(e,t){if(!t)throw Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=rs.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){let r=this.json,n=this.dracoLoader,a=e.extensions[this.name].bufferView,i=e.extensions[this.name].attributes,o={},s={},l={};for(let e in i)o[rJ[e]||e.toLowerCase()]=i[e];for(let t in e.attributes){let n=rJ[t]||t.toLowerCase();if(void 0!==i[t]){let a=r.accessors[e.attributes[t]],i=rS[a.componentType];l[n]=i.name,s[n]=!0===a.normalized}}return t.getDependency("bufferView",a).then(function(e){return new Promise(function(t,r){n.decodeDracoFile(e,function(e){for(let t in e.attributes){let r=e.attributes[t],n=s[t];void 0!==n&&(r.normalized=n)}t(e)},o,l,ra,r)})})}}class rw{constructor(){this.name=rs.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(void 0===t.texCoord||t.texCoord===e.channel)&&void 0===t.offset&&void 0===t.rotation&&void 0===t.scale||(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class rx{constructor(){this.name=rs.KHR_MESH_QUANTIZATION}}class rG extends re.Interpolant{constructor(e,t,r,n){super(e,t,r,n)}copySampleValue_(e){let t=this.resultBuffer,r=this.sampleValues,n=this.valueSize,a=e*n*3+n;for(let e=0;e!==n;e++)t[e]=r[a+e];return t}interpolate_(e,t,r,n){let a=this.resultBuffer,i=this.sampleValues,o=this.valueSize,s=2*o,l=3*o,c=n-t,u=(r-t)/c,h=u*u,d=h*u,A=e*l,f=A-l,p=-2*d+3*h,m=d-h,B=1-p,g=m-h+u;for(let e=0;e!==o;e++){let t=i[f+e+o],r=i[f+e+s]*c,n=i[A+e+o],l=i[A+e]*c;a[e]=B*t+g*r+p*n+m*l}return a}}let rD=new re.Quaternion;class rH extends rG{interpolate_(e,t,r,n){let a=super.interpolate_(e,t,r,n);return rD.fromArray(a).normalize().toArray(a),a}}let rP={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},rS={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},rL={9728:re.NearestFilter,9729:re.LinearFilter,9984:re.NearestMipmapNearestFilter,9985:re.LinearMipmapNearestFilter,9986:re.NearestMipmapLinearFilter,9987:re.LinearMipmapLinearFilter},rO={33071:re.ClampToEdgeWrapping,33648:re.MirroredRepeatWrapping,10497:re.RepeatWrapping},r_={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},rJ={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",...O>=152?{TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3"}:{TEXCOORD_0:"uv",TEXCOORD_1:"uv2"},COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},rU={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},rk={CUBICSPLINE:void 0,LINEAR:re.InterpolateLinear,STEP:re.InterpolateDiscrete};function rK(e,t,r){for(let n in r.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=r.extensions[n])}function rN(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function rj(e){let t="",r=Object.keys(e).sort();for(let n=0,a=r.length;n<a;n++)t+=r[n]+":"+e[r[n]]+";";return t}function rQ(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}let rX=new re.Matrix4;class rY{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new ro,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let r=!1,n=!1,a=-1;"u">typeof navigator&&void 0!==navigator.userAgent&&(r=!0===/^((?!chrome|android).)*safari/i.test(navigator.userAgent),a=(n=navigator.userAgent.indexOf("Firefox")>-1)?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"u"<typeof createImageBitmap||r||n&&a<98?this.textureLoader=new re.TextureLoader(this.options.manager):this.textureLoader=new re.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new re.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let r=this,n=this.json,a=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all(this._invokeAll(function(e){return e.beforeRoot&&e.beforeRoot()})).then(function(){return Promise.all([r.getDependencies("scene"),r.getDependencies("animation"),r.getDependencies("camera")])}).then(function(t){let i={scene:t[0][n.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:n.asset,parser:r,userData:{}};return rK(a,i,n),rN(i,n),Promise.all(r._invokeAll(function(e){return e.afterRoot&&e.afterRoot(i)})).then(function(){for(let e of i.scenes)e.updateMatrixWorld();e(i)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],r=this.json.meshes||[];for(let r=0,n=t.length;r<n;r++){let n=t[r].joints;for(let t=0,r=n.length;t<r;t++)e[n[t]].isBone=!0}for(let t=0,n=e.length;t<n;t++){let n=e[t];void 0!==n.mesh&&(this._addNodeRef(this.meshCache,n.mesh),void 0!==n.skin&&(r[n.mesh].isSkinnedMesh=!0)),void 0!==n.camera&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,r){if(e.refs[t]<=1)return r;let n=r.clone(),a=(e,t)=>{let r=this.associations.get(e);for(let[n,i]of(null!=r&&this.associations.set(t,r),e.children.entries()))a(i,t.children[n])};return a(r,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let r=0;r<t.length;r++){let n=e(t[r]);if(n)return n}return null}_invokeAll(e){let t=Object.values(this.plugins);t.unshift(this);let r=[];for(let n=0;n<t.length;n++){let a=e(t[n]);a&&r.push(a)}return r}getDependency(e,t){let r=e+":"+t,n=this.cache.get(r);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne(function(e){return e.loadNode&&e.loadNode(t)});break;case"mesh":n=this._invokeOne(function(e){return e.loadMesh&&e.loadMesh(t)});break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne(function(e){return e.loadBufferView&&e.loadBufferView(t)});break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne(function(e){return e.loadMaterial&&e.loadMaterial(t)});break;case"texture":n=this._invokeOne(function(e){return e.loadTexture&&e.loadTexture(t)});break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne(function(e){return e.loadAnimation&&e.loadAnimation(t)});break;case"camera":n=this.loadCamera(t);break;default:if(!(n=this._invokeOne(function(r){return r!=this&&r.getDependency&&r.getDependency(e,t)})))throw Error("Unknown type: "+e)}this.cache.add(r,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){let r=this;t=Promise.all((this.json[e+("mesh"===e?"es":"s")]||[]).map(function(t,n){return r.getDependency(e,n)})),this.cache.add(e,t)}return t}loadBuffer(e){let t=this.json.buffers[e],r=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[rs.KHR_BINARY_GLTF].body);let n=this.options;return new Promise(function(e,a){r.load(re.LoaderUtils.resolveURL(t.uri,n.path),e,void 0,function(){a(Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){let t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(e){let r=t.byteLength||0,n=t.byteOffset||0;return e.slice(n,n+r)})}loadAccessor(e){let t=this,r=this.json,n=this.json.accessors[e];if(void 0===n.bufferView&&void 0===n.sparse){let e=r_[n.type],t=rS[n.componentType],r=!0===n.normalized,a=new t(n.count*e);return Promise.resolve(new re.BufferAttribute(a,e,r))}let a=[];return void 0!==n.bufferView?a.push(this.getDependency("bufferView",n.bufferView)):a.push(null),void 0!==n.sparse&&(a.push(this.getDependency("bufferView",n.sparse.indices.bufferView)),a.push(this.getDependency("bufferView",n.sparse.values.bufferView))),Promise.all(a).then(function(e){let a,i,o=e[0],s=r_[n.type],l=rS[n.componentType],c=l.BYTES_PER_ELEMENT,u=c*s,h=n.byteOffset||0,d=void 0!==n.bufferView?r.bufferViews[n.bufferView].byteStride:void 0,A=!0===n.normalized;if(d&&d!==u){let e=Math.floor(h/d),r="InterleavedBuffer:"+n.bufferView+":"+n.componentType+":"+e+":"+n.count,u=t.cache.get(r);u||(a=new l(o,e*d,n.count*d/c),u=new re.InterleavedBuffer(a,d/c),t.cache.add(r,u)),i=new re.InterleavedBufferAttribute(u,s,h%d/c,A)}else a=null===o?new l(n.count*s):new l(o,h,n.count*s),i=new re.BufferAttribute(a,s,A);if(void 0!==n.sparse){let t=r_.SCALAR,r=rS[n.sparse.indices.componentType],a=n.sparse.indices.byteOffset||0,c=n.sparse.values.byteOffset||0,u=new r(e[1],a,n.sparse.count*t),h=new l(e[2],c,n.sparse.count*s);null!==o&&(i=new re.BufferAttribute(i.array.slice(),i.itemSize,i.normalized));for(let e=0,t=u.length;e<t;e++){let t=u[e];if(i.setX(t,h[e*s]),s>=2&&i.setY(t,h[e*s+1]),s>=3&&i.setZ(t,h[e*s+2]),s>=4&&i.setW(t,h[e*s+3]),s>=5)throw Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return i})}loadTexture(e){let t=this.json,r=this.options,n=t.textures[e].source,a=t.images[n],i=this.textureLoader;if(a.uri){let e=r.manager.getHandler(a.uri);null!==e&&(i=e)}return this.loadTextureImage(e,n,i)}loadTextureImage(e,t,r){let n=this,a=this.json,i=a.textures[e],o=a.images[t],s=(o.uri||o.bufferView)+":"+i.sampler;if(this.textureCache[s])return this.textureCache[s];let l=this.loadImageSource(t,r).then(function(t){t.flipY=!1,t.name=i.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);let r=(a.samplers||{})[i.sampler]||{};return t.magFilter=rL[r.magFilter]||re.LinearFilter,t.minFilter=rL[r.minFilter]||re.LinearMipmapLinearFilter,t.wrapS=rO[r.wrapS]||re.RepeatWrapping,t.wrapT=rO[r.wrapT]||re.RepeatWrapping,n.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=l,l}loadImageSource(e,t){let r=this.json,n=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then(e=>e.clone());let a=r.images[e],i=self.URL||self.webkitURL,o=a.uri||"",s=!1;if(void 0!==a.bufferView)o=this.getDependency("bufferView",a.bufferView).then(function(e){s=!0;let t=new Blob([e],{type:a.mimeType});return o=i.createObjectURL(t)});else if(void 0===a.uri)throw Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");let l=Promise.resolve(o).then(function(e){return new Promise(function(r,a){let i=r;!0===t.isImageBitmapLoader&&(i=function(e){let t=new re.Texture(e);t.needsUpdate=!0,r(t)}),t.load(re.LoaderUtils.resolveURL(e,n.path),i,void 0,a)})}).then(function(e){var t;return!0===s&&i.revokeObjectURL(o),rN(e,a),e.userData.mimeType=a.mimeType||((t=a.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":"image/png"),e}).catch(function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",o),e});return this.sourceCache[e]=l,l}assignTexture(e,t,r,n){let a=this;return this.getDependency("texture",r.index).then(function(i){if(!i)return null;if(void 0!==r.texCoord&&r.texCoord>0&&((i=i.clone()).channel=r.texCoord),a.extensions[rs.KHR_TEXTURE_TRANSFORM]){let e=void 0!==r.extensions?r.extensions[rs.KHR_TEXTURE_TRANSFORM]:void 0;if(e){let t=a.associations.get(i);i=a.extensions[rs.KHR_TEXTURE_TRANSFORM].extendTexture(i,e),a.associations.set(i,t)}}return void 0!==n&&("number"==typeof n&&(n=3001===n?rn:ra),"colorSpace"in i?i.colorSpace=n:i.encoding=n===rn?3001:3e3),e[t]=i,i})}assignFinalMaterial(e){let t=e.geometry,r=e.material,n=void 0===t.attributes.tangent,a=void 0!==t.attributes.color,i=void 0===t.attributes.normal;if(e.isPoints){let e="PointsMaterial:"+r.uuid,t=this.cache.get(e);t||(t=new re.PointsMaterial,re.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){let e="LineBasicMaterial:"+r.uuid,t=this.cache.get(e);t||(t=new re.LineBasicMaterial,re.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(n||a||i){let e="ClonedMaterial:"+r.uuid+":";n&&(e+="derivative-tangents:"),a&&(e+="vertex-colors:"),i&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=r.clone(),a&&(t.vertexColors=!0),i&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(r))),r=t}e.material=r}getMaterialType(){return re.MeshStandardMaterial}loadMaterial(e){let t,r=this,n=this.json,a=this.extensions,i=n.materials[e],o={},s=i.extensions||{},l=[];if(s[rs.KHR_MATERIALS_UNLIT]){let e=a[rs.KHR_MATERIALS_UNLIT];t=e.getMaterialType(),l.push(e.extendParams(o,i,r))}else{let n=i.pbrMetallicRoughness||{};if(o.color=new re.Color(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],ra),o.opacity=e[3]}void 0!==n.baseColorTexture&&l.push(r.assignTexture(o,"map",n.baseColorTexture,rn)),o.metalness=void 0!==n.metallicFactor?n.metallicFactor:1,o.roughness=void 0!==n.roughnessFactor?n.roughnessFactor:1,void 0!==n.metallicRoughnessTexture&&(l.push(r.assignTexture(o,"metalnessMap",n.metallicRoughnessTexture)),l.push(r.assignTexture(o,"roughnessMap",n.metallicRoughnessTexture))),t=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}!0===i.doubleSided&&(o.side=re.DoubleSide);let c=i.alphaMode||"OPAQUE";if("BLEND"===c?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,"MASK"===c&&(o.alphaTest=void 0!==i.alphaCutoff?i.alphaCutoff:.5)),void 0!==i.normalTexture&&t!==re.MeshBasicMaterial&&(l.push(r.assignTexture(o,"normalMap",i.normalTexture)),o.normalScale=new re.Vector2(1,1),void 0!==i.normalTexture.scale)){let e=i.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==i.occlusionTexture&&t!==re.MeshBasicMaterial&&(l.push(r.assignTexture(o,"aoMap",i.occlusionTexture)),void 0!==i.occlusionTexture.strength&&(o.aoMapIntensity=i.occlusionTexture.strength)),void 0!==i.emissiveFactor&&t!==re.MeshBasicMaterial){let e=i.emissiveFactor;o.emissive=new re.Color().setRGB(e[0],e[1],e[2],ra)}return void 0!==i.emissiveTexture&&t!==re.MeshBasicMaterial&&l.push(r.assignTexture(o,"emissiveMap",i.emissiveTexture,rn)),Promise.all(l).then(function(){let n=new t(o);return i.name&&(n.name=i.name),rN(n,i),r.associations.set(n,{materials:e}),i.extensions&&rK(a,n,i),n})}createUniqueName(e){let t=re.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,r=this.extensions,n=this.primitiveCache,a=[];for(let i=0,o=e.length;i<o;i++){let o=e[i],s=function(e){let t,r=e.extensions&&e.extensions[rs.KHR_DRACO_MESH_COMPRESSION];if(t=r?"draco:"+r.bufferView+":"+r.indices+":"+rj(r.attributes):e.indices+":"+rj(e.attributes)+":"+e.mode,void 0!==e.targets)for(let r=0,n=e.targets.length;r<n;r++)t+=":"+rj(e.targets[r]);return t}(o),l=n[s];if(l)a.push(l.promise);else{let e;e=o.extensions&&o.extensions[rs.KHR_DRACO_MESH_COMPRESSION]?function(e){return r[rs.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then(function(r){return rW(r,e,t)})}(o):rW(new re.BufferGeometry,o,t),n[s]={primitive:o,promise:e},a.push(e)}}return Promise.all(a)}loadMesh(e){let t=this,r=this.json,n=this.extensions,a=r.meshes[e],i=a.primitives,o=[];for(let e=0,t=i.length;e<t;e++){var s;let t=void 0===i[e].material?(void 0===(s=this.cache).DefaultMaterial&&(s.DefaultMaterial=new re.MeshStandardMaterial({color:0xffffff,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:re.FrontSide})),s.DefaultMaterial):this.getDependency("material",i[e].material);o.push(t)}return o.push(t.loadGeometries(i)),Promise.all(o).then(function(r){let o=r.slice(0,r.length-1),s=r[r.length-1],l=[];for(let r=0,c=s.length;r<c;r++){let c,u=s[r],h=i[r],d=o[r];if(h.mode===rP.TRIANGLES||h.mode===rP.TRIANGLE_STRIP||h.mode===rP.TRIANGLE_FAN||void 0===h.mode)!0===(c=!0===a.isSkinnedMesh?new re.SkinnedMesh(u,d):new re.Mesh(u,d)).isSkinnedMesh&&c.normalizeSkinWeights(),h.mode===rP.TRIANGLE_STRIP?c.geometry=rt(c.geometry,re.TriangleStripDrawMode):h.mode===rP.TRIANGLE_FAN&&(c.geometry=rt(c.geometry,re.TriangleFanDrawMode));else if(h.mode===rP.LINES)c=new re.LineSegments(u,d);else if(h.mode===rP.LINE_STRIP)c=new re.Line(u,d);else if(h.mode===rP.LINE_LOOP)c=new re.LineLoop(u,d);else if(h.mode===rP.POINTS)c=new re.Points(u,d);else throw Error("THREE.GLTFLoader: Primitive mode unsupported: "+h.mode);Object.keys(c.geometry.morphAttributes).length>0&&function(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let r=0,n=t.weights.length;r<n;r++)e.morphTargetInfluences[r]=t.weights[r];if(t.extras&&Array.isArray(t.extras.targetNames)){let r=t.extras.targetNames;if(e.morphTargetInfluences.length===r.length){e.morphTargetDictionary={};for(let t=0,n=r.length;t<n;t++)e.morphTargetDictionary[r[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}(c,a),c.name=t.createUniqueName(a.name||"mesh_"+e),rN(c,a),h.extensions&&rK(n,c,h),t.assignFinalMaterial(c),l.push(c)}for(let r=0,n=l.length;r<n;r++)t.associations.set(l[r],{meshes:e,primitives:r});if(1===l.length)return a.extensions&&rK(n,l[0],a),l[0];let c=new re.Group;a.extensions&&rK(n,c,a),t.associations.set(c,{meshes:e});for(let e=0,t=l.length;e<t;e++)c.add(l[e]);return c})}loadCamera(e){let t,r=this.json.cameras[e],n=r[r.type];return n?("perspective"===r.type?t=new re.PerspectiveCamera(re.MathUtils.radToDeg(n.yfov),n.aspectRatio||1,n.znear||1,n.zfar||2e6):"orthographic"===r.type&&(t=new re.OrthographicCamera(-n.xmag,n.xmag,n.ymag,-n.ymag,n.znear,n.zfar)),r.name&&(t.name=this.createUniqueName(r.name)),rN(t,r),Promise.resolve(t)):void console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){let t=this.json.skins[e],r=[];for(let e=0,n=t.joints.length;e<n;e++)r.push(this._loadNodeShallow(t.joints[e]));return void 0!==t.inverseBindMatrices?r.push(this.getDependency("accessor",t.inverseBindMatrices)):r.push(null),Promise.all(r).then(function(e){let r=e.pop(),n=[],a=[];for(let i=0,o=e.length;i<o;i++){let o=e[i];if(o){n.push(o);let e=new re.Matrix4;null!==r&&e.fromArray(r.array,16*i),a.push(e)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[i])}return new re.Skeleton(n,a)})}loadAnimation(e){let t=this.json,r=this,n=t.animations[e],a=n.name?n.name:"animation_"+e,i=[],o=[],s=[],l=[],c=[];for(let e=0,t=n.channels.length;e<t;e++){let t=n.channels[e],r=n.samplers[t.sampler],a=t.target,u=a.node,h=void 0!==n.parameters?n.parameters[r.input]:r.input,d=void 0!==n.parameters?n.parameters[r.output]:r.output;void 0!==a.node&&(i.push(this.getDependency("node",u)),o.push(this.getDependency("accessor",h)),s.push(this.getDependency("accessor",d)),l.push(r),c.push(a))}return Promise.all([Promise.all(i),Promise.all(o),Promise.all(s),Promise.all(l),Promise.all(c)]).then(function(e){let t=e[0],n=e[1],i=e[2],o=e[3],s=e[4],l=[];for(let e=0,a=t.length;e<a;e++){let a=t[e],c=n[e],u=i[e],h=o[e],d=s[e];if(void 0===a)continue;a.updateMatrix&&a.updateMatrix();let A=r._createAnimationTracks(a,c,u,h,d);if(A)for(let e=0;e<A.length;e++)l.push(A[e])}return new re.AnimationClip(a,void 0,l)})}createNodeMesh(e){let t=this.json,r=this,n=t.nodes[e];return void 0===n.mesh?null:r.getDependency("mesh",n.mesh).then(function(e){let t=r._getNodeRef(r.meshCache,n.mesh,e);return void 0!==n.weights&&t.traverse(function(e){if(e.isMesh)for(let t=0,r=n.weights.length;t<r;t++)e.morphTargetInfluences[t]=n.weights[t]}),t})}loadNode(e){let t=this.json.nodes[e],r=this._loadNodeShallow(e),n=[],a=t.children||[];for(let e=0,t=a.length;e<t;e++)n.push(this.getDependency("node",a[e]));let i=void 0===t.skin?Promise.resolve(null):this.getDependency("skin",t.skin);return Promise.all([r,Promise.all(n),i]).then(function(e){let t=e[0],r=e[1],n=e[2];null!==n&&t.traverse(function(e){e.isSkinnedMesh&&e.bind(n,rX)});for(let e=0,n=r.length;e<n;e++)t.add(r[e]);return t})}_loadNodeShallow(e){let t=this.json,r=this.extensions,n=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];let a=t.nodes[e],i=a.name?n.createUniqueName(a.name):"",o=[],s=n._invokeOne(function(t){return t.createNodeMesh&&t.createNodeMesh(e)});return s&&o.push(s),void 0!==a.camera&&o.push(n.getDependency("camera",a.camera).then(function(e){return n._getNodeRef(n.cameraCache,a.camera,e)})),n._invokeAll(function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)}).forEach(function(e){o.push(e)}),this.nodeCache[e]=Promise.all(o).then(function(t){let o;if((o=!0===a.isBone?new re.Bone:t.length>1?new re.Group:1===t.length?t[0]:new re.Object3D)!==t[0])for(let e=0,r=t.length;e<r;e++)o.add(t[e]);if(a.name&&(o.userData.name=a.name,o.name=i),rN(o,a),a.extensions&&rK(r,o,a),void 0!==a.matrix){let e=new re.Matrix4;e.fromArray(a.matrix),o.applyMatrix4(e)}else void 0!==a.translation&&o.position.fromArray(a.translation),void 0!==a.rotation&&o.quaternion.fromArray(a.rotation),void 0!==a.scale&&o.scale.fromArray(a.scale);return n.associations.has(o)||n.associations.set(o,{}),n.associations.get(o).nodes=e,o}),this.nodeCache[e]}loadScene(e){let t=this.extensions,r=this.json.scenes[e],n=this,a=new re.Group;r.name&&(a.name=n.createUniqueName(r.name)),rN(a,r),r.extensions&&rK(t,a,r);let i=r.nodes||[],o=[];for(let e=0,t=i.length;e<t;e++)o.push(n.getDependency("node",i[e]));return Promise.all(o).then(function(e){for(let t=0,r=e.length;t<r;t++)a.add(e[t]);return n.associations=(e=>{let t=new Map;for(let[e,r]of n.associations)(e instanceof re.Material||e instanceof re.Texture)&&t.set(e,r);return e.traverse(e=>{let r=n.associations.get(e);null!=r&&t.set(e,r)}),t})(a),a})}_createAnimationTracks(e,t,r,n,a){let i,o=[],s=e.name?e.name:e.uuid,l=[];switch(rU[a.path]===rU.weights?e.traverse(function(e){e.morphTargetInfluences&&l.push(e.name?e.name:e.uuid)}):l.push(s),rU[a.path]){case rU.weights:i=re.NumberKeyframeTrack;break;case rU.rotation:i=re.QuaternionKeyframeTrack;break;case rU.position:case rU.scale:i=re.VectorKeyframeTrack;break;default:i=1===r.itemSize?re.NumberKeyframeTrack:re.VectorKeyframeTrack}let c=void 0!==n.interpolation?rk[n.interpolation]:re.InterpolateLinear,u=this._getArrayFromAccessor(r);for(let e=0,r=l.length;e<r;e++){let r=new i(l[e]+"."+rU[a.path],t.array,u,c);"CUBICSPLINE"===n.interpolation&&this._createCubicSplineTrackInterpolant(r),o.push(r)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){let e=rQ(t.constructor),r=new Float32Array(t.length);for(let n=0,a=t.length;n<a;n++)r[n]=t[n]*e;t=r}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof re.QuaternionKeyframeTrack?rH:rG)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function rW(e,t,r){let n=t.attributes,a=[];for(let t in n){let i=rJ[t]||t.toLowerCase();i in e.attributes||a.push(function(t,n){return r.getDependency("accessor",t).then(function(t){e.setAttribute(n,t)})}(n[t],i))}if(void 0!==t.indices&&!e.index){let n=r.getDependency("accessor",t.indices).then(function(t){e.setIndex(t)});a.push(n)}return rN(e,t),!function(e,t,r){let n=t.attributes,a=new re.Box3;if(void 0===n.POSITION)return;{let e=r.json.accessors[n.POSITION],t=e.min,i=e.max;if(void 0===t||void 0===i)return console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(a.set(new re.Vector3(t[0],t[1],t[2]),new re.Vector3(i[0],i[1],i[2])),e.normalized){let t=rQ(rS[e.componentType]);a.min.multiplyScalar(t),a.max.multiplyScalar(t)}}let i=t.targets;if(void 0!==i){let e=new re.Vector3,t=new re.Vector3;for(let n=0,a=i.length;n<a;n++){let a=i[n];if(void 0!==a.POSITION){let n=r.json.accessors[a.POSITION],i=n.min,o=n.max;if(void 0!==i&&void 0!==o){if(t.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),n.normalized){let e=rQ(rS[n.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}a.expandByVector(e)}e.boundingBox=a;let o=new re.Sphere;a.getCenter(o.center),o.radius=a.min.distanceTo(a.max)/2,e.boundingSphere=o}(e,t,r),Promise.all(a).then(function(){return void 0!==t.targets?function(e,t,r){let n=!1,a=!1,i=!1;for(let e=0,r=t.length;e<r;e++){let r=t[e];if(void 0!==r.POSITION&&(n=!0),void 0!==r.NORMAL&&(a=!0),void 0!==r.COLOR_0&&(i=!0),n&&a&&i)break}if(!n&&!a&&!i)return Promise.resolve(e);let o=[],s=[],l=[];for(let c=0,u=t.length;c<u;c++){let u=t[c];if(n){let t=void 0!==u.POSITION?r.getDependency("accessor",u.POSITION):e.attributes.position;o.push(t)}if(a){let t=void 0!==u.NORMAL?r.getDependency("accessor",u.NORMAL):e.attributes.normal;s.push(t)}if(i){let t=void 0!==u.COLOR_0?r.getDependency("accessor",u.COLOR_0):e.attributes.color;l.push(t)}}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(l)]).then(function(t){let r=t[0],o=t[1],s=t[2];return n&&(e.morphAttributes.position=r),a&&(e.morphAttributes.normal=o),i&&(e.morphAttributes.color=s),e.morphTargetsRelative=!0,e})}(e,t.targets,r):e})}var rV=c;let rZ=new WeakMap;class rz extends rV.Loader{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,r,n){let a=new rV.FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,e=>{let r={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(e,r).then(t).catch(n)},r,n)}decodeDracoFile(e,t,r,n){let a={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!r};this.decodeGeometry(e,a).then(t)}decodeGeometry(e,t){let r;for(let e in t.attributeTypes){let r=t.attributeTypes[e];void 0!==r.BYTES_PER_ELEMENT&&(t.attributeTypes[e]=r.name)}let n=JSON.stringify(t);if(rZ.has(e)){let t=rZ.get(e);if(t.key===n)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let a=this.workerNextTaskID++,i=e.byteLength,o=this._getWorker(a,i).then(n=>(r=n,new Promise((n,i)=>{r._callbacks[a]={resolve:n,reject:i},r.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&a&&this._releaseTask(r,a)}),rZ.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new rV.BufferGeometry;e.index&&t.setIndex(new rV.BufferAttribute(e.index.array,1));for(let r=0;r<e.attributes.length;r++){let n=e.attributes[r],a=n.name,i=n.array,o=n.itemSize;t.setAttribute(a,new rV.BufferAttribute(i,o))}return t}_loadLibrary(e,t){let r=new rV.FileLoader(this.manager);return r.setPath(this.decoderPath),r.setResponseType(t),r.setWithCredentials(this.withCredentials),new Promise((t,n)=>{r.load(e,t,void 0,n)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let r=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let n=rq.toString(),a=["/* draco decoder */",r,"\n/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([a]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){let r=t.data;switch(r.type){case"decode":e._callbacks[r.id].resolve(r);break;case"error":e._callbacks[r.id].reject(r);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+r.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort(function(e,t){return e._taskLoad>t._taskLoad?-1:1});let r=this.workerPool[this.workerPool.length-1];return r._taskCosts[e]=t,r._taskLoad+=t,r})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}}function rq(){let e,t;onmessage=function(r){let n=r.data;switch(n.type){case"init":e=n.decoderConfig,t=new Promise(function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)});break;case"decode":let a=n.buffer,i=n.taskConfig;t.then(e=>{let t=e.draco,r=new t.Decoder,o=new t.DecoderBuffer;o.Init(new Int8Array(a),a.byteLength);try{let e=function(e,t,r,n){var a,i,o;let s,l,c,u,h,d,A=n.attributeIDs,f=n.attributeTypes,p=t.GetEncodedGeometryType(r);if(p===e.TRIANGULAR_MESH)h=new e.Mesh,d=t.DecodeBufferToMesh(r,h);else if(p===e.POINT_CLOUD)h=new e.PointCloud,d=t.DecodeBufferToPointCloud(r,h);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!d.ok()||0===h.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+d.error_msg());let m={index:null,attributes:[]};for(let r in A){let a,i,o=self[f[r]];if(n.useUniqueIDs)i=A[r],a=t.GetAttributeByUniqueId(h,i);else{if(-1===(i=t.GetAttributeId(h,e[A[r]])))continue;a=t.GetAttribute(h,i)}m.attributes.push(function(e,t,r,n,a,i){let o=i.num_components(),s=r.num_points()*o,l=s*a.BYTES_PER_ELEMENT,c=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,a),u=e._malloc(l);t.GetAttributeDataArrayForAllPoints(r,i,c,l,u);let h=new a(e.HEAPF32.buffer,u,s).slice();return e._free(u),{name:n,array:h,itemSize:o}}(e,t,h,r,o,a))}return p===e.TRIANGULAR_MESH&&(a=e,i=t,o=h,s=3*o.num_faces(),l=4*s,c=a._malloc(l),i.GetTrianglesUInt32Array(o,l,c),u=new Uint32Array(a.HEAPF32.buffer,c,s).slice(),a._free(c),m.index={array:u,itemSize:1}),e.destroy(h),m}(t,r,o,i),a=e.attributes.map(e=>e.array.buffer);e.index&&a.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},a)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(o),t.destroy(r)}})}}}var J=s;let r$=function(e){let t=new Map,r=new Map,n=e.clone();return function e(t,r,n){n(t,r);for(let a=0;a<t.children.length;a++)e(t.children[a],r.children[a],n)}(e,n,function(e,n){t.set(n,e),r.set(e,n)}),n.traverse(function(e){if(!e.isSkinnedMesh)return;let n=t.get(e),a=n.skeleton.bones;e.skeleton=n.skeleton.clone(),e.bindMatrix.copy(n.bindMatrix),e.skeleton.bones=a.map(function(e){return r.get(e)}),e.bind(e.skeleton,e.bindMatrix)}),n},r0=l.forwardRef(({isChild:e=!1,object:t,children:r,deep:n,castShadow:a,receiveShadow:o,inject:s,keys:u,...h},d)=>{let A={keys:u,deep:n,inject:s,castShadow:a,receiveShadow:o};if(Array.isArray(t=l.useMemo(()=>{if(!1===e&&!Array.isArray(t)){let e=!1;if(t.traverse(t=>{t.isSkinnedMesh&&(e=!0)}),e)return r$(t)}return t},[t,e])))return l.createElement("group",i({},h,{ref:d}),t.map(e=>l.createElement(r0,i({key:e.uuid,object:e},A))),r);let{children:f,...p}=function(e,{keys:t=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData","bindMode","bindMatrix","bindMatrixInverse","skeleton"],deep:r,inject:n,castShadow:a,receiveShadow:i}){let o={};for(let r of t)o[r]=e[r];return r&&(o.geometry&&"materialsOnly"!==r&&(o.geometry=o.geometry.clone()),o.material&&"geometriesOnly"!==r&&(o.material=o.material.clone())),n&&(o="function"==typeof n?{...o,children:n(e)}:l.isValidElement(n)?{...o,children:n}:{...o,...n}),e instanceof c.Mesh&&(a&&(o.castShadow=!0),i&&(o.receiveShadow=!0)),o}(t,A),m=t.type[0].toLowerCase()+t.type.slice(1);return l.createElement(m,i({},p,h,{ref:d}),t.children.map(e=>"Bone"===e.type?l.createElement("primitive",i({key:e.uuid,object:e},A)):l.createElement(r0,i({key:e.uuid,object:e},A,{isChild:!0}))),r,f)}),r1=null,r2="https://www.gstatic.com/draco/versioned/decoders/1.5.5/";function r9(e=!0,t=!0,n){return a=>{n&&n(a),e&&(r1||(r1=new rz),r1.setDecoderPath("string"==typeof e?e:r2),a.setDRACOLoader(r1)),t&&a.setMeshoptDecoder((()=>{let e;if(r)return r;let t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,253,3,1,2,34,4,106,6,5,11,8,7,20,13,33,12,16,128,9,116,64,19,113,127,15,10,21,22,14,255,66,24,54,136,107,18,23,192,26,114,118,132,17,77,101,130,144,27,87,131,44,45,74,156,154,70,167]);if("object"!=typeof WebAssembly)return{supported:!1};let a="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";WebAssembly.validate(t)&&(a="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");let i=WebAssembly.instantiate(function(e){let t=new Uint8Array(e.length);for(let r=0;r<e.length;++r){let n=e.charCodeAt(r);t[r]=n>96?n-71:n>64?n-65:n>47?n+4:n>46?63:62}let r=0;for(let a=0;a<e.length;++a)t[r++]=t[a]<60?n[t[a]]:(t[a]-60)*64+t[++a];return t.buffer.slice(0,r)}(a),{}).then(t=>{(e=t.instance).exports.__wasm_call_ctors()});function o(t,r,n,a,i,o){let s=e.exports.sbrk,l=n+3&-4,c=s(l*a),u=s(i.length),h=new Uint8Array(e.exports.memory.buffer);h.set(i,u);let d=t(c,n,a,u,i.length);if(0===d&&o&&o(c,l,a),r.set(h.subarray(c,c+n*a)),s(c-s(0)),0!==d)throw Error(`Malformed buffer data: ${d}`)}let s={0:"",1:"meshopt_decodeFilterOct",2:"meshopt_decodeFilterQuat",3:"meshopt_decodeFilterExp",NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},l={0:"meshopt_decodeVertexBuffer",1:"meshopt_decodeIndexBuffer",2:"meshopt_decodeIndexSequence",ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"};return r={ready:i,supported:!0,decodeVertexBuffer(t,r,n,a,i){o(e.exports.meshopt_decodeVertexBuffer,t,r,n,a,e.exports[s[i]])},decodeIndexBuffer(t,r,n,a){o(e.exports.meshopt_decodeIndexBuffer,t,r,n,a)},decodeIndexSequence(t,r,n,a){o(e.exports.meshopt_decodeIndexSequence,t,r,n,a)},decodeGltfBuffer(t,r,n,a,i,c){o(e.exports[l[i]],t,r,n,a,e.exports[s[c]])}}})())}}let r3=(e,t,r,n)=>(0,J.G)(ri,e,r9(t,r,n));r3.preload=(e,t,r,n)=>J.G.preload(ri,e,r9(t,r,n)),r3.clear=e=>J.G.clear(ri,e),r3.setDecoderPath=e=>{r2=e},e.s(["useGLTF",0,r3],78140);var s=s;function r8(e,t,r){return Number.isFinite(e)&&Number.isFinite(t)&&Number.isFinite(r)?e/1.9438444924574*Math.pow(Math.max(t,0)/10,r)*1.9438444924574:0}let r6=class{draftDepth;draftDepthRatio;draftPosition;draftPositionRatio;forceAngleRad;girth;mastAngleRad;sag;chordMastTop;chordTackLevel;mastWidth;#e=[];#t=[];constructor(e,t,r,n=1){this.chordMastTop=t,this.chordTackLevel=e,this.mastWidth=r;const a=(e,t=1)=>new c.Vector2(t*e**2,2*t*e),i=1.001+.95*(n-1)/10,o=(i-.001)/1e3;let s=a(.001);const l=a(i).clone().sub(s).angle();let u=new c.Vector2(0,0);for(let e=.001;e<=i;e+=o){let t=a(e);t.sub(s),t.rotateAround(u,-l),this.#e.push(t)}this.calcShape(1-.25*(n-1)/10)}calcShape(e=1){this.#t=[];let t=this.chordTackLevel/(this.#e[this.#e.length-1].x-this.#e[0].x);for(let r of this.#e){let n=r.clone().multiplyScalar(t);1!==e&&(n.y*=e),this.#t.push(n)}let r=new c.Vector2(0,0);for(let e of this.#t)e.y>r.y&&(r=e);this.draftDepth=r.y,this.draftPosition=r.x,this.girth=0;let n=null;for(let e of this.#t)null!==n&&(this.girth+=e.distanceTo(n)),n=e;this.sag=this.chordTackLevel-this.girth,this.entryAngleRad=this.#t[1].clone().sub(this.#t[0]).angle(),this.exitAngleRad=this.#t[this.#t.length-1].clone().sub(this.#t[this.#t.length-2]).angle()-2*Math.PI,this.mastAngleRad=this.calcMastAngle(),this.forceAngleRad=(this.entryAngleRad+this.exitAngleRad)/2,this.draftDepthRatio=this.draftDepth/this.chordTackLevel,this.draftPositionRatio=this.draftPosition/this.chordTackLevel}calcMastAngle(){let e=0,t=null,r=this.mastWidth*this.chordTackLevel/this.chordMastTop;for(let n of this.#t){if(null!==t&&(e+=n.distanceTo(t))>=r)return n.angle();t=n}return NaN}getVerticesAngles(e,t,r=null){let n=(this.girth-t)/(e-1),a=0,i=0,o=[],s=null;for(let l of this.#t){if(null!==s&&(((i+=l.distanceTo(s))>=a*n+t||r&&i>r)&&(a++,o.push(l.angle())),a>=e))break;s=l}return o}pointAtGirthDistance(e){let t=0,r=null;for(let n of this.#t)if(null!==r&&(t+=n.distanceTo(r)),r=n,t>=e)return r.clone()}},r5=[1,.8,.6];function r4(e){return r5[Math.min(Math.max(e,0),2)]}function r7(e,t){return Math.max(.05,Math.min(1,1-.6*e-.3*t))}function ne(e,t){return Math.PI/6*Math.max(0,1-1.9438444924574*t/30)*(1-e)}function nt(e,t,r){let n=Math.min(1,1.9438444924574*(e.tws||0)/30),a=t.tension||.5;switch(r){case"mainSheet":return Math.min(1,.5*n+.3*a+.3*t.mainCar);case"jibSheet":return Math.min(1,.5*n+.3*a+.3*t.jibCar);case"vang":return Math.min(1,.6*n+.4*a);case"cunningham":return Math.min(1,.4*n+.6*a);default:return a}}function nr(e){let t=Math.max(0,Math.min(1,e));if(t<=.5){let e=2*t;return{r:e,g:1-.3*e,b:0}}return{r:1,g:.7*(1-(t-.5)*2),b:0}}e.s(["getReefHeightFactor",0,r4,"updateSailTrim",0,function({tws:e=0,twa:t=0,awa:r=0,mainCar:n=.5,jibCar:a=.5,tension:i=.5}){let o,s=(o=1.9438444924574*e)>25?2:+(o>18),l=r4(s),c=r7(n,i),u=r7(a,i),h=ne(n,e),d=ne(a,e),A={tws:e,twa:t,awa:r},f={mainCar:n,jibCar:a,tension:i},p={mainSheet:nt(A,f,"mainSheet"),jibSheet:nt(A,f,"jibSheet"),vang:nt(A,f,"vang"),cunningham:nt(A,f,"cunningham")},m={mainSheet:nr(p.mainSheet),jibSheet:nr(p.jibSheet),vang:nr(p.vang),cunningham:nr(p.cunningham)};return{reefLevel:s,reefHeightFactor:l,mainCamber:c,jibCamber:u,mainTwist:h,jibTwist:d,tensions:p,tensionColors:m}}],5941);let nn=Math.floor(20),na=Math.ceil(160),ni={waterlineToMastFootHeight:.45,maxMastRotation:Math.PI/2,maxChordRotationPerSailLevel:Math.PI/3*2},no=({windParams:e={speed:5,hellman:.27},boatParams:t={mastrotation:0,heading:130,speed:5},sailParams:r={mastArea:0,sailArea:0,cunningham:1,angleOfAttack:20},reefLevel:n=0,mainCamber:a=1})=>{let i=(0,t4.useSignalKPath)("environment.wind.angleApparent",0),o=(0,t4.useSignalKPath)("environment.wind.speedApparent",0);(0,t4.useSignalKPath)("navigation.attitude"),(0,t4.useSignalKPath)("steering.rudderAngle",0);let s=(0,l.useRef)(),u=(0,l.useRef)(null),h=(0,l.useRef)(0),d=(0,l.useRef)(null),A=(0,l.useRef)(null),f=(0,l.useRef)(),p=(0,l.useRef)({}),m=(0,l.useMemo)(()=>{let e=new c.Group,t=new c.ConeGeometry(.08,.15,12),r=new c.MeshBasicMaterial({color:new c.Color(t6.oBlue),opacity:.3,transparent:!0,depthWrite:!1}),n=new c.Mesh(t,r);return n.position.set(0,-.075,0),e.add(n),e},[]);(0,l.useEffect)(()=>{let e=new c.Group,t={};for(let r=0;r<8;r+=.5){let n=m.clone();n.position.set(0,r,0),t[2*r]=n,e.add(n)}return e.position.set(0,0,0),f.current&&f.current.add(e),p.current=t,()=>{e.clear()}},[m]);let{geometry:B,sailClipWidthPerLevel:g}=(0,l.useMemo)(()=>{let e=new c.BufferGeometry,t=[],r=[],n=[];for(let e=0;e<=na;e++){let a,i,o=Math.min(50*e,8e3);o<900?(a=3600,i=3800+-200*o/900):i=a=3600-3210*(o-900)/7100+600*Math.sin((o-900)/7100*Math.PI);let s=0;for(let e=0;e<nn;e++){let n=a/(nn-1),l=n*e-i,c=n;l>.1&&(c=l>n?0:n-l),t.push(0===e?0:(s+c)/1e3,o/1e3,0),s=0===e?0:s+c,r.push(.35,.38,.42)}n.push(i===a?null:i)}let a=[];for(let e=0;e<na;e++)for(let t=1;t<nn;t++){let r=e*nn+t;a.push(r-1,r,r+nn-1,r,r+nn,r+nn-1)}return e.setAttribute("position",new c.Float32BufferAttribute(t,3)),e.setAttribute("color",new c.Float32BufferAttribute(r,3)),e.setIndex(a),e.computeVertexNormals(),{geometry:e,sailClipWidthPerLevel:n}},[]);return(0,l.useEffect)(()=>{if(!s.current)return;((e,t)=>{let r=p.current;if(!r)return console.error("apparentWindField is not initialized.");for(let n=0;n<8;n+=.5){let a=r8(e,n,t),i=r[2*n];if(!i){console.warn(`Apparent wind field cone at height ${n} is not defined.`);continue}i.scale.set(.1*a,a,.1*a),i.rotation.set(0,-Math.PI,Math.PI/2)}})(o,e.hellman);let a=s.current.geometry,l=a.attributes.position.array;r.cunningham!==d.current&&(A.current=new r6(3600,390,200,r.cunningham),d.current=r.cunningham),u.current||(u.current=a.clone());let f=8e3*r4(n),m=a.attributes.color,B=m.array,C=1e3*ni.waterlineToMastFootHeight,M=i;for(;M<0;)M+=2*Math.PI;for(;M>=2*Math.PI;)M-=2*Math.PI;let v=M>Math.PI?-1:1,y=M;y>Math.PI&&(y=2*Math.PI-y);let E=c.MathUtils.degToRad(r.angleOfAttack),b=A.current.mastAngleRad;y<.01&&(E=0);let F=Math.min(y-E+b,ni.maxMastRotation),I=new c.Vector3(0,1,0),R=null;for(let t=0;t<=na;t++){r8(o,(50*t+C)/1e3,e.hellman);let r=y-E;r<0?r=0:r>Math.PI/2&&(r=Math.PI/2);let n=r-F;R&&n-R>ni.maxChordRotationPerSailLevel&&(n=R+ni.maxChordRotationPerSailLevel),R=n;let a=g[t],i=A.current.getVerticesAngles(nn,200,a);for(let e=0;e<nn;e++){let r=(t*nn+e)*3,a=(t*nn+e)*3,o=new c.Vector3(u.current.attributes.position.array[r],u.current.attributes.position.array[r+1],u.current.attributes.position.array[r+2]);if(50*t>f){o.y=f/1e3,o.x=0,o.z=0,l[r]=o.x,l[r+1]=o.y,l[r+2]=o.z,B[a]=.2,B[a+1]=.2,B[a+2]=.2;continue}if(B[a]=.35,B[a+1]=.38,B[a+2]=.42,0===e){l[r]=o.x,l[r+1]=o.y,l[r+2]=o.z;continue}o.applyAxisAngle(I,-(n+i[e])*v),l[r]=o.x,l[r+1]=o.y,l[r+2]=o.z}}a.attributes.position.needsUpdate=!0,m.needsUpdate=!0;let T={...t,mastrotation:F*v};s.current&&s.current.rotateY(h.current-T.mastrotation),h.current=T.mastrotation},[o,i,e.hellman,r.cunningham,r.angleOfAttack,t,g,n,a]),(0,t8.jsxs)("mesh",{ref:s,position:[0,2,-1],rotation:[0,-Math.PI/2,0],children:[(0,t8.jsx)("bufferGeometry",{...B}),(0,t8.jsx)("group",{ref:f}),(0,t8.jsx)("meshBasicMaterial",{vertexColors:!0,transparent:!0,opacity:.4,side:c.DoubleSide,depthWrite:!1})]})},ns=new c.Vector3(0,.7,-6.2),nl=new c.Vector3(0,10,-1.05),nc=new c.Vector3(0,.9,-2),nu=({jibCar:e=.5,camber:t=.8,twist:r=0})=>{let n=(0,t4.useSignalKPath)("environment.wind.angleApparent",0),a=(0,t4.useSignalKPath)("environment.wind.speedApparent",0),i=(0,l.useRef)(),o=(0,l.useRef)(null),s=(0,l.useMemo)(()=>{let e=new c.BufferGeometry,t=[],r=[];for(let e=0;e<=30;e++){let n=e/30,a=ns.x+(nl.x-ns.x)*n,i=ns.y+(nl.y-ns.y)*n,o=ns.z+(nl.z-ns.z)*n,s=nc.x+(nl.x-nc.x)*n,l=nc.y+(nl.y-nc.y)*n,c=nc.z+(nl.z-nc.z)*n;for(let e=0;e<=8;e++){let n=e/8;t.push(a+(s-a)*n,i+(l-i)*n,o+(c-o)*n),r.push(.35,.38,.42)}}let n=[];for(let e=0;e<30;e++)for(let t=0;t<8;t++){let r=9*e+t,a=r+9;n.push(r,r+1,a),n.push(r+1,a+1,a)}return e.setAttribute("position",new c.Float32BufferAttribute(t,3)),e.setAttribute("color",new c.Float32BufferAttribute(r,3)),e.setIndex(n),e.computeVertexNormals(),e},[]);return(0,l.useEffect)(()=>{if(!i.current)return;let a=i.current.geometry,s=a.attributes.position,l=s.array;o.current||(o.current=new Float32Array(l));let u=o.current,h=n;for(;h<0;)h+=2*Math.PI;for(;h>=2*Math.PI;)h-=2*Math.PI;let d=h>Math.PI?-1:1,A=h;A>Math.PI&&(A=2*Math.PI-A);let f=Math.max(0,Math.min(Math.PI/2,.6*A-.3*e));new c.Vector3(0,1,0);for(let e=0;e<=30;e++){let n=e/30,a=ns.x+(nl.x-ns.x)*n;ns.y,nl.y,ns.y;let i=ns.z+(nl.z-ns.z)*n,o=(f+r*n)*d,s=.8*t*(1-.7*n);for(let t=0;t<=8;t++){let r=(9*e+t)*3,n=t/8,c=u[r],h=u[r+1],A=u[r+2],f=(c+=Math.sin(n*Math.PI)*s*d)-a,p=A-i,m=Math.cos(o),B=Math.sin(o);c=a+f*m-p*B,A=i+f*B+p*m,l[r]=c,l[r+1]=h,l[r+2]=A}}s.needsUpdate=!0,a.computeVertexNormals()},[n,a,e,t,r]),(0,t8.jsxs)("mesh",{ref:i,children:[(0,t8.jsx)("bufferGeometry",{...s}),(0,t8.jsx)("meshBasicMaterial",{vertexColors:!0,transparent:!0,opacity:.4,side:c.DoubleSide,depthWrite:!1})]})},nh=`
|
|
152
|
+
void main() {
|
|
153
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
154
|
+
}
|
|
155
|
+
`,nd=`
|
|
156
|
+
uniform float tension;
|
|
157
|
+
|
|
158
|
+
void main() {
|
|
159
|
+
vec3 green = vec3(0.06, 0.80, 0.31);
|
|
160
|
+
vec3 orange = vec3(1.00, 0.75, 0.00);
|
|
161
|
+
vec3 red = vec3(0.80, 0.00, 0.03);
|
|
162
|
+
|
|
163
|
+
vec3 color;
|
|
164
|
+
if (tension <= 0.5) {
|
|
165
|
+
color = mix(green, orange, tension * 2.0);
|
|
166
|
+
} else {
|
|
167
|
+
color = mix(orange, red, (tension - 0.5) * 2.0);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
gl_FragColor = vec4(color, 0.85);
|
|
171
|
+
}
|
|
172
|
+
`,nA={mainSheet:{label:"Mainsheet",points:[[0,2,1.2],[0,.9,2.5]]},jibSheet:{label:"Jib Sheet",points:[[0,.9,-2],[.8,.9,.5]]},vang:{label:"Vang",points:[[0,1.8,0],[0,.9,-.8]]},cunningham:{label:"Cunningham",points:[[0,2,-.8],[0,.9,-.8]]}},nf=({points:e,tension:t})=>{let r=(0,l.useRef)(),n=(0,l.useMemo)(()=>new c.ShaderMaterial({uniforms:{tension:{value:.5}},vertexShader:nh,fragmentShader:nd,transparent:!0,depthWrite:!1}),[]),a=(0,l.useMemo)(()=>{let t=new c.BufferGeometry,r=new Float32Array(3*e.length);for(let t=0;t<e.length;t++)r[3*t]=e[t][0],r[3*t+1]=e[t][1],r[3*t+2]=e[t][2];return t.setAttribute("position",new c.BufferAttribute(r,3)),t},[e]);return(0,l.useEffect)(()=>{n&&(n.uniforms.tension.value=t)},[t,n]),(0,t8.jsx)("line",{ref:r,geometry:a,material:n})},np=({tensions:e={}})=>(0,t8.jsx)("group",{children:Object.entries(nA).map(([t,r])=>(0,t8.jsx)(nf,{points:r.points,tension:e[t]||0},t))}),nm={backstay:{points:[[0,10,-1.05],[0,.9,3.5]]},vang:{points:[[0,2,.6],[0,.9,-.3]]},cunningham:{points:[[0,3,-1],[0,2,-1]]},outhaul:{points:[[0,2,1.6],[0,2,2.6]]}},nB=({points:e,tension:t})=>{let r=(0,l.useRef)(),n=(0,l.useMemo)(()=>{let t=new c.BufferGeometry,r=new Float32Array(3*e.length);for(let t=0;t<e.length;t++)r[3*t]=e[t][0],r[3*t+1]=e[t][1],r[3*t+2]=e[t][2];return t.setAttribute("position",new c.BufferAttribute(r,3)),t},[e]),a=(0,l.useMemo)(()=>(function(e){let t=Math.max(0,Math.min(1,e));if(t<=.25)return new c.Color(t/.25,1,0);if(t<=.5)return new c.Color(1,1-(t-.25)/.25*.35,0);if(t<=.75)return new c.Color(1,.65-(t-.5)/.25*.65,0);let r=(t-.75)/.25;return new c.Color(1-.3*r,0,.8*r)})(t),[t]);return(0,l.useEffect)(()=>{r.current&&r.current.color.copy(a)},[a]),(0,t8.jsx)("line",{geometry:n,children:(0,t8.jsx)("lineBasicMaterial",{ref:r,color:a,transparent:!0,opacity:.9,depthWrite:!1,linewidth:2})})},ng=()=>{let e=(0,t4.useSignalKPath)("environment.wind.angleApparent",0),t=(0,t4.useSignalKPath)("environment.wind.speedApparent",0),r=(0,l.useMemo)(()=>(function(e,t){let r=e;for(;r<0;)r+=2*Math.PI;for(;r>=2*Math.PI;)r-=2*Math.PI;let n=r>Math.PI?2*Math.PI-r:r,a=Math.max(0,1-n/Math.PI),i=Math.min(1,Math.abs(t)/15);return{backstay:Math.min(1,a*i*.9+.05),vang:Math.min(1,Math.sin(n)*i*.85+.05),cunningham:Math.min(1,a*i*.8),outhaul:Math.min(1,a*i*.75+.05)}})(e,t),[e,t]);return(0,t8.jsx)("group",{children:Object.entries(nm).map(([e,t])=>(0,t8.jsx)(nB,{points:t.points,tension:r[e]||0},e))})},nC=t3.default.env.ASSET_PREFIX||"./",nM=(e="default")=>`${nC}/boats/${e}/assets/scene-transformed.glb`,nv={name:"Default",modelPath:"default",capabilities:["navigation","rudder","sail","color"]};r3.preload(nM(),`${nC}/draco/`),e.s(["default",0,({showSail:e=!1,onUpdateInfoPanel:t,sailTrimData:r=null,...n})=>{let a=(0,l.useRef)(),i=(0,l.useRef)(),o=t7.default.getAll(),u=o.preferredWindSpeedPath||"speedTrue",h=o.preferredWindDirectionPath||"angleTrueWater",d=o.preferredHeadingPath||"courseOverGroundTrue",A=(0,l.useMemo)(()=>[`environment.wind.${h}`,`environment.wind.${u}`,"environment.wind.angleTrueWater","environment.wind.speedTrue","environment.wind.angleApparent","environment.wind.speedApparent","performance.beatAngle","performance.polarSpeed","performance.polarSpeedRatio","performance.velocityMadeGood","navigation.speedThroughWater",`navigation.${d}`,"navigation.headingTrue","navigation.courseOverGroundTrue","navigation.position"],[h,u,d]),f=(0,t4.useSignalKPaths)(A),p=(0,t4.useSignalKPath)("navigation.attitude"),m=(0,t4.useSignalKPath)("steering.rudderAngle",0),B=(0,l.useRef)({roll:0,pitch:0,yaw:0}),g=(0,l.useRef)(0);(0,l.useEffect)(()=>{p&&(B.current=p)},[p]),(0,l.useEffect)(()=>{g.current=m},[m]);let[C,M]=(0,l.useState)(()=>t7.default.getSelectedBoat()||nv);(0,l.useEffect)(()=>{M(t7.default.getSelectedBoat()||nv)},[o]);let v=(0,l.useMemo)(()=>nM(C.modelPath),[C]),y=C?.capabilities||[],{nodes:E,materials:b}=r3(v,`${nC}/draco/`),F=(0,l.useMemo)(()=>({primaryColor:o.primaryColor,metallicEffect:o.metallicEffect||!1}),[o.primaryColor,o.metallicEffect]);(0,l.useEffect)(()=>{if("default"===C.modelPath){if(!b?.fiberglass)return;b.fiberglass.color.set(F.primaryColor),b.fiberglass.metalness=+!!F.metallicEffect,b.fiberglass.roughness=F.metallicEffect?.2:1}else a.current&&a.current.traverse(e=>{e.isMesh&&e.material&&(Array.isArray(e.material)?e.material.forEach(e=>{e.color.set(F.primaryColor),e.metalness=+!!F.metallicEffect,e.roughness=F.metallicEffect?.2:1}):(e.material.color.set(F.primaryColor),e.material.metalness=+!!F.metallicEffect,e.material.roughness=F.metallicEffect?.2:1))});Object.values(b).forEach(e=>{e.map&&(e.map.minFilter=c.LinearFilter,e.map.magFilter=c.LinearFilter,e.map.anisotropy=1)})},[b,F,C,a]);let I=(0,l.useMemo)(()=>new c.Matrix4,[]),R=(0,l.useMemo)(()=>new c.Vector3(1,0,0),[]),T=(0,l.useMemo)(()=>new c.Euler(-Math.PI/2,Math.PI/2,0),[]);(0,s.D)(()=>{if(!a.current)return;let e=B.current,t=180*g.current/Math.PI;a.current&&a.current.rotation.set(e.pitch||0,0,2*Math.PI-(e.roll||0)),i.current&&(I.makeRotationFromEuler(T),i.current.setRotationFromMatrix(I),i.current.rotateOnAxis(R,-c.MathUtils.degToRad(t)))});let w=(0,l.useMemo)(()=>{let e={Default:()=>(0,t8.jsxs)(t8.Fragment,{children:[(0,t8.jsx)("mesh",{geometry:E.baba_metal_0.geometry,material:b.metal,position:[.24,.895,-5.546],rotation:[-Math.PI/2,0,1.968],scale:.027}),(0,t8.jsx)("mesh",{geometry:E.camadadirek_fiberglass_0.geometry,material:b.fiberglass,position:[0,5.267,-3.711],rotation:[2.054,0,Math.PI],scale:[-.042,.042,4.707]}),(0,t8.jsx)("mesh",{geometry:E.camadanyelkeni_bez_0.geometry,material:b.mcaterial,position:[0,5.267,-3.711],rotation:[2.054,0,Math.PI],scale:[-.042,.042,4.707]}),(0,t8.jsx)("mesh",{geometry:E.camadaonbaglay_metal_0.geometry,material:b.metal,position:[0,.891,-5.958],rotation:[-Math.PI/2,0,0],scale:.02}),(0,t8.jsx)("mesh",{geometry:E.capa_metal_0.geometry,material:b.metal,position:[0,.671,-6.173],rotation:[-Math.PI/2,0,0],scale:.348}),(0,t8.jsx)("mesh",{geometry:E.direk_fiberglass_0.geometry,material:b.fiberglass,position:[0,4.315,-1.056],rotation:[Math.PI/2,0,Math.PI],scale:[-.113,.113,5.203]}),(0,t8.jsx)("mesh",{geometry:E.duman_ahsap_0.geometry,material:b.ahsap,position:[-.011,.854,3.487],rotation:[Math.PI,0,Math.PI/2],scale:[.045,.045,.011]}),(0,t8.jsx)("mesh",{geometry:E.dumenyuvasi_ahsap_0.geometry,material:b.ahsap,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,t8.jsx)("mesh",{geometry:E.dumenyuvasi_cam_0.geometry,material:b.material_5,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,t8.jsx)("mesh",{geometry:E.dumenyuvasi_fiberglass_0.geometry,material:b.fiberglass,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,t8.jsx)("mesh",{geometry:E.govde_fiberglass2_0.geometry,material:b.fiberglass2,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,t8.jsx)("mesh",{geometry:E.govde_fiberglass_0.geometry,material:b.fiberglass,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,t8.jsx)("mesh",{geometry:E.govde_metal_0.geometry,material:b.metal,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,t8.jsx)("mesh",{geometry:E.halattutucu_fiberglass2_0.geometry,material:b.fiberglass2,position:[-1.044,.939,1.809],rotation:[-Math.PI/2,0,0],scale:[.016,.059,.016]}),(0,t8.jsx)("mesh",{geometry:E.ip001_metal_0.geometry,material:b.metal,position:[-.231,7.608,-.621],rotation:[-2.322,.222,-1.556],scale:[.007,.007,.011]}),(0,t8.jsx)("mesh",{geometry:E.pervan_fiberglass_0.geometry,material:b.fiberglass,position:[0,-1.005,1.561],rotation:[-Math.PI/2,Math.PI/2,0],scale:[.154,.094,.104]}),(0,t8.jsx)("mesh",{geometry:E.pervane_metal_0.geometry,material:b.metal,position:[0,-1.122,1.75],scale:.034}),(0,t8.jsx)("mesh",{ref:i,geometry:E.rudder_fiberglass_0.geometry,material:b.fiberglass,position:[0,-1.153,3.486],rotation:[-Math.PI/2,Math.PI/2,0],scale:[.573,.262,.262]}),(0,t8.jsx)("mesh",{geometry:E.salma_fiberglass_0.geometry,material:b.fiberglass,position:[0,-1.953,-.739],scale:[.149,.108,.756]}),(0,t8.jsx)("mesh",{geometry:E.ustcam_cam_0.geometry,material:b.material_5,position:[-.337,.974,-3.127],rotation:[-Math.PI/2,0,0],scale:[-.183,.133,.025]}),(0,t8.jsx)("mesh",{geometry:E.ustcam_fiberglass_0.geometry,material:b.fiberglass,position:[-.337,.974,-3.127],rotation:[-Math.PI/2,0,0],scale:[-.183,.133,.025]}),(0,t8.jsx)("mesh",{geometry:E.ustgovde_fiberglass_0.geometry,material:b.fiberglass,position:[0,.832,-2.741],rotation:[-Math.PI/2,0,0],scale:[.566,.7,1.212]}),(0,t8.jsx)("mesh",{geometry:E.ustgovdekzak_ahsap_0.geometry,material:b.ahsap,position:[0,.862,-2.741],rotation:[-Math.PI/2,0,0],scale:[.566,.7,1.212]}),(0,t8.jsx)("mesh",{geometry:E.vinc_metal_0.geometry,material:b.metal,position:[-1.07,.977,2.02],rotation:[-Math.PI/2,0,0],scale:.065}),(0,t8.jsx)("mesh",{geometry:E.yancam002_cam_0.geometry,material:b.material_5,position:[-.984,.591,-3.772],rotation:[Math.PI,-1.241,-Math.PI/2],scale:[.095,.28,.014]}),(0,t8.jsx)("mesh",{geometry:E.yancam002_fiberglass_0.geometry,material:b.fiberglass,position:[-.984,.591,-3.772],rotation:[Math.PI,-1.241,-Math.PI/2],scale:[.095,.28,.014]}),(0,t8.jsx)("mesh",{geometry:E.yankoruma_metal_0.geometry,material:b.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,t8.jsx)("mesh",{geometry:E.yankoruma_metal_0001.geometry,material:b.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,t8.jsx)("mesh",{geometry:E.yankoruma_metal_0002.geometry,material:b.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,t8.jsx)("mesh",{geometry:E.zincir_metal_0.geometry,material:b.metal,position:[-.001,.88,-6.258],rotation:[-1.56,-.031,-.149],scale:.004}),(0,t8.jsx)("mesh",{geometry:E.zincir_metal_0001.geometry,material:b.metal,position:[-.001,.88,-6.258],rotation:[-1.56,-.031,-.149],scale:.004}),(0,t8.jsx)("mesh",{geometry:E.zincirdeposu_fiberglass2_0.geometry,material:b.fiberglass2,position:[0,.863,-5.779],rotation:[-Math.PI/2,0,0],scale:[.103,.088,.009]}),(0,t8.jsx)("mesh",{geometry:E.zincirmakara_metal_0.geometry,material:b.metal,position:[0,.869,-6.305],rotation:[-2.159,1.564,.59],scale:[.01,.01,.016]}),(0,t8.jsx)("mesh",{geometry:E.zincirray_ahsap_0.geometry,material:b.ahsap,position:[0,.864,-6.113],rotation:[-Math.PI/2,0,0],scale:[.017,.181,.003]})]}),Optimist:()=>(0,t8.jsxs)(t8.Fragment,{children:[(0,t8.jsx)("mesh",{geometry:E.body_body_0.geometry,material:b.body,position:[-.054,.272,-.022],rotation:[-1.571,.01,.01],scale:[1,5.242,1]}),(0,t8.jsx)("mesh",{geometry:E.boom_aluminium_0.geometry,material:b.aluminium,position:[-.019,2.771,.964],rotation:[0,.01,-.01],scale:[.15,.15,4.609]}),(0,t8.jsx)("mesh",{geometry:E.rubber_joint__0.geometry,material:b.rubber_joint__0,position:[-.008,1.407,3.453],rotation:[1.571,-.01,-.01],scale:[-.037,.056,.079]}),(0,t8.jsx)("mesh",{geometry:E.sail_sail_0.geometry,material:b.sail,position:[.038,8.739,.698],rotation:[2.356,1.557,2.356],scale:[-5.728,4.361,4.361]})]}),Ship:()=>(0,t8.jsx)("mesh",{geometry:E.Object_10.geometry,material:b.material_0,position:[0,-.55,0],rotation:[-1.558,.002,3.139],scale:.004}),Windsurf:()=>(0,t8.jsx)("mesh",{geometry:E["body_Material_#30_0"].geometry,material:b.Material_30,position:[-.007,0,-.071],rotation:[-Math.PI/2,0,0],scale:.002}),Sailboat:()=>(0,t8.jsx)("mesh",{geometry:E.sailboat.geometry,material:b.texture,position:[0,-1.5,0],rotation:[-Math.PI,.011,-Math.PI],scale:.219}),RM1080:()=>(0,t8.jsxs)(t8.Fragment,{children:[(0,t8.jsx)("mesh",{geometry:E.Body_1.geometry,material:b.PaletteMaterial003}),(0,t8.jsx)("mesh",{geometry:E.Body_2.geometry,material:b.PaletteMaterial001}),(0,t8.jsx)("mesh",{geometry:E.Body_3.geometry,material:b.PaletteMaterial002})]})};return e[C.name]||e.Default},[C.name,E,b]),x=(0,l.useMemo)(()=>({name:C.name||"Sailboat",type:"sailboat",trueWindAngle:f[`environment.wind.${h}`]??f["environment.wind.angleTrueWater"]??0,trueWindSpeed:f[`environment.wind.${u}`]??f["environment.wind.speedTrue"]??0,appWindAngle:f["environment.wind.angleApparent"]||0,appWindSpeed:f["environment.wind.speedApparent"]||0,beatAngle:f["performance.beatAngle"]||0,polarSpeed:f["performance.polarSpeed"]||0,polarSpeedRatio:f["performance.polarSpeedRatio"]||0,velocityMadeGood:f["performance.velocityMadeGood"]||0,speedThroughWater:f["navigation.speedThroughWater"]||0,headingTrue:f[`navigation.${d}`]??f["navigation.headingTrue"]??0,courseOverGroundTrue:f["navigation.courseOverGroundTrue"]||0,position:f["navigation.position"]||{latitude:0,longitude:0}}),[f,C.name]),[G,D]=(0,l.useState)(!1);return(0,t8.jsxs)("group",{...n,ref:a,dispose:null,onClick:()=>{let e=!G;D(e),t&&t(e?(e=>{let t=[];if(e.name&&t.push(`Vessel: ${e.name}`),Number.isFinite(e.trueWindSpeed)){let r=(0,t5.toDegrees)(e.trueWindAngle);t.push(`Wind: ${(0,t5.toKnots)(e.trueWindSpeed)} kn${null!==r?` @ ${r}\xb0`:""}`)}if(Number.isFinite(e.appWindSpeed)){let r=(0,t5.toDegrees)(e.appWindAngle);t.push(`App Wind: ${(0,t5.toKnots)(e.appWindSpeed)} kn${null!==r?` @ ${r}\xb0`:""}`)}return e.speedThroughWater&&t.push(`STW: ${(0,t5.toKnots)(e.speedThroughWater)} kn`),void 0!==e.headingTrue&&null!==e.headingTrue&&t.push(`HDG: ${(0,t5.toDegrees)(e.headingTrue)}\xb0`),void 0!==e.courseOverGroundTrue&&null!==e.courseOverGroundTrue&&t.push(`COG: ${(0,t5.toDegrees)(e.courseOverGroundTrue)}\xb0`),e.velocityMadeGood&&t.push(`VMG: ${(0,t5.toKnots)(e.velocityMadeGood)} kn`),e.polarSpeedRatio&&t.push(`Polar: ${(100*e.polarSpeedRatio).toFixed(0)}%`),e.position&&void 0!==e.position.latitude&&void 0!==e.position.longitude&&t.push(`Pos: ${e.position.latitude.toFixed(4)}\xb0, ${e.position.longitude.toFixed(4)}\xb0`),t.join("\n")})(x):null)},children:[y.includes("sail")&&e&&(0,t8.jsxs)(t8.Fragment,{children:[(0,t8.jsx)(no,{reefLevel:r?r.reefLevel:0,mainCamber:r?r.mainCamber:1}),(0,t8.jsx)(nu,{jibCar:r?r.trimState.jibCar:.5,camber:r?r.jibCamber:.8,twist:r?r.jibTwist:0}),!1!==t7.default.get("showRigging")&&(0,t8.jsx)(ng,{}),r&&r.tensions&&(0,t8.jsx)(np,{tensions:r.tensions})]}),(0,t8.jsx)(w,{})]})}],66326)}]);
|