@needle-tools/engine 3.37.12-alpha.3 → 3.37.12-alpha.5
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/CHANGELOG.md +6 -0
- package/dist/needle-engine.js +28 -20
- package/dist/needle-engine.light.js +28 -20
- package/dist/needle-engine.light.min.js +3 -3
- package/dist/needle-engine.light.umd.cjs +3 -3
- package/dist/needle-engine.min.js +3 -3
- package/dist/needle-engine.umd.cjs +3 -3
- package/lib/engine-components/webxr/WebARSessionRoot.js +4 -2
- package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -1
- package/package.json +2 -2
- package/plugins/vite/config.js +4 -4
- package/plugins/vite/meta.js +2 -2
- package/src/engine-components/webxr/WebARSessionRoot.ts +4 -2
|
@@ -4341,7 +4341,7 @@ void main() {
|
|
|
4341
4341
|
}`),r(Ws,"blipMaterial"),r(Ws,"mesh");function CY(t){return Ws.copyTexture(t)}function ciA(t,A=!1){return Ws.textureToCanvas(t,A)}function liA(t){return typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas||typeof ImageBitmap<"u"&&t instanceof ImageBitmap}function PU(t,A=[]){const e=new mt;e.makeEmpty();const i=[];function g(o){let s=!0;if(o.visible&&eY(o)!==!1&&!(o.type==="TransformControlsGizmo"||o.type==="TransformControlsPlane")&&(o instanceof xR&&(s=!1),o instanceof Zy&&(s=!1),o instanceof $H&&(s=!1),o.material instanceof Ky&&(s=!1),o instanceof dA||(s=!1),!(A!=null&&A.includes(o))&&o.isUI!==!0)){if(s){const C=o.children;o.children=i;const a=o.position,n=o.scale;if(Number.isNaN(a.x)||Number.isNaN(a.y)||Number.isNaN(a.z)){console.warn(`Object "${o.name}" has NaN values in position or scale.... will ignore it`,a,n);return}e.expandByObject(o,!0),o.children=C}for(const C of o.children)g(C)}}let I=!1;for(const o of t)o&&(I=!0,o.updateMatrixWorld(),g(o));return I||console.warn("No objects to fit camera to..."),e}let w0=!1;r$((...t)=>{var A;Be()&&(A=at.Current)!=null&&A.isInXR&&(Gh(!0),aY("error",...t))});function Gh(t){if(t){if(w0)return;w0=!0,uiA()}else{if(!w0)return;w0=!1,piA()}}const xd={log:void 0,warn:void 0,error:void 0};class diA{constructor(){r(this,"familyName","needle-xr"),r(this,"root",null),r(this,"context",null),r(this,"defaultFontSize",.06),r(this,"targetObject",new SA),r(this,"userForwardViewPoint",new f),r(this,"oneEuroFilter",new bU(90,.8)),r(this,"_lastElementRemoveTime",0),r(this,"onBeforeRender",()=>{var A,e;const i=(A=this.context)==null?void 0:A.mainCamera;if(this.context&&i instanceof xe){const g=this.getRoot();Number.isNaN(g.position.x)&&g.position.set(0,0,0),Number.isNaN(g.quaternion.x)&&g.quaternion.set(0,0,0,1),this.context.scene.add(this.targetObject);const I=((e=this.context.xr)==null?void 0:e.rigScale)??1,o=3.5*I,s=i.worldForward;s.y=0,s.normalize().multiplyScalar(o),this.userForwardViewPoint.copy(i.worldPosition).sub(s),this.targetObject.position.distanceTo(this.userForwardViewPoint)>2*I&&(this.targetObject.position.copy(this.userForwardViewPoint),Kd(this.targetObject,i,!0,!0),this.targetObject.rotateY(Math.PI)),this.oneEuroFilter.filter(this.targetObject.position,g.position,this.context.time.time);const C=this.context.time.deltaTime;if(g.quaternion.slerp(this.targetObject.quaternion,C*5),g.scale.setScalar(I),this.targetObject.removeFromParent(),this.context.scene.add(g),this.context.time.time-this._lastElementRemoveTime>.1){this._lastElementRemoveTime=this.context.time.time;const a=Date.now();for(let n=0;n<this._activeTexts.length;n++){const B=this._activeTexts[n];if(B instanceof xt.Text&&a-B._activatedTime>2e4){B.removeFromParent(),this._textBuffer.push(B),this._activeTexts.splice(n,1);break}}}}}),r(this,"textOptions",{fontSize:this.defaultFontSize,fontFamily:this.familyName,padding:.03,margin:.005,color:0,backgroundColor:16777215,backgroundOpacity:.4,borderRadius:.03,offset:.025}),r(this,"_textBuffer",[]),r(this,"_activeTexts",[]),this.ensureFont()}onEnable(){this.context=at.Current||at.All[0],this.context.pre_render_callbacks.push(this.onBeforeRender)}onDisable(){var A,e,i;(e=this.context)==null||e.pre_render_callbacks.splice((A=this.context)==null?void 0:A.pre_render_callbacks.indexOf(this.onBeforeRender),1),(i=this.root)==null||i.removeFromParent()}addLog(A,e){const i=this.getRoot(),g=this.getText();let I=16777215,o=0;switch(A){case"log":I=16777215,o=0;break;case"warn":I=16772761,o=4465152;break;case"error":I=16755370,o=7798784;break}e.length>1e3&&(e=e.substring(0,1e3)+"...");const s=new Date().toISOString().split("T")[1].split(".")[0];g.textContent="["+s+"] "+e,g.visible=!0,g._activatedTime=Date.now(),i.add(g),this._activeTexts.push(g),this.context&&this.context.scene.add(i),g.set({backgroundColor:I,color:o}),xt.update()}ensureFont(){let A=xt.FontLibrary.getFontFamily(this.familyName);if(!A){A=xt.FontLibrary.addFontFamily(this.familyName);const e=A.addVariant("normal","normal","./include/needle/arial-msdf.json","./include/needle/arial.png");e?.addEventListener("ready",()=>{xt.update()})}}getText(){const A=this.getRoot();if(this._textBuffer.length>0){const i=this._textBuffer.pop();return i.visible=!0,setTimeout(()=>this.disableDepthTestRecursive(i),100),i}if(A.children.length>20&&this._activeTexts.length>0)return this._activeTexts.shift();const e=new xt.Text(this.textOptions);return setTimeout(()=>this.disableDepthTestRecursive(e),500),setTimeout(()=>this.disableDepthTestRecursive(e),1500),e}disableDepthTestRecursive(A,e=0){for(let g=0;g<A.children.length;g++){const I=A.children[g];I instanceof SA&&this.disableDepthTestRecursive(I,e+1)}A.renderOrder=10*e,A.layers.set(2);const i=A.material;i&&(i.depthWrite=!1,i.depthTest=!1,i.transparent=!0),e===0&&xt.update()}getRoot(){if(this.root)return this.root;const A=this.defaultFontSize,e={boxSizing:"border-box",fontFamily:this.familyName,width:"2.6",fontSize:A,color:0,lineHeight:1,backgroundColor:16777215,backgroundOpacity:0,whiteSpace:"pre-wrap",flexDirection:"column-reverse"};return this.root=new xt.Block(e),this.root}}let Zs=null;function uiA(){Zs||(Zs=new diA),Zs.onEnable();for(const t in xd){xd[t]=console[t];let A=!1;console[t]=function(){var e;if((e=xd[t])==null||e.apply(console,arguments),!A)try{A=!0,aY(t,...arguments)}finally{A=!1}}}}function piA(){Zs?.onDisable();for(const t in xd)console[t]=xd[t]}const Ld=new Map;function aY(t,...A){try{switch(Ld.clear(),t){case"log":Zs?.addLog("log",e());break;case"warn":Zs?.addLog("warn",e());break;case"error":Zs?.addLog("error",e());break}}catch(I){console.error("Error in spatial console",I)}finally{Ld.clear()}function e(){let I="";for(let o=0;o<A.length;o++){const s=A[o];I+=i(s),o<A.length-1&&(I+=", ")}return I}function i(I,o=0){if(typeof I=="string")return'"'+I+'"';if(typeof I=="number"){if(I%1!==0){const s=I.toFixed(5),C=s.indexOf(".");let a=s.length-1;for(;a>C&&s[a]==="0";)a--;return s.substring(0,a+1)}return I.toString()}else if(Array.isArray(I)){let s="[";for(let C=0;C<I.length;C++){const a=I[C];s+=i(a,o+1),C<I.length-1&&(s+=", ")}return s+="]",s}else{if(I===null)return"null";if(I===void 0)return"undefined";if(typeof I=="function")return I.name+"()"}if(I instanceof eA)return`(${i(I.x)}, ${i(I.y)})`;if(I instanceof f)return`(${i(I.x)}, ${i(I.y)}, ${i(I.z)})`;if(I instanceof Ae)return`(${i(I.x)}, ${i(I.y)}, ${i(I.z)}, ${i(I.w)})`;if(I instanceof UA)return`(${i(I.x)}, ${i(I.y)}, ${i(I.z)}, ${i(I.w)})`;if(I instanceof qe||I instanceof Ye)return I.name;if(I instanceof Je)return`[${I.elements.join(", ")}]`;if(I instanceof FA)return`[${I.elements.join(", ")}]`;if(I instanceof rI)return I.mask.toString();if(typeof I=="object"){if(Ld.has(I))return"*";let s=`{
|
|
4342
4342
|
`;s+=g(o);const C=Object.keys(I);let a="";for(let n=0;n<C.length;n++){const B=C[n],Q=I[B];if(Ld.has(Q)){a+="";continue}Ld.set(Q,!0),a+=B+":"+i(Q,o+1),n<C.length-1&&(a+=", "),a.length>=60&&(a+=`
|
|
4343
4343
|
`,a+=g(o),s+=a,a="")}return s+=a,s+=`
|
|
4344
|
-
}`,s}return I}function g(I){let o="";for(let s=0;s<I;s++)o+=" ";return o}}const DiA=tA("nodevlogs");function Qi(t,A=mo.Log){UC(A,t)}function Ei(t){Qi(t,mo.Warn)}function jU(t){Qi(t,mo.Error)}let WU;function Be(){return DiA?!1:WU!==void 0?WU:NI()}function wiA(t){WU=t}const nY=tA("debugdefines");Mh('if(!globalThis[""3.37.12-alpha.
|
|
4344
|
+
}`,s}return I}function g(I){let o="";for(let s=0;s<I;s++)o+=" ";return o}}const DiA=tA("nodevlogs");function Qi(t,A=mo.Log){UC(A,t)}function Ei(t){Qi(t,mo.Warn)}function jU(t){Qi(t,mo.Error)}let WU;function Be(){return DiA?!1:WU!==void 0?WU:NI()}function wiA(t){WU=t}const nY=tA("debugdefines");Mh('if(!globalThis[""3.37.12-alpha.5""]) globalThis[""3.37.12-alpha.5""] = "0.0.0";'),Mh('if(!globalThis[""undefined""]) globalThis[""undefined""] = "unknown";'),Mh('if(!globalThis[""Sun May 19 2024 11:30:57 GMT+0200 (Central European Summer Time)""]) globalThis[""Sun May 19 2024 11:30:57 GMT+0200 (Central European Summer Time)""] = "unknown";'),Mh('globalThis["__NEEDLE_ENGINE_VERSION__"] = "3.37.12-alpha.5";'),Mh('globalThis["__NEEDLE_ENGINE_GENERATOR__"] = "undefined";'),Mh('globalThis["__NEEDLE_PROJECT_BUILD_TIME__"] = "Sun May 19 2024 11:30:57 GMT+0200 (Central European Summer Time)";');const Vs="3.37.12-alpha.5",y0="undefined",ZU="Sun May 19 2024 11:30:57 GMT+0200 (Central European Summer Time)";nY&&console.log(`Engine version: ${Vs} (generator: ${y0})
|
|
4345
4345
|
Project built at ${ZU}`);const Ha="needle_isActiveInHierarchy",aQ="builtin_components",_d="needle_editor_guid";function Mh(t){try{(0,eval)(t)}catch(A){nY&&console.error(A)}}const yiA='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 187.74"><defs><linearGradient id="a" x1="89.64" y1="184.81" x2="90.48" y2="21.85" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62d399"/><stop offset=".51" stop-color="#acd842"/><stop offset=".9" stop-color="#d7db0a"/></linearGradient><linearGradient id="b" x1="69.68" y1="178.9" x2="68.08" y2="16.77" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ba398"/><stop offset=".5" stop-color="#4ca352"/><stop offset="1" stop-color="#76a30a"/></linearGradient><linearGradient id="c" x1="36.6" y1="152.17" x2="34.7" y2="84.19" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#36a382"/><stop offset=".54" stop-color="#49a459"/><stop offset="1" stop-color="#76a30b"/></linearGradient><linearGradient id="d" x1="15.82" y1="153.24" x2="18" y2="90.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#267880"/><stop offset=".51" stop-color="#457a5c"/><stop offset="1" stop-color="#717516"/></linearGradient><linearGradient id="e" x1="135.08" y1="135.43" x2="148.93" y2="63.47" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b0d939"/><stop offset="1" stop-color="#eadb04"/></linearGradient><linearGradient id="f" x1="-4163.25" y1="2285.12" x2="-4160.81" y2="2215.34" gradientTransform="rotate(20 4088.49 13316.712)" gradientUnits="userSpaceOnUse"><stop offset=".17" stop-color="#74af52"/><stop offset=".48" stop-color="#99be32"/><stop offset="1" stop-color="#c0c40a"/></linearGradient><symbol id="g" viewBox="0 0 160 187.74"><path style="fill:url(#a)" d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75z"/><path style="fill:url(#b)" d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98z"/><path style="fill:url(#c)" d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z"/><path style="fill:url(#d)" d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04z"/><path style="fill:#9c3" d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5z"/><path style="fill:url(#e)" d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59z"/><path style="fill:url(#f)" d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z"/><path style="fill:#ffe113" d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1z"/><path style="fill:#f3e600" d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75z"/></symbol></defs><use width="160" height="187.74" xlink:href="#g"/></svg>',SiA=btoa(yiA),miA="data:image/svg+xml;base64,"+SiA,fiA=miA,kiA=`<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" version="1.1" viewBox="0 0 1014 282" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m665.95 132.73v44.88l-10.56-8.4c-0.8-0.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18 0.4-6.06 1.2s-3.54 1.8-4.98 3-2.56 2.5-3.36 3.9-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c0.32 0.24 0.56 0.44 0.72 0.6s0.36 0.32 0.6 0.48c0.96-1.2 2.14-2.28 3.54-3.24s2.92-1.76 4.56-2.4 3.34-1.14 5.1-1.5 3.44-0.54 5.04-0.54c1.44 0 2.92 0.04 4.44 0.12s2.84 0.28 3.96 0.6c4.56 1.12 7.8 3.12 9.72 6s2.88 6.56 2.88 11.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m732.38 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m795.93 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m858.57 97.21c0.64 0.48 0.96 1.16 0.96 2.04v74.88c-0.08 1.04-0.12 2.12-0.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18s-2.06-1.66-2.46-1.98c-1.76 2.48-4.26 4.44-7.5 5.88s-7.02 2.16-11.34 2.16c-3.84 0-7.4-0.7-10.68-2.1s-6.14-3.44-8.58-6.12-4.34-5.94-5.7-9.78-2.04-8.16-2.04-12.96c0-4.32 0.78-8.34 2.34-12.06s3.6-6.92 6.12-9.6 5.38-4.78 8.58-6.3 6.48-2.28 9.84-2.28c2.56 0 4.82 0.22 6.78 0.66s3.68 1.06 5.16 1.86 2.78 1.74 3.9 2.82 2.16 2.22 3.12 3.42v-35.04l10.68 8.64zm-27.96 67.92c3.6 0 6.52-0.68 8.76-2.04s3.98-3.06 5.22-5.1 2.1-4.22 2.58-6.54 0.72-4.44 0.72-6.36v-1.2c0-1.12-0.22-2.7-0.66-4.74s-1.28-4.06-2.52-6.06-3-3.7-5.28-5.1-5.22-2.02-8.82-1.86c-3.44 0-6.26 0.74-8.46 2.22s-3.96 3.26-5.28 5.34-2.24 4.2-2.76 6.36-0.78 3.92-0.78 5.28c0 1.84 0.24 3.92 0.72 6.24s1.36 4.48 2.64 6.48 3.04 3.68 5.28 5.04 5.12 2.04 8.64 2.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m882.81 97.09c0.64 0.48 0.96 1.12 0.96 1.92l-0.12 41.04v37.08l-10.56-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-77.88l10.8 8.64z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m950.36 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.8559 0 0 .7642 45.348 36.475)"> <g transform="translate(2.7114)"> <path d="m3.935 173.02c-0.331 0-0.497-0.402-0.497-1.207v-51.002c0-0.738 0.138-1.107 0.414-1.107h1.781c0.277 0 0.415 0.335 0.415 1.006v5.935c0 0.336 0.027 0.553 0.083 0.654 0.055 0.101 0.151-0.017 0.289-0.352 0.912-1.744 1.754-3.236 2.527-4.477 0.773-1.24 1.554-2.179 2.341-2.816s1.65-0.956 2.588-0.956c1.685 0 3.011 0.922 3.977 2.766 0.967 1.845 1.602 3.84 1.905 5.986 0.056 0.268 0.139 0.369 0.249 0.302s0.221-0.235 0.331-0.503c0.939-1.811 1.802-3.353 2.589-4.628 0.787-1.274 1.581-2.246 2.382-2.917s1.671-1.006 2.61-1.006c2.016 0 3.569 1.392 4.66 4.175 1.09 2.783 1.636 6.421 1.636 10.915v37.925c0 0.871-0.18 1.307-0.539 1.307h-1.739c-0.138 0-0.249-0.1-0.332-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.338-6.321-1.015-8.3-0.676-1.978-1.76-2.967-3.251-2.967-0.884 0-1.726 0.386-2.527 1.157s-1.519 1.727-2.154 2.867-1.201 2.213-1.699 3.219c-0.248 0.469-0.421 0.905-0.517 1.308-0.097 0.402-0.145 0.972-0.145 1.71v37.221c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.166 0-0.29-0.1-0.373-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.332-6.321-0.994-8.3-0.663-1.978-1.754-2.967-3.273-2.967-1.242 0-2.375 0.704-3.396 2.112-1.022 1.409-2.223 3.555-3.604 6.439v39.031c0 0.805-0.18 1.207-0.539 1.207h-1.698z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m53.642 166.28c-1.077 2.549-2.237 4.477-3.479 5.785-1.243 1.307-2.61 1.961-4.101 1.961-2.154 0-3.853-1.324-5.095-3.973-1.243-2.649-1.864-6.187-1.864-10.613 0-3.488 0.4-6.489 1.201-9.004s1.988-4.51 3.562-5.985c1.574-1.476 3.521-2.414 5.841-2.817l3.686-0.704c0.221-0.067 0.394-0.218 0.518-0.453 0.124-0.234 0.187-0.587 0.187-1.056v-2.917c0-3.89-0.504-6.975-1.512-9.255s-2.354-3.42-4.039-3.42c-1.298 0-2.472 0.72-3.521 2.162s-2.002 3.572-2.858 6.388c-0.083 0.268-0.159 0.453-0.228 0.554-0.069 0.1-0.172 0.083-0.311-0.051l-1.698-1.71c-0.083-0.134-0.138-0.285-0.166-0.453-0.027-0.167 0.014-0.452 0.125-0.855 0.856-3.353 2.009-6.052 3.459-8.098 1.449-2.045 3.224-3.068 5.322-3.068 1.74 0 3.211 0.687 4.412 2.062s2.112 3.37 2.734 5.986c0.621 2.615 0.932 5.7 0.932 9.255v35.712c0 0.536-0.035 0.888-0.104 1.056s-0.2 0.251-0.393 0.251h-1.533c-0.166 0-0.29-0.117-0.373-0.352-0.083-0.234-0.124-0.553-0.124-0.955l-0.083-5.231c-0.055-0.939-0.221-1.006-0.497-0.202zm0.456-19.314c0-1.14-0.194-1.643-0.58-1.509l-3.107 0.603c-1.436 0.202-2.686 0.638-3.749 1.308-1.063 0.671-1.953 1.543-2.671 2.616s-1.257 2.33-1.616 3.772-0.538 3.102-0.538 4.98c0 3.152 0.455 5.616 1.367 7.393 0.911 1.778 2.14 2.666 3.686 2.666 0.939 0 1.85-0.419 2.734-1.257s1.671-1.895 2.361-3.169c0.663-1.408 1.181-2.85 1.553-4.326 0.373-1.475 0.56-2.883 0.56-4.225v-8.852z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m79.034 173.02c-0.166 0-0.297-0.117-0.394-0.352-0.096-0.234-0.145-0.553-0.145-0.955v-4.628c0-0.536-0.041-0.838-0.124-0.905s-0.207 0.1-0.373 0.503c-0.276 0.67-0.69 1.593-1.242 2.766-0.553 1.174-1.271 2.23-2.154 3.169-0.884 0.939-1.961 1.408-3.231 1.408-1.74 0-3.314-0.989-4.722-2.967-1.409-1.979-2.534-4.963-3.376-8.953-0.843-3.991-1.264-8.937-1.264-14.838 0-5.701 0.415-10.68 1.243-14.939s1.988-7.595 3.479-10.009c1.492-2.415 3.204-3.622 5.137-3.622 1.436 0 2.616 0.57 3.541 1.71 0.926 1.14 1.719 2.381 2.382 3.722 0.249 0.47 0.414 0.637 0.497 0.503s0.125-0.536 0.125-1.207v-23.841c0-0.805 0.151-1.208 0.455-1.208h1.864c0.276 0 0.414 0.369 0.414 1.107v72.128c0 0.537-0.041 0.905-0.124 1.107-0.083 0.201-0.235 0.301-0.455 0.301h-1.533zm-0.621-42.049c-0.939-2.213-1.885-3.94-2.838-5.181s-2.009-1.861-3.169-1.861c-1.463 0-2.768 0.889-3.914 2.666s-2.044 4.376-2.693 7.796-0.973 7.578-0.973 12.474c0 5.097 0.338 9.272 1.015 12.524 0.676 3.253 1.567 5.651 2.672 7.193 1.104 1.543 2.305 2.314 3.603 2.314 1.188 0 2.258-0.704 3.211-2.113 0.952-1.408 1.705-3.118 2.257-5.13s0.829-3.957 0.829-5.835v-24.847z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m89.514 149.38c0 3.42 0.345 6.606 1.035 9.557 0.691 2.951 1.609 5.315 2.755 7.092s2.437 2.666 3.873 2.666c1.519 0 2.837-0.738 3.956-2.213 1.118-1.476 2.064-3.655 2.837-6.539 0.083-0.336 0.166-0.52 0.249-0.554 0.083-0.033 0.179 0.017 0.29 0.151l1.408 1.912c0.221 0.268 0.235 0.67 0.041 1.207-0.69 2.548-1.47 4.661-2.34 6.337-0.87 1.677-1.857 2.935-2.962 3.773-1.104 0.838-2.319 1.257-3.645 1.257-2.043 0-3.838-1.14-5.385-3.42-1.546-2.28-2.761-5.482-3.645-9.607-0.884-4.124-1.325-8.836-1.325-14.134 0-5.901 0.455-10.931 1.367-15.089 0.911-4.158 2.14-7.377 3.686-9.658 1.547-2.28 3.3-3.42 5.261-3.42 1.988 0 3.714 1.073 5.178 3.219 1.463 2.146 2.595 5.231 3.396 9.255s1.201 8.886 1.201 14.587c0 0.469-0.02 0.939-0.062 1.408-0.041 0.469-0.214 0.704-0.517 0.704h-16.362c-0.083 0-0.152 0.151-0.207 0.453-0.056 0.302-0.083 0.654-0.083 1.056zm13.752-6.237c0.304 0 0.497-0.1 0.58-0.302 0.083-0.201 0.124-0.57 0.124-1.106 0-3.219-0.283-6.187-0.849-8.903s-1.367-4.896-2.402-6.539c-1.036-1.643-2.272-2.464-3.708-2.464-1.629 0-2.996 0.955-4.101 2.867-1.104 1.911-1.94 4.342-2.506 7.293s-0.849 6.002-0.849 9.154h13.711z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m148.54 119.7c0.165 0 0.283 0.117 0.352 0.352s0.076 0.52 0.02 0.855l-6.254 50.902c-0.028 0.47-0.104 0.788-0.228 0.956s-0.297 0.251-0.518 0.251h-1.615c-0.442 0-0.718-0.402-0.829-1.207l-5.26-40.138c-0.111-0.604-0.201-0.905-0.27-0.905s-0.131 0.301-0.186 0.905l-5.012 40.138c-0.028 0.47-0.097 0.788-0.207 0.956-0.111 0.168-0.277 0.251-0.497 0.251h-1.74c-0.442 0-0.718-0.402-0.829-1.207l-6.503-50.801c-0.055-0.403-0.048-0.721 0.021-0.956s0.2-0.352 0.393-0.352h1.823c0.166 0 0.297 0.067 0.393 0.201 0.097 0.134 0.159 0.403 0.187 0.805l5.302 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.219-41.949c0.055-0.268 0.124-0.47 0.207-0.604s0.193-0.201 0.331-0.201h1.533c0.138 0 0.262 0.067 0.373 0.201 0.11 0.134 0.179 0.403 0.207 0.805l5.468 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.053-41.849c0.055-0.335 0.138-0.57 0.249-0.704 0.11-0.134 0.234-0.201 0.373-0.201h1.284z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m156.49 171.51c0 0.604-0.042 1.006-0.125 1.208-0.082 0.201-0.262 0.301-0.538 0.301h-1.533c-0.221 0-0.366-0.083-0.435-0.251s-0.103-0.486-0.103-0.956v-50.902c0-0.805 0.152-1.207 0.456-1.207h1.822c0.304 0 0.456 0.402 0.456 1.207v50.6zm0.165-63.979c0 1.207-0.207 1.811-0.621 1.811h-1.905c-0.221 0-0.366-0.135-0.435-0.403s-0.104-0.67-0.104-1.207v-7.847c0-1.006 0.18-1.509 0.539-1.509h1.988c0.359 0 0.538 0.47 0.538 1.409v7.746z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m168.3 124.83c-0.221 0-0.331 0.269-0.331 0.805v33.801c0 3.42 0.221 5.667 0.663 6.74 0.441 1.073 1.09 1.609 1.946 1.609h3.024c0.138 0 0.242 0.084 0.311 0.252 0.069 0.167 0.103 0.419 0.103 0.754v2.716c0 0.537-0.138 0.906-0.414 1.107-0.248 0.067-0.614 0.134-1.098 0.201-0.483 0.067-0.959 0.118-1.429 0.151-0.469 0.034-0.828 0.05-1.077 0.05-1.712 0-2.934-0.955-3.665-2.867-0.732-1.911-1.098-5.013-1.098-9.305v-35.108c0-0.604-0.124-0.906-0.373-0.906h-3.521c-0.248 0-0.373-0.268-0.373-0.804v-3.521c0-0.537 0.111-0.805 0.332-0.805h3.686c0.166 0 0.263-0.268 0.29-0.805l0.415-16.095c0-0.805 0.124-1.207 0.372-1.207h1.492c0.303 0 0.455 0.436 0.455 1.307v15.995c0 0.537 0.097 0.805 0.29 0.805h5.468c0.221 0 0.331 0.268 0.331 0.805v3.521c0 0.536-0.124 0.804-0.373 0.804h-5.426z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m179.4 173.02c-0.331 0-0.497-0.402-0.497-1.207v-72.329c0-0.738 0.138-1.107 0.414-1.107h1.782c0.276 0 0.414 0.336 0.414 1.006v27.162c0 0.335 0.034 0.536 0.103 0.603s0.159-0.033 0.27-0.302c0.994-1.81 1.898-3.319 2.713-4.526 0.814-1.208 1.629-2.113 2.444-2.717 0.814-0.603 1.691-0.905 2.63-0.905 2.182 0 3.839 1.375 4.971 4.125 1.132 2.749 1.698 6.404 1.698 10.965v37.925c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.165 0-0.29-0.1-0.373-0.301-0.082-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.366-6.321-1.097-8.3-0.732-1.978-1.899-2.967-3.501-2.967-0.883 0-1.705 0.318-2.464 0.956-0.76 0.637-1.526 1.576-2.299 2.816-0.773 1.241-1.643 2.834-2.61 4.779v39.031c0 0.805-0.179 1.207-0.538 1.207h-1.699z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> </g> <g transform="matrix(.80638 0 0 .80638 452.53 65.421)" fill-rule="nonzero"> <path d="m79.32 36.98v150.76l15.68-13.2 6.59-156.31-22.27 18.75z" fill="url(#f)"/> <path d="m79.32 36.98-22.27-18.75 6.59 156.31 15.68 13.2v-150.76z" fill="url(#e)"/> <path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z" fill="url(#d)"/> <path d="m25.19 104.83-25.19-14.59 16.97 53.86 16.85 9.77-8.63-49.04z" fill="url(#c)"/> <path d="M43.86,82.5L18.69,67.98L0,90.24L25.18,104.83L43.86,82.5Z" fill="#9c3"/> <path d="m134.82 78.69-9.97 56.5 15.58-9.04 19.57-62.05-25.18 14.59z" fill="url(#b)"/> <path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z" fill="url(#a)"/> <path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33 25.19-14.59z" fill="#ffe113"/> <path d="M101.59,18.23L79.32,0L57.05,18.23L79.32,36.98L101.59,18.23Z" fill="#f3e600"/> </g> <defs> <linearGradient id="f" x2="1" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)" gradientUnits="userSpaceOnUse"><stop stop-color="#62d399" offset="0"/><stop stop-color="#acd842" offset=".51"/><stop stop-color="#d7db0a" offset=".9"/><stop stop-color="#d7db0a" offset="1"/></linearGradient> <linearGradient id="e" x2="1" gradientTransform="matrix(-1.6,-162.13,162.13,-1.6,69.68,178.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#0ba398" offset="0"/><stop stop-color="#4ca352" offset=".5"/><stop stop-color="#76a30a" offset="1"/></linearGradient> <linearGradient id="d" x2="1" gradientTransform="matrix(-1.9,-67.98,67.98,-1.9,36.6,152.17)" gradientUnits="userSpaceOnUse"><stop stop-color="#36a382" offset="0"/><stop stop-color="#36a382" offset=".19"/><stop stop-color="#49a459" offset=".54"/><stop stop-color="#76a30b" offset="1"/></linearGradient> <linearGradient id="c" x2="1" gradientTransform="matrix(2.18,-62.38,62.38,2.18,15.82,153.24)" gradientUnits="userSpaceOnUse"><stop stop-color="#267880" offset="0"/><stop stop-color="#457a5c" offset=".51"/><stop stop-color="#717516" offset="1"/></linearGradient> <linearGradient id="b" x2="1" gradientTransform="matrix(13.85,-71.96,71.96,13.85,135.08,135.43)" gradientUnits="userSpaceOnUse"><stop stop-color="#b0d939" offset="0"/><stop stop-color="#eadb04" offset="1"/></linearGradient> <linearGradient id="a" x2="1" gradientTransform="matrix(26.159 -64.737 64.737 26.159 107.42 128.14)" gradientUnits="userSpaceOnUse"><stop stop-color="#74af52" offset="0"/><stop stop-color="#74af52" offset=".17"/><stop stop-color="#99be32" offset=".48"/><stop stop-color="#c0c40a" offset="1"/></linearGradient> </defs> </svg>`;btoa(kiA);const GiA='<svg viewBox="0 0 509 154" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M665.95 132.73v44.88l-10.56-8.4c-.8-.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18.4-6.06 1.2-1.88.8-3.54 1.8-4.98 3-1.44 1.2-2.56 2.5-3.36 3.9-.8 1.4-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-.72-.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c.32.24.56.44.72.6.16.16.36.32.6.48.96-1.2 2.14-2.28 3.54-3.24 1.4-.96 2.92-1.76 4.56-2.4 1.64-.64 3.34-1.14 5.1-1.5 1.76-.36 3.44-.54 5.04-.54 1.44 0 2.92.04 4.44.12 1.52.08 2.84.28 3.96.6 4.56 1.12 7.8 3.12 9.72 6 1.92 2.88 2.88 6.56 2.88 11.04ZM732.38 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM795.93 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM858.57 97.21c.64.48.96 1.16.96 2.04v74.88c-.08 1.04-.12 2.12-.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18-1.24-1-2.06-1.66-2.46-1.98-1.76 2.48-4.26 4.44-7.5 5.88-3.24 1.44-7.02 2.16-11.34 2.16-3.84 0-7.4-.7-10.68-2.1-3.28-1.4-6.14-3.44-8.58-6.12-2.44-2.68-4.34-5.94-5.7-9.78-1.36-3.84-2.04-8.16-2.04-12.96 0-4.32.78-8.34 2.34-12.06 1.56-3.72 3.6-6.92 6.12-9.6 2.52-2.68 5.38-4.78 8.58-6.3 3.2-1.52 6.48-2.28 9.84-2.28 2.56 0 4.82.22 6.78.66 1.96.44 3.68 1.06 5.16 1.86s2.78 1.74 3.9 2.82a35.92 35.92 0 0 1 3.12 3.42V88.57l10.68 8.64Zm-27.96 67.92c3.6 0 6.52-.68 8.76-2.04 2.24-1.36 3.98-3.06 5.22-5.1a20.5 20.5 0 0 0 2.58-6.54c.48-2.32.72-4.44.72-6.36v-1.2c0-1.12-.22-2.7-.66-4.74-.44-2.04-1.28-4.06-2.52-6.06s-3-3.7-5.28-5.1c-2.28-1.4-5.22-2.02-8.82-1.86-3.44 0-6.26.74-8.46 2.22-2.2 1.48-3.96 3.26-5.28 5.34-1.32 2.08-2.24 4.2-2.76 6.36-.52 2.16-.78 3.92-.78 5.28 0 1.84.24 3.92.72 6.24.48 2.32 1.36 4.48 2.64 6.48s3.04 3.68 5.28 5.04c2.24 1.36 5.12 2.04 8.64 2.04ZM882.81 97.09c.64.48.96 1.12.96 1.92l-.12 41.04v37.08l-10.56-8.4c-.72-.64-1.08-1.44-1.08-2.4V88.45l10.8 8.64ZM950.36 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14Z" style="fill-rule:nonzero" transform="translate(-452.406 -63.709) scale(1.00797)"/><path d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75Z" style="fill:url(#a);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98Z" style="fill:url(#b);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33Z" style="fill:url(#c);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04Z" style="fill:url(#d);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5Z" style="fill:#9c3;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59Z" style="fill:url(#e);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5Z" style="fill:url(#f);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1Z" style="fill:#ffe113;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75Z" style="fill:#f3e600;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><defs><linearGradient id="a" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)"><stop offset="0" style="stop-color:#62d399;stop-opacity:1"/><stop offset=".51" style="stop-color:#acd842;stop-opacity:1"/><stop offset=".9" style="stop-color:#d7db0a;stop-opacity:1"/><stop offset="1" style="stop-color:#d7db0a;stop-opacity:1"/></linearGradient><linearGradient id="b" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90.565 123.412 54.953) scale(162.14)"><stop offset="0" style="stop-color:#0ba398;stop-opacity:1"/><stop offset=".5" style="stop-color:#4ca352;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30a;stop-opacity:1"/></linearGradient><linearGradient id="c" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-68) rotate(88.4 .881 -1.396)"><stop offset="0" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".19" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".54" style="stop-color:#49a459;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30b;stop-opacity:1"/></linearGradient><linearGradient id="d" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-88 87.255 68.431) scale(62.42)"><stop offset="0" style="stop-color:#267880;stop-opacity:1"/><stop offset=".51" style="stop-color:#457a5c;stop-opacity:1"/><stop offset="1" style="stop-color:#717516;stop-opacity:1"/></linearGradient><linearGradient id="e" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-79.1 149.53 -14.065) scale(73.28)"><stop offset="0" style="stop-color:#b0d939;stop-opacity:1"/><stop offset="1" style="stop-color:#eadb04;stop-opacity:1"/></linearGradient><linearGradient id="f" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-67.997 148.705 -15.558) scale(69.8226)"><stop offset="0" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".17" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".48" style="stop-color:#99be32;stop-opacity:1"/><stop offset="1" style="stop-color:#c0c40a;stop-opacity:1"/></linearGradient></defs></svg>',MiA=btoa(GiA),RiA="data:image/svg+xml;charset=utf-8;base64,"+MiA,UiA=RiA,ns=tA("debuglicense");let nQ="basic";ns&&console.log("License Type: "+nQ);function zs(){switch(nQ){case"pro":case"enterprise":return!0}return!1}function VU(){switch(nQ){case"indie":return!0}return!1}function Rh(){return zs()||VU()}const rY=[];function FiA(t){if(zs()||VU())return t(!0);rY.push(t)}function NiA(t){for(const A of rY)try{A(t)}catch{}}at.registerCallback(ft.ContextRegistered,t=>{viA(t.context),qiA(),KiA(t.context)});let rQ,zU=!1,S0="";async function biA(){if(rQ)return rQ;if(nQ==="basic")try{const t="https://engine.needle.tools/licensing/check?location="+encodeURIComponent(window.location.href)+"&version="+Vs+"&generator="+encodeURIComponent(y0),A=await fetch(t,{method:"GET"}).catch(e=>{ns&&console.error("License check failed",e)});A?.status===200?(zU=!1,ns&&console.log("License check succeeded"),nQ="pro",NiA(!0)):A?.status===403?(zU=!0,S0=await A.text()):ns&&console.log("License check failed with status "+A?.status)}catch(t){ns&&console.error("License check failed",t)}else ns&&console.log('Runtime license check is skipped because license is already applied as "'+nQ+'"')}rQ=biA();async function KiA(t){function A(){const g=document.createElement("div");g.className="needle-forbidden",g.style.cssText=`
|
|
4346
4346
|
position: fixed;
|
|
4347
4347
|
top: 0;
|
|
@@ -4413,7 +4413,7 @@ CLICK HERE TO GET A LICENSE`,e.style.cursor="pointer",e.style.userSelect="none",
|
|
|
4413
4413
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([I]))}),this.decoderPending}_getWorker(t,A){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const i=new Worker(this.workerSourceURL);i._callbacks={},i._taskCosts={},i._taskLoad=0,i.postMessage({type:"init",decoderConfig:this.decoderConfig}),i.onmessage=function(g){const I=g.data;switch(I.type){case"decode":i._callbacks[I.id].resolve(I);break;case"error":i._callbacks[I.id].reject(I);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+I.type+'"')}},this.workerPool.push(i)}else this.workerPool.sort(function(i,g){return i._taskLoad>g._taskLoad?-1:1});const e=this.workerPool[this.workerPool.length-1];return e._taskCosts[t]=A,e._taskLoad+=A,e})}_releaseTask(t,A){t._taskLoad-=t._taskCosts[A],delete t._callbacks[A],delete t._taskCosts[A]}debug(){console.log("Task load: ",this.workerPool.map(t=>t._taskLoad))}dispose(){for(let t=0;t<this.workerPool.length;++t)this.workerPool[t].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}};function DoA(){let t,A;onmessage=function(o){const s=o.data;switch(s.type){case"init":t=s.decoderConfig,A=new Promise(function(n){t.onModuleLoaded=function(B){n({draco:B})},DracoDecoderModule(t)});break;case"decode":const C=s.buffer,a=s.taskConfig;A.then(n=>{const B=n.draco,Q=new B.Decoder;try{const E=e(B,Q,new Int8Array(C),a),h=E.attributes.map(l=>l.array.buffer);E.index&&h.push(E.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:E},h)}catch(E){console.error(E),self.postMessage({type:"error",id:s.id,error:E.message})}finally{B.destroy(Q)}});break}};function e(o,s,C,a){const n=a.attributeIDs,B=a.attributeTypes;let Q,E;const h=s.GetEncodedGeometryType(C);if(h===o.TRIANGULAR_MESH)Q=new o.Mesh,E=s.DecodeArrayToMesh(C,C.byteLength,Q);else if(h===o.POINT_CLOUD)Q=new o.PointCloud,E=s.DecodeArrayToPointCloud(C,C.byteLength,Q);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!E.ok()||Q.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+E.error_msg());const l={index:null,attributes:[]};for(const d in n){const c=self[B[d]];let u,p;if(a.useUniqueIDs)p=n[d],u=s.GetAttributeByUniqueId(Q,p);else{if(p=s.GetAttributeId(Q,o[n[d]]),p===-1)continue;u=s.GetAttribute(Q,p)}const D=g(o,s,Q,d,c,u);d==="color"&&(D.vertexColorSpace=a.vertexColorSpace),l.attributes.push(D)}return h===o.TRIANGULAR_MESH&&(l.index=i(o,s,Q)),o.destroy(Q),l}function i(o,s,C){const a=C.num_faces()*3,n=a*4,B=o._malloc(n);s.GetTrianglesUInt32Array(C,n,B);const Q=new Uint32Array(o.HEAPF32.buffer,B,a).slice();return o._free(B),{array:Q,itemSize:1}}function g(o,s,C,a,n,B){const Q=B.num_components(),E=C.num_points()*Q,h=E*n.BYTES_PER_ELEMENT,l=I(o,n),d=o._malloc(h);s.GetAttributeDataArrayForAllPoints(C,B,l,h,d);const c=new n(o.HEAPF32.buffer,d,E).slice();return o._free(d),{name:a,array:c,itemSize:Q}}function I(o,s){switch(s){case Float32Array:return o.DT_FLOAT32;case Int8Array:return o.DT_INT8;case Int16Array:return o.DT_INT16;case Int32Array:return o.DT_INT32;case Uint8Array:return o.DT_UINT8;case Uint16Array:return o.DT_UINT16;case Uint32Array:return o.DT_UINT32}}}let woA=class{constructor(t=4){this.pool=t,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(t){if(!this.workers[t]){const A=this.workerCreator();A.addEventListener("message",this._onMessage.bind(this,t)),this.workers[t]=A}}_getIdleWorker(){for(let t=0;t<this.pool;t++)if(!(this.workerStatus&1<<t))return t;return-1}_onMessage(t,A){const e=this.workersResolve[t];if(e&&e(A),this.queue.length){const{resolve:i,msg:g,transfer:I}=this.queue.shift();this.workersResolve[t]=i,this.workers[t].postMessage(g,I)}else this.workerStatus^=1<<t}setWorkerCreator(t){this.workerCreator=t}setWorkerLimit(t){this.pool=t}postMessage(t,A){return new Promise(e=>{const i=this._getIdleWorker();i!==-1?(this._initWorker(i),this.workerStatus|=1<<i,this.workersResolve[i]=e,this.workers[i].postMessage(t,A)):this.queue.push({resolve:e,msg:t,transfer:A})})}dispose(){this.workers.forEach(t=>t.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}};const yoA=0,v2=2,SoA=1,J2=2,moA=0,foA=1,koA=10,GoA=0,q2=9,x2=15,L2=16,_2=22,T2=37,H2=43,Y2=76,O2=83,P2=97,j2=100,W2=103,Z2=109,V2=165,z2=166;let MoA=class{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}},Cu=class{constructor(t,A,e,i){this._dataView=new DataView(t.buffer,t.byteOffset+A,e),this._littleEndian=i,this._offset=0}_nextUint8(){const t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){const t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){const t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){const t=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,t}_nextInt32(){const t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_skip(t){return this._offset+=t,this}_scan(t,A=0){const e=this._offset;let i=0;for(;this._dataView.getUint8(this._offset)!==A&&i<t;)i++,this._offset++;return i<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+e,i)}};const HI=[171,75,84,88,32,50,48,187,13,10,26,10];function X2(t){return typeof TextDecoder<"u"?new TextDecoder().decode(t):Buffer.from(t).toString("utf8")}function RoA(t){const A=new Uint8Array(t.buffer,t.byteOffset,HI.length);if(A[0]!==HI[0]||A[1]!==HI[1]||A[2]!==HI[2]||A[3]!==HI[3]||A[4]!==HI[4]||A[5]!==HI[5]||A[6]!==HI[6]||A[7]!==HI[7]||A[8]!==HI[8]||A[9]!==HI[9]||A[10]!==HI[10]||A[11]!==HI[11])throw new Error("Missing KTX 2.0 identifier.");const e=new MoA,i=17*Uint32Array.BYTES_PER_ELEMENT,g=new Cu(t,HI.length,i,!0);e.vkFormat=g._nextUint32(),e.typeSize=g._nextUint32(),e.pixelWidth=g._nextUint32(),e.pixelHeight=g._nextUint32(),e.pixelDepth=g._nextUint32(),e.layerCount=g._nextUint32(),e.faceCount=g._nextUint32();const I=g._nextUint32();e.supercompressionScheme=g._nextUint32();const o=g._nextUint32(),s=g._nextUint32(),C=g._nextUint32(),a=g._nextUint32(),n=g._nextUint64(),B=g._nextUint64(),Q=new Cu(t,HI.length+i,3*I*8,!0);for(let J=0;J<I;J++)e.levels.push({levelData:new Uint8Array(t.buffer,t.byteOffset+Q._nextUint64(),Q._nextUint64()),uncompressedByteLength:Q._nextUint64()});const E=new Cu(t,o,s,!0),h={vendorId:E._skip(4)._nextUint16(),descriptorType:E._nextUint16(),versionNumber:E._nextUint16(),descriptorBlockSize:E._nextUint16(),colorModel:E._nextUint8(),colorPrimaries:E._nextUint8(),transferFunction:E._nextUint8(),flags:E._nextUint8(),texelBlockDimension:[E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8()],bytesPlane:[E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8()],samples:[]},l=(h.descriptorBlockSize/4-6)/4;for(let J=0;J<l;J++){const T={bitOffset:E._nextUint16(),bitLength:E._nextUint8(),channelType:E._nextUint8(),samplePosition:[E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&T.channelType?(T.sampleLower=E._nextInt32(),T.sampleUpper=E._nextInt32()):(T.sampleLower=E._nextUint32(),T.sampleUpper=E._nextUint32()),h.samples[J]=T}e.dataFormatDescriptor.length=0,e.dataFormatDescriptor.push(h);const d=new Cu(t,C,a,!0);for(;d._offset<a;){const J=d._nextUint32(),T=d._scan(J),Z=X2(T),V=d._scan(J-T.byteLength);e.keyValue[Z]=Z.match(/^ktx/i)?X2(V):V,d._offset%4&&d._skip(4-d._offset%4)}if(B<=0)return e;const c=new Cu(t,n,B,!0),u=c._nextUint16(),p=c._nextUint16(),D=c._nextUint32(),m=c._nextUint32(),M=c._nextUint32(),k=c._nextUint32(),R=[];for(let J=0;J<I;J++)R.push({imageFlags:c._nextUint32(),rgbSliceByteOffset:c._nextUint32(),rgbSliceByteLength:c._nextUint32(),alphaSliceByteOffset:c._nextUint32(),alphaSliceByteLength:c._nextUint32()});const N=n+c._offset,y=N+D,U=y+m,_=U+M,Y=new Uint8Array(t.buffer,t.byteOffset+N,D),v=new Uint8Array(t.buffer,t.byteOffset+y,m),O=new Uint8Array(t.buffer,t.byteOffset+U,M),K=new Uint8Array(t.buffer,t.byteOffset+_,k);return e.globalData={endpointCount:u,selectorCount:p,imageDescs:R,endpointsData:Y,selectorsData:v,tablesData:O,extendedData:K},e}let tN,za,iN;const gN={env:{emscripten_notify_memory_growth:function(t){iN=new Uint8Array(za.exports.memory.buffer)}}};let UoA=class{init(){return tN||(tN=typeof fetch<"u"?fetch("data:application/wasm;base64,"+$2).then(t=>t.arrayBuffer()).then(t=>WebAssembly.instantiate(t,gN)).then(this._init):WebAssembly.instantiate(Buffer.from($2,"base64"),gN).then(this._init),tN)}_init(t){za=t.instance,gN.env.emscripten_notify_memory_growth(0)}decode(t,A=0){if(!za)throw new Error("ZSTDDecoder: Await .init() before decoding.");const e=t.byteLength,i=za.exports.malloc(e);iN.set(t,i),A=A||Number(za.exports.ZSTD_findDecompressedSize(i,e));const g=za.exports.malloc(A),I=za.exports.ZSTD_decompress(g,A,i,e),o=iN.slice(g,g+I);return za.exports.free(i),za.exports.free(g),o}};const $2="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",IN=new WeakMap;let oN=0,sN,au=class ew extends yr{constructor(A){super(A),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new woA,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(A){return this.transcoderPath=A,this}setWorkerLimit(A){return this.workerPool.setWorkerLimit(A),this}async detectSupportAsync(A){return this.workerConfig={astcSupported:await A.hasFeatureAsync("texture-compression-astc"),etc1Supported:await A.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await A.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await A.hasFeatureAsync("texture-compression-bc"),bptcSupported:await A.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await A.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(A){return A.isWebGPURenderer===!0?this.workerConfig={astcSupported:A.hasFeature("texture-compression-astc"),etc1Supported:A.hasFeature("texture-compression-etc1"),etc2Supported:A.hasFeature("texture-compression-etc2"),dxtSupported:A.hasFeature("texture-compression-bc"),bptcSupported:A.hasFeature("texture-compression-bptc"),pvrtcSupported:A.hasFeature("texture-compression-pvrtc")}:(this.workerConfig={astcSupported:A.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:A.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:A.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:A.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:A.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:A.extensions.has("WEBGL_compressed_texture_pvrtc")||A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},A.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const A=new wQ(this.manager);A.setPath(this.transcoderPath),A.setWithCredentials(this.withCredentials);const e=A.loadAsync("basis_transcoder.js"),i=new wQ(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const g=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([e,g]).then(([I,o])=>{const s=ew.BasisWorker.toString(),C=["/* constants */","let _EngineFormat = "+JSON.stringify(ew.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(ew.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(ew.BasisFormat),"/* basis_transcoder.js */",I,"/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(`
|
|
4414
4414
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([C])),this.transcoderBinary=o,this.workerPool.setWorkerCreator(()=>{const a=new Worker(this.workerSourceURL),n=this.transcoderBinary.slice(0);return a.postMessage({type:"init",config:this.workerConfig,transcoderBinary:n},[n]),a})}),oN>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),oN++}return this.transcoderPending}load(A,e,i,g){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const I=new wQ(this.manager);I.setResponseType("arraybuffer"),I.setWithCredentials(this.withCredentials),I.load(A,o=>{if(IN.has(o))return IN.get(o).promise.then(e).catch(g);this._createTexture(o).then(s=>e?e(s):null).catch(g)},i,g)}_createTextureFrom(A,e){const{faces:i,width:g,height:I,format:o,type:s,error:C,dfdFlags:a}=A;if(s==="error")return Promise.reject(C);let n;if(e.faceCount===6)n=new aIA(i,o,rs);else{const B=i[0].mipmaps;n=e.layerCount>1?new CIA(B,g,I,e.layerCount,o,rs):new AS(B,g,I,o,rs)}return n.minFilter=i[0].mipmaps.length===1?Pd:f0,n.magFilter=Pd,n.generateMipmaps=!1,n.needsUpdate=!0,n.colorSpace=A1(e),n.premultiplyAlpha=!!(a&SoA),n}async _createTexture(A,e={}){const i=RoA(new Uint8Array(A));if(i.vkFormat!==GoA)return NoA(i);const g=e,I=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:A,taskConfig:g},[A])).then(o=>this._createTextureFrom(o.data,i));return IN.set(A,{promise:I}),I}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),oN--,this}};au.BasisFormat={ETC1S:0,UASTC_4x4:1},au.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},au.EngineFormat={RGBAFormat:Br,RGBA_ASTC_4x4_Format:IgA,RGBA_BPTC_Format:ogA,RGBA_ETC2_EAC_Format:ggA,RGBA_PVRTC_4BPPV1_Format:egA,RGBA_S3TC_DXT5_Format:$iA,RGB_ETC1_Format:tgA,RGB_ETC2_Format:igA,RGB_PVRTC_4BPPV1_Format:AgA,RGB_S3TC_DXT1_Format:XiA},au.BasisWorker=function(){let t,A,e;const i=_EngineFormat,g=_TranscoderFormat,I=_BasisFormat;self.addEventListener("message",function(h){const l=h.data;switch(l.type){case"init":t=l.config,o(l.transcoderBinary);break;case"transcode":A.then(()=>{try{const{faces:d,buffers:c,width:u,height:p,hasAlpha:D,format:m,dfdFlags:M}=s(l.buffer);self.postMessage({type:"transcode",id:l.id,faces:d,width:u,height:p,hasAlpha:D,format:m,dfdFlags:M},c)}catch(d){console.error(d),self.postMessage({type:"error",id:l.id,error:d.message})}});break}});function o(h){A=new Promise(l=>{e={wasmBinary:h,onRuntimeInitialized:l},BASIS(e)}).then(()=>{e.initializeBasis(),e.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function s(h){const l=new e.KTX2File(new Uint8Array(h));function d(){l.close(),l.delete()}if(!l.isValid())throw d(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");const c=l.isUASTC()?I.UASTC_4x4:I.ETC1S,u=l.getWidth(),p=l.getHeight(),D=l.getLayers()||1,m=l.getLevels(),M=l.getFaces(),k=l.getHasAlpha(),R=l.getDFDFlags(),{transcoderFormat:N,engineFormat:y}=B(c,u,p,k);if(!u||!p||!m)throw d(),new Error("THREE.KTX2Loader: Invalid texture");if(!l.startTranscoding())throw d(),new Error("THREE.KTX2Loader: .startTranscoding failed");const U=[],_=[];for(let Y=0;Y<M;Y++){const v=[];for(let O=0;O<m;O++){const K=[];let J,T;for(let V=0;V<D;V++){const sA=l.getImageLevelInfo(O,V,Y);Y===0&&O===0&&V===0&&(sA.origWidth%4!==0||sA.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),m>1?(J=sA.origWidth,T=sA.origHeight):(J=sA.width,T=sA.height);const wA=new Uint8Array(l.getImageTranscodedSizeInBytes(O,V,0,N));if(!l.transcodeImage(wA,O,V,Y,N,0,-1,-1))throw d(),new Error("THREE.KTX2Loader: .transcodeImage failed.");K.push(wA)}const Z=E(K);v.push({data:Z,width:J,height:T}),_.push(Z.buffer)}U.push({mipmaps:v,width:u,height:p,format:y})}return d(),{faces:U,buffers:_,width:u,height:p,hasAlpha:k,format:y,dfdFlags:R}}const C=[{if:"astcSupported",basisFormat:[I.UASTC_4x4],transcoderFormat:[g.ASTC_4x4,g.ASTC_4x4],engineFormat:[i.RGBA_ASTC_4x4_Format,i.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.BC7_M5,g.BC7_M5],engineFormat:[i.RGBA_BPTC_Format,i.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.BC1,g.BC3],engineFormat:[i.RGB_S3TC_DXT1_Format,i.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.ETC1,g.ETC2],engineFormat:[i.RGB_ETC2_Format,i.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.ETC1],engineFormat:[i.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.PVRTC1_4_RGB,g.PVRTC1_4_RGBA],engineFormat:[i.RGB_PVRTC_4BPPV1_Format,i.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],a=C.sort(function(h,l){return h.priorityETC1S-l.priorityETC1S}),n=C.sort(function(h,l){return h.priorityUASTC-l.priorityUASTC});function B(h,l,d,c){let u,p;const D=h===I.ETC1S?a:n;for(let m=0;m<D.length;m++){const M=D[m];if(t[M.if]&&M.basisFormat.includes(h)&&!(c&&M.transcoderFormat.length<2)&&!(M.needsPowerOfTwo&&!(Q(l)&&Q(d))))return u=M.transcoderFormat[c?1:0],p=M.engineFormat[c?1:0],{transcoderFormat:u,engineFormat:p}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),u=g.RGBA32,p=i.RGBAFormat,{transcoderFormat:u,engineFormat:p}}function Q(h){return h<=2?!0:(h&h-1)===0&&h!==0}function E(h){if(h.length===1)return h[0];let l=0;for(let u=0;u<h.length;u++){const p=h[u];l+=p.byteLength}const d=new Uint8Array(l);let c=0;for(let u=0;u<h.length;u++){const p=h[u];d.set(p,c),c+=p.byteLength}return d}};const FoA=new Set([Br,jd,Uh]),CN={[Z2]:Br,[P2]:Br,[T2]:Br,[H2]:Br,[W2]:jd,[O2]:jd,[L2]:jd,[_2]:jd,[j2]:Uh,[Y2]:Uh,[x2]:Uh,[q2]:Uh,[z2]:SY,[V2]:SY},aN={[Z2]:hQ,[P2]:k0,[T2]:rs,[H2]:rs,[W2]:hQ,[O2]:k0,[L2]:rs,[_2]:rs,[j2]:hQ,[Y2]:k0,[x2]:rs,[q2]:rs,[z2]:rs,[V2]:rs};async function NoA(t){const{vkFormat:A}=t;if(CN[A]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let e;t.supercompressionScheme===v2&&(sN||(sN=new Promise(async I=>{const o=new UoA;await o.init(),I(o)})),e=await sN);const i=[];for(let I=0;I<t.levels.length;I++){const o=Math.max(1,t.pixelWidth>>I),s=Math.max(1,t.pixelHeight>>I),C=t.pixelDepth?Math.max(1,t.pixelDepth>>I):0,a=t.levels[I];let n;if(t.supercompressionScheme===yoA)n=a.levelData;else if(t.supercompressionScheme===v2)n=e.decode(a.levelData,a.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let B;aN[A]===hQ?B=new Float32Array(n.buffer,n.byteOffset,n.byteLength/Float32Array.BYTES_PER_ELEMENT):aN[A]===k0?B=new Uint16Array(n.buffer,n.byteOffset,n.byteLength/Uint16Array.BYTES_PER_ELEMENT):B=n,i.push({data:B,width:o,height:s,depth:C})}let g;if(FoA.has(CN[A]))g=t.pixelDepth===0?new qF(i[0].data,t.pixelWidth,t.pixelHeight):new bgA(i[0].data,t.pixelWidth,t.pixelHeight,t.pixelDepth);else{if(t.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");g=new AS(i,t.pixelWidth,t.pixelHeight)}return g.mipmaps=i,g.type=aN[A],g.format=CN[A],g.colorSpace=A1(t),g.needsUpdate=!0,Promise.resolve(g)}function A1(t){const A=t.dataFormatDescriptor[0];return A.colorPrimaries===foA?A.transferFunction===J2?cI:ao:A.colorPrimaries===koA?A.transferFunction===J2?MY:CF:(A.colorPrimaries===moA||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${A.colorPrimaries}"`),sF)}let tS="https://www.gstatic.com/draco/versioned/decoders/1.4.1/",nN="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";fetch(tS+"draco_decoder.js",{method:"head"}).catch(t=>{tS="./include/draco/",nN="./include/ktx2/"});function e1(t){tS=t}function t1(t){nN=t}let nu,rN,ru;function i1(t){nu||(nu=new poA,nu.setDecoderPath(tS),nu.setDecoderConfig({type:"js"})),ru||(ru=new au,ru.setTranscoderPath(nN)),rN||(rN=uoA),t?ru.detectSupport(t):console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail")}function g1(t){t.dracoLoader||t.setDRACOLoader(nu),t.ktx2Loader||t.setKTX2Loader(ru),t.meshoptDecoder||t.setMeshoptDecoder(rN)}function BN(t){const A=new URL(window.location.href).searchParams.get(t);return A==null||A==="0"||A==="false"?!1:A===""?!0:A}function boA(t,A){if(A===void 0||A.startsWith("./")||A.startsWith("http")||t===void 0)return A;const e=t.lastIndexOf("/");if(e>=0){const i=t.substring(0,e+1);for(;i.endsWith("/")&&A.startsWith("/");)A=A.substring(1);return i+A}return A}const QN=new Array;function KoA(t){QN.push(t)}const Xa="NEEDLE_progressive",pI=BN("debugprogressive"),EN=Symbol("needle-progressive-texture"),Bu=new Map,hN=new Set;if(pI){let t=function(){A+=1,console.log("Toggle LOD level",A,Bu),Bu.forEach((g,I)=>{for(const o of g.keys){const s=I[o];if(s.isBufferGeometry===!0){const C=dt.getMeshLODInformation(s),a=C?Math.min(A,C.lods.length):0;I["DEBUG:LOD"]=A,dt.assignMeshLOD(I,a),C&&(e=Math.max(e,C.lods.length-1))}else if(I.isMaterial===!0){I["DEBUG:LOD"]=A,dt.assignTextureLOD(I,A);break}}}),A>=e&&(A=-1)},A=-1,e=2,i=!1;window.addEventListener("keyup",g=>{g.key==="p"&&t(),g.key==="w"&&(i=!i,hN&&hN.forEach(I=>{I.name!="BackgroundCubeMaterial"&&"wireframe"in I&&(I.wireframe=i)}))})}function I1(t,A,e){var i;if(!pI)return;Bu.has(t)||Bu.set(t,{keys:[],sourceId:e});const g=Bu.get(t);((i=g?.keys)==null?void 0:i.includes(A))==!1&&g.keys.push(A)}const DI=class{get name(){return Xa}static getMeshLODInformation(t){const A=this.getAssignedLODInformation(t);return A!=null&&A.key?this.lodInfos.get(A.key):null}static hasLODLevelAvailable(t,A){var e;if(t.isMaterial===!0){for(const I of Object.keys(t)){const o=t[I];if(o.isTexture&&this.hasLODLevelAvailable(o,A))return!0}return!1}else if(t.isGroup===!0){for(const I of t.children)if(I.isMesh===!0&&this.hasLODLevelAvailable(I,A))return!0}let i,g;if(t.isMesh?i=t.geometry:(t.isBufferGeometry||t.isTexture)&&(i=t),i&&(e=i?.userData)!=null&&e.LODS){const I=i.userData.LODS;if(g=this.lodInfos.get(I.key),A===void 0)return g!=null;if(g)return Array.isArray(g.lods)?A<g.lods.length:A===0}return!1}static assignMeshLOD(t,A){var e;if(!t)return Promise.resolve(null);if(t instanceof pr||t.isMesh===!0){const i=t.geometry,g=this.getAssignedLODInformation(i);if(!g)return Promise.resolve(null);for(const I of QN)(e=I.onBeforeGetLODMesh)==null||e.call(I,t,A);return t["LOD:requested level"]=A,DI.getOrLoadLOD(i,A).then(I=>{if(t["LOD:requested level"]===A){if(delete t["LOD:requested level"],Array.isArray(I)){const o=g.index||0;I=I[o]}I&&i!=I&&I instanceof pa&&(t.geometry=I,pI&&I1(t,"geometry",g.url))}return I}).catch(I=>(console.error("Error loading mesh LOD",t,I),null))}else pI&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,A=0){if(!t)return Promise.resolve(null);if(t instanceof ur||t.isMaterial===!0){const e=t,i=[],g=new Array;if(pI&&hN.add(e),e.uniforms&&e.isRawShaderMaterial||e.isShaderMaterial===!0){const I=e;for(const o of Object.keys(I.uniforms)){const s=I.uniforms[o].value;if(s?.isTexture===!0){const C=this.assignTextureLODForSlot(s,A,e,o);i.push(C),g.push(o)}}}else for(const I of Object.keys(e)){const o=e[I];if(o?.isTexture===!0){const s=this.assignTextureLODForSlot(o,A,e,I);i.push(s),g.push(I)}}return Promise.all(i).then(I=>{const o=new Array;for(let s=0;s<I.length;s++){const C=I[s],a=g[s];C&&C.isTexture===!0?o.push({material:e,slot:a,texture:C,level:A}):o.push({material:e,slot:a,texture:null,level:A})}return o})}if(t instanceof lg||t.isTexture===!0){const e=t;return this.assignTextureLODForSlot(e,A,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,A,e,i){return t?.isTexture!==!0?Promise.resolve(null):DI.getOrLoadLOD(t,A).then(g=>{if(Array.isArray(g))return null;if(g?.isTexture===!0){if(g!=t&&(e&&i&&(e[i]=g),pI&&i&&e)){const I=this.getAssignedLODInformation(t);I&&I1(e,i,I.url)}return g}else pI=="verbose"&&console.warn("No LOD found for",t,A);return null}).catch(g=>(console.error("Error loading LOD",t,g),null))}constructor(t,A){pI&&console.log("Progressive extension registered for",A),this.parser=t,this.url=A}afterRoot(t){var A,e;return pI&&console.log("AFTER",this.url,t),(A=this.parser.json.textures)==null||A.forEach((i,g)=>{if(i!=null&&i.extensions){const I=i?.extensions[Xa];if(I){let o=!1;for(const s of this.parser.associations.keys())s.isTexture===!0&&this.parser.associations.get(s).textures===g&&(o=!0,DI.registerTexture(this.url,s,g,I));o||this.parser.getDependency("texture",g).then(s=>{s&&DI.registerTexture(this.url,s,g,I)})}}}),(e=this.parser.json.meshes)==null||e.forEach((i,g)=>{if(i!=null&&i.extensions){const I=i?.extensions[Xa];if(I&&I.lods){for(const o of this.parser.associations.keys())if(o.isMesh){const s=this.parser.associations.get(o);s.meshes===g&&DI.registerMesh(this.url,I.guid,o,I.lods.length,s.primitives,I)}}}}),null}static async getOrLoadLOD(t,A){var e,i,g;const I=pI=="verbose",o=t.userData.LODS;if(!o)return null;const s=o?.key;let C;if(t.isTexture===!0){const a=t;a.source&&a.source[EN]&&(C=a.source[EN])}if(C||(C=DI.lodInfos.get(s)),C){if(A>0){let B=!1;const Q=Array.isArray(C.lods);if(Q&&A>=C.lods.length?B=!0:Q||(B=!0),B)return this.lowresCache.get(s)}const a=Array.isArray(C.lods)?C.lods[A].path:C.lods;if(!a)return pI&&!C["missing:uri"]&&(C["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+A,C)),null;const n=boA(o.url,a);if(n.endsWith(".glb")||n.endsWith(".gltf")){if(!C.guid)return console.warn("missing pointer for glb/gltf texture",C),null;const B=n+"_"+C.guid,Q=this.previouslyLoaded.get(B);if(Q!==void 0){I&&console.log(`LOD ${A} was already loading/loaded: ${B}`);let l=await Q.catch(c=>(console.error(`Error loading LOD ${A} from ${n}
|
|
4415
4415
|
`,c),null)),d=!1;if(l==null||(l instanceof lg&&t instanceof lg?(e=l.image)!=null&&e.data||(i=l.source)!=null&&i.data?l=this.copySettings(t,l):(d=!0,this.previouslyLoaded.delete(B)):l instanceof pa&&t instanceof pa&&((g=l.attributes.position)!=null&&g.array||(d=!0,this.previouslyLoaded.delete(B)))),!d)return l}const E=C,h=new Promise(async(l,d)=>{const c=new xIA;g1(c),pI&&(await new Promise(M=>setTimeout(M,1e3)),I&&console.warn("Start loading (delayed) "+n,E.guid));let u=n;if(E&&Array.isArray(E.lods)){const M=E.lods[A];M.hash&&(u+="?v="+M.hash)}const p=await c.loadAsync(u).catch(M=>(console.error(`Error loading LOD ${A} from ${n}
|
|
4416
|
-
`,M),null));if(!p)return null;const D=p.parser;I&&console.log("Loading finished "+n,E.guid);let m=0;if(p.parser.json.textures){let M=!1;for(const k of p.parser.json.textures){if(k!=null&&k.extensions){const R=k?.extensions[Xa];if(R!=null&&R.guid&&R.guid===E.guid){M=!0;break}}m++}if(M){let k=await D.getDependency("texture",m);return I&&console.log('change "'+t.name+'" \u2192 "'+k.name+'"',n,m,k,B),t instanceof lg&&(k=this.copySettings(t,k)),k&&(k.guid=E.guid),l(k)}}if(m=0,p.parser.json.meshes){let M=!1;for(const k of p.parser.json.meshes){if(k!=null&&k.extensions){const R=k?.extensions[Xa];if(R!=null&&R.guid&&R.guid===E.guid){M=!0;break}}m++}if(M){const k=await D.getDependency("mesh",m),R=E;if(I&&console.log(`Loaded Mesh "${k.name}"`,n,m,k,B),k.isMesh===!0){const N=k.geometry;return DI.assignLODInformation(o.url,N,s,A,void 0,R.density),l(N)}else{const N=new Array;for(let y=0;y<k.children.length;y++){const U=k.children[y];if(U instanceof pr){const _=U.geometry;DI.assignLODInformation(o.url,_,s,A,y,R.density),N.push(_)}}return l(N)}}}return l(null)});return this.previouslyLoaded.set(B,h),await h}else if(t instanceof lg){I&&console.log("Load texture from uri: "+n);const B=await new m2().loadAsync(n);return B?(B.guid=C.guid,B.flipY=!1,B.needsUpdate=!0,B.colorSpace=t.colorSpace,I&&console.log(C,B)):pI&&console.warn("failed loading",n),B}}else pI&&console.warn(`Can not load LOD ${A}: no LOD info found for "${s}" ${t.name}`,t.type);return null}static assignLODInformation(t,A,e,i,g,I){if(!A)return;A.userData||(A.userData={});const o=new voA(t,e,i,g,I);A.userData.LODS=o,A.userData.LOD=i}static getAssignedLODInformation(t){var A;return((A=t?.userData)==null?void 0:A.LODS)||null}static copySettings(t,A){return this._copiedTextures.get(t)||(A=A.clone(),this._copiedTextures.set(t,A),A.offset=t.offset,A.repeat=t.repeat,A.colorSpace=t.colorSpace,A)}};let dt=DI;dt.registerTexture=(t,A,e,i)=>{pI&&console.log("> Progressive: register texture",e,A.name,A.uuid,A,i),A.source&&(A.source[EN]=i);const g=i.guid;DI.assignLODInformation(t,A,g,0,0,void 0),DI.lodInfos.set(g,i),DI.lowresCache.set(g,A)},dt.registerMesh=(t,A,e,i,g,I)=>{var o;pI&&console.log("> Progressive: register mesh",g,e.name,I,e.uuid,e);const s=e.geometry;s.userData||(s.userData={}),DI.assignLODInformation(t,s,A,i,g,I.density),DI.lodInfos.set(A,I);let C=DI.lowresCache.get(A);C?C.push(e.geometry):C=[e.geometry],DI.lowresCache.set(A,C);for(const a of QN)(o=a.onRegisteredNewMesh)==null||o.call(a,e,I)},dt.lodInfos=new Map,dt.previouslyLoaded=new Map,dt.lowresCache=new Map,dt._copiedTextures=new Map;class voA{constructor(A,e,i,g,I){this.url=A,this.key=e,this.level=i,g!=null&&(this.index=g),I!=null&&(this.density=I)}}const cN=BN("debugprogressive"),JoA=BN("noprogressive"),bC=class{constructor(t){this.projectionScreenMatrix=new gt,this.cameraFrustrum=new t2,this.updateInterval=0,this.pause=!1,this.plugins=[],this._frame=0,this._sphere=new tC,this._tempBox=new AC,this.tempMatrix=new gt,this._tempWorldPosition=new hA,this._tempBoxSize=new hA,this._tempBox2Size=new hA,this.renderer=t}static getObjectLODState(t){var A;return(A=t.userData)==null?void 0:A.LOD_state}enable(){if(this._originalRender)return;let t=0;this._originalRender=this.renderer.render;const A=this;i1(this.renderer),this.renderer.render=function(e,i){A.renderer.getRenderTarget()==null&&(t=0,A._frame+=1);const g=A._frame,I=t++;A.onBeforeRender(e,i,I,g),A._originalRender.call(this,e,i),A.onAfterRender(e,i,I,g)}}disable(){this._originalRender&&(this.renderer.render=this._originalRender,this._originalRender=void 0)}onBeforeRender(t,A,e,i){}onAfterRender(t,A,e,i){var g,I;if(!this.pause&&e==0){if(JoA||this.updateInterval>0&&i%this.updateInterval!=0)return;this.projectionScreenMatrix.multiplyMatrices(A.projectionMatrix,A.matrixWorldInverse),this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix,this.renderer.coordinateSystem);const o=1e5,s=this.renderer.renderLists.get(t,e),C=s.opaque;for(const n of C){if(n.material&&(((g=n.geometry)==null?void 0:g.type)==="BoxGeometry"||((I=n.geometry)==null?void 0:I.type)==="BufferGeometry")&&(n.material.name==="SphericalGaussianBlur"||n.material.name=="BackgroundCubeMaterial"||n.material.name==="CubemapFromEquirect"||n.material.name==="EquirectangularToCubeUV")){cN&&(n.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]||(n.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]=!0,console.warn("Ignoring skybox or BLIT object",n,n.material.name,n.material.type)));continue}const B=n.object;(B instanceof pr||B.isMesh)&&this.updateLODs(t,A,B,o)}const a=s.transparent;for(const n of a){const B=n.object;(B instanceof pr||B.isMesh)&&this.updateLODs(t,A,B,o)}}}updateLODs(t,A,e,i){var g,I;for(const a of this.plugins)(g=a.onBeforeUpdateLOD)==null||g.call(a,this.renderer,t,A,e);let o=e.userData.LOD_state;o||(o=new qoA,e.userData.LOD_state=o);let s=this.calculateLodLevel(A,e,o,i);s=Math.round(s),s>=0&&this.loadProgressiveMeshes(e,s);let C=0;if(e.material){const a=e["DEBUG:LOD"];if(a!=null&&(C=a),Array.isArray(e.material))for(const n of e.material)this.loadProgressiveTextures(n,C);else this.loadProgressiveTextures(e.material,C)}for(const a of this.plugins)(I=a.onAfterUpdatedLOD)==null||I.call(a,this.renderer,t,A,e,s);o.lastLodLevel=s}loadProgressiveTextures(t,A){return t&&t.userData&&t.userData.LOD!==A?(t.userData.LOD=A,dt.assignTextureLOD(t,A)):Promise.resolve(null)}loadProgressiveMeshes(t,A){if(!t)return Promise.resolve(null);if(t.userData||(t.userData={}),t.userData.LOD!==A){t.userData.LOD=A;const e=t.geometry;return dt.assignMeshLOD(t,A).then(i=>(i&&t.userData.LOD==A&&e!=t.geometry,i))}return Promise.resolve(null)}calculateLodLevel(t,A,e,i){var g;if(!A)return-1;let I=10+1;if(t){if(cN&&A["DEBUG:LOD"]!=null)return A["DEBUG:LOD"];const o=dt.getMeshLODInformation(A.geometry),s=o?.lods;if(!s||s.length<=0||!((g=this.cameraFrustrum)!=null&&g.intersectsObject(A)))return 99;const C=A.geometry.boundingBox;if(C&&t.isPerspectiveCamera){const a=t;if(A.geometry.attributes.color&&A.geometry.attributes.color.count<100&&A.geometry.boundingSphere){this._sphere.copy(A.geometry.boundingSphere),this._sphere.applyMatrix4(A.matrixWorld);const d=t.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(d))return 0}if(this._tempBox.copy(C),this._tempBox.applyMatrix4(A.matrixWorld),this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&a.fov>70){const d=this._tempBox.min,c=this._tempBox.max;let u=d.x,p=d.y,D=c.x,m=c.y;const M=2,k=1.5,R=(d.x+c.x)*.5,N=(d.y+c.y)*.5;u=(u-R)*M+R,p=(p-N)*M+N,D=(D-R)*M+R,m=(m-N)*M+N;const y=u<0&&D>0?0:Math.min(Math.abs(d.x),Math.abs(c.x)),U=p<0&&m>0?0:Math.min(Math.abs(d.y),Math.abs(c.y)),_=Math.max(y,U);e.lastCentrality=(k-_)*(k-_)*(k-_)}else e.lastCentrality=1;const n=this._tempBox.getSize(this._tempBoxSize);n.multiplyScalar(.5),screen.availHeight>0&&n.multiplyScalar(this.renderer.domElement.clientHeight/screen.availHeight),n.x*=a.aspect;const B=t.matrixWorldInverse,Q=new AC;Q.copy(C),Q.applyMatrix4(A.matrixWorld),Q.applyMatrix4(B);const E=Q.getSize(this._tempBox2Size),h=Math.max(E.x,E.y);if(Math.max(n.x,n.y)!=0&&h!=0&&(n.z=E.z/Math.max(E.x,E.y)*Math.max(n.x,n.y)),e.lastScreenCoverage=Math.max(n.x,n.y,n.z),e.lastScreenspaceVolume.copy(n),e.lastScreenCoverage*=e.lastCentrality,cN&&bC.debugDrawLine){const d=this.tempMatrix.copy(this.projectionScreenMatrix);d.invert();const c=bC.corner0,u=bC.corner1,p=bC.corner2,D=bC.corner3;c.copy(this._tempBox.min),u.copy(this._tempBox.max),u.x=c.x,p.copy(this._tempBox.max),p.y=c.y,D.copy(this._tempBox.max);const m=(c.z+D.z)*.5;c.z=u.z=p.z=D.z=m,c.applyMatrix4(d),u.applyMatrix4(d),p.applyMatrix4(d),D.applyMatrix4(d),bC.debugDrawLine(c,u,255),bC.debugDrawLine(c,p,255),bC.debugDrawLine(u,D,255),bC.debugDrawLine(p,D,255)}let l=999;if(s&&e.lastScreenCoverage>0){for(let d=0;d<s.length;d++)if(s[d].density/e.lastScreenCoverage<i){l=d;break}}l<I&&(I=l)}}return I}};let KC=bC;KC.corner0=new hA,KC.corner1=new hA,KC.corner2=new hA,KC.corner3=new hA;class qoA{constructor(){this.lastLodLevel=0,this.lastScreenCoverage=0,this.lastScreenspaceVolume=new hA,this.lastCentrality=0}}const o1=Symbol("NEEDLE_mesh_lod"),iS=Symbol("NEEDLE_texture_lod");function s1(t){if(!t)return null;let A=null,e=null;for(let i=t;i!=null;i=Object.getPrototypeOf(i)){const g=Object.getOwnPropertySymbols(i),I=g.find(s=>s.toString()=="Symbol(renderer)"),o=g.find(s=>s.toString()=="Symbol(scene)");!A&&I!=null&&(A=t[I].threeRenderer),!e&&o!=null&&(e=t[o])}if(A){console.log("Adding Needle LODs to modelviewer");const i=new KC(A);if(i.plugins.push(new xoA(t)),i.enable(),e){const g=e.camera||e.traverse(I=>I.type=="PerspectiveCamera")[0];g&&A.render(e,g)}return()=>{i.disable()}}return null}class xoA{constructor(A){this._didWarnAboutMissingUrl=!1,this.modelviewer=A}onBeforeUpdateLOD(A,e,i,g){this.tryParseMeshLOD(e,g),this.tryParseTextureLOD(e,g)}getUrl(){let A=this.modelviewer.getAttribute("src");return A||(A=this.modelviewer.src),A||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",this.modelviewer),this._didWarnAboutMissingUrl=!0),A}tryGetCurrentGLTF(A){return A._currentGLTF}tryParseTextureLOD(A,e){if(e[iS]==!0)return;e[iS]=!0;const i=this.tryGetCurrentGLTF(A),g=this.getUrl();if(g&&i&&e.material){let I=function(s){var C,a,n;if(s[iS]==!0)return;s[iS]=!0,s.userData&&(s.userData.LOD=-1);const B=Object.keys(s);for(let Q=0;Q<B.length;Q++){const E=B[Q],h=s[E];if(h?.isTexture===!0){const l=(a=(C=h.userData)==null?void 0:C.associations)==null?void 0:a.textures,d=i.parser.json.textures[l];if((n=d.extensions)!=null&&n[Xa]){const c=d.extensions[Xa];c&&g&&dt.registerTexture(g,h,c.lods.length,c)}}}};const o=e.material;if(Array.isArray(o))for(const s of o)I(s);else I(o)}}tryParseMeshLOD(A,e){var i,g;if(e[o1]==!0)return;e[o1]=!0;const I=this.getUrl();if(!I)return;const o=(g=(i=e.userData)==null?void 0:i.gltfExtensions)==null?void 0:g[Xa];if(o&&I){const s=e.uuid;dt.registerMesh(I,s,e,0,o.lods.length,o)}}}function LoA(t,A,e,i){i1(A),g1(e),e.register(I=>new dt(I,t));const g=new KC(A);return i?.enableLODsManager!==!1&&g.enable(),g}document.addEventListener("DOMContentLoaded",()=>{s1(document.querySelector("model-viewer"))});var _oA=function(){var t="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",A="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb",e=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]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var g=WebAssembly.validate(e)?A:t,I,o=WebAssembly.instantiate(s(g),{}).then(function(c){I=c.instance,I.exports.__wasm_call_ctors()});function s(c){for(var u=new Uint8Array(c.length),p=0;p<c.length;++p){var D=c.charCodeAt(p);u[p]=D>96?D-97:D>64?D-39:D+4}for(var m=0,p=0;p<c.length;++p)u[m++]=u[p]<60?i[u[p]]:(u[p]-60)*64+u[++p];return u.buffer.slice(0,m)}function C(c,u,p,D,m,M){var k=I.exports.sbrk,R=p+3&-4,N=k(R*D),y=k(m.length),U=new Uint8Array(I.exports.memory.buffer);U.set(m,y);var _=c(N,p,D,y,m.length);if(_==0&&M&&M(N,R,D),u.set(U.subarray(N,N+p*D)),k(N-k(0)),_!=0)throw new Error("Malformed buffer data: "+_)}var a={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},n={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},B=[],Q=0;function E(c){var u={object:new Worker(c),pending:0,requests:{}};return u.object.onmessage=function(p){var D=p.data;u.pending-=D.count,u.requests[D.id][D.action](D.value),delete u.requests[D.id]},u}function h(c){for(var u="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(s(g))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+C.toString()+d.toString(),p=new Blob([u],{type:"text/javascript"}),D=URL.createObjectURL(p),m=0;m<c;++m)B[m]=E(D);URL.revokeObjectURL(D)}function l(c,u,p,D,m){for(var M=B[0],k=1;k<B.length;++k)B[k].pending<M.pending&&(M=B[k]);return new Promise(function(R,N){var y=new Uint8Array(p),U=Q++;M.pending+=c,M.requests[U]={resolve:R,reject:N},M.object.postMessage({id:U,count:c,size:u,source:y,mode:D,filter:m},[y.buffer])})}function d(c){o.then(function(){var u=c.data;try{var p=new Uint8Array(u.count*u.size);C(I.exports[u.mode],p,u.count,u.size,u.source,I.exports[u.filter]),self.postMessage({id:u.id,count:u.count,action:"resolve",value:p},[p.buffer])}catch(D){self.postMessage({id:u.id,count:u.count,action:"reject",value:D})}})}return{ready:o,supported:!0,useWorkers:function(c){h(c)},decodeVertexBuffer:function(c,u,p,D,m){C(I.exports.meshopt_decodeVertexBuffer,c,u,p,D,I.exports[a[m]])},decodeIndexBuffer:function(c,u,p,D){C(I.exports.meshopt_decodeIndexBuffer,c,u,p,D)},decodeIndexSequence:function(c,u,p,D){C(I.exports.meshopt_decodeIndexSequence,c,u,p,D)},decodeGltfBuffer:function(c,u,p,D,m,M){C(I.exports[n[m]],c,u,p,D,I.exports[a[M]])},decodeGltfBufferAsync:function(c,u,p,D,m){return B.length>0?l(c,u,p,n[D],a[m]):o.then(function(){var M=new Uint8Array(c*u);return C(I.exports[n[D]],M,c,u,p,I.exports[a[m]]),M})}}}();const lN=new WeakMap;class dN extends Lg{constructor(A){super(A),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(A){return this.decoderPath=A,this}setDecoderConfig(A){return this.decoderConfig=A,this}setWorkerLimit(A){return this.workerLimit=A,this}load(A,e,i,g){const I=new ng(this.manager);I.setPath(this.path),I.setResponseType("arraybuffer"),I.setRequestHeader(this.requestHeader),I.setWithCredentials(this.withCredentials),I.load(A,o=>{this.parse(o,e,g)},i,g)}parse(A,e,i=()=>{}){this.decodeDracoFile(A,e,null,null,he).catch(i)}decodeDracoFile(A,e,i,g,I=Dt,o=()=>{}){const s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:g||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:I};return this.decodeGeometry(A,s).then(e).catch(o)}decodeGeometry(A,e){const i=JSON.stringify(e);if(lN.has(A)){const C=lN.get(A);if(C.key===i)return C.promise;if(A.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let g;const I=this.workerNextTaskID++,o=A.byteLength,s=this._getWorker(I,o).then(C=>(g=C,new Promise((a,n)=>{g._callbacks[I]={resolve:a,reject:n},g.postMessage({type:"decode",id:I,taskConfig:e,buffer:A},[A])}))).then(C=>this._createGeometry(C.geometry));return s.catch(()=>!0).then(()=>{g&&I&&this._releaseTask(g,I)}),lN.set(A,{key:i,promise:s}),s}_createGeometry(A){const e=new De;A.index&&e.setIndex(new te(A.index.array,1));for(let i=0;i<A.attributes.length;i++){const g=A.attributes[i],I=g.name,o=g.array,s=g.itemSize,C=new te(o,s);I==="color"&&(this._assignVertexColorSpace(C,g.vertexColorSpace),C.normalized=!(o instanceof Float32Array)),e.setAttribute(I,C)}return e}_assignVertexColorSpace(A,e){if(e!==he)return;const i=new GA;for(let g=0,I=A.count;g<I;g++)i.fromBufferAttribute(A,g).convertSRGBToLinear(),A.setXYZ(g,i.r,i.g,i.b)}_loadLibrary(A,e){const i=new ng(this.manager);return i.setPath(this.decoderPath),i.setResponseType(e),i.setWithCredentials(this.withCredentials),new Promise((g,I)=>{i.load(A,g,void 0,I)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const A=typeof WebAssembly!="object"||this.decoderConfig.type==="js",e=[];return A?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then(i=>{const g=i[0];A||(this.decoderConfig.wasmBinary=i[1]);const I=ToA.toString(),o=["/* draco decoder */",g,"","/* worker */",I.substring(I.indexOf("{")+1,I.lastIndexOf("}"))].join(`
|
|
4416
|
+
`,M),null));if(!p)return null;const D=p.parser;I&&console.log("Loading finished "+n,E.guid);let m=0;if(p.parser.json.textures){let M=!1;for(const k of p.parser.json.textures){if(k!=null&&k.extensions){const R=k?.extensions[Xa];if(R!=null&&R.guid&&R.guid===E.guid){M=!0;break}}m++}if(M){let k=await D.getDependency("texture",m);return I&&console.log('change "'+t.name+'" \u2192 "'+k.name+'"',n,m,k,B),t instanceof lg&&(k=this.copySettings(t,k)),k&&(k.guid=E.guid),l(k)}}if(m=0,p.parser.json.meshes){let M=!1;for(const k of p.parser.json.meshes){if(k!=null&&k.extensions){const R=k?.extensions[Xa];if(R!=null&&R.guid&&R.guid===E.guid){M=!0;break}}m++}if(M){const k=await D.getDependency("mesh",m),R=E;if(I&&console.log(`Loaded Mesh "${k.name}"`,n,m,k,B),k.isMesh===!0){const N=k.geometry;return DI.assignLODInformation(o.url,N,s,A,void 0,R.density),l(N)}else{const N=new Array;for(let y=0;y<k.children.length;y++){const U=k.children[y];if(U instanceof pr){const _=U.geometry;DI.assignLODInformation(o.url,_,s,A,y,R.density),N.push(_)}}return l(N)}}}return l(null)});return this.previouslyLoaded.set(B,h),await h}else if(t instanceof lg){I&&console.log("Load texture from uri: "+n);const B=await new m2().loadAsync(n);return B?(B.guid=C.guid,B.flipY=!1,B.needsUpdate=!0,B.colorSpace=t.colorSpace,I&&console.log(C,B)):pI&&console.warn("failed loading",n),B}}else pI&&console.warn(`Can not load LOD ${A}: no LOD info found for "${s}" ${t.name}`,t.type);return null}static assignLODInformation(t,A,e,i,g,I){if(!A)return;A.userData||(A.userData={});const o=new voA(t,e,i,g,I);A.userData.LODS=o,A.userData.LOD=i}static getAssignedLODInformation(t){var A;return((A=t?.userData)==null?void 0:A.LODS)||null}static copySettings(t,A){return this._copiedTextures.get(t)||(A=A.clone(),this._copiedTextures.set(t,A),A.offset=t.offset,A.repeat=t.repeat,A.colorSpace=t.colorSpace,A)}};let dt=DI;dt.registerTexture=(t,A,e,i)=>{pI&&console.log("> Progressive: register texture",e,A.name,A.uuid,A,i),A.source&&(A.source[EN]=i);const g=i.guid;DI.assignLODInformation(t,A,g,0,0,void 0),DI.lodInfos.set(g,i),DI.lowresCache.set(g,A)},dt.registerMesh=(t,A,e,i,g,I)=>{var o;pI&&console.log("> Progressive: register mesh",g,e.name,I,e.uuid,e);const s=e.geometry;s.userData||(s.userData={}),DI.assignLODInformation(t,s,A,i,g,I.density),DI.lodInfos.set(A,I);let C=DI.lowresCache.get(A);C?C.push(e.geometry):C=[e.geometry],DI.lowresCache.set(A,C);for(const a of QN)(o=a.onRegisteredNewMesh)==null||o.call(a,e,I)},dt.lodInfos=new Map,dt.previouslyLoaded=new Map,dt.lowresCache=new Map,dt._copiedTextures=new Map;class voA{constructor(A,e,i,g,I){this.url=A,this.key=e,this.level=i,g!=null&&(this.index=g),I!=null&&(this.density=I)}}const cN=BN("debugprogressive"),JoA=BN("noprogressive"),bC=class{constructor(t){this.projectionScreenMatrix=new gt,this.cameraFrustrum=new t2,this.updateInterval=0,this.pause=!1,this.plugins=[],this._frame=0,this._sphere=new tC,this._tempBox=new AC,this.tempMatrix=new gt,this._tempWorldPosition=new hA,this._tempBoxSize=new hA,this._tempBox2Size=new hA,this.renderer=t}static getObjectLODState(t){var A;return(A=t.userData)==null?void 0:A.LOD_state}enable(){if(this._originalRender)return;let t=0;this._originalRender=this.renderer.render;const A=this;i1(this.renderer),this.renderer.render=function(e,i){A.renderer.getRenderTarget()==null&&(t=0,A._frame+=1);const g=A._frame,I=t++;A.onBeforeRender(e,i,I,g),A._originalRender.call(this,e,i),A.onAfterRender(e,i,I,g)}}disable(){this._originalRender&&(this.renderer.render=this._originalRender,this._originalRender=void 0)}onBeforeRender(t,A,e,i){}onAfterRender(t,A,e,i){var g,I;if(this.pause)return;const o=this.renderer.renderLists.get(t,0),s=o.opaque;let C=!0;if(s.length===1){const a=s[0].material;(a.name==="EffectMaterial"||a.name==="CopyShader")&&(C=!1)}if(C){if(JoA||this.updateInterval>0&&i%this.updateInterval!=0)return;this.projectionScreenMatrix.multiplyMatrices(A.projectionMatrix,A.matrixWorldInverse),this.cameraFrustrum.setFromProjectionMatrix(this.projectionScreenMatrix,this.renderer.coordinateSystem);const a=1e5;for(const B of s){if(B.material&&(((g=B.geometry)==null?void 0:g.type)==="BoxGeometry"||((I=B.geometry)==null?void 0:I.type)==="BufferGeometry")&&(B.material.name==="SphericalGaussianBlur"||B.material.name=="BackgroundCubeMaterial"||B.material.name==="CubemapFromEquirect"||B.material.name==="EquirectangularToCubeUV")){cN&&(B.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]||(B.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]=!0,console.warn("Ignoring skybox or BLIT object",B,B.material.name,B.material.type)));continue}const Q=B.object;(Q instanceof pr||Q.isMesh)&&this.updateLODs(t,A,Q,a)}const n=o.transparent;for(const B of n){const Q=B.object;(Q instanceof pr||Q.isMesh)&&this.updateLODs(t,A,Q,a)}}}updateLODs(t,A,e,i){var g,I;for(const a of this.plugins)(g=a.onBeforeUpdateLOD)==null||g.call(a,this.renderer,t,A,e);let o=e.userData.LOD_state;o||(o=new qoA,e.userData.LOD_state=o);let s=this.calculateLodLevel(A,e,o,i);s=Math.round(s),s>=0&&this.loadProgressiveMeshes(e,s);let C=0;if(e.material){const a=e["DEBUG:LOD"];if(a!=null&&(C=a),Array.isArray(e.material))for(const n of e.material)this.loadProgressiveTextures(n,C);else this.loadProgressiveTextures(e.material,C)}for(const a of this.plugins)(I=a.onAfterUpdatedLOD)==null||I.call(a,this.renderer,t,A,e,s);o.lastLodLevel=s}loadProgressiveTextures(t,A){return t&&t.userData&&t.userData.LOD!==A?(t.userData.LOD=A,dt.assignTextureLOD(t,A)):Promise.resolve(null)}loadProgressiveMeshes(t,A){if(!t)return Promise.resolve(null);if(t.userData||(t.userData={}),t.userData.LOD!==A){t.userData.LOD=A;const e=t.geometry;return dt.assignMeshLOD(t,A).then(i=>(i&&t.userData.LOD==A&&e!=t.geometry,i))}return Promise.resolve(null)}calculateLodLevel(t,A,e,i){var g;if(!A)return-1;let I=10+1;if(t){if(cN&&A["DEBUG:LOD"]!=null)return A["DEBUG:LOD"];const o=dt.getMeshLODInformation(A.geometry),s=o?.lods;if(!s||s.length<=0||!((g=this.cameraFrustrum)!=null&&g.intersectsObject(A)))return 99;const C=A.geometry.boundingBox;if(C&&t.isPerspectiveCamera){const a=t;if(A.geometry.attributes.color&&A.geometry.attributes.color.count<100&&A.geometry.boundingSphere){this._sphere.copy(A.geometry.boundingSphere),this._sphere.applyMatrix4(A.matrixWorld);const d=t.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(d))return 0}if(this._tempBox.copy(C),this._tempBox.applyMatrix4(A.matrixWorld),this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&a.fov>70){const d=this._tempBox.min,c=this._tempBox.max;let u=d.x,p=d.y,D=c.x,m=c.y;const M=2,k=1.5,R=(d.x+c.x)*.5,N=(d.y+c.y)*.5;u=(u-R)*M+R,p=(p-N)*M+N,D=(D-R)*M+R,m=(m-N)*M+N;const y=u<0&&D>0?0:Math.min(Math.abs(d.x),Math.abs(c.x)),U=p<0&&m>0?0:Math.min(Math.abs(d.y),Math.abs(c.y)),_=Math.max(y,U);e.lastCentrality=(k-_)*(k-_)*(k-_)}else e.lastCentrality=1;const n=this._tempBox.getSize(this._tempBoxSize);n.multiplyScalar(.5),screen.availHeight>0&&n.multiplyScalar(this.renderer.domElement.clientHeight/screen.availHeight),n.x*=a.aspect;const B=t.matrixWorldInverse,Q=new AC;Q.copy(C),Q.applyMatrix4(A.matrixWorld),Q.applyMatrix4(B);const E=Q.getSize(this._tempBox2Size),h=Math.max(E.x,E.y);if(Math.max(n.x,n.y)!=0&&h!=0&&(n.z=E.z/Math.max(E.x,E.y)*Math.max(n.x,n.y)),e.lastScreenCoverage=Math.max(n.x,n.y,n.z),e.lastScreenspaceVolume.copy(n),e.lastScreenCoverage*=e.lastCentrality,cN&&bC.debugDrawLine){const d=this.tempMatrix.copy(this.projectionScreenMatrix);d.invert();const c=bC.corner0,u=bC.corner1,p=bC.corner2,D=bC.corner3;c.copy(this._tempBox.min),u.copy(this._tempBox.max),u.x=c.x,p.copy(this._tempBox.max),p.y=c.y,D.copy(this._tempBox.max);const m=(c.z+D.z)*.5;c.z=u.z=p.z=D.z=m,c.applyMatrix4(d),u.applyMatrix4(d),p.applyMatrix4(d),D.applyMatrix4(d),bC.debugDrawLine(c,u,255),bC.debugDrawLine(c,p,255),bC.debugDrawLine(u,D,255),bC.debugDrawLine(p,D,255)}let l=999;if(s&&e.lastScreenCoverage>0){for(let d=0;d<s.length;d++)if(s[d].density/e.lastScreenCoverage<i){l=d;break}}l<I&&(I=l)}}return I}};let KC=bC;KC.corner0=new hA,KC.corner1=new hA,KC.corner2=new hA,KC.corner3=new hA;class qoA{constructor(){this.lastLodLevel=0,this.lastScreenCoverage=0,this.lastScreenspaceVolume=new hA,this.lastCentrality=0}}const o1=Symbol("NEEDLE_mesh_lod"),iS=Symbol("NEEDLE_texture_lod");function s1(t){if(!t)return null;let A=null,e=null;for(let i=t;i!=null;i=Object.getPrototypeOf(i)){const g=Object.getOwnPropertySymbols(i),I=g.find(s=>s.toString()=="Symbol(renderer)"),o=g.find(s=>s.toString()=="Symbol(scene)");!A&&I!=null&&(A=t[I].threeRenderer),!e&&o!=null&&(e=t[o])}if(A){console.log("Adding Needle LODs to modelviewer");const i=new KC(A);if(i.plugins.push(new xoA(t)),i.enable(),e){const g=e.camera||e.traverse(I=>I.type=="PerspectiveCamera")[0];g&&A.render(e,g)}return()=>{i.disable()}}return null}class xoA{constructor(A){this._didWarnAboutMissingUrl=!1,this.modelviewer=A}onBeforeUpdateLOD(A,e,i,g){this.tryParseMeshLOD(e,g),this.tryParseTextureLOD(e,g)}getUrl(){let A=this.modelviewer.getAttribute("src");return A||(A=this.modelviewer.src),A||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",this.modelviewer),this._didWarnAboutMissingUrl=!0),A}tryGetCurrentGLTF(A){return A._currentGLTF}tryParseTextureLOD(A,e){if(e[iS]==!0)return;e[iS]=!0;const i=this.tryGetCurrentGLTF(A),g=this.getUrl();if(g&&i&&e.material){let I=function(s){var C,a,n;if(s[iS]==!0)return;s[iS]=!0,s.userData&&(s.userData.LOD=-1);const B=Object.keys(s);for(let Q=0;Q<B.length;Q++){const E=B[Q],h=s[E];if(h?.isTexture===!0){const l=(a=(C=h.userData)==null?void 0:C.associations)==null?void 0:a.textures,d=i.parser.json.textures[l];if((n=d.extensions)!=null&&n[Xa]){const c=d.extensions[Xa];c&&g&&dt.registerTexture(g,h,c.lods.length,c)}}}};const o=e.material;if(Array.isArray(o))for(const s of o)I(s);else I(o)}}tryParseMeshLOD(A,e){var i,g;if(e[o1]==!0)return;e[o1]=!0;const I=this.getUrl();if(!I)return;const o=(g=(i=e.userData)==null?void 0:i.gltfExtensions)==null?void 0:g[Xa];if(o&&I){const s=e.uuid;dt.registerMesh(I,s,e,0,o.lods.length,o)}}}function LoA(t,A,e,i){i1(A),g1(e),e.register(I=>new dt(I,t));const g=new KC(A);return i?.enableLODsManager!==!1&&g.enable(),g}document.addEventListener("DOMContentLoaded",()=>{s1(document.querySelector("model-viewer"))});var _oA=function(){var t="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",A="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb",e=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]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var g=WebAssembly.validate(e)?A:t,I,o=WebAssembly.instantiate(s(g),{}).then(function(c){I=c.instance,I.exports.__wasm_call_ctors()});function s(c){for(var u=new Uint8Array(c.length),p=0;p<c.length;++p){var D=c.charCodeAt(p);u[p]=D>96?D-97:D>64?D-39:D+4}for(var m=0,p=0;p<c.length;++p)u[m++]=u[p]<60?i[u[p]]:(u[p]-60)*64+u[++p];return u.buffer.slice(0,m)}function C(c,u,p,D,m,M){var k=I.exports.sbrk,R=p+3&-4,N=k(R*D),y=k(m.length),U=new Uint8Array(I.exports.memory.buffer);U.set(m,y);var _=c(N,p,D,y,m.length);if(_==0&&M&&M(N,R,D),u.set(U.subarray(N,N+p*D)),k(N-k(0)),_!=0)throw new Error("Malformed buffer data: "+_)}var a={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},n={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},B=[],Q=0;function E(c){var u={object:new Worker(c),pending:0,requests:{}};return u.object.onmessage=function(p){var D=p.data;u.pending-=D.count,u.requests[D.id][D.action](D.value),delete u.requests[D.id]},u}function h(c){for(var u="var instance; var ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(s(g))+"]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;"+C.toString()+d.toString(),p=new Blob([u],{type:"text/javascript"}),D=URL.createObjectURL(p),m=0;m<c;++m)B[m]=E(D);URL.revokeObjectURL(D)}function l(c,u,p,D,m){for(var M=B[0],k=1;k<B.length;++k)B[k].pending<M.pending&&(M=B[k]);return new Promise(function(R,N){var y=new Uint8Array(p),U=Q++;M.pending+=c,M.requests[U]={resolve:R,reject:N},M.object.postMessage({id:U,count:c,size:u,source:y,mode:D,filter:m},[y.buffer])})}function d(c){o.then(function(){var u=c.data;try{var p=new Uint8Array(u.count*u.size);C(I.exports[u.mode],p,u.count,u.size,u.source,I.exports[u.filter]),self.postMessage({id:u.id,count:u.count,action:"resolve",value:p},[p.buffer])}catch(D){self.postMessage({id:u.id,count:u.count,action:"reject",value:D})}})}return{ready:o,supported:!0,useWorkers:function(c){h(c)},decodeVertexBuffer:function(c,u,p,D,m){C(I.exports.meshopt_decodeVertexBuffer,c,u,p,D,I.exports[a[m]])},decodeIndexBuffer:function(c,u,p,D){C(I.exports.meshopt_decodeIndexBuffer,c,u,p,D)},decodeIndexSequence:function(c,u,p,D){C(I.exports.meshopt_decodeIndexSequence,c,u,p,D)},decodeGltfBuffer:function(c,u,p,D,m,M){C(I.exports[n[m]],c,u,p,D,I.exports[a[M]])},decodeGltfBufferAsync:function(c,u,p,D,m){return B.length>0?l(c,u,p,n[D],a[m]):o.then(function(){var M=new Uint8Array(c*u);return C(I.exports[n[D]],M,c,u,p,I.exports[a[m]]),M})}}}();const lN=new WeakMap;class dN extends Lg{constructor(A){super(A),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(A){return this.decoderPath=A,this}setDecoderConfig(A){return this.decoderConfig=A,this}setWorkerLimit(A){return this.workerLimit=A,this}load(A,e,i,g){const I=new ng(this.manager);I.setPath(this.path),I.setResponseType("arraybuffer"),I.setRequestHeader(this.requestHeader),I.setWithCredentials(this.withCredentials),I.load(A,o=>{this.parse(o,e,g)},i,g)}parse(A,e,i=()=>{}){this.decodeDracoFile(A,e,null,null,he).catch(i)}decodeDracoFile(A,e,i,g,I=Dt,o=()=>{}){const s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:g||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:I};return this.decodeGeometry(A,s).then(e).catch(o)}decodeGeometry(A,e){const i=JSON.stringify(e);if(lN.has(A)){const C=lN.get(A);if(C.key===i)return C.promise;if(A.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let g;const I=this.workerNextTaskID++,o=A.byteLength,s=this._getWorker(I,o).then(C=>(g=C,new Promise((a,n)=>{g._callbacks[I]={resolve:a,reject:n},g.postMessage({type:"decode",id:I,taskConfig:e,buffer:A},[A])}))).then(C=>this._createGeometry(C.geometry));return s.catch(()=>!0).then(()=>{g&&I&&this._releaseTask(g,I)}),lN.set(A,{key:i,promise:s}),s}_createGeometry(A){const e=new De;A.index&&e.setIndex(new te(A.index.array,1));for(let i=0;i<A.attributes.length;i++){const g=A.attributes[i],I=g.name,o=g.array,s=g.itemSize,C=new te(o,s);I==="color"&&(this._assignVertexColorSpace(C,g.vertexColorSpace),C.normalized=!(o instanceof Float32Array)),e.setAttribute(I,C)}return e}_assignVertexColorSpace(A,e){if(e!==he)return;const i=new GA;for(let g=0,I=A.count;g<I;g++)i.fromBufferAttribute(A,g).convertSRGBToLinear(),A.setXYZ(g,i.r,i.g,i.b)}_loadLibrary(A,e){const i=new ng(this.manager);return i.setPath(this.decoderPath),i.setResponseType(e),i.setWithCredentials(this.withCredentials),new Promise((g,I)=>{i.load(A,g,void 0,I)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const A=typeof WebAssembly!="object"||this.decoderConfig.type==="js",e=[];return A?e.push(this._loadLibrary("draco_decoder.js","text")):(e.push(this._loadLibrary("draco_wasm_wrapper.js","text")),e.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(e).then(i=>{const g=i[0];A||(this.decoderConfig.wasmBinary=i[1]);const I=ToA.toString(),o=["/* draco decoder */",g,"","/* worker */",I.substring(I.indexOf("{")+1,I.lastIndexOf("}"))].join(`
|
|
4417
4417
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([o]))}),this.decoderPending}_getWorker(A,e){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const g=new Worker(this.workerSourceURL);g._callbacks={},g._taskCosts={},g._taskLoad=0,g.postMessage({type:"init",decoderConfig:this.decoderConfig}),g.onmessage=function(I){const o=I.data;switch(o.type){case"decode":g._callbacks[o.id].resolve(o);break;case"error":g._callbacks[o.id].reject(o);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+o.type+'"')}},this.workerPool.push(g)}else this.workerPool.sort(function(g,I){return g._taskLoad>I._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[A]=e,i._taskLoad+=e,i})}_releaseTask(A,e){A._taskLoad-=A._taskCosts[e],delete A._callbacks[e],delete A._taskCosts[e]}debug(){console.log("Task load: ",this.workerPool.map(A=>A._taskLoad))}dispose(){for(let A=0;A<this.workerPool.length;++A)this.workerPool[A].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function ToA(){let t,A;onmessage=function(o){const s=o.data;switch(s.type){case"init":t=s.decoderConfig,A=new Promise(function(n){t.onModuleLoaded=function(B){n({draco:B})},DracoDecoderModule(t)});break;case"decode":const C=s.buffer,a=s.taskConfig;A.then(n=>{const B=n.draco,Q=new B.Decoder;try{const E=e(B,Q,new Int8Array(C),a),h=E.attributes.map(l=>l.array.buffer);E.index&&h.push(E.index.array.buffer),self.postMessage({type:"decode",id:s.id,geometry:E},h)}catch(E){console.error(E),self.postMessage({type:"error",id:s.id,error:E.message})}finally{B.destroy(Q)}});break}};function e(o,s,C,a){const n=a.attributeIDs,B=a.attributeTypes;let Q,E;const h=s.GetEncodedGeometryType(C);if(h===o.TRIANGULAR_MESH)Q=new o.Mesh,E=s.DecodeArrayToMesh(C,C.byteLength,Q);else if(h===o.POINT_CLOUD)Q=new o.PointCloud,E=s.DecodeArrayToPointCloud(C,C.byteLength,Q);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!E.ok()||Q.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+E.error_msg());const l={index:null,attributes:[]};for(const d in n){const c=self[B[d]];let u,p;if(a.useUniqueIDs)p=n[d],u=s.GetAttributeByUniqueId(Q,p);else{if(p=s.GetAttributeId(Q,o[n[d]]),p===-1)continue;u=s.GetAttribute(Q,p)}const D=g(o,s,Q,d,c,u);d==="color"&&(D.vertexColorSpace=a.vertexColorSpace),l.attributes.push(D)}return h===o.TRIANGULAR_MESH&&(l.index=i(o,s,Q)),o.destroy(Q),l}function i(o,s,C){const a=C.num_faces()*3,n=a*4,B=o._malloc(n);s.GetTrianglesUInt32Array(C,n,B);const Q=new Uint32Array(o.HEAPF32.buffer,B,a).slice();return o._free(B),{array:Q,itemSize:1}}function g(o,s,C,a,n,B){const Q=B.num_components(),E=C.num_points()*Q,h=E*n.BYTES_PER_ELEMENT,l=I(o,n),d=o._malloc(h);s.GetAttributeDataArrayForAllPoints(C,B,l,h,d);const c=new n(o.HEAPF32.buffer,d,E).slice();return o._free(d),{name:a,array:c,itemSize:Q}}function I(o,s){switch(s){case Float32Array:return o.DT_FLOAT32;case Int8Array:return o.DT_INT8;case Int16Array:return o.DT_INT16;case Int32Array:return o.DT_INT32;case Uint8Array:return o.DT_UINT8;case Uint16Array:return o.DT_UINT16;case Uint32Array:return o.DT_UINT32}}}class HoA{constructor(A=4){this.pool=A,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(A){if(!this.workers[A]){const e=this.workerCreator();e.addEventListener("message",this._onMessage.bind(this,A)),this.workers[A]=e}}_getIdleWorker(){for(let A=0;A<this.pool;A++)if(!(this.workerStatus&1<<A))return A;return-1}_onMessage(A,e){const i=this.workersResolve[A];if(i&&i(e),this.queue.length){const{resolve:g,msg:I,transfer:o}=this.queue.shift();this.workersResolve[A]=g,this.workers[A].postMessage(I,o)}else this.workerStatus^=1<<A}setWorkerCreator(A){this.workerCreator=A}setWorkerLimit(A){this.pool=A}postMessage(A,e){return new Promise(i=>{const g=this._getIdleWorker();g!==-1?(this._initWorker(g),this.workerStatus|=1<<g,this.workersResolve[g]=i,this.workers[g].postMessage(A,e)):this.queue.push({resolve:i,msg:A,transfer:e})})}dispose(){this.workers.forEach(A=>A.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const YoA=0,C1=2,OoA=1,a1=2,PoA=0,joA=1,WoA=10,ZoA=0,n1=9,r1=15,B1=16,Q1=22,E1=37,h1=43,c1=76,l1=83,d1=97,u1=100,p1=103,D1=109,w1=165,y1=166;class VoA{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class Qu{constructor(A,e,i,g){this._dataView=new DataView(A.buffer,A.byteOffset+e,i),this._littleEndian=g,this._offset=0}_nextUint8(){const A=this._dataView.getUint8(this._offset);return this._offset+=1,A}_nextUint16(){const A=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,A}_nextUint32(){const A=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,A}_nextUint64(){const A=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,A}_nextInt32(){const A=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,A}_skip(A){return this._offset+=A,this}_scan(A,e=0){const i=this._offset;let g=0;for(;this._dataView.getUint8(this._offset)!==e&&g<A;)g++,this._offset++;return g<A&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,g)}}const YI=[171,75,84,88,32,50,48,187,13,10,26,10];function S1(t){return typeof TextDecoder<"u"?new TextDecoder().decode(t):Buffer.from(t).toString("utf8")}function zoA(t){const A=new Uint8Array(t.buffer,t.byteOffset,YI.length);if(A[0]!==YI[0]||A[1]!==YI[1]||A[2]!==YI[2]||A[3]!==YI[3]||A[4]!==YI[4]||A[5]!==YI[5]||A[6]!==YI[6]||A[7]!==YI[7]||A[8]!==YI[8]||A[9]!==YI[9]||A[10]!==YI[10]||A[11]!==YI[11])throw new Error("Missing KTX 2.0 identifier.");const e=new VoA,i=17*Uint32Array.BYTES_PER_ELEMENT,g=new Qu(t,YI.length,i,!0);e.vkFormat=g._nextUint32(),e.typeSize=g._nextUint32(),e.pixelWidth=g._nextUint32(),e.pixelHeight=g._nextUint32(),e.pixelDepth=g._nextUint32(),e.layerCount=g._nextUint32(),e.faceCount=g._nextUint32();const I=g._nextUint32();e.supercompressionScheme=g._nextUint32();const o=g._nextUint32(),s=g._nextUint32(),C=g._nextUint32(),a=g._nextUint32(),n=g._nextUint64(),B=g._nextUint64(),Q=new Qu(t,YI.length+i,3*I*8,!0);for(let J=0;J<I;J++)e.levels.push({levelData:new Uint8Array(t.buffer,t.byteOffset+Q._nextUint64(),Q._nextUint64()),uncompressedByteLength:Q._nextUint64()});const E=new Qu(t,o,s,!0),h={vendorId:E._skip(4)._nextUint16(),descriptorType:E._nextUint16(),versionNumber:E._nextUint16(),descriptorBlockSize:E._nextUint16(),colorModel:E._nextUint8(),colorPrimaries:E._nextUint8(),transferFunction:E._nextUint8(),flags:E._nextUint8(),texelBlockDimension:[E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8()],bytesPlane:[E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8()],samples:[]},l=(h.descriptorBlockSize/4-6)/4;for(let J=0;J<l;J++){const T={bitOffset:E._nextUint16(),bitLength:E._nextUint8(),channelType:E._nextUint8(),samplePosition:[E._nextUint8(),E._nextUint8(),E._nextUint8(),E._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&T.channelType?(T.sampleLower=E._nextInt32(),T.sampleUpper=E._nextInt32()):(T.sampleLower=E._nextUint32(),T.sampleUpper=E._nextUint32()),h.samples[J]=T}e.dataFormatDescriptor.length=0,e.dataFormatDescriptor.push(h);const d=new Qu(t,C,a,!0);for(;d._offset<a;){const J=d._nextUint32(),T=d._scan(J),Z=S1(T),V=d._scan(J-T.byteLength);e.keyValue[Z]=Z.match(/^ktx/i)?S1(V):V,d._offset%4&&d._skip(4-d._offset%4)}if(B<=0)return e;const c=new Qu(t,n,B,!0),u=c._nextUint16(),p=c._nextUint16(),D=c._nextUint32(),m=c._nextUint32(),M=c._nextUint32(),k=c._nextUint32(),R=[];for(let J=0;J<I;J++)R.push({imageFlags:c._nextUint32(),rgbSliceByteOffset:c._nextUint32(),rgbSliceByteLength:c._nextUint32(),alphaSliceByteOffset:c._nextUint32(),alphaSliceByteLength:c._nextUint32()});const N=n+c._offset,y=N+D,U=y+m,_=U+M,Y=new Uint8Array(t.buffer,t.byteOffset+N,D),v=new Uint8Array(t.buffer,t.byteOffset+y,m),O=new Uint8Array(t.buffer,t.byteOffset+U,M),K=new Uint8Array(t.buffer,t.byteOffset+_,k);return e.globalData={endpointCount:u,selectorCount:p,imageDescs:R,endpointsData:Y,selectorsData:v,tablesData:O,extendedData:K},e}let uN,$a,pN;const DN={env:{emscripten_notify_memory_growth:function(t){pN=new Uint8Array($a.exports.memory.buffer)}}};let XoA=class{init(){return uN||(uN=typeof fetch<"u"?fetch("data:application/wasm;base64,"+m1).then(t=>t.arrayBuffer()).then(t=>WebAssembly.instantiate(t,DN)).then(this._init):WebAssembly.instantiate(Buffer.from(m1,"base64"),DN).then(this._init),uN)}_init(t){$a=t.instance,DN.env.emscripten_notify_memory_growth(0)}decode(t,A=0){if(!$a)throw new Error("ZSTDDecoder: Await .init() before decoding.");const e=t.byteLength,i=$a.exports.malloc(e);pN.set(t,i),A=A||Number($a.exports.ZSTD_findDecompressedSize(i,e));const g=$a.exports.malloc(A),I=$a.exports.ZSTD_decompress(g,A,i,e),o=pN.slice(g,g+I);return $a.exports.free(i),$a.exports.free(g),o}};const m1="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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",wN=new WeakMap;let yN=0,SN;class yC extends Lg{constructor(A){super(A),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new HoA,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(A){return this.transcoderPath=A,this}setWorkerLimit(A){return this.workerPool.setWorkerLimit(A),this}async detectSupportAsync(A){return this.workerConfig={astcSupported:await A.hasFeatureAsync("texture-compression-astc"),etc1Supported:await A.hasFeatureAsync("texture-compression-etc1"),etc2Supported:await A.hasFeatureAsync("texture-compression-etc2"),dxtSupported:await A.hasFeatureAsync("texture-compression-bc"),bptcSupported:await A.hasFeatureAsync("texture-compression-bptc"),pvrtcSupported:await A.hasFeatureAsync("texture-compression-pvrtc")},this}detectSupport(A){return A.isWebGPURenderer===!0?this.workerConfig={astcSupported:A.hasFeature("texture-compression-astc"),etc1Supported:A.hasFeature("texture-compression-etc1"),etc2Supported:A.hasFeature("texture-compression-etc2"),dxtSupported:A.hasFeature("texture-compression-bc"),bptcSupported:A.hasFeature("texture-compression-bptc"),pvrtcSupported:A.hasFeature("texture-compression-pvrtc")}:(this.workerConfig={astcSupported:A.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:A.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:A.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:A.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:A.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:A.extensions.has("WEBGL_compressed_texture_pvrtc")||A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},A.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const A=new ng(this.manager);A.setPath(this.transcoderPath),A.setWithCredentials(this.withCredentials);const e=A.loadAsync("basis_transcoder.js"),i=new ng(this.manager);i.setPath(this.transcoderPath),i.setResponseType("arraybuffer"),i.setWithCredentials(this.withCredentials);const g=i.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([e,g]).then(([I,o])=>{const s=yC.BasisWorker.toString(),C=["/* constants */","let _EngineFormat = "+JSON.stringify(yC.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(yC.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(yC.BasisFormat),"/* basis_transcoder.js */",I,"/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(`
|
|
4418
4418
|
`);this.workerSourceURL=URL.createObjectURL(new Blob([C])),this.transcoderBinary=o,this.workerPool.setWorkerCreator(()=>{const a=new Worker(this.workerSourceURL),n=this.transcoderBinary.slice(0);return a.postMessage({type:"init",config:this.workerConfig,transcoderBinary:n},[n]),a})}),yN>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),yN++}return this.transcoderPending}load(A,e,i,g){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const I=new ng(this.manager);I.setResponseType("arraybuffer"),I.setWithCredentials(this.withCredentials),I.load(A,o=>{if(wN.has(o))return wN.get(o).promise.then(e).catch(g);this._createTexture(o).then(s=>e?e(s):null).catch(g)},i,g)}_createTextureFrom(A,e){const{faces:i,width:g,height:I,format:o,type:s,error:C,dfdFlags:a}=A;if(s==="error")return Promise.reject(C);let n;if(e.faceCount===6)n=new m_(i,o,lt);else{const B=i[0].mipmaps;n=e.layerCount>1?new S_(B,g,I,e.layerCount,o,lt):new kC(B,g,I,o,lt)}return n.minFilter=i[0].mipmaps.length===1?fe:bI,n.magFilter=fe,n.generateMipmaps=!1,n.needsUpdate=!0,n.colorSpace=f1(e),n.premultiplyAlpha=!!(a&OoA),n}async _createTexture(A,e={}){const i=zoA(new Uint8Array(A));if(i.vkFormat!==ZoA)return AsA(i);const g=e,I=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:A,taskConfig:g},[A])).then(o=>this._createTextureFrom(o.data,i));return wN.set(A,{promise:I}),I}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),yN--,this}}yC.BasisFormat={ETC1S:0,UASTC_4x4:1},yC.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16},yC.EngineFormat={RGBAFormat:pt,RGBA_ASTC_4x4_Format:Rw,RGBA_BPTC_Format:Ol,RGBA_ETC2_EAC_Format:Mw,RGBA_PVRTC_4BPPV1_Format:fw,RGBA_S3TC_DXT5_Format:Hl,RGB_ETC1_Format:kw,RGB_ETC2_Format:Gw,RGB_PVRTC_4BPPV1_Format:mw,RGB_S3TC_DXT1_Format:Tl},yC.BasisWorker=function(){let t,A,e;const i=_EngineFormat,g=_TranscoderFormat,I=_BasisFormat;self.addEventListener("message",function(h){const l=h.data;switch(l.type){case"init":t=l.config,o(l.transcoderBinary);break;case"transcode":A.then(()=>{try{const{faces:d,buffers:c,width:u,height:p,hasAlpha:D,format:m,dfdFlags:M}=s(l.buffer);self.postMessage({type:"transcode",id:l.id,faces:d,width:u,height:p,hasAlpha:D,format:m,dfdFlags:M},c)}catch(d){console.error(d),self.postMessage({type:"error",id:l.id,error:d.message})}});break}});function o(h){A=new Promise(l=>{e={wasmBinary:h,onRuntimeInitialized:l},BASIS(e)}).then(()=>{e.initializeBasis(),e.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function s(h){const l=new e.KTX2File(new Uint8Array(h));function d(){l.close(),l.delete()}if(!l.isValid())throw d(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");const c=l.isUASTC()?I.UASTC_4x4:I.ETC1S,u=l.getWidth(),p=l.getHeight(),D=l.getLayers()||1,m=l.getLevels(),M=l.getFaces(),k=l.getHasAlpha(),R=l.getDFDFlags(),{transcoderFormat:N,engineFormat:y}=B(c,u,p,k);if(!u||!p||!m)throw d(),new Error("THREE.KTX2Loader: Invalid texture");if(!l.startTranscoding())throw d(),new Error("THREE.KTX2Loader: .startTranscoding failed");const U=[],_=[];for(let Y=0;Y<M;Y++){const v=[];for(let O=0;O<m;O++){const K=[];let J,T;for(let V=0;V<D;V++){const sA=l.getImageLevelInfo(O,V,Y);Y===0&&O===0&&V===0&&(sA.origWidth%4!==0||sA.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),m>1?(J=sA.origWidth,T=sA.origHeight):(J=sA.width,T=sA.height);const wA=new Uint8Array(l.getImageTranscodedSizeInBytes(O,V,0,N));if(!l.transcodeImage(wA,O,V,Y,N,0,-1,-1))throw d(),new Error("THREE.KTX2Loader: .transcodeImage failed.");K.push(wA)}const Z=E(K);v.push({data:Z,width:J,height:T}),_.push(Z.buffer)}U.push({mipmaps:v,width:u,height:p,format:y})}return d(),{faces:U,buffers:_,width:u,height:p,hasAlpha:k,format:y,dfdFlags:R}}const C=[{if:"astcSupported",basisFormat:[I.UASTC_4x4],transcoderFormat:[g.ASTC_4x4,g.ASTC_4x4],engineFormat:[i.RGBA_ASTC_4x4_Format,i.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.BC7_M5,g.BC7_M5],engineFormat:[i.RGBA_BPTC_Format,i.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.BC1,g.BC3],engineFormat:[i.RGB_S3TC_DXT1_Format,i.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.ETC1,g.ETC2],engineFormat:[i.RGB_ETC2_Format,i.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.ETC1],engineFormat:[i.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[I.ETC1S,I.UASTC_4x4],transcoderFormat:[g.PVRTC1_4_RGB,g.PVRTC1_4_RGBA],engineFormat:[i.RGB_PVRTC_4BPPV1_Format,i.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],a=C.sort(function(h,l){return h.priorityETC1S-l.priorityETC1S}),n=C.sort(function(h,l){return h.priorityUASTC-l.priorityUASTC});function B(h,l,d,c){let u,p;const D=h===I.ETC1S?a:n;for(let m=0;m<D.length;m++){const M=D[m];if(t[M.if]&&M.basisFormat.includes(h)&&!(c&&M.transcoderFormat.length<2)&&!(M.needsPowerOfTwo&&!(Q(l)&&Q(d))))return u=M.transcoderFormat[c?1:0],p=M.engineFormat[c?1:0],{transcoderFormat:u,engineFormat:p}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),u=g.RGBA32,p=i.RGBAFormat,{transcoderFormat:u,engineFormat:p}}function Q(h){return h<=2?!0:(h&h-1)===0&&h!==0}function E(h){if(h.length===1)return h[0];let l=0;for(let u=0;u<h.length;u++){const p=h[u];l+=p.byteLength}const d=new Uint8Array(l);let c=0;for(let u=0;u<h.length;u++){const p=h[u];d.set(p,c),c+=p.byteLength}return d}};const $oA=new Set([pt,Zn,_s]),mN={[D1]:pt,[d1]:pt,[E1]:pt,[h1]:pt,[p1]:Zn,[l1]:Zn,[B1]:Zn,[Q1]:Zn,[u1]:_s,[c1]:_s,[r1]:_s,[n1]:_s,[y1]:Yl,[w1]:Yl},fN={[D1]:Wt,[d1]:ni,[E1]:lt,[h1]:lt,[p1]:Wt,[l1]:ni,[B1]:lt,[Q1]:lt,[u1]:Wt,[c1]:ni,[r1]:lt,[n1]:lt,[y1]:lt,[w1]:lt};async function AsA(t){const{vkFormat:A}=t;if(mN[A]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");let e;t.supercompressionScheme===C1&&(SN||(SN=new Promise(async I=>{const o=new XoA;await o.init(),I(o)})),e=await SN);const i=[];for(let I=0;I<t.levels.length;I++){const o=Math.max(1,t.pixelWidth>>I),s=Math.max(1,t.pixelHeight>>I),C=t.pixelDepth?Math.max(1,t.pixelDepth>>I):0,a=t.levels[I];let n;if(t.supercompressionScheme===YoA)n=a.levelData;else if(t.supercompressionScheme===C1)n=e.decode(a.levelData,a.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");let B;fN[A]===Wt?B=new Float32Array(n.buffer,n.byteOffset,n.byteLength/Float32Array.BYTES_PER_ELEMENT):fN[A]===ni?B=new Uint16Array(n.buffer,n.byteOffset,n.byteLength/Uint16Array.BYTES_PER_ELEMENT):B=n,i.push({data:B,width:o,height:s,depth:C})}let g;if($oA.has(mN[A]))g=t.pixelDepth===0?new so(i[0].data,t.pixelWidth,t.pixelHeight):new _w(i[0].data,t.pixelWidth,t.pixelHeight,t.pixelDepth);else{if(t.pixelDepth>0)throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");g=new kC(i,t.pixelWidth,t.pixelHeight)}return g.mipmaps=i,g.type=fN[A],g.format=mN[A],g.colorSpace=f1(t),g.needsUpdate=!0,Promise.resolve(g)}function f1(t){const A=t.dataFormatDescriptor[0];return A.colorPrimaries===joA?A.transferFunction===a1?he:Dt:A.colorPrimaries===WoA?A.transferFunction===a1?Wl:HE:(A.colorPrimaries===PoA||console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${A.colorPrimaries}"`),KI)}const ec=tA("debugdecoders");let Eu="https://www.gstatic.com/draco/versioned/decoders/1.4.1/",kN="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";fetch(Eu+"draco_decoder.js",{method:"head"}).catch(t=>{Be()&&console.warn('Failed to load draco decoder from "'+Eu+`".
|
|
4419
4419
|
Falling back to local version at "./include/draco"`),Eu="./include/draco/",kN="./include/ktx2/"});let IC,GN,fr;function k1(t){t!==void 0&&typeof t=="string"&&(IC||(IC=new dN),ec&&console.log("Setting draco decoder path to",t),IC.setDecoderPath(t),e1(t))}function G1(t){t!==void 0&&typeof t=="string"&&(IC||(IC=new dN),ec&&console.log("Setting draco decoder type to",t),IC.setDecoderConfig({type:t}))}function M1(t){t!==void 0&&typeof t=="string"&&(fr||(fr=new yC),ec&&console.log("Setting ktx2 transcoder path to",t),fr.setTranscoderPath(t),t1(t))}function gS(t,A){return IC||(IC=new dN,IC.setDecoderPath(Eu),IC.setDecoderConfig({type:"js"}),ec&&console.log("Setting draco decoder path to",Eu)),fr||(fr=new yC,fr.setTranscoderPath(kN),ec&&console.log("Setting ktx2 transcoder path to",kN)),GN||(GN=_oA,ec&&console.log("Using the default meshopt decoder")),A.renderer?fr.detectSupport(A.renderer):console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures will probably fail"),t.dracoLoader||t.setDRACOLoader(IC),t.ktx2Loader||t.setKTX2Loader(fr),t.meshoptDecoder||t.setMeshoptDecoder(GN),t}function esA(t,A=1e-4){A=Math.max(A,Number.EPSILON);const e={},i=t.getIndex(),g=t.getAttribute("position"),I=i?i.count:g.count;let o=0;const s=Object.keys(t.attributes),C={},a={},n=[],B=["getX","getY","getZ","getW"],Q=["setX","setY","setZ","setW"];for(let u=0,p=s.length;u<p;u++){const D=s[u],m=t.attributes[D];C[D]=new te(new m.array.constructor(m.count*m.itemSize),m.itemSize,m.normalized);const M=t.morphAttributes[D];M&&(a[D]=new te(new M.array.constructor(M.count*M.itemSize),M.itemSize,M.normalized))}const E=A*.5,h=Math.log10(1/A),l=Math.pow(10,h),d=E*l;for(let u=0;u<I;u++){const p=i?i.getX(u):u;let D="";for(let m=0,M=s.length;m<M;m++){const k=s[m],R=t.getAttribute(k),N=R.itemSize;for(let y=0;y<N;y++)D+=`${~~(R[B[y]](p)*l+d)},`}if(D in e)n.push(e[D]);else{for(let m=0,M=s.length;m<M;m++){const k=s[m],R=t.getAttribute(k),N=t.morphAttributes[k],y=R.itemSize,U=C[k],_=a[k];for(let Y=0;Y<y;Y++){const v=B[Y],O=Q[Y];if(U[O](o,R[v](p)),N)for(let K=0,J=N.length;K<J;K++)_[K][O](o,N[K][v](p))}}e[D]=o,n.push(o),o++}}const c=t.clone();for(const u in t.attributes){const p=C[u];if(c.setAttribute(u,new te(p.array.slice(0,o*p.itemSize),p.itemSize,p.normalized)),u in a)for(let D=0;D<a[u].length;D++){const m=a[u][D];c.morphAttributes[u][D]=new te(m.array.slice(0,o*m.itemSize),m.itemSize,m.normalized)}}return c.setIndex(n),c}function R1(t,A){if(A===Fx)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),t;if(A===Nw||A===sM){let e=t.getIndex();if(e===null){const o=[],s=t.getAttribute("position");if(s!==void 0){for(let C=0;C<s.count;C++)o.push(C);t.setIndex(o),e=t.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),t}const i=e.count-2,g=[];if(A===Nw)for(let o=1;o<=i;o++)g.push(e.getX(0)),g.push(e.getX(o)),g.push(e.getX(o+1));else for(let o=0;o<i;o++)o%2===0?(g.push(e.getX(o)),g.push(e.getX(o+1)),g.push(e.getX(o+2))):(g.push(e.getX(o+2)),g.push(e.getX(o+1)),g.push(e.getX(o)));g.length/3!==i&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const I=t.clone();return I.setIndex(g),I.clearGroups(),I}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",A),t}class hu extends Lg{constructor(A){super(A),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new osA(e)}),this.register(function(e){return new hsA(e)}),this.register(function(e){return new csA(e)}),this.register(function(e){return new lsA(e)}),this.register(function(e){return new CsA(e)}),this.register(function(e){return new asA(e)}),this.register(function(e){return new nsA(e)}),this.register(function(e){return new rsA(e)}),this.register(function(e){return new IsA(e)}),this.register(function(e){return new BsA(e)}),this.register(function(e){return new ssA(e)}),this.register(function(e){return new EsA(e)}),this.register(function(e){return new QsA(e)}),this.register(function(e){return new isA(e)}),this.register(function(e){return new dsA(e)}),this.register(function(e){return new usA(e)})}load(A,e,i,g){const I=this;let o;if(this.resourcePath!=="")o=this.resourcePath;else if(this.path!==""){const a=Cr.extractUrlBase(A);o=Cr.resolveURL(a,this.path)}else o=Cr.extractUrlBase(A);this.manager.itemStart(A);const s=function(a){g?g(a):console.error(a),I.manager.itemError(A),I.manager.itemEnd(A)},C=new ng(this.manager);C.setPath(this.path),C.setResponseType("arraybuffer"),C.setRequestHeader(this.requestHeader),C.setWithCredentials(this.withCredentials),C.load(A,function(a){try{I.parse(a,o,function(n){e(n),I.manager.itemEnd(A)},s)}catch(n){s(n)}},i,s)}setDRACOLoader(A){return this.dracoLoader=A,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(A){return this.ktx2Loader=A,this}setMeshoptDecoder(A){return this.meshoptDecoder=A,this}register(A){return this.pluginCallbacks.indexOf(A)===-1&&this.pluginCallbacks.push(A),this}unregister(A){return this.pluginCallbacks.indexOf(A)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A),1),this}parse(A,e,i,g){let I;const o={},s={},C=new TextDecoder;if(typeof A=="string")I=JSON.parse(A);else if(A instanceof ArrayBuffer)if(C.decode(new Uint8Array(A,0,4))===U1){try{o[rt.KHR_BINARY_GLTF]=new psA(A)}catch(n){g&&g(n);return}I=JSON.parse(o[rt.KHR_BINARY_GLTF].content)}else I=JSON.parse(C.decode(A));else I=A;if(I.asset===void 0||I.asset.version[0]<2){g&&g(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const a=new NsA(I,{path:e||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});a.fileLoader.setRequestHeader(this.requestHeader);for(let n=0;n<this.pluginCallbacks.length;n++){const B=this.pluginCallbacks[n](a);B.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),s[B.name]=B,o[B.name]=!0}if(I.extensionsUsed)for(let n=0;n<I.extensionsUsed.length;++n){const B=I.extensionsUsed[n],Q=I.extensionsRequired||[];switch(B){case rt.KHR_MATERIALS_UNLIT:o[B]=new gsA;break;case rt.KHR_DRACO_MESH_COMPRESSION:o[B]=new DsA(I,this.dracoLoader);break;case rt.KHR_TEXTURE_TRANSFORM:o[B]=new wsA;break;case rt.KHR_MESH_QUANTIZATION:o[B]=new ysA;break;default:Q.indexOf(B)>=0&&s[B]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+B+'".')}}a.setExtensions(o),a.setPlugins(s),a.parse(i,g)}parseAsync(A,e){const i=this;return new Promise(function(g,I){i.parse(A,e,g,I)})}}function tsA(){let t={};return{get:function(A){return t[A]},add:function(A,e){t[A]=e},remove:function(A){delete t[A]},removeAll:function(){t={}}}}const rt={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_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 isA{constructor(A){this.parser=A,this.name=rt.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const A=this.parser,e=this.parser.json.nodes||[];for(let i=0,g=e.length;i<g;i++){const I=e[i];I.extensions&&I.extensions[this.name]&&I.extensions[this.name].light!==void 0&&A._addNodeRef(this.cache,I.extensions[this.name].light)}}_loadLight(A){const e=this.parser,i="light:"+A;let g=e.cache.get(i);if(g)return g;const I=e.json,o=((I.extensions&&I.extensions[this.name]||{}).lights||[])[A];let s;const C=new GA(16777215);o.color!==void 0&&C.setRGB(o.color[0],o.color[1],o.color[2],Dt);const a=o.range!==void 0?o.range:0;switch(o.type){case"directional":s=new wh(C),s.target.position.set(0,0,-1),s.add(s.target);break;case"point":s=new fd(C),s.distance=a;break;case"spot":s=new Ly(C),s.distance=a,o.spot=o.spot||{},o.spot.innerConeAngle=o.spot.innerConeAngle!==void 0?o.spot.innerConeAngle:0,o.spot.outerConeAngle=o.spot.outerConeAngle!==void 0?o.spot.outerConeAngle:Math.PI/4,s.angle=o.spot.outerConeAngle,s.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,s.target.position.set(0,0,-1),s.add(s.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return s.position.set(0,0,0),s.decay=2,Gr(s,o),o.intensity!==void 0&&(s.intensity=o.intensity),s.name=e.createUniqueName(o.name||"light_"+A),g=Promise.resolve(s),e.cache.add(i,g),g}getDependency(A,e){if(A==="light")return this._loadLight(e)}createNodeAttachment(A){const e=this,i=this.parser,g=i.json.nodes[A],I=(g.extensions&&g.extensions[this.name]||{}).light;return I===void 0?null:this._loadLight(I).then(function(o){return i._getNodeRef(e.cache,I,o)})}}let gsA=class{constructor(){this.name=rt.KHR_MATERIALS_UNLIT}getMaterialType(){return $e}extendParams(t,A,e){const i=[];t.color=new GA(1,1,1),t.opacity=1;const g=A.pbrMetallicRoughness;if(g){if(Array.isArray(g.baseColorFactor)){const I=g.baseColorFactor;t.color.setRGB(I[0],I[1],I[2],Dt),t.opacity=I[3]}g.baseColorTexture!==void 0&&i.push(e.assignTexture(t,"map",g.baseColorTexture,he))}return Promise.all(i)}},IsA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(t,A){const e=this.parser.json.materials[t];if(!e.extensions||!e.extensions[this.name])return Promise.resolve();const i=e.extensions[this.name].emissiveStrength;return i!==void 0&&(A.emissiveIntensity=i),Promise.resolve()}},osA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_CLEARCOAT}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];if(I.clearcoatFactor!==void 0&&(A.clearcoat=I.clearcoatFactor),I.clearcoatTexture!==void 0&&g.push(e.assignTexture(A,"clearcoatMap",I.clearcoatTexture)),I.clearcoatRoughnessFactor!==void 0&&(A.clearcoatRoughness=I.clearcoatRoughnessFactor),I.clearcoatRoughnessTexture!==void 0&&g.push(e.assignTexture(A,"clearcoatRoughnessMap",I.clearcoatRoughnessTexture)),I.clearcoatNormalTexture!==void 0&&(g.push(e.assignTexture(A,"clearcoatNormalMap",I.clearcoatNormalTexture)),I.clearcoatNormalTexture.scale!==void 0)){const o=I.clearcoatNormalTexture.scale;A.clearcoatNormalScale=new eA(o,o)}return Promise.all(g)}},ssA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_IRIDESCENCE}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];return I.iridescenceFactor!==void 0&&(A.iridescence=I.iridescenceFactor),I.iridescenceTexture!==void 0&&g.push(e.assignTexture(A,"iridescenceMap",I.iridescenceTexture)),I.iridescenceIor!==void 0&&(A.iridescenceIOR=I.iridescenceIor),A.iridescenceThicknessRange===void 0&&(A.iridescenceThicknessRange=[100,400]),I.iridescenceThicknessMinimum!==void 0&&(A.iridescenceThicknessRange[0]=I.iridescenceThicknessMinimum),I.iridescenceThicknessMaximum!==void 0&&(A.iridescenceThicknessRange[1]=I.iridescenceThicknessMaximum),I.iridescenceThicknessTexture!==void 0&&g.push(e.assignTexture(A,"iridescenceThicknessMap",I.iridescenceThicknessTexture)),Promise.all(g)}},CsA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_SHEEN}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[];A.sheenColor=new GA(0,0,0),A.sheenRoughness=0,A.sheen=1;const I=i.extensions[this.name];if(I.sheenColorFactor!==void 0){const o=I.sheenColorFactor;A.sheenColor.setRGB(o[0],o[1],o[2],Dt)}return I.sheenRoughnessFactor!==void 0&&(A.sheenRoughness=I.sheenRoughnessFactor),I.sheenColorTexture!==void 0&&g.push(e.assignTexture(A,"sheenColorMap",I.sheenColorTexture,he)),I.sheenRoughnessTexture!==void 0&&g.push(e.assignTexture(A,"sheenRoughnessMap",I.sheenRoughnessTexture)),Promise.all(g)}},asA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_TRANSMISSION}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];return I.transmissionFactor!==void 0&&(A.transmission=I.transmissionFactor),I.transmissionTexture!==void 0&&g.push(e.assignTexture(A,"transmissionMap",I.transmissionTexture)),Promise.all(g)}},nsA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_VOLUME}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];A.thickness=I.thicknessFactor!==void 0?I.thicknessFactor:0,I.thicknessTexture!==void 0&&g.push(e.assignTexture(A,"thicknessMap",I.thicknessTexture)),A.attenuationDistance=I.attenuationDistance||1/0;const o=I.attenuationColor||[1,1,1];return A.attenuationColor=new GA().setRGB(o[0],o[1],o[2],Dt),Promise.all(g)}},rsA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_IOR}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser.json.materials[t];if(!e.extensions||!e.extensions[this.name])return Promise.resolve();const i=e.extensions[this.name];return A.ior=i.ior!==void 0?i.ior:1.5,Promise.resolve()}},BsA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_SPECULAR}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];A.specularIntensity=I.specularFactor!==void 0?I.specularFactor:1,I.specularTexture!==void 0&&g.push(e.assignTexture(A,"specularIntensityMap",I.specularTexture));const o=I.specularColorFactor||[1,1,1];return A.specularColor=new GA().setRGB(o[0],o[1],o[2],Dt),I.specularColorTexture!==void 0&&g.push(e.assignTexture(A,"specularColorMap",I.specularColorTexture,he)),Promise.all(g)}},QsA=class{constructor(t){this.parser=t,this.name=rt.EXT_MATERIALS_BUMP}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];return A.bumpScale=I.bumpFactor!==void 0?I.bumpFactor:1,I.bumpTexture!==void 0&&g.push(e.assignTexture(A,"bumpMap",I.bumpTexture)),Promise.all(g)}},EsA=class{constructor(t){this.parser=t,this.name=rt.KHR_MATERIALS_ANISOTROPY}getMaterialType(t){const A=this.parser.json.materials[t];return!A.extensions||!A.extensions[this.name]?null:So}extendMaterialParams(t,A){const e=this.parser,i=e.json.materials[t];if(!i.extensions||!i.extensions[this.name])return Promise.resolve();const g=[],I=i.extensions[this.name];return I.anisotropyStrength!==void 0&&(A.anisotropy=I.anisotropyStrength),I.anisotropyRotation!==void 0&&(A.anisotropyRotation=I.anisotropyRotation),I.anisotropyTexture!==void 0&&g.push(e.assignTexture(A,"anisotropyMap",I.anisotropyTexture)),Promise.all(g)}};class hsA{constructor(A){this.parser=A,this.name=rt.KHR_TEXTURE_BASISU}loadTexture(A){const e=this.parser,i=e.json,g=i.textures[A];if(!g.extensions||!g.extensions[this.name])return null;const I=g.extensions[this.name],o=e.options.ktx2Loader;if(!o){if(i.extensionsRequired&&i.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return e.loadTextureImage(A,I.source,o)}}class csA{constructor(A){this.parser=A,this.name=rt.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(A){const e=this.name,i=this.parser,g=i.json,I=g.textures[A];if(!I.extensions||!I.extensions[e])return null;const o=I.extensions[e],s=g.images[o.source];let C=i.textureLoader;if(s.uri){const a=i.options.manager.getHandler(s.uri);a!==null&&(C=a)}return this.detectSupport().then(function(a){if(a)return i.loadTextureImage(A,o.source,C);if(g.extensionsRequired&&g.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return i.loadTexture(A)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(A){const e=new Image;e.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",e.onload=e.onerror=function(){A(e.height===1)}})),this.isSupported}}class lsA{constructor(A){this.parser=A,this.name=rt.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(A){const e=this.name,i=this.parser,g=i.json,I=g.textures[A];if(!I.extensions||!I.extensions[e])return null;const o=I.extensions[e],s=g.images[o.source];let C=i.textureLoader;if(s.uri){const a=i.options.manager.getHandler(s.uri);a!==null&&(C=a)}return this.detectSupport().then(function(a){if(a)return i.loadTextureImage(A,o.source,C);if(g.extensionsRequired&&g.extensionsRequired.indexOf(e)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return i.loadTexture(A)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(A){const e=new Image;e.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",e.onload=e.onerror=function(){A(e.height===1)}})),this.isSupported}}class dsA{constructor(A){this.name=rt.EXT_MESHOPT_COMPRESSION,this.parser=A}loadBufferView(A){const e=this.parser.json,i=e.bufferViews[A];if(i.extensions&&i.extensions[this.name]){const g=i.extensions[this.name],I=this.parser.getDependency("buffer",g.buffer),o=this.parser.options.meshoptDecoder;if(!o||!o.supported){if(e.extensionsRequired&&e.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return I.then(function(s){const C=g.byteOffset||0,a=g.byteLength||0,n=g.count,B=g.byteStride,Q=new Uint8Array(s,C,a);return o.decodeGltfBufferAsync?o.decodeGltfBufferAsync(n,B,Q,g.mode,g.filter).then(function(E){return E.buffer}):o.ready.then(function(){const E=new ArrayBuffer(n*B);return o.decodeGltfBuffer(new Uint8Array(E),n,B,Q,g.mode,g.filter),E})})}else return null}}let usA=class{constructor(t){this.name=rt.EXT_MESH_GPU_INSTANCING,this.parser=t}createNodeMesh(t){const A=this.parser.json,e=A.nodes[t];if(!e.extensions||!e.extensions[this.name]||e.mesh===void 0)return null;const i=A.meshes[e.mesh];for(const s of i.primitives)if(s.mode!==Es.TRIANGLES&&s.mode!==Es.TRIANGLE_STRIP&&s.mode!==Es.TRIANGLE_FAN&&s.mode!==void 0)return null;const g=e.extensions[this.name].attributes,I=[],o={};for(const s in g)I.push(this.parser.getDependency("accessor",g[s]).then(C=>(o[s]=C,o[s])));return I.length<1?null:(I.push(this.parser.createNodeMesh(t)),Promise.all(I).then(s=>{const C=s.pop(),a=C.isGroup?C.children:[C],n=s[0].count,B=[];for(const Q of a){const E=new FA,h=new f,l=new UA,d=new f(1,1,1),c=new $M(Q.geometry,Q.material,n);for(let u=0;u<n;u++)o.TRANSLATION&&h.fromBufferAttribute(o.TRANSLATION,u),o.ROTATION&&l.fromBufferAttribute(o.ROTATION,u),o.SCALE&&d.fromBufferAttribute(o.SCALE,u),c.setMatrixAt(u,E.compose(h,l,d));for(const u in o)if(u==="_COLOR_0"){const p=o[u];c.instanceColor=new Co(p.array,p.itemSize,p.normalized)}else u!=="TRANSLATION"&&u!=="ROTATION"&&u!=="SCALE"&&Q.geometry.setAttribute(u,o[u]);SA.prototype.copy.call(c,Q),this.parser.assignFinalMaterial(c),B.push(c)}return C.isGroup?(C.clear(),C.add(...B),C):B[0]}))}};const U1="glTF",cu=12,F1={JSON:1313821514,BIN:5130562};class psA{constructor(A){this.name=rt.KHR_BINARY_GLTF,this.content=null,this.body=null;const e=new DataView(A,0,cu),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(A.slice(0,4))),version:e.getUint32(4,!0),length:e.getUint32(8,!0)},this.header.magic!==U1)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const g=this.header.length-cu,I=new DataView(A,cu);let o=0;for(;o<g;){const s=I.getUint32(o,!0);o+=4;const C=I.getUint32(o,!0);if(o+=4,C===F1.JSON){const a=new Uint8Array(A,cu+o,s);this.content=i.decode(a)}else if(C===F1.BIN){const a=cu+o;this.body=A.slice(a,a+s)}o+=s}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class DsA{constructor(A,e){if(!e)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=rt.KHR_DRACO_MESH_COMPRESSION,this.json=A,this.dracoLoader=e,this.dracoLoader.preload()}decodePrimitive(A,e){const i=this.json,g=this.dracoLoader,I=A.extensions[this.name].bufferView,o=A.extensions[this.name].attributes,s={},C={},a={};for(const n in o){const B=RN[n]||n.toLowerCase();s[B]=o[n]}for(const n in A.attributes){const B=RN[n]||n.toLowerCase();if(o[n]!==void 0){const Q=i.accessors[A.attributes[n]],E=tc[Q.componentType];a[B]=E.name,C[B]=Q.normalized===!0}}return e.getDependency("bufferView",I).then(function(n){return new Promise(function(B,Q){g.decodeDracoFile(n,function(E){for(const h in E.attributes){const l=E.attributes[h],d=C[h];d!==void 0&&(l.normalized=d)}B(E)},s,a,Dt,Q)})})}}class wsA{constructor(){this.name=rt.KHR_TEXTURE_TRANSFORM}extendTexture(A,e){return(e.texCoord===void 0||e.texCoord===A.channel)&&e.offset===void 0&&e.rotation===void 0&&e.scale===void 0||(A=A.clone(),e.texCoord!==void 0&&(A.channel=e.texCoord),e.offset!==void 0&&A.offset.fromArray(e.offset),e.rotation!==void 0&&(A.rotation=e.rotation),e.scale!==void 0&&A.repeat.fromArray(e.scale),A.needsUpdate=!0),A}}class ysA{constructor(){this.name=rt.KHR_MESH_QUANTIZATION}}class N1 extends Dh{constructor(A,e,i,g){super(A,e,i,g)}copySampleValue_(A){const e=this.resultBuffer,i=this.sampleValues,g=this.valueSize,I=A*g*3+g;for(let o=0;o!==g;o++)e[o]=i[I+o];return e}interpolate_(A,e,i,g){const I=this.resultBuffer,o=this.sampleValues,s=this.valueSize,C=s*2,a=s*3,n=g-e,B=(i-e)/n,Q=B*B,E=Q*B,h=A*a,l=h-a,d=-2*E+3*Q,c=E-Q,u=1-d,p=c-Q+B;for(let D=0;D!==s;D++){const m=o[l+D+s],M=o[l+D+C]*n,k=o[h+D+s],R=o[h+D]*n;I[D]=u*m+p*M+d*k+c*R}return I}}const SsA=new UA;class msA extends N1{interpolate_(A,e,i,g){const I=super.interpolate_(A,e,i,g);return SsA.fromArray(I).normalize().toArray(I),I}}const Es={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},tc={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},b1={9728:ve,9729:fe,9984:TE,9985:UB,9986:ma,9987:bI},K1={33071:ug,33648:RB,10497:es},MN={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},RN={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},kr={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},fsA={CUBICSPLINE:void 0,LINEAR:mC,STEP:Vn},UN={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function ksA(t){return t.DefaultMaterial===void 0&&(t.DefaultMaterial=new LI({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:og})),t.DefaultMaterial}function SQ(t,A,e){for(const i in e.extensions)t[i]===void 0&&(A.userData.gltfExtensions=A.userData.gltfExtensions||{},A.userData.gltfExtensions[i]=e.extensions[i])}function Gr(t,A){A.extras!==void 0&&(typeof A.extras=="object"?Object.assign(t.userData,A.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+A.extras))}function GsA(t,A,e){let i=!1,g=!1,I=!1;for(let a=0,n=A.length;a<n;a++){const B=A[a];if(B.POSITION!==void 0&&(i=!0),B.NORMAL!==void 0&&(g=!0),B.COLOR_0!==void 0&&(I=!0),i&&g&&I)break}if(!i&&!g&&!I)return Promise.resolve(t);const o=[],s=[],C=[];for(let a=0,n=A.length;a<n;a++){const B=A[a];if(i){const Q=B.POSITION!==void 0?e.getDependency("accessor",B.POSITION):t.attributes.position;o.push(Q)}if(g){const Q=B.NORMAL!==void 0?e.getDependency("accessor",B.NORMAL):t.attributes.normal;s.push(Q)}if(I){const Q=B.COLOR_0!==void 0?e.getDependency("accessor",B.COLOR_0):t.attributes.color;C.push(Q)}}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(C)]).then(function(a){const n=a[0],B=a[1],Q=a[2];return i&&(t.morphAttributes.position=n),g&&(t.morphAttributes.normal=B),I&&(t.morphAttributes.color=Q),t.morphTargetsRelative=!0,t})}function MsA(t,A){if(t.updateMorphTargets(),A.weights!==void 0)for(let e=0,i=A.weights.length;e<i;e++)t.morphTargetInfluences[e]=A.weights[e];if(A.extras&&Array.isArray(A.extras.targetNames)){const e=A.extras.targetNames;if(t.morphTargetInfluences.length===e.length){t.morphTargetDictionary={};for(let i=0,g=e.length;i<g;i++)t.morphTargetDictionary[e[i]]=i}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function RsA(t){let A;const e=t.extensions&&t.extensions[rt.KHR_DRACO_MESH_COMPRESSION];if(e?A="draco:"+e.bufferView+":"+e.indices+":"+FN(e.attributes):A=t.indices+":"+FN(t.attributes)+":"+t.mode,t.targets!==void 0)for(let i=0,g=t.targets.length;i<g;i++)A+=":"+FN(t.targets[i]);return A}function FN(t){let A="";const e=Object.keys(t).sort();for(let i=0,g=e.length;i<g;i++)A+=e[i]+":"+t[e[i]]+";";return A}function NN(t){switch(t){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function UsA(t){return t.search(/\.jpe?g($|\?)/i)>0||t.search(/^data\:image\/jpeg/)===0?"image/jpeg":t.search(/\.webp($|\?)/i)>0||t.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const FsA=new FA;class NsA{constructor(A={},e={}){this.json=A,this.extensions={},this.plugins={},this.options=e,this.cache=new tsA,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 i=!1,g=!1,I=-1;typeof navigator<"u"&&(i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,g=navigator.userAgent.indexOf("Firefox")>-1,I=g?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>"u"||i||g&&I<98?this.textureLoader=new La(this.options.manager):this.textureLoader=new oT(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new ng(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(A){this.extensions=A}setPlugins(A){this.plugins=A}parse(A,e){const i=this,g=this.json,I=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(o){return o._markDefs&&o._markDefs()}),Promise.all(this._invokeAll(function(o){return o.beforeRoot&&o.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(o){const s={scene:o[0][g.scene||0],scenes:o[0],animations:o[1],cameras:o[2],asset:g.asset,parser:i,userData:{}};return SQ(I,s,g),Gr(s,g),Promise.all(i._invokeAll(function(C){return C.afterRoot&&C.afterRoot(s)})).then(function(){A(s)})}).catch(e)}_markDefs(){const A=this.json.nodes||[],e=this.json.skins||[],i=this.json.meshes||[];for(let g=0,I=e.length;g<I;g++){const o=e[g].joints;for(let s=0,C=o.length;s<C;s++)A[o[s]].isBone=!0}for(let g=0,I=A.length;g<I;g++){const o=A[g];o.mesh!==void 0&&(this._addNodeRef(this.meshCache,o.mesh),o.skin!==void 0&&(i[o.mesh].isSkinnedMesh=!0)),o.camera!==void 0&&this._addNodeRef(this.cameraCache,o.camera)}}_addNodeRef(A,e){e!==void 0&&(A.refs[e]===void 0&&(A.refs[e]=A.uses[e]=0),A.refs[e]++)}_getNodeRef(A,e,i){if(A.refs[e]<=1)return i;const g=i.clone(),I=(o,s)=>{const C=this.associations.get(o);C!=null&&this.associations.set(s,C);for(const[a,n]of o.children.entries())I(n,s.children[a])};return I(i,g),g.name+="_instance_"+A.uses[e]++,g}_invokeOne(A){const e=Object.values(this.plugins);e.push(this);for(let i=0;i<e.length;i++){const g=A(e[i]);if(g)return g}return null}_invokeAll(A){const e=Object.values(this.plugins);e.unshift(this);const i=[];for(let g=0;g<e.length;g++){const I=A(e[g]);I&&i.push(I)}return i}getDependency(A,e){const i=A+":"+e;let g=this.cache.get(i);if(!g){switch(A){case"scene":g=this.loadScene(e);break;case"node":g=this._invokeOne(function(I){return I.loadNode&&I.loadNode(e)});break;case"mesh":g=this._invokeOne(function(I){return I.loadMesh&&I.loadMesh(e)});break;case"accessor":g=this.loadAccessor(e);break;case"bufferView":g=this._invokeOne(function(I){return I.loadBufferView&&I.loadBufferView(e)});break;case"buffer":g=this.loadBuffer(e);break;case"material":g=this._invokeOne(function(I){return I.loadMaterial&&I.loadMaterial(e)});break;case"texture":g=this._invokeOne(function(I){return I.loadTexture&&I.loadTexture(e)});break;case"skin":g=this.loadSkin(e);break;case"animation":g=this._invokeOne(function(I){return I.loadAnimation&&I.loadAnimation(e)});break;case"camera":g=this.loadCamera(e);break;default:if(g=this._invokeOne(function(I){return I!=this&&I.getDependency&&I.getDependency(A,e)}),!g)throw new Error("Unknown type: "+A);break}this.cache.add(i,g)}return g}getDependencies(A){let e=this.cache.get(A);if(!e){const i=this,g=this.json[A+(A==="mesh"?"es":"s")]||[];e=Promise.all(g.map(function(I,o){return i.getDependency(A,o)})),this.cache.add(A,e)}return e}loadBuffer(A){const e=this.json.buffers[A],i=this.fileLoader;if(e.type&&e.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+e.type+" buffer type is not supported.");if(e.uri===void 0&&A===0)return Promise.resolve(this.extensions[rt.KHR_BINARY_GLTF].body);const g=this.options;return new Promise(function(I,o){i.load(Cr.resolveURL(e.uri,g.path),I,void 0,function(){o(new Error('THREE.GLTFLoader: Failed to load buffer "'+e.uri+'".'))})})}loadBufferView(A){const e=this.json.bufferViews[A];return this.getDependency("buffer",e.buffer).then(function(i){const g=e.byteLength||0,I=e.byteOffset||0;return i.slice(I,I+g)})}loadAccessor(A){const e=this,i=this.json,g=this.json.accessors[A];if(g.bufferView===void 0&&g.sparse===void 0){const o=MN[g.type],s=tc[g.componentType],C=g.normalized===!0,a=new s(g.count*o);return Promise.resolve(new te(a,o,C))}const I=[];return g.bufferView!==void 0?I.push(this.getDependency("bufferView",g.bufferView)):I.push(null),g.sparse!==void 0&&(I.push(this.getDependency("bufferView",g.sparse.indices.bufferView)),I.push(this.getDependency("bufferView",g.sparse.values.bufferView))),Promise.all(I).then(function(o){const s=o[0],C=MN[g.type],a=tc[g.componentType],n=a.BYTES_PER_ELEMENT,B=n*C,Q=g.byteOffset||0,E=g.bufferView!==void 0?i.bufferViews[g.bufferView].byteStride:void 0,h=g.normalized===!0;let l,d;if(E&&E!==B){const c=Math.floor(Q/E),u="InterleavedBuffer:"+g.bufferView+":"+g.componentType+":"+c+":"+g.count;let p=e.cache.get(u);p||(l=new a(s,c*E,g.count*E/n),p=new nd(l,E/n),e.cache.add(u,p)),d=new Do(p,C,Q%E/n,h)}else s===null?l=new a(g.count*C):l=new a(s,Q,g.count*C),d=new te(l,C,h);if(g.sparse!==void 0){const c=MN.SCALAR,u=tc[g.sparse.indices.componentType],p=g.sparse.indices.byteOffset||0,D=g.sparse.values.byteOffset||0,m=new u(o[1],p,g.sparse.count*c),M=new a(o[2],D,g.sparse.count*C);s!==null&&(d=new te(d.array.slice(),d.itemSize,d.normalized));for(let k=0,R=m.length;k<R;k++){const N=m[k];if(d.setX(N,M[k*C]),C>=2&&d.setY(N,M[k*C+1]),C>=3&&d.setZ(N,M[k*C+2]),C>=4&&d.setW(N,M[k*C+3]),C>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return d})}loadTexture(A){const e=this.json,i=this.options,g=e.textures[A].source,I=e.images[g];let o=this.textureLoader;if(I.uri){const s=i.manager.getHandler(I.uri);s!==null&&(o=s)}return this.loadTextureImage(A,g,o)}loadTextureImage(A,e,i){const g=this,I=this.json,o=I.textures[A],s=I.images[e],C=(s.uri||s.bufferView)+":"+o.sampler;if(this.textureCache[C])return this.textureCache[C];const a=this.loadImageSource(e,i).then(function(n){n.flipY=!1,n.name=o.name||s.name||"",n.name===""&&typeof s.uri=="string"&&s.uri.startsWith("data:image/")===!1&&(n.name=s.uri);const B=(I.samplers||{})[o.sampler]||{};return n.magFilter=b1[B.magFilter]||fe,n.minFilter=b1[B.minFilter]||bI,n.wrapS=K1[B.wrapS]||es,n.wrapT=K1[B.wrapT]||es,n.anisotropy=4,g.associations.set(n,{textures:A}),n}).catch(function(){return null});return this.textureCache[C]=a,a}loadImageSource(A,e){const i=this,g=this.json,I=this.options;if(this.sourceCache[A]!==void 0)return this.sourceCache[A].then(B=>B.clone());const o=g.images[A],s=self.URL||self.webkitURL;let C=o.uri||"",a=!1;if(o.bufferView!==void 0)C=i.getDependency("bufferView",o.bufferView).then(function(B){a=!0;const Q=new Blob([B],{type:o.mimeType});return C=s.createObjectURL(Q),C});else if(o.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+A+" is missing URI and bufferView");const n=Promise.resolve(C).then(function(B){return new Promise(function(Q,E){let h=Q;e.isImageBitmapLoader===!0&&(h=function(l){const d=new Ye(l);d.needsUpdate=!0,Q(d)}),e.load(Cr.resolveURL(B,I.path),h,void 0,E)})}).then(function(B){return a===!0&&s.revokeObjectURL(C),B.userData.mimeType=o.mimeType||UsA(o.uri),B}).catch(function(B){throw console.error("THREE.GLTFLoader: Couldn't load texture",C),B});return this.sourceCache[A]=n,n}assignTexture(A,e,i,g){const I=this;return this.getDependency("texture",i.index).then(function(o){if(!o)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(o=o.clone(),o.channel=i.texCoord),I.extensions[rt.KHR_TEXTURE_TRANSFORM]){const s=i.extensions!==void 0?i.extensions[rt.KHR_TEXTURE_TRANSFORM]:void 0;if(s){const C=I.associations.get(o);o=I.extensions[rt.KHR_TEXTURE_TRANSFORM].extendTexture(o,s),I.associations.set(o,C)}}return g!==void 0&&(o.colorSpace=g),A[e]=o,o})}assignFinalMaterial(A){const e=A.geometry;let i=A.material;const g=e.attributes.tangent===void 0,I=e.attributes.color!==void 0,o=e.attributes.normal===void 0;if(A.isPoints){const s="PointsMaterial:"+i.uuid;let C=this.cache.get(s);C||(C=new yy,qe.prototype.copy.call(C,i),C.color.copy(i.color),C.map=i.map,C.sizeAttenuation=!1,this.cache.add(s,C)),i=C}else if(A.isLine){const s="LineBasicMaterial:"+i.uuid;let C=this.cache.get(s);C||(C=new vi,qe.prototype.copy.call(C,i),C.color.copy(i.color),C.map=i.map,this.cache.add(s,C)),i=C}if(g||I||o){let s="ClonedMaterial:"+i.uuid+":";g&&(s+="derivative-tangents:"),I&&(s+="vertex-colors:"),o&&(s+="flat-shading:");let C=this.cache.get(s);C||(C=i.clone(),I&&(C.vertexColors=!0),o&&(C.flatShading=!0),g&&(C.normalScale&&(C.normalScale.y*=-1),C.clearcoatNormalScale&&(C.clearcoatNormalScale.y*=-1)),this.cache.add(s,C),this.associations.set(C,this.associations.get(i))),i=C}A.material=i}getMaterialType(){return LI}loadMaterial(A){const e=this,i=this.json,g=this.extensions,I=i.materials[A];let o;const s={},C=I.extensions||{},a=[];if(C[rt.KHR_MATERIALS_UNLIT]){const B=g[rt.KHR_MATERIALS_UNLIT];o=B.getMaterialType(),a.push(B.extendParams(s,I,e))}else{const B=I.pbrMetallicRoughness||{};if(s.color=new GA(1,1,1),s.opacity=1,Array.isArray(B.baseColorFactor)){const Q=B.baseColorFactor;s.color.setRGB(Q[0],Q[1],Q[2],Dt),s.opacity=Q[3]}B.baseColorTexture!==void 0&&a.push(e.assignTexture(s,"map",B.baseColorTexture,he)),s.metalness=B.metallicFactor!==void 0?B.metallicFactor:1,s.roughness=B.roughnessFactor!==void 0?B.roughnessFactor:1,B.metallicRoughnessTexture!==void 0&&(a.push(e.assignTexture(s,"metalnessMap",B.metallicRoughnessTexture)),a.push(e.assignTexture(s,"roughnessMap",B.metallicRoughnessTexture))),o=this._invokeOne(function(Q){return Q.getMaterialType&&Q.getMaterialType(A)}),a.push(Promise.all(this._invokeAll(function(Q){return Q.extendMaterialParams&&Q.extendMaterialParams(A,s)})))}I.doubleSided===!0&&(s.side=ct);const n=I.alphaMode||UN.OPAQUE;if(n===UN.BLEND?(s.transparent=!0,s.depthWrite=!1):(s.transparent=!1,n===UN.MASK&&(s.alphaTest=I.alphaCutoff!==void 0?I.alphaCutoff:.5)),I.normalTexture!==void 0&&o!==$e&&(a.push(e.assignTexture(s,"normalMap",I.normalTexture)),s.normalScale=new eA(1,1),I.normalTexture.scale!==void 0)){const B=I.normalTexture.scale;s.normalScale.set(B,B)}if(I.occlusionTexture!==void 0&&o!==$e&&(a.push(e.assignTexture(s,"aoMap",I.occlusionTexture)),I.occlusionTexture.strength!==void 0&&(s.aoMapIntensity=I.occlusionTexture.strength)),I.emissiveFactor!==void 0&&o!==$e){const B=I.emissiveFactor;s.emissive=new GA().setRGB(B[0],B[1],B[2],Dt)}return I.emissiveTexture!==void 0&&o!==$e&&a.push(e.assignTexture(s,"emissiveMap",I.emissiveTexture,he)),Promise.all(a).then(function(){const B=new o(s);return I.name&&(B.name=I.name),Gr(B,I),e.associations.set(B,{materials:A}),I.extensions&&SQ(g,B,I),B})}createUniqueName(A){const e=Ct.sanitizeNodeName(A||"");return e in this.nodeNamesUsed?e+"_"+ ++this.nodeNamesUsed[e]:(this.nodeNamesUsed[e]=0,e)}loadGeometries(A){const e=this,i=this.extensions,g=this.primitiveCache;function I(s){return i[rt.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(s,e).then(function(C){return v1(C,s,e)})}const o=[];for(let s=0,C=A.length;s<C;s++){const a=A[s],n=RsA(a),B=g[n];if(B)o.push(B.promise);else{let Q;a.extensions&&a.extensions[rt.KHR_DRACO_MESH_COMPRESSION]?Q=I(a):Q=v1(new De,a,e),g[n]={primitive:a,promise:Q},o.push(Q)}}return Promise.all(o)}loadMesh(A){const e=this,i=this.json,g=this.extensions,I=i.meshes[A],o=I.primitives,s=[];for(let C=0,a=o.length;C<a;C++){const n=o[C].material===void 0?ksA(this.cache):this.getDependency("material",o[C].material);s.push(n)}return s.push(e.loadGeometries(o)),Promise.all(s).then(function(C){const a=C.slice(0,C.length-1),n=C[C.length-1],B=[];for(let E=0,h=n.length;E<h;E++){const l=n[E],d=o[E];let c;const u=a[E];if(d.mode===Es.TRIANGLES||d.mode===Es.TRIANGLE_STRIP||d.mode===Es.TRIANGLE_FAN||d.mode===void 0)c=I.isSkinnedMesh===!0?new wo(l,u):new dA(l,u),c.isSkinnedMesh===!0&&c.normalizeSkinWeights(),d.mode===Es.TRIANGLE_STRIP?c.geometry=R1(c.geometry,sM):d.mode===Es.TRIANGLE_FAN&&(c.geometry=R1(c.geometry,Nw));else if(d.mode===Es.LINES)c=new yo(l,u);else if(d.mode===Es.LINE_STRIP)c=new Ji(l,u);else if(d.mode===Es.LINE_LOOP)c=new iR(l,u);else if(d.mode===Es.POINTS)c=new IR(l,u);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+d.mode);Object.keys(c.geometry.morphAttributes).length>0&&MsA(c,I),c.name=e.createUniqueName(I.name||"mesh_"+A),Gr(c,I),d.extensions&&SQ(g,c,d),e.assignFinalMaterial(c),B.push(c)}for(let E=0,h=B.length;E<h;E++)e.associations.set(B[E],{meshes:A,primitives:E});if(B.length===1)return I.extensions&&SQ(g,B[0],I),B[0];const Q=new oo;I.extensions&&SQ(g,Q,I),e.associations.set(Q,{meshes:A});for(let E=0,h=B.length;E<h;E++)Q.add(B[E]);return Q})}loadCamera(A){let e;const i=this.json.cameras[A],g=i[i.type];if(!g){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return i.type==="perspective"?e=new xe(sg.radToDeg(g.yfov),g.aspectRatio||1,g.znear||1,g.zfar||2e6):i.type==="orthographic"&&(e=new Ka(-g.xmag,g.xmag,g.ymag,-g.ymag,g.znear,g.zfar)),i.name&&(e.name=this.createUniqueName(i.name)),Gr(e,i),Promise.resolve(e)}loadSkin(A){const e=this.json.skins[A],i=[];for(let g=0,I=e.joints.length;g<I;g++)i.push(this._loadNodeShallow(e.joints[g]));return e.inverseBindMatrices!==void 0?i.push(this.getDependency("accessor",e.inverseBindMatrices)):i.push(null),Promise.all(i).then(function(g){const I=g.pop(),o=g,s=[],C=[];for(let a=0,n=o.length;a<n;a++){const B=o[a];if(B){s.push(B);const Q=new FA;I!==null&&Q.fromArray(I.array,a*16),C.push(Q)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',e.joints[a])}return new ly(s,C)})}loadAnimation(A){const e=this.json,i=this,g=e.animations[A],I=g.name?g.name:"animation_"+A,o=[],s=[],C=[],a=[],n=[];let B=0,Q=g.channels.length;for(B=0,Q=g.channels.length;B<Q;B++){const E=g.channels[B],h=g.samplers[E.sampler],l=E.target,d=l.node,c=g.parameters!==void 0?g.parameters[h.input]:h.input,u=g.parameters!==void 0?g.parameters[h.output]:h.output;l.node!==void 0&&(o.push(this.getDependency("node",d)),s.push(this.getDependency("accessor",c)),C.push(this.getDependency("accessor",u)),a.push(h),n.push(l))}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(C),Promise.all(a),Promise.all(n)]).then(function(E){const h=E[0],l=E[1],d=E[2],c=E[3],u=E[4],p=[];for(B=0,Q=h.length;B<Q;B++){const D=h[B],m=l[B],M=d[B],k=c[B],R=u[B];if(D===void 0)continue;D.updateMatrix&&D.updateMatrix();const N=i._createAnimationTracks(D,m,M,k,R);if(N)for(let y=0;y<N.length;y++)p.push(N[y])}return new _I(I,void 0,p)})}createNodeMesh(A){const e=this.json,i=this,g=e.nodes[A];return g.mesh===void 0?null:i.getDependency("mesh",g.mesh).then(function(I){const o=i._getNodeRef(i.meshCache,g.mesh,I);return g.weights!==void 0&&o.traverse(function(s){if(s.isMesh)for(let C=0,a=g.weights.length;C<a;C++)s.morphTargetInfluences[C]=g.weights[C]}),o})}loadNode(A){const e=this.json,i=this,g=e.nodes[A],I=i._loadNodeShallow(A),o=[],s=g.children||[];for(let a=0,n=s.length;a<n;a++)o.push(i.getDependency("node",s[a]));const C=g.skin===void 0?Promise.resolve(null):i.getDependency("skin",g.skin);return Promise.all([I,Promise.all(o),C]).then(function(a){const n=a[0],B=a[1],Q=a[2];Q!==null&&n.traverse(function(E){E.isSkinnedMesh&&E.bind(Q,FsA)});for(let E=0,h=B.length;E<h;E++)n.add(B[E]);return n})}_loadNodeShallow(A){const e=this.json,i=this.extensions,g=this;if(this.nodeCache[A]!==void 0)return this.nodeCache[A];const I=e.nodes[A],o=I.name?g.createUniqueName(I.name):"",s=[],C=g._invokeOne(function(a){return a.createNodeMesh&&a.createNodeMesh(A)});return C&&s.push(C),I.camera!==void 0&&s.push(g.getDependency("camera",I.camera).then(function(a){return g._getNodeRef(g.cameraCache,I.camera,a)})),g._invokeAll(function(a){return a.createNodeAttachment&&a.createNodeAttachment(A)}).forEach(function(a){s.push(a)}),this.nodeCache[A]=Promise.all(s).then(function(a){let n;if(I.isBone===!0?n=new Ed:a.length>1?n=new oo:a.length===1?n=a[0]:n=new SA,n!==a[0])for(let B=0,Q=a.length;B<Q;B++)n.add(a[B]);if(I.name&&(n.userData.name=I.name,n.name=o),Gr(n,I),I.extensions&&SQ(i,n,I),I.matrix!==void 0){const B=new FA;B.fromArray(I.matrix),n.applyMatrix4(B)}else I.translation!==void 0&&n.position.fromArray(I.translation),I.rotation!==void 0&&n.quaternion.fromArray(I.rotation),I.scale!==void 0&&n.scale.fromArray(I.scale);return g.associations.has(n)||g.associations.set(n,{}),g.associations.get(n).nodes=A,n}),this.nodeCache[A]}loadScene(A){const e=this.extensions,i=this.json.scenes[A],g=this,I=new oo;i.name&&(I.name=g.createUniqueName(i.name)),Gr(I,i),i.extensions&&SQ(e,I,i);const o=i.nodes||[],s=[];for(let C=0,a=o.length;C<a;C++)s.push(g.getDependency("node",o[C]));return Promise.all(s).then(function(C){for(let n=0,B=C.length;n<B;n++)I.add(C[n]);const a=n=>{const B=new Map;for(const[Q,E]of g.associations)(Q instanceof qe||Q instanceof Ye)&&B.set(Q,E);return n.traverse(Q=>{const E=g.associations.get(Q);E!=null&&B.set(Q,E)}),B};return g.associations=a(I),I})}_createAnimationTracks(A,e,i,g,I){const o=[],s=A.name?A.name:A.uuid,C=[];kr[I.path]===kr.weights?A.traverse(function(Q){Q.morphTargetInfluences&&C.push(Q.name?Q.name:Q.uuid)}):C.push(s);let a;switch(kr[I.path]){case kr.weights:a=or;break;case kr.rotation:a=GC;break;case kr.position:case kr.scale:a=Ja;break;default:switch(i.itemSize){case 1:a=or;break;case 2:case 3:default:a=Ja;break}break}const n=g.interpolation!==void 0?fsA[g.interpolation]:mC,B=this._getArrayFromAccessor(i);for(let Q=0,E=C.length;Q<E;Q++){const h=new a(C[Q]+"."+kr[I.path],e.array,B,n);g.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(h),o.push(h)}return o}_getArrayFromAccessor(A){let e=A.array;if(A.normalized){const i=NN(e.constructor),g=new Float32Array(e.length);for(let I=0,o=e.length;I<o;I++)g[I]=e[I]*i;e=g}return e}_createCubicSplineTrackInterpolant(A){A.createInterpolant=function(e){const i=this instanceof GC?msA:N1;return new i(this.times,this.values,this.getValueSize()/3,e)},A.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function bsA(t,A,e){const i=A.attributes,g=new mt;if(i.POSITION!==void 0){const s=e.json.accessors[i.POSITION],C=s.min,a=s.max;if(C!==void 0&&a!==void 0){if(g.set(new f(C[0],C[1],C[2]),new f(a[0],a[1],a[2])),s.normalized){const n=NN(tc[s.componentType]);g.min.multiplyScalar(n),g.max.multiplyScalar(n)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const I=A.targets;if(I!==void 0){const s=new f,C=new f;for(let a=0,n=I.length;a<n;a++){const B=I[a];if(B.POSITION!==void 0){const Q=e.json.accessors[B.POSITION],E=Q.min,h=Q.max;if(E!==void 0&&h!==void 0){if(C.setX(Math.max(Math.abs(E[0]),Math.abs(h[0]))),C.setY(Math.max(Math.abs(E[1]),Math.abs(h[1]))),C.setZ(Math.max(Math.abs(E[2]),Math.abs(h[2]))),Q.normalized){const l=NN(tc[Q.componentType]);C.multiplyScalar(l)}s.max(C)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}g.expandByVector(s)}t.boundingBox=g;const o=new ki;g.getCenter(o.center),o.radius=g.min.distanceTo(g.max)/2,t.boundingSphere=o}function v1(t,A,e){const i=A.attributes,g=[];function I(o,s){return e.getDependency("accessor",o).then(function(C){t.setAttribute(s,C)})}for(const o in i){const s=RN[o]||o.toLowerCase();s in t.attributes||g.push(I(i[o],s))}if(A.indices!==void 0&&!t.index){const o=e.getDependency("accessor",A.indices).then(function(s){t.setIndex(s)});g.push(o)}return wt.workingColorSpace!==Dt&&"COLOR_0"in i&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${wt.workingColorSpace}" not supported.`),Gr(t,A),bsA(t,A,e),Promise.all(g).then(function(){return A.targets!==void 0?GsA(t,A.targets,e):t})}const bN=tA("debugtypes");class KsA{constructor(){r(this,"_types",{}),bN&&console.warn("TypeStore: Created",this)}add(A,e){bN&&console.warn("ADD TYPE",A);const i=this._types[A];i===void 0?this._types[A]=e:bN&&i!==e&&console.warn("Type name exists multiple times in your project and may lead to runtime errors:",A)}get(A){return this._types[A]}}const vsA=Symbol("BuiltInType"),W=new KsA,JsA=function(t){W.get(t.name)||W.add(t.name,t)};typeof globalThis!==void 0&&!("OffscreenCanvas"in globalThis)&&(globalThis.OffscreenCanvas=class{constructor(t,A){return r(this,"canvas"),this.canvas=document.createElement("canvas"),this.canvas.width=t,this.canvas.height=A,this.canvas.convertToBlob=(e,i)=>new Promise(g=>{this.canvas.toBlob(g,e,i)}),this.canvas}});/*!
|
|
@@ -6327,7 +6327,7 @@ Texture:`,i),this.setLightmapDebugMaterial()):Pp&&console.log("Use debuglightmap
|
|
|
6327
6327
|
}`};var pcA=Object.defineProperty,DcA=Object.getOwnPropertyDescriptor,Xc=(t,A,e,i)=>{for(var g=i>1?void 0:i?DcA(A,e):A,I=t.length-1,o;I>=0;I--)(o=t[I])&&(g=(i?o(A,e,g):o(g))||g);return i&&g&&pcA(A,e,g),g};const df=tA("debugcontactshadows");var Gv;const o8=(Gv=class extends bA{constructor(){super(...arguments),r(this,"autoFit",!1),r(this,"darkness",.5),r(this,"opacity",.5),r(this,"blur",4),r(this,"occludeBelowGround",!1),r(this,"backfaceShadows",!0),r(this,"shadowCamera"),r(this,"shadowGroup"),r(this,"renderTarget"),r(this,"renderTargetBlur"),r(this,"plane"),r(this,"occluderMesh"),r(this,"blurPlane"),r(this,"depthMaterial"),r(this,"horizontalBlurMaterial"),r(this,"verticalBlurMaterial"),r(this,"textureSize",512)}static auto(t){if(t||(t=Ke.Current),!t)throw new Error("No context provided and no current context set.");let A=this._instances.get(t);if(!A||A.destroyed){const e=new SA;A=Or(e,o8,{autoFit:!1,occludeBelowGround:!1}),this._instances.set(t,A)}return t.scene.add(A.gameObject),A.fitShadows(),A}fitShadows(){df&&console.log("Fitting shadows to scene"),JU(this.gameObject,!1);const t=PU(this.context.scene.children,[this.gameObject]),A=Math.max(.5,this.blur/32),e=t.max.x-t.min.x,i=t.max.z-t.min.z;t.expandByVector(new f(A*e,0,A*i)),df&&Se.DrawWireBox3(t,16776960,60),this.gameObject.parent&&t.applyMatrix4(this.gameObject.parent.matrixWorld.clone().invert());const g=t.min,I=Math.max(1e-5,(t.max.y-g.y)*.002);t.max.y+=I,this.gameObject.position.set((g.x+t.max.x)/2,g.y-I,(g.z+t.max.z)/2),this.gameObject.scale.set(t.max.x-g.x,t.max.y-g.y,t.max.z-g.z),this.gameObject.matrixWorldNeedsUpdate=!0}awake(){JU(this.gameObject,!1)}start(){df&&console.log("Create ContactShadows on "+this.gameObject.name,this),this.shadowGroup=new oo,this.gameObject.add(this.shadowGroup),this.renderTarget=new Pe(this.textureSize,this.textureSize),this.renderTarget.texture.generateMipmaps=!1,this.renderTargetBlur=new Pe(this.textureSize,this.textureSize),this.renderTargetBlur.texture.generateMipmaps=!1;const t=new gg(1,1).rotateX(Math.PI/2);this.gameObject instanceof dA&&(console.warn("ContactShadows can not be added to a Mesh. Please add it to a Group or an empty Object"),oE(this.gameObject,!1));const A=new $e({map:this.renderTarget.texture,opacity:this.opacity,color:0,transparent:!0,depthWrite:!1,side:og});this.plane=new dA(t,A),this.plane.scale.y=-1,this.gameObject.add(this.plane),this.plane&&(this.plane.renderOrder=1),this.occluderMesh=new dA(this.plane.geometry,new $e({depthWrite:!0,stencilWrite:!0,colorWrite:!1,side:ai})).translateY(-1e-4),this.occluderMesh.renderOrder=-100,this.gameObject.add(this.occluderMesh),this.blurPlane=new dA(t),this.blurPlane.visible=!1,this.shadowGroup.add(this.blurPlane),this.shadowCamera=new Ka(-1/2,1/2,1/2,-1/2,0,1),this.shadowCamera.rotation.x=Math.PI/2,this.shadowGroup.add(this.shadowCamera),this.depthMaterial=new ad,this.depthMaterial.userData.darkness={value:this.darkness},this.depthMaterial.blending=MG,this.depthMaterial.blendEquation=Bw,this.depthMaterial.onBeforeCompile=e=>{this.depthMaterial&&(e.uniforms.darkness=this.depthMaterial.userData.darkness,e.fragmentShader=`
|
|
6328
6328
|
uniform float darkness;
|
|
6329
6329
|
${e.fragmentShader.replace("gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );","gl_FragColor = vec4( vec3( 1.0 ), ( 1.0 - fragCoordZ ) * darkness * opacity * (gl_FrontFacing ? 1.0 : 0.66) );")}
|
|
6330
|
-
`)},this.depthMaterial.depthTest=!1,this.depthMaterial.depthWrite=!1,this.horizontalBlurMaterial=new Me(dcA),this.horizontalBlurMaterial.depthTest=!1,this.verticalBlurMaterial=new Me(ucA),this.verticalBlurMaterial.depthTest=!1,this.shadowGroup.visible=!1,this.autoFit&&this.fitShadows()}onDestroy(){var t,A,e,i,g,I,o,s;(t=this.renderTarget)==null||t.dispose(),(A=this.renderTargetBlur)==null||A.dispose(),(e=this.depthMaterial)==null||e.dispose(),(i=this.horizontalBlurMaterial)==null||i.dispose(),(g=this.verticalBlurMaterial)==null||g.dispose(),(I=this.blurPlane)==null||I.geometry.dispose(),(o=this.plane)==null||o.geometry.dispose(),(s=this.occluderMesh)==null||s.geometry.dispose()}onBeforeRender(t){if(!this.renderTarget||!this.renderTargetBlur||!this.depthMaterial||!this.shadowCamera||!this.blurPlane||!this.shadowGroup||!this.plane||!this.horizontalBlurMaterial||!this.verticalBlurMaterial){df&&console.error("ContactShadows: not initialized yet");return}const A=this.context.scene,e=this.context.renderer,i=e.getRenderTarget();this.shadowGroup.visible=!0,this.occluderMesh&&(this.occluderMesh.visible=!1);const g=this.plane.visible;this.plane.visible=!1,this.gameObject instanceof dA&&oE(this.gameObject,!1);const I=A.background;A.background=null,A.overrideMaterial=this.depthMaterial,this.backfaceShadows?this.depthMaterial.side=ct:this.depthMaterial.side=og;const o=e.getClearAlpha();e.setClearAlpha(0);const s=e.xr.enabled;e.xr.enabled=!1;const C=e.renderLists.get(A,0),a=C.transparent;C.transparent=[],e.setRenderTarget(this.renderTarget),e.clear(),e.render(A,this.shadowCamera),C.transparent=a,A.overrideMaterial=null;const n=Math.max(this.blur,.05);this.blurShadow(n*2),this.blurShadow(n*.5),this.shadowGroup.visible=!1,this.occluderMesh&&(this.occluderMesh.visible=this.occludeBelowGround),this.plane.visible=g,e.setRenderTarget(i),e.setClearAlpha(o),A.background=I,e.xr.enabled=s}blurShadow(t){if(!this.blurPlane||!this.shadowCamera||!this.renderTarget||!this.renderTargetBlur||!this.horizontalBlurMaterial||!this.verticalBlurMaterial)return;this.blurPlane.visible=!0;const A=this.gameObject.worldScale,e=(A.x+A.z)/2,i=A.z/e,g=A.x/e;this.blurPlane.material=this.horizontalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTarget.texture,this.horizontalBlurMaterial.uniforms.h.value=t*1/this.textureSize*i;const I=this.context.renderer,o=I.getRenderTarget();I.setRenderTarget(this.renderTargetBlur),I.render(this.blurPlane,this.shadowCamera),this.blurPlane.material=this.verticalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTargetBlur.texture,this.verticalBlurMaterial.uniforms.v.value=t*1/this.textureSize*g,I.setRenderTarget(this.renderTarget),I.render(this.blurPlane,this.shadowCamera),this.blurPlane.visible=!1,I.setRenderTarget(o)}},r(Gv,"_instances",new Map),Gv);let mn=o8;Xc([w()],mn.prototype,"autoFit",2),Xc([w()],mn.prototype,"darkness",2),Xc([w()],mn.prototype,"opacity",2),Xc([w()],mn.prototype,"blur",2),Xc([w()],mn.prototype,"occludeBelowGround",2),Xc([w()],mn.prototype,"backfaceShadows",2);var wcA=Object.defineProperty,ycA=Object.getOwnPropertyDescriptor,AD=(t,A,e,i)=>{for(var g=i>1?void 0:i?ycA(A,e):A,I=t.length-1,o;I>=0;I--)(o=t[I])&&(g=(i?o(A,e,g):o(g))||g);return i&&g&&wcA(A,e,g),g};const s8=tA("debugwebxr"),ScA=new FA().makeRotationY(Math.PI);class To extends bA{constructor(){super(...arguments),r(this,"_arScale",1),r(this,"invertForward",!1),r(this,"customReticle"),r(this,"useXRAnchor",!1),r(this,"arTouchTransform",!1),r(this,"_isPlacing",!0),r(this,"_startOffset",new FA),r(this,"_createdPlacementObject",null),r(this,"_reparentedComponents",[]),r(this,"_placementScene",new QI),r(this,"_reticle",[]),r(this,"_hits",[]),r(this,"_placementStartTime",-1),r(this,"_rigPlacementMatrix"),r(this,"_anchor",null),r(this,"userInput"),r(this,"onPlaceScene",A=>{var e;if(this._isPlacing==!1||A.used)return;let i=this._reticle[0],g=this._hits[0];if(A.origin instanceof Lb){const I=this._reticle[A.origin.index];I&&(i=I,g=this._hits[A.origin.index])}if(!i){console.warn("No reticle to place...");return}if(!i.visible){console.warn("Reticle is not visible (can not place)");return}if((e=pe.active)!=null&&e.isTrackingImages){console.warn("Scene Placement is disabled while images are being tracked");return}A.stopImmediatePropagation(),A.use(),this._isPlacing=!1,this.context.input.removeEventListener("pointerup",this.onPlaceScene),this.onRevertSceneChanges(),i.position.copy(i.lastPos),i.quaternion.copy(i.lastQuat),this.onApplyPose(i),this.useXRAnchor&&this.onCreateAnchor(pe.active,g)}),r(this,"upVec",new f(0,1,0)),r(this,"lookPoint",new f),r(this,"worldUpVec",new f(0,1,0))}get arScale(){return this._arScale}set arScale(A){A!==this._arScale&&(this._arScale=A,this.onScaleChanged())}onEnable(){var A;(A=this.customReticle)==null||A.preload()}supportsXR(A){return A==="immersive-ar"}onEnterXR(A){s8&&console.log("ENTER WEBXR: SessionRoot start..."),this._anchor=null,this.gameObject.updateMatrixWorld(),this._startOffset.copy(this.gameObject.matrixWorld);const e=new SA;this._createdPlacementObject=e,e.name="AR Session Root",this._placementScene.name="AR Placement Scene",this._placementScene.children.length=0;for(let i=this.context.scene.children.length-1;i>=0;i--){const g=this.context.scene.children[i];this._placementScene.add(g)}this.context.scene.add(e),this._reparentedComponents.length=0,this._reparentedComponents.push({comp:this,originalObject:this.gameObject}),IA.addComponent(e,this);for(const i of this._reticle)nC(i);this._reticle.length=0,this._isPlacing=!0,this.context.input.addEventListener("pointerup",this.onPlaceScene,{queue:_C.Late})}onLeaveXR(){this.context.input.removeEventListener("pointerup",this.onPlaceScene,{queue:_C.Late}),this.onRevertSceneChanges(),this._anchor=null,this._rigPlacementMatrix=void 0}onUpdateXR(A){var e,i,g,I;if(A.xr.isTrackingImages){for(const o of this._reticle)o.visible=!1;return}if(this._isPlacing){const o=(e=A.xr.rig)==null?void 0:e.gameObject;o&&o.parent!==this.context.scene&&this.context.scene.add(o);let s=!1;if(A.xr.isPassThrough&&A.xr.controllers.length>0)for(const C of A.xr.controllers){const a=C.getHitTest();a&&(s=!0,this.updateReticleAndHits(A.xr,C.index,a,A.xr.rigScale))}if(!s){const C=A.xr.getHitTest();C&&this.updateReticleAndHits(A.xr,0,C,A.xr.rigScale)}}else{if(this._anchor&&A.xr.referenceSpace){const o=A.xr.frame.getPose(this._anchor.anchorSpace,A.xr.referenceSpace);if(o&&this.context.time.frame%20===0){const s=A.xr.convertSpace(o.transform),C=this._reticle[0];C&&(C.position.copy(s.position),C.quaternion.copy(s.quaternion),this.onApplyPose(C))}}if(this.arTouchTransform?(this.userInput||(this.userInput=new uf(this.context)),(i=this.userInput)==null||i.enable()):(g=this.userInput)==null||g.disable(),this.arTouchTransform&&(I=this.userInput)!=null&&I.hasChanged){if(A.xr.rig){const o=A.xr.rig.gameObject;this.userInput.applyMatrixTo(o.matrix,!0),o.matrix.decompose(o.position,o.quaternion,o.scale),this.userInput.factor=o.scale.x}this.userInput.reset()}}}updateReticleAndHits(A,e,i,g){this._hits[e]=i.hit;let I=this._reticle[e];if(!I){if(this.customReticle)if(this.customReticle.asset)I=mc(this.customReticle.asset);else{this.customReticle.loadAssetAsync();return}else I=new dA(new NE(.07,.09,32).rotateX(-Math.PI/2),new $e({side:ct})),I.name="AR Placement Reticle";if(s8){const o=new is(1);o.position.y+=.01,I.add(o)}this._reticle[e]=I,I.matrixAutoUpdate=!1,I.visible=!1}I.lastPos=I.lastPos||i.position.clone(),I.lastQuat=I.lastQuat||i.quaternion.clone(),I.position.copy(I.lastPos.lerp(i.position,this.context.time.deltaTime/.1)),I.lastPos.copy(I.position),I.quaternion.copy(I.lastQuat.slerp(i.quaternion,this.context.time.deltaTime/.05)),I.lastQuat.copy(I.quaternion),I.scale.set(g,g,g),this.customReticle&&this.applyViewBasedTransform(I),I.updateMatrix(),I.visible=!0,I.parent!==this.context.scene&&this.context.scene.add(I),this._placementStartTime<0&&(this._placementStartTime=this.context.time.realtimeSinceStartup)}onScaleChanged(){}onRevertSceneChanges(){var A;for(const e of this._reticle)e&&(e.visible=!1,e?.removeFromParent());this._reticle.length=0;for(let e=this._placementScene.children.length-1;e>=0;e--){const i=this._placementScene.children[e];this.context.scene.add(i)}(A=this._createdPlacementObject)==null||A.removeFromParent();for(const e of this._reparentedComponents)IA.addComponent(e.originalObject,e.comp)}async onCreateAnchor(A,e){if(e.createAnchor===void 0){console.warn("Hit does not support creating an anchor",e),Be()&&Ei("Hit does not support creating an anchor");return}else{const i=await e.createAnchor(A.viewerPose.transform);A.running&&i&&(this._anchor=i)}}applyViewBasedTransform(A){const e=this.context.mainCamera,i=A,g=e.worldPosition,I=i.worldPosition;this.upVec.set(0,1,0).applyQuaternion(A.quaternion);const o=e.worldPosition;o&&A.position.clone().sub(o).angleTo(this.upVec)<Math.PI/2&&this.upVec.negate();const s=this.upVec.angleTo(this.worldUpVec)*180/Math.PI,C=30;s>C&&s<180-C||s<-C&&s>-180+C?(this.lookPoint.copy(A.position).add(this.upVec),this.lookPoint.y=A.position.y,A.lookAt(this.lookPoint)):(g.y=I.y,A.lookAt(g))}onApplyPose(A){var e,i,g,I;const o=(i=(e=pe.active)==null?void 0:e.rig)==null?void 0:i.gameObject;if(!o){console.warn("No rig object to place");return}(g=pe.active)!=null&&g.rigScale;const s=o.parent||this.context.scene;this._rigPlacementMatrix?(I=this._rigPlacementMatrix)==null||I.decompose(o.position,o.quaternion,o.scale):this._rigPlacementMatrix=o.matrix.clone(),this.applyViewBasedTransform(A),A.updateMatrix(),this.context.scene.add(A),A.attach(o),A.removeFromParent(),o.scale.set(this.arScale,this.arScale,this.arScale),o.position.multiplyScalar(this.arScale),o.updateMatrix(),this.invertForward&&o.matrix.premultiply(ScA),o.matrix.premultiply(this._startOffset),o.matrix.decompose(o.position,o.quaternion,o.scale),s.add(o)}}AD([w()],To.prototype,"arScale",1),AD([w()],To.prototype,"invertForward",2),AD([w(tt)],To.prototype,"customReticle",2),AD([w()],To.prototype,"useXRAnchor",2),AD([w()],To.prototype,"arTouchTransform",2);const Mv=class{constructor(t){r(this,"oneFingerDrag",!0),r(this,"twoFingerRotate",!0),r(this,"twoFingerScale",!0),r(this,"factor",1),r(this,"context"),r(this,"offset"),r(this,"plane"),r(this,"_scale",1),r(this,"_hasChanged",!1),r(this,"_enabled",!1),r(this,"currentlyUsedPointerIds",new Set),r(this,"currentlyUnusedPointerIds",new Set),r(this,"onPointerDownEarly",A=>{this.isActive&&A.stopPropagation()}),r(this,"onPointerDownLate",A=>{A.used?this.currentlyUsedPointerIds.add(A.pointerId):this.currentlyUsedPointerIds.size<=0&&this.currentlyUnusedPointerIds.add(A.pointerId)}),r(this,"onPointerUpEarly",A=>{this.currentlyUsedPointerIds.delete(A.pointerId),this.currentlyUnusedPointerIds.delete(A.pointerId)}),r(this,"prev",new Map),r(this,"_didMultitouch",!1),r(this,"touchStart",A=>{for(let e=0;e<A.changedTouches.length;e++){const i=A.changedTouches[e],g=JT()&&i.clientY<window.innerHeight*.1;this.prev.has(i.identifier)||this.prev.set(i.identifier,{ignore:g,x:0,z:0,screenx:0,screeny:0});const I=this.prev.get(i.identifier);if(I){const o=this.getPositionOnPlane(i.clientX,i.clientY);I.x=o.x,I.z=o.z,I.screenx=i.clientX,I.screeny=i.clientY}}}),r(this,"touchEnd",A=>{A.touches.length<=0&&(this._didMultitouch=!1);for(let e=0;e<A.changedTouches.length;e++){const i=A.changedTouches[e];this.prev.delete(i.identifier)}}),r(this,"touchMove",A=>{if(!A.defaultPrevented&&this.isActive){if(A.touches.length===1){if(this._didMultitouch)return;const e=A.touches[0],i=this.prev.get(e.identifier);if(!i||i.ignore)return;const g=this.getPositionOnPlane(e.clientX,e.clientY),I=g.x-i.x,o=g.z-i.z;if(I===0&&o===0)return;this.oneFingerDrag&&this.addMovement(I,o),i.x=g.x,i.z=g.z,i.screenx=e.clientX,i.screeny=e.clientY;return}else if(A.touches.length===2){this._didMultitouch=!0;const e=A.touches[0],i=A.touches[1],g=this.prev.get(e.identifier),I=this.prev.get(i.identifier);if(!g||!I)return;if(this.twoFingerRotate){const o=Math.atan2(e.clientY-i.clientY,e.clientX-i.clientX),s=Math.atan2(g.screeny-I.screeny,g.screenx-I.screenx),C=o-s;Math.abs(C)>.001&&this.addRotation(C)}if(this.twoFingerScale){const o=e.clientX-i.clientX,s=e.clientY-i.clientY,C=Math.sqrt(o*o+s*s),a=g.screenx-I.screenx,n=g.screeny-I.screeny,B=Math.sqrt(a*a+n*n),Q=C-B;Math.abs(Q)>2&&this.addScale(Q)}g.screenx=e.clientX,g.screeny=e.clientY,I.screenx=i.clientX,I.screeny=i.clientY}}}),r(this,"_raycaster",new eQ),r(this,"_intersection",new f),r(this,"_screenPos",new f),r(this,"_tempMatrix",new FA),this.context=t,this.offset=new FA,this.plane=new qI,this.plane.setFromNormalAndCoplanarPoint(Mv.up,Mv.zero)}reset(){this._scale=1,this.offset.identity()}get hasChanged(){return this._hasChanged}applyMatrixTo(t,A){this._hasChanged=!1,A?(this.offset.invert(),t.premultiply(this.offset)):t.multiply(this.offset)}get isActive(){return this.currentlyUsedPointerIds.size<=0&&this.currentlyUnusedPointerIds.size>0}enable(){this._enabled||(this._enabled=!0,this.context.input.addEventListener("pointerdown",this.onPointerDownEarly,{queue:_C.Early}),this.context.input.addEventListener("pointerdown",this.onPointerDownLate,{queue:_C.Late}),this.context.input.addEventListener("pointerup",this.onPointerUpEarly,{queue:_C.Early}),window.addEventListener("touchstart",this.touchStart,{passive:!1}),window.addEventListener("touchmove",this.touchMove,{passive:!1}),window.addEventListener("touchend",this.touchEnd,{passive:!1}))}disable(){this._enabled&&(this._enabled=!1,this.context.input.removeEventListener("pointerdown",this.onPointerDownEarly,{queue:_C.Early}),this.context.input.removeEventListener("pointerdown",this.onPointerDownLate,{queue:_C.Late}),this.context.input.removeEventListener("pointerup",this.onPointerUpEarly,{queue:_C.Early}),window.removeEventListener("touchstart",this.touchStart),window.removeEventListener("touchmove",this.touchMove),window.removeEventListener("touchend",this.touchEnd))}getPositionOnPlane(t,A){const e=this.context.mainCamera;return this._screenPos.x=t/window.innerWidth*2-1,this._screenPos.y=-(A/window.innerHeight)*2+1,this._screenPos.z=1,this._screenPos.unproject(e),this._raycaster.set(e.position,this._screenPos.sub(e.position)),this._raycaster.ray.intersectPlane(this.plane,this._intersection),this._intersection}addMovement(t,A){t/=this._scale,A/=this._scale,t*=this.factor,A*=this.factor,this.offset.elements[12]+=t,this.offset.elements[14]+=A,(t!==0||A!==0)&&(this._hasChanged=!0)}addScale(t){t/=window.innerWidth,t*=-1,this._scale*=1+t,this._tempMatrix.makeScale(1-t,1-t,1-t),this.offset.premultiply(this._tempMatrix),t!==0&&(this._hasChanged=!0)}addRotation(t){t*=-1,this._tempMatrix.makeRotationY(t),this.offset.premultiply(this._tempMatrix),t!==0&&(this._hasChanged=!0)}};let uf=Mv;r(uf,"up",new f(0,1,0)),r(uf,"zero",new f(0,0,0)),r(uf,"one",new f(1,1,1));const Ri={Handedness:Object.freeze({NONE:"none",LEFT:"left",RIGHT:"right"}),ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ComponentType:Object.freeze({TRIGGER:"trigger",SQUEEZE:"squeeze",TOUCHPAD:"touchpad",THUMBSTICK:"thumbstick",BUTTON:"button"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function C8(t){const A=await fetch(t);if(A.ok)return A.json();throw new Error(A.statusText)}async function mcA(t){if(!t)throw new Error("No basePath supplied");return await C8(`${t}/profilesList.json`)}async function fcA(t,A,e=null,i=!0){if(!t)throw new Error("No xrInputSource supplied");if(!A)throw new Error("No basePath supplied");const g=await mcA(A);let I;if(t.profiles.some(C=>{const a=g[C];return a&&(I={profileId:C,profilePath:`${A}/${a.path}`,deprecated:!!a.deprecated}),!!I}),!I){if(!e)throw new Error("No matching profile name found");const C=g[e];if(!C)throw new Error(`No matching profile name found and default profile "${e}" missing.`);I={profileId:e,profilePath:`${A}/${C.path}`,deprecated:!!C.deprecated}}const o=await C8(I.profilePath);let s;if(i){let C;if(t.handedness==="any"?C=o.layouts[Object.keys(o.layouts)[0]]:C=o.layouts[t.handedness],!C)throw new Error(`No matching handedness, ${t.handedness}, in profile ${I.profileId}`);C.assetPath&&(s=I.profilePath.replace("profile.json",C.assetPath))}return{profile:o,assetPath:s}}const kcA={xAxis:0,yAxis:0,button:0,state:Ri.ComponentState.DEFAULT};function GcA(t=0,A=0){let e=t,i=A;if(Math.sqrt(t*t+A*A)>1){const g=Math.atan2(A,t);e=Math.cos(g),i=Math.sin(g)}return{normalizedXAxis:e*.5+.5,normalizedYAxis:i*.5+.5}}class McA{constructor(A){this.componentProperty=A.componentProperty,this.states=A.states,this.valueNodeName=A.valueNodeName,this.valueNodeProperty=A.valueNodeProperty,this.valueNodeProperty===Ri.VisualResponseProperty.TRANSFORM&&(this.minNodeName=A.minNodeName,this.maxNodeName=A.maxNodeName),this.value=0,this.updateFromComponent(kcA)}updateFromComponent({xAxis:A,yAxis:e,button:i,state:g}){const{normalizedXAxis:I,normalizedYAxis:o}=GcA(A,e);switch(this.componentProperty){case Ri.ComponentProperty.X_AXIS:this.value=this.states.includes(g)?I:.5;break;case Ri.ComponentProperty.Y_AXIS:this.value=this.states.includes(g)?o:.5;break;case Ri.ComponentProperty.BUTTON:this.value=this.states.includes(g)?i:0;break;case Ri.ComponentProperty.STATE:this.valueNodeProperty===Ri.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(g):this.value=this.states.includes(g)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class RcA{constructor(A,e){if(!A||!e||!e.visualResponses||!e.gamepadIndices||Object.keys(e.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=A,this.type=e.type,this.rootNodeName=e.rootNodeName,this.touchPointNodeName=e.touchPointNodeName,this.visualResponses={},Object.keys(e.visualResponses).forEach(i=>{const g=new McA(e.visualResponses[i]);this.visualResponses[i]=g}),this.gamepadIndices=Object.assign({},e.gamepadIndices),this.values={state:Ri.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(A){if(this.values.state=Ri.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&A.buttons.length>this.gamepadIndices.button){const e=A.buttons[this.gamepadIndices.button];this.values.button=e.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,e.pressed||this.values.button===1?this.values.state=Ri.ComponentState.PRESSED:(e.touched||this.values.button>Ri.ButtonTouchThreshold)&&(this.values.state=Ri.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&A.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=A.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Ri.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Ri.AxisTouchThreshold&&(this.values.state=Ri.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&A.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=A.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Ri.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Ri.AxisTouchThreshold&&(this.values.state=Ri.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}}class UcA{constructor(A,e,i){if(!A)throw new Error("No xrInputSource supplied");if(!e)throw new Error("No profile supplied");this.xrInputSource=A,this.assetUrl=i,this.id=e.profileId,this.layoutDescription=e.layouts[A.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(g=>{const I=this.layoutDescription.components[g];this.components[g]=new RcA(g,I)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const A=[];return Object.values(this.components).forEach(e=>{A.push(e.data)}),A}updateFromGamepad(){Object.values(this.components).forEach(A=>{A.updateFromGamepad(this.xrInputSource.gamepad)})}}const FcA="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",NcA="generic-trigger";let bcA=class extends SA{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(t){return this.envMap==t?this:(this.envMap=t,this.traverse(A=>{A.isMesh&&(A.material.envMap=this.envMap,A.material.needsUpdate=!0)}),this)}updateMatrixWorld(t){super.updateMatrixWorld(t),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(A=>{Object.values(A.visualResponses).forEach(e=>{const{valueNode:i,minNode:g,maxNode:I,value:o,valueNodeProperty:s}=e;i&&(s===Ri.VisualResponseProperty.VISIBILITY?i.visible=o:s===Ri.VisualResponseProperty.TRANSFORM&&(i.quaternion.slerpQuaternions(g.quaternion,I.quaternion,o),i.position.lerpVectors(g.position,I.position,o)))})}))}};function KcA(t,A){Object.values(t.components).forEach(e=>{const{type:i,touchPointNodeName:g,visualResponses:I}=e;if(i===Ri.ComponentType.TOUCHPAD)if(e.touchPointNode=A.getObjectByName(g),e.touchPointNode){const o=new uC(.001),s=new $e({color:255}),C=new dA(o,s);e.touchPointNode.add(C)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(I).forEach(o=>{const{valueNodeName:s,minNodeName:C,maxNodeName:a,valueNodeProperty:n}=o;if(n===Ri.VisualResponseProperty.TRANSFORM){if(o.minNode=A.getObjectByName(C),o.maxNode=A.getObjectByName(a),!o.minNode){console.warn(`Could not find ${C} in the model`);return}if(!o.maxNode){console.warn(`Could not find ${a} in the model`);return}}o.valueNode=A.getObjectByName(s),o.valueNode||console.warn(`Could not find ${s} in the model`)})})}function a8(t,A){KcA(t.motionController,A),t.envMap&&A.traverse(e=>{e.isMesh&&(e.material.envMap=t.envMap,e.material.needsUpdate=!0)}),t.layers.mask!=0&&A.traverse(e=>{e.layers.mask=t.layers.mask}),t.add(A)}class vcA{constructor(A=null,e=null){this.gltfLoader=A,this.path=FcA,this._assetCache={},this.onLoad=e,this.gltfLoader||(this.gltfLoader=new hu)}setPath(A){return this.path=A,this}createControllerModel(A){const e=new bcA;let i=null;return A.addEventListener("connected",g=>{const I=g.data;I.targetRayMode!=="tracked-pointer"||!I.gamepad||fcA(I,this.path,NcA).then(({profile:o,assetPath:s})=>{e.motionController=new UcA(I,o,s);const C=this._assetCache[e.motionController.assetUrl];if(C)i=C.scene.clone(),a8(e,i),this.onLoad&&this.onLoad(i);else{if(!this.gltfLoader)throw new Error("GLTFLoader not set.");this.gltfLoader.setPath(""),this.gltfLoader.load(e.motionController.assetUrl,a=>{this._assetCache[e.motionController.assetUrl]=a,i=a.scene.clone(),a8(e,i),this.onLoad&&this.onLoad(i)},null,()=>{throw new Error(`Asset ${e.motionController.assetUrl} missing or malformed.`)})}}).catch(o=>{console.warn(o)})}),A.addEventListener("disconnected",()=>{e.motionController=null,e.remove(i),i=null}),e}}const JcA="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/";class qcA{constructor(A,e,i,g,I=null,o=null){this.controller=e,this.handModel=A,this.bones=[],I===null&&(I=new hu,I.setPath(i||JcA)),I.load(`${g}.glb`,s=>{const C=s.scene.children[0];this.handModel.add(C),C.layers.mask=this.handModel.layers.mask;const a=C.getObjectByProperty("type","SkinnedMesh");a.frustumCulled=!1,a.castShadow=!0,a.receiveShadow=!0,["wrist","thumb-metacarpal","thumb-phalanx-proximal","thumb-phalanx-distal","thumb-tip","index-finger-metacarpal","index-finger-phalanx-proximal","index-finger-phalanx-intermediate","index-finger-phalanx-distal","index-finger-tip","middle-finger-metacarpal","middle-finger-phalanx-proximal","middle-finger-phalanx-intermediate","middle-finger-phalanx-distal","middle-finger-tip","ring-finger-metacarpal","ring-finger-phalanx-proximal","ring-finger-phalanx-intermediate","ring-finger-phalanx-distal","ring-finger-tip","pinky-finger-metacarpal","pinky-finger-phalanx-proximal","pinky-finger-phalanx-intermediate","pinky-finger-phalanx-distal","pinky-finger-tip"].forEach(n=>{const B=C.getObjectByName(n);B!==void 0?B.jointName=n:console.warn(`Couldn't find ${n} in ${g} hand mesh`),this.bones.push(B)}),o&&o(C)})}updateMesh(){const A=this.controller.joints;for(let e=0;e<this.bones.length;e++){const i=this.bones[e];if(i){const g=A[i.jointName];if(g.visible){const I=g.position;i.position.copy(I),i.quaternion.copy(g.quaternion)}}}}}var xcA=Object.defineProperty,LcA=Object.getOwnPropertyDescriptor,pf=(t,A,e,i)=>{for(var g=i>1?void 0:i?LcA(A,e):A,I=t.length-1,o;I>=0;I--)(o=t[I])&&(g=(i?o(A,e,g):o(g))||g);return i&&g&&xcA(A,e,g),g};const Ia=tA("debugwebxr"),rB=new Array;class oa extends bA{constructor(){super(...arguments),r(this,"createControllerModel",!0),r(this,"createHandModel",!0),r(this,"customLeftHand"),r(this,"customRightHand"),r(this,"_models",new Array)}supportsXR(A){return A==="immersive-vr"||A==="immersive-ar"}async onXRControllerAdded(A){var e,i,g;if(!(A.xr.isVR||A.xr.isPassThrough))return;const{controller:I}=A;if(Ia&&console.warn("Add Controller Model for",I.side,I.index),this.createControllerModel){if(I.hand){if(this.createHandModel){const o=await this.loadHandModel(I);if(!o||!I.connected||!I.isHand){(e=o?.handObject)==null||e.removeFromParent(),(g=(i=o?.handmesh)==null?void 0:i.controller)==null||g.removeFromParent();return}this._models.push({controller:I,model:o.handObject,handmesh:o.handmesh}),this._models.sort((s,C)=>s.controller.index-C.controller.index),this.scene.add(o.handObject)}}else if(this.createControllerModel){const o=await I.getModelUrl();if(o){const s=await this.loadModel(I,o);if(!s||!I.connected||I.isHand)return;this._models.push({controller:I,model:s}),this._models.sort((C,a)=>C.controller.index-a.controller.index),this.scene.add(s),s.traverse(C=>{C.layers.set(2)})}else I.targetRayMode!=="transient-pointer"&&console.warn("XRControllerModel: no model found for "+I.side)}}}onXRControllerRemoved(A){var e;const i=this._models.findIndex(I=>I.controller===A.controller),g=this._models[i];g&&(this._models.splice(i,1),g.handmesh&&((e=g.handmesh.handModel)==null||e.removeFromParent(),g.handmesh=void 0),g.model&&(g.model.removeFromParent(),g.model=void 0))}onBeforeRender(){if(pe.active&&(Ia&&(rB[0]=Date.now()),this.updateRendering(pe.active),Ia)){const A=Date.now()-rB[0];if(rB.push(A),rB.length>=30){rB[0]=0;const e=rB.reduce((i,g)=>i+g,0)/rB.length;rB.length=0,console.log("[XRControllerModel] "+e.toFixed(2)+" ms")}}}onLeaveXR(A){var e;for(const i of this._models)i&&((e=i.model)==null||e.removeFromParent());this._models.length=0}updateRendering(A){var e,i,g,I,o;for(let s=0;s<this._models.length;s++){const C=this._models[s];if(!C)continue;const a=C.controller;if(!a.connected){Ia&&console.warn("XRControllerModel.onUpdateXR: controller is not connected anymore",a.side,a.hand);continue}if(C.model&&!C.handmesh)C.model.position.copy(a.gripPosition),C.model.quaternion.copy(a.gripQuaternion),C.model.visible=a.isTracking,(e=A.rig)==null||e.gameObject.add(C.model);else if(a.inputSource.hand&&C.handmesh){const n=A.referenceSpace,B=this.context.renderer.xr.getHand(a.index);if(n&&A.frame.getJointPose){for(const Q of a.inputSource.hand.values()){const E=B.joints[Q.jointName];if(E){const h=a.getHandJointPose(Q);if(h){const{position:l,quaternion:d}=A.convertSpace(h.transform);E.position.copy(l),E.quaternion.copy(d),E.matrixWorldAutoUpdate=!1}E.visible=h!=null}}C.model&&(C.model.visible=a.isTracking,C.model.visible&&C.model.parent!==((i=A.rig)==null?void 0:i.gameObject)&&((g=A.rig)==null||g.gameObject.add(C.model)),C.model.position.set(0,0,0)),(I=C.model)!=null&&I.visible&&((o=C.handmesh)==null||o.updateMesh())}}}}async loadModel(A,e){var i;if(!A.connected)return console.warn("XRControllerModel.onXRControllerAdded: controller is not connected anymore",A.side),null;const g=await tt.getOrCreate("",e).instantiate();return wK(g),(i=pe.active)!=null&&i.isPassThrough&&g.traverseVisible(I=>{this.makeOccluder(I)}),g}async loadHandModel(A){const e=this.context,i=e.renderer.xr.getHand(A.index);i||(Ia?Se.DrawLabel(A.rayWorldPosition,"No hand found for index "+A.index,.05,5):console.warn("No hand found for index "+A.index));const g=new hu;gS(g,e),await yv(g,e,this.sourceId??""),g.setPath("https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/");const I=A.side==="left"?"left.":"right.",o=A.side==="left"?this.customLeftHand:this.customRightHand;if(o)if(!o.uri.includes(I))console.warn("XRControllerModel: custom hand model must be named "+I),Ei("Custom Hand: unexpected name, please see the console for details");else{const a=o.uri.substring(0,o.uri.indexOf(I));g.setPath(a),Ia&&console.log("XRControllerModel: loading custom hand model from "+a)}const s=new SA;wK(s);const C=new qcA(s,i,g.path,A.inputSource.handedness,g,a=>{a.traverse(n=>{var B;n.layers.set(2),(B=pe.active)!=null&&B.isPassThrough&&this.makeOccluder(n),n instanceof dA&&dt.assignMeshLOD(n,0)}),A.connected||(Ia&&Se.DrawLabel(A.rayWorldPosition,"Hand is loaded but not connected anymore",.05,5),a.removeFromParent())});if(Ia&&s.add(new is(.5)),A.inputSource.hand){Ia&&console.log(A.inputSource.hand);for(const a of A.inputSource.hand.values())if(i.joints[a.jointName]===void 0){const n=new oo;n.matrixAutoUpdate=!1,n.visible=!0,i.joints[a.jointName]=n,i.add(n)}}else Ia&&Se.DrawLabel(A.rayWorldPosition,"No inputSource.hand found for index "+A.index,.05,5);return{handObject:s,handmesh:C}}makeOccluder(A){if(A instanceof dA){let e=A.material;e instanceof qe&&(e=A.material=e.clone(),e.depthWrite=!0,e.depthTest=!0,e.colorWrite=!1,A.renderOrder=-100)}}}r(oa,"factory",new vcA),pf([w()],oa.prototype,"createControllerModel",2),pf([w()],oa.prototype,"createHandModel",2),pf([w(tt)],oa.prototype,"customLeftHand",2),pf([w(tt)],oa.prototype,"customRightHand",2);const n8=new mt,Df=new f;class r8 extends _y{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";const A=[-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],e=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],i=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(i),this.setAttribute("position",new ae(A,3)),this.setAttribute("uv",new ae(e,2))}applyMatrix4(A){const e=this.attributes.instanceStart,i=this.attributes.instanceEnd;return e!==void 0&&(e.applyMatrix4(A),i.applyMatrix4(A),e.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(A){let e;A instanceof Float32Array?e=A:Array.isArray(A)&&(e=new Float32Array(A));const i=new Py(e,6,1);return this.setAttribute("instanceStart",new Do(i,3,0)),this.setAttribute("instanceEnd",new Do(i,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(A){let e;A instanceof Float32Array?e=A:Array.isArray(A)&&(e=new Float32Array(A));const i=new Py(e,6,1);return this.setAttribute("instanceColorStart",new Do(i,3,0)),this.setAttribute("instanceColorEnd",new Do(i,3,3)),this}fromWireframeGeometry(A){return this.setPositions(A.attributes.position.array),this}fromEdgesGeometry(A){return this.setPositions(A.attributes.position.array),this}fromMesh(A){return this.fromWireframeGeometry(new pR(A.geometry)),this}fromLineSegments(A){const e=A.geometry;return this.setPositions(e.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new mt);const A=this.attributes.instanceStart,e=this.attributes.instanceEnd;A!==void 0&&e!==void 0&&(this.boundingBox.setFromBufferAttribute(A),n8.setFromBufferAttribute(e),this.boundingBox.union(n8))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new ki),this.boundingBox===null&&this.computeBoundingBox();const A=this.attributes.instanceStart,e=this.attributes.instanceEnd;if(A!==void 0&&e!==void 0){const i=this.boundingSphere.center;this.boundingBox.getCenter(i);let g=0;for(let I=0,o=A.count;I<o;I++)Df.fromBufferAttribute(A,I),g=Math.max(g,i.distanceToSquared(Df)),Df.fromBufferAttribute(e,I),g=Math.max(g,i.distanceToSquared(Df));this.boundingSphere.radius=Math.sqrt(g),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}applyMatrix(A){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(A)}}HA.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new eA(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}},xg.line={uniforms:oh.merge([HA.common,HA.fog,HA.line]),vertexShader:`
|
|
6330
|
+
`)},this.depthMaterial.depthTest=!1,this.depthMaterial.depthWrite=!1,this.horizontalBlurMaterial=new Me(dcA),this.horizontalBlurMaterial.depthTest=!1,this.verticalBlurMaterial=new Me(ucA),this.verticalBlurMaterial.depthTest=!1,this.shadowGroup.visible=!1,this.autoFit&&this.fitShadows()}onDestroy(){var t,A,e,i,g,I,o,s;(t=this.renderTarget)==null||t.dispose(),(A=this.renderTargetBlur)==null||A.dispose(),(e=this.depthMaterial)==null||e.dispose(),(i=this.horizontalBlurMaterial)==null||i.dispose(),(g=this.verticalBlurMaterial)==null||g.dispose(),(I=this.blurPlane)==null||I.geometry.dispose(),(o=this.plane)==null||o.geometry.dispose(),(s=this.occluderMesh)==null||s.geometry.dispose()}onBeforeRender(t){if(!this.renderTarget||!this.renderTargetBlur||!this.depthMaterial||!this.shadowCamera||!this.blurPlane||!this.shadowGroup||!this.plane||!this.horizontalBlurMaterial||!this.verticalBlurMaterial){df&&console.error("ContactShadows: not initialized yet");return}const A=this.context.scene,e=this.context.renderer,i=e.getRenderTarget();this.shadowGroup.visible=!0,this.occluderMesh&&(this.occluderMesh.visible=!1);const g=this.plane.visible;this.plane.visible=!1,this.gameObject instanceof dA&&oE(this.gameObject,!1);const I=A.background;A.background=null,A.overrideMaterial=this.depthMaterial,this.backfaceShadows?this.depthMaterial.side=ct:this.depthMaterial.side=og;const o=e.getClearAlpha();e.setClearAlpha(0);const s=e.xr.enabled;e.xr.enabled=!1;const C=e.renderLists.get(A,0),a=C.transparent;C.transparent=[],e.setRenderTarget(this.renderTarget),e.clear(),e.render(A,this.shadowCamera),C.transparent=a,A.overrideMaterial=null;const n=Math.max(this.blur,.05);this.blurShadow(n*2),this.blurShadow(n*.5),this.shadowGroup.visible=!1,this.occluderMesh&&(this.occluderMesh.visible=this.occludeBelowGround),this.plane.visible=g,e.setRenderTarget(i),e.setClearAlpha(o),A.background=I,e.xr.enabled=s}blurShadow(t){if(!this.blurPlane||!this.shadowCamera||!this.renderTarget||!this.renderTargetBlur||!this.horizontalBlurMaterial||!this.verticalBlurMaterial)return;this.blurPlane.visible=!0;const A=this.gameObject.worldScale,e=(A.x+A.z)/2,i=A.z/e,g=A.x/e;this.blurPlane.material=this.horizontalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTarget.texture,this.horizontalBlurMaterial.uniforms.h.value=t*1/this.textureSize*i;const I=this.context.renderer,o=I.getRenderTarget();I.setRenderTarget(this.renderTargetBlur),I.render(this.blurPlane,this.shadowCamera),this.blurPlane.material=this.verticalBlurMaterial,this.blurPlane.material.uniforms.tDiffuse.value=this.renderTargetBlur.texture,this.verticalBlurMaterial.uniforms.v.value=t*1/this.textureSize*g,I.setRenderTarget(this.renderTarget),I.render(this.blurPlane,this.shadowCamera),this.blurPlane.visible=!1,I.setRenderTarget(o)}},r(Gv,"_instances",new Map),Gv);let mn=o8;Xc([w()],mn.prototype,"autoFit",2),Xc([w()],mn.prototype,"darkness",2),Xc([w()],mn.prototype,"opacity",2),Xc([w()],mn.prototype,"blur",2),Xc([w()],mn.prototype,"occludeBelowGround",2),Xc([w()],mn.prototype,"backfaceShadows",2);var wcA=Object.defineProperty,ycA=Object.getOwnPropertyDescriptor,AD=(t,A,e,i)=>{for(var g=i>1?void 0:i?ycA(A,e):A,I=t.length-1,o;I>=0;I--)(o=t[I])&&(g=(i?o(A,e,g):o(g))||g);return i&&g&&wcA(A,e,g),g};const s8=tA("debugwebxr"),ScA=new FA().makeRotationY(Math.PI);class To extends bA{constructor(){super(...arguments),r(this,"_arScale",1),r(this,"invertForward",!1),r(this,"customReticle"),r(this,"useXRAnchor",!1),r(this,"arTouchTransform",!1),r(this,"_isPlacing",!0),r(this,"_startOffset",new FA),r(this,"_createdPlacementObject",null),r(this,"_reparentedComponents",[]),r(this,"_placementScene",new QI),r(this,"_reticle",[]),r(this,"_hits",[]),r(this,"_placementStartTime",-1),r(this,"_rigPlacementMatrix"),r(this,"_anchor",null),r(this,"userInput"),r(this,"onPlaceScene",A=>{var e;if(this._isPlacing==!1||A.used)return;let i=this._reticle[0],g=this._hits[0];if(A.origin instanceof Lb){const I=this._reticle[A.origin.index];I&&(i=I,g=this._hits[A.origin.index])}if(!i){console.warn("No reticle to place...");return}if(!i.visible){console.warn("Reticle is not visible (can not place)");return}if((e=pe.active)!=null&&e.isTrackingImages){console.warn("Scene Placement is disabled while images are being tracked");return}A.stopImmediatePropagation(),A.stopPropagation(),A.use(),this._isPlacing=!1,this.context.input.removeEventListener("pointerup",this.onPlaceScene),this.onRevertSceneChanges(),i.position.copy(i.lastPos),i.quaternion.copy(i.lastQuat),this.onApplyPose(i),this.useXRAnchor&&this.onCreateAnchor(pe.active,g)}),r(this,"upVec",new f(0,1,0)),r(this,"lookPoint",new f),r(this,"worldUpVec",new f(0,1,0))}get arScale(){return this._arScale}set arScale(A){A!==this._arScale&&(this._arScale=A,this.onScaleChanged())}onEnable(){var A;(A=this.customReticle)==null||A.preload()}supportsXR(A){return A==="immersive-ar"}onEnterXR(A){s8&&console.log("ENTER WEBXR: SessionRoot start..."),this._anchor=null,this.gameObject.updateMatrixWorld(),this._startOffset.copy(this.gameObject.matrixWorld);const e=new SA;this._createdPlacementObject=e,e.name="AR Session Root",this._placementScene.name="AR Placement Scene",this._placementScene.children.length=0;for(let i=this.context.scene.children.length-1;i>=0;i--){const g=this.context.scene.children[i];this._placementScene.add(g)}this.context.scene.add(e),this._reparentedComponents.length=0,this._reparentedComponents.push({comp:this,originalObject:this.gameObject}),IA.addComponent(e,this);for(const i of this._reticle)nC(i);this._reticle.length=0,this._isPlacing=!0,this.context.input.addEventListener("pointerup",this.onPlaceScene,{queue:_C.Early})}onLeaveXR(){this.context.input.removeEventListener("pointerup",this.onPlaceScene,{queue:_C.Early}),this.onRevertSceneChanges(),this._anchor=null,this._rigPlacementMatrix=void 0}onUpdateXR(A){var e,i,g,I;if(A.xr.isTrackingImages){for(const o of this._reticle)o.visible=!1;return}if(this._isPlacing){const o=(e=A.xr.rig)==null?void 0:e.gameObject;o&&o.parent!==this.context.scene&&this.context.scene.add(o);let s=!1;if(A.xr.isPassThrough&&A.xr.controllers.length>0)for(const C of A.xr.controllers){const a=C.getHitTest();a&&(s=!0,this.updateReticleAndHits(A.xr,C.index,a,A.xr.rigScale))}if(!s){const C=A.xr.getHitTest();C&&this.updateReticleAndHits(A.xr,0,C,A.xr.rigScale)}}else{if(this._anchor&&A.xr.referenceSpace){const o=A.xr.frame.getPose(this._anchor.anchorSpace,A.xr.referenceSpace);if(o&&this.context.time.frame%20===0){const s=A.xr.convertSpace(o.transform),C=this._reticle[0];C&&(C.position.copy(s.position),C.quaternion.copy(s.quaternion),this.onApplyPose(C))}}if(this.arTouchTransform?(this.userInput||(this.userInput=new uf(this.context)),(i=this.userInput)==null||i.enable()):(g=this.userInput)==null||g.disable(),this.arTouchTransform&&(I=this.userInput)!=null&&I.hasChanged){if(A.xr.rig){const o=A.xr.rig.gameObject;this.userInput.applyMatrixTo(o.matrix,!0),o.matrix.decompose(o.position,o.quaternion,o.scale),this.userInput.factor=o.scale.x}this.userInput.reset()}}}updateReticleAndHits(A,e,i,g){this._hits[e]=i.hit;let I=this._reticle[e];if(!I){if(this.customReticle)if(this.customReticle.asset)I=mc(this.customReticle.asset);else{this.customReticle.loadAssetAsync();return}else I=new dA(new NE(.07,.09,32).rotateX(-Math.PI/2),new $e({side:ct})),I.name="AR Placement Reticle";if(s8){const o=new is(1);o.position.y+=.01,I.add(o)}this._reticle[e]=I,I.matrixAutoUpdate=!1,I.visible=!1}I.lastPos=I.lastPos||i.position.clone(),I.lastQuat=I.lastQuat||i.quaternion.clone(),I.position.copy(I.lastPos.lerp(i.position,this.context.time.deltaTime/.1)),I.lastPos.copy(I.position),I.quaternion.copy(I.lastQuat.slerp(i.quaternion,this.context.time.deltaTime/.05)),I.lastQuat.copy(I.quaternion),I.scale.set(g,g,g),this.customReticle&&this.applyViewBasedTransform(I),I.updateMatrix(),I.visible=!0,I.parent!==this.context.scene&&this.context.scene.add(I),this._placementStartTime<0&&(this._placementStartTime=this.context.time.realtimeSinceStartup)}onScaleChanged(){}onRevertSceneChanges(){var A;for(const e of this._reticle)e&&(e.visible=!1,e?.removeFromParent());this._reticle.length=0;for(let e=this._placementScene.children.length-1;e>=0;e--){const i=this._placementScene.children[e];this.context.scene.add(i)}(A=this._createdPlacementObject)==null||A.removeFromParent();for(const e of this._reparentedComponents)IA.addComponent(e.originalObject,e.comp)}async onCreateAnchor(A,e){if(e.createAnchor===void 0){console.warn("Hit does not support creating an anchor",e),Be()&&Ei("Hit does not support creating an anchor");return}else{const i=await e.createAnchor(A.viewerPose.transform);A.running&&i&&(this._anchor=i)}}applyViewBasedTransform(A){const e=this.context.mainCamera,i=A,g=e.worldPosition,I=i.worldPosition;this.upVec.set(0,1,0).applyQuaternion(A.quaternion);const o=e.worldPosition;o&&A.position.clone().sub(o).angleTo(this.upVec)<Math.PI/2&&this.upVec.negate();const s=this.upVec.angleTo(this.worldUpVec)*180/Math.PI,C=30;s>C&&s<180-C||s<-C&&s>-180+C?(this.lookPoint.copy(A.position).add(this.upVec),this.lookPoint.y=A.position.y,A.lookAt(this.lookPoint)):(g.y=I.y,A.lookAt(g))}onApplyPose(A){var e,i,g,I;const o=(i=(e=pe.active)==null?void 0:e.rig)==null?void 0:i.gameObject;if(!o){console.warn("No rig object to place");return}(g=pe.active)!=null&&g.rigScale;const s=o.parent||this.context.scene;this._rigPlacementMatrix?(I=this._rigPlacementMatrix)==null||I.decompose(o.position,o.quaternion,o.scale):this._rigPlacementMatrix=o.matrix.clone(),this.applyViewBasedTransform(A),A.updateMatrix(),this.context.scene.add(A),A.attach(o),A.removeFromParent(),o.scale.set(this.arScale,this.arScale,this.arScale),o.position.multiplyScalar(this.arScale),o.updateMatrix(),this.invertForward&&o.matrix.premultiply(ScA),o.matrix.premultiply(this._startOffset),o.matrix.decompose(o.position,o.quaternion,o.scale),s.add(o)}}AD([w()],To.prototype,"arScale",1),AD([w()],To.prototype,"invertForward",2),AD([w(tt)],To.prototype,"customReticle",2),AD([w()],To.prototype,"useXRAnchor",2),AD([w()],To.prototype,"arTouchTransform",2);const Mv=class{constructor(t){r(this,"oneFingerDrag",!0),r(this,"twoFingerRotate",!0),r(this,"twoFingerScale",!0),r(this,"factor",1),r(this,"context"),r(this,"offset"),r(this,"plane"),r(this,"_scale",1),r(this,"_hasChanged",!1),r(this,"_enabled",!1),r(this,"currentlyUsedPointerIds",new Set),r(this,"currentlyUnusedPointerIds",new Set),r(this,"onPointerDownEarly",A=>{this.isActive&&A.stopPropagation()}),r(this,"onPointerDownLate",A=>{A.used?this.currentlyUsedPointerIds.add(A.pointerId):this.currentlyUsedPointerIds.size<=0&&this.currentlyUnusedPointerIds.add(A.pointerId)}),r(this,"onPointerUpEarly",A=>{this.currentlyUsedPointerIds.delete(A.pointerId),this.currentlyUnusedPointerIds.delete(A.pointerId)}),r(this,"prev",new Map),r(this,"_didMultitouch",!1),r(this,"touchStart",A=>{for(let e=0;e<A.changedTouches.length;e++){const i=A.changedTouches[e],g=JT()&&i.clientY<window.innerHeight*.1;this.prev.has(i.identifier)||this.prev.set(i.identifier,{ignore:g,x:0,z:0,screenx:0,screeny:0});const I=this.prev.get(i.identifier);if(I){const o=this.getPositionOnPlane(i.clientX,i.clientY);I.x=o.x,I.z=o.z,I.screenx=i.clientX,I.screeny=i.clientY}}}),r(this,"touchEnd",A=>{A.touches.length<=0&&(this._didMultitouch=!1);for(let e=0;e<A.changedTouches.length;e++){const i=A.changedTouches[e];this.prev.delete(i.identifier)}}),r(this,"touchMove",A=>{if(!A.defaultPrevented&&this.isActive){if(A.touches.length===1){if(this._didMultitouch)return;const e=A.touches[0],i=this.prev.get(e.identifier);if(!i||i.ignore)return;const g=this.getPositionOnPlane(e.clientX,e.clientY),I=g.x-i.x,o=g.z-i.z;if(I===0&&o===0)return;this.oneFingerDrag&&this.addMovement(I,o),i.x=g.x,i.z=g.z,i.screenx=e.clientX,i.screeny=e.clientY;return}else if(A.touches.length===2){this._didMultitouch=!0;const e=A.touches[0],i=A.touches[1],g=this.prev.get(e.identifier),I=this.prev.get(i.identifier);if(!g||!I)return;if(this.twoFingerRotate){const o=Math.atan2(e.clientY-i.clientY,e.clientX-i.clientX),s=Math.atan2(g.screeny-I.screeny,g.screenx-I.screenx),C=o-s;Math.abs(C)>.001&&this.addRotation(C)}if(this.twoFingerScale){const o=e.clientX-i.clientX,s=e.clientY-i.clientY,C=Math.sqrt(o*o+s*s),a=g.screenx-I.screenx,n=g.screeny-I.screeny,B=Math.sqrt(a*a+n*n),Q=C-B;Math.abs(Q)>2&&this.addScale(Q)}g.screenx=e.clientX,g.screeny=e.clientY,I.screenx=i.clientX,I.screeny=i.clientY}}}),r(this,"_raycaster",new eQ),r(this,"_intersection",new f),r(this,"_screenPos",new f),r(this,"_tempMatrix",new FA),this.context=t,this.offset=new FA,this.plane=new qI,this.plane.setFromNormalAndCoplanarPoint(Mv.up,Mv.zero)}reset(){this._scale=1,this.offset.identity()}get hasChanged(){return this._hasChanged}applyMatrixTo(t,A){this._hasChanged=!1,A?(this.offset.invert(),t.premultiply(this.offset)):t.multiply(this.offset)}get isActive(){return this.currentlyUsedPointerIds.size<=0&&this.currentlyUnusedPointerIds.size>0}enable(){this._enabled||(this._enabled=!0,this.context.input.addEventListener("pointerdown",this.onPointerDownEarly,{queue:_C.Early}),this.context.input.addEventListener("pointerdown",this.onPointerDownLate,{queue:_C.Late}),this.context.input.addEventListener("pointerup",this.onPointerUpEarly,{queue:_C.Early}),window.addEventListener("touchstart",this.touchStart,{passive:!1}),window.addEventListener("touchmove",this.touchMove,{passive:!1}),window.addEventListener("touchend",this.touchEnd,{passive:!1}))}disable(){this._enabled&&(this._enabled=!1,this.context.input.removeEventListener("pointerdown",this.onPointerDownEarly,{queue:_C.Early}),this.context.input.removeEventListener("pointerdown",this.onPointerDownLate,{queue:_C.Late}),this.context.input.removeEventListener("pointerup",this.onPointerUpEarly,{queue:_C.Early}),window.removeEventListener("touchstart",this.touchStart),window.removeEventListener("touchmove",this.touchMove),window.removeEventListener("touchend",this.touchEnd))}getPositionOnPlane(t,A){const e=this.context.mainCamera;return this._screenPos.x=t/window.innerWidth*2-1,this._screenPos.y=-(A/window.innerHeight)*2+1,this._screenPos.z=1,this._screenPos.unproject(e),this._raycaster.set(e.position,this._screenPos.sub(e.position)),this._raycaster.ray.intersectPlane(this.plane,this._intersection),this._intersection}addMovement(t,A){t/=this._scale,A/=this._scale,t*=this.factor,A*=this.factor,this.offset.elements[12]+=t,this.offset.elements[14]+=A,(t!==0||A!==0)&&(this._hasChanged=!0)}addScale(t){t/=window.innerWidth,t*=-1,this._scale*=1+t,this._tempMatrix.makeScale(1-t,1-t,1-t),this.offset.premultiply(this._tempMatrix),t!==0&&(this._hasChanged=!0)}addRotation(t){t*=-1,this._tempMatrix.makeRotationY(t),this.offset.premultiply(this._tempMatrix),t!==0&&(this._hasChanged=!0)}};let uf=Mv;r(uf,"up",new f(0,1,0)),r(uf,"zero",new f(0,0,0)),r(uf,"one",new f(1,1,1));const Ri={Handedness:Object.freeze({NONE:"none",LEFT:"left",RIGHT:"right"}),ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ComponentType:Object.freeze({TRIGGER:"trigger",SQUEEZE:"squeeze",TOUCHPAD:"touchpad",THUMBSTICK:"thumbstick",BUTTON:"button"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};async function C8(t){const A=await fetch(t);if(A.ok)return A.json();throw new Error(A.statusText)}async function mcA(t){if(!t)throw new Error("No basePath supplied");return await C8(`${t}/profilesList.json`)}async function fcA(t,A,e=null,i=!0){if(!t)throw new Error("No xrInputSource supplied");if(!A)throw new Error("No basePath supplied");const g=await mcA(A);let I;if(t.profiles.some(C=>{const a=g[C];return a&&(I={profileId:C,profilePath:`${A}/${a.path}`,deprecated:!!a.deprecated}),!!I}),!I){if(!e)throw new Error("No matching profile name found");const C=g[e];if(!C)throw new Error(`No matching profile name found and default profile "${e}" missing.`);I={profileId:e,profilePath:`${A}/${C.path}`,deprecated:!!C.deprecated}}const o=await C8(I.profilePath);let s;if(i){let C;if(t.handedness==="any"?C=o.layouts[Object.keys(o.layouts)[0]]:C=o.layouts[t.handedness],!C)throw new Error(`No matching handedness, ${t.handedness}, in profile ${I.profileId}`);C.assetPath&&(s=I.profilePath.replace("profile.json",C.assetPath))}return{profile:o,assetPath:s}}const kcA={xAxis:0,yAxis:0,button:0,state:Ri.ComponentState.DEFAULT};function GcA(t=0,A=0){let e=t,i=A;if(Math.sqrt(t*t+A*A)>1){const g=Math.atan2(A,t);e=Math.cos(g),i=Math.sin(g)}return{normalizedXAxis:e*.5+.5,normalizedYAxis:i*.5+.5}}class McA{constructor(A){this.componentProperty=A.componentProperty,this.states=A.states,this.valueNodeName=A.valueNodeName,this.valueNodeProperty=A.valueNodeProperty,this.valueNodeProperty===Ri.VisualResponseProperty.TRANSFORM&&(this.minNodeName=A.minNodeName,this.maxNodeName=A.maxNodeName),this.value=0,this.updateFromComponent(kcA)}updateFromComponent({xAxis:A,yAxis:e,button:i,state:g}){const{normalizedXAxis:I,normalizedYAxis:o}=GcA(A,e);switch(this.componentProperty){case Ri.ComponentProperty.X_AXIS:this.value=this.states.includes(g)?I:.5;break;case Ri.ComponentProperty.Y_AXIS:this.value=this.states.includes(g)?o:.5;break;case Ri.ComponentProperty.BUTTON:this.value=this.states.includes(g)?i:0;break;case Ri.ComponentProperty.STATE:this.valueNodeProperty===Ri.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(g):this.value=this.states.includes(g)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class RcA{constructor(A,e){if(!A||!e||!e.visualResponses||!e.gamepadIndices||Object.keys(e.gamepadIndices).length===0)throw new Error("Invalid arguments supplied");this.id=A,this.type=e.type,this.rootNodeName=e.rootNodeName,this.touchPointNodeName=e.touchPointNodeName,this.visualResponses={},Object.keys(e.visualResponses).forEach(i=>{const g=new McA(e.visualResponses[i]);this.visualResponses[i]=g}),this.gamepadIndices=Object.assign({},e.gamepadIndices),this.values={state:Ri.ComponentState.DEFAULT,button:this.gamepadIndices.button!==void 0?0:void 0,xAxis:this.gamepadIndices.xAxis!==void 0?0:void 0,yAxis:this.gamepadIndices.yAxis!==void 0?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(A){if(this.values.state=Ri.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&A.buttons.length>this.gamepadIndices.button){const e=A.buttons[this.gamepadIndices.button];this.values.button=e.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,e.pressed||this.values.button===1?this.values.state=Ri.ComponentState.PRESSED:(e.touched||this.values.button>Ri.ButtonTouchThreshold)&&(this.values.state=Ri.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&A.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=A.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===Ri.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>Ri.AxisTouchThreshold&&(this.values.state=Ri.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&A.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=A.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===Ri.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>Ri.AxisTouchThreshold&&(this.values.state=Ri.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}}class UcA{constructor(A,e,i){if(!A)throw new Error("No xrInputSource supplied");if(!e)throw new Error("No profile supplied");this.xrInputSource=A,this.assetUrl=i,this.id=e.profileId,this.layoutDescription=e.layouts[A.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(g=>{const I=this.layoutDescription.components[g];this.components[g]=new RcA(g,I)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const A=[];return Object.values(this.components).forEach(e=>{A.push(e.data)}),A}updateFromGamepad(){Object.values(this.components).forEach(A=>{A.updateFromGamepad(this.xrInputSource.gamepad)})}}const FcA="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",NcA="generic-trigger";let bcA=class extends SA{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(t){return this.envMap==t?this:(this.envMap=t,this.traverse(A=>{A.isMesh&&(A.material.envMap=this.envMap,A.material.needsUpdate=!0)}),this)}updateMatrixWorld(t){super.updateMatrixWorld(t),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(A=>{Object.values(A.visualResponses).forEach(e=>{const{valueNode:i,minNode:g,maxNode:I,value:o,valueNodeProperty:s}=e;i&&(s===Ri.VisualResponseProperty.VISIBILITY?i.visible=o:s===Ri.VisualResponseProperty.TRANSFORM&&(i.quaternion.slerpQuaternions(g.quaternion,I.quaternion,o),i.position.lerpVectors(g.position,I.position,o)))})}))}};function KcA(t,A){Object.values(t.components).forEach(e=>{const{type:i,touchPointNodeName:g,visualResponses:I}=e;if(i===Ri.ComponentType.TOUCHPAD)if(e.touchPointNode=A.getObjectByName(g),e.touchPointNode){const o=new uC(.001),s=new $e({color:255}),C=new dA(o,s);e.touchPointNode.add(C)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(I).forEach(o=>{const{valueNodeName:s,minNodeName:C,maxNodeName:a,valueNodeProperty:n}=o;if(n===Ri.VisualResponseProperty.TRANSFORM){if(o.minNode=A.getObjectByName(C),o.maxNode=A.getObjectByName(a),!o.minNode){console.warn(`Could not find ${C} in the model`);return}if(!o.maxNode){console.warn(`Could not find ${a} in the model`);return}}o.valueNode=A.getObjectByName(s),o.valueNode||console.warn(`Could not find ${s} in the model`)})})}function a8(t,A){KcA(t.motionController,A),t.envMap&&A.traverse(e=>{e.isMesh&&(e.material.envMap=t.envMap,e.material.needsUpdate=!0)}),t.layers.mask!=0&&A.traverse(e=>{e.layers.mask=t.layers.mask}),t.add(A)}class vcA{constructor(A=null,e=null){this.gltfLoader=A,this.path=FcA,this._assetCache={},this.onLoad=e,this.gltfLoader||(this.gltfLoader=new hu)}setPath(A){return this.path=A,this}createControllerModel(A){const e=new bcA;let i=null;return A.addEventListener("connected",g=>{const I=g.data;I.targetRayMode!=="tracked-pointer"||!I.gamepad||fcA(I,this.path,NcA).then(({profile:o,assetPath:s})=>{e.motionController=new UcA(I,o,s);const C=this._assetCache[e.motionController.assetUrl];if(C)i=C.scene.clone(),a8(e,i),this.onLoad&&this.onLoad(i);else{if(!this.gltfLoader)throw new Error("GLTFLoader not set.");this.gltfLoader.setPath(""),this.gltfLoader.load(e.motionController.assetUrl,a=>{this._assetCache[e.motionController.assetUrl]=a,i=a.scene.clone(),a8(e,i),this.onLoad&&this.onLoad(i)},null,()=>{throw new Error(`Asset ${e.motionController.assetUrl} missing or malformed.`)})}}).catch(o=>{console.warn(o)})}),A.addEventListener("disconnected",()=>{e.motionController=null,e.remove(i),i=null}),e}}const JcA="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/";class qcA{constructor(A,e,i,g,I=null,o=null){this.controller=e,this.handModel=A,this.bones=[],I===null&&(I=new hu,I.setPath(i||JcA)),I.load(`${g}.glb`,s=>{const C=s.scene.children[0];this.handModel.add(C),C.layers.mask=this.handModel.layers.mask;const a=C.getObjectByProperty("type","SkinnedMesh");a.frustumCulled=!1,a.castShadow=!0,a.receiveShadow=!0,["wrist","thumb-metacarpal","thumb-phalanx-proximal","thumb-phalanx-distal","thumb-tip","index-finger-metacarpal","index-finger-phalanx-proximal","index-finger-phalanx-intermediate","index-finger-phalanx-distal","index-finger-tip","middle-finger-metacarpal","middle-finger-phalanx-proximal","middle-finger-phalanx-intermediate","middle-finger-phalanx-distal","middle-finger-tip","ring-finger-metacarpal","ring-finger-phalanx-proximal","ring-finger-phalanx-intermediate","ring-finger-phalanx-distal","ring-finger-tip","pinky-finger-metacarpal","pinky-finger-phalanx-proximal","pinky-finger-phalanx-intermediate","pinky-finger-phalanx-distal","pinky-finger-tip"].forEach(n=>{const B=C.getObjectByName(n);B!==void 0?B.jointName=n:console.warn(`Couldn't find ${n} in ${g} hand mesh`),this.bones.push(B)}),o&&o(C)})}updateMesh(){const A=this.controller.joints;for(let e=0;e<this.bones.length;e++){const i=this.bones[e];if(i){const g=A[i.jointName];if(g.visible){const I=g.position;i.position.copy(I),i.quaternion.copy(g.quaternion)}}}}}var xcA=Object.defineProperty,LcA=Object.getOwnPropertyDescriptor,pf=(t,A,e,i)=>{for(var g=i>1?void 0:i?LcA(A,e):A,I=t.length-1,o;I>=0;I--)(o=t[I])&&(g=(i?o(A,e,g):o(g))||g);return i&&g&&xcA(A,e,g),g};const Ia=tA("debugwebxr"),rB=new Array;class oa extends bA{constructor(){super(...arguments),r(this,"createControllerModel",!0),r(this,"createHandModel",!0),r(this,"customLeftHand"),r(this,"customRightHand"),r(this,"_models",new Array)}supportsXR(A){return A==="immersive-vr"||A==="immersive-ar"}async onXRControllerAdded(A){var e,i,g;if(!(A.xr.isVR||A.xr.isPassThrough))return;const{controller:I}=A;if(Ia&&console.warn("Add Controller Model for",I.side,I.index),this.createControllerModel){if(I.hand){if(this.createHandModel){const o=await this.loadHandModel(I);if(!o||!I.connected||!I.isHand){(e=o?.handObject)==null||e.removeFromParent(),(g=(i=o?.handmesh)==null?void 0:i.controller)==null||g.removeFromParent();return}this._models.push({controller:I,model:o.handObject,handmesh:o.handmesh}),this._models.sort((s,C)=>s.controller.index-C.controller.index),this.scene.add(o.handObject)}}else if(this.createControllerModel){const o=await I.getModelUrl();if(o){const s=await this.loadModel(I,o);if(!s||!I.connected||I.isHand)return;this._models.push({controller:I,model:s}),this._models.sort((C,a)=>C.controller.index-a.controller.index),this.scene.add(s),s.traverse(C=>{C.layers.set(2)})}else I.targetRayMode!=="transient-pointer"&&console.warn("XRControllerModel: no model found for "+I.side)}}}onXRControllerRemoved(A){var e;const i=this._models.findIndex(I=>I.controller===A.controller),g=this._models[i];g&&(this._models.splice(i,1),g.handmesh&&((e=g.handmesh.handModel)==null||e.removeFromParent(),g.handmesh=void 0),g.model&&(g.model.removeFromParent(),g.model=void 0))}onBeforeRender(){if(pe.active&&(Ia&&(rB[0]=Date.now()),this.updateRendering(pe.active),Ia)){const A=Date.now()-rB[0];if(rB.push(A),rB.length>=30){rB[0]=0;const e=rB.reduce((i,g)=>i+g,0)/rB.length;rB.length=0,console.log("[XRControllerModel] "+e.toFixed(2)+" ms")}}}onLeaveXR(A){var e;for(const i of this._models)i&&((e=i.model)==null||e.removeFromParent());this._models.length=0}updateRendering(A){var e,i,g,I,o;for(let s=0;s<this._models.length;s++){const C=this._models[s];if(!C)continue;const a=C.controller;if(!a.connected){Ia&&console.warn("XRControllerModel.onUpdateXR: controller is not connected anymore",a.side,a.hand);continue}if(C.model&&!C.handmesh)C.model.position.copy(a.gripPosition),C.model.quaternion.copy(a.gripQuaternion),C.model.visible=a.isTracking,(e=A.rig)==null||e.gameObject.add(C.model);else if(a.inputSource.hand&&C.handmesh){const n=A.referenceSpace,B=this.context.renderer.xr.getHand(a.index);if(n&&A.frame.getJointPose){for(const Q of a.inputSource.hand.values()){const E=B.joints[Q.jointName];if(E){const h=a.getHandJointPose(Q);if(h){const{position:l,quaternion:d}=A.convertSpace(h.transform);E.position.copy(l),E.quaternion.copy(d),E.matrixWorldAutoUpdate=!1}E.visible=h!=null}}C.model&&(C.model.visible=a.isTracking,C.model.visible&&C.model.parent!==((i=A.rig)==null?void 0:i.gameObject)&&((g=A.rig)==null||g.gameObject.add(C.model)),C.model.position.set(0,0,0)),(I=C.model)!=null&&I.visible&&((o=C.handmesh)==null||o.updateMesh())}}}}async loadModel(A,e){var i;if(!A.connected)return console.warn("XRControllerModel.onXRControllerAdded: controller is not connected anymore",A.side),null;const g=await tt.getOrCreate("",e).instantiate();return wK(g),(i=pe.active)!=null&&i.isPassThrough&&g.traverseVisible(I=>{this.makeOccluder(I)}),g}async loadHandModel(A){const e=this.context,i=e.renderer.xr.getHand(A.index);i||(Ia?Se.DrawLabel(A.rayWorldPosition,"No hand found for index "+A.index,.05,5):console.warn("No hand found for index "+A.index));const g=new hu;gS(g,e),await yv(g,e,this.sourceId??""),g.setPath("https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/");const I=A.side==="left"?"left.":"right.",o=A.side==="left"?this.customLeftHand:this.customRightHand;if(o)if(!o.uri.includes(I))console.warn("XRControllerModel: custom hand model must be named "+I),Ei("Custom Hand: unexpected name, please see the console for details");else{const a=o.uri.substring(0,o.uri.indexOf(I));g.setPath(a),Ia&&console.log("XRControllerModel: loading custom hand model from "+a)}const s=new SA;wK(s);const C=new qcA(s,i,g.path,A.inputSource.handedness,g,a=>{a.traverse(n=>{var B;n.layers.set(2),(B=pe.active)!=null&&B.isPassThrough&&this.makeOccluder(n),n instanceof dA&&dt.assignMeshLOD(n,0)}),A.connected||(Ia&&Se.DrawLabel(A.rayWorldPosition,"Hand is loaded but not connected anymore",.05,5),a.removeFromParent())});if(Ia&&s.add(new is(.5)),A.inputSource.hand){Ia&&console.log(A.inputSource.hand);for(const a of A.inputSource.hand.values())if(i.joints[a.jointName]===void 0){const n=new oo;n.matrixAutoUpdate=!1,n.visible=!0,i.joints[a.jointName]=n,i.add(n)}}else Ia&&Se.DrawLabel(A.rayWorldPosition,"No inputSource.hand found for index "+A.index,.05,5);return{handObject:s,handmesh:C}}makeOccluder(A){if(A instanceof dA){let e=A.material;e instanceof qe&&(e=A.material=e.clone(),e.depthWrite=!0,e.depthTest=!0,e.colorWrite=!1,A.renderOrder=-100)}}}r(oa,"factory",new vcA),pf([w()],oa.prototype,"createControllerModel",2),pf([w()],oa.prototype,"createHandModel",2),pf([w(tt)],oa.prototype,"customLeftHand",2),pf([w(tt)],oa.prototype,"customRightHand",2);const n8=new mt,Df=new f;class r8 extends _y{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";const A=[-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],e=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],i=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(i),this.setAttribute("position",new ae(A,3)),this.setAttribute("uv",new ae(e,2))}applyMatrix4(A){const e=this.attributes.instanceStart,i=this.attributes.instanceEnd;return e!==void 0&&(e.applyMatrix4(A),i.applyMatrix4(A),e.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(A){let e;A instanceof Float32Array?e=A:Array.isArray(A)&&(e=new Float32Array(A));const i=new Py(e,6,1);return this.setAttribute("instanceStart",new Do(i,3,0)),this.setAttribute("instanceEnd",new Do(i,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(A){let e;A instanceof Float32Array?e=A:Array.isArray(A)&&(e=new Float32Array(A));const i=new Py(e,6,1);return this.setAttribute("instanceColorStart",new Do(i,3,0)),this.setAttribute("instanceColorEnd",new Do(i,3,3)),this}fromWireframeGeometry(A){return this.setPositions(A.attributes.position.array),this}fromEdgesGeometry(A){return this.setPositions(A.attributes.position.array),this}fromMesh(A){return this.fromWireframeGeometry(new pR(A.geometry)),this}fromLineSegments(A){const e=A.geometry;return this.setPositions(e.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new mt);const A=this.attributes.instanceStart,e=this.attributes.instanceEnd;A!==void 0&&e!==void 0&&(this.boundingBox.setFromBufferAttribute(A),n8.setFromBufferAttribute(e),this.boundingBox.union(n8))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new ki),this.boundingBox===null&&this.computeBoundingBox();const A=this.attributes.instanceStart,e=this.attributes.instanceEnd;if(A!==void 0&&e!==void 0){const i=this.boundingSphere.center;this.boundingBox.getCenter(i);let g=0;for(let I=0,o=A.count;I<o;I++)Df.fromBufferAttribute(A,I),g=Math.max(g,i.distanceToSquared(Df)),Df.fromBufferAttribute(e,I),g=Math.max(g,i.distanceToSquared(Df));this.boundingSphere.radius=Math.sqrt(g),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}applyMatrix(A){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(A)}}HA.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new eA(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}},xg.line={uniforms:oh.merge([HA.common,HA.fog,HA.line]),vertexShader:`
|
|
6331
6331
|
#include <common>
|
|
6332
6332
|
#include <color_pars_vertex>
|
|
6333
6333
|
#include <fog_pars_vertex>
|