brainsmatics 1.1.20 → 1.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{deflate-b8d293ab.mjs → deflate-6c79444b.mjs} +1 -1
- package/dist/{deflate-fe3da770.js → deflate-b568cf98.js} +1 -1
- package/dist/{index-d65b28cf.js → index-70172f1d.js} +2 -2
- package/dist/{index-914ea6cb.mjs → index-b387092a.mjs} +3 -3
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{lerc-0c697f37.mjs → lerc-02ab52cc.mjs} +1 -1
- package/dist/{lerc-1796d4d9.js → lerc-e0bd06a1.js} +1 -1
- package/package.json +1 -1
|
@@ -4498,7 +4498,7 @@ echarts.use([`+U+"]);":"Unknown series "+D))}return}if(f==="tooltip"){if(E){proc
|
|
|
4498
4498
|
}
|
|
4499
4499
|
`,transparent:!1,depthWrite:!1,depthTest:!1}),hn=new td(ct,$t);hn.translateX(de),hn.translateY(me),hn.translateZ(Oe),hn.myMeshType="neuronSphere",hn.name=`${it}-${pt.line[0].start_name}`,hn.userData.color="#1771FF",hn.myMeshType="neuronSphere",hn.name=`${it}-${pt.line[0].start_name}`,hn.userData.color="#1771FF",ei(hn),Ge.add(hn),Ge.name=`swcPointGroup${it}`,wt.current.push(Ge),Se.current.add(Ge);let Tt=1;for(let gt=0;gt<pt.line.length;gt++){let ir=[],Hn=[pt.position[0].x,pt.position[0].y,pt.position[0].z];for(let gn=pt.line[gt].start;gn<=pt.line[gt].end;gn++){gn===pt.line[gt].start&&(Hn=[pt.position[gn].x,pt.position[gn].y,pt.position[gn].z]);let or=pt.position[gn].x,Lr=pt.position[gn].y,pn=pt.position[gn].z;(Math.sqrt((or-Hn[0])*(or-Hn[0])+(Lr-Hn[1])*(Lr-Hn[1])+(pn-Hn[2])*(pn-Hn[2]))>Tt||gn===pt.line[gt].end||gn===pt.line[gt].start)&&(ir.push(new Ie(or,Lr,pn)),Hn=[or,Lr,pn])}let Kn=new wa(new Ni().setFromPoints(ir),new eu({color:lt}));Kn.myMeshType="SWC",et.add(Kn)}et.scale.set(ji.current,ji.current,ji.current),et.translateX(de),et.translateY(me),et.translateZ(Oe),et.name=it,et.myMeshType="SWC",ee.current[it]=et,Se.current.add(ee.current[it]),st&&st()})},ui=function(Te){return Te.replace("/","_").replace(" ","_")},tr=(Te,Ne,it)=>{var st;it.color=Ne;let lt=Se.current.children.find(At=>At.name==it.name);if(s=="vessel")i.current[it.name]&<&<.traverse(function(At){(At instanceof wa||At instanceof er)&&At.material.color.set(it.color)});else if(s=="fbx"){if(oa.current[it.name]&<){let At;if(it.color.includes("rgba")){const Ge=it.color.lastIndexOf(",");At=it.color.slice(Ge+1,-1)}const pt=new Cr(it.color);let me=new URL(window.location.href),de=new URLSearchParams(me.search),Oe=de.get("fbxColor"),et={};Oe&&(et=JSON.parse(Oe)),et[`${it.name}`]=it.color,de.set("fbxColor",JSON.stringify(et)),me.search=de.toString(),window.history.replaceState({},"",me),lt.traverse(function(Ge){Ge instanceof er&&(Ge.material.color.set(pt),At&&(Ge.material.transparent=!0,Ge.material.opacity=At))})}}else if(s=="soma")oe.current.includes(it.name)&<&<.traverse(function(At){At instanceof td&&(At.material.uniforms.color.value=ln(it.color))});else if(s=="swc"){const At=new Cr(it.color);let pt;if(it.color.includes("rgba")){const Oe=it.color.lastIndexOf(",");pt=parseFloat(it.color.slice(Oe+1,-1))}if(ee.current[it.name]&<){let Oe=new URL(window.location.href),et=new URLSearchParams(Oe.search);Ft.current[it.name]=it.color.replace("#","!"),et.set("neuronsColor",encodeURIComponent(JSON.stringify(Ft.current))),Oe.search=et.toString(),window.history.replaceState({},"",Oe),lt.traverse(function(Ge){Ge instanceof wa&&(Ge.material.color.set(At),pt&&(Ge.material.transparent=!0,Ge.material.opacity=pt,Ge.material.needsUpdate=!0))})}Se.current.traverse(Oe=>{Oe.myMeshType==="neuronSphere"&&Oe.userData.type=="end"&&it.name===Oe.name.split("-")[0]&&(Oe.material.uniforms.color.value=At,Oe.userData.color=Te,pt&&(Oe.material.uniforms.opacity.value=pt))});let[me,de]=ns(at.current,it.name);for(let Oe in de){let et=Oe;Oe.indexOf("_")>-1&&(et=Oe.split("_")[0]);let Ge=(st=at.current[`${et}`])==null?void 0:st.find(ct=>ct.name===it.name);Ge&&(Ge.color=At)}Se.current.traverse(Oe=>{if(Oe.name==="lineNameMesh"&&Oe.userData.type=="end"&&it.name===Oe.userData.wholeName.split("-")[0]){let et=it.color;Oe.material.color.set(et),Oe.userData.initColor=et}})}},vr=S.useCallback((Te,Ne,it,lt,st)=>{Te.stopPropagation();let At=new URL(window.location.href),pt=new URLSearchParams(At.search),me=Ne,de=Ore(me,re.current),et=fm(me,re.current).children,Ge=U+"/data/"+be.current+"/"+ui(me)+".FBX";for(var ct=0;ct<de.length;ct++){if(Ea(de[ct],!0),We.includes(de[ct])){ye(hn=>hn.filter(Tt=>Tt!==de[ct]));const $t=JSON.stringify(We.filter(hn=>hn!==de[ct]));pt.set("regionsExpanded",$t)}oe.current=oe.current.filter($t=>$t!==de[ct])}if(We.includes(me)){ye(hn=>hn.filter(Tt=>Tt!==me));const $t=JSON.stringify(We.filter(hn=>hn!==me));pt.set("regionsExpanded",$t),oe.current.includes(me)||oe.current.push(me),oa.current[me]?(Se.current.remove(oa.current[me]),oa.current[me].children[0].material.color.set(lt),Se.current.add(oa.current[me]),mg.current&&(Se.current.remove(Ua.current[me]),Ua.current[me].children[0].material.color.set(lt),Se.current.add(Ua.current[me]))):Td(Ge,me,lt,.6,parseInt(st));for(var ct=0;ct<et.length;ct++)oe.current=oe.current.filter(Tt=>Tt!==et[ct].name),Ea(et[ct].name,!0),dt.current=0,delete ue.current[et[ct].name]}else{const $t=document.getElementById("spinner"),hn=JSON.stringify([...We,me]);pt.set("regionsExpanded",hn),ye(Tt=>[...Tt,me]),$t&&($t.style.display="block"),oa.current[me]?(Se.current.remove(oa.current[me]),oa.current[me].children[0].material.color.set("#DBDBDB"),Se.current.add(oa.current[me]),mg.current&&(Se.current.remove(Ua.current[me]),Ua.current[me].children[0].material.color.set("#DBDBDB"),Se.current.add(Ua.current[me]))):Td(Ge,me,"#DBDBDB",.6,parseInt(st)),oe.current=oe.current.filter(Tt=>Tt!==me);for(var ct=0;ct<et.length;ct++)if(et[ct]["3D"]){let gt=parseInt(et[ct].z),ir=et[ct].color,Hn=U+"/data/"+be.current+"/"+ui(et[ct].name)+".FBX";oe.current.push(et[ct].name),za(Hn,et[ct].name,ir,.6,gt,function(){$t&&($t.style.display="none")})}}m(oe.current);const Bt=JSON.stringify(oe.current);pt.set("regionsChecked",Bt),At.search=pt.toString(),window.history.replaceState({},"",At)},[v,f,We]),Er=(Te,Ne,it)=>{if(!b||v.includes(Ne)&&!(E!=null&&E.current.includes(Ne)))return;const lt=oe.current.indexOf(Ne);if(lt!==-1){if(b){if(E){const me=E.current.filter(de=>de!==Ne);E.current=me}Te.target.style.color="black"}m(me=>me.filter(de=>de!==Ne)),oe.current.splice(lt,1);let st=new URL(window.location.href),At=new URLSearchParams(st.search);const pt=JSON.stringify(oe.current);s==="vessel"&&At.set("vesselsChecked",pt),st.search=At.toString(),window.history.replaceState({},"",st),Ea(Ne,!0)}else{b&&(E&&E.current.push(Ne),Te.target.style.color="red"),oe.current.push(Ne),m([...oe.current]);let st=new URL(window.location.href),At=new URLSearchParams(st.search);const pt=JSON.stringify(oe.current);s==="vessel"&&At.set("vesselsChecked",pt),st.search=At.toString(),window.history.replaceState({},"",st);let me=U+"/data/FBX/"+Ne+".FBX";Td(me,Ne,it,.8,0)}},rr=S.useMemo(()=>{var st,At;let Te=Q&&Q.split(" ")[0]||"",Ne=typeof K=="string"?K.split(" ")[0]:"",it=["MO","MOs","MOp","CP","Isocortex"];if(s=="swc"){let pt=[],me=[];if(x&&Ne){let de=((st=x[Ne])==null?void 0:st.axon)||[];pt=[...pt,...de]}if(x&&Te){let de=((At=x[Te])==null?void 0:At.soma)||[];me=[...me,...de]}if(Ne&&Te){let de=new Set(pt),Oe=new Set(me);tt.current=[...de].filter(et=>Oe.has(et))}else Ne?tt.current=pt:Te&&(tt.current=me)}const lt=pt=>pt&&pt.map((me,de)=>{var hn;tH.push(me),me.nameflag?me.key=me.nameflag:me.key=me.name;let Oe=me.name;if(localStorage.getItem("lang")=="zh_cn"&&me.cname&&(Oe=me.cname),s==="vessel"){const Tt=Zv(me.key,n);Tt[Tt.length-1]}if(me.path||(s==="vessel"?me.path=U+"/data/Vessel/":s==="fbx"&&(me.path=U+"/data/FBX/")),USe){let Tt=JSON.parse(USe),ir=Object.keys(Tt).find(Hn=>Hn===me.name);ir&&(me.color=Tt[ir])}const et=yt.reduce((Tt,gt)=>{const[ir,Hn]=gt.split(":");return Tt[ir]=Hn,Tt},{}),Ge=(Tt,gt)=>Tt in et?et[Tt]===gt[Tt]:!0;let ct;const Bt=K?K.toLowerCase():null,$t=Bt&&me["3D"]&&Oe.toLowerCase().indexOf(Bt)!==-1||s==="fbx"&&Bt&&((hn=me.fullname)==null?void 0:hn.toLowerCase().indexOf(Bt))!==-1||b&&E&&E.current.includes(Oe)||s==="vessel"&&Bt&&Oe.toLowerCase().indexOf(Bt)!==-1;if(s==="fbx"||s==="vessel")return ct=S.createElement("span",{style:{display:"flex",alignItems:"center"},onClick:Tt=>Tt.stopPropagation()},S.createElement(jE,{format:"rgb",defaultValue:me.color,onChange:(Tt,gt)=>tr(Tt,gt,me)}),S.createElement(Wi,{placement:"right",title:me.fullname},S.createElement("div",{onClick:Tt=>Er(Tt,me.key,me.color),style:$t?{color:"red",whiteSpace:"nowrap"}:{color:"black",whiteSpace:"nowrap"}},Oe)),kn.includes(me.name)?S.createElement(Wi,{placement:"right",title:h("5000.6041")||"新标注"},S.createElement("svg",{className:"svgleft",width:"20px",height:"20px",viewBox:"0 0 200 200",version:"1.1",style:{marginLeft:"8px"},xmlns:"http://www.w3.org/2000/svg"},S.createElement("g",{id:"#1296dbff"},S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 12.39 0.00 L 187.60 0.00 C 193.55 1.76 198.40 6.33 200.00 12.39 L 200.00 197.03 C 197.21 200.36 192.66 199.74 189.30 197.68 C 160.70 182.89 131.92 168.44 103.27 153.76 C 100.74 151.94 97.96 153.23 95.58 154.56 C 79.92 162.65 64.11 170.45 48.45 178.54 C 34.57 185.85 20.35 192.53 6.55 200.00 L 4.06 200.00 C 2.44 198.91 1.07 197.50 0.00 195.87 L 0.00 12.40 C 1.80 6.43 6.41 1.77 12.39 0.00 M 68.04 50.93 C 67.96 68.97 68.00 87.02 68.01 105.06 C 67.45 108.62 71.21 112.26 74.72 110.75 C 77.57 109.92 78.36 106.64 78.30 104.03 C 78.31 90.37 78.34 76.71 78.25 63.05 C 93.63 78.23 108.28 94.13 123.37 109.59 C 124.85 111.28 127.53 111.57 129.39 110.34 C 131.68 109.12 132.04 106.39 132.00 104.06 C 131.96 86.01 132.08 67.96 131.94 49.91 C 132.41 46.10 127.58 43.22 124.42 45.37 C 121.60 46.80 121.73 50.30 121.67 53.00 C 121.74 66.29 121.62 79.57 121.76 92.85 C 107.86 78.88 94.47 64.40 80.64 50.36 C 78.20 48.09 75.99 44.09 72.08 44.90 C 69.30 45.36 67.87 48.32 68.04 50.93 Z"})))):null,B!=null&&B.includes("neurons")&&it.includes(me.name)&&(D=="task3D"||D=="3Dneurons")?S.createElement(Wi,{placement:"right",title:h("5000.6040")||"投射丰富"},S.createElement("svg",{width:"20px",height:"20px",viewBox:"0 0 200 200",style:{marginLeft:"5px"},version:"1.1",xmlns:"http://www.w3.org/2000/svg",onClick:()=>{R==null||R.current.tabChange(7),setTimeout(()=>{P&&P(me.name)},50)}},S.createElement("g",{id:"#1296dbff"},S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 161.22 29.23 C 170.61 22.47 184.66 24.19 192.68 32.31 C 197.08 36.53 199.12 42.53 200.00 48.42 L 200.00 51.57 C 199.07 58.41 196.19 65.28 190.43 69.42 C 182.96 75.76 171.77 76.37 163.24 71.84 C 157.18 68.92 153.36 63.05 150.76 57.07 C 143.17 57.08 135.57 56.74 127.99 57.09 C 125.64 57.08 124.07 59.04 122.49 60.48 C 109.60 73.80 96.19 86.60 83.39 100.00 C 96.19 113.40 109.60 126.20 122.49 139.52 C 124.07 140.96 125.64 142.92 127.98 142.91 C 135.58 143.26 143.19 142.92 150.80 142.94 C 152.36 139.60 153.87 136.15 156.39 133.41 C 161.32 127.99 168.67 124.81 176.01 125.13 C 183.62 125.37 191.06 129.33 195.32 135.66 C 200.14 142.64 201.01 152.08 197.83 159.90 C 193.64 169.75 182.73 176.08 172.08 174.81 C 162.13 173.99 153.99 166.24 150.70 157.12 C 141.45 156.77 132.19 157.20 122.94 156.99 C 119.96 157.25 117.95 154.84 116.03 152.98 C 102.37 138.97 88.30 125.36 74.64 111.35 C 72.74 109.58 70.92 107.06 68.05 107.07 C 61.80 106.71 55.54 107.06 49.29 107.12 C 46.34 115.79 38.83 122.99 29.63 124.43 C 19.13 126.37 7.56 120.75 2.99 111.02 C -1.82 101.38 0.34 88.66 8.45 81.45 C 16.25 74.63 28.64 72.73 37.60 78.39 C 43.12 81.56 46.99 86.86 49.37 92.67 C 55.88 92.61 62.41 93.06 68.91 92.61 C 70.92 92.57 72.27 90.88 73.65 89.65 C 87.81 75.15 102.36 61.03 116.53 46.53 C 118.28 44.79 120.23 42.76 122.94 43.01 C 132.21 42.82 141.49 43.18 150.76 42.93 C 153.10 37.64 156.28 32.47 161.22 29.23 Z"})))):null,S.createElement("div",{ref:de==0?u:null,style:{width:20,height:20,marginLeft:8}},me.children&&y&&(D=="task3D"||D=="3Dlabel")?S.createElement(Wi,{placement:"right",title:We.includes(me.key)?"Assemle":"Expand"},We.includes(me.key)?S.createElement("svg",{width:"20px",height:"20px",viewBox:"0 0 128 128",version:"1.1",xmlns:"http://www.w3.org/2000/svg",onClick:Tt=>vr(Tt,me.key,`${me.key}`,me.color,me.z)},S.createElement("g",{id:"#1296dbff"},S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 63.29 5.38 C 64.77 5.01 66.21 5.93 67.59 6.37 C 76.47 10.42 84.89 15.45 93.99 19.03 C 96.79 20.32 100.17 21.53 101.43 24.64 C 103.43 28.57 100.65 33.35 96.69 34.67 C 89.18 37.63 82.15 41.64 74.68 44.70 C 70.42 46.40 65.85 50.45 61.12 47.92 C 51.83 43.67 42.87 38.75 33.64 34.38 C 30.76 33.08 27.65 31.24 27.03 27.85 C 26.96 24.60 28.32 20.85 31.64 19.65 C 42.33 15.22 52.50 9.55 63.29 5.38 Z"}),S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 15.39 56.26 C 17.98 55.30 20.40 57.34 22.69 58.29 C 30.72 62.68 39.29 66.09 47.05 70.95 C 50.29 72.73 50.08 76.80 50.06 79.98 C 49.82 91.26 50.26 102.56 49.87 113.83 C 48.69 117.23 44.23 120.17 40.62 118.42 C 31.59 115.01 22.81 110.92 14.00 106.99 C 9.42 104.95 9.09 99.37 8.97 95.04 C 9.05 85.36 8.92 75.67 9.02 66.00 C 8.93 61.81 11.32 57.64 15.39 56.26 Z"}),S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 109.45 56.37 C 113.43 54.97 117.33 58.88 118.67 62.35 C 119.44 66.85 118.87 71.46 119.00 76.00 C 118.77 84.93 119.77 94.00 117.79 102.80 C 117.39 105.12 115.10 106.29 113.17 107.17 C 105.54 110.54 97.93 113.93 90.31 117.31 C 88.05 118.18 85.69 119.33 83.20 118.99 C 80.27 117.96 77.59 115.38 77.99 112.02 C 77.99 100.34 77.98 88.66 78.00 76.98 C 77.80 73.81 79.74 70.88 82.64 69.66 C 91.60 65.29 100.43 60.62 109.45 56.37 Z"})),S.createElement("g",{id:"#8da6d9ff"},S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 10.48 33.45 C 14.12 32.46 17.23 35.20 20.36 36.61 C 22.35 38.00 25.96 38.81 25.77 41.84 C 25.91 43.53 23.62 44.66 22.18 43.98 C 18.23 42.43 14.41 40.41 10.91 38.01 C 9.31 36.99 10.24 34.90 10.48 33.45 Z"}),S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 113.64 33.62 C 114.86 32.90 116.24 33.28 117.54 33.44 C 117.65 34.89 118.71 37.04 117.12 38.02 C 113.32 40.46 109.32 42.77 105.00 44.17 C 102.38 44.63 101.22 40.71 103.32 39.38 C 106.46 36.98 110.08 35.28 113.64 33.62 Z"}),S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 32.35 44.38 C 36.95 44.43 40.98 47.92 44.91 50.13 C 47.61 51.34 45.87 56.15 43.02 55.20 C 38.83 53.64 34.78 51.46 31.23 48.74 C 29.51 47.51 30.52 44.85 32.35 44.38 Z"}),S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 83.15 50.18 C 86.59 47.86 90.26 45.76 94.16 44.30 C 96.46 43.58 97.45 46.12 97.82 47.88 C 94.55 50.84 90.52 52.76 86.56 54.60 C 85.18 55.35 83.62 54.93 82.16 54.82 C 82.08 53.21 81.21 51.03 83.15 50.18 Z"}),S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 51.49 55.43 C 56.19 54.55 59.78 58.65 64.01 59.97 C 68.18 58.57 71.82 54.46 76.48 55.50 C 76.69 56.83 77.25 58.23 76.74 59.58 C 73.79 61.91 70.21 63.25 67.06 65.27 C 66.80 69.37 67.00 73.50 66.42 77.57 C 64.81 77.78 63.19 77.76 61.59 77.55 C 61.00 73.47 61.20 69.34 60.94 65.24 C 57.78 63.24 54.16 61.96 51.27 59.56 C 50.53 58.23 51.26 56.78 51.49 55.43 Z"}),S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 61.61 84.44 C 63.20 84.05 64.82 84.09 66.42 84.44 C 67.10 89.77 67.19 95.20 66.42 100.53 C 64.82 101.13 63.15 101.18 61.52 100.63 C 60.93 95.26 60.78 89.80 61.61 84.44 Z"}),S.createElement("path",{fill:"#8da6d9",opacity:"1.00",d:" M 61.65 108.59 C 62.39 106.51 65.30 107.03 66.52 108.37 C 67.25 112.72 67.03 117.20 66.40 121.55 C 64.81 122.00 63.19 122.00 61.60 121.55 C 61.04 117.28 60.56 112.81 61.65 108.59 Z"}))):S.createElement("svg",{width:"20px",height:"20px",viewBox:"0 0 128 128",version:"1.1",xmlns:"http://www.w3.org/2000/svg",onClick:Tt=>vr(Tt,me.key,`${me.key}`,me.color,me.z)},S.createElement("g",{id:"#1296dbff"},S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 61.53 12.67 C 65.46 11.54 69.30 13.51 72.75 15.18 C 79.87 18.83 87.26 21.90 94.40 25.50 C 98.14 27.43 102.24 28.74 105.61 31.32 C 108.79 33.88 107.69 39.53 104.04 41.12 C 97.03 44.96 89.48 47.73 82.40 51.44 C 77.12 53.83 71.95 56.48 66.60 58.70 C 63.66 60.17 60.60 58.42 57.90 57.25 C 46.68 51.71 35.19 46.70 23.99 41.12 C 19.70 39.29 19.26 32.55 23.58 30.52 C 32.09 25.74 41.21 22.17 49.92 17.78 C 53.73 15.95 57.45 13.86 61.53 12.67 Z"}),S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 19.32 48.10 C 22.27 47.30 25.07 49.17 27.71 50.24 C 36.66 54.75 45.89 58.69 54.87 63.12 C 56.99 64.25 59.54 65.55 60.07 68.13 C 60.64 70.71 60.51 73.37 60.53 76.00 C 60.40 86.34 60.51 96.69 60.51 107.03 C 60.44 109.78 60.34 113.19 57.72 114.82 C 54.77 117.03 51.17 114.98 48.27 113.77 C 39.28 109.37 30.16 105.24 21.11 100.97 C 19.03 99.85 16.43 98.92 15.46 96.58 C 14.66 93.80 14.87 90.85 14.82 87.99 C 14.97 77.31 14.77 66.62 14.88 55.94 C 14.74 52.76 16.06 49.18 19.32 48.10 Z"}),S.createElement("path",{fill:"#1296db",opacity:"1.00",d:" M 105.40 48.21 C 108.42 46.98 112.09 49.16 112.66 52.32 C 113.43 56.16 113.11 60.11 113.15 64.00 C 113.03 73.34 113.25 82.69 113.10 92.04 C 113.14 95.16 112.21 98.70 109.04 100.01 C 99.09 104.78 89.00 109.29 79.06 114.12 C 76.54 115.15 73.59 116.72 70.92 115.21 C 67.85 113.76 67.50 110.02 67.50 107.03 C 67.51 95.68 67.56 84.34 67.48 72.99 C 67.64 70.22 67.28 66.64 70.01 64.96 C 74.57 61.94 79.73 60.01 84.64 57.66 C 91.64 54.70 98.21 50.72 105.40 48.21 Z"})))):null)),me.title=ct,me.key=me.name,me["3D"]==!1&&(me.disabled=!0),b||We.includes(me.name)?me.disableCheckbox=!0:me.disableCheckbox=!1,me.children&&(me.children=lt(me.children)),me;if(s=="swc"){if(Ne||Te)return tt.current&&tt.current.includes(Oe)&&Ge("strain",me)&&Ge("age",me)&&Ge("weight",me)&&Ge("gender",me)&&Ge("injected_viruses",me)&&Ge("imaging_system",me)&&Ge("species",me)?(me.title=me.name,me.key=me.name,me.color=me.color?me.color:"#045404",!In||me.show?me:null):null}else{const Tt=K&&Oe.toLowerCase().indexOf(K.toLowerCase())!==-1;return ct=S.createElement(Wi,{placement:"right",title:me.fullname},S.createElement("span",{style:{display:"flex",alignItems:"center"},onClick:gt=>gt.stopPropagation()},me.children&&s=="swc"?null:S.createElement(jE,{disabled:s=="swc",format:"rgb",defaultValue:s=="swc"?"#045404":me.color,onChange:(gt,ir)=>tr(gt,ir,me)}),S.createElement("div",{style:Tt?{color:"red"}:{}},Oe))),me.title=ct,me.key=me.name,me.children&&(me.children=lt(me.children)),me}});return lt(n).filter(Boolean)},[K,n,Q,We,b,y,A,fe,yt,x,In,D,v]),zr=new WS;S.useEffect(()=>{zr.load("/staticresource/fonts/helvetiker_bold.typeface.json",Te=>{})},[]);const Ji=(Te,Ne)=>{m(pt=>[...pt,Te]),oe.current.push(Te);let it=new URL(window.location.href),lt=new URLSearchParams(it.search);const st=JSON.stringify(oe.current);lt.set("neuronsChecked",st),it.search=lt.toString(),window.history.replaceState({},"",it);let At=_i(rr,Te);fetch(At.path).then(pt=>pt.json()).then(pt=>{Bn(pt)}),ee.current[Te]?(Ht({name:Te,color:Ne}),Me(!0)):vi(At.path,6,Te,At.color,function(){pa(Te,At.color),Ht({name:Te,color:Ne}),Me(!0)})},Mi=[{title:"Name",dataIndex:"name"},{title:"Color",dataIndex:"Picker",width:50,render:(Te,Ne)=>(Ft.current[Ne.name]&&(Ne.color=Ft.current[Ne.name]),S.createElement(jE,{disabled:!Ne.show,format:"rgb",defaultValue:Ne.color?Ne.color:"#045404",onChange:(it,lt)=>tr(it,lt,Ne)}))},{title:"Ana.",dataIndex:"Ana",align:"center",render:(Te,Ne)=>S.createElement(Wi,{placement:"right",title:h("5000.7008")||"分析"},S.createElement("svg",{width:"20px",height:"20px",viewBox:"0 0 200 200",version:"1.1",xmlns:"http://www.w3.org/2000/svg",cursor:"pointer",pointerEvents:Ne.show?"auto":"none",onClick:it=>{Ji(Ne.name,Ne.color)}},S.createElement("g",{id:"#515151ff"},S.createElement("path",{fill:"#515151",opacity:"1.00",d:" M 93.31 23.38 C 99.84 22.59 106.48 23.11 113.05 23.06 C 116.47 22.96 118.74 26.28 119.64 29.16 C 119.69 72.38 119.68 115.62 119.65 158.85 C 118.76 161.25 117.05 164.47 114.01 164.31 C 107.36 164.33 100.70 164.43 94.05 164.27 C 90.19 163.42 89.10 158.51 89.04 155.07 C 88.96 114.37 88.99 73.66 89.03 32.95 C 88.88 29.39 89.91 25.14 93.31 23.38 Z"}),S.createElement("path",{fill:"#515151",opacity:"1.00",d:" M 154.30 33.38 C 160.49 32.55 166.82 33.20 173.07 33.01 C 177.49 32.53 180.75 36.93 180.68 41.00 C 180.64 79.96 180.71 118.92 180.65 157.87 C 180.10 160.67 178.42 164.46 175.00 164.30 C 168.35 164.35 161.68 164.43 155.03 164.26 C 150.70 163.82 149.84 158.51 149.68 155.00 C 149.66 117.67 149.67 80.35 149.67 43.02 C 149.50 39.30 150.67 35.07 154.30 33.38 Z"}),S.createElement("path",{fill:"#515151",opacity:"1.00",d:" M 31.38 68.42 C 36.43 66.93 41.81 67.98 47.00 67.67 C 50.60 67.83 55.31 66.86 57.74 70.26 C 59.28 71.73 58.83 74.05 59.00 75.97 C 58.96 103.34 59.07 130.71 58.95 158.08 C 59.30 161.45 56.33 164.46 52.99 164.32 C 46.66 164.36 40.33 164.36 34.01 164.32 C 30.72 164.36 27.65 161.48 28.05 158.09 C 27.95 130.37 28.00 102.64 28.03 74.92 C 27.75 72.28 28.89 69.58 31.38 68.42 Z"}),S.createElement("path",{fill:"#515151",opacity:"1.00",d:" M 7.94 174.89 C 8.70 174.83 10.24 174.70 11.01 174.64 C 47.00 174.68 83.00 174.65 119.00 174.66 C 146.00 174.78 173.01 174.42 200.00 174.84 L 200.00 184.15 C 198.66 184.25 197.33 184.31 196.00 184.35 C 134.33 184.34 72.67 184.34 11.01 184.35 C 10.24 184.29 8.70 184.17 7.94 184.11 C 7.49 181.06 7.48 177.94 7.94 174.89 Z"}))))},{title:"Path",dataIndex:"img",align:"center",width:50,render:(Te,Ne)=>S.createElement(Wi,{placement:"right",title:h("5000.6003")||"投射路径"},S.createElement("svg",{width:"20px",height:"20px",viewBox:"0 0 200 200",version:"1.1",xmlns:"http://www.w3.org/2000/svg",cursor:"pointer",pointerEvents:Ne.show?"auto":"none",onClick:it=>{ho(Ne.name)}},S.createElement("g",{id:"#1296dbff"},S.createElement("path",{fill:_&&Ne.name in _.current?"#1296db":"#515151",opacity:"1.00",d:" M 49.85 22.81 C 59.71 14.23 76.52 14.87 85.29 24.74 C 87.48 27.08 88.68 30.09 90.41 32.73 C 91.80 33.49 93.46 33.21 94.98 33.33 C 111.66 33.26 128.35 33.27 145.03 33.31 C 156.32 33.34 168.08 37.82 175.15 46.90 C 184.45 58.34 185.39 75.18 179.31 88.32 C 175.60 95.86 169.21 102.22 161.27 105.20 C 155.18 107.71 148.53 108.28 142.00 108.29 C 112.98 108.27 83.95 108.30 54.93 108.29 C 47.32 108.11 39.18 111.60 35.74 118.72 C 31.96 126.77 32.58 137.41 38.92 144.04 C 43.19 148.73 49.91 149.96 55.98 150.00 C 72.33 150.03 88.68 149.95 105.04 150.04 C 106.56 150.01 108.10 150.00 109.60 149.65 C 111.78 145.95 113.50 141.75 117.13 139.15 C 126.54 131.15 141.94 131.52 150.80 140.19 C 153.70 142.84 155.15 146.56 157.28 149.78 C 164.10 150.58 171.02 149.34 177.82 150.39 C 184.67 152.33 185.10 163.99 178.15 166.09 C 171.31 167.70 164.18 165.87 157.29 167.06 C 155.14 170.31 153.62 174.04 150.68 176.70 C 140.24 186.50 121.13 185.09 112.96 173.05 C 111.06 170.87 110.76 166.29 107.04 166.72 C 93.69 166.66 80.35 166.74 67.00 166.71 C 57.97 166.58 48.53 167.54 39.99 163.97 C 31.40 160.72 23.97 154.20 20.28 145.72 C 13.84 131.17 16.41 112.32 28.35 101.31 C 36.18 93.81 47.48 91.52 58.00 91.71 C 87.34 91.67 116.69 91.78 146.03 91.68 C 153.59 91.69 161.48 87.76 164.60 80.60 C 168.03 72.44 167.24 61.77 160.57 55.44 C 156.20 51.22 149.90 49.98 144.02 50.00 C 128.01 49.96 112.00 50.06 95.99 49.95 C 94.12 49.98 92.23 49.93 90.41 50.34 C 88.22 54.05 86.50 58.25 82.87 60.85 C 73.46 68.85 58.08 68.47 49.22 59.81 C 46.25 57.21 44.85 53.43 42.73 50.21 C 35.91 49.42 28.99 50.67 22.20 49.60 C 15.26 47.64 14.91 36.10 21.94 33.95 C 28.72 32.23 35.86 34.16 42.71 32.94 C 44.97 29.49 46.61 25.52 49.85 22.81 M 63.32 34.12 C 56.99 36.45 57.07 46.16 62.70 49.22 C 65.17 50.16 68.00 50.11 70.52 49.39 C 73.84 47.68 75.46 43.66 74.83 40.07 C 74.41 34.85 67.77 32.10 63.32 34.12 M 130.37 150.45 C 125.27 151.88 123.75 158.64 126.14 162.91 C 128.25 166.43 133.18 167.23 136.81 165.90 C 141.61 164.64 142.31 158.29 140.69 154.36 C 139.16 150.30 134.12 149.42 130.37 150.45 Z"}))))},{title:"Src.",dataIndex:"source",align:"center",width:50,render:(Te,Ne)=>{const it=Ne.type;return S.createElement(Wi,{placement:"right",title:h("5000.6038",{name:it})||'数据来源"'+it+'"'},S.createElement("a",{href:Ne.url,target:"_blank"},S.createElement("img",{src:Ne.image,width:"20px",height:"20px"})))}}],Gi=Te=>{for(var Ne=window.location.search.substring(1),it=Ne.split("&"),lt=0;lt<it.length;lt++){var st=it[lt].split("=");if(st[0]==Te)return st[1]}return!1},ha=(Te,Ne)=>{let lt=fm(lh(Te,Ne),Ne).children;for(var st=[],At=0;At<lt.length;At++)lt[At]["3D"]&&st.push(lt[At].name);return st},no=()=>{const Te=Object.keys(ue.current);Object.keys(ue.current).length!==0&&Ro(Te,ue.current,.2,0,void 0,!0)};S.useEffect(()=>{no()},[f]);const za=(Te,Ne,it,lt,st,At)=>{var pt=new bo;if(pt.setFromAxisAngle(new Ie(1,0,0),Math.PI/2),!oa.current[Ne]){var me=new BD;lt=lt||.1,me.load(Te,function(de){de.scale.set(ji.current,ji.current,ji.current),de.applyQuaternion(pt),st&&de.translateY(st*ji.current*.1),de.children[0].material.transparent=!0,de.children[0].material.opacity=lt,de.children[0].material.depthTest=!1,de.children[0].material.color.set(it);let Oe=de.clone();if(Ne!="Brain"){var et=new Li,Ge=new Ie(1,0,0);et.set(1-2*Ge.x*Ge.x,-2*Ge.x*Ge.y,-2*Ge.x*Ge.z,0,-2*Ge.x*Ge.y,1-2*Ge.y*Ge.y,-2*Ge.y*Ge.z,0,-2*Ge.x*Ge.z,-2*Ge.y*Ge.z,1-2*Ge.z*Ge.z,0,0,0,0,1),Oe.applyMatrix4(et),Oe.translateX(-yo.current),Oe.translateY(oo.current),Oe.translateZ(-Wa.current),Oe.name=Ne,Oe.myMeshType="FBX",Oe.children[0].name=Ne,Oe.children[0].myMeshType="FBX",Ua.current[Ne]=Oe,mg.current&&Se.current.add(Oe)}de.translateX(yo.current),de.translateY(oo.current),de.translateZ(-Wa.current),de.name=Ne,de.myMeshType="FBX",de.children[0].name=Ne,de.children[0].myMeshType="FBX",oa.current[Ne]=de,Se.current.add(oa.current[Ne]);var ct=new Ie,Bt=new ps().setFromObject(de);Bt.getCenter(ct);var $t=new Ie;Bt.getSize($t);var hn=$t.x*$t.y*$t.z;Zy.current[Ne]=[ct,hn];for(var Tt=Zv(Ne,re.current),gt=0;gt<Tt.length;gt++)if(o!=null&&o.current&&ue.current[Tt[gt]])if(pe.current||ae.current){de.translateOnAxis(ue==null?void 0:ue.current[Tt[gt]].axis,o.current*(ue==null?void 0:ue.current[Tt[gt]].length));var ir=ue==null?void 0:ue.current[Tt[gt]].axis.clone();ir.x=ir.x*-1,Oe.translateOnAxis(ir,o.current*(ue==null?void 0:ue.current[Tt[gt]].length))}else{var ir=ue[Tt[gt]].axis.clone();ir.x=ir.x*-1,Oe.translateOnAxis(ir,o.current*(ue==null?void 0:ue.current[Tt[gt]].length)),de.translateOnAxis(ue==null?void 0:ue.current[Tt[gt]].axis,o.current*(ue==null?void 0:ue.current[Tt[gt]].length))}oa.current[Ne]=de;let Hn=ha(Ne,re.current);for(var Kn=!0,gn=0;gn<Hn.length;gn++)Hn[gn]in oa.current||(Kn=!1);if(Kn){for(var or=0,gn=0;gn<Hn.length;gn++){var Lr=Hn[gn];if(!pe.current)if(ae.current){let ri=new Ie(0,0,5);ue.current[Lr]={axis:Zy.current[Lr][0].clone().sub(ri).applyAxisAngle(new Ie(1,0,0),-1*Math.PI/2).normalize(),length:Math.cbrt(Zy.current[Lr][1])}}else Ce.current;or=or+ue.current[Lr].length}if(!(ae.current||pe.current))for(gn=0;gn<Hn.length;gn++)ue.current[Hn[gn]].length=ue.current[Hn[gn]].length/or*Hn.length;var pn=setInterval(function(){if(o!=null&&o.current&&dt.current<(o==null?void 0:o.current)){dt.current=dt.current+.2;let sn;dt.current>(o==null?void 0:o.current)&&(sn=(o==null?void 0:o.current)-dt.current+.2,dt.current=o.current),Ro(Hn,ue.current,.2,0,sn)}else dt.current=0,clearInterval(pn)},20)}At&&At()})}},Ro=(Te,Ne,it,lt,st,At=!1)=>{var pt,me;if(pe.current||ae.current)var de=.2;else var de=it;for(var Oe in Te){var et=Te[Oe];pt=oa.current[et],me=Ua.current[et];var Ge=Ne[et].axis,ct=Ge.clone();ct.x=ct.x*-1;var Bt=Ne[et].length;if(At&&o){oa.current[Te[Oe]].locationLength=o==null?void 0:o.current,oa.current[Te[Oe]].position.set(0,0,0),oa.current[Te[Oe]].translateX(yo.current),oa.current[Te[Oe]].translateY(oo.current),oa.current[Te[Oe]].translateZ(-Wa.current),oa.current[Te[Oe]].translateOnAxis(Ge,(o==null?void 0:o.current)*Bt),Ua.current[Te[Oe]].position.set(0,0,0),Ua.current[Te[Oe]].translateX(-yo.current),Ua.current[Te[Oe]].translateY(oo.current),Ua.current[Te[Oe]].translateZ(-Wa.current),Ua.current[Te[Oe]].locationLength=o==null?void 0:o.current,Ua.current[Te[Oe]].translateOnAxis(ct,(o==null?void 0:o.current)*Bt);continue}switch(lt){case 0:st?(oa.current[Te[Oe]].translateOnAxis(Ge,st*Bt),Ua.current[Te[Oe]].translateOnAxis(ct,st*Bt)):(oa.current[Te[Oe]].translateOnAxis(Ge,de*Bt),Ua.current[Te[Oe]].translateOnAxis(ct,de*Bt));break;case 1:de<=0?(pt.translateOnAxis(Ge,-1*Math.sqrt(Math.abs(de*Bt))),me.translateOnAxis(ct,-1*Math.sqrt(Math.abs(de*Bt)))):(pt.translateOnAxis(Ge,Math.sqrt(de*Bt)),me.translateOnAxis(ct,Math.sqrt(de*Bt)));break;case 2:de<=0?(pt.translateOnAxis(Ge,-1*Math.pow(de,2)*Bt),me.translateOnAxis(ct,-1*Math.pow(de,2)*Bt)):(pt.translateOnAxis(Ge,Math.pow(de,2)*Bt),me.translateOnAxis(ct,Math.pow(de,2)*Bt));break}}},ro=Te=>{for(let Ne=0;Ne<Te.length;Ne++){const it=Te[Ne],{key:lt,cname:st,fullname:At}=it;localStorage.getItem("lang")=="zh_cn"&&st?ge.current.push({key:lt,title:st,fullname:At}):ge.current.push({key:lt,title:lt,fullname:At}),it.children&&ro(it.children)}},ti=Te=>{const{value:Ne}=Te.target;if(Ne!=""){we.current=!1,tH=[];const it=ge.current.map(st=>st.title.toLowerCase().indexOf(Ne.toLowerCase())>-1||st.fullname.toLowerCase().indexOf(Ne.toLowerCase())>-1?lh(st.key,n):null).filter((st,At,pt)=>!!(st&&pt.indexOf(st)===At));let lt=[];for(let st in it){let At=it[st];if(At){let pt=Zv(At,n);Ne.length===1?(pt.length>2&&(pt=pt.slice(pt.length-3,pt.length)),lt.push(...pt)):lt.push(At,...pt)}}lt.filter((st,At,pt)=>!!(st&&pt.indexOf(st)===At)),Z(lt),te(!0),Y(Ne)}else Z(Ve.current),Y(""),we.current=!0},Ir=(Te,Ne)=>(...lt)=>{clearTimeout(H.current),H.current=setTimeout(()=>{Te(...lt)},Ne)},$a=Ir(ti,50),Za=Te=>{Z(Te),tH=[],te(!1)},pa=(Te,Ne)=>{ee.current[Te]&&ee.current[Te].children[0].material.color.set(Ne)},Qo=S.useCallback((Te,Ne,it,lt)=>{let st=Te,At="",pt;if(s!=="swc"){st=Ne.node.name,At=Ne.node.path,pt=Ne.node.color;let de=v.findIndex(Bt=>Bt==st),Oe=JSON.parse(JSON.stringify(v));if(st==v[0]&&C==2)return;E&&(E.current=E.current.filter(Bt=>Bt!=st)),de>-1?(E&&E.current.splice(de,1),Oe.splice(de,1)):G&&C==2&&G.current.length==0&&v.length!=0?(Ea(v[0]),Oe=[st]):(E&&v.length!=0&&E.current.push(st),Oe.push(st)),m(Oe),oe.current=Oe;let et=new URL(window.location.href),Ge=new URLSearchParams(et.search);const ct=JSON.stringify(Oe);s==="fbx"&&C!=2?Ge.set("regionsChecked",ct):s==="vessel"&&Ge.set("vesselsChecked",ct),et.search=Ge.toString(),window.history.replaceState({},"",et)}const me=document.getElementById("spinner");switch(s){case"vessel":{st=="Unnamed vein"&&(st="Unnamed_Vein");let de=At+st+".js";Ne.checked?(by=!0,me&&(me.style.display="block"),bt(de,8,pt,st,function(){me&&(me.style.display="none")})):(by=!1,me&&(me.style.display="none"),rn(st));break}case"swc":{if(it){if(lt){let de=Ne.map((Oe,et)=>new Promise((Ge,ct)=>{if(Ne)if(ee.current[Oe.name])Ge("");else{if(m(Bt=>[...Bt,Oe.name]),et===Ne.length-1){let Bt=new URL(window.location.href),$t=new URLSearchParams(Bt.search),hn=Ne.map(ir=>ir.name);oe.current.push(...hn);const Tt=[...v,...hn],gt=JSON.stringify(Tt);$t.set("neuronsChecked",gt),Bt.search=$t.toString(),window.history.replaceState({},"",Bt)}me&&(me.style.display="block"),vi(Oe.path,6,Oe.name,Oe.color,function(){pa(Oe.name,"#045404"),Ge("")})}else{by=!1,fr(Oe.name);let Bt=new URL(window.location.href),$t=new URLSearchParams(Bt.search);const Tt=JSON.stringify([]);$t.set("neuronsChecked",Tt),Bt.search=$t.toString(),window.history.replaceState({},"",Bt),Ge("")}}));Promise.all(de).then(()=>{me&&(me.style.display="none")})}else if(!ee.current[Te.name]){oe.current.push(Te.name),me&&(me.style.display="block"),m(Ge=>[...Ge,Te.name]);let de=new URL(window.location.href),Oe=new URLSearchParams(de.search);const et=JSON.stringify(oe.current);Oe.set("neuronsChecked",et),de.search=Oe.toString(),window.history.replaceState({},"",de),vi(Te.path,6,Te.name,Te.color,function(){pa(Te.name,"#045404"),me&&(me.style.display="none"),setTimeout(()=>{V&&V("欢迎来和我一起探索更多<strong>"+Te.name+"</strong>脑区相关内容")},5e3)})}}else if(lt)Ne.forEach((de,Oe)=>{if(Ne){if(m(et=>et.filter(Ge=>Ge!==de.name)),oe.current=oe.current.filter(et=>et!==de.name),fr(de.name),Oe===Ne.length-1){let et=new URL(window.location.href),Ge=new URLSearchParams(et.search);const ct=JSON.stringify(oe.current);Ge.set("neuronsChecked",ct),et.search=Ge.toString(),window.history.replaceState({},"",et)}if(_&&de.name in _.current){Ae(et=>et.filter(Ge=>Ge!==de.name));for(let et in _.current[de.name])Se.current.remove(_.current[de.name][et]);delete _.current[de.name]}}});else{if(_&&Te.name in _.current){Ae(Ge=>Ge.filter(ct=>ct!==Te.name));for(let Ge in _.current[Te.name])Se.current.remove(_.current[Te.name][Ge]);delete _.current[Te.name]}fr(Te.name),oe.current=oe.current.filter(Ge=>Ge!==Te.name),m(Ge=>Ge.filter(ct=>ct!==Te.name));let de=new URL(window.location.href),Oe=new URLSearchParams(de.search);const et=JSON.stringify(oe.current);Oe.set("neuronsChecked",et),de.search=Oe.toString(),window.history.replaceState({},"",de)}break}case"soma":{Rre(st,rr).forEach(Oe=>{Ne.checked?(by=!0,ee.current[st]||(p!=null&&p.current?Ut(At,Oe.color,st):Ut(U+"/data/json/"+st,Oe.color,st))):(by=!1,fr(st))});break}case"fbx":{let de=parseInt(Ne.node.z),Oe=U+"/data/FBX/"+ui(st)+`.FBX?time=${FSe}`;Ne.checked?(me&&(me.style.display="block"),Td(Oe,st,pt,.8,de,"FBX",function(){me&&(me.style.display="none"),setTimeout(()=>{V&&V("欢迎来和我一起探索更多 <strong>"+st+"</strong> 脑区相关内容")},5e3)})):Ea(st)}}},[v]),ko=()=>{if(re.current.length>0&&s!=="swc"&&v.length>0&&(s==="fbx"||s==="vessel"))return new Promise((Te,Ne)=>{const it=document.getElementById("spinner");let lt=0;for(let st=0;st<v.length;st++){let At=fm(v[st],re.current);if(At){let pt={node:{...At,checked:!0}};if(s==="fbx"){let me=U+"/data/FBX/"+ui(At.key)+".FBX";Td(me,At.key,At.color,.8,At.z,"FBX",function(){it&&Nn.current===!0&&(it.style.display="none"),lt+=1,lt===v.length&&Te("")})}else if(s==="vessel"){let me=At.name,de=pt.node.path;me=="Unnamed vein"&&(me="Unnamed_Vein");let Oe=de+me+".js";by=!0,it&&(it.style.display="block"),bt(Oe,8,At.color,me,function(){it&&Nn.current===!0&&(it.style.display="none"),lt+=1,lt===v.length&&Te("")})}}}}).then(Te=>{if(LSe){let Ne=JSON.parse(LSe);for(let it=0;it<Ne.length;it++){let lt=fm(Ne[it],re.current);lt&&vr({stopPropagation:()=>{}},lt.key,`${lt.key}`,lt.color,lt.z)}}})},bi=()=>{if(nH&&JSON.parse(nH).length!=0){Nn.current=!1;const Te=document.getElementById("spinner"),Ne=JSON.parse(nH);let it=0;Te&&(Te.style.display="block");for(let lt=0;lt<Ne.length;lt++){lt!==Ne.length-1&&Te&&(Te.style.display="block");let st=n.find(At=>At.name===Ne[lt]);st&&(Ft.current[Ne[lt]]?st.color=Ft.current[Ne[lt]].replace("!","#"):st.color="#045404",vi(st.path,6,st.name,st.color,function(){if(pa(st.name,st.color),NSe){const At=JSON.parse(NSe);for(let pt=0;pt<At.length;pt++)st.name==At[pt]&&ho(st.name)}it++,it===Ne.length&&Te&&(Te.style.display="none",Nn.current=!0)}))}}};S.useEffect(()=>{!Ln.current&&n&&n.length>0&&(bi(),ko(),Ln.current=!0)},[n]);const Ea=(Te,Ne=!1)=>{oa.current[Te]&&(Se.current.remove(oa.current[Te]),oa.current[Te].children[0].geometry.dispose(),Ne&&delete oa.current[Te]),Ua.current[Te]&&(Se.current.remove(Ua.current[Te]),Ua.current[Te].children[0].geometry.dispose(),Ne&&delete Ua.current[Te]),ue.current[Te]&&Ne&&delete ue.current[Te]},ns=(Te,Ne)=>{const it={},lt={};for(const st in Te){const At=Te[st];for(const pt of At)if(pt.name==Ne){if(pt.color==="#1771FF"){it[st]={point:pt.point,color:pt.color,type:pt.type};break}if(pt.color==="#A7B5A1"){it[st]={point:pt.point,color:pt.color,type:pt.type};break}it[st]={point:pt.point,color:pt.color,type:pt.type}}}for(const st in Te){const At=Te[st];for(const pt of At)if(pt.name==Ne){if(pt.type=="cell"){lt[st]={point:pt.point,color:pt.color,type:pt.type};break}pt.type==="end"&&(pt.point[0]<570?lt[st]={point:pt.point,color:pt.color,type:pt.type}:lt[st+"_111"]={point:pt.point,color:pt.color,type:pt.type}),!lt[st]&&!lt[st+"_111"]&&pt.point[0]<570&&(lt[st]={point:pt.point,color:pt.color,type:pt.type})}}return[it,lt]},Ti=(Te,Ne)=>{if(Object.keys(Te).length>0){const it=Bi.current.position;let lt=Se.current.getObjectByName("DR-anterior"),st=0;lt&&(st=it.distanceTo(lt.position));for(let At in Te){let{point:pt,color:me,type:de}=Te[At];Ttn.load(U+"/fonts/helvetiker_bold.typeface.json",function(Oe){const et=new j6(At.replace("_111",""),{font:Oe,size:.3,height:.01}),Ge=new Pl({color:me,specular:0,shininess:0}),ct=new er(et,Ge),Bt=st<6?.2:st<9?.3:.5;ct.scale.set(Bt,Bt,Bt),ct.position.set(pt[0]*.01,pt[1]*.01,pt[2]*.01),ct.name="lineNameMesh",ct.userData.name=At.replace("_111",""),ct.userData.wholeName=`${Ne}-${At.replace("_111","")}`,ct.userData.initColor=me,ct.userData.type=de,ct.translateY(Wa.current),ct.translateZ(oo.current),ct.translateX(yo.current),et.center(),_!=null&&_.current&&_.current[Ne].push(ct),Se.current.add(ct)})}}else setTimeout(()=>{const[it,lt]=ns(at.current,Ne);Ti(lt,Ne)},100)},ho=(Te,Ne,it)=>{let lt=new URL(window.location.href),st=new URLSearchParams(lt.search),At,pt;if(it?[At,pt]=ns(it,Te):[At,pt]=ns(at.current,Te),_!=null&&_.current){const me=document.getElementById("spinner");if(Te in _.current){for(let Oe in _.current[Te])Ae(et=>et.filter(Ge=>Ge!==Te)),Se.current.remove(_.current[Te][Oe]);const de=fe.filter(Oe=>Oe!==Te);st.set("neuronsText",JSON.stringify(de)),delete _.current[Te]}else{if(_.current[Te]=[],Ae(de=>[...de,Te]),st.set("neuronsText",JSON.stringify([...fe,Te])),!(Te in ee.current)){m(et=>[...et,Te]),oe.current=[...oe.current,Te];const de=JSON.stringify(oe.current);st.set("neuronsChecked",de);let Oe=_i(rr,Te);if(me&&(me.style.display="block"),!ee.current[Te]){let et=Oe.color;Oe.path&&et&&vi(Oe.path,6,Te,et,function(){et&&pa(Te,et),me&&(me.style.display="none")})}}Ti(pt,Te)}lt.search=st.toString(),window.history.replaceState({},"",lt)}},fr=Te=>{ee.current[Te]&&(Se.current.remove(ee.current[Te]),ee.current[Te]=null,delete ee.current[Te]);const Ne=Se.current.getObjectByName(`swcPointGroup${Te}`);Ne&&Se.current.remove(Ne)},li=Te=>Te.map(Ne=>({value:Ne.name+" "+Ne.fullname,title:S.createElement(Wi,{placement:"right",title:Ne.fullname},S.createElement("div",{style:{whiteSpace:"nowrap",display:"flex",alignItems:"center",lineHeight:"2.4"}},Ne.name," ",Ne.fullname)),children:Ne.children?li(Ne.children):void 0})),rn=Te=>{Se.current.remove(Lv),Se.current.remove(Lu),i.current[Te]&&(Se.current.remove(i.current[Te].contentobj),i.current[Te].contentobj.traverse(function(Ne){Ne.type=="Mesh"&&(Ne.geometry.dispose(),Ne.geometry=null)}),i.current[Te].contentmaterial.dispose(),i.current[Te].contentmaterial=null,i.current[Te]=null,delete i.current[Te])},bt=(Te,Ne,it,lt,st)=>{i.current[lt]?(Se.current.add(i.current[lt].obj),st&&st()):fetch(Te).then(At=>At.json()).then(At=>{var pt=new Qc,me=new UD({color:it}),de=!1;At.line.length>1e4&&(de=!0);let Oe=1;for(let Ge=0;Ge<At.line.length;Ge++)At.line[Ge].layer>Oe&&(Oe=At.line[Ge].layer);Oe++;for(let Ge=0;Ge<At.line.length;Ge++){let ct=(Oe-At.line[Ge].layer)*20/Oe,Bt=0,$t=[];for(let gn=At.line[Ge].start;gn<=At.line[Ge].end;gn++){let or=At.position[gn].x,Lr=At.position[gn].y,pn=At.position[gn].z;Bt++,$t.push(new Ie(or,Lr,pn))}let hn=new SA($t);Bt=de?Math.ceil(Bt/5):Bt;const Tt=new pI,gt=new er(new kD(hn,Bt,ct,Ne,!1),me);gt.scale.set(1,1,1),Tt.addLevel(gt,0);const ir=80,Hn=[$t[0]];for(let gn=1;gn<$t.length;gn++){const or=Hn[Hn.length-1],Lr=$t[gn];(or.distanceTo(Lr)>ir||gn===$t.length-1)&&Hn.push(Lr)}const Kn=new wa(new Ni().setFromPoints(Hn),new eu({color:it}));Kn.scale.set(1,1,1),Tt.addLevel(Kn,10),Tt.name=lt,Tt.myMeshType="Vessel",Tt.autoUpdate=!1,pt.add(Tt)}pt.scale.set(ji.current*.1,ji.current*.1,ji.current*.1),pt.translateX(yo.current),pt.translateY(Wa.current),pt.translateZ(oo.current),pt.name=lt,pt.myMeshType="Vessel",Se.current.add(pt);let et={contentobj:pt,contentmaterial:me};i.current[lt]=et,st&&st()})},ln=Te=>{Te=Te.replace("#","");const Ne=parseInt(Te.slice(0,2),16),it=parseInt(Te.slice(2,4),16),lt=parseInt(Te.slice(4,6),16),st=Ne/255,At=it/255,pt=lt/255;return new Ie(st,At,pt)},Ut=(Te,Ne,it,lt)=>{fetch(Te).then(st=>st.json()).then(st=>{let At=new td,pt=new Ni,me=[];for(let Oe=0;Oe<st.position.length;Oe++){let et=st.position[Oe].split(","),Ge=et[0],ct=et[1],Bt=et[2];me.push(Ge*ji.current*.099,ct*ji.current*.099,Bt*ji.current*.099)}pt.setAttribute("position",new sa(me,3)),ln(Ne);let de=new PD({size:he.current/100,color:new Cr(Ne)});At=new td(pt,de),At.translateX(yo.current),At.translateY(Wa.current),At.translateZ(oo.current-.45),At.name=it,ee.current[it]=At,Se.current.add(At)}),lt&<()},zn=Te=>{xt.current=!0;let Ne=new URL(window.location.href),it=new URLSearchParams(Ne.search);it.set("neuronsProjects",JSON.stringify(Te)),Ne.search=it.toString(),window.history.replaceState({},"",Ne),Te!=""?Y(Te):(Y(Te),Z(Ve.current))},Yn=Ir(zn,50),kr=Te=>{xt.current=!0;let Ne=new URL(window.location.href),it=new URLSearchParams(Ne.search);it.set("neuronsSomaLocates",Te?JSON.stringify(Te):""),Ne.search=it.toString(),window.history.replaceState({},"",Ne),Te!=""?ie(Te):(ie(Te),Z(Ve.current))},ii=Ir(kr,50),yi=()=>{let Te=[oa.current,Ua.current,ue.current];for(let st of Te)for(let At in st)At!="Brain"&&Ea(At,!0);Ae([]),Object.keys(ee.current).forEach(st=>{for(let At in _==null?void 0:_.current[st])Se.current.remove(_==null?void 0:_.current[st][At]);fr(st)}),Object.keys(i.current).forEach(st=>{rn(st)}),m([]),_&&(_.current={}),oe.current=[];let Ne=new URL(window.location.href),it=new URLSearchParams(Ne.search);const lt=JSON.stringify(oe.current);s==="fbx"?it.set("regionsChecked",lt):s==="vessel"?it.set("vesselsChecked",lt):s==="swc"&&(it.set("neuronsChecked",lt),it.set("neuronsText",lt)),Ne.search=it.toString(),window.history.replaceState({},"",Ne)},Zr=(Te,Ne)=>{let it=0;for(const lt of Te.toLowerCase())if(lt===Ne[it]&&(it++,it===Ne.length))return!0;return!1},ai=Te=>{if(Te){const Ne=Te.toLowerCase(),it=Ke.current.map(lt=>{const st=lt.name&<.name.toLowerCase()===Ne,At=lt.fullname&&Zr(lt.fullname,Ne);return{...lt,matchPriority:st?1:At?2:3}}).filter(lt=>lt.matchPriority<3).sort((lt,st)=>lt.matchPriority-st.matchPriority).map(lt=>({value:`${lt.name} ${lt.fullname}`,label:`${lt.name} ${lt.fullname}`}));Pe(it)}else Pe([])};S.useEffect(()=>{xt.current&&(Q?De.current&&De.current.focus():ot.current&&ot.current.focus())},[Q]),S.useEffect(()=>{xt.current&&(K?Ye.current&&Ye.current.focus():qe.current&&qe.current.focus())},[K]);const _i=(Te,Ne)=>{let it=null,lt=null;for(let st=0;st<Te.length;st++)if(Te[st].name==Ne)return it=Te[st].path,lt=Te[st].color,{path:it,color:lt};return{path:it,color:lt}},Mn={emptyText:S.createElement(Uv,{description:S.createElement("div",{style:{color:"#ccc"}},"Neurons that meet the filter criteria entered in the input boxes above will be displayed here.")})},Jn={selectedRowKeys:v,onSelectAll:(Te,Ne,it)=>{Qo(Ne,it,Te,!0)},onSelect:(Te,Ne,it)=>{Qo(Te,it,Ne,!1)},getCheckboxProps:Te=>({name:Te.name})},on=Te=>{let Ne=new URL(window.location.href),it=new URLSearchParams(Ne.search);const lt=JSON.stringify(Te);it.set("neuronsFilterInfo",lt),Ne.search=it.toString(),window.history.replaceState({},"",Ne),Ze(Te)},_r=Te=>{Nt(Te)};return S.createElement("div",{ref:l,style:{transition:"all ease-in 0.5s"}},s==="swc"?S.createElement(S.Fragment,null,Q?S.createElement(hA,{ref:De,style:{width:"100%",marginBottom:8},options:Be,placeholder:h("5000.5040")||"Input the region that soma locates",onSearch:ai,onChange:ii,value:Q}):S.createElement(WE,{ref:ot,showSearch:!0,style:{width:"100%",marginBottom:8},value:Q,dropdownStyle:{maxHeight:400,overflow:"hidden"},placeholder:h("5000.5040")||"Input the region that soma locates",allowClear:!0,treeDefaultExpandAll:!1,onChange:kr,onSearch:kr,treeData:li(r)}),K?S.createElement(hA,{ref:Ye,style:{width:"100%",marginBottom:8},options:Be,placeholder:h("5000.5041")||"Input the region that neuron projects",onSearch:ai,onChange:Yn,value:K}):S.createElement(WE,{showSearch:!0,ref:qe,style:{width:"100%"},value:K,dropdownStyle:{maxHeight:400,overflow:"hidden",marginBottom:8},placeholder:h("5000.5041")||"Input the region that neuron projects",allowClear:!0,treeDefaultExpandAll:!1,onChange:zn,onSearch:zn,treeData:li(r)}),z&&S.createElement(S.Fragment,null,S.createElement(WE,{treeData:ht,value:yt,onChange:on,treeCheckable:!0,placeholder:"Filter by data information",style:{width:"100%",marginTop:8}}),S.createElement(ls,{style:{marginTop:"5px"}},S.createElement(lb,{onChange:Te=>{gr(Te.target.checked)}},h("7000.7025")||"只展示可用神经元"),S.createElement(ls,{style:{fontStyle:"italic",marginTop:"5px"}},h("7000.7026")||"点击Color按钮,修改神经元颜色;点击Ana.按钮,显示神经元投射路径分析结果;点击Path按钮,在主界面显示神经元经过的脑结构;Src按钮展示了神经元数据的来源"))),S.createElement("div",null,S.createElement($o,{className:"Echart",open:vt,onOk:()=>{Me(!1)},onCancel:()=>{Me(!1)},width:"auto",footer:null},S.createElement(hg,{activeKey:Ct,onChange:_r},S.createElement(eH,{tab:h("5000.7009")||"神经元末梢分布",key:"1"},mn&&S.createElement(zi,null,"Isocortex"),S.createElement(ec,{ref:Dt,className:"Isocortex",Name:"Isocortex",t:h,data_change:Ot,data_c:at.current,col:["RSPv_","FRP_","MOp_","MOs_","SSp_","SSp-n_","SSp-bfd_","SSp-ll_","SSp-m_","SSp-ul_","SSp-tr_","SSp-un_","SSs_","GU_","VISC_","AUDd_","AUDp_","AUDpo_","AUDv_","VISal_","VISam_","VISl_","VISp_","VISpl_","VISpm_","VISli_","VISpor_","ACAd_","ACAv_","PL_","ILA_","ORB_","AId_","AIp_","AIv_","RSPagl_","RSPd_","PTLp_","TEa_","PERI_","ECT_"],row:["1","2/3","5","6a","6b"]}),qt&&S.createElement(zi,null,"HPF"),S.createElement(ec,{ref:Or[0],className:"HPF",Name:"HPF",t:h,data_change:Ot,data_c:at.current,col:["CA1_","CA1_dd","CA1_d","CA1_i","CA1_v","CA1_vv","CA2_dd","CA2_d","CA2_i","CA2_v","CA2_vv","CA3_dd","CA3_d","CA3_i","CA3_v","CA3_vv"],row:["so","sp","slu","sr","slm"]}),S.createElement(ec,{ref:Or[1],className:"HPF",Name:"HPF",t:h,data_change:Ot,data_c:at.current,col:["DG_d","DG_i","DG_V"],row:["mo","sg","po"]}),S.createElement(ec,{ref:Or[2],className:"HPF",Name:"HPF",t:h,data_change:Ot,data_c:at.current,col:["SUBd_1","SUBv_1","SUBd_2","SUBv_2","SUBd_3","SUBv_3","SUBd_4","SUBv_4","SUBd_","SUBv_"],row:["sp","sr","m"]}),lr&&S.createElement(zi,null,"CNU"),S.createElement(ec,{ref:ar,className:"CNU",Name:"CNU",t:h,data_change:Ot,data_c:at.current,col:["CP_","ACBv_","ACBd_","FS_","OTisl_","OTislm_","OT1","OT2","OT3","LSc","LSr_","SF","SH","AAA","BA","CEAc","CEAm","IA","MEAad","MEAav","MEApd","MEApv","GPe","GPi","SI","MA","NDB","TRS","PALc","BSTse","BAC"],row:["_"]}),mt&&S.createElement(zi,null,"OLF"),S.createElement(ec,{ref:bn[0],className:"OLF",Name:"OLF",t:h,data_change:Ot,data_c:at.current,col:["MOB_","AOB_","AON_","TTv_","TTd_","DP_","PIR_","NLOT_","NLOT_","COAa_","COApm_","COApl_","PAA_","TR_"],row:["gr","mi","ipl","opl","gl"]}),S.createElement(ec,{ref:bn[1],className:"OLF",Name:"OLF",t:h,data_change:Ot,data_c:at.current,col:["MOB_","AOB_","AON_","TTv_","TTd_","DP_","PIR_","NLOT_","NLOT_","COAa_","COApm_","COApl_","PAA_","TR_"],row:["1","2","3","4","5","6a","2/3"]}),Gn&&S.createElement(zi,null,"TH"),S.createElement(ec,{ref:Lt,className:"TH",Name:"TH",t:h,data_change:Ot,data_c:at.current,col:["VAL","VM","VPL","VPLpc","VPM","VPMpc","PoT","SPFm","SPFp","SPA","PP","MGd","MGv","MGm","LGdsh","LGdco","LGdip","LP","PO","POL","SGN","Eth","REth","AV","AMd","AMv","AD","IAM","IAD","LD","IMD","MDc","MDl","MDm","SMT","PR","PVT","PT","RE","Xi","RH","CM","PCN","CL","PF","PIL","RT","IGL","IntG","LGvl","LGvm","SubG","MH","LH","PIN"],row:["_"]}),xr&&S.createElement(zi,null,"HY"),S.createElement(ec,{ref:Xt,className:"HY",Name:"HY",t:h,data_change:Ot,data_c:at.current,col:["SO","NC","PVHam","PVHmm","PVHpmm","PVHpml","PVHap","PVHmpd","PVHpv","PVa","PVi","ARH","ADP","AHA","AVP","DMHa","DMHp","DMHv","MEPO","MPO","OV","PD","PS","PSCH","PVp","PVpo","SBPV","SCH","SFO","VMPO","VLPO","AVPV","AHNa","AHNc","AHNd","AHNp","LM","MMme","MMl","MMm","MMp","MMd","SUMm","SUMl","TMd","TMv","MPNc","MPNl","MPNm","PMd","PMv","PVHdp","PVHf","PVHlp","PVHmpv","VMHa","VMHc","VMHdm","VMHvl","PH","LHA","LPO","PST","PSTN","RCH","PeF","STN","TU","A13","FF","ZIr","ZIc","ZId","ZIv","ME"],row:["_"]}),fn&&S.createElement(zi,null,"MB"),S.createElement(ec,{ref:zt,className:"MB",Name:"MB",t:h,data_change:Ot,data_c:at.current,col:["SCop","SCsg","SCzo","ICc","ICd","ICe","NB","SAG","PBG","MEV","SCO","SNr","VTA","RR","MRNm","MRNmg","MRNp","SCdg","SCdw","SCiw","SCig-a","SCig-b","SCig-c","PRC","INC","ND","Su3","PAGdm","PAGl","PAGvl","PAGdl","PAGvm","APN","MPT","NOT","NPC","OP","PPT","RPF","InCo","CUN","RN","III","MA3","EW","IV","PA4","VTN","AT","LT","DT","MT","SNl","SNc","PPN","IF","IPR","IPC","IPA","IPL","IPI","IPDM","IPDL","IPRL","RL","CLI","DR"],row:["_"]}),$n&&S.createElement(zi,null,"HB"),S.createElement(ec,{ref:Qt,className:"HB",Name:"HB",t:h,data_change:Ot,data_c:at.current,col:["NLLd","NLLh","NLLv","PSV","KF","PBlc","PBld","PBle","PBls","PBlv","PBme","PBmm","PBmv","POR","SOCm","SOCl","B","DTN","LTN","PDTg","PCG","PG","PRNc","PRNv","SG","SSN","SUT","TRN","V","P5","Acs5","PC5","I5","CSl","CSm","LC","LDT","NI","PRNr","RPO","SLC","SLD","AP","CNlam","CNspg","DCO","VCO","CU","GR","ECU","NTB","NTSce","NTSco","NTSge","NTSl","NTSm","SPVC","SPVI","SPVOcdm","SPVOmdmd","SPVOmdmv","SPVOrdm","SPVOvl","Pa5","z","VI","ACVI","VII","ACVII","EV","AMBd","AMBv","DMX","ECO","GRN","ICB","IO","LRNm","LRNp","ISN","LIN","IRN","MARN","MDRNd","MDRNv","PARN","PAS","PGRNd","PGRNl","NIS","NR","PRP","PMR","PPYd","PPYs","LAV","MV","SPIV","SUV","XII","x","y","RM","RPA","RO"],row:["_"]}),Tn&&S.createElement(zi,null,"CB"),S.createElement(ec,{ref:nr[0],className:"CB",Name:"CB",t:h,data_change:Ot,data_c:at.current,col:["LING_","LING_","CENT2_","CENT2_","CENT3_","CENT3_","CUL4/5_","CUL4/5_","DEC_","DEC_","FOTU_","FOTU_","PYR_","PYR_","UVU_","UVU_","NOD_","NOD_","SIM_","SIM_","ANcr1_","ANcr1_","ANcr2_","ANcr2_","PRM_","PRM_","COPY_","COPY_","PFL_","PFL_","FL_","FL_","IP","DN"],row:["gr","mo"]}),S.createElement(ec,{ref:nr[1],className:"CB",Name:"CB",t:h,data_change:Ot,data_c:at.current,col:["FN","IP","DN","VeCB"],row:["_"]})),S.createElement(eH,{tab:h("5000.7011")||"神经元投射模式",key:"2"},r?S.createElement(Cze,{data:en,fbxTreeDatas:r}):null),S.createElement(eH,{tab:h("5000.7012")||"投射长度分布",key:"3"},mn&&S.createElement(zi,null,"Isocortex"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["RSPv_","FRP_","MOp_","MOs_","SSp_","SSp-n_","SSp-bfd_","SSp-ll_","SSp-m_","SSp-ul_","SSp-tr_","SSp-un_","SSs_","GU_","VISC_","AUDd_","AUDp_","AUDpo_","AUDv_","VISal_","VISam_","VISl_","VISp_","VISpl_","VISpm_","VISli_","VISpor_","ACAd_","ACAv_","PL_","ILA_","ORB_","AId_","AIp_","AIv_","RSPagl_","RSPd_","PTLp_","TEa_","PERI_","ECT_"],row:["1","2/3","5","6a","6b"]}),qt&&S.createElement(zi,null,"HPF"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["CA1_d","CA1_i","CA1_v","CA1_","CA3_dd","CA3_d","CA3_i","CA3_v","CA3_vv","CA2_"],row:["so","sp","slu","sr","slm"]}),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["DG_d","DG_i","DG_V"],row:["mo","sg","po"]}),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["SUBd_1","SUBv_1","SUBd_2","SUBv_2","SUBd_3","SUBv_3","SUBd_4","SUBv_4","SUBd_","SUBv_"],row:["sp","sr","m"]}),lr&&S.createElement(zi,null,"CNU"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["CP_","ACBv_","ACBd_","FS_","OTisl_","OTislm_","OT1","OT2","OT3","LSc","LSr_","SF","SH","AAA","BA","CEAc","CEAm","IA","MEAad","MEAav","MEApd","MEApv","GPe","GPi","SI","MA","NDB","TRS","PALc","BSTse","BAC"],row:["_"]}),mt&&S.createElement(zi,null,"OLF"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["MOB_","AOB_","AON_","TTv_","TTd_","DP_","PIR_","NLOT_","NLOT_","COAa_","COApm_","COApl_","PAA_","TR_"],row:["gr","mi","ipl","opl","gl"]}),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["MOB_","AOB_","AON_","TTv_","TTd_","DP_","PIR_","NLOT_","NLOT_","COAa_","COApm_","COApl_","PAA_","TR_"],row:["1","2","3","4","5","6a","2/3"]}),Gn&&S.createElement(zi,null,"TH"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["VAL","VM","VPL","VPLpc","VPM","VPMpc","PoT","SPFm","SPFp","SPA","PP","MGd","MGv","MGm","LGdsh","LGdco","LGdip","LP","PO","POL","SGN","Eth","REth","AV","AMd","AMv","AD","IAM","IAD","LD","IMD","MDc","MDl","MDm","SMT","PR","PVT","PT","RE","Xi","RH","CM","PCN","CL","PF","PIL","RT","IGL","IntG","LGvl","LGvm","SubG","MH","LH","PIN"],row:["_"]}),xr&&S.createElement(zi,null,"HY"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["SO","NC","PVHam","PVHmm","PVHpmm","PVHpml","PVHap","PVHmpd","PVHpv","PVa","PVi","ARH","ADP","AHA","AVP","DMHa","DMHp","DMHv","MEPO","MPO","OV","PD","PS","PSCH","PVp","PVpo","SBPV","SCH","SFO","VMPO","VLPO","AVPV","AHNa","AHNc","AHNd","AHNp","LM","MMme","MMl","MMm","MMp","MMd","SUMm","SUMl","TMd","TMv","MPNc","MPNl","MPNm","PMd","PMv","PVHdp","PVHf","PVHlp","PVHmpv","VMHa","VMHc","VMHdm","VMHvl","PH","LHA","LPO","PST","PSTN","RCH","PeF","STN","TU","A13","FF","ZIr","ZIc","ZId","ZIv","ME"],row:["_"]}),fn&&S.createElement(zi,null,"MB"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["SCop","SCsg","SCzo","ICc","ICd","ICe","NB","SAG","PBG","MEV","SCO","SNr","VTA","RR","MRNm","MRNmg","MRNp","SCdg","SCdw","SCiw","SCig-a","SCig-b","SCig-c","PRC","INC","ND","Su3","PAGdm","PAGl","PAGvl","PAGdl","PAGvm","APN","MPT","NOT","NPC","OP","PPT","RPF","InCo","CUN","RN","III","MA3","EW","IV","PA4","VTN","AT","LT","DT","MT","SNl","SNc","PPN","IF","IPR","IPC","IPA","IPL","IPI","IPDM","IPDL","IPRL","RL","CLI","DR"],row:["_"]}),$n&&S.createElement(zi,null,"HB"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["NLLd","NLLh","NLLv","PSV","KF","PBlc","PBld","PBle","PBls","PBlv","PBme","PBmm","PBmv","POR","SOCm","SOCl","B","DTN","LTN","PDTg","PCG","PG","PRNc","PRNv","SG","SSN","SUT","TRN","V","P5","Acs5","PC5","I5","CSl","CSm","LC","LDT","NI","PRNr","RPO","SLC","SLD","AP","CNlam","CNspg","DCO","VCO","CU","GR","ECU","NTB","NTSce","NTSco","NTSge","NTSl","NTSm","SPVC","SPVI","SPVOcdm","SPVOmdmd","SPVOmdmv","SPVOrdm","SPVOvl","Pa5","z","VI","ACVI","VII","ACVII","EV","AMBd","AMBv","DMX","ECO","GRN","ICB","IO","LRNm","LRNp","ISN","LIN","IRN","MARN","MDRNd","MDRNv","PARN","PAS","PGRNd","PGRNl","NIS","NR","PRP","PMR","PPYd","PPYs","LAV","MV","SPIV","SUV","XII","x","y","RM","RPA","RO"],row:["_"]}),Tn&&S.createElement(zi,null,"CB"),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["LING_","LING_","CENT2_","CENT2_","CENT3_","CENT3_","CUL4/5_","CUL4/5_","DEC_","DEC_","FOTU_","FOTU_","PYR_","PYR_","UVU_","UVU_","NOD_","NOD_","SIM_","SIM_","ANcr1_","ANcr1_","ANcr2_","ANcr2_","PRM_","PRM_","COPY_","COPY_","PFL_","PFL_","FL_","FL_","IP","DN"],row:["gr","mo"]}),S.createElement(tc,{t:h,data_change:Ot,data_c:en,col:["FN","IP","DN","VeCB"],row:["_"]})))),S.createElement(F6,{className:"SwcTable",rowSelection:Jn,columns:Mi,dataSource:rr,locale:Mn}))):S.createElement(S.Fragment,null,S.createElement(wtn,{style:{marginBottom:8},placeholder:"Search",onChange:$a,onKeyPress:Te=>{Te.stopPropagation()}}),S.createElement(O_,{showLine:!0,onExpand:Za,defaultExpandParent:!0,expandedKeys:W,onCheck:Qo,checkable:!0,selectable:!1,treeData:rr,checkedKeys:v,checkStrictly:!0,autoExpandParent:X,style:{paddingLeft:"2px"}})))});let Rtn=new URL(window.location.href),Otn=new URLSearchParams(Rtn.search),BSe=Otn.get("brainContourOpacity");const Ltn=t=>{const{regionData:e}=t,[n,r]=S.useState(!1);return S.useEffect(()=>{let i=BSe?JSON.parse(BSe):.3;xy({filepath:e+"/data/FBX/outline.FBX",index:"Brain",color:"0xcccccc",opacity:i,offsetZ:0,R:1,callback:function(){r(!1)}})},[]),S.createElement("div",{id:"spinner",style:{position:"absolute",zIndex:999,left:0,top:0,width:"100%",height:"100%",display:`${n?"block":"none"}`,opacity:.7,backgroundColor:"#ffffff"}},S.createElement("div",{style:{position:"absolute",zIndex:999,left:"50%",top:"50%",fontWeight:"bold",textAlign:"center"}},S.createElement(gD,{spinning:!0,size:"large"}),S.createElement("br",null),"Loading....wait..."))};(function(t){if(t.TextEncoder&&t.TextDecoder)return!1;function e(r="utf-8"){if(r!=="utf-8")throw new RangeError(`Failed to construct 'TextEncoder': The encoding label provided ('${r}') is invalid.`)}Object.defineProperty(e.prototype,"encoding",{value:"utf-8"}),e.prototype.encode=function(r,i={stream:!1}){if(i.stream)throw new Error("Failed to encode: the 'stream' option is unsupported.");let a=0;const o=r.length;let s=0,l=Math.max(32,o+(o>>1)+7),u=new Uint8Array(l>>3<<3);for(;a<o;){let d=r.charCodeAt(a++);if(d>=55296&&d<=56319){if(a<o){const f=r.charCodeAt(a);(f&64512)===56320&&(++a,d=((d&1023)<<10)+(f&1023)+65536)}if(d>=55296&&d<=56319)continue}if(s+4>u.length){l+=8,l*=1+a/r.length*2,l=l>>3<<3;const f=new Uint8Array(l);f.set(u),u=f}if(d&4294967168)if(!(d&4294965248))u[s++]=d>>6&31|192;else if(!(d&4294901760))u[s++]=d>>12&15|224,u[s++]=d>>6&63|128;else if(!(d&4292870144))u[s++]=d>>18&7|240,u[s++]=d>>12&63|128,u[s++]=d>>6&63|128;else continue;else{u[s++]=d;continue}u[s++]=d&63|128}return u.slice(0,s)};function n(r="utf-8",i={fatal:!1}){if(r!=="utf-8")throw new RangeError(`Failed to construct 'TextDecoder': The encoding label provided ('${r}') is invalid.`);if(i.fatal)throw new Error("Failed to construct 'TextDecoder': the 'fatal' option is unsupported.")}Object.defineProperty(n.prototype,"encoding",{value:"utf-8"}),Object.defineProperty(n.prototype,"fatal",{value:!1}),Object.defineProperty(n.prototype,"ignoreBOM",{value:!1}),n.prototype.decode=function(r,i={stream:!1}){if(i.stream)throw new Error("Failed to decode: the 'stream' option is unsupported.");const a=new Uint8Array(r);let o=0;const s=a.length,l=[];for(;o<s;){const u=a[o++];if(u===0)break;if(!(u&128))l.push(u);else if((u&224)===192){const d=a[o++]&63;l.push((u&31)<<6|d)}else if((u&240)===224){const d=a[o++]&63,f=a[o++]&63;l.push((u&31)<<12|d<<6|f)}else if((u&248)===240){const d=a[o++]&63,f=a[o++]&63,p=a[o++]&63;let h=(u&7)<<18|d<<12|f<<6|p;h>65535&&(h-=65536,l.push(h>>>10&1023|55296),h=56320|h&1023),l.push(h)}}return String.fromCharCode.apply(null,l)},t.TextEncoder=e,t.TextDecoder=n})(typeof window<"u"?window:typeof self<"u"?self:globalThis);function $Se(t,e="utf8"){return new TextDecoder(e).decode(t)}const Ntn=new TextEncoder;function Mtn(t){return Ntn.encode(t)}const Ptn=1024*8,Dtn=(()=>{const t=new Uint8Array(4),e=new Uint32Array(t.buffer);return!((e[0]=1)&t[0])})(),rH={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array};class Ak{constructor(e=Ptn,n={}){let r=!1;typeof e=="number"?e=new ArrayBuffer(e):(r=!0,this.lastWrittenByte=e.byteLength);const i=n.offset?n.offset>>>0:0,a=e.byteLength-i;let o=i;(ArrayBuffer.isView(e)||e instanceof Ak)&&(e.byteLength!==e.buffer.byteLength&&(o=e.byteOffset+i),e=e.buffer),r?this.lastWrittenByte=a:this.lastWrittenByte=0,this.buffer=e,this.length=a,this.byteLength=a,this.byteOffset=o,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,o,a),this._mark=0,this._marks=[]}available(e=1){return this.offset+e<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(e=1){return this.offset+=e,this}back(e=1){return this.offset-=e,this}seek(e){return this.offset=e,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){const e=this._marks.pop();if(e===void 0)throw new Error("Mark stack empty");return this.seek(e),this}rewind(){return this.offset=0,this}ensureAvailable(e=1){if(!this.available(e)){const r=(this.offset+e)*2,i=new Uint8Array(r);i.set(new Uint8Array(this.buffer)),this.buffer=i.buffer,this.length=this.byteLength=r,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(e=1){return this.readArray(e,"uint8")}readArray(e,n){const r=rH[n].BYTES_PER_ELEMENT*e,i=this.byteOffset+this.offset,a=this.buffer.slice(i,i+r);if(this.littleEndian===Dtn&&n!=="uint8"&&n!=="int8"){const s=new Uint8Array(this.buffer.slice(i,i+r));s.reverse();const l=new rH[n](s.buffer);return this.offset+=r,l.reverse(),l}const o=new rH[n](a);return this.offset+=r,o}readInt16(){const e=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}readUint16(){const e=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,e}readInt32(){const e=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}readUint32(){const e=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat32(){const e=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat64(){const e=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}readBigInt64(){const e=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,e}readBigUint64(){const e=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,e}readChar(){return String.fromCharCode(this.readInt8())}readChars(e=1){let n="";for(let r=0;r<e;r++)n+=this.readChar();return n}readUtf8(e=1){return $Se(this.readBytes(e))}decodeText(e=1,n="utf-8"){return $Se(this.readBytes(e),n)}writeBoolean(e){return this.writeUint8(e?255:0),this}writeInt8(e){return this.ensureAvailable(1),this._data.setInt8(this.offset++,e),this._updateLastWrittenByte(),this}writeUint8(e){return this.ensureAvailable(1),this._data.setUint8(this.offset++,e),this._updateLastWrittenByte(),this}writeByte(e){return this.writeUint8(e)}writeBytes(e){this.ensureAvailable(e.length);for(let n=0;n<e.length;n++)this._data.setUint8(this.offset++,e[n]);return this._updateLastWrittenByte(),this}writeInt16(e){return this.ensureAvailable(2),this._data.setInt16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(e){return this.ensureAvailable(2),this._data.setUint16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(e){return this.ensureAvailable(4),this._data.setInt32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(e){return this.ensureAvailable(4),this._data.setUint32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(e){return this.ensureAvailable(4),this._data.setFloat32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(e){return this.ensureAvailable(8),this._data.setFloat64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigInt64(e){return this.ensureAvailable(8),this._data.setBigInt64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeBigUint64(e){return this.ensureAvailable(8),this._data.setBigUint64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(e){return this.writeUint8(e.charCodeAt(0))}writeChars(e){for(let n=0;n<e.length;n++)this.writeUint8(e.charCodeAt(n));return this}writeUtf8(e){return this.writeBytes(Mtn(e))}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this.lastWrittenByte)}_updateLastWrittenByte(){this.offset>this.lastWrittenByte&&(this.lastWrittenByte=this.offset)}}function ktn(t){if(t.compression!==1)throw new Error("missing mandatory StripByteCounts field in compressed image");const e=t.rowsPerStrip*t.width*t.samplesPerPixel*(t.bitsPerSample/8);return new Array(t.stripOffsets.length).fill(e)}function Utn(t,e,n){let r=0;for(;r<t.length;){for(let i=n;i<e*n;i+=n)for(let a=0;a<n;a++)t[r+i+a]=t[r+i+a]+t[r+i-(n-a)]&255;r+=e*n}}function Ftn(t,e,n){let r=0;for(;r<t.length;){for(let i=n;i<e*n;i+=n)for(let a=0;a<n;a++)t[r+i+a]=t[r+i+a]+t[r+i-(n-a)]&65535;r+=e*n}}const WQ={33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",34864:"SensitivityType",34865:"StandardOutputSensitivity",34866:"RecommendedExposureIndex",34867:"ISOSpeed",34868:"ISOSpeedLatitudeyyy",34869:"ISOSpeedLatitudezzz",36864:"ExifVersion",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBiasValue",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",37396:"SubjectArea",37500:"MakerNote",37510:"UserComment",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",40964:"RelatedSoundFile",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRatio",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",42016:"ImageUniqueID",42032:"CameraOwnerName",42033:"BodySerialNumber",42034:"LensSpecification",42035:"LensMake",42036:"LensModel",42037:"LensSerialNumber",42240:"Gamma"},xze={};for(const t in WQ)xze[WQ[t]]=Number(t);const Btn=Object.freeze(Object.defineProperty({__proto__:null,tagsById:WQ,tagsByName:xze},Symbol.toStringTag,{value:"Module"})),XQ={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential",31:"GPSHPositioningError"},_ze={};for(const t in XQ)_ze[XQ[t]]=Number(t);const $tn=Object.freeze(Object.defineProperty({__proto__:null,tagsById:XQ,tagsByName:_ze},Symbol.toStringTag,{value:"Module"})),ZQ={254:"NewSubfileType",255:"SubfileType",256:"ImageWidth",257:"ImageLength",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",263:"Threshholding",264:"CellWidth",265:"CellLength",266:"FillOrder",270:"ImageDescription",271:"Make",272:"Model",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",280:"MinSampleValue",281:"MaxSampleValue",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",288:"FreeOffsets",289:"FreeByteCounts",290:"GrayResponseUnit",291:"GrayResponseCurve",296:"ResolutionUnit",305:"Software",306:"DateTime",315:"Artist",316:"HostComputer",320:"ColorMap",338:"ExtraSamples",33432:"Copyright",269:"DocumentName",285:"PageName",286:"XPosition",287:"YPosition",292:"T4Options",293:"T6Options",297:"PageNumber",301:"TransferFunction",317:"Predictor",318:"WhitePoint",319:"PrimaryChromaticities",321:"HalftoneHints",322:"TileWidth",323:"TileLength",324:"TileOffsets",325:"TileByteCounts",326:"BadFaxLines",327:"CleanFaxData",328:"ConsecutiveBadFaxLines",330:"SubIFDs",332:"InkSet",333:"InkNames",334:"NumberOfInks",336:"DotRange",337:"TargetPrinter",339:"SampleFormat",340:"SMinSampleValue",341:"SMaxSampleValue",342:"TransferRange",343:"ClipPath",344:"XClipPathUnits",345:"YClipPathUnits",346:"Indexed",347:"JPEGTables",351:"OPIProxy",400:"GlobalParametersIFD",401:"ProfileType",402:"FaxProfile",403:"CodingMethods",404:"VersionYear",405:"ModeNumber",433:"Decode",434:"DefaultImageColor",512:"JPEGProc",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",515:"JPEGRestartInterval",517:"JPEGLosslessPredictors",518:"JPEGPointTransforms",519:"JPEGQTables",520:"JPEGDCTables",521:"JPEGACTables",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite",559:"StripRowCounts",700:"XMP",32781:"ImageID",34732:"ImageLayer",32932:"WangAnnotatio",33445:"MDFileTag",33446:"MDScalePixel",33447:"MDColorTable",33448:"MDLabName",33449:"MDSampleInfo",33450:"MDPrepDate",33451:"MDPrepTime",33452:"MDFileUnits",33550:"ModelPixelScaleTag",33723:"IPTC",33918:"INGRPacketDataTag",33919:"INGRFlagRegisters",33920:"IrasBTransformationMatrix",33922:"ModelTiepointTag",34264:"ModelTransformationTag",34377:"Photoshop",34665:"ExifIFD",34675:"ICCProfile",34735:"GeoKeyDirectoryTag",34736:"GeoDoubleParamsTag",34737:"GeoAsciiParamsTag",34853:"GPSIFD",34908:"HylaFAXFaxRecvParams",34909:"HylaFAXFaxSubAddress",34910:"HylaFAXFaxRecvTime",37724:"ImageSourceData",40965:"InteroperabilityIFD",42112:"GDAL_METADATA",42113:"GDAL_NODATA",50215:"OceScanjobDescription",50216:"OceApplicationSelector",50217:"OceIdentificationNumber",50218:"OceImageLogicCharacteristics",50706:"DNGVersion",50707:"DNGBackwardVersion",50708:"UniqueCameraModel",50709:"LocalizedCameraModel",50710:"CFAPlaneColor",50711:"CFALayout",50712:"LinearizationTable",50713:"BlackLevelRepeatDim",50714:"BlackLevel",50715:"BlackLevelDeltaH",50716:"BlackLevelDeltaV",50717:"WhiteLevel",50718:"DefaultScale",50719:"DefaultCropOrigin",50720:"DefaultCropSize",50721:"ColorMatrix1",50722:"ColorMatrix2",50723:"CameraCalibration1",50724:"CameraCalibration2",50725:"ReductionMatrix1",50726:"ReductionMatrix2",50727:"AnalogBalance",50728:"AsShotNeutral",50729:"AsShotWhiteXY",50730:"BaselineExposure",50731:"BaselineNoise",50732:"BaselineSharpness",50733:"BayerGreenSplit",50734:"LinearResponseLimit",50735:"CameraSerialNumber",50736:"LensInfo",50737:"ChromaBlurRadius",50738:"AntiAliasStrength",50740:"DNGPrivateData",50741:"MakerNoteSafety",50778:"CalibrationIlluminant1",50779:"CalibrationIlluminant2",50780:"BestQualityScale",50784:"AliasLayerMetadata"},wze={};for(const t in ZQ)wze[ZQ[t]]=Number(t);const Vtn=Object.freeze(Object.defineProperty({__proto__:null,tagsById:ZQ,tagsByName:wze},Symbol.toStringTag,{value:"Module"})),VSe={standard:Vtn,exif:Btn,gps:$tn};class Tze{constructor(e){if(!e)throw new Error("missing kind");this.data=new Uint8Array,this.fields=new Map,this.kind=e,this._hasMap=!1,this._map={}}get(e){if(typeof e=="number")return this.fields.get(e);if(typeof e=="string")return this.fields.get(VSe[this.kind].tagsByName[e]);throw new Error("expected a number or string")}get map(){if(!this._hasMap){const e=VSe[this.kind].tagsById;for(const n of this.fields.keys())e[n]&&(this._map[e[n]]=this.fields.get(n));this._hasMap=!0}return this._map}}const Ize=new Map([[1,[1,zSe]],[2,[1,Gtn]],[3,[2,jtn]],[4,[4,Wtn]],[5,[8,Xtn]],[6,[1,Ztn]],[7,[1,zSe]],[8,[2,qtn]],[9,[4,Ytn]],[10,[8,Ktn]],[11,[4,Jtn]],[12,[8,Qtn]]]);function ztn(t,e){const n=Ize.get(t);if(!n)throw new Error(`type not found: ${t}`);return n[0]*e}function Htn(t,e,n){const r=Ize.get(e);if(!r)throw new Error(`type not found: ${e}`);return r[1](t,n)}function zSe(t,e){if(e===1)return t.readUint8();const n=new Uint8Array(e);for(let r=0;r<e;r++)n[r]=t.readUint8();return n}function Gtn(t,e){const n=[];let r="";for(let i=0;i<e;i++){const a=String.fromCharCode(t.readUint8());a==="\0"?(n.push(r),r=""):r+=a}return n.length===1?n[0]:n}function jtn(t,e){if(e===1)return t.readUint16();const n=new Uint16Array(e);for(let r=0;r<e;r++)n[r]=t.readUint16();return n}function Wtn(t,e){if(e===1)return t.readUint32();const n=new Uint32Array(e);for(let r=0;r<e;r++)n[r]=t.readUint32();return n}function Xtn(t,e){if(e===1)return t.readUint32()/t.readUint32();const n=new Array(e);for(let r=0;r<e;r++)n[r]=t.readUint32()/t.readUint32();return n}function Ztn(t,e){if(e===1)return t.readInt8();const n=new Int8Array(e);for(let r=0;r<e;r++)n[r]=t.readInt8();return n}function qtn(t,e){if(e===1)return t.readInt16();const n=new Int16Array(e);for(let r=0;r<e;r++)n[r]=t.readInt16();return n}function Ytn(t,e){if(e===1)return t.readInt32();const n=new Int32Array(e);for(let r=0;r<e;r++)n[r]=t.readInt32();return n}function Ktn(t,e){if(e===1)return t.readInt32()/t.readInt32();const n=new Array(e);for(let r=0;r<e;r++)n[r]=t.readInt32()/t.readInt32();return n}function Jtn(t,e){if(e===1)return t.readFloat32();const n=new Float32Array(e);for(let r=0;r<e;r++)n[r]=t.readFloat32();return n}function Qtn(t,e){if(e===1)return t.readFloat64();const n=new Float64Array(e);for(let r=0;r<e;r++)n[r]=t.readFloat64();return n}const enn=256,HSe=257,GSe=258,jSe=9;let PE=[];function tnn(){if(PE.length===0){for(let e=0;e<256;e++)PE.push([e]);const t=[];for(let e=256;e<4096;e++)PE.push(t)}}const nnn=[511,1023,2047,4095],rnn=[0,0,0,0,0,0,0,0,0,511,1023,2047,4095];class inn{constructor(e){this.nextData=0,this.nextBits=0,this.bytePointer=0,this.tableLength=GSe,this.currentBitLength=jSe,this.stripArray=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),this.outData=new Ak(e.byteLength),this.initializeTable()}decode(){let e=0,n=0;for(;(e=this.getNextCode())!==HSe;)if(e===enn){if(this.initializeTable(),e=this.getNextCode(),e===HSe)break;this.writeString(this.stringFromCode(e)),n=e}else if(this.isInTable(e))this.writeString(this.stringFromCode(e)),this.addStringToTable(this.stringFromCode(n).concat(this.stringFromCode(e)[0])),n=e;else{const i=this.stringFromCode(n).concat(this.stringFromCode(n)[0]);this.writeString(i),this.addStringToTable(i),n=e}const r=this.outData.toArray();return new DataView(r.buffer,r.byteOffset,r.byteLength)}initializeTable(){tnn(),this.tableLength=GSe,this.currentBitLength=jSe}writeString(e){this.outData.writeBytes(e)}stringFromCode(e){return PE[e]}isInTable(e){return e<this.tableLength}addStringToTable(e){if(PE[this.tableLength++]=e,PE.length>4096)throw PE=[],new Error("LZW decoding error. Please open an issue at https://github.com/image-js/tiff/issues/new/choose (include a test image).");this.tableLength===rnn[this.currentBitLength]&&this.currentBitLength++}getNextCode(){this.nextData=this.nextData<<8|this.stripArray[this.bytePointer++]&255,this.nextBits+=8,this.nextBits<this.currentBitLength&&(this.nextData=this.nextData<<8|this.stripArray[this.bytePointer++]&255,this.nextBits+=8);const e=this.nextData>>this.nextBits-this.currentBitLength&nnn[this.currentBitLength-9];return this.nextBits-=this.currentBitLength,this.bytePointer>this.stripArray.length?257:e}}function ann(t){return new inn(t).decode()}const onn=/^(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})$/;class WSe extends Tze{constructor(){super("standard")}get size(){return this.width*this.height}get width(){return this.imageWidth}get height(){return this.imageLength}get components(){return this.samplesPerPixel}get date(){const e=new Date,n=onn.exec(this.dateTime);if(n===null)throw new Error(`invalid dateTime: ${this.dateTime}`);return e.setFullYear(Number(n[1]),Number(n[2])-1,Number(n[3])),e.setHours(Number(n[4]),Number(n[5]),Number(n[6])),e}get newSubfileType(){return this.get("NewSubfileType")}get imageWidth(){return this.get("ImageWidth")}get imageLength(){return this.get("ImageLength")}get bitsPerSample(){const e=this.get("BitsPerSample");return e&&typeof e!="number"?e[0]:e}get alpha(){const e=this.extraSamples;return e?e[0]!==0:!1}get associatedAlpha(){const e=this.extraSamples;return e?e[0]===1:!1}get extraSamples(){return aL(this.get("ExtraSamples"))}get compression(){return this.get("Compression")||1}get type(){return this.get("PhotometricInterpretation")}get fillOrder(){return this.get("FillOrder")||1}get documentName(){return this.get("DocumentName")}get imageDescription(){return this.get("ImageDescription")}get stripOffsets(){return aL(this.get("StripOffsets"))}get orientation(){return this.get("Orientation")}get samplesPerPixel(){return this.get("SamplesPerPixel")||1}get rowsPerStrip(){return this.get("RowsPerStrip")}get stripByteCounts(){return aL(this.get("StripByteCounts"))}get minSampleValue(){return this.get("MinSampleValue")||0}get maxSampleValue(){return this.get("MaxSampleValue")||2**this.bitsPerSample-1}get xResolution(){return this.get("XResolution")}get yResolution(){return this.get("YResolution")}get planarConfiguration(){return this.get("PlanarConfiguration")||1}get resolutionUnit(){return this.get("ResolutionUnit")||2}get dateTime(){return this.get("DateTime")}get predictor(){return this.get("Predictor")||1}get sampleFormat(){return aL(this.get("SampleFormat")||1)[0]}get sMinSampleValue(){return this.get("SMinSampleValue")||this.minSampleValue}get sMaxSampleValue(){return this.get("SMaxSampleValue")||this.maxSampleValue}get palette(){const e=2**this.bitsPerSample,n=this.get("ColorMap");if(!n)return;if(n.length!==3*e)throw new Error(`ColorMap size must be ${e}`);const r=[];for(let i=0;i<e;i++)r.push([n[i],n[i+e],n[i+2*e]]);return r}}function aL(t){return typeof t=="number"?[t]:t}/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */const snn=4,XSe=0,ZSe=1,lnn=2;function Kw(t){let e=t.length;for(;--e>=0;)t[e]=0}const cnn=0,Aze=1,unn=2,dnn=3,fnn=258,Wae=29,f8=256,QA=f8+1+Wae,c_=30,Xae=19,Rze=2*QA+1,DE=15,iH=16,pnn=7,Zae=256,Oze=16,Lze=17,Nze=18,qQ=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),$N=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),hnn=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),Mze=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),gnn=512,Dv=new Array((QA+2)*2);Kw(Dv);const PI=new Array(c_*2);Kw(PI);const e6=new Array(gnn);Kw(e6);const t6=new Array(fnn-dnn+1);Kw(t6);const qae=new Array(Wae);Kw(qae);const D7=new Array(c_);Kw(D7);function aH(t,e,n,r,i){this.static_tree=t,this.extra_bits=e,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=t&&t.length}let Pze,Dze,kze;function oH(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}const Uze=t=>t<256?e6[t]:e6[256+(t>>>7)],n6=(t,e)=>{t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255},Np=(t,e,n)=>{t.bi_valid>iH-n?(t.bi_buf|=e<<t.bi_valid&65535,n6(t,t.bi_buf),t.bi_buf=e>>iH-t.bi_valid,t.bi_valid+=n-iH):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=n)},w0=(t,e,n)=>{Np(t,n[e*2],n[e*2+1])},Fze=(t,e)=>{let n=0;do n|=t&1,t>>>=1,n<<=1;while(--e>0);return n>>>1},mnn=t=>{t.bi_valid===16?(n6(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},vnn=(t,e)=>{const n=e.dyn_tree,r=e.max_code,i=e.stat_desc.static_tree,a=e.stat_desc.has_stree,o=e.stat_desc.extra_bits,s=e.stat_desc.extra_base,l=e.stat_desc.max_length;let u,d,f,p,h,g,y=0;for(p=0;p<=DE;p++)t.bl_count[p]=0;for(n[t.heap[t.heap_max]*2+1]=0,u=t.heap_max+1;u<Rze;u++)d=t.heap[u],p=n[n[d*2+1]*2+1]+1,p>l&&(p=l,y++),n[d*2+1]=p,!(d>r)&&(t.bl_count[p]++,h=0,d>=s&&(h=o[d-s]),g=n[d*2],t.opt_len+=g*(p+h),a&&(t.static_len+=g*(i[d*2+1]+h)));if(y!==0){do{for(p=l-1;t.bl_count[p]===0;)p--;t.bl_count[p]--,t.bl_count[p+1]+=2,t.bl_count[l]--,y-=2}while(y>0);for(p=l;p!==0;p--)for(d=t.bl_count[p];d!==0;)f=t.heap[--u],!(f>r)&&(n[f*2+1]!==p&&(t.opt_len+=(p-n[f*2+1])*n[f*2],n[f*2+1]=p),d--)}},Bze=(t,e,n)=>{const r=new Array(DE+1);let i=0,a,o;for(a=1;a<=DE;a++)i=i+n[a-1]<<1,r[a]=i;for(o=0;o<=e;o++){let s=t[o*2+1];s!==0&&(t[o*2]=Fze(r[s]++,s))}},ynn=()=>{let t,e,n,r,i;const a=new Array(DE+1);for(n=0,r=0;r<Wae-1;r++)for(qae[r]=n,t=0;t<1<<qQ[r];t++)t6[n++]=r;for(t6[n-1]=r,i=0,r=0;r<16;r++)for(D7[r]=i,t=0;t<1<<$N[r];t++)e6[i++]=r;for(i>>=7;r<c_;r++)for(D7[r]=i<<7,t=0;t<1<<$N[r]-7;t++)e6[256+i++]=r;for(e=0;e<=DE;e++)a[e]=0;for(t=0;t<=143;)Dv[t*2+1]=8,t++,a[8]++;for(;t<=255;)Dv[t*2+1]=9,t++,a[9]++;for(;t<=279;)Dv[t*2+1]=7,t++,a[7]++;for(;t<=287;)Dv[t*2+1]=8,t++,a[8]++;for(Bze(Dv,QA+1,a),t=0;t<c_;t++)PI[t*2+1]=5,PI[t*2]=Fze(t,5);Pze=new aH(Dv,qQ,f8+1,QA,DE),Dze=new aH(PI,$N,0,c_,DE),kze=new aH(new Array(0),hnn,0,Xae,pnn)},$ze=t=>{let e;for(e=0;e<QA;e++)t.dyn_ltree[e*2]=0;for(e=0;e<c_;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Xae;e++)t.bl_tree[e*2]=0;t.dyn_ltree[Zae*2]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},Vze=t=>{t.bi_valid>8?n6(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},qSe=(t,e,n,r)=>{const i=e*2,a=n*2;return t[i]<t[a]||t[i]===t[a]&&r[e]<=r[n]},sH=(t,e,n)=>{const r=t.heap[n];let i=n<<1;for(;i<=t.heap_len&&(i<t.heap_len&&qSe(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!qSe(e,r,t.heap[i],t.depth));)t.heap[n]=t.heap[i],n=i,i<<=1;t.heap[n]=r},YSe=(t,e,n)=>{let r,i,a=0,o,s;if(t.sym_next!==0)do r=t.pending_buf[t.sym_buf+a++]&255,r+=(t.pending_buf[t.sym_buf+a++]&255)<<8,i=t.pending_buf[t.sym_buf+a++],r===0?w0(t,i,e):(o=t6[i],w0(t,o+f8+1,e),s=qQ[o],s!==0&&(i-=qae[o],Np(t,i,s)),r--,o=Uze(r),w0(t,o,n),s=$N[o],s!==0&&(r-=D7[o],Np(t,r,s)));while(a<t.sym_next);w0(t,Zae,e)},YQ=(t,e)=>{const n=e.dyn_tree,r=e.stat_desc.static_tree,i=e.stat_desc.has_stree,a=e.stat_desc.elems;let o,s,l=-1,u;for(t.heap_len=0,t.heap_max=Rze,o=0;o<a;o++)n[o*2]!==0?(t.heap[++t.heap_len]=l=o,t.depth[o]=0):n[o*2+1]=0;for(;t.heap_len<2;)u=t.heap[++t.heap_len]=l<2?++l:0,n[u*2]=1,t.depth[u]=0,t.opt_len--,i&&(t.static_len-=r[u*2+1]);for(e.max_code=l,o=t.heap_len>>1;o>=1;o--)sH(t,n,o);u=a;do o=t.heap[1],t.heap[1]=t.heap[t.heap_len--],sH(t,n,1),s=t.heap[1],t.heap[--t.heap_max]=o,t.heap[--t.heap_max]=s,n[u*2]=n[o*2]+n[s*2],t.depth[u]=(t.depth[o]>=t.depth[s]?t.depth[o]:t.depth[s])+1,n[o*2+1]=n[s*2+1]=u,t.heap[1]=u++,sH(t,n,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],vnn(t,e),Bze(n,l,t.bl_count)},KSe=(t,e,n)=>{let r,i=-1,a,o=e[0*2+1],s=0,l=7,u=4;for(o===0&&(l=138,u=3),e[(n+1)*2+1]=65535,r=0;r<=n;r++)a=o,o=e[(r+1)*2+1],!(++s<l&&a===o)&&(s<u?t.bl_tree[a*2]+=s:a!==0?(a!==i&&t.bl_tree[a*2]++,t.bl_tree[Oze*2]++):s<=10?t.bl_tree[Lze*2]++:t.bl_tree[Nze*2]++,s=0,i=a,o===0?(l=138,u=3):a===o?(l=6,u=3):(l=7,u=4))},JSe=(t,e,n)=>{let r,i=-1,a,o=e[0*2+1],s=0,l=7,u=4;for(o===0&&(l=138,u=3),r=0;r<=n;r++)if(a=o,o=e[(r+1)*2+1],!(++s<l&&a===o)){if(s<u)do w0(t,a,t.bl_tree);while(--s!==0);else a!==0?(a!==i&&(w0(t,a,t.bl_tree),s--),w0(t,Oze,t.bl_tree),Np(t,s-3,2)):s<=10?(w0(t,Lze,t.bl_tree),Np(t,s-3,3)):(w0(t,Nze,t.bl_tree),Np(t,s-11,7));s=0,i=a,o===0?(l=138,u=3):a===o?(l=6,u=3):(l=7,u=4)}},bnn=t=>{let e;for(KSe(t,t.dyn_ltree,t.l_desc.max_code),KSe(t,t.dyn_dtree,t.d_desc.max_code),YQ(t,t.bl_desc),e=Xae-1;e>=3&&t.bl_tree[Mze[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e},Enn=(t,e,n,r)=>{let i;for(Np(t,e-257,5),Np(t,n-1,5),Np(t,r-4,4),i=0;i<r;i++)Np(t,t.bl_tree[Mze[i]*2+1],3);JSe(t,t.dyn_ltree,e-1),JSe(t,t.dyn_dtree,n-1)},Snn=t=>{let e=4093624447,n;for(n=0;n<=31;n++,e>>>=1)if(e&1&&t.dyn_ltree[n*2]!==0)return XSe;if(t.dyn_ltree[9*2]!==0||t.dyn_ltree[10*2]!==0||t.dyn_ltree[13*2]!==0)return ZSe;for(n=32;n<f8;n++)if(t.dyn_ltree[n*2]!==0)return ZSe;return XSe};let QSe=!1;const Cnn=t=>{QSe||(ynn(),QSe=!0),t.l_desc=new oH(t.dyn_ltree,Pze),t.d_desc=new oH(t.dyn_dtree,Dze),t.bl_desc=new oH(t.bl_tree,kze),t.bi_buf=0,t.bi_valid=0,$ze(t)},zze=(t,e,n,r)=>{Np(t,(cnn<<1)+(r?1:0),3),Vze(t),n6(t,n),n6(t,~n),n&&t.pending_buf.set(t.window.subarray(e,e+n),t.pending),t.pending+=n},xnn=t=>{Np(t,Aze<<1,3),w0(t,Zae,Dv),mnn(t)},_nn=(t,e,n,r)=>{let i,a,o=0;t.level>0?(t.strm.data_type===lnn&&(t.strm.data_type=Snn(t)),YQ(t,t.l_desc),YQ(t,t.d_desc),o=bnn(t),i=t.opt_len+3+7>>>3,a=t.static_len+3+7>>>3,a<=i&&(i=a)):i=a=n+5,n+4<=i&&e!==-1?zze(t,e,n,r):t.strategy===snn||a===i?(Np(t,(Aze<<1)+(r?1:0),3),YSe(t,Dv,PI)):(Np(t,(unn<<1)+(r?1:0),3),Enn(t,t.l_desc.max_code+1,t.d_desc.max_code+1,o+1),YSe(t,t.dyn_ltree,t.dyn_dtree)),$ze(t),r&&Vze(t)},wnn=(t,e,n)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=n,e===0?t.dyn_ltree[n*2]++:(t.matches++,e--,t.dyn_ltree[(t6[n]+f8+1)*2]++,t.dyn_dtree[Uze(e)*2]++),t.sym_next===t.sym_end);var Tnn=Cnn,Inn=zze,Ann=_nn,Rnn=wnn,Onn=xnn,Lnn={_tr_init:Tnn,_tr_stored_block:Inn,_tr_flush_block:Ann,_tr_tally:Rnn,_tr_align:Onn};const Nnn=(t,e,n,r)=>{let i=t&65535|0,a=t>>>16&65535|0,o=0;for(;n!==0;){o=n>2e3?2e3:n,n-=o;do i=i+e[r++]|0,a=a+i|0;while(--o);i%=65521,a%=65521}return i|a<<16|0};var r6=Nnn;const Mnn=()=>{let t,e=[];for(var n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=t&1?3988292384^t>>>1:t>>>1;e[n]=t}return e},Pnn=new Uint32Array(Mnn()),Dnn=(t,e,n,r)=>{const i=Pnn,a=r+n;t^=-1;for(let o=r;o<a;o++)t=t>>>8^i[(t^e[o])&255];return t^-1};var Cd=Dnn,K_={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},p8={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:knn,_tr_stored_block:KQ,_tr_flush_block:Unn,_tr_tally:Jy,_tr_align:Fnn}=Lnn,{Z_NO_FLUSH:Qy,Z_PARTIAL_FLUSH:Bnn,Z_FULL_FLUSH:$nn,Z_FINISH:ug,Z_BLOCK:eCe,Z_OK:Hd,Z_STREAM_END:tCe,Z_STREAM_ERROR:U0,Z_DATA_ERROR:Vnn,Z_BUF_ERROR:lH,Z_DEFAULT_COMPRESSION:znn,Z_FILTERED:Hnn,Z_HUFFMAN_ONLY:oL,Z_RLE:Gnn,Z_FIXED:jnn,Z_DEFAULT_STRATEGY:Wnn,Z_UNKNOWN:Xnn,Z_DEFLATED:Rk}=p8,Znn=9,qnn=15,Ynn=8,Knn=29,Jnn=256,JQ=Jnn+1+Knn,Qnn=30,ern=19,trn=2*JQ+1,nrn=15,bs=3,$y=258,F0=$y+bs+1,rrn=32,J_=42,Yae=57,QQ=69,eee=73,tee=91,nee=103,kE=113,j5=666,Qf=1,Jw=2,NS=3,Qw=4,irn=3,UE=(t,e)=>(t.msg=K_[e],e),nCe=t=>t*2-(t>4?9:0),_y=t=>{let e=t.length;for(;--e>=0;)t[e]=0},arn=t=>{let e,n,r,i=t.w_size;e=t.hash_size,r=e;do n=t.head[--r],t.head[r]=n>=i?n-i:0;while(--e);e=i,r=e;do n=t.prev[--r],t.prev[r]=n>=i?n-i:0;while(--e)};let orn=(t,e,n)=>(e<<t.hash_shift^n)&t.hash_mask,eb=orn;const nh=t=>{const e=t.state;let n=e.pending;n>t.avail_out&&(n=t.avail_out),n!==0&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+n),t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,e.pending===0&&(e.pending_out=0))},uh=(t,e)=>{Unn(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,nh(t.strm)},Zs=(t,e)=>{t.pending_buf[t.pending++]=e},Y4=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255},ree=(t,e,n,r)=>{let i=t.avail_in;return i>r&&(i=r),i===0?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),n),t.state.wrap===1?t.adler=r6(t.adler,e,i,n):t.state.wrap===2&&(t.adler=Cd(t.adler,e,i,n)),t.next_in+=i,t.total_in+=i,i)},Hze=(t,e)=>{let n=t.max_chain_length,r=t.strstart,i,a,o=t.prev_length,s=t.nice_match;const l=t.strstart>t.w_size-F0?t.strstart-(t.w_size-F0):0,u=t.window,d=t.w_mask,f=t.prev,p=t.strstart+$y;let h=u[r+o-1],g=u[r+o];t.prev_length>=t.good_match&&(n>>=2),s>t.lookahead&&(s=t.lookahead);do if(i=e,!(u[i+o]!==g||u[i+o-1]!==h||u[i]!==u[r]||u[++i]!==u[r+1])){r+=2,i++;do;while(u[++r]===u[++i]&&u[++r]===u[++i]&&u[++r]===u[++i]&&u[++r]===u[++i]&&u[++r]===u[++i]&&u[++r]===u[++i]&&u[++r]===u[++i]&&u[++r]===u[++i]&&r<p);if(a=$y-(p-r),r=p-$y,a>o){if(t.match_start=e,o=a,a>=s)break;h=u[r+o-1],g=u[r+o]}}while((e=f[e&d])>l&&--n!==0);return o<=t.lookahead?o:t.lookahead},Q_=t=>{const e=t.w_size;let n,r,i;do{if(r=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-F0)&&(t.window.set(t.window.subarray(e,e+e-r),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),arn(t),r+=e),t.strm.avail_in===0)break;if(n=ree(t.strm,t.window,t.strstart+t.lookahead,r),t.lookahead+=n,t.lookahead+t.insert>=bs)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=eb(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=eb(t,t.ins_h,t.window[i+bs-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<bs)););}while(t.lookahead<F0&&t.strm.avail_in!==0)},Gze=(t,e)=>{let n=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,r,i,a,o=0,s=t.strm.avail_in;do{if(r=65535,a=t.bi_valid+42>>3,t.strm.avail_out<a||(a=t.strm.avail_out-a,i=t.strstart-t.block_start,r>i+t.strm.avail_in&&(r=i+t.strm.avail_in),r>a&&(r=a),r<n&&(r===0&&e!==ug||e===Qy||r!==i+t.strm.avail_in)))break;o=e===ug&&r===i+t.strm.avail_in?1:0,KQ(t,0,0,o),t.pending_buf[t.pending-4]=r,t.pending_buf[t.pending-3]=r>>8,t.pending_buf[t.pending-2]=~r,t.pending_buf[t.pending-1]=~r>>8,nh(t.strm),i&&(i>r&&(i=r),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,r-=i),r&&(ree(t.strm,t.strm.output,t.strm.next_out,r),t.strm.next_out+=r,t.strm.avail_out-=r,t.strm.total_out+=r)}while(o===0);return s-=t.strm.avail_in,s&&(s>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=s&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-s,t.strm.next_in),t.strstart),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),o?Qw:e!==Qy&&e!==ug&&t.strm.avail_in===0&&t.strstart===t.block_start?Jw:(a=t.window_size-t.strstart,t.strm.avail_in>a&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,a+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),a>t.strm.avail_in&&(a=t.strm.avail_in),a&&(ree(t.strm,t.window,t.strstart,a),t.strstart+=a,t.insert+=a>t.w_size-t.insert?t.w_size-t.insert:a),t.high_water<t.strstart&&(t.high_water=t.strstart),a=t.bi_valid+42>>3,a=t.pending_buf_size-a>65535?65535:t.pending_buf_size-a,n=a>t.w_size?t.w_size:a,i=t.strstart-t.block_start,(i>=n||(i||e===ug)&&e!==Qy&&t.strm.avail_in===0&&i<=a)&&(r=i>a?a:i,o=e===ug&&t.strm.avail_in===0&&r===i?1:0,KQ(t,t.block_start,r,o),t.block_start+=r,nh(t.strm)),o?NS:Qf)},cH=(t,e)=>{let n,r;for(;;){if(t.lookahead<F0){if(Q_(t),t.lookahead<F0&&e===Qy)return Qf;if(t.lookahead===0)break}if(n=0,t.lookahead>=bs&&(t.ins_h=eb(t,t.ins_h,t.window[t.strstart+bs-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),n!==0&&t.strstart-n<=t.w_size-F0&&(t.match_length=Hze(t,n)),t.match_length>=bs)if(r=Jy(t,t.strstart-t.match_start,t.match_length-bs),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=bs){t.match_length--;do t.strstart++,t.ins_h=eb(t,t.ins_h,t.window[t.strstart+bs-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=eb(t,t.ins_h,t.window[t.strstart+1]);else r=Jy(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(r&&(uh(t,!1),t.strm.avail_out===0))return Qf}return t.insert=t.strstart<bs-1?t.strstart:bs-1,e===ug?(uh(t,!0),t.strm.avail_out===0?NS:Qw):t.sym_next&&(uh(t,!1),t.strm.avail_out===0)?Qf:Jw},Ox=(t,e)=>{let n,r,i;for(;;){if(t.lookahead<F0){if(Q_(t),t.lookahead<F0&&e===Qy)return Qf;if(t.lookahead===0)break}if(n=0,t.lookahead>=bs&&(t.ins_h=eb(t,t.ins_h,t.window[t.strstart+bs-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=bs-1,n!==0&&t.prev_length<t.max_lazy_match&&t.strstart-n<=t.w_size-F0&&(t.match_length=Hze(t,n),t.match_length<=5&&(t.strategy===Hnn||t.match_length===bs&&t.strstart-t.match_start>4096)&&(t.match_length=bs-1)),t.prev_length>=bs&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-bs,r=Jy(t,t.strstart-1-t.prev_match,t.prev_length-bs),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=eb(t,t.ins_h,t.window[t.strstart+bs-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=bs-1,t.strstart++,r&&(uh(t,!1),t.strm.avail_out===0))return Qf}else if(t.match_available){if(r=Jy(t,0,t.window[t.strstart-1]),r&&uh(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return Qf}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(r=Jy(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<bs-1?t.strstart:bs-1,e===ug?(uh(t,!0),t.strm.avail_out===0?NS:Qw):t.sym_next&&(uh(t,!1),t.strm.avail_out===0)?Qf:Jw},srn=(t,e)=>{let n,r,i,a;const o=t.window;for(;;){if(t.lookahead<=$y){if(Q_(t),t.lookahead<=$y&&e===Qy)return Qf;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=bs&&t.strstart>0&&(i=t.strstart-1,r=o[i],r===o[++i]&&r===o[++i]&&r===o[++i])){a=t.strstart+$y;do;while(r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&i<a);t.match_length=$y-(a-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=bs?(n=Jy(t,1,t.match_length-bs),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=Jy(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(uh(t,!1),t.strm.avail_out===0))return Qf}return t.insert=0,e===ug?(uh(t,!0),t.strm.avail_out===0?NS:Qw):t.sym_next&&(uh(t,!1),t.strm.avail_out===0)?Qf:Jw},lrn=(t,e)=>{let n;for(;;){if(t.lookahead===0&&(Q_(t),t.lookahead===0)){if(e===Qy)return Qf;break}if(t.match_length=0,n=Jy(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(uh(t,!1),t.strm.avail_out===0))return Qf}return t.insert=0,e===ug?(uh(t,!0),t.strm.avail_out===0?NS:Qw):t.sym_next&&(uh(t,!1),t.strm.avail_out===0)?Qf:Jw};function o0(t,e,n,r,i){this.good_length=t,this.max_lazy=e,this.nice_length=n,this.max_chain=r,this.func=i}const W5=[new o0(0,0,0,0,Gze),new o0(4,4,8,4,cH),new o0(4,5,16,8,cH),new o0(4,6,32,32,cH),new o0(4,4,16,16,Ox),new o0(8,16,32,32,Ox),new o0(8,16,128,128,Ox),new o0(8,32,128,256,Ox),new o0(32,128,258,1024,Ox),new o0(32,258,258,4096,Ox)],crn=t=>{t.window_size=2*t.w_size,_y(t.head),t.max_lazy_match=W5[t.level].max_lazy,t.good_match=W5[t.level].good_length,t.nice_match=W5[t.level].nice_length,t.max_chain_length=W5[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=bs-1,t.match_available=0,t.ins_h=0};function urn(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Rk,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(trn*2),this.dyn_dtree=new Uint16Array((2*Qnn+1)*2),this.bl_tree=new Uint16Array((2*ern+1)*2),_y(this.dyn_ltree),_y(this.dyn_dtree),_y(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(nrn+1),this.heap=new Uint16Array(2*JQ+1),_y(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*JQ+1),_y(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const h8=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==J_&&e.status!==Yae&&e.status!==QQ&&e.status!==eee&&e.status!==tee&&e.status!==nee&&e.status!==kE&&e.status!==j5?1:0},jze=t=>{if(h8(t))return UE(t,U0);t.total_in=t.total_out=0,t.data_type=Xnn;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap===2?Yae:e.wrap?J_:kE,t.adler=e.wrap===2?0:1,e.last_flush=-2,knn(e),Hd},Wze=t=>{const e=jze(t);return e===Hd&&crn(t.state),e},drn=(t,e)=>h8(t)||t.state.wrap!==2?U0:(t.state.gzhead=e,Hd),Xze=(t,e,n,r,i,a)=>{if(!t)return U0;let o=1;if(e===znn&&(e=6),r<0?(o=0,r=-r):r>15&&(o=2,r-=16),i<1||i>Znn||n!==Rk||r<8||r>15||e<0||e>9||a<0||a>jnn||r===8&&o!==1)return UE(t,U0);r===8&&(r=9);const s=new urn;return t.state=s,s.strm=t,s.status=J_,s.wrap=o,s.gzhead=null,s.w_bits=r,s.w_size=1<<s.w_bits,s.w_mask=s.w_size-1,s.hash_bits=i+7,s.hash_size=1<<s.hash_bits,s.hash_mask=s.hash_size-1,s.hash_shift=~~((s.hash_bits+bs-1)/bs),s.window=new Uint8Array(s.w_size*2),s.head=new Uint16Array(s.hash_size),s.prev=new Uint16Array(s.w_size),s.lit_bufsize=1<<i+6,s.pending_buf_size=s.lit_bufsize*4,s.pending_buf=new Uint8Array(s.pending_buf_size),s.sym_buf=s.lit_bufsize,s.sym_end=(s.lit_bufsize-1)*3,s.level=e,s.strategy=a,s.method=n,Wze(t)},frn=(t,e)=>Xze(t,e,Rk,qnn,Ynn,Wnn),prn=(t,e)=>{if(h8(t)||e>eCe||e<0)return t?UE(t,U0):U0;const n=t.state;if(!t.output||t.avail_in!==0&&!t.input||n.status===j5&&e!==ug)return UE(t,t.avail_out===0?lH:U0);const r=n.last_flush;if(n.last_flush=e,n.pending!==0){if(nh(t),t.avail_out===0)return n.last_flush=-1,Hd}else if(t.avail_in===0&&nCe(e)<=nCe(r)&&e!==ug)return UE(t,lH);if(n.status===j5&&t.avail_in!==0)return UE(t,lH);if(n.status===J_&&n.wrap===0&&(n.status=kE),n.status===J_){let i=Rk+(n.w_bits-8<<4)<<8,a=-1;if(n.strategy>=oL||n.level<2?a=0:n.level<6?a=1:n.level===6?a=2:a=3,i|=a<<6,n.strstart!==0&&(i|=rrn),i+=31-i%31,Y4(n,i),n.strstart!==0&&(Y4(n,t.adler>>>16),Y4(n,t.adler&65535)),t.adler=1,n.status=kE,nh(t),n.pending!==0)return n.last_flush=-1,Hd}if(n.status===Yae){if(t.adler=0,Zs(n,31),Zs(n,139),Zs(n,8),n.gzhead)Zs(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),Zs(n,n.gzhead.time&255),Zs(n,n.gzhead.time>>8&255),Zs(n,n.gzhead.time>>16&255),Zs(n,n.gzhead.time>>24&255),Zs(n,n.level===9?2:n.strategy>=oL||n.level<2?4:0),Zs(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(Zs(n,n.gzhead.extra.length&255),Zs(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(t.adler=Cd(t.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=QQ;else if(Zs(n,0),Zs(n,0),Zs(n,0),Zs(n,0),Zs(n,0),Zs(n,n.level===9?2:n.strategy>=oL||n.level<2?4:0),Zs(n,irn),n.status=kE,nh(t),n.pending!==0)return n.last_flush=-1,Hd}if(n.status===QQ){if(n.gzhead.extra){let i=n.pending,a=(n.gzhead.extra.length&65535)-n.gzindex;for(;n.pending+a>n.pending_buf_size;){let s=n.pending_buf_size-n.pending;if(n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex,n.gzindex+s),n.pending),n.pending=n.pending_buf_size,n.gzhead.hcrc&&n.pending>i&&(t.adler=Cd(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex+=s,nh(t),n.pending!==0)return n.last_flush=-1,Hd;i=0,a-=s}let o=new Uint8Array(n.gzhead.extra);n.pending_buf.set(o.subarray(n.gzindex,n.gzindex+a),n.pending),n.pending+=a,n.gzhead.hcrc&&n.pending>i&&(t.adler=Cd(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex=0}n.status=eee}if(n.status===eee){if(n.gzhead.name){let i=n.pending,a;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>i&&(t.adler=Cd(t.adler,n.pending_buf,n.pending-i,i)),nh(t),n.pending!==0)return n.last_flush=-1,Hd;i=0}n.gzindex<n.gzhead.name.length?a=n.gzhead.name.charCodeAt(n.gzindex++)&255:a=0,Zs(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(t.adler=Cd(t.adler,n.pending_buf,n.pending-i,i)),n.gzindex=0}n.status=tee}if(n.status===tee){if(n.gzhead.comment){let i=n.pending,a;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>i&&(t.adler=Cd(t.adler,n.pending_buf,n.pending-i,i)),nh(t),n.pending!==0)return n.last_flush=-1,Hd;i=0}n.gzindex<n.gzhead.comment.length?a=n.gzhead.comment.charCodeAt(n.gzindex++)&255:a=0,Zs(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>i&&(t.adler=Cd(t.adler,n.pending_buf,n.pending-i,i))}n.status=nee}if(n.status===nee){if(n.gzhead.hcrc){if(n.pending+2>n.pending_buf_size&&(nh(t),n.pending!==0))return n.last_flush=-1,Hd;Zs(n,t.adler&255),Zs(n,t.adler>>8&255),t.adler=0}if(n.status=kE,nh(t),n.pending!==0)return n.last_flush=-1,Hd}if(t.avail_in!==0||n.lookahead!==0||e!==Qy&&n.status!==j5){let i=n.level===0?Gze(n,e):n.strategy===oL?lrn(n,e):n.strategy===Gnn?srn(n,e):W5[n.level].func(n,e);if((i===NS||i===Qw)&&(n.status=j5),i===Qf||i===NS)return t.avail_out===0&&(n.last_flush=-1),Hd;if(i===Jw&&(e===Bnn?Fnn(n):e!==eCe&&(KQ(n,0,0,!1),e===$nn&&(_y(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),nh(t),t.avail_out===0))return n.last_flush=-1,Hd}return e!==ug?Hd:n.wrap<=0?tCe:(n.wrap===2?(Zs(n,t.adler&255),Zs(n,t.adler>>8&255),Zs(n,t.adler>>16&255),Zs(n,t.adler>>24&255),Zs(n,t.total_in&255),Zs(n,t.total_in>>8&255),Zs(n,t.total_in>>16&255),Zs(n,t.total_in>>24&255)):(Y4(n,t.adler>>>16),Y4(n,t.adler&65535)),nh(t),n.wrap>0&&(n.wrap=-n.wrap),n.pending!==0?Hd:tCe)},hrn=t=>{if(h8(t))return U0;const e=t.state.status;return t.state=null,e===kE?UE(t,Vnn):Hd},grn=(t,e)=>{let n=e.length;if(h8(t))return U0;const r=t.state,i=r.wrap;if(i===2||i===1&&r.status!==J_||r.lookahead)return U0;if(i===1&&(t.adler=r6(t.adler,e,n,0)),r.wrap=0,n>=r.w_size){i===0&&(_y(r.head),r.strstart=0,r.block_start=0,r.insert=0);let l=new Uint8Array(r.w_size);l.set(e.subarray(n-r.w_size,n),0),e=l,n=r.w_size}const a=t.avail_in,o=t.next_in,s=t.input;for(t.avail_in=n,t.next_in=0,t.input=e,Q_(r);r.lookahead>=bs;){let l=r.strstart,u=r.lookahead-(bs-1);do r.ins_h=eb(r,r.ins_h,r.window[l+bs-1]),r.prev[l&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=l,l++;while(--u);r.strstart=l,r.lookahead=bs-1,Q_(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=bs-1,r.match_available=0,t.next_in=o,t.input=s,t.avail_in=a,r.wrap=i,Hd};var mrn=frn,vrn=Xze,yrn=Wze,brn=jze,Ern=drn,Srn=prn,Crn=hrn,xrn=grn,_rn="pako deflate (from Nodeca project)",DI={deflateInit:mrn,deflateInit2:vrn,deflateReset:yrn,deflateResetKeep:brn,deflateSetHeader:Ern,deflate:Srn,deflateEnd:Crn,deflateSetDictionary:xrn,deflateInfo:_rn};const wrn=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Trn=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const n=e.shift();if(n){if(typeof n!="object")throw new TypeError(n+"must be non-object");for(const r in n)wrn(n,r)&&(t[r]=n[r])}}return t},Irn=t=>{let e=0;for(let r=0,i=t.length;r<i;r++)e+=t[r].length;const n=new Uint8Array(e);for(let r=0,i=0,a=t.length;r<a;r++){let o=t[r];n.set(o,i),i+=o.length}return n},Ok={assign:Trn,flattenChunks:Irn};let Zze=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{Zze=!1}const i6=new Uint8Array(256);for(let t=0;t<256;t++)i6[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;i6[254]=i6[254]=1;var Arn=t=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,n,r,i,a,o=t.length,s=0;for(i=0;i<o;i++)n=t.charCodeAt(i),(n&64512)===55296&&i+1<o&&(r=t.charCodeAt(i+1),(r&64512)===56320&&(n=65536+(n-55296<<10)+(r-56320),i++)),s+=n<128?1:n<2048?2:n<65536?3:4;for(e=new Uint8Array(s),a=0,i=0;a<s;i++)n=t.charCodeAt(i),(n&64512)===55296&&i+1<o&&(r=t.charCodeAt(i+1),(r&64512)===56320&&(n=65536+(n-55296<<10)+(r-56320),i++)),n<128?e[a++]=n:n<2048?(e[a++]=192|n>>>6,e[a++]=128|n&63):n<65536?(e[a++]=224|n>>>12,e[a++]=128|n>>>6&63,e[a++]=128|n&63):(e[a++]=240|n>>>18,e[a++]=128|n>>>12&63,e[a++]=128|n>>>6&63,e[a++]=128|n&63);return e};const Rrn=(t,e)=>{if(e<65534&&t.subarray&&Zze)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let n="";for(let r=0;r<e;r++)n+=String.fromCharCode(t[r]);return n};var Orn=(t,e)=>{const n=e||t.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let r,i;const a=new Array(n*2);for(i=0,r=0;r<n;){let o=t[r++];if(o<128){a[i++]=o;continue}let s=i6[o];if(s>4){a[i++]=65533,r+=s-1;continue}for(o&=s===2?31:s===3?15:7;s>1&&r<n;)o=o<<6|t[r++]&63,s--;if(s>1){a[i++]=65533;continue}o<65536?a[i++]=o:(o-=65536,a[i++]=55296|o>>10&1023,a[i++]=56320|o&1023)}return Rrn(a,i)},Lrn=(t,e)=>{e=e||t.length,e>t.length&&(e=t.length);let n=e-1;for(;n>=0&&(t[n]&192)===128;)n--;return n<0||n===0?e:n+i6[t[n]]>e?n:e},a6={string2buf:Arn,buf2string:Orn,utf8border:Lrn};function Nrn(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var qze=Nrn;const Yze=Object.prototype.toString,{Z_NO_FLUSH:Mrn,Z_SYNC_FLUSH:Prn,Z_FULL_FLUSH:Drn,Z_FINISH:krn,Z_OK:k7,Z_STREAM_END:Urn,Z_DEFAULT_COMPRESSION:Frn,Z_DEFAULT_STRATEGY:Brn,Z_DEFLATED:$rn}=p8;function Kae(t){this.options=Ok.assign({level:Frn,method:$rn,chunkSize:16384,windowBits:15,memLevel:8,strategy:Brn},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qze,this.strm.avail_out=0;let n=DI.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(n!==k7)throw new Error(K_[n]);if(e.header&&DI.deflateSetHeader(this.strm,e.header),e.dictionary){let r;if(typeof e.dictionary=="string"?r=a6.string2buf(e.dictionary):Yze.call(e.dictionary)==="[object ArrayBuffer]"?r=new Uint8Array(e.dictionary):r=e.dictionary,n=DI.deflateSetDictionary(this.strm,r),n!==k7)throw new Error(K_[n]);this._dict_set=!0}}Kae.prototype.push=function(t,e){const n=this.strm,r=this.options.chunkSize;let i,a;if(this.ended)return!1;for(e===~~e?a=e:a=e===!0?krn:Mrn,typeof t=="string"?n.input=a6.string2buf(t):Yze.call(t)==="[object ArrayBuffer]"?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;){if(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(a===Prn||a===Drn)&&n.avail_out<=6){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(i=DI.deflate(n,a),i===Urn)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),i=DI.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===k7;if(n.avail_out===0){this.onData(n.output);continue}if(a>0&&n.next_out>0){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(n.avail_in===0)break}return!0};Kae.prototype.onData=function(t){this.chunks.push(t)};Kae.prototype.onEnd=function(t){t===k7&&(this.result=Ok.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};const sL=16209,Vrn=16191;var zrn=function(e,n){let r,i,a,o,s,l,u,d,f,p,h,g,y,v,m,b,E,C,x,_,A,P,R,N;const D=e.state;r=e.next_in,R=e.input,i=r+(e.avail_in-5),a=e.next_out,N=e.output,o=a-(n-e.avail_out),s=a+(e.avail_out-257),l=D.dmax,u=D.wsize,d=D.whave,f=D.wnext,p=D.window,h=D.hold,g=D.bits,y=D.lencode,v=D.distcode,m=(1<<D.lenbits)-1,b=(1<<D.distbits)-1;e:do{g<15&&(h+=R[r++]<<g,g+=8,h+=R[r++]<<g,g+=8),E=y[h&m];t:for(;;){if(C=E>>>24,h>>>=C,g-=C,C=E>>>16&255,C===0)N[a++]=E&65535;else if(C&16){x=E&65535,C&=15,C&&(g<C&&(h+=R[r++]<<g,g+=8),x+=h&(1<<C)-1,h>>>=C,g-=C),g<15&&(h+=R[r++]<<g,g+=8,h+=R[r++]<<g,g+=8),E=v[h&b];n:for(;;){if(C=E>>>24,h>>>=C,g-=C,C=E>>>16&255,C&16){if(_=E&65535,C&=15,g<C&&(h+=R[r++]<<g,g+=8,g<C&&(h+=R[r++]<<g,g+=8)),_+=h&(1<<C)-1,_>l){e.msg="invalid distance too far back",D.mode=sL;break e}if(h>>>=C,g-=C,C=a-o,_>C){if(C=_-C,C>d&&D.sane){e.msg="invalid distance too far back",D.mode=sL;break e}if(A=0,P=p,f===0){if(A+=u-C,C<x){x-=C;do N[a++]=p[A++];while(--C);A=a-_,P=N}}else if(f<C){if(A+=u+f-C,C-=f,C<x){x-=C;do N[a++]=p[A++];while(--C);if(A=0,f<x){C=f,x-=C;do N[a++]=p[A++];while(--C);A=a-_,P=N}}}else if(A+=f-C,C<x){x-=C;do N[a++]=p[A++];while(--C);A=a-_,P=N}for(;x>2;)N[a++]=P[A++],N[a++]=P[A++],N[a++]=P[A++],x-=3;x&&(N[a++]=P[A++],x>1&&(N[a++]=P[A++]))}else{A=a-_;do N[a++]=N[A++],N[a++]=N[A++],N[a++]=N[A++],x-=3;while(x>2);x&&(N[a++]=N[A++],x>1&&(N[a++]=N[A++]))}}else if(C&64){e.msg="invalid distance code",D.mode=sL;break e}else{E=v[(E&65535)+(h&(1<<C)-1)];continue n}break}}else if(C&64)if(C&32){D.mode=Vrn;break e}else{e.msg="invalid literal/length code",D.mode=sL;break e}else{E=y[(E&65535)+(h&(1<<C)-1)];continue t}break}}while(r<i&&a<s);x=g>>3,r-=x,g-=x<<3,h&=(1<<g)-1,e.next_in=r,e.next_out=a,e.avail_in=r<i?5+(i-r):5-(r-i),e.avail_out=a<s?257+(s-a):257-(a-s),D.hold=h,D.bits=g};const Lx=15,rCe=852,iCe=592,aCe=0,uH=1,oCe=2,Hrn=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Grn=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),jrn=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),Wrn=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),Xrn=(t,e,n,r,i,a,o,s)=>{const l=s.bits;let u=0,d=0,f=0,p=0,h=0,g=0,y=0,v=0,m=0,b=0,E,C,x,_,A,P=null,R;const N=new Uint16Array(Lx+1),D=new Uint16Array(Lx+1);let U=null,z,B,j;for(u=0;u<=Lx;u++)N[u]=0;for(d=0;d<r;d++)N[e[n+d]]++;for(h=l,p=Lx;p>=1&&N[p]===0;p--);if(h>p&&(h=p),p===0)return i[a++]=1<<24|64<<16|0,i[a++]=1<<24|64<<16|0,s.bits=1,0;for(f=1;f<p&&N[f]===0;f++);for(h<f&&(h=f),v=1,u=1;u<=Lx;u++)if(v<<=1,v-=N[u],v<0)return-1;if(v>0&&(t===aCe||p!==1))return-1;for(D[1]=0,u=1;u<Lx;u++)D[u+1]=D[u]+N[u];for(d=0;d<r;d++)e[n+d]!==0&&(o[D[e[n+d]]++]=d);if(t===aCe?(P=U=o,R=20):t===uH?(P=Hrn,U=Grn,R=257):(P=jrn,U=Wrn,R=0),b=0,d=0,u=f,A=a,g=h,y=0,x=-1,m=1<<h,_=m-1,t===uH&&m>rCe||t===oCe&&m>iCe)return 1;for(;;){z=u-y,o[d]+1<R?(B=0,j=o[d]):o[d]>=R?(B=U[o[d]-R],j=P[o[d]-R]):(B=32+64,j=0),E=1<<u-y,C=1<<g,f=C;do C-=E,i[A+(b>>y)+C]=z<<24|B<<16|j|0;while(C!==0);for(E=1<<u-1;b&E;)E>>=1;if(E!==0?(b&=E-1,b+=E):b=0,d++,--N[u]===0){if(u===p)break;u=e[n+o[d]]}if(u>h&&(b&_)!==x){for(y===0&&(y=h),A+=f,g=u-y,v=1<<g;g+y<p&&(v-=N[g+y],!(v<=0));)g++,v<<=1;if(m+=1<<g,t===uH&&m>rCe||t===oCe&&m>iCe)return 1;x=b&_,i[x]=h<<24|g<<16|A-a|0}}return b!==0&&(i[A+b]=u-y<<24|64<<16|0),s.bits=h,0};var kI=Xrn;const Zrn=0,Kze=1,Jze=2,{Z_FINISH:sCe,Z_BLOCK:qrn,Z_TREES:lL,Z_OK:MS,Z_STREAM_END:Yrn,Z_NEED_DICT:Krn,Z_STREAM_ERROR:_g,Z_DATA_ERROR:Qze,Z_MEM_ERROR:eHe,Z_BUF_ERROR:Jrn,Z_DEFLATED:lCe}=p8,Lk=16180,cCe=16181,uCe=16182,dCe=16183,fCe=16184,pCe=16185,hCe=16186,gCe=16187,mCe=16188,vCe=16189,U7=16190,Ev=16191,dH=16192,yCe=16193,fH=16194,bCe=16195,ECe=16196,SCe=16197,CCe=16198,cL=16199,uL=16200,xCe=16201,_Ce=16202,wCe=16203,TCe=16204,ICe=16205,pH=16206,ACe=16207,RCe=16208,_c=16209,tHe=16210,nHe=16211,Qrn=852,ein=592,tin=15,nin=tin,OCe=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);function rin(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const nC=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.mode<Lk||e.mode>nHe?1:0},rHe=t=>{if(nC(t))return _g;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=Lk,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(Qrn),e.distcode=e.distdyn=new Int32Array(ein),e.sane=1,e.back=-1,MS},iHe=t=>{if(nC(t))return _g;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,rHe(t)},aHe=(t,e)=>{let n;if(nC(t))return _g;const r=t.state;return e<0?(n=0,e=-e):(n=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15)?_g:(r.window!==null&&r.wbits!==e&&(r.window=null),r.wrap=n,r.wbits=e,iHe(t))},oHe=(t,e)=>{if(!t)return _g;const n=new rin;t.state=n,n.strm=t,n.window=null,n.mode=Lk;const r=aHe(t,e);return r!==MS&&(t.state=null),r},iin=t=>oHe(t,nin);let LCe=!0,hH,gH;const ain=t=>{if(LCe){hH=new Int32Array(512),gH=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(kI(Kze,t.lens,0,288,hH,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;kI(Jze,t.lens,0,32,gH,0,t.work,{bits:5}),LCe=!1}t.lencode=hH,t.lenbits=9,t.distcode=gH,t.distbits=5},sHe=(t,e,n,r)=>{let i;const a=t.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Uint8Array(a.wsize)),r>=a.wsize?(a.window.set(e.subarray(n-a.wsize,n),0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>r&&(i=r),a.window.set(e.subarray(n-r,n-r+i),a.wnext),r-=i,r?(a.window.set(e.subarray(n-r,n),0),a.wnext=r,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0},oin=(t,e)=>{let n,r,i,a,o,s,l,u,d,f,p,h,g,y,v=0,m,b,E,C,x,_,A,P;const R=new Uint8Array(4);let N,D;const U=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(nC(t)||!t.output||!t.input&&t.avail_in!==0)return _g;n=t.state,n.mode===Ev&&(n.mode=dH),o=t.next_out,i=t.output,l=t.avail_out,a=t.next_in,r=t.input,s=t.avail_in,u=n.hold,d=n.bits,f=s,p=l,P=MS;e:for(;;)switch(n.mode){case Lk:if(n.wrap===0){n.mode=dH;break}for(;d<16;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(n.wrap&2&&u===35615){n.wbits===0&&(n.wbits=15),n.check=0,R[0]=u&255,R[1]=u>>>8&255,n.check=Cd(n.check,R,2,0),u=0,d=0,n.mode=cCe;break}if(n.head&&(n.head.done=!1),!(n.wrap&1)||(((u&255)<<8)+(u>>8))%31){t.msg="incorrect header check",n.mode=_c;break}if((u&15)!==lCe){t.msg="unknown compression method",n.mode=_c;break}if(u>>>=4,d-=4,A=(u&15)+8,n.wbits===0&&(n.wbits=A),A>15||A>n.wbits){t.msg="invalid window size",n.mode=_c;break}n.dmax=1<<n.wbits,n.flags=0,t.adler=n.check=1,n.mode=u&512?vCe:Ev,u=0,d=0;break;case cCe:for(;d<16;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(n.flags=u,(n.flags&255)!==lCe){t.msg="unknown compression method",n.mode=_c;break}if(n.flags&57344){t.msg="unknown header flags set",n.mode=_c;break}n.head&&(n.head.text=u>>8&1),n.flags&512&&n.wrap&4&&(R[0]=u&255,R[1]=u>>>8&255,n.check=Cd(n.check,R,2,0)),u=0,d=0,n.mode=uCe;case uCe:for(;d<32;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}n.head&&(n.head.time=u),n.flags&512&&n.wrap&4&&(R[0]=u&255,R[1]=u>>>8&255,R[2]=u>>>16&255,R[3]=u>>>24&255,n.check=Cd(n.check,R,4,0)),u=0,d=0,n.mode=dCe;case dCe:for(;d<16;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}n.head&&(n.head.xflags=u&255,n.head.os=u>>8),n.flags&512&&n.wrap&4&&(R[0]=u&255,R[1]=u>>>8&255,n.check=Cd(n.check,R,2,0)),u=0,d=0,n.mode=fCe;case fCe:if(n.flags&1024){for(;d<16;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}n.length=u,n.head&&(n.head.extra_len=u),n.flags&512&&n.wrap&4&&(R[0]=u&255,R[1]=u>>>8&255,n.check=Cd(n.check,R,2,0)),u=0,d=0}else n.head&&(n.head.extra=null);n.mode=pCe;case pCe:if(n.flags&1024&&(h=n.length,h>s&&(h=s),h&&(n.head&&(A=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(a,a+h),A)),n.flags&512&&n.wrap&4&&(n.check=Cd(n.check,r,h,a)),s-=h,a+=h,n.length-=h),n.length))break e;n.length=0,n.mode=hCe;case hCe:if(n.flags&2048){if(s===0)break e;h=0;do A=r[a+h++],n.head&&A&&n.length<65536&&(n.head.name+=String.fromCharCode(A));while(A&&h<s);if(n.flags&512&&n.wrap&4&&(n.check=Cd(n.check,r,h,a)),s-=h,a+=h,A)break e}else n.head&&(n.head.name=null);n.length=0,n.mode=gCe;case gCe:if(n.flags&4096){if(s===0)break e;h=0;do A=r[a+h++],n.head&&A&&n.length<65536&&(n.head.comment+=String.fromCharCode(A));while(A&&h<s);if(n.flags&512&&n.wrap&4&&(n.check=Cd(n.check,r,h,a)),s-=h,a+=h,A)break e}else n.head&&(n.head.comment=null);n.mode=mCe;case mCe:if(n.flags&512){for(;d<16;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(n.wrap&4&&u!==(n.check&65535)){t.msg="header crc mismatch",n.mode=_c;break}u=0,d=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=Ev;break;case vCe:for(;d<32;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}t.adler=n.check=OCe(u),u=0,d=0,n.mode=U7;case U7:if(n.havedict===0)return t.next_out=o,t.avail_out=l,t.next_in=a,t.avail_in=s,n.hold=u,n.bits=d,Krn;t.adler=n.check=1,n.mode=Ev;case Ev:if(e===qrn||e===lL)break e;case dH:if(n.last){u>>>=d&7,d-=d&7,n.mode=pH;break}for(;d<3;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}switch(n.last=u&1,u>>>=1,d-=1,u&3){case 0:n.mode=yCe;break;case 1:if(ain(n),n.mode=cL,e===lL){u>>>=2,d-=2;break e}break;case 2:n.mode=ECe;break;case 3:t.msg="invalid block type",n.mode=_c}u>>>=2,d-=2;break;case yCe:for(u>>>=d&7,d-=d&7;d<32;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if((u&65535)!==(u>>>16^65535)){t.msg="invalid stored block lengths",n.mode=_c;break}if(n.length=u&65535,u=0,d=0,n.mode=fH,e===lL)break e;case fH:n.mode=bCe;case bCe:if(h=n.length,h){if(h>s&&(h=s),h>l&&(h=l),h===0)break e;i.set(r.subarray(a,a+h),o),s-=h,a+=h,l-=h,o+=h,n.length-=h;break}n.mode=Ev;break;case ECe:for(;d<14;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(n.nlen=(u&31)+257,u>>>=5,d-=5,n.ndist=(u&31)+1,u>>>=5,d-=5,n.ncode=(u&15)+4,u>>>=4,d-=4,n.nlen>286||n.ndist>30){t.msg="too many length or distance symbols",n.mode=_c;break}n.have=0,n.mode=SCe;case SCe:for(;n.have<n.ncode;){for(;d<3;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}n.lens[U[n.have++]]=u&7,u>>>=3,d-=3}for(;n.have<19;)n.lens[U[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,N={bits:n.lenbits},P=kI(Zrn,n.lens,0,19,n.lencode,0,n.work,N),n.lenbits=N.bits,P){t.msg="invalid code lengths set",n.mode=_c;break}n.have=0,n.mode=CCe;case CCe:for(;n.have<n.nlen+n.ndist;){for(;v=n.lencode[u&(1<<n.lenbits)-1],m=v>>>24,b=v>>>16&255,E=v&65535,!(m<=d);){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(E<16)u>>>=m,d-=m,n.lens[n.have++]=E;else{if(E===16){for(D=m+2;d<D;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(u>>>=m,d-=m,n.have===0){t.msg="invalid bit length repeat",n.mode=_c;break}A=n.lens[n.have-1],h=3+(u&3),u>>>=2,d-=2}else if(E===17){for(D=m+3;d<D;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}u>>>=m,d-=m,A=0,h=3+(u&7),u>>>=3,d-=3}else{for(D=m+7;d<D;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}u>>>=m,d-=m,A=0,h=11+(u&127),u>>>=7,d-=7}if(n.have+h>n.nlen+n.ndist){t.msg="invalid bit length repeat",n.mode=_c;break}for(;h--;)n.lens[n.have++]=A}}if(n.mode===_c)break;if(n.lens[256]===0){t.msg="invalid code -- missing end-of-block",n.mode=_c;break}if(n.lenbits=9,N={bits:n.lenbits},P=kI(Kze,n.lens,0,n.nlen,n.lencode,0,n.work,N),n.lenbits=N.bits,P){t.msg="invalid literal/lengths set",n.mode=_c;break}if(n.distbits=6,n.distcode=n.distdyn,N={bits:n.distbits},P=kI(Jze,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,N),n.distbits=N.bits,P){t.msg="invalid distances set",n.mode=_c;break}if(n.mode=cL,e===lL)break e;case cL:n.mode=uL;case uL:if(s>=6&&l>=258){t.next_out=o,t.avail_out=l,t.next_in=a,t.avail_in=s,n.hold=u,n.bits=d,zrn(t,p),o=t.next_out,i=t.output,l=t.avail_out,a=t.next_in,r=t.input,s=t.avail_in,u=n.hold,d=n.bits,n.mode===Ev&&(n.back=-1);break}for(n.back=0;v=n.lencode[u&(1<<n.lenbits)-1],m=v>>>24,b=v>>>16&255,E=v&65535,!(m<=d);){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(b&&!(b&240)){for(C=m,x=b,_=E;v=n.lencode[_+((u&(1<<C+x)-1)>>C)],m=v>>>24,b=v>>>16&255,E=v&65535,!(C+m<=d);){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}u>>>=C,d-=C,n.back+=C}if(u>>>=m,d-=m,n.back+=m,n.length=E,b===0){n.mode=ICe;break}if(b&32){n.back=-1,n.mode=Ev;break}if(b&64){t.msg="invalid literal/length code",n.mode=_c;break}n.extra=b&15,n.mode=xCe;case xCe:if(n.extra){for(D=n.extra;d<D;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}n.length+=u&(1<<n.extra)-1,u>>>=n.extra,d-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=_Ce;case _Ce:for(;v=n.distcode[u&(1<<n.distbits)-1],m=v>>>24,b=v>>>16&255,E=v&65535,!(m<=d);){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(!(b&240)){for(C=m,x=b,_=E;v=n.distcode[_+((u&(1<<C+x)-1)>>C)],m=v>>>24,b=v>>>16&255,E=v&65535,!(C+m<=d);){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}u>>>=C,d-=C,n.back+=C}if(u>>>=m,d-=m,n.back+=m,b&64){t.msg="invalid distance code",n.mode=_c;break}n.offset=E,n.extra=b&15,n.mode=wCe;case wCe:if(n.extra){for(D=n.extra;d<D;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}n.offset+=u&(1<<n.extra)-1,u>>>=n.extra,d-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg="invalid distance too far back",n.mode=_c;break}n.mode=TCe;case TCe:if(l===0)break e;if(h=p-l,n.offset>h){if(h=n.offset-h,h>n.whave&&n.sane){t.msg="invalid distance too far back",n.mode=_c;break}h>n.wnext?(h-=n.wnext,g=n.wsize-h):g=n.wnext-h,h>n.length&&(h=n.length),y=n.window}else y=i,g=o-n.offset,h=n.length;h>l&&(h=l),l-=h,n.length-=h;do i[o++]=y[g++];while(--h);n.length===0&&(n.mode=uL);break;case ICe:if(l===0)break e;i[o++]=n.length,l--,n.mode=uL;break;case pH:if(n.wrap){for(;d<32;){if(s===0)break e;s--,u|=r[a++]<<d,d+=8}if(p-=l,t.total_out+=p,n.total+=p,n.wrap&4&&p&&(t.adler=n.check=n.flags?Cd(n.check,i,p,o-p):r6(n.check,i,p,o-p)),p=l,n.wrap&4&&(n.flags?u:OCe(u))!==n.check){t.msg="incorrect data check",n.mode=_c;break}u=0,d=0}n.mode=ACe;case ACe:if(n.wrap&&n.flags){for(;d<32;){if(s===0)break e;s--,u+=r[a++]<<d,d+=8}if(n.wrap&4&&u!==(n.total&4294967295)){t.msg="incorrect length check",n.mode=_c;break}u=0,d=0}n.mode=RCe;case RCe:P=Yrn;break e;case _c:P=Qze;break e;case tHe:return eHe;case nHe:default:return _g}return t.next_out=o,t.avail_out=l,t.next_in=a,t.avail_in=s,n.hold=u,n.bits=d,(n.wsize||p!==t.avail_out&&n.mode<_c&&(n.mode<pH||e!==sCe))&&sHe(t,t.output,t.next_out,p-t.avail_out),f-=t.avail_in,p-=t.avail_out,t.total_in+=f,t.total_out+=p,n.total+=p,n.wrap&4&&p&&(t.adler=n.check=n.flags?Cd(n.check,i,p,t.next_out-p):r6(n.check,i,p,t.next_out-p)),t.data_type=n.bits+(n.last?64:0)+(n.mode===Ev?128:0)+(n.mode===cL||n.mode===fH?256:0),(f===0&&p===0||e===sCe)&&P===MS&&(P=Jrn),P},sin=t=>{if(nC(t))return _g;let e=t.state;return e.window&&(e.window=null),t.state=null,MS},lin=(t,e)=>{if(nC(t))return _g;const n=t.state;return n.wrap&2?(n.head=e,e.done=!1,MS):_g},cin=(t,e)=>{const n=e.length;let r,i,a;return nC(t)||(r=t.state,r.wrap!==0&&r.mode!==U7)?_g:r.mode===U7&&(i=1,i=r6(i,e,n,0),i!==r.check)?Qze:(a=sHe(t,e,n,n),a?(r.mode=tHe,eHe):(r.havedict=1,MS))};var uin=iHe,din=aHe,fin=rHe,pin=iin,hin=oHe,gin=oin,min=sin,vin=lin,yin=cin,bin="pako inflate (from Nodeca project)",kv={inflateReset:uin,inflateReset2:din,inflateResetKeep:fin,inflateInit:pin,inflateInit2:hin,inflate:gin,inflateEnd:min,inflateGetHeader:vin,inflateSetDictionary:yin,inflateInfo:bin};function Ein(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var Sin=Ein;const lHe=Object.prototype.toString,{Z_NO_FLUSH:Cin,Z_FINISH:xin,Z_OK:o6,Z_STREAM_END:mH,Z_NEED_DICT:vH,Z_STREAM_ERROR:_in,Z_DATA_ERROR:NCe,Z_MEM_ERROR:win}=p8;function g8(t){this.options=Ok.assign({chunkSize:1024*64,windowBits:15,to:""},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15||(e.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new qze,this.strm.avail_out=0;let n=kv.inflateInit2(this.strm,e.windowBits);if(n!==o6)throw new Error(K_[n]);if(this.header=new Sin,kv.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=a6.string2buf(e.dictionary):lHe.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(n=kv.inflateSetDictionary(this.strm,e.dictionary),n!==o6)))throw new Error(K_[n])}g8.prototype.push=function(t,e){const n=this.strm,r=this.options.chunkSize,i=this.options.dictionary;let a,o,s;if(this.ended)return!1;for(e===~~e?o=e:o=e===!0?xin:Cin,lHe.call(t)==="[object ArrayBuffer]"?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;){for(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),a=kv.inflate(n,o),a===vH&&i&&(a=kv.inflateSetDictionary(n,i),a===o6?a=kv.inflate(n,o):a===NCe&&(a=vH));n.avail_in>0&&a===mH&&n.state.wrap>0&&t[n.next_in]!==0;)kv.inflateReset(n),a=kv.inflate(n,o);switch(a){case _in:case NCe:case vH:case win:return this.onEnd(a),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(n.avail_out===0||a===mH))if(this.options.to==="string"){let l=a6.utf8border(n.output,n.next_out),u=n.next_out-l,d=a6.buf2string(n.output,l);n.next_out=u,n.avail_out=r-u,u&&n.output.set(n.output.subarray(l,l+u),0),this.onData(d)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(!(a===o6&&s===0)){if(a===mH)return a=kv.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(n.avail_in===0)break}}return!0};g8.prototype.onData=function(t){this.chunks.push(t)};g8.prototype.onEnd=function(t){t===o6&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Ok.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Jae(t,e){const n=new g8(e);if(n.push(t),n.err)throw n.msg||K_[n.err];return n.result}function Tin(t,e){return e=e||{},e.raw=!0,Jae(t,e)}var Iin=g8,Ain=Jae,Rin=Tin,Oin=Jae,Lin=p8,Nin={Inflate:Iin,inflate:Ain,inflateRaw:Rin,ungzip:Oin,constants:Lin};const{Inflate:U4n,inflate:Min,inflateRaw:F4n,ungzip:B4n}=Nin;var cHe=Min;function Pin(t){const e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),n=cHe(e);return new DataView(n.buffer,n.byteOffset,n.byteLength)}const Din={ignoreImageData:!1};class uHe extends Ak{constructor(e){super(e),this._nextIFD=0}get isMultiPage(){let e=0;for(this.decodeHeader();this._nextIFD;)if(e++,this.decodeIFD({ignoreImageData:!0},!0),e===2)return!0;if(e===1)return!1;throw Av("ifdCount",e)}get pageCount(){let e=0;for(this.decodeHeader();this._nextIFD;)e++,this.decodeIFD({ignoreImageData:!0},!0);if(e>0)return e;throw Av("ifdCount",e)}decode(e={}){const{pages:n}=e;$in(n);const r=n?Math.max(...n):1/0;e={...Din,...e};const i=[];this.decodeHeader();let a=0;for(;this._nextIFD;){if(n){if(n.includes(a)?i.push(this.decodeIFD(e,!0)):this.decodeIFD({ignoreImageData:!0},!0),a===r)break}else i.push(this.decodeIFD(e,!0));a++}if(a<r&&r!==1/0)throw new RangeError(`Index ${r} is out of bounds. The stack only contains ${a} images.`);return i}decodeHeader(){const e=this.readUint16();if(e===18761)this.setLittleEndian();else if(e===19789)this.setBigEndian();else throw new Error(`invalid byte order: 0x${e.toString(16)}`);if(this.readUint16()!==42)throw new Error("not a TIFF file");this._nextIFD=this.readUint32()}decodeIFD(e,n){this.seek(this._nextIFD);let r;if(n)r=new WSe;else{if(!e.kind)throw new Error("kind is missing");r=new Tze(e.kind)}const i=this.readUint16();for(let a=0;a<i;a++)this.decodeIFDEntry(r);if(!e.ignoreImageData){if(!(r instanceof WSe))throw new Error("must be a tiff ifd");this.decodeImageData(r)}return this._nextIFD=this.readUint32(),r}decodeIFDEntry(e){const n=this.offset,r=this.readUint16(),i=this.readUint16(),a=this.readUint32();if(i<1||i>12){this.skip(4);return}ztn(i,a)>4&&this.seek(this.readUint32());const s=Htn(this,i,a);if(e.fields.set(r,s),r===34665||r===34853){const l=this.offset;let u="exif";r===34665?u="exif":r===34853&&(u="gps"),this._nextIFD=s,e[u]=this.decodeIFD({kind:u,ignoreImageData:!0},!1),this.offset=l}this.seek(n),this.skip(12)}decodeImageData(e){const n=e.orientation;if(n&&n!==1)throw Av("orientation",n);switch(e.type){case 0:case 1:case 2:case 3:this.readStripData(e);break;default:throw Av("image type",e.type)}if(this.applyPredictor(e),this.convertAlpha(e),e.type===0){const i=2**e.bitsPerSample-1;for(let a=0;a<e.data.length;a++)e.data[a]=i-e.data[a]}}readStripData(e){const n=e.width,r=e.height,i=e.bitsPerSample,a=e.sampleFormat,o=n*r*e.samplesPerPixel,s=kin(o,i,a),u=e.rowsPerStrip*n*e.samplesPerPixel,d=e.stripOffsets,f=e.stripByteCounts||ktn(e);let p=o,h=0;for(let g=0;g<d.length;g++){const y=new DataView(this.buffer,this.byteOffset+d[g],f[g]),v=p>u?u:p;p-=v;let m=y;switch(e.compression){case 1:break;case 5:{m=ann(y);break}case 8:{m=Pin(y);break}case 2:throw Av("Compression","CCITT Group 3");case 32773:throw Av("Compression","PackBits");default:throw Av("Compression",e.compression)}h=this.fillUncompressed(i,a,s,m,h,v)}e.data=s}fillUncompressed(e,n,r,i,a,o){if(e===8)return Uin(r,i,a,o);if(e===16)return Fin(r,i,a,o,this.isLittleEndian());if(e===32&&n===3)return Bin(r,i,a,o,this.isLittleEndian());throw Av("bitDepth",e)}applyPredictor(e){const n=e.bitsPerSample;switch(e.predictor){case 1:break;case 2:{if(n===8)Utn(e.data,e.width,e.components);else if(n===16)Ftn(e.data,e.width,e.components);else throw new Error(`Horizontal differencing is only supported for images with a bit depth of ${n}`);break}default:throw new Error(`invalid predictor: ${e.predictor}`)}}convertAlpha(e){if(e.alpha&&e.associatedAlpha){const{data:n,components:r,maxSampleValue:i}=e;for(let a=0;a<n.length;a+=r){const o=n[a+r-1];for(let s=0;s<r-1;s++)n[a+s]=Math.round(n[a+s]*i/o)}}}}function kin(t,e,n){if(e===8)return new Uint8Array(t);if(e===16)return new Uint16Array(t);if(e===32&&n===3)return new Float32Array(t);throw Av("bit depth / sample format",`${e} / ${n}`)}function Uin(t,e,n,r){for(let i=0;i<r;i++)t[n++]=e.getUint8(i);return n}function Fin(t,e,n,r,i){for(let a=0;a<r*2;a+=2)t[n++]=e.getUint16(a,i);return n}function Bin(t,e,n,r,i){for(let a=0;a<r*4;a+=4)t[n++]=e.getFloat32(a,i);return n}function Av(t,e){return new Error(`Unsupported ${t}: ${e}`)}function $in(t){if(t){for(const e of t)if(e<0||!Number.isInteger(e))throw new RangeError(`Index ${e} is invalid. Must be a positive integer.`)}}function yH(t,e){return new uHe(t).decode(e)}function MCe(t){return new uHe(t).pageCount}function ef(t){return(e,...n)=>Vin(t,e,n)}function eT(t,e){return ef(dHe(t,e).get)}const{apply:Vin,construct:$4n,defineProperty:V4n,get:z4n,getOwnPropertyDescriptor:dHe,getPrototypeOf:Qae,has:H4n,ownKeys:zin,set:G4n,setPrototypeOf:j4n}=Reflect,{iterator:m8,species:W4n,toStringTag:Hin,for:X4n}=Symbol,Gin=Object,{create:eoe,defineProperty:jin,freeze:Z4n,is:q4n}=Gin,Win=Array,Xin=Win.prototype,fHe=Xin[m8],Zin=ef(fHe),pHe=ArrayBuffer,qin=pHe.prototype;eT(qin,"byteLength");const PCe=typeof SharedArrayBuffer<"u"?SharedArrayBuffer:null;PCe&&eT(PCe.prototype,"byteLength");const hHe=Qae(Uint8Array);hHe.from;const fp=hHe.prototype;fp[m8];ef(fp.keys);ef(fp.values);ef(fp.entries);ef(fp.set);ef(fp.reverse);ef(fp.fill);ef(fp.copyWithin);ef(fp.sort);ef(fp.slice);ef(fp.subarray);eT(fp,"buffer");eT(fp,"byteOffset");eT(fp,"length");eT(fp,Hin);const Yin=Uint8Array,gHe=Uint16Array,toe=Uint32Array,Kin=Float32Array,s6=Qae([][m8]()),mHe=ef(s6.next),Jin=ef(function*(){}().next),Qin=Qae(s6),ean=DataView.prototype,tan=ef(ean.getUint16),noe=WeakMap,vHe=noe.prototype,yHe=ef(vHe.get),nan=ef(vHe.set),bHe=new noe,ran=eoe(null,{next:{value:function(){const e=yHe(bHe,this);return mHe(e)}},[m8]:{value:function(){return this}}});function ian(t){if(t[m8]===fHe&&s6.next===mHe)return t;const e=eoe(ran);return nan(bHe,e,Zin(t)),e}const aan=new noe,oan=eoe(Qin,{next:{value:function(){const e=yHe(aan,this);return Jin(e)},writable:!0,configurable:!0}});for(const t of zin(s6))t!=="next"&&jin(oan,t,dHe(s6,t));const EHe=new pHe(4),san=new Kin(EHe),lan=new toe(EHe),s0=new gHe(512),l0=new Yin(512);for(let t=0;t<256;++t){const e=t-127;e<-24?(s0[t]=0,s0[t|256]=32768,l0[t]=24,l0[t|256]=24):e<-14?(s0[t]=1024>>-e-14,s0[t|256]=1024>>-e-14|32768,l0[t]=-e-1,l0[t|256]=-e-1):e<=15?(s0[t]=e+15<<10,s0[t|256]=e+15<<10|32768,l0[t]=13,l0[t|256]=13):e<128?(s0[t]=31744,s0[t|256]=64512,l0[t]=24,l0[t|256]=24):(s0[t]=31744,s0[t|256]=64512,l0[t]=13,l0[t|256]=13)}const roe=new toe(2048);for(let t=1;t<1024;++t){let e=t<<13,n=0;for(;!(e&8388608);)e<<=1,n-=8388608;e&=-8388609,n+=947912704,roe[t]=e|n}for(let t=1024;t<2048;++t)roe[t]=939524096+(t-1024<<13);const tT=new toe(64);for(let t=1;t<31;++t)tT[t]=t<<23;tT[31]=1199570944;tT[32]=2147483648;for(let t=33;t<63;++t)tT[t]=2147483648+(t-32<<23);tT[63]=3347054592;const SHe=new gHe(64);for(let t=1;t<64;++t)t!==32&&(SHe[t]=1024);function can(t){const e=t>>10;return lan[0]=roe[SHe[e]+(t&1023)]+tT[e],san[0]}function CHe(t,e,...n){return can(tan(t,e,...ian(n)))}var u_={},uan={get exports(){return u_},set exports(t){u_=t}};function xHe(t,e,n){const r=n&&n.debug||!1;r&&console.log("[xml-utils] getting "+e+" in "+t);const i=typeof t=="object"?t.outer:t,a=i.slice(0,i.indexOf(">")+1),o=['"',"'"];for(let s=0;s<o.length;s++){const l=o[s],u=e+"\\="+l+"([^"+l+"]*)"+l;r&&console.log("[xml-utils] pattern:",u);const f=new RegExp(u).exec(a);if(r&&console.log("[xml-utils] match:",f),f)return f[1]}}uan.exports=xHe;u_.default=xHe;var F7={},dan={get exports(){return F7},set exports(t){F7=t}},B7={},fan={get exports(){return B7},set exports(t){B7=t}},$7={},pan={get exports(){return $7},set exports(t){$7=t}};function _He(t,e,n){const i=new RegExp(e).exec(t.slice(n));return i?n+i.index:-1}pan.exports=_He;$7.default=_He;var V7={},han={get exports(){return V7},set exports(t){V7=t}};function wHe(t,e,n){const i=new RegExp(e).exec(t.slice(n));return i?n+i.index+i[0].length-1:-1}han.exports=wHe;V7.default=wHe;var z7={},gan={get exports(){return z7},set exports(t){z7=t}};function THe(t,e){const n=new RegExp(e,"g"),r=t.match(n);return r?r.length:0}gan.exports=THe;z7.default=THe;const man=$7,bH=V7,DCe=z7;function IHe(t,e,n){const r=n&&n.debug||!1,i=!(n&&typeof n.nested===!1),a=n&&n.startIndex||0;r&&console.log("[xml-utils] starting findTagByName with",e," and ",n);const o=man(t,`<${e}[
|
|
4500
4500
|
>/]`,a);if(r&&console.log("[xml-utils] start:",o),o===-1)return;const s=t.slice(o+e.length);let l=bH(s,"^[^<]*[ /]>",0);const u=l!==-1&&s[l-1]==="/";if(r&&console.log("[xml-utils] selfClosing:",u),u===!1)if(i){let h=0,g=1,y=0;for(;(l=bH(s,"[ /]"+e+">",h))!==-1;){const v=s.substring(h,l+1);if(g+=DCe(v,"<"+e+`[
|
|
4501
|
-
>]`),y+=DCe(v,"</"+e+">"),y>=g)break;h=l}}else l=bH(s,"[ /]"+e+">",0);const d=o+e.length+l+1;if(r&&console.log("[xml-utils] end:",d),d===-1)return;const f=t.slice(o,d);let p;return u?p=null:p=f.slice(f.indexOf(">")+1,f.lastIndexOf("<")),{inner:p,outer:f,start:o,end:d}}fan.exports=IHe;B7.default=IHe;const van=B7;function AHe(t,e,n){const r=[],i=n&&n.debug||!1,a=n&&typeof n.nested=="boolean"?n.nested:!0;let o=n&&n.startIndex||0,s;for(;s=van(t,e,{debug:i,startIndex:o});)a?o=s.start+1+e.length:o=s.end,r.push(s);return i&&console.log("findTagsByName found",r.length,"tags"),r}dan.exports=AHe;F7.default=AHe;const UI={315:"Artist",258:"BitsPerSample",265:"CellLength",264:"CellWidth",320:"ColorMap",259:"Compression",33432:"Copyright",306:"DateTime",338:"ExtraSamples",266:"FillOrder",289:"FreeByteCounts",288:"FreeOffsets",291:"GrayResponseCurve",290:"GrayResponseUnit",316:"HostComputer",270:"ImageDescription",257:"ImageLength",256:"ImageWidth",271:"Make",281:"MaxSampleValue",280:"MinSampleValue",272:"Model",254:"NewSubfileType",274:"Orientation",262:"PhotometricInterpretation",284:"PlanarConfiguration",296:"ResolutionUnit",278:"RowsPerStrip",277:"SamplesPerPixel",305:"Software",279:"StripByteCounts",273:"StripOffsets",255:"SubfileType",263:"Threshholding",282:"XResolution",283:"YResolution",326:"BadFaxLines",327:"CleanFaxData",343:"ClipPath",328:"ConsecutiveBadFaxLines",433:"Decode",434:"DefaultImageColor",269:"DocumentName",336:"DotRange",321:"HalftoneHints",346:"Indexed",347:"JPEGTables",285:"PageName",297:"PageNumber",317:"Predictor",319:"PrimaryChromaticities",532:"ReferenceBlackWhite",339:"SampleFormat",340:"SMinSampleValue",341:"SMaxSampleValue",559:"StripRowCounts",330:"SubIFDs",292:"T4Options",293:"T6Options",325:"TileByteCounts",323:"TileLength",324:"TileOffsets",322:"TileWidth",301:"TransferFunction",318:"WhitePoint",344:"XClipPathUnits",286:"XPosition",529:"YCbCrCoefficients",531:"YCbCrPositioning",530:"YCbCrSubSampling",345:"YClipPathUnits",287:"YPosition",37378:"ApertureValue",40961:"ColorSpace",36868:"DateTimeDigitized",36867:"DateTimeOriginal",34665:"Exif IFD",36864:"ExifVersion",33434:"ExposureTime",41728:"FileSource",37385:"Flash",40960:"FlashpixVersion",33437:"FNumber",42016:"ImageUniqueID",37384:"LightSource",37500:"MakerNote",37377:"ShutterSpeedValue",37510:"UserComment",33723:"IPTC",34675:"ICC Profile",700:"XMP",42112:"GDAL_METADATA",42113:"GDAL_NODATA",34377:"Photoshop",33550:"ModelPixelScale",33922:"ModelTiepoint",34264:"ModelTransformation",34735:"GeoKeyDirectory",34736:"GeoDoubleParams",34737:"GeoAsciiParams",50674:"LercParameters"},m0={};for(const t in UI)UI.hasOwnProperty(t)&&(m0[UI[t]]=parseInt(t,10));const yan=[m0.BitsPerSample,m0.ExtraSamples,m0.SampleFormat,m0.StripByteCounts,m0.StripOffsets,m0.StripRowCounts,m0.TileByteCounts,m0.TileOffsets,m0.SubIFDs],EH={1:"BYTE",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",6:"SBYTE",7:"UNDEFINED",8:"SSHORT",9:"SLONG",10:"SRATIONAL",11:"FLOAT",12:"DOUBLE",13:"IFD",16:"LONG8",17:"SLONG8",18:"IFD8"},No={};for(const t in EH)EH.hasOwnProperty(t)&&(No[EH[t]]=parseInt(t,10));const Yp={WhiteIsZero:0,BlackIsZero:1,RGB:2,Palette:3,TransparencyMask:4,CMYK:5,YCbCr:6,CIELab:8,ICCLab:9},ban={Unspecified:0,Assocalpha:1,Unassalpha:2},Ean={Version:0,AddCompression:1},San={None:0,Deflate:1,Zstandard:2},Can={1024:"GTModelTypeGeoKey",1025:"GTRasterTypeGeoKey",1026:"GTCitationGeoKey",2048:"GeographicTypeGeoKey",2049:"GeogCitationGeoKey",2050:"GeogGeodeticDatumGeoKey",2051:"GeogPrimeMeridianGeoKey",2052:"GeogLinearUnitsGeoKey",2053:"GeogLinearUnitSizeGeoKey",2054:"GeogAngularUnitsGeoKey",2055:"GeogAngularUnitSizeGeoKey",2056:"GeogEllipsoidGeoKey",2057:"GeogSemiMajorAxisGeoKey",2058:"GeogSemiMinorAxisGeoKey",2059:"GeogInvFlatteningGeoKey",2060:"GeogAzimuthUnitsGeoKey",2061:"GeogPrimeMeridianLongGeoKey",2062:"GeogTOWGS84GeoKey",3072:"ProjectedCSTypeGeoKey",3073:"PCSCitationGeoKey",3074:"ProjectionGeoKey",3075:"ProjCoordTransGeoKey",3076:"ProjLinearUnitsGeoKey",3077:"ProjLinearUnitSizeGeoKey",3078:"ProjStdParallel1GeoKey",3079:"ProjStdParallel2GeoKey",3080:"ProjNatOriginLongGeoKey",3081:"ProjNatOriginLatGeoKey",3082:"ProjFalseEastingGeoKey",3083:"ProjFalseNorthingGeoKey",3084:"ProjFalseOriginLongGeoKey",3085:"ProjFalseOriginLatGeoKey",3086:"ProjFalseOriginEastingGeoKey",3087:"ProjFalseOriginNorthingGeoKey",3088:"ProjCenterLongGeoKey",3089:"ProjCenterLatGeoKey",3090:"ProjCenterEastingGeoKey",3091:"ProjCenterNorthingGeoKey",3092:"ProjScaleAtNatOriginGeoKey",3093:"ProjScaleAtCenterGeoKey",3094:"ProjAzimuthAngleGeoKey",3095:"ProjStraightVertPoleLongGeoKey",3096:"ProjRectifiedGridAngleGeoKey",4096:"VerticalCSTypeGeoKey",4097:"VerticalCitationGeoKey",4098:"VerticalDatumGeoKey",4099:"VerticalUnitsGeoKey"};function xan(t,e){const{width:n,height:r}=t,i=new Uint8Array(n*r*3);let a;for(let o=0,s=0;o<t.length;++o,s+=3)a=256-t[o]/e*256,i[s]=a,i[s+1]=a,i[s+2]=a;return i}function _an(t,e){const{width:n,height:r}=t,i=new Uint8Array(n*r*3);let a;for(let o=0,s=0;o<t.length;++o,s+=3)a=t[o]/e*256,i[s]=a,i[s+1]=a,i[s+2]=a;return i}function wan(t,e){const{width:n,height:r}=t,i=new Uint8Array(n*r*3),a=e.length/3,o=e.length/3*2;for(let s=0,l=0;s<t.length;++s,l+=3){const u=t[s];i[l]=e[u]/65536*256,i[l+1]=e[u+a]/65536*256,i[l+2]=e[u+o]/65536*256}return i}function Tan(t){const{width:e,height:n}=t,r=new Uint8Array(e*n*3);for(let i=0,a=0;i<t.length;i+=4,a+=3){const o=t[i],s=t[i+1],l=t[i+2],u=t[i+3];r[a]=255*((255-o)/256)*((255-u)/256),r[a+1]=255*((255-s)/256)*((255-u)/256),r[a+2]=255*((255-l)/256)*((255-u)/256)}return r}function Ian(t){const{width:e,height:n}=t,r=new Uint8ClampedArray(e*n*3);for(let i=0,a=0;i<t.length;i+=3,a+=3){const o=t[i],s=t[i+1],l=t[i+2];r[a]=o+1.402*(l-128),r[a+1]=o-.34414*(s-128)-.71414*(l-128),r[a+2]=o+1.772*(s-128)}return r}const Aan=.95047,Ran=1,Oan=1.08883;function Lan(t){const{width:e,height:n}=t,r=new Uint8Array(e*n*3);for(let i=0,a=0;i<t.length;i+=3,a+=3){const o=t[i+0],s=t[i+1]<<24>>24,l=t[i+2]<<24>>24;let u=(o+16)/116,d=s/500+u,f=u-l/200,p,h,g;d=Aan*(d*d*d>.008856?d*d*d:(d-16/116)/7.787),u=Ran*(u*u*u>.008856?u*u*u:(u-16/116)/7.787),f=Oan*(f*f*f>.008856?f*f*f:(f-16/116)/7.787),p=d*3.2406+u*-1.5372+f*-.4986,h=d*-.9689+u*1.8758+f*.0415,g=d*.0557+u*-.204+f*1.057,p=p>.0031308?1.055*p**(1/2.4)-.055:12.92*p,h=h>.0031308?1.055*h**(1/2.4)-.055:12.92*h,g=g>.0031308?1.055*g**(1/2.4)-.055:12.92*g,r[a]=Math.max(0,Math.min(1,p))*255,r[a+1]=Math.max(0,Math.min(1,h))*255,r[a+2]=Math.max(0,Math.min(1,g))*255}return r}const RHe=new Map;function Mb(t,e){Array.isArray(t)||(t=[t]),t.forEach(n=>RHe.set(n,e))}async function Nan(t){const e=RHe.get(t.Compression);if(!e)throw new Error(`Unknown compression method identifier: ${t.Compression}`);const n=await e();return new n(t)}Mb([void 0,1],()=>Promise.resolve().then(()=>require("./raw-9c0f4034.js")).then(t=>t.default));Mb(5,()=>Promise.resolve().then(()=>require("./lzw-f00e8c8c.js")).then(t=>t.default));Mb(6,()=>{throw new Error("old style JPEG compression is not supported.")});Mb(7,()=>Promise.resolve().then(()=>require("./jpeg-f3c7cefc.js")).then(t=>t.default));Mb([8,32946],()=>Promise.resolve().then(()=>require("./deflate-fe3da770.js")).then(t=>t.default));Mb(32773,()=>Promise.resolve().then(()=>require("./packbits-58fd9c05.js")).then(t=>t.default));Mb(34887,()=>Promise.resolve().then(()=>require("./lerc-1796d4d9.js")).then(async t=>(await t.zstd.init(),t)).then(t=>t.default));Mb(50001,()=>Promise.resolve().then(()=>require("./webimage-bc81928d.js")).then(t=>t.default));function Nk(t,e,n,r=1){return new(Object.getPrototypeOf(t)).constructor(e*n*r)}function Man(t,e,n,r,i){const a=e/r,o=n/i;return t.map(s=>{const l=Nk(s,r,i);for(let u=0;u<i;++u){const d=Math.min(Math.round(o*u),n-1);for(let f=0;f<r;++f){const p=Math.min(Math.round(a*f),e-1),h=s[d*e+p];l[u*r+f]=h}}return l})}function d_(t,e,n){return(1-n)*t+n*e}function Pan(t,e,n,r,i){const a=e/r,o=n/i;return t.map(s=>{const l=Nk(s,r,i);for(let u=0;u<i;++u){const d=o*u,f=Math.floor(d),p=Math.min(Math.ceil(d),n-1);for(let h=0;h<r;++h){const g=a*h,y=g%1,v=Math.floor(g),m=Math.min(Math.ceil(g),e-1),b=s[f*e+v],E=s[f*e+m],C=s[p*e+v],x=s[p*e+m],_=d_(d_(b,E,y),d_(C,x,y),d%1);l[u*r+h]=_}}return l})}function Dan(t,e,n,r,i,a="nearest"){switch(a.toLowerCase()){case"nearest":return Man(t,e,n,r,i);case"bilinear":case"linear":return Pan(t,e,n,r,i);default:throw new Error(`Unsupported resampling method: '${a}'`)}}function kan(t,e,n,r,i,a){const o=e/r,s=n/i,l=Nk(t,r,i,a);for(let u=0;u<i;++u){const d=Math.min(Math.round(s*u),n-1);for(let f=0;f<r;++f){const p=Math.min(Math.round(o*f),e-1);for(let h=0;h<a;++h){const g=t[d*e*a+p*a+h];l[u*r*a+f*a+h]=g}}}return l}function Uan(t,e,n,r,i,a){const o=e/r,s=n/i,l=Nk(t,r,i,a);for(let u=0;u<i;++u){const d=s*u,f=Math.floor(d),p=Math.min(Math.ceil(d),n-1);for(let h=0;h<r;++h){const g=o*h,y=g%1,v=Math.floor(g),m=Math.min(Math.ceil(g),e-1);for(let b=0;b<a;++b){const E=t[f*e*a+v*a+b],C=t[f*e*a+m*a+b],x=t[p*e*a+v*a+b],_=t[p*e*a+m*a+b],A=d_(d_(E,C,y),d_(x,_,y),d%1);l[u*r*a+h*a+b]=A}}}return l}function Fan(t,e,n,r,i,a,o="nearest"){switch(o.toLowerCase()){case"nearest":return kan(t,e,n,r,i,a);case"bilinear":case"linear":return Uan(t,e,n,r,i,a);default:throw new Error(`Unsupported resampling method: '${o}'`)}}function Ban(t,e,n){let r=0;for(let i=e;i<n;++i)r+=t[i];return r}function iee(t,e,n){switch(t){case 1:if(e<=8)return new Uint8Array(n);if(e<=16)return new Uint16Array(n);if(e<=32)return new Uint32Array(n);break;case 2:if(e===8)return new Int8Array(n);if(e===16)return new Int16Array(n);if(e===32)return new Int32Array(n);break;case 3:switch(e){case 16:case 32:return new Float32Array(n);case 64:return new Float64Array(n)}break}throw Error("Unsupported data format/bitsPerSample")}function $an(t,e){return(t===1||t===2)&&e<=32&&e%8===0?!1:!(t===3&&(e===16||e===32||e===64))}function Van(t,e,n,r,i,a,o){const s=new DataView(t),l=n===2?o*a:o*a*r,u=n===2?1:r,d=iee(e,i,l),f=parseInt("1".repeat(i),2);if(e===1){let p;n===1?p=r*i:p=i;let h=a*p;h&7&&(h=h+7&-8);for(let g=0;g<o;++g){const y=g*h;for(let v=0;v<a;++v){const m=y+v*u*i;for(let b=0;b<u;++b){const E=m+b*i,C=(g*a+v)*u+b,x=Math.floor(E/8),_=E%8;if(_+i<=8)d[C]=s.getUint8(x)>>8-i-_&f;else if(_+i<=16)d[C]=s.getUint16(x)>>16-i-_&f;else if(_+i<=24){const A=s.getUint16(x)<<8|s.getUint8(x+2);d[C]=A>>24-i-_&f}else d[C]=s.getUint32(x)>>32-i-_&f}}}}return d.buffer}class zan{constructor(e,n,r,i,a,o){this.fileDirectory=e,this.geoKeys=n,this.dataView=r,this.littleEndian=i,this.tiles=a?{}:null,this.isTiled=!e.StripOffsets;const s=e.PlanarConfiguration;if(this.planarConfiguration=typeof s>"u"?1:s,this.planarConfiguration!==1&&this.planarConfiguration!==2)throw new Error("Invalid planar configuration.");this.source=o}getFileDirectory(){return this.fileDirectory}getGeoKeys(){return this.geoKeys}getWidth(){return this.fileDirectory.ImageWidth}getHeight(){return this.fileDirectory.ImageLength}getSamplesPerPixel(){return typeof this.fileDirectory.SamplesPerPixel<"u"?this.fileDirectory.SamplesPerPixel:1}getTileWidth(){return this.isTiled?this.fileDirectory.TileWidth:this.getWidth()}getTileHeight(){return this.isTiled?this.fileDirectory.TileLength:typeof this.fileDirectory.RowsPerStrip<"u"?Math.min(this.fileDirectory.RowsPerStrip,this.getHeight()):this.getHeight()}getBlockWidth(){return this.getTileWidth()}getBlockHeight(e){return this.isTiled||(e+1)*this.getTileHeight()<=this.getHeight()?this.getTileHeight():this.getHeight()-e*this.getTileHeight()}getBytesPerPixel(){let e=0;for(let n=0;n<this.fileDirectory.BitsPerSample.length;++n)e+=this.getSampleByteSize(n);return e}getSampleByteSize(e){if(e>=this.fileDirectory.BitsPerSample.length)throw new RangeError(`Sample index ${e} is out of range.`);return Math.ceil(this.fileDirectory.BitsPerSample[e]/8)}getReaderForSample(e){const n=this.fileDirectory.SampleFormat?this.fileDirectory.SampleFormat[e]:1,r=this.fileDirectory.BitsPerSample[e];switch(n){case 1:if(r<=8)return DataView.prototype.getUint8;if(r<=16)return DataView.prototype.getUint16;if(r<=32)return DataView.prototype.getUint32;break;case 2:if(r<=8)return DataView.prototype.getInt8;if(r<=16)return DataView.prototype.getInt16;if(r<=32)return DataView.prototype.getInt32;break;case 3:switch(r){case 16:return function(i,a){return CHe(this,i,a)};case 32:return DataView.prototype.getFloat32;case 64:return DataView.prototype.getFloat64}break}throw Error("Unsupported data format/bitsPerSample")}getSampleFormat(e=0){return this.fileDirectory.SampleFormat?this.fileDirectory.SampleFormat[e]:1}getBitsPerSample(e=0){return this.fileDirectory.BitsPerSample[e]}getArrayForSample(e,n){const r=this.getSampleFormat(e),i=this.getBitsPerSample(e);return iee(r,i,n)}async getTileOrStrip(e,n,r,i,a){const o=Math.ceil(this.getWidth()/this.getTileWidth()),s=Math.ceil(this.getHeight()/this.getTileHeight());let l;const{tiles:u}=this;this.planarConfiguration===1?l=n*o+e:this.planarConfiguration===2&&(l=r*o*s+n*o+e);let d,f;this.isTiled?(d=this.fileDirectory.TileOffsets[l],f=this.fileDirectory.TileByteCounts[l]):(d=this.fileDirectory.StripOffsets[l],f=this.fileDirectory.StripByteCounts[l]);const p=(await this.source.fetch([{offset:d,length:f}],a))[0];let h;return u===null||!u[l]?(h=(async()=>{let g=await i.decode(this.fileDirectory,p);const y=this.getSampleFormat(),v=this.getBitsPerSample();return $an(y,v)&&(g=Van(g,y,this.planarConfiguration,this.getSamplesPerPixel(),v,this.getTileWidth(),this.getBlockHeight(n))),g})(),u!==null&&(u[l]=h)):h=u[l],{x:e,y:n,sample:r,data:await h}}async _readRaster(e,n,r,i,a,o,s,l,u){const d=this.getTileWidth(),f=this.getTileHeight(),p=this.getWidth(),h=this.getHeight(),g=Math.max(Math.floor(e[0]/d),0),y=Math.min(Math.ceil(e[2]/d),Math.ceil(p/d)),v=Math.max(Math.floor(e[1]/f),0),m=Math.min(Math.ceil(e[3]/f),Math.ceil(h/f)),b=e[2]-e[0];let E=this.getBytesPerPixel();const C=[],x=[];for(let P=0;P<n.length;++P)this.planarConfiguration===1?C.push(Ban(this.fileDirectory.BitsPerSample,0,n[P])/8):C.push(0),x.push(this.getReaderForSample(n[P]));const _=[],{littleEndian:A}=this;for(let P=v;P<m;++P)for(let R=g;R<y;++R){let N;this.planarConfiguration===1&&(N=this.getTileOrStrip(R,P,0,a,u));for(let D=0;D<n.length;++D){const U=D,z=n[D];this.planarConfiguration===2&&(E=this.getSampleByteSize(z),N=this.getTileOrStrip(R,P,z,a,u));const B=N.then(j=>{const V=j.data,G=new DataView(V),W=this.getBlockHeight(j.y),Z=j.y*f,H=j.x*d,X=Z+W,te=(j.x+1)*d,K=x[U],Y=Math.min(W,W-(X-e[3]),h-Z),Q=Math.min(d,d-(te-e[2]),p-H);for(let ie=Math.max(0,e[1]-Z);ie<Y;++ie)for(let ee=Math.max(0,e[0]-H);ee<Q;++ee){const oe=(ie*d+ee)*E,ue=K.call(G,oe+C[U],A);let pe;i?(pe=(ie+Z-e[1])*b*n.length+(ee+H-e[0])*n.length+U,r[pe]=ue):(pe=(ie+Z-e[1])*b+ee+H-e[0],r[U][pe]=ue)}});_.push(B)}}if(await Promise.all(_),o&&e[2]-e[0]!==o||s&&e[3]-e[1]!==s){let P;return i?P=Fan(r,e[2]-e[0],e[3]-e[1],o,s,n.length,l):P=Dan(r,e[2]-e[0],e[3]-e[1],o,s,l),P.width=o,P.height=s,P}return r.width=o||e[2]-e[0],r.height=s||e[3]-e[1],r}async readRasters({window:e,samples:n=[],interleave:r,pool:i=null,width:a,height:o,resampleMethod:s,fillValue:l,signal:u}={}){const d=e||[0,0,this.getWidth(),this.getHeight()];if(d[0]>d[2]||d[1]>d[3])throw new Error("Invalid subsets");const f=d[2]-d[0],p=d[3]-d[1],h=f*p,g=this.getSamplesPerPixel();if(!n||!n.length)for(let b=0;b<g;++b)n.push(b);else for(let b=0;b<n.length;++b)if(n[b]>=g)return Promise.reject(new RangeError(`Invalid sample index '${n[b]}'.`));let y;if(r){const b=this.fileDirectory.SampleFormat?Math.max.apply(null,this.fileDirectory.SampleFormat):1,E=Math.max.apply(null,this.fileDirectory.BitsPerSample);y=iee(b,E,h*n.length),l&&y.fill(l)}else{y=[];for(let b=0;b<n.length;++b){const E=this.getArrayForSample(n[b],h);Array.isArray(l)&&b<l.length?E.fill(l[b]):l&&!Array.isArray(l)&&E.fill(l),y.push(E)}}const v=i||await Nan(this.fileDirectory);return await this._readRaster(d,n,y,r,v,a,o,s,u)}async readRGB({window:e,interleave:n=!0,pool:r=null,width:i,height:a,resampleMethod:o,enableAlpha:s=!1,signal:l}={}){const u=e||[0,0,this.getWidth(),this.getHeight()];if(u[0]>u[2]||u[1]>u[3])throw new Error("Invalid subsets");const d=this.fileDirectory.PhotometricInterpretation;if(d===Yp.RGB){let m=[0,1,2];if(this.fileDirectory.ExtraSamples!==ban.Unspecified&&s){m=[];for(let b=0;b<this.fileDirectory.BitsPerSample.length;b+=1)m.push(b)}return this.readRasters({window:e,interleave:n,samples:m,pool:r,width:i,height:a,resampleMethod:o,signal:l})}let f;switch(d){case Yp.WhiteIsZero:case Yp.BlackIsZero:case Yp.Palette:f=[0];break;case Yp.CMYK:f=[0,1,2,3];break;case Yp.YCbCr:case Yp.CIELab:f=[0,1,2];break;default:throw new Error("Invalid or unsupported photometric interpretation.")}const p={window:u,interleave:!0,samples:f,pool:r,width:i,height:a,resampleMethod:o,signal:l},{fileDirectory:h}=this,g=await this.readRasters(p),y=2**this.fileDirectory.BitsPerSample[0];let v;switch(d){case Yp.WhiteIsZero:v=xan(g,y);break;case Yp.BlackIsZero:v=_an(g,y);break;case Yp.Palette:v=wan(g,h.ColorMap);break;case Yp.CMYK:v=Tan(g);break;case Yp.YCbCr:v=Ian(g);break;case Yp.CIELab:v=Lan(g);break;default:throw new Error("Unsupported photometric interpretation.")}if(!n){const m=new Uint8Array(v.length/3),b=new Uint8Array(v.length/3),E=new Uint8Array(v.length/3);for(let C=0,x=0;C<v.length;C+=3,++x)m[x]=v[C],b[x]=v[C+1],E[x]=v[C+2];v=[m,b,E]}return v.width=g.width,v.height=g.height,v}getTiePoints(){if(!this.fileDirectory.ModelTiepoint)return[];const e=[];for(let n=0;n<this.fileDirectory.ModelTiepoint.length;n+=6)e.push({i:this.fileDirectory.ModelTiepoint[n],j:this.fileDirectory.ModelTiepoint[n+1],k:this.fileDirectory.ModelTiepoint[n+2],x:this.fileDirectory.ModelTiepoint[n+3],y:this.fileDirectory.ModelTiepoint[n+4],z:this.fileDirectory.ModelTiepoint[n+5]});return e}getGDALMetadata(e=null){const n={};if(!this.fileDirectory.GDAL_METADATA)return null;const r=this.fileDirectory.GDAL_METADATA;let i=F7(r,"Item");e===null?i=i.filter(a=>u_(a,"sample")===void 0):i=i.filter(a=>Number(u_(a,"sample"))===e);for(let a=0;a<i.length;++a){const o=i[a];n[u_(o,"name")]=o.inner}return n}getGDALNoData(){if(!this.fileDirectory.GDAL_NODATA)return null;const e=this.fileDirectory.GDAL_NODATA;return Number(e.substring(0,e.length-1))}getOrigin(){const e=this.fileDirectory.ModelTiepoint,n=this.fileDirectory.ModelTransformation;if(e&&e.length===6)return[e[3],e[4],e[5]];if(n)return[n[3],n[7],n[11]];throw new Error("The image does not have an affine transformation.")}getResolution(e=null){const n=this.fileDirectory.ModelPixelScale,r=this.fileDirectory.ModelTransformation;if(n)return[n[0],-n[1],n[2]];if(r)return r[1]===0&&r[4]===0?[r[0],-r[5],r[10]]:[Math.sqrt(r[0]*r[0]+r[4]*r[4]),-Math.sqrt(r[1]*r[1]+r[5]*r[5]),r[10]];if(e){const[i,a,o]=e.getResolution();return[i*e.getWidth()/this.getWidth(),a*e.getHeight()/this.getHeight(),o*e.getWidth()/this.getWidth()]}throw new Error("The image does not have an affine transformation.")}pixelIsArea(){return this.geoKeys.GTRasterTypeGeoKey===1}getBoundingBox(e=!1){const n=this.getHeight(),r=this.getWidth();if(this.fileDirectory.ModelTransformation&&!e){const[i,a,o,s,l,u,d,f]=this.fileDirectory.ModelTransformation,h=[[0,0],[0,n],[r,0],[r,n]].map(([v,m])=>[s+i*v+a*m,f+l*v+u*m]),g=h.map(v=>v[0]),y=h.map(v=>v[1]);return[Math.min(...g),Math.min(...y),Math.max(...g),Math.max(...y)]}else{const i=this.getOrigin(),a=this.getResolution(),o=i[0],s=i[1],l=o+a[0]*r,u=s+a[1]*n;return[Math.min(o,l),Math.min(s,u),Math.max(o,l),Math.max(s,u)]}}}const Han=zan;class Gan{constructor(e){this._dataView=new DataView(e)}get buffer(){return this._dataView.buffer}getUint64(e,n){const r=this.getUint32(e,n),i=this.getUint32(e+4,n);let a;if(n){if(a=r+2**32*i,!Number.isSafeInteger(a))throw new Error(`${a} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return a}if(a=2**32*r+i,!Number.isSafeInteger(a))throw new Error(`${a} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return a}getInt64(e,n){let r=0;const i=(this._dataView.getUint8(e+(n?7:0))&128)>0;let a=!0;for(let o=0;o<8;o++){let s=this._dataView.getUint8(e+(n?o:7-o));i&&(a?s!==0&&(s=~(s-1)&255,a=!1):s=~s&255),r+=s*256**o}return i&&(r=-r),r}getUint8(e,n){return this._dataView.getUint8(e,n)}getInt8(e,n){return this._dataView.getInt8(e,n)}getUint16(e,n){return this._dataView.getUint16(e,n)}getInt16(e,n){return this._dataView.getInt16(e,n)}getUint32(e,n){return this._dataView.getUint32(e,n)}getInt32(e,n){return this._dataView.getInt32(e,n)}getFloat16(e,n){return CHe(this._dataView,e,n)}getFloat32(e,n){return this._dataView.getFloat32(e,n)}getFloat64(e,n){return this._dataView.getFloat64(e,n)}}class jan{constructor(e,n,r,i){this._dataView=new DataView(e),this._sliceOffset=n,this._littleEndian=r,this._bigTiff=i}get sliceOffset(){return this._sliceOffset}get sliceTop(){return this._sliceOffset+this.buffer.byteLength}get littleEndian(){return this._littleEndian}get bigTiff(){return this._bigTiff}get buffer(){return this._dataView.buffer}covers(e,n){return this.sliceOffset<=e&&this.sliceTop>=e+n}readUint8(e){return this._dataView.getUint8(e-this._sliceOffset,this._littleEndian)}readInt8(e){return this._dataView.getInt8(e-this._sliceOffset,this._littleEndian)}readUint16(e){return this._dataView.getUint16(e-this._sliceOffset,this._littleEndian)}readInt16(e){return this._dataView.getInt16(e-this._sliceOffset,this._littleEndian)}readUint32(e){return this._dataView.getUint32(e-this._sliceOffset,this._littleEndian)}readInt32(e){return this._dataView.getInt32(e-this._sliceOffset,this._littleEndian)}readFloat32(e){return this._dataView.getFloat32(e-this._sliceOffset,this._littleEndian)}readFloat64(e){return this._dataView.getFloat64(e-this._sliceOffset,this._littleEndian)}readUint64(e){const n=this.readUint32(e),r=this.readUint32(e+4);let i;if(this._littleEndian){if(i=n+2**32*r,!Number.isSafeInteger(i))throw new Error(`${i} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return i}if(i=2**32*n+r,!Number.isSafeInteger(i))throw new Error(`${i} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return i}readInt64(e){let n=0;const r=(this._dataView.getUint8(e+(this._littleEndian?7:0))&128)>0;let i=!0;for(let a=0;a<8;a++){let o=this._dataView.getUint8(e+(this._littleEndian?a:7-a));r&&(i?o!==0&&(o=~(o-1)&255,i=!1):o=~o&255),n+=o*256**a}return r&&(n=-n),n}readOffset(e){return this._bigTiff?this.readUint64(e):this.readUint32(e)}}class Wan{async fetch(e,n=void 0){return Promise.all(e.map(r=>this.fetchSlice(r,n)))}async fetchSlice(e){throw new Error(`fetching of slice ${e} not possible, not implemented`)}get fileSize(){return null}async close(){}}class ioe extends Error{constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,ioe),this.name="AbortError"}}class Xan extends Wan{constructor(e){super(),this.arrayBuffer=e}fetchSlice(e,n){if(n&&n.aborted)throw new ioe("Request aborted");return this.arrayBuffer.slice(e.offset,e.offset+e.length)}}function Zan(t){return new Xan(t)}function aee(t){switch(t){case No.BYTE:case No.ASCII:case No.SBYTE:case No.UNDEFINED:return 1;case No.SHORT:case No.SSHORT:return 2;case No.LONG:case No.SLONG:case No.FLOAT:case No.IFD:return 4;case No.RATIONAL:case No.SRATIONAL:case No.DOUBLE:case No.LONG8:case No.SLONG8:case No.IFD8:return 8;default:throw new RangeError(`Invalid field type: ${t}`)}}function qan(t){const e=t.GeoKeyDirectory;if(!e)return null;const n={};for(let r=4;r<=e[3]*4;r+=4){const i=Can[e[r]],a=e[r+1]?UI[e[r+1]]:null,o=e[r+2],s=e[r+3];let l=null;if(!a)l=s;else{if(l=t[a],typeof l>"u"||l===null)throw new Error(`Could not get value of geoKey '${i}'.`);typeof l=="string"?l=l.substring(s,s+o-1):l.subarray&&(l=l.subarray(s,s+o),o===1&&(l=l[0]))}n[i]=l}return n}function Nx(t,e,n,r){let i=null,a=null;const o=aee(e);switch(e){case No.BYTE:case No.ASCII:case No.UNDEFINED:i=new Uint8Array(n),a=t.readUint8;break;case No.SBYTE:i=new Int8Array(n),a=t.readInt8;break;case No.SHORT:i=new Uint16Array(n),a=t.readUint16;break;case No.SSHORT:i=new Int16Array(n),a=t.readInt16;break;case No.LONG:case No.IFD:i=new Uint32Array(n),a=t.readUint32;break;case No.SLONG:i=new Int32Array(n),a=t.readInt32;break;case No.LONG8:case No.IFD8:i=new Array(n),a=t.readUint64;break;case No.SLONG8:i=new Array(n),a=t.readInt64;break;case No.RATIONAL:i=new Uint32Array(n*2),a=t.readUint32;break;case No.SRATIONAL:i=new Int32Array(n*2),a=t.readInt32;break;case No.FLOAT:i=new Float32Array(n),a=t.readFloat32;break;case No.DOUBLE:i=new Float64Array(n),a=t.readFloat64;break;default:throw new RangeError(`Invalid field type: ${e}`)}if(e===No.RATIONAL||e===No.SRATIONAL)for(let s=0;s<n;s+=2)i[s]=a.call(t,r+s*o),i[s+1]=a.call(t,r+(s*o+4));else for(let s=0;s<n;++s)i[s]=a.call(t,r+s*o);return e===No.ASCII?new TextDecoder("utf-8").decode(i):i}class Yan{constructor(e,n,r){this.fileDirectory=e,this.geoKeyDirectory=n,this.nextIFDByteOffset=r}}class dL extends Error{constructor(e){super(`No image at index ${e}`),this.index=e}}class Kan{async readRasters(e={}){const{window:n,width:r,height:i}=e;let{resX:a,resY:o,bbox:s}=e;const l=await this.getImage();let u=l;const d=await this.getImageCount(),f=l.getBoundingBox();if(n&&s)throw new Error('Both "bbox" and "window" passed.');if(r||i){if(n){const[g,y]=l.getOrigin(),[v,m]=l.getResolution();s=[g+n[0]*v,y+n[1]*m,g+n[2]*v,y+n[3]*m]}const h=s||f;if(r){if(a)throw new Error("Both width and resX passed");a=(h[2]-h[0])/r}if(i){if(o)throw new Error("Both width and resY passed");o=(h[3]-h[1])/i}}if(a||o){const h=[];for(let g=0;g<d;++g){const y=await this.getImage(g),{SubfileType:v,NewSubfileType:m}=y.fileDirectory;(g===0||v===2||m&1)&&h.push(y)}h.sort((g,y)=>g.getWidth()-y.getWidth());for(let g=0;g<h.length;++g){const y=h[g],v=(f[2]-f[0])/y.getWidth(),m=(f[3]-f[1])/y.getHeight();if(u=y,a&&a>v||o&&o>m)break}}let p=n;if(s){const[h,g]=l.getOrigin(),[y,v]=u.getResolution(l);p=[Math.round((s[0]-h)/y),Math.round((s[1]-g)/v),Math.round((s[2]-h)/y),Math.round((s[3]-g)/v)],p=[Math.min(p[0],p[2]),Math.min(p[1],p[3]),Math.max(p[0],p[2]),Math.max(p[1],p[3])]}return u.readRasters({...e,window:p})}}class aoe extends Kan{constructor(e,n,r,i,a={}){super(),this.source=e,this.littleEndian=n,this.bigTiff=r,this.firstIFDOffset=i,this.cache=a.cache||!1,this.ifdRequests=[],this.ghostValues=null}async getSlice(e,n){const r=this.bigTiff?4048:1024;return new jan((await this.source.fetch([{offset:e,length:typeof n<"u"?n:r}]))[0],e,this.littleEndian,this.bigTiff)}async parseFileDirectoryAt(e){const n=this.bigTiff?20:12,r=this.bigTiff?8:2;let i=await this.getSlice(e);const a=this.bigTiff?i.readUint64(e):i.readUint16(e),o=a*n+(this.bigTiff?16:6);i.covers(e,o)||(i=await this.getSlice(e,o));const s={};let l=e+(this.bigTiff?8:2);for(let f=0;f<a;l+=n,++f){const p=i.readUint16(l),h=i.readUint16(l+2),g=this.bigTiff?i.readUint64(l+4):i.readUint32(l+4);let y,v;const m=aee(h),b=l+(this.bigTiff?12:8);if(m*g<=(this.bigTiff?8:4))y=Nx(i,h,g,b);else{const E=i.readOffset(b),C=aee(h)*g;if(i.covers(E,C))y=Nx(i,h,g,E);else{const x=await this.getSlice(E,C);y=Nx(x,h,g,E)}}g===1&&yan.indexOf(p)===-1&&!(h===No.RATIONAL||h===No.SRATIONAL)?v=y[0]:v=y,s[UI[p]]=v}const u=qan(s),d=i.readOffset(e+r+n*a);return new Yan(s,u,d)}async requestIFD(e){if(this.ifdRequests[e])return this.ifdRequests[e];if(e===0)return this.ifdRequests[e]=this.parseFileDirectoryAt(this.firstIFDOffset),this.ifdRequests[e];if(!this.ifdRequests[e-1])try{this.ifdRequests[e-1]=this.requestIFD(e-1)}catch(n){throw n instanceof dL?new dL(e):n}return this.ifdRequests[e]=(async()=>{const n=await this.ifdRequests[e-1];if(n.nextIFDByteOffset===0)throw new dL(e);return this.parseFileDirectoryAt(n.nextIFDByteOffset)})(),this.ifdRequests[e]}async getImage(e=0){const n=await this.requestIFD(e);return new Han(n.fileDirectory,n.geoKeyDirectory,this.dataView,this.littleEndian,this.cache,this.source)}async getImageCount(){let e=0,n=!0;for(;n;)try{await this.requestIFD(e),++e}catch(r){if(r instanceof dL)n=!1;else throw r}return e}async getGhostValues(){const e=this.bigTiff?16:8;if(this.ghostValues)return this.ghostValues;const n="GDAL_STRUCTURAL_METADATA_SIZE=",r=n.length+100;let i=await this.getSlice(e,r);if(n===Nx(i,No.ASCII,n.length,e)){const o=Nx(i,No.ASCII,r,e).split(`
|
|
4501
|
+
>]`),y+=DCe(v,"</"+e+">"),y>=g)break;h=l}}else l=bH(s,"[ /]"+e+">",0);const d=o+e.length+l+1;if(r&&console.log("[xml-utils] end:",d),d===-1)return;const f=t.slice(o,d);let p;return u?p=null:p=f.slice(f.indexOf(">")+1,f.lastIndexOf("<")),{inner:p,outer:f,start:o,end:d}}fan.exports=IHe;B7.default=IHe;const van=B7;function AHe(t,e,n){const r=[],i=n&&n.debug||!1,a=n&&typeof n.nested=="boolean"?n.nested:!0;let o=n&&n.startIndex||0,s;for(;s=van(t,e,{debug:i,startIndex:o});)a?o=s.start+1+e.length:o=s.end,r.push(s);return i&&console.log("findTagsByName found",r.length,"tags"),r}dan.exports=AHe;F7.default=AHe;const UI={315:"Artist",258:"BitsPerSample",265:"CellLength",264:"CellWidth",320:"ColorMap",259:"Compression",33432:"Copyright",306:"DateTime",338:"ExtraSamples",266:"FillOrder",289:"FreeByteCounts",288:"FreeOffsets",291:"GrayResponseCurve",290:"GrayResponseUnit",316:"HostComputer",270:"ImageDescription",257:"ImageLength",256:"ImageWidth",271:"Make",281:"MaxSampleValue",280:"MinSampleValue",272:"Model",254:"NewSubfileType",274:"Orientation",262:"PhotometricInterpretation",284:"PlanarConfiguration",296:"ResolutionUnit",278:"RowsPerStrip",277:"SamplesPerPixel",305:"Software",279:"StripByteCounts",273:"StripOffsets",255:"SubfileType",263:"Threshholding",282:"XResolution",283:"YResolution",326:"BadFaxLines",327:"CleanFaxData",343:"ClipPath",328:"ConsecutiveBadFaxLines",433:"Decode",434:"DefaultImageColor",269:"DocumentName",336:"DotRange",321:"HalftoneHints",346:"Indexed",347:"JPEGTables",285:"PageName",297:"PageNumber",317:"Predictor",319:"PrimaryChromaticities",532:"ReferenceBlackWhite",339:"SampleFormat",340:"SMinSampleValue",341:"SMaxSampleValue",559:"StripRowCounts",330:"SubIFDs",292:"T4Options",293:"T6Options",325:"TileByteCounts",323:"TileLength",324:"TileOffsets",322:"TileWidth",301:"TransferFunction",318:"WhitePoint",344:"XClipPathUnits",286:"XPosition",529:"YCbCrCoefficients",531:"YCbCrPositioning",530:"YCbCrSubSampling",345:"YClipPathUnits",287:"YPosition",37378:"ApertureValue",40961:"ColorSpace",36868:"DateTimeDigitized",36867:"DateTimeOriginal",34665:"Exif IFD",36864:"ExifVersion",33434:"ExposureTime",41728:"FileSource",37385:"Flash",40960:"FlashpixVersion",33437:"FNumber",42016:"ImageUniqueID",37384:"LightSource",37500:"MakerNote",37377:"ShutterSpeedValue",37510:"UserComment",33723:"IPTC",34675:"ICC Profile",700:"XMP",42112:"GDAL_METADATA",42113:"GDAL_NODATA",34377:"Photoshop",33550:"ModelPixelScale",33922:"ModelTiepoint",34264:"ModelTransformation",34735:"GeoKeyDirectory",34736:"GeoDoubleParams",34737:"GeoAsciiParams",50674:"LercParameters"},m0={};for(const t in UI)UI.hasOwnProperty(t)&&(m0[UI[t]]=parseInt(t,10));const yan=[m0.BitsPerSample,m0.ExtraSamples,m0.SampleFormat,m0.StripByteCounts,m0.StripOffsets,m0.StripRowCounts,m0.TileByteCounts,m0.TileOffsets,m0.SubIFDs],EH={1:"BYTE",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",6:"SBYTE",7:"UNDEFINED",8:"SSHORT",9:"SLONG",10:"SRATIONAL",11:"FLOAT",12:"DOUBLE",13:"IFD",16:"LONG8",17:"SLONG8",18:"IFD8"},No={};for(const t in EH)EH.hasOwnProperty(t)&&(No[EH[t]]=parseInt(t,10));const Yp={WhiteIsZero:0,BlackIsZero:1,RGB:2,Palette:3,TransparencyMask:4,CMYK:5,YCbCr:6,CIELab:8,ICCLab:9},ban={Unspecified:0,Assocalpha:1,Unassalpha:2},Ean={Version:0,AddCompression:1},San={None:0,Deflate:1,Zstandard:2},Can={1024:"GTModelTypeGeoKey",1025:"GTRasterTypeGeoKey",1026:"GTCitationGeoKey",2048:"GeographicTypeGeoKey",2049:"GeogCitationGeoKey",2050:"GeogGeodeticDatumGeoKey",2051:"GeogPrimeMeridianGeoKey",2052:"GeogLinearUnitsGeoKey",2053:"GeogLinearUnitSizeGeoKey",2054:"GeogAngularUnitsGeoKey",2055:"GeogAngularUnitSizeGeoKey",2056:"GeogEllipsoidGeoKey",2057:"GeogSemiMajorAxisGeoKey",2058:"GeogSemiMinorAxisGeoKey",2059:"GeogInvFlatteningGeoKey",2060:"GeogAzimuthUnitsGeoKey",2061:"GeogPrimeMeridianLongGeoKey",2062:"GeogTOWGS84GeoKey",3072:"ProjectedCSTypeGeoKey",3073:"PCSCitationGeoKey",3074:"ProjectionGeoKey",3075:"ProjCoordTransGeoKey",3076:"ProjLinearUnitsGeoKey",3077:"ProjLinearUnitSizeGeoKey",3078:"ProjStdParallel1GeoKey",3079:"ProjStdParallel2GeoKey",3080:"ProjNatOriginLongGeoKey",3081:"ProjNatOriginLatGeoKey",3082:"ProjFalseEastingGeoKey",3083:"ProjFalseNorthingGeoKey",3084:"ProjFalseOriginLongGeoKey",3085:"ProjFalseOriginLatGeoKey",3086:"ProjFalseOriginEastingGeoKey",3087:"ProjFalseOriginNorthingGeoKey",3088:"ProjCenterLongGeoKey",3089:"ProjCenterLatGeoKey",3090:"ProjCenterEastingGeoKey",3091:"ProjCenterNorthingGeoKey",3092:"ProjScaleAtNatOriginGeoKey",3093:"ProjScaleAtCenterGeoKey",3094:"ProjAzimuthAngleGeoKey",3095:"ProjStraightVertPoleLongGeoKey",3096:"ProjRectifiedGridAngleGeoKey",4096:"VerticalCSTypeGeoKey",4097:"VerticalCitationGeoKey",4098:"VerticalDatumGeoKey",4099:"VerticalUnitsGeoKey"};function xan(t,e){const{width:n,height:r}=t,i=new Uint8Array(n*r*3);let a;for(let o=0,s=0;o<t.length;++o,s+=3)a=256-t[o]/e*256,i[s]=a,i[s+1]=a,i[s+2]=a;return i}function _an(t,e){const{width:n,height:r}=t,i=new Uint8Array(n*r*3);let a;for(let o=0,s=0;o<t.length;++o,s+=3)a=t[o]/e*256,i[s]=a,i[s+1]=a,i[s+2]=a;return i}function wan(t,e){const{width:n,height:r}=t,i=new Uint8Array(n*r*3),a=e.length/3,o=e.length/3*2;for(let s=0,l=0;s<t.length;++s,l+=3){const u=t[s];i[l]=e[u]/65536*256,i[l+1]=e[u+a]/65536*256,i[l+2]=e[u+o]/65536*256}return i}function Tan(t){const{width:e,height:n}=t,r=new Uint8Array(e*n*3);for(let i=0,a=0;i<t.length;i+=4,a+=3){const o=t[i],s=t[i+1],l=t[i+2],u=t[i+3];r[a]=255*((255-o)/256)*((255-u)/256),r[a+1]=255*((255-s)/256)*((255-u)/256),r[a+2]=255*((255-l)/256)*((255-u)/256)}return r}function Ian(t){const{width:e,height:n}=t,r=new Uint8ClampedArray(e*n*3);for(let i=0,a=0;i<t.length;i+=3,a+=3){const o=t[i],s=t[i+1],l=t[i+2];r[a]=o+1.402*(l-128),r[a+1]=o-.34414*(s-128)-.71414*(l-128),r[a+2]=o+1.772*(s-128)}return r}const Aan=.95047,Ran=1,Oan=1.08883;function Lan(t){const{width:e,height:n}=t,r=new Uint8Array(e*n*3);for(let i=0,a=0;i<t.length;i+=3,a+=3){const o=t[i+0],s=t[i+1]<<24>>24,l=t[i+2]<<24>>24;let u=(o+16)/116,d=s/500+u,f=u-l/200,p,h,g;d=Aan*(d*d*d>.008856?d*d*d:(d-16/116)/7.787),u=Ran*(u*u*u>.008856?u*u*u:(u-16/116)/7.787),f=Oan*(f*f*f>.008856?f*f*f:(f-16/116)/7.787),p=d*3.2406+u*-1.5372+f*-.4986,h=d*-.9689+u*1.8758+f*.0415,g=d*.0557+u*-.204+f*1.057,p=p>.0031308?1.055*p**(1/2.4)-.055:12.92*p,h=h>.0031308?1.055*h**(1/2.4)-.055:12.92*h,g=g>.0031308?1.055*g**(1/2.4)-.055:12.92*g,r[a]=Math.max(0,Math.min(1,p))*255,r[a+1]=Math.max(0,Math.min(1,h))*255,r[a+2]=Math.max(0,Math.min(1,g))*255}return r}const RHe=new Map;function Mb(t,e){Array.isArray(t)||(t=[t]),t.forEach(n=>RHe.set(n,e))}async function Nan(t){const e=RHe.get(t.Compression);if(!e)throw new Error(`Unknown compression method identifier: ${t.Compression}`);const n=await e();return new n(t)}Mb([void 0,1],()=>Promise.resolve().then(()=>require("./raw-9c0f4034.js")).then(t=>t.default));Mb(5,()=>Promise.resolve().then(()=>require("./lzw-f00e8c8c.js")).then(t=>t.default));Mb(6,()=>{throw new Error("old style JPEG compression is not supported.")});Mb(7,()=>Promise.resolve().then(()=>require("./jpeg-f3c7cefc.js")).then(t=>t.default));Mb([8,32946],()=>Promise.resolve().then(()=>require("./deflate-b568cf98.js")).then(t=>t.default));Mb(32773,()=>Promise.resolve().then(()=>require("./packbits-58fd9c05.js")).then(t=>t.default));Mb(34887,()=>Promise.resolve().then(()=>require("./lerc-e0bd06a1.js")).then(async t=>(await t.zstd.init(),t)).then(t=>t.default));Mb(50001,()=>Promise.resolve().then(()=>require("./webimage-bc81928d.js")).then(t=>t.default));function Nk(t,e,n,r=1){return new(Object.getPrototypeOf(t)).constructor(e*n*r)}function Man(t,e,n,r,i){const a=e/r,o=n/i;return t.map(s=>{const l=Nk(s,r,i);for(let u=0;u<i;++u){const d=Math.min(Math.round(o*u),n-1);for(let f=0;f<r;++f){const p=Math.min(Math.round(a*f),e-1),h=s[d*e+p];l[u*r+f]=h}}return l})}function d_(t,e,n){return(1-n)*t+n*e}function Pan(t,e,n,r,i){const a=e/r,o=n/i;return t.map(s=>{const l=Nk(s,r,i);for(let u=0;u<i;++u){const d=o*u,f=Math.floor(d),p=Math.min(Math.ceil(d),n-1);for(let h=0;h<r;++h){const g=a*h,y=g%1,v=Math.floor(g),m=Math.min(Math.ceil(g),e-1),b=s[f*e+v],E=s[f*e+m],C=s[p*e+v],x=s[p*e+m],_=d_(d_(b,E,y),d_(C,x,y),d%1);l[u*r+h]=_}}return l})}function Dan(t,e,n,r,i,a="nearest"){switch(a.toLowerCase()){case"nearest":return Man(t,e,n,r,i);case"bilinear":case"linear":return Pan(t,e,n,r,i);default:throw new Error(`Unsupported resampling method: '${a}'`)}}function kan(t,e,n,r,i,a){const o=e/r,s=n/i,l=Nk(t,r,i,a);for(let u=0;u<i;++u){const d=Math.min(Math.round(s*u),n-1);for(let f=0;f<r;++f){const p=Math.min(Math.round(o*f),e-1);for(let h=0;h<a;++h){const g=t[d*e*a+p*a+h];l[u*r*a+f*a+h]=g}}}return l}function Uan(t,e,n,r,i,a){const o=e/r,s=n/i,l=Nk(t,r,i,a);for(let u=0;u<i;++u){const d=s*u,f=Math.floor(d),p=Math.min(Math.ceil(d),n-1);for(let h=0;h<r;++h){const g=o*h,y=g%1,v=Math.floor(g),m=Math.min(Math.ceil(g),e-1);for(let b=0;b<a;++b){const E=t[f*e*a+v*a+b],C=t[f*e*a+m*a+b],x=t[p*e*a+v*a+b],_=t[p*e*a+m*a+b],A=d_(d_(E,C,y),d_(x,_,y),d%1);l[u*r*a+h*a+b]=A}}}return l}function Fan(t,e,n,r,i,a,o="nearest"){switch(o.toLowerCase()){case"nearest":return kan(t,e,n,r,i,a);case"bilinear":case"linear":return Uan(t,e,n,r,i,a);default:throw new Error(`Unsupported resampling method: '${o}'`)}}function Ban(t,e,n){let r=0;for(let i=e;i<n;++i)r+=t[i];return r}function iee(t,e,n){switch(t){case 1:if(e<=8)return new Uint8Array(n);if(e<=16)return new Uint16Array(n);if(e<=32)return new Uint32Array(n);break;case 2:if(e===8)return new Int8Array(n);if(e===16)return new Int16Array(n);if(e===32)return new Int32Array(n);break;case 3:switch(e){case 16:case 32:return new Float32Array(n);case 64:return new Float64Array(n)}break}throw Error("Unsupported data format/bitsPerSample")}function $an(t,e){return(t===1||t===2)&&e<=32&&e%8===0?!1:!(t===3&&(e===16||e===32||e===64))}function Van(t,e,n,r,i,a,o){const s=new DataView(t),l=n===2?o*a:o*a*r,u=n===2?1:r,d=iee(e,i,l),f=parseInt("1".repeat(i),2);if(e===1){let p;n===1?p=r*i:p=i;let h=a*p;h&7&&(h=h+7&-8);for(let g=0;g<o;++g){const y=g*h;for(let v=0;v<a;++v){const m=y+v*u*i;for(let b=0;b<u;++b){const E=m+b*i,C=(g*a+v)*u+b,x=Math.floor(E/8),_=E%8;if(_+i<=8)d[C]=s.getUint8(x)>>8-i-_&f;else if(_+i<=16)d[C]=s.getUint16(x)>>16-i-_&f;else if(_+i<=24){const A=s.getUint16(x)<<8|s.getUint8(x+2);d[C]=A>>24-i-_&f}else d[C]=s.getUint32(x)>>32-i-_&f}}}}return d.buffer}class zan{constructor(e,n,r,i,a,o){this.fileDirectory=e,this.geoKeys=n,this.dataView=r,this.littleEndian=i,this.tiles=a?{}:null,this.isTiled=!e.StripOffsets;const s=e.PlanarConfiguration;if(this.planarConfiguration=typeof s>"u"?1:s,this.planarConfiguration!==1&&this.planarConfiguration!==2)throw new Error("Invalid planar configuration.");this.source=o}getFileDirectory(){return this.fileDirectory}getGeoKeys(){return this.geoKeys}getWidth(){return this.fileDirectory.ImageWidth}getHeight(){return this.fileDirectory.ImageLength}getSamplesPerPixel(){return typeof this.fileDirectory.SamplesPerPixel<"u"?this.fileDirectory.SamplesPerPixel:1}getTileWidth(){return this.isTiled?this.fileDirectory.TileWidth:this.getWidth()}getTileHeight(){return this.isTiled?this.fileDirectory.TileLength:typeof this.fileDirectory.RowsPerStrip<"u"?Math.min(this.fileDirectory.RowsPerStrip,this.getHeight()):this.getHeight()}getBlockWidth(){return this.getTileWidth()}getBlockHeight(e){return this.isTiled||(e+1)*this.getTileHeight()<=this.getHeight()?this.getTileHeight():this.getHeight()-e*this.getTileHeight()}getBytesPerPixel(){let e=0;for(let n=0;n<this.fileDirectory.BitsPerSample.length;++n)e+=this.getSampleByteSize(n);return e}getSampleByteSize(e){if(e>=this.fileDirectory.BitsPerSample.length)throw new RangeError(`Sample index ${e} is out of range.`);return Math.ceil(this.fileDirectory.BitsPerSample[e]/8)}getReaderForSample(e){const n=this.fileDirectory.SampleFormat?this.fileDirectory.SampleFormat[e]:1,r=this.fileDirectory.BitsPerSample[e];switch(n){case 1:if(r<=8)return DataView.prototype.getUint8;if(r<=16)return DataView.prototype.getUint16;if(r<=32)return DataView.prototype.getUint32;break;case 2:if(r<=8)return DataView.prototype.getInt8;if(r<=16)return DataView.prototype.getInt16;if(r<=32)return DataView.prototype.getInt32;break;case 3:switch(r){case 16:return function(i,a){return CHe(this,i,a)};case 32:return DataView.prototype.getFloat32;case 64:return DataView.prototype.getFloat64}break}throw Error("Unsupported data format/bitsPerSample")}getSampleFormat(e=0){return this.fileDirectory.SampleFormat?this.fileDirectory.SampleFormat[e]:1}getBitsPerSample(e=0){return this.fileDirectory.BitsPerSample[e]}getArrayForSample(e,n){const r=this.getSampleFormat(e),i=this.getBitsPerSample(e);return iee(r,i,n)}async getTileOrStrip(e,n,r,i,a){const o=Math.ceil(this.getWidth()/this.getTileWidth()),s=Math.ceil(this.getHeight()/this.getTileHeight());let l;const{tiles:u}=this;this.planarConfiguration===1?l=n*o+e:this.planarConfiguration===2&&(l=r*o*s+n*o+e);let d,f;this.isTiled?(d=this.fileDirectory.TileOffsets[l],f=this.fileDirectory.TileByteCounts[l]):(d=this.fileDirectory.StripOffsets[l],f=this.fileDirectory.StripByteCounts[l]);const p=(await this.source.fetch([{offset:d,length:f}],a))[0];let h;return u===null||!u[l]?(h=(async()=>{let g=await i.decode(this.fileDirectory,p);const y=this.getSampleFormat(),v=this.getBitsPerSample();return $an(y,v)&&(g=Van(g,y,this.planarConfiguration,this.getSamplesPerPixel(),v,this.getTileWidth(),this.getBlockHeight(n))),g})(),u!==null&&(u[l]=h)):h=u[l],{x:e,y:n,sample:r,data:await h}}async _readRaster(e,n,r,i,a,o,s,l,u){const d=this.getTileWidth(),f=this.getTileHeight(),p=this.getWidth(),h=this.getHeight(),g=Math.max(Math.floor(e[0]/d),0),y=Math.min(Math.ceil(e[2]/d),Math.ceil(p/d)),v=Math.max(Math.floor(e[1]/f),0),m=Math.min(Math.ceil(e[3]/f),Math.ceil(h/f)),b=e[2]-e[0];let E=this.getBytesPerPixel();const C=[],x=[];for(let P=0;P<n.length;++P)this.planarConfiguration===1?C.push(Ban(this.fileDirectory.BitsPerSample,0,n[P])/8):C.push(0),x.push(this.getReaderForSample(n[P]));const _=[],{littleEndian:A}=this;for(let P=v;P<m;++P)for(let R=g;R<y;++R){let N;this.planarConfiguration===1&&(N=this.getTileOrStrip(R,P,0,a,u));for(let D=0;D<n.length;++D){const U=D,z=n[D];this.planarConfiguration===2&&(E=this.getSampleByteSize(z),N=this.getTileOrStrip(R,P,z,a,u));const B=N.then(j=>{const V=j.data,G=new DataView(V),W=this.getBlockHeight(j.y),Z=j.y*f,H=j.x*d,X=Z+W,te=(j.x+1)*d,K=x[U],Y=Math.min(W,W-(X-e[3]),h-Z),Q=Math.min(d,d-(te-e[2]),p-H);for(let ie=Math.max(0,e[1]-Z);ie<Y;++ie)for(let ee=Math.max(0,e[0]-H);ee<Q;++ee){const oe=(ie*d+ee)*E,ue=K.call(G,oe+C[U],A);let pe;i?(pe=(ie+Z-e[1])*b*n.length+(ee+H-e[0])*n.length+U,r[pe]=ue):(pe=(ie+Z-e[1])*b+ee+H-e[0],r[U][pe]=ue)}});_.push(B)}}if(await Promise.all(_),o&&e[2]-e[0]!==o||s&&e[3]-e[1]!==s){let P;return i?P=Fan(r,e[2]-e[0],e[3]-e[1],o,s,n.length,l):P=Dan(r,e[2]-e[0],e[3]-e[1],o,s,l),P.width=o,P.height=s,P}return r.width=o||e[2]-e[0],r.height=s||e[3]-e[1],r}async readRasters({window:e,samples:n=[],interleave:r,pool:i=null,width:a,height:o,resampleMethod:s,fillValue:l,signal:u}={}){const d=e||[0,0,this.getWidth(),this.getHeight()];if(d[0]>d[2]||d[1]>d[3])throw new Error("Invalid subsets");const f=d[2]-d[0],p=d[3]-d[1],h=f*p,g=this.getSamplesPerPixel();if(!n||!n.length)for(let b=0;b<g;++b)n.push(b);else for(let b=0;b<n.length;++b)if(n[b]>=g)return Promise.reject(new RangeError(`Invalid sample index '${n[b]}'.`));let y;if(r){const b=this.fileDirectory.SampleFormat?Math.max.apply(null,this.fileDirectory.SampleFormat):1,E=Math.max.apply(null,this.fileDirectory.BitsPerSample);y=iee(b,E,h*n.length),l&&y.fill(l)}else{y=[];for(let b=0;b<n.length;++b){const E=this.getArrayForSample(n[b],h);Array.isArray(l)&&b<l.length?E.fill(l[b]):l&&!Array.isArray(l)&&E.fill(l),y.push(E)}}const v=i||await Nan(this.fileDirectory);return await this._readRaster(d,n,y,r,v,a,o,s,u)}async readRGB({window:e,interleave:n=!0,pool:r=null,width:i,height:a,resampleMethod:o,enableAlpha:s=!1,signal:l}={}){const u=e||[0,0,this.getWidth(),this.getHeight()];if(u[0]>u[2]||u[1]>u[3])throw new Error("Invalid subsets");const d=this.fileDirectory.PhotometricInterpretation;if(d===Yp.RGB){let m=[0,1,2];if(this.fileDirectory.ExtraSamples!==ban.Unspecified&&s){m=[];for(let b=0;b<this.fileDirectory.BitsPerSample.length;b+=1)m.push(b)}return this.readRasters({window:e,interleave:n,samples:m,pool:r,width:i,height:a,resampleMethod:o,signal:l})}let f;switch(d){case Yp.WhiteIsZero:case Yp.BlackIsZero:case Yp.Palette:f=[0];break;case Yp.CMYK:f=[0,1,2,3];break;case Yp.YCbCr:case Yp.CIELab:f=[0,1,2];break;default:throw new Error("Invalid or unsupported photometric interpretation.")}const p={window:u,interleave:!0,samples:f,pool:r,width:i,height:a,resampleMethod:o,signal:l},{fileDirectory:h}=this,g=await this.readRasters(p),y=2**this.fileDirectory.BitsPerSample[0];let v;switch(d){case Yp.WhiteIsZero:v=xan(g,y);break;case Yp.BlackIsZero:v=_an(g,y);break;case Yp.Palette:v=wan(g,h.ColorMap);break;case Yp.CMYK:v=Tan(g);break;case Yp.YCbCr:v=Ian(g);break;case Yp.CIELab:v=Lan(g);break;default:throw new Error("Unsupported photometric interpretation.")}if(!n){const m=new Uint8Array(v.length/3),b=new Uint8Array(v.length/3),E=new Uint8Array(v.length/3);for(let C=0,x=0;C<v.length;C+=3,++x)m[x]=v[C],b[x]=v[C+1],E[x]=v[C+2];v=[m,b,E]}return v.width=g.width,v.height=g.height,v}getTiePoints(){if(!this.fileDirectory.ModelTiepoint)return[];const e=[];for(let n=0;n<this.fileDirectory.ModelTiepoint.length;n+=6)e.push({i:this.fileDirectory.ModelTiepoint[n],j:this.fileDirectory.ModelTiepoint[n+1],k:this.fileDirectory.ModelTiepoint[n+2],x:this.fileDirectory.ModelTiepoint[n+3],y:this.fileDirectory.ModelTiepoint[n+4],z:this.fileDirectory.ModelTiepoint[n+5]});return e}getGDALMetadata(e=null){const n={};if(!this.fileDirectory.GDAL_METADATA)return null;const r=this.fileDirectory.GDAL_METADATA;let i=F7(r,"Item");e===null?i=i.filter(a=>u_(a,"sample")===void 0):i=i.filter(a=>Number(u_(a,"sample"))===e);for(let a=0;a<i.length;++a){const o=i[a];n[u_(o,"name")]=o.inner}return n}getGDALNoData(){if(!this.fileDirectory.GDAL_NODATA)return null;const e=this.fileDirectory.GDAL_NODATA;return Number(e.substring(0,e.length-1))}getOrigin(){const e=this.fileDirectory.ModelTiepoint,n=this.fileDirectory.ModelTransformation;if(e&&e.length===6)return[e[3],e[4],e[5]];if(n)return[n[3],n[7],n[11]];throw new Error("The image does not have an affine transformation.")}getResolution(e=null){const n=this.fileDirectory.ModelPixelScale,r=this.fileDirectory.ModelTransformation;if(n)return[n[0],-n[1],n[2]];if(r)return r[1]===0&&r[4]===0?[r[0],-r[5],r[10]]:[Math.sqrt(r[0]*r[0]+r[4]*r[4]),-Math.sqrt(r[1]*r[1]+r[5]*r[5]),r[10]];if(e){const[i,a,o]=e.getResolution();return[i*e.getWidth()/this.getWidth(),a*e.getHeight()/this.getHeight(),o*e.getWidth()/this.getWidth()]}throw new Error("The image does not have an affine transformation.")}pixelIsArea(){return this.geoKeys.GTRasterTypeGeoKey===1}getBoundingBox(e=!1){const n=this.getHeight(),r=this.getWidth();if(this.fileDirectory.ModelTransformation&&!e){const[i,a,o,s,l,u,d,f]=this.fileDirectory.ModelTransformation,h=[[0,0],[0,n],[r,0],[r,n]].map(([v,m])=>[s+i*v+a*m,f+l*v+u*m]),g=h.map(v=>v[0]),y=h.map(v=>v[1]);return[Math.min(...g),Math.min(...y),Math.max(...g),Math.max(...y)]}else{const i=this.getOrigin(),a=this.getResolution(),o=i[0],s=i[1],l=o+a[0]*r,u=s+a[1]*n;return[Math.min(o,l),Math.min(s,u),Math.max(o,l),Math.max(s,u)]}}}const Han=zan;class Gan{constructor(e){this._dataView=new DataView(e)}get buffer(){return this._dataView.buffer}getUint64(e,n){const r=this.getUint32(e,n),i=this.getUint32(e+4,n);let a;if(n){if(a=r+2**32*i,!Number.isSafeInteger(a))throw new Error(`${a} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return a}if(a=2**32*r+i,!Number.isSafeInteger(a))throw new Error(`${a} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return a}getInt64(e,n){let r=0;const i=(this._dataView.getUint8(e+(n?7:0))&128)>0;let a=!0;for(let o=0;o<8;o++){let s=this._dataView.getUint8(e+(n?o:7-o));i&&(a?s!==0&&(s=~(s-1)&255,a=!1):s=~s&255),r+=s*256**o}return i&&(r=-r),r}getUint8(e,n){return this._dataView.getUint8(e,n)}getInt8(e,n){return this._dataView.getInt8(e,n)}getUint16(e,n){return this._dataView.getUint16(e,n)}getInt16(e,n){return this._dataView.getInt16(e,n)}getUint32(e,n){return this._dataView.getUint32(e,n)}getInt32(e,n){return this._dataView.getInt32(e,n)}getFloat16(e,n){return CHe(this._dataView,e,n)}getFloat32(e,n){return this._dataView.getFloat32(e,n)}getFloat64(e,n){return this._dataView.getFloat64(e,n)}}class jan{constructor(e,n,r,i){this._dataView=new DataView(e),this._sliceOffset=n,this._littleEndian=r,this._bigTiff=i}get sliceOffset(){return this._sliceOffset}get sliceTop(){return this._sliceOffset+this.buffer.byteLength}get littleEndian(){return this._littleEndian}get bigTiff(){return this._bigTiff}get buffer(){return this._dataView.buffer}covers(e,n){return this.sliceOffset<=e&&this.sliceTop>=e+n}readUint8(e){return this._dataView.getUint8(e-this._sliceOffset,this._littleEndian)}readInt8(e){return this._dataView.getInt8(e-this._sliceOffset,this._littleEndian)}readUint16(e){return this._dataView.getUint16(e-this._sliceOffset,this._littleEndian)}readInt16(e){return this._dataView.getInt16(e-this._sliceOffset,this._littleEndian)}readUint32(e){return this._dataView.getUint32(e-this._sliceOffset,this._littleEndian)}readInt32(e){return this._dataView.getInt32(e-this._sliceOffset,this._littleEndian)}readFloat32(e){return this._dataView.getFloat32(e-this._sliceOffset,this._littleEndian)}readFloat64(e){return this._dataView.getFloat64(e-this._sliceOffset,this._littleEndian)}readUint64(e){const n=this.readUint32(e),r=this.readUint32(e+4);let i;if(this._littleEndian){if(i=n+2**32*r,!Number.isSafeInteger(i))throw new Error(`${i} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return i}if(i=2**32*n+r,!Number.isSafeInteger(i))throw new Error(`${i} exceeds MAX_SAFE_INTEGER. Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues`);return i}readInt64(e){let n=0;const r=(this._dataView.getUint8(e+(this._littleEndian?7:0))&128)>0;let i=!0;for(let a=0;a<8;a++){let o=this._dataView.getUint8(e+(this._littleEndian?a:7-a));r&&(i?o!==0&&(o=~(o-1)&255,i=!1):o=~o&255),n+=o*256**a}return r&&(n=-n),n}readOffset(e){return this._bigTiff?this.readUint64(e):this.readUint32(e)}}class Wan{async fetch(e,n=void 0){return Promise.all(e.map(r=>this.fetchSlice(r,n)))}async fetchSlice(e){throw new Error(`fetching of slice ${e} not possible, not implemented`)}get fileSize(){return null}async close(){}}class ioe extends Error{constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,ioe),this.name="AbortError"}}class Xan extends Wan{constructor(e){super(),this.arrayBuffer=e}fetchSlice(e,n){if(n&&n.aborted)throw new ioe("Request aborted");return this.arrayBuffer.slice(e.offset,e.offset+e.length)}}function Zan(t){return new Xan(t)}function aee(t){switch(t){case No.BYTE:case No.ASCII:case No.SBYTE:case No.UNDEFINED:return 1;case No.SHORT:case No.SSHORT:return 2;case No.LONG:case No.SLONG:case No.FLOAT:case No.IFD:return 4;case No.RATIONAL:case No.SRATIONAL:case No.DOUBLE:case No.LONG8:case No.SLONG8:case No.IFD8:return 8;default:throw new RangeError(`Invalid field type: ${t}`)}}function qan(t){const e=t.GeoKeyDirectory;if(!e)return null;const n={};for(let r=4;r<=e[3]*4;r+=4){const i=Can[e[r]],a=e[r+1]?UI[e[r+1]]:null,o=e[r+2],s=e[r+3];let l=null;if(!a)l=s;else{if(l=t[a],typeof l>"u"||l===null)throw new Error(`Could not get value of geoKey '${i}'.`);typeof l=="string"?l=l.substring(s,s+o-1):l.subarray&&(l=l.subarray(s,s+o),o===1&&(l=l[0]))}n[i]=l}return n}function Nx(t,e,n,r){let i=null,a=null;const o=aee(e);switch(e){case No.BYTE:case No.ASCII:case No.UNDEFINED:i=new Uint8Array(n),a=t.readUint8;break;case No.SBYTE:i=new Int8Array(n),a=t.readInt8;break;case No.SHORT:i=new Uint16Array(n),a=t.readUint16;break;case No.SSHORT:i=new Int16Array(n),a=t.readInt16;break;case No.LONG:case No.IFD:i=new Uint32Array(n),a=t.readUint32;break;case No.SLONG:i=new Int32Array(n),a=t.readInt32;break;case No.LONG8:case No.IFD8:i=new Array(n),a=t.readUint64;break;case No.SLONG8:i=new Array(n),a=t.readInt64;break;case No.RATIONAL:i=new Uint32Array(n*2),a=t.readUint32;break;case No.SRATIONAL:i=new Int32Array(n*2),a=t.readInt32;break;case No.FLOAT:i=new Float32Array(n),a=t.readFloat32;break;case No.DOUBLE:i=new Float64Array(n),a=t.readFloat64;break;default:throw new RangeError(`Invalid field type: ${e}`)}if(e===No.RATIONAL||e===No.SRATIONAL)for(let s=0;s<n;s+=2)i[s]=a.call(t,r+s*o),i[s+1]=a.call(t,r+(s*o+4));else for(let s=0;s<n;++s)i[s]=a.call(t,r+s*o);return e===No.ASCII?new TextDecoder("utf-8").decode(i):i}class Yan{constructor(e,n,r){this.fileDirectory=e,this.geoKeyDirectory=n,this.nextIFDByteOffset=r}}class dL extends Error{constructor(e){super(`No image at index ${e}`),this.index=e}}class Kan{async readRasters(e={}){const{window:n,width:r,height:i}=e;let{resX:a,resY:o,bbox:s}=e;const l=await this.getImage();let u=l;const d=await this.getImageCount(),f=l.getBoundingBox();if(n&&s)throw new Error('Both "bbox" and "window" passed.');if(r||i){if(n){const[g,y]=l.getOrigin(),[v,m]=l.getResolution();s=[g+n[0]*v,y+n[1]*m,g+n[2]*v,y+n[3]*m]}const h=s||f;if(r){if(a)throw new Error("Both width and resX passed");a=(h[2]-h[0])/r}if(i){if(o)throw new Error("Both width and resY passed");o=(h[3]-h[1])/i}}if(a||o){const h=[];for(let g=0;g<d;++g){const y=await this.getImage(g),{SubfileType:v,NewSubfileType:m}=y.fileDirectory;(g===0||v===2||m&1)&&h.push(y)}h.sort((g,y)=>g.getWidth()-y.getWidth());for(let g=0;g<h.length;++g){const y=h[g],v=(f[2]-f[0])/y.getWidth(),m=(f[3]-f[1])/y.getHeight();if(u=y,a&&a>v||o&&o>m)break}}let p=n;if(s){const[h,g]=l.getOrigin(),[y,v]=u.getResolution(l);p=[Math.round((s[0]-h)/y),Math.round((s[1]-g)/v),Math.round((s[2]-h)/y),Math.round((s[3]-g)/v)],p=[Math.min(p[0],p[2]),Math.min(p[1],p[3]),Math.max(p[0],p[2]),Math.max(p[1],p[3])]}return u.readRasters({...e,window:p})}}class aoe extends Kan{constructor(e,n,r,i,a={}){super(),this.source=e,this.littleEndian=n,this.bigTiff=r,this.firstIFDOffset=i,this.cache=a.cache||!1,this.ifdRequests=[],this.ghostValues=null}async getSlice(e,n){const r=this.bigTiff?4048:1024;return new jan((await this.source.fetch([{offset:e,length:typeof n<"u"?n:r}]))[0],e,this.littleEndian,this.bigTiff)}async parseFileDirectoryAt(e){const n=this.bigTiff?20:12,r=this.bigTiff?8:2;let i=await this.getSlice(e);const a=this.bigTiff?i.readUint64(e):i.readUint16(e),o=a*n+(this.bigTiff?16:6);i.covers(e,o)||(i=await this.getSlice(e,o));const s={};let l=e+(this.bigTiff?8:2);for(let f=0;f<a;l+=n,++f){const p=i.readUint16(l),h=i.readUint16(l+2),g=this.bigTiff?i.readUint64(l+4):i.readUint32(l+4);let y,v;const m=aee(h),b=l+(this.bigTiff?12:8);if(m*g<=(this.bigTiff?8:4))y=Nx(i,h,g,b);else{const E=i.readOffset(b),C=aee(h)*g;if(i.covers(E,C))y=Nx(i,h,g,E);else{const x=await this.getSlice(E,C);y=Nx(x,h,g,E)}}g===1&&yan.indexOf(p)===-1&&!(h===No.RATIONAL||h===No.SRATIONAL)?v=y[0]:v=y,s[UI[p]]=v}const u=qan(s),d=i.readOffset(e+r+n*a);return new Yan(s,u,d)}async requestIFD(e){if(this.ifdRequests[e])return this.ifdRequests[e];if(e===0)return this.ifdRequests[e]=this.parseFileDirectoryAt(this.firstIFDOffset),this.ifdRequests[e];if(!this.ifdRequests[e-1])try{this.ifdRequests[e-1]=this.requestIFD(e-1)}catch(n){throw n instanceof dL?new dL(e):n}return this.ifdRequests[e]=(async()=>{const n=await this.ifdRequests[e-1];if(n.nextIFDByteOffset===0)throw new dL(e);return this.parseFileDirectoryAt(n.nextIFDByteOffset)})(),this.ifdRequests[e]}async getImage(e=0){const n=await this.requestIFD(e);return new Han(n.fileDirectory,n.geoKeyDirectory,this.dataView,this.littleEndian,this.cache,this.source)}async getImageCount(){let e=0,n=!0;for(;n;)try{await this.requestIFD(e),++e}catch(r){if(r instanceof dL)n=!1;else throw r}return e}async getGhostValues(){const e=this.bigTiff?16:8;if(this.ghostValues)return this.ghostValues;const n="GDAL_STRUCTURAL_METADATA_SIZE=",r=n.length+100;let i=await this.getSlice(e,r);if(n===Nx(i,No.ASCII,n.length,e)){const o=Nx(i,No.ASCII,r,e).split(`
|
|
4502
4502
|
`)[0],s=Number(o.split("=")[1].split(" ")[0])+o.length;s>r&&(i=await this.getSlice(e,s));const l=Nx(i,No.ASCII,s,e);this.ghostValues={},l.split(`
|
|
4503
4503
|
`).filter(u=>u.length>0).map(u=>u.split("=")).forEach(([u,d])=>{this.ghostValues[u]=d})}return this.ghostValues}static async fromSource(e,n,r){const i=(await e.fetch([{offset:0,length:1024}],r))[0],a=new Gan(i),o=a.getUint16(0,0);let s;if(o===18761)s=!0;else if(o===19789)s=!1;else throw new TypeError("Invalid byte order value.");const l=a.getUint16(2,s);let u;if(l===42)u=!1;else if(l===43){if(u=!0,a.getUint16(4,s)!==8)throw new Error("Unsupported offset byte-size.")}else throw new TypeError("Invalid magic number.");const d=u?a.getUint64(8,s):a.getUint32(4,s);return new aoe(e,s,u,d,n)}close(){return typeof this.source.close=="function"?this.source.close():!1}}async function kCe(t,e){return aoe.fromSource(Zan(t),e)}const Jan=({axon_check:t,fbxTreeDatas:e,setLeftMenuTabIndex:n,swcRef:r,setIsChartOpen:i,setEchartValue:a,setChartValue:o,reset:s})=>{const l=S.useRef(null),u=S.useRef(null),[d,f]=S.useState(!1),[p,h]=S.useState(""),[g,y]=S.useState(""),[v,m]=S.useState({x:0,y:0}),b=S.useRef([]),E=S.useRef([]),C=S.useRef(null),x=S.useRef(null),[_,A]=S.useState(!0),P=S.useRef("#000"),[R,N]=S.useState(["Isocortex","OLF","HPF","CTXsp","STR","PAL","IB","MB","HB","CB","VS","fiber tract"]),[D,U]=S.useState({nodes:[],links:[],categories:[]});let z=S.useRef(null),B=!1;const j=(X,te)=>{N(K=>[...K.filter(Y=>!X.includes(Y)),...te])};S.useEffect(()=>{N(["Isocortex","OLF","HPF","CTXsp","STR","PAL","IB","MB","HB","CB","VS","fiber tract"])},[s]);const V=(X,te)=>te.map(K=>{const Y=X.find(ie=>ie.id===K.source),Q=X.find(ie=>ie.id===K.target);return{...K,lineStyle:{color:{type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:Q.itemStyle.color},{offset:1,color:Y.itemStyle.color}]},width:1,curveness:.3}}});S.useEffect(()=>{G(R)},[R]);const G=X=>{fetch("/app-api/d-api/connectivity",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:X})}).then(te=>te.json()).then(te=>{te.code==200?U(te.node):nc.error(te.message)})};S.useEffect(()=>{u.current=s7(l.current),u.current.clear();const X=()=>u.current.getOption().series[0].data,te={tooltip:{formatter:ee=>{var oe,ue;return ee.dataType==="node"?`${ee.data.fullname} (${ee.data.name})<br>Downstream: ${((oe=t[ee.data.name].down)==null?void 0:oe.length)??0} projection neuron(s)<br>Upstream: projected by ${((ue=t[ee.data.name].up)==null?void 0:ue.length)??0} neuron(s)`:(ee.dataType,"")}},animationDurationUpdate:1500,animationEasingUpdate:"quinticInOut",series:[{name:"Les Miserables",type:"graph",layout:"circular",circular:{rotateLabel:!0},data:D.nodes,links:V(D.nodes,D.links),categories:D.categories,roam:!0,label:{show:!0,position:"right",formatter:"{b}",textStyle:{fontSize:20}},lineStyle:{color:"source",curveness:.3}}]};function K(ee){if(ee.event.event.preventDefault(),ee.dataType=="node"){const oe=Y(ee.data.name,e);let ue=W(oe);ue&&j(ue,[oe.name])}if(ee.dataType=="edge"){const oe=X().find(pe=>pe.id===ee.data.source),ue=X().find(pe=>pe.id===ee.data.target);b.current=t[oe.name].soma.filter(function(pe){return t[ue.name].axon.indexOf(pe)>-1}),E.current=t[ue.name].soma.filter(function(pe){return t[oe.name].axon.indexOf(pe)>-1}),h(oe.name),y(ue.name),m({x:ee.event.event.clientX+2,y:ee.event.event.clientY}),f(!0),P.current=ee.data.lineStyle.color.colorStops[0].color}}const Y=(ee,oe)=>{let ue={name:""};for(let pe=0;pe<oe.length;pe++){const he=oe[pe];if(he.children){if(he.children.some(ae=>ae.name===ee)){ue=he;break}else if(Y(ee,he.children)){ue=Y(ee,he.children);break}}}return ue},Q=ee=>{clearTimeout(z.current),B=!0,a(ee.data.name),o(ee.data.name),i(!1)},ie=ee=>{z.current=setTimeout(()=>{if(!B){const oe=Z(ee.data.name,e);if(oe){let ue=[];"children"in oe?(oe.children.forEach(pe=>{ue.push(pe.name)}),j([ee.data.name],ue)):nc.error("No child node")}}B=!1},300)};return u.current.setOption(te),u.current.on("click",ie),u.current.on("dblclick",Q),u.current.on("contextmenu",K),()=>{u.current.off("click",ie),u.current.off("dblclick",Q),u.current.off("contextmenu",K)}},[e,D]);const W=X=>{const te=[],K=Y=>{te.push(Y.name),Y.children&&Y.children.forEach(Q=>K(Q))};return K(X),te},Z=(X,te)=>{let K=[],Y=!1,Q;for(let ie=0;ie<te.length;ie++)K.push(te[ie]);for(;K.length>0&&!Y;){let ie=K.pop();if(ie.name==X){Y=!0,Q=ie;break}else if(ie.children)for(let ee=0;ee<ie.children.length;ee++)K.push(ie.children[ee])}return Q},H=[{key:"1",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:X=>{n(3),r.current.setSearchValue(g),r.current.setSomaValue(p),f(!1),i(!1)}},p," →",g,": ",b.current.length," projection neruon(s)")},{key:"2",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:X=>{n(3),r.current.setSearchValue(p),r.current.setSomaValue(g),f(!1),i(!1)}},g," →",p,": ",E.current.length," projection neruon(s)")}];return S.createElement(S.Fragment,null,S.createElement("div",{style:{overflow:"hidden",position:"absolute",width:"500px",height:"200px"}},S.createElement("div",{ref:C,style:{zIndex:9,position:"absolute",backgroundColor:"#f1f1f180",borderTopRightRadius:"5px",borderTopLeftRadius:"5px",borderBottomRightRadius:"5px",transform:_?"translateY(0)":"translateY(-99%)",transition:"transform 0.3s ease-in-out",padding:"5px"}},S.createElement("p",{style:{paddingLeft:"10px",paddingRight:"10px"}},"- Mouse-over a node to see upstream and downstream neuron numbers",S.createElement("br",null),"- Left-click a node to expand its children structures",S.createElement("br",null),"- Righ-click a node to collapse to its parent structure",S.createElement("br",null),"- Double-click a node to visualize all its projections in the main window",S.createElement("br",null),"- Righ-click a line to see the projections between two connected nodes",S.createElement("br",null),"- Left-click the popup menu of the line to inquire the projection neurons"),S.createElement("a",{style:{zIndex:9,position:"absolute",bottom:"-28px",left:0,display:"flex"},onClick:()=>{A(!_)}},S.createElement("div",{style:{width:"90px",height:"28px",display:"flex",justifyContent:"center",borderBottomRightRadius:"5px",borderBottomLeftRadius:"5px",backgroundColor:"#f1f1f180"}},S.createElement("div",{style:{display:"flex",alignItems:"center",color:"#000"}},"Help ",S.createElement("div",{ref:x,style:{width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent",borderBottom:_?"10px solid #000":0,borderTop:_?0:"10px solid #000"}})))))),S.createElement(GS,{menu:{items:H},open:d,overlayStyle:{position:"absolute",left:v.x,top:v.y,width:"auto",minWidth:"auto",border:`2px solid ${P}`},overlayClassName:"pipeline_dropdown"},S.createElement("div",{ref:l,style:{width:"100%",height:"calc(100vh - 75px)"},onMouseEnter:()=>{f(!1)}})))};class Qan{constructor(e,n,r,i,a,o,s){Jm(this,"name");Jm(this,"branches");Jm(this,"indices");Jm(this,"points");Jm(this,"numSoma");Jm(this,"vao");Jm(this,"vbo");Jm(this,"ebo");Jm(this,"viewType",0);this.name=n,this.branches=[],this.indices=[],this.points=[],this.numSoma=0,this.vao=null,this.vbo=null,this.ebo=null,o&&(this.viewType=o);for(var l=null,u=e.split(`
|
|
4504
4504
|
`),d=0;d<u.length;++d)if(u[d][0]!="#"){if(u[d].length==0&&l!=null){l.count=this.indices.length-l.start,this.branches.push(l),l=null;continue}var f=u[d].trim().split(" "),p=parseInt(f[0]);if(i!=null)if(a!=null)var h=parseFloat(f[2])+parseFloat(a[0])-parseFloat(i[0]),g=parseFloat(f[3])+parseFloat(a[2])-parseFloat(i[2]),y=parseFloat(f[4])+parseFloat(a[4])-parseFloat(i[4]);else var h=parseFloat(f[2])+parseFloat(r[0])-parseFloat(i[0]),g=parseFloat(f[3])+parseFloat(r[2])-parseFloat(i[2]),y=parseFloat(f[4])+parseFloat(r[4])-parseFloat(i[4]);else if(a!=null)var h=parseFloat(f[2])+parseFloat(a[0])-parseFloat(r[0]),g=parseFloat(f[3])+parseFloat(a[2])-parseFloat(r[2]),y=parseFloat(f[4])+parseFloat(a[4])-parseFloat(r[4]);else if(o)var h=parseFloat(f[2])+parseFloat(r[0])-s[0],g=parseFloat(f[3])+parseFloat(r[2])-s[2],y=parseFloat(f[4])+parseFloat(r[4])-s[4];else var h=parseFloat(f[2]),g=parseFloat(f[3]),y=parseFloat(f[4]);var v=parseInt(f[6]);p==1?(l={start:0},this.indices.push(0),this.numSoma=1):v!=p-1||v==-1?(l.count=this.indices.length-l.start,this.branches.push(l),l={start:this.indices.length},v!=-1?this.indices.push(v-1):this.numSoma+=1,this.indices.push(this.points.length/3)):this.indices.push(this.points.length/3),this.points.push(h),this.points.push(g),this.points.push(y)}l&&(l.count=this.indices.length-l.start,this.branches.push(l))}}const eon="1.2.0",ton=S.createContext({}),non=ton,ron={classNames:{},styles:{},className:"",style:{}},ion=t=>{const e=S.useContext(non);return S.useMemo(()=>({...ron,...e[t]}),[e[t]])},aon=ion;function ew(){return ew=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},ew.apply(null,arguments)}function H7(){const{getPrefixCls:t,direction:e,csp:n,iconPrefixCls:r,theme:i}=S.useContext(Ag.ConfigContext);return{theme:i,getPrefixCls:t,direction:e,csp:n,iconPrefixCls:r}}process.env.NODE_ENV;const oon=QI(AK.defaultAlgorithm),son={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},OHe=(t,e,n)=>{const r=n.getDerivativeToken(t),{override:i,...a}=e;let o={...r,override:i};return o=TP(o),a&&Object.entries(a).forEach(([s,l])=>{const{theme:u,...d}=l;let f=d;u&&(f=OHe({...o,...d},{override:d},u)),o[s]=f}),o};function lon(){const{token:t,hashed:e,theme:n=oon,override:r,cssVar:i}=S.useContext(AK._internalContext),[a,o,s]=qAe(n,[AK.defaultSeed,t],{salt:`${eon}-${e||""}`,override:r,getComputedToken:OHe,cssVar:i&&{prefix:i.prefix,key:i.key,unitless:pte,ignore:Y6e,preserve:son}});return[n,s,e?o:"",a,i]}const{genStyleHooks:con,genComponentStyleHook:Y4n,genSubStyleComponent:K4n}=q6e({usePrefix:()=>{const{getPrefixCls:t,iconPrefixCls:e}=H7();return{iconPrefixCls:e,rootPrefixCls:t()}},useToken:()=>{const[t,e,n,r,i]=lon();return{theme:t,realToken:e,hashId:n,token:r,cssVar:i}},useCSP:()=>{const{csp:t}=H7();return t??{}},layer:{name:"antdx",dependencies:["antd"]}});function fL(t){return typeof t=="string"}const uon=(t,e,n,r)=>{const i=w.useRef(""),[a,o]=w.useState(1),s=e&&fL(t);return Ko(()=>{!s&&fL(t)?o(t.length):fL(t)&&fL(i.current)&&t.indexOf(i.current)!==0&&o(1),i.current=t},[t]),w.useEffect(()=>{if(s&&a<t.length){const u=setTimeout(()=>{o(d=>d+n)},r);return()=>{clearTimeout(u)}}},[a,e,t]),[s?t.slice(0,a):t,s&&a<t.length]},don=uon;function fon(t){return w.useMemo(()=>{if(!t)return[!1,0,0,null];let e={step:1,interval:50,suffix:null};return typeof t=="object"&&(e={...e,...t}),[!0,e.step,e.interval,e.suffix]},[t])}const pon=({prefixCls:t})=>S.createElement("span",{className:`${t}-dot`},S.createElement("i",{className:`${t}-dot-item`,key:"item-1"}),S.createElement("i",{className:`${t}-dot-item`,key:"item-2"}),S.createElement("i",{className:`${t}-dot-item`,key:"item-3"})),hon=pon,gon=t=>{const{componentCls:e,paddingSM:n,padding:r}=t;return{[e]:{[`${e}-content`]:{"&-filled,&-outlined,&-shadow":{padding:`${Xe(n)} ${Xe(r)}`,borderRadius:t.borderRadiusLG},"&-filled":{backgroundColor:t.colorFillContent},"&-outlined":{border:`1px solid ${t.colorBorderSecondary}`},"&-shadow":{boxShadow:t.boxShadowTertiary}}}}},mon=t=>{const{componentCls:e,fontSize:n,lineHeight:r,paddingSM:i,padding:a,calc:o}=t,s=o(n).mul(r).div(2).add(i).equal(),l=`${e}-content`;return{[e]:{[l]:{"&-round":{borderRadius:{_skip_check_:!0,value:s},paddingInline:o(a).mul(1.25).equal()}},[`&-start ${l}-corner`]:{borderStartStartRadius:t.borderRadiusXS},[`&-end ${l}-corner`]:{borderStartEndRadius:t.borderRadiusXS}}}},von=t=>{const{componentCls:e,padding:n}=t;return{[`${e}-list`]:{display:"flex",flexDirection:"column",gap:n,overflowY:"auto","&::-webkit-scrollbar":{width:8,backgroundColor:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:t.colorTextTertiary,borderRadius:t.borderRadiusSM},"&":{scrollbarWidth:"thin",scrollbarColor:`${t.colorTextTertiary} transparent`}}}},yon=von,bon=new Ja("loadingMove",{"0%":{transform:"translateY(0)"},"10%":{transform:"translateY(4px)"},"20%":{transform:"translateY(0)"},"30%":{transform:"translateY(-4px)"},"40%":{transform:"translateY(0)"}}),Eon=new Ja("cursorBlink",{"0%":{opacity:1},"50%":{opacity:0},"100%":{opacity:1}}),Son=t=>{const{componentCls:e,fontSize:n,lineHeight:r,paddingSM:i,colorText:a,calc:o}=t;return{[e]:{display:"flex",columnGap:i,[`&${e}-end`]:{justifyContent:"end",flexDirection:"row-reverse",[`& ${e}-content-wrapper`]:{alignItems:"flex-end"}},[`&${e}-rtl`]:{direction:"rtl"},[`&${e}-typing ${e}-content:last-child::after`]:{content:'"|"',fontWeight:900,userSelect:"none",opacity:1,marginInlineStart:"0.1em",animationName:Eon,animationDuration:"0.8s",animationIterationCount:"infinite",animationTimingFunction:"linear"},[`& ${e}-avatar`]:{display:"inline-flex",justifyContent:"center",alignSelf:"flex-start"},[`& ${e}-header, & ${e}-footer`]:{fontSize:n,lineHeight:r,color:t.colorText},[`& ${e}-header`]:{marginBottom:t.paddingXXS},[`& ${e}-footer`]:{marginTop:i},[`& ${e}-content-wrapper`]:{flex:"auto",display:"flex",flexDirection:"column",alignItems:"flex-start",minWidth:0,maxWidth:"100%"},[`& ${e}-content`]:{position:"relative",boxSizing:"border-box",minWidth:0,maxWidth:"100%",color:a,fontSize:t.fontSize,lineHeight:t.lineHeight,minHeight:o(i).mul(2).add(o(r).mul(n)).equal(),wordBreak:"break-word",[`& ${e}-dot`]:{position:"relative",height:"100%",display:"flex",alignItems:"center",columnGap:t.marginXS,padding:`0 ${Xe(t.paddingXXS)}`,"&-item":{backgroundColor:t.colorPrimary,borderRadius:"100%",width:4,height:4,animationName:bon,animationDuration:"2s",animationIterationCount:"infinite",animationTimingFunction:"linear","&:nth-child(1)":{animationDelay:"0s"},"&:nth-child(2)":{animationDelay:"0.2s"},"&:nth-child(3)":{animationDelay:"0.4s"}}}}}}},Con=()=>({}),LHe=con("Bubble",t=>{const e=da(t,{});return[Son(e),yon(e),gon(e),mon(e)]},Con),NHe=S.createContext({}),xon=(t,e)=>{const{prefixCls:n,className:r,rootClassName:i,style:a,classNames:o={},styles:s={},avatar:l,placement:u="start",loading:d=!1,loadingRender:f,typing:p,content:h="",messageRender:g,variant:y="filled",shape:v,onTypingComplete:m,header:b,footer:E,...C}=t,{onUpdate:x}=S.useContext(NHe),_=S.useRef(null);S.useImperativeHandle(e,()=>({nativeElement:_.current}));const{direction:A,getPrefixCls:P}=H7(),R=P("bubble",n),N=aon("bubble"),[D,U,z,B]=fon(p),[j,V]=don(h,D,U,z);S.useEffect(()=>{x==null||x()},[j]);const G=S.useRef(!1);S.useEffect(()=>{!V&&!d?G.current||(G.current=!0,m==null||m()):G.current=!1},[V,d]);const[W,Z,H]=LHe(R),X=Je(R,i,N.className,r,Z,H,`${R}-${u}`,{[`${R}-rtl`]:A==="rtl",[`${R}-typing`]:V&&!d&&!g&&!B}),te=S.useMemo(()=>S.isValidElement(l)?l:S.createElement($dt,l),[l]),K=S.useMemo(()=>g?g(j):j,[j,g]);let Y;d?Y=f?f():S.createElement(hon,{prefixCls:R}):Y=S.createElement(S.Fragment,null,K,V&&B);let Q=S.createElement("div",{style:{...N.styles.content,...s.content},className:Je(`${R}-content`,`${R}-content-${y}`,v&&`${R}-content-${v}`,N.classNames.content,o.content)},Y);return(b||E)&&(Q=S.createElement("div",{className:`${R}-content-wrapper`},b&&S.createElement("div",{className:Je(`${R}-header`,N.classNames.header,o.header),style:{...N.styles.header,...s.header}},b),Q,E&&S.createElement("div",{className:Je(`${R}-footer`,N.classNames.footer,o.footer),style:{...N.styles.footer,...s.footer}},typeof E=="function"?E(K):E))),W(S.createElement("div",ew({style:{...N.style,...a},className:X},C,{ref:_}),l&&S.createElement("div",{style:{...N.styles.avatar,...s.avatar},className:Je(`${R}-avatar`,N.classNames.avatar,o.avatar)},te),Q))},MHe=S.forwardRef(xon);process.env.NODE_ENV!=="production"&&(MHe.displayName="Bubble");const ooe=MHe;function _on(t,e){const n=w.useCallback((r,i)=>typeof e=="function"?e(r,i):e?e[r.role]||{}:{},[e]);return w.useMemo(()=>(t||[]).map((r,i)=>{const a=r.key??`preset_${i}`;return{...n(r,i),...r,key:a}}),[t,n])}const won=({_key:t,...e},n)=>w.createElement(ooe,ew({},e,{ref:r=>{var i;r?n.current[t]=r:(i=n.current)==null||delete i[t]}})),Ton=w.memo(w.forwardRef(won)),Ion=1,Aon=(t,e)=>{const{prefixCls:n,rootClassName:r,className:i,items:a,autoScroll:o=!0,roles:s,...l}=t,u=Dp(l,{attr:!0,aria:!0}),d=w.useRef(null),f=w.useRef({}),{getPrefixCls:p}=H7(),h=p("bubble",n),g=`${h}-list`,[y,v,m]=LHe(h),[b,E]=w.useState(!1);w.useEffect(()=>(E(!0),()=>{E(!1)}),[]);const C=_on(a,s),[x,_]=w.useState(!0),[A,P]=w.useState(0),R=U=>{const z=U.target;_(z.scrollHeight-Math.abs(z.scrollTop)-z.clientHeight<=Ion)};w.useEffect(()=>{o&&d.current&&x&&d.current.scrollTo({top:d.current.scrollHeight})},[A]),w.useEffect(()=>{var U;if(o){const z=(U=C[C.length-2])==null?void 0:U.key,B=f.current[z];if(B){const{nativeElement:j}=B,{top:V,bottom:G}=j.getBoundingClientRect(),{top:W,bottom:Z}=d.current.getBoundingClientRect();V<Z&&G>W&&(P(X=>X+1),_(!0))}}},[C.length]),w.useImperativeHandle(e,()=>({nativeElement:d.current,scrollTo:({key:U,offset:z,behavior:B="smooth",block:j})=>{if(typeof z=="number")d.current.scrollTo({top:z,behavior:B});else if(U!==void 0){const V=f.current[U];if(V){const G=C.findIndex(W=>W.key===U);_(G===C.length-1),V.nativeElement.scrollIntoView({behavior:B,block:j})}}}}));const N=Gl(()=>{o&&P(U=>U+1)}),D=w.useMemo(()=>({onUpdate:N}),[]);return y(w.createElement(NHe.Provider,{value:D},w.createElement("div",ew({},u,{className:Je(g,r,i,v,m,{[`${g}-reach-end`]:x}),ref:d,onScroll:R}),C.map(({key:U,...z})=>w.createElement(Ton,ew({},z,{key:U,_key:U,ref:f,typing:b?z.typing:!1}))))))},PHe=w.forwardRef(Aon);process.env.NODE_ENV!=="production"&&(PHe.displayName="BubbleList");const Ron=PHe;ooe.List=Ron;function UCe(t){const e=[],n=String(t||"");let r=n.indexOf(","),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);const o=n.slice(i,r).trim();(o||!a)&&e.push(o),i=r+1,r=n.indexOf(",",i)}return e}function DHe(t,e){const n=e||{};return(t[t.length-1]===""?[...t,""]:t).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const Oon=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Lon=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,Non={};function FCe(t,e){return((e||Non).jsx?Lon:Oon).test(t)}const Mon=/[ \t\n\f\r]/g;function Pon(t){return typeof t=="object"?t.type==="text"?BCe(t.value):!1:BCe(t)}function BCe(t){return t.replace(Mon,"")===""}let v8=class{constructor(e,n,r){this.normal=n,this.property=e,r&&(this.space=r)}};v8.prototype.normal={};v8.prototype.property={};v8.prototype.space=void 0;function kHe(t,e){const n={},r={};for(const i of t)Object.assign(n,i.property),Object.assign(r,i.normal);return new v8(n,r,e)}function l6(t){return t.toLowerCase()}let $p=class{constructor(e,n){this.attribute=n,this.property=e}};$p.prototype.attribute="";$p.prototype.booleanish=!1;$p.prototype.boolean=!1;$p.prototype.commaOrSpaceSeparated=!1;$p.prototype.commaSeparated=!1;$p.prototype.defined=!1;$p.prototype.mustUseProperty=!1;$p.prototype.number=!1;$p.prototype.overloadedBoolean=!1;$p.prototype.property="";$p.prototype.spaceSeparated=!1;$p.prototype.space=void 0;let Don=0;const wo=rC(),Nu=rC(),UHe=rC(),Gr=rC(),Jl=rC(),f_=rC(),eh=rC();function rC(){return 2**++Don}const oee=Object.freeze(Object.defineProperty({__proto__:null,boolean:wo,booleanish:Nu,commaOrSpaceSeparated:eh,commaSeparated:f_,number:Gr,overloadedBoolean:UHe,spaceSeparated:Jl},Symbol.toStringTag,{value:"Module"})),SH=Object.keys(oee);let soe=class extends $p{constructor(e,n,r,i){let a=-1;if(super(e,n),$Ce(this,"space",i),typeof r=="number")for(;++a<SH.length;){const o=SH[a];$Ce(this,SH[a],(r&oee[o])===oee[o])}}};soe.prototype.defined=!0;function $Ce(t,e,n){n&&(t[e]=n)}function nT(t){const e={},n={};for(const[r,i]of Object.entries(t.properties)){const a=new soe(r,t.transform(t.attributes||{},r),i,t.space);t.mustUseProperty&&t.mustUseProperty.includes(r)&&(a.mustUseProperty=!0),e[r]=a,n[l6(r)]=r,n[l6(a.attribute)]=r}return new v8(e,n,t.space)}const FHe=nT({properties:{ariaActiveDescendant:null,ariaAtomic:Nu,ariaAutoComplete:null,ariaBusy:Nu,ariaChecked:Nu,ariaColCount:Gr,ariaColIndex:Gr,ariaColSpan:Gr,ariaControls:Jl,ariaCurrent:null,ariaDescribedBy:Jl,ariaDetails:null,ariaDisabled:Nu,ariaDropEffect:Jl,ariaErrorMessage:null,ariaExpanded:Nu,ariaFlowTo:Jl,ariaGrabbed:Nu,ariaHasPopup:null,ariaHidden:Nu,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Jl,ariaLevel:Gr,ariaLive:null,ariaModal:Nu,ariaMultiLine:Nu,ariaMultiSelectable:Nu,ariaOrientation:null,ariaOwns:Jl,ariaPlaceholder:null,ariaPosInSet:Gr,ariaPressed:Nu,ariaReadOnly:Nu,ariaRelevant:null,ariaRequired:Nu,ariaRoleDescription:Jl,ariaRowCount:Gr,ariaRowIndex:Gr,ariaRowSpan:Gr,ariaSelected:Nu,ariaSetSize:Gr,ariaSort:null,ariaValueMax:Gr,ariaValueMin:Gr,ariaValueNow:Gr,ariaValueText:null,role:null},transform(t,e){return e==="role"?e:"aria-"+e.slice(4).toLowerCase()}});function BHe(t,e){return e in t?t[e]:e}function $He(t,e){return BHe(t,e.toLowerCase())}const kon=nT({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:f_,acceptCharset:Jl,accessKey:Jl,action:null,allow:null,allowFullScreen:wo,allowPaymentRequest:wo,allowUserMedia:wo,alt:null,as:null,async:wo,autoCapitalize:null,autoComplete:Jl,autoFocus:wo,autoPlay:wo,blocking:Jl,capture:null,charSet:null,checked:wo,cite:null,className:Jl,cols:Gr,colSpan:null,content:null,contentEditable:Nu,controls:wo,controlsList:Jl,coords:Gr|f_,crossOrigin:null,data:null,dateTime:null,decoding:null,default:wo,defer:wo,dir:null,dirName:null,disabled:wo,download:UHe,draggable:Nu,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:wo,formTarget:null,headers:Jl,height:Gr,hidden:wo,high:Gr,href:null,hrefLang:null,htmlFor:Jl,httpEquiv:Jl,id:null,imageSizes:null,imageSrcSet:null,inert:wo,inputMode:null,integrity:null,is:null,isMap:wo,itemId:null,itemProp:Jl,itemRef:Jl,itemScope:wo,itemType:Jl,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:wo,low:Gr,manifest:null,max:null,maxLength:Gr,media:null,method:null,min:null,minLength:Gr,multiple:wo,muted:wo,name:null,nonce:null,noModule:wo,noValidate:wo,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:wo,optimum:Gr,pattern:null,ping:Jl,placeholder:null,playsInline:wo,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:wo,referrerPolicy:null,rel:Jl,required:wo,reversed:wo,rows:Gr,rowSpan:Gr,sandbox:Jl,scope:null,scoped:wo,seamless:wo,selected:wo,shadowRootClonable:wo,shadowRootDelegatesFocus:wo,shadowRootMode:null,shape:null,size:Gr,sizes:null,slot:null,span:Gr,spellCheck:Nu,src:null,srcDoc:null,srcLang:null,srcSet:null,start:Gr,step:null,style:null,tabIndex:Gr,target:null,title:null,translate:null,type:null,typeMustMatch:wo,useMap:null,value:Nu,width:Gr,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Jl,axis:null,background:null,bgColor:null,border:Gr,borderColor:null,bottomMargin:Gr,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:wo,declare:wo,event:null,face:null,frame:null,frameBorder:null,hSpace:Gr,leftMargin:Gr,link:null,longDesc:null,lowSrc:null,marginHeight:Gr,marginWidth:Gr,noResize:wo,noHref:wo,noShade:wo,noWrap:wo,object:null,profile:null,prompt:null,rev:null,rightMargin:Gr,rules:null,scheme:null,scrolling:Nu,standby:null,summary:null,text:null,topMargin:Gr,valueType:null,version:null,vAlign:null,vLink:null,vSpace:Gr,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:wo,disableRemotePlayback:wo,prefix:null,property:null,results:Gr,security:null,unselectable:null},space:"html",transform:$He}),Uon=nT({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:eh,accentHeight:Gr,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:Gr,amplitude:Gr,arabicForm:null,ascent:Gr,attributeName:null,attributeType:null,azimuth:Gr,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:Gr,by:null,calcMode:null,capHeight:Gr,className:Jl,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:Gr,diffuseConstant:Gr,direction:null,display:null,dur:null,divisor:Gr,dominantBaseline:null,download:wo,dx:null,dy:null,edgeMode:null,editable:null,elevation:Gr,enableBackground:null,end:null,event:null,exponent:Gr,externalResourcesRequired:null,fill:null,fillOpacity:Gr,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:f_,g2:f_,glyphName:f_,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:Gr,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:Gr,horizOriginX:Gr,horizOriginY:Gr,id:null,ideographic:Gr,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:Gr,k:Gr,k1:Gr,k2:Gr,k3:Gr,k4:Gr,kernelMatrix:eh,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:Gr,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:Gr,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:Gr,overlineThickness:Gr,paintOrder:null,panose1:null,path:null,pathLength:Gr,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Jl,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:Gr,pointsAtY:Gr,pointsAtZ:Gr,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:eh,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:eh,rev:eh,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:eh,requiredFeatures:eh,requiredFonts:eh,requiredFormats:eh,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:Gr,specularExponent:Gr,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:Gr,strikethroughThickness:Gr,string:null,stroke:null,strokeDashArray:eh,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:Gr,strokeOpacity:Gr,strokeWidth:null,style:null,surfaceScale:Gr,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:eh,tabIndex:Gr,tableValues:null,target:null,targetX:Gr,targetY:Gr,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:eh,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:Gr,underlineThickness:Gr,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:Gr,values:null,vAlphabetic:Gr,vMathematical:Gr,vectorEffect:null,vHanging:Gr,vIdeographic:Gr,version:null,vertAdvY:Gr,vertOriginX:Gr,vertOriginY:Gr,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:Gr,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:BHe}),VHe=nT({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(t,e){return"xlink:"+e.slice(5).toLowerCase()}}),zHe=nT({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:$He}),HHe=nT({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(t,e){return"xml:"+e.slice(3).toLowerCase()}}),Fon={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},Bon=/[A-Z]/g,VCe=/-[a-z]/g,$on=/^data[-\w.:]+$/i;function loe(t,e){const n=l6(e);let r=e,i=$p;if(n in t.normal)return t.property[t.normal[n]];if(n.length>4&&n.slice(0,4)==="data"&&$on.test(e)){if(e.charAt(4)==="-"){const a=e.slice(5).replace(VCe,zon);r="data"+a.charAt(0).toUpperCase()+a.slice(1)}else{const a=e.slice(4);if(!VCe.test(a)){let o=a.replace(Bon,Von);o.charAt(0)!=="-"&&(o="-"+o),e="data"+o}}i=soe}return new i(r,e)}function Von(t){return"-"+t.toLowerCase()}function zon(t){return t.charAt(1).toUpperCase()}const Mk=kHe([FHe,kon,VHe,zHe,HHe],"html"),rT=kHe([FHe,Uon,VHe,zHe,HHe],"svg");function zCe(t){const e=String(t||"").trim();return e?e.split(/[ \t\n\r\f]+/g):[]}function GHe(t){return t.join(" ").trim()}var coe={},HCe=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,Hon=/\n/g,Gon=/^\s*/,jon=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,Won=/^:\s*/,Xon=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,Zon=/^[;\s]*/,qon=/^\s+|\s+$/g,Yon=`
|
|
@@ -5089,7 +5089,7 @@ void main(){
|
|
|
5089
5089
|
// color = vec4(0.0,0.0,0.0,1.f);
|
|
5090
5090
|
// };
|
|
5091
5091
|
}
|
|
5092
|
-
`;let Axn=new URL(window.location.href),tf=new URLSearchParams(Axn.search),O5e=tf.get("leftHemisphereVisibility"),L5e=tf.get("coordinateVisibility"),N5e=tf.get("datumMarkVisibility"),M5e=tf.get("cranialVisibility"),P5e=tf.get("gridVisibility"),D5e=tf.get("terminalVisibility"),k5e=tf.get("branchingVisibility"),U5e=tf.get("branchingColor"),F5e=tf.get("brainContourVisibility"),B5e=tf.get("brainContourOpacity"),Y7=tf.get("otherAtlases"),K7=tf.get("atlasReslicingInfo"),J7=tf.get("sectionPointPosition"),$5e=tf.get("echart_Value"),WZ=tf.get("tiffDataPath"),V5e=tf.get("tiffInfo"),z5e=tf.get("swcUrl");const Rxn={leftHemisphereVisibility:O5e?JSON.parse(O5e):!1,coordinateVisibility:L5e?JSON.parse(L5e):!0,datumMarkVisibility:N5e?JSON.parse(N5e):!0,cranialVisibility:M5e?JSON.parse(M5e):!1,gridVisibility:P5e?JSON.parse(P5e):!0,terminalVisibility:D5e?JSON.parse(D5e):!0,branchingVisibility:k5e?JSON.parse(k5e):!0,branchingColor:U5e||"#A7B5A1",brainContourVisibility:F5e?JSON.parse(F5e):!0,brainContourOpacity:B5e?JSON.parse(B5e):.3,otherAtlases:Y7||"None",atlasReslicingInfo:K7?JSON.parse(K7):{},sectionPointPosition:J7?JSON.parse(J7):{}},Oxn=(t,e)=>{let n=new URL(window.location.href),r=new URLSearchParams(n.search),i=e;typeof e!="string"&&(i=JSON.stringify(i)),r.set(t,i),n.search=r.toString(),window.history.replaceState({},"",n)},Lxn={set(t,e,n){return t[e]=n,Oxn(e,n),!0}},Ka=new Proxy(Rxn,Lxn),Kc=Date.now(),vWe=S.forwardRef((t,e)=>{const{regionData:n,setoffset_factor:r,offset_factor_R:i,t:a,hrefStr:o,leftTreeRef:s,setJiaoduRef:l,jiaoduRef:u,mouseflag:d,renderer:f,controls:p,menutagShow:h,setMenuTag:g,startselect:y,linemeshs_jing:v,points:m,points2:b,activetabIndex:E,material:C,setShowimage:x,childRef:_,checkItems:A,setoutflag:P,fetchCoordinateFunc:R,setendPoint:N,clickPoint:D,outflagRef:U,axis_font:z,setdatum:B,modeChoose:j,setShowModeChoose:V,virusModeValue:G,setShowTabNums:W,pipelineClickEvent:Z,automaticGroup:H,focusVirusLineItem:X,setMenuTagShow:te,responsefunc:K,mode:Y,setCheckItems:Q,setLeftMenuTabIndex:ie,updatePage:ee,swcItem:oe,axon_check:ue,swcnameMesh:pe,setMode:he,vesselRef:ae,swcRef:Ce,vesselStr:re,lableStr:be,setShowSettingModal:fe,showSettingModal:Ae,fbxTreeDatas:Ve,composer:Ke,setEchartValue:Ue,echartValue:we,sectionsInfoRef:We,sectionsInfo:ye,setSectionsInfo:ge,gray_value:Be,setLuguchecked:Pe,Luguchecked:De,datum:ot,setGridShow:Ye,PointShow:qe,nodeStr:dt,lefttab:xt,righttab:wt,atlasData:at,setTip:yt,tip:Ze,startRegionAnimation:tt,setFunctionLoopSwcData:vt,azimuth:Me,setAzimuth:ht}=t,[Kt,Ot]=S.useState(!1),[Ht,qt]=S.useState(!1),[tn,mn]=S.useState(!1),[Rn,Tn]=S.useState(!1),[Wn,xr]=S.useState(!1),[Vr,Gn]=S.useState(!1),[jt,$n]=S.useState(!1),[yn,lr]=S.useState(!1),[dr,mt]=S.useState(Ka.atlasReslicingInfo.angleX||120),[Vt,fn]=S.useState(Ka.atlasReslicingInfo.angleY||320),[Fe,Ct]=S.useState(Ka.atlasReslicingInfo.angleZ||270),[Nt,Dt]=S.useState(Ka.atlasReslicingInfo.positionX||0),[Lt,Xt]=S.useState(Ka.atlasReslicingInfo.positionY||0),[zt,Qt]=S.useState(Ka.atlasReslicingInfo.positionZ||0),[Ln,Yt]=S.useState(Ka.atlasReslicingInfo.translateX||!0),[Ft,en]=S.useState(Ka.atlasReslicingInfo.translateY||!0),[Bn,In]=S.useState(Ka.atlasReslicingInfo.translateZ||!0),[gr,Or]=S.useState(Ka.atlasReslicingInfo.rotate||!0),[ar,bn]=S.useState(Ka.atlasReslicingInfo.ButtonDisabled||!0),[nr,Nn]=S.useState(!1),[kn,Dn]=S.useState(!1),[hr,ei]=S.useState(!1),[vi,ui]=S.useState(!1),[tr,vr]=S.useState(a("5000.0006")||"显示数据块"),[Er,rr]=S.useState(1),[zr,Ji]=S.useState(1),[Mi,Gi]=S.useState([]),[ha,no]=S.useState([]),[za,Ro]=S.useState([]),[ro,ti]=S.useState(!1),[Ir,$a]=S.useState({}),[Za,pa]=S.useState(!1),[Qo,ko]=S.useState(""),[bi,Ea]=S.useState("Config_DAPI.ini"),[ns,Ti]=S.useState("applySTAM2CCF"),[ho,fr]=S.useState("800"),[li,rn]=S.useState(1),[bt,ln]=S.useState(!1),[Ut,zn]=S.useState(!1),[Yn,kr]=S.useState(!1),[ii,yi]=S.useState(!1),[Zr,ai]=S.useState(!0),[_i,Mn]=S.useState(2),[Jn,on]=S.useState(!1),[_r,Te]=S.useState({}),Ne=S.useRef(Ka.atlasReslicingInfo.direction1||4),it=S.useRef(null),[lt,st]=S.useState(a("4000.0242")||"清除靶点"),[At,pt]=S.useState(!1),me=S.useRef(null),de=S.useRef(window.location.href.split("/")[2]),Oe=S.useRef(new t_(Bi.current,f==null?void 0:f.domElement)),et=S.useRef(0),Ge=S.useRef(0),ct=S.useRef(new er),Bt=S.useRef(new Ie),$t=S.useRef(new Ie),hn=S.useRef(new er),Tt=S.useRef(new Ie(1,0,0)),gt=S.useRef(new er),ir=S.useRef(null),Hn=S.useRef(new hI),Kn=S.useRef(null),gn=S.useRef([]),or=S.useRef(null),Lr=S.useRef(new er),pn=S.useRef(new Qc),[sn,ri]=S.useState(Ka.otherAtlases),Jr={min:new Ie(59.74305725097656,69.15838623046875,.9565062522888184),max:new Ie(1081.3045654296875,800.6698608398438,1400.156005859375)},[Br,js]=S.useState([]),Ha=S.useRef({}),Oo=S.useRef(!1),Ei=S.useRef([0,0]),di=S.useRef([0,0]),ga=S.useRef(""),Os=S.useRef(!1),[so,Ho]=S.useState(!1),[cc,Js]=S.useState(!1),[Us,lo]=S.useState(0),[co,Fs]=S.useState(0),[Al,Rl]=S.useState({}),[pr,ms]=S.useState([]),Bs=S.useRef(null),Ls=S.useRef(null),[$s,So]=S.useState(""),[Uo,Go]=S.useState(null),[Qa,io]=S.useState($5e||""),[ml,Cs]=S.useState(!1);S.useState("");const Co=S.useRef(""),[xs,Ws]=S.useState(Ka.leftHemisphereVisibility),Lc=S.useRef([]);S.useRef([]);const[Ol,Zl]=S.useState(!1),[Nc,Gc]=S.useState(!1),ql=S.useRef(!0),vl=S.useRef(!0),_s=S.useRef(""),Mc=S.useRef({target:p.current.target.clone(),position:p.current.object.position.clone(),up:p.current.object.up.clone(),enabled:p.current.enabled}),[wu,uc]=S.useState(0),[nu,Nd]=S.useState(!0),jc=S.useRef(!0),Md=S.useRef(null),yl=S.useRef(new er),[cd,Wu]=S.useState(Ka.brainContourVisibility),[dc,Fl]=S.useState(["Task1","Task2"]),[Qs,nf]=S.useState(["Task1"]),[ds,fc]=S.useState([{key:"Task1",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""},{key:"Task2",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""}]),Xs=S.useRef([{key:"tags1",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""},{key:"tags2",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""}]),Wc=S.useRef(null),Ec=S.useRef(null),[Pd,Pc]=S.useState(Ka.coordinateVisibility),[Xu,ru]=S.useState(Ka.brainContourOpacity),[Xc,Yl]=S.useState(Ka.atlasReslicingInfo.direction1||4),[rf,Dc]=S.useState({}),[Sc,kc]=S.useState({}),[Ll,$i]=S.useState({});S.useRef();const bl=S.useRef([]),El=S.useRef({brightness:.95,darkness:0,opacity:1,opacity2:1,color:{r:0,g:0,b:0},color2:{r:255,g:255,b:255}}),Uc=S.useRef(new Set),Fc=S.useRef(0),[Tu,Zu]=S.useState(""),[af,qu]=S.useState(!1);S.useState([]),S.useRef([]),S.useState([]),S.useState(""),S.useRef(!0),S.useRef(null);const[Zc,iu]=S.useState(10),[Iu,ud]=S.useState(!1);S.useImperativeHandle(e,()=>({tabChange:uo,setYinDaoOpen1:Ot,setYinDaoOpen2:qt,setYinDaoOpen3:mn,setYinDaoOpen4:Tn,setYinDaoOpen5:xr,setYinDaoOpen6:Gn,setYinDaoOpen7:$n,setDontShowAgain:Nd,modeValue:li})),S.useEffect(()=>{bl.current=Ve},[Ve]);const T=_e=>{Uc.current.delete(_e.key)},k=(_e,$e,je)=>{if(_e.length<=3)return _e;_e.sort((an,un)=>an[$e]-un[$e]||an[je]-un[je]);const ut=[],It=[],Gt=(an,un,cn)=>(un[$e]-an[$e])*(cn[je]-an[je])-(un[je]-an[je])*(cn[$e]-an[$e]);for(const an of _e){for(;ut.length>=2&&Gt(ut[ut.length-2],ut[ut.length-1],an)<=0;)ut.pop();ut.push(an)}for(let an=_e.length-1;an>=0;an--){const un=_e[an];for(;It.length>=2&&Gt(It[It.length-2],It[It.length-1],un)<=0;)It.pop();It.push(un)}return It.pop(),ut.pop(),ut.concat(It)},q=(_e,$e)=>{const je=Se.current.getObjectByName("azimuth"),ut=Se.current.getObjectByName("azimuth_outline"),It=Se.current.getObjectByName("azimuth_edge");It&&Se.current.remove(It),je&&Se.current.remove(je),ut&&Se.current.remove(ut);const Gt=Se.current.getObjectByName("Brain");if(!Gt)return;const an=new ps().setFromObject(Gt);let un=an.min,cn=an.max,cr=cn.x-un.x,Cn=cn.y-un.y,Qn=cn.z-un.z,Nr=new Ie((un.x+cn.x)/2,(un.y+cn.y)/2,(un.z+cn.z)/2);if(Se.current.rotation.x!==0){const Cl=new Dl(Se.current.rotation.x,Se.current.rotation.y,Se.current.rotation.z);let pd=0,nl=0,na=0,as=0,hd=0,Ms=0;for(let Au=0;Au<Gt.children[0].geometry.attributes.position.array.length;Au+=3){let $g=Gt.children[0].geometry.attributes.position.array[Au]*ji.current+yo.current,ST=Gt.children[0].geometry.attributes.position.array[Au+1]*ji.current+Wa.current,$b=Gt.children[0].geometry.attributes.position.array[Au+2]*ji.current+oo.current,xc=new Ie($g,ST,$b).applyEuler(Cl);Au==0&&(pd=xc.x,nl=xc.y,na=xc.z,as=xc.x,hd=xc.y,Ms=xc.z),xc.x<pd&&(pd=xc.x),xc.x>as&&(as=xc.x),xc.y<nl&&(nl=xc.x),xc.y>hd&&(hd=xc.y),xc.z<na&&(na=xc.z),xc.z>Ms&&(Ms=xc.z)}un=new Ie(pd,nl,na),cn=new Ie(as,hd,Ms),cr=cn.x-un.x,Cn=cn.y-un.y,Qn=cn.z-un.z,Nr=new Ie((un.x+cn.x)/2,(un.y+cn.y)/2,(un.z+cn.z)/2)}let ci=new Ni,Hr=[],oi,xo;const Mr=new Bu({color:new Cr("#d4d2d2"),transparent:!0,opacity:.3,depthWrite:!1,depthTest:!1}),Ii=new Dl(Se.current.rotation.x,Se.current.rotation.y,Se.current.rotation.z);if(_e==="cor"){const Cl=Cf.clamp($e,un.z,cn.z);xo=new qs(cr,Cn,.01),oi=new er(xo,Mr),oi.name="azimuth";const pd=new Dl(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z),nl=new Ie(Nr.x,Nr.y,Cl).applyEuler(pd);oi.position.set(Nr.x,Nr.y,nl.z),oi.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);for(let na=0;na<Gt.children[0].geometry.attributes.position.array.length;na+=3){let as=Gt.children[0].geometry.attributes.position.array[na]*ji.current+yo.current,hd=Gt.children[0].geometry.attributes.position.array[na+1]*ji.current+Wa.current,Ms=Gt.children[0].geometry.attributes.position.array[na+2]*ji.current+oo.current;Gt.children[0].geometry.attributes.position.array[na],Gt.children[0].geometry.attributes.position.array[na+1],Gt.children[0].geometry.attributes.position.array[na+2];let Au=new Ie(as,hd,Ms).applyEuler(Ii),$g=Au.z;Math.abs($g-Cl)<.18&&Hr.findIndex($b=>$b.equals(new Ie(Au.x,Au.y,Cl)))===-1&&Hr.push(new Ie(Au.x,Au.y,Cl))}if(Hr.length>2){Hr=k(Hr,"x","y");const na=new SA(Hr);na.closed=!0,na.tension=.5;const as=na.getPoints(Hr.length*20);ci.setFromPoints(as)}else ci.setFromPoints(Hr)}else if(_e==="sag"){const Cl=Cf.clamp($e,un.x,cn.x);xo=new qs(.01,Cn,Qn),oi=new er(xo,Mr),oi.name="azimuth";const pd=new Dl(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z),nl=new Ie(Cl,Nr.y,Nr.z).applyEuler(pd);oi.position.set(nl.x,Nr.y,Nr.z),oi.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);for(let na=0;na<Gt.children[0].geometry.attributes.position.array.length;na+=3){let as=Gt.children[0].geometry.attributes.position.array[na]*ji.current+yo.current,hd=Gt.children[0].geometry.attributes.position.array[na+1]*ji.current+Wa.current,Ms=Gt.children[0].geometry.attributes.position.array[na+2]*ji.current+oo.current;Gt.children[0].geometry.attributes.position.array[na],Gt.children[0].geometry.attributes.position.array[na+1],Gt.children[0].geometry.attributes.position.array[na+2];let Au=new Ie(as,hd,Ms).applyEuler(Ii),$g=Au.x;Math.abs($g-Cl)<.18&&Hr.findIndex($b=>$b.equals(new Ie(Cl,Au.y,Au.z)))===-1&&Hr.push(new Ie(Cl,Au.y,Au.z))}if(Hr.length>2){Hr=k(Hr,"y","z");const na=new SA(Hr);na.closed=!0,na.tension=.5;const as=na.getPoints(Hr.length*20);ci.setFromPoints(as)}else ci.setFromPoints(Hr)}else return;oi.userData.initPosition=oi.position.clone(),oi.userData.initRotation=oi.rotation.clone();const Zi=new m4(xo),ki=new eu({color:"#2b2a2a"}),la=new hI(Zi,ki);la.name="azimuth_edge",la.position.set(oi.position.x,oi.position.y,oi.position.z),la.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);const Aa=new eu({color:16711680}),Ns=new wa(ci,Aa);Ns.name="azimuth_outline";const is=new Dl(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);return new Ie(yo.current,Wa.current,oo.current).applyEuler(is),Ns.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z),Se.current.add(oi,Ns,la),oi},ce=_e=>{if(_e.stopPropagation(),Uc.current.add(_e.key),Uc.current.has("Alt")&&(Uc.current.has("c")||Uc.current.has("C")))try{const $e=f.domElement.toDataURL("image/png"),je=document.createElement("a");je.href=$e,je.download="scene.png",je.click(),Uc.current=new Set}catch($e){console.error("Error downloading canvas:",$e),alert("抱歉,无法下载画布。请查看控制台获取更多信息。")}};S.useEffect(()=>{fetch(n+"/data/json/name.json").then(je=>je.json()).then(je=>{Rl(je)}),fetch(n+"/data/TreeData/nuclear.json").then(je=>je.json()).then(je=>{ms(je)});const _e=new Qu(.05,32,32),$e=new Pl({color:392960,transparent:!0});if(yl.current=new er(_e,$e),yl.current.name="sectionSphere",J7){let je=JSON.parse(J7);yl.current.position.set(je.x,je.y,je.z)}return Ka.cranialVisibility&&Is(!0),WZ&&fC(),z5e&&wh(z5e),document.addEventListener("keydown",ce),document.addEventListener("keyup",T),window.addEventListener("beforeunload",C1),()=>{document.removeEventListener("keydown",ce),document.removeEventListener("keyup",T),window.removeEventListener("beforeunload",C1)}},[]),S.useEffect(()=>{fetch("/staticresource/data/SWC/swc_foler/15257/BIL_15257_1.js").then(_e=>_e.json()).then(_e=>{kc(_e)}).catch(_e=>{console.error("Fetch error:",_e)})},[]);const xe=(_e,$e)=>nu?S.createElement("div",{style:{position:"absolute",top:"4px",right:"50px"}},S.createElement(lb,{defaultChecked:!1,onChange:je=>{je.target.checked?localStorage.setItem(_e,"true"):localStorage.setItem(_e,"false"),$e()},style:{marginTop:"10px"}},"Don't show again")):null,rt=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,S.createElement("div",null,a("8000.0001")||"如①所示,在主窗口左侧的是数据面板,用户可以在该选项卡下选择STAM的解剖命名树,配准到STAM上的完整脑血管图谱和神经元数据。用户也可以切换两个不同版本的命名系统。"),S.createElement("div",null,a("8000.0002")||"如②所示,主窗口中可以加载脑区、核团的三维模型。"),S.createElement("div",null,a("8000.0003")||"如③所示,用户可以切换不同的模式或者功能模块"),S.createElement("div",null,a("8000.00031")||"如④所示,工具栏从左到右依次是,回到首页、切换水平面、切换矢状面、切换水平面、重置视角、显示设置、反馈")),cover:S.createElement("video",{src:`${n}/guide/topo.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",style:{width:"min-content"},target:or.current},{title:a("8000.0032")||"解剖结构、脑血管和神经元查询",cover:S.createElement("img",{src:`${n}/guide/gif_batch/topo/out_topo1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,a("8000.0004")||"Regions选项卡包含的是STAM的解剖命名树,用户可以在该选项卡下的复选框中选择任意数量的感兴趣结构,在主窗口中可视化;Vessels选项卡包含了一套配准到STAM上的完整脑血管图谱,用户可以在此选择感兴趣的血管分支;Neurons选项卡用于查询胞体或投射靶区位于感兴趣脑区的神经元数据。用户也可以选择切换到Brain maps 4.0 ontology,该命名树中的结构同样可以被检索、选中并可视化。"),target:s.current,placement:"right"},{title:a("8000.0033")||"可视化解剖子结构并切换坐标原点",cover:S.createElement("img",{src:`${n}/guide/gif_batch/topo/out_topo2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,a("8000.0005")||"用户可以点击Regions选项卡下的解剖命名树中蓝色的方块图标,此时主窗口中会以组装的形式可视化用户点击结构的所有子结构,同时展开幅度可在右侧面板设置。默认情况下,该坐标系统以Bregma点作为原点。户也可以将坐标原点切换为STAM的其它任意19个颅骨或颅内基准点,主窗口中可视化对象的坐标值将根据新的原点重新计算。右击任意基准点,可以保存以基准点为坐标原点的STAM标签图像。"),placement:"center",target:or.current},{title:a("8000.0034")||"可视化功能设置",cover:S.createElement("img",{src:`${n}/guide/gif_batch/topo/out_topo3.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,a("8000.0006")||"用户可以在页面底部切换到setting选项卡。Left hemisphere开关决定是否展示左半脑,默认为Off。Coordinate开关决定是否在主窗口中显示坐标数值,默认为On。Datum Marks开关决定是否在主窗口中显示基准点,默认为On。Cranial开关决定是否在主窗口中显示颅骨的三维轮廓,默认为Off。"),target:document.getElementsByClassName("bottom_tabs_outer_div")[0]}],Wt=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false"?xe("Virtual",function(){}):null,a("8000.0007")||"我们提供了虚拟手术导航服务,用户可以通过交互操作,模拟向小鼠脑注射病毒的立体定位手术过程。STAM会根据用户操作,返回注射位点与作为坐标原点的颅骨或颅内基准点之间的距离和注射角度信息。"),cover:S.createElement("video",{src:`${n}/guide/surgery.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0035")||"自动导航模式",cover:S.createElement("img",{src:`${n}/guide/gif_batch/surgery/out_surgery1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false"?xe("Virtual",function(){}):null,a("8000.0008")||"首先选择要注射的脑区。接下来在脑区上选择注射靶点。用户继续点击Select target按钮,注射脑区的三维模型表面会出现一个跟随鼠标移动的绿点。然后,点击Auto进入自动模式,左侧数据面板中的Structure for injecting选项卡变为Regions to avoid。用户点击需要避开脑区、核团的名称,被选中的文字会变为高亮的红色,同时这些结构的三维轮廓也会显示在主窗口中。接下来点击右侧面板中的Intellectual planning按钮,等待若干秒后,STAM会返回一条从注射靶点出发、并且避开所有用户选中脑区、核团的路径。"),target:s.current,placement:"right"},{title:a("8000.0036")||"手动导航模式",cover:S.createElement("img",{src:`${n}/guide/gif_batch/surgery/out_surgery2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false"?xe("Virtual",function(){}):null,a("8000.0009")||"用户点击Manually进入手动规划模式,此时用户标记的注射靶点变为蓝色圆点,并出现一条从注射靶点出发、连接到鼠标当前的位置的红色虚射线,该射线与STAM外轮廓的交点(即注射位点)会被标记为绿色。当用户找到合适的注射路径后,可点击鼠标左键标记,被标记的路径会在主窗口中形成一条蓝色实线,注射位点则被标记为蓝色圆锥,且该路径所穿过的脑区、核团名称也会按照其空间位置排列在实线上。在右侧面板中,会出现该注射路径与三个标准解剖方向的夹角、注射靶点,以及注射位点的信息。用户点击右侧面板上的Reset按钮,即可重新开始整个注射手术流程。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],vn=[{title:a("5000.5084")||"步骤一",description:a("5000.5082")||"请选择注射模式,如果选择自动模式,点击左侧细胞名称选择细胞核进行旁路",target:me.current}],_n=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Reg")||localStorage.getItem("Reg")==="false"?xe("Reg",function(){}):null,a("8000.0011")||"如①所示,用户可上传PI或DAPI染色的单张脑片图像,该服务将通过约1分钟的服务器端计算,从STAM中重切出一张与用户上传的脑片位置最接近的图谱切面,并根据计算出来的角度和位置显示在主窗口中。"),cover:S.createElement("video",{src:`${n}/guide/registration.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0037")||"上传脑片图像并计算或下载配准结果",cover:S.createElement("img",{src:`${n}/guide/gif_batch/registration/out_reg1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Reg")||localStorage.getItem("Reg")==="false"?xe("Reg",function(){}):null,a("8000.0012")||"用户可以从本地上传待配准的tif/tiff格式的二维脑片图像。然后选择上传图像的类型。接着点击Calculate the corresponding plane from the atlas按钮组中的Start按钮,等待后台返回计算结果。计算完成后,Start按钮下方会出现计算结果的预览图,可左键单击放大查看。Start按钮右侧的Save按钮此时也变为可点击,用户单击该按钮,可以将计算结果下载到本地。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],sr=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0014")||"如①和②所示,用户可以在STAM所在的三维空间中选取任意感兴趣范围,并以不同的采样倍数下载自己选取范围内的原始图像。"),cover:S.createElement("video",{src:`${n}/guide/datasharing.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0047")||"平移模式选择原始图像数据的范围",cover:S.createElement("img",{src:`${n}/guide/gif_batch/datasharing/out_sharing1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0015")||"用户可以点击“Select the range”按钮,然后主窗口中出现一个橙色线条的方框。用户通过长按鼠标左键,拖动红、绿、蓝三种颜色的箭头,可以控制方框在各个方向上的平移,当某个方向的箭头被用户选中时,该箭头会变为高亮的黄色。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"},{title:a("8000.0039")||"缩放模式选择原始图像数据的范围并预览图像",cover:S.createElement("img",{src:`${n}/guide/gif_batch/datasharing/out_sharing2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0016")||"用户也可以通过按下键盘上的“A”,将范围选取操作从平移模式切换为缩放模式。此时方框的箭头会变为方块,拖动方块,就可以改变方框的大小。经过上述操作明确了待下载数据的空间范围后,可以点击“预览下载图像”按钮,通过体绘制,在主窗口中对该范围内的图像进行可视化,"),placement:"center",target:or.current},{title:a("8000.0040")||"选择数据的采样倍数并下载",cover:S.createElement("img",{src:`${n}/guide/gif_batch/datasharing/out_sharing3.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0017")||"拖动“Set the downsampling rate”滑动条,用户可以选择待下载数据的采样倍数;具体的倍数值可通过滑块上方的黑色背景提示文字查看。当数据量没有超过1 GB时,点击Downloading按钮可直接下载;当超过该数值,点击Downloading按钮会唤起用户终端的邮箱管理工具(如Outlook等),并自动将待下载范围和采样倍数信息填入邮件中,此时用户点击邮件发送按钮,即可向STAM网站发送数据下载申请。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],Qr=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Map")||localStorage.getItem("Map")==="false"?xe("Map",function(){}):null,a("8000.0018")||"我们支持用户上传此前已经配准到Common Coordinate Framework(CCF)的三维图像数据和神经元完整形态数据,并将其映射到STAM上,并直接在三维空间中进行可视化;我们也支持反向映射,即将已经配准到STAM的同类型数据映射到CCF上。"),cover:S.createElement("video",{src:`${n}/guide/mapping.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0041")||"上传三维图像数据并计算",cover:S.createElement("img",{src:`${n}/guide/gif_batch/mapping/out_mapping1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Map")||localStorage.getItem("Map")==="false"?xe("Map",function(){}):null,a("8000.0019")||"用户点击右侧面板的Upload按钮,上传已配准到CCF或者STAM的三维图像数据或神经元形态学数据。上传结束后,在Select the direction of conversion单选框中,确定数据的映射方向是从STAM到CCF还是反过来。此后点击Start按钮,STAM的服务器端开始计算,Start按钮变为等待状态。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"},{title:a("8000.0042")||"计算完成后预览或下载结果",cover:S.createElement("img",{src:`${n}/guide/gif_batch/mapping/out_mapping2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Map")||localStorage.getItem("Map")==="false"?xe("Map",function(){}):null,a("8000.0020")||"等待约10分钟后,STAM的服务器端完成计算并返回结果。此时Save按钮和View result按钮均变为可点击状态。点击Save按钮,可以将计算结果下载到本地;点击View result按钮,可以在主窗口中预览计算结果。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],Fi=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Res")||localStorage.getItem("Res")==="false"?xe("Res",function(){}):null,S.createElement("div",null,a("8000.0021")||"我们提供了沿任意角度可视化脑图谱切面的服务。用户可以查看感兴趣的STAM任意位置和角度的切面,浏览该切面上的脑区、核团标注,并由该图谱切面跳转到STAM任意切面服务所提供的各向同性1微米分辨率切面。"),S.createElement("div",null,a("8000.0022")||"如①所示,在窗口左侧的是数据面板,与“三维自然形貌可视化”中的数据面板功能相同。位于正中区域的是主窗口。"),S.createElement("div",null,a("8000.0023")||"用户也可以通过拖动滑动条,实现图谱切面的平移和旋转。具体的平移、旋转数值可通过滑块上方的黑色背景提示文字查看。")),cover:S.createElement("video",{src:`${n}/guide/reslicing.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0043")||"平移或旋转图谱切面",cover:S.createElement("img",{src:`${n}/guide/gif_batch/reslicing/out_reslicing1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Res")||localStorage.getItem("Res")==="false"?xe("Res",function(){}):null,a("8000.0024")||"用户通过长按鼠标左键,拖动红、绿、蓝三种颜色的箭头,可以控制图谱切面的平移。用户也可以通过按下键盘上的“R”,将范围选取操作从平移模式切换为旋转模式。此时箭头会变为球形,沿球形拖动,就可以控制图谱切面的旋转。"),placement:"center",target:or.current},{title:a("8000.0044")||"下载高分辨率的STAM图谱3D标签图像",cover:S.createElement("img",{src:`${n}/guide/gif_batch/reslicing/out_reslicing2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Res")||localStorage.getItem("Res")==="false"?xe("Res",function(){}):null,a("8000.0025")||"用户也可以通过拖动滑动条,实现图谱切面的平移和旋转。点击viewer higher resolution image按钮可以跳转到任意剖面可视化界面。点击Requesting STAM labels按钮,填入许可证即可下载各向同性10微米分辨率的STAM图谱3D标签图像。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],ma=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false"?xe("Neu",function(){}):null,S.createElement("div",null,a("8000.0026")||"我们提供全脑的胞体或投射靶区的神经环路数据可视化服务。用户可以选择感兴趣的任意胞体或投射靶区在脑区、核团的神经环路数据,并查看数据对应的脑区、核团标注。"),S.createElement("div",null,a("8000.0027")||"如①所示,在窗口左侧的是数据面板,与“三维自然形貌可视化”中的数据面板功能相同,其中Neurons选项卡用于查询胞体或投射靶区位于感兴趣脑区的神经元数据。"),S.createElement("div",null,a("8000.0028")||"如②所示,用户可以在搜索框中搜索感兴趣脑区、核团。"),S.createElement("div",null,a("8000.0029")||"如③所示,这是一个由若干个脑区、核团子结构组成的神经环路连接示意图。")),cover:S.createElement("video",{src:`${n}/guide/neuronal.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0045")||"查看神经环路连接示意图并交互",cover:S.createElement("img",{src:`${n}/guide/gif_batch/neuronal/out_neuronal1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false"?xe("Neu",function(){}):null,a("8000.0030")||"用户可以点击“whole-brain connectivity diagram”按钮或在搜索框中搜索感兴趣脑区、核团,即可弹出由若干个脑区、核团子结构组成的神经环路连接示意图。不同圆点表示不同的脑区、核团结构,圆点旁边显示的是脑区、核团的名称。用户可以将鼠标移动到圆点、脑区或核团的名称上,左击或右击圆点。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"},{title:a("8000.0046")||"显示用户指定脑区上下游连接关系",cover:S.createElement("img",{src:`${n}/guide/gif_batch/neuronal/out_neuronal1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false"?xe("Neu",function(){}):null,a("8000.0031")||"双击任意一个代表某个脑区、核团结构的圆点,神经环路连接示意图窗口隐藏,回到主窗口页面,显示该结构的上下游连接关系。在Upstream窗口中展示了投射到选中脑区、核团的神经环路,在Downstream窗口中展示了选中脑区、核团的投射靶区。用户可以用复选框选择任意数量的感兴趣神经元,在主窗口中可视化。"),target:s.current,placement:"right"}];S.useEffect(()=>{const _e=Vl("index"),$e=Vl("type"),je=Vl("structure");($e||_e)&&setTimeout(()=>{switch(_e=="Assembling"?(!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false")&&Ot(!0):_e=="Virtual_Inject"?(!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false")&&qt(!0):_e=="Slicing"?(!localStorage.getItem("Res")||localStorage.getItem("Res")==="false")&&Gn(!0):_e=="Mapping"?(!localStorage.getItem("Map")||localStorage.getItem("Map")==="false")&&Gn(!0):_e=="Downloading"?(!localStorage.getItem("Down")||localStorage.getItem("Down")==="false")&&xr(!0):_e=="Neuronal"?(!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false")&&$n(!0):_e=="Registration"&&(!localStorage.getItem("Reg")||localStorage.getItem("Reg")==="false")&&Tn(!0),$e){case"simple":document.title="STAM-SimpleViewer",he(0);case"normal":uo(1,!0),document.title="STAM-NormalViewer";break;case"virtual":document.title="STAM-Surgery",uo(2,!0);break;case"slicing":uo(3,!0),document.title="STAM-Reslicing";break;case"registration":uo(4,!0),document.title="STAM-Registration";break;case"downloading":uo(5,!0),document.title="STAM-Downloading";break;case"mapping":uo(6,!0),document.title="STAM-AtlasMapping";break;case"circuits":uo(7,!0),document.title="STAM-NeuronalCircuits",setTimeout(()=>{je&&(io(je),Ue(je))},500);break;case"other":uo(8,!0),document.title="STAM-OtherAtlas";break;case"setting":uo(9,!0),document.title="STAM-ViewSetting";break;case"functionalLoop":uo(12,!0),document.title="STAM-FunctionalLoop";break}},500)},[]),S.useEffect(()=>{et.current=(f==null?void 0:f.domElement.clientWidth)-1,Ge.current=(f==null?void 0:f.domElement.clientHeight)-1;let _e=-(Jr.min.x+Jr.max.x)*ji.current/2,$e=Jr.max.clone().multiplyScalar(ji.current).add(new Ie(_e,Wa.current,oo.current)),je=Jr.min.clone().multiplyScalar(ji.current).add(new Ie(_e,Wa.current,oo.current));Bt.current=$e,$t.current=je;let ut=new Pl({visible:!1});if(hn.current=new er(new qs(Bt.current.x-$t.current.x,Bt.current.y-$t.current.y,Bt.current.z-$t.current.z),ut),hn.current.position.set((Bt.current.x+$t.current.x)/2,(Bt.current.y+$t.current.y)/2,(Bt.current.z+$t.current.z)/2),k8(),Y7){let It=Y7;It=="CCF"&&xy({filepath:n+"/data/FBX/outline-CCF.FBX",index:"outline",color:"#327DFF",opacity:.3,offsetZ:0,R:.01,callback:function(){}},pn),It=="WHS"&&xy({filepath:n+"/data/FBX/outline-WHS.FBX",index:"outline",color:"#327DFF",opacity:.3,offsetZ:0,R:.01,callback:function(){}},pn)}},[]),S.useEffect(()=>{et.current=(f==null?void 0:f.domElement.clientWidth)-1,Ge.current=(f==null?void 0:f.domElement.clientHeight)-1},[f==null?void 0:f.domElement.clientWidth]),S.useEffect(()=>{const _e=new ps;_e.expandByObject(gt.current);const $e=R.current(_e.min.clone()),je=R.current(_e.max.clone());let ut=new _p(jm(650,620,`${$e.x.toFixed(2)},${$e.y.toFixed(2)},${$e.z.toFixed(2)}`,"#ccc")),It=new Xf(new bf({map:ut}));It.name="startText";let Gt=new _p(jm(650,620,`${je.x.toFixed(2)},${je.y.toFixed(2)},${je.z.toFixed(2)}`,"#ccc")),an=new Xf(new bf({map:Gt}));an.name="endText",It.position.set(_e.min.x,_e.min.y+.2,_e.min.z),an.position.set(_e.max.x,_e.max.y+.6,_e.max.z);let un=Se.current.getObjectByName("startText"),cn=Se.current.getObjectByName("endText");un&&cn&&(Se.current.remove(un,cn),Se.current.add(It,an))},[ee]),S.useEffect(()=>{var cr,Cn;let _e={},$e=[],je=[],ut={},It=[],Gt=[],an="",un=new URL(window.location.href),cn=new URLSearchParams(un.search);if(ue&&Ve.length>0){if(an=we&&Bl(Ve,we),we==""){_.current.removeFBX(Co.current,!0);const Qn=_.current.checkedKeys.current.findIndex(ci=>ci===Co.current);Qn>-1&&_.current.checkedKeys.current.splice(Qn,1),we==""&&(Co.current="");const Nr=JSON.stringify(_.current.checkedKeys.current);cn.delete("echart_Value"),cn.set("regionsChecked",Nr),un.search=cn.toString(),window.history.replaceState({},"",un)}if(we!=""){if(an==null&&we)if(we=="fiber tract fiber tracts")an="fiber tract";else{let Qn=we.match(/^[\w\/]+/);an=Qn?Qn[0]:""}if(an){let Qn=((cr=ue[an])==null?void 0:cr.soma)||[];It=It.concat(Qn);let Nr=((Cn=ue[an])==null?void 0:Cn.axon)||[];Gt=Gt.concat(Nr),It=Array.from(new Set(It)),Gt=Array.from(new Set(Gt)),Gt&&Gt.forEach(Mr=>{var Ii,Zi,ki;for(const la in ue)(Zi=(Ii=ue[la])==null?void 0:Ii.soma)!=null&&Zi.includes(Mr)&&((ki=ue[la])==null?void 0:ki.id)==1&&(la in _e?_e[la].includes(Mr)||_e[la].push(Mr):_e[la]=[Mr])}),It&&It.forEach(Mr=>{var Ii,Zi,ki;for(const la in ue)(Zi=(Ii=ue[la])==null?void 0:Ii.axon)!=null&&Zi.includes(Mr)&&((ki=ue[la])==null?void 0:ki.id)==1&&(la in ut?ut[la].includes(Mr)||ut[la].push(Mr):ut[la]=[Mr])});for(let Mr in ut)if(Mr!=an){let Ii=kg(Ve,Mr.replace("_","/"));Ii&&je.push({name:Mr.replace("_","/"),itemStyle:{color:Ii.color},lineStyle:{color:"#ccc"},value:ut[Mr].length})}for(let Mr in _e)if(Mr!=an){let Ii=kg(Ve,Mr.replace("_","/"));Ii&&$e.push({name:Mr.replace("_","/"),itemStyle:{color:Ii.color},lineStyle:{color:"#ccc"},value:_e[Mr].length})}Cs(!0);let ci=kg(Ve,an.replace("_","/"));const Hr=[{name:an.replace("_","/"),itemStyle:{color:ci&&ci.color},lineStyle:{color:"#ccc"},children:$e}],oi=[{name:an.replace("_","/"),itemStyle:{color:ci&&ci.color},lineStyle:{color:"#ccc"},children:je}];if(Co.current!=an){_.current.removeFBX(Co.current,!0);const Mr=_.current.checkedKeys.current.findIndex(ki=>ki===Co.current);Mr>-1&&_.current.checkedKeys.current.splice(Mr,1);const Ii=kg(_.current.treeDatas,an.replace("_","/"));let Zi=n+"/data/FBX/"+an+".FBX";Ii&&Td(Zi,an,Ii.color,.8,0,"FBX"),_.current.checkedKeys.current.push(an),Q(_.current.checkedKeys.current),Co.current=an,cn.set("echart_Value",we||""),un.search=cn.toString(),window.history.replaceState({},"",un)}const xo={series:[{type:"tree",top:"1%",bottom:"1%",symbolSize:7,emphasis:{focus:"ancestor",lineStyle:{color:"#000"}},expandAndCollapse:!0,animationDuration:550,animationDurationUpdate:750}]};if(Bs.current&&Ls.current){Ls.current.style.height=je.length*2*10+"px",Bs.current.style.height=$e.length*2*10+"px";const Mr=s7(Bs.current);Mr.setOption({...xo,tooltip:{trigger:"item",triggerOn:"mousemove",position:function(Aa,Ns,is,Cl,pd){const nl=Aa[0],na=Aa[1];return[nl+10,na]},formatter:function(Aa){const Ns=an==Aa.name?"":Aa.name+"->",is=Aa.value?", "+Aa.value+" neurons":"";return`${Ns}${an}${is}`}},series:[{...xo.series[0],left:"30%",right:"30%",label:{position:"right",verticalAlign:"middle",align:"left"},leaves:{label:{position:"left",verticalAlign:"middle",align:"right"}},orient:"RL",data:Hr}]});const Ii=s7(Ls.current);Ii.setOption({...xo,tooltip:{trigger:"item",triggerOn:"mousemove",position:function(Aa,Ns,is,Cl,pd){const nl=Aa[0],na=Aa[1],as=pd.contentSize[0];return[nl-as-10,na]},formatter:function(Aa){const Ns=an==Aa.name?"":"->"+Aa.name+", "+Aa.value+" neurons";return`${an}${Ns}`}},series:[{...xo.series[0],left:"20%",right:"40%",label:{position:"left",verticalAlign:"middle",align:"right"},leaves:{label:{position:"right",verticalAlign:"middle",align:"left"}},orient:"LR",data:oi}]});const Zi=()=>{Mr.resize(),Ii.resize()},ki=Aa=>{if(ie(xt.indexOf("neurons")+1),Ce.current.ProcessedData.current=!1,Aa.data&&Aa.data.name){Ce.current.setSearchValue(an.replace("_","/")),Ce.current.setSomaValue(Aa.data.name.replace("_","/"));const Ns=Cc(Hr[0],Aa.data.name);Mr.setOption({series:[{data:[Ns]}]}),Ii.setOption({series:[{data:oi}]})}},la=Aa=>{if(ie(xt.indexOf("neurons")+1),Ce.current.ProcessedData.current=!1,Aa.data&&Aa.data.name){Ce.current.setSearchValue(Aa.data.name.replace("_","/")),Ce.current.setSomaValue(an.replace("_","/"));const Ns=Cc(oi[0],Aa.data.name);Ii.setOption({series:[{data:[Ns]}]}),Mr.setOption({series:[{data:Hr}]})}};return window.addEventListener("resize",Zi),Mr.on("click",ki),Ii.on("click",la),Hr[0].children[0]&&ki({data:{name:Hr[0].children[0].name}}),$i({Upstream:$e,Downstream:je}),()=>{Mr.off("click",ki),Ii.off("click",la),window.removeEventListener("resize",Zi),Mr.dispose(),Ii.dispose()}}}}else Cs(!1),Ls.current&&Bs.current&&(Ls.current.style.height="0px",Bs.current.style.height="0px"),$i({})}},[we,Ve,ue]),S.useEffect(()=>{const _e=Vl("index"),$e=Vl("type"),je=(_e||$e)&&vl.current;if(Y===2)setTimeout(()=>{vl.current?(uo(2,!0,!je),vl.current=!1):uo(2),ai(!0),p.current.noRotate=!0,p.current.noPan=!0,f.domElement.addEventListener("mousedown",Ga),f.domElement.addEventListener("mousemove",Fb),f.domElement.addEventListener("mouseup",Bb),W(1)},200);else{Se.current.rotation.set(0,0,0),p.current.noRotate=!1,p.current.noPan=!1,f.domElement.removeEventListener("mousedown",Ga),f.domElement.removeEventListener("mousemove",Fb),f.domElement.removeEventListener("mouseup",Bb),W(3),rv(),vl.current?(uo(1,!0,!je),vl.current=!1):uo(1),V(!1);const ut=Se.current.getObjectByName("targetPoint");ut&&Se.current.remove(ut)}},[Y]),S.useEffect(()=>{Mi.length>0&&pt(!0)},[Mi]);const vs=_e=>{const{positionx:$e,positiony:je,positionz:ut}=_e;let It=new URL(window.location.href),an=new URLSearchParams(It.search).get("atlasReslicingInfo"),un={};an&&(un=JSON.parse(an)),Dt($e),Xt(je),Qt(ut),un.positionX=$e,un.positionY=je,un.positionZ=ut;let cn=new Ie($e,je,ut);Ka.atlasReslicingInfo=un,Ka.sectionPointPosition=cn,yl.current&&yl.current.position.set(cn.x,cn.y,cn.z)},jo=_e=>{Ji(_e)},uo=(_e,$e=!1,je=!0)=>{if(Se.current.remove(yl.current),rr(_e),ge({}),Pe(0),Y===0&&_e=="1"?nv("0",je,$e):nv(_e,je,$e),$e||(_e=="7"||_e=="3"?va(!0):va(!1)),E&&(E.current=_e),_e!==2){const ki=Se.current.getObjectByName("syrings");ki&&Se.current.remove(ki),V(!1),$e||Yu(),y.current=!1,d.current=!1}if(_e==2){Bi.current.position.set(18,-10,-10),Bi.current.rotation.set(2.9896,0,0),p.current.reset(),p.current.target.set(0,0,0),p.current.object.position.set(18,-10,-10),p.current.object.up.set(0,-1,0),p.current.update(),y.current=!0,d.current=!0,Bi.current.updateMatrixWorld();const ki=JSON.stringify({cameraPosition:Bi.current.position,cameraRotation:Bi.current.rotation}),la=JSON.stringify({controlsTarget:p.current.target,controlsPosition:p.current.object.position,controlsUp:p.current.object.up});let Aa=new URL(window.location.href),Ns=new URLSearchParams(Aa.search);Ns.set("cameraInfo",ki),Ns.set("controllerInfo",la),Aa.search=Ns.toString(),window.history.replaceState({},"",Aa)}k8(),Gi([]),Ea("Config_DAPI.ini"),Kn.current=null,$a({}),$e||ae.current&&Ce.current&&_.current&&(ae.current.removeALL(),Ce.current.removeALL(),_.current.removeALL()),_e==1?x(!0):x(!1),st(a("4000.0242")||"清除靶点"),l("");const ut=Se.current.getObjectByName("sphereBig"),It=Se.current.getObjectByName("sphereMiddelClick"),Gt=Se.current.getObjectByName("dashedLine"),an=Se.current.getObjectByName("Line"),un=Se.current.getObjectByName("transformControls"),cn=Se.current.getObjectByName("sectionSphere"),cr=Se.current.getObjectByName("correspondingPlaneDataSwc"),Cn=Se.current.getObjectByName("azimuth"),Qn=[];Se.current.traverse(ki=>{ki.userData.isAtlasMapping==="true"&&Qn.push(ki)}),Qn.forEach(ki=>{Se.current.remove(ki)}),Cn&&Se.current.remove(Cn),cr&&Se.current.remove(cr),cn&&Se.current.remove(cn),un&&Se.current.remove(un),m.current=[],b.current=[],Gt&&Se.current.remove(Gt),an&&Se.current.remove(an),ut&&Se.current.remove(ut),It&&Se.current.remove(It);const Nr=Se.current.children.filter(ki=>ki.userData.name==="registrationPng");Nr&&Se.current.remove(...Nr),U.current=!1;const ci=Se.current.children.filter(ki=>ki.name==="brainRegionPoints"||ki.name==="brainRegionLine"||ki.name==="cardContainer");ci&&Se.current.remove(...ci),P(!1);const Hr=Se.current.getObjectByName("HorizontalView"),oi=Se.current.getObjectByName("SagittalView"),xo=Se.current.getObjectByName("arbitrarySlice"),Mr=Se.current.getObjectByName("CoronalView"),Ii=Se.current.getObjectByName("functionLoopGroup");Ii&&Ii.remove(...Ii.children),_e!=3&&(Hr&&(Se.current.remove(Hr),Dn(!1)),oi&&(Se.current.remove(oi),Nn(!1)),xo&&(Se.current.remove(xo),ui(!1)),Mr&&(Se.current.remove(Mr),ei(!1))),_e==3&&setTimeout(()=>{fs(Ne.current,$e)},10),qu(!1),Bg(),ht(1);const Zi=document.querySelector(".tabsCompnent .ant-tabs-content-holder");Zi&&_e==12?Zi.style.padding="0px":Zi.style.padding="10px"},Vs=_e=>{r(_e),i.current=_e},Cc=(_e,$e)=>{const je=JSON.parse(JSON.stringify(_e)),ut=It=>{It.name===$e?It.lineStyle.color="#000":It.lineStyle.color="#ccc",It.children&&It.children.forEach(Gt=>{ut(Gt)})};return ut(je),je},Bl=(_e,$e)=>{for(let je of _e){if(je.name.toLowerCase()===$e.toLowerCase()||je.fullname.toLowerCase()===$e.toLowerCase())return je.name;if(je.children){const ut=Bl(je.children,$e);if(ut)return ut}}return null},Dd=()=>{if(lt===(a("4000.0126")||"重置"))rn(1),P(!1),U.current=!1,G.current="manual",st(a("4000.0242")||"清除靶点"),V(!1),Yu(),W(1),ht(1),eg.current&&(eg.current.abort(),eg.current=null);else{st(a("4000.0242")||"清除靶点"),m.current=[],b.current=[],ht(1),P(!1),U.current=!1,V(!1);const _e=Se.current.getObjectByName("dashedLine"),$e=Se.current.getObjectByName("sphereBig"),je=Se.current.getObjectByName("Line"),ut=Se.current.getObjectByName("sphereMiddelClick"),It=Se.current.getObjectByName("targetPoint"),Gt=Se.current.getObjectByName("azimuth"),an=Se.current.getObjectByName("azimuth_outline"),un=Se.current.getObjectByName("azimuth_edge");un&&Se.current.remove(un),Gt&&Se.current.remove(Gt),je&&Se.current.remove(je),an&&Se.current.remove(an),_e&&$e&&Se.current.remove(_e,$e),ut&&Se.current.remove(ut),It&&Se.current.remove(It),H.current.forEach(cn=>{const cr=Se.current.getObjectByName(cn);cr&&(Se.current.remove(cr),_.current&&_.current.setCheckItems(Cn=>Cn.filter(Qn=>Qn!==cn)))}),H.current=[],rv(),l(""),d.current=!1}};S.useEffect(()=>{j&&li==0&&lr(!0)},[j]);const Yu=()=>{m.current=[],b.current=[];const _e=Se.current.getObjectByName("dashedLine"),$e=Se.current.getObjectByName("sphereBig"),je=Se.current.getObjectByName("sphereMiddelClick"),ut=Se.current.getObjectByName("targetPoint"),It=Se.current.getObjectByName("azimuth"),Gt=Se.current.getObjectByName("azimuth_outline"),an=Se.current.getObjectByName("azimuth_edge");an&&Se.current.remove(an),It&&Se.current.remove(It),Gt&&Se.current.remove(Gt),_e&&Se.current.remove(_e),$e&&Se.current.remove($e),je&&Se.current.remove(je),ut&&Se.current.remove(ut),rv(),P(!1),H.current=[],y.current=!0,d.current=!1,U.current=!1,_.current.removeALL(),v.current&&Se.current.remove(v.current),ie(1),l("")};function au(){if(!_s.current||!_s.current.startsWith("data:image/png;base64,")){alert("Please enter a valid Base64 encoded PNG string (e.g., data:image/png;base64,...).");return}const _e=document.createElement("a");_e.href=_s.current,_e.download="downloaded_image.png";const $e=document.createElement("a");$e.href="/staticresource/data/json/rgb_value.zip",$e.download="rgb_value.zip",document.body.appendChild($e),document.body.appendChild(_e),$e.click(),setTimeout(()=>{_e.click();let je=new URL(window.location.href),It=new URLSearchParams(je.search).get("type");const Gt=window.location.origin+window.location.pathname+`?type=${It}¤tSlice=2d`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:Gt,time:0})})},200),document.body.removeChild($e),document.body.removeChild(_e)}const Sl=(_e,$e)=>{clearTimeout(Md.current),Md.current=setTimeout(()=>{const je=Se.current.getObjectByName("Brain");let ut=new bo;ut.setFromAxisAngle(new Ie(1,0,0),Math.PI/2);let It=new Ie,Gt=new SS;if($e)if(je&&(It=$e.position.clone().applyMatrix4(je.matrixWorld.clone().invert()).applyQuaternion(ut)),_e==1)fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({x:0,y:0,z:It.z})}).then(an=>an.ok?an.json():$o.error({title:an.message})).then(an=>{const un=an.base64;_s.current=un;let cn=Gt.load(un);cn.center.set(.5,.5),cn.rotation=Math.PI,$e.material.map=cn});else if(_e==2)fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({x:It.x,y:0,z:0})}).then(an=>an.ok?an.json():$o.error({title:an.message})).then(an=>{const un=an.base64;let cn=Gt.load(un);const Cn=$e.geometry.attributes.uv.array,Qn=ci=>{Cn[ci+0]=1,Cn[ci+1]=0,Cn[ci+2]=1,Cn[ci+3]=1,Cn[ci+4]=0,Cn[ci+5]=0,Cn[ci+6]=0,Cn[ci+7]=1},Nr=ci=>{Cn[ci+0]=1,Cn[ci+1]=1,Cn[ci+2]=1,Cn[ci+3]=0,Cn[ci+4]=0,Cn[ci+5]=1,Cn[ci+6]=0,Cn[ci+7]=0};Qn(0),Nr(8),$e.geometry.attributes.uv.needsUpdate=!0,$e.material.map=cn});else if(_e==3)fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({x:0,y:It.y,z:0})}).then(an=>(an.ok,an.json())).then(an=>{if(an.message){$o.error({content:an.message});return}const un=an.base64;_s.current=un;let cn=Gt.load(un);const Cn=$e.geometry.attributes.uv.array;(Nr=>{Cn[Nr+0]=1,Cn[Nr+1]=0,Cn[Nr+2]=0,Cn[Nr+3]=0,Cn[Nr+4]=1,Cn[Nr+5]=1,Cn[Nr+6]=0,Cn[Nr+7]=1})(24),$e.geometry.attributes.uv.needsUpdate=!0,$e.material.map=cn});else{const an=$e.rotation.x/Math.PI*180,un=$e.rotation.y/Math.PI*180,cn=$e.rotation.z/Math.PI*180;fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({angles:[an,un,cn],center:[It.x,It.y,It.z]})}).then(cr=>cr.ok?cr.json():$o.error({title:cr.message})).then(cr=>{const Cn=cr.base64;_s.current=Cn;let Qn=Gt.load(Cn);const ci=$e.geometry.attributes.uv.array;(oi=>{ci[oi+0]=0,ci[oi+1]=0,ci[oi+2]=1,ci[oi+3]=0,ci[oi+4]=0,ci[oi+5]=1,ci[oi+6]=1,ci[oi+7]=1})(24),$e.geometry.attributes.uv.needsUpdate=!0,$e.material.map=Qn})}},100)},$l=(_e,$e)=>{let je,ut=0,It=new URL(window.location.href),an=new URLSearchParams(It.search).get("atlasReslicingInfo"),un={};an&&(un=JSON.parse(an)),Ne.current==1?(Se.current.children.forEach(function(cn,cr){$e==3&&cn.name=="CoronalView"&&(ut=cr)}),je=new Ie(0,0,_e),Se.current.children[ut].position.setZ(je.z),Sl(Ne.current,Se.current.children[ut])):Ne.current==2?(Se.current.children.forEach(function(cn,cr){$e==1&&cn.name=="SagittalView"&&(ut=cr)}),je=new Ie(_e,0,0),Se.current.children[ut].position.setX(je.x),Sl(Ne.current,Se.current.children[ut])):Ne.current==3?(Se.current.children.forEach(function(cn,cr){$e==2&&cn.name=="HorizontalView"&&(ut=cr)}),je=new Ie(0,_e,0),Se.current.children[ut].position.setY(je.y),Sl(Ne.current,Se.current.children[ut])):Ne.current==4&&(Se.current.children.forEach(function(cn,cr){cn.name=="arbitrarySlice"&&(ut=cr)}),$e==3&&(Qt(_e),un.positionZ=_e,Ka.atlasReslicingInfo=un,je=new Ie(Nt,Lt,_e),Se.current.children[ut].position.setZ(je.z)),$e==2&&(Xt(_e),un.positionY=_e,Ka.atlasReslicingInfo=un,je=new Ie(zt,_e,zt),Se.current.children[ut].position.setY(je.y)),$e==1&&(Dt(_e),un.positionX=_e,Ka.atlasReslicingInfo=un,je=new Ie(_e,Lt,zt),Se.current.children[ut].position.setX(je.x)),Sl(Ne.current,Se.current.children[ut]))},rs=_e=>{let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("atlasReslicingInfo"),It={};ut&&(It=JSON.parse(ut)),Ne.current==2&&(Dt(_e),Xt(-5.33),Qt(-8),$l(_e,1),It.positionX=_e,It.positionY=-5.33,It.positionZ=-8,Ka.atlasReslicingInfo=It),Ne.current==4&&$l(_e,1)},Ku=_e=>{let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("atlasReslicingInfo"),It={};ut&&(It=JSON.parse(ut)),Ne.current==3&&(Xt(_e),Qt(-8),Dt(-5.17),It.positionX=-5.17,It.positionY=_e,It.positionZ=-8,Ka.atlasReslicingInfo=It,$l(_e,2)),Ne.current==4&&$l(_e,2)},of=_e=>{let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("atlasReslicingInfo"),It={};ut&&(It=JSON.parse(ut)),Ne.current==1&&(Qt(_e),Dt(-5.17),Xt(-5.33),$l(_e,3),It.positionX=-5.17,It.positionY=-5.33,It.positionZ=_e,Ka.atlasReslicingInfo=It),Ne.current==4&&$l(_e,3)},ws=(_e,$e)=>{let je=0,ut=new URL(window.location.href),Gt=new URLSearchParams(ut.search).get("atlasReslicingInfo"),an={};Gt&&(an=JSON.parse(Gt)),Se.current.children.forEach(function(Qn,Nr){Qn.name=="arbitrarySlice"&&(je=Nr)});let un=Se.current.children[je];un.rotation.set(un.userData.initRotation.x,un.userData.initRotation.y,un.userData.initRotation.z);let cn=0,cr=0,Cn=0;$e==1&&(mt(_e),an.angleX=_e,Ka.atlasReslicingInfo=an,cn=_e*Math.PI/180,cr=Vt*Math.PI/180,Cn=Fe*Math.PI/180),$e==2&&(fn(_e),an.angleY=_e,Ka.atlasReslicingInfo=an,cn=dr*Math.PI/180,cr=_e*Math.PI/180,Cn=Fe*Math.PI/180),$e==3&&(Ct(_e),an.angleZ=_e,Ka.atlasReslicingInfo=an,cn=dr*Math.PI/180,cr=Vt*Math.PI/180,Cn=_e*Math.PI/180),un.rotation.x=cn,un.rotation.y=cr,un.rotation.z=Cn,Se.current.children.forEach(function(Qn,Nr){Qn.name=="arbitrarySlice"&&(je=Nr)}),Sl(Ne.current,Se.current.children[je])},dd=(_e,$e=!1)=>{let je;const ut=_e||o;if(Ne.current==4||$e)setTimeout(()=>{let It="atlas.brainsmatics.org",Gt=[],an=parseInt(((zt+7)/14*14e3).toString()),un=parseInt(((Lt+5.33)/7.37*9e3).toString());$e?(Gt[0]=90+Ir.angles[0],Gt[1]=Ir.angles[1],Gt[2]=Ir.angles[2],an=Ir.tx*14e3,un=450):(Gt[0]=dr,Gt[1]=Vt,Gt[2]=Fe);let cn=parseInt(((Nt+5.17)/10.34*11400).toString()),cr=at||"http://"+It,Cn="http://"+It+'/program/frontend/#!{"dimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"]},"position":['+cn+","+un+","+an+'],"crossSectionOrientation":[0.7071067690849304,0,0,-0.7071067690849304],"crossSectionScale":19.05662684586283,"projectionOrientation":[0.10079027712345123,0.01086505874991417,-0.5527856945991516,-0.827134370803833],"projectionScale":74319.80669416502,"projectionDepth":-49.99956451007631,"layers":[{"type":"image","source":{"url":"precomputed://'+cr+'/data/RGB_raw","transform":{"outputDimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"],"c^":[1,""]},"inputDimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"],"c^":[1,""]}}},"tab":"rendering","shader":"#uicontrol invlerp normalized\\nvoid main() {\\n emitRGB(vec3(toNormalized(getDataValue(0)),\\n toNormalized(getDataValue(1)),\\n toNormalized(getDataValue(2))));\\n}\\n","channelDimensions":{"c^":[1,""]},"name":"raw"},{"type":"segmentation","source":{"url":"precomputed://'+cr+'/data/seg_half","transform":{"outputDimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"]},"inputDimensions":{"x":[0.00001,"m"],"y":[0.00001,"m"],"z":[0.00001,"m"]}}},"tab":"segments","segments":["10","100","1000","1002","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1017","1018","1019","1020","1021","1022","1023","1024","1025","1026","1100","104","105","106","107","108","11","110","111","112","113","114","115","117","118","119","12","120","122","123","124","125","126","129","13","130","131","134","138","14","141","142","143","146","147","149","15","150","152","154","156","159","16","160","162","164","165","166","167","168","170","172","173","174","176","177","178","179","18","180","181","182","183","186","189","19","190","192","193","194","195","196","199","2","20","201","202","203","204","206","207","208","21","212","215","216","217","219","22","220","221","223","224","225","228","229","23","230","231","232","234","235","236","237","238","239","24","241","242","243","245","246","247","248","25","250","251","253","254","256","257","259","26","260","265","266","267","268","27","271","272","273","275","276","279","28","280","282","283","284","287","29","291","293","294","295","296","297","298","3","30","300","303","304","305","306","31","311","312","313","315","319","32","320","321","322","323","324","325","326","329","33","330","331","332","333","335","336","337","338","34","340","341","342","343","344","347","348","349","35","350","351","352","354","355","356","357","359","36","361","362","365","366","367","368","369","37","371","372","373","374","375","376","377","378","38","380","385","386","387","389","39","390","391","392","393","394","395","397","399","4","40","401","402","405","407","409","41","412","413","414","415","416","417","419","42","422","423","424","426","427","428","43","430","432","435","438","439","44","440","441","442","443","444","445","446","449","45","450","451","452","453","454","456","458","459","46","460","461","462","463","464","465","466","467","47","470","473","474","475","476","478","479","48","480","481","484","485","486","487","488","49","490","491","493","494","497","498","499","5","50","500","501","503","504","505","507","508","51","510","511","512","513","514","516","517","518","519","52","520","528","529","53","533","535","536","537","538","539","54","540","541","542","544","545","546","548","549","55","550","553","554","555","556","557","559","56","561","562","563","565","568","57","570","571","572","573","574","575","576","578","579","58","581","582","584","586","59","591","593","594","595","597","599","6","60","601","602","604","606","61","611","612","613","614","615","616","617","618","619","62","620","621","622","623","624","625","627","628","629","63","631","632","635","637","638","639","64","641","642","643","644","645","646","647","648","65","650","652","653","656","657","658","660","661","662","665","666","667","67","671","672","673","674","677","678","679","68","680","681","682","683","684","686","687","688","690","693","695","696","697","698","699","7","701","702","704","706","707","708","709","710","711","712","713","716","717","72","720","721","722","724","725","727","729","731","733","734","735","736","737","74","740","744","746","748","749","750","752","754","755","757","758","759","76","760","762","763","764","765","767","768","769","770","771","772","773","774","775","776","778","779","78","780","783","784","785","787","789","790","791","793","796","797","798","799","8","80","803","804","808","809","81","810","812","816","818","819","82","821","823","824","826","827","829","83","830","831","832","834","835","837","839","84","840","841","842","843","844","846","849","850","851","855","856","857","858","86","861","863","864","865","867","868","869","87","870","871","872","874","875","876","877","878","879","88","880","881","883","885","888","889","89","892","893","894","895","896","898","899","9","90","901","902","906","908","909","91","911","913","915","916","917","919","92","920","921","925","926","927","928","929","93","931","934","935","936","937","938","940","941","942","944","945","946","951","953","954","955","956","957","959","96","963","964","965","966","969","97","970","971","972","973","977","978","980","981","982","983","989","99","991","992","993","995","996","997","998","999"],"segmentQuery":"<id","segmentColors":{"2":"#777b7b","3":"#777979","4":"#848989","5":"#8e9494","6":"#8c9191","7":"#778383","8":"#778181","9":"#93a2a2","10":"#5e6767","11":"#93c1c1","12":"#6b7474","13":"#93c0c0","14":"#8eacac","15":"#727979","16":"#91afaf","18":"#93b4b4","19":"#729c9c","20":"#212d2d","21":"#304242","22":"#2d3e3e","23":"#2b3232","24":"#1e2929","25":"#707676","26":"#7c8383","27":"#89bbbb","28":"#608383","29":"#7c9d9d","30":"#777d7d","31":"#7a8080","32":"#778080","33":"#7f8585","34":"#6d8a8a","35":"#829d9d","36":"#545d5d","37":"#93a4a4","38":"#4c5454","39":"#474f4f","40":"#8cbebe","41":"#7a9a9a","42":"#93b8b8","43":"#84a0a0","44":"#93a1a1","45":"#93baba","46":"#84b4b4","47":"#6d9595","48":"#82b0b0","49":"#6b9191","50":"#7fadad","51":"#87a3a3","52":"#636c6c","53":"#596363","54":"#334545","55":"#2b3b3b","56":"#666f6f","57":"#476161","58":"#939898","59":"#637e7e","60":"#7aa0a0","61":"#7fa5a5","62":"#444d4d","63":"#f2bb3a","64":"#77d1ff","65":"#3ddeff","67":"#2cc15e","68":"#ffd877","72":"#ffbfad","74":"#e5d60b","76":"#40c3dd","78":"#f7e1af","80":"#3bdddd","81":"#a0dfff","82":"#d67259","83":"#ffab93","84":"#f2c04b","86":"#91503f","87":"#3cabc1","88":"#3db4cc","89":"#f7d585","90":"#723f32","91":"#ffb49e","92":"#f4cf53","93":"#ffbf0f","96":"#f2dca7","97":"#e2d92f","99":"#f4d05a","100":"#399eb2","104":"#4dcc77","105":"#f7da96","106":"#d35dac","107":"#ffd15e","108":"#3cd1d1","110":"#55ccb8","111":"#3aa2b7","112":"#bc782f","113":"#8cccc1","114":"#f7d68a","115":"#82ccbf","117":"#6acc8a","118":"#b2af07","119":"#ffd044","120":"#75d1ff","122":"#ef8064","123":"#37dbfc","124":"#c6499d","125":"#66cbff","126":"#ffc32d","129":"#66ccbb","130":"#f7dea3","131":"#fc957b","134":"#ffb5a0","138":"#84493a","141":"#8accc1","142":"#e5d609","143":"#45d9f7","146":"#d8cb17","147":"#f2dca4","149":"#d1ca06","150":"#ce8333","152":"#67afa3","154":"#f2bd43","156":"#ffcf3f","159":"#f79279","160":"#f29d43","162":"#e5d604","164":"#b2af01","165":"#75e5e5","166":"#ffc83f","167":"#ffbdaa","168":"#74c4ed","170":"#ccc50c","172":"#ffa78e","173":"#42cae5","174":"#a2dcf9","176":"#af702b","177":"#965342","178":"#f4bc04","179":"#51cc7a","180":"#d68733","181":"#3ac4e0","182":"#ffc021","183":"#f7d483","186":"#f2dda9","189":"#3eb766","190":"#72ccbd","192":"#f4927a","193":"#f7dc9e","194":"#d1ca04","195":"#fc976c","196":"#fc67ca","199":"#52e5e5","201":"#ffd366","202":"#ffca2d","203":"#ed9436","204":"#ffe7a0","206":"#74ccbd","207":"#33cc66","208":"#36d9f9","212":"#71e2e2","215":"#edd39c","216":"#d38634","217":"#ed9b44","219":"#ccc345","220":"#60e5e5","221":"#c96b54","223":"#ccc62a","224":"#34d0ef","225":"#ffd454","228":"#ea9a44","229":"#f4cf55","230":"#3bcece","231":"#a85c4a","232":"#ffad96","234":"#ffd97a","235":"#ffda7f","236":"#ffc61c","237":"#c6c00d","238":"#f2b935","239":"#ffc107","241":"#ffdf89","242":"#64e5e5","243":"#edca80","245":"#ccc863","246":"#ea7d62","247":"#c9489e","248":"#3fdbdb","250":"#edd5a3","251":"#2bc45e","253":"#ffca44","254":"#f7d380","256":"#ffc832","257":"#f7e0aa","259":"#ffd351","260":"#6bb6db","265":"#d8cb15","266":"#37cc68","267":"#378c9e","268":"#38c9b1","271":"#6bbaad","272":"#39c2dd","273":"#ffc32b","275":"#37ccb3","276":"#3fc1db","279":"#eab94f","280":"#eab84b","282":"#d37158","283":"#38c4c4","284":"#ffdb82","287":"#f7d588","291":"#f9be48","293":"#f49369","294":"#d149a3","295":"#f4cc49","296":"#63a096","297":"#ffe69e","298":"#ff9b70","300":"#f7a27e","303":"#f7a042","304":"#ccc241","305":"#88ccc0","306":"#eaba52","311":"#34ceed","312":"#d8cc1e","313":"#91daff","315":"#f9c04d","319":"#ff996d","320":"#4be5e5","321":"#ffcdbf","322":"#ddd75a","323":"#ffd263","324":"#e0785e","325":"#70e0e0","326":"#ffcf42","329":"#a4defc","330":"#69b2a6","331":"#67a1bf","332":"#57cc7e","333":"#ffbf11","335":"#ea8e77","336":"#ffc73a","337":"#76c9f2","338":"#7f4638","340":"#c16953","341":"#46defc","342":"#f7e1ad","343":"#68aed1","344":"#ff9367","347":"#c4be0d","348":"#6ab7aa","349":"#ffb805","350":"#639bb7","351":"#38bcff","352":"#ed63bf","354":"#f2bc3e","355":"#ffd154","356":"#f2da9d","357":"#e5d606","359":"#9bddff","361":"#ffc311","362":"#ffbb11","365":"#ffa58e","366":"#ffbe1c","367":"#ffb807","368":"#34c8e5","369":"#c1bb0d","371":"#ffbe0c","372":"#a3e0ff","373":"#774234","374":"#3995a8","375":"#d849a9","376":"#3daf63","377":"#ffe8a3","378":"#41cc6f","380":"#ffc823","385":"#ccc751","386":"#5bcc81","387":"#ccc85f","389":"#41bfd8","390":"#36bca6","391":"#edce8b","392":"#54e5e5","393":"#3baa60","394":"#36a9e2","395":"#ef9637","397":"#ffc72d","399":"#68a89d","401":"#ffcc4c","402":"#fc50c3","405":"#3a9aad","407":"#d17057","409":"#77e5e5","412":"#7ee5e5","413":"#b2af05","414":"#67acce","415":"#f2bf48","416":"#c66c55","417":"#5fccb9","419":"#69bfb0","422":"#f265c3","423":"#ffb90a","424":"#41bf6b","426":"#e861bb","427":"#56c6ff","428":"#80ccbf","430":"#389e5a","432":"#ffda7c","435":"#53ccb7","438":"#57e5e5","439":"#f9c252","440":"#ffc416","441":"#ffd259","442":"#6cccbc","443":"#ffa991","444":"#74c4ef","445":"#eadf07","446":"#ffc023","449":"#f7e3b4","450":"#4fcc79","451":"#ffb6a0","452":"#f99c39","453":"#75caf4","454":"#a55b48","456":"#99dcff","458":"#ff976b","459":"#3fcc6e","460":"#ffbd19","461":"#ccc62c","462":"#35d4f4","463":"#76ccbd","464":"#ffd04f","465":"#ccc861","466":"#3aa35d","467":"#ba7b37","470":"#ffe08c","473":"#ff916d","474":"#37bfa8","475":"#efab0b","476":"#ffa187","478":"#66a59b","479":"#efa802","480":"#754033","481":"#ccc859","484":"#6accbb","485":"#3cad62","486":"#f79b38","487":"#b2af08","488":"#f4cb44","490":"#edcf90","491":"#ffcc35","493":"#ccc855","494":"#43cc70","497":"#ea9335","498":"#44e5e5","499":"#edcc84","500":"#ffa791","501":"#39a0b5","503":"#c9c30c","504":"#ffa389","505":"#ffc430","507":"#f9a47f","508":"#63ccba","510":"#f2dfae","511":"#ffd56b","512":"#a35a47","513":"#e89843","514":"#ffd7cc","516":"#5be5e5","517":"#6bc689","518":"#ffc20c","519":"#ccc85d","520":"#3db6ce","528":"#f2da9f","529":"#ffd051","533":"#35cc67","535":"#dd765d","536":"#39a05c","537":"#f2be46","538":"#3fbad3","539":"#77cef9","540":"#3dbeff","541":"#ed9078","542":"#c14799","544":"#9b5544","545":"#8c4d3d","546":"#ffc10a","548":"#f4be0c","549":"#f7e2b2","550":"#3fbfff","553":"#edd49e","554":"#bf6852","555":"#55cc7d","556":"#368a9b","557":"#bc6651","559":"#ffcd4f","561":"#35cae8","562":"#efa907","563":"#ccc347","565":"#3dd3d3","568":"#59ccb8","570":"#ffce54","571":"#39c0db","572":"#e2da31","573":"#f2bb3c","574":"#93dbff","575":"#824739","576":"#e89135","578":"#82e5e5","579":"#68ccff","581":"#ffd256","582":"#ffdf87","584":"#45dbf9","586":"#e08d35","591":"#ffbc05","593":"#ff906b","594":"#84d6ff","595":"#41c16c","597":"#f24fbc","599":"#ddd75f","601":"#ffe18e","602":"#7be5e5","604":"#36c1aa","606":"#ff8e68","611":"#368ea0","612":"#5bc8ff","613":"#79e5e5","614":"#3ba55f","615":"#a5e1ff","616":"#d64aa7","617":"#ffc61e","618":"#3de5e5","619":"#e24ab0","620":"#c6833b","621":"#edcb82","622":"#59c7ff","623":"#3db565","624":"#f9bb3e","625":"#2bbc5b","627":"#ffcb30","628":"#f9a143","629":"#ffc228","631":"#edcd89","632":"#d8cc1c","635":"#efac0e","637":"#7fd4ff","638":"#35d2f2","639":"#ffcd3a","641":"#ffd9ce","642":"#ffbf1e","643":"#eab84d","644":"#ffc9ba","645":"#41ccb4","646":"#f9ba3b","647":"#cec80c","648":"#f4bd09","650":"#3cb1c9","652":"#ffc528","653":"#ce4aa2","656":"#f4bd07","657":"#5dad78","658":"#ff8c66","660":"#ffbba8","661":"#79d0fc","662":"#ffd559","665":"#ffe69b","666":"#ffd456","667":"#ffca47","671":"#f9c14f","672":"#7a4335","673":"#ffbd0a","674":"#ffde84","677":"#f4ca3f","678":"#659fbc","679":"#3ba5ba","680":"#ffa787","681":"#e87c61","682":"#e8a310","683":"#ffc730","684":"#f9bd45","686":"#ba4693","687":"#ba762e","688":"#eade02","690":"#fc9d37","693":"#e8a412","695":"#eadf04","696":"#f4c93d","697":"#ed7f63","698":"#efaa09","699":"#ffcfc1","701":"#ccc349","702":"#ed4eb8","704":"#ffd35b","706":"#2cc960","707":"#d85fb0","708":"#f4c835","709":"#935141","710":"#3fccb4","711":"#ffce3d","712":"#c46a54","713":"#41c5e0","716":"#8cd8ff","717":"#f765c6","720":"#38bed8","721":"#b2af00","722":"#2bbf5d","724":"#b74792","725":"#f2ba37","727":"#37c6af","729":"#f4cd4b","731":"#3fdfff","733":"#67bcae","734":"#43cce8","735":"#49c2ff","736":"#3bcccc","737":"#f2d896","740":"#f4c93a","744":"#edd5a1","746":"#ffc3b2","748":"#4fbff7","749":"#f2d99b","750":"#3cadc4","752":"#84ccc0","754":"#c67e31","755":"#f4cc46","757":"#f29179","758":"#379b59","759":"#ffa382","760":"#f2deab","762":"#ffe8a5","763":"#ddd75d","764":"#bf792f","765":"#f4bc02","767":"#42c0ff","768":"#e58d77","769":"#ffc535","770":"#62e5e5","771":"#5dcc82","772":"#3ca7bc","773":"#f4d15d","774":"#ffc519","775":"#e84cb4","776":"#45cc72","778":"#6cb8dd","779":"#dd8c35","780":"#edd093","783":"#ffc532","784":"#ffb9a5","785":"#ffd65b","787":"#3dccb4","789":"#80e5e5","790":"#649dba","791":"#f49f44","793":"#67afd3","796":"#40e5e5","797":"#f7dda0","798":"#47ccb5","799":"#ccc857","803":"#45ccb5","804":"#ffbd07","808":"#b2458e","809":"#dd4bad","810":"#a8e2ff","812":"#ffa37c","816":"#40bc69","818":"#6eccbc","819":"#68b1d6","821":"#d88934","823":"#44d7f4","824":"#cc5ba6","826":"#4fc4ff","827":"#3ed6d6","829":"#eabb54","830":"#f9b939","831":"#ffc005","832":"#ffd775","834":"#d18534","835":"#ffd260","837":"#c47d31","839":"#39bfbf","840":"#ffcd51","841":"#ffdd82","842":"#bf4897","843":"#e5d602","844":"#49e5e5","846":"#f74fbf","849":"#e88d76","850":"#f4a07c","851":"#ffaf99","855":"#ffc928","856":"#63cbff","857":"#f4d058","858":"#c45aa1","861":"#30cc64","863":"#c95ca5","864":"#ffd059","865":"#47cc73","867":"#f9b834","868":"#edc97b","869":"#ffca2b","870":"#f4c838","871":"#ffc942","872":"#3cb263","874":"#ffb29b","875":"#ffbd16","876":"#f2d898","877":"#ccc62e","878":"#ffd468","879":"#ccc243","880":"#e25fb7","881":"#ffd1c4","883":"#f9937a","885":"#f29837","888":"#e2da34","889":"#379957","892":"#e2795f","893":"#5faf79","894":"#ffc721","895":"#ffc30f","896":"#65a398","898":"#efa904","899":"#4fccb7","901":"#2bc65f","902":"#ffc83d","906":"#5bccb9","908":"#eab748","909":"#ffb39e","911":"#8e4e3e","913":"#ff9f84","915":"#89d7ff","916":"#edd29a","917":"#6ccc8c","919":"#f2c04d","920":"#3dcc6c","921":"#44d1ed","925":"#ce6e56","926":"#d15eaa","927":"#e59744","928":"#fca580","929":"#39c6c6","931":"#6cc98b","934":"#41c8e2","935":"#6bcdff","936":"#ffd147","937":"#874a3b","938":"#5ec9ff","940":"#f49938","941":"#3fba68","942":"#e060b5","944":"#edc97d","945":"#7cccbe","946":"#5caa76","951":"#a05846","953":"#ffc1af","954":"#ffa57f","955":"#ffa58c","956":"#ffc62b","957":"#ffcf56","959":"#50c3fc","963":"#f7dfa8","964":"#db755c","965":"#82d5ff","966":"#ffd34f","969":"#3db0c6","970":"#38bcbc","971":"#54e2ff","972":"#44c0ff","973":"#f7db99","977":"#ffc5b5","978":"#ffba0c","980":"#ffbb0f","981":"#cc8233","982":"#ccc23f","983":"#ffcc32","989":"#ffc935","991":"#db8a34","992":"#ffa584","993":"#f9bd43","995":"#edcf8e","996":"#37baba","997":"#66aacc","998":"#43ccb5","999":"#3eb8d1","1000":"#db5eb1","1002":"#3de2e2","1004":"#37ade8","1005":"#36c4ac","1006":"#d8cc1a","1007":"#54c6ff","1008":"#aa5e4b","1009":"#ef8f77","1010":"#4fc1f9","1011":"#1c2626","1012":"#a5e1ff","1013":"#a5e1ff","1014":"#a5e1ff","1015":"#a5e1ff","1016":"#47cc74","1017":"#47cc75","1018":"#47cc76","1019":"#47cc77","1020":"#47cc78","1021":"#f99c40","1022":"#f99c41","1023":"#ff9368","1024":"#8b51ff","1025":"#8d54ff","1026":"#894fff","1100":"#3ce0e0"},"name":"seg2"}],"showDefaultAnnotations":false,"sliceAngleRotaX":"'+Gt[0]+'","sliceAngleRotaY":"'+Gt[1]+'","sliceAngleRotaZ":"'+Gt[2]+'","selectedLayer":{"visible":true,"layer":"seg2"},"crossSectionBackgroundColor":"#ffffff","projectionBackgroundColor":"#ffffff","layout":"hzkdPanel"}';window.open(Cn,"_blank")},300);else if(Ne.current==1)je=parseInt(((zt+8)/13.9919970598834*700).toString()),window.open("http://"+de.current+"/STAM/reference/index.html?lang=en_us&3Dname="+ut+"&inp="+je+"§ion=coronal");else if(Ne.current==2){let It=Nt;Nt<0&&(It=-Nt),je=parseInt((It/5.17*256).toString()),Nt==0&&(je=1),window.open("http://"+de.current+"/STAM/reference/index.html?lang=en_us&3Dname="+ut+"&inp="+je+"§ion=sagittal")}else Ne.current==3&&(je=parseInt(((Lt+5.33)/7.37*367).toString()),window.open("http://"+de.current+"/STAM/reference/index.html?lang=en_us&3Dname="+ut+"&inp="+je+"§ion=horizontal"))},el=(_e,$e,je,ut,It,Gt,an,un,cn,cr,Cn)=>{let Qn=new URL(window.location.href),ci=new URLSearchParams(Qn.search).get("atlasReslicingInfo"),Hr={};ci&&(Hr=JSON.parse(ci)),Hr.angleX=_e,Hr.angleY=$e,Hr.angleZ=je,Hr.positionZ=Gt,Hr.positionX=ut,Hr.positionY=It,Hr.translateX=an,Hr.translateY=un,Hr.translateZ=cn,Hr.ButtonDisabled=Cn,Hr.rotate=cr,Hr.direction1=Ne.current,Ka.atlasReslicingInfo=Hr,mt(_e),fn($e),Ct(je),Qt(Gt),Dt(ut),Xt(It),Yt(an),en(un),In(cn),Or(cr),bn(Cn)},fs=(_e,$e=!1)=>{Se.current.remove(yl.current);let je=yl.current.position;if($e&&K7){let It=JSON.parse(K7);je=new Ie(It.positionX,It.positionY,It.positionZ)}let ut=_e;if(Yl(ut),ut==1){Oe.current.enabled=!1,Se.current.remove(Oe.current),uc(0),Ne.current=1,el(90,0,0,-5.17,-5.33,je.z,!0,!0,!1,!0,!1);const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");It&&(It.position.y=je.y,Se.current.remove(It),Dn(!1)),Gt&&(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)),an&&(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1)),un?(un.position.z=je.z,Se.current.remove(un),ei(!1)):ei(!0)}else if(ut==2){uc(0),Oe.current.enabled=!1,Se.current.remove(Oe.current),el(90,270,0,je.x,-5.33,-8,!1,!0,!0,!0,!1),Ne.current=2;const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");Gt?(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)):Nn(!0),It&&(It.position.y=je.y,Se.current.remove(It),Dn(!1)),un&&(un.position.z=je.z,Se.current.remove(un),ei(!1)),an&&(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1))}else if(ut==3){Oe.current.enabled=!1,Se.current.remove(Oe.current),el(360,0,0,-5.17,je.y,-8,!0,!1,!0,!0,!1),Ne.current=3,uc(0);const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");Gt&&(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)),un&&(un.position.z=je.z,Se.current.remove(un),ei(!1)),an&&(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1)),It?(It.position.y=je.y,Se.current.remove(It),Dn(!1)):Dn(!0)}else if(ut==4){Ne.current=4,Se.current.remove(Oe.current),el(120,320,270,je.x,je.y,je.z,!1,!1,!1,!1,!1);const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");Gt&&(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)),un&&(un.position.z=je.z,Se.current.remove(un),ei(!1)),It&&(It.position.y=je.y,Se.current.remove(It),Dn(!1)),an?(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1)):ui(!0)}},ou=_e=>{var $e=Zv(_e,bl.current);if(A.includes(_e)){_.current.removeFBX(_e,!0);const je=_.current.checkedKeys.current.findIndex(an=>an===_e);je>-1&&_.current.checkedKeys.current.splice(je,1),Q(_.current.checkedKeys.current);let ut=new URL(window.location.href),It=new URLSearchParams(ut.search);const Gt=JSON.stringify(_.current.checkedKeys.current);It.set("regionsChecked",Gt),ut.search=It.toString(),window.history.replaceState({},"",ut),_&&_.current.checkedKeys.current.length==0?_.current.setExpandedKeys(_.current.defexpandedKeys.current):$e.forEach(an=>{_.current.setExpandedKeys(un=>un.filter(cn=>cn!==an))})}else if(_e){let je=_e.replace("/","_");const ut=_.current.fetchColor(_e);if(ut){let It=n+"/data/FBX/"+je+".FBX";Td(It,_e,ut,.8,0,"FBX"),_.current.checkedKeys.current.push(_e);const Gt=Array.from(new Set([..._.current.expandedKeys,...$e]));_.current.setExpandedKeys(Gt),Q(_.current.checkedKeys.current);let an=new URL(window.location.href),un=new URLSearchParams(an.search);const cn=JSON.stringify(_.current.checkedKeys.current);un.set("regionsChecked",cn),an.search=un.toString(),window.history.replaceState({},"",an)}}Te({})},hp=_e=>{var $e=Zv(_e,bl.current);if(A.includes(_e)){_.current.removeFBX(_e,!0);const je=_.current.checkedKeys.current.findIndex(ut=>ut===_e);je>-1&&_.current.checkedKeys.current.splice(je,1),Q(_.current.checkedKeys.current),_&&_.current.checkedKeys.current.length==0?_.current.setExpandedKeys(_.current.defexpandedKeys.current):$e.forEach(ut=>{_.current.setExpandedKeys(It=>It.filter(Gt=>Gt!==ut))})}else if(_e){let je=_e.replace("/","_");const ut=_.current.fetchColor(_e);if(ut){let It=n+"/data/FBX/"+je+".FBX";Td(It,_e,ut,.8,0,"FBX"),_.current.checkedKeys.current.push(_e);const Gt=Array.from(new Set([..._.current.expandedKeys,...$e]));_.current.setExpandedKeys(Gt),Q(_.current.checkedKeys.current)}}Te({})},Ju=_e=>{var $e;if(A.includes(_e)){_.current.removeFBX(_e,!0);const je=_.current.checkedKeys.current.findIndex(an=>an===_e);je>-1&&_.current.checkedKeys.current.splice(je,1),Q(_.current.checkedKeys.current);let ut=new URL(window.location.href),It=new URLSearchParams(ut.search);const Gt=JSON.stringify(_.current.checkedKeys.current);It.set("regionsChecked",Gt),ut.search=It.toString(),window.history.replaceState({},"",ut)}else if(_e){const je=_.current.fetchColor(_e.replace("_","/"));let ut=n+"/data/FBX/"+_e.replace("/","_")+".FBX";Td(ut,_e,je,.8,0),_.current.checkedKeys.current.push(_e),Q(_.current.checkedKeys.current);let It=new URL(window.location.href),Gt=new URLSearchParams(It.search);const an=JSON.stringify(_.current.checkedKeys.current);Gt.set("regionsChecked",an),It.search=Gt.toString(),window.history.replaceState({},"",It)}($e=f.domElement)==null||$e.addEventListener("mousemove",K.current,!1)},ev=_e=>{if(_e in Ce.current.neurons_line.current){Ce.current.removeSWCAll(_e),Ce.current.setCheckItems(It=>It.filter(Gt=>Gt!==_e)),Ce.current.setPathOpen(It=>It.filter(Gt=>Gt!==_e));let $e=new URL(window.location.href),je=new URLSearchParams($e.search);const ut=JSON.stringify(Ce.current.checkItems.filter(It=>It!==_e));if(je.set("neuronsChecked",ut),$e.search=je.toString(),window.history.replaceState({},"",$e),_e in pe.current){for(let It in pe.current[_e])Se.current.remove(pe.current[_e][It]);delete pe.current[_e]}}},tv=()=>{if(!Os.current){Js(!0);return}const _e=document.createElement("a");_e.href=n+"/zip/9.8.label.zip",_e.download="9.8.label.zip",_e.click();let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("type");const It=window.location.origin+window.location.pathname+`?type=${ut}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:It,time:0,key:ga.current})})},kg=(_e,$e)=>{for(let je of _e){if(je.name.toLowerCase()===$e.toLowerCase())return{color:je.color,path:je.path,fullname:je.fullname};if(je.children){const ut=kg(je.children,$e);if(ut)return ut}}return null},sf=(_e,$e)=>{for(let je of _e){if(je.name.toLowerCase()===$e.toLowerCase()&&!je.children)return{color:je.color,path:je.path};if(je.children){const ut=sf(je.children,$e);if(ut)return ut}}return null},Ug=(_e,$e)=>{const je=[];for(const ut in _e)_e[ut].includes($e)&&je.push(ut);return je},nn=(_e,$e=[])=>{if(Array.isArray(_e))for(let je of _e)nn(je,$e);if(typeof _e=="object")if(_e.hasOwnProperty("children"))nn(_e.children,$e);else return _e.name&&$e.push(_e.name),_e.name},pc=(_e,$e,je=[])=>{if(Array.isArray(_e))for(let ut of _e)pc(ut,$e,je);typeof _e=="object"&&(_e.hasOwnProperty("children")&&pc(_e.children,$e,je),_e.name===$e&&(_e.hasOwnProperty("children")?nn(_e.children,je):_e.name&&je.push(_e.name)))},Bc=_e=>{if(_e in ae.current.vesselObj.current){ae.current.setCheckItems(It=>It.filter(Gt=>Gt!==_e)),ae.current.removeVessel(_e);let $e=new URL(window.location.href),je=new URLSearchParams($e.search);const ut=JSON.stringify(ae.current.checkItems.filter(It=>It!==_e));je.set("vesselsChecked",ut),$e.search=je.toString(),window.history.replaceState({},"",$e)}},xh=_e=>()=>{io(_e),Ue(_e)};function Fg(_e,$e){return[...new Set([..._e,...$e])]}const qr=_e=>{const $e=[],je=[];if(ae.current&&_.current){const ut=ae.current,It=_.current;pc(ut.treeDatas,_e,$e);const Gt=Lc.current.indexOf(_e);if(Gt!==-1){Lc.current.splice(Gt,1),$e.forEach(Cn=>{je.push(Ug(Al,Cn))});const an=je.reduce((Cn,Qn)=>Fg(Cn,Qn),[]);let un=A;an.forEach(Cn=>{sf(It.treeDatas,Cn)!=null&&(un=un.filter(Nr=>Nr!==Cn),It.removeFBX(Cn,!0))}),Q(un);let cn=new URL(window.location.href),cr=new URLSearchParams(cn.search);cr.set("regionsChecked",JSON.stringify(un)),cn.search=cr.toString(),window.history.replaceState({},"",cn),Lc.current.length===0&&It.setExpandedKeys(It.defexpandedKeys.current)}else{Lc.current.push(_e),$e.forEach(Qn=>{je.push(Ug(Al,Qn))});const an=je.reduce((Qn,Nr)=>Fg(Qn,Nr),[]),un=Array.from(new Set([...It.expandedKeys,...an]));It.setExpandedKeys(un);let cn=[...A];an.forEach(Qn=>{const Nr=sf(It.treeDatas,Qn);if(Nr!=null){const ci=`${n}/data/FBX/${Qn}.FBX`;cn.push(Qn),It.LoadFBX(ci,Qn,Nr.color,.8,0)}}),Q(cn);let cr=new URL(window.location.href),Cn=new URLSearchParams(cr.search);Cn.set("regionsChecked",JSON.stringify(cn)),cr.search=Cn.toString(),window.history.replaceState({},"",cr)}}},On=(_e,$e)=>{for(let je in _e)if(_e[je].name===$e){if(_e[je]["2D"])return $e;{const ut=Hm($e,pr);return On(pr,ut)}}else if(_e[je].children){const ut=On(_e[je].children,$e);if(ut)return ut}return null},fi=S.useMemo(()=>(Er==3||Er==4)&&!(X||be)?[Er==3&&Xc!=1?{key:"3",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(1),te(!0)}},a("5000.6025")||"切换到冠状面")}:null,Er==3&&Xc!=2?{key:"4",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(2),te(!0)}},a("5000.6026")||"切换到矢状面")}:null,Er==3&&Xc!=3?{key:"5",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(3),te(!0)}},a("5000.6027")||"切换到水平面")}:null,Er==3&&Xc!=4?{key:"6",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(4),te(!0)}},a("5000.6028")||"切换到任意面")}:null,ye.brains?{key:"1",label:S.createElement("a",{target:"_blank",type:"primary",onClick:()=>{dd(ye.brains,Er==4),te(!0)}},a("5000.6018")||"查看更高分辨率图像")}:null,ye.brains?{key:"2",label:S.createElement("a",{target:"_blank",onClick:()=>{ou(ye.brains),te(!0)}},_.current.checkedKeys.current.includes(ye.brains)?a("5000.6023",{name:ye.brains})||`隐藏${ye.brains}的三维形貌`:a("5000.6024",{name:ye.brains})||`显示${ye.brains}的三维形貌`)}:null]:X||be?[X?{key:"1",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:()=>{Ju(X),te(!0)}},_.current.checkedKeys.current.includes(X)?a("5000.5056")||"隐藏核团":a("5000.5057")||"显示核团")}:null,Er!=7&&Er!=2&&(wt.length==0||wt.includes("neurons"))&&be?{key:"3",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{uo(7),te(!0),setTimeout(()=>{io(X),Ue(X),V(!1),rn(1)},50)}},a("5000.6015")||"查询位于或投射到该结构的神经元")}:null,be?{key:"6",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{const _e=Se.current.getObjectByName(be);if(_e){const $e=new ps().setFromObject(_e),je=new Ie;$e.getCenter(je),p.current.target.copy(je),te(!0)}}},a("7000.7019")||"设置为焦点")}:null,be&&Er==5?{key:"5",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{const _e=new ps,$e=Se.current.getObjectByName(be);if($e){_e.expandByObject($e.clone());let je=_e.min,ut=_e.max,It=new Ie;_e.getCenter(It);const Gt=ut.x-je.x,an=ut.y-je.y,un=ut.z-je.z;gt.current.scale.x=Gt,gt.current.scale.y=an,gt.current.scale.z=un,gt.current.position.set(It.x,It.y,It.z);const cn=gt.current.geometry.clone();cn.scale(gt.current.scale.x,gt.current.scale.y,gt.current.scale.z),cn.translate(It.x,It.y,It.z);const cr=new m4(cn);Hn.current.geometry=cr,Se.current.remove(Lr.current);const Cn=a("5000.0006")||"显示数据块";if(tr===Cn){vr(a("5000.0007")||"隐藏数据块"),Oe.current=new t_(Bi.current,f==null?void 0:f.domElement),Oe.current.setMode("translate"),Oe.current.enabled=!0,Oe.current.visible=!0,Oe.current.name="transformControls",Oe.current.attach(gt.current),Se.current.add(gt.current,Oe.current,Hn.current),bT(),document.addEventListener("keypress",Ub);const Qn=new ps;Qn.expandByObject(gt.current);const Nr=R.current(Qn.min.clone()),ci=R.current(Qn.max.clone());let Hr=new _p(jm(650,620,`${Nr.x.toFixed(2)},${Nr.y.toFixed(2)},${Nr.z.toFixed(2)}`,"#ccc")),oi=new Xf(new bf({map:Hr}));oi.name="startText";let xo=new _p(jm(650,620,`${ci.x.toFixed(2)},${ci.y.toFixed(2)},${ci.z.toFixed(2)}`,"#ccc")),Mr=new Xf(new bf({map:xo}));Mr.name="endText",oi.position.set(Qn.min.x,Qn.min.y+.2,Qn.min.z),Mr.position.set(Qn.max.x,Qn.max.y+.6,Qn.max.z);const Ii=Se.current.getObjectByName("startText"),Zi=Se.current.getObjectByName("endText");Ii&&Zi&&Se.current.remove(Ii,Zi),Se.current.add(Lr.current,oi,Mr)}te(!0),Te({})}}},a("5000.6022",{lableStr:be})||"设置 "+be+" 的包围盒为下载范围")}:null].filter(_e=>_e!==null):oe?[{key:"1",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{Ce.current.showSwctext(oe),te(!0)}},oe in pe.current?a("5000.5060")||"隐藏文字":a("5000.5061")||"显示文字")},{key:"2",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{ev(oe),te(!0)}},a("5000.6004")||"隐藏该神经元")}]:re?[{key:"1",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{qr(re),te(!0)}},Lc.current.includes(re)?a("5000.0209")||"Hide Label":a("5000.0208")||"Show Label")},{key:"2",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{Bc(re),te(!0)}},a("5000.6021")||"隐藏该分支")}]:dt.Lable?[{key:"1",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{if(dt.name){const _e=Se.current.getObjectByName(dt.name);if(_e){const $e=new ps().setFromObject(_e),je=new Ie;$e.getCenter(je),p.current.target.copy(je),te(!0)}}}},a("7000.7019")||"设置为焦点")},{key:"2",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{dt.Lable&&Ju(dt.Lable),te(!0)}},_.current.checkedKeys.current.includes(dt.Lable)?a("5000.6023",{name:dt.Lable})||`隐藏${dt.Lable}的三维形貌`:a("5000.6024",{name:dt.Lable})||`显示${dt.Lable}的三维形貌`)}]:[],[X,re,oe,be,Er,$s,ye,Uo,dt]),Vl=_e=>{_e=_e.replace(/[\[\]]/g,"\\$&");var $e=new RegExp("[?&]"+_e+"(=([^&#]*)|&|#|$)"),je=$e.exec(window.location.href);return je?je[2]?decodeURIComponent(je[2].replace(/\+/g," ")):"":null},Hm=(_e,$e)=>{let je="";for(let ut in $e){const It=$e[ut];if(It.children){if(It.children.some(Gt=>Gt.name===_e)){je=It.name;break}else if(Hm(_e,It.children)){je=Hm(_e,It.children);break}}}return je},C1=()=>{let _e=new URL(window.location.href),$e=new URLSearchParams(_e.search);const je=Math.ceil((performance.now()-Fc.current)/1e3)-1;Fc.current=performance.now();let ut=$e.get("type");if(ut){const It=window.location.origin+window.location.pathname+`?type=${ut}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:It,time:je})})}},lf=(_e,$e,je)=>{let ut=new URL(window.location.href),It=new URLSearchParams(ut.search);const Gt=Math.ceil((performance.now()-Fc.current)/1e3)-1;let an=It.get(_e);if(an&&!je){Fc.current=performance.now();const cn=window.location.origin+window.location.pathname+`?${_e}=${an}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:cn,time:Gt})})}It.set(_e,$e),ut.search=It.toString(),window.history.replaceState({},"",ut);const un=window.location.origin+window.location.pathname+`?${_e}=${$e}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:un,time:0})})},nv=(_e,$e,je)=>{if($e)switch(parseInt(_e)){case 0:document.title="STAM-SimpleViewer",lf("type","simple",je);break;case 1:document.title="STAM-NormalViewer",lf("type","normal",je);break;case 2:document.title="STAM-Surgery",lf("type","virtual",je);break;case 3:document.title="STAM-Reslicing",lf("type","slicing",je);break;case 4:document.title="STAM-Registration",lf("type","registration",je);break;case 5:document.title="STAM-Downloading",lf("type","downloading",je);break;case 6:document.title="STAM-AtlasMapping",lf("type","mapping",je);break;case 7:document.title="STAM-Connectivity",lf("type","circuits",je);break;case 8:document.title="STAM-OtherAtlas",lf("type","other",je);break;case 9:document.title="STAM-ViewSetting",lf("type","setting",je);break;case 10:document.title="STAM-neuronRegistration",lf("type","neuronRegistration",je);break;case 11:document.title="STAM-CloudChart",lf("type","cloudChart",je);break;case 12:document.title="STAM-FunctionalLoop",lf("type","functionalLoop",je);break}};S.useEffect(()=>{ye.brains&&Go(On(pr,ye.brains))},[ye]),S.useEffect(()=>{be&&So(On(pr,be)),g(fi),ql.current=h},[h,X,A,re,be,oe,Er,we,ye,Uo,dt]);const _h=async _e=>{ko(_e.url||_e.preview),pa(!0)},x1=(_e,$e)=>{const je=new FormData;je.append("file",_e.file),fetch("/app-api/up-api/update",{method:"post",body:je}).then(ut=>ut.json()).then(ut=>{if(ut.code===200)if(nc.success("update success"),$e===2){const It=ds.findIndex(Gt=>Gt.key===Qs[0]);if(It>-1){let Gt=JSON.parse(JSON.stringify(Xs.current)),an=Gt[It];an.fileList2=[{url:"data:image/png;base64,"+ut.base64_url}],fc(Gt),Xs.current=Gt}}else{const It=ds.findIndex(Gt=>Gt.key===Qs[0]);if(It>-1){let Gt=JSON.parse(JSON.stringify(Xs.current)),an=Gt[It];an.fileList=[{url:"data:image/png;base64,"+ut.base64_url}],an.correspondingPlaneData={},an.filename=ut.path,fc(Gt);const un=Se.current.children.filter(cn=>cn.userData.name==="registrationPng");un&&Se.current.remove(...un),Xs.current=Gt}Kn.current=ut.path}else ut.message&&$o.error({content:ut.message})})},gT=(_e,$e)=>{if(_e.file.size/1024/1024>=100){$o.confirm({title:"File Check",content:a("4000.0203")||"Please down-sample the slice image to ~10μm/pixel before uploading",okText:"Yes",cancelText:"No",onOk:()=>x1(_e,$e),onCancel:()=>{nc.info("Upload canceled")}});return}else x1(_e,$e)},Va=async(_e,$e)=>{const je=_e.type==="image/tiff"||_e.type==="image/tif",ut=_e.name.endsWith(".swc");let It,Gt;return await new Promise(un=>{if(je){const cn=new FileReader;cn.readAsArrayBuffer(_e),cn.onload=async cr=>{var Cn;if((Cn=cr.target)!=null&&Cn.result){const Qn=cr.target.result;if(Qn instanceof ArrayBuffer){const ci=await(await kCe(Qn)).getImage(),Hr=ci.getWidth(),oi=ci.getHeight();if(!$e){const xo=ds.findIndex(Mr=>Mr.key===Qs[0]);if(xo>-1){let Mr=JSON.parse(JSON.stringify(ds)),Ii=Mr[xo];Ii.firstRegistrationImg={width:Hr,height:oi},fc(Mr),Xs.current=Mr}}if($e===2){const xo=ds.findIndex(Mr=>Mr.key===Qs[0]);if(xo>-1){const{firstRegistrationImg:Mr}=ds[xo];(Mr.width!==Hr||oi!==Mr.height)&&(nc.error("The size of the second TIFF image needs to be consistent with the first one!"),un(!1))}}un(!0)}}}}else un(!0)}).then(un=>un?(Er==6?(It=je||ut,Gt="You can only upload tif or swc files!"):(It=je,Gt="You can only upload tif files!"),It||nc.error(Gt),It):!1)},_1=(_e,$e)=>{const je=new FormData;je.append("file",_e.file),console.log(_e.file),_e.file.name.split(".")[1]=="swc"?ud(!0):ud(!1),fetch("/app-api/d-api/upload",{method:"post",body:je}).then(ut=>ut.json()).then(ut=>{ut.code===200?(nc.success("update success"),$e===2?no([{url:"data:image/png;base64,"+ut.base64_url}]):(Gi([{url:"data:image/png;base64,"+ut.base64_url}]),$a({}),Kn.current=ut.path)):ut.message&&$o.error({content:a("5000.0003")||"上传失败,请联系管理员"})})},w1=_e=>{const $e=Bi.current.position;let je=new Ie(..._e.geometry.attributes.position.array),ut=_e.position.clone().add(je);$e.distanceTo(ut)>8?_e.visible=!1:_e.visible=!0},tl=_e=>{const $e="green",je=_e.split("/").pop();let ut={};const It=[];Se.current.traverse(Gt=>{Gt.userData.isAtlasMapping==="true"&&It.push(Gt)}),It.forEach(Gt=>{Se.current.remove(Gt)}),fetch(_e).then(Gt=>Gt.json()).then(Gt=>{let an=Wa.current,un=yo.current,cn=oo.current,cr=new Po;const Cn=new Qc;Gt.line.forEach((Mr,Ii)=>{var Zi=Gt.position[Mr.end],ki=Gt.position[Mr.start];let la=new Ni,Aa=[];Aa.push(Zi.x*.01,Zi.y*.01,Zi.z*.01),la.setAttribute("position",new sa(Aa,3));let Ns=new sh({glslVersion:Jf,uniforms:{color:{value:new Cr($e)},scale:{value:window.innerHeight/2},size:{value:.1},opacity:{value:1}},vertexShader:`
|
|
5092
|
+
`;let Axn=new URL(window.location.href),tf=new URLSearchParams(Axn.search),O5e=tf.get("leftHemisphereVisibility"),L5e=tf.get("coordinateVisibility"),N5e=tf.get("datumMarkVisibility"),M5e=tf.get("cranialVisibility"),P5e=tf.get("gridVisibility"),D5e=tf.get("terminalVisibility"),k5e=tf.get("branchingVisibility"),U5e=tf.get("branchingColor"),F5e=tf.get("brainContourVisibility"),B5e=tf.get("brainContourOpacity"),Y7=tf.get("otherAtlases"),K7=tf.get("atlasReslicingInfo"),J7=tf.get("sectionPointPosition"),$5e=tf.get("echart_Value"),WZ=tf.get("tiffDataPath"),V5e=tf.get("tiffInfo"),z5e=tf.get("swcUrl");const Rxn={leftHemisphereVisibility:O5e?JSON.parse(O5e):!1,coordinateVisibility:L5e?JSON.parse(L5e):!0,datumMarkVisibility:N5e?JSON.parse(N5e):!0,cranialVisibility:M5e?JSON.parse(M5e):!1,gridVisibility:P5e?JSON.parse(P5e):!0,terminalVisibility:D5e?JSON.parse(D5e):!0,branchingVisibility:k5e?JSON.parse(k5e):!0,branchingColor:U5e||"#A7B5A1",brainContourVisibility:F5e?JSON.parse(F5e):!0,brainContourOpacity:B5e?JSON.parse(B5e):.3,otherAtlases:Y7||"None",atlasReslicingInfo:K7?JSON.parse(K7):{},sectionPointPosition:J7?JSON.parse(J7):{}},Oxn=(t,e)=>{let n=new URL(window.location.href),r=new URLSearchParams(n.search),i=e;typeof e!="string"&&(i=JSON.stringify(i)),r.set(t,i),n.search=r.toString(),window.history.replaceState({},"",n)},Lxn={set(t,e,n){return t[e]=n,Oxn(e,n),!0}},Ka=new Proxy(Rxn,Lxn),Kc=Date.now(),vWe=S.forwardRef((t,e)=>{const{regionData:n,setoffset_factor:r,offset_factor_R:i,t:a,hrefStr:o,leftTreeRef:s,setJiaoduRef:l,jiaoduRef:u,mouseflag:d,renderer:f,controls:p,menutagShow:h,setMenuTag:g,startselect:y,linemeshs_jing:v,points:m,points2:b,activetabIndex:E,material:C,setShowimage:x,childRef:_,checkItems:A,setoutflag:P,fetchCoordinateFunc:R,setendPoint:N,clickPoint:D,outflagRef:U,axis_font:z,setdatum:B,modeChoose:j,setShowModeChoose:V,virusModeValue:G,setShowTabNums:W,pipelineClickEvent:Z,automaticGroup:H,focusVirusLineItem:X,setMenuTagShow:te,responsefunc:K,mode:Y,setCheckItems:Q,setLeftMenuTabIndex:ie,updatePage:ee,swcItem:oe,axon_check:ue,swcnameMesh:pe,setMode:he,vesselRef:ae,swcRef:Ce,vesselStr:re,lableStr:be,setShowSettingModal:fe,showSettingModal:Ae,fbxTreeDatas:Ve,composer:Ke,setEchartValue:Ue,echartValue:we,sectionsInfoRef:We,sectionsInfo:ye,setSectionsInfo:ge,gray_value:Be,setLuguchecked:Pe,Luguchecked:De,datum:ot,setGridShow:Ye,PointShow:qe,nodeStr:dt,lefttab:xt,righttab:wt,atlasData:at,setTip:yt,tip:Ze,startRegionAnimation:tt,setFunctionLoopSwcData:vt,azimuth:Me,setAzimuth:ht}=t,[Kt,Ot]=S.useState(!1),[Ht,qt]=S.useState(!1),[tn,mn]=S.useState(!1),[Rn,Tn]=S.useState(!1),[Wn,xr]=S.useState(!1),[Vr,Gn]=S.useState(!1),[jt,$n]=S.useState(!1),[yn,lr]=S.useState(!1),[dr,mt]=S.useState(Ka.atlasReslicingInfo.angleX||120),[Vt,fn]=S.useState(Ka.atlasReslicingInfo.angleY||320),[Fe,Ct]=S.useState(Ka.atlasReslicingInfo.angleZ||270),[Nt,Dt]=S.useState(Ka.atlasReslicingInfo.positionX||0),[Lt,Xt]=S.useState(Ka.atlasReslicingInfo.positionY||0),[zt,Qt]=S.useState(Ka.atlasReslicingInfo.positionZ||0),[Ln,Yt]=S.useState(Ka.atlasReslicingInfo.translateX||!0),[Ft,en]=S.useState(Ka.atlasReslicingInfo.translateY||!0),[Bn,In]=S.useState(Ka.atlasReslicingInfo.translateZ||!0),[gr,Or]=S.useState(Ka.atlasReslicingInfo.rotate||!0),[ar,bn]=S.useState(Ka.atlasReslicingInfo.ButtonDisabled||!0),[nr,Nn]=S.useState(!1),[kn,Dn]=S.useState(!1),[hr,ei]=S.useState(!1),[vi,ui]=S.useState(!1),[tr,vr]=S.useState(a("5000.0006")||"显示数据块"),[Er,rr]=S.useState(1),[zr,Ji]=S.useState(1),[Mi,Gi]=S.useState([]),[ha,no]=S.useState([]),[za,Ro]=S.useState([]),[ro,ti]=S.useState(!1),[Ir,$a]=S.useState({}),[Za,pa]=S.useState(!1),[Qo,ko]=S.useState(""),[bi,Ea]=S.useState("Config_DAPI.ini"),[ns,Ti]=S.useState("applySTAM2CCF"),[ho,fr]=S.useState("800"),[li,rn]=S.useState(1),[bt,ln]=S.useState(!1),[Ut,zn]=S.useState(!1),[Yn,kr]=S.useState(!1),[ii,yi]=S.useState(!1),[Zr,ai]=S.useState(!0),[_i,Mn]=S.useState(2),[Jn,on]=S.useState(!1),[_r,Te]=S.useState({}),Ne=S.useRef(Ka.atlasReslicingInfo.direction1||4),it=S.useRef(null),[lt,st]=S.useState(a("4000.0242")||"清除靶点"),[At,pt]=S.useState(!1),me=S.useRef(null),de=S.useRef(window.location.href.split("/")[2]),Oe=S.useRef(new t_(Bi.current,f==null?void 0:f.domElement)),et=S.useRef(0),Ge=S.useRef(0),ct=S.useRef(new er),Bt=S.useRef(new Ie),$t=S.useRef(new Ie),hn=S.useRef(new er),Tt=S.useRef(new Ie(1,0,0)),gt=S.useRef(new er),ir=S.useRef(null),Hn=S.useRef(new hI),Kn=S.useRef(null),gn=S.useRef([]),or=S.useRef(null),Lr=S.useRef(new er),pn=S.useRef(new Qc),[sn,ri]=S.useState(Ka.otherAtlases),Jr={min:new Ie(59.74305725097656,69.15838623046875,.9565062522888184),max:new Ie(1081.3045654296875,800.6698608398438,1400.156005859375)},[Br,js]=S.useState([]),Ha=S.useRef({}),Oo=S.useRef(!1),Ei=S.useRef([0,0]),di=S.useRef([0,0]),ga=S.useRef(""),Os=S.useRef(!1),[so,Ho]=S.useState(!1),[cc,Js]=S.useState(!1),[Us,lo]=S.useState(0),[co,Fs]=S.useState(0),[Al,Rl]=S.useState({}),[pr,ms]=S.useState([]),Bs=S.useRef(null),Ls=S.useRef(null),[$s,So]=S.useState(""),[Uo,Go]=S.useState(null),[Qa,io]=S.useState($5e||""),[ml,Cs]=S.useState(!1);S.useState("");const Co=S.useRef(""),[xs,Ws]=S.useState(Ka.leftHemisphereVisibility),Lc=S.useRef([]);S.useRef([]);const[Ol,Zl]=S.useState(!1),[Nc,Gc]=S.useState(!1),ql=S.useRef(!0),vl=S.useRef(!0),_s=S.useRef(""),Mc=S.useRef({target:p.current.target.clone(),position:p.current.object.position.clone(),up:p.current.object.up.clone(),enabled:p.current.enabled}),[wu,uc]=S.useState(0),[nu,Nd]=S.useState(!0),jc=S.useRef(!0),Md=S.useRef(null),yl=S.useRef(new er),[cd,Wu]=S.useState(Ka.brainContourVisibility),[dc,Fl]=S.useState(["Task1","Task2"]),[Qs,nf]=S.useState(["Task1"]),[ds,fc]=S.useState([{key:"Task1",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""},{key:"Task2",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""}]),Xs=S.useRef([{key:"tags1",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""},{key:"tags2",fileList:[],radioValue:"Config_DAPI.ini",fileList2:[],correspondingPlaneData:{},registrationRadioShowType:"1",firstRegistrationImg:{width:0,height:0},startButtonLoading:!1,filename:""}]),Wc=S.useRef(null),Ec=S.useRef(null),[Pd,Pc]=S.useState(Ka.coordinateVisibility),[Xu,ru]=S.useState(Ka.brainContourOpacity),[Xc,Yl]=S.useState(Ka.atlasReslicingInfo.direction1||4),[rf,Dc]=S.useState({}),[Sc,kc]=S.useState({}),[Ll,$i]=S.useState({});S.useRef();const bl=S.useRef([]),El=S.useRef({brightness:.95,darkness:0,opacity:1,opacity2:1,color:{r:0,g:0,b:0},color2:{r:255,g:255,b:255}}),Uc=S.useRef(new Set),Fc=S.useRef(0),[Tu,Zu]=S.useState(""),[af,qu]=S.useState(!1);S.useState([]),S.useRef([]),S.useState([]),S.useState(""),S.useRef(!0),S.useRef(null);const[Zc,iu]=S.useState(10),[Iu,ud]=S.useState(!1);S.useImperativeHandle(e,()=>({tabChange:uo,setYinDaoOpen1:Ot,setYinDaoOpen2:qt,setYinDaoOpen3:mn,setYinDaoOpen4:Tn,setYinDaoOpen5:xr,setYinDaoOpen6:Gn,setYinDaoOpen7:$n,setDontShowAgain:Nd,modeValue:li})),S.useEffect(()=>{bl.current=Ve},[Ve]);const T=_e=>{Uc.current.delete(_e.key)},k=(_e,$e,je)=>{if(_e.length<=3)return _e;_e.sort((an,un)=>an[$e]-un[$e]||an[je]-un[je]);const ut=[],It=[],Gt=(an,un,cn)=>(un[$e]-an[$e])*(cn[je]-an[je])-(un[je]-an[je])*(cn[$e]-an[$e]);for(const an of _e){for(;ut.length>=2&&Gt(ut[ut.length-2],ut[ut.length-1],an)<=0;)ut.pop();ut.push(an)}for(let an=_e.length-1;an>=0;an--){const un=_e[an];for(;It.length>=2&&Gt(It[It.length-2],It[It.length-1],un)<=0;)It.pop();It.push(un)}return It.pop(),ut.pop(),ut.concat(It)},q=(_e,$e)=>{const je=Se.current.getObjectByName("azimuth"),ut=Se.current.getObjectByName("azimuth_outline"),It=Se.current.getObjectByName("azimuth_edge");It&&Se.current.remove(It),je&&Se.current.remove(je),ut&&Se.current.remove(ut);const Gt=Se.current.getObjectByName("Brain");if(!Gt)return;const an=new ps().setFromObject(Gt);let un=an.min,cn=an.max,cr=cn.x-un.x,Cn=cn.y-un.y,Qn=cn.z-un.z,Nr=new Ie((un.x+cn.x)/2,(un.y+cn.y)/2,(un.z+cn.z)/2);if(Se.current.rotation.x!==0){const Cl=new Dl(Se.current.rotation.x,Se.current.rotation.y,Se.current.rotation.z);let pd=0,nl=0,na=0,as=0,hd=0,Ms=0;for(let Au=0;Au<Gt.children[0].geometry.attributes.position.array.length;Au+=3){let $g=Gt.children[0].geometry.attributes.position.array[Au]*ji.current+yo.current,ST=Gt.children[0].geometry.attributes.position.array[Au+1]*ji.current+Wa.current,$b=Gt.children[0].geometry.attributes.position.array[Au+2]*ji.current+oo.current,xc=new Ie($g,ST,$b).applyEuler(Cl);Au==0&&(pd=xc.x,nl=xc.y,na=xc.z,as=xc.x,hd=xc.y,Ms=xc.z),xc.x<pd&&(pd=xc.x),xc.x>as&&(as=xc.x),xc.y<nl&&(nl=xc.x),xc.y>hd&&(hd=xc.y),xc.z<na&&(na=xc.z),xc.z>Ms&&(Ms=xc.z)}un=new Ie(pd,nl,na),cn=new Ie(as,hd,Ms),cr=cn.x-un.x,Cn=cn.y-un.y,Qn=cn.z-un.z,Nr=new Ie((un.x+cn.x)/2,(un.y+cn.y)/2,(un.z+cn.z)/2)}let ci=new Ni,Hr=[],oi,xo;const Mr=new Bu({color:new Cr("#d4d2d2"),transparent:!0,opacity:.3,depthWrite:!1,depthTest:!1}),Ii=new Dl(Se.current.rotation.x,Se.current.rotation.y,Se.current.rotation.z);if(_e==="cor"){const Cl=Cf.clamp($e,un.z,cn.z);xo=new qs(cr,Cn,.01),oi=new er(xo,Mr),oi.name="azimuth";const pd=new Dl(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z),nl=new Ie(Nr.x,Nr.y,Cl).applyEuler(pd);oi.position.set(Nr.x,Nr.y,nl.z),oi.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);for(let na=0;na<Gt.children[0].geometry.attributes.position.array.length;na+=3){let as=Gt.children[0].geometry.attributes.position.array[na]*ji.current+yo.current,hd=Gt.children[0].geometry.attributes.position.array[na+1]*ji.current+Wa.current,Ms=Gt.children[0].geometry.attributes.position.array[na+2]*ji.current+oo.current;Gt.children[0].geometry.attributes.position.array[na],Gt.children[0].geometry.attributes.position.array[na+1],Gt.children[0].geometry.attributes.position.array[na+2];let Au=new Ie(as,hd,Ms).applyEuler(Ii),$g=Au.z;Math.abs($g-Cl)<.18&&Hr.findIndex($b=>$b.equals(new Ie(Au.x,Au.y,Cl)))===-1&&Hr.push(new Ie(Au.x,Au.y,Cl))}if(Hr.length>2){Hr=k(Hr,"x","y");const na=new SA(Hr);na.closed=!0,na.tension=.5;const as=na.getPoints(Hr.length*20);ci.setFromPoints(as)}else ci.setFromPoints(Hr)}else if(_e==="sag"){const Cl=Cf.clamp($e,un.x,cn.x);xo=new qs(.01,Cn,Qn),oi=new er(xo,Mr),oi.name="azimuth";const pd=new Dl(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z),nl=new Ie(Cl,Nr.y,Nr.z).applyEuler(pd);oi.position.set(nl.x,Nr.y,Nr.z),oi.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);for(let na=0;na<Gt.children[0].geometry.attributes.position.array.length;na+=3){let as=Gt.children[0].geometry.attributes.position.array[na]*ji.current+yo.current,hd=Gt.children[0].geometry.attributes.position.array[na+1]*ji.current+Wa.current,Ms=Gt.children[0].geometry.attributes.position.array[na+2]*ji.current+oo.current;Gt.children[0].geometry.attributes.position.array[na],Gt.children[0].geometry.attributes.position.array[na+1],Gt.children[0].geometry.attributes.position.array[na+2];let Au=new Ie(as,hd,Ms).applyEuler(Ii),$g=Au.x;Math.abs($g-Cl)<.18&&Hr.findIndex($b=>$b.equals(new Ie(Cl,Au.y,Au.z)))===-1&&Hr.push(new Ie(Cl,Au.y,Au.z))}if(Hr.length>2){Hr=k(Hr,"y","z");const na=new SA(Hr);na.closed=!0,na.tension=.5;const as=na.getPoints(Hr.length*20);ci.setFromPoints(as)}else ci.setFromPoints(Hr)}else return;oi.userData.initPosition=oi.position.clone(),oi.userData.initRotation=oi.rotation.clone();const Zi=new m4(xo),ki=new eu({color:"#2b2a2a"}),la=new hI(Zi,ki);la.name="azimuth_edge",la.position.set(oi.position.x,oi.position.y,oi.position.z),la.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);const Aa=new eu({color:16711680}),Ns=new wa(ci,Aa);Ns.name="azimuth_outline";const is=new Dl(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z);return new Ie(yo.current,Wa.current,oo.current).applyEuler(is),Ns.rotation.set(-Se.current.rotation.x,-Se.current.rotation.y,-Se.current.rotation.z),Se.current.add(oi,Ns,la),oi},ce=_e=>{if(_e.stopPropagation(),Uc.current.add(_e.key),Uc.current.has("Alt")&&(Uc.current.has("c")||Uc.current.has("C")))try{const $e=f.domElement.toDataURL("image/png"),je=document.createElement("a");je.href=$e,je.download="scene.png",je.click(),Uc.current=new Set}catch($e){console.error("Error downloading canvas:",$e),alert("抱歉,无法下载画布。请查看控制台获取更多信息。")}};S.useEffect(()=>{fetch(n+"/data/json/name.json").then(je=>je.json()).then(je=>{Rl(je)}),fetch(n+"/data/TreeData/nuclear.json").then(je=>je.json()).then(je=>{ms(je)});const _e=new Qu(.05,32,32),$e=new Pl({color:392960,transparent:!0});if(yl.current=new er(_e,$e),yl.current.name="sectionSphere",J7){let je=JSON.parse(J7);yl.current.position.set(je.x,je.y,je.z)}return Ka.cranialVisibility&&Is(!0),WZ&&fC(),z5e&&wh(z5e),document.addEventListener("keydown",ce),document.addEventListener("keyup",T),window.addEventListener("beforeunload",C1),()=>{document.removeEventListener("keydown",ce),document.removeEventListener("keyup",T),window.removeEventListener("beforeunload",C1)}},[]),S.useEffect(()=>{fetch("/staticresource/data/SWC/swc_foler/15257/BIL_15257_1.js").then(_e=>_e.json()).then(_e=>{kc(_e)}).catch(_e=>{console.error("Fetch error:",_e)})},[]);const xe=(_e,$e)=>nu?S.createElement("div",{style:{position:"absolute",top:"4px",right:"50px"}},S.createElement(lb,{defaultChecked:!1,onChange:je=>{je.target.checked?localStorage.setItem(_e,"true"):localStorage.setItem(_e,"false"),$e()},style:{marginTop:"10px"}},"Don't show again")):null,rt=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,S.createElement("div",null,a("8000.0001")||"如①所示,在主窗口左侧的是数据面板,用户可以在该选项卡下选择STAM的解剖命名树,配准到STAM上的完整脑血管图谱和神经元数据。用户也可以切换两个不同版本的命名系统。"),S.createElement("div",null,a("8000.0002")||"如②所示,主窗口中可以加载脑区、核团的三维模型。"),S.createElement("div",null,a("8000.0003")||"如③所示,用户可以切换不同的模式或者功能模块"),S.createElement("div",null,a("8000.00031")||"如④所示,工具栏从左到右依次是,回到首页、切换水平面、切换矢状面、切换水平面、重置视角、显示设置、反馈")),cover:S.createElement("video",{src:`${n}/guide/topo.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",style:{width:"min-content"},target:or.current},{title:a("8000.0032")||"解剖结构、脑血管和神经元查询",cover:S.createElement("img",{src:`${n}/guide/gif_batch/topo/out_topo1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,a("8000.0004")||"Regions选项卡包含的是STAM的解剖命名树,用户可以在该选项卡下的复选框中选择任意数量的感兴趣结构,在主窗口中可视化;Vessels选项卡包含了一套配准到STAM上的完整脑血管图谱,用户可以在此选择感兴趣的血管分支;Neurons选项卡用于查询胞体或投射靶区位于感兴趣脑区的神经元数据。用户也可以选择切换到Brain maps 4.0 ontology,该命名树中的结构同样可以被检索、选中并可视化。"),target:s.current,placement:"right"},{title:a("8000.0033")||"可视化解剖子结构并切换坐标原点",cover:S.createElement("img",{src:`${n}/guide/gif_batch/topo/out_topo2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,a("8000.0005")||"用户可以点击Regions选项卡下的解剖命名树中蓝色的方块图标,此时主窗口中会以组装的形式可视化用户点击结构的所有子结构,同时展开幅度可在右侧面板设置。默认情况下,该坐标系统以Bregma点作为原点。户也可以将坐标原点切换为STAM的其它任意19个颅骨或颅内基准点,主窗口中可视化对象的坐标值将根据新的原点重新计算。右击任意基准点,可以保存以基准点为坐标原点的STAM标签图像。"),placement:"center",target:or.current},{title:a("8000.0034")||"可视化功能设置",cover:S.createElement("img",{src:`${n}/guide/gif_batch/topo/out_topo3.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false"?xe("Assem",function(){}):null,a("8000.0006")||"用户可以在页面底部切换到setting选项卡。Left hemisphere开关决定是否展示左半脑,默认为Off。Coordinate开关决定是否在主窗口中显示坐标数值,默认为On。Datum Marks开关决定是否在主窗口中显示基准点,默认为On。Cranial开关决定是否在主窗口中显示颅骨的三维轮廓,默认为Off。"),target:document.getElementsByClassName("bottom_tabs_outer_div")[0]}],Wt=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false"?xe("Virtual",function(){}):null,a("8000.0007")||"我们提供了虚拟手术导航服务,用户可以通过交互操作,模拟向小鼠脑注射病毒的立体定位手术过程。STAM会根据用户操作,返回注射位点与作为坐标原点的颅骨或颅内基准点之间的距离和注射角度信息。"),cover:S.createElement("video",{src:`${n}/guide/surgery.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0035")||"自动导航模式",cover:S.createElement("img",{src:`${n}/guide/gif_batch/surgery/out_surgery1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false"?xe("Virtual",function(){}):null,a("8000.0008")||"首先选择要注射的脑区。接下来在脑区上选择注射靶点。用户继续点击Select target按钮,注射脑区的三维模型表面会出现一个跟随鼠标移动的绿点。然后,点击Auto进入自动模式,左侧数据面板中的Structure for injecting选项卡变为Regions to avoid。用户点击需要避开脑区、核团的名称,被选中的文字会变为高亮的红色,同时这些结构的三维轮廓也会显示在主窗口中。接下来点击右侧面板中的Intellectual planning按钮,等待若干秒后,STAM会返回一条从注射靶点出发、并且避开所有用户选中脑区、核团的路径。"),target:s.current,placement:"right"},{title:a("8000.0036")||"手动导航模式",cover:S.createElement("img",{src:`${n}/guide/gif_batch/surgery/out_surgery2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false"?xe("Virtual",function(){}):null,a("8000.0009")||"用户点击Manually进入手动规划模式,此时用户标记的注射靶点变为蓝色圆点,并出现一条从注射靶点出发、连接到鼠标当前的位置的红色虚射线,该射线与STAM外轮廓的交点(即注射位点)会被标记为绿色。当用户找到合适的注射路径后,可点击鼠标左键标记,被标记的路径会在主窗口中形成一条蓝色实线,注射位点则被标记为蓝色圆锥,且该路径所穿过的脑区、核团名称也会按照其空间位置排列在实线上。在右侧面板中,会出现该注射路径与三个标准解剖方向的夹角、注射靶点,以及注射位点的信息。用户点击右侧面板上的Reset按钮,即可重新开始整个注射手术流程。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],vn=[{title:a("5000.5084")||"步骤一",description:a("5000.5082")||"请选择注射模式,如果选择自动模式,点击左侧细胞名称选择细胞核进行旁路",target:me.current}],_n=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Reg")||localStorage.getItem("Reg")==="false"?xe("Reg",function(){}):null,a("8000.0011")||"如①所示,用户可上传PI或DAPI染色的单张脑片图像,该服务将通过约1分钟的服务器端计算,从STAM中重切出一张与用户上传的脑片位置最接近的图谱切面,并根据计算出来的角度和位置显示在主窗口中。"),cover:S.createElement("video",{src:`${n}/guide/registration.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0037")||"上传脑片图像并计算或下载配准结果",cover:S.createElement("img",{src:`${n}/guide/gif_batch/registration/out_reg1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Reg")||localStorage.getItem("Reg")==="false"?xe("Reg",function(){}):null,a("8000.0012")||"用户可以从本地上传待配准的tif/tiff格式的二维脑片图像。然后选择上传图像的类型。接着点击Calculate the corresponding plane from the atlas按钮组中的Start按钮,等待后台返回计算结果。计算完成后,Start按钮下方会出现计算结果的预览图,可左键单击放大查看。Start按钮右侧的Save按钮此时也变为可点击,用户单击该按钮,可以将计算结果下载到本地。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],sr=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0014")||"如①和②所示,用户可以在STAM所在的三维空间中选取任意感兴趣范围,并以不同的采样倍数下载自己选取范围内的原始图像。"),cover:S.createElement("video",{src:`${n}/guide/datasharing.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0047")||"平移模式选择原始图像数据的范围",cover:S.createElement("img",{src:`${n}/guide/gif_batch/datasharing/out_sharing1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0015")||"用户可以点击“Select the range”按钮,然后主窗口中出现一个橙色线条的方框。用户通过长按鼠标左键,拖动红、绿、蓝三种颜色的箭头,可以控制方框在各个方向上的平移,当某个方向的箭头被用户选中时,该箭头会变为高亮的黄色。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"},{title:a("8000.0039")||"缩放模式选择原始图像数据的范围并预览图像",cover:S.createElement("img",{src:`${n}/guide/gif_batch/datasharing/out_sharing2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0016")||"用户也可以通过按下键盘上的“A”,将范围选取操作从平移模式切换为缩放模式。此时方框的箭头会变为方块,拖动方块,就可以改变方框的大小。经过上述操作明确了待下载数据的空间范围后,可以点击“预览下载图像”按钮,通过体绘制,在主窗口中对该范围内的图像进行可视化,"),placement:"center",target:or.current},{title:a("8000.0040")||"选择数据的采样倍数并下载",cover:S.createElement("img",{src:`${n}/guide/gif_batch/datasharing/out_sharing3.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Down")||localStorage.getItem("Down")==="false"?xe("Down",function(){}):null,a("8000.0017")||"拖动“Set the downsampling rate”滑动条,用户可以选择待下载数据的采样倍数;具体的倍数值可通过滑块上方的黑色背景提示文字查看。当数据量没有超过1 GB时,点击Downloading按钮可直接下载;当超过该数值,点击Downloading按钮会唤起用户终端的邮箱管理工具(如Outlook等),并自动将待下载范围和采样倍数信息填入邮件中,此时用户点击邮件发送按钮,即可向STAM网站发送数据下载申请。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],Qr=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Map")||localStorage.getItem("Map")==="false"?xe("Map",function(){}):null,a("8000.0018")||"我们支持用户上传此前已经配准到Common Coordinate Framework(CCF)的三维图像数据和神经元完整形态数据,并将其映射到STAM上,并直接在三维空间中进行可视化;我们也支持反向映射,即将已经配准到STAM的同类型数据映射到CCF上。"),cover:S.createElement("video",{src:`${n}/guide/mapping.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0041")||"上传三维图像数据并计算",cover:S.createElement("img",{src:`${n}/guide/gif_batch/mapping/out_mapping1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Map")||localStorage.getItem("Map")==="false"?xe("Map",function(){}):null,a("8000.0019")||"用户点击右侧面板的Upload按钮,上传已配准到CCF或者STAM的三维图像数据或神经元形态学数据。上传结束后,在Select the direction of conversion单选框中,确定数据的映射方向是从STAM到CCF还是反过来。此后点击Start按钮,STAM的服务器端开始计算,Start按钮变为等待状态。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"},{title:a("8000.0042")||"计算完成后预览或下载结果",cover:S.createElement("img",{src:`${n}/guide/gif_batch/mapping/out_mapping2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Map")||localStorage.getItem("Map")==="false"?xe("Map",function(){}):null,a("8000.0020")||"等待约10分钟后,STAM的服务器端完成计算并返回结果。此时Save按钮和View result按钮均变为可点击状态。点击Save按钮,可以将计算结果下载到本地;点击View result按钮,可以在主窗口中预览计算结果。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],Fi=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Res")||localStorage.getItem("Res")==="false"?xe("Res",function(){}):null,S.createElement("div",null,a("8000.0021")||"我们提供了沿任意角度可视化脑图谱切面的服务。用户可以查看感兴趣的STAM任意位置和角度的切面,浏览该切面上的脑区、核团标注,并由该图谱切面跳转到STAM任意切面服务所提供的各向同性1微米分辨率切面。"),S.createElement("div",null,a("8000.0022")||"如①所示,在窗口左侧的是数据面板,与“三维自然形貌可视化”中的数据面板功能相同。位于正中区域的是主窗口。"),S.createElement("div",null,a("8000.0023")||"用户也可以通过拖动滑动条,实现图谱切面的平移和旋转。具体的平移、旋转数值可通过滑块上方的黑色背景提示文字查看。")),cover:S.createElement("video",{src:`${n}/guide/reslicing.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0043")||"平移或旋转图谱切面",cover:S.createElement("img",{src:`${n}/guide/gif_batch/reslicing/out_reslicing1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Res")||localStorage.getItem("Res")==="false"?xe("Res",function(){}):null,a("8000.0024")||"用户通过长按鼠标左键,拖动红、绿、蓝三种颜色的箭头,可以控制图谱切面的平移。用户也可以通过按下键盘上的“R”,将范围选取操作从平移模式切换为旋转模式。此时箭头会变为球形,沿球形拖动,就可以控制图谱切面的旋转。"),placement:"center",target:or.current},{title:a("8000.0044")||"下载高分辨率的STAM图谱3D标签图像",cover:S.createElement("img",{src:`${n}/guide/gif_batch/reslicing/out_reslicing2.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Res")||localStorage.getItem("Res")==="false"?xe("Res",function(){}):null,a("8000.0025")||"用户也可以通过拖动滑动条,实现图谱切面的平移和旋转。点击viewer higher resolution image按钮可以跳转到任意剖面可视化界面。点击Requesting STAM labels按钮,填入许可证即可下载各向同性10微米分辨率的STAM图谱3D标签图像。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"}],ma=[{title:null,description:S.createElement("div",null,!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false"?xe("Neu",function(){}):null,S.createElement("div",null,a("8000.0026")||"我们提供全脑的胞体或投射靶区的神经环路数据可视化服务。用户可以选择感兴趣的任意胞体或投射靶区在脑区、核团的神经环路数据,并查看数据对应的脑区、核团标注。"),S.createElement("div",null,a("8000.0027")||"如①所示,在窗口左侧的是数据面板,与“三维自然形貌可视化”中的数据面板功能相同,其中Neurons选项卡用于查询胞体或投射靶区位于感兴趣脑区的神经元数据。"),S.createElement("div",null,a("8000.0028")||"如②所示,用户可以在搜索框中搜索感兴趣脑区、核团。"),S.createElement("div",null,a("8000.0029")||"如③所示,这是一个由若干个脑区、核团子结构组成的神经环路连接示意图。")),cover:S.createElement("video",{src:`${n}/guide/neuronal.mp4?time=${Kc}`,controls:!0,style:{height:"calc(100vh - 300px)"}}),placement:"center",target:or.current,style:{width:"min-content"}},{title:a("8000.0045")||"查看神经环路连接示意图并交互",cover:S.createElement("img",{src:`${n}/guide/gif_batch/neuronal/out_neuronal1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false"?xe("Neu",function(){}):null,a("8000.0030")||"用户可以点击“whole-brain connectivity diagram”按钮或在搜索框中搜索感兴趣脑区、核团,即可弹出由若干个脑区、核团子结构组成的神经环路连接示意图。不同圆点表示不同的脑区、核团结构,圆点旁边显示的是脑区、核团的名称。用户可以将鼠标移动到圆点、脑区或核团的名称上,左击或右击圆点。"),target:document.getElementsByClassName("ant-tabs-content-holder")[1],placement:"left"},{title:a("8000.0046")||"显示用户指定脑区上下游连接关系",cover:S.createElement("img",{src:`${n}/guide/gif_batch/neuronal/out_neuronal1.gif?time=${Kc}`}),description:S.createElement("div",null,!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false"?xe("Neu",function(){}):null,a("8000.0031")||"双击任意一个代表某个脑区、核团结构的圆点,神经环路连接示意图窗口隐藏,回到主窗口页面,显示该结构的上下游连接关系。在Upstream窗口中展示了投射到选中脑区、核团的神经环路,在Downstream窗口中展示了选中脑区、核团的投射靶区。用户可以用复选框选择任意数量的感兴趣神经元,在主窗口中可视化。"),target:s.current,placement:"right"}];S.useEffect(()=>{const _e=Vl("index"),$e=Vl("type"),je=Vl("structure");($e||_e)&&setTimeout(()=>{switch(_e=="Assembling"?(!localStorage.getItem("Assem")||localStorage.getItem("Assem")==="false")&&Ot(!0):_e=="Virtual_Inject"?(!localStorage.getItem("Virtual")||localStorage.getItem("Virtual")==="false")&&qt(!0):_e=="Slicing"?(!localStorage.getItem("Res")||localStorage.getItem("Res")==="false")&&Gn(!0):_e=="Mapping"?(!localStorage.getItem("Map")||localStorage.getItem("Map")==="false")&&Gn(!0):_e=="Downloading"?(!localStorage.getItem("Down")||localStorage.getItem("Down")==="false")&&xr(!0):_e=="Neuronal"?(!localStorage.getItem("Neu")||localStorage.getItem("Neu")==="false")&&$n(!0):_e=="Registration"&&(!localStorage.getItem("Reg")||localStorage.getItem("Reg")==="false")&&Tn(!0),$e){case"simple":document.title="STAM-SimpleViewer",he(0);case"normal":uo(1,!0),document.title="STAM-NormalViewer";break;case"virtual":document.title="STAM-Surgery",uo(2,!0);break;case"slicing":uo(3,!0),document.title="STAM-Reslicing";break;case"registration":uo(4,!0),document.title="STAM-Registration";break;case"downloading":uo(5,!0),document.title="STAM-Downloading";break;case"mapping":uo(6,!0),document.title="STAM-AtlasMapping";break;case"circuits":uo(7,!0),document.title="STAM-NeuronalCircuits",setTimeout(()=>{je&&(io(je),Ue(je))},500);break;case"other":uo(8,!0),document.title="STAM-OtherAtlas";break;case"setting":uo(9,!0),document.title="STAM-ViewSetting";break;case"functionalLoop":uo(12,!0),document.title="STAM-FunctionalLoop";break}},500)},[]),S.useEffect(()=>{et.current=(f==null?void 0:f.domElement.clientWidth)-1,Ge.current=(f==null?void 0:f.domElement.clientHeight)-1;let _e=-(Jr.min.x+Jr.max.x)*ji.current/2,$e=Jr.max.clone().multiplyScalar(ji.current).add(new Ie(_e,Wa.current,oo.current)),je=Jr.min.clone().multiplyScalar(ji.current).add(new Ie(_e,Wa.current,oo.current));Bt.current=$e,$t.current=je;let ut=new Pl({visible:!1});if(hn.current=new er(new qs(Bt.current.x-$t.current.x,Bt.current.y-$t.current.y,Bt.current.z-$t.current.z),ut),hn.current.position.set((Bt.current.x+$t.current.x)/2,(Bt.current.y+$t.current.y)/2,(Bt.current.z+$t.current.z)/2),k8(),Y7){let It=Y7;It=="CCF"&&xy({filepath:n+"/data/FBX/outline-CCF.FBX",index:"outline",color:"#327DFF",opacity:.3,offsetZ:0,R:.01,callback:function(){}},pn),It=="WHS"&&xy({filepath:n+"/data/FBX/outline-WHS.FBX",index:"outline",color:"#327DFF",opacity:.3,offsetZ:0,R:.01,callback:function(){}},pn)}},[]),S.useEffect(()=>{et.current=(f==null?void 0:f.domElement.clientWidth)-1,Ge.current=(f==null?void 0:f.domElement.clientHeight)-1},[f==null?void 0:f.domElement.clientWidth]),S.useEffect(()=>{const _e=new ps;_e.expandByObject(gt.current);const $e=R.current(_e.min.clone()),je=R.current(_e.max.clone());let ut=new _p(jm(650,620,`${$e.x.toFixed(2)},${$e.y.toFixed(2)},${$e.z.toFixed(2)}`,"#ccc")),It=new Xf(new bf({map:ut}));It.name="startText";let Gt=new _p(jm(650,620,`${je.x.toFixed(2)},${je.y.toFixed(2)},${je.z.toFixed(2)}`,"#ccc")),an=new Xf(new bf({map:Gt}));an.name="endText",It.position.set(_e.min.x,_e.min.y+.2,_e.min.z),an.position.set(_e.max.x,_e.max.y+.6,_e.max.z);let un=Se.current.getObjectByName("startText"),cn=Se.current.getObjectByName("endText");un&&cn&&(Se.current.remove(un,cn),Se.current.add(It,an))},[ee]),S.useEffect(()=>{var cr,Cn;let _e={},$e=[],je=[],ut={},It=[],Gt=[],an="",un=new URL(window.location.href),cn=new URLSearchParams(un.search);if(ue&&Ve.length>0){if(an=we&&Bl(Ve,we),we==""){_.current.removeFBX(Co.current,!0);const Qn=_.current.checkedKeys.current.findIndex(ci=>ci===Co.current);Qn>-1&&_.current.checkedKeys.current.splice(Qn,1),we==""&&(Co.current="");const Nr=JSON.stringify(_.current.checkedKeys.current);cn.delete("echart_Value"),cn.set("regionsChecked",Nr),un.search=cn.toString(),window.history.replaceState({},"",un)}if(we!=""){if(an==null&&we)if(we=="fiber tract fiber tracts")an="fiber tract";else{let Qn=we.match(/^[\w\/]+/);an=Qn?Qn[0]:""}if(an){let Qn=((cr=ue[an])==null?void 0:cr.soma)||[];It=It.concat(Qn);let Nr=((Cn=ue[an])==null?void 0:Cn.axon)||[];Gt=Gt.concat(Nr),It=Array.from(new Set(It)),Gt=Array.from(new Set(Gt)),Gt&&Gt.forEach(Mr=>{var Ii,Zi,ki;for(const la in ue)(Zi=(Ii=ue[la])==null?void 0:Ii.soma)!=null&&Zi.includes(Mr)&&((ki=ue[la])==null?void 0:ki.id)==1&&(la in _e?_e[la].includes(Mr)||_e[la].push(Mr):_e[la]=[Mr])}),It&&It.forEach(Mr=>{var Ii,Zi,ki;for(const la in ue)(Zi=(Ii=ue[la])==null?void 0:Ii.axon)!=null&&Zi.includes(Mr)&&((ki=ue[la])==null?void 0:ki.id)==1&&(la in ut?ut[la].includes(Mr)||ut[la].push(Mr):ut[la]=[Mr])});for(let Mr in ut)if(Mr!=an){let Ii=kg(Ve,Mr.replace("_","/"));Ii&&je.push({name:Mr.replace("_","/"),itemStyle:{color:Ii.color},lineStyle:{color:"#ccc"},value:ut[Mr].length})}for(let Mr in _e)if(Mr!=an){let Ii=kg(Ve,Mr.replace("_","/"));Ii&&$e.push({name:Mr.replace("_","/"),itemStyle:{color:Ii.color},lineStyle:{color:"#ccc"},value:_e[Mr].length})}Cs(!0);let ci=kg(Ve,an.replace("_","/"));const Hr=[{name:an.replace("_","/"),itemStyle:{color:ci&&ci.color},lineStyle:{color:"#ccc"},children:$e}],oi=[{name:an.replace("_","/"),itemStyle:{color:ci&&ci.color},lineStyle:{color:"#ccc"},children:je}];if(Co.current!=an){_.current.removeFBX(Co.current,!0);const Mr=_.current.checkedKeys.current.findIndex(ki=>ki===Co.current);Mr>-1&&_.current.checkedKeys.current.splice(Mr,1);const Ii=kg(_.current.treeDatas,an.replace("_","/"));let Zi=n+"/data/FBX/"+an+".FBX";Ii&&Td(Zi,an,Ii.color,.8,0,"FBX"),_.current.checkedKeys.current.push(an),Q(_.current.checkedKeys.current),Co.current=an,cn.set("echart_Value",we||""),un.search=cn.toString(),window.history.replaceState({},"",un)}const xo={series:[{type:"tree",top:"1%",bottom:"1%",symbolSize:7,emphasis:{focus:"ancestor",lineStyle:{color:"#000"}},expandAndCollapse:!0,animationDuration:550,animationDurationUpdate:750}]};if(Bs.current&&Ls.current){Ls.current.style.height=je.length*2*10+"px",Bs.current.style.height=$e.length*2*10+"px";const Mr=s7(Bs.current);Mr.setOption({...xo,tooltip:{trigger:"item",triggerOn:"mousemove",position:function(Aa,Ns,is,Cl,pd){const nl=Aa[0],na=Aa[1];return[nl+10,na]},formatter:function(Aa){const Ns=an==Aa.name?"":Aa.name+"->",is=Aa.value?", "+Aa.value+" neurons":"";return`${Ns}${an}${is}`}},series:[{...xo.series[0],left:"30%",right:"30%",label:{position:"right",verticalAlign:"middle",align:"left"},leaves:{label:{position:"left",verticalAlign:"middle",align:"right"}},orient:"RL",data:Hr}]});const Ii=s7(Ls.current);Ii.setOption({...xo,tooltip:{trigger:"item",triggerOn:"mousemove",position:function(Aa,Ns,is,Cl,pd){const nl=Aa[0],na=Aa[1],as=pd.contentSize[0];return[nl-as-10,na]},formatter:function(Aa){const Ns=an==Aa.name?"":"->"+Aa.name+", "+Aa.value+" neurons";return`${an}${Ns}`}},series:[{...xo.series[0],left:"20%",right:"40%",label:{position:"left",verticalAlign:"middle",align:"right"},leaves:{label:{position:"right",verticalAlign:"middle",align:"left"}},orient:"LR",data:oi}]});const Zi=()=>{Mr.resize(),Ii.resize()},ki=Aa=>{if(ie(xt.indexOf("neurons")+1),Ce.current.ProcessedData.current=!1,Aa.data&&Aa.data.name){Ce.current.setSearchValue(an.replace("_","/")),Ce.current.setSomaValue(Aa.data.name.replace("_","/"));const Ns=Cc(Hr[0],Aa.data.name);Mr.setOption({series:[{data:[Ns]}]}),Ii.setOption({series:[{data:oi}]})}},la=Aa=>{if(ie(xt.indexOf("neurons")+1),Ce.current.ProcessedData.current=!1,Aa.data&&Aa.data.name){Ce.current.setSearchValue(Aa.data.name.replace("_","/")),Ce.current.setSomaValue(an.replace("_","/"));const Ns=Cc(oi[0],Aa.data.name);Ii.setOption({series:[{data:[Ns]}]}),Mr.setOption({series:[{data:Hr}]})}};return window.addEventListener("resize",Zi),Mr.on("click",ki),Ii.on("click",la),Hr[0].children[0]&&ki({data:{name:Hr[0].children[0].name}}),$i({Upstream:$e,Downstream:je}),()=>{Mr.off("click",ki),Ii.off("click",la),window.removeEventListener("resize",Zi),Mr.dispose(),Ii.dispose()}}}}else Cs(!1),Ls.current&&Bs.current&&(Ls.current.style.height="0px",Bs.current.style.height="0px"),$i({})}},[we,Ve,ue]),S.useEffect(()=>{const _e=Vl("index"),$e=Vl("type"),je=(_e||$e)&&vl.current;if(Y===2)setTimeout(()=>{vl.current?(uo(2,!0,!je),vl.current=!1):uo(2),ai(!0),p.current.noRotate=!0,p.current.noPan=!0,f.domElement.addEventListener("mousedown",Ga),f.domElement.addEventListener("mousemove",Fb),f.domElement.addEventListener("mouseup",Bb),W(1)},200);else{Se.current.rotation.set(0,0,0),p.current.noRotate=!1,p.current.noPan=!1,f.domElement.removeEventListener("mousedown",Ga),f.domElement.removeEventListener("mousemove",Fb),f.domElement.removeEventListener("mouseup",Bb),W(3),rv(),vl.current?(uo(1,!0,!je),vl.current=!1):uo(1),V(!1);const ut=Se.current.getObjectByName("targetPoint");ut&&Se.current.remove(ut)}},[Y]),S.useEffect(()=>{Mi.length>0&&pt(!0)},[Mi]);const vs=_e=>{const{positionx:$e,positiony:je,positionz:ut}=_e;let It=new URL(window.location.href),an=new URLSearchParams(It.search).get("atlasReslicingInfo"),un={};an&&(un=JSON.parse(an)),Dt($e),Xt(je),Qt(ut),un.positionX=$e,un.positionY=je,un.positionZ=ut;let cn=new Ie($e,je,ut);Ka.atlasReslicingInfo=un,Ka.sectionPointPosition=cn,yl.current&&yl.current.position.set(cn.x,cn.y,cn.z)},jo=_e=>{Ji(_e)},uo=(_e,$e=!1,je=!0)=>{if(Se.current.remove(yl.current),rr(_e),ge({}),Pe(0),Y===0&&_e=="1"?nv("0",je,$e):nv(_e,je,$e),$e||(_e=="7"||_e=="3"?va(!0):va(!1)),E&&(E.current=_e),_e!==2){const ki=Se.current.getObjectByName("syrings");ki&&Se.current.remove(ki),V(!1),$e||Yu(),y.current=!1,d.current=!1}if(_e==2){Bi.current.position.set(18,-10,-10),Bi.current.rotation.set(2.9896,0,0),p.current.reset(),p.current.target.set(0,0,0),p.current.object.position.set(18,-10,-10),p.current.object.up.set(0,-1,0),p.current.update(),y.current=!0,d.current=!0,Bi.current.updateMatrixWorld();const ki=JSON.stringify({cameraPosition:Bi.current.position,cameraRotation:Bi.current.rotation}),la=JSON.stringify({controlsTarget:p.current.target,controlsPosition:p.current.object.position,controlsUp:p.current.object.up});let Aa=new URL(window.location.href),Ns=new URLSearchParams(Aa.search);Ns.set("cameraInfo",ki),Ns.set("controllerInfo",la),Aa.search=Ns.toString(),window.history.replaceState({},"",Aa)}k8(),Gi([]),Ea("Config_DAPI.ini"),Kn.current=null,$a({}),$e||ae.current&&Ce.current&&_.current&&(ae.current.removeALL(),Ce.current.removeALL(),_.current.removeALL()),_e==1?x(!0):x(!1),st(a("4000.0242")||"清除靶点"),l("");const ut=Se.current.getObjectByName("sphereBig"),It=Se.current.getObjectByName("sphereMiddelClick"),Gt=Se.current.getObjectByName("dashedLine"),an=Se.current.getObjectByName("Line"),un=Se.current.getObjectByName("transformControls"),cn=Se.current.getObjectByName("sectionSphere"),cr=Se.current.getObjectByName("correspondingPlaneDataSwc"),Cn=Se.current.getObjectByName("azimuth"),Qn=[];Se.current.traverse(ki=>{ki.userData.isAtlasMapping==="true"&&Qn.push(ki)}),Qn.forEach(ki=>{Se.current.remove(ki)}),Cn&&Se.current.remove(Cn),cr&&Se.current.remove(cr),cn&&Se.current.remove(cn),un&&Se.current.remove(un),m.current=[],b.current=[],Gt&&Se.current.remove(Gt),an&&Se.current.remove(an),ut&&Se.current.remove(ut),It&&Se.current.remove(It);const Nr=Se.current.children.filter(ki=>ki.userData.name==="registrationPng");Nr&&Se.current.remove(...Nr),U.current=!1;const ci=Se.current.children.filter(ki=>ki.name==="brainRegionPoints"||ki.name==="brainRegionLine"||ki.name==="cardContainer");ci&&Se.current.remove(...ci),P(!1);const Hr=Se.current.getObjectByName("HorizontalView"),oi=Se.current.getObjectByName("SagittalView"),xo=Se.current.getObjectByName("arbitrarySlice"),Mr=Se.current.getObjectByName("CoronalView"),Ii=Se.current.getObjectByName("functionLoopGroup");Ii&&Ii.remove(...Ii.children),_e!=3&&(Hr&&(Se.current.remove(Hr),Dn(!1)),oi&&(Se.current.remove(oi),Nn(!1)),xo&&(Se.current.remove(xo),ui(!1)),Mr&&(Se.current.remove(Mr),ei(!1))),_e==3&&setTimeout(()=>{fs(Ne.current,$e)},10),qu(!1),Bg(),ht(1);const Zi=document.querySelector(".tabsCompnent .ant-tabs-content-holder");Zi&&_e==12?Zi.style.padding="0px":Zi.style.padding="10px"},Vs=_e=>{r(_e),i.current=_e},Cc=(_e,$e)=>{const je=JSON.parse(JSON.stringify(_e)),ut=It=>{It.name===$e?It.lineStyle.color="#000":It.lineStyle.color="#ccc",It.children&&It.children.forEach(Gt=>{ut(Gt)})};return ut(je),je},Bl=(_e,$e)=>{for(let je of _e){if(je.name.toLowerCase()===$e.toLowerCase()||je.fullname.toLowerCase()===$e.toLowerCase())return je.name;if(je.children){const ut=Bl(je.children,$e);if(ut)return ut}}return null},Dd=()=>{if(lt===(a("4000.0126")||"重置"))rn(1),P(!1),U.current=!1,G.current="manual",st(a("4000.0242")||"清除靶点"),V(!1),Yu(),W(1),ht(1),eg.current&&(eg.current.abort(),eg.current=null);else{st(a("4000.0242")||"清除靶点"),m.current=[],b.current=[],ht(1),P(!1),U.current=!1,V(!1);const _e=Se.current.getObjectByName("dashedLine"),$e=Se.current.getObjectByName("sphereBig"),je=Se.current.getObjectByName("Line"),ut=Se.current.getObjectByName("sphereMiddelClick"),It=Se.current.getObjectByName("targetPoint"),Gt=Se.current.getObjectByName("azimuth"),an=Se.current.getObjectByName("azimuth_outline"),un=Se.current.getObjectByName("azimuth_edge");un&&Se.current.remove(un),Gt&&Se.current.remove(Gt),je&&Se.current.remove(je),an&&Se.current.remove(an),_e&&$e&&Se.current.remove(_e,$e),ut&&Se.current.remove(ut),It&&Se.current.remove(It),H.current.forEach(cn=>{const cr=Se.current.getObjectByName(cn);cr&&(Se.current.remove(cr),_.current&&_.current.setCheckItems(Cn=>Cn.filter(Qn=>Qn!==cn)))}),H.current=[],rv(),l(""),d.current=!1}};S.useEffect(()=>{j&&li==0&&lr(!0)},[j]);const Yu=()=>{m.current=[],b.current=[];const _e=Se.current.getObjectByName("dashedLine"),$e=Se.current.getObjectByName("sphereBig"),je=Se.current.getObjectByName("sphereMiddelClick"),ut=Se.current.getObjectByName("targetPoint"),It=Se.current.getObjectByName("azimuth"),Gt=Se.current.getObjectByName("azimuth_outline"),an=Se.current.getObjectByName("azimuth_edge");an&&Se.current.remove(an),It&&Se.current.remove(It),Gt&&Se.current.remove(Gt),_e&&Se.current.remove(_e),$e&&Se.current.remove($e),je&&Se.current.remove(je),ut&&Se.current.remove(ut),rv(),P(!1),H.current=[],y.current=!0,d.current=!1,U.current=!1,_.current.removeALL(),v.current&&Se.current.remove(v.current),ie(1),l("")};function au(){if(!_s.current||!_s.current.startsWith("data:image/png;base64,")){alert("Please enter a valid Base64 encoded PNG string (e.g., data:image/png;base64,...).");return}const _e=document.createElement("a");_e.href=_s.current,_e.download="downloaded_image.png";const $e=document.createElement("a");$e.href="/staticresource/data/json/rgb_value.zip",$e.download="rgb_value.zip",document.body.appendChild($e),document.body.appendChild(_e),$e.click(),setTimeout(()=>{_e.click();let je=new URL(window.location.href),It=new URLSearchParams(je.search).get("type");const Gt=window.location.origin+window.location.pathname+`?type=${It}¤tSlice=2d`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:Gt,time:0})})},200),document.body.removeChild($e),document.body.removeChild(_e)}const Sl=(_e,$e)=>{clearTimeout(Md.current),Md.current=setTimeout(()=>{const je=Se.current.getObjectByName("Brain");let ut=new bo;ut.setFromAxisAngle(new Ie(1,0,0),Math.PI/2);let It=new Ie,Gt=new SS;if($e)if(je&&(It=$e.position.clone().applyMatrix4(je.matrixWorld.clone().invert()).applyQuaternion(ut)),_e==1)fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({x:0,y:0,z:It.z})}).then(an=>an.ok?an.json():$o.error({title:an.message})).then(an=>{const un=an.base64;_s.current=un;let cn=Gt.load(un);cn.center.set(.5,.5),cn.rotation=Math.PI,$e.material.map=cn});else if(_e==2)fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({x:It.x,y:0,z:0})}).then(an=>an.ok?an.json():$o.error({title:an.message})).then(an=>{const un=an.base64;let cn=Gt.load(un);const Cn=$e.geometry.attributes.uv.array,Qn=ci=>{Cn[ci+0]=1,Cn[ci+1]=0,Cn[ci+2]=1,Cn[ci+3]=1,Cn[ci+4]=0,Cn[ci+5]=0,Cn[ci+6]=0,Cn[ci+7]=1},Nr=ci=>{Cn[ci+0]=1,Cn[ci+1]=1,Cn[ci+2]=1,Cn[ci+3]=0,Cn[ci+4]=0,Cn[ci+5]=1,Cn[ci+6]=0,Cn[ci+7]=0};Qn(0),Nr(8),$e.geometry.attributes.uv.needsUpdate=!0,$e.material.map=cn});else if(_e==3)fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({x:0,y:It.y,z:0})}).then(an=>(an.ok,an.json())).then(an=>{if(an.message){$o.error({content:an.message});return}const un=an.base64;_s.current=un;let cn=Gt.load(un);const Cn=$e.geometry.attributes.uv.array;(Nr=>{Cn[Nr+0]=1,Cn[Nr+1]=0,Cn[Nr+2]=0,Cn[Nr+3]=0,Cn[Nr+4]=1,Cn[Nr+5]=1,Cn[Nr+6]=0,Cn[Nr+7]=1})(24),$e.geometry.attributes.uv.needsUpdate=!0,$e.material.map=cn});else{const an=$e.rotation.x/Math.PI*180,un=$e.rotation.y/Math.PI*180,cn=$e.rotation.z/Math.PI*180;fetch("/app-api/c-api/slicing",{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({angles:[an,un,cn],center:[It.x,It.y,It.z]})}).then(cr=>cr.ok?cr.json():$o.error({title:cr.message})).then(cr=>{const Cn=cr.base64;_s.current=Cn;let Qn=Gt.load(Cn);const ci=$e.geometry.attributes.uv.array;(oi=>{ci[oi+0]=0,ci[oi+1]=0,ci[oi+2]=1,ci[oi+3]=0,ci[oi+4]=0,ci[oi+5]=1,ci[oi+6]=1,ci[oi+7]=1})(24),$e.geometry.attributes.uv.needsUpdate=!0,$e.material.map=Qn})}},100)},$l=(_e,$e)=>{let je,ut=0,It=new URL(window.location.href),an=new URLSearchParams(It.search).get("atlasReslicingInfo"),un={};an&&(un=JSON.parse(an)),Ne.current==1?(Se.current.children.forEach(function(cn,cr){$e==3&&cn.name=="CoronalView"&&(ut=cr)}),je=new Ie(0,0,_e),Se.current.children[ut].position.setZ(je.z),Sl(Ne.current,Se.current.children[ut])):Ne.current==2?(Se.current.children.forEach(function(cn,cr){$e==1&&cn.name=="SagittalView"&&(ut=cr)}),je=new Ie(_e,0,0),Se.current.children[ut].position.setX(je.x),Sl(Ne.current,Se.current.children[ut])):Ne.current==3?(Se.current.children.forEach(function(cn,cr){$e==2&&cn.name=="HorizontalView"&&(ut=cr)}),je=new Ie(0,_e,0),Se.current.children[ut].position.setY(je.y),Sl(Ne.current,Se.current.children[ut])):Ne.current==4&&(Se.current.children.forEach(function(cn,cr){cn.name=="arbitrarySlice"&&(ut=cr)}),$e==3&&(Qt(_e),un.positionZ=_e,Ka.atlasReslicingInfo=un,je=new Ie(Nt,Lt,_e),Se.current.children[ut].position.setZ(je.z)),$e==2&&(Xt(_e),un.positionY=_e,Ka.atlasReslicingInfo=un,je=new Ie(zt,_e,zt),Se.current.children[ut].position.setY(je.y)),$e==1&&(Dt(_e),un.positionX=_e,Ka.atlasReslicingInfo=un,je=new Ie(_e,Lt,zt),Se.current.children[ut].position.setX(je.x)),Sl(Ne.current,Se.current.children[ut]))},rs=_e=>{let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("atlasReslicingInfo"),It={};ut&&(It=JSON.parse(ut)),Ne.current==2&&(Dt(_e),Xt(-5.33),Qt(-8),$l(_e,1),It.positionX=_e,It.positionY=-5.33,It.positionZ=-8,Ka.atlasReslicingInfo=It),Ne.current==4&&$l(_e,1)},Ku=_e=>{let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("atlasReslicingInfo"),It={};ut&&(It=JSON.parse(ut)),Ne.current==3&&(Xt(_e),Qt(-8),Dt(-5.17),It.positionX=-5.17,It.positionY=_e,It.positionZ=-8,Ka.atlasReslicingInfo=It,$l(_e,2)),Ne.current==4&&$l(_e,2)},of=_e=>{let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("atlasReslicingInfo"),It={};ut&&(It=JSON.parse(ut)),Ne.current==1&&(Qt(_e),Dt(-5.17),Xt(-5.33),$l(_e,3),It.positionX=-5.17,It.positionY=-5.33,It.positionZ=_e,Ka.atlasReslicingInfo=It),Ne.current==4&&$l(_e,3)},ws=(_e,$e)=>{let je=0,ut=new URL(window.location.href),Gt=new URLSearchParams(ut.search).get("atlasReslicingInfo"),an={};Gt&&(an=JSON.parse(Gt)),Se.current.children.forEach(function(Qn,Nr){Qn.name=="arbitrarySlice"&&(je=Nr)});let un=Se.current.children[je];un.rotation.set(un.userData.initRotation.x,un.userData.initRotation.y,un.userData.initRotation.z);let cn=0,cr=0,Cn=0;$e==1&&(mt(_e),an.angleX=_e,Ka.atlasReslicingInfo=an,cn=_e*Math.PI/180,cr=Vt*Math.PI/180,Cn=Fe*Math.PI/180),$e==2&&(fn(_e),an.angleY=_e,Ka.atlasReslicingInfo=an,cn=dr*Math.PI/180,cr=_e*Math.PI/180,Cn=Fe*Math.PI/180),$e==3&&(Ct(_e),an.angleZ=_e,Ka.atlasReslicingInfo=an,cn=dr*Math.PI/180,cr=Vt*Math.PI/180,Cn=_e*Math.PI/180),un.rotation.x=cn,un.rotation.y=cr,un.rotation.z=Cn,Se.current.children.forEach(function(Qn,Nr){Qn.name=="arbitrarySlice"&&(je=Nr)}),Sl(Ne.current,Se.current.children[je])},dd=(_e,$e=!1)=>{let je;const ut=_e||o;if(Ne.current==4||$e)setTimeout(()=>{let It="atlas.brainsmatics.org",Gt=[],an=parseInt(((zt+7)/14*14e3).toString()),un=parseInt(((Lt+5.33)/7.37*9e3).toString());$e?(Gt[0]=90+Ir.angles[0],Gt[1]=Ir.angles[1],Gt[2]=Ir.angles[2],an=Ir.tx*14e3,un=450):(Gt[0]=dr,Gt[1]=Vt,Gt[2]=Fe);let cn=parseInt(((Nt+5.17)/10.34*11400).toString()),cr=at||"http://"+It,Cn="http://"+It+'/program/frontend/#!{"dimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"]},"position":['+cn+","+un+","+an+'],"crossSectionOrientation":[0.7071067690849304,0,0,-0.7071067690849304],"crossSectionScale":19.05662684586283,"projectionOrientation":[0.10079027712345123,0.01086505874991417,-0.5527856945991516,-0.827134370803833],"projectionScale":74319.80669416502,"projectionDepth":-49.99956451007631,"layers":[{"type":"image","source":{"url":"precomputed://'+cr+'/data/RGB_raw","transform":{"outputDimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"],"c^":[1,""]},"inputDimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"],"c^":[1,""]}}},"tab":"rendering","shader":"#uicontrol invlerp normalized\\nvoid main() {\\n emitRGB(vec3(toNormalized(getDataValue(0)),\\n toNormalized(getDataValue(1)),\\n toNormalized(getDataValue(2))));\\n}\\n","channelDimensions":{"c^":[1,""]},"name":"raw"},{"type":"segmentation","source":{"url":"precomputed://'+cr+'/data/seg_half","transform":{"outputDimensions":{"x":[0.000001,"m"],"y":[0.000001,"m"],"z":[0.000001,"m"]},"inputDimensions":{"x":[0.00001,"m"],"y":[0.00001,"m"],"z":[0.00001,"m"]}}},"tab":"segments","segments":["10","100","1000","1002","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1017","1018","1019","1020","1021","1022","1023","1024","1025","1026","1100","104","105","106","107","108","11","110","111","112","113","114","115","117","118","119","12","120","122","123","124","125","126","129","13","130","131","134","138","14","141","142","143","146","147","149","15","150","152","154","156","159","16","160","162","164","165","166","167","168","170","172","173","174","176","177","178","179","18","180","181","182","183","186","189","19","190","192","193","194","195","196","199","2","20","201","202","203","204","206","207","208","21","212","215","216","217","219","22","220","221","223","224","225","228","229","23","230","231","232","234","235","236","237","238","239","24","241","242","243","245","246","247","248","25","250","251","253","254","256","257","259","26","260","265","266","267","268","27","271","272","273","275","276","279","28","280","282","283","284","287","29","291","293","294","295","296","297","298","3","30","300","303","304","305","306","31","311","312","313","315","319","32","320","321","322","323","324","325","326","329","33","330","331","332","333","335","336","337","338","34","340","341","342","343","344","347","348","349","35","350","351","352","354","355","356","357","359","36","361","362","365","366","367","368","369","37","371","372","373","374","375","376","377","378","38","380","385","386","387","389","39","390","391","392","393","394","395","397","399","4","40","401","402","405","407","409","41","412","413","414","415","416","417","419","42","422","423","424","426","427","428","43","430","432","435","438","439","44","440","441","442","443","444","445","446","449","45","450","451","452","453","454","456","458","459","46","460","461","462","463","464","465","466","467","47","470","473","474","475","476","478","479","48","480","481","484","485","486","487","488","49","490","491","493","494","497","498","499","5","50","500","501","503","504","505","507","508","51","510","511","512","513","514","516","517","518","519","52","520","528","529","53","533","535","536","537","538","539","54","540","541","542","544","545","546","548","549","55","550","553","554","555","556","557","559","56","561","562","563","565","568","57","570","571","572","573","574","575","576","578","579","58","581","582","584","586","59","591","593","594","595","597","599","6","60","601","602","604","606","61","611","612","613","614","615","616","617","618","619","62","620","621","622","623","624","625","627","628","629","63","631","632","635","637","638","639","64","641","642","643","644","645","646","647","648","65","650","652","653","656","657","658","660","661","662","665","666","667","67","671","672","673","674","677","678","679","68","680","681","682","683","684","686","687","688","690","693","695","696","697","698","699","7","701","702","704","706","707","708","709","710","711","712","713","716","717","72","720","721","722","724","725","727","729","731","733","734","735","736","737","74","740","744","746","748","749","750","752","754","755","757","758","759","76","760","762","763","764","765","767","768","769","770","771","772","773","774","775","776","778","779","78","780","783","784","785","787","789","790","791","793","796","797","798","799","8","80","803","804","808","809","81","810","812","816","818","819","82","821","823","824","826","827","829","83","830","831","832","834","835","837","839","84","840","841","842","843","844","846","849","850","851","855","856","857","858","86","861","863","864","865","867","868","869","87","870","871","872","874","875","876","877","878","879","88","880","881","883","885","888","889","89","892","893","894","895","896","898","899","9","90","901","902","906","908","909","91","911","913","915","916","917","919","92","920","921","925","926","927","928","929","93","931","934","935","936","937","938","940","941","942","944","945","946","951","953","954","955","956","957","959","96","963","964","965","966","969","97","970","971","972","973","977","978","980","981","982","983","989","99","991","992","993","995","996","997","998","999"],"segmentQuery":"<id","segmentColors":{"2":"#777b7b","3":"#777979","4":"#848989","5":"#8e9494","6":"#8c9191","7":"#778383","8":"#778181","9":"#93a2a2","10":"#5e6767","11":"#93c1c1","12":"#6b7474","13":"#93c0c0","14":"#8eacac","15":"#727979","16":"#91afaf","18":"#93b4b4","19":"#729c9c","20":"#212d2d","21":"#304242","22":"#2d3e3e","23":"#2b3232","24":"#1e2929","25":"#707676","26":"#7c8383","27":"#89bbbb","28":"#608383","29":"#7c9d9d","30":"#777d7d","31":"#7a8080","32":"#778080","33":"#7f8585","34":"#6d8a8a","35":"#829d9d","36":"#545d5d","37":"#93a4a4","38":"#4c5454","39":"#474f4f","40":"#8cbebe","41":"#7a9a9a","42":"#93b8b8","43":"#84a0a0","44":"#93a1a1","45":"#93baba","46":"#84b4b4","47":"#6d9595","48":"#82b0b0","49":"#6b9191","50":"#7fadad","51":"#87a3a3","52":"#636c6c","53":"#596363","54":"#334545","55":"#2b3b3b","56":"#666f6f","57":"#476161","58":"#939898","59":"#637e7e","60":"#7aa0a0","61":"#7fa5a5","62":"#444d4d","63":"#f2bb3a","64":"#77d1ff","65":"#3ddeff","67":"#2cc15e","68":"#ffd877","72":"#ffbfad","74":"#e5d60b","76":"#40c3dd","78":"#f7e1af","80":"#3bdddd","81":"#a0dfff","82":"#d67259","83":"#ffab93","84":"#f2c04b","86":"#91503f","87":"#3cabc1","88":"#3db4cc","89":"#f7d585","90":"#723f32","91":"#ffb49e","92":"#f4cf53","93":"#ffbf0f","96":"#f2dca7","97":"#e2d92f","99":"#f4d05a","100":"#399eb2","104":"#4dcc77","105":"#f7da96","106":"#d35dac","107":"#ffd15e","108":"#3cd1d1","110":"#55ccb8","111":"#3aa2b7","112":"#bc782f","113":"#8cccc1","114":"#f7d68a","115":"#82ccbf","117":"#6acc8a","118":"#b2af07","119":"#ffd044","120":"#75d1ff","122":"#ef8064","123":"#37dbfc","124":"#c6499d","125":"#66cbff","126":"#ffc32d","129":"#66ccbb","130":"#f7dea3","131":"#fc957b","134":"#ffb5a0","138":"#84493a","141":"#8accc1","142":"#e5d609","143":"#45d9f7","146":"#d8cb17","147":"#f2dca4","149":"#d1ca06","150":"#ce8333","152":"#67afa3","154":"#f2bd43","156":"#ffcf3f","159":"#f79279","160":"#f29d43","162":"#e5d604","164":"#b2af01","165":"#75e5e5","166":"#ffc83f","167":"#ffbdaa","168":"#74c4ed","170":"#ccc50c","172":"#ffa78e","173":"#42cae5","174":"#a2dcf9","176":"#af702b","177":"#965342","178":"#f4bc04","179":"#51cc7a","180":"#d68733","181":"#3ac4e0","182":"#ffc021","183":"#f7d483","186":"#f2dda9","189":"#3eb766","190":"#72ccbd","192":"#f4927a","193":"#f7dc9e","194":"#d1ca04","195":"#fc976c","196":"#fc67ca","199":"#52e5e5","201":"#ffd366","202":"#ffca2d","203":"#ed9436","204":"#ffe7a0","206":"#74ccbd","207":"#33cc66","208":"#36d9f9","212":"#71e2e2","215":"#edd39c","216":"#d38634","217":"#ed9b44","219":"#ccc345","220":"#60e5e5","221":"#c96b54","223":"#ccc62a","224":"#34d0ef","225":"#ffd454","228":"#ea9a44","229":"#f4cf55","230":"#3bcece","231":"#a85c4a","232":"#ffad96","234":"#ffd97a","235":"#ffda7f","236":"#ffc61c","237":"#c6c00d","238":"#f2b935","239":"#ffc107","241":"#ffdf89","242":"#64e5e5","243":"#edca80","245":"#ccc863","246":"#ea7d62","247":"#c9489e","248":"#3fdbdb","250":"#edd5a3","251":"#2bc45e","253":"#ffca44","254":"#f7d380","256":"#ffc832","257":"#f7e0aa","259":"#ffd351","260":"#6bb6db","265":"#d8cb15","266":"#37cc68","267":"#378c9e","268":"#38c9b1","271":"#6bbaad","272":"#39c2dd","273":"#ffc32b","275":"#37ccb3","276":"#3fc1db","279":"#eab94f","280":"#eab84b","282":"#d37158","283":"#38c4c4","284":"#ffdb82","287":"#f7d588","291":"#f9be48","293":"#f49369","294":"#d149a3","295":"#f4cc49","296":"#63a096","297":"#ffe69e","298":"#ff9b70","300":"#f7a27e","303":"#f7a042","304":"#ccc241","305":"#88ccc0","306":"#eaba52","311":"#34ceed","312":"#d8cc1e","313":"#91daff","315":"#f9c04d","319":"#ff996d","320":"#4be5e5","321":"#ffcdbf","322":"#ddd75a","323":"#ffd263","324":"#e0785e","325":"#70e0e0","326":"#ffcf42","329":"#a4defc","330":"#69b2a6","331":"#67a1bf","332":"#57cc7e","333":"#ffbf11","335":"#ea8e77","336":"#ffc73a","337":"#76c9f2","338":"#7f4638","340":"#c16953","341":"#46defc","342":"#f7e1ad","343":"#68aed1","344":"#ff9367","347":"#c4be0d","348":"#6ab7aa","349":"#ffb805","350":"#639bb7","351":"#38bcff","352":"#ed63bf","354":"#f2bc3e","355":"#ffd154","356":"#f2da9d","357":"#e5d606","359":"#9bddff","361":"#ffc311","362":"#ffbb11","365":"#ffa58e","366":"#ffbe1c","367":"#ffb807","368":"#34c8e5","369":"#c1bb0d","371":"#ffbe0c","372":"#a3e0ff","373":"#774234","374":"#3995a8","375":"#d849a9","376":"#3daf63","377":"#ffe8a3","378":"#41cc6f","380":"#ffc823","385":"#ccc751","386":"#5bcc81","387":"#ccc85f","389":"#41bfd8","390":"#36bca6","391":"#edce8b","392":"#54e5e5","393":"#3baa60","394":"#36a9e2","395":"#ef9637","397":"#ffc72d","399":"#68a89d","401":"#ffcc4c","402":"#fc50c3","405":"#3a9aad","407":"#d17057","409":"#77e5e5","412":"#7ee5e5","413":"#b2af05","414":"#67acce","415":"#f2bf48","416":"#c66c55","417":"#5fccb9","419":"#69bfb0","422":"#f265c3","423":"#ffb90a","424":"#41bf6b","426":"#e861bb","427":"#56c6ff","428":"#80ccbf","430":"#389e5a","432":"#ffda7c","435":"#53ccb7","438":"#57e5e5","439":"#f9c252","440":"#ffc416","441":"#ffd259","442":"#6cccbc","443":"#ffa991","444":"#74c4ef","445":"#eadf07","446":"#ffc023","449":"#f7e3b4","450":"#4fcc79","451":"#ffb6a0","452":"#f99c39","453":"#75caf4","454":"#a55b48","456":"#99dcff","458":"#ff976b","459":"#3fcc6e","460":"#ffbd19","461":"#ccc62c","462":"#35d4f4","463":"#76ccbd","464":"#ffd04f","465":"#ccc861","466":"#3aa35d","467":"#ba7b37","470":"#ffe08c","473":"#ff916d","474":"#37bfa8","475":"#efab0b","476":"#ffa187","478":"#66a59b","479":"#efa802","480":"#754033","481":"#ccc859","484":"#6accbb","485":"#3cad62","486":"#f79b38","487":"#b2af08","488":"#f4cb44","490":"#edcf90","491":"#ffcc35","493":"#ccc855","494":"#43cc70","497":"#ea9335","498":"#44e5e5","499":"#edcc84","500":"#ffa791","501":"#39a0b5","503":"#c9c30c","504":"#ffa389","505":"#ffc430","507":"#f9a47f","508":"#63ccba","510":"#f2dfae","511":"#ffd56b","512":"#a35a47","513":"#e89843","514":"#ffd7cc","516":"#5be5e5","517":"#6bc689","518":"#ffc20c","519":"#ccc85d","520":"#3db6ce","528":"#f2da9f","529":"#ffd051","533":"#35cc67","535":"#dd765d","536":"#39a05c","537":"#f2be46","538":"#3fbad3","539":"#77cef9","540":"#3dbeff","541":"#ed9078","542":"#c14799","544":"#9b5544","545":"#8c4d3d","546":"#ffc10a","548":"#f4be0c","549":"#f7e2b2","550":"#3fbfff","553":"#edd49e","554":"#bf6852","555":"#55cc7d","556":"#368a9b","557":"#bc6651","559":"#ffcd4f","561":"#35cae8","562":"#efa907","563":"#ccc347","565":"#3dd3d3","568":"#59ccb8","570":"#ffce54","571":"#39c0db","572":"#e2da31","573":"#f2bb3c","574":"#93dbff","575":"#824739","576":"#e89135","578":"#82e5e5","579":"#68ccff","581":"#ffd256","582":"#ffdf87","584":"#45dbf9","586":"#e08d35","591":"#ffbc05","593":"#ff906b","594":"#84d6ff","595":"#41c16c","597":"#f24fbc","599":"#ddd75f","601":"#ffe18e","602":"#7be5e5","604":"#36c1aa","606":"#ff8e68","611":"#368ea0","612":"#5bc8ff","613":"#79e5e5","614":"#3ba55f","615":"#a5e1ff","616":"#d64aa7","617":"#ffc61e","618":"#3de5e5","619":"#e24ab0","620":"#c6833b","621":"#edcb82","622":"#59c7ff","623":"#3db565","624":"#f9bb3e","625":"#2bbc5b","627":"#ffcb30","628":"#f9a143","629":"#ffc228","631":"#edcd89","632":"#d8cc1c","635":"#efac0e","637":"#7fd4ff","638":"#35d2f2","639":"#ffcd3a","641":"#ffd9ce","642":"#ffbf1e","643":"#eab84d","644":"#ffc9ba","645":"#41ccb4","646":"#f9ba3b","647":"#cec80c","648":"#f4bd09","650":"#3cb1c9","652":"#ffc528","653":"#ce4aa2","656":"#f4bd07","657":"#5dad78","658":"#ff8c66","660":"#ffbba8","661":"#79d0fc","662":"#ffd559","665":"#ffe69b","666":"#ffd456","667":"#ffca47","671":"#f9c14f","672":"#7a4335","673":"#ffbd0a","674":"#ffde84","677":"#f4ca3f","678":"#659fbc","679":"#3ba5ba","680":"#ffa787","681":"#e87c61","682":"#e8a310","683":"#ffc730","684":"#f9bd45","686":"#ba4693","687":"#ba762e","688":"#eade02","690":"#fc9d37","693":"#e8a412","695":"#eadf04","696":"#f4c93d","697":"#ed7f63","698":"#efaa09","699":"#ffcfc1","701":"#ccc349","702":"#ed4eb8","704":"#ffd35b","706":"#2cc960","707":"#d85fb0","708":"#f4c835","709":"#935141","710":"#3fccb4","711":"#ffce3d","712":"#c46a54","713":"#41c5e0","716":"#8cd8ff","717":"#f765c6","720":"#38bed8","721":"#b2af00","722":"#2bbf5d","724":"#b74792","725":"#f2ba37","727":"#37c6af","729":"#f4cd4b","731":"#3fdfff","733":"#67bcae","734":"#43cce8","735":"#49c2ff","736":"#3bcccc","737":"#f2d896","740":"#f4c93a","744":"#edd5a1","746":"#ffc3b2","748":"#4fbff7","749":"#f2d99b","750":"#3cadc4","752":"#84ccc0","754":"#c67e31","755":"#f4cc46","757":"#f29179","758":"#379b59","759":"#ffa382","760":"#f2deab","762":"#ffe8a5","763":"#ddd75d","764":"#bf792f","765":"#f4bc02","767":"#42c0ff","768":"#e58d77","769":"#ffc535","770":"#62e5e5","771":"#5dcc82","772":"#3ca7bc","773":"#f4d15d","774":"#ffc519","775":"#e84cb4","776":"#45cc72","778":"#6cb8dd","779":"#dd8c35","780":"#edd093","783":"#ffc532","784":"#ffb9a5","785":"#ffd65b","787":"#3dccb4","789":"#80e5e5","790":"#649dba","791":"#f49f44","793":"#67afd3","796":"#40e5e5","797":"#f7dda0","798":"#47ccb5","799":"#ccc857","803":"#45ccb5","804":"#ffbd07","808":"#b2458e","809":"#dd4bad","810":"#a8e2ff","812":"#ffa37c","816":"#40bc69","818":"#6eccbc","819":"#68b1d6","821":"#d88934","823":"#44d7f4","824":"#cc5ba6","826":"#4fc4ff","827":"#3ed6d6","829":"#eabb54","830":"#f9b939","831":"#ffc005","832":"#ffd775","834":"#d18534","835":"#ffd260","837":"#c47d31","839":"#39bfbf","840":"#ffcd51","841":"#ffdd82","842":"#bf4897","843":"#e5d602","844":"#49e5e5","846":"#f74fbf","849":"#e88d76","850":"#f4a07c","851":"#ffaf99","855":"#ffc928","856":"#63cbff","857":"#f4d058","858":"#c45aa1","861":"#30cc64","863":"#c95ca5","864":"#ffd059","865":"#47cc73","867":"#f9b834","868":"#edc97b","869":"#ffca2b","870":"#f4c838","871":"#ffc942","872":"#3cb263","874":"#ffb29b","875":"#ffbd16","876":"#f2d898","877":"#ccc62e","878":"#ffd468","879":"#ccc243","880":"#e25fb7","881":"#ffd1c4","883":"#f9937a","885":"#f29837","888":"#e2da34","889":"#379957","892":"#e2795f","893":"#5faf79","894":"#ffc721","895":"#ffc30f","896":"#65a398","898":"#efa904","899":"#4fccb7","901":"#2bc65f","902":"#ffc83d","906":"#5bccb9","908":"#eab748","909":"#ffb39e","911":"#8e4e3e","913":"#ff9f84","915":"#89d7ff","916":"#edd29a","917":"#6ccc8c","919":"#f2c04d","920":"#3dcc6c","921":"#44d1ed","925":"#ce6e56","926":"#d15eaa","927":"#e59744","928":"#fca580","929":"#39c6c6","931":"#6cc98b","934":"#41c8e2","935":"#6bcdff","936":"#ffd147","937":"#874a3b","938":"#5ec9ff","940":"#f49938","941":"#3fba68","942":"#e060b5","944":"#edc97d","945":"#7cccbe","946":"#5caa76","951":"#a05846","953":"#ffc1af","954":"#ffa57f","955":"#ffa58c","956":"#ffc62b","957":"#ffcf56","959":"#50c3fc","963":"#f7dfa8","964":"#db755c","965":"#82d5ff","966":"#ffd34f","969":"#3db0c6","970":"#38bcbc","971":"#54e2ff","972":"#44c0ff","973":"#f7db99","977":"#ffc5b5","978":"#ffba0c","980":"#ffbb0f","981":"#cc8233","982":"#ccc23f","983":"#ffcc32","989":"#ffc935","991":"#db8a34","992":"#ffa584","993":"#f9bd43","995":"#edcf8e","996":"#37baba","997":"#66aacc","998":"#43ccb5","999":"#3eb8d1","1000":"#db5eb1","1002":"#3de2e2","1004":"#37ade8","1005":"#36c4ac","1006":"#d8cc1a","1007":"#54c6ff","1008":"#aa5e4b","1009":"#ef8f77","1010":"#4fc1f9","1011":"#1c2626","1012":"#a5e1ff","1013":"#a5e1ff","1014":"#a5e1ff","1015":"#a5e1ff","1016":"#47cc74","1017":"#47cc75","1018":"#47cc76","1019":"#47cc77","1020":"#47cc78","1021":"#f99c40","1022":"#f99c41","1023":"#ff9368","1024":"#8b51ff","1025":"#8d54ff","1026":"#894fff","1100":"#3ce0e0"},"name":"seg2"}],"showDefaultAnnotations":false,"sliceAngleRotaX":"'+Gt[0]+'","sliceAngleRotaY":"'+Gt[1]+'","sliceAngleRotaZ":"'+Gt[2]+'","selectedLayer":{"visible":true,"layer":"seg2"},"crossSectionBackgroundColor":"#ffffff","projectionBackgroundColor":"#ffffff","layout":"hzkdPanel"}';window.open(Cn,"_blank")},300);else if(Ne.current==1)je=parseInt(((zt+8)/13.9919970598834*700).toString()),window.open("http://"+de.current+"/STAM/reference/index.html?lang=en_us&3Dname="+ut+"&inp="+je+"§ion=coronal");else if(Ne.current==2){let It=Nt;Nt<0&&(It=-Nt),je=parseInt((It/5.17*256).toString()),Nt==0&&(je=1),window.open("http://"+de.current+"/STAM/reference/index.html?lang=en_us&3Dname="+ut+"&inp="+je+"§ion=sagittal")}else Ne.current==3&&(je=parseInt(((Lt+5.33)/7.37*367).toString()),window.open("http://"+de.current+"/STAM/reference/index.html?lang=en_us&3Dname="+ut+"&inp="+je+"§ion=horizontal"))},el=(_e,$e,je,ut,It,Gt,an,un,cn,cr,Cn)=>{let Qn=new URL(window.location.href),ci=new URLSearchParams(Qn.search).get("atlasReslicingInfo"),Hr={};ci&&(Hr=JSON.parse(ci)),Hr.angleX=_e,Hr.angleY=$e,Hr.angleZ=je,Hr.positionZ=Gt,Hr.positionX=ut,Hr.positionY=It,Hr.translateX=an,Hr.translateY=un,Hr.translateZ=cn,Hr.ButtonDisabled=Cn,Hr.rotate=cr,Hr.direction1=Ne.current,Ka.atlasReslicingInfo=Hr,mt(_e),fn($e),Ct(je),Qt(Gt),Dt(ut),Xt(It),Yt(an),en(un),In(cn),Or(cr),bn(Cn)},fs=(_e,$e=!1)=>{Se.current.remove(yl.current);let je=yl.current.position;if($e&&K7){let It=JSON.parse(K7);je=new Ie(It.positionX,It.positionY,It.positionZ)}let ut=_e;if(Yl(ut),ut==1){Oe.current.enabled=!1,Se.current.remove(Oe.current),uc(0),Ne.current=1,el(90,0,0,-5.17,-5.33,je.z,!0,!0,!1,!0,!1);const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");It&&(It.position.y=je.y,Se.current.remove(It),Dn(!1)),Gt&&(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)),an&&(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1)),un?(un.position.z=je.z,Se.current.remove(un),ei(!1)):ei(!0)}else if(ut==2){uc(0),Oe.current.enabled=!1,Se.current.remove(Oe.current),el(90,270,0,je.x,-5.33,-8,!1,!0,!0,!0,!1),Ne.current=2;const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");Gt?(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)):Nn(!0),It&&(It.position.y=je.y,Se.current.remove(It),Dn(!1)),un&&(un.position.z=je.z,Se.current.remove(un),ei(!1)),an&&(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1))}else if(ut==3){Oe.current.enabled=!1,Se.current.remove(Oe.current),el(360,0,0,-5.17,je.y,-8,!0,!1,!0,!0,!1),Ne.current=3,uc(0);const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");Gt&&(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)),un&&(un.position.z=je.z,Se.current.remove(un),ei(!1)),an&&(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1)),It?(It.position.y=je.y,Se.current.remove(It),Dn(!1)):Dn(!0)}else if(ut==4){Ne.current=4,Se.current.remove(Oe.current),el(120,320,270,je.x,je.y,je.z,!1,!1,!1,!1,!1);const It=Se.current.getObjectByName("HorizontalView"),Gt=Se.current.getObjectByName("SagittalView"),an=Se.current.getObjectByName("arbitrarySlice"),un=Se.current.getObjectByName("CoronalView");Gt&&(Gt.position.x=je.x,Se.current.remove(Gt),Nn(!1)),un&&(un.position.z=je.z,Se.current.remove(un),ei(!1)),It&&(It.position.y=je.y,Se.current.remove(It),Dn(!1)),an?(an.position.set(je.x,je.y,je.z),Se.current.remove(an),ui(!1)):ui(!0)}},ou=_e=>{var $e=Zv(_e,bl.current);if(A.includes(_e)){_.current.removeFBX(_e,!0);const je=_.current.checkedKeys.current.findIndex(an=>an===_e);je>-1&&_.current.checkedKeys.current.splice(je,1),Q(_.current.checkedKeys.current);let ut=new URL(window.location.href),It=new URLSearchParams(ut.search);const Gt=JSON.stringify(_.current.checkedKeys.current);It.set("regionsChecked",Gt),ut.search=It.toString(),window.history.replaceState({},"",ut),_&&_.current.checkedKeys.current.length==0?_.current.setExpandedKeys(_.current.defexpandedKeys.current):$e.forEach(an=>{_.current.setExpandedKeys(un=>un.filter(cn=>cn!==an))})}else if(_e){let je=_e.replace("/","_");const ut=_.current.fetchColor(_e);if(ut){let It=n+"/data/FBX/"+je+".FBX";Td(It,_e,ut,.8,0,"FBX"),_.current.checkedKeys.current.push(_e);const Gt=Array.from(new Set([..._.current.expandedKeys,...$e]));_.current.setExpandedKeys(Gt),Q(_.current.checkedKeys.current);let an=new URL(window.location.href),un=new URLSearchParams(an.search);const cn=JSON.stringify(_.current.checkedKeys.current);un.set("regionsChecked",cn),an.search=un.toString(),window.history.replaceState({},"",an)}}Te({})},hp=_e=>{var $e=Zv(_e,bl.current);if(A.includes(_e)){_.current.removeFBX(_e,!0);const je=_.current.checkedKeys.current.findIndex(ut=>ut===_e);je>-1&&_.current.checkedKeys.current.splice(je,1),Q(_.current.checkedKeys.current),_&&_.current.checkedKeys.current.length==0?_.current.setExpandedKeys(_.current.defexpandedKeys.current):$e.forEach(ut=>{_.current.setExpandedKeys(It=>It.filter(Gt=>Gt!==ut))})}else if(_e){let je=_e.replace("/","_");const ut=_.current.fetchColor(_e);if(ut){let It=n+"/data/FBX/"+je+".FBX";Td(It,_e,ut,.8,0,"FBX"),_.current.checkedKeys.current.push(_e);const Gt=Array.from(new Set([..._.current.expandedKeys,...$e]));_.current.setExpandedKeys(Gt),Q(_.current.checkedKeys.current)}}Te({})},Ju=_e=>{var $e;if(A.includes(_e)){_.current.removeFBX(_e,!0);const je=_.current.checkedKeys.current.findIndex(an=>an===_e);je>-1&&_.current.checkedKeys.current.splice(je,1),Q(_.current.checkedKeys.current);let ut=new URL(window.location.href),It=new URLSearchParams(ut.search);const Gt=JSON.stringify(_.current.checkedKeys.current);It.set("regionsChecked",Gt),ut.search=It.toString(),window.history.replaceState({},"",ut)}else if(_e){const je=_.current.fetchColor(_e.replace("_","/"));let ut=n+"/data/FBX/"+_e.replace("/","_")+".FBX";Td(ut,_e,je,.8,0),_.current.checkedKeys.current.push(_e),Q(_.current.checkedKeys.current);let It=new URL(window.location.href),Gt=new URLSearchParams(It.search);const an=JSON.stringify(_.current.checkedKeys.current);Gt.set("regionsChecked",an),It.search=Gt.toString(),window.history.replaceState({},"",It)}($e=f.domElement)==null||$e.addEventListener("mousemove",K.current,!1)},ev=_e=>{if(_e in Ce.current.neurons_line.current){Ce.current.removeSWCAll(_e),Ce.current.setCheckItems(It=>It.filter(Gt=>Gt!==_e)),Ce.current.setPathOpen(It=>It.filter(Gt=>Gt!==_e));let $e=new URL(window.location.href),je=new URLSearchParams($e.search);const ut=JSON.stringify(Ce.current.checkItems.filter(It=>It!==_e));if(je.set("neuronsChecked",ut),$e.search=je.toString(),window.history.replaceState({},"",$e),_e in pe.current){for(let It in pe.current[_e])Se.current.remove(pe.current[_e][It]);delete pe.current[_e]}}},tv=()=>{if(!Os.current){Js(!0);return}const _e=document.createElement("a");_e.href=n+"/zip/9.8.label.zip",_e.download="9.8.label.zip",_e.click();let $e=new URL(window.location.href),ut=new URLSearchParams($e.search).get("type");const It=window.location.origin+window.location.pathname+`?type=${ut}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:It,time:0,key:ga.current})})},kg=(_e,$e)=>{for(let je of _e){if(je.name.toLowerCase()===$e.toLowerCase())return{color:je.color,path:je.path,fullname:je.fullname};if(je.children){const ut=kg(je.children,$e);if(ut)return ut}}return null},sf=(_e,$e)=>{for(let je of _e){if(je.name.toLowerCase()===$e.toLowerCase()&&!je.children)return{color:je.color,path:je.path};if(je.children){const ut=sf(je.children,$e);if(ut)return ut}}return null},Ug=(_e,$e)=>{const je=[];for(const ut in _e)_e[ut].includes($e)&&je.push(ut);return je},nn=(_e,$e=[])=>{if(Array.isArray(_e))for(let je of _e)nn(je,$e);if(typeof _e=="object")if(_e.hasOwnProperty("children"))nn(_e.children,$e);else return _e.name&&$e.push(_e.name),_e.name},pc=(_e,$e,je=[])=>{if(Array.isArray(_e))for(let ut of _e)pc(ut,$e,je);typeof _e=="object"&&(_e.hasOwnProperty("children")&&pc(_e.children,$e,je),_e.name===$e&&(_e.hasOwnProperty("children")?nn(_e.children,je):_e.name&&je.push(_e.name)))},Bc=_e=>{if(_e in ae.current.vesselObj.current){ae.current.setCheckItems(It=>It.filter(Gt=>Gt!==_e)),ae.current.removeVessel(_e);let $e=new URL(window.location.href),je=new URLSearchParams($e.search);const ut=JSON.stringify(ae.current.checkItems.filter(It=>It!==_e));je.set("vesselsChecked",ut),$e.search=je.toString(),window.history.replaceState({},"",$e)}},xh=_e=>()=>{io(_e),Ue(_e)};function Fg(_e,$e){return[...new Set([..._e,...$e])]}const qr=_e=>{const $e=[],je=[];if(ae.current&&_.current){const ut=ae.current,It=_.current;pc(ut.treeDatas,_e,$e);const Gt=Lc.current.indexOf(_e);if(Gt!==-1){Lc.current.splice(Gt,1),$e.forEach(Cn=>{je.push(Ug(Al,Cn))});const an=je.reduce((Cn,Qn)=>Fg(Cn,Qn),[]);let un=A;an.forEach(Cn=>{sf(It.treeDatas,Cn)!=null&&(un=un.filter(Nr=>Nr!==Cn),It.removeFBX(Cn,!0))}),Q(un);let cn=new URL(window.location.href),cr=new URLSearchParams(cn.search);cr.set("regionsChecked",JSON.stringify(un)),cn.search=cr.toString(),window.history.replaceState({},"",cn),Lc.current.length===0&&It.setExpandedKeys(It.defexpandedKeys.current)}else{Lc.current.push(_e),$e.forEach(Qn=>{je.push(Ug(Al,Qn))});const an=je.reduce((Qn,Nr)=>Fg(Qn,Nr),[]),un=Array.from(new Set([...It.expandedKeys,...an]));It.setExpandedKeys(un);let cn=[...A];an.forEach(Qn=>{const Nr=sf(It.treeDatas,Qn);if(Nr!=null){const ci=`${n}/data/FBX/${Qn}.FBX`;cn.push(Qn),It.LoadFBX(ci,Qn,Nr.color,.8,0)}}),Q(cn);let cr=new URL(window.location.href),Cn=new URLSearchParams(cr.search);Cn.set("regionsChecked",JSON.stringify(cn)),cr.search=Cn.toString(),window.history.replaceState({},"",cr)}}},On=(_e,$e)=>{for(let je in _e)if(_e[je].name===$e){if(_e[je]["2D"])return $e;{const ut=Hm($e,pr);return On(pr,ut)}}else if(_e[je].children){const ut=On(_e[je].children,$e);if(ut)return ut}return null},fi=S.useMemo(()=>(Er==3||Er==4)&&!(X||be)?[Er==3&&Xc!=1?{key:"3",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(1),te(!0)}},a("5000.6025")||"切换到冠状面")}:null,Er==3&&Xc!=2?{key:"4",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(2),te(!0)}},a("5000.6026")||"切换到矢状面")}:null,Er==3&&Xc!=3?{key:"5",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(3),te(!0)}},a("5000.6027")||"切换到水平面")}:null,Er==3&&Xc!=4?{key:"6",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{fs(4),te(!0)}},a("5000.6028")||"切换到任意面")}:null,ye.brains?{key:"1",label:S.createElement("a",{target:"_blank",type:"primary",onClick:()=>{dd(ye.brains,Er==4),te(!0)}},a("5000.6018")||"查看更高分辨率图像")}:null,ye.brains?{key:"2",label:S.createElement("a",{target:"_blank",onClick:()=>{ou(ye.brains),te(!0)}},_.current.checkedKeys.current.includes(ye.brains)?a("5000.6023",{name:ye.brains})||`隐藏${ye.brains}的三维形貌`:a("5000.6024",{name:ye.brains})||`显示${ye.brains}的三维形貌`)}:null]:X||be?[X?{key:"1",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:()=>{Ju(X),te(!0)}},_.current.checkedKeys.current.includes(X)?a("5000.5056")||"隐藏核团":a("5000.5057")||"显示核团")}:null,Er!=7&&Er!=2&&(wt.length==0||wt.includes("neurons"))&&be?{key:"3",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{uo(7),te(!0),setTimeout(()=>{io(X),Ue(X),V(!1),rn(1)},50)}},a("5000.6015")||"查询位于或投射到该结构的神经元")}:null,be?{key:"6",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{const _e=Se.current.getObjectByName(be);if(_e){const $e=new ps().setFromObject(_e),je=new Ie;$e.getCenter(je),p.current.target.copy(je),te(!0)}}},a("7000.7019")||"设置为焦点")}:null,be&&Er==5?{key:"5",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{const _e=new ps,$e=Se.current.getObjectByName(be);if($e){_e.expandByObject($e.clone());let je=_e.min,ut=_e.max,It=new Ie;_e.getCenter(It);const Gt=ut.x-je.x,an=ut.y-je.y,un=ut.z-je.z;gt.current.scale.x=Gt,gt.current.scale.y=an,gt.current.scale.z=un,gt.current.position.set(It.x,It.y,It.z);const cn=gt.current.geometry.clone();cn.scale(gt.current.scale.x,gt.current.scale.y,gt.current.scale.z),cn.translate(It.x,It.y,It.z);const cr=new m4(cn);Hn.current.geometry=cr,Se.current.remove(Lr.current);const Cn=a("5000.0006")||"显示数据块";if(tr===Cn){vr(a("5000.0007")||"隐藏数据块"),Oe.current=new t_(Bi.current,f==null?void 0:f.domElement),Oe.current.setMode("translate"),Oe.current.enabled=!0,Oe.current.visible=!0,Oe.current.name="transformControls",Oe.current.attach(gt.current),Se.current.add(gt.current,Oe.current,Hn.current),bT(),document.addEventListener("keypress",Ub);const Qn=new ps;Qn.expandByObject(gt.current);const Nr=R.current(Qn.min.clone()),ci=R.current(Qn.max.clone());let Hr=new _p(jm(650,620,`${Nr.x.toFixed(2)},${Nr.y.toFixed(2)},${Nr.z.toFixed(2)}`,"#ccc")),oi=new Xf(new bf({map:Hr}));oi.name="startText";let xo=new _p(jm(650,620,`${ci.x.toFixed(2)},${ci.y.toFixed(2)},${ci.z.toFixed(2)}`,"#ccc")),Mr=new Xf(new bf({map:xo}));Mr.name="endText",oi.position.set(Qn.min.x,Qn.min.y+.2,Qn.min.z),Mr.position.set(Qn.max.x,Qn.max.y+.6,Qn.max.z);const Ii=Se.current.getObjectByName("startText"),Zi=Se.current.getObjectByName("endText");Ii&&Zi&&Se.current.remove(Ii,Zi),Se.current.add(Lr.current,oi,Mr)}te(!0),Te({})}}},a("5000.6022",{lableStr:be})||"设置 "+be+" 的包围盒为下载范围")}:null].filter(_e=>_e!==null):oe?[{key:"1",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{Ce.current.showSwctext(oe),te(!0)}},oe in pe.current?a("5000.5060")||"隐藏文字":a("5000.5061")||"显示文字")},{key:"2",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{ev(oe),te(!0)}},a("5000.6004")||"隐藏该神经元")}]:re?[{key:"1",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{qr(re),te(!0)}},Lc.current.includes(re)?a("5000.0209")||"Hide Label":a("5000.0208")||"Show Label")},{key:"2",label:S.createElement("a",{target:"_blank",style:{width:"150px",textAlign:"center"},onClick:_e=>{Bc(re),te(!0)}},a("5000.6021")||"隐藏该分支")}]:dt.Lable?[{key:"1",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{if(dt.name){const _e=Se.current.getObjectByName(dt.name);if(_e){const $e=new ps().setFromObject(_e),je=new Ie;$e.getCenter(je),p.current.target.copy(je),te(!0)}}}},a("7000.7019")||"设置为焦点")},{key:"2",label:S.createElement("a",{style:{width:"150px",color:"#000",textAlign:"center"},onClick:()=>{dt.Lable&&Ju(dt.Lable),te(!0)}},_.current.checkedKeys.current.includes(dt.Lable)?a("5000.6023",{name:dt.Lable})||`隐藏${dt.Lable}的三维形貌`:a("5000.6024",{name:dt.Lable})||`显示${dt.Lable}的三维形貌`)}]:[],[X,re,oe,be,Er,$s,ye,Uo,dt]),Vl=_e=>{_e=_e.replace(/[\[\]]/g,"\\$&");var $e=new RegExp("[?&]"+_e+"(=([^&#]*)|&|#|$)"),je=$e.exec(window.location.href);return je?je[2]?decodeURIComponent(je[2].replace(/\+/g," ")):"":null},Hm=(_e,$e)=>{let je="";for(let ut in $e){const It=$e[ut];if(It.children){if(It.children.some(Gt=>Gt.name===_e)){je=It.name;break}else if(Hm(_e,It.children)){je=Hm(_e,It.children);break}}}return je},C1=()=>{let _e=new URL(window.location.href),$e=new URLSearchParams(_e.search);const je=Math.ceil((performance.now()-Fc.current)/1e3)-1;Fc.current=performance.now();let ut=$e.get("type");if(ut){const It=window.location.origin+window.location.pathname+`?type=${ut}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:It,time:je})})}},lf=(_e,$e,je)=>{let ut=new URL(window.location.href),It=new URLSearchParams(ut.search);const Gt=Math.ceil((performance.now()-Fc.current)/1e3)-1;let an=It.get(_e);if(an&&!je){Fc.current=performance.now();const cn=window.location.origin+window.location.pathname+`?${_e}=${an}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:cn,time:Gt})})}It.set(_e,$e),ut.search=It.toString(),window.history.replaceState({},"",ut);const un=window.location.origin+window.location.pathname+`?${_e}=${$e}`;fetch("/app-api/java-api/brainsweb-service/record/list",{method:"post",body:JSON.stringify({href:un,time:0})})},nv=(_e,$e,je)=>{if($e)switch(parseInt(_e)){case 0:document.title="STAM-SimpleViewer",lf("type","simple",je);break;case 1:document.title="STAM-NormalViewer",lf("type","normal",je);break;case 2:document.title="STAM-Surgery",lf("type","virtual",je);break;case 3:document.title="STAM-Reslicing",lf("type","slicing",je);break;case 4:document.title="STAM-Registration",lf("type","registration",je);break;case 5:document.title="STAM-Downloading",lf("type","downloading",je);break;case 6:document.title="STAM-AtlasMapping",lf("type","mapping",je);break;case 7:document.title="STAM-Connectivity",lf("type","circuits",je);break;case 8:document.title="STAM-OtherAtlas",lf("type","other",je);break;case 9:document.title="STAM-ViewSetting",lf("type","setting",je);break;case 10:document.title="STAM-neuronRegistration",lf("type","neuronRegistration",je);break;case 11:document.title="STAM-CloudChart",lf("type","cloudChart",je);break;case 12:document.title="STAM-FunctionalLoop",lf("type","functionalLoop",je);break}};S.useEffect(()=>{ye.brains&&Go(On(pr,ye.brains))},[ye]),S.useEffect(()=>{be&&So(On(pr,be)),g(fi),ql.current=h},[h,X,A,re,be,oe,Er,we,ye,Uo,dt]);const _h=async _e=>{ko(_e.url||_e.preview),pa(!0)},x1=(_e,$e)=>{const je=new FormData;je.append("file",_e.file),fetch("/app-api/up-api/update",{method:"post",body:je}).then(ut=>ut.json()).then(ut=>{if(ut.code===200)if(nc.success("update success"),$e===2){const It=ds.findIndex(Gt=>Gt.key===Qs[0]);if(It>-1){let Gt=JSON.parse(JSON.stringify(Xs.current)),an=Gt[It];an.fileList2=[{url:"data:image/png;base64,"+ut.base64_url}],fc(Gt),Xs.current=Gt}}else{const It=ds.findIndex(Gt=>Gt.key===Qs[0]);if(It>-1){let Gt=JSON.parse(JSON.stringify(Xs.current)),an=Gt[It];an.fileList=[{url:"data:image/png;base64,"+ut.base64_url}],an.correspondingPlaneData={},an.filename=ut.path,fc(Gt);const un=Se.current.children.filter(cn=>cn.userData.name==="registrationPng");un&&Se.current.remove(...un),Xs.current=Gt}Kn.current=ut.path}else ut.message&&$o.error({content:ut.message})})},gT=(_e,$e)=>{if(_e.file.size/1024/1024>=100){$o.confirm({title:"File Check",content:a("5000.7050")||"Please down-sample the slice image to ~10μm/pixel before uploading",okText:"Yes",cancelText:"No",onOk:()=>x1(_e,$e),onCancel:()=>{nc.info("Upload canceled")}});return}else x1(_e,$e)},Va=async(_e,$e)=>{const je=_e.type==="image/tiff"||_e.type==="image/tif",ut=_e.name.endsWith(".swc");let It,Gt;return await new Promise(un=>{if(je){const cn=new FileReader;cn.readAsArrayBuffer(_e),cn.onload=async cr=>{var Cn;if((Cn=cr.target)!=null&&Cn.result){const Qn=cr.target.result;if(Qn instanceof ArrayBuffer){const ci=await(await kCe(Qn)).getImage(),Hr=ci.getWidth(),oi=ci.getHeight();if(!$e){const xo=ds.findIndex(Mr=>Mr.key===Qs[0]);if(xo>-1){let Mr=JSON.parse(JSON.stringify(ds)),Ii=Mr[xo];Ii.firstRegistrationImg={width:Hr,height:oi},fc(Mr),Xs.current=Mr}}if($e===2){const xo=ds.findIndex(Mr=>Mr.key===Qs[0]);if(xo>-1){const{firstRegistrationImg:Mr}=ds[xo];(Mr.width!==Hr||oi!==Mr.height)&&(nc.error("The size of the second TIFF image needs to be consistent with the first one!"),un(!1))}}un(!0)}}}}else un(!0)}).then(un=>un?(Er==6?(It=je||ut,Gt="You can only upload tif or swc files!"):(It=je,Gt="You can only upload tif files!"),It||nc.error(Gt),It):!1)},_1=(_e,$e)=>{const je=new FormData;je.append("file",_e.file),console.log(_e.file),_e.file.name.split(".")[1]=="swc"?ud(!0):ud(!1),fetch("/app-api/d-api/upload",{method:"post",body:je}).then(ut=>ut.json()).then(ut=>{ut.code===200?(nc.success("update success"),$e===2?no([{url:"data:image/png;base64,"+ut.base64_url}]):(Gi([{url:"data:image/png;base64,"+ut.base64_url}]),$a({}),Kn.current=ut.path)):ut.message&&$o.error({content:a("5000.0003")||"上传失败,请联系管理员"})})},w1=_e=>{const $e=Bi.current.position;let je=new Ie(..._e.geometry.attributes.position.array),ut=_e.position.clone().add(je);$e.distanceTo(ut)>8?_e.visible=!1:_e.visible=!0},tl=_e=>{const $e="green",je=_e.split("/").pop();let ut={};const It=[];Se.current.traverse(Gt=>{Gt.userData.isAtlasMapping==="true"&&It.push(Gt)}),It.forEach(Gt=>{Se.current.remove(Gt)}),fetch(_e).then(Gt=>Gt.json()).then(Gt=>{let an=Wa.current,un=yo.current,cn=oo.current,cr=new Po;const Cn=new Qc;Gt.line.forEach((Mr,Ii)=>{var Zi=Gt.position[Mr.end],ki=Gt.position[Mr.start];let la=new Ni,Aa=[];Aa.push(Zi.x*.01,Zi.y*.01,Zi.z*.01),la.setAttribute("position",new sa(Aa,3));let Ns=new sh({glslVersion:Jf,uniforms:{color:{value:new Cr($e)},scale:{value:window.innerHeight/2},size:{value:.1},opacity:{value:1}},vertexShader:`
|
|
5093
5093
|
precision highp float;
|
|
5094
5094
|
in vec3 position;
|
|
5095
5095
|
uniform mat4 modelMatrix;
|